OMC version 5.1.0 #24
abra-code
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
OMC 5.1
OMC 5 requires macOS 14.6 or later. For older macOS versions, use OMC 4.x.
OMC 5.1 is a feature release focused on making applets easier for both people and AI agents to author: command manifests and menu bars move to JSON, the applet builder gains a headless command-line front end, and a family of new ActionUI dialog elements (Quick Look, Chat, rich text, diff, cached image, toast) becomes available to dialogs. It also lands several runtime correctness fixes and a security hardening of the engine's inter-process files.
Highlights
Command.json replaces Command.plist
Applet command manifests are now authored as
Command.json. JSON is 1:1 equivalent to the old plist, is far friendlier to AI agents and to hand editing, and diffs cleanly in source control.Command.jsonbeforeCommand.plistwhen loading an applet, preferring JSON when both are present. ExistingCommand.plistapplets keep working unchanged.Command.json, ships JSON templates, and branches command editing and validation on the file format.Command.jsonand other non-ActionUI JSON, so command manifests are no longer mistaken for UI files.MainMenu.json replaces MainMenu.nib
Applet menu bars can now be described in
MainMenu.json, powered by ActionUI, instead of a compiledMainMenu.nib. The JSON describes modifications to the default app menu bar that ActionUI constructs: menus and items can be added, modified, or removed by targeting a standard item withreplacing.MainMenu.json, and new applets are created withMainMenu.json.MainMenu.jsonformat and a step-by-step guide for converting an applet fromMainMenu.nibtoMainMenu.json.Help viewer rebuilt on ActionUI
The applet Help viewer was switched from a nib to an ActionUI window using a new WebView implementation that is stable on macOS 14.6 and no longer crashes.
AppletBuilder agent CLI
AppletBuilder now bundles a command-line front end,
Contents/Resources/Agents/appletbuilder, that drives the same create / validate / build / prettify / preview / list operations as the GUI. It shares the GUI's build, create, and validation logic through a single source of truth (a reporter indirection over the shared shell libraries), so headless builds and interactive builds behave identically. This makes AppletBuilder scriptable and usable by AI agents.New dialog elements and controls
New ActionUI elements
Abracode.framework now links and registers additional ActionUI add-on elements, so OMC dialogs can use:
The bundled ActionUIViewer preview tool and the JSON verifier schemas were updated so dialogs using the new elements preview and validate out of the box.
Toasts: omc_present_toast / omc_dismiss_toast
omc_dialog_controlgained two verbs for transient, non-modal feedback:omc_present_toast <message> [duration_seconds] [action_title] [action_id]- shows a top-pinned snackbar that fades in, stays a few seconds (4 by default), then auto-dismisses. Supplying bothaction_titleandaction_idadds one inline button that dispatches the given subcommand when tapped.omc_dismiss_toast- dismisses it early.Use a toast for unobtrusive "done" feedback that does not steal focus the way an alert does.
Programmatic Table/List row selection
omc_dialog_controlcan now select a Table or List row from a script without overwriting the rows (previously the only way to "select" was to set the control value, which replaced all rows with a single string):omc_select_row <0-based index>- select by index (out of range clears the selection).omc_select_row_with_content <text> [1-based column]- select the first row whose column equals the text (exact, case-sensitive; omit the column or pass 0 to match any column).omc_deselect- clear the selection.The verbs work on both Table and List, on both the ActionUI and legacy Nib window paths, and fire no selection
actionID.Windows respect SwiftUI content size limits
ActionUI dialog windows now respect the content's SwiftUI minimum and maximum size limits, so dialogs no longer resize past what their content supports.
Runtime fixes
act_file/act_folder/act_file_or_folder) withUSE_NAV_DIALOG_FOR_MISSING_FILE_CONTEXT=falsewould silently fail to run when launched with no file context. Explicit command execution now bypasses the activation match that is only meant for contextual-menu / service population; contextual menus, OMCService, and the test app keep the previous gating.<NAME>.mainandmain. An explicitCOMMAND_ID=<NAME>.mainnow behaves exactly like a missing command id, andNEXT_COMMAND_ID/ subcommand references can address the main command by<NAME>.main,main, or the legacytop!. This fixes applets that set an explicit main-command id and then failed to launch or chain to themselves. The command verifier recognizes the main command declared either way.INPUT_DIALOG(includinginput_password_text) is now carried into the per-object runtime data copy, so a subcommand in a chain receives it viaOMC_DLG_INPUT_TEXTinstead of an empty value.DEFAULT_LOCATIONof~(or any path with a tilde) in the choose-file, choose-folder, and choose-object dialogs now opens at the intended directory instead of the disk root.Security and robustness
omc_dialog_controldialog values,omc_next_commandchaining) were written to a world-writable/tmp/OMCdirectory with no sticky bit, which allowed a local user to delete, replace, or redirect them, and the create sequence was TOCTOU-exploitable via a pre-planted symlink. All four touch points now resolve one path helper that builds<per-user temp dir>/OMC/<leaf>and creates theOMCsubdirectory mode 0700, private to the user. This works correctly across processes, including under the App Sandbox, because the tools inherit the app's$TMPDIR.omc_popennow marks a pipe file descriptor close-on-exec.OmcHostTaskManageron the throw path, plus additional low-severity robustness hardening and correctness fixes surfaced in review.Tooling and packaging
--briefmode, and supports an entitlements override. This is the recommended way to deep-sign a built applet (replacing the deprecatedcodesign --deep).update_appletbuilder.shfixes and rework to build the add-on-aware ActionUIViewer and bundle the new ActionUI add-on documentation and verifier schemas; Python is no longer updated by default..profrawcoverage files are left in the applet bundle.DIALOG_IDENTIFIER,DEFAULT_LOCATION).In this distribution
~/Library/Preferences/com.abracode.OnMyCommandCMPrefs.plist.codesign_applet.sh,install_contextual_menu_plugin.sh,thin_distribution.sh,OMCApplet.entitlements, and the examplecom.abracode.OnMyCommandCMPrefs.plist.See the main OMC README at https://github.com/abra-code/OMC/ for full documentation on commands, runtime context, dialogs, and services.
This discussion was created from the release OMC version 5.1.0.
All reactions