@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,245 @@
|
|
|
1
|
+
# 07 Tools and the gate
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
A run's tools come from four places: the harness's own tools, the connected-apps broker,
|
|
6
|
+
subagent tools, and the application's tool providers. Every call, whatever its source, passes one
|
|
7
|
+
per-call gate. Native writes also obey the run's pinned workspace boundary, with shell writes
|
|
8
|
+
contained by an OS sandbox; the gate then applies application policy, standing approvals and the
|
|
9
|
+
person without letting remembered per-tool grants widen that boundary.
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
| Type / function | Module | Role |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `HarnessToolDefinition`, `RECALL_TOOLS`, `TRAJECTORY_TOOLS`, `WIKI_READ_TOOLS`, `WIKI_WRITE_TOOLS`, `SKILL_TOOLS`, `DEFAULT_TOOL_NAMES` | `tools/definitions.ts` | The harness's own tools, defined once. |
|
|
16
|
+
| `dispatch` | `tools/dispatch.ts` | One entry point for every History, Wiki and skill call, from a Pi tool, the server or a terminal. |
|
|
17
|
+
| `harnessTools` | `tools/harnessTools.ts` | The definitions as `ToolSpec`s for one session. |
|
|
18
|
+
| `askUserTool` (`ask_user`) | `tools/askUser.ts` | Stops an attended plan run and asks up to five related questions with choices and concise 1–2 word labels; absent from newly resolved normal runs. |
|
|
19
|
+
| `todoTool` (`todo_write`) | `tools/todo.ts` | Writes the run's whole todo list as a `todo.updated` event (PROP-0006, renamed by PROP-0045). Read-only for the gate, so plan mode allows it. Terminal sessions register the same tool; it reaches the run through the `todo` telemetry call. The prompt's Progress group asks the model to call it before the first other tool call when work has several steps, keep it current, and write one final update before replying; unfinished work is not automatically marked complete. The pre-rename `checklist.updated` event is still read, never written. |
|
|
20
|
+
| `subagentTools` | `tools/spawnSubagent.ts` | `spawn_subagent` (requires a short `title`, PROP-0030) and `wait_subagents`; normal-mode descriptions guide selective, bounded delegation, while plan-mode spawns require a named eligible read-only research profile. The description states the run's budget, and `Subagents.spawn` refuses a child past its per-profile or total limit (ADR-0052). |
|
|
21
|
+
| `annotationsPart` (`page_notes_list`, `page_notes_read`) | `annotations/part.ts` | Read-only world tools over the page notes a person shared with the session or agent (PROP-0017, PROP-0048). |
|
|
22
|
+
| `webTools` | `web/tools.ts` | `web_search` (Brave, key from the secret store), `web_fetch` (checked public reads). An application provides them as a provider. |
|
|
23
|
+
| gate | `sessions/sessions.ts::gate`, `sessions/runner.ts` | `ToolGate { ask, check }`, loaded as the last extension (`xagent-approvals`). |
|
|
24
|
+
| `Approvals`, `decide`, `grant`, `approvalKey` | `sessions/approvals.ts` | Standing approvals. |
|
|
25
|
+
|
|
26
|
+
Harness tools: `get_capabilities` (read-only current-run discovery), `history_search`, `history_read`,
|
|
27
|
+
`trajectory_search`, `trajectory_read`, `wiki_search`, `wiki_read`, `wiki_list`, `wiki_write`
|
|
28
|
+
(not in the default set), `skill_load`, `ask_user` (attended plan runs and pinned continuations only),
|
|
29
|
+
`todo_write`, `plugin_propose`. Broker:
|
|
30
|
+
`mcp_list_tools`, `mcp_call_tool`. Native Pi tools: `read`, `grep`, `find`,
|
|
31
|
+
`ls`, `edit`, `write`, `bash`.
|
|
32
|
+
|
|
33
|
+
## Cross-surface registration (PROP-0040)
|
|
34
|
+
|
|
35
|
+
The terminal registers Harness History/trajectory, Wiki-read and skill tools through
|
|
36
|
+
`Terminals.ownTools` and dispatches them over the session socket; they are model tools, not merely
|
|
37
|
+
shell commands. Enabled first-party hooks load through the protected `firstParty.list` bridge and
|
|
38
|
+
`terminal/piExtension.ts`. Attended planning uses the shared `ask_user`; the terminal-only question
|
|
39
|
+
alias is removed.
|
|
40
|
+
|
|
41
|
+
`get_capabilities` is implemented as a read-only Harness tool. Structured sessions register it from
|
|
42
|
+
the current run's frozen capability snapshot and live Pi tool/schema inventory. The terminal
|
|
43
|
+
extension (`terminal/piExtension.ts`) registers the same schema from Pi's active and registered tools;
|
|
44
|
+
when plan mode is active it reports the plan's allowed tool set. `sessions/planMode.ts` includes it in
|
|
45
|
+
the shared read-only allowlist. Host sessions use this Harness tool rather than defining a duplicate.
|
|
46
|
+
It reports availability, never permission, and every call remains subject to the gate.
|
|
47
|
+
|
|
48
|
+
## Plugin proposal security
|
|
49
|
+
|
|
50
|
+
`plugin_propose { name, description, files }` is a write-classified Harness tool, subject to the
|
|
51
|
+
normal capability and per-call gate, and creates only a pending proposal in the Harness data root.
|
|
52
|
+
It does not accept, install, enable or trust a plugin. Proposal text is untrusted, including skill
|
|
53
|
+
instructions; preview and human review are needed before acceptance. Acceptance is a separate
|
|
54
|
+
trusted-caller API, bound to the reviewed content hash; it does not execute package code, grant
|
|
55
|
+
trust or bypass the loader, attachment controls, capability restrictions or gate. Text contributions
|
|
56
|
+
can load once enabled without code trust, so review their instructions as well as executable files.
|
|
57
|
+
See page 06 and [ADR-0046](../decisions/ADR-0046-hash-bound-plugin-proposals.md).
|
|
58
|
+
|
|
59
|
+
## Native file paths
|
|
60
|
+
|
|
61
|
+
The read-only `read`, `grep`, `find` and `ls` tools accept paths relative to the working folder,
|
|
62
|
+
absolute paths, and `~` paths. The working folder is a default location, not a read boundary; the
|
|
63
|
+
operating system's access for the Harness process decides what can be read. The compiled file
|
|
64
|
+
guidance names the configured data root. Each run pins `workspaceRoot`: the nearest Git root or
|
|
65
|
+
worktree above its effective working directory, or the canonical working directory when there is no
|
|
66
|
+
repository. The filesystem root itself is rejected because it would collapse the write boundary.
|
|
67
|
+
`edit` and `write` resolve targets canonically, revalidate the pinned target at mutation,
|
|
68
|
+
and atomically replace the directory entry in a helper process constrained by the OS sandbox. This
|
|
69
|
+
prevents hard-link writes from changing another alias; normal file mode is retained where possible,
|
|
70
|
+
but ACLs and extended attributes are not guaranteed to survive replacement. An outside target
|
|
71
|
+
requires a human-only one-call approval (or an eligible Full Permission answer) and is not covered by
|
|
72
|
+
remembered tool grants.
|
|
73
|
+
|
|
74
|
+
Bash, including an initial `!` command, runs in an OS-enforced sandbox that permits broad reads but
|
|
75
|
+
writes only inside the root. Before default-scope Bash, Harness scans the workspace for regular-file
|
|
76
|
+
inodes with links outside it; an incomplete scan or possible external alias blocks the command, which
|
|
77
|
+
must be repaired or copied. The sandbox also prevents its own processes from creating cross-boundary
|
|
78
|
+
hard links; macOS denies hard-link creation entirely, including within the workspace. A local process
|
|
79
|
+
outside Harness running as the same user is outside this protection.
|
|
80
|
+
The Bash tool's optional `workspaceWriteScope` defaults to `workspace`; `outside` requests a
|
|
81
|
+
human-only one-call approval before the exact command runs once with broader filesystem access. The
|
|
82
|
+
approval shows the full escaped command in scrollable details and fails closed if the terminal
|
|
83
|
+
cannot show both the details and the choices. The terminal uses `!outside <command>` for the same
|
|
84
|
+
explicit request on a direct initial command.
|
|
85
|
+
stdout/stderr never proves a sandbox denial: denial text cannot request approval, and a command is
|
|
86
|
+
never replayed after partial effects. Full Permission is the explicit eligible-run bypass.
|
|
87
|
+
Unsupported or unavailable sandbox enforcement fails closed. A side-question run has an empty
|
|
88
|
+
capability set and no tools (PROP-0019).
|
|
89
|
+
|
|
90
|
+
**Windows** has no write-boundary sandbox the harness can use, so the Bash tool treats every
|
|
91
|
+
command there as an outside request: a human-only one-call approval (or an eligible Full
|
|
92
|
+
Permission answer), then the command runs once without a sandbox. Plan-mode Bash is refused,
|
|
93
|
+
because a read-only scope cannot be enforced. Commands run in Git Bash when it is installed
|
|
94
|
+
(`%ProgramFiles%\Git\bin\bash.exe`, then `bash.exe` on `PATH`, never the WSL launcher in
|
|
95
|
+
`System32`), otherwise in PowerShell (`pwsh.exe`, then Windows PowerShell). The tool keeps the name
|
|
96
|
+
`bash`; its description names the shell. Native `edit` and `write` run their atomic helper with
|
|
97
|
+
Node directly, without an OS guard: the target is still canonicalized, authorized, revalidated and
|
|
98
|
+
replaced by rename, and outside targets still need their approval, but a junction or symlink swap
|
|
99
|
+
between the check and the rename is not prevented
|
|
100
|
+
([ADR-0042](../decisions/ADR-0042-windows-shell-without-sandbox.md)).
|
|
101
|
+
|
|
102
|
+
## The gate, per call
|
|
103
|
+
|
|
104
|
+
For native `edit` and `write`, the canonical target check is added to policy scope before approval;
|
|
105
|
+
the registered tool can mutate only through the policy-bound atomic helper. Bash workspace scope
|
|
106
|
+
scans for external hard links and then runs under the OS sandbox. An explicit outside scope is
|
|
107
|
+
approved before execution and runs once; stdout/stderr never triggers approval or retry. The
|
|
108
|
+
eligible Full Permission switch may answer the explicit request under its existing restrictions, but
|
|
109
|
+
a remembered tool grant cannot.
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
child run and tool outside its snapshot ─► refuse
|
|
113
|
+
plan mode and tool/call not research-safe ─► refuse (including ineligible spawn profiles, outside-scope or denied Bash; before approvals)
|
|
114
|
+
plan-mode Bash ─► read-only OS sandbox, never widened, run once
|
|
115
|
+
canonicalize native write target / verify pinned root
|
|
116
|
+
policy.scope(call)
|
|
117
|
+
not allowed and (automatic or no approval possible) ─► refuse with reason
|
|
118
|
+
policy.authorize(call) throws ─► refuse
|
|
119
|
+
outside native file target ─► human-only one-call approval; eligible Full Permission may answer
|
|
120
|
+
Bash workspace scope ─► hard-link scan, OS sandbox, run once
|
|
121
|
+
Bash outside scope ─► pre-execution human-only approval, then run once unconfined
|
|
122
|
+
Bash on Windows (no sandbox) ─► as outside scope; plan-mode Bash refused
|
|
123
|
+
trigger probe, improver, reflection or unattended ─► refuse anything requiring a person
|
|
124
|
+
run.requestApproval(...) ─► standing approvals may answer where eligible, else the person
|
|
125
|
+
denied ─► refuse; never replay a command
|
|
126
|
+
policy.authorize(call) again ─► run or refuse
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
An approval is a control a person clicks, never a permission asked for or granted in a message. The
|
|
130
|
+
gate pauses that exact call and the run reports `waiting_for_approval`; allowing it resumes the same
|
|
131
|
+
call in the same turn, and denying it resolves back to the running turn as a tool result. The
|
|
132
|
+
compiled prompt says so, so a model calls the tool instead of ending its turn to ask. Every surface
|
|
133
|
+
that can ask presents a control: a decision dock, a keypress, or a paired phone's choices. A surface
|
|
134
|
+
that cannot ask a person refuses the call instead of waiting.
|
|
135
|
+
|
|
136
|
+
Structured sessions and the terminal record gate and work-slice refusals as `tool.refused`, with the call id, name, bounded reason and a code (`plan_mode`, `workspace`, `scope`, `policy`, `capability`, `approval_denied`, `unattended`, `work_slice` or `controller_unavailable`). The terminal relay is best effort if its controller is unreachable. The existing tool-result text is unchanged. Refusals inside a tool after it starts are not gate refusals.
|
|
137
|
+
|
|
138
|
+
Standing approvals (`approvals.json`): an always-approve switch per key (`chat`, or the run's
|
|
139
|
+
`harness`), tools allowed across the state directory per key, and targets remembered per
|
|
140
|
+
session. `humanOnly` calls are never answered by remembered tools, and by the switch only when
|
|
141
|
+
`allowGlobalApproval`. `ApprovalFacts.unattended` disables standing answers; `readOnly` disables
|
|
142
|
+
the switch and global tools. A person answering through a phone paired by `/remote-control` answers
|
|
143
|
+
the same terminal request through the same controller call, with its complete action text shown
|
|
144
|
+
beside the choices (INV-RC-3, INV-RC-4).
|
|
145
|
+
|
|
146
|
+
## Invariants
|
|
147
|
+
|
|
148
|
+
- **INV-GATE-1** Every tool call of every run passes the gate. No tool source bypasses it,
|
|
149
|
+
including extension-registered tools (which ask before every call) and the initial Bash command.
|
|
150
|
+
- **INV-TOOL-9** The model has no tool that ends or hands off its own work (ADR-0071, ADR-0072):
|
|
151
|
+
neither `checkpoint_write` (PROP-0041, removed by ADR-0069) nor `finish` (ADR-0069, removed by
|
|
152
|
+
ADR-0071) exists. The one exception is `update_goal` in a goal the person started: it is offered
|
|
153
|
+
only while a goal exists, its `complete` is only a claim that the harness checks (INV-RUN-16), and
|
|
154
|
+
its `paused` needs the person's word. The model cannot create, resume or limit a goal. When a
|
|
155
|
+
reply stops, it settles as it ends unless a person interrupted it, the slice guard ended it, or a
|
|
156
|
+
goal stopped it (INV-RUN-15); a slice or goal stop writes the checkpoint from the run's evidence.
|
|
157
|
+
- **INV-TOOL-10** Bash keeps one command budget on every surface: 120 seconds when the call says
|
|
158
|
+
nothing, 300 seconds as the ceiling without a `reason`, 900 seconds as the maximum, and a timeout
|
|
159
|
+
returns the partial output with a narrowing instruction instead of blocking the reply.
|
|
160
|
+
- **INV-GATE-2** The gate is the last extension loaded, after disk, variant and inline extensions, so
|
|
161
|
+
it sees the final input of every call.
|
|
162
|
+
- **INV-GATE-3** Order is fixed: capability and plan-mode refusals, canonicalize native file-write
|
|
163
|
+
targets, consult the policy's scope and authorize, combine mandatory outside-write approval with
|
|
164
|
+
that scope, then eligible standing approvals or the person, then authorize again. Native mutations
|
|
165
|
+
revalidate the authorized target and use atomic replacement inside an OS-enforced write scope.
|
|
166
|
+
Default Bash scans for external hard links, then runs only inside the OS sandbox. `workspaceWriteScope:
|
|
167
|
+
'outside'` requests human-only approval before running that exact command once with broader access.
|
|
168
|
+
Command output never proves a sandbox denial and never triggers approval or replay; earlier
|
|
169
|
+
side-effects are not repeated. The policy may tighten or deny a call, but cannot waive the boundary.
|
|
170
|
+
Outside file writes and broad Bash calls cannot use remembered per-tool approval; only the eligible
|
|
171
|
+
Full Permission switch can answer automatically under its existing restrictions. In plan mode, Bash
|
|
172
|
+
runs only in the read-only scope (PROP-0043): no writes but a discarded temp folder, no network,
|
|
173
|
+
no signals outside the sandbox, no macOS mach services; Full Permission and `outside` never apply.
|
|
174
|
+
On Windows, which has no sandbox, every Bash call takes the `outside` path and plan-mode Bash is
|
|
175
|
+
refused (ADR-0042).
|
|
176
|
+
- **INV-GATE-4** Refinement runs (`probe`, `improver`) never ask a person; what would need one is
|
|
177
|
+
refused, never queued (`INV-REF-4`).
|
|
178
|
+
- **INV-GATE-5** SDK tools are registered only if their names are in the run's frozen capability
|
|
179
|
+
set (`INV-CAP-1`). `get_capabilities` is a read-only Harness tool on structured and terminal
|
|
180
|
+
surfaces; it reports the frozen callable set and does not grant access. The terminal may retain
|
|
181
|
+
question-tool definitions in its private Pi inventory, but normal mode deactivates them; a plan
|
|
182
|
+
request activates only registered questions under its plan-mode gate.
|
|
183
|
+
- **INV-GATE-6** Tool attachment bytes never enter the run-event stream; only references are
|
|
184
|
+
recorded.
|
|
185
|
+
- **INV-GATE-7** Tool descriptions name the product with `{product}` (filled by `describeTool`),
|
|
186
|
+
never an application's name (`INV-BND-2`).
|
|
187
|
+
- **INV-GATE-8** Native reads are bounded by process and operating-system permissions, not by the
|
|
188
|
+
workspace root; absolute and `~` paths are valid. Every run pins its canonical `workspaceRoot`.
|
|
189
|
+
Native `edit` and `write` mutations revalidate the authorized canonical target and atomically
|
|
190
|
+
replace it under an OS-enforced scope; outside targets require human-only one-call approval and
|
|
191
|
+
cannot use remembered tool grants. Default Bash scans the workspace for possible outside hard-link
|
|
192
|
+
aliases and is OS-sandboxed to write only inside the root while retaining broad reads; the sandbox
|
|
193
|
+
prevents its own processes from creating cross-boundary hard links, and macOS denies all hard-link
|
|
194
|
+
creation in the sandbox. An incomplete scan or missing
|
|
195
|
+
enforcement fails closed. An explicit `workspaceWriteScope: 'outside'` request is approved before
|
|
196
|
+
execution and runs once; command output never triggers approval or retry. The terminal exposes the
|
|
197
|
+
same choice as `!outside <command>`. Full Permission is the only standing boundary bypass and
|
|
198
|
+
remains subject to host policy, authorization, read-only, plan, unattended, probe, improver and
|
|
199
|
+
reflection restrictions. The rule does not protect against a peer process running as the same user.
|
|
200
|
+
On Windows the atomic replacement runs without an OS-enforced scope (ADR-0042).
|
|
201
|
+
- **INV-GATE-9** An approval is a control, never a message. The gate pauses the exact call and the
|
|
202
|
+
run reports `waiting_for_approval`; Allow resumes that same call in the same turn, and Deny returns a
|
|
203
|
+
tool result on the still-running turn. The compiled prompt tells the model to call the tool rather
|
|
204
|
+
than ask for permission in a message or end its turn to wait, and no surface accepts a typed
|
|
205
|
+
approval instead of a control.
|
|
206
|
+
|
|
207
|
+
## Data
|
|
208
|
+
|
|
209
|
+
`<state dir>/approvals.json`.
|
|
210
|
+
|
|
211
|
+
## Source map
|
|
212
|
+
|
|
213
|
+
`src/tools/*.ts`, `src/web/*.ts`, `src/sessions/sessions.ts`, `src/sessions/runner.ts`,
|
|
214
|
+
`src/sessions/workspaceBoundary.ts`, `src/sessions/initialBash.ts`, `src/core/workspaceBashTool.ts`,
|
|
215
|
+
`src/core/shell.ts`, `src/core/workspaceSandbox.ts`, `src/core/workspaceWriteOperations.ts`,
|
|
216
|
+
`src/sessions/approvals.ts`, `src/sessions/policy.ts`. Decisions:
|
|
217
|
+
[ADR-0036](../decisions/ADR-0036-workspace-write-operation-boundary.md),
|
|
218
|
+
[ADR-0042](../decisions/ADR-0042-windows-shell-without-sandbox.md).
|
|
219
|
+
|
|
220
|
+
## Session naming (PROP-0010)
|
|
221
|
+
|
|
222
|
+
`session_name` (`tools/sessionName.ts`) binds to the current native session. It maintains
|
|
223
|
+
only Pi session metadata and is explicitly plan-safe, while still subject to capability
|
|
224
|
+
selection and the host policy. The prompt asks for it once before the first other tool call when
|
|
225
|
+
a request needs tools or changes state. When a top-level attended session starts unnamed, the
|
|
226
|
+
harness also derives a provisional name from its first substantive request and sets it through
|
|
227
|
+
Pi before the first model request; a host gate refusal or a failed write leaves the session
|
|
228
|
+
unnamed and never fails the run. The model may revise the provisional name. The terminal
|
|
229
|
+
registers the same definition through its Pi bridge; standalone policy permits naming without
|
|
230
|
+
approval. See page 02 for validation and persistence. It is a foundation tool, not mutable
|
|
231
|
+
variant data.
|
|
232
|
+
|
|
233
|
+
## Diagnostic probes
|
|
234
|
+
|
|
235
|
+
`/doctor` is a user command, never a model tool. Live diagnostics create separate real runs,
|
|
236
|
+
intersect current capabilities, and execute tool calls through the existing gate. Calls that
|
|
237
|
+
require an additional per-call approval report blocked; batch diagnostic consent does not grant
|
|
238
|
+
standing permission. No raw tool inputs, results, or screenshots enter diagnostic findings.
|
|
239
|
+
|
|
240
|
+
A live check may also run one command the harness wrote itself, when the capability it diagnoses is
|
|
241
|
+
a native Pi tool rather than a harness tool: the shell check runs `printf` through the same
|
|
242
|
+
workspace root, hard-link scan and write-boundary sandbox as a Bash call, and reports only the exit
|
|
243
|
+
status. It passes the gate first, and a diagnostic never widens the boundary — Full Permission,
|
|
244
|
+
an outside-workspace request and a host bypass are all refused for it — so a boundary that stops
|
|
245
|
+
the command before the shell starts is reported as blocked with the boundary's own reason.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# 08 Memory and history
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Two kinds of memory sit outside the variant. The **Wiki** holds project notes: linked
|
|
6
|
+
Markdown that people and agents read and write as reference material, never as instructions.
|
|
7
|
+
**History** is the record of earlier runs: recall over what was said, and bounded reads of the
|
|
8
|
+
recorded trajectory. Both are served through harness tools (page 07) and kept searchable in a
|
|
9
|
+
rebuildable SQLite index.
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
| Type / function | Module | Role |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `paths`, `list`, `read`, `write`, `remove`, `versions`, `version`, `search`, `graph`, `ensureLayout`, `moveLegacy` | `wiki/notes.ts` | The Wiki. Logical module (functions), not a class. |
|
|
16
|
+
| `noteChange` | `core/changes.ts` | Announces a completed write to listeners (hooks). |
|
|
17
|
+
| `indexRun`, `sync`, `search`, `read` | `history/recall.ts` | Recall passages from runs, scoped to the caller. |
|
|
18
|
+
| trajectory search and read | `history/trajectory.ts` | Paged, redacted reads of canonical run events. |
|
|
19
|
+
| `Lessons`, `keptLessons`, `lessonMission` | `history/lessons.ts`, `history/lessonPrompt.ts` | Reflection on finished runs when the `lessons` plugin is on; keeps general lessons as Wiki notes (PROP-0008). |
|
|
20
|
+
| `withIndex`, `migrate`, `MIGRATIONS` | `core/index.ts` | The shared `index.sqlite` connection and its migrations. |
|
|
21
|
+
|
|
22
|
+
## Contracts
|
|
23
|
+
|
|
24
|
+
- **Note paths.** A note's path is its file path under `wiki/` without `.md`. Links are
|
|
25
|
+
`[[path]]`, `[[path|label]]` or a relative Markdown link. Notes live in `home.md`, `library/`
|
|
26
|
+
(no project) and `projects/<slug>/` (a project the application named in `projects.json`).
|
|
27
|
+
- **Writes.** `write(root, path, body, { expectedUpdatedAt?, actor?, reason? })` refuses text over
|
|
28
|
+
400,000 characters, text that looks like a credential (`secret_refused`), an unknown project
|
|
29
|
+
slug, and a stale `expectedUpdatedAt` (`conflict`). The previous text is kept in `wiki-history/`.
|
|
30
|
+
- **Recall scope.** A `Code` caller (a session in a project) reads only session runs of its project,
|
|
31
|
+
or its own session. A `Chat` caller reads its agent's conversations. `recallExcludeAgents` hides
|
|
32
|
+
named agents' conversations. A caller never reads a run outside its scope.
|
|
33
|
+
- **Trajectory search** returns run summaries including `terminalReason` and `terminalCode`, each
|
|
34
|
+
null when unavailable (including older records without a code). Trajectory reads include the same
|
|
35
|
+
summary.
|
|
36
|
+
- **Trajectory reads** return pages of canonical execution events, including active runs,
|
|
37
|
+
bounded and marked when truncated. `run: 'current'` resolves to the caller's active run on
|
|
38
|
+
structured and terminal model-tool paths; without an active run it fails rather than using a
|
|
39
|
+
previous run. They omit account identifiers, credential fields, attachment bytes, native adapter
|
|
40
|
+
payloads and provider reasoning text. They report evidence, never a score.
|
|
41
|
+
- **Lessons** (PROP-0008, [ADR-0010](../decisions/ADR-0010-lessons-in-the-wiki.md)). When the
|
|
42
|
+
first-party `lessons` plugin is on for a run's caller (its contribution is in the run's
|
|
43
|
+
`capabilities.json`), a **completed, top-level** run that made at least `minToolCalls` tool calls
|
|
44
|
+
is queued after it ends. Subagent runs and runs with trigger `probe`, `improver` or `reflection`
|
|
45
|
+
are never queued. One reflection runs at a time, in the background, and the queue is not kept
|
|
46
|
+
across a restart.
|
|
47
|
+
- The reflection is a session with trigger `reflection` on the run's own account and model, file
|
|
48
|
+
tools `read`, `grep`, `find`, `ls` only, no providers, connections, harness tools or subagents,
|
|
49
|
+
`automatic: true`; anything needing a person is refused at the gate. Its evidence is a temporary
|
|
50
|
+
`context/` with `run.md` (the request and the rendered trajectory, observations kept to at least
|
|
51
|
+
10,000 characters) and `lessons.md` (the kept lessons' paths and cues), checked with the grader
|
|
52
|
+
tripwire.
|
|
53
|
+
- It replies `NO_ENTRY`, `SAME <path>`, or one `<experience>` block (`cue`, `lesson`, `evidence`,
|
|
54
|
+
`confidence`): refinement's lesson shape, which never carries the run's own facts.
|
|
55
|
+
- A new lesson is written with `notes.write` to `library/lessons/<slug of cue>` with actor
|
|
56
|
+
`reflection`, frontmatter `title`, `cue`, `confidence`, `sources: [runId]`. `SAME` adds the run
|
|
57
|
+
id to that note's `sources`. Nothing is written when the lesson is longer than `maxChars`,
|
|
58
|
+
looks like a credential, carries a grader marker, or the Wiki already keeps `maxLessons`
|
|
59
|
+
lessons; nothing is evicted.
|
|
60
|
+
- The `wiki` pointer section says how many lessons there are when there are any.
|
|
61
|
+
- **Index.** Every finished run is indexed when it ends; `open` and `rebuildIndex()` sync from
|
|
62
|
+
`runs/`. The same pass writes the **usage ledger**: one `usage_requests` row per model request
|
|
63
|
+
from the run's `usage.updated` events, and one `usage_indexed` marker per run (PROP-0042).
|
|
64
|
+
`/usage:analysis` queries only that ledger; it is derived and rebuilt from run events.
|
|
65
|
+
|
|
66
|
+
## Invariants
|
|
67
|
+
|
|
68
|
+
- **INV-MEM-1** The Wiki is reference material, not instructions. Only the variant shapes an agent
|
|
69
|
+
(`INV-VAR-1`); the Wiki reaches a prompt only as the dynamic `wiki` pointer and selected
|
|
70
|
+
`references` (`INV-PRM-3`).
|
|
71
|
+
- **INV-MEM-2** The harness is the only writer of the Wiki and of run records. An application
|
|
72
|
+
reads them and writes notes only through harness methods (`wiki.*`). Inside the harness, the
|
|
73
|
+
Wiki is written by `wiki_write`, by `wiki.*` methods, and by `Lessons` (actor `reflection`, only
|
|
74
|
+
under `library/lessons/`, only while the `lessons` plugin is on for the run's caller).
|
|
75
|
+
- **INV-MEM-3** Every write point calls `noteChange` after the file is in place, and never waits
|
|
76
|
+
for listeners (`INV-PLG-7`). (Removal does not yet: drift D-7.)
|
|
77
|
+
- **INV-MEM-4** A note write keeps the previous text as a version. Nothing deletes history except
|
|
78
|
+
an explicit person's action.
|
|
79
|
+
- **INV-MEM-5** Files are the source of truth. `index.sqlite` is derived and can be deleted and
|
|
80
|
+
rebuilt (`harness.rebuildIndex()`).
|
|
81
|
+
- **INV-MEM-6** Index migrations are append-only once released. Each runs in one transaction
|
|
82
|
+
after the file is backed up; a failure restores the previous index.
|
|
83
|
+
- **INV-MEM-7** Recall and trajectory reads respect the caller's scope and redact secrets. They
|
|
84
|
+
never return another scope's runs.
|
|
85
|
+
- **INV-MEM-8** Wiki code is synchronous (`INV-BND-4`).
|
|
86
|
+
|
|
87
|
+
## Data
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
<data root>/wiki/ home.md, library/, projects/<slug>/
|
|
91
|
+
<data root>/wiki-history/ earlier versions of notes
|
|
92
|
+
<data root>/legacy/ an earlier Wiki's memory blocks, facts, revisions, Inbox (moved once)
|
|
93
|
+
<data root>/index.sqlite derived: pages, links, runs, recall passages (FTS5), usage rows
|
|
94
|
+
<data root>/projects.json read only: the application owns it
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Source map
|
|
98
|
+
|
|
99
|
+
`src/wiki/notes.ts`, `src/history/recall.ts`, `src/history/trajectory.ts`, `src/history/lessons.ts`, `src/core/index.ts`,
|
|
100
|
+
`src/core/changes.ts`, `src/core/projects.ts`, `src/core/secrets.ts`.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# 09 Accounts and connectors
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
**Accounts** are isolated Pi identities: each has its own agent folder, credentials, sessions and
|
|
6
|
+
history, so one person can use several providers and subscriptions without them mixing.
|
|
7
|
+
**Connectors** (connected apps) are MCP servers a session reaches through a broker, with scoped
|
|
8
|
+
access, approval of non-read calls, and redaction. The **Hub** installs exact catalog versions of
|
|
9
|
+
skills, prompts, rules and Pi packages.
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
| Type / function | Module | Role |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `Accounts` | `accounts/accounts.ts` | Accounts and pools: `resolve`, `context`, `runtime`, `models`, `status`, sign-in (`loginStart`, `loginStatus`, `loginRespond`, `loginCancel`), `setApiKey`, `signOut`, terminal accounting. |
|
|
16
|
+
| `isolateProcess`, `ensureSharedDir`, `sharedDir` | `accounts/env.ts` | Isolated launch environments. |
|
|
17
|
+
| account store, audit | `accounts/store.ts` | The registry and audit log. |
|
|
18
|
+
| `SecretStore`, `secretKey`, `fileSecretStore`, `memorySecretStore` | `accounts/secrets.ts` | Where credentials live (page 01). |
|
|
19
|
+
| `ConnectedApps` | `mcp/service.ts` | The broker: `grant`, `session`, `expose`, `tools`, `revokeRun`, `callUnattended`, traces. |
|
|
20
|
+
| `Connections` | `mcp/connections.ts` | Saved connections, scopes, secrets, `redactEvent`, `scrub`. |
|
|
21
|
+
| `McpManager` | `mcp/manager.ts` | MCP clients. |
|
|
22
|
+
| OAuth | `mcp/oauth.ts` | Sign-in; an application's own registered clients (`AppOAuthClients`). |
|
|
23
|
+
| `Hub` | `hub/hub.ts`, `hub/schema.ts` | Catalog, preview, install, uninstall, receipts. |
|
|
24
|
+
|
|
25
|
+
## Contracts
|
|
26
|
+
|
|
27
|
+
- **Account folder.** Every Pi session gets its account's own agent folder
|
|
28
|
+
(`PI_CODING_AGENT_DIR`) under the account state folder (`HarnessOptions.accountsDir`, by default
|
|
29
|
+
`<state dir>/accounts/`). Settings, skills, prompts and instructions are shared through links to
|
|
30
|
+
`_shared/pi/`; credentials, sessions and history stay in the account's own folder. The registry,
|
|
31
|
+
the account folders and their shared settings are one identity: a launch that points
|
|
32
|
+
`accountsDir` at another state's folder (`--account-state`) also uses that state's `SecretStore`,
|
|
33
|
+
so both launches sign in as the same accounts.
|
|
34
|
+
- **Resolution.** A new session may name an account, a pool, or neither (the default). Once
|
|
35
|
+
started, it stays on that account.
|
|
36
|
+
- **Sign-in progress** lives in the running process only. `accounts.loginStatus` recovers the
|
|
37
|
+
current code or prompt with a revision; it is never written to account files.
|
|
38
|
+
- **Broker tools.** `mcp_list_tools` and `mcp_call_tool`. A connection reaches a session only if
|
|
39
|
+
its scope allows the caller and the policy's `connections` keeps it. Calls that are not reads
|
|
40
|
+
are approved through the gate. Each call's redacted result is traced in `mcp-context.json`.
|
|
41
|
+
- **`apps.expose(tools)`** offers the application's own tools through the broker, which is how a
|
|
42
|
+
terminal session reaches them.
|
|
43
|
+
- **Hub.** `hub.list`, `get`, `preview`, `install`, `uninstall`, `readDocument`. Pi packages need
|
|
44
|
+
an exact npm version or a full Git commit. Documents are saved as inert JSON. The `/hub` Catalog
|
|
45
|
+
view filters Community entries for display; the service and other callers retain the full catalog.
|
|
46
|
+
Installed shows receipts from every channel. On page entry, cached/bundled content is shown before
|
|
47
|
+
a remote refresh, and origin, refresh time and failure status remain visible (PROP-0047).
|
|
48
|
+
|
|
49
|
+
## Invariants
|
|
50
|
+
|
|
51
|
+
- **INV-ACC-1** Accounts are isolated. A session runs in its account's own Pi folder, never in
|
|
52
|
+
`~/.pi`. The process drops inherited credential variables (`*_API_KEY`, `*_AUTH_TOKEN`,
|
|
53
|
+
`*_OAUTH_TOKEN`, `*_ACCESS_TOKEN`, `CODEX_HOME`, `CLAUDE_CONFIG_DIR`, `PI_CODING_AGENT_DIR`)
|
|
54
|
+
before any session starts.
|
|
55
|
+
- **INV-ACC-2** An account is never exchanged for another. A pinned session that cannot use its
|
|
56
|
+
account fails. Changing account for a terminal is an explicit person's action that restarts
|
|
57
|
+
the child.
|
|
58
|
+
- **INV-ACC-3** The harness never writes a secret to its own files; it asks the `SecretStore`.
|
|
59
|
+
The default file store is owner-only (`0600`).
|
|
60
|
+
- **INV-ACC-4** A terminal's `/accounts` goes through the session socket's `accounts.*` calls, and
|
|
61
|
+
every one needs the session's control key. A command the model runs in the shell cannot make
|
|
62
|
+
an account change.
|
|
63
|
+
- **INV-ACC-5** A credential has one copy. A terminal's Pi keeps no `auth.json`: it reads its own
|
|
64
|
+
account's credentials with `accounts.credentials.read`/`list`, and a refresh or sign-in holds the
|
|
65
|
+
store's cross-process lock from `accounts.credentials.lease` to `accounts.credentials.commit`
|
|
66
|
+
(`terminal/credentialStore.ts`, at most 20 seconds, then the lease lapses unchanged). Like every
|
|
67
|
+
`accounts.*` call they need the control key, so the model's shell never sees a token. Two copies of
|
|
68
|
+
a rotating refresh token, each under its own lock, let the second refresh send a spent token and
|
|
69
|
+
fail with `invalid_grant`. An `auth.json` a terminal of an older version left is folded in under the
|
|
70
|
+
lock, a newer stored token never replaced, and removed once no other process has a terminal on the
|
|
71
|
+
account.
|
|
72
|
+
- **INV-MCP-1** Connector secrets live in the `SecretStore`; `connections.json` holds no secret.
|
|
73
|
+
Run events and traces are redacted before they are stored or shown.
|
|
74
|
+
- **INV-MCP-2** A session reaches only the connections its scope and the policy allow, and loses
|
|
75
|
+
them when its run ends (`revokeRun`).
|
|
76
|
+
- **INV-MCP-3** An application's OAuth client is usable only by a catalog entry it lists, and
|
|
77
|
+
nothing of it is stored.
|
|
78
|
+
- **INV-MCP-4** Hub installation grants no attachment, trust, credential or permission. Writes
|
|
79
|
+
are serialized; existing registry files are never overwritten; uninstall removes only the exact
|
|
80
|
+
receipt's resources and revokes its attachment choices. Every removal route for a Hub-owned Pi
|
|
81
|
+
package, including `plugins.remove`, goes through Hub's receipt-owning uninstall operation. A
|
|
82
|
+
floating plugin-package update must not change a Hub-owned package; replacement uses an explicit
|
|
83
|
+
exact catalog version (PROP-0047).
|
|
84
|
+
|
|
85
|
+
## Data
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
<state dir>/accounts/ registry, per-account Pi agent folders, _shared/pi/, audit log, per-account state (health, plan, limits)
|
|
89
|
+
<state dir>/accounts/<id>/choices.json the model and effort each mode last used on that account
|
|
90
|
+
<state dir>/secrets.json default SecretStore (owner-only)
|
|
91
|
+
<state dir>/connections.json connected apps, no secrets
|
|
92
|
+
<state dir>/hub/catalog.json catalog cache
|
|
93
|
+
<data root>/hub/ installed documents and provenance
|
|
94
|
+
<data root>/runs/<id>/mcp-context.json
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`choices.json` is the account's own model memory: it holds no credentials and is removed with the
|
|
98
|
+
account. A conversation that reaches a new account cannot use is started on this account's newest
|
|
99
|
+
selection — the mode's, then normal's, then the newest in any mode — with that selection's effort,
|
|
100
|
+
skipping a model the account cannot authenticate; the terminal records the start in the
|
|
101
|
+
conversation, never in `choices.json`. See [ADR-0064](../decisions/ADR-0064-account-model-fallback-on-resume.md).
|
|
102
|
+
|
|
103
|
+
## Source map
|
|
104
|
+
|
|
105
|
+
`src/accounts/*.ts`, `src/mcp/*.ts`, `src/hub/*.ts`. Decision:
|
|
106
|
+
[ADR-0005](../decisions/ADR-0005-app-provided-oauth-clients.md).
|
|
107
|
+
|
|
108
|
+
## Account and connector diagnostics
|
|
109
|
+
|
|
110
|
+
`Accounts.inspect` reads credentials and a non-refreshing Pi model catalogue through a read-only
|
|
111
|
+
credential store. It never refreshes OAuth tokens or verifies a key over the network. `/doctor`
|
|
112
|
+
labels this local readiness. A selected live model probe sends one synthetic request, caps output
|
|
113
|
+
at 64 tokens, and records usage through the normal run writer. It never substitutes an account.
|
|
114
|
+
MCP live diagnostics connect and list tools on the selected scoped connector, without calling
|
|
115
|
+
connector tools or starting sign-in. Disposable grants and clients are closed afterwards.
|
|
116
|
+
|
|
117
|
+
## Provider limits (PROP-0042)
|
|
118
|
+
|
|
119
|
+
A limit reading says what a provider itself reported: a plan window, a credit balance, a rate
|
|
120
|
+
limit, or a configured organization limit. Three sources are used, in order:
|
|
121
|
+
|
|
122
|
+
1. **Response headers** on the account's own model requests. Each account runtime's providers are
|
|
123
|
+
wrapped so `onResponse` sees status and headers; a terminal session's own runtime forwards only
|
|
124
|
+
the limit-bearing headers to the parent over the control-key-protected session socket.
|
|
125
|
+
`usage/limits/normalize.ts` understands `anthropic-ratelimit-*`, Anthropic unified plan windows,
|
|
126
|
+
`x-codex-*` and `x-ratelimit-*`, plus `Retry-After` on a 429. Raw headers are never stored.
|
|
127
|
+
2. **The provider's own usage endpoint**, read with `Models.getAuth(provider)` so OAuth refresh
|
|
128
|
+
stays in Pi's serialized credential path: OpenRouter `GET /api/v1/key`, DeepSeek
|
|
129
|
+
`GET /user/balance`, Anthropic's organization `rate_limits` for an admin API key (configured
|
|
130
|
+
limits, not usage), ChatGPT/Codex `GET https://chatgpt.com/backend-api/wham/usage`, and
|
|
131
|
+
OpenCode Go `GET https://opencode.ai/zen/go/v1/usage`. A Codex request carries the account id
|
|
132
|
+
from the access token's JWT claim; an OpenCode Go request carries the account's API key.
|
|
133
|
+
The request is a bounded HTTPS GET that refuses redirects, caps its body, and never puts a
|
|
134
|
+
credential in an error. An endpoint reading replaces every limit for that provider; a header
|
|
135
|
+
reading only merges the windows it saw.
|
|
136
|
+
3. **Unavailable**, with a reason. No percentage is invented; local usage is shown instead.
|
|
137
|
+
|
|
138
|
+
Undocumented endpoints require the usage plugin's `experimentalProbes` setting. Readings are
|
|
139
|
+
cached for `refreshMinutes` (default 10) and refreshed on a page open or an explicit refresh, never
|
|
140
|
+
by a background timer. They are stored in the account's existing state (`limits`,
|
|
141
|
+
`providerLimits`), never in a new file, and no credential is written. A reading carries both `usedPercent` and the additive
|
|
142
|
+
`remainingPercent`. The Limits page is a centered dialog: each window is a label and reset line
|
|
143
|
+
above a quota-left bar, green at 50% or more left, amber from 20–49%, and red below 20%. It adds
|
|
144
|
+
the local seven-day ledger without a label, so a provider's zero reading and this app's own use
|
|
145
|
+
are not confused.
|
|
146
|
+
|
|
147
|
+
## Terminal connection setup
|
|
148
|
+
|
|
149
|
+
The unified browser exposes existing connection save/test/sign-in/sign-out/remove services through
|
|
150
|
+
private terminal controls (PROP-0013). New definitions are saved disabled. Saving does not connect,
|
|
151
|
+
sign in or approve tools. Secrets use masked fields and the existing secret store; snapshots omit
|
|
152
|
+
saved credential values and scrub connection errors/tool metadata. Hub documents remain inert until
|
|
153
|
+
a person explicitly chooses setup and completes the normal validated connection form.
|