@xingular/harness 2.0.0 → 2.0.1-unstable
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +635 -0
- package/LICENSE +202 -0
- package/NOTICE.md +50 -0
- package/README.md +241 -90
- package/THIRD_PARTY_LICENSES.md +942 -0
- package/browser-extension/README.md +32 -0
- package/browser-extension/background.js +612 -0
- package/browser-extension/manifest.json +16 -0
- package/browser-extension/overlay.js +97 -0
- package/browser-extension/popup.css +19 -0
- package/browser-extension/popup.html +30 -0
- package/browser-extension/popup.js +101 -0
- package/browser-extension/site-access.js +63 -0
- package/builtin/skills/plugin-authoring/SKILL.md +53 -0
- package/dist/cli.js +32851 -17155
- package/dist/sdk/accounts/accounts.d.ts +195 -0
- package/dist/sdk/accounts/accounts.js +821 -0
- package/dist/sdk/accounts/choices.d.ts +41 -0
- package/dist/sdk/accounts/choices.js +89 -0
- package/dist/sdk/accounts/env.d.ts +78 -0
- package/dist/sdk/accounts/env.js +294 -0
- package/dist/sdk/accounts/secrets.d.ts +28 -0
- package/dist/sdk/accounts/secrets.js +147 -0
- package/dist/sdk/accounts/store.d.ts +139 -0
- package/dist/sdk/accounts/store.js +255 -0
- package/dist/sdk/agents/builtin.d.ts +2 -0
- package/dist/sdk/agents/builtin.js +50 -0
- package/dist/sdk/agents/narrow.d.ts +13 -0
- package/dist/sdk/agents/narrow.js +29 -0
- package/dist/sdk/agents/planResearch.d.ts +27 -0
- package/dist/sdk/agents/planResearch.js +82 -0
- package/dist/sdk/agents/profiles.d.ts +93 -0
- package/dist/sdk/agents/profiles.js +289 -0
- package/dist/sdk/annotations/bridge.d.ts +44 -0
- package/dist/sdk/annotations/bridge.js +268 -0
- package/dist/sdk/annotations/capture.d.ts +158 -0
- package/dist/sdk/annotations/capture.js +409 -0
- package/dist/sdk/annotations/delivery.d.ts +79 -0
- package/dist/sdk/annotations/delivery.js +163 -0
- package/dist/sdk/annotations/inspect.d.ts +10 -0
- package/dist/sdk/annotations/inspect.js +34 -0
- package/dist/sdk/annotations/isolated.d.ts +6 -0
- package/dist/sdk/annotations/isolated.js +51 -0
- package/dist/sdk/annotations/pageScript.d.ts +28 -0
- package/dist/sdk/annotations/pageScript.js +871 -0
- package/dist/sdk/annotations/part.d.ts +8 -0
- package/dist/sdk/annotations/part.js +126 -0
- package/dist/sdk/annotations/queue.d.ts +4 -0
- package/dist/sdk/annotations/queue.js +45 -0
- package/dist/sdk/annotations/serverMethods.d.ts +3 -0
- package/dist/sdk/annotations/serverMethods.js +66 -0
- package/dist/sdk/annotations/store.d.ts +159 -0
- package/dist/sdk/annotations/store.js +404 -0
- package/dist/sdk/browser/backend.d.ts +16 -0
- package/dist/sdk/browser/backend.js +17 -0
- package/dist/sdk/browser/config.d.ts +19 -0
- package/dist/sdk/browser/config.js +23 -0
- package/dist/sdk/browser/contracts.d.ts +19 -0
- package/dist/sdk/browser/contracts.js +116 -0
- package/dist/sdk/browser/diagnostics.d.ts +4 -0
- package/dist/sdk/browser/diagnostics.js +38 -0
- package/dist/sdk/browser/extension/bridge.d.ts +55 -0
- package/dist/sdk/browser/extension/bridge.js +336 -0
- package/dist/sdk/browser/extension/session.d.ts +50 -0
- package/dist/sdk/browser/extension/session.js +321 -0
- package/dist/sdk/browser/index.d.ts +33 -0
- package/dist/sdk/browser/index.js +105 -0
- package/dist/sdk/browser/network.d.ts +10 -0
- package/dist/sdk/browser/network.js +59 -0
- package/dist/sdk/browser/serverMethods.d.ts +3 -0
- package/dist/sdk/browser/serverMethods.js +10 -0
- package/dist/sdk/browser/session.d.ts +85 -0
- package/dist/sdk/browser/session.js +228 -0
- package/dist/sdk/browser/tools.d.ts +102 -0
- package/dist/sdk/browser/tools.js +257 -0
- package/dist/sdk/capabilities/api.d.ts +22 -0
- package/dist/sdk/capabilities/api.js +54 -0
- package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
- package/dist/sdk/capabilities/runSnapshot.js +53 -0
- package/dist/sdk/capabilities/types.d.ts +29 -0
- package/dist/sdk/capabilities/types.js +1 -0
- package/dist/sdk/cli.d.ts +2 -0
- package/dist/sdk/cli.js +172 -0
- package/dist/sdk/commands/extensionOwners.d.ts +4 -0
- package/dist/sdk/commands/extensionOwners.js +17 -0
- package/dist/sdk/commands/list.d.ts +3 -0
- package/dist/sdk/commands/list.js +90 -0
- package/dist/sdk/commands/promptLoader.d.ts +5 -0
- package/dist/sdk/commands/promptLoader.js +76 -0
- package/dist/sdk/commands/promptRoutes.d.ts +13 -0
- package/dist/sdk/commands/promptRoutes.js +46 -0
- package/dist/sdk/commands/registry.d.ts +299 -0
- package/dist/sdk/commands/registry.js +54 -0
- package/dist/sdk/commands/routes.d.ts +16 -0
- package/dist/sdk/commands/routes.js +33 -0
- package/dist/sdk/commands/runtimeRouter.d.ts +4 -0
- package/dist/sdk/commands/runtimeRouter.js +48 -0
- package/dist/sdk/computer/boundary.d.ts +40 -0
- package/dist/sdk/computer/boundary.js +79 -0
- package/dist/sdk/computer/contracts.d.ts +127 -0
- package/dist/sdk/computer/contracts.js +13 -0
- package/dist/sdk/computer/control.d.ts +34 -0
- package/dist/sdk/computer/control.js +112 -0
- package/dist/sdk/computer/screenshot.d.ts +32 -0
- package/dist/sdk/computer/screenshot.js +35 -0
- package/dist/sdk/computer/terminalCapture.d.ts +26 -0
- package/dist/sdk/computer/terminalCapture.js +64 -0
- package/dist/sdk/computer/volatileImages.d.ts +9 -0
- package/dist/sdk/computer/volatileImages.js +50 -0
- package/dist/sdk/context/attribution.d.ts +18 -0
- package/dist/sdk/context/attribution.js +295 -0
- package/dist/sdk/context/runDetails.d.ts +16 -0
- package/dist/sdk/context/runDetails.js +22 -0
- package/dist/sdk/context/types.d.ts +94 -0
- package/dist/sdk/context/types.js +10 -0
- package/dist/sdk/core/bus.d.ts +23 -0
- package/dist/sdk/core/bus.js +76 -0
- package/dist/sdk/core/caller.d.ts +22 -0
- package/dist/sdk/core/caller.js +16 -0
- package/dist/sdk/core/changes.d.ts +15 -0
- package/dist/sdk/core/changes.js +15 -0
- package/dist/sdk/core/commandBudget.d.ts +23 -0
- package/dist/sdk/core/commandBudget.js +62 -0
- package/dist/sdk/core/effort.d.ts +2 -0
- package/dist/sdk/core/effort.js +1 -0
- package/dist/sdk/core/env.d.ts +18 -0
- package/dist/sdk/core/env.js +8 -0
- package/dist/sdk/core/errors.d.ts +15 -0
- package/dist/sdk/core/errors.js +24 -0
- package/dist/sdk/core/frontmatter.d.ts +12 -0
- package/dist/sdk/core/frontmatter.js +50 -0
- package/dist/sdk/core/fs.d.ts +18 -0
- package/dist/sdk/core/fs.js +106 -0
- package/dist/sdk/core/index.d.ts +24 -0
- package/dist/sdk/core/index.js +203 -0
- package/dist/sdk/core/interactiveProfile.d.ts +46 -0
- package/dist/sdk/core/interactiveProfile.js +143 -0
- package/dist/sdk/core/links.d.ts +51 -0
- package/dist/sdk/core/links.js +155 -0
- package/dist/sdk/core/path.d.ts +7 -0
- package/dist/sdk/core/path.js +79 -0
- package/dist/sdk/core/projects.d.ts +18 -0
- package/dist/sdk/core/projects.js +67 -0
- package/dist/sdk/core/secrets.d.ts +2 -0
- package/dist/sdk/core/secrets.js +5 -0
- package/dist/sdk/core/shell.d.ts +20 -0
- package/dist/sdk/core/shell.js +73 -0
- package/dist/sdk/core/text.d.ts +7 -0
- package/dist/sdk/core/text.js +40 -0
- package/dist/sdk/core/workspace.d.ts +13 -0
- package/dist/sdk/core/workspace.js +88 -0
- package/dist/sdk/core/workspaceBashTool.d.ts +20 -0
- package/dist/sdk/core/workspaceBashTool.js +50 -0
- package/dist/sdk/core/workspaceSandbox.d.ts +41 -0
- package/dist/sdk/core/workspaceSandbox.js +360 -0
- package/dist/sdk/core/workspaceWriteOperations.d.ts +57 -0
- package/dist/sdk/core/workspaceWriteOperations.js +245 -0
- package/dist/sdk/doctor/checks.d.ts +5 -0
- package/dist/sdk/doctor/checks.js +270 -0
- package/dist/sdk/doctor/probe.d.ts +4 -0
- package/dist/sdk/doctor/probe.js +94 -0
- package/dist/sdk/doctor/serverMethods.d.ts +3 -0
- package/dist/sdk/doctor/serverMethods.js +8 -0
- package/dist/sdk/doctor/service.d.ts +23 -0
- package/dist/sdk/doctor/service.js +144 -0
- package/dist/sdk/doctor/types.d.ts +141 -0
- package/dist/sdk/doctor/types.js +29 -0
- package/dist/sdk/harness.d.ts +172 -0
- package/dist/sdk/harness.js +387 -0
- package/dist/sdk/history/lessonPrompt.d.ts +2 -0
- package/dist/sdk/history/lessonPrompt.js +15 -0
- package/dist/sdk/history/lessons.d.ts +52 -0
- package/dist/sdk/history/lessons.js +173 -0
- package/dist/sdk/history/recall.d.ts +68 -0
- package/dist/sdk/history/recall.js +199 -0
- package/dist/sdk/history/serverMethods.d.ts +3 -0
- package/dist/sdk/history/serverMethods.js +8 -0
- package/dist/sdk/history/trajectory.d.ts +7 -0
- package/dist/sdk/history/trajectory.js +218 -0
- package/dist/sdk/hub/catalog.json +123 -0
- package/dist/sdk/hub/cli.d.ts +7 -0
- package/dist/sdk/hub/cli.js +81 -0
- package/dist/sdk/hub/hub.d.ts +74 -0
- package/dist/sdk/hub/hub.js +476 -0
- package/dist/sdk/hub/schema.d.ts +280 -0
- package/dist/sdk/hub/schema.js +78 -0
- package/dist/sdk/hub/serverMethods.d.ts +3 -0
- package/dist/sdk/hub/serverMethods.js +11 -0
- package/dist/sdk/index.d.ts +80 -0
- package/dist/sdk/index.js +60 -0
- package/dist/sdk/mcp/connections.d.ts +83 -0
- package/dist/sdk/mcp/connections.js +676 -0
- package/dist/sdk/mcp/manager.d.ts +26 -0
- package/dist/sdk/mcp/manager.js +124 -0
- package/dist/sdk/mcp/oauth.d.ts +35 -0
- package/dist/sdk/mcp/oauth.js +171 -0
- package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
- package/dist/sdk/mcp/scopeMigration.js +198 -0
- package/dist/sdk/mcp/serverMethods.d.ts +3 -0
- package/dist/sdk/mcp/serverMethods.js +22 -0
- package/dist/sdk/mcp/service.d.ts +160 -0
- package/dist/sdk/mcp/service.js +510 -0
- package/dist/sdk/mcp/types.d.ts +131 -0
- package/dist/sdk/mcp/types.js +49 -0
- package/dist/sdk/pi/retryPolicy.d.ts +19 -0
- package/dist/sdk/pi/retryPolicy.js +11 -0
- package/dist/sdk/pi/runtime.d.ts +14 -0
- package/dist/sdk/pi/runtime.js +31 -0
- package/dist/sdk/plugins/api.d.ts +66 -0
- package/dist/sdk/plugins/api.js +155 -0
- package/dist/sdk/plugins/attachments.d.ts +46 -0
- package/dist/sdk/plugins/attachments.js +111 -0
- package/dist/sdk/plugins/builtin.d.ts +7 -0
- package/dist/sdk/plugins/builtin.js +182 -0
- package/dist/sdk/plugins/builtinRegistry.d.ts +62 -0
- package/dist/sdk/plugins/builtinRegistry.js +77 -0
- package/dist/sdk/plugins/catalogue.d.ts +29 -0
- package/dist/sdk/plugins/catalogue.js +197 -0
- package/dist/sdk/plugins/cli.d.ts +13 -0
- package/dist/sdk/plugins/cli.js +188 -0
- package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
- package/dist/sdk/plugins/commandPrefix.js +21 -0
- package/dist/sdk/plugins/discover.d.ts +48 -0
- package/dist/sdk/plugins/discover.js +230 -0
- package/dist/sdk/plugins/firstParty.d.ts +50 -0
- package/dist/sdk/plugins/firstParty.js +119 -0
- package/dist/sdk/plugins/hooks.d.ts +94 -0
- package/dist/sdk/plugins/hooks.js +162 -0
- package/dist/sdk/plugins/identity.d.ts +19 -0
- package/dist/sdk/plugins/identity.js +48 -0
- package/dist/sdk/plugins/install.d.ts +24 -0
- package/dist/sdk/plugins/install.js +160 -0
- package/dist/sdk/plugins/inventory.d.ts +22 -0
- package/dist/sdk/plugins/inventory.js +111 -0
- package/dist/sdk/plugins/manifest.d.ts +21 -0
- package/dist/sdk/plugins/manifest.js +94 -0
- package/dist/sdk/plugins/plugins.d.ts +106 -0
- package/dist/sdk/plugins/plugins.js +165 -0
- package/dist/sdk/plugins/proposals.d.ts +17 -0
- package/dist/sdk/plugins/proposals.js +147 -0
- package/dist/sdk/plugins/runtime.d.ts +9 -0
- package/dist/sdk/plugins/runtime.js +95 -0
- package/dist/sdk/plugins/surfaces.d.ts +5 -0
- package/dist/sdk/plugins/surfaces.js +11 -0
- package/dist/sdk/plugins/trust.d.ts +44 -0
- package/dist/sdk/plugins/trust.js +120 -0
- package/dist/sdk/plugins/types.d.ts +174 -0
- package/dist/sdk/plugins/types.js +7 -0
- package/dist/sdk/prompt/compile.d.ts +245 -0
- package/dist/sdk/prompt/compile.js +535 -0
- package/dist/sdk/prompt/reporting.d.ts +2 -0
- package/dist/sdk/prompt/reporting.js +94 -0
- package/dist/sdk/prompt/standard.d.ts +32 -0
- package/dist/sdk/prompt/standard.js +76 -0
- package/dist/sdk/refine/cli.d.ts +4 -0
- package/dist/sdk/refine/cli.js +186 -0
- package/dist/sdk/refine/demo.d.ts +21 -0
- package/dist/sdk/refine/demo.js +114 -0
- package/dist/sdk/refine/evidence.d.ts +55 -0
- package/dist/sdk/refine/evidence.js +330 -0
- package/dist/sdk/refine/host.d.ts +59 -0
- package/dist/sdk/refine/host.js +105 -0
- package/dist/sdk/refine/ledger.d.ts +48 -0
- package/dist/sdk/refine/ledger.js +76 -0
- package/dist/sdk/refine/library.d.ts +55 -0
- package/dist/sdk/refine/library.js +177 -0
- package/dist/sdk/refine/pi.d.ts +72 -0
- package/dist/sdk/refine/pi.js +248 -0
- package/dist/sdk/refine/prompts.d.ts +60 -0
- package/dist/sdk/refine/prompts.js +434 -0
- package/dist/sdk/refine/recursion.d.ts +113 -0
- package/dist/sdk/refine/recursion.js +258 -0
- package/dist/sdk/refine/runner.d.ts +83 -0
- package/dist/sdk/refine/runner.js +151 -0
- package/dist/sdk/refine/selection.d.ts +57 -0
- package/dist/sdk/refine/selection.js +251 -0
- package/dist/sdk/refine/serverMethods.d.ts +3 -0
- package/dist/sdk/refine/serverMethods.js +23 -0
- package/dist/sdk/refine/service.d.ts +115 -0
- package/dist/sdk/refine/service.js +280 -0
- package/dist/sdk/refine/suite.d.ts +67 -0
- package/dist/sdk/refine/suite.js +174 -0
- package/dist/sdk/refine/trajectory.d.ts +9 -0
- package/dist/sdk/refine/trajectory.js +73 -0
- package/dist/sdk/refine/types.d.ts +93 -0
- package/dist/sdk/refine/types.js +10 -0
- package/dist/sdk/remote/addresses.d.ts +19 -0
- package/dist/sdk/remote/addresses.js +52 -0
- package/dist/sdk/remote/pairing.d.ts +59 -0
- package/dist/sdk/remote/pairing.js +160 -0
- package/dist/sdk/remote/seal.d.ts +28 -0
- package/dist/sdk/remote/seal.js +84 -0
- package/dist/sdk/remote/server.d.ts +28 -0
- package/dist/sdk/remote/server.js +158 -0
- package/dist/sdk/remote/service.d.ts +125 -0
- package/dist/sdk/remote/service.js +330 -0
- package/dist/sdk/remote/webClient.d.ts +4 -0
- package/dist/sdk/remote/webClient.js +452 -0
- package/dist/sdk/server/methods.d.ts +3 -0
- package/dist/sdk/server/methods.js +365 -0
- package/dist/sdk/server/params.d.ts +4 -0
- package/dist/sdk/server/params.js +11 -0
- package/dist/sdk/server/remote.d.ts +19 -0
- package/dist/sdk/server/remote.js +109 -0
- package/dist/sdk/server/rpc.d.ts +20 -0
- package/dist/sdk/server/rpc.js +102 -0
- package/dist/sdk/server/serve.d.ts +13 -0
- package/dist/sdk/server/serve.js +25 -0
- package/dist/sdk/server/socket.d.ts +28 -0
- package/dist/sdk/server/socket.js +122 -0
- package/dist/sdk/sessions/approvals.d.ts +47 -0
- package/dist/sdk/sessions/approvals.js +119 -0
- package/dist/sdk/sessions/checkpoint.d.ts +7 -0
- package/dist/sdk/sessions/checkpoint.js +41 -0
- package/dist/sdk/sessions/compactionCheckpoint.d.ts +18 -0
- package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
- package/dist/sdk/sessions/completionCheck.d.ts +51 -0
- package/dist/sdk/sessions/completionCheck.js +161 -0
- package/dist/sdk/sessions/continuation.d.ts +53 -0
- package/dist/sdk/sessions/continuation.js +90 -0
- package/dist/sdk/sessions/contracts.d.ts +991 -0
- package/dist/sdk/sessions/contracts.js +545 -0
- package/dist/sdk/sessions/control.d.ts +72 -0
- package/dist/sdk/sessions/control.js +158 -0
- package/dist/sdk/sessions/extensionUi.d.ts +19 -0
- package/dist/sdk/sessions/extensionUi.js +64 -0
- package/dist/sdk/sessions/goal.d.ts +145 -0
- package/dist/sdk/sessions/goal.js +405 -0
- package/dist/sdk/sessions/goalLoop.d.ts +37 -0
- package/dist/sdk/sessions/goalLoop.js +125 -0
- package/dist/sdk/sessions/goalPrompts.d.ts +4 -0
- package/dist/sdk/sessions/goalPrompts.js +93 -0
- package/dist/sdk/sessions/goalStop.d.ts +27 -0
- package/dist/sdk/sessions/goalStop.js +41 -0
- package/dist/sdk/sessions/history.d.ts +16 -0
- package/dist/sdk/sessions/history.js +68 -0
- package/dist/sdk/sessions/initialBash.d.ts +7 -0
- package/dist/sdk/sessions/initialBash.js +7 -0
- package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
- package/dist/sdk/sessions/lineageJoin.js +61 -0
- package/dist/sdk/sessions/live.d.ts +101 -0
- package/dist/sdk/sessions/live.js +265 -0
- package/dist/sdk/sessions/planMode.d.ts +116 -0
- package/dist/sdk/sessions/planMode.js +281 -0
- package/dist/sdk/sessions/policy.d.ts +43 -0
- package/dist/sdk/sessions/policy.js +1 -0
- package/dist/sdk/sessions/pricing.d.ts +34 -0
- package/dist/sdk/sessions/pricing.js +40 -0
- package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
- package/dist/sdk/sessions/reasoningSummaries.js +61 -0
- package/dist/sdk/sessions/registry.d.ts +124 -0
- package/dist/sdk/sessions/registry.js +392 -0
- package/dist/sdk/sessions/runIndex.d.ts +21 -0
- package/dist/sdk/sessions/runIndex.js +65 -0
- package/dist/sdk/sessions/runStore.d.ts +82 -0
- package/dist/sdk/sessions/runStore.js +393 -0
- package/dist/sdk/sessions/runner.d.ts +291 -0
- package/dist/sdk/sessions/runner.js +1040 -0
- package/dist/sdk/sessions/sessionState.d.ts +13 -0
- package/dist/sdk/sessions/sessionState.js +31 -0
- package/dist/sdk/sessions/sessions.d.ts +238 -0
- package/dist/sdk/sessions/sessions.js +923 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
- package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
- package/dist/sdk/sessions/sideQuestions.js +290 -0
- package/dist/sdk/sessions/stallWatch.d.ts +35 -0
- package/dist/sdk/sessions/stallWatch.js +42 -0
- package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/subagentServerMethods.js +41 -0
- package/dist/sdk/sessions/subagentService.d.ts +88 -0
- package/dist/sdk/sessions/subagentService.js +546 -0
- package/dist/sdk/sessions/subagents.d.ts +98 -0
- package/dist/sdk/sessions/subagents.js +136 -0
- package/dist/sdk/sessions/workSlice.d.ts +167 -0
- package/dist/sdk/sessions/workSlice.js +266 -0
- package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
- package/dist/sdk/sessions/workspaceBoundary.js +46 -0
- package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
- package/dist/sdk/terminal/accountsMenu.js +392 -0
- package/dist/sdk/terminal/browser.d.ts +62 -0
- package/dist/sdk/terminal/browser.js +41 -0
- package/dist/sdk/terminal/browserControl.d.ts +29 -0
- package/dist/sdk/terminal/browserControl.js +187 -0
- package/dist/sdk/terminal/cli.d.ts +20 -0
- package/dist/sdk/terminal/cli.js +121 -0
- package/dist/sdk/terminal/client.d.ts +20 -0
- package/dist/sdk/terminal/client.js +148 -0
- package/dist/sdk/terminal/commandHelp.d.ts +17 -0
- package/dist/sdk/terminal/commandHelp.js +20 -0
- package/dist/sdk/terminal/control.d.ts +4 -0
- package/dist/sdk/terminal/control.js +25 -0
- package/dist/sdk/terminal/controller.d.ts +136 -0
- package/dist/sdk/terminal/controller.js +579 -0
- package/dist/sdk/terminal/credentialStore.d.ts +4 -0
- package/dist/sdk/terminal/credentialStore.js +33 -0
- package/dist/sdk/terminal/daemon.d.ts +44 -0
- package/dist/sdk/terminal/daemon.js +264 -0
- package/dist/sdk/terminal/hubMenu.d.ts +10 -0
- package/dist/sdk/terminal/hubMenu.js +34 -0
- package/dist/sdk/terminal/launch.d.ts +5 -0
- package/dist/sdk/terminal/launch.js +27 -0
- package/dist/sdk/terminal/liveTerminal.d.ts +96 -0
- package/dist/sdk/terminal/liveTerminal.js +436 -0
- package/dist/sdk/terminal/logs.d.ts +14 -0
- package/dist/sdk/terminal/logs.js +59 -0
- package/dist/sdk/terminal/opentui/ansi.d.ts +25 -0
- package/dist/sdk/terminal/opentui/ansi.js +192 -0
- package/dist/sdk/terminal/opentui/model.d.ts +163 -0
- package/dist/sdk/terminal/opentui/model.js +484 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.js +54 -0
- package/dist/sdk/terminal/opentui/theme.d.ts +47 -0
- package/dist/sdk/terminal/opentui/theme.js +93 -0
- package/dist/sdk/terminal/piExtension.d.ts +12 -0
- package/dist/sdk/terminal/piExtension.js +847 -0
- package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
- package/dist/sdk/terminal/pluginMenu.js +101 -0
- package/dist/sdk/terminal/socket.d.ts +73 -0
- package/dist/sdk/terminal/socket.js +287 -0
- package/dist/sdk/terminal/standalone.d.ts +52 -0
- package/dist/sdk/terminal/standalone.js +329 -0
- package/dist/sdk/terminal/subagentMonitor.d.ts +62 -0
- package/dist/sdk/terminal/subagentMonitor.js +176 -0
- package/dist/sdk/terminal/terminals.d.ts +312 -0
- package/dist/sdk/terminal/terminals.js +1782 -0
- package/dist/sdk/terminal/toolName.d.ts +6 -0
- package/dist/sdk/terminal/toolName.js +12 -0
- package/dist/sdk/terminal/trajectory.d.ts +15 -0
- package/dist/sdk/terminal/trajectory.js +38 -0
- package/dist/sdk/terminal/tui/annotateCommand.d.ts +7 -0
- package/dist/sdk/terminal/tui/annotateCommand.js +36 -0
- package/dist/sdk/terminal/tui/annotateSend.d.ts +30 -0
- package/dist/sdk/terminal/tui/annotateSend.js +40 -0
- package/dist/sdk/terminal/tui/chrome.d.ts +68 -0
- package/dist/sdk/terminal/tui/chrome.js +182 -0
- package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
- package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
- package/dist/sdk/terminal/tui/commandPages.d.ts +16 -0
- package/dist/sdk/terminal/tui/commandPages.js +136 -0
- package/dist/sdk/terminal/tui/commands.d.ts +71 -0
- package/dist/sdk/terminal/tui/commands.js +496 -0
- package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
- package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
- package/dist/sdk/terminal/tui/dialogs.d.ts +81 -0
- package/dist/sdk/terminal/tui/dialogs.js +372 -0
- package/dist/sdk/terminal/tui/goalCommand.d.ts +19 -0
- package/dist/sdk/terminal/tui/goalCommand.js +83 -0
- package/dist/sdk/terminal/tui/harnessRuntime.d.ts +8 -0
- package/dist/sdk/terminal/tui/harnessRuntime.js +771 -0
- package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
- package/dist/sdk/terminal/tui/keybindings.js +49 -0
- package/dist/sdk/terminal/tui/list.d.ts +86 -0
- package/dist/sdk/terminal/tui/list.js +278 -0
- package/dist/sdk/terminal/tui/markdown.d.ts +16 -0
- package/dist/sdk/terminal/tui/markdown.js +55 -0
- package/dist/sdk/terminal/tui/modeChoices.d.ts +61 -0
- package/dist/sdk/terminal/tui/modeChoices.js +95 -0
- package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
- package/dist/sdk/terminal/tui/modelPicker.js +150 -0
- package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
- package/dist/sdk/terminal/tui/mouse.js +3 -0
- package/dist/sdk/terminal/tui/mouseReport.d.ts +30 -0
- package/dist/sdk/terminal/tui/mouseReport.js +80 -0
- package/dist/sdk/terminal/tui/page.d.ts +17 -0
- package/dist/sdk/terminal/tui/page.js +1 -0
- package/dist/sdk/terminal/tui/pageOverlay.d.ts +30 -0
- package/dist/sdk/terminal/tui/pageOverlay.js +183 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.js +193 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +148 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.js +576 -0
- package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
- package/dist/sdk/terminal/tui/pages/browserPage.js +739 -0
- package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
- package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
- package/dist/sdk/terminal/tui/pages/contextPage.d.ts +91 -0
- package/dist/sdk/terminal/tui/pages/contextPage.js +585 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
- package/dist/sdk/terminal/tui/pages/followUpQueuePage.d.ts +34 -0
- package/dist/sdk/terminal/tui/pages/followUpQueuePage.js +130 -0
- package/dist/sdk/terminal/tui/pages/hubPage.d.ts +52 -0
- package/dist/sdk/terminal/tui/pages/hubPage.js +292 -0
- package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
- package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
- package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
- package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +65 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.js +519 -0
- package/dist/sdk/terminal/tui/pages/remoteControlPage.d.ts +32 -0
- package/dist/sdk/terminal/tui/pages/remoteControlPage.js +170 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.js +155 -0
- package/dist/sdk/terminal/tui/pages/textPage.d.ts +17 -0
- package/dist/sdk/terminal/tui/pages/textPage.js +52 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +66 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.js +490 -0
- package/dist/sdk/terminal/tui/pages/usagePage.d.ts +45 -0
- package/dist/sdk/terminal/tui/pages/usagePage.js +397 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
- package/dist/sdk/terminal/tui/piAdapter.d.ts +17 -0
- package/dist/sdk/terminal/tui/piAdapter.js +46 -0
- package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
- package/dist/sdk/terminal/tui/planMode.js +2 -0
- package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
- package/dist/sdk/terminal/tui/pluginCommands.js +41 -0
- package/dist/sdk/terminal/tui/qr.d.ts +4 -0
- package/dist/sdk/terminal/tui/qr.js +35 -0
- package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
- package/dist/sdk/terminal/tui/questionPicker.js +150 -0
- package/dist/sdk/terminal/tui/questions.d.ts +21 -0
- package/dist/sdk/terminal/tui/questions.js +42 -0
- package/dist/sdk/terminal/tui/runtime.d.ts +117 -0
- package/dist/sdk/terminal/tui/runtime.js +544 -0
- package/dist/sdk/terminal/tui/search.d.ts +22 -0
- package/dist/sdk/terminal/tui/search.js +61 -0
- package/dist/sdk/terminal/tui/selection.d.ts +16 -0
- package/dist/sdk/terminal/tui/selection.js +16 -0
- package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
- package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
- package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
- package/dist/sdk/terminal/tui/sessionUi.js +30 -0
- package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
- package/dist/sdk/terminal/tui/settingsModel.js +195 -0
- package/dist/sdk/terminal/tui/sideQuestion.d.ts +57 -0
- package/dist/sdk/terminal/tui/sideQuestion.js +241 -0
- package/dist/sdk/terminal/tui/skillInvocation.d.ts +28 -0
- package/dist/sdk/terminal/tui/skillInvocation.js +63 -0
- package/dist/sdk/terminal/tui/status.d.ts +18 -0
- package/dist/sdk/terminal/tui/status.js +67 -0
- package/dist/sdk/terminal/tui/theme.d.ts +54 -0
- package/dist/sdk/terminal/tui/theme.js +185 -0
- package/dist/sdk/terminal/tui/thinkingLevels.d.ts +11 -0
- package/dist/sdk/terminal/tui/thinkingLevels.js +31 -0
- package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
- package/dist/sdk/terminal/tui/treeModel.js +483 -0
- package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
- package/dist/sdk/terminal/tui/treePicker.js +251 -0
- package/dist/sdk/terminal/tui/ui.d.ts +49 -0
- package/dist/sdk/terminal/tui/ui.js +149 -0
- package/dist/sdk/terminal/tui/variantCommands.d.ts +32 -0
- package/dist/sdk/terminal/tui/variantCommands.js +359 -0
- package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
- package/dist/sdk/terminal/tui/workingStatus.js +229 -0
- package/dist/sdk/terminal/variantControl.d.ts +24 -0
- package/dist/sdk/terminal/variantControl.js +145 -0
- package/dist/sdk/tools/askUser.d.ts +6 -0
- package/dist/sdk/tools/askUser.js +92 -0
- package/dist/sdk/tools/defaultSkills.d.ts +23 -0
- package/dist/sdk/tools/defaultSkills.js +46 -0
- package/dist/sdk/tools/definitions.d.ts +32 -0
- package/dist/sdk/tools/definitions.js +133 -0
- package/dist/sdk/tools/dispatch.d.ts +16 -0
- package/dist/sdk/tools/dispatch.js +92 -0
- package/dist/sdk/tools/getCapabilities.d.ts +31 -0
- package/dist/sdk/tools/getCapabilities.js +34 -0
- package/dist/sdk/tools/harnessTools.d.ts +8 -0
- package/dist/sdk/tools/harnessTools.js +20 -0
- package/dist/sdk/tools/sessionName.d.ts +16 -0
- package/dist/sdk/tools/sessionName.js +78 -0
- package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
- package/dist/sdk/tools/spawnSubagent.js +63 -0
- package/dist/sdk/tools/todo.d.ts +15 -0
- package/dist/sdk/tools/todo.js +66 -0
- package/dist/sdk/tools/types.d.ts +48 -0
- package/dist/sdk/tools/types.js +1 -0
- package/dist/sdk/usage/analytics.d.ts +20 -0
- package/dist/sdk/usage/analytics.js +151 -0
- package/dist/sdk/usage/ledger.d.ts +38 -0
- package/dist/sdk/usage/ledger.js +142 -0
- package/dist/sdk/usage/limits/adapters.d.ts +11 -0
- package/dist/sdk/usage/limits/adapters.js +349 -0
- package/dist/sdk/usage/limits/capture.d.ts +8 -0
- package/dist/sdk/usage/limits/capture.js +47 -0
- package/dist/sdk/usage/limits/http.d.ts +12 -0
- package/dist/sdk/usage/limits/http.js +51 -0
- package/dist/sdk/usage/limits/normalize.d.ts +15 -0
- package/dist/sdk/usage/limits/normalize.js +211 -0
- package/dist/sdk/usage/limits/service.d.ts +30 -0
- package/dist/sdk/usage/limits/service.js +176 -0
- package/dist/sdk/usage/limits/types.d.ts +65 -0
- package/dist/sdk/usage/limits/types.js +1 -0
- package/dist/sdk/usage/serverMethods.d.ts +3 -0
- package/dist/sdk/usage/serverMethods.js +22 -0
- package/dist/sdk/usage/service.d.ts +32 -0
- package/dist/sdk/usage/service.js +66 -0
- package/dist/sdk/usage/settings.d.ts +7 -0
- package/dist/sdk/usage/settings.js +28 -0
- package/dist/sdk/usage/types.d.ts +60 -0
- package/dist/sdk/usage/types.js +4 -0
- package/dist/sdk/variant/components.d.ts +34 -0
- package/dist/sdk/variant/components.js +230 -0
- package/dist/sdk/variant/materialise.d.ts +66 -0
- package/dist/sdk/variant/materialise.js +81 -0
- package/dist/sdk/variant/migrate.d.ts +4 -0
- package/dist/sdk/variant/migrate.js +41 -0
- package/dist/sdk/variant/seed.d.ts +20 -0
- package/dist/sdk/variant/seed.js +116 -0
- package/dist/sdk/variant/store.d.ts +114 -0
- package/dist/sdk/variant/store.js +256 -0
- package/dist/sdk/variant/surface.d.ts +56 -0
- package/dist/sdk/variant/surface.js +81 -0
- package/dist/sdk/variant/trust.d.ts +27 -0
- package/dist/sdk/variant/trust.js +64 -0
- package/dist/sdk/variant/variant.d.ts +71 -0
- package/dist/sdk/variant/variant.js +331 -0
- package/dist/sdk/web/markdown.d.ts +10 -0
- package/dist/sdk/web/markdown.js +66 -0
- package/dist/sdk/web/part.d.ts +10 -0
- package/dist/sdk/web/part.js +6 -0
- package/dist/sdk/web/safeRequest.d.ts +34 -0
- package/dist/sdk/web/safeRequest.js +175 -0
- package/dist/sdk/web/search.d.ts +53 -0
- package/dist/sdk/web/search.js +168 -0
- package/dist/sdk/web/serverMethods.d.ts +3 -0
- package/dist/sdk/web/serverMethods.js +7 -0
- package/dist/sdk/web/text.d.ts +2 -0
- package/dist/sdk/web/text.js +7 -0
- package/dist/sdk/web/tools.d.ts +22 -0
- package/dist/sdk/web/tools.js +195 -0
- package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
- package/dist/sdk/wiki/notes.d.ts +68 -0
- package/dist/sdk/wiki/notes.js +297 -0
- package/dist/sdk/wiki/serverMethods.d.ts +3 -0
- package/dist/sdk/wiki/serverMethods.js +26 -0
- package/dist/sdk/worktrees/cli.d.ts +11 -0
- package/dist/sdk/worktrees/cli.js +146 -0
- package/dist/sdk/worktrees/copy.d.ts +9 -0
- package/dist/sdk/worktrees/copy.js +111 -0
- package/dist/sdk/worktrees/git.d.ts +18 -0
- package/dist/sdk/worktrees/git.js +89 -0
- package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
- package/dist/sdk/worktrees/serverMethods.js +30 -0
- package/dist/sdk/worktrees/service.d.ts +73 -0
- package/dist/sdk/worktrees/service.js +483 -0
- package/dist/sdk/worktrees/setup.d.ts +23 -0
- package/dist/sdk/worktrees/setup.js +65 -0
- package/dist/sdk/worktrees/snapshot.d.ts +16 -0
- package/dist/sdk/worktrees/snapshot.js +83 -0
- package/dist/sdk/worktrees/types.d.ts +91 -0
- package/dist/sdk/worktrees/types.js +1 -0
- package/dist/sdk/world/actions.d.ts +23 -0
- package/dist/sdk/world/actions.js +31 -0
- package/dist/sdk/world/cli.d.ts +12 -0
- package/dist/sdk/world/cli.js +166 -0
- package/dist/sdk/world/images.d.ts +20 -0
- package/dist/sdk/world/images.js +48 -0
- package/dist/sdk/world/untrusted.d.ts +12 -0
- package/dist/sdk/world/untrusted.js +20 -0
- package/dist/sdk/world/world.d.ts +75 -0
- package/dist/sdk/world/world.js +117 -0
- package/dist/terminal-opentui.js +30986 -0
- package/dist/terminal-pi.js +3008 -610
- package/docs/README.md +45 -1
- package/docs/architecture/00-overview.md +171 -0
- package/docs/architecture/01-extension-points.md +78 -0
- package/docs/architecture/02-sessions-and-runs.md +505 -0
- package/docs/architecture/03-variants.md +122 -0
- package/docs/architecture/04-prompt.md +277 -0
- package/docs/architecture/05-refinement.md +134 -0
- package/docs/architecture/06-plugins-and-capabilities.md +208 -0
- package/docs/architecture/07-tools-and-gate.md +245 -0
- package/docs/architecture/08-memory-and-history.md +100 -0
- package/docs/architecture/09-accounts-and-connectors.md +153 -0
- package/docs/architecture/10-server-protocol.md +403 -0
- package/docs/architecture/11-terminal.md +555 -0
- package/docs/architecture/12-storage.md +118 -0
- package/docs/architecture/13-world-tools.md +114 -0
- package/docs/architecture/14-surfaces-and-parity.md +151 -0
- package/docs/architecture/15-remote-control.md +120 -0
- package/docs/architecture/README.md +143 -0
- package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
- package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
- package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
- package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
- package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
- package/docs/architecture/proposals/PROP-0006-run-checklist.md +72 -0
- package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
- package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
- package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
- package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
- package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
- package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
- package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
- package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
- package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
- package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
- package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
- package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +183 -0
- package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
- package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
- package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
- package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
- package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
- package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
- package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
- package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +96 -0
- package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
- package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
- package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
- package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
- package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
- package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
- package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
- package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
- package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
- package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
- package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
- package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
- package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
- package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
- package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +260 -0
- package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
- package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
- package/docs/architecture/proposals/PROP-0044-work-slice-defaults.md +93 -0
- package/docs/architecture/proposals/PROP-0045-rename-checklist-to-todo.md +132 -0
- package/docs/architecture/proposals/PROP-0046-progress-aware-stall-guards.md +82 -0
- package/docs/architecture/proposals/PROP-0047-plugins-hub-separation.md +122 -0
- package/docs/architecture/proposals/PROP-0048-simple-annotate.md +85 -0
- package/docs/architecture/proposals/PROP-0049-context-attribution.md +415 -0
- package/docs/architecture/proposals/PROP-0050-run-stop-codes-and-refusals.md +30 -0
- package/docs/architecture/proposals/PROP-0051-unfinished-run-handoff.md +110 -0
- package/docs/architecture/proposals/PROP-0052-terminal-refine-and-variant-switch.md +111 -0
- package/docs/architecture/proposals/README.md +123 -0
- package/docs/decisions/ADR-0001-owned-terminal.md +10 -3
- package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +3 -1
- package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +3 -2
- package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
- package/docs/decisions/ADR-0007-reporting-section.md +33 -0
- package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +41 -0
- package/docs/decisions/ADR-0009-xharness-command.md +39 -0
- package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
- package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
- package/docs/decisions/ADR-0012-native-session-names.md +34 -0
- package/docs/decisions/ADR-0013-doctor.md +27 -0
- package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
- package/docs/decisions/ADR-0015-resource-browser.md +28 -0
- package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
- package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
- package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
- package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
- package/docs/decisions/ADR-0020-page-annotations.md +37 -0
- package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
- package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
- package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
- package/docs/decisions/ADR-0024-xagent-command.md +40 -0
- package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
- package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
- package/docs/decisions/ADR-0027-connected-sketch-display.md +62 -0
- package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
- package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
- package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
- package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
- package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +35 -0
- package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
- package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
- package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
- package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
- package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
- package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
- package/docs/decisions/ADR-0039-progress-aware-stall-guards.md +43 -0
- package/docs/decisions/ADR-0040-architecture-change-workflow.md +31 -0
- package/docs/decisions/ADR-0041-plugins-hub-separation.md +41 -0
- package/docs/decisions/ADR-0042-windows-shell-without-sandbox.md +40 -0
- package/docs/decisions/ADR-0043-parents-continue-stopped-subagents.md +49 -0
- package/docs/decisions/ADR-0044-annotations-pending-or-sent.md +24 -0
- package/docs/decisions/ADR-0045-default-plugin-authoring-skill.md +9 -0
- package/docs/decisions/ADR-0046-hash-bound-plugin-proposals.md +20 -0
- package/docs/decisions/ADR-0047-links-open-with-the-os-handler.md +47 -0
- package/docs/decisions/ADR-0048-required-skills-from-a-message.md +42 -0
- package/docs/decisions/ADR-0050-approved-window-screenshots.md +19 -0
- package/docs/decisions/ADR-0051-terminal-decision-wait.md +10 -0
- package/docs/decisions/ADR-0052-per-profile-subagent-budgets.md +25 -0
- package/docs/decisions/ADR-0053-no-repeated-work-guard.md +45 -0
- package/docs/decisions/ADR-0054-terminal-reply-heartbeat-and-stall.md +52 -0
- package/docs/decisions/ADR-0055-plan-output-repair.md +51 -0
- package/docs/decisions/ADR-0056-remote-control.md +53 -0
- package/docs/decisions/ADR-0057-structured-plan-outcomes.md +39 -0
- package/docs/decisions/ADR-0058-ask-user-only-plan-clarification.md +36 -0
- package/docs/decisions/ADR-0059-run-diagnostic-evidence.md +35 -0
- package/docs/decisions/ADR-0060-approvals-are-controls.md +40 -0
- package/docs/decisions/ADR-0061-strict-plugin-command-namespaces.md +41 -0
- package/docs/decisions/ADR-0062-shared-account-state.md +67 -0
- package/docs/decisions/ADR-0063-unfinished-work-handoffs.md +34 -0
- package/docs/decisions/ADR-0064-account-model-fallback-on-resume.md +79 -0
- package/docs/decisions/ADR-0065-variant-switch-at-turn-boundaries.md +31 -0
- package/docs/decisions/ADR-0066-guided-refinement-from-turn-snapshots.md +37 -0
- package/docs/decisions/ADR-0067-cache-stable-compaction-checkpoint.md +54 -0
- package/docs/decisions/ADR-0068-scope-and-completion-report.md +60 -0
- package/docs/decisions/ADR-0069-stop-gate-and-finish.md +136 -0
- package/docs/decisions/ADR-0070-terminal-slice-continuation.md +49 -0
- package/docs/decisions/ADR-0071-completion-check.md +104 -0
- package/docs/decisions/ADR-0072-codex-prompts-and-goal.md +108 -0
- package/docs/decisions/ADR-0073-large-reporting-prompt.md +89 -0
- package/docs/decisions/ADR-0074-report-content-not-report-blocks.md +90 -0
- package/docs/decisions/ADR-0075-no-todo-gate.md +84 -0
- package/docs/decisions/ADR-0076-codex-final-answer-verbatim.md +98 -0
- package/docs/decisions/ADR-0077-plan-runs-may-conclude-no-plan-needed.md +120 -0
- package/docs/decisions/ADR-0078-child-aware-stall-watch.md +46 -0
- package/docs/decisions/ADR-0079-phase-led-reporting-guidance.md +72 -0
- package/docs/decisions/ADR-0080-fixed-width-question-sketch-canvas.md +50 -0
- package/docs/decisions/ADR-0081-no-work-slice-budget-by-default.md +36 -0
- package/docs/decisions/ADR-0082-connected-brave-browser.md +72 -0
- package/docs/decisions/ADR-0083-one-live-session-runtime.md +256 -0
- package/docs/doctor.md +95 -0
- package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
- package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
- package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
- package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
- package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
- package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
- package/docs/features/README.md +46 -0
- package/docs/features/automations/README.md +41 -0
- package/docs/features/cores/README.md +39 -0
- package/docs/features/google-harness2/README.md +52 -0
- package/docs/features/integrations/README.md +40 -0
- package/docs/features/interfaces/README.md +29 -0
- package/docs/features/memory/README.md +28 -0
- package/docs/future-work.md +48 -0
- package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
- package/docs/parity.md +158 -0
- package/docs/releases/1.0.0.md +40 -0
- package/docs/releases/1.1.1.md +28 -0
- package/docs/releases/1.2.0.md +49 -0
- package/docs/releases/1.3.0.md +21 -0
- package/docs/releases/1.3.1-unstable.1.md +8 -0
- package/docs/releases/1.3.1-unstable.2.md +11 -0
- package/docs/releases/1.3.1-unstable.3.md +54 -0
- package/docs/releases/1.3.1-unstable.4.md +56 -0
- package/docs/releases/1.3.1-unstable.5.md +53 -0
- package/docs/releases/1.3.1-unstable.6.md +31 -0
- package/docs/releases/1.3.1-unstable.7.md +17 -0
- package/docs/releases/1.3.1-unstable.8.md +19 -0
- package/docs/releases/1.3.1-unstable.9.md +54 -0
- package/docs/releases/1.4.0-unstable.md +25 -0
- package/docs/releases/1.5.0-unstable.md +32 -0
- package/docs/releases/1.5.1-unstable.md +24 -0
- package/docs/releases/1.6.0-unstable.md +59 -0
- package/docs/releases/2.0.1-unstable.md +63 -0
- package/docs/releases/4.0.0.md +47 -0
- package/docs/releases/README.md +49 -0
- package/docs/study/00-index.md +112 -0
- package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
- package/docs/study/STUDY-0004-turn-end-controls.md +130 -0
- package/docs/study/STUDY-0005-skill-installation-guidance.md +146 -0
- package/docs/study/STUDY-0006-reporting-prompts.md +119 -0
- package/docs/study/STUDY-0007-claude-code-prompt.md +162 -0
- package/docs/study/STUDY-0008-browser-control.md +281 -0
- package/docs/study/STUDY-0009-claude-code-reporting.md +205 -0
- package/docs/study/arms/00-matrix.md +20 -0
- package/docs/study/arms/01-system-prompt.md +211 -0
- package/docs/study/arms/02-tools.md +79 -0
- package/docs/study/arms/03-subagents.md +90 -0
- package/docs/study/arms/04-skills.md +81 -0
- package/docs/study/arms/05-context-management.md +90 -0
- package/docs/study/arms/06-memory.md +90 -0
- package/docs/study/arms/07-governance.md +71 -0
- package/docs/study/arms/08-execution.md +69 -0
- package/docs/study/arms/09-observability.md +60 -0
- package/docs/study/arms/10-refinement.md +110 -0
- package/docs/study/autonomous-engineering-sources.md +277 -0
- package/docs/study/autonomy-sources.md +147 -0
- package/docs/study/btw-comparison.md +37 -0
- package/docs/study/feature-gap-review.md +42 -0
- package/docs/study/insights.md +123 -0
- package/docs/study/proactive-autonomy.md +408 -0
- package/docs/study/roadmap.md +72 -0
- package/docs/study/sources/claude-code.md +56 -0
- package/docs/study/sources/deepseek-harness.md +102 -0
- package/docs/study/sources/harness2.md +50 -0
- package/docs/study/sources/kimi-cli.md +42 -0
- package/docs/study/sources/omp.md +93 -0
- package/docs/study/sources/opencode.md +43 -0
- package/docs/study/sources/openhands.md +46 -0
- package/docs/study/sources/smolagents.md +40 -0
- package/docs/study/sources/swe-agent.md +34 -0
- package/docs/study/tui-resource-browser.md +78 -0
- package/docs/system-prompt-design.md +196 -0
- package/docs/terminal-tui.md +887 -109
- package/package.json +46 -13
- package/src/accounts/accounts.test.ts +0 -419
- package/src/accounts/accounts.ts +0 -760
- package/src/accounts/env.test.ts +0 -95
- package/src/accounts/env.ts +0 -338
- package/src/accounts/secrets.ts +0 -50
- package/src/accounts/store.ts +0 -338
- package/src/capabilities/api.ts +0 -75
- package/src/capabilities/runSnapshot.ts +0 -59
- package/src/capabilities/types.ts +0 -34
- package/src/cli.ts +0 -118
- package/src/core/bus.test.ts +0 -22
- package/src/core/bus.ts +0 -49
- package/src/core/changes.ts +0 -33
- package/src/core/env.ts +0 -27
- package/src/core/errors.ts +0 -32
- package/src/core/frontmatter.ts +0 -47
- package/src/core/fs.test.ts +0 -38
- package/src/core/fs.ts +0 -92
- package/src/core/index.ts +0 -193
- package/src/core/path.test.ts +0 -14
- package/src/core/path.ts +0 -79
- package/src/core/projects.ts +0 -90
- package/src/core/text.ts +0 -39
- package/src/harness.ts +0 -322
- package/src/hub/catalog.json +0 -123
- package/src/hub/cli.ts +0 -59
- package/src/hub/hub.test.ts +0 -205
- package/src/hub/hub.ts +0 -256
- package/src/hub/schema.ts +0 -81
- package/src/index.ts +0 -80
- package/src/mcp/connections.ts +0 -641
- package/src/mcp/manager.ts +0 -130
- package/src/mcp/oauth.ts +0 -195
- package/src/mcp/scopeMigration.test.ts +0 -79
- package/src/mcp/scopeMigration.ts +0 -204
- package/src/mcp/service.test.ts +0 -422
- package/src/mcp/service.ts +0 -560
- package/src/mcp/types.ts +0 -118
- package/src/memory/api.test.ts +0 -82
- package/src/memory/api.ts +0 -303
- package/src/memory/blocks.test.ts +0 -78
- package/src/memory/blocks.ts +0 -408
- package/src/memory/caller.ts +0 -69
- package/src/memory/curation.test.ts +0 -206
- package/src/memory/curation.ts +0 -64
- package/src/memory/dispatch.ts +0 -64
- package/src/memory/facts.test.ts +0 -41
- package/src/memory/facts.ts +0 -248
- package/src/memory/graph.ts +0 -103
- package/src/memory/health.test.ts +0 -130
- package/src/memory/health.ts +0 -74
- package/src/memory/maintainer.ts +0 -272
- package/src/memory/maintenance.test.ts +0 -192
- package/src/memory/maintenance.ts +0 -679
- package/src/memory/migrate.ts +0 -79
- package/src/memory/operations.ts +0 -150
- package/src/memory/proposals.test.ts +0 -168
- package/src/memory/proposals.ts +0 -584
- package/src/memory/recall.test.ts +0 -115
- package/src/memory/recall.ts +0 -279
- package/src/memory/references.ts +0 -77
- package/src/memory/runContext.ts +0 -93
- package/src/memory/secrets.ts +0 -6
- package/src/memory/store.test.ts +0 -66
- package/src/memory/store.ts +0 -385
- package/src/memory/trajectory.test.ts +0 -178
- package/src/memory/trajectory.ts +0 -220
- package/src/memory/wiki.test.ts +0 -47
- package/src/memory/wiki.ts +0 -423
- package/src/memory/wikiIndex.test.ts +0 -88
- package/src/memory/wikiIndex.ts +0 -117
- package/src/plugins/api.ts +0 -181
- package/src/plugins/attachments.test.ts +0 -84
- package/src/plugins/attachments.ts +0 -141
- package/src/plugins/builtin.ts +0 -84
- package/src/plugins/catalogue.test.ts +0 -254
- package/src/plugins/catalogue.ts +0 -251
- package/src/plugins/cli.ts +0 -184
- package/src/plugins/discover.ts +0 -151
- package/src/plugins/firstParty.test.ts +0 -143
- package/src/plugins/firstParty.ts +0 -129
- package/src/plugins/hooks.test.ts +0 -250
- package/src/plugins/hooks.ts +0 -239
- package/src/plugins/identity.ts +0 -37
- package/src/plugins/install.test.ts +0 -107
- package/src/plugins/install.ts +0 -106
- package/src/plugins/inventory.ts +0 -123
- package/src/plugins/manifest.ts +0 -76
- package/src/plugins/plugins.test.ts +0 -205
- package/src/plugins/plugins.ts +0 -189
- package/src/plugins/proposal.ts +0 -121
- package/src/plugins/runtime.test.ts +0 -40
- package/src/plugins/runtime.ts +0 -82
- package/src/plugins/trust.ts +0 -142
- package/src/plugins/types.ts +0 -149
- package/src/prompt/compile.test.ts +0 -261
- package/src/prompt/compile.ts +0 -732
- package/src/server/methods.ts +0 -355
- package/src/server/remote.ts +0 -77
- package/src/server/rpc.ts +0 -116
- package/src/server/serve.ts +0 -28
- package/src/server/server.test.ts +0 -193
- package/src/sessions/approvals.test.ts +0 -49
- package/src/sessions/approvals.ts +0 -140
- package/src/sessions/contracts.ts +0 -336
- package/src/sessions/conversation.test.ts +0 -233
- package/src/sessions/extensionSession.test.ts +0 -74
- package/src/sessions/extensionUi.test.ts +0 -65
- package/src/sessions/extensionUi.ts +0 -102
- package/src/sessions/history.ts +0 -51
- package/src/sessions/lineageJoin.ts +0 -75
- package/src/sessions/policy.ts +0 -36
- package/src/sessions/pricing.ts +0 -60
- package/src/sessions/questionBatches.test.ts +0 -110
- package/src/sessions/reasoningSummaries.ts +0 -59
- package/src/sessions/registry.ts +0 -412
- package/src/sessions/runIndex.ts +0 -99
- package/src/sessions/runStore.test.ts +0 -152
- package/src/sessions/runStore.ts +0 -346
- package/src/sessions/runner.ts +0 -610
- package/src/sessions/runtimeResources.test.ts +0 -61
- package/src/sessions/sessions.test.ts +0 -588
- package/src/sessions/sessions.ts +0 -331
- package/src/sessions/subagentService.test.ts +0 -159
- package/src/sessions/subagentService.ts +0 -236
- package/src/sessions/subagents.ts +0 -97
- package/src/skills/registry.test.ts +0 -104
- package/src/skills/registry.ts +0 -413
- package/src/terminal/accountsMenu.test.ts +0 -225
- package/src/terminal/accountsMenu.ts +0 -382
- package/src/terminal/cli.ts +0 -149
- package/src/terminal/client.ts +0 -74
- package/src/terminal/control.test.ts +0 -23
- package/src/terminal/control.ts +0 -23
- package/src/terminal/controller.ts +0 -354
- package/src/terminal/hubMenu.ts +0 -24
- package/src/terminal/launch.test.ts +0 -25
- package/src/terminal/launch.ts +0 -48
- package/src/terminal/piExtension.lifecycle.test.ts +0 -55
- package/src/terminal/piExtension.ts +0 -295
- package/src/terminal/pluginControl.test.ts +0 -146
- package/src/terminal/pluginMenu.ts +0 -112
- package/src/terminal/socket.test.ts +0 -94
- package/src/terminal/socket.ts +0 -256
- package/src/terminal/standalone.test.ts +0 -167
- package/src/terminal/standalone.ts +0 -165
- package/src/terminal/terminal.test.ts +0 -534
- package/src/terminal/terminals.ts +0 -661
- package/src/terminal/trajectory.test.ts +0 -66
- package/src/terminal/trajectory.ts +0 -44
- package/src/terminal/tui/application.test.ts +0 -290
- package/src/terminal/tui/application.ts +0 -653
- package/src/terminal/tui/commands.test.ts +0 -278
- package/src/terminal/tui/commands.ts +0 -443
- package/src/terminal/tui/dialogs.ts +0 -301
- package/src/terminal/tui/editor.test.ts +0 -113
- package/src/terminal/tui/editor.ts +0 -109
- package/src/terminal/tui/keybindings.test.ts +0 -30
- package/src/terminal/tui/keybindings.ts +0 -59
- package/src/terminal/tui/piAdapter.ts +0 -62
- package/src/terminal/tui/planMode.test.ts +0 -10
- package/src/terminal/tui/planMode.ts +0 -12
- package/src/terminal/tui/presentation.test.ts +0 -79
- package/src/terminal/tui/questions.test.ts +0 -41
- package/src/terminal/tui/questions.ts +0 -47
- package/src/terminal/tui/runtime.socket.test.ts +0 -178
- package/src/terminal/tui/runtime.test.ts +0 -225
- package/src/terminal/tui/runtime.ts +0 -403
- package/src/terminal/tui/screen.test.ts +0 -143
- package/src/terminal/tui/screen.ts +0 -121
- package/src/terminal/tui/sessionUi.ts +0 -24
- package/src/terminal/tui/settings.test.ts +0 -150
- package/src/terminal/tui/settings.ts +0 -188
- package/src/terminal/tui/skillInvocation.test.ts +0 -71
- package/src/terminal/tui/skillInvocation.ts +0 -51
- package/src/terminal/tui/status.test.ts +0 -48
- package/src/terminal/tui/status.ts +0 -82
- package/src/terminal/tui/theme.ts +0 -185
- package/src/terminal/tui/tools.test.ts +0 -145
- package/src/terminal/tui/tools.ts +0 -142
- package/src/terminal/tui/trajectoryPanel.test.ts +0 -99
- package/src/terminal/tui/trajectoryPanel.ts +0 -226
- package/src/terminal/tui/transcript.test.ts +0 -39
- package/src/terminal/tui/transcript.ts +0 -135
- package/src/terminal/tui/ui.test.ts +0 -313
- package/src/terminal/tui/ui.ts +0 -166
- package/src/terminal/tui/welcome.ts +0 -102
- package/src/terminal/tui/workingStatus.test.ts +0 -44
- package/src/terminal/tui/workingStatus.ts +0 -238
- package/src/tools/askUser.test.ts +0 -69
- package/src/tools/askUser.ts +0 -59
- package/src/tools/definitions.ts +0 -228
- package/src/tools/maintenance.ts +0 -29
- package/src/tools/memoryTools.ts +0 -22
- package/src/tools/pluginPropose.ts +0 -41
- package/src/tools/registryWrite.test.ts +0 -101
- package/src/tools/registryWrite.ts +0 -182
- package/src/tools/spawnSubagent.ts +0 -47
- package/src/tools/types.ts +0 -41
- package/src/web/safeRequest.ts +0 -171
- package/src/web/text.ts +0 -53
- package/src/web/tools.ts +0 -134
- package/src/web/web.test.ts +0 -141
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
# 11 Terminal
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The harness owns a generic interactive terminal application (`xagent`) over a
|
|
6
|
+
persistent Pi session on a variant. It is the standalone way to use the harness, and an
|
|
7
|
+
embedding application can host it in its own PTY. Detail, screen layout and verification evidence
|
|
8
|
+
are in [`../terminal-tui.md`](../terminal-tui.md); this page states the binding parts.
|
|
9
|
+
|
|
10
|
+
## Components
|
|
11
|
+
|
|
12
|
+
| Type / module | Role |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `Terminals` (`terminal/terminals.ts`) | Parent side: `prepare` (account, compiled context, trusted resources, run writer) returns a launch specification; `send`, `state`, `input`, `dispose`. |
|
|
15
|
+
| `src/terminal/opentui/` (`app.ts`, `root.tsx`) | The OpenTUI/Solid frontend: lifecycle, submission, commands, decisions, composition, transcript, composer, dialogs. |
|
|
16
|
+
| `src/terminal/opentui/attachments.ts`, `composerMarks.ts` | Composer attachments: pasted images and collapsed large pastes, their atomic labels, and expansion into the prompt text and Pi image content on send. |
|
|
17
|
+
| `src/terminal/tui/runtime.ts` | `AgentSessionRuntime` over `createAgentSession`, `ModelRuntime`, `SessionManager`, `DefaultResourceLoader`. |
|
|
18
|
+
| `src/terminal/socket.ts`, `client.ts`, `control.ts`, `controller.ts` | The session socket, the private control key, and the run controller. |
|
|
19
|
+
| `src/terminal/piExtension.ts` | The bridge extension, loaded last as the trusted inline gate. |
|
|
20
|
+
| `src/terminal/cli.ts` | Wiki and connected-apps commands for the session's shell. |
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
Harness parent: account + compiled context + trusted resources + run writer
|
|
24
|
+
| launch specification / session socket
|
|
25
|
+
Harness terminal child (Bun): OpenTUI application + persistent Pi AgentSessionRuntime
|
|
26
|
+
| typed native events / plugin UI callbacks
|
|
27
|
+
Screen: transcript above the composer, centred dialogs, full-screen resource browser
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Contracts
|
|
31
|
+
|
|
32
|
+
- The published executable is `xagent`; `xharness` is not retained as a compatibility alias. With no command, `xagent` starts the interactive terminal. `terminal` remains an explicit alias, and `serve` remains the host-facing RPC path.
|
|
33
|
+
- `TerminalAssets` is `{ node, cli, piExtension, openTui }`. The command is Bun with
|
|
34
|
+
`--conditions=browser` and `dist/terminal-opentui.js`; no global `pi` is needed.
|
|
35
|
+
- The `piExtension` path is the final prepared extension argument; the runtime loads it as the
|
|
36
|
+
final trusted inline factory.
|
|
37
|
+
- Each terminal `begin` returns the run's pinned `workspaceRoot` to that extension. Native file
|
|
38
|
+
writes use the same revalidated atomic helper and OS write scope as SDK sessions. Terminal Bash,
|
|
39
|
+
including initial `!` commands, defaults to the workspace sandbox and external-hard-link scan;
|
|
40
|
+
`!outside <command>` requests human-only approval before that exact command runs once; its full
|
|
41
|
+
escaped command is available in scrollable approval details, and an undersized terminal denies
|
|
42
|
+
the request. The eligible Full Permission switch is the only standing boundary bypass; remembered
|
|
43
|
+
per-tool grants do not widen it, and command output never triggers approval or replay.
|
|
44
|
+
- The terminal compiles its prompt once (`compile` + `render`) and keeps that pack; each run
|
|
45
|
+
records a copy (page 04). Switching the conversation to another variant version (`/variant`,
|
|
46
|
+
restoring, reverting, or adopting a refinement) restarts the frontend on that version at a turn
|
|
47
|
+
boundary and resumes the same native conversation (`TerminalRelaunch.variantVersion`, ADR-0065).
|
|
48
|
+
- Each turn a person types records a workspace snapshot before the agent acts (page 02); `/refine`
|
|
49
|
+
replays the latest one (page 05). The shared compaction checkpoint extension reintroduces the active
|
|
50
|
+
request and its todo list, as of a compaction during the run, right after the summary until the
|
|
51
|
+
run settles (ADR-0067).
|
|
52
|
+
- The terminal runtime, not Pi, decides the model a conversation starts on. A fresh conversation
|
|
53
|
+
starts on the account's latest normal-mode choice; a resumed one keeps the model in its own
|
|
54
|
+
history while this account offers it and holds credentials for its provider. When it does not,
|
|
55
|
+
the runtime starts the conversation on the account's newest saved selection (the mode's, then
|
|
56
|
+
normal's, then the newest in any mode) with that selection's effort, writes that model change
|
|
57
|
+
into the conversation, and reports it in one notice; the account's `choices.json` is not touched
|
|
58
|
+
(ADR-0064). With no usable saved selection, Pi's own fallback message stands.
|
|
59
|
+
- Normal mode keeps `ask_user` out of the active tool set. An attended plan request enables the
|
|
60
|
+
shared tool alongside its read-only set and restores the normal set on success, failure or
|
|
61
|
+
interruption, and again after any rebuild from the transcript (page 02, `INV-RUN-8`). The question blocks until answered, then planning continues in the same run. There
|
|
62
|
+
is no terminal-only question alias (PROP-0040).
|
|
63
|
+
- The approved plan outcome contract on page 02 applies equally to the terminal and server:
|
|
64
|
+
only `plan_ready` offers a plan card and Implement; `blocked` reports unavailable required input
|
|
65
|
+
without Implement; `no_plan` is an ordinary reply that offers nothing at all; `invalid` gets at
|
|
66
|
+
most one shared bounded repair and, if still invalid, a warning and the retained original text.
|
|
67
|
+
New final replies do not ask free-text questions or use
|
|
68
|
+
`<plan_clarification>`: clarification uses `ask_user`, which blocks the active run. Repair at
|
|
69
|
+
Pi's settlement boundary is in the same run and may call `ask_user`. Existing `<proposed_plan>`
|
|
70
|
+
cards and old transcripts, including clarification blocks, remain intact; see ADR-0077.
|
|
71
|
+
- A plan request keeps `bash` in its active set; each call runs in the sandbox's read-only scope
|
|
72
|
+
(PROP-0043). A user `!` command submitted during a plan request waits as a separate turn; it
|
|
73
|
+
cannot run inside the plan's read-only request.
|
|
74
|
+
- The terminal message-delivery contract is Enter to send or queue a follow-up, and
|
|
75
|
+
Cmd/Ctrl/Alt+Enter to steer an active reply. Pending steering, follow-up and deferred plan/Bash
|
|
76
|
+
inputs are projected above the working line from Pi's queues and the deferred barrier. Native
|
|
77
|
+
Follow-up and Steer rows are clickable and open `/follow-up`, which edits, sends the next eligible
|
|
78
|
+
item, or removes a selected message while preserving attached images. A successful reply keeps
|
|
79
|
+
Pi's configured queue behavior. At an explicit user-stop boundary, the terminal sends one
|
|
80
|
+
unconsumed steer before any follow-up and returns the remainder to Pi; retrying requests,
|
|
81
|
+
provider failures and non-user interruptions do not dispatch the queue. A queued plan or Bash
|
|
82
|
+
command runs separately after the active reply, and later inputs cannot bypass it through Pi's
|
|
83
|
+
native queues. Modified shortcuts require terminal support.
|
|
84
|
+
- Current standalone source defaults: `~/.xingular-harness/{data,state}`; `npm run dev` uses
|
|
85
|
+
`~/.xingular-harness-dev/{data,state}`. The standalone development launch uses a file SecretStore
|
|
86
|
+
under its resolved state directory or the `--account-state` one, even when its profile names a
|
|
87
|
+
host backend; it does not use or alter host credentials. `--account-state <dir>` signs in as the
|
|
88
|
+
accounts kept in that state directory (its `accounts` folder and `secrets.json`), and
|
|
89
|
+
`npm run dev` passes the installed state directory, so development and installed launches share
|
|
90
|
+
one sign-in while keeping their own data, approvals and plugin trust. `--variant <scope>`
|
|
91
|
+
explicitly selects a variant head.
|
|
92
|
+
PROP-0040 approves a shared Harness-owned interactive profile, neutral default scope and
|
|
93
|
+
credential backend; adoption and runtime verification remain in progress. Until that lands,
|
|
94
|
+
matching roots/scopes is explicit and matching roots alone does not share host Keychain secrets.
|
|
95
|
+
- `Launch.standard` supplies the shared role and folder text. History, Wiki and skill model tools
|
|
96
|
+
use the session socket; enabled output-trim/budget-guard hooks load through `firstParty.list`.
|
|
97
|
+
- `$name` is a skill invocation at any word start in the composer: the palette opens at the caret
|
|
98
|
+
and inserts the chosen skill there, keeping the rest of the draft, and every `$name` naming a
|
|
99
|
+
loaded skill is required for that request. The terminal builds the request-scoped text with
|
|
100
|
+
`requiredSkillsText` from Pi's loaded skills and appends it as a hidden `xingular-required-skills`
|
|
101
|
+
custom message. A required skill changes no tool or permission, and the person's message reaches
|
|
102
|
+
the model unchanged.
|
|
103
|
+
Pi CLI built-ins (llama.cpp, codemode, tool-search and MCP) are not loaded as a terminal-only
|
|
104
|
+
resource path. Harness MCP remains available.
|
|
105
|
+
- An empty conversation shows a centered welcome using `env.productName` (default `Xingular Agent`):
|
|
106
|
+
the first letter of a multiword name is the orange block mark and its remaining words are letter-spaced
|
|
107
|
+
in blue. The welcome adds a greeting, tagline and `/help` hint without replacing the composer or
|
|
108
|
+
status bar. Explicit host product names use the same generic formatting.
|
|
109
|
+
- `/remote-control` (`/rc`) lets a phone or iPad continue this session: a page with the pairing
|
|
110
|
+
link and its QR code, paired devices, and the person's answer to a pair request; `rc` / `rc ●` in
|
|
111
|
+
the status bar while it is on. `xagent --remote-control` (`--rc`) turns it on at start. The
|
|
112
|
+
binding rules are page 15.
|
|
113
|
+
- `xagent --worktree [name]` (`-w`) starts in a new managed worktree of the current repository,
|
|
114
|
+
or in the named one, and prunes older managed worktrees (PROP-0016). A session that names a
|
|
115
|
+
worktree holds it for its whole life. `/worktree` opens the worktree page; selecting
|
|
116
|
+
one switches folders by asking the host to restart the frontend there (`TerminalRelaunch.cwd`),
|
|
117
|
+
as a new conversation: Pi keeps one history per working folder.
|
|
118
|
+
- Slash-command aliases share one registry entry: `/session (resume)` opens the full-screen, searchable
|
|
119
|
+
saved-session page with unnumbered title and metadata rows; `/history (tree)` navigates branches in
|
|
120
|
+
the current session, and `/btw (side)` asks a side
|
|
121
|
+
question through the Harness `SideQuestions` service. It uses the same account/model/effort,
|
|
122
|
+
mirrors the main run's redacted prompt and public evidence, starts a separate tool-free run, and
|
|
123
|
+
leaves the main conversation untouched. The dock streams, scrolls and copies the complete answer.
|
|
124
|
+
Aliases remain callable and searchable, but help and palette show only the canonical
|
|
125
|
+
entry. `/context` opens the Context page, with Run details and Context usage tabs. Run details
|
|
126
|
+
shows recorded run configuration, available tools and connectors, skills loaded via `skill_load`,
|
|
127
|
+
and observed activated extensions; unrecorded facts remain unknown. The run selector stays within the current native conversation, and the page links
|
|
128
|
+
to `/trajectory` for the selected run. Context usage shows contributor attribution, reserve and
|
|
129
|
+
free space; `/context growth` opens measured request history and compaction markers. The page
|
|
130
|
+
reads `terminal.context`, never computes a figure of its own, and says `?` where nothing measured a
|
|
131
|
+
window. `/usage:` and `/usage:analysis` open the usage page's Analysis tab, and `/usage:limit`
|
|
132
|
+
opens its Limits tab (PROP-0042); `/usage:accounts` opens the All accounts limits tab. These are plugin-owned namespaced routes. All-account refresh reads due providers using their own account credentials without switching the session account. The usage page is a
|
|
133
|
+
full-screen page with a top tab strip: each window is a label and reset line above a quota-left bar coloured green at
|
|
134
|
+
50% or more left, amber from 20–49%, and red below 20%. `commands.list`
|
|
135
|
+
publishes the effective routes; the browser-safe core catalogue is `commands/registry.ts`. First-class Harness commands are unprefixed and live in that registry,
|
|
136
|
+
independently of plugin command metadata. Every plugin-owned command uses
|
|
137
|
+
`/<owner-prefix>:<command>`; plugin-owned prompt templates use the same owner namespace as
|
|
138
|
+
extension commands. A plugin namespace root is offered only for an explicit default: built-in
|
|
139
|
+
default commands remain supported, and a package's `harness.defaultPrompt` selects its own named
|
|
140
|
+
template for `/<owner-prefix>:`. Standalone prompt templates retain their existing forms, as does
|
|
141
|
+
`/skill:<name>` (ADR-0061).
|
|
142
|
+
|
|
143
|
+
The `/plugins` Proposals tab previews the complete stored files and generated manifest before
|
|
144
|
+
confirmation. Accept and reject pass the preview hash through the control-key-protected socket;
|
|
145
|
+
the proposal service checks it again. Acceptance leaves the package switched off and untrusted.
|
|
146
|
+
|
|
147
|
+
## Client terminal and the long-lived harness (ADR-0083)
|
|
148
|
+
|
|
149
|
+
The OpenTUI frontend is a client of the harness by default: `tui/harnessRuntime.ts` implements the
|
|
150
|
+
same `TerminalRuntime` as `tui/runtime.ts`, so the screen code is shared.
|
|
151
|
+
`XINGULAR_TERMINAL_RUNTIME=inprocess` runs the in-process runtime instead, for plugins that need
|
|
152
|
+
their own terminal components (INV-TUI-8).
|
|
153
|
+
|
|
154
|
+
- **Parent.** `terminal/liveTerminal.ts::LiveTerminal`, created on the first `terminal.live.*`
|
|
155
|
+
call, runs each turn as `sessions.run { live: true }` of the terminal's own session id, account,
|
|
156
|
+
folder, history folder, pinned variant version (`{ dir, scope }`), launch sections, Pi's four
|
|
157
|
+
default tools plus the launch and switched-on world tools, and no gated tools, as the in-process
|
|
158
|
+
terminal's policy has it. It journals the live session's native events (a newer
|
|
159
|
+
`message_update` replaces an unread one; at most 4,000) and serves them by long poll.
|
|
160
|
+
- **Routes.** `terminal.live.state`, `.events { after, wait?, waitMs? }`, `.run { text, model?,
|
|
161
|
+
effort?, resume? | newHistory?, images?, plan?, goal?, command?, initialBashCommand?,
|
|
162
|
+
hiddenNotes? }`, `.steer`, `.followUp`, `.followUp.clear`, `.interrupt`, `.close { forget? }`,
|
|
163
|
+
`.rename`, `.pending`, `.pending.wait`, `.approve`, `.answer`, `.answers`. Once a client exists,
|
|
164
|
+
`terminal.pending|pending.wait|approve|answer|answers|interrupt` and remote control's send and
|
|
165
|
+
stop reach it instead of `TerminalController`. Pending decisions include the active reply's
|
|
166
|
+
subagents.
|
|
167
|
+
- **Client.** It keeps the model catalogue, settings, the skills, prompts and themes it lists, and
|
|
168
|
+
`ModeChoices`. `$name` skills and goal notes go as `hiddenNotes`; a plugin command is sent as its
|
|
169
|
+
`/<prefix>:<name>` text; `/compact`, `/tree` navigation and HTML export are command runs;
|
|
170
|
+
`/new`, `/resume`, fork and import change the file it resumes and close the live session; `/session`
|
|
171
|
+
takes a history file or the session id its runs record. A `!` command is the run's initial Bash.
|
|
172
|
+
A plan run sends only the plan's tools (`planTools: 'active'`). A mode with no saved model keeps
|
|
173
|
+
the current one. Closing the client never interrupts a reply; the parent decides.
|
|
174
|
+
- **What the window draws.** Besides the native events, the journal carries `harness_notice` (a
|
|
175
|
+
plugin's notice, status line, widget or title, and a failed reply's message), `harness_settled`
|
|
176
|
+
(the reply is over, with its goal state and history file, even when Pi's loop never started) and
|
|
177
|
+
`harness_dialog` / `harness_dialog_done` (a plugin's `select`, `confirm`, `input` or `editor`,
|
|
178
|
+
shown with the window's own dialog and closed when another surface answers first; the window's
|
|
179
|
+
question dock asks `terminal.pending.wait { ownDialogs: true }` and leaves them out). Before the
|
|
180
|
+
first turn the parent lists the trusted extensions' commands by loading them without a session;
|
|
181
|
+
one that cannot load stops the window's start, as in process. A session change or a steer first
|
|
182
|
+
asks the harness whether a reply really runs, so a window a moment behind its event stream does
|
|
183
|
+
not refuse `/new` or steer a reply that has ended.
|
|
184
|
+
- **Failure.** When the window's harness is unreachable twice in a row, the window closes cleanly.
|
|
185
|
+
An error nothing caught in the standalone host (a plugin's timer, say) closes the window first,
|
|
186
|
+
then exits 1. The long-lived harness logs such an error and keeps its other sessions.
|
|
187
|
+
- **Identity.** A client terminal's runs are harness runs: they record Pi's session id as
|
|
188
|
+
`nativeSessionId`, where an in-process terminal's record the history file. `/todo`,
|
|
189
|
+
`/trajectory`, `/context`, subagent rows and remote-control history match by the client's id, and
|
|
190
|
+
a relaunch resumes its history file.
|
|
191
|
+
- **Long-lived harness.** `xagent daemon start|stop|status` runs one harness per state folder
|
|
192
|
+
(`terminal/daemon.ts`): a lock (`harness.lock`) refuses a second, and `harness.sock` (owner-only)
|
|
193
|
+
serves the protocol with `daemon.status` and `daemon.stop`. `xagent --daemon` starts it when
|
|
194
|
+
needed, prepares its terminal there and runs the client frontend. When the window closes while a
|
|
195
|
+
reply runs, `terminal.detach` keeps the reply and its live session without a window until it
|
|
196
|
+
settles; `xagent attach [session]` reattaches a new window to it (`prepare { attach: true }`, same
|
|
197
|
+
folder and account). Without a running reply, closing the window ends the session as before.
|
|
198
|
+
|
|
199
|
+
## Invariants
|
|
200
|
+
|
|
201
|
+
- **INV-TUI-1** OpenTUI is the only terminal frontend. Pi's `InteractiveMode` is never constructed
|
|
202
|
+
([ADR-0006](../decisions/ADR-0006-opentui-only-terminal.md)).
|
|
203
|
+
- **INV-TUI-2** The harness owns screen composition, input, scrolling, command routing and plugin
|
|
204
|
+
UI. Pi owns the execution runtime, native history and rich content components. A host owns the
|
|
205
|
+
PTY and process supervision ([ADR-0001](../decisions/ADR-0001-owned-terminal.md)). In the default
|
|
206
|
+
client terminal the Pi session runs in the harness process as a live session (ADR-0083); the
|
|
207
|
+
window keeps composition, input and rendering.
|
|
208
|
+
- **INV-TUI-3** Execution, account isolation, trust, authorization and run recording stay behind
|
|
209
|
+
their existing layers. The terminal adds no second path for any of them; its runs are written
|
|
210
|
+
through the controller and the run store.
|
|
211
|
+
- **INV-TUI-4** Changes made through the session socket (`plugins.attach|detach|trust|untrust|configure`,
|
|
212
|
+
`plugins.proposals.*`, `accounts.*`, Hub installs, `terminal.browser.*`, `terminal.worktrees.*`,
|
|
213
|
+
`terminal.annotations.*`, `terminal.sideQuestions.*`, `terminal.remoteControl.*`,
|
|
214
|
+
`terminal.variant.*`, `terminal.refine.*`) require the control key the trusted terminal process claimed once
|
|
215
|
+
(`control.claim`). The session's shell can read the session token, so the token alone is never
|
|
216
|
+
enough. A phone paired through `/remote-control` is the one other party that answers decisions;
|
|
217
|
+
only the control-key holder can start remote control or allow a device (INV-RC-3, INV-RC-7).
|
|
218
|
+
- The terminal watches decisions through the control-key-protected `terminal.pending.wait` revision
|
|
219
|
+
snapshot. It returns immediately for a changed revision and otherwise waits at most 20 seconds;
|
|
220
|
+
additions, removals and disposal wake waiters. `terminal.pending` remains available. The terminal
|
|
221
|
+
reconnects and resynchronizes after errors, and cancels its outstanding request on shutdown.
|
|
222
|
+
- **INV-TUI-5** Every resource reload revalidates the original trusted selection; changed or
|
|
223
|
+
revoked code needs review and a fresh terminal.
|
|
224
|
+
- **INV-TUI-6** `sessions.run` stays the embedding and unattended path. The in-process terminal
|
|
225
|
+
keeps a persistent child instead of opening a session per turn; the client terminal (below) runs
|
|
226
|
+
every turn as a `sessions.run { live: true }` of one live session, which is equally persistent.
|
|
227
|
+
- **INV-TUI-8** A client terminal runs no agent loop, tool or Pi extension of its own. It draws the
|
|
228
|
+
live session from its native events and its own read of the history file, and every action is a
|
|
229
|
+
protected `terminal.live.*` call (ADR-0083). Plugin presentation that needs an in-process
|
|
230
|
+
terminal (custom components, key handlers, renderers, shortcuts) is unavailable there, as it is
|
|
231
|
+
in a host: extensions get the dialog, notice, status and text-widget subset.
|
|
232
|
+
- **INV-TUI-7** Harness core commands use unprefixed names and are registered independently of
|
|
233
|
+
feature-plugin command metadata. This includes `/doctor`, `/worktree`, `/trajectory`, `/subagents`
|
|
234
|
+
and `/agents`; `/history` remains session-branch navigation, and `/mcp` remains a Connections
|
|
235
|
+
shortcut. Every plugin-owned terminal command, including a plugin-owned prompt template, uses
|
|
236
|
+
`/<owner-prefix>:<command>` for required and optional built-ins and Pi packages alike. There are
|
|
237
|
+
no bare plugin command or template aliases. Completions, help, recognition and dispatch use the
|
|
238
|
+
same owner-qualified routes. Prefixes are unique to an owner; a prefix collision or duplicate
|
|
239
|
+
route within an owner, including a template/extension collision, fails closed with owner
|
|
240
|
+
diagnostics rather than choosing a winner. A package root `/<owner-prefix>:` resolves only to the
|
|
241
|
+
package's explicitly declared, valid and unambiguous `harness.defaultPrompt`; built-in default
|
|
242
|
+
commands retain their roots. Standalone prompt templates keep their existing forms and
|
|
243
|
+
`/skill:<name>` remains reserved for skill invocation. Core commands and their core aliases remain
|
|
244
|
+
independent of plugin attachment. The prior temporary aliases for promoted core commands are not
|
|
245
|
+
a route to plugin-owned contributions (ADR-0061).
|
|
246
|
+
- **INV-TUI-8** Terminal sessions use the Harness-pinned workspace root and the same write
|
|
247
|
+
boundary as SDK sessions. Native file mutations use revalidated atomic replacement under an OS
|
|
248
|
+
scope; default Bash scans for external hard-link aliases and runs inside the sandbox. The terminal
|
|
249
|
+
cannot widen the boundary through its socket or native extension. `!outside <command>` requests
|
|
250
|
+
human-only approval before one execution; the terminal shows the complete escaped command and
|
|
251
|
+
denies the request if it cannot display details and choices together. stdout/stderr cannot trigger
|
|
252
|
+
approval or replay. Missing enforcement fails closed. Full Permission bypasses the boundary only
|
|
253
|
+
for eligible interactive
|
|
254
|
+
user runs and does not override hard policy denials, read-only or plan mode, unattended work, or
|
|
255
|
+
refinement restrictions.
|
|
256
|
+
|
|
257
|
+
## Source map
|
|
258
|
+
|
|
259
|
+
`src/terminal/**`. Decisions: ADR-0001, [ADR-0004](../decisions/ADR-0004-fullscreen-terminal-layout.md)
|
|
260
|
+
(superseded), ADR-0006, [ADR-0021](../decisions/ADR-0021-required-command-namespaces.md)
|
|
261
|
+
(superseded by [ADR-0031](../decisions/ADR-0031-plugin-command-owner-namespaces.md)),
|
|
262
|
+
[ADR-0024](../decisions/ADR-0024-xagent-command.md),
|
|
263
|
+
[ADR-0027](../decisions/ADR-0027-connected-sketch-display.md),
|
|
264
|
+
[ADR-0028](../decisions/ADR-0028-xingular-agent-product-identity.md),
|
|
265
|
+
[ADR-0031](../decisions/ADR-0031-plugin-command-owner-namespaces.md),
|
|
266
|
+
[ADR-0034](../decisions/ADR-0034-first-class-harness-terminal-commands.md),
|
|
267
|
+
[ADR-0061](../decisions/ADR-0061-strict-plugin-command-namespaces.md),
|
|
268
|
+
[ADR-0036](../decisions/ADR-0036-workspace-write-operation-boundary.md). Experiments:
|
|
269
|
+
EXP-0001, EXP-0002 in `../experiments/`.
|
|
270
|
+
|
|
271
|
+
## Session name in the working line (PROP-0010)
|
|
272
|
+
|
|
273
|
+
The bridge registers `session_name` against Pi's `getSessionName` / `setSessionName` APIs.
|
|
274
|
+
The native `session_info_changed` event invalidates the frontend's cached snapshot and
|
|
275
|
+
refreshes the working line. Both the active and retained completion line append
|
|
276
|
+
` – <name>` after duration and token rate, for example
|
|
277
|
+
`Working (2m, 50 tok/s) – Add web browser integrations`. Unnamed sessions omit the suffix.
|
|
278
|
+
A substantive first turn also receives a provisional name through the terminal policy; a refused
|
|
279
|
+
or failed name leaves the session unnamed.
|
|
280
|
+
|
|
281
|
+
Each user turn appends a hidden `xingular-session-state` custom message with the current name,
|
|
282
|
+
this run's empty todo, and the previous run's todo as context. The message is request-only and
|
|
283
|
+
never changes the compiled stable pack. A first turn is marked as such; later turns say the todo
|
|
284
|
+
list resets for each run.
|
|
285
|
+
Names use the existing terminal text sanitization, remain outside the verb shimmer, and
|
|
286
|
+
truncate at the right edge. Manual `/name` and existing long names remain supported.
|
|
287
|
+
|
|
288
|
+
## Doctor command
|
|
289
|
+
|
|
290
|
+
`/doctor` opens a command page and runs local readiness checks. Refresh and retry are local;
|
|
291
|
+
Live checks opens an explicit selection followed by account/model, destination, cost and isolation
|
|
292
|
+
confirmation. The page polls structured reports, retains findings after cancellation, and cancels
|
|
293
|
+
on close. No command text is sent to the conversation model. See [Doctor](../doctor.md).
|
|
294
|
+
|
|
295
|
+
## Resource browser (PROP-0013)
|
|
296
|
+
|
|
297
|
+
`/harness` owns broad navigation for Foundation, Variant, Skills, Plugins, Connections, Tools and
|
|
298
|
+
Library. `/skills`, `/connections` (`/mcp`), `/tools` and `/components` are shortcuts into that
|
|
299
|
+
browser. `/plugins` opens the focused local plugin manager (Plugins, Trust and Packages tabs); `/hub`
|
|
300
|
+
opens the separate Community catalog (Catalog and Installed tabs). The Hub Catalog shows Community
|
|
301
|
+
entries across supported types; Installed retains receipts from every channel with its channel
|
|
302
|
+
visible. Registry/document entries offer bounded payload Preview; Pi packages do not. Current
|
|
303
|
+
availability in `/harness` comes from the live resource loader and active tool registry,
|
|
304
|
+
independently of saved configuration and the latest variant head.
|
|
305
|
+
|
|
306
|
+
Every `terminal.browser.*` call requires the private control key, including bounded resource
|
|
307
|
+
inspection, local imports, connection management and browser settings. Direct plugin package
|
|
308
|
+
install/update/remove and attachment/trust/settings actions use protected `plugins.*`; Hub catalog
|
|
309
|
+
list/install/uninstall use protected `hub.*`. Hub-owned package removal keeps the receipt and
|
|
310
|
+
resource ownership in the Hub service. These routes are adapters to the existing services, not
|
|
311
|
+
another loader, attachment store, gate or secret store. Browsing neither executes plugin code nor
|
|
312
|
+
connects MCP.
|
|
313
|
+
The browser uses the full terminal with persistent section tabs (PROP-0014); wide screens keep
|
|
314
|
+
inventory beside details, actions and content, while compact screens keep inline details under
|
|
315
|
+
the same tabs. The separate `/plugins` and `/hub` pages also use full-screen layouts with persistent
|
|
316
|
+
section tabs, responsive inventory/details panes and their existing protected operations. Other
|
|
317
|
+
command pages remain centered except `/settings`, `/accounts`, `/plugins`, `/hub`, `/context` and `/usage:`, which use
|
|
318
|
+
full-screen page layouts.
|
|
319
|
+
Accounts keeps Accounts/Pools tabs, search and account-service operations.
|
|
320
|
+
Wide terminals show selected-account details beside the list; Enter or a primary click opens grouped
|
|
321
|
+
actions in that inspector. Compact terminals replace the list with a full-page account detail view
|
|
322
|
+
and its grouped actions. Enter opens the selected account; Escape returns to the list while
|
|
323
|
+
preserving its section, query and selection across navigation and resizing. Tab/Shift+Tab moves focus
|
|
324
|
+
between tabs, the list and (when open) actions; Left/Right changes a focused tab and Up/Down moves
|
|
325
|
+
the focused list or action list. Account actions retain their Session, Account, Sign-in and Remove
|
|
326
|
+
groups; pool actions remain grouped under Manage and Remove. See the
|
|
327
|
+
[terminal guide](../terminal-tui.md#blocks-and-pages) for layout and interaction.
|
|
328
|
+
|
|
329
|
+
`/settings` is a full-screen page with category tabs, search, settings list and a device-local Browser
|
|
330
|
+
tab. It selects the isolated browser or Brave profile; selecting Brave requires explicit confirmation.
|
|
331
|
+
The tab also shows bridge status, pairing instructions and `allowPrivate`. Brave pairing is explicit,
|
|
332
|
+
site access is granted separately in the extension popup, and the in-page badge provides Pause and
|
|
333
|
+
Stop. Brave exposes normal tabs only, never Incognito; the extension does not request history or
|
|
334
|
+
cookie permissions or export cookies. A disconnect refuses calls without switching backends.
|
|
335
|
+
Enabling private address access requires confirmation and allows both agent browsing and annotation
|
|
336
|
+
capture to reach localhost and private networks. It is off by default.
|
|
337
|
+
|
|
338
|
+
## Worktrees command (PROP-0016)
|
|
339
|
+
|
|
340
|
+
`/worktree` opens a page of the managed worktrees of the repository the session works in: make a
|
|
341
|
+
managed or permanent worktree, switch the terminal to one (or back to the main checkout), create a
|
|
342
|
+
branch on a detached one, hand changes off in either direction, remove one (with a snapshot when it
|
|
343
|
+
holds work, never the one this terminal uses), restore a removed one, prune older ones, and trust
|
|
344
|
+
the repository's setup script. The page calls `terminal.worktrees.*` routes, which use the same
|
|
345
|
+
`Worktrees` service as the `worktrees.*` server methods. `xagent worktree <command>` offers the
|
|
346
|
+
same actions from a shell.
|
|
347
|
+
|
|
348
|
+
## Question dock
|
|
349
|
+
|
|
350
|
+
Pending questions appear in a flat block above the composer, with a tab for each 1–2 word question
|
|
351
|
+
label above its title. Tabs can be clicked; Left/Right also switch questions and preserve staged
|
|
352
|
+
answers. The header has no pager or collapse control, and the dock stays expanded until the answer
|
|
353
|
+
is accepted or Escape cancels the pending question. A refused answer stays in the dock with its
|
|
354
|
+
choices, notes and typed text, and the refusal reason appears inside the dock; the same rule is
|
|
355
|
+
checked before the answer leaves the terminal. While it is active, the chat composer and its lower
|
|
356
|
+
status bar are hidden. `n` opens a note for the focused selected choice; Tab and Shift+Tab
|
|
357
|
+
navigate existing note fields, the free-text answer and the action without creating notes. Notes
|
|
358
|
+
and the “Something else” answer wrap across lines. Choice recommendations remain visual only and
|
|
359
|
+
never preselect an answer.
|
|
360
|
+
|
|
361
|
+
Every choice uses one shared measured layout: a marker gutter, a one-third label cell, a two-cell
|
|
362
|
+
gap, and the remaining description cell. Column boundaries align across all rows at every terminal
|
|
363
|
+
width, including compact widths. Text wraps within its cell; a missing description keeps its cell
|
|
364
|
+
and columns never stack. Recommendation text uses `(Rec.)` when the label column is fewer than 14
|
|
365
|
+
cells. Below 60 terminal columns, the dock uses a compact hint. Multi-select choices use `✓`
|
|
366
|
+
when selected and `○` when unselected, matching checklist glyphs; single-choice options remain
|
|
367
|
+
numbered.
|
|
368
|
+
|
|
369
|
+
The dock body has bounded height and vertical scrolling; question tabs and answer/action controls
|
|
370
|
+
stay outside that scrolling region. PageUp/PageDown scroll the body and Ctrl+Home/End jump to its
|
|
371
|
+
beginning/end while the dock is active, rather than scrolling the transcript. Focused choices and
|
|
372
|
+
note fields are brought into view. Ordinary arrows retain question/choice navigation; Shift+arrows
|
|
373
|
+
pan the sketch horizontally or vertically.
|
|
374
|
+
|
|
375
|
+
When a question sets `uiSketch: true`, one shared border-only monospace preview below the choices
|
|
376
|
+
shows the hovered or focused choice's ASCII wireframe, with no visible caption or extra left rule.
|
|
377
|
+
Sketch source supports up to 80 columns by 24 lines (page 02) and remains literal ASCII in
|
|
378
|
+
persistence. The terminal projects every valid sketch onto a fixed 80-column content canvas, padding
|
|
379
|
+
short rows and extending standalone hyphen dividers to that width. The outer preview frame stays
|
|
380
|
+
bounded to the available dock width and the canvas remains horizontally pannable when it does not
|
|
381
|
+
fit. Within the canvas, recognized ASCII table-border rows—including a title between horizontal
|
|
382
|
+
runs—and enclosed vertical table edges become connected box-drawing glyphs, while internal framed
|
|
383
|
+
tables retain their original widths and positions. For a high-confidence frame with matched `+`
|
|
384
|
+
corners, missing or slightly displaced side edges may be filled or moved only through whitespace to
|
|
385
|
+
the established boundary columns; interior text is never moved or overwritten, and conflicting or
|
|
386
|
+
ambiguous rows remain literal. This is not a global `+|-` substitution: prose, content operators,
|
|
387
|
+
ordinary pipes and unrecognized rows remain literal. Source sketches and all persisted whitespace
|
|
388
|
+
remain unchanged; padding, projected glyphs and expanded dividers exist only in the display.
|
|
389
|
+
|
|
390
|
+
There is no wrapping, reflow, truncation or markup interpretation. A bounded two-axis viewport makes
|
|
391
|
+
all overflow reachable by panning. Moving focus changes the preview without changing the staged
|
|
392
|
+
answer. Projected glyphs and expanded dividers never enter persisted events or answers; the wire
|
|
393
|
+
contract is unchanged. See [PROP-0025](proposals/PROP-0025-contextual-question-wireframes.md),
|
|
394
|
+
[ADR-0026](../decisions/ADR-0026-contextual-question-wireframes.md) and the approved display amendment
|
|
395
|
+
[PROP-0026](proposals/PROP-0026-connected-sketch-display.md) /
|
|
396
|
+
[ADR-0027](../decisions/ADR-0027-connected-sketch-display.md), amended for the fixed canvas by
|
|
397
|
+
[ADR-0080](../decisions/ADR-0080-fixed-width-question-sketch-canvas.md), and
|
|
398
|
+
[PROP-0028](proposals/PROP-0028-normalize-question-wireframes.md) /
|
|
399
|
+
[ADR-0029](../decisions/ADR-0029-normalized-question-wireframe-borders.md). Isolated production
|
|
400
|
+
PTY verification is retained in `docs/evidence/terminal-wireframe-normalization/`; it establishes
|
|
401
|
+
cell topology for bounded fixtures, not every emulator/font or live-model sketch quality.
|
|
402
|
+
|
|
403
|
+
## Web annotations commands (PROP-0017, PROP-0018, PROP-0048)
|
|
404
|
+
|
|
405
|
+
`/annotate:` opens the annotate page, a full-screen page with two tabs. `/annotate:notes` opens it on
|
|
406
|
+
**All annotations**: every annotation in the data root, with search, and reveal, edit, resolve or
|
|
407
|
+
reopen, share with this session or stop sharing, and delete. An annotation is private until shared;
|
|
408
|
+
this session's agent then reads it with `page_notes_list` and `page_notes_read`.
|
|
409
|
+
|
|
410
|
+
The **Annotate** tab is the panel beside the window being inspected.
|
|
411
|
+
|
|
412
|
+
- **Ways to start it:**
|
|
413
|
+
- `/annotate: [url]`: the capture browser (its own window and profile, separate from the agent's
|
|
414
|
+
browser). With no address, the page returns to the window that is still open, with its URL and
|
|
415
|
+
the inspector on, and asks for one in its own inline field only when no window is open.
|
|
416
|
+
- `/annotate: --app [port | address] [name]`: an app's own windows over its DevTools port. With no
|
|
417
|
+
port, the page lists the apps answering on one (`annotations.capture.discover`).
|
|
418
|
+
- `/annotate: --bridge [name]`: app windows that load the page bridge script, which the page shows.
|
|
419
|
+
- **The inspector** (`i`) outlines components on hover. A click or a text drag opens a popover in
|
|
420
|
+
the page with **Annotate** and **Annotate & send**. Every annotation is shared with this session
|
|
421
|
+
at once.
|
|
422
|
+
- **Groups:** Unsent (n) and Sent, for this session.
|
|
423
|
+
- **Other keys:** `s` sends every unsent annotation as one run of this session, confirming the
|
|
424
|
+
page-origin ones once first; `o` types a page address; `a` lists apps with a DevTools port, with
|
|
425
|
+
*Start an app with a DevTools port*, *Type a DevTools port*, *Use the page bridge*; `t` picks a
|
|
426
|
+
window; `Tab` switches tab. A key pressed while the page is busy gets a notice, never nothing.
|
|
427
|
+
- **Commands:** `/annotate:submit <request>` sends the unsent annotations with the request after
|
|
428
|
+
them; `/annotate:clear` resolves the unsent ones and stops sharing them.
|
|
429
|
+
- **Routes:** `terminal.annotations.target|attach|windows|selectWindow|inspect|stopInspect|next|confirm|confirmAll|send|clear|discover|launch`
|
|
430
|
+
act only on this terminal's session and need the control key.
|
|
431
|
+
|
|
432
|
+
A page that opens a dialog as it starts gets it above itself: `PageOverlay` starts its page when the
|
|
433
|
+
host reports the overlay mounted.
|
|
434
|
+
|
|
435
|
+
## Todo list (PROP-0006, PROP-0045, PAR-001)
|
|
436
|
+
|
|
437
|
+
Terminal sessions register the shared `todo_write` tool. The extension validates each list with
|
|
438
|
+
the same tool code and sends it as `todo` telemetry; the controller emits it as `todo.updated` on the
|
|
439
|
+
active run, so `runs.todo` and continuation read terminal runs too. The gate treats it as read-only,
|
|
440
|
+
plan mode allows it, and terminal children inherit it. The transcript shows each write as a todo
|
|
441
|
+
block (`✓` done, `●` in progress (warning yellow), `○` pending) under a `Todo · n of m done` header
|
|
442
|
+
instead of a tool row; a failed or malformed call stays a tool row. `/todo` reads the latest
|
|
443
|
+
non-side-question run of this terminal's native session and appends the same card as a snapshot,
|
|
444
|
+
without a model request; an empty list is a one-line notice. `/checklist` remains its alias for one
|
|
445
|
+
release.
|
|
446
|
+
|
|
447
|
+
## Work-slice checkpoint (PROP-0041)
|
|
448
|
+
|
|
449
|
+
Terminal tool-gate and work-slice refusals are relayed as `tool.refused` events with a code and reason; the original refusal text remains the tool response. Interrupted terminal runs record stop codes for work-slice limits, user abort, stalls and terminal closure.
|
|
450
|
+
|
|
451
|
+
Terminal replies carry the same work-slice guard as structured runs, with no budget by default
|
|
452
|
+
(ADR-0081): no tool-call, time or token limit. When a limit is set (below), the guard refuses the
|
|
453
|
+
next call and asks the model to stop and report where it is. An ordinary terminal reply settles as it ends (INV-RUN-15, ADR-0075): the terminal
|
|
454
|
+
never sends it back and never marks it unfinished from the todo list. A `/goal` is the only layer
|
|
455
|
+
that continues a reply; a goal that stops blocked, paused or at a limit sends a harness-written
|
|
456
|
+
`checkpoint` and the `needs_person` or `unfinished` code, which the controller records on the active
|
|
457
|
+
run, so an App reading the same session sees the handoff. No model judges an ordinary reply. A reply that
|
|
458
|
+
reaches a budget someone set, after doing work, continues in place as its next slice (ADR-0070): a
|
|
459
|
+
`xingular-slice-continue` message in the same run, a checkpoint and a notice per boundary, up to
|
|
460
|
+
`maxSlices` (8 by default). A fruitless, blocked, failed, aborted or plan slice, or one whose todo items are all
|
|
461
|
+
done, is not continued; the reply then settles `interrupted` with terminal reason `slice_complete`
|
|
462
|
+
so the person or a host can continue it. A checkpoint card in the transcript is not built yet
|
|
463
|
+
(PAR-004). Start the terminal with key=value pairs such as `XINGULAR_WORK_SLICE=maxToolCalls=15,maxSlices=3`
|
|
464
|
+
to give replies a budget; `off` also disables the compaction guard. Neither is persisted, so the
|
|
465
|
+
next launch without it restores the default of no budget.
|
|
466
|
+
|
|
467
|
+
## `/goal` (ADR-0072, INV-RUN-16)
|
|
468
|
+
|
|
469
|
+
`/goal <objective>` sets the session's goal and starts work at once; `--rounds N` and `--hours H`
|
|
470
|
+
before the objective set this goal's caps (30 rounds, 8 hours by default). Bare `/goal` shows the
|
|
471
|
+
status (status, objective, rounds, time used, last check, and the commands that apply). `/goal edit`
|
|
472
|
+
asks for a new objective (the same goal, its usage kept), `pause` stops a running reply and keeps the
|
|
473
|
+
goal, `resume` continues it, `clear` removes it. A subcommand matches only as the whole argument, so
|
|
474
|
+
"/goal pause now" is an objective. Setting a goal while an unfinished one exists asks first. Esc or
|
|
475
|
+
Ctrl-C on a running goal pauses it, as in Codex. The status bar shows `Pursuing goal (2m, round
|
|
476
|
+
3/30)`, `Goal paused (/goal resume)`, `Goal stalled (/goal resume)`, `Goal hit usage limits (/goal
|
|
477
|
+
resume)`, `Goal unmet (...)` or `Goal achieved (...)`.
|
|
478
|
+
|
|
479
|
+
The goal lives in the Pi session as a `xingular-goal-state` entry, so a reopened conversation shows
|
|
480
|
+
it, as `paused`: nothing resumes by itself. The model gets `get_goal` and `update_goal` only while a
|
|
481
|
+
goal exists (INV-TOOL-9). The goal loop runs before slice continuation; a goal's slices continue even
|
|
482
|
+
when every todo item is done. `/goal` is a `session`
|
|
483
|
+
command that uses `sessions.run` with `goal` (page 10); in plan mode the loop stays silent.
|
|
484
|
+
|
|
485
|
+
## Liveness and a reply that stops working (INV-RUN-14, ADR-0054)
|
|
486
|
+
|
|
487
|
+
While a reply is live the extension sends `heartbeat` telemetry every 30 seconds, carrying the work
|
|
488
|
+
slice counters it already keeps (steps, elapsed time, last tool, compactions, slice and the call
|
|
489
|
+
budget); the controller records it as `heartbeat` on the active run, so the run sweep settles a
|
|
490
|
+
terminal reply that stopped reporting by the same five-minute rule as a structured one.
|
|
491
|
+
|
|
492
|
+
A heartbeat proves the turn is alive, not that it is working. A reply that produces no event other
|
|
493
|
+
than a heartbeat for fifteen minutes — the state a model request that never returns leaves it in —
|
|
494
|
+
is ended: the controller queues the same `interrupt` command the person's Esc queues, the native turn
|
|
495
|
+
aborts, and the run records `interrupted` with reason `stalled`. Pi's abort reports back through
|
|
496
|
+
`terminal.interrupt` as Esc does; the controller passes that interrupt on as `stalled`, not
|
|
497
|
+
`user_abort`, when the stall watch asked for it. A reply whose oldest running tool
|
|
498
|
+
has run for thirty minutes ends the same way, and a reply waiting on an approval or question is never
|
|
499
|
+
cut short. An interrupt, a stall included, also ends a settling reply's wait for its subagents
|
|
500
|
+
(`terminal.subagents.delivery`).
|
|
501
|
+
|
|
502
|
+
The client terminal (ADR-0083) has no controller of its own: its replies are harness runs, so
|
|
503
|
+
`runTurn` heartbeats and applies the same stall rule (page 02, INV-RUN-14), and the live session of a
|
|
504
|
+
stalled reply is closed. The in-process runtime keeps the controller's watch.
|
|
505
|
+
|
|
506
|
+
## Subagent activity monitor
|
|
507
|
+
|
|
508
|
+
During an active parent run, the terminal polls a private read-only monitor once per second. It
|
|
509
|
+
projects the flat set of child and nested-child runs with task, status, elapsed time, the latest
|
|
510
|
+
tool name, the child's agent profile (name and colour, PROP-0029), the title the parent gave it
|
|
511
|
+
(PROP-0030), counts from the child's own todo list, the pinned account label, effective model and
|
|
512
|
+
effort, and cumulative usage totals. Model and effort come from the volatile launch selection; the
|
|
513
|
+
latest provider-reported model supersedes the launch model when usage is available. Usage is an
|
|
514
|
+
explicit projection of token, cache, cost, request-count and context-window totals. Per-request
|
|
515
|
+
payloads and reasoning summaries do not enter the monitor. The child's own `session_name` is not
|
|
516
|
+
projected; it names the child's session, not its row. Tool summaries, other arguments, output and
|
|
517
|
+
todo item text never enter the monitor. The latest completed tool name remains visible across
|
|
518
|
+
one-second snapshots until new tool or response activity replaces it. The monitor exposes no
|
|
519
|
+
controls to steer or stop children.
|
|
520
|
+
|
|
521
|
+
The live rows sit under the status line, after one blank row, with no heading. Each row reads, in
|
|
522
|
+
order: the status mark (`○` queued, a running row that shows the working spinner's frame in the profile's colour (warning for a copy of the parent), `●` waiting in the accent,
|
|
523
|
+
`✓` done, `✕` failed, `!` stopped), the profile name in its colour (`subagent`, muted, for a copy
|
|
524
|
+
of the parent), the title the parent gave the child (PROP-0030), and `n of m tasks` when the child
|
|
525
|
+
keeps a todo list. Active rows come first, at most three, then `+N more · /subagents`; a narrow
|
|
526
|
+
terminal cuts the title first. `/subagents` opens the searchable full roster, with a colored
|
|
527
|
+
profile and normal-color title on its first line, then muted account, model, effort and usage
|
|
528
|
+
metadata on its second line. One blank row separates each two-line entry. Narrow rows truncate this
|
|
529
|
+
lower-priority summary without hiding the title.
|
|
530
|
+
At parent settlement, the terminal makes a final monitor read and keeps the latest parent's rows
|
|
531
|
+
visible until the next parent run starts.
|
|
532
|
+
|
|
533
|
+
The monitor also projects the parent run itself as a `main` row (profile `main`, a reserved name,
|
|
534
|
+
in the theme's primary colour) with the same account, model, effort, usage, activity and todo
|
|
535
|
+
fields. The `/subagents` page pins it first and counts only children in its header; the rows under
|
|
536
|
+
the status line omit it, since the status line already describes the main agent.
|
|
537
|
+
|
|
538
|
+
Every turn marks its run on the native branch (`xingular-subagent-owner`), and `ready` sends those
|
|
539
|
+
owners. When a conversation opens or is switched to with no run active, the monitor is rebuilt from
|
|
540
|
+
the branch's latest top-level run in this folder and its descendants, by folding their saved events
|
|
541
|
+
with their final status. Runs a stopped process left active were already marked `interrupted`.
|
|
542
|
+
The rows show under the status line and on the page until the next parent run starts (ADR-0043).
|
|
543
|
+
The projection remains read-only and scoped to one parent run; a switch to a conversation with no
|
|
544
|
+
such run clears it, as does terminal disposal. It is not a persisted event or public server method.
|
|
545
|
+
|
|
546
|
+
## Agent profiles (PROP-0029)
|
|
547
|
+
|
|
548
|
+
`/agents` opens the Agents page over `terminal.agents.list|create|remove`, which call the same
|
|
549
|
+
`agents/profiles.ts` functions as `agents.*`. It lists built-in, global, project and variant
|
|
550
|
+
profiles, and files that cannot be read. The detail pane shows the colour, description, tools,
|
|
551
|
+
plugins, variant, model, effort, file and instructions. Enter on a row offers: for a person's own
|
|
552
|
+
profile, edit (opens the file in `$VISUAL`/`$EDITOR` with the renderer suspended), copy and delete
|
|
553
|
+
(confirmed); for a built-in or variant profile, copy. New profile asks for a name and a place
|
|
554
|
+
(project or global), writes the template and opens it. The terminal passes its pinned variant to
|
|
555
|
+
`Subagents.register`, so the variant's c5 names are profiles there too.
|