@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,505 @@
|
|
|
1
|
+
# 02 Sessions and runs
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
A *session* is a native Pi conversation. A *run* is one tracked execution interval of a session:
|
|
6
|
+
one turn from a request to an outcome. The harness opens Pi for each run with a pinned account,
|
|
7
|
+
a pinned variant, a frozen capability set, a compiled prompt and a gated tool list, then
|
|
8
|
+
records everything the run does as validated events.
|
|
9
|
+
|
|
10
|
+
## Components
|
|
11
|
+
|
|
12
|
+
| Type | Module | Role |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `Sessions` | `sessions/sessions.ts` | Starts a turn: `run(input: SessionRunInput)`, `provide(provider)`. Builds the gate. |
|
|
15
|
+
| `runTurn`, `piSessionFactory`, `loadResources` | `sessions/runner.ts` | Opens the Pi session, loads resources in a fixed order, streams events, settles the run. |
|
|
16
|
+
| compaction checkpoint | `sessions/compactionCheckpoint.ts` | Restores the active request's bounded goal, todo list and plan instructions to model context after compaction. |
|
|
17
|
+
| `RunRegistry`, `ActiveRun` | `sessions/registry.ts` | Live runs: `emit`, `requestApproval`, `requestAnswer(s)`, `onInterrupt`, `onSteer`, `finish`; `listen` for observers. |
|
|
18
|
+
| run store functions | `sessions/runStore.ts` | `saveRun`, `updateRun`, `persistEvent`, `appendEvent`, `readEvents`, `markInterruptedRuns`, `runFamily`, `listRuns`. |
|
|
19
|
+
| `RunRecord`, `RunEvent`, schemas | `sessions/contracts.ts` | The one contract every session shares. |
|
|
20
|
+
| `Subagents` | `sessions/subagentService.ts` | `spawn`, `wait`, `results`, delivery receipts, recovery. |
|
|
21
|
+
| `SideQuestions` | `sessions/sideQuestions.ts` | Starts, reads and interrupts independent tool-free runs using bounded context from the main conversation (PROP-0019). |
|
|
22
|
+
| plan mode | `sessions/planMode.ts` | `planSection`, `planRefusal`, `PLAN_READ_ONLY_TOOLS`. |
|
|
23
|
+
| `Approvals` | `sessions/approvals.ts` | Standing approvals (page 07). |
|
|
24
|
+
| history selection | `sessions/history.ts` | `selectHistory`: which native history file a run continues. |
|
|
25
|
+
| `runIndex`, `pricing`, `reasoningSummaries`, `lineageJoin`, `extensionUi` | `sessions/` | Run listing, cost, provider summaries, parent/child joins, extension UI as run events. |
|
|
26
|
+
|
|
27
|
+
## Runtime flow of `sessions.run`
|
|
28
|
+
|
|
29
|
+
1. Validate the input (`run.id`, `sessionId`, `text`; an `initialBashCommand` only on a new
|
|
30
|
+
interactive user turn).
|
|
31
|
+
2. Resolve a continuation when requested; reuse its pinned root or derive one from its recorded
|
|
32
|
+
working directory. For a new run, resolve and pin the root from the effective `cwd` (after
|
|
33
|
+
worktree selection). Select the native history (`selectHistory`) and resolve the account
|
|
34
|
+
(`accounts.resolve`).
|
|
35
|
+
3. Resolve the caller's capabilities, intersect with any narrower requested set, and **freeze**
|
|
36
|
+
them for the run (`capabilities/runSnapshot.ts::freezeRun`).
|
|
37
|
+
4. **Pin** the variant once (`variant/materialise.ts::materialise`).
|
|
38
|
+
5. `saveRun` with status `queued`, the account, `harnessScope` and `harnessVersion`.
|
|
39
|
+
6. Compile the prompt (`sessionLaunch`, page 04): a stable system prompt and an optional context
|
|
40
|
+
update.
|
|
41
|
+
7. `runs.start` the live run; build the tool list (broker, Harness tools including read-only
|
|
42
|
+
`get_capabilities`, the plan-eligible `ask_user`, subagent tools, provider tools) and the gate.
|
|
43
|
+
8. Open Pi through the `SessionFactory`, with resources loaded in order: disk extensions chosen by
|
|
44
|
+
the harness, variant extensions, inline extensions, and the gate last.
|
|
45
|
+
9. Record `nativeSessionId`, register the run with `Subagents`, start `runTurn`, and return
|
|
46
|
+
`{ runId, nativeSessionId }`. The reply streams as run events.
|
|
47
|
+
|
|
48
|
+
A session that cannot open ends its run as `failed` and returns `nativeSessionId: null`.
|
|
49
|
+
|
|
50
|
+
## Contracts
|
|
51
|
+
|
|
52
|
+
- **Run status:** `queued`, `running`, `waiting_for_approval`, `waiting_for_input`, `interrupted`,
|
|
53
|
+
`completed`, `failed`. The first four are active (`ACTIVE_STATUSES`).
|
|
54
|
+
- **Run events** (`runEventTypeSchema`): `started`, `context.snapshot`, `message.delta`,
|
|
55
|
+
`message.completed`, `message.steered`, `tool.started`, `tool.completed`, `tool.refused`, `retry.started`,
|
|
56
|
+
`retry.ended`, `compaction.started`, `compaction.ended`, `approval.requested`,
|
|
57
|
+
`approval.resolved`, `question.requested`, `question.answered`, `extension.notice`,
|
|
58
|
+
`reaction.added`, `agent.message`, `todo.updated`, `checkpoint`, `heartbeat`, `artifact.added`, `file.changed`, `usage.updated`,
|
|
59
|
+
`account.status`, `status.changed`, `failed`, `completed`. Each has a payload schema in
|
|
60
|
+
`runEventPayloadSchemas`.
|
|
61
|
+
- **Stop codes.** `terminalCode` is nullable for legacy records and identifies a recorded outcome independently of `terminalReason`. Structured sessions record `completed`, `user_abort`, `slice_budget`, `compaction_thrash`, `provider_error`, or `failed`; recovery can record `harness_restart`, `stalled` or `owner_gone`. Other shared codes include `terminal_attention`, `terminal_closed` and `parent_stopped`. Interrupted `status.changed` events may carry the code; failure codes map to a stop code. Legacy events without a code remain unknown.
|
|
62
|
+
- **Queued-message dispatch.** Both front ends retain Pi's normal delivery behavior after success. Only an explicit user stop may release messages still queued when a reply is interrupted: send the oldest unconsumed steer first, then the oldest follow-up. Retry events are not settlement boundaries; provider failure, a retry that ultimately fails, and non-user interruption leave queued messages parked. A settled interruption alone is not proof of user intent.
|
|
63
|
+
- **Compaction evidence.** Structured compaction starts include the latest known context tokens and window when available; ends include Pi’s `tokensBefore` when supplied. Tokens after compaction remain unknown unless reported.
|
|
64
|
+
- **Workspace root** (`RunRecord.workspaceRoot`) is the canonical root whose filesystem effects
|
|
65
|
+
native writes and default-scope Bash may modify: the nearest Git repository or worktree above its
|
|
66
|
+
effective working directory, otherwise that canonical directory. New runs pin it; continuations
|
|
67
|
+
reuse it. Older records may omit it, in which case a continuation derives it from the recorded
|
|
68
|
+
`workingDirectory`. The filesystem root itself cannot be selected as a workspace, because it
|
|
69
|
+
would collapse the write boundary. Native writes revalidate the target and atomically replace it
|
|
70
|
+
inside an OS write scope; Bash scans for external hard-link aliases and runs in the same pinned
|
|
71
|
+
boundary (page 07).
|
|
72
|
+
- **Workspace snapshot** (`RunRecord.workspaceSnapshot`, PROP-0052). Before the agent acts on a turn
|
|
73
|
+
a person typed (a structured session's own turn, or a terminal turn with text), the harness
|
|
74
|
+
records `{ kind: 'git-snapshot', repo, commit, omitted? }` when the working folder is in a git
|
|
75
|
+
repository: a commit of tracked edits, deletions and bounded untracked files (5 MB each, 100 MB,
|
|
76
|
+
10,000 files; `omitted` counts the rest) made through a throwaway index. The working tree, the
|
|
77
|
+
real index, HEAD and refs are not touched. A snapshot that fails or takes longer than two seconds
|
|
78
|
+
records nothing. Refinement replays the turn from it (page 05).
|
|
79
|
+
- **Question sketches** (PROP-0025, ADR-0026; originally PROP-0024, ADR-0025). `question.requested` may include `uiSketch: true`
|
|
80
|
+
and `sketch` text on each choice. If enabled, every choice must have a sketch; otherwise no
|
|
81
|
+
choice may carry one. A sketch is 1–24 LF-separated lines, at most 80 printable ASCII characters
|
|
82
|
+
per line (1,943 bytes maximum), with at least one visible character. Tabs, CR, other controls,
|
|
83
|
+
escape sequences and non-ASCII text are rejected. Whitespace, including interior blank lines and
|
|
84
|
+
trailing spaces, is preserved literally in the persisted request event. Tool guidance requests
|
|
85
|
+
detailed contextual UI wireframes on a fixed 80-column canvas, with actual panel/table structure
|
|
86
|
+
and neighboring elements consistent across alternatives. The terminal pads shorter rows to this
|
|
87
|
+
canvas for display; the schema still permits sketches shorter than 80 columns, so generation
|
|
88
|
+
quality remains guidance rather than a validation guarantee. Old events remain valid without a data
|
|
89
|
+
rewrite; readers with the old bounds must update before accepting larger sketches.
|
|
90
|
+
`question.answered` and `QuestionAnswer` are unchanged.
|
|
91
|
+
- **Todo list** (PROP-0006, renamed by PROP-0045): `todo.updated` carries the whole list the model
|
|
92
|
+
last wrote with `todo_write`, `{ items: { text, status: pending | in_progress | completed }[] }`, at
|
|
93
|
+
most 50 items. The latest event replaces every earlier one; `todoOf(events)` reads it. The
|
|
94
|
+
pre-rename `checklist.updated` is still read so old runs keep their list, and is never written.
|
|
95
|
+
- **Run details observations.** Optional `loadedSkills` records successful Harness `skill_load` calls during the run, not skill availability or native file reads. Optional `activatedPlugins` records observed activated extension plugin identities only when the loader can account for them; omission means unknown, including historical runs and unsupported boundaries. Empty arrays mean the corresponding observation found none.
|
|
96
|
+
- **`RunRecord`** fields are listed in `sessions/contracts.ts`. `mode`, `harness`, `sessionType`,
|
|
97
|
+
`worktreeId`, `attachmentCount`, `exitCode`, `handoffId` and `trigger` belong to the
|
|
98
|
+
application: stored and returned, and only `mode` and `trigger` are read.
|
|
99
|
+
- **Triggers the harness reads:** `user` (may carry an initial Bash command), `probe` and
|
|
100
|
+
`improver` (refinement, page 05), `reflection` (lessons, page 08). Runs with the last three are
|
|
101
|
+
never asked about: the gate refuses what would need a person, and they receive no question tool.
|
|
102
|
+
Only attended plan runs may newly receive `ask_user`.
|
|
103
|
+
- **Side questions** (PROP-0019). `sideQuestions.start` creates a separate run with trigger and
|
|
104
|
+
relation `side-question`, a fresh native history, the selected account/model/effort, no variant,
|
|
105
|
+
and an empty frozen capability set. It combines the parent's persisted effective prompt and
|
|
106
|
+
public run events with the surface's visible transcript and selected references, after redaction
|
|
107
|
+
and fixed bounds. Hidden reasoning and attachment bytes are omitted. A supplied parent run must
|
|
108
|
+
belong to the supplied parent session. `sideQuestions.read` and `interrupt` require the side run's
|
|
109
|
+
session id. The run is not a subagent or continuation and never changes the parent.
|
|
110
|
+
- **Subagents.** `spawn_subagent` / `wait_subagents` for the model; `subagents.spawn`, `wait`,
|
|
111
|
+
`results` for the host (`sessions.spawnSubagent` is a compatibility alias). Child runs have
|
|
112
|
+
`relation: 'subagent'` and `parentRunId`. Nesting defaults to 1, at most 3 (`subagentDepth`).
|
|
113
|
+
A run also starts only a few children: by default at most four distinct child conversations, at
|
|
114
|
+
most two `worker`, three `explorer`, one of any other named profile and one with no profile. The
|
|
115
|
+
parent's `subagents` option overrides them (`maxChildren`, `maxByProfile`, `maxOther`,
|
|
116
|
+
`maxUnprofiled`), clamped to 0–50. The count covers this run and the runs it was continued from
|
|
117
|
+
(`resumedFromRunId`), so a work-slice continuation keeps the budget; it counts distinct
|
|
118
|
+
conversations, so continuing a stopped child uses no new slot, while a child whose startup
|
|
119
|
+
failed still counts. A concurrent spawn reserves its slot before it launches. A refused spawn is
|
|
120
|
+
an `invalid_request` whose message tells the model to do the work itself; no child run is
|
|
121
|
+
created.
|
|
122
|
+
The child's record carries `title`, the short name the parent gave it (PROP-0030).
|
|
123
|
+
`spawn_subagent { continue: <runId> }` (`subagents.spawn { continue }`) continues a child that
|
|
124
|
+
stopped before finishing as a new child run with `continueFrom`. It reopens the first link's
|
|
125
|
+
history folder and keeps the earlier child's session id, profile, title, account, variant version
|
|
126
|
+
and frozen capability set, which must still lie within the parent's; `agent` and `tools` are
|
|
127
|
+
refused with it, and the newest link of a chain is the one continued (ADR-0043). Children an
|
|
128
|
+
earlier reply left stopped are delivered before the next reply's first request, each with a
|
|
129
|
+
note that it can be continued; a stopped child that was continued is reported through its
|
|
130
|
+
continuation. Every run record carries the launch `model` and `effort`, superseded by the model
|
|
131
|
+
the session opened with.
|
|
132
|
+
- **Agent profiles** (PROP-0029). `agent` names a profile: built-in (`worker`, `explorer`),
|
|
133
|
+
`<data root>/agents/<name>.md`, `<project>/.xingular/agents/<name>.md`, or a c5 definition of
|
|
134
|
+
the parent's variant, later sources winning (`agents/profiles.ts`). A switched-on package's
|
|
135
|
+
profiles (page 06) then fill names nobody else took; the run resolves them once at start into
|
|
136
|
+
`packageProfiles`, and its children resolve their profiles from that list. A profile narrows the
|
|
137
|
+
child's tools and plugins (`agents/narrow.ts`), may choose its variant, model and effort, and
|
|
138
|
+
frames it with a "Your role" section. The child's record carries `profile`; the spawn result
|
|
139
|
+
carries `agent` and any `unavailableTools`. `main` is reserved for the main agent's row: no
|
|
140
|
+
profile file or variant definition may take it. A run that may spawn lists every profile in its
|
|
141
|
+
`subagents` section.
|
|
142
|
+
- **Plan mode** (`plan: true`). The stable system prompt is unchanged. An attended plan run may
|
|
143
|
+
include `ask_user` and `spawn_subagent` / `wait_subagents`, subject to the caller's frozen
|
|
144
|
+
capabilities. Delegation is limited to named profiles whose effective tool and plugin allowlists
|
|
145
|
+
qualify for read-only research; the child inherits plan mode and cannot write, run commands, ask
|
|
146
|
+
the user, use connectors or spawn children. The gate refuses unsafe calls before approvals and the
|
|
147
|
+
subagent service rechecks profile eligibility before launch. Other calls must be in
|
|
148
|
+
`PLAN_READ_ONLY_TOOLS` (including `get_capabilities` when frozen for the run), be provider tools
|
|
149
|
+
marked `readOnly`, or be explicitly classified by `planModeSafe`. Model-issued `bash` is allowed
|
|
150
|
+
and runs in the sandbox's read-only scope: no writes except a discarded temp folder, no network,
|
|
151
|
+
nothing that widens the scope; the gate refuses `outside` requests and `PLAN_BASH_DENIED` commands
|
|
152
|
+
(PROP-0043). The dynamic plan instruction asks the model to check whether the requested work
|
|
153
|
+
already exists before designing it, to name the evidence and stop when it does, and says that a
|
|
154
|
+
person's instruction not to plan outranks the mode's output shape. It also
|
|
155
|
+
requires an opening `Goal` or `Summary`, evidence-grounded findings when useful, and task-scaled
|
|
156
|
+
steps and verification. A small fix stays concise without omitting its
|
|
157
|
+
outcome or check; cross-cutting work uses ordered steps. It encourages questions about material
|
|
158
|
+
user-owned decisions and important assumptions after discovery, including when a default exists.
|
|
159
|
+
For unresolved substantive UI or TUI layout and interaction choices, it defaults to contextual
|
|
160
|
+
`uiSketch` questions with meaningful alternatives; routine, specified, delegated or nonvisual
|
|
161
|
+
decisions do not require sketches. Both the dynamic section and compaction checkpoint have room
|
|
162
|
+
for the complete bounded plan instruction.
|
|
163
|
+
**Outcome contract (ADR-0077, superseding the repair criterion of ADR-0055, ADR-0057 and
|
|
164
|
+
ADR-0058).** Classify a
|
|
165
|
+
new final reply as exactly one of `plan_ready`, `blocked`, `no_plan`, or `invalid`. `plan_ready`
|
|
166
|
+
uses one complete `<proposed_plan>` block and is the only outcome that offers a plan card and
|
|
167
|
+
Implement. When a required user decision cannot be obtained because `ask_user` is unavailable,
|
|
168
|
+
`blocked` uses one complete nonempty `<plan_blocked>` block to report the blocker without asking
|
|
169
|
+
a free-text question or inventing the decision; it
|
|
170
|
+
is not a plan and never offers Implement. `no_plan` is an ordinary reply with no outcome block: it
|
|
171
|
+
says there is nothing to design, because the work already exists, the person declined to plan, or
|
|
172
|
+
no decision is needed. It is a valid conclusion, not a formatting failure, and it offers no card,
|
|
173
|
+
notice or warning and no second request. New final replies must not use `<plan_clarification>`
|
|
174
|
+
or free-text questions as a clarification channel. A block the model started and left unbalanced,
|
|
175
|
+
empty, duplicated or in conflict is `invalid`, not a guessed plan; tags inside fenced or inline
|
|
176
|
+
code are text, not outcomes. When clarification is needed and `ask_user`
|
|
177
|
+
is available, it blocks the active run for the answer, then that same run continues research and
|
|
178
|
+
planning.
|
|
179
|
+
|
|
180
|
+
Server and terminal use the same outcome classification and one bounded, hidden repair turn
|
|
181
|
+
in the same eligible attended top-level plan run, only for `invalid`. The repair asks for the
|
|
182
|
+
declared block to be finished or for the statement that there is nothing to plan; it does not
|
|
183
|
+
invent decisions or change the substance, and it may call `ask_user` when
|
|
184
|
+
available, blocking the active run for the answer. It is not a new user request, does not bypass
|
|
185
|
+
the plan gate, and is never attempted for a
|
|
186
|
+
plan-research child, command, probe, improver, reflection, other unattended run, interruption,
|
|
187
|
+
error or work-slice termination. A second invalid result ends repair: retain the original reply,
|
|
188
|
+
complete the run with a warning and no Implement choice. Preserve the existing plan tag, card,
|
|
189
|
+
run events, tool permissions and cached prompt boundary; old transcripts, including legacy
|
|
190
|
+
clarification blocks and untagged replies, remain intact and visible, not silently promoted to
|
|
191
|
+
plans. Do not require clients to understand a new event type.
|
|
192
|
+
- **Compaction checkpoint** (PROP-0033, ADR-0032, ADR-0067). After a compaction that happens
|
|
193
|
+
during an active run, its model context receives a bounded, ephemeral checkpoint with the current
|
|
194
|
+
user request and the todo list or applicable plan instructions as they were at that compaction,
|
|
195
|
+
when either is available to restore. A run that starts from already-compacted history gets none:
|
|
196
|
+
its request, todo and plan are in live history. The checkpoint is built once per compaction and
|
|
197
|
+
re-added to each request at the same place, directly after the compaction summary, so each
|
|
198
|
+
request stays the previous one plus new items and provider caching keeps working. Later
|
|
199
|
+
`todo_write` calls in history supersede its list. Its state is cleared when the run settles or the
|
|
200
|
+
session branch changes. The message changes no
|
|
201
|
+
tools, permissions, run events or native history. An interrupted run still uses the durable
|
|
202
|
+
todo list and normal continuation path.
|
|
203
|
+
- **Continuation** (PROP-0007). `continuationOf(root, runId, sessionDir?)` (`runs.continuation`)
|
|
204
|
+
says whether a stopped run can be continued: `resumable`, a `reason` when not (`not_found`,
|
|
205
|
+
`active`, `completed`, `no_history`, `history_missing`), the exact native history to reopen,
|
|
206
|
+
the pinned account, variant version and capability set, the todo list, unanswered approvals and
|
|
207
|
+
questions, the last tool and whether it finished, and subagents that did not finish.
|
|
208
|
+
`SessionRunInput.continueFrom` starts a **new** run from it: it reopens that history, records
|
|
209
|
+
`resumedFromRunId`, pins the same account, variant version and capability set (anything different
|
|
210
|
+
fails with `continuation_mismatch`; a run that cannot be continued fails with
|
|
211
|
+
`continuation_unavailable`). If the earlier snapshot includes `ask_user`, an automatic or
|
|
212
|
+
refinement-triggered continuation fails with `continuation_mismatch` rather than narrowing it.
|
|
213
|
+
Empty text defaults to "Continue from where you stopped.", and the new run adds
|
|
214
|
+
a dynamic `continuation` section (order 26) saying where the earlier run stopped and that its
|
|
215
|
+
unfinished subagents can be continued with `spawn_subagent { continue }`. The next run
|
|
216
|
+
without `continueFrom` withdraws it. `Recovery.interruptedRunIds` lists the runs `open` marked
|
|
217
|
+
interrupted.
|
|
218
|
+
- **Worktrees** (PROP-0016). When `run.worktreeId` names a worktree in the Harness registry
|
|
219
|
+
(`worktrees/`), the run works in that worktree's folder (the given `cwd` is replaced), holds a
|
|
220
|
+
lease on it (holder: the session id, with `git worktree lock`) until the run completes, fails or
|
|
221
|
+
is interrupted, and records the id. An id the registry does not know is stored and returned as
|
|
222
|
+
the caller's own field, as before. A terminal session holds its worktree for its whole life.
|
|
223
|
+
- **Usage** (`usage.updated`). `inputTokens` is uncached input; `cacheReadTokens` and
|
|
224
|
+
`cacheWriteTokens` are separate; `outputTokens` includes `reasoningTokens`. Totals are
|
|
225
|
+
cumulative for the run, not the native session. `contextTokens` is the latest request's size.
|
|
226
|
+
The derived usage ledger (`usage_requests`, page 08) copies these requests for
|
|
227
|
+
`/usage:analysis`; run events remain the only source of truth.
|
|
228
|
+
- **Limit snapshots** (`account.status.limits`). A provider reading carries a window or balance,
|
|
229
|
+
its reset, and its source. It is produced by the usage limits service from provider response
|
|
230
|
+
headers or a documented provider endpoint (page 09), stored in the account's state, and never
|
|
231
|
+
inferred from a made-up cap.
|
|
232
|
+
- **Provider reasoning summaries.** For supported Responses API families, when reasoning is
|
|
233
|
+
enabled the runner requests a `detailed` summary and records only the provider's explicit summary
|
|
234
|
+
(bounded to 4,000 characters) in request-level usage. This does not change reasoning effort or
|
|
235
|
+
guarantee a provider will return a summary; raw reasoning is not used as a substitute.
|
|
236
|
+
|
|
237
|
+
## Session controls and command runs (PROP-0040)
|
|
238
|
+
|
|
239
|
+
`commands/registry.ts` is the browser-safe core command catalogue, shared by front ends.
|
|
240
|
+
`commands.list` combines it with effective plugin, extension, prompt and skill routes (page 10).
|
|
241
|
+
A listed route is not proof that its surface passes acceptance.
|
|
242
|
+
|
|
243
|
+
`sessions/control.ts` owns saved-history operations: tree, navigation without a summary, fork,
|
|
244
|
+
clone, rename, last reply and JSONL export. A `SessionRef` names `sessionDir`, optional
|
|
245
|
+
`sessionFile` and optional `cwd`; the resolved JSONL must be inside that directory. Navigation
|
|
246
|
+
records a `xingular-navigation` entry; choosing a user message returns its text for editing and
|
|
247
|
+
moves before it. Fork and clone create history in an absolute `targetDir`.
|
|
248
|
+
|
|
249
|
+
`SessionRunInput.command` (also `TurnParams.command`) is one of:
|
|
250
|
+
|
|
251
|
+
- `{ name: 'compact', instructions? }`
|
|
252
|
+
- `{ name: 'navigate', entryId, summarize: boolean, instructions? }`
|
|
253
|
+
- `{ name: 'export', path }` (absolute `.html` path)
|
|
254
|
+
|
|
255
|
+
It replaces prompt submission and skips the normal context update. It requires saved history and
|
|
256
|
+
cannot combine with plan mode, continuation, automatic execution, initial Bash or images. It uses
|
|
257
|
+
normal account/variant/capability pins, events and cancellation. Front ends must fence history
|
|
258
|
+
mutations against active work; the current raw saved-history helpers do not themselves establish
|
|
259
|
+
that fence. Stable native entry IDs must connect host transcript projection to navigation/fork,
|
|
260
|
+
not positional message counts. A host can route `/history` to Harness `sessions.navigate` and
|
|
261
|
+
navigate the same saved session; it must not substitute a fork. Shared session catalog registration
|
|
262
|
+
is approved but remains in progress; no completed cross-surface catalog is implied (PAR-008).
|
|
263
|
+
|
|
264
|
+
## Live sessions (ADR-0083)
|
|
265
|
+
|
|
266
|
+
A *live session* is a Pi session the harness keeps open between the runs of one conversation, so a
|
|
267
|
+
later run reuses it instead of opening and loading a new one. `sessions/live.ts::LiveSessions` holds
|
|
268
|
+
them, one per `run.sessionId`.
|
|
269
|
+
|
|
270
|
+
- **Opt in.** `SessionRunInput.live: true` keeps the session open after the run and reuses an open
|
|
271
|
+
one. It is refused (`invalid_request`) for an unattended, child, nested, probe, improver or
|
|
272
|
+
reflection run, and refused with `session_busy` while another run of the session is using it.
|
|
273
|
+
Without `live` a run opens and disposes its own session, as before.
|
|
274
|
+
- **Pins.** A live session serves a run only when everything the run pins equals what the session
|
|
275
|
+
was opened with: account and its config folder, variant scope and version, variant extensions and
|
|
276
|
+
skill paths, the frozen capability set, working folder, workspace root and history folder, plan
|
|
277
|
+
and plan-repair flags, the allowed, gated and bound tool names, the stable system prompt, model,
|
|
278
|
+
effort, the run-scoped extension names and whether provider tools are asked. A supplied history
|
|
279
|
+
file and native session id must be the session's own. Any difference closes the idle session at
|
|
280
|
+
the turn boundary and the run opens a fresh one on the same native history.
|
|
281
|
+
- **Rebinding.** `piSessionFactory` reads the run's gate, bound tools, extension host and
|
|
282
|
+
plan flag through a binding that `PiSessionLike.rebind` replaces at the start of each run. The
|
|
283
|
+
run-scoped inline extensions (lineage join, subagents, compaction checkpoint, work slice, goal,
|
|
284
|
+
first-party hooks) are loaded in slots: a rebind removes the last run's handlers (Pi's `on`
|
|
285
|
+
returns the remover) and runs the next run's factory against the same extension. A session whose
|
|
286
|
+
run-scoped extension registers anything but handlers is not reusable. Between runs an extension
|
|
287
|
+
dialog is refused with `run_not_active`.
|
|
288
|
+
- **One writer of the history.** A top-level run of the same session that is not live (a command
|
|
289
|
+
run, for example), and `sessions.navigate` or `sessions.rename` on its history folder, close an
|
|
290
|
+
idle live session first so nothing holds a stale copy of the file; while the live session is
|
|
291
|
+
replying they are refused with `session_busy`.
|
|
292
|
+
- **Settling.** `runTurn` calls `TurnParams.release` instead of disposing the session. An idle live
|
|
293
|
+
session closes after 30 minutes (`SessionsOptions.liveIdleMs`), on `sessions.close`, or when the
|
|
294
|
+
harness closes.
|
|
295
|
+
- **Follow-ups.** `sessions.followUp { sessionId, text }` starts the next run at once when the
|
|
296
|
+
session is idle, or queues the text (at most 20) for after the active run. The queue follows the
|
|
297
|
+
queued-message dispatch rule above: it is sent after a reply that completed or that the person
|
|
298
|
+
stopped, and parked after a failure or any other interruption; a work-slice continuation runs
|
|
299
|
+
first. A follow-up run repeats the last live run's input with its own text and no Bash, images,
|
|
300
|
+
command, continuation or goal. `runs.steer` steers the active run as before.
|
|
301
|
+
- **Other run inputs a live client uses.** `newHistory: true` starts a new native history in
|
|
302
|
+
`sessionDir` (refused with `resume`, `continueFrom` or `command`). `hiddenNotes` (at most 8, each a
|
|
303
|
+
lower-case type and up to 20,000 characters) are saved as hidden messages before the request, as
|
|
304
|
+
the context update is. `planTools: 'active'` makes a plan run's frozen tool set the plan's own
|
|
305
|
+
(`planModeTools`), so the request carries only those tools; the default `gate` keeps every tool in
|
|
306
|
+
the request and refuses at the gate. An initial Bash command is accepted on a live turn that
|
|
307
|
+
resumes its history.
|
|
308
|
+
- **Question dialogs.** `question.requested` may carry `dialog { kind: select | confirm | input |
|
|
309
|
+
editor, title, message?, placeholder?, prefill?, options? }` when a Pi extension's dialog asked it
|
|
310
|
+
(`sessions/extensionUi.ts`). A host may ignore it; the answer is the usual `QuestionAnswer`.
|
|
311
|
+
- **Methods.** `sessions.live {}` → `{ sessions: LiveSessionStatus[] }`; `sessions.close { sessionId }`
|
|
312
|
+
→ `{ closed, afterRun }` (a busy session closes when its run settles);
|
|
313
|
+
`sessions.followUp { sessionId, text }` → `{ runId } | { queued }`;
|
|
314
|
+
`sessions.followUp.clear { sessionId }` → `{ removed }`.
|
|
315
|
+
|
|
316
|
+
## Invariants
|
|
317
|
+
|
|
318
|
+
- **INV-RUN-1** A run pins one account, one variant version, one capability set and one canonical
|
|
319
|
+
`workspaceRoot` when it starts. None changes during the run. A continuation reuses the prior
|
|
320
|
+
root, deriving one from `workingDirectory` only for a legacy record without the field. A pinned
|
|
321
|
+
account that cannot be used fails the run; it is never swapped (`INV-ACC-2`). A side-question
|
|
322
|
+
run is the explicit exception for the variant: it pins no variant and uses the fixed Harness
|
|
323
|
+
instruction plus a redacted main-run context projection (PROP-0019).
|
|
324
|
+
- **INV-RUN-2** A run's capability set is written once (`freezeRun`). A resumed or duplicate launch
|
|
325
|
+
with a different set fails with `capabilities_frozen`. A child run's set is the intersection of
|
|
326
|
+
its parent's, its profile's tools and plugins, and what it asked for; it never widens.
|
|
327
|
+
- **INV-RUN-3** Every run event is validated against its schema, redacted, persisted, and only then
|
|
328
|
+
relayed to listeners, in order. An event that arrives after the run settled is kept as evidence
|
|
329
|
+
and never applied or relayed.
|
|
330
|
+
- **INV-RUN-4** A restarted harness never restarts model work. On `open`, runs left active are
|
|
331
|
+
marked `interrupted` unless another live process owns them (`owner.json`). Recovery of a
|
|
332
|
+
subagent needs the same account, caller, working folder and history branch; the history branch
|
|
333
|
+
(owner marker and native history id), not the host's session id, ties a parent to an earlier
|
|
334
|
+
one. A stopped subagent is continued only by its parent, through `spawn_subagent { continue }`. Continuing is always
|
|
335
|
+
a new run with `continueFrom`; it pins the earlier run's account, variant version and capability
|
|
336
|
+
set, and the earlier run's record is never reopened. The application asks for it, or the earlier
|
|
337
|
+
run's work-slice policy does when the reply stopped at its budget (PROP-0041); a run started
|
|
338
|
+
without a person (`automatic`), a plan, a subagent, a session command or a worktree never
|
|
339
|
+
continues itself.
|
|
340
|
+
- **INV-RUN-5** Unattended runs (`automatic: true`) load no extension found on disk, read no
|
|
341
|
+
context files, and never ask a person: anything that would need approval is refused. A variant's
|
|
342
|
+
own trusted plugins still load, except for side-question runs, which have no variant or plugin
|
|
343
|
+
code and use an empty capability set (PROP-0019).
|
|
344
|
+
- **INV-RUN-6** Only the harness writes `runs/<id>/`; an application reads it. `run.json`,
|
|
345
|
+
`events.jsonl`, `owner.json` and `subagents.json` are written only through
|
|
346
|
+
`sessions/runStore.ts`. Side files are written by their owning module: `context.json`
|
|
347
|
+
(`prompt/compile.ts`), `caller.json` (`sessions/sessions.ts`), `capabilities.json`
|
|
348
|
+
(`capabilities/runSnapshot.ts`), `mcp-context.json` (`mcp/service.ts`). Adding another writer
|
|
349
|
+
or side file needs a proposal. (See drift D-1.)
|
|
350
|
+
- **INV-RUN-7** Token accounting follows the usage contract above. Changing what a field means is
|
|
351
|
+
an architecture change.
|
|
352
|
+
- **INV-RUN-8** Plan mode keeps the stable system prompt but has mode-specific tools: an attended
|
|
353
|
+
plan may include `ask_user`, `spawn_subagent` and `wait_subagents`, subject to the frozen caller
|
|
354
|
+
capabilities; newly resolved normal, automatic, probe, improver and reflection runs omit
|
|
355
|
+
`ask_user`. Plan-mode spawning requires a named profile whose effective explicit tool and plugin
|
|
356
|
+
allowlists qualify for read-only research. The prompt lists only profiles whose intersection with
|
|
357
|
+
the parent's frozen tools and plugin contributions includes a research evidence tool. An omitted
|
|
358
|
+
`tools` override inherits that safe intersection; an explicit override can only narrow it. The
|
|
359
|
+
child inherits plan mode and is narrowed to the intersection of the parent's frozen capabilities,
|
|
360
|
+
the profile and the plan research set; it has no
|
|
361
|
+
connectors, user questions, writes, commands or nested subagents. The plan run itself may run
|
|
362
|
+
Bash only in the OS-enforced read-only scope (PROP-0043, ADR-0038); research children cannot run
|
|
363
|
+
commands. Generic browser actions and connected-app calls remain unavailable in plan mode. The
|
|
364
|
+
gate refuses unsafe calls before approvals, and the service rechecks before launch. The terminal activates plan-eligible
|
|
365
|
+
tools only for a plan request, then restores its normal set. Provider-cache effects of the tool-list
|
|
366
|
+
difference are not assumed (page 04, `INV-PRM-8`). Pi records a tool-set change only with the next
|
|
367
|
+
request, so the terminal brackets each plan request with `xingular-plan-tools` entries (`begin`
|
|
368
|
+
carries the normal set it replaced, then `end`). Whenever Pi rebuilds the active tools from the
|
|
369
|
+
transcript (a new runtime, resume, switch, fork or tree navigation), `normalToolsForBranch` returns
|
|
370
|
+
the bracketed normal set if the last recorded set is a plan's, so a plan never leaks into normal
|
|
371
|
+
mode.
|
|
372
|
+
- **INV-RUN-9** Subagent results reach the parent at native turn boundaries, at most once
|
|
373
|
+
automatically (typed receipts in native history). A parent joins outstanding children before it
|
|
374
|
+
completes.
|
|
375
|
+
- **INV-RUN-10** An initial Bash command is allowed only on a new interactive user turn (not
|
|
376
|
+
automatic, plan, resumed, continuing, relation, probe or improver runs), must match the leading `!`
|
|
377
|
+
command in the text, and passes the same gate as model-issued Bash. It is workspace-scoped by
|
|
378
|
+
default; the explicit terminal syntax `!outside <command>` requests the same human-only,
|
|
379
|
+
pre-execution outside-scope approval as the Bash tool and runs the command at most once.
|
|
380
|
+
- **INV-RUN-11** A side-question run is independent, tool-free and temporary. It receives only a
|
|
381
|
+
bounded, redacted projection of the main run's effective prompt and public events plus the
|
|
382
|
+
surface's visible transcript and selected references. It excludes hidden reasoning and attachment
|
|
383
|
+
bytes, never reads the main native history, and never changes or steers the parent. Its own run
|
|
384
|
+
record and events use the normal store contract (PROP-0019).
|
|
385
|
+
- **INV-RUN-13** A reply may be a bounded work slice (PROP-0041), but the foundation has no budget
|
|
386
|
+
(ADR-0081): the defaults are no tool-call limit, no time limit and no new-token limit (earlier
|
|
387
|
+
defaults: 320 calls and 60 minutes, PROP-0044). A caller that asks for one sets `workSlice` on a
|
|
388
|
+
run or `XINGULAR_WORK_SLICE` at launch; a token cap is counted on new input, cache writes and
|
|
389
|
+
output and never on the cached prefix. Everything below describes a reply that was given a limit,
|
|
390
|
+
and the three-compaction guard, which is not a budget, stays on. At the
|
|
391
|
+
limit the guard refuses the next tool call and asks the model to stop and report where it is; the
|
|
392
|
+
harness then writes the checkpoint itself from the reply's files, checks and todo list (the model
|
|
393
|
+
has no checkpoint tool since ADR-0069). A non-handoff tool call after the refusal ends the reply. A
|
|
394
|
+
budget-ended reply is `interrupted` with terminal reason `slice_complete` (ADR-0053), unless it
|
|
395
|
+
continues: a headless run as a new run (`continueSlice`), a terminal reply in place as its next
|
|
396
|
+
slice (ADR-0070), both up to `maxSlices` and never after a fruitless or blocked slice. The budget
|
|
397
|
+
covers the whole reply: Pi emits `agent_start` for every continuation (a slice continuation, delivered
|
|
398
|
+
subagent results, a plan repair), so the guard starts a new slice only on a person's message.
|
|
399
|
+
No call is refused for repeating: identical calls, a Bash check that keeps failing and repeated
|
|
400
|
+
`edit`/`write` results on one path are allowed as often as the work needs, because a distinct read
|
|
401
|
+
or another edit is not evidence of a loop. `todo_write` counts toward the tool-call budget and is
|
|
402
|
+
otherwise unconstrained. Third-compaction thrash detection remains: three context compactions in
|
|
403
|
+
one reply end it with the same handoff request. Plan-research children receive the configured bound
|
|
404
|
+
without a new capability and do not auto-continue. A new run
|
|
405
|
+
continues it only up to the policy's slice cap, only after a slice that changed a file, passed a
|
|
406
|
+
check or recorded a finished item, and never after a checkpoint that is `blocked`. A run may turn
|
|
407
|
+
the guard off with `workSlice.enabled: false`, and a launch may set `XINGULAR_WORK_SLICE=off` for
|
|
408
|
+
every run in that process; with it off a reply has no boundary — no checkpoint, no continuation —
|
|
409
|
+
and ends only when the model stops or a person interrupts. A reply the model ends on its own
|
|
410
|
+
settles as it ends (INV-RUN-15); in a goal, the goal loop (INV-RUN-16) continues it. A
|
|
411
|
+
continuation carries the todo it left (`continuation.ts`).
|
|
412
|
+
- **INV-RUN-15** A reply the model ends settles as it ends (ADR-0075): the harness never sends it
|
|
413
|
+
back and never overwrites its status from the todo list. The todo list is progress, not a gate.
|
|
414
|
+
Only three things settle a reply otherwise: a person's interrupt (`interrupted`), the work-slice
|
|
415
|
+
guard (INV-RUN-13), and a goal's stop (INV-RUN-16) — a goal that ends blocked settles
|
|
416
|
+
`needs_person`, and one that ends on a limit, a pause or a stall settles `unfinished`, each with a
|
|
417
|
+
harness-written checkpoint. **No model judges an ordinary reply** (ADR-0072 removed ADR-0071's
|
|
418
|
+
every-reply completion check); only a goal's completion claim is checked (INV-RUN-16). Carrying
|
|
419
|
+
the request to completion is the prompt's job (`04-prompt.md`). There is no stop gate, no nudge
|
|
420
|
+
and no `XINGULAR_STOP_GATE` switch.
|
|
421
|
+
- **INV-RUN-16** A goal is the person's opt-in long run (ADR-0072). Only a person's own top-level run
|
|
422
|
+
carries one (`sessions.run` `goal`, or `/goal` in the terminal); never a plan, command, unattended
|
|
423
|
+
or child run. While its status is `active`, a reply that would end continues in place (the goal
|
|
424
|
+
loop, `sessions/goalLoop.ts`) with the continuation prompt, counting a round. Statuses are
|
|
425
|
+
`active | paused | blocked | usage_limited | budget_limited | complete`; the person sets, edits,
|
|
426
|
+
pauses, resumes and clears, the system limits (`budget_limited` at 30 rounds or 8 hours by default;
|
|
427
|
+
`usage_limited` on a provider usage limit; `blocked` after three automatic rounds with no activity,
|
|
428
|
+
three with only failed commands, or a provider error), and the model may only claim `complete`,
|
|
429
|
+
report `blocked` after the same blocker on three consecutive goal turns, or `paused` at the person's
|
|
430
|
+
request. A `complete` is a claim: at the next settle the same model, at low effort and with a fresh
|
|
431
|
+
context, checks it against the objective and the transcript; `done` completes the goal, `continue`
|
|
432
|
+
keeps it active with the reason, and no model, an error or an unreadable answer accepts it. The
|
|
433
|
+
loop never stops a goal for a round without a tool call alone. A goal that ends `blocked` settles
|
|
434
|
+
the run `needs_person`; one that ends paused, limited or stalled settles it `unfinished`. The run
|
|
435
|
+
record keeps the goal as `goalMode`. `XINGULAR_COMPLETION_CHECK=off` accepts every claim unchecked.
|
|
436
|
+
- **INV-RUN-14** A run event stream carries `checkpoint` (the handoff the harness derives from the
|
|
437
|
+
run's own evidence; runs written before ADR-0069 may hold one the model wrote) and `heartbeat`
|
|
438
|
+
(steps, elapsed time, last tool, compactions, slice, the call budget, and the names and oldest age of
|
|
439
|
+
the tools running at that moment). Every live reply emits a
|
|
440
|
+
heartbeat every 30 seconds, terminal replies included. A heartbeat older than five minutes while
|
|
441
|
+
the owner process lives marks the run `interrupted` with reason `stalled`; a run that never emitted
|
|
442
|
+
one keeps the 30-minute silence rule. A heartbeat of a run with no work slice carries zero slice
|
|
443
|
+
counters. A reply whose heartbeat keeps arriving but which produces no
|
|
444
|
+
other event for fifteen minutes is a wedged turn, not a busy one: the harness ends it through the
|
|
445
|
+
native abort and records `interrupted` with reason `stalled`, and grants a reply whose oldest
|
|
446
|
+
running tool has run for thirty minutes the same ending. `runTurn` applies this to every run
|
|
447
|
+
(a structured session, a live session, the client terminal, an unattended run) with the same
|
|
448
|
+
windows (`sessions/stallWatch.ts`); the in-process terminal's controller applies it to its own
|
|
449
|
+
reply. A live session whose turn stalled is closed rather than reused, its queued follow-ups
|
|
450
|
+
parked for the next session, and closed under the turn after thirty seconds if the abort did not
|
|
451
|
+
unwind it (ADR-0083). A reply whose only running tools are
|
|
452
|
+
`wait_subagents` or `spawn_subagent` is judged by its children instead: each child has its own
|
|
453
|
+
clock (its last event other than a heartbeat; its running tools), and a child quiet for the same
|
|
454
|
+
windows is interrupted with reason `stalled`, so the wait returns and the parent carries on by
|
|
455
|
+
itself. The parent's own rule resumes if no child answers to its watch, or one ignored the stop for
|
|
456
|
+
five minutes (ADR-0078). An unanswered approval or question is never cut short. The watchdog never
|
|
457
|
+
restarts work (ADR-0054).
|
|
458
|
+
- **INV-RUN-12** A post-compaction checkpoint is a bounded context projection of the active request,
|
|
459
|
+
the validated todo list and applicable plan instructions as of a compaction that happened during
|
|
460
|
+
that run. It is compiled by `prompt/compile.ts` once per compaction and placed, unchanged, directly
|
|
461
|
+
after the compaction summary in each later model request of the active run, and never persists hidden
|
|
462
|
+
reasoning or changes permissions, stable prompt text, native history or run-event schemas. Its
|
|
463
|
+
in-memory state is cleared when the run settles or the active session branch changes
|
|
464
|
+
(PROP-0033, ADR-0032, ADR-0067).
|
|
465
|
+
|
|
466
|
+
## Data
|
|
467
|
+
|
|
468
|
+
`<data root>/runs/<id>/`: `run.json` (including the optional, legacy-compatible `workspaceRoot` and
|
|
469
|
+
the optional `workspaceSnapshot`),
|
|
470
|
+
`events.jsonl`, `owner.json`, `subagents.json`, `context.json`, `caller.json`, `capabilities.json`,
|
|
471
|
+
`mcp-context.json`. Native history lives in
|
|
472
|
+
the session directory the caller passes (`sessionDir`), owned by Pi. Side-question native history
|
|
473
|
+
uses a one-use OS temporary directory, removed when the run settles; its tracked run and events
|
|
474
|
+
remain in the ordinary run store.
|
|
475
|
+
|
|
476
|
+
## Source map
|
|
477
|
+
|
|
478
|
+
`src/sessions/*.ts`, `src/capabilities/runSnapshot.ts`, `src/core/workspaceBashTool.ts`,
|
|
479
|
+
`src/core/workspaceSandbox.ts`, `src/core/workspaceWriteOperations.ts`, `src/tools/spawnSubagent.ts`.
|
|
480
|
+
Decisions: [ADR-0002](../decisions/ADR-0002-native-subagent-lifecycle.md) (superseded),
|
|
481
|
+
[ADR-0003](../decisions/ADR-0003-shared-asynchronous-subagents.md),
|
|
482
|
+
[ADR-0022](../decisions/ADR-0022-plan-only-question-tools.md),
|
|
483
|
+
[ADR-0023](../decisions/ADR-0023-contextual-side-question-runs.md),
|
|
484
|
+
[ADR-0026](../decisions/ADR-0026-contextual-question-wireframes.md),
|
|
485
|
+
[ADR-0033](../decisions/ADR-0033-plan-mode-research-delegation.md),
|
|
486
|
+
[ADR-0039](../decisions/ADR-0039-progress-aware-stall-guards.md),
|
|
487
|
+
[ADR-0053](../decisions/ADR-0053-no-repeated-work-guard.md),
|
|
488
|
+
[ADR-0054](../decisions/ADR-0054-terminal-reply-heartbeat-and-stall.md).
|
|
489
|
+
|
|
490
|
+
## Native session names (PROP-0010)
|
|
491
|
+
|
|
492
|
+
`session_name({ name: string })` adds or revises the current Pi session's name in embedded
|
|
493
|
+
and terminal execution. The agent normally calls it once before its first other tool call when a
|
|
494
|
+
request needs tools or changes state, and revises it only when the overall objective changes,
|
|
495
|
+
including a manual name. When a top-level attended session starts unnamed, the harness also
|
|
496
|
+
derives a provisional name from a substantive first request before the first model request;
|
|
497
|
+
greetings, thanks and short conversational replies stay unnamed. The model may revise the
|
|
498
|
+
provisional name. Agent-submitted names are imperative sentences
|
|
499
|
+
of at most six whitespace-separated words; whitespace is normalized, and empty names,
|
|
500
|
+
terminal escapes, non-whitespace controls and longer names fail without writing. Identical
|
|
501
|
+
names are a no-op. Pi's native session-info history is the only storage; continuation and
|
|
502
|
+
reopen preserve it. Each child names only itself. There is no additional model request or
|
|
503
|
+
run-event schema. The normal capability selection and host gate apply; a refused or failed
|
|
504
|
+
provisional name leaves the session unnamed and never fails the run. `harnessTools: false`
|
|
505
|
+
omits the tool. Plan mode permits it as session metadata maintenance.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# 03 Variants
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
A **variant** is the part of the harness that is allowed to change: everything that shapes an
|
|
6
|
+
agent's behaviour apart from the model, the application's own sections and the foundation
|
|
7
|
+
(page 00). It is eight components (c1–c8, after Harness²). Each caller scope has
|
|
8
|
+
content-addressed, validated, immutable versions of its variant and a head, the variant it runs
|
|
9
|
+
now. A run pins one version. Refinement (page 05) proposes new variants; a person adopts them.
|
|
10
|
+
|
|
11
|
+
What a variant may contain is fixed by the foundation: the surface (`PI_SURFACE`), the validator
|
|
12
|
+
and the always-on cap. A variant can change what the agent is told and which skills, scripts,
|
|
13
|
+
subagents and plugins it may load. It cannot change the prompt compiler, the gate, the run
|
|
14
|
+
recorder, accounts or trust.
|
|
15
|
+
|
|
16
|
+
Earlier documents called this the "harness tree" and its invariants `INV-TREE-n`; those are now
|
|
17
|
+
`INV-VAR-n`.
|
|
18
|
+
|
|
19
|
+
## Components
|
|
20
|
+
|
|
21
|
+
The surface is `PI_SURFACE` (`variant/surface.ts`), the one surface this harness runs.
|
|
22
|
+
|
|
23
|
+
| c | Component | Path in the variant | Reaches a run | Group |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| c1 | System prompt | `systemprompt.md` | always (prompt section `system`, order 25) | context |
|
|
26
|
+
| c2 | Guardrails | `guardrails.md` | always (`guardrails`, 40) | context |
|
|
27
|
+
| c3 | Memory | `memory.md` | always (`memory`, 45) | context |
|
|
28
|
+
| c4 | Tool guidance | `tool_guidance.md` | always (appended to the `tools` section) | tool interface |
|
|
29
|
+
| c5 | Subagents | `sub_agents/<name>/AGENT.md` | own context; instruction-only agent profiles, listed with the other profiles in `subagents` (64, PROP-0029) | orchestration |
|
|
30
|
+
| c6 | Skills | `skills/<name>/SKILL.md` (+ `scripts/`) | on demand, loaded by Pi as skills | context |
|
|
31
|
+
| c7 | Scripts | `scripts/<name>.py` or `.mjs` | on demand, listed in `scripts` (66) | tool interface |
|
|
32
|
+
| c8 | Plugins | `plugins/<name>.ts` | inside the tool loop, as Pi extensions | middleware |
|
|
33
|
+
|
|
34
|
+
| Type / function | Module | Role |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `Variant` (path → text), `SurfaceSpec`, `ComponentInfo` | `variant/surface.ts` | The editable surface and its patterns. |
|
|
37
|
+
| `validate`, `readVariant`, `writeVariant`, `diffSummary`, `applyEdit`, `autotrigger` | `variant/variant.ts` | Validation and editing. |
|
|
38
|
+
| `commit`, `seed`, `restore`, `head`, `lineage`, `fingerprint` | `variant/store.ts` | Versions and the head. |
|
|
39
|
+
| `tag`, `untag`, `tags`, `resolveRef`, `revertComponents`, `selects` | `variant/store.ts` | Names for versions, references, and taking components back from an earlier version (PROP-0052). |
|
|
40
|
+
| `materialise`, `resolve`, `VariantChoice`, `Materialised` | `variant/materialise.ts` | Turns a version into prompt sections, skill paths and extension paths for one run. |
|
|
41
|
+
| `VariantTrust` | `variant/trust.ts` | Which plugin code a person trusted, by hash; which scopes let probes run improver code. |
|
|
42
|
+
| `seedVariant` | `variant/seed.ts` | A first variant for a scope. |
|
|
43
|
+
| component library | `variant/components.ts` | Reusable skills, prompts and rules under `registry/` and built-in folders. |
|
|
44
|
+
|
|
45
|
+
## Contracts
|
|
46
|
+
|
|
47
|
+
- **`VariantChoice`**: `{ scope, version? }` (a scope's head or one version) or `{ dir, scope? }`
|
|
48
|
+
(a variant on disk, read and never written, such as a refinement candidate).
|
|
49
|
+
- **Version source** (`VersionSource`): `seed`, `edit`, `refinement`, `import`, `restore`.
|
|
50
|
+
- **Tuned for**: a version made by adopting a refinement records `tunedFor: { model }`, the model its
|
|
51
|
+
execution ran on. It is written once with the version and never changed.
|
|
52
|
+
- **Tags**: `name → fingerprint` per scope. A tag is a label that can move to another version; it
|
|
53
|
+
is not a version and never changes one. A tag cannot be `head` or look like a fingerprint.
|
|
54
|
+
- **Reference** (`resolveRef`): a fingerprint, a unique prefix of at least four characters, a tag,
|
|
55
|
+
or `head`.
|
|
56
|
+
- **Revert** (`revertComponents`): a new version made from the head with the selected components
|
|
57
|
+
replaced by an earlier version's. A selector is a component (`c1`–`c8` or its id) or one item by
|
|
58
|
+
path prefix (`skills/review`, `sub_agents/reader`, `scripts/check.py`, `plugins/guard.ts`). It is
|
|
59
|
+
committed with source `edit` and passes the validator like any edit.
|
|
60
|
+
- **Fingerprint**: first 16 hex characters of SHA-1 over sorted `path\0text\0` pairs.
|
|
61
|
+
- **Validation** (`validate`) refuses a variant when: always-on text (c1–c4) exceeds 24,000
|
|
62
|
+
characters; a file is off the surface; a skill lacks `description:` or its `name:` differs from
|
|
63
|
+
its folder; a skill is never named in the always-on text; a subagent lacks `description:`; a
|
|
64
|
+
script does not compile; a plugin has no default export; an always-on file or skill invokes a
|
|
65
|
+
script that is not in the variant.
|
|
66
|
+
|
|
67
|
+
## Invariants
|
|
68
|
+
|
|
69
|
+
- **INV-FND-1** Only a variant mutates. No edit, improver session or adoption changes foundation
|
|
70
|
+
code, the surface, the validator or an invariant; those change by release, with a proposal.
|
|
71
|
+
- **INV-FND-2** A variant changes only by committing a new validated version (`commit` →
|
|
72
|
+
`validate`, `INV-VAR-2`), and a refinement moves a head only when a person adopts
|
|
73
|
+
(`INV-REF-6`). There is no other door.
|
|
74
|
+
- **INV-VAR-1** Variant instructions are versioned per scope. The application adds its own sections through `Launch` (page 01). The release-owned `plugin-authoring` skill is also available on demand in structured and terminal sessions, including existing variants; its body is not always-on. A variant skill with the same name takes precedence. It is shipped as a package resource and does not mutate pinned versions.
|
|
75
|
+
- **INV-VAR-2** Every saved version is validated (`commit` → `validate`). An invalid variant is
|
|
76
|
+
refused with every problem listed.
|
|
77
|
+
- **INV-VAR-3** A version is never edited. A change is a new version; `restore` moves the head
|
|
78
|
+
and appends to `restores.jsonl`.
|
|
79
|
+
- **INV-VAR-4** A run resolves its variant once and pins it; a child run uses the same files even if
|
|
80
|
+
the head moves. A child whose agent profile names another variant resolves and pins that one when
|
|
81
|
+
it starts (PROP-0029). A later turn of a conversation uses the conversation's selected version.
|
|
82
|
+
That changes only by the person's own action in that session (adopting, restoring, reverting or
|
|
83
|
+
choosing a version) and only at a turn boundary; a head moved elsewhere is never followed
|
|
84
|
+
(PROP-0052, ADR-0065).
|
|
85
|
+
- **INV-VAR-5** c8 plugin code loads only when its exact text is trusted (SHA-256 in
|
|
86
|
+
`variant-plugin-trust.json`). A changed file asks again. The one exception: a refinement probe may
|
|
87
|
+
run improver-written code for a scope whose person allowed it (`probeCode`), and adopting that
|
|
88
|
+
variant still requires the code trusted.
|
|
89
|
+
- **INV-VAR-6** The always-on cap exists because every always-on character costs every run.
|
|
90
|
+
Raising it is an architecture change.
|
|
91
|
+
- **INV-VAR-7** Variant code is synchronous (`INV-BND-4`).
|
|
92
|
+
|
|
93
|
+
## Data
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
<data root>/variants/<scope>/
|
|
97
|
+
versions/<fingerprint>/variant/<rel>
|
|
98
|
+
versions/<fingerprint>/version.json
|
|
99
|
+
head.json
|
|
100
|
+
lineage.jsonl
|
|
101
|
+
restores.jsonl
|
|
102
|
+
tags.json name → fingerprint (PROP-0052)
|
|
103
|
+
<state dir>/variant-plugin-trust.json
|
|
104
|
+
<data root>/registry/{skills,prompts,rules}/ (component library)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Source map
|
|
108
|
+
|
|
109
|
+
`src/variant/*.ts` (`migrate.ts` renames state written before PROP-0009 on `open`). Method origin: Harness² (`harness2/core/tree.py`, Apache-2.0).
|
|
110
|
+
|
|
111
|
+
## Terminal inspection
|
|
112
|
+
|
|
113
|
+
`/variant` lists the scope's versions with their tags, source, and which one this conversation runs
|
|
114
|
+
and which is the head. On a version it offers: switch this conversation to it, restore it as the
|
|
115
|
+
head, compare it with the head, tag it, and take some components from it; `/variant
|
|
116
|
+
use|restore|tag|untag|diff|revert` are the typed forms. Restoring, reverting or adopting switches
|
|
117
|
+
this conversation at the next turn boundary (ADR-0065).
|
|
118
|
+
|
|
119
|
+
The resource browser retains the materialised preparation snapshot and labels it pinned. The
|
|
120
|
+
current scope head is separately labelled latest saved; browsing and comparison never rematerialise
|
|
121
|
+
the head as the running variant. Directory-backed variants remain browse-only. Library additions
|
|
122
|
+
use the existing validated commit door and affect future terminals.
|