@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,295 @@
|
|
|
1
|
+
// Builds one run's context attribution from what the run recorded. Read-only: it opens the run's
|
|
2
|
+
// pack and its events, and never writes either.
|
|
3
|
+
import { readdirSync, statSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { load } from "../prompt/compile.js";
|
|
6
|
+
import { readEvents } from "../sessions/runStore.js";
|
|
7
|
+
import { materialise } from "../variant/materialise.js";
|
|
8
|
+
/** The house constant: four characters per token, the ratio Pi's own estimator uses. */
|
|
9
|
+
export const CHARS_PER_TOKEN = 4;
|
|
10
|
+
/** Estimated tokens in a number of characters. */
|
|
11
|
+
export function tokensOf(chars) {
|
|
12
|
+
return Math.max(0, Math.ceil(chars / CHARS_PER_TOKEN));
|
|
13
|
+
}
|
|
14
|
+
/** The harness's own tool groups: their schemas are the released half's cost, not the host's. */
|
|
15
|
+
const HARNESS_TOOL_GROUPS = new Set(['History', 'Wiki', 'Native', 'World', 'Progress', 'Session', 'Annotations']);
|
|
16
|
+
/** Sections the harness writes itself, when a pack was recorded without its delivery record. */
|
|
17
|
+
const FOUNDATION_SECTIONS = new Set(['harness-identity', 'tools', 'reporting']);
|
|
18
|
+
const DYNAMIC_SECTIONS = new Set(['wiki', 'session-state', 'references', 'required-skills']);
|
|
19
|
+
const GROUP_ORDER = ['foundation', 'variant', 'application', 'conversation', 'reserved'];
|
|
20
|
+
function lastEvent(events, type) {
|
|
21
|
+
for (let index = events.length - 1; index >= 0; index -= 1) {
|
|
22
|
+
const event = events[index];
|
|
23
|
+
if (event?.type === type)
|
|
24
|
+
return event.payload;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function sectionGroup(section, dynamic) {
|
|
29
|
+
if (dynamic.has(section.id))
|
|
30
|
+
return 'conversation';
|
|
31
|
+
if (section.sources.some((source) => source.kind === 'variant'))
|
|
32
|
+
return 'variant';
|
|
33
|
+
return FOUNDATION_SECTIONS.has(section.id) ? 'foundation' : 'application';
|
|
34
|
+
}
|
|
35
|
+
/** Characters one recorded tool's schema occupies: its name, description and parameter schema. */
|
|
36
|
+
function toolChars(tool) {
|
|
37
|
+
try {
|
|
38
|
+
return JSON.stringify({ name: tool.name, description: tool.description, parameters: tool.parameters }).length;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return tool.name.length + tool.description.length;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function shareOf(tokens, window) {
|
|
45
|
+
if (!window)
|
|
46
|
+
return null;
|
|
47
|
+
return Math.max(0, Math.min(100, (tokens / window) * 100));
|
|
48
|
+
}
|
|
49
|
+
/** How many skills a variant folder offers, and roughly what one costs to load. */
|
|
50
|
+
function skillCost(paths) {
|
|
51
|
+
const sizes = [];
|
|
52
|
+
for (const path of paths) {
|
|
53
|
+
let entries;
|
|
54
|
+
try {
|
|
55
|
+
entries = readdirSync(path);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
try {
|
|
62
|
+
const stat = statSync(join(path, entry, 'SKILL.md'));
|
|
63
|
+
if (stat.isFile())
|
|
64
|
+
sizes.push(stat.size);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// A skill without a readable SKILL.md is not counted.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!sizes.length)
|
|
72
|
+
return null;
|
|
73
|
+
const average = sizes.reduce((sum, size) => sum + size, 0) / sizes.length;
|
|
74
|
+
return { items: sizes.length, tokensEach: tokensOf(average) };
|
|
75
|
+
}
|
|
76
|
+
/** What one variant component costs when it is loaded, read from the variant the run actually used. */
|
|
77
|
+
function onDemandOf(env, pack) {
|
|
78
|
+
const scope = pack.variant?.scope;
|
|
79
|
+
if (!scope)
|
|
80
|
+
return [];
|
|
81
|
+
let built;
|
|
82
|
+
try {
|
|
83
|
+
built = materialise(env.root, { scope });
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
const rows = [];
|
|
89
|
+
const skills = skillCost(built.skillPaths);
|
|
90
|
+
if (skills)
|
|
91
|
+
rows.push({ id: 'skills', title: 'Skills (c6)', items: skills.items, tokensEach: skills.tokensEach, note: 'loaded when a situation matches' });
|
|
92
|
+
if (built.subagents.length)
|
|
93
|
+
rows.push({ id: 'subagents', title: 'Subagents (c5)', items: built.subagents.length, tokensEach: null, note: 'each runs in its own context' });
|
|
94
|
+
const scripts = Object.keys(built.files).filter((path) => path.startsWith('scripts/') && !path.endsWith('README.md'));
|
|
95
|
+
if (scripts.length)
|
|
96
|
+
rows.push({ id: 'scripts', title: 'Scripts (c7)', items: scripts.length, tokensEach: null, note: 'run, not read into context' });
|
|
97
|
+
return rows;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* One run's attribution, or null when the run recorded no pack. A run whose latest request the
|
|
101
|
+
* provider measured is `measured`: its conversation row is the remainder, so the rows add up to the
|
|
102
|
+
* figure the provider reported rather than to an estimate of their own.
|
|
103
|
+
*/
|
|
104
|
+
export function attribution(env, runId) {
|
|
105
|
+
const pack = load(env.root, runId);
|
|
106
|
+
if (!pack)
|
|
107
|
+
return null;
|
|
108
|
+
const events = readEvents(env.root, runId);
|
|
109
|
+
const snapshot = lastEvent(events, 'context.snapshot');
|
|
110
|
+
const usage = lastEvent(events, 'usage.updated');
|
|
111
|
+
const sizes = pack.delivery?.sizes;
|
|
112
|
+
const updatedIds = pack.delivery?.updatedSectionIds ?? [];
|
|
113
|
+
const dynamic = pack.delivery
|
|
114
|
+
? new Set(updatedIds)
|
|
115
|
+
: new Set([...DYNAMIC_SECTIONS].filter((id) => pack.sections.some((section) => section.id === id)));
|
|
116
|
+
const stable = pack.sections.filter((section) => !dynamic.has(section.id));
|
|
117
|
+
const window = typeof usage?.contextWindow === 'number' && usage.contextWindow > 0 ? usage.contextWindow : null;
|
|
118
|
+
const measuredTokens = typeof usage?.contextTokens === 'number' && usage.contextTokens > 0 ? usage.contextTokens : null;
|
|
119
|
+
let approximate = !sizes;
|
|
120
|
+
if (snapshot?.systemPromptTruncated || snapshot?.contextUpdateTruncated || snapshot?.toolsTruncated)
|
|
121
|
+
approximate = true;
|
|
122
|
+
const rows = [];
|
|
123
|
+
for (const section of stable) {
|
|
124
|
+
const chars = sizes?.system[section.id] ?? section.size;
|
|
125
|
+
// The tools section ends with the variant's tool guidance: count that part as the variant's.
|
|
126
|
+
const variantChars = section.id === 'tools' ? Math.min(section.sources.find((source) => source.kind === 'variant')?.chars ?? 0, chars) : 0;
|
|
127
|
+
const own = Math.max(0, chars - variantChars);
|
|
128
|
+
if (own > 0) {
|
|
129
|
+
rows.push({
|
|
130
|
+
id: section.id,
|
|
131
|
+
title: section.title,
|
|
132
|
+
group: sectionGroup(section, dynamic),
|
|
133
|
+
tokens: tokensOf(own),
|
|
134
|
+
chars: own,
|
|
135
|
+
share: null,
|
|
136
|
+
always: true,
|
|
137
|
+
estimated: true,
|
|
138
|
+
budget: section.budget,
|
|
139
|
+
...(section.cut ? { cut: true } : {}),
|
|
140
|
+
...(section.sources.length ? { sources: section.sources.map((source) => ({ ...source })) } : {})
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
if (variantChars > 0) {
|
|
144
|
+
rows.push({ id: 'tool-guidance', title: 'Tool guidance (c4)', group: 'variant', tokens: tokensOf(variantChars), chars: variantChars, share: null, always: true, estimated: true });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const framing = sizes?.systemFraming ?? 0;
|
|
148
|
+
if (framing > 0) {
|
|
149
|
+
rows.push({ id: 'framing', title: 'Prompt framing', group: 'foundation', tokens: tokensOf(framing), chars: framing, share: null, always: true, estimated: true, note: 'headings and the context-update guidance' });
|
|
150
|
+
}
|
|
151
|
+
// Tool schemas, by the owner of the tools: the harness's own groups against the application's.
|
|
152
|
+
const groupOfTool = new Map();
|
|
153
|
+
for (const group of pack.toolGroups)
|
|
154
|
+
for (const name of group.tools)
|
|
155
|
+
groupOfTool.set(name, group.group);
|
|
156
|
+
for (const [group, harnessOwned] of [['foundation', true], ['application', false]]) {
|
|
157
|
+
const owned = (snapshot?.tools ?? []).filter((tool) => HARNESS_TOOL_GROUPS.has(groupOfTool.get(tool.name) ?? '') === harnessOwned);
|
|
158
|
+
if (!owned.length)
|
|
159
|
+
continue;
|
|
160
|
+
const chars = owned.reduce((sum, tool) => sum + toolChars(tool), 0);
|
|
161
|
+
const byGroup = new Map();
|
|
162
|
+
for (const tool of owned) {
|
|
163
|
+
const name = groupOfTool.get(tool.name) ?? 'Other tools';
|
|
164
|
+
byGroup.set(name, (byGroup.get(name) ?? 0) + 1);
|
|
165
|
+
}
|
|
166
|
+
rows.push({
|
|
167
|
+
id: harnessOwned ? 'tools-harness' : 'tools-application',
|
|
168
|
+
title: `Tool schemas · ${owned.length} ${owned.length === 1 ? 'tool' : 'tools'}`,
|
|
169
|
+
group,
|
|
170
|
+
tokens: tokensOf(chars),
|
|
171
|
+
chars,
|
|
172
|
+
share: null,
|
|
173
|
+
always: true,
|
|
174
|
+
estimated: true,
|
|
175
|
+
tools: [...byGroup].map(([name, count]) => ({ group: name, count }))
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// What arrived as this request's context update, and the messages it joined.
|
|
179
|
+
for (const id of updatedIds) {
|
|
180
|
+
const section = pack.sections.find((entry) => entry.id === id);
|
|
181
|
+
if (!section)
|
|
182
|
+
continue;
|
|
183
|
+
const chars = sizes?.update[section.id] ?? section.size;
|
|
184
|
+
if (!chars)
|
|
185
|
+
continue;
|
|
186
|
+
rows.push({ id: section.id, title: section.title, group: 'conversation', tokens: tokensOf(chars), chars, share: null, always: false, estimated: true });
|
|
187
|
+
}
|
|
188
|
+
const updateFraming = updatedIds.length ? sizes?.updateFraming ?? 0 : 0;
|
|
189
|
+
if (updateFraming > 0) {
|
|
190
|
+
// The update message's own words, which carry the sections below into history.
|
|
191
|
+
rows.push({ id: 'context-update', title: 'Context update framing', group: 'conversation', tokens: tokensOf(updateFraming), chars: updateFraming, share: null, always: false, estimated: true, note: 'the message the sections arrived in' });
|
|
192
|
+
}
|
|
193
|
+
const prefix = rows.slice();
|
|
194
|
+
let prefixTokens = prefix.reduce((sum, row) => sum + row.tokens, 0);
|
|
195
|
+
let note = approximate
|
|
196
|
+
? 'The pack was recorded without every per-section size, so the split is approximate.'
|
|
197
|
+
: 'Rows are estimated from recorded characters, four per token, and reconciled to the measured request.';
|
|
198
|
+
let messages = 0;
|
|
199
|
+
let source = 'estimate';
|
|
200
|
+
if (measuredTokens !== null) {
|
|
201
|
+
source = 'measured';
|
|
202
|
+
const remainder = measuredTokens - prefixTokens;
|
|
203
|
+
if (remainder >= 0)
|
|
204
|
+
messages = remainder;
|
|
205
|
+
else {
|
|
206
|
+
// The estimate overshot the provider's figure: scale the prefix down and say so, never go negative.
|
|
207
|
+
const scale = prefixTokens > 0 ? measuredTokens / prefixTokens : 0;
|
|
208
|
+
for (const row of prefix) {
|
|
209
|
+
row.tokens = Math.max(0, Math.floor(row.tokens * scale));
|
|
210
|
+
row.note = 'scaled to the measured total';
|
|
211
|
+
}
|
|
212
|
+
prefixTokens = prefix.reduce((sum, row) => sum + row.tokens, 0);
|
|
213
|
+
messages = 0;
|
|
214
|
+
note = 'The estimated prefix exceeded the measured request, so every row was scaled down to it.';
|
|
215
|
+
}
|
|
216
|
+
rows.push({ id: 'messages', title: 'Messages and tool results', group: 'conversation', tokens: messages, chars: null, share: null, always: false, estimated: false, note: 'measured by subtraction' });
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
note = `${note} No request has been measured yet.`;
|
|
220
|
+
}
|
|
221
|
+
const reserve = snapshot?.compaction?.enabled === true ? Math.max(0, Math.round(snapshot.compaction.reserveTokens)) : null;
|
|
222
|
+
if (reserve !== null) {
|
|
223
|
+
rows.push({ id: 'compaction-reserve', title: 'Compaction reserve', group: 'reserved', tokens: reserve, chars: null, share: null, always: true, estimated: true, note: 'Pi, auto-compaction' });
|
|
224
|
+
}
|
|
225
|
+
for (const row of rows)
|
|
226
|
+
row.share = shareOf(row.tokens, window);
|
|
227
|
+
const used = measuredTokens ?? prefixTokens;
|
|
228
|
+
const free = window === null ? null : Math.max(0, window - used - (reserve ?? 0));
|
|
229
|
+
const totals = { foundation: 0, variant: 0, application: 0, conversation: 0, reserved: 0 };
|
|
230
|
+
for (const row of rows)
|
|
231
|
+
totals[row.group] += row.tokens;
|
|
232
|
+
// One point per measured request, and where each compaction cut the window back.
|
|
233
|
+
const history = [];
|
|
234
|
+
const compactions = [];
|
|
235
|
+
for (const event of events) {
|
|
236
|
+
if (event.type === 'usage.updated') {
|
|
237
|
+
const payload = event.payload;
|
|
238
|
+
const used = typeof payload.contextTokens === 'number' ? payload.contextTokens : null;
|
|
239
|
+
const request = typeof payload.request?.index === 'number' ? payload.request.index : null;
|
|
240
|
+
// A provider that reports totals only still advances a request count.
|
|
241
|
+
const index = request ?? (typeof payload.request === 'number' ? payload.request : null);
|
|
242
|
+
if (used === null || index === null)
|
|
243
|
+
continue;
|
|
244
|
+
history.push({ request: index, used, share: shareOf(used, window), at: event.timestamp });
|
|
245
|
+
}
|
|
246
|
+
else if (event.type === 'compaction.ended') {
|
|
247
|
+
const payload = event.payload;
|
|
248
|
+
compactions.push({ at: event.timestamp, before: typeof payload.tokensBefore === 'number' ? payload.tokensBefore : null, after: typeof payload.tokensAfter === 'number' ? payload.tokensAfter : null });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
runId,
|
|
253
|
+
model: usage?.model ?? null,
|
|
254
|
+
provider: usage?.provider ?? null,
|
|
255
|
+
window,
|
|
256
|
+
used,
|
|
257
|
+
share: shareOf(used, window),
|
|
258
|
+
source,
|
|
259
|
+
request: typeof usage?.request?.index === 'number' ? usage.request.index : null,
|
|
260
|
+
compaction: reserve === null ? null : { enabled: true, reserveTokens: reserve },
|
|
261
|
+
free,
|
|
262
|
+
rows: rows.sort((left, right) => GROUP_ORDER.indexOf(left.group) - GROUP_ORDER.indexOf(right.group)),
|
|
263
|
+
history,
|
|
264
|
+
compactions,
|
|
265
|
+
onDemand: onDemandOf(env, pack),
|
|
266
|
+
totals,
|
|
267
|
+
recordedAt: pack.compiledAt ?? null,
|
|
268
|
+
note
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/** One row's text, for a surface that shows what a row actually contributed. */
|
|
272
|
+
export function rowText(env, runId, rowId) {
|
|
273
|
+
const pack = load(env.root, runId);
|
|
274
|
+
if (!pack)
|
|
275
|
+
return null;
|
|
276
|
+
if (rowId === 'tools-harness' || rowId === 'tools-application') {
|
|
277
|
+
const events = readEvents(env.root, runId);
|
|
278
|
+
const tools = lastEvent(events, 'context.snapshot')?.tools ?? [];
|
|
279
|
+
if (!tools.length)
|
|
280
|
+
return null;
|
|
281
|
+
const names = new Map();
|
|
282
|
+
for (const group of pack.toolGroups)
|
|
283
|
+
for (const name of group.tools)
|
|
284
|
+
names.set(name, group.group);
|
|
285
|
+
const harnessOwned = rowId === 'tools-harness';
|
|
286
|
+
const lines = tools
|
|
287
|
+
.filter((tool) => HARNESS_TOOL_GROUPS.has(names.get(tool.name) ?? '') === harnessOwned)
|
|
288
|
+
.map((tool) => `${names.get(tool.name) ?? 'Other tools'}: ${tool.name}`);
|
|
289
|
+
return { id: rowId, title: harnessOwned ? 'Harness tool schemas' : 'Application tool schemas', text: lines.join('\n') };
|
|
290
|
+
}
|
|
291
|
+
const section = pack.sections.find((entry) => entry.id === rowId);
|
|
292
|
+
if (!section)
|
|
293
|
+
return null;
|
|
294
|
+
return { id: section.id, title: section.title, text: section.body };
|
|
295
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Facts recorded for one run. Null means that the fact was not recorded. */
|
|
2
|
+
export interface RunDetails {
|
|
3
|
+
runId: string;
|
|
4
|
+
status: string | null;
|
|
5
|
+
mode: string | null;
|
|
6
|
+
model: string | null;
|
|
7
|
+
effort: string | null;
|
|
8
|
+
variantScope: string | null;
|
|
9
|
+
variantVersion: string | null;
|
|
10
|
+
workspaceRoot: string | null;
|
|
11
|
+
tools: string[] | null;
|
|
12
|
+
connectors: string[] | null;
|
|
13
|
+
skills: string[] | null;
|
|
14
|
+
plugins: string[] | null;
|
|
15
|
+
}
|
|
16
|
+
export declare function runDetails(root: string, runId: string): RunDetails;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { loadRun as loadCapabilities } from "../capabilities/runSnapshot.js";
|
|
2
|
+
import { loadRun, readEvents } from "../sessions/runStore.js";
|
|
3
|
+
export function runDetails(root, runId) {
|
|
4
|
+
const run = loadRun(root, runId);
|
|
5
|
+
const capabilities = loadCapabilities(root, runId);
|
|
6
|
+
const snapshot = readEvents(root, runId).filter((event) => event.type === 'context.snapshot').at(-1);
|
|
7
|
+
const payload = snapshot?.payload;
|
|
8
|
+
return {
|
|
9
|
+
runId: run.id,
|
|
10
|
+
status: run.status ?? null,
|
|
11
|
+
mode: run.effectiveMode ?? null,
|
|
12
|
+
model: run.model ?? null,
|
|
13
|
+
effort: run.effort ?? null,
|
|
14
|
+
variantScope: run.variantScope ?? null,
|
|
15
|
+
variantVersion: run.variantVersion ?? null,
|
|
16
|
+
workspaceRoot: run.workspaceRoot ?? null,
|
|
17
|
+
tools: payload && !payload.toolsTruncated && Array.isArray(payload.tools) ? payload.tools.map((tool) => tool.name) : null,
|
|
18
|
+
connectors: capabilities?.connectors ?? null,
|
|
19
|
+
skills: run.loadedSkills ?? null,
|
|
20
|
+
plugins: run.activatedPlugins ?? null
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/** Who owns the text: the released half, the mutably half, the host, or the conversation itself. */
|
|
2
|
+
export type ContextGroup = 'foundation' | 'variant' | 'application' | 'conversation' | 'reserved';
|
|
3
|
+
/** Where a row's characters came from, when the compiler recorded it. */
|
|
4
|
+
export interface ContextRowSource {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
revision?: string | null;
|
|
8
|
+
chars?: number;
|
|
9
|
+
}
|
|
10
|
+
/** One contributor to the context window. */
|
|
11
|
+
export interface ContextRow {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
group: ContextGroup;
|
|
15
|
+
/** Estimated tokens this row occupied in the described request. */
|
|
16
|
+
tokens: number;
|
|
17
|
+
/** Characters the estimate came from; null for a remainder or a reservation. */
|
|
18
|
+
chars: number | null;
|
|
19
|
+
/** Share of the model's window, 0–100; null when the window is unknown. */
|
|
20
|
+
share: number | null;
|
|
21
|
+
/** True when it is part of the stable prefix of every request. */
|
|
22
|
+
always: boolean;
|
|
23
|
+
/** False only for a figure the provider reported rather than one this module derived. */
|
|
24
|
+
estimated: boolean;
|
|
25
|
+
/** Its character budget, when it has one. */
|
|
26
|
+
budget?: number;
|
|
27
|
+
/** The compiler shortened this section to meet its budget. */
|
|
28
|
+
cut?: boolean;
|
|
29
|
+
sources?: ContextRowSource[];
|
|
30
|
+
/** For a tool-schema row: the groups it counts, and how many tools each holds. */
|
|
31
|
+
tools?: {
|
|
32
|
+
group: string;
|
|
33
|
+
count: number;
|
|
34
|
+
}[];
|
|
35
|
+
/** Why this figure is not exact, when it is not. */
|
|
36
|
+
note?: string;
|
|
37
|
+
}
|
|
38
|
+
/** Context that is not in this request but arrives when it is used. */
|
|
39
|
+
export interface ContextOnDemand {
|
|
40
|
+
id: string;
|
|
41
|
+
title: string;
|
|
42
|
+
/** How many items of this kind the variant offers. */
|
|
43
|
+
items: number;
|
|
44
|
+
/** Estimated tokens one item costs when it is loaded; null when it loads in its own context. */
|
|
45
|
+
tokensEach: number | null;
|
|
46
|
+
note?: string;
|
|
47
|
+
}
|
|
48
|
+
/** One measured request in the run, as the window filled. */
|
|
49
|
+
export interface ContextPoint {
|
|
50
|
+
/** 1-based model request, as `usage.updated` numbers it. */
|
|
51
|
+
request: number;
|
|
52
|
+
used: number;
|
|
53
|
+
share: number | null;
|
|
54
|
+
at: string;
|
|
55
|
+
}
|
|
56
|
+
/** A compaction the run went through, and the window it started and ended with. */
|
|
57
|
+
export interface ContextCompaction {
|
|
58
|
+
at: string;
|
|
59
|
+
before: number | null;
|
|
60
|
+
after: number | null;
|
|
61
|
+
}
|
|
62
|
+
/** One run's attribution: the rows, their totals, and how much of the window they account for. */
|
|
63
|
+
export interface ContextAttribution {
|
|
64
|
+
runId: string;
|
|
65
|
+
model: string | null;
|
|
66
|
+
provider: string | null;
|
|
67
|
+
/** The model's context window; null when nothing reported one. */
|
|
68
|
+
window: number | null;
|
|
69
|
+
/** The provider-measured size of the latest request, or the estimate when it measured none. */
|
|
70
|
+
used: number;
|
|
71
|
+
/** Used as a share of the window, 0–100; null when the window is unknown. */
|
|
72
|
+
share: number | null;
|
|
73
|
+
source: 'measured' | 'estimate';
|
|
74
|
+
/** Which request the measured total describes (1-based), when the run reported one. */
|
|
75
|
+
request: number | null;
|
|
76
|
+
/** Pi's compaction headroom for this run, when the session exposed it. */
|
|
77
|
+
compaction: {
|
|
78
|
+
enabled: boolean;
|
|
79
|
+
reserveTokens: number;
|
|
80
|
+
} | null;
|
|
81
|
+
/** The window the request may still grow into, excluding the reserve; null when unknown. */
|
|
82
|
+
free: number | null;
|
|
83
|
+
rows: ContextRow[];
|
|
84
|
+
/** The window at each measured request, oldest first: what grew, which one snapshot cannot show. */
|
|
85
|
+
history: ContextPoint[];
|
|
86
|
+
/** Compactions the run went through, oldest first. */
|
|
87
|
+
compactions: ContextCompaction[];
|
|
88
|
+
onDemand: ContextOnDemand[];
|
|
89
|
+
totals: Record<ContextGroup, number>;
|
|
90
|
+
/** When the run's pack was compiled. */
|
|
91
|
+
recordedAt: string | null;
|
|
92
|
+
/** Why the split is approximate, when it is. */
|
|
93
|
+
note: string | null;
|
|
94
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// What a request's context window was made of: one figure per contributor, in tokens, reconciled to
|
|
2
|
+
// the size the provider reported for that request. Nothing here formats text: every surface draws
|
|
3
|
+
// these rows its own way.
|
|
4
|
+
//
|
|
5
|
+
// The split is measured where it can be and estimated where it must be. `context.snapshot` records
|
|
6
|
+
// the prompt, the update and every tool schema the run sent; `context.json` records what each
|
|
7
|
+
// section contributed; `usage.updated` records the provider's own figure for the request. Rows are
|
|
8
|
+
// estimated at four characters per token — the ratio Pi, opencode and DeepSeek Harness all use — so
|
|
9
|
+
// the page and the session's own status line cannot disagree by more than rounding.
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface Notice {
|
|
2
|
+
/** `accounts.changed`, `accounts.login`, `accounts.loginEvent`, `wiki.changed`, `wiki.maintenance`, … */
|
|
3
|
+
type: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export type NoticeListener = (notice: Notice) => void;
|
|
7
|
+
export declare class Bus {
|
|
8
|
+
private readonly listeners;
|
|
9
|
+
on(listener: NoticeListener): () => void;
|
|
10
|
+
emit(notice: Notice): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Sends diagnostics somewhere other than stderr, or back to stderr with `null`. A host whose stderr is
|
|
14
|
+
* the terminal a frontend is drawing on must not write into it, so it sets a sink.
|
|
15
|
+
*/
|
|
16
|
+
export declare function setLogSink(sink: ((text: string) => void) | null): void;
|
|
17
|
+
/** One line of diagnostics. Diagnostics go to stderr by default; stdout may be carrying a protocol. */
|
|
18
|
+
export declare function logLine(text: string): void;
|
|
19
|
+
/** Redacts common credentials and URL query values before diagnostic text is persisted or shown. */
|
|
20
|
+
export declare function redactLogText(text: string): string;
|
|
21
|
+
/** Records useful failure detail without persisting credentials or response bodies. */
|
|
22
|
+
export declare function logDiagnostic(scope: string, error: unknown, metadata?: Record<string, unknown>): void;
|
|
23
|
+
export declare function log(...parts: unknown[]): void;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Notices: what the harness tells whoever embeds it. Run events travel separately, through the
|
|
2
|
+
// run tracker; a notice says that some state changed and should be read again.
|
|
3
|
+
export class Bus {
|
|
4
|
+
listeners = new Set();
|
|
5
|
+
on(listener) {
|
|
6
|
+
this.listeners.add(listener);
|
|
7
|
+
return () => this.listeners.delete(listener);
|
|
8
|
+
}
|
|
9
|
+
emit(notice) {
|
|
10
|
+
for (const listener of this.listeners) {
|
|
11
|
+
try {
|
|
12
|
+
listener(notice);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
log('a notice listener failed', error instanceof Error ? error.message : String(error));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let logSink = null;
|
|
21
|
+
/**
|
|
22
|
+
* Sends diagnostics somewhere other than stderr, or back to stderr with `null`. A host whose stderr is
|
|
23
|
+
* the terminal a frontend is drawing on must not write into it, so it sets a sink.
|
|
24
|
+
*/
|
|
25
|
+
export function setLogSink(sink) {
|
|
26
|
+
logSink = sink;
|
|
27
|
+
}
|
|
28
|
+
/** One line of diagnostics. Diagnostics go to stderr by default; stdout may be carrying a protocol. */
|
|
29
|
+
export function logLine(text) {
|
|
30
|
+
if (logSink)
|
|
31
|
+
logSink(text);
|
|
32
|
+
else
|
|
33
|
+
process.stderr.write(`${text}\n`);
|
|
34
|
+
}
|
|
35
|
+
/** Redacts common credentials and URL query values before diagnostic text is persisted or shown. */
|
|
36
|
+
export function redactLogText(text) {
|
|
37
|
+
return text
|
|
38
|
+
.replace(/\bBearer\s+\S+/gi, 'Bearer [redacted]')
|
|
39
|
+
.replace(/(["']?(?:authorization|proxy-authorization|cookie|set-cookie|x-[\w-]{0,64}(?:token|key)|[\w-]{0,64}(?:api[_-]?key|access[_-]?token|refresh[_-]?token|id[_-]?token|token|secret|password|client[_-]?secret))["']?\s*[:=]\s*["']?)[^"'\s,;]+/gi, '$1[redacted]')
|
|
40
|
+
.replace(/\b(?:sk|sess)-[A-Za-z0-9_-]{16,}\b/gi, '[redacted]')
|
|
41
|
+
.replace(/\bhttps?:\/\/[^\s"'<>]+/gi, (raw) => {
|
|
42
|
+
const punctuation = /[),.;!?]+$/.exec(raw)?.[0] ?? '';
|
|
43
|
+
const address = punctuation ? raw.slice(0, -punctuation.length) : raw;
|
|
44
|
+
try {
|
|
45
|
+
const url = new URL(address);
|
|
46
|
+
url.username = '';
|
|
47
|
+
url.password = '';
|
|
48
|
+
url.search = '';
|
|
49
|
+
url.hash = '';
|
|
50
|
+
return `${url.href}${punctuation}`;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return raw;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** Records useful failure detail without persisting credentials or response bodies. */
|
|
58
|
+
export function logDiagnostic(scope, error, metadata = {}) {
|
|
59
|
+
const failure = error instanceof Error ? error : new Error(String(error));
|
|
60
|
+
const details = {
|
|
61
|
+
...metadata,
|
|
62
|
+
message: failure.message,
|
|
63
|
+
...(failure.stack ? { stack: failure.stack } : {})
|
|
64
|
+
};
|
|
65
|
+
let serialized;
|
|
66
|
+
try {
|
|
67
|
+
serialized = JSON.stringify(details);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
serialized = JSON.stringify({ message: failure.message, stack: failure.stack });
|
|
71
|
+
}
|
|
72
|
+
logLine(`[harness] ${redactLogText(scope)} ${redactLogText(serialized)}`);
|
|
73
|
+
}
|
|
74
|
+
export function log(...parts) {
|
|
75
|
+
logLine(`[harness] ${parts.map((part) => (typeof part === 'string' ? part : JSON.stringify(part))).join(' ')}`);
|
|
76
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Project } from "./projects.js";
|
|
2
|
+
export interface CallerContext {
|
|
3
|
+
/** Opaque, host-owned policy data frozen when this session starts. The harness only forwards it to the embedding app's tool policy. */
|
|
4
|
+
policyContext?: unknown;
|
|
5
|
+
runId?: string | null;
|
|
6
|
+
sessionId?: string | null;
|
|
7
|
+
projectId?: string | null;
|
|
8
|
+
/** The caller: decides which plugins and connectors reach it, and whose history it recalls. */
|
|
9
|
+
agentId?: string | null;
|
|
10
|
+
/** Callers whose conversations this one may not recall (opaque ids from the embedding host). */
|
|
11
|
+
recallExcludeAgents?: string[] | null;
|
|
12
|
+
/** The caller's name, recorded on what it writes. */
|
|
13
|
+
agentName?: string | null;
|
|
14
|
+
/** `Chat` for an agent's own conversation, `Code` for a session in a project. */
|
|
15
|
+
actor?: string | null;
|
|
16
|
+
/** `cli` when the caller reaches the harness through a terminal command. */
|
|
17
|
+
surface?: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare const isSession: (context: CallerContext) => boolean;
|
|
20
|
+
export declare const actorOf: (context: CallerContext) => string;
|
|
21
|
+
export declare const usesCli: (context: CallerContext) => boolean;
|
|
22
|
+
export declare function projectOf(root: string, context: CallerContext): Project | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Who a session works as. The embedding application supplies this when a session starts; the
|
|
2
|
+
// harness never looks an agent up by itself. The ids are opaque to the harness.
|
|
3
|
+
import { findProject } from "./projects.js";
|
|
4
|
+
export const isSession = (context) => context.actor === 'Code';
|
|
5
|
+
export const actorOf = (context) => (isSession(context) ? 'Code' : 'Chat');
|
|
6
|
+
export const usesCli = (context) => context.surface === 'cli';
|
|
7
|
+
export function projectOf(root, context) {
|
|
8
|
+
if (!context.projectId)
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
return findProject(root, context.projectId);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Change {
|
|
2
|
+
/** The Wiki folder the entry is in. */
|
|
3
|
+
wiki: string;
|
|
4
|
+
id: string;
|
|
5
|
+
/** The file that was written. */
|
|
6
|
+
path: string;
|
|
7
|
+
/** Its new contents, front matter included. */
|
|
8
|
+
text: string;
|
|
9
|
+
actor: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
12
|
+
type Listener = (change: Change) => void;
|
|
13
|
+
export declare function noteChange(change: Change): void;
|
|
14
|
+
export declare function onChange(listener: Listener): () => void;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const listeners = new Set();
|
|
2
|
+
export function noteChange(change) {
|
|
3
|
+
for (const listener of listeners) {
|
|
4
|
+
try {
|
|
5
|
+
listener(change);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
// A listener must never break the write it is told about.
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function onChange(listener) {
|
|
13
|
+
listeners.add(listener);
|
|
14
|
+
return () => void listeners.delete(listener);
|
|
15
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** What a command gets when the caller says nothing. */
|
|
2
|
+
export declare const DEFAULT_COMMAND_TIMEOUT_SECONDS = 120;
|
|
3
|
+
/** Past this, a call must say why it needs longer. */
|
|
4
|
+
export declare const COMMAND_TIMEOUT_CEILING_SECONDS = 300;
|
|
5
|
+
/** The longest a single command may run at all. */
|
|
6
|
+
export declare const COMMAND_TIMEOUT_MAX_SECONDS = 900;
|
|
7
|
+
export type CommandTimeout = {
|
|
8
|
+
ok: true;
|
|
9
|
+
timeout: number;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
/** Resolves a requested timeout against the default, the ceiling and the maximum. */
|
|
15
|
+
export declare function resolveCommandTimeout(requested: unknown, reason: unknown): CommandTimeout;
|
|
16
|
+
/** A command's result when it was stopped by the budget rather than finishing. */
|
|
17
|
+
export declare function commandTimeoutText(seconds: number, output: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Runs a command with a wall-clock budget. The abort reaches the live shell, so the promise
|
|
20
|
+
* settles instead of leaving the reply blocked; a timeout is reported as a rejection the caller
|
|
21
|
+
* turns into a tool result.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withCommandBudget<T>(run: () => Promise<T>, abort: (() => void) | undefined, seconds: number): Promise<T>;
|