@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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,641 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
- **One session runtime: the terminal is now a client of the harness (ADR-0083).**
|
|
6
|
+
- A conversation keeps one open Pi session across turns (`sessions.run { live: true }`), so
|
|
7
|
+
steering, queued follow-ups and plugin state carry from one turn to the next. `sessions.live`,
|
|
8
|
+
`sessions.close`, `sessions.followUp` and `sessions.followUp.clear` manage them. App chat turns
|
|
9
|
+
use it.
|
|
10
|
+
- `xagent` runs no agent loop in its window any more: every turn is a harness run, with the same
|
|
11
|
+
gate, records, plan mode, goals and subagents as a host's. `XINGULAR_TERMINAL_RUNTIME=inprocess`
|
|
12
|
+
runs the previous in-process runtime. Plugins in the new terminal get the host's interface
|
|
13
|
+
(dialogs, notices, status lines and text widgets); custom terminal components, key handlers,
|
|
14
|
+
renderers, shortcuts and themes need the in-process runtime.
|
|
15
|
+
- `xagent daemon start|stop|status` runs one long-lived harness per state folder; `xagent --daemon`
|
|
16
|
+
windows use it, so a reply keeps running when its window closes, and `xagent attach` reconnects a
|
|
17
|
+
window to it. The protocol is also served on an owner-only socket (`server/socket.ts`).
|
|
18
|
+
- Terminal runs now record Pi's session id as `nativeSessionId`, as host runs do; in-process
|
|
19
|
+
terminal runs keep recording their history file.
|
|
20
|
+
- `/session` takes a saved conversation's session id as well as its file.
|
|
21
|
+
- **Every harness run ends when it stops making progress.** A reply that produces nothing for fifteen
|
|
22
|
+
minutes (thirty with a tool running; a pending approval or a wait for subagents does not count) is
|
|
23
|
+
interrupted with reason `stalled`, whatever front end started it, and its live session is closed
|
|
24
|
+
rather than reused. Every run now sends the 30-second `heartbeat`, not only runs with a work slice,
|
|
25
|
+
so a long quiet tool is no longer settled as `owner_gone`.
|
|
26
|
+
- **Switching accounts starts on the new account's model.** A conversation resumed on another
|
|
27
|
+
account that names a model this account cannot use now starts on this account's own latest choice
|
|
28
|
+
(with a notice), as the in-process terminal did, instead of showing and sending the old account's
|
|
29
|
+
model. If nothing on the account is usable, no model is named and the harness picks one.
|
|
30
|
+
- **Plan and normal mode keep their own model and effort in the new terminal.** A mode that never
|
|
31
|
+
chose an effort starts on the model's or account's default instead of keeping the other mode's; a
|
|
32
|
+
mode switch during a reply waits for it to settle; a one-shot `/plan` shows and runs the plan
|
|
33
|
+
mode's choice, then returns to the normal one.
|
|
34
|
+
- **The new terminal offers every effort level the model supports.** It stopped at `high`; it now
|
|
35
|
+
lists `xhigh` and `max` where the model maps them, as the in-process terminal did, and runs a
|
|
36
|
+
model at the nearest level it supports when asked for one it does not.
|
|
37
|
+
- **A reply whose provider request timed out and was retried successfully is now recorded as
|
|
38
|
+
completed**, not failed.
|
|
39
|
+
- **A terminal window whose terminal closed no longer leaves its process running.** The frontend is
|
|
40
|
+
ended three seconds after the hang-up if it has not exited by itself.
|
|
41
|
+
|
|
42
|
+
- **Make fenced code easier to read in the terminal.** Code blocks now use a bordered panel labeled
|
|
43
|
+
from the fence language, with bundled tree-sitter highlighting where available and lightweight
|
|
44
|
+
Python, shell and JSON fallback highlighting. The final-answer prompt asks for language-labeled
|
|
45
|
+
fences and `bash` fences for commands the person must run; this changes the stable prompt prefix
|
|
46
|
+
once.
|
|
47
|
+
|
|
48
|
+
- **Connect the agent to your own signed-in Brave profile (ADR-0082).**
|
|
49
|
+
- A device-local browser backend. `/settings` → Browser offers **Isolated browser** or **Brave
|
|
50
|
+
profile**; choosing Brave asks first, naming the extension's `debugger` permission, that a
|
|
51
|
+
signed-in page may hold private information, and that a disconnect never switches backends. No
|
|
52
|
+
project, variant or page can choose it.
|
|
53
|
+
- The **Brave extension** row starts a loopback bridge on `127.0.0.1` and shows a one-time
|
|
54
|
+
`port:code` that expires after five minutes. The unpacked `browser-extension/` folder now ships
|
|
55
|
+
in the package and is loaded from `brave://extensions`. The bridge accepts only the paired
|
|
56
|
+
extension origin with a bearer token, and keeps that pairing owner-only in
|
|
57
|
+
`<state dir>/browser/extension-bridge.json`.
|
|
58
|
+
- Each site is allowed separately in the extension popup by exact origin, port included; a tab
|
|
59
|
+
that leaves an allowed site becomes unavailable. Incognito is disabled, and the extension asks
|
|
60
|
+
for no history or cookie permission and exports no cookies.
|
|
61
|
+
- Brave adopts the existing `browser_*` tools and the shared gate: snapshot-scoped refs that are
|
|
62
|
+
invalidated when the page or the debugger attachment changes, a refused password field, and
|
|
63
|
+
fresh approval for sending, buying, deleting, account changes and granting access.
|
|
64
|
+
`browser_upload` stays with the App's WebKit backend.
|
|
65
|
+
- An in-page badge reads “Xingular Agent is on this site” with **Pause** and **Stop**. Pause
|
|
66
|
+
refuses new calls and lets an in-flight call finish; stop revokes the pairing and rejects
|
|
67
|
+
pending calls. A lost connection refuses calls with a reconnect message instead of switching
|
|
68
|
+
to the isolated browser.
|
|
69
|
+
- New methods `browser.config`, `browser.configure` and
|
|
70
|
+
`browser.extension.status|start|stop`, and `HarnessOptions.browserExtension` for a host that
|
|
71
|
+
supplies its own browser provider. `browser.json` gains `backend`; `<state dir>/browser/` is
|
|
72
|
+
now only profiles, downloads and pairing state.
|
|
73
|
+
- The live acceptance test drives a disposable Brave profile against a fixture page and runs only
|
|
74
|
+
when a person asks for it: `XINGULAR_BRAVE_LIVE=1 npx vitest run
|
|
75
|
+
src/browser/extension/brave-live.acceptance.test.ts`.
|
|
76
|
+
|
|
77
|
+
- **A reply waiting on children, or on a flaky network, no longer looks stalled (ADR-0078).**
|
|
78
|
+
- Each child a terminal reply waits on gets its own stall clock: fifteen minutes without
|
|
79
|
+
progress, or thirty minutes inside one tool, ends that child as `stalled` and the parent
|
|
80
|
+
receives its result as `interrupted`. The parent's own clock pauses while only child-wait tools
|
|
81
|
+
run, so a long child is no longer recorded as the parent's stall.
|
|
82
|
+
- A transient model failure retries eight times over about four minutes (2, 4, 8, 16, 32, 60, 60
|
|
83
|
+
and 60 seconds) instead of Pi's three attempts over fourteen seconds. A retry budget the person
|
|
84
|
+
set in their own settings still wins.
|
|
85
|
+
- The working row says what the reply waits on instead of repeating the verb: `Waiting on 2
|
|
86
|
+
subagents · last activity 12s ago (Read)`, `Running Bash · 1m 23s`, `Waiting for the model · no
|
|
87
|
+
output for 1m 15s`, `Reconnecting 2/8 · retry in 12s`, and `No progress for 6m · Esc to stop`.
|
|
88
|
+
- `heartbeat` events carry optional `activeTools` and `oldestToolMs`; hosts must tolerate both.
|
|
89
|
+
|
|
90
|
+
- **Edit the follow-up and steering queue from its own page.**
|
|
91
|
+
- `/follow-up`, and clicking a `Steer:` or `Follow-up:` row in the transcript, opens a page that
|
|
92
|
+
separates the two kinds, marks the next entry, and offers edit, send next, remove and return to
|
|
93
|
+
the composer. Queued images are preserved and marked `· images`.
|
|
94
|
+
- An explicit stop (`/stop` or Esc) now sends one unconsumed steering message before the
|
|
95
|
+
follow-ups, so a correction typed while the reply ran is applied first. A normal completion
|
|
96
|
+
still drains in FIFO order, and nothing is drained on a retry, a failure or a non-user
|
|
97
|
+
interruption.
|
|
98
|
+
|
|
99
|
+
- **Every question sketch is drawn on one 80-column canvas (ADR-0080).**
|
|
100
|
+
- The `ask_user` guidance asks the model for its `uiSketch` on a fixed 80-column canvas, and the
|
|
101
|
+
terminal projects every valid sketch to 80 content columns: short rows are padded, a standalone
|
|
102
|
+
divider spans the canvas, and the frame stays inside the dock with horizontal panning.
|
|
103
|
+
- Padding is display-only. The permissive validator (1–24 lines, 80 columns), stored events and
|
|
104
|
+
answer payloads are unchanged, and a host may keep its literal, scrollable preview.
|
|
105
|
+
|
|
106
|
+
- **No work-slice budget by default (ADR-0081).** A reply is no longer ended at 320 tool calls or
|
|
107
|
+
60 minutes, and is no longer continued as a "next slice". The defaults are now no tool-call, time
|
|
108
|
+
or token limit; `workSlice` on a run and `XINGULAR_WORK_SLICE` at launch still set one. The prompt
|
|
109
|
+
no longer tells the model a budget exists, and the standard prompt's "ends only when the guard
|
|
110
|
+
hands it back" now reads "keep working until the request is done or the person interrupts". The
|
|
111
|
+
three-compaction guard stays. This changes the stable prompt prefix once.
|
|
112
|
+
|
|
113
|
+
- **Phase-led flexible reporting guidance (ADR-0079).** Final reports account for a reader picking
|
|
114
|
+
up cold, state when verification was not run or failed, and give subagents a concise caller-facing
|
|
115
|
+
report contract. Substantial multi-part reports often use content-named Markdown headings, with
|
|
116
|
+
no fixed heading vocabulary; the duplicated progress-update line is removed from `reporting` and
|
|
117
|
+
remains in `writing`. One example now demonstrates headings while the short blocked-publish
|
|
118
|
+
example stays prose.
|
|
119
|
+
|
|
120
|
+
- **A plan run may conclude that no plan is needed (ADR-0077).**
|
|
121
|
+
- A plan-mode reply with no outcome block is a valid `no_plan` ending: no plan card, no notice, no
|
|
122
|
+
warning, and no repair turn. `plan_ready` and `blocked` are unchanged.
|
|
123
|
+
- The plan instructions say to check whether the requested work already exists, to name the
|
|
124
|
+
evidence and stop when it does, and that a person's instruction not to plan outranks the
|
|
125
|
+
mode's output shape. The one hidden repair stays, but only for a block the model started and
|
|
126
|
+
left incomplete, empty or in conflict; it may finish that block, state that there is nothing to
|
|
127
|
+
plan, or return the blocked block.
|
|
128
|
+
- Plan tags inside fenced or inline code are text, not outcomes, so a reply that quotes plan
|
|
129
|
+
syntax is no longer `invalid`.
|
|
130
|
+
- The terminal's warning reads “The plan reply left its plan block incomplete, so no plan was
|
|
131
|
+
offered.” The App needs no change: it already shows a card only for a complete block.
|
|
132
|
+
|
|
133
|
+
- **Every tool-like name in CamelCase.**
|
|
134
|
+
- `toolDisplayName` moves to `src/terminal/toolName.ts` and splits on any separator, so
|
|
135
|
+
`todo_write`, `computer-screenshot`, `computer.screenshot` and `customTool` all read in
|
|
136
|
+
CamelCase and the letters a name already has are kept.
|
|
137
|
+
- The todo card reads `Todo` instead of `todo`; a custom message carries its type through the same
|
|
138
|
+
helper (`note` reads `Note`); a running child's activity reads `Read` rather than `read`; and
|
|
139
|
+
the approval prompt, the phone page's transcript and its approval card use the same names.
|
|
140
|
+
- The `/todo` empty-state notice names `TodoWrite` rather than `todo_write`.
|
|
141
|
+
- **Codex's final-answer guidance, adopted verbatim (ADR-0076).**
|
|
142
|
+
- The `reporting` section drops the four content questions, the by-hand check, the next-step
|
|
143
|
+
block, the evidence table, the anti-pattern table and one example. It now carries Codex's
|
|
144
|
+
final-answer and technical-communication text: self-contained, outcome first, what changed and
|
|
145
|
+
why, how it was tested, risks and limits, evidence summarized, tables for comparisons, length
|
|
146
|
+
by complexity, prose before lists. It is 3.7k characters (about 0.8k tokens), down from 9.2k.
|
|
147
|
+
- Identity names the model (`Launch.model`, when the host knows it) and adds Codex's
|
|
148
|
+
"collaborate until the intended goal is completely handled" sentence. A model switch after the
|
|
149
|
+
pack is compiled leaves the line naming the starting model.
|
|
150
|
+
- A new `personality` standard section carries Codex's personality paragraph; the unclear-scope
|
|
151
|
+
rule becomes Codex's wording with `ask_user` for the follow-up question.
|
|
152
|
+
- Codex's work rules join the tool guidance: `rg` first, no decorative command separators, shell
|
|
153
|
+
quoting, no reused `$HOME`, no long blocking sleeps, tests only where meaningful and broadening
|
|
154
|
+
them only when justified. Codex's skill and plugin principles join the Wiki guidance.
|
|
155
|
+
- **No todo gate; a reply ends when the model ends it (ADR-0075).**
|
|
156
|
+
- The `stop-gate` extension, its three-nudge cap and its displayed `xingular-stop-gate` messages
|
|
157
|
+
are removed. A reply the model ends settles `completed`; a stale todo item no longer marks it
|
|
158
|
+
interrupted, and no checkpoint is written for it.
|
|
159
|
+
- `STOP_GATE_GUIDANCE` becomes `WORK_SLICE_GUIDANCE`; `TODO_GUIDANCE` is relaxed and no longer
|
|
160
|
+
says a reply is sent back. `XINGULAR_STOP_GATE` is retired and ignored if set.
|
|
161
|
+
- A goal's stop (blocked, paused, at a limit) and the work-slice guard keep their codes and
|
|
162
|
+
checkpoints. The goal loop is the only layer that continues a reply.
|
|
163
|
+
- A login that blocks the work now names the exact command in the reply: reporting guidance,
|
|
164
|
+
autonomy, `ask_user` and the todo guidance carry the rule, with a publish-blocked example.
|
|
165
|
+
- **A large, content-block reporting prompt (ADR-0073); superseded by ADR-0074.**
|
|
166
|
+
- The `reporting` section in `src/prompt/reporting.ts` is about 15.8k characters: outcome first,
|
|
167
|
+
required what-changed / how-to-test / what-to-do-next blocks for a change, optional beyond,
|
|
168
|
+
departures, unverified and open-question blocks, five worked examples and an anti-pattern table.
|
|
169
|
+
- Headings are the model's choice; the three fixed headings from ADR-0068 are gone.
|
|
170
|
+
- `REPORTING_BUDGET` rises to 18,000, and the section is never cut.
|
|
171
|
+
- The peer study is `docs/study/STUDY-0006-reporting-prompts.md`.
|
|
172
|
+
- **Report content, not report blocks (ADR-0074).**
|
|
173
|
+
- The `reporting` section is about 8.9k characters (about 2.1k tokens, down from 3.7k), and
|
|
174
|
+
`REPORTING_BUDGET` falls to 12,000. The section is still last in the stable prefix and never cut.
|
|
175
|
+
- The four required blocks are gone. A reply answers what happened, what changed or was decided,
|
|
176
|
+
what only a person can check and what they do next, in any words and any order.
|
|
177
|
+
- Checks the agent already ran are one line of evidence each — command and result — and are never
|
|
178
|
+
steps for the person. A by-hand check covers only what the agent could not do: a screen, a
|
|
179
|
+
sign-in, a document's tone, a diff or PR, a publish, a deploy; it is left out when nothing needs
|
|
180
|
+
a person, with no "nothing to check" line.
|
|
181
|
+
- "Nothing needed" and "Nothing needed next" are banned. A finished reply with nothing left ends
|
|
182
|
+
on its last real point.
|
|
183
|
+
- Headings are free: no required name and no preferred set. Cross-domain examples and a
|
|
184
|
+
shape-by-work table replace the four-heading vocabulary.
|
|
185
|
+
- Three worked examples replace the five; the observed failure — a person's "how to test" filled
|
|
186
|
+
with commands the agent ran — is an anti-pattern row.
|
|
187
|
+
- The stable prefix changes, so existing sessions miss the provider cache once after the upgrade.
|
|
188
|
+
- **Skill installation guidance and package skill layouts.**
|
|
189
|
+
- The release-owned `plugin-authoring` skill now says where a skill is installed (a project's
|
|
190
|
+
`.pi/skills` and `.agents/skills`, the user's `~/.agents/skills`, the shared state folder), to
|
|
191
|
+
copy a whole skill folder, and that `.claude/skills` is never read. It also says which installs
|
|
192
|
+
only a person commits, and that `plugin_propose` is not an install route.
|
|
193
|
+
- `plugins.install` refuses a GitHub or GitLab `tree`/`blob` page address with the repository
|
|
194
|
+
address and the skill routes, instead of a raw git error.
|
|
195
|
+
- A package's foreign plugin manifest (`plugin.json`, `.claude-plugin/plugin.json`,
|
|
196
|
+
`.codex-plugin/plugin.json`) may declare `skills`; those folders load as package skills, under
|
|
197
|
+
the package's switch and filter.
|
|
198
|
+
|
|
199
|
+
- **Codex's prompts and `/goal`; the completion check moves behind `/goal` (ADR-0072).**
|
|
200
|
+
- **Ordinary replies.** No model-judged check runs on them. The todo gate stays and says the list
|
|
201
|
+
is progress, not the limit of the work; `TODO_GUIDANCE` now says the request is the scope.
|
|
202
|
+
- **Prompt.** A person's own session reads Codex's autonomy and persistence, when-to-ask,
|
|
203
|
+
steering and compaction, and writing-style rules as separate sections, and a longer reporting
|
|
204
|
+
section: unfinished work says so on the first line, with the reason and the next step.
|
|
205
|
+
`ask_user` is never used to ask permission, and no answer means continue.
|
|
206
|
+
- **Failures from outside the session.** A test or error that does not come from the session's
|
|
207
|
+
work is reported with its command and output, not fixed, unless the person asks. It stays off
|
|
208
|
+
the todo list, and it is a reason to stop that the autonomy rules name.
|
|
209
|
+
- **`/goal <objective>`.** A long run the person starts. Codex's `get_goal` and `update_goal`,
|
|
210
|
+
continuation, round-cap and edit prompts, `blocked` after the same blocker on three turns, and
|
|
211
|
+
brakes for idle, failing and erroring rounds. `/goal edit|pause|resume|clear`, a footer label,
|
|
212
|
+
Esc pauses. Caps: 30 rounds or 8 hours (`--rounds`, `--hours`).
|
|
213
|
+
- **A completion claim is checked** once by the same model at low effort with a fresh context.
|
|
214
|
+
`sessions.run` takes `goal`; `run.json` records `goalMode`.
|
|
215
|
+
- **Fixed.** The check sends a session id, so opencode-go no longer answers 400 `MissingSessionID`.
|
|
216
|
+
- Adapted from OpenAI Codex (Apache-2.0); see `NOTICE.md`.
|
|
217
|
+
- **A completion check replaces `finish` (ADR-0071; the every-reply check is superseded by ADR-0072).**
|
|
218
|
+
- **The check.** When a reply that did work ends with its todo list closed or absent, the run's
|
|
219
|
+
own model, at low effort and with a fresh context, judges the person's request against what the
|
|
220
|
+
reply did: `done`, `continue` (the reply is sent back with the reason and next step), or
|
|
221
|
+
`needs_person`. The request is the goal; there is no `/goal` command.
|
|
222
|
+
- **Shared cap.** It shares the stop gate's cap of three nudges per reply and its no-progress rule.
|
|
223
|
+
- **Usage and failure.** Its request counts in the run's usage, and any failure leaves the reply
|
|
224
|
+
as it was.
|
|
225
|
+
- **`finish` is removed.** A live GPT 6 Luna run used `needs_decision` after 23 seconds to ask
|
|
226
|
+
something the handoff already answered. Only the check can now decide that the person is needed.
|
|
227
|
+
- **Prompt.** The `role` paragraph names which decisions are the agent's own, says a document the
|
|
228
|
+
request points to is the request, and says a question the request or files already answer is not
|
|
229
|
+
a question for the person. Its budget rises from 1,500 to 2,200 characters, so it fits uncut with
|
|
230
|
+
the subagent paragraph.
|
|
231
|
+
- **Kill switches.** `XINGULAR_STOP_GATE=off` and `XINGULAR_COMPLETION_CHECK=off` at launch switch a
|
|
232
|
+
layer off, for experiments.
|
|
233
|
+
- **The model is told it has `edit` and `write`.** Pi's `createEditTool` and `createWriteTool` drop
|
|
234
|
+
the definition's prompt line and guidelines, and Pi lists only tools with a prompt line, so every
|
|
235
|
+
terminal and headless run's system prompt named only `read` and `bash`. Models edited files
|
|
236
|
+
through shell scripts instead: one 2-hour terminal run made 156 script edits (14 failed) and no
|
|
237
|
+
`edit` call. `createWorkspaceFileTools` now restores the prompt line and guidelines, as Pi's own
|
|
238
|
+
`createBashTool` does, for both the terminal and the runner. The stable prefix changes once.
|
|
239
|
+
- **A plan no longer leaks its tools into normal mode.** A terminal plan request narrows the active
|
|
240
|
+
tools, and Pi records the restored normal set only with the next request. A rebuild before then
|
|
241
|
+
(a new runtime, resume, switch, fork or tree navigation) replayed the plan set, so normal work ran
|
|
242
|
+
without `edit`, `write`, browser and connected-app tools. One recorded session implemented a whole
|
|
243
|
+
plan that way. The terminal now marks each plan request in the session and restores the normal
|
|
244
|
+
set after any rebuild.
|
|
245
|
+
- **Terminal replies continue across work slices (ADR-0070).** A terminal reply that reaches its
|
|
246
|
+
320-call or 60-minute budget after doing work now continues in place as the next slice, with a
|
|
247
|
+
checkpoint and a notice, up to 8 slices, instead of waiting for "continue" and re-sending the
|
|
248
|
+
whole context uncached. Fruitless, blocked, failed, aborted and plan slices still stop.
|
|
249
|
+
`XINGULAR_WORK_SLICE` also accepts key=value pairs such as `maxToolCalls=15,maxSlices=3`.
|
|
250
|
+
- **One copy of each credential: no more `invalid_grant` from terminals.** A terminal's Pi kept the
|
|
251
|
+
account's tokens in `auth.json` under its own lock while the host, its subagents and usage probes
|
|
252
|
+
refreshed the same token in the Keychain under another, and `terminalEnd` copied the file back
|
|
253
|
+
over whatever the Keychain held. OpenAI rotates refresh tokens, so whichever side refreshed second
|
|
254
|
+
failed with `invalid_grant` and the account needed a new sign-in. A terminal now reads and refreshes
|
|
255
|
+
through the host store (`accounts.credentials.*`, INV-ACC-5), holding its lock for the refresh. An
|
|
256
|
+
`auth.json` left by an older terminal is folded in, newest token first.
|
|
257
|
+
- **A stalled terminal reply is recorded as `stalled`.** Pi's abort reports back through
|
|
258
|
+
`terminal.interrupt` like a person's Esc, which closed the run as `user_abort` before the reply
|
|
259
|
+
settled as `stalled`; one silent 15-minute hang was recorded as the person's abort. The interrupt
|
|
260
|
+
now carries the stall. An interrupt also ends a settling reply's wait for its subagents.
|
|
261
|
+
|
|
262
|
+
- **A reply can no longer quietly stop with work open (ADR-0069).**
|
|
263
|
+
- **Stop gate.** In attended top-level runs, terminal included, a reply that ends while its todo
|
|
264
|
+
list has open items is sent back to the model, naming the items, up to three times per reply,
|
|
265
|
+
and never after a nudge that produced no work.
|
|
266
|
+
- **`finish`.** Added here as the one explicit way to stop with work open; removed again by ADR-0071
|
|
267
|
+
above.
|
|
268
|
+
- **Honest stop codes.** Such a reply settles `interrupted` with the new stop codes `needs_person`
|
|
269
|
+
or `unfinished`, never `completed`, with a checkpoint the harness writes from the todo list,
|
|
270
|
+
files and checks.
|
|
271
|
+
- **`checkpoint_write` is removed.** A run used it as a sign-off and stopped with work open. At a
|
|
272
|
+
work-slice budget the harness now writes the checkpoint itself.
|
|
273
|
+
- **One budget per reply.** The work-slice budget now covers the whole reply: Pi's own
|
|
274
|
+
continuations (nudges, delivered subagent results, plan repair) no longer reset it.
|
|
275
|
+
- **Prompt wording.** The texts that read as permission to stop were rewritten: the todo guidance's
|
|
276
|
+
"final update before your final reply", and `## What would make this complete` "when the run
|
|
277
|
+
could be more complete".
|
|
278
|
+
- **Subagents.** `spawn_subagent` now returns the child's tools, and the read-only profiles say up
|
|
279
|
+
front when a brief needs a tool they lack.
|
|
280
|
+
- **Hosts.** Accept the two new stop codes and offer Continue for them.
|
|
281
|
+
- **Restart required.** A live terminal session keeps the code it started with, so restart it to
|
|
282
|
+
get the gate.
|
|
283
|
+
- Do the job the request implies, and report it apart from the request. A standard session's role
|
|
284
|
+
paragraph now sets the scope of the work — the obvious adjacent step, what the work itself exposes,
|
|
285
|
+
the check it needs, inside the working folder and away from what a person must decide (a deploy, a
|
|
286
|
+
secret, remote data, money), without asking first inside those bounds — and the reporting guidance
|
|
287
|
+
requires two headings when they apply: `## Beyond what you asked` and
|
|
288
|
+
`## What would make this complete` (ADR-0068). The reporting budget rises from 2,000 to 2,400
|
|
289
|
+
characters so both fit uncut. All of it is stable-prefix text, so the cached prefix changes once
|
|
290
|
+
per session.
|
|
291
|
+
- Say in the prompt when a reply may end. The standard session's role paragraph, the opening of the
|
|
292
|
+
reporting guidance and the todo guidance now say that an open todo item, a passing check or a
|
|
293
|
+
partial result is not a reason to end the turn, and name the reasons that are: the request is done,
|
|
294
|
+
the work-slice guard hands the reply back, a person's decision is needed, or the person interrupts.
|
|
295
|
+
ADR-0069 below now enforces it in the runner. A sweep of 822 runs in seven days found 207 that ended with work left
|
|
296
|
+
(137 within 30 tool calls, median 17, and 191 with no checkpoint), which is what the wording is
|
|
297
|
+
for. All three texts are in the stable prefix, so this changes the cached prefix once.
|
|
298
|
+
- Reword the final-reply guidance so the outcome leads and structure follows what the answer needs. The
|
|
299
|
+
reporting guidance is part of every request's stable prefix, so this changes the cached prefix.
|
|
300
|
+
- Keep the provider cache working after a compaction (ADR-0067). The compaction checkpoint now arms only
|
|
301
|
+
for a compaction during the running reply, is built once, and sits right after the summary instead
|
|
302
|
+
of being rebuilt at the end of every request. A request after a compaction is again the previous
|
|
303
|
+
request plus new items, so Codex WebSocket continuation and prefix caching apply. Before, every later
|
|
304
|
+
turn of a compacted session resent its whole context: one measured session fell from 94–99% to
|
|
305
|
+
18–24% cache hits after its first compaction.
|
|
306
|
+
- Flag a low prompt-cache hit rate in the terminal's composer status bar. `R<percentage>%` covers the last
|
|
307
|
+
10 model responses instead of the whole session (`recentCacheUsage`, `CACHE_HIT_WINDOW`), and the rate
|
|
308
|
+
gets a yellow `⚠` below 70 percent and a red one below 40 percent. The warning stays in the status bar;
|
|
309
|
+
no cache-hit notice is added to the transcript. A window of one response, or one with no cache reads or
|
|
310
|
+
writes, is not judged (`cacheHitLevel`, `CACHE_HIT_WARNING_PERCENT`, `CACHE_HIT_CRITICAL_PERCENT`).
|
|
311
|
+
|
|
312
|
+
- Refine a variant from the terminal and keep checkpoints of it (PROP-0052, ADR-0065, ADR-0066).
|
|
313
|
+
`/refine [what to look at]` replays the latest request typed in this chat from a snapshot of the
|
|
314
|
+
folder as that turn found it, in throwaway shared clones, after a confirmation that shows the run
|
|
315
|
+
count and models; it runs in the background, and `/refine review` shows every candidate's changes
|
|
316
|
+
and output and adopts any of them. Guidance reaches improvers and composers only, never the blind
|
|
317
|
+
selector. Task runs default to this chat's model; `--model` sets the improver's, and an adopted
|
|
318
|
+
version records the model it was tuned on. `/variant` switches this conversation to another
|
|
319
|
+
version at the next turn (resuming the same conversation), restores, compares, tags, and takes
|
|
320
|
+
single components back from an earlier version. New methods: `refine.fromRun`,
|
|
321
|
+
`refine.candidateDiff`, `refine.candidateOutput`, `variants.tag|untag|tags|resolve|revert`. Run
|
|
322
|
+
records gain `workspaceSnapshot`, version records `tunedFor`, and scopes `tags.json`.
|
|
323
|
+
|
|
324
|
+
- Start a conversation this account cannot use on the account's newest selection. A resumed
|
|
325
|
+
conversation keeps its model while the account offers it and holds its provider's credentials;
|
|
326
|
+
otherwise the terminal starts it on the mode's choice, then normal's, then the newest selection in
|
|
327
|
+
any mode, with that selection's effort, writes the model change into the conversation, and says in
|
|
328
|
+
one notice which model it replaced. A fallback is never saved as the person's choice, and with no
|
|
329
|
+
usable saved model Pi's own fallback message stands (ADR-0064).
|
|
330
|
+
|
|
331
|
+
- Make unfinished-work handoffs actionable: the stable reporting guidance now names the person’s
|
|
332
|
+
concrete decision or the next action and its owner for each material blocker, without imposing a
|
|
333
|
+
fixed heading (PROP-0051, ADR-0063).
|
|
334
|
+
|
|
335
|
+
- Share the account sign-in between `npm run dev` and the installed `xagent`. A standalone launch
|
|
336
|
+
can now take its account identity from another state directory with `--account-state <dir>`
|
|
337
|
+
(`HarnessOptions.accountsDir` plus that state's `secrets.json`), and `npm run dev` passes the
|
|
338
|
+
installed one, so one provider sign-in serves both while development keeps its own data,
|
|
339
|
+
approvals and plugin trust (ADR-0062).
|
|
340
|
+
|
|
341
|
+
- Require owner-prefixed plugin commands on terminal and structured sessions. Plugin-owned prompt
|
|
342
|
+
templates join extension commands under `/<owner-prefix>:<name>`, with no bare plugin aliases.
|
|
343
|
+
A package can select a root template with `harness.defaultPrompt`; owner and route collisions fail
|
|
344
|
+
closed. Standalone templates, `/skill:<name>` and core commands remain (ADR-0061).
|
|
345
|
+
|
|
346
|
+
- Make an approval a control, never a typed permission. The compiled guidance now tells the model to
|
|
347
|
+
call the tool, the Harness pauses that exact call (`waiting_for_approval`), and Allow resumes it in
|
|
348
|
+
the same turn; a denial returns a tool result on the still-running turn and says so, instead of
|
|
349
|
+
inviting another prose request. Nothing outside the workspace changes before the click, and Full
|
|
350
|
+
Permission remains the standing bypass (INV-GATE-9, ADR-0060).
|
|
351
|
+
|
|
352
|
+
- Record structured tool refusals and run stop codes, and expose them in trajectory search and the
|
|
353
|
+
terminal trajectory page. Compaction events include available token measurements; older run
|
|
354
|
+
records remain readable without these fields.
|
|
355
|
+
|
|
356
|
+
- Keep a refused question answer in the terminal. A choice, note or typed answer that the Harness
|
|
357
|
+
would reject now stays in the dock with an inline reason, instead of closing the form and losing the
|
|
358
|
+
draft; the reason names the question and the field (selection, typed answer or note), and the answer
|
|
359
|
+
is checked against the server rule before it is sent. The terminal was previously reopening an empty
|
|
360
|
+
question after any rejection, so a second Continue skipped everything.
|
|
361
|
+
|
|
362
|
+
- Scroll a `/btw` answer taller than its block. PageUp/PageDown now reach the side-question dock
|
|
363
|
+
while it is open, and the mouse wheel over the block browses it too; before this the transcript
|
|
364
|
+
consumed those keys, so the block's `PgUp/PgDn/wheel browse` hint did nothing. When the answer fits, the
|
|
365
|
+
keys scroll the transcript as before.
|
|
366
|
+
|
|
367
|
+
- Drop the context-use reading from the terminal's composer status line, so it no longer ends the
|
|
368
|
+
token group with a figure such as `6.6%/?`. The line keeps the project and branch, account, model
|
|
369
|
+
and effort, and input/cache hit rate/output tokens; the share of the window stays on the `/context`
|
|
370
|
+
page. Both the OpenTUI status bar and the exported `tui/status` band lose the reading.
|
|
371
|
+
|
|
372
|
+
- Render the `/btw` side answer as Markdown instead of plain text. Headings, emphasis, lists,
|
|
373
|
+
quotes, links, tables and fenced code use the theme's markdown colours, and a streaming answer
|
|
374
|
+
re-renders in place. Terminal control sequences in model output are still removed.
|
|
375
|
+
|
|
376
|
+
- Add `/remote-control` (alias `/rc`): continue a terminal session from a phone or iPad, as Claude
|
|
377
|
+
Code's `/rc` does, without a cloud relay. The harness serves a small phone page on the computer's
|
|
378
|
+
Tailscale address, or its private Wi-Fi address, and the terminal shows a QR code for a one-device
|
|
379
|
+
pairing link. The person at the terminal allows each device; a paired phone then sends messages,
|
|
380
|
+
watches the reply stream, stops it, and answers approvals and questions through the same paths
|
|
381
|
+
the terminal uses. Every body is sealed with a key that reaches the phone only in the QR code's
|
|
382
|
+
fragment, keys live in memory, and remote control ends with the session. `xagent --remote-control`
|
|
383
|
+
turns it on at start; `/rc off` stops it. Terminal runs now also record streamed `message.delta`
|
|
384
|
+
events. New dependencies: `tweetnacl`, `uqr` (ADR-0056, page 15).
|
|
385
|
+
|
|
386
|
+
- Recover a plan run whose reply loses its plan block. An attended top-level plan run now makes one
|
|
387
|
+
hidden format-repair turn in the same run, asking the model to re-send its own plan in one complete
|
|
388
|
+
block; a failed repair leaves the run completed and the terminal shows a warning instead of a plan
|
|
389
|
+
choice. The plan-research children, commands, probes, improvers, reflections and other unattended
|
|
390
|
+
runs are unchanged (ADR-0055).
|
|
391
|
+
|
|
392
|
+
- A live terminal reply now reports a heartbeat every 30 seconds, and one that produces nothing but
|
|
393
|
+
heartbeats for 15 minutes is ended as `interrupted` with reason `stalled` instead of showing a run
|
|
394
|
+
that never settles. A running tool gets 30 minutes and an unanswered approval or question is never
|
|
395
|
+
cut short. Before this, a terminal reply reported no heartbeat at all, so the run sweep waited the
|
|
396
|
+
full 30-minute silence window and recorded `owner_gone` while the process was alive (ADR-0054).
|
|
397
|
+
|
|
398
|
+
- Stop refusing repeated work. A reply is no longer refused, or ended, for calling the same tool
|
|
399
|
+
with the same arguments three times, for a Bash check that keeps failing, or for editing one path
|
|
400
|
+
more than four times: those calls are ordinary work, and the reply budget is the single bound. The
|
|
401
|
+
320-call/60-minute budget, its checkpoint handoff, slice continuation and the three-compaction
|
|
402
|
+
thrash rule are unchanged, and the `stuck` checkpoint reason stays readable in existing runs
|
|
403
|
+
(ADR-0053).
|
|
404
|
+
|
|
405
|
+
- Make a skill named in a message required for that request. `$name` is a skill invocation at any
|
|
406
|
+
word start, not only as the first token: `Launch.requiredSkills` carries it and the compiler
|
|
407
|
+
renders a built-in dynamic `required-skills` section (order 52, 12,000 characters) from the pinned
|
|
408
|
+
variant's `SKILL.md`, naming an unavailable skill honestly and falling back to the shipped
|
|
409
|
+
`plugin-authoring` skill. It changes no tool or permission, and it belongs to the request, so an
|
|
410
|
+
identical one is delivered again; structured sessions deliver it through `sessionLaunch` and the
|
|
411
|
+
terminal appends the same text as a hidden `xingular-required-skills` message
|
|
412
|
+
(`requiredSkillsText`). The terminal no longer rewrites a leading `$name` to `/skill:name`, and its
|
|
413
|
+
`$` palette opens at the caret and inserts there, keeping the rest of the draft (ADR-0048).
|
|
414
|
+
|
|
415
|
+
- Bound delegation per run and per profile. `spawn_subagent` and `wait_subagents` still exist, but a
|
|
416
|
+
run now starts at most four distinct child conversations: two `worker`, three `explorer`, one of
|
|
417
|
+
any other named profile and one with no profile. The parent's `subagents` option overrides them
|
|
418
|
+
(`maxChildren`, `maxByProfile`, `maxOther`, `maxUnprofiled`, clamped to 0–50), so a host and the
|
|
419
|
+
terminal receive the same defaults; `Subagents.spawn` refuses a child past a limit with an
|
|
420
|
+
`invalid_request` that tells the model to do the work itself, and starts no run. The count covers
|
|
421
|
+
the runs the parent was continued from, continuing a stopped child costs no slot, and a concurrent
|
|
422
|
+
spawn reserves its slot before it launches (ADR-0052).
|
|
423
|
+
|
|
424
|
+
- Record where a request's characters went. `renderSized` returns the prompt and each section's
|
|
425
|
+
size, `Delivery.sizes` stores them on the recorded pack, and `Source.chars` attributes a variant's
|
|
426
|
+
tool guidance inside the tools section, so `context.attribution` (`terminal.context` in the
|
|
427
|
+
terminal) can return one row per contributor with its estimated tokens and share of the window,
|
|
428
|
+
reconciled to the provider's measured total, plus one row's text. `context.snapshot` also records
|
|
429
|
+
the compaction headroom the run was held to (`compaction: { enabled, reserveTokens }`) from Pi's
|
|
430
|
+
own settings.
|
|
431
|
+
|
|
432
|
+
- Define an opt-in approved-window screenshot contract. `computer_screenshot` in
|
|
433
|
+
`src/computer/screenshot.ts` takes a host backend that captures exactly one currently approved
|
|
434
|
+
window, excludes the desktop, other windows and overlapping overlays, and refuses with
|
|
435
|
+
`COMPUTER_SCREENSHOT_UNAVAILABLE` instead of falling back to a display capture. It goes through
|
|
436
|
+
the ordinary tool gate and is not plan-mode safe; the standalone terminal has no backend, and the
|
|
437
|
+
existing macOS host capture has not adopted the contract (ADR-0050).
|
|
438
|
+
|
|
439
|
+
- Watch approvals and questions through `terminal.pending.wait`: a control-key-protected revision
|
|
440
|
+
snapshot that returns as soon as the pending set changes and otherwise waits at most 20 seconds,
|
|
441
|
+
waking on additions, removals and disposal. `terminal.pending` stays available, the client
|
|
442
|
+
resynchronizes after errors, and no persisted state or public protocol changes (ADR-0051).
|
|
443
|
+
|
|
444
|
+
- Swap the OpenTUI send keys back. `Return` sends, or queues a follow-up behind a running reply, and
|
|
445
|
+
`Cmd+Return`, `Ctrl+Return` or `Alt+Return` steers that reply. The `app.message.followUp` action is
|
|
446
|
+
`app.message.steer` again, so a `keybindings.json` entry under the newer name needs renaming.
|
|
447
|
+
|
|
448
|
+
- Keep a stray mouse report out of input. When the terminal delivers a mouse report in two pieces
|
|
449
|
+
across the input parser's timeout, its `<button;column;row>` tail is dropped instead of being
|
|
450
|
+
typed into the composer or a single-line field, so a scroll can never become a run's prompt or a
|
|
451
|
+
filter. Text typed at human speed is never touched, pastes are never rewritten, and the Trajectory
|
|
452
|
+
page no longer prints a recorded mouse report.
|
|
453
|
+
|
|
454
|
+
- Give top-level sessions a name and a current-state prompt. An unnamed session derives a
|
|
455
|
+
provisional six-word name from its first substantive request; greetings and short replies stay
|
|
456
|
+
unnamed, and the model can revise the name. Each top-level run also receives a request-scoped
|
|
457
|
+
`Session state` update with the current name, this run's empty todo, and the previous run's list
|
|
458
|
+
as context, in both the terminal and structured sessions. The stable system prompt is unchanged.
|
|
459
|
+
|
|
460
|
+
- Make annotating simpler. `/annotate:` is one full-screen page with an Annotate tab and an All
|
|
461
|
+
annotations tab (`/annotate:notes`); the duplicate `/annotate:annotate` is gone. The page takes the
|
|
462
|
+
page address, a DevTools port or an app to start in its own field, so no dialog hides behind it.
|
|
463
|
+
The popover has two buttons, Annotate and Annotate & send; every annotation is shared with the
|
|
464
|
+
session, and a note is either unsent or sent. There is no queue and no "fixed" status, and the
|
|
465
|
+
agent's `page_notes_mark_fixed` tool is removed. New `/annotate:submit <request>` sends the unsent
|
|
466
|
+
annotations with your request, and `/annotate:clear` resolves them. Press `a` to list the Electron
|
|
467
|
+
and Chromium apps running with a DevTools port, type a port, or start an app with one. Running
|
|
468
|
+
`/annotate:` again returns to the window that is still open, with its URL and the inspector on; the
|
|
469
|
+
field appears only when no window is open. Sends no
|
|
470
|
+
longer fail silently: a key pressed while the page is busy gets a notice, and a send held back
|
|
471
|
+
while the agent was working is retried until the session is free. Any page that opens a dialog as
|
|
472
|
+
it starts now shows it above itself (PROP-0048, ADR-0044).
|
|
473
|
+
|
|
474
|
+
- Install agent plugins written for other harnesses as they are. A package's `agents/*.md` files
|
|
475
|
+
become subagent profiles (a new `agent` contribution, switched like a skill), named by their
|
|
476
|
+
frontmatter, with other harnesses' tool names translated and nothing able to replace an existing
|
|
477
|
+
profile. A package with no `package.json` name takes its name and description from `plugin.json`
|
|
478
|
+
(or `.claude-plugin/` / `.codex-plugin/`). Google's Elephant-Goldfish Model, for example, installs
|
|
479
|
+
with `xagent plugins install git:https://github.com/google/elephant-goldfish-model@<commit>` and
|
|
480
|
+
brings its 7 skills and 9 reviewer profiles.
|
|
481
|
+
|
|
482
|
+
- Keep subagent progress through Esc, failures and restarts. A parent continues a stopped child with
|
|
483
|
+
`spawn_subagent { continue: <runId> }`, which reopens that child's own conversation with its
|
|
484
|
+
profile, tools, account and variant, instead of starting it again. The next reply hears about
|
|
485
|
+
stopped children before it answers. A reopened terminal conversation still adopts children an
|
|
486
|
+
earlier launch started. The `/subagents` page now shows the main agent as a `main` row (a
|
|
487
|
+
reserved profile name), and both the page and the rows under the status line come back when a
|
|
488
|
+
conversation is reopened, until the next run starts. Run records keep their `model` and `effort`
|
|
489
|
+
(ADR-0043).
|
|
490
|
+
|
|
491
|
+
- Make the shell, write and edit tools work on Windows right after install. Commands run in Git
|
|
492
|
+
Bash when it is installed and in PowerShell otherwise; the tool keeps the name `bash`. Windows has
|
|
493
|
+
no write-boundary sandbox, so each command asks for a one-call approval unless Full Permission is
|
|
494
|
+
on, and plan-mode Bash is refused there. Write and edit run their atomic helper with Node
|
|
495
|
+
directly. `/doctor` names the Windows shell instead of reporting it as delegated to Pi (ADR-0042).
|
|
496
|
+
|
|
497
|
+
- Make `/doctor` check the use of Bash, not only that the executable exists. The local shell check
|
|
498
|
+
now also reports the platform write-boundary backend (sandbox-exec on macOS, bubblewrap on Linux)
|
|
499
|
+
whose absence stops every Bash call before it runs. The new live check runs one fixed command the
|
|
500
|
+
harness wrote (`printf`) in the working folder through the same root, hard-link scan and sandbox a
|
|
501
|
+
real Bash call takes, after the policy gate, and reports only the exit status. A diagnostic never
|
|
502
|
+
widens the boundary, so a command that the boundary refuses before the shell starts is reported
|
|
503
|
+
as blocked with that reason.
|
|
504
|
+
|
|
505
|
+
## 1.3.0 — todo progress, bounded work, and plugin management
|
|
506
|
+
|
|
507
|
+
- Make session naming and progress guidance concrete: name a session before the first tool call when work needs tools or changes state, and keep a todo list for multi-step work. Prompt and tool descriptions use the same wording; guidance remains advisory and subagents retain the parent's title.
|
|
508
|
+
- Rename the run checklist to todo: `todo_write`, `todo.updated`, `runs.todo`, the `todo` plugin and a todo block in the terminal. Add `/todo` (alias `/checklist`) to show the current list in the terminal and App without a model request. Existing runs still read `checklist.updated`; pinned `checklist_write` calls continue through `todo_write`; `runs.checklist` and `continuation.checklist` remain deprecated aliases for one release (PROP-0045).
|
|
509
|
+
- Raise work-slice defaults to 320 tool calls and 60 minutes, with no token ceiling unless configured. Make stall detection progress-aware, bound plan research to eligible read-only profiles, and restore the latest plan/todo context after compaction (PROP-0044–0046; ADR-0039).
|
|
510
|
+
- Separate `/plugins` local package management from `/hub` Community catalog discovery. Preserve all-channel Hub receipts and visible cache/refresh state; keep Hub-owned package removal receipt-aware and prevent floating updates (PROP-0047; ADR-0041).
|
|
511
|
+
- Improve terminal skill completion and highlighting while preserving command and argument distinctions.
|
|
512
|
+
- Make Doctor's Bash readiness check verify the required write-boundary sandbox and add a fixed, no-network live probe through the same workspace boundary; report policy blocks accurately without widening permissions.
|
|
513
|
+
|
|
514
|
+
## 1.2.0 — workspace safety and terminal capabilities
|
|
515
|
+
|
|
516
|
+
- Scope model-controlled file writes and Bash to the active project workspace by default; reject the filesystem root as a workspace. Native writes use revalidated atomic replacement; Bash fails closed on incomplete hard-link scans or unavailable sandboxing (macOS also blocks workspace-local hard links). Explicit outside-scope Bash requires approval before one execution, showing the complete escaped command; output never triggers approval or retry.
|
|
517
|
+
- Let plan mode run Bash in a read-only OS sandbox (no writes except a discarded temp folder, no network, nothing that widens it), so plans can check claims with commands such as `git log` (PROP-0043).
|
|
518
|
+
- Make plan mode evidence-grounded and allow bounded read-only research delegation. Rehydrate the active checklist and plan instructions after compaction, and retain the latest subagent status until the next run.
|
|
519
|
+
- Give plugin-owned terminal commands stable owner namespaces and make Harness-owned routes first-class core commands. Prior command forms remain hidden compatibility aliases for one release; update scripts and keybindings to canonical routes.
|
|
520
|
+
- Extend page annotations into open shadow roots while preserving existing document-only annotation targets. Closed shadow roots and frames remain unsupported.
|
|
521
|
+
- Record each run's resolved workspace root as an additive run-record field; older records remain readable.
|
|
522
|
+
- Add a searchable saved-session picker and composer history for user prompts, Bash commands and executed slash commands, restoring the draft, cursor, mode and attachments while browsing. Fix compact question-dock sizing/scrolling and narrow-page footer rendering.
|
|
523
|
+
- Add reproducible PTY and session-runtime profiling plus [EXP-0003's baseline report](docs/experiments/EXP-0003-performance-audit/results.md); it measures 1.1.1 on a dirty worktree, not 1.2.0.
|
|
524
|
+
- Update the pinned Pi runtime to 1.4.0, with the terminal adapter's private hooks and HTTP dispatcher chunk rechecked against it.
|
|
525
|
+
- Fix the work-slice stall guard reporting a reply's own checklist updates as repeated work. A call's identity is its name and every argument, hashed, instead of six fixed field names that made every `checklist_write` look alike; the counts and the nudge start fresh in each reply, so a terminal session no longer carries a repeat from one reply into the next. Three identical calls are still named once, and a repeat after that still ends the slice.
|
|
526
|
+
- Raise the work-slice defaults to 320 tool calls and 60 minutes, and drop the token cap by default: calls and the clock are the bound, and a token ceiling is available per run with `workSlice.maxNewTokens` for whoever wants one. A continuation keeps the policy, and eight slices still cap unattended work. See PROP-0044.
|
|
527
|
+
|
|
528
|
+
## 1.1.1 — agent profiles and named subagents
|
|
529
|
+
|
|
530
|
+
The first published release of the 1.1 line, and npm `latest`. It follows the 1.0.0 baseline; earlier 2.x–4.x numbers keep their existing meaning and are not reused. The 1.1.0 tag was pushed, but its release run stopped before publishing, so nothing was published under 1.1.0. This release carries the same changes, plus the release-pipeline fixes below.
|
|
531
|
+
|
|
532
|
+
- The release pack and smoke scripts take their npm cache from the system temp folder. They previously used a macOS-only path, which failed on Linux runners.
|
|
533
|
+
- The `/help` terminal check matches the documented grouped, scrollable help: it pages until every group is seen, and its expected group is `Plugins`.
|
|
534
|
+
|
|
535
|
+
### Changes in 1.1.0
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
- Add agent profiles (PROP-0029, ADR-0030). A subagent can start from a named profile: the built-in `worker` and `explorer`, a person's `<data root>/agents/<name>.md`, a repository's `.xingular/agents/<name>.md`, or a variant's c5 subagent. A profile narrows the child's tools and plugins and may choose its variant, model and effort. New `agents.list|get|create|remove` methods, `RunRecord.profile`, and `agent`/`unavailableTools` on the spawn result. The prompt's `subagents` section lists every profile. The terminal's `/agents` page browses, creates, edits (in `$EDITOR`), copies and deletes them, and the terminal now passes its variant to subagents, so c5 names work there.
|
|
539
|
+
- The terminal registers `checklist_write` (closing the terminal half of PAR-001), shows each write as a checklist block, and terminal subagents inherit it. The tool description and a new Progress paragraph in the prompt ask the model to keep a checklist for multi-step work, because the person follows progress from it. Each agent keeps its own checklist; there is no shared task pool.
|
|
540
|
+
- The subagent rows move under the status line, after one blank row, and lose their heading. Each row shows the status mark, the profile name in its colour, the title the parent gave the child and `n of m tasks` from its checklist. `/subagents` shows the same fields.
|
|
541
|
+
- Fix the transcript summary of `spawn_subagent`, which read the wrong argument names.
|
|
542
|
+
- Subagents take a title the parent sets (PROP-0030). `spawn_subagent` requires `title`, at most six words; `subagents.spawn` takes an optional one, which defaults to the first line of the brief. The live rows, `/subagents` and the transcript's spawn row show the title instead of the child's session name or brief. `RunRecord.title` stores it.
|
|
543
|
+
- A running subagent's row shows the working spinner in its profile's colour, and an in-progress checklist item shows a yellow dot.
|
|
544
|
+
|
|
545
|
+
## 4.0.0 — breaking terminal command namespace, managed worktrees, and annotations
|
|
546
|
+
|
|
547
|
+
- **Breaking terminal commands:** built-in plugin commands now use the `/plugin:` namespace. Existing `/doctor` and `/trajectory` commands become `/plugin:doctor` and `/plugin:trajectory`; update scripts and keybindings that invoke the old names. New feature commands are namespaced from their introduction.
|
|
548
|
+
- Add Harness-managed Git worktrees for sessions and the terminal, including isolated creation, leases, safe setup scripts, handoff, pruning, and bounded snapshots of work before removal.
|
|
549
|
+
- Add page annotations and queued page notes, with capture, review, resolution, sharing, and delivery through Harness methods and terminal `/plugin:annotate` and `/plugin:notes` surfaces.
|
|
550
|
+
- Add a unified terminal resource browser with persistent full-screen sections for browser tabs, plugins, skills, connectors, variants, and other Harness resources.
|
|
551
|
+
- Upgrade `/plugin:trajectory` to a full-screen Runs/Events browser with searchable event details, selected-event JSON, and responsive split-pane layout.
|
|
552
|
+
- Expand terminal controls for browsing subagent activity and managing browser and plugin settings; document the terminal/host parity boundary.
|
|
553
|
+
- Fix SQLite parameter binding for the supported Node 22 runtime and prevent early-exiting Git commands from raising an unhandled broken-pipe error.
|
|
554
|
+
- Generalize release packaging, smoke checks, registry verification, and CI workflows to use the package version, and require a clean committed tree for release candidates.
|
|
555
|
+
|
|
556
|
+
## 1.0.0 — stable baseline
|
|
557
|
+
|
|
558
|
+
- Established the public stable baseline under Apache-2.0, with compiled ESM SDK modules and declarations. Preserved historical version tags and assigned npm latest after release validation.
|
|
559
|
+
- Add /doctor with passive readiness inspection, selected live probes, cancellable reports and Node/RPC APIs.
|
|
560
|
+
- Include the generic isolated browser backend and document its boundary with App browser UI and native computer control.
|
|
561
|
+
- Add exact-tarball installation/consumer checks and a Bun-aware, two-OS release pipeline.
|
|
562
|
+
- This resets development numbering intentionally; it does not replace any published package.
|
|
563
|
+
|
|
564
|
+
### Included development changes
|
|
565
|
+
|
|
566
|
+
- Send pasted images to the model as images. In the OpenTUI terminal, Cmd+V of an image, a dropped or pasted image path, or `Ctrl+V` (now also on macOS, beside `Alt+V`) attaches the image as a blue `[Image #n]` label, and the image goes in the same user message as image content instead of as a file path the model had to ask about. A paste longer than three lines or 800 characters collapses to `[Pasted text #n +L lines]` and is expanded on send. Backspace, Delete and word deletes remove a label whole. Models without image input refuse the attach. `TerminalRuntime.submit` and `submitPlan` accept `images`; `scripts/verify-terminal.py --attachments-only` checks it in a real PTY.
|
|
567
|
+
- Add a run checklist. Every session with harness tools gets `checklist_write`, which records the model's whole checklist as a new `checklist.updated` run event; `runs.checklist` and `checklistOf` read the latest one, and plan mode allows it. A new built-in `checklist` plugin declares it. Hosts that check event types must accept the new kind. See PROP-0006.
|
|
568
|
+
- Continue a stopped run as a new run. `sessions.run` accepts `continueFrom`; the run reopens the earlier native history, keeps its account, tree version and capability set, and gets a dynamic `continuation` section saying where it stopped (checklist, unanswered requests, last tool, unfinished subagents). `runs.continuation` describes whether a run can be continued, and `Recovery` gains `interruptedRunIds`. New error codes `continuation_unavailable` and `continuation_mismatch`. A restart still never restarts model work. See PROP-0007.
|
|
569
|
+
- Add the opt-in `lessons` first-party plugin: after a completed top-level run, a read-only reflection session may keep one general lesson in the Wiki under `library/lessons/`, using refinement's cue/lesson shape and answer-free guards, capped in count and length. The Wiki pointer section says when lessons exist. Reflection runs carry trigger `reflection`, and the gate refuses anything in them that would need a person. `PiImprover` accepts a role (trigger, identity, tools). See PROP-0008 and ADR-0010.
|
|
570
|
+
|
|
571
|
+
- **Breaking (development snapshot labelled 5.0.0; included in the 1.0.0 baseline):** name the two halves of the harness. The **foundation** is the fixed half (compiler, sessions and run recorder, gate, accounts, trust, the refinement method); a **variant** is the half that mutates (the c1–c8 tree for one scope, formerly the "harness tree"). `INV-FND-1` and `INV-FND-2` state that only a variant changes and that it changes through one validated door. The spec gains a "Foundation and variants" section and a glossary; page 03 is now `03-variants.md` and `INV-TREE-n` is `INV-VAR-n`. See PROP-0009 and ADR-0011.
|
|
572
|
+
- **Breaking, protocol:** the `harnesses.*` methods are `variants.*` and the notice is `variants.changed`. The `harness` parameter of `sessions.run`, `context.compile` and `plugins.inventory` is `variant`; the `tree` parameter and field of the former `harnesses.*` methods is `variant`; `harnesses.materialise` returns `files` in place of `tree`; `treeDir` is `variantDir`; the save error code `harness_invalid` is `variant_invalid`. No aliases are kept.
|
|
573
|
+
- **Breaking, SDK:** `src/tree/` is `src/variant/`. `Tree`→`Variant`, `HarnessChoice`→`VariantChoice`, `TreeTrust`→`VariantTrust`, `readTree`/`writeTree`/`seedTree`→`readVariant`/`writeVariant`/`seedVariant`, `TreeError`→`VariantError`, `RunRecord.harnessScope`/`harnessVersion`→`variantScope`/`variantVersion`, `ContextPack.harness`→`variant`, `Materialised.tree`→`files`. The built-in plugin `harness` is `variant`.
|
|
574
|
+
- **Storage:** `harnesses/`→`variants/`, `versions/<fp>/tree/`→`…/variant/`, `tree-plugin-trust.json`→`variant-plugin-trust.json`, and the experience library's and a refinement's `harnesses/` folders are `variants/`. `open` migrates earlier data once and never overwrites; earlier run records and refinement records stay readable. Prompt text and the stable prefix are unchanged.
|
|
575
|
+
- The improver prompts and the evidence folder's `harness/` names keep the Harness² paper's wording on purpose; they are method text.
|
|
576
|
+
|
|
577
|
+
## 4.0.0 - 2026-10-22
|
|
578
|
+
|
|
579
|
+
- Publish the CLI executable as `xagent`; invoking it without a subcommand opens the OpenTUI terminal. The previous `xingular-harness` executable and interim `xharness` command are removed, so scripts and shell aliases must be updated.
|
|
580
|
+
- Name how refinement's executions run. `refine.start` (and `harness.refine.start`) accepts `executor: { model?, effort?, accountId?, poolId? }`, and `xagent refine run` accepts `--executor-model <id>` (`--model` still sets the improver). A host's own session settings win, then `executor`, then the account default, so a server client can pin the executor model without supplying a host. `summary.json` records `settings: { executor, improver }`. See PROP-0003.
|
|
581
|
+
- Keep refinement workspaces on request. `refine.start` (and `harness.refine.start`) accepts `retainWorkspaces: true`, and `xagent refine run` accepts `--retain-workspaces`: each base, candidate and final execution's workspace is copied whole — binary files included — to `<data>/refine/<id>/rollouts/<label>/workspace/` before the host cleans it up. `refine.candidates` reports each execution's `workspace` path or `null`. Evidence, selection, reflection and the library never read these folders, so refinement stays answer-free; they exist so an outside measurement can grade what an execution produced. Off by default. See PROP-0002.
|
|
582
|
+
- Shape every final reply. The compiler adds a fixed `reporting` section ("Reporting your work", `REPORTING_GUIDANCE`, `SECTION_ORDER.reporting = 95`) to every pack, after the tools: answer or outcome first, then only the parts with content — Files (a table when three or more), Blocked, Worth a look, Check by hand, Next steps — and Markdown tables where several items share fields. A format the person, the application or the current mode asks for wins. The stable prefix changes once, so existing sessions miss the provider cache once. See PROP-0001 and ADR-0007.
|
|
583
|
+
- Make typing in the OpenTUI terminal fast while idle and while a reply streams. Keys render on demand instead of on a fixed 60 Hz tick (idle p50 13.1 → 5.1 ms); the view is a reconciled Solid store, so a streamed delta updates its markdown block in place instead of rebuilding it; background updates are coalesced to one per frame (30 Hz during a run) while input publishes at once; finished messages and session statistics are cached. Streaming CPU fell from 73% to about 15% in the profile. See `docs/experiments/EXP-0002-opentui-typing-latency/`.
|
|
584
|
+
- Never swallow keys typed while a question waits: a character the question dock does not use moves focus to the composer and is typed there. Previously such keys were dropped until the dock collapsed.
|
|
585
|
+
- Read the composer's text before handling each key, so Enter sent in the same input chunk as typed text (a fast typist on a busy machine, or a paste ending in a newline) sends the whole text instead of a stale or empty draft.
|
|
586
|
+
- Reuse session-socket connections. A request may set `keep: true`, and the reply then leaves the connection open for the next request; the client keeps up to four idle connections per socket, unreferenced so short commands still exit. A request without `keep` behaves as before.
|
|
587
|
+
- Add `scripts/profile-terminal-latency.py` (`npm run profile:terminal-latency`) to measure keystroke-to-screen latency against pure Pi and opencode, and let `scripts/verify-terminal.py` match text on a rendered screen when `pyte` is installed.
|
|
588
|
+
|
|
589
|
+
- Animate the OpenTUI working spinner with the star glyphs in Warp too. Warp no longer gets the ASCII `| / - \` line spinner; every terminal uses the same star frames, and Ghostty keeps its own ending.
|
|
590
|
+
|
|
591
|
+
- Keep the OpenTUI home screen when a notice arrives before any conversation, such as `Unknown command: /tihnk`. The notice shows beneath the product mark instead of replacing it, and the composer keeps its "Ask anything…" placeholder.
|
|
592
|
+
|
|
593
|
+
- Swap the OpenTUI send keys back: `Return` sends, or steers a running reply, and `Cmd+Return`, `Ctrl+Return` or `Alt+Return` queues a follow-up. The `app.message.steer` action is renamed `app.message.followUp` again, so a `keybindings.json` entry under the older name needs renaming. Pending steering, follow-up and deferred plan/Bash inputs show above the working line with their delivery type, a queued plan or `!` command acts as a barrier that later inputs wait behind, and `Alt+Up` restores queued text to the draft.
|
|
594
|
+
|
|
595
|
+
- Draw the OpenTUI `select`, `confirm`, `input` and `editor` dialogs, including `/effort` and the Thinking setting, as the same flat centered panel on the scrim that `/model` and the other pages use, instead of a rounded bordered box. The box clipped the heading's `Esc` hint and the option count; centered dialogs now cap their height at the rows the overlay shows.
|
|
596
|
+
|
|
597
|
+
- Show a finished plan in the OpenTUI terminal. A plan request's complete `<proposed_plan>` block renders as a bordered card at the end of the reply, and a choice block above the composer offers `Implement "<title>"` (leaves plan mode, restores the normal tools and the mode's own model and effort, then sends `Implement the plan: <title>`) or `Edit the plan` (stays in plan mode and focuses the composer for revisions). `parseProposedPlan` in `src/sessions/planMode.ts` reads the block; `PlanChoice` in `src/terminal/opentui/planChoice.ts` owns the choice keys. `scripts/verify-terminal.py` gains a plan flow.
|
|
598
|
+
|
|
599
|
+
- Remember the model and effort each mode uses, per account. `src/accounts/choices.ts` stores them in the account's `choices.json`, and `Accounts.choices` / `Accounts.choose` read and write them; the server methods `accounts.choices` and `accounts.choose` and the terminal's `accounts.choices.get` / `accounts.choices.set` expose them, the terminal ones only for its own account. A new terminal conversation starts on the normal mode's saved choice when the account can still use the model; plan and normal switch to their own saved choice on Shift+Tab, and a one-shot `/plan` restores the session's model afterwards. Selections made in the terminal are recorded against the mode they were made in, and the terminal's own changes are never recorded.
|
|
600
|
+
|
|
601
|
+
- Stop a second Harness on the same data folder from interrupting the first one's active runs. Startup recovery now skips an active run whose owner marker (`runs/<id>/owner.json`, written by `runStore`) names a live process other than itself; only runs with a dead or missing owner are marked interrupted. Terminal tool calls that fail now report the cause (`The terminal controller is unavailable: …`), and a failed control claim is retried on the next call instead of being cached.
|
|
602
|
+
- Make OpenTUI the only terminal frontend. `Terminals.prepare` always launches Bun with `dist/terminal-opentui.js`; the `XINGULAR_HARNESS_TUI` opt-in, the legacy Pi terminal entry point and its frontend modules are removed. Bun 1.3.14 or newer is required for build and runtime, and `build:tui` fails when Bun is missing. `HarnessOptions.piProgram` remains accepted but is ignored.
|
|
603
|
+
- Present OpenTUI console pages and the `/model` and `/tree` pickers as centered dialogs: 80% of the terminal (capped at 100 columns by 30 rows), a flat panel, and a scrim that keeps the transcript faintly visible. Small dialogs and plugin full-screen surfaces are unchanged.
|
|
604
|
+
- Draw the OpenTUI command palette above the composer under an orange top rule in the `primary` colour, the only border it keeps.
|
|
605
|
+
- Rank command palette matches by name before description, so typing `/account` offers `/accounts` first instead of `/resume`, whose description mentions an account.
|
|
606
|
+
- Draw the OpenTUI composer as plain top and bottom rules with no panel background, put the working status and spinner above it, and move the model, context and token line underneath.
|
|
607
|
+
- Add Bash mode to the OpenTUI composer: a leading `!` replaces the chevron with `!` and colors the marker and both composer rules with `bashMode` while the command body keeps the normal text color; Backspace on an empty command returns to the prompt, and submitting sends `!command` through the normal Bash gate.
|
|
608
|
+
- Show the OpenTUI command palette as its rows only, without a border, title or key guide.
|
|
609
|
+
- Add leading `!` Bash mode to the standalone terminal composer and an opt-in `initialBashCommand` session input. Commands pass through the Bash gate, run once in native Pi history, and the agent reads the result before replying; busy terminal commands queue as standalone turns.
|
|
610
|
+
- Replace the terminal's titled-border boxes with flat blocks and independent command pages, each with its own tabs and consistent search. Add `/components` to browse the library and, after confirmation, add skills or rules to the active Harness scope as a new version for future sessions. Add `/btw` for a temporary side question and `/stop` to interrupt a reply; remove the separate `/login`, `/trust`, `/bug`, `/changelog`, `/share`, `/scoped-mode` and `/import` commands.
|
|
611
|
+
|
|
612
|
+
## 3.0.0 - 2026-10-19
|
|
613
|
+
|
|
614
|
+
Rebuilt on recursive harnessing (Harness², Apache-2.0, Google LLC). Breaking.
|
|
615
|
+
|
|
616
|
+
- Add harness trees (`src/tree/`): each caller scope has a versioned tree of eight components — system prompt, guardrails, memory, tool guidance, subagents, skills, scripts and plugins — that is validated, content-addressed, and pinned for a whole run. `SessionRunInput.harness` and `TerminalPrepareInput.harness` choose one; run records carry `harnessScope` and `harnessVersion`. Plugin code in a tree loads only after it is trusted (`TreeTrust`).
|
|
617
|
+
- Add refinement (`src/refine/`): Propose–Probe–Compose in parallel and sequential modes with the R=4k/P=3k budget identity, blind answer-free selection, reflection into a per-scope experience library, and adoption of the chosen tree. Executions and improver sessions are ordinary recorded runs, marked by the `probe` and `improver` triggers. `harness.refine`, `refine.*` and `library.*` RPC methods, and `xingular-harness refine demo|run`.
|
|
618
|
+
- Add the seventh extension point, `RefineHost`: where an execution works, as whom, with which tools, and what it produced.
|
|
619
|
+
- `spawn_subagent` takes `agent`, naming one of the tree's subagents; that child works from its own definition.
|
|
620
|
+
- Replace the Wiki with project notes (`src/wiki/`): linked Markdown under `wiki/`, versions, search, and `wiki_search`, `wiki_read`, `wiki_list` and a switchable `wiki_write`. An earlier Wiki's memory blocks, facts, revisions and Inbox are moved once to `legacy/wiki-<time>/`; nothing is deleted.
|
|
621
|
+
- Remove memory blocks, facts, proposals and the evidence gate, maintenance and the maintainer, curation, context profiles, the skills/rules/prompts registry as a source of prompt text, `registry_write`, `plugin_write` and `plugin_propose`. `harnesses.seed` builds a caller's first tree from what shaped it before (instructions, its rules, its memory blocks, its skills). `registry/` stays as a component library the Hub installs into and a tree can take items from.
|
|
622
|
+
- Hook events are `wiki.page.saved` and `history.run.ended`.
|
|
623
|
+
|
|
624
|
+
## 2.1.2 - 2026-10-19
|
|
625
|
+
|
|
626
|
+
- Add `/log`, a page of redacted Harness diagnostics and current-conversation run events.
|
|
627
|
+
- Allow argument-specific, provider-classified research calls during plan-mode runs while refusing other tools before approvals.
|
|
628
|
+
- Mark recommended options in batched questions and provide a picker for staged multi-select and free-text answers.
|
|
629
|
+
|
|
630
|
+
## 2.1.1 - 2026-10-19
|
|
631
|
+
|
|
632
|
+
- Change terminal `/plan` to run one isolated, read-only planning request; queue later messages until it settles and apply plan instructions only for that run.
|
|
633
|
+
|
|
634
|
+
## 2.1.0 - 2026-10-19
|
|
635
|
+
|
|
636
|
+
- Add per-request plan mode to SDK session runs: instructions arrive as a dynamic context update, and the tool gate refuses calls outside the read-only set. The terminal uses `/plan`, `/plan on`, and `/plan off` to narrow its active tools.
|
|
637
|
+
- Add bounded, UTF-8-safe Hub payload previews, explicit installed/changed/incomplete receipt states, and receipt-scoped uninstall that removes owned resources, including local edits within those paths.
|
|
638
|
+
- Highlight recognized leading slash commands in the terminal composer with the selected theme's link color, including enabled `/skill:name` invocations; unknown commands remain plain.
|
|
639
|
+
|
|
5
640
|
## 2.0.0 - 2026-10-18
|
|
6
641
|
|
|
7
642
|
- Let a connected app sign in with an OAuth client the application registered itself (`oauthClient: 'app'`), supplied through `HarnessOptions.oauthClients` and never stored; `connections.appClients` reports which catalog entries a build can sign in for. See [ADR-0005](docs/decisions/ADR-0005-app-provided-oauth-clients.md).
|