@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,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0042
|
|
3
|
+
title: Usage analytics and provider limits as a built-in capability
|
|
4
|
+
status: Accepted
|
|
5
|
+
created: 2026-10-26
|
|
6
|
+
updated: 2026-10-26
|
|
7
|
+
affects: [INV-MEM-5, INV-MEM-6, INV-STO-2, INV-SRV-1, INV-PLG-10, INV-ACC-3, 02-sessions-and-runs.md, 06-plugins-and-capabilities.md, 08-memory-and-history.md, 09-accounts-and-connectors.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 14-surfaces-and-parity.md, parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0042: Usage analytics and provider limits as a built-in capability
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
A run already records what each model request used: `usage.updated` carries per-request tokens,
|
|
15
|
+
cost, provider, model, TTFT and duration (`src/sessions/contracts.ts`, emitted in
|
|
16
|
+
`src/sessions/runner.ts`). Nothing aggregates it, and the SQLite `runs` table stores only ids,
|
|
17
|
+
status and timestamps (`src/sessions/runIndex.ts`). A person cannot answer "what did this account
|
|
18
|
+
spend this week, on which model?" without reading run folders.
|
|
19
|
+
|
|
20
|
+
The account store already has the shape of provider limits — `Limit`, `AccountState.limits`, and
|
|
21
|
+
health derived from `usedPercent`/`resetsAt` (`src/accounts/store.ts`) — and `account.status`
|
|
22
|
+
carries a `limits` array (`src/sessions/contracts.ts`). No producer ever fills it: `Probe.limits`
|
|
23
|
+
is never assigned in `Accounts.probe`, and `runner.ts` only classifies provider error text. A
|
|
24
|
+
person cannot see how close a subscription plan, credit balance or rate window is.
|
|
25
|
+
|
|
26
|
+
The capability is something a person uses, so it belongs in the Harness with a terminal surface
|
|
27
|
+
before any host screen (`INV-PAR-1`).
|
|
28
|
+
|
|
29
|
+
## Affected rules
|
|
30
|
+
|
|
31
|
+
- **INV-MEM-5** Files are the source of truth. `index.sqlite` is derived and can be deleted and
|
|
32
|
+
rebuilt. The usage ledger is derived data inside that index; it adds no run file.
|
|
33
|
+
- **INV-MEM-6** Index migrations are append-only. Migration 8 appends the usage tables.
|
|
34
|
+
- **INV-STO-2** `index.sqlite` can be deleted and rebuilt; the ledger is rebuilt from run events.
|
|
35
|
+
- **INV-SRV-1** A new `usage` method group is additive. Existing method names, params and result
|
|
36
|
+
shapes do not change.
|
|
37
|
+
- **INV-PLG-10** The methods and commands are contributed by one built-in feature module, so the
|
|
38
|
+
public method table remains assembled by `server/methods.ts` and the plugin has one owner.
|
|
39
|
+
- **INV-ACC-3** The harness never writes a secret to its own files. Provider limit reads use the
|
|
40
|
+
credential Pi already resolved through `Models.getAuth`, send it only to the provider, and store
|
|
41
|
+
no credential. A refreshed OAuth token is written only through the existing credential store.
|
|
42
|
+
- **INV-RUN-7** The meaning of every usage field is unchanged. The ledger copies them; aggregates
|
|
43
|
+
are new derived data.
|
|
44
|
+
|
|
45
|
+
## Proposal
|
|
46
|
+
|
|
47
|
+
A built-in plugin `usage` owns a **read-only** capability with one full-screen terminal page and
|
|
48
|
+
two commands:
|
|
49
|
+
|
|
50
|
+
- `/usage:` and `/usage:analysis [today|7d|30d|all]` — token, cost and latency analytics from a
|
|
51
|
+
derived ledger.
|
|
52
|
+
- `/usage:limit` — what each provider last reported about its plan windows, balances or rate
|
|
53
|
+
limits.
|
|
54
|
+
|
|
55
|
+
**Ledger.** Migration 8 adds `usage_requests` (one row per model request) and `usage_indexed` to
|
|
56
|
+
`index.sqlite`. A run's ledger rows are written from its `usage.updated` events when the run ends,
|
|
57
|
+
and repaired by `open`, `rebuildIndex()` and the first analysis call when the ledger is empty. A
|
|
58
|
+
per-request row is used when the event carries `request`; a provider that reported only cumulative
|
|
59
|
+
totals contributes one row from its latest event. Cost uses the provider's own figure; a request
|
|
60
|
+
with no cost may be priced at Pi's catalogue rates for display, and the estimate is marked
|
|
61
|
+
separately, never presented as a provider figure. Aggregates are bounded: one scope, one period,
|
|
62
|
+
top ten rows per breakdown, at most 400 days, with an unpriced-request count.
|
|
63
|
+
|
|
64
|
+
**Limits.** Three sources, in this order:
|
|
65
|
+
|
|
66
|
+
1. **Response headers**, captured by wrapping each account runtime's provider streams with
|
|
67
|
+
`onResponse`; a terminal session's runtime forwards only the limit-bearing headers over its
|
|
68
|
+
control-key-protected socket. Four families are understood: `anthropic-ratelimit-*`, Anthropic unified plan
|
|
69
|
+
windows, `x-codex-*` plan windows, and the common `x-ratelimit-*` headers. `Retry-After` on a
|
|
70
|
+
429 is kept as a reset hint. Raw headers are never stored.
|
|
71
|
+
2. **The provider's own usage endpoint**, read with `Models.getAuth` and a bounded HTTPS GET that
|
|
72
|
+
refuses redirects and other hosts: OpenRouter `GET /api/v1/key`, DeepSeek
|
|
73
|
+
`GET /user/balance`, Anthropic's organization `rate_limits` (admin credential only; configured
|
|
74
|
+
limits, not usage), ChatGPT/Codex `GET /backend-api/wham/usage` (account id from the access
|
|
75
|
+
token), and OpenCode Go `GET /zen/go/v1/usage`.
|
|
76
|
+
3. **Unavailable**, with a reason. No percentage is ever invented. A provider with no documented
|
|
77
|
+
endpoint, a custom base URL, an expired sign-in or no support shows local usage only.
|
|
78
|
+
|
|
79
|
+
Undocumented plan endpoints stay behind the plugin setting `experimentalProbes` (off by
|
|
80
|
+
default). A reading is cached per account and provider for `refreshMinutes` (default 10); a
|
|
81
|
+
page open or `r` refreshes only what is due. Readings live in the account's existing state
|
|
82
|
+
(`limits`, plus a new `providerLimits` readout list) and never create a new file.
|
|
83
|
+
|
|
84
|
+
**Surfaces.** Public methods `usage.summary`, `usage.limits`, `usage.sync`; protected terminal
|
|
85
|
+
routes `terminal.usage.summary` and `terminal.usage.limits` for the page, all through the same
|
|
86
|
+
service. The App screen is a later host task, tracked as `PAR-016`.
|
|
87
|
+
|
|
88
|
+
## Alternatives
|
|
89
|
+
|
|
90
|
+
- **Read every run's `events.jsonl` on demand.** Correct but unbounded: a year of runs is many
|
|
91
|
+
megabytes per page open. A derived table is what the index is for.
|
|
92
|
+
- **Store analytics in a new data folder.** Violates `INV-STO-3` and duplicates derived data the
|
|
93
|
+
index can rebuild.
|
|
94
|
+
- **Scrape provider dashboards.** Not stable, not authenticated, and not a provider API.
|
|
95
|
+
- **Show a percentage for every provider by assuming a cap.** Fabrication; rejected.
|
|
96
|
+
- **Make limit reads automatic in the background.** Surprise egress with a person's credential;
|
|
97
|
+
rejected in favour of page-open and explicit refresh.
|
|
98
|
+
- **Do nothing.** Leaves usage and limits unanswerable in both surfaces.
|
|
99
|
+
|
|
100
|
+
## Consequences
|
|
101
|
+
|
|
102
|
+
- Two additive method routes and two terminal commands; no protocol version change.
|
|
103
|
+
- `index.sqlite` gains two tables (migration 8), rebuilt from run files.
|
|
104
|
+
- `AccountState` gains an optional `providerLimits` readout list and `Limit` gains optional
|
|
105
|
+
absolute fields and `remainingPercent`; old state files load with defaults, and old readers
|
|
106
|
+
ignore the additions.
|
|
107
|
+
- A page open may make one small read-only request per due provider, using the account's existing
|
|
108
|
+
credential. No model request, no token spend, no secret written.
|
|
109
|
+
- The harness remains the only writer of the ledger and of limit snapshots.
|
|
110
|
+
|
|
111
|
+
## Migration
|
|
112
|
+
|
|
113
|
+
No data rewrite. The index migrates in one transaction with the existing backup/restore path; an
|
|
114
|
+
old index simply indexes existing runs on the next `open` or `usage.sync`. Account state files
|
|
115
|
+
without `providerLimits` read as an empty list. Reverting removes the plugin module and commands;
|
|
116
|
+
the extra index tables are inert.
|
|
117
|
+
|
|
118
|
+
## Checks
|
|
119
|
+
|
|
120
|
+
- `npm run typecheck`, `npm test` (`src/usage/*.test.ts`, `src/plugins/usage.test.ts`).
|
|
121
|
+
- `npm run prove` with an injected reader: `usage.summary` after a fake recorded run and
|
|
122
|
+
`usage.limits` returning an explicit unavailable reason, with no network.
|
|
123
|
+
- Terminal verification of `/usage:`, `/usage:analysis`, `/usage:limit` and the two tabs.
|
|
124
|
+
- App checks (`npm run typecheck`, `npm test`, `npm run check:layers`, `npm run check:ui`,
|
|
125
|
+
`cargo test`) after the Harness change.
|
|
126
|
+
- Real provider header names are confirmed only by a separate owner-authorized request per
|
|
127
|
+
provider; fixtures keep only redacted header values.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0043
|
|
3
|
+
title: Read-only Bash in plan mode, enforced by the OS sandbox
|
|
4
|
+
status: Accepted; implemented
|
|
5
|
+
created: 2026-10-26
|
|
6
|
+
updated: 2026-10-26
|
|
7
|
+
affects: [INV-RUN-8, INV-GATE-3, INV-GATE-8, 02-sessions-and-runs.md, 07-tools-and-gate.md, 11-terminal.md, terminal-tui.md, parity.md, ADR-0038]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0043: Read-only Bash in plan mode, enforced by the OS sandbox
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
Plan mode refuses Bash entirely: `planRefusal` (`src/sessions/planMode.ts`) did not list `bash`,
|
|
15
|
+
the terminal dropped it from the plan's active set (`planModeTools`), and a test pinned the refusal.
|
|
16
|
+
A plan therefore could not check its claims with read-only commands such as `git log`, `git diff`,
|
|
17
|
+
`rg` or `node --version`, although the plan instructions ask for evidence-grounded findings.
|
|
18
|
+
|
|
19
|
+
## Affected rules
|
|
20
|
+
|
|
21
|
+
- `INV-RUN-8`: "… it has no connectors, user questions, writes, commands or nested subagents." (about
|
|
22
|
+
plan research children; unchanged) and the plan instruction "Do not change files or remote data, run
|
|
23
|
+
commands, …".
|
|
24
|
+
- `INV-GATE-3` / `INV-GATE-8`: default Bash writes inside the workspace; `outside` scope and Full
|
|
25
|
+
Permission can widen it.
|
|
26
|
+
|
|
27
|
+
## Proposal
|
|
28
|
+
|
|
29
|
+
A plan run (SDK sessions and the terminal) may call the model's `bash` tool. Every such call runs in
|
|
30
|
+
a new **read-only scope** of the existing workspace sandbox (`core/workspaceSandbox.ts`):
|
|
31
|
+
|
|
32
|
+
- Reads are as broad as default Bash. Writes are denied everywhere except `/dev/null`, `/dev/tty`,
|
|
33
|
+
and a private temp folder made for the call; `TMPDIR` points to it and it is removed afterwards.
|
|
34
|
+
- No network. No signals outside the sandbox. On macOS no mach services at all, so a command cannot
|
|
35
|
+
act through system daemons (preferences, Apple Events, Launch Services). On Linux, `bwrap` adds
|
|
36
|
+
`--unshare-net --unshare-ipc` and a tmpfs over `/run`.
|
|
37
|
+
- Nothing widens the scope: the Full Permission bypass and `workspaceWriteScope: 'outside'` are never
|
|
38
|
+
consulted. The gate refuses an `outside` request before approvals. The hard-link scan is skipped,
|
|
39
|
+
because the scope permits no workspace writes.
|
|
40
|
+
- A missing sandbox fails closed, as for default Bash.
|
|
41
|
+
- As defence in depth, the gate also refuses a short list of system-acting commands
|
|
42
|
+
(`PLAN_BASH_DENIED`: `sudo`, `osascript`, `open`, `launchctl`, `defaults`, `kill`, `ssh`, …) in any
|
|
43
|
+
segment of the command. The OS sandbox is the boundary; the list is not.
|
|
44
|
+
|
|
45
|
+
The plan instruction says read-only shell inspection is allowed, writes and network fail, and the
|
|
46
|
+
model must not work around a failed write. Unchanged: plan research children still have no Bash, a
|
|
47
|
+
user `!` command still exits plan mode, and `!` is still refused while a plan request runs.
|
|
48
|
+
|
|
49
|
+
## Alternatives
|
|
50
|
+
|
|
51
|
+
- **Do nothing.** Plans stay unable to verify claims with commands.
|
|
52
|
+
- **A command allowlist without the sandbox.** Easy to get around (`find -exec`, `rg --pre`,
|
|
53
|
+
`git -c core.pager=…`, `$(…)`, aliases), and every new tool needs a review. Rejected as the
|
|
54
|
+
boundary; kept only as a small denylist.
|
|
55
|
+
- **Default workspace-scoped Bash in plan mode.** Would let a plan change the workspace.
|
|
56
|
+
|
|
57
|
+
## Consequences
|
|
58
|
+
|
|
59
|
+
Hosts need no change; plan mode reaches the runner through `Sessions`. The terminal keeps `bash` in
|
|
60
|
+
its plan active set. No protocol, stored data or prompt prefix changes: the SDK tool list is
|
|
61
|
+
unchanged and the instruction is the dynamic plan section. Builds and tests that write fail in plan
|
|
62
|
+
mode, which is intended.
|
|
63
|
+
|
|
64
|
+
## Migration
|
|
65
|
+
|
|
66
|
+
None. It can be undone by removing `bash` from the plan gate.
|
|
67
|
+
|
|
68
|
+
## Checks
|
|
69
|
+
|
|
70
|
+
`src/core/workspaceSandbox.test.ts` (real sandbox: reads succeed; workspace, home and link writes
|
|
71
|
+
fail; the temp folder works and is removed; a local TCP connection fails; widening callbacks are
|
|
72
|
+
never called; win32 fails closed), `src/sessions/planMode.test.ts`, `src/sessions/sessions.test.ts`,
|
|
73
|
+
`src/terminal/piExtension.lifecycle.test.ts`, `npm run prove`, and the App's checks. The Linux `bwrap`
|
|
74
|
+
path needs an Ubuntu CI run.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0044
|
|
3
|
+
title: Raise the work-slice defaults to 320 tool calls and 60 minutes, with no token cap
|
|
4
|
+
status: Accepted
|
|
5
|
+
created: 2026-10-26
|
|
6
|
+
updated: 2026-10-26
|
|
7
|
+
affects: [INV-RUN-13, 02-sessions-and-runs.md, 10-server-protocol.md, 11-terminal.md, PROP-0041]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0044: Raise the work-slice defaults to 320 tool calls and 60 minutes, with no token cap
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
`DEFAULT_SLICE_POLICY` (`src/sessions/workSlice.ts`) and `INV-RUN-13` set 160 tool calls, 40 minutes
|
|
15
|
+
and 320 000 new tokens, whichever comes first. Two of those defaults are wrong for ordinary work.
|
|
16
|
+
|
|
17
|
+
- **The token cap is the earliest limit, and it is not the bound it claims to be.** Its own comment
|
|
18
|
+
called 320 000 "a safety net, not the bound", yet it counts new input, cache writes and output, so a
|
|
19
|
+
few large reads in a big context cross it before the work is done. The "Confirm plan model support"
|
|
20
|
+
thread counted 76 807 new tokens after four requests, and `workSlice.test.ts` still carried a case
|
|
21
|
+
asserting a 320k stop. A cap that fires on reading is a false stop, and the stall rules — not the
|
|
22
|
+
token count — are what detect an unbounded reply.
|
|
23
|
+
- **40 minutes is tighter than the field and tighter than the evidence.** The measured failure in
|
|
24
|
+
STUDY-0003 was a reply that ran 114 minutes with no text and 448 calls, not one that ran 40 minutes.
|
|
25
|
+
OpenHands allows 500 agent steps per run by default; Claude's Agent SDK has no default `maxTurns`;
|
|
26
|
+
Cursor documents no tool-call limit; SWE-agent's caps are benchmark stops ($3, 1800 s) that
|
|
27
|
+
auto-submit and exit. A checkpoint every 40 minutes turns one healthy task into a series of runs
|
|
28
|
+
without a measured benefit.
|
|
29
|
+
|
|
30
|
+
The rule stays: a reply is bounded and hands off. What changes is where the boundary sits.
|
|
31
|
+
|
|
32
|
+
## Affected rules
|
|
33
|
+
|
|
34
|
+
- **INV-RUN-13** says: "The foundation defaults are 160 tool calls, 40 minutes and 320 000 new tokens,
|
|
35
|
+
whichever comes first." The invariant's requirement — a bounded reply, a handoff at the limit and a
|
|
36
|
+
continuation — is unchanged; its stated numbers and the default token cap change.
|
|
37
|
+
- **PROP-0041** §1 states the same numbers and §Consequences says "a checkpoint every ≤ 40 minutes";
|
|
38
|
+
both are corrected to point here.
|
|
39
|
+
|
|
40
|
+
## Proposal
|
|
41
|
+
|
|
42
|
+
`DEFAULT_SLICE_POLICY` becomes:
|
|
43
|
+
|
|
44
|
+
| Setting | Was | Now |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `maxToolCalls` | 160 | **320** |
|
|
47
|
+
| `maxMinutes` | 40 | **60** |
|
|
48
|
+
| `maxNewTokens` | 320 000 | **0** (no cap) |
|
|
49
|
+
| `maxSlices` | 8 | 8 (unchanged) |
|
|
50
|
+
| `continue` | true | true (unchanged) |
|
|
51
|
+
|
|
52
|
+
- Calls and the clock are the bound, whichever comes first: about 80 minutes of ordinary work at 15 s a
|
|
53
|
+
call, with 60 minutes as the ceiling.
|
|
54
|
+
- A token cap stays available to whoever wants a cost ceiling: `workSlice.maxNewTokens` per run, still
|
|
55
|
+
counted on new input, cache writes and output and never on the cached prefix.
|
|
56
|
+
- Nothing else changes: the refusal and `checkpoint_write`, the exemption for a handoff call, the
|
|
57
|
+
stall rules and their per-reply reset, the terminal's behaviour, and automatic continuation.
|
|
58
|
+
|
|
59
|
+
## Alternatives
|
|
60
|
+
|
|
61
|
+
- **Do nothing.** Rejected: the token cap was the first limit a large read crossed, and its stop is
|
|
62
|
+
visible to the person as an arbitrary end of a useful reply.
|
|
63
|
+
- **Keep a 320 000 safety net and raise only the calls and the clock.** Rejected: the same false stop
|
|
64
|
+
stays, and two limits that are never reached in ordinary work are enough.
|
|
65
|
+
- **Turn the guard off by default.** Rejected for now: the stall rules are the evidence-backed part
|
|
66
|
+
(repeated identical calls, repeated failures, edit churn, compaction thrash), and the budget itself
|
|
67
|
+
is what bounds a reply. Only its size changes.
|
|
68
|
+
- **Bound cost in dollars instead of tokens.** Not adopted here: the harness records cost per request,
|
|
69
|
+
but a dollar ceiling belongs with the account's usage limits (`usage/limits`, PROP-0042), not with a
|
|
70
|
+
reply's work slice.
|
|
71
|
+
|
|
72
|
+
## Consequences
|
|
73
|
+
|
|
74
|
+
- A healthy task reaches its first checkpoint after roughly 80 minutes of ordinary work instead of 40,
|
|
75
|
+
and no token count ends a reply on its own. The longest a task runs unattended is still eight slices,
|
|
76
|
+
so the slice cap now allows up to about eight hours instead of about five.
|
|
77
|
+
- With no token cap, only calls and time bound an expensive reply; a person who wants a token ceiling
|
|
78
|
+
sets one, and the heartbeat still reports `steps` against `maxToolCalls`.
|
|
79
|
+
- No stored-data, protocol or event change: an absent `workSlice` simply resolves to the new defaults,
|
|
80
|
+
and a run already recorded keeps the policy it ran under.
|
|
81
|
+
|
|
82
|
+
## Migration
|
|
83
|
+
|
|
84
|
+
None. Undo by restoring the three values in `DEFAULT_SLICE_POLICY`, or by passing `workSlice` on
|
|
85
|
+
`sessions.run`. A continuation inherits the policy as it always did.
|
|
86
|
+
|
|
87
|
+
## Checks
|
|
88
|
+
|
|
89
|
+
- `npx vitest run src/sessions/workSlice.test.ts src/sessions/sessions.test.ts` (the defaults
|
|
90
|
+
assertion and the limit-selection test change with the values; the token-cap test keeps an explicit
|
|
91
|
+
override)
|
|
92
|
+
- `npm run typecheck`, `npm test`, `npm run prove`
|
|
93
|
+
- App: `npm run typecheck`, `npm test`, `npm run check:layers`, `cd src-tauri && cargo test`
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0045
|
|
3
|
+
title: Rename the run checklist to todo and add the /todo command
|
|
4
|
+
status: Accepted; implemented
|
|
5
|
+
created: 2026-10-26
|
|
6
|
+
updated: 2026-10-26
|
|
7
|
+
affects: [02-sessions-and-runs.md, 04-prompt.md, 06-plugins-and-capabilities.md, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, 14-surfaces-and-parity.md, parity.md, terminal-tui.md, README.md, PROP-0006]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0045: Rename the run checklist to todo and add the /todo command
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
One run concept is named "checklist": the `checklist_write` tool, its `checklist.updated` event,
|
|
15
|
+
`ChecklistItem`, `checklistOf`, the `todo` list's `runs.checklist` method, the `checklist` field of
|
|
16
|
+
`runs.continuation`, the `checklist` plugin, and the terminal's checklist block and `checklist`
|
|
17
|
+
telemetry. Every agent framework a person meets elsewhere calls the same idea a todo list, and
|
|
18
|
+
Claude Code's `/todos` made the word familiar: `todo`, `todo_write`, `/todo`. PROP-0006 chose
|
|
19
|
+
"checklist" explicitly to avoid an application concept (`PROP-0006-run-checklist.md:28`), but
|
|
20
|
+
"todo" is generic vocabulary, not a product name, and the current name makes the tool harder to
|
|
21
|
+
recognise for both the model and the person.
|
|
22
|
+
|
|
23
|
+
The list is also only visible where the model last wrote it: the terminal transcript and (nowhere) in
|
|
24
|
+
the App. A person who scrolled past a write, resumed a session, or is watching a long reply has no
|
|
25
|
+
way to ask for the current list. The terminal already has a slash-command surface for this kind of
|
|
26
|
+
read (`/help`, `/subagents`, `/trajectory`); there is no `/todo`.
|
|
27
|
+
|
|
28
|
+
## Affected rules
|
|
29
|
+
|
|
30
|
+
- **02-sessions-and-runs.md, Data** defines `checklist.updated` and `checklistOf(events)`.
|
|
31
|
+
- **04-prompt.md** defines the Progress paragraph that names `checklist_write`.
|
|
32
|
+
- **07-tools-and-gate.md** defines `checklistTool` and its event.
|
|
33
|
+
- **10-server-protocol.md** defines `runs.checklist`.
|
|
34
|
+
- **11-terminal.md** defines the checklist block, the telemetry call and the terminal's tool.
|
|
35
|
+
- **14-surfaces-and-parity.md** and **parity.md** (PAR-001) define the terminal and App surfaces.
|
|
36
|
+
- No invariant's rule changes: the tool remains read-only and plan-safe, the event remains a
|
|
37
|
+
whole-list replacement, and the list remains one bounded run event. Only the names and one added
|
|
38
|
+
read command change.
|
|
39
|
+
|
|
40
|
+
## Proposal
|
|
41
|
+
|
|
42
|
+
### 1. The concept is named todo
|
|
43
|
+
|
|
44
|
+
| Was | Becomes |
|
|
45
|
+
|---|---|
|
|
46
|
+
| tool `checklist_write` | `todo_write` |
|
|
47
|
+
| event `checklist.updated` | `todo.updated` |
|
|
48
|
+
| `ChecklistItem`, `checklistItemSchema`, `MAX_CHECKLIST_ITEMS` | `TodoItem`, `todoItemSchema`, `MAX_TODO_ITEMS` |
|
|
49
|
+
| `checklistOf`, `describeChecklist`, `checklistTool` | `todoOf`, `describeTodo`, `todoTool` |
|
|
50
|
+
| plugin id `checklist`, title "Checklist" | plugin id `todo`, title "Todo" |
|
|
51
|
+
| method `runs.checklist { runId }` | `runs.todo { runId }` |
|
|
52
|
+
| `Continuation.checklist` | `Continuation.todo` |
|
|
53
|
+
| terminal telemetry `checklist` | `terminal.todo` |
|
|
54
|
+
| transcript kind `checklist`, header "Checklist" | kind `todo`, header "Todo" |
|
|
55
|
+
| `TerminalSubagentActivity.checklist` | `.todo` |
|
|
56
|
+
|
|
57
|
+
The tool keeps its behaviour: the model sends the whole list, the latest event replaces every
|
|
58
|
+
earlier one, at most 50 items, `pending`, `in_progress` and `completed`, read-only for the gate and
|
|
59
|
+
allowed in plan mode. The prompt's Progress paragraph asks for a todo list in the same places.
|
|
60
|
+
|
|
61
|
+
### 2. `/todo` shows the current list
|
|
62
|
+
|
|
63
|
+
`/todo` is a core command (`src/commands/registry.ts`), `group: 'Inspect'`, `kind: 'session'`,
|
|
64
|
+
`methods: ['runs.todo']`, with `/checklist` as a compatibility alias for one release.
|
|
65
|
+
|
|
66
|
+
- It reads the latest non-side-question run of the current native session and returns that run's
|
|
67
|
+
latest todo. It makes no model request, asks for no approval, and is available in plan mode.
|
|
68
|
+
- The terminal appends a snapshot card to the transcript: `Todo · n of m done`, then one row per
|
|
69
|
+
item with the existing glyphs and colours (`✓` completed, `●` in progress, `○` pending). An empty
|
|
70
|
+
list is a one-line notice, not an empty card.
|
|
71
|
+
- The App offers the same read through `runs.todo` as a read-only picker with the same marks. It does
|
|
72
|
+
not render each `todo_write` in its transcript; that presentation difference is recorded in
|
|
73
|
+
PAR-001.
|
|
74
|
+
|
|
75
|
+
### 3. Compatibility
|
|
76
|
+
|
|
77
|
+
Stored run events are never rewritten. For one minor release:
|
|
78
|
+
|
|
79
|
+
- `runEventTypeSchema` accepts `checklist.updated` beside `todo.updated`, both with the same payload;
|
|
80
|
+
`todoOf` reads both. New events are written only as `todo.updated`.
|
|
81
|
+
- A replayed native history whose tool call is `checklist_write` still renders the todo card.
|
|
82
|
+
- `runs.checklist` remains as a deprecated alias returning the same list as `runs.todo`.
|
|
83
|
+
- `runs.continuation` returns `todo` and keeps `checklist` as a deprecated mirror field.
|
|
84
|
+
- A pinned capability set containing `checklist_write` is read as `todo_write`, so an interrupted
|
|
85
|
+
run recorded before the rename can still continue with a todo tool.
|
|
86
|
+
- The exported `checklistOf` and `CHECKLIST_WRITE` names stay as deprecated aliases for embedders.
|
|
87
|
+
|
|
88
|
+
The aliases and the legacy event type can be removed in the next major release.
|
|
89
|
+
|
|
90
|
+
## Alternatives
|
|
91
|
+
|
|
92
|
+
- **Rename only the labels the person sees.** Rejected: the tool name the model sees, the event, the
|
|
93
|
+
method and the docs would disagree, which is the drift the specification exists to prevent.
|
|
94
|
+
- **Keep both names indefinitely.** Rejected: two names for one concept in the prompt and the
|
|
95
|
+
protocol, and a permanent compatibility branch. One release is enough for stored data that is
|
|
96
|
+
never rewritten.
|
|
97
|
+
- **Rewrite stored events to the new type.** Rejected: `events.jsonl` is append-only evidence; a
|
|
98
|
+
read alias is enough and cannot corrupt a run.
|
|
99
|
+
- **Make `/todo` a live panel or a full-screen page.** Rejected for this change: a transcript
|
|
100
|
+
snapshot matches `/help`, reuses the existing block, and leaves the person's scrollback intact.
|
|
101
|
+
A live panel can be a later presentation change; it is not needed to show the list.
|
|
102
|
+
- **Do nothing.** Rejected by the owner's request and by the missing read surface.
|
|
103
|
+
|
|
104
|
+
## Consequences
|
|
105
|
+
|
|
106
|
+
- One tool name and one prompt paragraph change, so the compiled tool manifest and the provider
|
|
107
|
+
cache prefix change once. The cost is measurable only with real requests (`INV-PRM-8`), and the
|
|
108
|
+
change does not alter any model-visible behaviour besides the name.
|
|
109
|
+
- Applications built on the harness keep working through the method, field and capability aliases;
|
|
110
|
+
they should move to the new names. The App's event schema accepts both event types, so old run logs
|
|
111
|
+
keep displaying.
|
|
112
|
+
- Runs created before the rename keep their recorded events. `todoOf` and the terminal renderer read
|
|
113
|
+
them without a rewrite.
|
|
114
|
+
- PAR-001 narrows: both surfaces can now show the current todo; the App still does not draw an inline
|
|
115
|
+
block for each write.
|
|
116
|
+
|
|
117
|
+
## Migration
|
|
118
|
+
|
|
119
|
+
No data migration and no file rewrite. Old events, old pinned capability sets and old native
|
|
120
|
+
histories are read through the aliases above. Rolling back is reverting the commit; new
|
|
121
|
+
`todo.updated` events would then need a reverse alias if they were already written, so the rollback
|
|
122
|
+
is safe only before new runs write the event.
|
|
123
|
+
|
|
124
|
+
## Checks
|
|
125
|
+
|
|
126
|
+
- `npm run typecheck`, `npm test`, `npm run prove`.
|
|
127
|
+
- New tests: the todo tool, a legacy `checklist.updated` read, a legacy pinned capability, the
|
|
128
|
+
`runs.todo` method and its alias, the terminal `/todo` card, and a replayed `checklist_write` call.
|
|
129
|
+
- `python3 scripts/verify-terminal.py --todo-only` at 80x24 and 100x30: the card, the alignment of
|
|
130
|
+
wrapped rows, and no model request for `/todo`.
|
|
131
|
+
- App: `npm run typecheck`, `npm test`, `npm run check:layers`, `npm run check:ui`,
|
|
132
|
+
`cd src-tauri && cargo test`.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0046
|
|
3
|
+
title: Progress-aware stall guards and bounded plan research children
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-27
|
|
6
|
+
updated: 2026-10-27
|
|
7
|
+
affects: [INV-RUN-13, 02-sessions-and-runs.md, PROP-0041, terminal-tui.md, ADR-0039]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0046: Progress-aware stall guards and bounded plan research children
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
The stall guard currently has a broad 25-call rule: it nudges after substantive calls without a file change or passing check. It is disabled for plan-mode research, but remains active for ordinary runs. A long, legitimate sequence of reads can be stopped in normal mode but not plan mode; the rule imposes a mode-specific file/check-progress boundary rather than detecting a loop.
|
|
15
|
+
|
|
16
|
+
Two targeted rules also ignore successful code changes. Failed-check counts and identical Bash-check calls can persist after an edit, so a fixed test command may be blocked even though its input code has changed. The per-file edit-churn count is incremented in `tool_call`, before the edit runs, so a denied or failed attempt can count as an edit.
|
|
17
|
+
|
|
18
|
+
Finally, plan-research children receive only the explicit read-only research tool intersection, which excludes `checkpoint_write` (`src/agents/planResearch.ts`). `Sessions` installs the work-slice guard only when that tool is in the frozen capability set (`src/sessions/sessions.ts`). These children consequently lack the call/time boundary that the work-slice proposal says applies to subagent runs. The terminal guide also says plan-mode shell commands are unavailable even though the parent may run OS-sandboxed read-only Bash (`docs/terminal-tui.md`; PROP-0043).
|
|
19
|
+
|
|
20
|
+
## Affected rules
|
|
21
|
+
|
|
22
|
+
- **INV-RUN-13** currently says: “The file-change/check-based no-progress detector does not apply to plan-mode read-only research.” This proposal removes the detector for all runs, rather than preserving a mode-specific exception. It also clarifies how successful edits affect the remaining stall counters and how a bounded child without `checkpoint_write` hands back.
|
|
23
|
+
- **PROP-0041, §4 Stall guard** currently includes “25 non-bookkeeping tool calls without a file change or passing check,” counts edit attempts before execution, and describes repeated Bash failures without resetting for a changed code state. Its stall-guard description must match the new rule.
|
|
24
|
+
- **INV-RUN-8** remains unchanged: plan-research children keep their existing frozen, read-only capability intersection, with no connectors, questions, writes, commands or nested subagents. The child work-slice bound does not add a tool or widen that set.
|
|
25
|
+
- **`docs/terminal-tui.md`** must distinguish the parent's sandboxed read-only Bash from the child's no-command restriction.
|
|
26
|
+
|
|
27
|
+
## Proposal
|
|
28
|
+
|
|
29
|
+
### 1. Remove the broad no-progress trigger
|
|
30
|
+
|
|
31
|
+
Remove the 25-call file-change/check detector from every run. Remove its counter and plan-mode exception; do not replace it with another general “no file change” threshold. The tool-call/time work-slice budget remains.
|
|
32
|
+
|
|
33
|
+
Keep the targeted stall protections: the same exact call signature still receives one nudge at its existing threshold and ends the reply on a subsequent trigger; the same Bash check failing twice remains a trigger; per-file edit churn remains limited to four successful edits without a passing check; and the existing third-compaction thrash guard remains. Todo bookkeeping remains exempt from repeated-call detection and remains counted toward the work-slice tool-call budget.
|
|
34
|
+
|
|
35
|
+
### 2. Tie check retries and edit churn to observed results
|
|
36
|
+
|
|
37
|
+
Use the post-execution `tool_result` for native `edit` and `write` tools. A result with `isError === false` and a path is a successful edit for this rule; a blocked or failed call does not count. After four successful edits to one path without a passing check, the next edit attempt for that path receives the existing nudge/block, and a further trigger ends the slice. A passing check continues to clear the per-file edit counts.
|
|
38
|
+
|
|
39
|
+
A successful native edit/write starts a fresh check-retry episode: clear failed-check counts, the exact-repeat count for Bash check calls, and the pending one-shot nudge so the same check can run against changed code. Exact-repeat protection remains active for unchanged code and for other calls. The successful-edit counts used by the per-file churn rule are not cleared by this reset; only a passing check clears them. Failed or denied edits reset none of these counters.
|
|
40
|
+
|
|
41
|
+
The cross-surface success signal is the tool result, not a byte-level file comparison. The guard must count only a confirmed non-error result and use its path; no filesystem watcher or new event schema is introduced.
|
|
42
|
+
|
|
43
|
+
### 3. Bound read-only plan-research children
|
|
44
|
+
|
|
45
|
+
When work-slice policy is enabled, attach the existing guard to plan-research child runs even when their frozen capabilities omit `checkpoint_write`. Use the existing policy/defaults (320 calls and 60 minutes, no token cap); inherit an explicit parent policy override. Plan and subagent runs still do not auto-continue.
|
|
46
|
+
|
|
47
|
+
A child without `checkpoint_write` must not be told to call an unavailable tool. The first budget or stall refusal tells it to stop using tools and return a concise partial research report; if it attempts another tool, the existing termination rule applies. The runner's existing evidence-derived checkpoint records the handoff when the model did not write one. The child receives no additional tool or connector permissions. This proposal bounds each child, not the aggregate number of siblings; the existing parent-controlled fan-out is unchanged. The time limit remains checked at tool-call boundaries and is not a cancellation timer for an in-flight tool.
|
|
48
|
+
|
|
49
|
+
### 4. Keep plan-mode action restrictions
|
|
50
|
+
|
|
51
|
+
Do not enable generic browser clicks or `mcp_call_tool` in plan mode. Existing per-call safety classifications and read-only restrictions remain unchanged. A future need for connected-app research must add server-validated read-only classification rather than admitting the generic broker call.
|
|
52
|
+
|
|
53
|
+
Clarify `docs/terminal-tui.md`: an interactive plan parent may run Bash in the OS-enforced read-only sandbox (PROP-0043); plan-research children still cannot run commands. Writes, network access and generic connected-app actions remain unavailable in plan mode.
|
|
54
|
+
|
|
55
|
+
## Alternatives
|
|
56
|
+
|
|
57
|
+
- **Keep the 25-call trigger outside plan mode.** Rejected: it still mistakes legitimate read/research sequences for lack of progress and preserves an arbitrary mode distinction.
|
|
58
|
+
- **Remove all stall protections.** Rejected: exact repeated calls, repeated failing checks, edit churn, compaction thrash detection and the independent work-slice budget remain useful, targeted bounds.
|
|
59
|
+
- **Give plan-research children `checkpoint_write` or broader tools.** Rejected: the existing derived-checkpoint path is sufficient and preserves the frozen read-only capability intersection.
|
|
60
|
+
- **Add a tighter child-only budget or sibling concurrency cap.** Deferred: this change applies the established work-slice policy per child; aggregate fan-out remains a separate decision.
|
|
61
|
+
- **Detect byte-level file changes.** Rejected for this change: the post-execution native tool result is the consistent signal available to the shared guard across surfaces.
|
|
62
|
+
|
|
63
|
+
## Consequences
|
|
64
|
+
|
|
65
|
+
A run may make any number of distinct reads without hitting a file/check-based no-progress stall, subject to the work-slice budget and the retained targeted loop protections. After a successful edit, the same Bash check can be retried against the changed code; unsuccessful edit attempts do not consume the four-edit churn allowance.
|
|
66
|
+
|
|
67
|
+
Plan-research children can stop at the same call/time boundary without receiving a new capability. A child that reaches the bound is recorded as an interrupted slice with the runner-derived checkpoint and can return partial findings; it is not automatically restarted. No server method, run-event schema, stored-data layout or App presentation changes are required. Existing plan-mode browser and connector restrictions remain in force.
|
|
68
|
+
|
|
69
|
+
This lasting foundation guardrail decision is recorded in [ADR-0039](../../decisions/ADR-0039-progress-aware-stall-guards.md).
|
|
70
|
+
|
|
71
|
+
## Migration
|
|
72
|
+
|
|
73
|
+
None. Existing run records and checkpoints remain readable. The proposal changes only future run behavior; no event or capability snapshot is rewritten. A child stopped at its slice boundary uses the existing `checkpoint` event and terminal reason contracts.
|
|
74
|
+
|
|
75
|
+
## Checks
|
|
76
|
+
|
|
77
|
+
After acceptance:
|
|
78
|
+
|
|
79
|
+
- Focused Harness tests: `npx vitest run src/sessions/workSlice.test.ts src/sessions/sessions.test.ts src/sessions/subagentService.test.ts src/sessions/planMode.test.ts`.
|
|
80
|
+
- Add regressions for more than 25 distinct reads in normal and plan runs; unchanged exact repeats; failures followed by a successful edit and a retry of the same Bash check; failed/blocked edits not counting; four successful edits to one path; and a plan child receiving a work-slice bound without gaining `checkpoint_write` or other tools, using a derived checkpoint and no auto-continuation.
|
|
81
|
+
- Run Harness `npm run typecheck`, `npm test`, `npm run prove`, and `git diff --check`.
|
|
82
|
+
- Run Xingular Agent `npm run typecheck`, `npm test`, `npm run check:layers`, and `cd src-tauri && cargo test`.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0047
|
|
3
|
+
title: Separate local plugin management from Community Hub discovery
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-27
|
|
6
|
+
updated: 2026-10-27
|
|
7
|
+
affects: [INV-MCP-4, INV-TUI-2, INV-TUI-4, INV-PAR-1/2, 06-plugins-and-capabilities.md, 09-accounts-and-connectors.md, 10-server-protocol.md, 11-terminal.md, 14-surfaces-and-parity.md, terminal-tui.md, parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0047: Separate local plugin management from Community Hub discovery
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
`/plugins` and `/hub` currently open the same `BrowserPage` (`src/terminal/tui/commandPages.ts`),
|
|
15
|
+
with different initial filters. That page combines local plugin controls with public catalog
|
|
16
|
+
browsing. Separate `PluginsPage` and `HubPage` implementations already exist but are not routed by
|
|
17
|
+
the commands. The App similarly presents local plugins and the public catalog in one Capability
|
|
18
|
+
Hub view.
|
|
19
|
+
|
|
20
|
+
The distinction matters operationally: direct plugin operations use `plugins.install`,
|
|
21
|
+
`plugins.update` and `plugins.remove`; catalog installs use exact Hub versions and create receipts
|
|
22
|
+
through `Hub.install`. A direct `plugins.remove` currently removes the package without updating a
|
|
23
|
+
Hub receipt (`src/server/methods.ts`, `src/plugins/install.ts`), whereas `Hub.uninstall` owns both
|
|
24
|
+
package removal and receipt cleanup (`src/hub/hub.ts`). Pi packages also have no JSON payload to
|
|
25
|
+
preview (`Hub.preview` rejects them), and a failed remote refresh must not make cached catalog data
|
|
26
|
+
look current or successful.
|
|
27
|
+
|
|
28
|
+
The requested product behavior is: `/plugins` manages local installed plugins and their package
|
|
29
|
+
lifecycle; `/hub` is a separate public-catalog page showing Community entries across supported
|
|
30
|
+
catalog types. Hub's Installed view retains receipts from every channel, labeled by channel. Opening
|
|
31
|
+
Hub first shows cached/bundled entries and then refreshes remotely, retaining visible origin and
|
|
32
|
+
stale/error status.
|
|
33
|
+
|
|
34
|
+
## Affected rules
|
|
35
|
+
|
|
36
|
+
The current terminal-page contract says that `/plugins` and `/hub` are shortcuts into the unified
|
|
37
|
+
resource browser (`docs/architecture/11-terminal.md`, “Resource browser”):
|
|
38
|
+
|
|
39
|
+
> `/skills`, `/plugins`, `/connections` (`/mcp`), `/tools`, `/hub` and `/components` are shortcuts into that browser.
|
|
40
|
+
|
|
41
|
+
The terminal guide also says the resource sections share Installed/Discover and source filters, and
|
|
42
|
+
that `/hub` selects Discover (`docs/terminal-tui.md`, “The Harness resource browser”). This proposal
|
|
43
|
+
replaces those two route-specific statements; the broad `/harness` browser remains available.
|
|
44
|
+
|
|
45
|
+
Receipt handling must continue to obey **INV-MCP-4**:
|
|
46
|
+
|
|
47
|
+
> Hub installation grants no attachment, trust, credential or permission. Writes are serialized;
|
|
48
|
+
> existing registry files are never overwritten; uninstall removes only the exact receipt's
|
|
49
|
+
> resources and revokes its attachment choices.
|
|
50
|
+
|
|
51
|
+
The proposal does not weaken **INV-PLG-3**: package installation runs no code and grants no
|
|
52
|
+
attachment, trust, credential or permission. Nor does it change **INV-TUI-4**: terminal mutations
|
|
53
|
+
continue through the control-key-protected routes. **INV-PAR-1/2** continue to require the same
|
|
54
|
+
capabilities and acceptance on terminal and host surfaces.
|
|
55
|
+
|
|
56
|
+
## Proposal
|
|
57
|
+
|
|
58
|
+
1. Route the direct terminal commands to distinct pages: `/plugins` to the local plugin manager and
|
|
59
|
+
`/hub` to the public Hub catalog. Keep `/harness` as the broader resource browser. The pages are
|
|
60
|
+
distinct presentations, not new capabilities or loaders.
|
|
61
|
+
2. The Plugins page manages local installed packages and their contributions: inventory, switching,
|
|
62
|
+
code trust, settings, direct package installation, update and removal. Public catalog discovery
|
|
63
|
+
is not part of this page. Ordinary local packages use the existing `plugins.*` services.
|
|
64
|
+
3. A package recorded in a Hub receipt is owned for removal by Hub: a `plugins.remove` request for
|
|
65
|
+
that package must go through Hub's receipt-aware uninstall path so the package and its exact
|
|
66
|
+
receipt cannot diverge. Do not use a floating `plugins.update` for a Hub-managed package. Its
|
|
67
|
+
replacement must be an explicit operation against an exact catalog version and must retain
|
|
68
|
+
receipt ownership; if no safe replacement operation exists, require uninstall then install of the
|
|
69
|
+
selected exact version.
|
|
70
|
+
4. The Hub page's Catalog view contains Community entries only, across catalog types supported by
|
|
71
|
+
the active product. This does not restore the deprecated agent-template application flow. The
|
|
72
|
+
Installed view contains receipts from all channels with the entry's channel visible; existing
|
|
73
|
+
Official receipts therefore remain reviewable and uninstallable. The underlying catalog and
|
|
74
|
+
`hub.list` contract remain unfiltered for other callers.
|
|
75
|
+
5. On Hub entry, load cached/bundled content first, then request a remote refresh. Keep the last
|
|
76
|
+
known entries and show whether they are remote, cached or bundled, when they were refreshed, and
|
|
77
|
+
any refresh error. An explicit refresh remains available. Keep bounded payload Preview for
|
|
78
|
+
registry/document entries, but do not expose Preview for Pi packages; install and uninstall
|
|
79
|
+
remain pinned to the selected receipt/catalog version.
|
|
80
|
+
6. Host surfaces use the same catalog filtering, receipt, refresh and lifecycle semantics in their
|
|
81
|
+
own page layouts. No host-only surface, new loader, data store or server response schema is added.
|
|
82
|
+
|
|
83
|
+
## Alternatives
|
|
84
|
+
|
|
85
|
+
- **Keep the shared browser for both commands.** Rejected: it leaves local management and public
|
|
86
|
+
discovery coupled, contrary to the requested ownership and page distinction.
|
|
87
|
+
- **Make `/hub` Community-only but keep `/plugins` as the browser's Installed/Discover shortcut.**
|
|
88
|
+
Rejected: public discovery would remain inside the command meant for local plugin management.
|
|
89
|
+
- **Hide non-Community receipts in Installed.** Rejected: it would strand existing Official Hub
|
|
90
|
+
installations from the dedicated management view.
|
|
91
|
+
- **Do nothing.** Rejected: it retains the current refresh-status and package-lifecycle gaps.
|
|
92
|
+
|
|
93
|
+
## Consequences
|
|
94
|
+
|
|
95
|
+
- The terminal and host frontends need separate Plugins and Hub presentations, but continue to call
|
|
96
|
+
the same Harness-owned services. Their layouts need not match.
|
|
97
|
+
- `plugins.remove` behavior changes only for a package owned by a Hub receipt: Hub remains the sole
|
|
98
|
+
writer that removes that receipt. Its method shape and response schema need not change.
|
|
99
|
+
- Community filtering is a presentation rule. Catalog metadata, receipts, and the unfiltered Hub
|
|
100
|
+
service remain unchanged. Existing official receipts require no migration.
|
|
101
|
+
- The public catalog currently has a Community skill but no Community Pi-package entry. This change
|
|
102
|
+
does not publish or invent a package; the Community plugin list stays empty until a publisher adds
|
|
103
|
+
a valid entry.
|
|
104
|
+
|
|
105
|
+
## Migration
|
|
106
|
+
|
|
107
|
+
No data migration. Existing receipts from all channels remain in storage and appear in Installed with
|
|
108
|
+
their channel label. Existing plugin trust, attachment, settings and package data remain unchanged.
|
|
109
|
+
The command names and protected service routes remain stable; only the direct-page routing and
|
|
110
|
+
receipt-aware removal behavior change. `/harness` retains its broad browser.
|
|
111
|
+
|
|
112
|
+
## Checks
|
|
113
|
+
|
|
114
|
+
- Harness route and page tests: distinct command destinations; Community-only catalog results;
|
|
115
|
+
all-channel Installed receipts; cache-first refresh and visible fallback status; bounded
|
|
116
|
+
registry/document Preview with no Pi-package Preview; and receipt-aware removal/update behavior.
|
|
117
|
+
- Harness: `npm run typecheck`, `npm test`, and `npm run prove` after changing the server method.
|
|
118
|
+
- Host/App tests: matching route, filtering, refresh and receipt behavior; then App
|
|
119
|
+
`npm run typecheck`, `npm test`, `npm run check:layers`, `npm run check:ui`, and
|
|
120
|
+
`cd src-tauri && cargo test`.
|
|
121
|
+
- Inspect isolated terminal and host screens at compact and wide sizes. Tests use fixtures; do not
|
|
122
|
+
install a real package or make a model request for verification.
|