Add new agent control layer and web socket APIs (#44)
7 months ago
Authored
Max Weinbach* Replace subagent websocket API
* Replace subagent infrastructure
* Filter unavailable models from UI
* Review codex/subagent-rearchi diff
* Add .agent-user to gitignore
* Enable cross-provider child routing
* Add cross-provider child routing
* Enable cross-provider child agents
* Add cross-provider child routing
* Delete memory.sqlite
* Validate agent todo scrollability
* fix: close child-agent MCP and raw-loop routing gaps
* Add harness config docs and expand runbook coverage
* fix: close remaining child-agent review gaps
* fix: pass delegate tools into runtime turns
* fix: preserve raw-loop child history between runs
* Fix child agent resume and wait state handling
* Fix agent replay hydration and malformed tool call retries
* Fix global Cowork auth resolution for Codex and provider flows
* Normalize stale child execution states after rehydration
* fix child agent status and snapshot persistence
* Skip flaky remote agent MCP test in default CI
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Parent646d708
174 files changed
- .gitignore+1−0
- README.md+1−0
- apps/TUI/app.tsx+7−0
- apps/TUI/component/dialog-command.tsx+9−0
- apps/TUI/component/dialog-provider.tsx+1−0
- apps/TUI/component/prompt/slash-commands.ts+10−0
- apps/TUI/context/local.test.ts+82−0
- apps/TUI/context/local.tsx+98−18
apps/TUI/context/sync.tsx+81−2apps/TUI/context/syncEventReducer.ts+54−4apps/TUI/context/syncTypes.ts+24−1apps/TUI/routes/session/dialog-subagent.tsx+176−6apps/TUI/routes/session/sidebar.tsx+28−0apps/desktop/electron/services/persistence.ts+21−1apps/desktop/src/app/store.actions/bootstrap.ts+19−3apps/desktop/src/app/store.actions/explorer.ts+0−1apps/desktop/src/app/store.actions/mcp.ts+0−1apps/desktop/src/app/store.actions/provider.ts+0−1apps/desktop/src/app/store.actions/skills.ts+0−1apps/desktop/src/app/store.actions/thread.ts+3−2apps/desktop/src/app/store.actions/workspace.ts+4−2apps/desktop/src/app/store.actions/workspaceDefaults.ts+37−11apps/desktop/src/app/store.feedMapping.ts+47−1apps/desktop/src/app/store.helpers.ts+7−7apps/desktop/src/app/store.helpers/controlSocket.ts+4−1apps/desktop/src/app/store.helpers/runtimeState.ts+13−0apps/desktop/src/app/store.helpers/threadEventReducer.ts+107−2apps/desktop/src/app/types.ts+24−1apps/desktop/src/lib/desktopSchemas.ts+4−1apps/desktop/src/lib/modelChoices.ts+34−3apps/desktop/src/lib/wsProtocol.ts+1−0apps/desktop/src/styles.css+0−18apps/desktop/src/ui/ChatView.tsx+6−2apps/desktop/src/ui/ContextSidebar.tsx+76−3apps/desktop/src/ui/chat/activityGroups.ts+2−2apps/desktop/src/ui/file-explorer/WorkspaceFileExplorer.tsx+1−1apps/desktop/src/ui/settings/pages/WorkspacesPage.tsx+215−26apps/desktop/test/context-sidebar.test.tsx+223−0apps/desktop/test/developer-page.test.tsx+5−5apps/desktop/test/modelChoices.test.ts+98−2apps/desktop/test/persistence-state-sanitization.test.ts+77−1apps/desktop/test/store-feed-mapping.test.ts+75−1apps/desktop/test/thread-reconnect.test.ts+62−0apps/desktop/test/workspace-mcp-editor.test.ts+1−1apps/desktop/test/workspace-settings-sync.test.ts+136−21apps/desktop/test/workspaces-page.test.ts+104−2docs/architecture.md+1−1docs/harness/config.md+84−0docs/harness/context.md+11−2docs/harness/index.md+1−0docs/harness/observability.md+23−0docs/harness/runbook.md+75−9docs/websocket-protocol.md+261−60prompts/sub-agents/base.md+10−0prompts/sub-agents/default.md+4−0prompts/sub-agents/explorer.md+4−0prompts/sub-agents/research.md+3−5prompts/sub-agents/reviewer.md+4−0prompts/sub-agents/worker.md+4−0prompts/system-models/claude-haiku-4-5.md+1−1prompts/system-models/claude-opus-4-6.md+1−1prompts/system-models/claude-sonnet-4-6.md+1−1prompts/system-models/gemini-3-pro-preview.md+1−1prompts/system-models/gemini-3.1-pro-preview.md+1−1prompts/system-models/gpt-5.2.md+1−1prompts/system-models/gpt-5.4.md+1−1prompts/system.md+1−1scripts/check_docs.ts+4−0scripts/run_raw_agent_loops.ts+376−125src/agent.ts+13−5src/config.ts+46−19src/connect.ts+3−2src/mcp/index.ts+1−0src/models/childAgentModelInfo.ts+96−0src/models/childModelRouting.ts+138−0src/prompt.ts+127−3src/providerStatus.ts+2−1src/providers/authRegistry.ts+8−5src/providers/catalog.ts+15−0src/providers/connectionCatalog.ts+2−1src/providers/index.ts+4−0src/providers/modelAdapter.ts+5−2src/runtime/openaiResponsesModel.ts+7−8src/runtime/openaiResponsesRuntime.ts+8−0src/runtime/piRuntime.ts+48−5src/server/agents/AgentControl.ts+231−0src/server/agents/DelegateRunner.ts+113−0src/server/agents/StatusBus.ts+76−0src/server/agents/modelRouter.ts+159−0src/server/agents/roles.ts+79−0src/server/agents/toolPolicy.ts+19−0src/server/agents/types.ts+75−0src/server/protocol.ts+72−14src/server/protocolEventParser.ts+54−12src/server/protocolParser.ts+46−10src/server/session/AgentSession.ts+168−39src/server/session/ProviderAuthManager.ts+29−11src/server/session/ProviderCatalogManager.ts+7−4src/server/session/SessionAdminManager.ts+113−17src/server/session/SessionContext.ts+48−27src/server/session/SessionMetadataManager.ts+50−28src/server/session/SessionRuntimeSupport.ts+8−1src/server/session/SessionSnapshotBuilder.ts+80−3src/server/session/TurnExecutionManager.ts+177−53src/server/sessionDb.ts+32−5src/server/sessionDb/mappers.ts+93−13src/server/sessionDb/migrations.ts+13−0src/server/sessionDb/repository.ts+226−13src/server/sessionStore.ts+257−17src/server/startServer.ts+149−169src/server/startServer/dispatchClientMessage.ts+18−4src/shared/agents.ts+84−0src/shared/persistentSubagents.ts+1−38src/tools/api-keys.ts+3−2src/tools/context.ts+21−14src/tools/exa.ts+2−10src/tools/index.ts+15−9src/tools/persistentAgents.ts+34−35src/tools/spawnAgent.ts+35−187src/types.ts+21−1src/utils/authHome.ts+24−0tasks/lessons.md+13−0test/agent.remote-mcp.grep.test.ts+4−4test/agent.test.ts+24−1test/agent.toolloop.test.ts+1−1test/agentControl.test.ts+583−0test/agentSocket.parse.test.ts+21−11test/config.test.ts+79−14test/delegateRunner.test.ts+110−0test/fixtures/mcp-echo-server.mjs+3−0test/mcp.auth-store.test.ts+1−1test/mcp.config-registry.test.ts+1−1test/mcp.local.integration.test.ts+2−1test/mcp.test.ts+1−1test/models.registry.test.ts+9−0test/observability.otel-extended.test.ts+1−1test/observability.otel.test.ts+1−1test/observability.runtime.test.ts+1−1test/permissions.test.ts+1−1test/persistentAgents.tool.test.ts+55−100test/prompt.test.ts+48−8test/protocol.test.ts+149−26test/providers/baseten.test.ts+2−2test/providers/codex-cli.test.ts+14−12test/providers/config-switching.test.ts+1−1test/providers/helpers.ts+1−1test/providers/index.test.ts+7−7test/providers/modelAdapter.test.ts+13−9test/providers/nvidia.test.ts+2−2test/providers/saved-keys.test.ts+194−158test/providers/together.test.ts+2−2test/run_raw_agent_loops.test.ts+335−0test/runtime.openai-responses-runtime.test.ts+67−4test/runtime.pi-options.test.ts+4−4test/runtime.pi-runtime.test.ts+100−42test/runtime.selection.test.ts+6−6test/server.commands.test.ts+1−1test/server.test.ts+284−50test/session-db-mappers.test.ts+39−8test/session-db.test.ts+98−14test/session-store.test.ts+3−3test/session-title-service.test.ts+1−1test/session.managers.test.ts+1−1test/session.stream-pipeline.test.ts+1−1test/session.test.ts+376−54test/sessionSnapshotBuilder.test.ts+234−0test/shared/persistentSubagents.test.ts+11−8test/spawnAgent.tool.test.ts+84−251test/statusBus.test.ts+25−0test/tools.exa.test.ts+20−3test/tools.test.ts+159−70test/tui.syncEventReducer.test.ts+89−0test/workspace-backups.test.ts+1−1test_model.ts+1−1