feat(orchestration): API keys, API profiles and agent-to-agent delegation - #64
Closed
BIackFIame wants to merge 2 commits into
Closed
BIackFIame wants to merge 2 commits into
BIackFIame wants to merge 2 commits into
Conversation
This was referenced Sep 23, 2026
BIackFIame
force-pushed
the
stack/2-orchestration
branch
3 times, most recently
from
September 23, 2026 13:39
434b629 to
19efbac
Compare
Provider CLI resolution is driven by declarative command definitions instead of assuming the executable matches the provider id. MiniMax Code (`mcode`), Antigravity (`agy`) and Cursor resolve through the same registry, known install directories, recheck and install links that howdeploy#52 introduced. Cursor prefers `cursor-agent`; a generic `agent` is accepted only when its real path is verified as Cursor, because Grok also installs an `agent` executable. Each new agent gets normal and resume launches where the CLI documents them, its YOLO flag only where one exists, launcher entries with a settings migration, its provider mark and session restore. MiniMax Code has no permission-bypass flag, so its YOLO profile launches the stock CLI and says so. Antigravity restores as a fresh session because it has no resumable id that CanvasTTY can persist. Provider ids, labels and launcher order live in a dependency-free `providerCatalog.ts` that `contracts.ts` re-exports, so the Even G2 companion bundle stays free of URLs outside its network whitelist; its phone launcher lists the new agents too. Lifecycle hooks are prepared only for providers that have a hook adapter, so the new agents never write Grok's shared hook configuration. ADR: docs/adr/ADR-20260921-provider-cli-command-definitions.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion - Provider API keys are stored in the main process, encrypted with Electron safeStorage; the renderer only sees which keys exist. - API profiles name a model backend (protocol, HTTPS base URL, key reference, default model) with built-in presets. - Sessions carry role and parent metadata; restore drops orphaned subagents instead of resurrecting them. - Per-provider capability descriptors state what CanvasTTY can really do with each agent, and agent control (spawn, send, observe, result, cancel, children) works over ordinary terminal sessions. - An orchestration MCP surface rides the existing agent-bridge design: authenticated user-local socket, one-use bootstrap capabilities, scoping to the caller's own session subtree, and MCP injection for Claude, Codex, OpenCode, Kimi and Hermes. Only orchestrator sessions receive it; ordinary launches are unchanged. ADR: docs/adr/ADR-20260921-orchestration-mcp-rides-agent-bridge.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BIackFIame
force-pushed
the
stack/2-orchestration
branch
from
September 23, 2026 14:26
19efbac to
9d4cb0b
Compare
Owner
|
Integrated into main via #73. Your authored orchestration commit and @claude co-author trailer are preserved in the merge history. Thank you, @BIackFIame. |
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.
Goal
Let agents delegate to other agents (including other vendors) through CanvasTTY, and give API-key based agents a safe place for keys and backend settings.
Behavior
safeStorage, in one atomically written file with size quotas. It fails closed when OS encryption is unavailable. The renderer only sees which keys exist.roleandparentSessionId, and restore drops orphaned subagents. This also fixesassertCreateRequestrejecting the four new providers over IPC.Orchestration contract (maintainer's #32 review)
The maintainer's review of #32 lists requirements for an orchestration feature. This stack meets them as follows.
What is missing is stated plainly: Grok, OMP, Pi, Devin and Antigravity cannot be orchestrators yet, and a child's result is its terminal tail rather than a structured final answer.
Documentation
ADR:
docs/adr/ADR-20260921-orchestration-mcp-rides-agent-bridge.md.Verification
npm run typecheckpassed. Full suite: 723/723; Even G2 companion tests (npm run test:even): 47/47.spawn_agent; the child started as a Subagent, wrotesub.txt, and the orchestrator waited and recorded the child's id;cancel_agent({"canceled":true}, gone fromlist_agents).Series
Each part is one commit on top of the previous one. Please merge them in order. Until #63 is merged, GitHub also shows the earlier parts here; review only the top commit
9d4cb0b(Commits tab → last commit).Compatibility with open upstream PRs
integration/stack-with-open-prsis this whole stack with #54–#62 merged on top and every conflict resolved. On that branch both TypeScript checks, 1492/1492 tests,npm run test:even(47/47) andelectron-vite buildpass.SettingsStore.ts. Keep this stack's store: it already serializes every write and publishes a value only after the disk write succeeds. fix(settings): keep rejected writes out of live settings #58's new tests pass against it unchanged.registerIpcreturns the window observer; keep both sides. This stack's IPC tests stub both window-state helpers, so they pass in either merge order.TerminalManager.ts: keep this stack's launch structure. The answer-capture grant must also reach the prepared and measured-grid first start, because every real agent launch goes through that path.hook-helper.mjs: keep this stack's 512 KiB input read and safe cut, and gate the answer on fix(even-g2): require explicit grant for answer capture #55's grant.64ef294(grant through prepared starts, feat(updates): add GitHub release updates across platforms #62 follow-ups) andc2dd726(hook test under the grant).shutdownForUpdatemust clearshuttingDown. Otherwise no session can start after a failed update; feat(updates): add GitHub release updates across platforms #62's own test fails without this.SettingsLocation.I will rebase this stack onto whichever of these lands first.
🤖 Generated with Claude Code