Skip to content

v0.8.3

Choose a tag to compare

@github-actions github-actions released this 22 Jul 13:25
· 219 commits to main since this release

Modules grow up. Until now an extension could run commands and push rows into a sidebar, but it could not reach the parts of bohay you actually use: the right-click menus, the settings screen, tabs. This release opens all of that up while keeping the idea intact, which is that a module is a directory with a manifest and some commands in whatever language you like. There is also a community index at bohay.dev/modules, and agent names now come from the process a pane is running instead of words on its screen. Fully compatible with v0.8.2, nothing to migrate.

✨ Added

  • Modules can add right-click actions. An action that declares contexts = ["pane"], ["workspace"], or ["agent"] shows up in that menu, below a divider under the built-in items. The action runs against what you clicked, not whatever happened to be focused, so right-clicking a background node hands your script that node's folder. A pane action also receives the text you had selected, which is what makes "do something with this" possible from a shell script. (#17)
  • Modules can declare settings, and bohay renders them. A [[settings]] block describes typed controls (a toggle, a text field, a number with bounds, a list of choices) and they appear in Settings → Modules indented under your module. You write no interface code. Values arrive in your command as BOHAY_SETTING_<KEY>, one plain variable per setting, so a bash module never has to parse JSON to read its own configuration. Anything marked secret shows as bullets and is never echoed back. (#17)
  • Startup hooks. A [[startup]] command runs once for each enabled module when the session is restored and the socket is listening, and again when you link or re-enable a module. This is how a module repaints its sidebar dock after a restart, and it is what makes a dock feel like part of the app rather than something you have to re-trigger by hand. (#17)
  • Sidebar dock rows are properly clickable. A row can now carry a value, handed to its action as BOHAY_MODULE_ROW_VALUE. One action can therefore back a whole list: push a row per git branch and a single checkout action serves all of them. Before this a row could trigger an action but had no way to say which row you clicked. (#17)
  • New API for modules to reach tabs and the UI. tab.rename names a tab the same way the rename dialog does, tab.list now reports each tab's name and kind, and ui.toast flashes a one-line confirmation. Settings are scriptable through module.settings.list, get, and set, plus bohay module settings <id> [<key> [<value>]] on the command line. (#17)
  • A community module index at bohay.dev/modules. It runs the same bohay-module GitHub topic search that bohay module search runs in your terminal, so the site and the CLI can never disagree about what exists. There is no registry, no submission, and no account: add the topic to a public repo and it appears. (#17)
  • Three complete example modules, one each in Bash, Python, and Node, under examples/modules/. A sidebar dock of git branches you can click to check out, a webhook notifier that fires when an agent gets blocked, and a scratch pane you open by right-clicking. Each is short enough to read in one sitting and covers a different part of the surface. (#17)

🐛 Fixed

  • An agent is now named by the process it is running, not by words on its screen. Screen scraping was always a guess: an agent that stopped printing its own name, or a pane that repainted, could lose its identity and fall back to plain-shell rules where any output counts as work. bohay now reads the pane's process tree from a single batched ps scan and asks what is actually running. v0.8.2 made identity sticky across frames, which papered over the symptom. This removes the guess. (09fa81b)
  • A module dock came back empty after a restart. Dock contents are cached in memory and deliberately not persisted, and nothing ever asked the module to repaint them, so the section sat blank until you happened to trigger the module again. Startup hooks close the loop. (#17)
  • Event hooks written as node.created or node.closed had quietly stopped firing. bohay emits these as workspace.created and workspace.closed, and the list of known event names still carried the old spelling, so a hook using it matched nothing and failed silently. Both spellings work again. (#17)
  • Per-item platforms was accepted in the manifest and then ignored for build steps, event hooks, and pane entrypoints, so a command meant only for macOS would still run on Linux. It is now enforced everywhere it is accepted. (#17)
  • A right-click menu could run the wrong module action. The list was rebuilt on every click, so a module disabled between the menu being drawn and you clicking it shifted the positions underneath, and the click landed on its neighbour. A menu now takes its list when it opens, which also removes work from every frame the menu is on screen. (#17)
  • Listing a module's settings printed secrets in plain text. The settings screen carefully masked them and then bohay module settings <id> put the token straight into your terminal scrollback. A listing now reports only whether a secret is set, and you ask for the key by name when a script genuinely needs the value. (#17)
  • The website no longer scrolls sideways on a phone. Module cards, the release notes, and the comparison table all pushed past the viewport at narrow widths, and the navigation bar overflowed once it gained a fourth link. The nav now wraps onto a second row and every page holds its width down to 320px. (#17)

🔧 Changed

  • The [[actions]] manifest field contexts was always documented but never did anything. It now drives the real menus, and a context name that is not recognized is a hard manifest error rather than a menu entry that silently never appears.
  • Module commands receive the invocation context twice: as the existing JSON blob and as flat variables such as BOHAY_WORKSPACE_CWD and BOHAY_PANE_ID. Shell modules were the main audience for modules all along and should not need a JSON parser to find a folder.
  • The example modules are excluded from the published crate, the same as the other documentation, so cargo install bohay stays lean.

📚 Documentation

  • Writing a Module has been rewritten around the wider surface, with three complete modules quoted in full so you can read one end to end before writing your own.
  • Using Modules was a short page that explained very little. It is now a real guide to finding, installing, configuring, and managing modules, including what bohay does and does not do for you when you install one. The short version: it shows you every command a module declares and waits for your confirmation, it runs builds with a scrubbed environment, and it pins the commit. It does not sandbox, so install from people you trust.

Contributors

  • RizRiyz

Full Changelog: v0.8.2...v0.8.3