Repository navigation
Conversation
fujibee
force-pushed
the
addon-agent-ui
branch
3 times, most recently
from
November 5, 2026 03:30
2fe10b3 to
bc4b6ae
Compare
Add team:join, messages:send and agents:spawn to the permission rows, reword "What it cannot do" as what the add-on itself cannot do, and add a second block when an add-on can message or start agents: they keep their own permissions, plus the permission mode and the working-folder rule for agents:spawn. All nine locales.
An add-on that declares team:join (and messages:send / agents:spawn) gets one card for its team after the messages card, with the same note that agents keep their own permissions. Allow is remembered per team, once per add-on, through the existing saved-grant path and replayed on open. Settings lists and revokes the three new grants.
A member that only has the app-addon type shows an add-on badge and no longer offers to start a terminal for it.
…ed ones Settings -> Add-ons lists the members and agents add-ons made with their state. An agent that may still be running after the app stopped shows its pid and waits for the person (open new, or leave it); a joined or failed one can be opened. Read when the tab opens and on Refresh, never on a timer.
Thin wrappers that send exactly the frame fields protocol.d.ts names, with sample answers so a pane that uses them can be built in a plain browser.
… agents The agents:spawn grant card shows an opt-in box, unticked by default, with one line saying it writes a single setting to Claude Code's config. The state (trusted, not trusted, config not found) is read once when the card shows; the box is offered only while the folder is not trusted. A ticked box calls the trust command after the consent is saved; a failure is shown and the grant stands. Strings in all nine locales.
…ust box and pid display A failed read of the folder-trust state was shown as "config not found", hiding a malformed or unreadable config. Only the host's ConfigNotFound value now means missing; any other error is shown with its message, and the grant is not held back. The trust box starts unticked each time the powers card appears, instead of keeping a ticked state from an earlier open. A member state whose pid is null no longer prints an empty pid.
Reopening a pane grants the team and sets each remembered power again when all the powers the add-on declares were saved for exactly this team; otherwise the card asks. The decision moves out of the pane host so a test can show the card is not asked twice, and that a missing power, another team or a failing power asks.
…it sits agents.spawn takes an optional order (a whole number from 0 to 99); the open request now carries the asking pane and that order, and the entry keeps them so a retry opens the terminal in the same place. A member has none.
An agent asked for by an add-on pane used to open in a tab of its own. It now opens in the asking pane's tab: the first to its right, the rest in a column under each other, ordered by the order the add-on gave (smaller is higher) whatever order they arrive in. The add-on names no side or position; the app decides. With no such pane open the agent still gets its own tab.
fujibee
force-pushed
the
addon-agent-ui
branch
from
November 6, 2026 07:17
bc4b6ae to
2e6d64f
Compare
…nder, and sort unordered agents last Two agents whose spawns finished before the next render both read the rendered panes for their siblings, saw none, and each opened to the right of the asking pane, giving three columns instead of the asker on the left and the players stacked on the right. The agents already placed beside an asking pane are now remembered synchronously (createAskedPlacer), and the tree update is applied to the latest tree when React runs it. An agent with an order also ignored the unordered agents already there when looking for the place below it, so an ordered agent could land under an unordered one. Agents are now sorted by order with the unordered ones last, and a new one goes above the first that sorts after it. The tests open both agents before the update is applied, in both arrival orders, and mix ordered and unordered arrivals.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The app side of add-on agent powers: what an add-on may do with agents is shown where the user decides, and listed afterwards. It builds on the host operations from #1861, which is now on main.
team.join,messages.send,agents.modelsand the agent operations.~/agmsg-agents(off by default), through the read-onlyaddon_agents_folder_trustand the single-flagaddon_trust_agents_folder. A failed read is shown with its reason instead of being hidden.agents.spawntakes an optionalorder(a whole number from 0 to 99) and the window is told which pane asked. The first agent opens to the right of the asking pane, later ones form a column ordered byorder(smaller is higher), whatever the arrival order. The tab is named after its panes ("Chess · black · white"). All 9 locales are updated.Process spawns
agents.models: once per CLI type when the add-on's setup opens (the host caches the Codex answer for the run).Checked
tsc --noEmitclean;vitest run: 45 files, 528 tests pass;cargo test --lib addons::agents: 32 pass (the placement fields are covered). The CI gate scripts (check-enforced-assertions,check-errexit-status-reads,check-unguarded-env-reads) are at their baselines andcheck-private-namesis clean on this head.95e08f9fplus this branch (a debug build with its own identifier and a side install, not the live one): claude haiku as white against codex as black, started from the chess add-on. Both sides moved by themselves for 10 plies, all legal; the first turn notice was typed into white after its first idle. Startup turns, measured from the players' own records over 3 runs at a load of 3 to 6: claude haiku 22.2, 22.5 and 20.0 s, codex 8.5, 8.0 and 11.8 s.Not checked