@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,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0048
|
|
3
|
+
title: One annotate page, two actions, and easy app attach
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-27
|
|
6
|
+
updated: 2026-10-27
|
|
7
|
+
affects: [PROP-0018, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, 13-world-tools.md, terminal-tui.md, parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0048: One annotate page, two actions, and easy app attach
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
People testing `/annotate:` found it hard to use:
|
|
15
|
+
|
|
16
|
+
- `/annotate:annotate` duplicated `/annotate:` in every command list.
|
|
17
|
+
- With no address, the page asked for one in a dialog that opened *behind* the full-screen page.
|
|
18
|
+
`PageOverlay` started its page in its constructor, before `dialogs.custom` mounted the overlay,
|
|
19
|
+
so any dialog the page opened as it started was stacked below it.
|
|
20
|
+
- While that hidden dialog waited, the page's single-action guard dropped every key (`s`, `i`)
|
|
21
|
+
without a word: "send queue sometimes doesn't work".
|
|
22
|
+
- A send held back while the agent was busy was tried once, 250 ms after the run ended. If the
|
|
23
|
+
terminal still reported its turn as active, the notes waited forever.
|
|
24
|
+
- `/annotate:notes` was a separate centred dialog with its own capture flow.
|
|
25
|
+
- The popover had three choices (save, ask the agent to fix, proceed now), the page had a queue, a
|
|
26
|
+
confirm step, an unqueue key and a "fixed" status reported by the agent's `page_notes_mark_fixed`.
|
|
27
|
+
- Attaching an Electron app needed its DevTools address typed by hand.
|
|
28
|
+
|
|
29
|
+
## Design
|
|
30
|
+
|
|
31
|
+
**Delivery.** A note is either **pending** (shared with the session, unsent) or **sent**.
|
|
32
|
+
`NoteDelivery.state` is `pending | sent`; records written before this read `queued` as `pending`
|
|
33
|
+
and `fixed` as `sent`, without a migration write. Every annotation made in the inspector with a
|
|
34
|
+
session is shared with it at once. The popover has two buttons: **Annotate** (`save`) and
|
|
35
|
+
**Annotate & send** (`send`, also Cmd/Ctrl+Enter); `send` sends *all* the session's pending notes
|
|
36
|
+
as one message. Any other action the page reports is a save. Page-origin notes (DevTools or
|
|
37
|
+
bridge, untrusted) still wait for the person's confirmation; the terminal asks once for all of
|
|
38
|
+
them, and an `empty` send reports how many still wait.
|
|
39
|
+
|
|
40
|
+
`NoteDeliveries.runEnded` now tries a held-back send again (250 ms, 1 s, 3 s, 8 s) while the
|
|
41
|
+
session answers `busy`, and starts over if another run ends meanwhile.
|
|
42
|
+
|
|
43
|
+
`/annotate:submit <request>` sends the pending notes with the person's request after them
|
|
44
|
+
(`compose(notes, prompt)`). With no pending notes it sends nothing. A request is not kept while
|
|
45
|
+
the agent is busy; the notes stay pending and the person submits again. `/annotate:clear` resolves
|
|
46
|
+
the session's pending notes and withdraws their grant to it; they can be reopened from
|
|
47
|
+
`/annotate:notes`.
|
|
48
|
+
|
|
49
|
+
`page_notes_mark_fixed` is removed; the agent's page-note tools are read-only again. Only the
|
|
50
|
+
person resolves a note.
|
|
51
|
+
|
|
52
|
+
**Commands.** A built-in command may be `rootOnly`: it is the namespace root (`/annotate:`) and has
|
|
53
|
+
no named route, is not listed, and is not reachable as `/plugin:<name>`. The annotations plugin has
|
|
54
|
+
`/annotate: [url | --app [port] | --bridge]`, `/annotate:notes`, `/annotate:submit` and
|
|
55
|
+
`/annotate:clear`.
|
|
56
|
+
|
|
57
|
+
**One page.** `AnnotatePage` is one full-screen page with an **Annotate** tab and an **All
|
|
58
|
+
annotations** tab (`/annotate:notes` opens on the second). The Annotate tab takes the page address,
|
|
59
|
+
a DevTools port or an app path in an inline field, never a dialog. `a` opens a list of the apps
|
|
60
|
+
answering on a DevTools port on this computer, with *Start an app with a DevTools port*, *Type a
|
|
61
|
+
DevTools port*, *Use the page bridge* and *Annotate a web page instead*. The notes are grouped
|
|
62
|
+
**Unsent (n)** and **Sent**. A key pressed while the page is busy is answered with a notice.
|
|
63
|
+
|
|
64
|
+
`PageOverlay` starts its page when the host reports it mounted (`mounted()`, called by
|
|
65
|
+
`dialogs.custom` after `showOverlay`), or on the next turn for a host that does not. Dialogs a page
|
|
66
|
+
opens as it starts now stack above it, on every page.
|
|
67
|
+
|
|
68
|
+
**DevTools apps.** `AnnotationCapture.discover()` probes `127.0.0.1` on ports 9222–9230 and any port
|
|
69
|
+
used before, reading `/json/version` and `/json/list` with a short timeout. A Node inspector
|
|
70
|
+
(`node.js/…`) is skipped. `launchApp(key, path, args)` starts the program (the one inside a macOS
|
|
71
|
+
`.app` bundle) with `--remote-debugging-port=<free loopback port>`, waits for its DevTools port, and
|
|
72
|
+
attaches. The app keeps running after the capture ends. The loopback-only rule for `cdp` targets
|
|
73
|
+
is unchanged.
|
|
74
|
+
|
|
75
|
+
**Protocol.** Removed: `annotations.queue`, `annotations.dequeue`, `annotations.queued`. Added:
|
|
76
|
+
`annotations.pending`, `annotations.markPending`, `annotations.confirmAll`, `annotations.clear`,
|
|
77
|
+
`annotations.capture.discover`, `annotations.capture.launch`. `annotations.createAndAct` takes
|
|
78
|
+
`save | send`; `annotations.compose` and `annotations.send` take an optional `prompt`. Terminal
|
|
79
|
+
routes: `terminal.annotations.confirmAll|clear|discover|launch`; `queue` and `dequeue` are gone.
|
|
80
|
+
|
|
81
|
+
## Consequences
|
|
82
|
+
|
|
83
|
+
The App's Annotate panel used `queue`, `fixed` and `createAndAct('queue')` and follows in its own
|
|
84
|
+
change. The prompt's Annotations group no longer names `page_notes_mark_fixed`, which changes the
|
|
85
|
+
stable prefix once.
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0049
|
|
3
|
+
title: Context attribution as a built-in capability
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-28
|
|
6
|
+
updated: 2026-10-28
|
|
7
|
+
affects: [INV-PRM-6, INV-SRV-1, INV-PAR-1, INV-PAR-2, INV-RUN-7, 04-prompt.md, 10-server-protocol.md, 11-terminal.md, 14-surfaces-and-parity.md, parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0049: Context attribution as a built-in capability
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
A person can see that a run is expensive but not where the context goes. The harness already
|
|
15
|
+
records every fact needed to answer it, and no surface shows the answer:
|
|
16
|
+
|
|
17
|
+
- `runs/<id>/context.json` holds the pack the run was given: each section's `title`, `size`
|
|
18
|
+
(characters), `budget`, `cut` and `sources`, plus `toolGroups` and the variant fingerprint
|
|
19
|
+
(`src/prompt/compile.ts`).
|
|
20
|
+
- `runs/<id>/events.jsonl` holds `context.snapshot` — the verbatim `systemPrompt`, the
|
|
21
|
+
`contextUpdate`, and every tool's `{name, description, parameters}` — and `usage.updated`, whose
|
|
22
|
+
`contextTokens` is the provider-measured size of the latest request and `contextWindow` the
|
|
23
|
+
model's limit (`src/sessions/contracts.ts`, emitted by `src/sessions/runner.ts`).
|
|
24
|
+
- `Pi` computes a live `{ tokens, contextWindow, percent }` for the session
|
|
25
|
+
(`getContextUsage()`), and its estimator is `ceil(chars / 4)`
|
|
26
|
+
(`node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js`).
|
|
27
|
+
|
|
28
|
+
What is missing is the attribution: a row per contributor, tokens, share of the window, and a
|
|
29
|
+
stack that reconciles to the measured total. The App shows a reply's context pack as a collapsed
|
|
30
|
+
`<details>` list of character counts (`App/src/modes/shared/ContextPackView.tsx`), and a single
|
|
31
|
+
`Meter` for "context at the end" (`App/src/modes/shared/SessionContextInspector.tsx`). The terminal
|
|
32
|
+
declares `model.contextWindow` on its status band and never renders it
|
|
33
|
+
(`src/terminal/tui/status.ts`). `usage.summary` carries no context fields at all
|
|
34
|
+
(`src/usage/types.ts`).
|
|
35
|
+
|
|
36
|
+
Attribution is something a person uses, so it belongs in the Harness with a terminal surface
|
|
37
|
+
before an App screen (`INV-PAR-1`, `INV-PAR-2`).
|
|
38
|
+
|
|
39
|
+
## What other harnesses show
|
|
40
|
+
|
|
41
|
+
Evidence is from the checkout in `external/` for open repositories, and from official docs for
|
|
42
|
+
Claude Code, Codex CLI and Gemini CLI. "Third-party" marks a claim read from a user report rather
|
|
43
|
+
than a vendor document.
|
|
44
|
+
|
|
45
|
+
| Harness | Where it shows | Rows / categories | % of window | Visual | Measured vs estimated | Thresholds | Actions from the view |
|
|
46
|
+
|---|---|---|---|---|---|---|---|
|
|
47
|
+
| **Claude Code** | `/context` command in the transcript; ring in the desktop panel; scriptable status line | `System prompt`, `System tools`, `MCP tools`, `Custom agents` (with source), `Memory files`, `Skills`, `Messages`; plus `Autocompact buffer` and `Free space` | Per row and in the header `598.5k / 1M (60%)` | "Colored grid" (docs); a table of tokens + % in the panel (**third-party**, [issue #94436](https://github.com/anthropics/claude-code/issues/94436)) | Estimated per row; header from measured | Ring blue → yellow → red; over-limit banner naming `/compact` | Text suggestions only ("trim CLAUDE.md · 49k per request"); `/usage` can apply some |
|
|
48
|
+
| **Pi** (the engine under this harness) | TUI footer segment | One aggregate: `45.3%/200K (auto)` plus `↑in ↓out R<cache> W<cache> CH<hit>% $cost` (`dist/modes/interactive/components/footer.js:133-200`) | Yes, one decimal | Text, coloured | `getContextUsage()` = measured usage anchored, tail estimated at chars/4 | `>70` warning, `>90` error; `?/window` when unknown | `/compact` |
|
|
49
|
+
| **opencode** | Sidebar block + prompt footer (`external/opencode/packages/tui/src/feature-plugins/sidebar/context.tsx:20-51`, `prompt/footer.tsx:38-55`) | One aggregate: `N tokens`, `N% used`, `$cost` | Rounded integer | Plain text, no bar, no colour | Last provider usage only (`util/session.ts:46-61`) | None | `<leader>c` / `/compact`; auto-compact reserves 15% or 16k |
|
|
50
|
+
| **oh-my-pi (omp)** | Status-line segment system (`external/omp/packages/tui/src/status-line/footer.ts:171-260`) | One aggregate: `45.3%/200K`, per-direction counters, billing | One decimal | Coloured text, segment priorities | Provider-anchored, tail estimated; strict/approximate/upperbound tokenizer modes | Percent **or** absolute tokens, whichever first: 50%/150k, 70%/270k, 90%/500k (`chrome/context-thresholds.ts:6-11`) | `/compact` modes, `/shake` (drop heavy tool results), `/handoff` |
|
|
51
|
+
| **DeepSeek Harness** | Web chat statistics dock; per-turn disclosure (`external/deepseek-harness/packages/client/ui-chat`) | `systemTokens`, `toolsTokens`, `messageTokens` — exactly three (`packages/llm/token-meter/README.md`) | Separate `contextPressure.pressureTokens`; the division is client-side | Not confirmed | Explicit: provider usage reused only on an identical request envelope, else estimated; rows are "approximate composition, never a total" | Compaction at `min(W×0.8, W−O−65536)` | `/compact`; tool-result pruning |
|
|
52
|
+
| **Kimi CLI** | Status bar, right-aligned (`external/kimi-cli/src/kimi_cli/ui/shell/prompt.py:2251`, `soul/__init__.py:80`) | One aggregate: `context: 42.0% (4.2k/10.0k)` | Percent first | Plain text | Last provider usage (lags one request) | Ratio 85% **or** 50k reserve (`soul/compaction.py:59`) | `/compact`, `/clear` |
|
|
53
|
+
| **Orca** | 16px SVG ring in the composer row, click/hover opens a popover (`external/orca/src/.../NativeChatContextUsageRing.tsx`) | Passes the underlying CLI's own categories through verbatim, with a `deferred` flag for on-demand context | Row % only, one decimal; ring clamps, stored value does not | Ring + `Progress` bar in the popover | Three states: `report`, `estimate`, `unknown`; window held separately from used | `CRITICAL_PERCENTAGE = 90` turns the ring destructive | None — read-only |
|
|
54
|
+
| **Codex CLI** | `/status` prints configuration and "remaining context capacity"; `/statusline` picks footer fields (`developers.openai.com/codex/cli/slash-commands`) | No breakdown | Remaining capacity | Configurable footer items: model / context / limits / git / tokens / session | Not documented | Not documented | `/compact` |
|
|
55
|
+
| **Gemini CLI** | `/stats` full-screen report (`external`-free; `docs/reference/commands.md:438-450`) | `session` (duration, tool calls), `model` (token counts, quota), `tools` (per-tool) | Not in the documented output | Text tables | Not documented | Not documented | `/compress` |
|
|
56
|
+
|
|
57
|
+
Distinctive ideas worth keeping, by harness: **Claude Code** — a stack closed by `Autocompact
|
|
58
|
+
buffer` + `Free space`, and the remedy named inside the view. **Pi** — `?` when the window is
|
|
59
|
+
unknown rather than `0%`. **opencode** — one `formatContextUsage` helper shared by every surface, so
|
|
60
|
+
they cannot disagree. **omp** — warn on percent *or* absolute tokens (small windows warn at the
|
|
61
|
+
same absolute size) and a declared drop order for narrow terminals. **DeepSeek** — three separate
|
|
62
|
+
projections (billing, occupancy, composition), never mixed into one number. **Kimi** — percent
|
|
63
|
+
first, `used/total` in parentheses, readable at 30 columns. **Orca** — show the provider's own
|
|
64
|
+
category names instead of inventing a taxonomy, and mark deferred context as deferred. **Codex** —
|
|
65
|
+
the person chooses which fields the always-on strip carries.
|
|
66
|
+
|
|
67
|
+
## Affected rules
|
|
68
|
+
|
|
69
|
+
- **INV-PRM-6** Each run's pack is recorded beside the run; failing to record it never fails the
|
|
70
|
+
session. Attribution reads that record and adds per-section rendered sizes to it. Recording
|
|
71
|
+
stays best-effort.
|
|
72
|
+
- **INV-SRV-1** `src/server/methods.ts` is the contract for every non-Node host. `context.attribution`
|
|
73
|
+
is additive: no existing method, param or result shape changes.
|
|
74
|
+
- **INV-RUN-7** Token accounting keeps its meaning. `usage.updated.contextTokens` stays the
|
|
75
|
+
provider's figure for the latest request; attribution never rewrites it, and marks every row it
|
|
76
|
+
derived as estimated.
|
|
77
|
+
- **INV-PAR-1 / INV-PAR-2** The capability lands in the Harness with a terminal surface, and the App
|
|
78
|
+
presents the same rows from the same method.
|
|
79
|
+
- **INV-PRM-1** The prompt is still assembled only in `src/prompt/compile.ts`. Attribution measures
|
|
80
|
+
what that compiler produced; it never assembles text.
|
|
81
|
+
|
|
82
|
+
## Proposal
|
|
83
|
+
|
|
84
|
+
### 1. The measurement model
|
|
85
|
+
|
|
86
|
+
Three facts are read, and nothing new is written per request:
|
|
87
|
+
|
|
88
|
+
| Fact | Source | Kind |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `systemPrompt`, `contextUpdate`, `tools[]` | `context.snapshot` event | recorded verbatim |
|
|
91
|
+
| `contextTokens`, `contextWindow` | latest `usage.updated` event | **measured** by the provider |
|
|
92
|
+
| sections, `toolGroups`, variant, `delivery` | `runs/<id>/context.json` | recorded at compile time |
|
|
93
|
+
|
|
94
|
+
One constant, `CHARS_PER_TOKEN = 4`, the same ratio Pi, opencode, DeepSeek and Kimi use, so a row
|
|
95
|
+
in this view and the `/context` header never disagree by more than rounding.
|
|
96
|
+
|
|
97
|
+
`compile.render()` records the rendered size of each section (including the `## Title` framing and
|
|
98
|
+
the gaps between sections) and, inside a section, the characters contributed by each `Source`. That
|
|
99
|
+
is the only change to recorded data: it removes the need to re-parse a prompt later, which cannot
|
|
100
|
+
be done safely because a variant section's body may itself contain `## ` headings.
|
|
101
|
+
|
|
102
|
+
Rows are built in this order, and the last one is a subtraction rather than an estimate:
|
|
103
|
+
|
|
104
|
+
1. **System prompt sections** — each `Section`'s rendered characters ÷ 4, attributed to the group
|
|
105
|
+
that owns it.
|
|
106
|
+
2. **Tool schemas** — `JSON.stringify({name, description, parameters})` ÷ 4 for each recorded tool,
|
|
107
|
+
grouped by the pack's `toolGroups`; a tool in no group becomes `Other tools`.
|
|
108
|
+
3. **This request's update** — the recorded `contextUpdate` ÷ 4.
|
|
109
|
+
4. **Conversation** — `contextTokens − tokens(1..3)`, floored at zero. When the subtraction would go
|
|
110
|
+
negative the prefix rows are scaled down and the view says the prefix estimate exceeded the
|
|
111
|
+
measured total; it never shows a negative row.
|
|
112
|
+
5. **Compaction reserve** — Pi's `settings.compaction.reserveTokens` (default 16 384) when
|
|
113
|
+
auto-compaction is on.
|
|
114
|
+
6. **Free space** — `contextWindow − contextTokens − reserve`, so the stack sums to the window with the
|
|
115
|
+
reserve shown as its own row (the reserve is headroom the next request may not use, not free space).
|
|
116
|
+
|
|
117
|
+
The rows therefore always add up to the window, and the number in the header is always the
|
|
118
|
+
provider's. A run with no `usage.updated` yet shows estimated rows and marks the header
|
|
119
|
+
`estimate only`; a session whose window is unknown shows `/ ?` like Pi, never `0%`.
|
|
120
|
+
|
|
121
|
+
### 2. The row taxonomy: foundation, variant, application, conversation
|
|
122
|
+
|
|
123
|
+
This is where the harness can say something no other harness can. Rows group by *who owns the
|
|
124
|
+
text*, and variant rows say whether they cost every request:
|
|
125
|
+
|
|
126
|
+
| Group | Members | Owner |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| **Foundation** | Harness identity, tool guidance, tool schemas (History, Wiki, Native, World, Progress, Session, Annotations), Wiki pointer, session state, references, reporting rules | released harness |
|
|
129
|
+
| **Variant c1–c8** | Instructions (c1), Guardrails (c2), Memory (c3), Tool guidance (c4), subagent index (c5), skills index (c6), scripts index (c7) | `variant/`, refinable |
|
|
130
|
+
| **Your application** | Identity, role, working folder, skills, plugin descriptions, connected apps, annotations | the host's sections and tool groups |
|
|
131
|
+
| **Conversation** | Messages and tool results (measured residual), context updates | the run |
|
|
132
|
+
| **Reserved and free** | Compaction reserve, free space | Pi, the model |
|
|
133
|
+
|
|
134
|
+
Two facts make the variant rows actionable: `alwaysOnMax` caps always-on variant text at 24 000
|
|
135
|
+
characters (`src/variant/surface.ts`), and only components with `reach: 'always'` occupy the prompt
|
|
136
|
+
on every request. The view therefore shows a **budget meter per variant row** (`3.6K of 24K`) and a
|
|
137
|
+
separate **on demand** list — skills, subagents, scripts — which are not in this request but will
|
|
138
|
+
cost about *n* tokens when loaded. Claude Code shows a `Skills` row without that distinction; Orca
|
|
139
|
+
has the `deferred` flag but no per-row cost. Showing both is the improvement.
|
|
140
|
+
|
|
141
|
+
The foundation/variant split also gives the view its one obvious action: a variant row deeper than
|
|
142
|
+
the cap, or plainly oversized, links to the Harness screen where it is edited or refined.
|
|
143
|
+
|
|
144
|
+
### 3. Surfaces
|
|
145
|
+
|
|
146
|
+
**Harness (reference terminal).** A `/context` full-screen page built like `/usage`:
|
|
147
|
+
`src/terminal/tui/pages/contextPage.ts`, registered in `commandPages.ts` as a command page, reading
|
|
148
|
+
`context.attribution`. It also fills the gap in `src/terminal/tui/status.ts`, whose band declares
|
|
149
|
+
`model.contextWindow` and never paints it: the band gains `45.3%/200K` in the same place Pi puts it.
|
|
150
|
+
|
|
151
|
+
**Server.** One additive method:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
context.attribution { runId }
|
|
155
|
+
→ {
|
|
156
|
+
runId, model, provider, window, used, share, // numbers the provider reported
|
|
157
|
+
source: 'measured' | 'estimate', // which of the above is trusted
|
|
158
|
+
compaction: { enabled, reserveTokens, thresholdTokens } | null,
|
|
159
|
+
rows: [{ id, title, group, tokens, chars, share, always, estimated, cut?,
|
|
160
|
+
budget?, sources?, tools?, note? }],
|
|
161
|
+
onDemand: [{ id, title, tokens, items }],
|
|
162
|
+
totals: { foundation, variant, application, conversation, reserved },
|
|
163
|
+
recordedAt
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
`context.runPack` keeps returning the text; the App already calls it from
|
|
168
|
+
`App/src/bridge/commands.ts:642`, and the new page uses it to show a row's actual prompt slice.
|
|
169
|
+
|
|
170
|
+
**App.** A full-width page, not a sidebar tab — the sidebar is ~360–420 px wide, and a 6-column
|
|
171
|
+
accounting sheet needs the main pane:
|
|
172
|
+
|
|
173
|
+
- `ContextAttributionPage` in the main pane, opened from (a) the Context view's header, (b) a
|
|
174
|
+
compact meter in the composer footer, (c) the command palette. It uses the same host pattern as
|
|
175
|
+
agent configuration: a header strip with a close control
|
|
176
|
+
(`App/src/modes/solo/SoloWorkspace.tsx:263-265`).
|
|
177
|
+
- The compact meter reuses `Meter` (`variant="ring"`) from `@xingular/ui` and opens the page.
|
|
178
|
+
- The stack and its legend reuse `SegmentedBar` from `@xingular/ui/ui/charts`, whose `Segment` type
|
|
179
|
+
is already `{ key, label, value, color, display, share, title, recorded }` — exactly this page.
|
|
180
|
+
- A cache strip uses `CacheUsageBadge` and `formatTokens` from
|
|
181
|
+
`App/src/modes/shared/usage/usageModel.ts`.
|
|
182
|
+
|
|
183
|
+
### 4. Sketches
|
|
184
|
+
|
|
185
|
+
A rendered version of these sketches, in the dark theme with the shared tokens, is
|
|
186
|
+
[`outputs/context-attribution-sketch.html`](../../../../outputs/context-attribution-sketch.html)
|
|
187
|
+
(open it in a browser; four tabs, switchable). All three options use one dataset, and the rows add
|
|
188
|
+
to the provider's measured total.
|
|
189
|
+
|
|
190
|
+
**Option A — accounting sheet (Claude Code's shape, this harness's rows).** Recommended.
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
┌─ Context ────────────────────────────────────────────────────────────────────────────────┐
|
|
194
|
+
│ claude-sonnet-4-6 · 1M window · run r-8f21 auto-compact at 983.6K [x] │
|
|
195
|
+
│ │
|
|
196
|
+
│ 183.4K / 1M · 18.3% measured · provider-reported │
|
|
197
|
+
│ ████████▓▓▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
|
|
198
|
+
│ ├ foundation 13.1K ┤├ variant 18.4K ┤├ app 9.8K ┤├ conversation 142.1K ┤ │
|
|
199
|
+
│ │
|
|
200
|
+
│ ALWAYS IN CONTEXT TOKENS SHARE OF BUDGET │
|
|
201
|
+
│ v Foundation · harness 13.1K 1.3% │
|
|
202
|
+
│ Harness identity 29 0.0% 29 / 1.0K chars │
|
|
203
|
+
│ Tool guidance 1.9K 0.2% 1.9K / 8.0K chars │
|
|
204
|
+
│ Tool schemas · 34 tools 9.4K 0.9% │
|
|
205
|
+
│ History 3 · Wiki 6 · Native 6 · World 5 · Connections 7 · Other 7 │
|
|
206
|
+
│ Wiki pointer 1.1K 0.1% 1.1K / 2.5K chars │
|
|
207
|
+
│ Reporting rules 712 0.1% 712 / 2.0K chars │
|
|
208
|
+
│ Session state · references 0 0.0% no update this request │
|
|
209
|
+
│ v Variant · c3 · 9a1f 18.4K 1.8% │
|
|
210
|
+
│ Instructions (c1) 8.2K 0.8% 8.2K / 24K chars │
|
|
211
|
+
│ Guardrails (c2) 4.1K 0.4% │
|
|
212
|
+
│ Memory (c3) 3.6K 0.4% │
|
|
213
|
+
│ Tool guidance (c4) 2.5K 0.3% │
|
|
214
|
+
│ v Your application 9.8K 1.0% │
|
|
215
|
+
│ Identity · Role · Working folder 2.4K 0.2% │
|
|
216
|
+
│ Skills index · 12 skills 1.1K 0.1% │
|
|
217
|
+
│ Connected apps · 7 tools 6.3K 0.6% │
|
|
218
|
+
│ v Conversation 142.1K 14.2% measured by subtraction │
|
|
219
|
+
│ Messages and tool results 142.1K 14.2% │
|
|
220
|
+
│ │
|
|
221
|
+
│ RESERVED AND FREE │
|
|
222
|
+
│ Compaction reserve 16.4K 1.6% Pi, auto-compaction │
|
|
223
|
+
│ Free space 800.2K 80.0% │
|
|
224
|
+
│ │
|
|
225
|
+
│ ON DEMAND · not in this request when loaded │
|
|
226
|
+
│ Skills c6 · 12 available ~ 4.2K per skill │
|
|
227
|
+
│ Subagents c5 · 3 available own context each │
|
|
228
|
+
│ │
|
|
229
|
+
│ Rows are estimated from recorded character counts (÷ 4) and reconciled to │
|
|
230
|
+
│ the provider measured 183.4K; Conversation is the remainder, so the rows add │
|
|
231
|
+
│ to the whole. │
|
|
232
|
+
└──────────────────────────────────────────────────────────────────────────────────────────┘
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Option B — ledger plus detail pane.** The same rows on the left; selecting one shows what it is
|
|
236
|
+
on the right: the prompt text, the section's sources and revision, and the actions that apply.
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
┌───────────────────────────────────────────────┬──────────────────────────────────────────┐
|
|
240
|
+
│ CONTEXT ██████████░░░░░░░░░░ 18.3% │ Instructions (c1) │
|
|
241
|
+
│ 183.4K of 1M · sonnet-4-6 · 34 tools │ ───────────────────────────────────── │
|
|
242
|
+
│ │ 8.2K tokens · 0.8% of the window │
|
|
243
|
+
│FOUNDATION 13.1K 1.3%│ always in context · 8.2K / 24K chars │
|
|
244
|
+
│ Harness identity 29 0.0%│ variant c3 · fingerprint 9a1f │
|
|
245
|
+
│ Tool schemas 9.4K 0.9%│ source systemprompt.md │
|
|
246
|
+
│ Tool guidance 1.9K 0.2%│ +----------------------------------+ │
|
|
247
|
+
│ Wiki pointer 1.1K 0.1%│ | You are the person's assistant, | │
|
|
248
|
+
│ Reporting 712 0.1%│ | working with them directly in | │
|
|
249
|
+
│VARIANT · c3 18.4K 1.8%│ | this session: research, writing | │
|
|
250
|
+
│ Instructions c1 8.2K 0.8%│ | and coding in its working folder | │
|
|
251
|
+
│ Guardrails c2 4.1K 0.4%│ +----------------------------------+ │
|
|
252
|
+
│ Memory c3 3.6K 0.4%│ [Open in Harness] [Refine this] │
|
|
253
|
+
│ Tool guidance c4 2.5K 0.3%│ │
|
|
254
|
+
│YOUR APPLICATION 9.8K 1.0%│ │
|
|
255
|
+
│CONVERSATION 142.1K 14.2%│ │
|
|
256
|
+
│RESERVED 16.4K 1.6%│ │
|
|
257
|
+
│FREE 800.2K 80.0%│ │
|
|
258
|
+
└───────────────────────────────────────────────┴──────────────────────────────────────────┘
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Option C — growth over the session.** A second tab for the same page: the stack at each request,
|
|
262
|
+
so "what grew" is visible. Compaction markers come from `compaction.ended` (`tokensBefore`,
|
|
263
|
+
`tokensAfter`), which the run already records.
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
┌ Growth ───────────────────────────────────────────────────────────────────────────────────┐
|
|
267
|
+
│ 1M ┤│
|
|
268
|
+
│ │ ╭── 44.2K│
|
|
269
|
+
│ 20% ┤ ╭──╮ ╭──╮ ╭───╮ ╭────╮ ╭─────╯│
|
|
270
|
+
│ │ ╭──╮ │ │ │ │ │ │ │ │ │ │
|
|
271
|
+
│ 0% ┼──────┴──┴────┴──┴───┴──┴───┴───┴───┴────┴───┴─────┬─────────────── requests →│
|
|
272
|
+
│ r1 r2 r3 r4 r5 r6 r7 r8 ⧗ compacted 112K → 31K│
|
|
273
|
+
│ │
|
|
274
|
+
│ foundation ▓ variant ▒ application ░ conversation █ each segment a group│
|
|
275
|
+
└──────────────────────────────────────────────────────────────────────────────────────────┘
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**The compact meter** — one always-visible readout, everywhere, opening the page:
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
App composer footer Terminal status band
|
|
282
|
+
┌────────────────────────────────────┐ ~/project (main) · account · sonnet-4-6
|
|
283
|
+
│ ▸ model sonnet-4-6 ◔ 18% ↑ ⏎ │ ↑12.1k ↓3.4k R84.9k 18.3%/1M
|
|
284
|
+
└────────────────────────────────────┘ └─ click / /context ─────────────────
|
|
285
|
+
ring colour: 18% data-1 · 80% warning · 95% destructive
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**The terminal page** (`/context`), for reference:
|
|
289
|
+
|
|
290
|
+
```
|
|
291
|
+
Context sonnet-4-6 · 1M 18.3% used · measured
|
|
292
|
+
████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
293
|
+
foundation 13.1K 1.3% ██
|
|
294
|
+
variant 18.4K 1.8% █
|
|
295
|
+
your app 9.8K 1.0% ▌
|
|
296
|
+
conversation 142.1K 14.2% ██████
|
|
297
|
+
reserved 16.4K 1.6% █
|
|
298
|
+
free 800.2K 80.0% (dim)
|
|
299
|
+
j/k move · enter open · v variant · c compact · r refresh · q close
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 5. Honesty rules the view must keep
|
|
303
|
+
|
|
304
|
+
Taken from the mistakes of the harnesses above, and from `INV-RUN-7`:
|
|
305
|
+
|
|
306
|
+
1. The header number is the provider's, or the word `estimate`.
|
|
307
|
+
2. `Conversation` is a subtraction, never a guess, and is labelled `measured by subtraction`.
|
|
308
|
+
3. Free space is `window − measured − reserve`, never `window − listed rows` — the Claude Code #94436
|
|
309
|
+
report is exactly that bug.
|
|
310
|
+
4. A row that could not be measured is `not recorded`, not `0`.
|
|
311
|
+
5. An unknown window is `/?`, never `0%`.
|
|
312
|
+
6. Rows are `approx` in the copy, and the page states the ratio once.
|
|
313
|
+
7. No number is recomputed from a provider's figure in a way that changes its meaning; a scaled row
|
|
314
|
+
is marked scaled.
|
|
315
|
+
|
|
316
|
+
### 6. What this proposal does not do
|
|
317
|
+
|
|
318
|
+
- No tokenizer. `chars / 4` is the house constant; a real tokenizer would need the provider's
|
|
319
|
+
encoding per model and would still not reconcile with the measured total.
|
|
320
|
+
- No new storage. Everything is read from files the harness already writes, plus the rendered sizes
|
|
321
|
+
added to the pack (`INV-PRM-6`, `INV-MEM-5` untouched).
|
|
322
|
+
- No new writer for run records or the ledger.
|
|
323
|
+
- No cost attribution per row in the first surface. Cost per request exists (`pricing.ts`) and can
|
|
324
|
+
be added as a column later without changing the model.
|
|
325
|
+
|
|
326
|
+
## Alternatives
|
|
327
|
+
|
|
328
|
+
- **Do nothing.** The App already shows a pack's character counts and one meter. The gap is the
|
|
329
|
+
share of the window per contributor, the free space, and the variant's always-on cost — the three
|
|
330
|
+
questions a person actually asks.
|
|
331
|
+
- **A tab in the existing sidebar Context view.** Rejected: the sidebar is too narrow for a six
|
|
332
|
+
column table, and the request is explicitly a full-width page.
|
|
333
|
+
- **Client-side computation in the App.** Rejected by `INV-PAR-1`: the terminal needs the same rows,
|
|
334
|
+
and two implementations of the subtraction rule would drift.
|
|
335
|
+
- **Reuse `usage.summary`.** Rejected: that is a period aggregate over the ledger. Attribution is
|
|
336
|
+
one request's composition, and `UsageTotals` has no context fields.
|
|
337
|
+
- **Full tokenizer.** Rejected: see above; it would also make the view disagree with Pi's own
|
|
338
|
+
footer, which is the number a person already sees.
|
|
339
|
+
|
|
340
|
+
## Consequences
|
|
341
|
+
|
|
342
|
+
- **Applications.** One new method, additive. A host that shows the page reads
|
|
343
|
+
`context.attribution`; a host that does not is unaffected.
|
|
344
|
+
- **Stored data.** `runs/<id>/context.json` gains a `rendered` size per section (and per source).
|
|
345
|
+
Older packs lack it; the view falls back to `size` and marks the section `approximate`.
|
|
346
|
+
- **Protocol.** One new method name and result shape; no `PROTOCOL_VERSION` change.
|
|
347
|
+
- **Spec.** `04-prompt.md` gains the recorded rendered sizes; `11-terminal.md` gains `/context`;
|
|
348
|
+
`14-surfaces-and-parity.md` and `parity.md` gain the row.
|
|
349
|
+
|
|
350
|
+
## Migration
|
|
351
|
+
|
|
352
|
+
Nothing to migrate. Packs recorded before this change stay readable; the only difference is the
|
|
353
|
+
`approximate` marker on rows whose rendered size was not recorded. The capability can be removed by
|
|
354
|
+
deleting the page, the method and the extra pack field; no data depends on it.
|
|
355
|
+
|
|
356
|
+
## Checks
|
|
357
|
+
|
|
358
|
+
- Harness: `npm run typecheck`, `npm test`, `npm run prove`.
|
|
359
|
+
- New unit tests: the reconciliation (rows sum to `contextTokens`), the negative-prefix case, a pack
|
|
360
|
+
with no `usage.updated`, a pack with no `delivery`, and a run with unknown `contextWindow`.
|
|
361
|
+
- Terminal: a page test in the style of `usagePage.test.ts`.
|
|
362
|
+
- App: `npm run typecheck`, `npm test`, `npm run check:layers`, `npm run check:ui`, and
|
|
363
|
+
`cd src-tauri && cargo test`.
|
|
364
|
+
- A visual check of both surfaces against one real run, comparing the header figure with the
|
|
365
|
+
terminal status band and with Pi's own footer.
|
|
366
|
+
|
|
367
|
+
## What shipped
|
|
368
|
+
|
|
369
|
+
- `prompt/compile.ts` renders the pack with `renderSized` and records `delivery.sizes` (system and
|
|
370
|
+
update maps plus framing); `render()` is unchanged byte for byte. The sizes are recorded in place of
|
|
371
|
+
the per-section `rendered?: number` the design proposed: one map, keyed by the ids that already
|
|
372
|
+
name the sections.
|
|
373
|
+
- `sessions/contracts.ts` records `compaction: { enabled, reserveTokens }` in `context.snapshot`, read
|
|
374
|
+
from the Pi session's own settings; absent stays absent.
|
|
375
|
+
- `context/attribution.ts` builds the rows, the measured reconciliation, the reserve and free space,
|
|
376
|
+
the per-request history, the compaction markers and the on-demand list. `context.attribution` is a
|
|
377
|
+
new server method; `terminal.context` resolves the terminal's latest run, so no surface passes a
|
|
378
|
+
run id it could not verify.
|
|
379
|
+
- The bar is segmented: one colour per kind of context (the App's `--data-1..4` on both surfaces), the
|
|
380
|
+
track for free space, and a `│` where the reserve begins. The terminal's palette lives in
|
|
381
|
+
`terminal/tui/theme.ts` as `SERIES_COLORS`; the shared `SegmentedBar` grew `track`, `marker` and
|
|
382
|
+
`height` so the App draws one bar instead of a single-tone meter above a split. Severity moved to
|
|
383
|
+
the percentage text, on one rule for both surfaces: amber at 80, red at 95.
|
|
384
|
+
- The terminal `/context` page shipped with the one-column ledger and the detail replacing the list on
|
|
385
|
+
`enter` (the side-by-side panes in Option B were not built); `g` regroups by owner or kind, `c`
|
|
386
|
+
compacts after a confirmation, `v` navigates to `/harness`. The band and the OpenTUI status bar
|
|
387
|
+
gained the reading, shown only when the session knows it.
|
|
388
|
+
- The App gained `context.attribution` on the bridge, a full-width `ContextAttributionPage` opened from
|
|
389
|
+
the Context tab, and a context ring in the composer footer. The ring reports; it does not open the
|
|
390
|
+
page yet, so the Context tab is the only App entry point.
|
|
391
|
+
- `context.attribution` takes `{ runId }` only; the session-scoped case is `terminal.context`, which is
|
|
392
|
+
the surface that has a session rather than a run.
|
|
393
|
+
|
|
394
|
+
**Amendment (2026-10-29).** The composer status band carries no context reading in either
|
|
395
|
+
renderer: at the person's request the terminal shows the share of the window only on `/context`,
|
|
396
|
+
whose header reads the figure above (`18.3%/1M`). The compact-meter wireframe and the visual
|
|
397
|
+
verification step that compares against the band record the accepted design, not the current
|
|
398
|
+
band. The App composer ring is unchanged.
|
|
399
|
+
|
|
400
|
+
## Open questions
|
|
401
|
+
|
|
402
|
+
1. **Placement.** Full-width page in the main pane (recommended), a new workspace view tab that
|
|
403
|
+
renders full width, or a tab beside `Usage` in the sidebar? The sketches assume the first.
|
|
404
|
+
2. **Shape.** Option A (accounting sheet), A plus Option B's detail pane on wide windows, or all
|
|
405
|
+
three as tabs of one page?
|
|
406
|
+
3. **Rows.** Group by owner (foundation / variant / application / conversation), as proposed, or by
|
|
407
|
+
kind (`System prompt`, `Tools`, `Skills`, `Memory`, `Messages`) as Claude Code does? Owner
|
|
408
|
+
grouping is what makes the variant actionable; kind grouping is what a person coming from Claude
|
|
409
|
+
Code expects.
|
|
410
|
+
4. **Cost per row.** Show `cost per request` beside tokens from the first version, or keep the view
|
|
411
|
+
token-only?
|
|
412
|
+
5. **Live updates.** Refresh on every `usage.updated` while a reply streams, or on open and on
|
|
413
|
+
`completed` only?
|
|
414
|
+
6. **The compact meter.** Add the ring to the App composer footer, the terminal status band, or
|
|
415
|
+
both? Pi's footer already shows `45.3%/200K` and this harness's band shows neither.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0050
|
|
3
|
+
title: Run stop codes and refusal evidence
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-29
|
|
6
|
+
affects: [INV-RUN-3, INV-RUN-4, INV-GATE-1, INV-TUI-3, INV-PAR-1]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# PROP-0050: Run stop codes and refusal evidence
|
|
10
|
+
|
|
11
|
+
## Problem
|
|
12
|
+
|
|
13
|
+
A run's human-readable stop reason and tool results do not consistently identify the rule or
|
|
14
|
+
lifecycle event that stopped it. Diagnostics need recorded causes rather than guesses based on prose.
|
|
15
|
+
A settled run is not necessarily a finished task.
|
|
16
|
+
|
|
17
|
+
## Design
|
|
18
|
+
|
|
19
|
+
Record gate and work-slice refusals as `tool.refused` events, retaining the original tool response.
|
|
20
|
+
Record a fixed `terminalCode` separately from the descriptive `terminalReason`. Interrupted events
|
|
21
|
+
can carry the code; failure events retain their existing code and the run store maps it to a stop
|
|
22
|
+
code. Legacy records without a code remain unknown. Report known compaction measurements, and expose
|
|
23
|
+
refusals and stop evidence through trajectory search and the terminal trajectory page.
|
|
24
|
+
|
|
25
|
+
Terminal telemetry is best effort when the controller is unreachable. These fields do not infer
|
|
26
|
+
whether the requested work was completed and do not change the gate or its approval requirements.
|
|
27
|
+
The binding contracts are in [sessions and runs](../02-sessions-and-runs.md),
|
|
28
|
+
[tools and the gate](../07-tools-and-gate.md), [memory and history](../08-memory-and-history.md),
|
|
29
|
+
and [terminal](../11-terminal.md). The architectural decision is
|
|
30
|
+
[ADR-0059](../../decisions/ADR-0059-run-diagnostic-evidence.md).
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0051
|
|
3
|
+
title: Unfinished runs must hand off a decision and a next step
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-30
|
|
6
|
+
updated: 2026-10-30
|
|
7
|
+
affects: [INV-PRM-2, INV-PRM-8, 04-prompt.md, ADR-0008]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0051: Unfinished runs must hand off a decision and a next step
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
The `reporting` section tells the model to "Include blockers, risks, or next steps only when they are
|
|
15
|
+
concrete and relevant" (`src/prompt/compile.ts:170`). That sentence is permissive, so a run that ends
|
|
16
|
+
with work unfinished can satisfy it by naming blockers and never stating what the person must decide
|
|
17
|
+
or do next.
|
|
18
|
+
|
|
19
|
+
Run `55ad7d48-92b0-4d9d-9d80-c93b5112b80b` is the observed case, diagnosed in the run report
|
|
20
|
+
`thaivlm/outputs/diagnoses/2026-10-29-55ad7d48.md` in the projects workspace:
|
|
21
|
+
|
|
22
|
+
- The person asked for a 1,000-SHr training study to be implemented (seq 2).
|
|
23
|
+
- The run stopped with two of four todos open — "Implement reproducible mixture and study
|
|
24
|
+
configuration" (in_progress) and "Implement model and optimizer compatibility checks" (pending)
|
|
25
|
+
(seq 119) — and completed (seq 145).
|
|
26
|
+
- The final reply listed four changed files and three blockers — an empty OPC source, an in-progress
|
|
27
|
+
document dataset, an HTTP 403 on gated Gemma weights, missing model adapters — then a line about
|
|
28
|
+
tests, and stopped (seq 143). It named no decision, no owner and no next step.
|
|
29
|
+
|
|
30
|
+
The person's report: "agent said whats blocking which is good but the reply lacks of whats saying what
|
|
31
|
+
user has to do next or decision for user to do." The blocking was accurate; the handoff was missing.
|
|
32
|
+
A reply that names only blockers leaves the person to reconstruct the decision themselves, which is
|
|
33
|
+
the work the run was supposed to reduce.
|
|
34
|
+
|
|
35
|
+
Prevalence is unknown: no sweep has been run over recent runs, so this is one confirmed case plus the
|
|
36
|
+
guidance hole that permits it.
|
|
37
|
+
|
|
38
|
+
## Proposal
|
|
39
|
+
|
|
40
|
+
Add one conditional sentence to `REPORTING_GUIDANCE` in `src/prompt/compile.ts:165-176` — the
|
|
41
|
+
foundation's stable `reporting` section, not variant data — requiring that a reply which ends with
|
|
42
|
+
work unfinished states, in one short block, what the person must decide and what happens next:
|
|
43
|
+
|
|
44
|
+
- **when:** the run leaves todos open, reports a blocker it could not clear, or stops before the
|
|
45
|
+
requested work is done. Ordinary completed replies are unaffected, so the "do not force a fixed set
|
|
46
|
+
of report headings" rule (`src/prompt/compile.ts:168`) still holds.
|
|
47
|
+
- **what:** for each open item, either the decision the person owns (a choice only they can make) or
|
|
48
|
+
the next action with its owner; not a restatement of the blocker.
|
|
49
|
+
- **how:** the same content-driven style as the rest of the section — a bulleted list or a short
|
|
50
|
+
table, no mandated heading names.
|
|
51
|
+
|
|
52
|
+
The text stays stable and conditional. It cannot read live state: `INV-PRM-2` keeps changing state out
|
|
53
|
+
of the system prompt, so the clause is written for the model to apply against its own todo list and
|
|
54
|
+
blockers, not injected from `todo.updated` events.
|
|
55
|
+
|
|
56
|
+
Spec page to update in the same change: [`04-prompt.md`](../04-prompt.md), Reporting section — one
|
|
57
|
+
sentence saying that guidance also covers how an unfinished reply hands off. `INV-PRM-2` is unchanged
|
|
58
|
+
in meaning (the section is still fixed text); it is listed in `affects` because the section's text
|
|
59
|
+
changes. `INV-PRM-8` applies: the stable prefix changes once, so sessions miss the provider cache once
|
|
60
|
+
after upgrade, exactly as recorded for PROP-0001 and PROP-0004.
|
|
61
|
+
|
|
62
|
+
## Surfaces
|
|
63
|
+
|
|
64
|
+
No new capability and no new screen. The section is harness-owned and identical in the terminal
|
|
65
|
+
(`xagent`) and the App, because both receive the compiled pack
|
|
66
|
+
([`04-prompt.md`](../04-prompt.md) § Reporting; `SECTION_ORDER.reporting = 95`). `docs/parity.md`
|
|
67
|
+
needs no row: nothing is added that a host must present. Applications bundling the harness rebuild to
|
|
68
|
+
pick up the new text.
|
|
69
|
+
|
|
70
|
+
## Tests
|
|
71
|
+
|
|
72
|
+
`src/prompt/compile.test.ts:304` already asserts the section's shape and stability. The test that goes
|
|
73
|
+
red today is an added expectation on the guidance text itself, in that same test or beside it:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
expect(REPORTING_GUIDANCE).toContain('ends with work unfinished')
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
plus a guard that the flexibility rule survives — `expect(REPORTING_GUIDANCE).toContain('do not force
|
|
80
|
+
a fixed set of report headings')`, already at `compile.test.ts:311`, must stay green.
|
|
81
|
+
|
|
82
|
+
## Alternatives
|
|
83
|
+
|
|
84
|
+
- **Do nothing; leave "only when concrete and relevant".** This is the status quo that produced the run
|
|
85
|
+
above. It cannot distinguish "no blockers" from "blockers listed, decision unstated".
|
|
86
|
+
- **Inject live todo state into the reporting section.** Rejected: `INV-PRM-2` forbids changing state in
|
|
87
|
+
the system prompt, and dynamic text would break the stable prefix (`INV-PRM-8`).
|
|
88
|
+
- **Reinstate a fixed heading list (PROP-0001's original).** Rejected already by PROP-0004 and
|
|
89
|
+
[ADR-0008](../../decisions/ADR-0008-flexible-reporting-guidance.md): mandatory headings produced
|
|
90
|
+
generic sections. This proposal adds a trigger condition, not a template.
|
|
91
|
+
- **Handle it in the variant prompt instead.** Rejected on routing: the guidance is foundation-owned
|
|
92
|
+
(`src/prompt/compile.ts:468`), identical for every variant, so a variant edit would not reach the run
|
|
93
|
+
that failed and would have to be redone per variant.
|
|
94
|
+
|
|
95
|
+
## Consequences
|
|
96
|
+
|
|
97
|
+
- Unfinished replies carry a decision or next action, at a small cost in length; completed replies are
|
|
98
|
+
unchanged.
|
|
99
|
+
- One provider-prefix change, one cache miss after upgrade.
|
|
100
|
+
- No stored data, server protocol, gate or tool change.
|
|
101
|
+
- It remains guidance, not enforcement: a model can still under-report. A recurring pattern would
|
|
102
|
+
justify a checked run-level signal (for example, a stop code that marks a run unfinished), which is
|
|
103
|
+
out of scope here.
|
|
104
|
+
|
|
105
|
+
## Out of scope
|
|
106
|
+
|
|
107
|
+
- Completing the study whose todos stayed open.
|
|
108
|
+
- Making the harness judge whether a task is finished, or any change to run status, stop codes or the
|
|
109
|
+
gate.
|
|
110
|
+
- Sweeping recent runs to measure how often unfinished replies omit a decision.
|