@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,60 @@
|
|
|
1
|
+
/** Whose usage is counted. The terminal resolves the ids, never the client. */
|
|
2
|
+
export type UsageScope = 'session' | 'account' | 'project' | 'all';
|
|
3
|
+
export type UsagePeriod = 'today' | '7d' | '30d' | 'all';
|
|
4
|
+
export interface UsageTotals {
|
|
5
|
+
requests: number;
|
|
6
|
+
inputTokens: number;
|
|
7
|
+
cacheReadTokens: number;
|
|
8
|
+
cacheWriteTokens: number;
|
|
9
|
+
outputTokens: number;
|
|
10
|
+
reasoningTokens: number;
|
|
11
|
+
/** Reported and estimated cost; null when nothing could be priced. */
|
|
12
|
+
costUsd: number | null;
|
|
13
|
+
/** The part of `costUsd` that came from list rates, not from the provider. */
|
|
14
|
+
estimatedCostUsd: number;
|
|
15
|
+
/** Requests no provider priced and no catalogue rate could price. */
|
|
16
|
+
unpricedRequests: number;
|
|
17
|
+
avgTtftMs: number | null;
|
|
18
|
+
avgDurationMs: number | null;
|
|
19
|
+
/** Cache reads as a share of all input tokens; null without input. */
|
|
20
|
+
cacheHitPercent: number | null;
|
|
21
|
+
}
|
|
22
|
+
export interface UsageRow extends UsageTotals {
|
|
23
|
+
key: string;
|
|
24
|
+
label: string;
|
|
25
|
+
detail: string | null;
|
|
26
|
+
}
|
|
27
|
+
export interface UsageDay {
|
|
28
|
+
day: string;
|
|
29
|
+
requests: number;
|
|
30
|
+
inputTokens: number;
|
|
31
|
+
cacheReadTokens: number;
|
|
32
|
+
outputTokens: number;
|
|
33
|
+
costUsd: number | null;
|
|
34
|
+
}
|
|
35
|
+
export interface UsageSummary {
|
|
36
|
+
scope: UsageScope;
|
|
37
|
+
period: UsagePeriod;
|
|
38
|
+
/** The first instant counted, or null when everything is. */
|
|
39
|
+
from: string | null;
|
|
40
|
+
to: string;
|
|
41
|
+
timezoneOffsetMinutes: number;
|
|
42
|
+
generatedAt: string;
|
|
43
|
+
totals: UsageTotals;
|
|
44
|
+
byDay: UsageDay[];
|
|
45
|
+
byModel: UsageRow[];
|
|
46
|
+
byProvider: UsageRow[];
|
|
47
|
+
byAccount: UsageRow[];
|
|
48
|
+
bySession: UsageRow[];
|
|
49
|
+
/** At least one breakdown stopped at its row cap. */
|
|
50
|
+
truncated: boolean;
|
|
51
|
+
lastIndexedAt: string | null;
|
|
52
|
+
}
|
|
53
|
+
/** The filter a scope resolves to, after the service looks up the ids it was asked for. */
|
|
54
|
+
export interface UsageFilter {
|
|
55
|
+
session: string | null;
|
|
56
|
+
account: string | null;
|
|
57
|
+
project: string | null;
|
|
58
|
+
}
|
|
59
|
+
export declare const USAGE_PERIODS: readonly UsagePeriod[];
|
|
60
|
+
export declare const USAGE_SCOPES: readonly UsageScope[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// What `/usage:analysis` shows: token, cost and latency totals read from the derived usage ledger.
|
|
2
|
+
// One record answers one question about one scope and period; no raw run events reach a surface.
|
|
3
|
+
export const USAGE_PERIODS = ['today', '7d', '30d', 'all'];
|
|
4
|
+
export const USAGE_SCOPES = ['session', 'account', 'project', 'all'];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Variant } from "./surface.js";
|
|
2
|
+
export declare const KINDS: readonly ["skills", "prompts", "rules"];
|
|
3
|
+
export type ComponentKind = (typeof KINDS)[number];
|
|
4
|
+
export interface ComponentItem {
|
|
5
|
+
/** `<kind>/<name>`, stable across edits. */
|
|
6
|
+
id: string;
|
|
7
|
+
kind: string;
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
path: string;
|
|
11
|
+
/** Set on an item that ships with the application. */
|
|
12
|
+
builtin?: true;
|
|
13
|
+
}
|
|
14
|
+
export interface SkillBundleInput {
|
|
15
|
+
name: string;
|
|
16
|
+
files: {
|
|
17
|
+
path: string;
|
|
18
|
+
content: string;
|
|
19
|
+
encoding: 'utf8' | 'base64';
|
|
20
|
+
}[];
|
|
21
|
+
}
|
|
22
|
+
/** The folders built-in items are read from, each laid out like `registry/`. Later folders win. */
|
|
23
|
+
export declare function configureBuiltins(directories: readonly string[]): void;
|
|
24
|
+
/** The name and description of a skill or prompt file anywhere on disk, read the way a registry item is. */
|
|
25
|
+
export declare function describeFile(file: string): {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
} | null;
|
|
29
|
+
export declare function list(root: string): ComponentItem[];
|
|
30
|
+
/** Whether a library skill or rule already has a corresponding entry in a variant. */
|
|
31
|
+
export declare function isInVariant(root: string, variant: Variant, id: string): boolean;
|
|
32
|
+
export declare function addToVariant(root: string, variant: Variant, id: string): Variant;
|
|
33
|
+
/** Imports inert registry resources. Prompts and rules are single UTF-8 Markdown documents. */
|
|
34
|
+
export declare function importItems(root: string, kind: ComponentKind, bundles: SkillBundleInput[]): ComponentItem[];
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// The component library: skills, rules and prompts kept as files under `<data>/registry/`, and
|
|
2
|
+
// any built-in ones an application ships in folders laid out the same way. Nothing here reaches
|
|
3
|
+
// a session by itself: a person adds an item to a variant, where it becomes a skill (c6) or
|
|
4
|
+
// guardrail text (c2). The Hub installs into this library.
|
|
5
|
+
import { lstatSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { basename, dirname, join } from 'node:path';
|
|
7
|
+
import { invalid, notFound } from "../core/errors.js";
|
|
8
|
+
import * as frontmatter from "../core/frontmatter.js";
|
|
9
|
+
import { isDir, safeRelative } from "../core/fs.js";
|
|
10
|
+
import { compareText, lines, takeChars } from "../core/text.js";
|
|
11
|
+
import { GUARDRAILS, PI_SURFACE } from "./surface.js";
|
|
12
|
+
import { autotrigger } from "./variant.js";
|
|
13
|
+
export const KINDS = ['skills', 'prompts', 'rules'];
|
|
14
|
+
const MAX_SKILL_BUNDLES = 20;
|
|
15
|
+
const MAX_SKILL_FILES = 100;
|
|
16
|
+
const MAX_SKILL_IMPORT_BYTES = 10 * 1024 * 1024;
|
|
17
|
+
let builtinDirs = [];
|
|
18
|
+
/** The folders built-in items are read from, each laid out like `registry/`. Later folders win. */
|
|
19
|
+
export function configureBuiltins(directories) {
|
|
20
|
+
builtinDirs = [...directories];
|
|
21
|
+
}
|
|
22
|
+
const kindDir = (root, kind) => join(root, 'registry', kind);
|
|
23
|
+
function itemFrom(kind, stem, file) {
|
|
24
|
+
let text;
|
|
25
|
+
try {
|
|
26
|
+
text = readFileSync(file, 'utf8');
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const parsed = frontmatter.parse(text);
|
|
32
|
+
const name = parsed?.front.name;
|
|
33
|
+
const description = parsed?.front.description;
|
|
34
|
+
// A frontmatter block whose name or description is not text is treated as no frontmatter.
|
|
35
|
+
const usable = parsed !== null && (name === undefined || name === null || typeof name === 'string') && (description === undefined || description === null || typeof description === 'string');
|
|
36
|
+
const body = usable ? parsed.body : text;
|
|
37
|
+
return {
|
|
38
|
+
id: `${kind}/${stem}`,
|
|
39
|
+
kind,
|
|
40
|
+
name: usable && typeof name === 'string' ? name : stem.replace(/[-_]/g, ' '),
|
|
41
|
+
description: usable && typeof description === 'string' ? description : takeChars(lines(body).find((line) => line.trim() && !line.startsWith('#')) ?? '', 160),
|
|
42
|
+
path: file
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const stemOf = (name) => (name.lastIndexOf('.') > 0 ? name.slice(0, name.lastIndexOf('.')) : name);
|
|
46
|
+
/** The name and description of a skill or prompt file anywhere on disk, read the way a registry item is. */
|
|
47
|
+
export function describeFile(file) {
|
|
48
|
+
const stem = basename(file) === 'SKILL.md' ? basename(dirname(file)) : stemOf(basename(file));
|
|
49
|
+
const item = itemFrom('', stem, file);
|
|
50
|
+
return item && { name: item.name, description: item.description };
|
|
51
|
+
}
|
|
52
|
+
function itemsIn(directory) {
|
|
53
|
+
const items = [];
|
|
54
|
+
for (const kind of KINDS) {
|
|
55
|
+
let names;
|
|
56
|
+
try {
|
|
57
|
+
names = readdirSync(join(directory, kind));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
for (const name of names) {
|
|
63
|
+
const path = join(directory, kind, name);
|
|
64
|
+
const stem = stemOf(name);
|
|
65
|
+
if (stem.startsWith('.'))
|
|
66
|
+
continue;
|
|
67
|
+
const file = isDir(path) ? join(path, 'SKILL.md') : name.endsWith('.md') ? path : null;
|
|
68
|
+
const item = file && itemFrom(kind, stem, file);
|
|
69
|
+
if (item)
|
|
70
|
+
items.push(item);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return items;
|
|
74
|
+
}
|
|
75
|
+
export function list(root) {
|
|
76
|
+
const items = new Map();
|
|
77
|
+
for (const directory of builtinDirs)
|
|
78
|
+
for (const item of itemsIn(directory))
|
|
79
|
+
items.set(item.id, { ...item, builtin: true });
|
|
80
|
+
for (const item of itemsIn(join(root, 'registry')))
|
|
81
|
+
items.set(item.id, item);
|
|
82
|
+
return [...items.values()].sort((left, right) => compareText(left.id, right.id));
|
|
83
|
+
}
|
|
84
|
+
/** A variant with one library item added: a skill as `skills/<name>/` with its files, a rule as guardrail text. */
|
|
85
|
+
function skillName(item) {
|
|
86
|
+
const slug = basename(item.path) === 'SKILL.md' ? basename(dirname(item.path)) : basename(item.path).replace(/\.md$/, '');
|
|
87
|
+
return slug.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^[-_]+|-+$/g, '') || 'skill';
|
|
88
|
+
}
|
|
89
|
+
/** Whether a library skill or rule already has a corresponding entry in a variant. */
|
|
90
|
+
export function isInVariant(root, variant, id) {
|
|
91
|
+
const item = list(root).find((candidate) => candidate.id === id);
|
|
92
|
+
if (!item)
|
|
93
|
+
return false;
|
|
94
|
+
if (item.kind === 'skills')
|
|
95
|
+
return variant['skills/' + skillName(item) + '/SKILL.md'] !== undefined;
|
|
96
|
+
if (item.kind === 'rules') {
|
|
97
|
+
const text = readFileSync(item.path, 'utf8');
|
|
98
|
+
const body = (frontmatter.parse(text)?.body ?? text).trim();
|
|
99
|
+
return Boolean(body) && (variant[GUARDRAILS] ?? '').includes(body);
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
export function addToVariant(root, variant, id) {
|
|
104
|
+
const item = list(root).find((candidate) => candidate.id === id);
|
|
105
|
+
if (!item)
|
|
106
|
+
throw notFound('That library item');
|
|
107
|
+
const next = { ...variant };
|
|
108
|
+
const text = readFileSync(item.path, 'utf8');
|
|
109
|
+
const body = (frontmatter.parse(text)?.body ?? text).trim();
|
|
110
|
+
if (item.kind === 'rules') {
|
|
111
|
+
const current = (next[GUARDRAILS] ?? '').trimEnd();
|
|
112
|
+
next[GUARDRAILS] = `${current ? `${current}\n\n` : ''}${body}\n`;
|
|
113
|
+
return next;
|
|
114
|
+
}
|
|
115
|
+
if (item.kind !== 'skills')
|
|
116
|
+
throw invalid('Only skills and rules can be added to a harness; prompts stay in the library.');
|
|
117
|
+
const name = skillName(item);
|
|
118
|
+
next[`skills/${name}/SKILL.md`] = `---\nname: ${name}\ndescription: ${(item.description || `the ${name} workflow applies`).replace(/\n/g, ' ')}\n---\n${body}\n`;
|
|
119
|
+
// A folder skill's helpers travel with it.
|
|
120
|
+
const folder = dirname(item.path);
|
|
121
|
+
if (basename(item.path) === 'SKILL.md' && isDir(join(folder, 'scripts'))) {
|
|
122
|
+
for (const file of readdirSync(join(folder, 'scripts')))
|
|
123
|
+
next[`skills/${name}/scripts/${file}`] = readFileSync(join(folder, 'scripts', file), 'utf8');
|
|
124
|
+
}
|
|
125
|
+
autotrigger(PI_SURFACE, next);
|
|
126
|
+
return next;
|
|
127
|
+
}
|
|
128
|
+
/** Imports inert registry resources. Prompts and rules are single UTF-8 Markdown documents. */
|
|
129
|
+
export function importItems(root, kind, bundles) {
|
|
130
|
+
if (!Array.isArray(bundles) || bundles.length === 0 || bundles.length > MAX_SKILL_BUNDLES) {
|
|
131
|
+
throw invalid(`Import between 1 and ${MAX_SKILL_BUNDLES} skills at a time.`);
|
|
132
|
+
}
|
|
133
|
+
const directory = kindDir(root, kind);
|
|
134
|
+
mkdirSync(directory, { recursive: true });
|
|
135
|
+
const existing = new Set(list(root).map((item) => item.id));
|
|
136
|
+
const seen = new Set();
|
|
137
|
+
let totalBytes = 0;
|
|
138
|
+
const prepared = bundles.map((bundle) => {
|
|
139
|
+
if (!bundle || typeof bundle.name !== 'string' || !Array.isArray(bundle.files) || bundle.files.length === 0 || bundle.files.length > MAX_SKILL_FILES) {
|
|
140
|
+
throw invalid('Each skill needs a name and a bounded list of files.');
|
|
141
|
+
}
|
|
142
|
+
const name = bundle.name.trim();
|
|
143
|
+
if (name.length > 64)
|
|
144
|
+
throw invalid('Use a skill name with at most 64 letters or numbers.');
|
|
145
|
+
const slug = Array.from(name.toLowerCase(), (character) => (/^[a-z0-9]$/.test(character) ? character : '-')).join('').split('-').filter(Boolean).join('-');
|
|
146
|
+
if (!slug || slug.length > 64)
|
|
147
|
+
throw invalid('Use a skill name with at most 64 letters or numbers.');
|
|
148
|
+
const id = `${kind}/${slug}`;
|
|
149
|
+
if (existing.has(id) || seen.has(id))
|
|
150
|
+
throw invalid(`The skill “${name}” already exists.`);
|
|
151
|
+
try {
|
|
152
|
+
lstatSync(join(directory, kind === 'skills' ? slug : `${slug}.md`));
|
|
153
|
+
throw invalid(`The skill “${name}” already exists.`);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
if (error.code !== 'ENOENT')
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
seen.add(id);
|
|
160
|
+
const files = new Map();
|
|
161
|
+
for (const file of bundle.files) {
|
|
162
|
+
if (!file || typeof file.path !== 'string' || file.path.length > 240 || typeof file.content !== 'string' || !['utf8', 'base64'].includes(file.encoding)) {
|
|
163
|
+
throw invalid(`The skill “${name}” contains an invalid file.`);
|
|
164
|
+
}
|
|
165
|
+
let relative;
|
|
166
|
+
try {
|
|
167
|
+
relative = safeRelative(file.path);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
throw invalid(`The skill “${name}” contains a path outside its folder.`);
|
|
171
|
+
}
|
|
172
|
+
if (relative.includes('\0') || relative.split('/').some((part) => part.startsWith('.') || part.includes(':'))) {
|
|
173
|
+
throw invalid(`The skill “${name}” contains an unsupported file path.`);
|
|
174
|
+
}
|
|
175
|
+
const portablePath = relative.normalize('NFC').toLowerCase();
|
|
176
|
+
if ([...files.keys()].some((path) => path.normalize('NFC').toLowerCase() === portablePath))
|
|
177
|
+
throw invalid(`The skill “${name}” contains a duplicate file path.`);
|
|
178
|
+
let byteLength;
|
|
179
|
+
if (file.encoding === 'base64') {
|
|
180
|
+
if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(file.content)) {
|
|
181
|
+
throw invalid(`The file “${relative}” is not valid base64.`);
|
|
182
|
+
}
|
|
183
|
+
if (file.content.length > Math.ceil(MAX_SKILL_IMPORT_BYTES / 3) * 4)
|
|
184
|
+
throw invalid('The skill import is larger than 10 MiB.');
|
|
185
|
+
byteLength = Math.floor(file.content.length * 3 / 4) - (file.content.endsWith('==') ? 2 : file.content.endsWith('=') ? 1 : 0);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
byteLength = Buffer.byteLength(file.content, 'utf8');
|
|
189
|
+
}
|
|
190
|
+
totalBytes += byteLength;
|
|
191
|
+
if (totalBytes > MAX_SKILL_IMPORT_BYTES)
|
|
192
|
+
throw invalid('The skill import is larger than 10 MiB.');
|
|
193
|
+
const bytes = file.encoding === 'base64' ? Buffer.from(file.content, 'base64') : Buffer.from(file.content, 'utf8');
|
|
194
|
+
if (file.encoding === 'base64' && bytes.toString('base64') !== file.content)
|
|
195
|
+
throw invalid(`The file “${relative}” is not valid base64.`);
|
|
196
|
+
files.set(relative, bytes);
|
|
197
|
+
}
|
|
198
|
+
if (kind === 'skills' && !files.has('SKILL.md'))
|
|
199
|
+
throw invalid(`The skill “${name}” must include SKILL.md at its root.`);
|
|
200
|
+
if (kind !== 'skills' && (bundle.files.length !== 1 || bundle.files[0].encoding !== 'utf8' || bundle.files[0].path !== 'CONTENT.md'))
|
|
201
|
+
throw invalid('A prompt or rule must contain one UTF-8 CONTENT.md file.');
|
|
202
|
+
return { name, slug, files };
|
|
203
|
+
});
|
|
204
|
+
const staging = mkdtempSync(join(directory, '.agent-template-import-'));
|
|
205
|
+
const installed = [];
|
|
206
|
+
try {
|
|
207
|
+
for (const bundle of prepared) {
|
|
208
|
+
const target = join(staging, bundle.slug);
|
|
209
|
+
for (const [relative, bytes] of bundle.files) {
|
|
210
|
+
const path = join(target, ...relative.split('/'));
|
|
211
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
212
|
+
writeFileSync(path, bytes, { flag: 'wx' });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
for (const bundle of prepared) {
|
|
216
|
+
const target = join(directory, kind === 'skills' ? bundle.slug : `${bundle.slug}.md`);
|
|
217
|
+
renameSync(kind === 'skills' ? join(staging, bundle.slug) : join(staging, bundle.slug, 'CONTENT.md'), target);
|
|
218
|
+
installed.push(target);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
for (const target of installed)
|
|
223
|
+
rmSync(target, { recursive: true, force: true });
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
rmSync(staging, { recursive: true, force: true });
|
|
228
|
+
}
|
|
229
|
+
return list(root);
|
|
230
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type Variant } from "./surface.js";
|
|
2
|
+
import type { VariantTrust } from "./trust.js";
|
|
3
|
+
/** Where the variant's own sections sit among the application's (identity 10, role 20). */
|
|
4
|
+
export declare const VARIANT_SECTION_ORDER: {
|
|
5
|
+
readonly system: 25;
|
|
6
|
+
readonly guardrails: 40;
|
|
7
|
+
readonly memory: 45;
|
|
8
|
+
readonly subagents: 64;
|
|
9
|
+
readonly scripts: 66;
|
|
10
|
+
};
|
|
11
|
+
/** Which variant a session runs. */
|
|
12
|
+
export type VariantChoice =
|
|
13
|
+
/** A scope's head, or one of its versions. */
|
|
14
|
+
{
|
|
15
|
+
scope: string;
|
|
16
|
+
version?: string | null;
|
|
17
|
+
}
|
|
18
|
+
/** A variant on disk, such as a refinement candidate. It is read, never written. */
|
|
19
|
+
| {
|
|
20
|
+
dir: string;
|
|
21
|
+
scope?: string | null;
|
|
22
|
+
};
|
|
23
|
+
export interface SubagentDefinition {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
instructions: string;
|
|
27
|
+
}
|
|
28
|
+
export interface Materialised {
|
|
29
|
+
scope: string | null;
|
|
30
|
+
/** The fingerprint of the variant that ran. */
|
|
31
|
+
fingerprint: string;
|
|
32
|
+
/** The variant's folder; scripts and skills are read from it in place. */
|
|
33
|
+
dir: string;
|
|
34
|
+
/** The variant's files, path → text. */
|
|
35
|
+
files: Variant;
|
|
36
|
+
sections: {
|
|
37
|
+
id: string;
|
|
38
|
+
title: string;
|
|
39
|
+
body: string;
|
|
40
|
+
order: number;
|
|
41
|
+
}[];
|
|
42
|
+
/** The tool guidance, added after the tool groups. */
|
|
43
|
+
toolGuidance: string;
|
|
44
|
+
skillPaths: string[];
|
|
45
|
+
extensionPaths: string[];
|
|
46
|
+
/** Plugin files that did not load because their code is not trusted. */
|
|
47
|
+
untrustedPlugins: string[];
|
|
48
|
+
subagents: SubagentDefinition[];
|
|
49
|
+
}
|
|
50
|
+
/** Finds the variant a choice names. */
|
|
51
|
+
export declare function resolve(root: string, choice: VariantChoice): {
|
|
52
|
+
scope: string | null;
|
|
53
|
+
dir: string;
|
|
54
|
+
fingerprint: string;
|
|
55
|
+
variant: Variant;
|
|
56
|
+
};
|
|
57
|
+
export interface MaterialiseOptions {
|
|
58
|
+
trust?: VariantTrust | null;
|
|
59
|
+
/** Load improver-written plugin code without trust (refinement probes, when the person allowed it). */
|
|
60
|
+
probeCode?: boolean;
|
|
61
|
+
/** Whether the session can start subagents; when it cannot, c5 is not described. */
|
|
62
|
+
subagents?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export declare function materialise(root: string, choice: VariantChoice, options?: MaterialiseOptions): Materialised;
|
|
65
|
+
/** One subagent's definition from the variant a run used. */
|
|
66
|
+
export declare function subagentOf(dir: string, name: string): SubagentDefinition | null;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Turning a variant into what a Pi session receives: always-on prompt sections (c1–c4),
|
|
2
|
+
// the skills folder Pi advertises natively (c6), the scripts folder named in the prompt (c7),
|
|
3
|
+
// subagent definitions (c5), and plugin extensions that are trusted (c8).
|
|
4
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { invalid } from "../core/errors.js";
|
|
7
|
+
import * as store from "./store.js";
|
|
8
|
+
import { GUARDRAILS, MEMORY, PI_SURFACE, SYSTEM_PROMPT, TOOL_GUIDANCE, patterns } from "./surface.js";
|
|
9
|
+
import { readVariant } from "./variant.js";
|
|
10
|
+
/** Where the variant's own sections sit among the application's (identity 10, role 20). */
|
|
11
|
+
export const VARIANT_SECTION_ORDER = { system: 25, guardrails: 40, memory: 45, subagents: 64, scripts: 66 };
|
|
12
|
+
function frontmatter(text, field) {
|
|
13
|
+
const m = new RegExp(`^${field}:\\s*(.+)$`, 'm').exec(text.slice(0, 600));
|
|
14
|
+
return m?.[1]?.trim() ?? null;
|
|
15
|
+
}
|
|
16
|
+
function bodyAfterFrontmatter(text) {
|
|
17
|
+
const m = /^---\n[\s\S]*?\n---\n?/.exec(text);
|
|
18
|
+
return (m ? text.slice(m[0].length) : text).trim();
|
|
19
|
+
}
|
|
20
|
+
/** Finds the variant a choice names. */
|
|
21
|
+
export function resolve(root, choice) {
|
|
22
|
+
if ('dir' in choice) {
|
|
23
|
+
if (!existsSync(choice.dir))
|
|
24
|
+
throw invalid('That variant folder does not exist.');
|
|
25
|
+
const variant = readVariant(PI_SURFACE, choice.dir);
|
|
26
|
+
return { scope: choice.scope ?? null, dir: choice.dir, fingerprint: store.fingerprint(variant), variant };
|
|
27
|
+
}
|
|
28
|
+
const fp = choice.version ?? store.head(root, choice.scope)?.fingerprint;
|
|
29
|
+
if (!fp)
|
|
30
|
+
throw invalid(`The variant '${choice.scope}' has no version yet.`);
|
|
31
|
+
const dir = store.versionPath(root, choice.scope, fp);
|
|
32
|
+
return { scope: choice.scope, dir, fingerprint: fp, variant: store.readVersion(root, choice.scope, fp) };
|
|
33
|
+
}
|
|
34
|
+
export function materialise(root, choice, options = {}) {
|
|
35
|
+
const { scope, dir, fingerprint, variant } = resolve(root, choice);
|
|
36
|
+
const r = patterns(PI_SURFACE);
|
|
37
|
+
const sections = [];
|
|
38
|
+
const add = (id, title, body, order) => {
|
|
39
|
+
if (body?.trim())
|
|
40
|
+
sections.push({ id, title, body: body.trim(), order });
|
|
41
|
+
};
|
|
42
|
+
add('system', 'Instructions', variant[SYSTEM_PROMPT], VARIANT_SECTION_ORDER.system);
|
|
43
|
+
add('guardrails', 'Guardrails', variant[GUARDRAILS], VARIANT_SECTION_ORDER.guardrails);
|
|
44
|
+
add('memory', 'Memory', variant[MEMORY], VARIANT_SECTION_ORDER.memory);
|
|
45
|
+
const subagents = [];
|
|
46
|
+
for (const rel of Object.keys(variant).sort()) {
|
|
47
|
+
const m = r.subagent.exec(rel);
|
|
48
|
+
if (!m)
|
|
49
|
+
continue;
|
|
50
|
+
const text = variant[rel];
|
|
51
|
+
subagents.push({ name: m[1], description: frontmatter(text, 'description') ?? '', instructions: bodyAfterFrontmatter(text) });
|
|
52
|
+
}
|
|
53
|
+
if (subagents.length && options.subagents !== false) {
|
|
54
|
+
add('subagents', 'Subagents', `Start one with spawn_subagent and agent set to its name. Each works in its own context and returns text.\n${subagents.map((agent) => `- ${agent.name} — ${agent.description}`).join('\n')}`, VARIANT_SECTION_ORDER.subagents);
|
|
55
|
+
}
|
|
56
|
+
const scripts = Object.keys(variant).filter((rel) => r.script.test(rel)).map((rel) => rel.slice('scripts/'.length)).sort();
|
|
57
|
+
if (scripts.length) {
|
|
58
|
+
add('scripts', 'Scripts', `Your helper scripts are in ${join(dir, 'scripts')}: ${scripts.join(', ')}. Run a .py one with python3 and a .mjs one with node, giving its full path. When instructions say \`scripts/<name>\`, they mean this folder.`, VARIANT_SECTION_ORDER.scripts);
|
|
59
|
+
}
|
|
60
|
+
const skillPaths = existsSync(join(dir, 'skills')) && readdirSync(join(dir, 'skills')).length ? [join(dir, 'skills')] : [];
|
|
61
|
+
const extensionPaths = [];
|
|
62
|
+
const untrustedPlugins = [];
|
|
63
|
+
for (const rel of Object.keys(variant).filter((path) => r.plugin.test(path)).sort()) {
|
|
64
|
+
const trusted = options.trust?.has((options.trust.review({ [rel]: variant[rel] })[0]?.hash) ?? '') ?? false;
|
|
65
|
+
if (trusted || options.probeCode)
|
|
66
|
+
extensionPaths.push(join(dir, rel));
|
|
67
|
+
else
|
|
68
|
+
untrustedPlugins.push(rel);
|
|
69
|
+
}
|
|
70
|
+
return { scope, fingerprint, dir, files: variant, sections, toolGuidance: (variant[TOOL_GUIDANCE] ?? '').trim(), skillPaths, extensionPaths, untrustedPlugins, subagents };
|
|
71
|
+
}
|
|
72
|
+
/** One subagent's definition from the variant a run used. */
|
|
73
|
+
export function subagentOf(dir, name) {
|
|
74
|
+
if (!/^[a-z0-9][a-z0-9_-]*$/.test(name))
|
|
75
|
+
return null;
|
|
76
|
+
const path = join(dir, 'sub_agents', name, 'AGENT.md');
|
|
77
|
+
if (!existsSync(path))
|
|
78
|
+
return null;
|
|
79
|
+
const text = readFileSync(path, 'utf8');
|
|
80
|
+
return { name, description: frontmatter(text, 'description') ?? '', instructions: bodyAfterFrontmatter(text) };
|
|
81
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** `harnesses/<scope>/versions/<fp>/tree/` and `library/<scope>/<area>/harnesses/<task>/harness/`. */
|
|
2
|
+
export declare function migrateVariantLayout(root: string): string[];
|
|
3
|
+
/** The device-local file of trusted plugin code. */
|
|
4
|
+
export declare function migrateTrustFile(stateDir: string): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Moves state written before the foundation/variant naming (PROP-0009) to its new names. Every
|
|
2
|
+
// step renames and never overwrites, so running it again, or beside new data, changes nothing.
|
|
3
|
+
import { existsSync, readdirSync, renameSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
function move(from, to, moved) {
|
|
6
|
+
if (!existsSync(from) || existsSync(to))
|
|
7
|
+
return;
|
|
8
|
+
renameSync(from, to);
|
|
9
|
+
moved.push(to);
|
|
10
|
+
}
|
|
11
|
+
function folders(path) {
|
|
12
|
+
try {
|
|
13
|
+
return readdirSync(path, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** `harnesses/<scope>/versions/<fp>/tree/` and `library/<scope>/<area>/harnesses/<task>/harness/`. */
|
|
20
|
+
export function migrateVariantLayout(root) {
|
|
21
|
+
const moved = [];
|
|
22
|
+
move(join(root, 'harnesses'), join(root, 'variants'), moved);
|
|
23
|
+
for (const scope of folders(join(root, 'variants'))) {
|
|
24
|
+
const versions = join(root, 'variants', scope, 'versions');
|
|
25
|
+
for (const fingerprint of folders(versions))
|
|
26
|
+
move(join(versions, fingerprint, 'tree'), join(versions, fingerprint, 'variant'), moved);
|
|
27
|
+
}
|
|
28
|
+
for (const scope of folders(join(root, 'library'))) {
|
|
29
|
+
for (const area of folders(join(root, 'library', scope))) {
|
|
30
|
+
const base = join(root, 'library', scope, area);
|
|
31
|
+
move(join(base, 'harnesses'), join(base, 'variants'), moved);
|
|
32
|
+
for (const task of folders(join(base, 'variants')))
|
|
33
|
+
move(join(base, 'variants', task, 'harness'), join(base, 'variants', task, 'variant'), moved);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return moved;
|
|
37
|
+
}
|
|
38
|
+
/** The device-local file of trusted plugin code. */
|
|
39
|
+
export function migrateTrustFile(stateDir) {
|
|
40
|
+
move(join(stateDir, 'tree-plugin-trust.json'), join(stateDir, 'variant-plugin-trust.json'), []);
|
|
41
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Variant } from "./surface.js";
|
|
2
|
+
export interface SeedInput {
|
|
3
|
+
/** The caller whose rules, skills and memory blocks to carry over. */
|
|
4
|
+
agentId?: string | null;
|
|
5
|
+
projectId?: string | null;
|
|
6
|
+
/** The caller's own instructions. */
|
|
7
|
+
instructions?: string;
|
|
8
|
+
}
|
|
9
|
+
/** The legacy pieces for a caller, before they are put together. */
|
|
10
|
+
export declare function legacyPieces(root: string, input: SeedInput): {
|
|
11
|
+
rules: string[];
|
|
12
|
+
skills: Record<string, string>;
|
|
13
|
+
memory: string[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Builds a valid seed variant. Rules become guardrails, blocks become memory, and every skill gets a
|
|
17
|
+
* trigger line. When the always-on text would be over the cap, memory is shortened first, then
|
|
18
|
+
* guardrails; nothing else is dropped.
|
|
19
|
+
*/
|
|
20
|
+
export declare function seedVariant(root: string, input: SeedInput): Variant;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// A first variant for a caller that had none, built from what shaped it before harness
|
|
2
|
+
// variants existed: its instructions (c1), the rules switched on for it (c2), its memory blocks and
|
|
3
|
+
// the person's own block (c3), and the skills switched on for it (c6). Read straight from the
|
|
4
|
+
// files an earlier harness left in the data root; nothing there is changed.
|
|
5
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import * as frontmatter from "../core/frontmatter.js";
|
|
8
|
+
import * as attachments from "../plugins/attachments.js";
|
|
9
|
+
import { GUARDRAILS, MEMORY, PI_SURFACE, SYSTEM_PROMPT, TOOL_GUIDANCE } from "./surface.js";
|
|
10
|
+
import { alwaysOnText, autotrigger, validate } from "./variant.js";
|
|
11
|
+
function body(text) {
|
|
12
|
+
return (frontmatter.parse(text)?.body ?? text).trim();
|
|
13
|
+
}
|
|
14
|
+
function read(path) {
|
|
15
|
+
try {
|
|
16
|
+
return readFileSync(path, 'utf8');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function folders(dir) {
|
|
23
|
+
try {
|
|
24
|
+
return readdirSync(dir).filter((name) => !name.startsWith('.')).sort();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Where an earlier Wiki kept memory blocks: in place, or where they were moved aside. */
|
|
31
|
+
function blocksDir(root) {
|
|
32
|
+
if (existsSync(join(root, 'wiki', 'blocks')))
|
|
33
|
+
return join(root, 'wiki', 'blocks');
|
|
34
|
+
const moved = folders(join(root, 'legacy')).filter((name) => name.startsWith('wiki-')).reverse();
|
|
35
|
+
for (const name of moved)
|
|
36
|
+
if (existsSync(join(root, 'legacy', name, 'blocks')))
|
|
37
|
+
return join(root, 'legacy', name, 'blocks');
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
function skillName(stem) {
|
|
41
|
+
return stem.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^[-_]+|-+$/g, '').slice(0, 64) || 'skill';
|
|
42
|
+
}
|
|
43
|
+
/** The legacy pieces for a caller, before they are put together. */
|
|
44
|
+
export function legacyPieces(root, input) {
|
|
45
|
+
const choices = attachments.load(root);
|
|
46
|
+
const scope = { agentId: input.agentId ?? null, projectId: input.projectId ?? null };
|
|
47
|
+
const on = (id) => attachments.attached(choices, [id], scope, false);
|
|
48
|
+
const rules = [];
|
|
49
|
+
const rulesDir = join(root, 'registry', 'rules');
|
|
50
|
+
for (const name of folders(rulesDir)) {
|
|
51
|
+
const stem = name.replace(/\.md$/, '');
|
|
52
|
+
const path = name.endsWith('.md') ? join(rulesDir, name) : join(rulesDir, name, 'SKILL.md');
|
|
53
|
+
const text = read(path);
|
|
54
|
+
if (text && on(`rules/${stem}`))
|
|
55
|
+
rules.push(body(text));
|
|
56
|
+
}
|
|
57
|
+
const skills = {};
|
|
58
|
+
const skillsDir = join(root, 'registry', 'skills');
|
|
59
|
+
for (const name of folders(skillsDir)) {
|
|
60
|
+
const stem = name.replace(/\.md$/, '');
|
|
61
|
+
let path = join(skillsDir, name);
|
|
62
|
+
try {
|
|
63
|
+
if (statSync(path).isDirectory())
|
|
64
|
+
path = join(path, 'SKILL.md');
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const text = read(path);
|
|
70
|
+
if (!text || !on(`skills/${stem}`))
|
|
71
|
+
continue;
|
|
72
|
+
const slug = skillName(stem);
|
|
73
|
+
const parsed = frontmatter.parse(text);
|
|
74
|
+
const description = typeof parsed?.front.description === 'string' && parsed.front.description.trim() ? parsed.front.description.trim() : `the ${slug} workflow applies`;
|
|
75
|
+
skills[`skills/${slug}/SKILL.md`] = `---\nname: ${slug}\ndescription: ${description.replace(/\n/g, ' ')}\n---\n${body(text)}\n`;
|
|
76
|
+
}
|
|
77
|
+
const memory = [];
|
|
78
|
+
const blocks = blocksDir(root);
|
|
79
|
+
if (blocks) {
|
|
80
|
+
const user = read(join(blocks, 'shared', 'user.md'));
|
|
81
|
+
if (user && body(user))
|
|
82
|
+
memory.push(`## About the person\n\n${body(user)}`);
|
|
83
|
+
if (input.agentId && /^[A-Za-z0-9_-]+$/.test(input.agentId)) {
|
|
84
|
+
for (const [file, title] of [['persona.md', 'Persona'], ['notes.md', 'Notes']]) {
|
|
85
|
+
const text = read(join(blocks, 'agents', input.agentId, file));
|
|
86
|
+
if (text && body(text))
|
|
87
|
+
memory.push(`## ${title}\n\n${body(text)}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { rules, skills, memory };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Builds a valid seed variant. Rules become guardrails, blocks become memory, and every skill gets a
|
|
95
|
+
* trigger line. When the always-on text would be over the cap, memory is shortened first, then
|
|
96
|
+
* guardrails; nothing else is dropped.
|
|
97
|
+
*/
|
|
98
|
+
export function seedVariant(root, input) {
|
|
99
|
+
const pieces = legacyPieces(root, input);
|
|
100
|
+
const variant = {
|
|
101
|
+
[SYSTEM_PROMPT]: (input.instructions ?? '').trim() ? `${input.instructions.trim()}\n` : '',
|
|
102
|
+
[GUARDRAILS]: pieces.rules.length ? `${pieces.rules.join('\n\n')}\n` : '',
|
|
103
|
+
[MEMORY]: pieces.memory.length ? `${pieces.memory.join('\n\n')}\n` : '',
|
|
104
|
+
[TOOL_GUIDANCE]: '',
|
|
105
|
+
...pieces.skills
|
|
106
|
+
};
|
|
107
|
+
const cap = PI_SURFACE.alwaysOnMax - 2_000;
|
|
108
|
+
for (const rel of [MEMORY, GUARDRAILS, SYSTEM_PROMPT]) {
|
|
109
|
+
const over = alwaysOnText(PI_SURFACE, variant).length - cap;
|
|
110
|
+
if (over > 0)
|
|
111
|
+
variant[rel] = `${variant[rel].slice(0, Math.max(0, variant[rel].length - over - 40)).trimEnd()}\n\n(Shortened when this harness was created.)\n`;
|
|
112
|
+
}
|
|
113
|
+
autotrigger(PI_SURFACE, variant);
|
|
114
|
+
validate(PI_SURFACE, variant, { compileScripts: false });
|
|
115
|
+
return variant;
|
|
116
|
+
}
|