@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,139 @@
|
|
|
1
|
+
/** The only provider the harness runs. Records of other providers are kept in the file and ignored. */
|
|
2
|
+
export declare const PROVIDER = "pi";
|
|
3
|
+
export interface Account {
|
|
4
|
+
id: string;
|
|
5
|
+
provider: string;
|
|
6
|
+
label: string;
|
|
7
|
+
/** `subscription` (a provider's own sign-in) or `apiKey`. */
|
|
8
|
+
authKind: string;
|
|
9
|
+
credentialStore?: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Pool {
|
|
13
|
+
id: string;
|
|
14
|
+
provider: string;
|
|
15
|
+
label: string;
|
|
16
|
+
accountIds: string[];
|
|
17
|
+
}
|
|
18
|
+
interface Registry {
|
|
19
|
+
accounts: Account[];
|
|
20
|
+
defaults: Record<string, string>;
|
|
21
|
+
pools: Pool[];
|
|
22
|
+
migratedProviderKeys: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface Limit {
|
|
25
|
+
id: string;
|
|
26
|
+
label: string;
|
|
27
|
+
usedPercent?: number | null;
|
|
28
|
+
/** The same window from the other side: quota left. Additive for surfaces that read limits as remaining. */
|
|
29
|
+
remainingPercent?: number | null;
|
|
30
|
+
resetsAt?: string | null;
|
|
31
|
+
windowMinutes?: number | null;
|
|
32
|
+
/** `allowed`, `warning`, `rejected`, or `configured` when the provider reports it. */
|
|
33
|
+
status?: string | null;
|
|
34
|
+
/** Which provider the reading belongs to. Older records may omit it. */
|
|
35
|
+
provider?: string | null;
|
|
36
|
+
/** What kind of ceiling this is. */
|
|
37
|
+
kind?: 'window' | 'rate' | 'credit' | 'configured' | 'error';
|
|
38
|
+
/** The unit of `used`, `limit` and `remaining`. */
|
|
39
|
+
unit?: 'percent' | 'requests' | 'tokens' | 'usd' | 'currency' | 'count';
|
|
40
|
+
used?: number | null;
|
|
41
|
+
limit?: number | null;
|
|
42
|
+
remaining?: number | null;
|
|
43
|
+
/** How the reading was obtained. */
|
|
44
|
+
source?: 'headers' | 'provider' | 'estimate' | 'error';
|
|
45
|
+
observedAt?: string | null;
|
|
46
|
+
/** A short provider note, such as a balance currency. */
|
|
47
|
+
detail?: string | null;
|
|
48
|
+
}
|
|
49
|
+
/** The last readout for one provider of one account, including when nothing could be read. */
|
|
50
|
+
export interface ProviderLimitState {
|
|
51
|
+
provider: string;
|
|
52
|
+
source: 'headers' | 'provider' | 'estimate' | 'unavailable';
|
|
53
|
+
reason: string | null;
|
|
54
|
+
observedAt: string;
|
|
55
|
+
}
|
|
56
|
+
export interface Issue {
|
|
57
|
+
/** `auth_expired`, `rate_limited`, `quota`, `network`, or `unknown`. */
|
|
58
|
+
category: string;
|
|
59
|
+
message: string;
|
|
60
|
+
at: string;
|
|
61
|
+
resetsAt: string | null;
|
|
62
|
+
}
|
|
63
|
+
export interface AccountState {
|
|
64
|
+
/** `ok`, `limited`, `auth_expired`, `signed_out`, `error`, or `unknown`. */
|
|
65
|
+
health: string;
|
|
66
|
+
signedIn: boolean | null;
|
|
67
|
+
authMethod: string | null;
|
|
68
|
+
plan: string | null;
|
|
69
|
+
identity: string | null;
|
|
70
|
+
limits: Limit[];
|
|
71
|
+
/** What the last limit readout found for each provider, including an unavailable one. */
|
|
72
|
+
providerLimits: ProviderLimitState[];
|
|
73
|
+
lastError: Issue | null;
|
|
74
|
+
lastCheckedAt: string | null;
|
|
75
|
+
cliVersion: string | null;
|
|
76
|
+
/** Features detected for this account, e.g. `models:12`, `provider:anthropic`. */
|
|
77
|
+
capabilities: string[];
|
|
78
|
+
/** Providers with a stored credential (names only). */
|
|
79
|
+
piProviders: string[];
|
|
80
|
+
}
|
|
81
|
+
export declare const emptyState: () => AccountState;
|
|
82
|
+
export type AccountView = Account & {
|
|
83
|
+
isDefault: boolean;
|
|
84
|
+
state: AccountState;
|
|
85
|
+
};
|
|
86
|
+
export interface AccountsOverview {
|
|
87
|
+
accounts: AccountView[];
|
|
88
|
+
pools: Pool[];
|
|
89
|
+
defaults: Record<string, string>;
|
|
90
|
+
}
|
|
91
|
+
export interface AuditEntry {
|
|
92
|
+
at: string;
|
|
93
|
+
accountId: string | null;
|
|
94
|
+
action: string;
|
|
95
|
+
detail: string;
|
|
96
|
+
}
|
|
97
|
+
export declare function loadRegistry(dir: string): Registry;
|
|
98
|
+
export declare function saveRegistry(dir: string, registry: Registry): void;
|
|
99
|
+
export declare function loadState(dir: string, accountId: string): AccountState;
|
|
100
|
+
/** Replaces anything that looks like a token so audit lines and stored errors never hold secrets. */
|
|
101
|
+
export declare function scrub(text: string): string;
|
|
102
|
+
export declare function audit(dir: string, accountId: string | null, action: string, detail: string): void;
|
|
103
|
+
/** The newest audit entries first, optionally for one account. */
|
|
104
|
+
export declare function readAudit(dir: string, accountId?: string | null, limit?: number): AuditEntry[];
|
|
105
|
+
export declare const isLimitCategory: (category: string) => boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Whether a `rate_limited` or `quota` error still counts. With a reset time it counts until
|
|
108
|
+
* then; without one it counts for a short while after it was recorded.
|
|
109
|
+
*/
|
|
110
|
+
export declare function limitErrorActive(issue: Issue): boolean;
|
|
111
|
+
export declare function deriveHealth(state: AccountState): string;
|
|
112
|
+
/** Read-modify-write on one account's state. Returns the previous health and the new state. */
|
|
113
|
+
export declare function updateState(dir: string, accountId: string, change: (state: AccountState) => void): {
|
|
114
|
+
previous: string;
|
|
115
|
+
state: AccountState;
|
|
116
|
+
};
|
|
117
|
+
export declare function find(dir: string, accountId: string): Account;
|
|
118
|
+
/**
|
|
119
|
+
* Chooses the account for a new session: the explicit account, else the pool's first usable
|
|
120
|
+
* account, else the default, else the first account. It never skips to another one silently.
|
|
121
|
+
*/
|
|
122
|
+
export declare function resolve(dir: string, accountId?: string | null, poolId?: string | null): Account;
|
|
123
|
+
/** The default account, if any exists. */
|
|
124
|
+
export declare function defaultAccount(dir: string): Account | null;
|
|
125
|
+
export declare function summaryAuthentication(dir: string): 'authenticated' | 'unauthenticated' | 'unknown';
|
|
126
|
+
export declare function overview(dir: string): AccountsOverview;
|
|
127
|
+
export declare function cleanLabel(label: string): string;
|
|
128
|
+
export declare function addAccount(dir: string, label: string, authKind: string): Account;
|
|
129
|
+
export declare function renameAccount(dir: string, accountId: string, label: string): void;
|
|
130
|
+
export declare function setDefault(dir: string, accountId: string): Account;
|
|
131
|
+
/** Drops the account from the registry, its pools, and the default. Its folder and secrets are the caller's to remove. */
|
|
132
|
+
export declare function forgetAccount(dir: string, account: Account): void;
|
|
133
|
+
export declare function savePool(dir: string, pool: {
|
|
134
|
+
id?: string;
|
|
135
|
+
label: string;
|
|
136
|
+
accountIds: string[];
|
|
137
|
+
}): Pool;
|
|
138
|
+
export declare function removePool(dir: string, poolId: string): void;
|
|
139
|
+
export {};
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// Accounts. One profile (settings, registry, memory) and any number of Pi accounts, each with
|
|
2
|
+
// its own isolated agent folder, stored credentials, sign-in state, limits, health, and audit
|
|
3
|
+
// trail.
|
|
4
|
+
//
|
|
5
|
+
// Device-local layout under `<state dir>/accounts/`:
|
|
6
|
+
// accounts.json accounts, the default, pools (no secrets)
|
|
7
|
+
// <id>/state.json health, plan, limits, last error (no secrets)
|
|
8
|
+
// <id>/home/pi/ Pi's own agent folder for this account
|
|
9
|
+
// _shared/pi/ settings, skills, prompts linked into every account's agent folder
|
|
10
|
+
// audit.jsonl append-only account actions (secrets scrubbed)
|
|
11
|
+
//
|
|
12
|
+
// Switching is always manual. A pool only chooses an account when a session starts; a running
|
|
13
|
+
// or resumed session keeps the account it started with.
|
|
14
|
+
import { mkdirSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { HarnessError, invalid, notFound } from "../core/errors.js";
|
|
17
|
+
import { appendLine, newId, now, readJsonOr, safeId, writeJson } from "../core/fs.js";
|
|
18
|
+
import { charCount, compareText, lines, takeChars } from "../core/text.js";
|
|
19
|
+
/** The only provider the harness runs. Records of other providers are kept in the file and ignored. */
|
|
20
|
+
export const PROVIDER = 'pi';
|
|
21
|
+
export const emptyState = () => ({ health: 'unknown', signedIn: null, authMethod: null, plan: null, identity: null, limits: [], providerLimits: [], lastError: null, lastCheckedAt: null, cliVersion: null, capabilities: [], piProviders: [] });
|
|
22
|
+
// ---- Files ------------------------------------------------------------------------------
|
|
23
|
+
const registryPath = (dir) => join(dir, 'accounts.json');
|
|
24
|
+
const statePath = (dir, accountId) => join(dir, safeId(accountId), 'state.json');
|
|
25
|
+
export function loadRegistry(dir) {
|
|
26
|
+
const stored = readJsonOr(registryPath(dir), {}) ?? {};
|
|
27
|
+
return { accounts: stored.accounts ?? [], defaults: stored.defaults ?? {}, pools: stored.pools ?? [], migratedProviderKeys: stored.migratedProviderKeys ?? false };
|
|
28
|
+
}
|
|
29
|
+
export function saveRegistry(dir, registry) {
|
|
30
|
+
mkdirSync(dir, { recursive: true });
|
|
31
|
+
writeJson(registryPath(dir), registry);
|
|
32
|
+
}
|
|
33
|
+
export function loadState(dir, accountId) {
|
|
34
|
+
try {
|
|
35
|
+
return { ...emptyState(), ...(readJsonOr(statePath(dir, accountId), {}) ?? {}) };
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return emptyState();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function saveState(dir, accountId, state) {
|
|
42
|
+
writeJson(statePath(dir, accountId), state);
|
|
43
|
+
}
|
|
44
|
+
/** Replaces anything that looks like a token so audit lines and stored errors never hold secrets. */
|
|
45
|
+
export function scrub(text) {
|
|
46
|
+
const words = text.split(' ').map((word) => {
|
|
47
|
+
const bytes = Buffer.byteLength(word);
|
|
48
|
+
const tokenLike = bytes >= 24 && (word.match(/[A-Za-z0-9]/g)?.length ?? 0) * 10 >= bytes * 8;
|
|
49
|
+
return tokenLike || word.startsWith('sk-') || word.startsWith('sess-') ? '[redacted]' : word;
|
|
50
|
+
});
|
|
51
|
+
return takeChars(words.join(' '), 500);
|
|
52
|
+
}
|
|
53
|
+
export function audit(dir, accountId, action, detail) {
|
|
54
|
+
try {
|
|
55
|
+
mkdirSync(dir, { recursive: true });
|
|
56
|
+
appendLine(join(dir, 'audit.jsonl'), JSON.stringify({ at: now(), accountId, action, detail: scrub(detail) }));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// An audit line that cannot be written never fails the action it describes.
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** The newest audit entries first, optionally for one account. */
|
|
63
|
+
export function readAudit(dir, accountId, limit = 100) {
|
|
64
|
+
let text = '';
|
|
65
|
+
try {
|
|
66
|
+
text = readFileSync(join(dir, 'audit.jsonl'), 'utf8');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
text = '';
|
|
70
|
+
}
|
|
71
|
+
const entries = lines(text).flatMap((line) => {
|
|
72
|
+
try {
|
|
73
|
+
const entry = JSON.parse(line);
|
|
74
|
+
return entry && typeof entry.at === 'string' && typeof entry.action === 'string' && (!accountId || entry.accountId === accountId) ? [entry] : [];
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return entries.reverse().slice(0, Math.min(limit, 1000));
|
|
81
|
+
}
|
|
82
|
+
// ---- Health -----------------------------------------------------------------------------
|
|
83
|
+
function inFuture(timestamp) {
|
|
84
|
+
const time = timestamp ? Date.parse(timestamp) : Number.NaN;
|
|
85
|
+
return !Number.isNaN(time) && time > Date.now();
|
|
86
|
+
}
|
|
87
|
+
// How long a limit error that came without a reset time keeps the account limited. Providers
|
|
88
|
+
// report no limit windows, so nothing else would ever lift it.
|
|
89
|
+
const UNTIMED_LIMIT_ERROR_SECS = 3600;
|
|
90
|
+
export const isLimitCategory = (category) => category === 'rate_limited' || category === 'quota';
|
|
91
|
+
/**
|
|
92
|
+
* Whether a `rate_limited` or `quota` error still counts. With a reset time it counts until
|
|
93
|
+
* then; without one it counts for a short while after it was recorded.
|
|
94
|
+
*/
|
|
95
|
+
export function limitErrorActive(issue) {
|
|
96
|
+
if (issue.resetsAt)
|
|
97
|
+
return inFuture(issue.resetsAt);
|
|
98
|
+
const at = Date.parse(issue.at);
|
|
99
|
+
return !Number.isNaN(at) && Math.trunc((Date.now() - at) / 1000) < UNTIMED_LIMIT_ERROR_SECS;
|
|
100
|
+
}
|
|
101
|
+
export function deriveHealth(state) {
|
|
102
|
+
const limitedByWindow = state.limits.some((limit) => (limit.status === 'rejected' || (limit.usedPercent ?? 0) >= 100) && (!limit.resetsAt || inFuture(limit.resetsAt)));
|
|
103
|
+
const issue = state.lastError;
|
|
104
|
+
if (issue?.category === 'auth_expired')
|
|
105
|
+
return 'auth_expired';
|
|
106
|
+
if (issue && isLimitCategory(issue.category) && limitErrorActive(issue))
|
|
107
|
+
return 'limited';
|
|
108
|
+
if (state.signedIn === false)
|
|
109
|
+
return 'signed_out';
|
|
110
|
+
if (limitedByWindow)
|
|
111
|
+
return 'limited';
|
|
112
|
+
if (issue && !isLimitCategory(issue.category))
|
|
113
|
+
return 'error';
|
|
114
|
+
return state.signedIn === true ? 'ok' : 'unknown';
|
|
115
|
+
}
|
|
116
|
+
/** Read-modify-write on one account's state. Returns the previous health and the new state. */
|
|
117
|
+
export function updateState(dir, accountId, change) {
|
|
118
|
+
const state = loadState(dir, accountId);
|
|
119
|
+
const previous = state.health;
|
|
120
|
+
change(state);
|
|
121
|
+
state.health = deriveHealth(state);
|
|
122
|
+
saveState(dir, accountId, state);
|
|
123
|
+
return { previous, state };
|
|
124
|
+
}
|
|
125
|
+
// ---- Lookup and pinning -----------------------------------------------------------------
|
|
126
|
+
export function find(dir, accountId) {
|
|
127
|
+
const account = loadRegistry(dir).accounts.find((entry) => entry.id === accountId);
|
|
128
|
+
if (!account)
|
|
129
|
+
throw new HarnessError('account_required', "This session's account was removed.", 'Choose another account for it.');
|
|
130
|
+
return account;
|
|
131
|
+
}
|
|
132
|
+
const usable = (state) => state.health === 'ok' || state.health === 'unknown';
|
|
133
|
+
/**
|
|
134
|
+
* Chooses the account for a new session: the explicit account, else the pool's first usable
|
|
135
|
+
* account, else the default, else the first account. It never skips to another one silently.
|
|
136
|
+
*/
|
|
137
|
+
export function resolve(dir, accountId, poolId) {
|
|
138
|
+
const registry = loadRegistry(dir);
|
|
139
|
+
if (accountId) {
|
|
140
|
+
const account = find(dir, accountId);
|
|
141
|
+
if (account.provider !== PROVIDER)
|
|
142
|
+
throw invalid('That account belongs to another provider.');
|
|
143
|
+
return account;
|
|
144
|
+
}
|
|
145
|
+
if (poolId) {
|
|
146
|
+
const pool = registry.pools.find((entry) => entry.id === poolId);
|
|
147
|
+
if (!pool)
|
|
148
|
+
throw notFound('Pool');
|
|
149
|
+
const members = pool.accountIds.flatMap((id) => registry.accounts.find((account) => account.id === id) ?? []);
|
|
150
|
+
const ready = members.find((account) => usable(loadState(dir, account.id)));
|
|
151
|
+
if (ready)
|
|
152
|
+
return ready;
|
|
153
|
+
const resets = members.flatMap((account) => {
|
|
154
|
+
const state = loadState(dir, account.id);
|
|
155
|
+
return [...state.limits.map((limit) => limit.resetsAt), state.lastError?.resetsAt].filter((reset) => Boolean(reset));
|
|
156
|
+
});
|
|
157
|
+
const earliest = resets.sort(compareText)[0];
|
|
158
|
+
throw new HarnessError('account_unavailable', `Every account in ${pool.label} is unavailable.`, earliest ? `The earliest reset is ${earliest}.` : 'Reauthenticate an account in Accounts.');
|
|
159
|
+
}
|
|
160
|
+
const account = registry.accounts.find((entry) => entry.id === registry.defaults[PROVIDER]) ?? registry.accounts.find((entry) => entry.provider === PROVIDER);
|
|
161
|
+
if (!account)
|
|
162
|
+
throw new HarnessError('account_required', 'Add a Pi account first.', 'Open Accounts (⌘4) to sign in.');
|
|
163
|
+
return account;
|
|
164
|
+
}
|
|
165
|
+
/** The default account, if any exists. */
|
|
166
|
+
export function defaultAccount(dir) {
|
|
167
|
+
try {
|
|
168
|
+
return resolve(dir);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
export function summaryAuthentication(dir) {
|
|
175
|
+
const states = loadRegistry(dir).accounts.filter((account) => account.provider === PROVIDER).map((account) => loadState(dir, account.id));
|
|
176
|
+
if (states.some((state) => state.signedIn === true))
|
|
177
|
+
return 'authenticated';
|
|
178
|
+
return states.some((state) => state.signedIn === false) ? 'unauthenticated' : 'unknown';
|
|
179
|
+
}
|
|
180
|
+
export function overview(dir) {
|
|
181
|
+
const registry = loadRegistry(dir);
|
|
182
|
+
return {
|
|
183
|
+
accounts: registry.accounts.filter((account) => account.provider === PROVIDER).map((account) => ({ ...account, isDefault: registry.defaults[account.provider] === account.id, state: loadState(dir, account.id) })),
|
|
184
|
+
pools: registry.pools.filter((pool) => pool.provider === PROVIDER),
|
|
185
|
+
defaults: registry.defaults
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// ---- Changes ----------------------------------------------------------------------------
|
|
189
|
+
export function cleanLabel(label) {
|
|
190
|
+
const cleaned = label.trim();
|
|
191
|
+
if (!cleaned || charCount(cleaned) > 60)
|
|
192
|
+
throw invalid('Give the account a name of 1–60 characters.');
|
|
193
|
+
return cleaned;
|
|
194
|
+
}
|
|
195
|
+
export function addAccount(dir, label, authKind) {
|
|
196
|
+
if (authKind !== 'subscription' && authKind !== 'apiKey')
|
|
197
|
+
throw invalid('Unknown sign-in type.');
|
|
198
|
+
const account = { id: newId(), provider: PROVIDER, label: cleanLabel(label), authKind, credentialStore: 'keyring', createdAt: now() };
|
|
199
|
+
const registry = loadRegistry(dir);
|
|
200
|
+
registry.defaults[PROVIDER] ??= account.id;
|
|
201
|
+
registry.accounts.push(account);
|
|
202
|
+
saveRegistry(dir, registry);
|
|
203
|
+
return account;
|
|
204
|
+
}
|
|
205
|
+
export function renameAccount(dir, accountId, label) {
|
|
206
|
+
const cleaned = cleanLabel(label);
|
|
207
|
+
const registry = loadRegistry(dir);
|
|
208
|
+
const account = registry.accounts.find((entry) => entry.id === accountId);
|
|
209
|
+
if (!account)
|
|
210
|
+
throw notFound('Account');
|
|
211
|
+
account.label = cleaned;
|
|
212
|
+
saveRegistry(dir, registry);
|
|
213
|
+
}
|
|
214
|
+
export function setDefault(dir, accountId) {
|
|
215
|
+
const account = find(dir, accountId);
|
|
216
|
+
const registry = loadRegistry(dir);
|
|
217
|
+
registry.defaults[account.provider] = account.id;
|
|
218
|
+
saveRegistry(dir, registry);
|
|
219
|
+
return account;
|
|
220
|
+
}
|
|
221
|
+
/** Drops the account from the registry, its pools, and the default. Its folder and secrets are the caller's to remove. */
|
|
222
|
+
export function forgetAccount(dir, account) {
|
|
223
|
+
const registry = loadRegistry(dir);
|
|
224
|
+
registry.accounts = registry.accounts.filter((entry) => entry.id !== account.id);
|
|
225
|
+
if (registry.defaults[account.provider] === account.id) {
|
|
226
|
+
const next = registry.accounts.find((entry) => entry.provider === account.provider);
|
|
227
|
+
if (next)
|
|
228
|
+
registry.defaults[account.provider] = next.id;
|
|
229
|
+
else
|
|
230
|
+
delete registry.defaults[account.provider];
|
|
231
|
+
}
|
|
232
|
+
for (const pool of registry.pools)
|
|
233
|
+
pool.accountIds = pool.accountIds.filter((id) => id !== account.id);
|
|
234
|
+
saveRegistry(dir, registry);
|
|
235
|
+
}
|
|
236
|
+
export function savePool(dir, pool) {
|
|
237
|
+
const label = cleanLabel(pool.label);
|
|
238
|
+
const registry = loadRegistry(dir);
|
|
239
|
+
for (const id of pool.accountIds) {
|
|
240
|
+
const account = registry.accounts.find((entry) => entry.id === id);
|
|
241
|
+
if (!account)
|
|
242
|
+
throw notFound('Account');
|
|
243
|
+
if (account.provider !== PROVIDER)
|
|
244
|
+
throw invalid('A pool holds accounts of one provider.');
|
|
245
|
+
}
|
|
246
|
+
const next = { id: pool.id ? safeId(pool.id) : newId(), provider: PROVIDER, label, accountIds: [...pool.accountIds] };
|
|
247
|
+
registry.pools = [...registry.pools.filter((existing) => existing.id !== next.id), next];
|
|
248
|
+
saveRegistry(dir, registry);
|
|
249
|
+
return next;
|
|
250
|
+
}
|
|
251
|
+
export function removePool(dir, poolId) {
|
|
252
|
+
const registry = loadRegistry(dir);
|
|
253
|
+
registry.pools = registry.pools.filter((pool) => pool.id !== poolId);
|
|
254
|
+
saveRegistry(dir, registry);
|
|
255
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PLAN_RESEARCH_PLUGINS } from "./planResearch.js";
|
|
2
|
+
const RECALL = ['history_search', 'history_read', 'trajectory_search', 'trajectory_read', 'wiki_search', 'wiki_read', 'wiki_list', 'skill_load'];
|
|
3
|
+
const PROGRESS = ['todo_write', 'session_name'];
|
|
4
|
+
const WEB = ['web_search', 'web_fetch'];
|
|
5
|
+
export const BUILTIN_PROFILES = [
|
|
6
|
+
{
|
|
7
|
+
name: 'worker',
|
|
8
|
+
description: 'Carries out a well-defined change: reads, edits and writes files and runs commands.',
|
|
9
|
+
color: 'green',
|
|
10
|
+
instructions: [
|
|
11
|
+
'You carry out one piece of work from your brief, end to end.',
|
|
12
|
+
'- Read the code you change first and follow the conventions you find.',
|
|
13
|
+
'- Keep a todo list with todo_write when the brief has more than one step, and name your session with session_name.',
|
|
14
|
+
'- Make the change, then check it: run the relevant tests, type checks or commands.',
|
|
15
|
+
'- Stay inside the brief. If something outside it blocks you, stop and say so instead of widening the change.',
|
|
16
|
+
'- Finish with a short report: what you changed (files), how you checked it, and anything left open.'
|
|
17
|
+
].join('\n'),
|
|
18
|
+
tools: ['read', 'grep', 'find', 'ls', 'edit', 'write', 'bash', ...PROGRESS, ...RECALL, ...WEB],
|
|
19
|
+
plugins: null, variant: null, model: null, effort: null
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'explorer',
|
|
23
|
+
description: 'Finds and explains code, files and history without changing anything.',
|
|
24
|
+
color: 'cyan',
|
|
25
|
+
instructions: [
|
|
26
|
+
'You answer a question about the code, files or history in your brief. You never change anything.',
|
|
27
|
+
'- Search broadly first, then read the parts that matter.',
|
|
28
|
+
'- Keep a todo list with todo_write when the search has several parts, and name your session with session_name.',
|
|
29
|
+
'- Cite what you found as path:line.',
|
|
30
|
+
'- If the brief needs a tool you do not have (running tests or commands, editing), say so in your first line, then answer what you can by reading.',
|
|
31
|
+
'- Return conclusions, not file dumps: what you found, where, and how sure you are.'
|
|
32
|
+
].join('\n'),
|
|
33
|
+
tools: ['read', 'grep', 'find', 'ls', ...PROGRESS, ...RECALL, ...WEB],
|
|
34
|
+
plugins: [...PLAN_RESEARCH_PLUGINS], variant: null, model: null, effort: null
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'researcher',
|
|
38
|
+
description: 'Researches code, history and public sources without changing anything.',
|
|
39
|
+
color: 'purple',
|
|
40
|
+
instructions: [
|
|
41
|
+
'You investigate the bounded research question in your brief and return concise, evidence-backed findings to the parent.',
|
|
42
|
+
'- Use read-only repository and public-web sources. Never modify files, run commands, call connected apps, or ask the user.',
|
|
43
|
+
'- Prefer primary sources. Cite repository claims as path:line and external claims with source URLs.',
|
|
44
|
+
'- If the brief needs a tool you do not have (running tests or commands, editing), say so in your first line, then answer what you can by reading.',
|
|
45
|
+
'- Separate observed facts from inference, state uncertainty, and return only findings relevant to the brief; do not implement.'
|
|
46
|
+
].join('\n'),
|
|
47
|
+
tools: ['read', 'grep', 'find', 'ls', ...PROGRESS, ...RECALL, ...WEB],
|
|
48
|
+
plugins: [...PLAN_RESEARCH_PLUGINS], variant: null, model: null, effort: null
|
|
49
|
+
}
|
|
50
|
+
];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CapabilitySet } from "../capabilities/types.js";
|
|
2
|
+
import type { PluginDescriptor } from "../plugins/types.js";
|
|
3
|
+
import type { AgentProfile } from "./profiles.js";
|
|
4
|
+
export interface NarrowedCapabilities {
|
|
5
|
+
capabilities: CapabilitySet;
|
|
6
|
+
/** Tools the profile names that the parent does not have here. */
|
|
7
|
+
unavailable: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The parent's set narrowed by the profile's tools and plugins and by the tools the spawn call
|
|
11
|
+
* asked for. A required plugin always stays; a tool whose plugin was dropped goes with it.
|
|
12
|
+
*/
|
|
13
|
+
export declare function narrowForProfile(parent: CapabilitySet, profile: Pick<AgentProfile, 'tools' | 'plugins'> | null, requested: readonly string[] | undefined, descriptors: readonly PluginDescriptor[]): NarrowedCapabilities;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function pluginOf(id) {
|
|
2
|
+
return id.split('/')[0] ?? '';
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* The parent's set narrowed by the profile's tools and plugins and by the tools the spawn call
|
|
6
|
+
* asked for. A required plugin always stays; a tool whose plugin was dropped goes with it.
|
|
7
|
+
*/
|
|
8
|
+
export function narrowForProfile(parent, profile, requested, descriptors) {
|
|
9
|
+
let tools = parent.tools.filter((name) => !requested || requested.includes(name));
|
|
10
|
+
let contributions = parent.contributions;
|
|
11
|
+
const unavailable = profile?.tools?.filter((name) => !parent.tools.includes(name)) ?? [];
|
|
12
|
+
if (profile?.tools)
|
|
13
|
+
tools = tools.filter((name) => profile.tools.includes(name));
|
|
14
|
+
if (profile?.plugins) {
|
|
15
|
+
const allowed = new Set([...profile.plugins, ...descriptors.filter((descriptor) => descriptor.required).map((descriptor) => descriptor.id)]);
|
|
16
|
+
contributions = contributions.filter((id) => allowed.has(pluginOf(id)));
|
|
17
|
+
const owner = new Map();
|
|
18
|
+
for (const descriptor of descriptors)
|
|
19
|
+
for (const tool of descriptor.tools ?? [])
|
|
20
|
+
owner.set(tool.name, descriptor.id);
|
|
21
|
+
for (const id of parent.contributions) {
|
|
22
|
+
const [plugin, kind, name] = id.split('/');
|
|
23
|
+
if (kind === 'tool' && plugin && name)
|
|
24
|
+
owner.set(name, plugin);
|
|
25
|
+
}
|
|
26
|
+
tools = tools.filter((name) => !owner.has(name) || allowed.has(owner.get(name)));
|
|
27
|
+
}
|
|
28
|
+
return { capabilities: { ...parent, tools, contributions }, unavailable };
|
|
29
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CapabilitySet } from "../capabilities/types.js";
|
|
2
|
+
import type { PluginDescriptor } from "../plugins/types.js";
|
|
3
|
+
import type { AgentProfile } from "./profiles.js";
|
|
4
|
+
export declare const PLAN_RESEARCH_TOOLS: ReadonlySet<string>;
|
|
5
|
+
export declare const PLAN_RESEARCH_PLUGINS: readonly string[];
|
|
6
|
+
export declare const PLAN_RESEARCH_EVIDENCE_TOOLS: ReadonlySet<string>;
|
|
7
|
+
/** Capability snapshot needed to tell whether a profile can research in this particular run. */
|
|
8
|
+
export interface PlanResearchContext {
|
|
9
|
+
frozenTools: readonly string[];
|
|
10
|
+
contributions: readonly string[];
|
|
11
|
+
descriptors: readonly PluginDescriptor[];
|
|
12
|
+
}
|
|
13
|
+
export interface PlanResearchEligibility {
|
|
14
|
+
eligible: boolean;
|
|
15
|
+
refusal: string | null;
|
|
16
|
+
/** The exact safe child snapshot to launch when eligible. */
|
|
17
|
+
capabilities: CapabilitySet;
|
|
18
|
+
unavailableTools: string[];
|
|
19
|
+
}
|
|
20
|
+
/** Whether the profile's explicit allowlists are restricted to read-only research. */
|
|
21
|
+
export declare function planResearchProfile(profile: Pick<AgentProfile, 'name' | 'tools' | 'plugins'> | null | undefined): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Evaluate the same effective intersection used for launch, including tool ownership removed by
|
|
24
|
+
* profile plugin narrowing. An explicit request is a strict override; omission inherits the safe
|
|
25
|
+
* profile/parent intersection.
|
|
26
|
+
*/
|
|
27
|
+
export declare function planResearchEligibility(profile: Pick<AgentProfile, 'name' | 'tools' | 'plugins'> | null | undefined, context: PlanResearchContext, requested?: readonly string[]): PlanResearchEligibility;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { narrowForProfile } from "./narrow.js";
|
|
2
|
+
export const PLAN_RESEARCH_TOOLS = new Set([
|
|
3
|
+
'read', 'grep', 'find', 'ls', 'todo_write', 'session_name',
|
|
4
|
+
'history_search', 'history_read', 'trajectory_search', 'trajectory_read',
|
|
5
|
+
'wiki_entrypoint', 'wiki_search', 'wiki_read', 'wiki_list', 'memory_facts', 'skill_load',
|
|
6
|
+
'web_search', 'web_fetch'
|
|
7
|
+
]);
|
|
8
|
+
export const PLAN_RESEARCH_PLUGINS = ['history', 'variant', 'web', 'wiki'];
|
|
9
|
+
export const PLAN_RESEARCH_EVIDENCE_TOOLS = new Set([
|
|
10
|
+
'read', 'grep', 'find', 'ls', 'history_search', 'trajectory_search', 'wiki_search', 'web_search', 'web_fetch'
|
|
11
|
+
]);
|
|
12
|
+
function profileRefusal(profile) {
|
|
13
|
+
if (!profile)
|
|
14
|
+
return 'Plan-mode delegation requires a named, eligible read-only research profile.';
|
|
15
|
+
if (!Array.isArray(profile.tools) || profile.tools.length === 0) {
|
|
16
|
+
return `Profile ${profile.name} must declare an explicit tools allowlist for plan-mode research.`;
|
|
17
|
+
}
|
|
18
|
+
const unsafeTools = profile.tools.filter(name => !PLAN_RESEARCH_TOOLS.has(name));
|
|
19
|
+
if (unsafeTools.length) {
|
|
20
|
+
return `Profile ${profile.name} includes non-research tools: ${[...new Set(unsafeTools)].join(', ')}. Use a profile whose tools are all plan research tools.`;
|
|
21
|
+
}
|
|
22
|
+
if (!profile.tools.some(name => PLAN_RESEARCH_EVIDENCE_TOOLS.has(name))) {
|
|
23
|
+
return `Profile ${profile.name} must allow at least one read-only research evidence tool.`;
|
|
24
|
+
}
|
|
25
|
+
if (!Array.isArray(profile.plugins)) {
|
|
26
|
+
return `Profile ${profile.name} must declare an explicit plugin allowlist for plan-mode research.`;
|
|
27
|
+
}
|
|
28
|
+
const unsafePlugins = profile.plugins.filter(name => !PLAN_RESEARCH_PLUGINS.includes(name));
|
|
29
|
+
if (unsafePlugins.length) {
|
|
30
|
+
return `Profile ${profile.name} includes non-research plugins: ${[...new Set(unsafePlugins)].join(', ')}. Use only the plan research plugins: ${PLAN_RESEARCH_PLUGINS.join(', ')}.`;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/** Whether the profile's explicit allowlists are restricted to read-only research. */
|
|
35
|
+
export function planResearchProfile(profile) {
|
|
36
|
+
return profileRefusal(profile) === null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Evaluate the same effective intersection used for launch, including tool ownership removed by
|
|
40
|
+
* profile plugin narrowing. An explicit request is a strict override; omission inherits the safe
|
|
41
|
+
* profile/parent intersection.
|
|
42
|
+
*/
|
|
43
|
+
export function planResearchEligibility(profile, context, requested) {
|
|
44
|
+
const empty = { version: 1, tools: [], connectors: [], contributions: [] };
|
|
45
|
+
const profileProblem = profileRefusal(profile);
|
|
46
|
+
if (profileProblem)
|
|
47
|
+
return { eligible: false, refusal: profileProblem, capabilities: empty, unavailableTools: [] };
|
|
48
|
+
const parent = {
|
|
49
|
+
version: 1,
|
|
50
|
+
tools: [...context.frozenTools],
|
|
51
|
+
connectors: [],
|
|
52
|
+
contributions: [...context.contributions]
|
|
53
|
+
};
|
|
54
|
+
const narrowed = narrowForProfile(parent, profile, requested, context.descriptors);
|
|
55
|
+
const capabilities = {
|
|
56
|
+
...narrowed.capabilities,
|
|
57
|
+
tools: narrowed.capabilities.tools.filter(name => PLAN_RESEARCH_TOOLS.has(name)),
|
|
58
|
+
connectors: []
|
|
59
|
+
};
|
|
60
|
+
if (requested) {
|
|
61
|
+
const effective = new Set(capabilities.tools);
|
|
62
|
+
const incompatible = [...new Set(requested.filter(name => !PLAN_RESEARCH_TOOLS.has(name)
|
|
63
|
+
|| !profile.tools.includes(name)
|
|
64
|
+
|| !context.frozenTools.includes(name)
|
|
65
|
+
|| !effective.has(name)))];
|
|
66
|
+
if (incompatible.length) {
|
|
67
|
+
return {
|
|
68
|
+
eligible: false,
|
|
69
|
+
refusal: `Plan-mode tools override contains incompatible tool(s): ${incompatible.join(', ')}. Omit \`tools\` to inherit the selected profile's safe research intersection, or retry with only tools allowed by that profile, available in this parent run, and in the plan research set.`,
|
|
70
|
+
capabilities,
|
|
71
|
+
unavailableTools: narrowed.unavailable
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!capabilities.tools.some(name => PLAN_RESEARCH_EVIDENCE_TOOLS.has(name))) {
|
|
76
|
+
const refusal = requested
|
|
77
|
+
? `The tools override [${requested.join(', ')}] leaves no available research evidence tool for profile ${profile.name}. Omit \`tools\` to inherit the safe intersection, or retry with an available evidence tool from this profile.`
|
|
78
|
+
: `Profile ${profile.name} has no read-only research evidence tool after intersecting its allowlists with this run's frozen capabilities and plugin contributions. Choose a profile with an available evidence tool.`;
|
|
79
|
+
return { eligible: false, refusal, capabilities, unavailableTools: narrowed.unavailable };
|
|
80
|
+
}
|
|
81
|
+
return { eligible: true, refusal: null, capabilities, unavailableTools: narrowed.unavailable };
|
|
82
|
+
}
|