@xingular/harness 2.0.0 → 2.0.1-unstable
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +635 -0
- package/LICENSE +202 -0
- package/NOTICE.md +50 -0
- package/README.md +241 -90
- package/THIRD_PARTY_LICENSES.md +942 -0
- package/browser-extension/README.md +32 -0
- package/browser-extension/background.js +612 -0
- package/browser-extension/manifest.json +16 -0
- package/browser-extension/overlay.js +97 -0
- package/browser-extension/popup.css +19 -0
- package/browser-extension/popup.html +30 -0
- package/browser-extension/popup.js +101 -0
- package/browser-extension/site-access.js +63 -0
- package/builtin/skills/plugin-authoring/SKILL.md +53 -0
- package/dist/cli.js +32851 -17155
- package/dist/sdk/accounts/accounts.d.ts +195 -0
- package/dist/sdk/accounts/accounts.js +821 -0
- package/dist/sdk/accounts/choices.d.ts +41 -0
- package/dist/sdk/accounts/choices.js +89 -0
- package/dist/sdk/accounts/env.d.ts +78 -0
- package/dist/sdk/accounts/env.js +294 -0
- package/dist/sdk/accounts/secrets.d.ts +28 -0
- package/dist/sdk/accounts/secrets.js +147 -0
- package/dist/sdk/accounts/store.d.ts +139 -0
- package/dist/sdk/accounts/store.js +255 -0
- package/dist/sdk/agents/builtin.d.ts +2 -0
- package/dist/sdk/agents/builtin.js +50 -0
- package/dist/sdk/agents/narrow.d.ts +13 -0
- package/dist/sdk/agents/narrow.js +29 -0
- package/dist/sdk/agents/planResearch.d.ts +27 -0
- package/dist/sdk/agents/planResearch.js +82 -0
- package/dist/sdk/agents/profiles.d.ts +93 -0
- package/dist/sdk/agents/profiles.js +289 -0
- package/dist/sdk/annotations/bridge.d.ts +44 -0
- package/dist/sdk/annotations/bridge.js +268 -0
- package/dist/sdk/annotations/capture.d.ts +158 -0
- package/dist/sdk/annotations/capture.js +409 -0
- package/dist/sdk/annotations/delivery.d.ts +79 -0
- package/dist/sdk/annotations/delivery.js +163 -0
- package/dist/sdk/annotations/inspect.d.ts +10 -0
- package/dist/sdk/annotations/inspect.js +34 -0
- package/dist/sdk/annotations/isolated.d.ts +6 -0
- package/dist/sdk/annotations/isolated.js +51 -0
- package/dist/sdk/annotations/pageScript.d.ts +28 -0
- package/dist/sdk/annotations/pageScript.js +871 -0
- package/dist/sdk/annotations/part.d.ts +8 -0
- package/dist/sdk/annotations/part.js +126 -0
- package/dist/sdk/annotations/queue.d.ts +4 -0
- package/dist/sdk/annotations/queue.js +45 -0
- package/dist/sdk/annotations/serverMethods.d.ts +3 -0
- package/dist/sdk/annotations/serverMethods.js +66 -0
- package/dist/sdk/annotations/store.d.ts +159 -0
- package/dist/sdk/annotations/store.js +404 -0
- package/dist/sdk/browser/backend.d.ts +16 -0
- package/dist/sdk/browser/backend.js +17 -0
- package/dist/sdk/browser/config.d.ts +19 -0
- package/dist/sdk/browser/config.js +23 -0
- package/dist/sdk/browser/contracts.d.ts +19 -0
- package/dist/sdk/browser/contracts.js +116 -0
- package/dist/sdk/browser/diagnostics.d.ts +4 -0
- package/dist/sdk/browser/diagnostics.js +38 -0
- package/dist/sdk/browser/extension/bridge.d.ts +55 -0
- package/dist/sdk/browser/extension/bridge.js +336 -0
- package/dist/sdk/browser/extension/session.d.ts +50 -0
- package/dist/sdk/browser/extension/session.js +321 -0
- package/dist/sdk/browser/index.d.ts +33 -0
- package/dist/sdk/browser/index.js +105 -0
- package/dist/sdk/browser/network.d.ts +10 -0
- package/dist/sdk/browser/network.js +59 -0
- package/dist/sdk/browser/serverMethods.d.ts +3 -0
- package/dist/sdk/browser/serverMethods.js +10 -0
- package/dist/sdk/browser/session.d.ts +85 -0
- package/dist/sdk/browser/session.js +228 -0
- package/dist/sdk/browser/tools.d.ts +102 -0
- package/dist/sdk/browser/tools.js +257 -0
- package/dist/sdk/capabilities/api.d.ts +22 -0
- package/dist/sdk/capabilities/api.js +54 -0
- package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
- package/dist/sdk/capabilities/runSnapshot.js +53 -0
- package/dist/sdk/capabilities/types.d.ts +29 -0
- package/dist/sdk/capabilities/types.js +1 -0
- package/dist/sdk/cli.d.ts +2 -0
- package/dist/sdk/cli.js +172 -0
- package/dist/sdk/commands/extensionOwners.d.ts +4 -0
- package/dist/sdk/commands/extensionOwners.js +17 -0
- package/dist/sdk/commands/list.d.ts +3 -0
- package/dist/sdk/commands/list.js +90 -0
- package/dist/sdk/commands/promptLoader.d.ts +5 -0
- package/dist/sdk/commands/promptLoader.js +76 -0
- package/dist/sdk/commands/promptRoutes.d.ts +13 -0
- package/dist/sdk/commands/promptRoutes.js +46 -0
- package/dist/sdk/commands/registry.d.ts +299 -0
- package/dist/sdk/commands/registry.js +54 -0
- package/dist/sdk/commands/routes.d.ts +16 -0
- package/dist/sdk/commands/routes.js +33 -0
- package/dist/sdk/commands/runtimeRouter.d.ts +4 -0
- package/dist/sdk/commands/runtimeRouter.js +48 -0
- package/dist/sdk/computer/boundary.d.ts +40 -0
- package/dist/sdk/computer/boundary.js +79 -0
- package/dist/sdk/computer/contracts.d.ts +127 -0
- package/dist/sdk/computer/contracts.js +13 -0
- package/dist/sdk/computer/control.d.ts +34 -0
- package/dist/sdk/computer/control.js +112 -0
- package/dist/sdk/computer/screenshot.d.ts +32 -0
- package/dist/sdk/computer/screenshot.js +35 -0
- package/dist/sdk/computer/terminalCapture.d.ts +26 -0
- package/dist/sdk/computer/terminalCapture.js +64 -0
- package/dist/sdk/computer/volatileImages.d.ts +9 -0
- package/dist/sdk/computer/volatileImages.js +50 -0
- package/dist/sdk/context/attribution.d.ts +18 -0
- package/dist/sdk/context/attribution.js +295 -0
- package/dist/sdk/context/runDetails.d.ts +16 -0
- package/dist/sdk/context/runDetails.js +22 -0
- package/dist/sdk/context/types.d.ts +94 -0
- package/dist/sdk/context/types.js +10 -0
- package/dist/sdk/core/bus.d.ts +23 -0
- package/dist/sdk/core/bus.js +76 -0
- package/dist/sdk/core/caller.d.ts +22 -0
- package/dist/sdk/core/caller.js +16 -0
- package/dist/sdk/core/changes.d.ts +15 -0
- package/dist/sdk/core/changes.js +15 -0
- package/dist/sdk/core/commandBudget.d.ts +23 -0
- package/dist/sdk/core/commandBudget.js +62 -0
- package/dist/sdk/core/effort.d.ts +2 -0
- package/dist/sdk/core/effort.js +1 -0
- package/dist/sdk/core/env.d.ts +18 -0
- package/dist/sdk/core/env.js +8 -0
- package/dist/sdk/core/errors.d.ts +15 -0
- package/dist/sdk/core/errors.js +24 -0
- package/dist/sdk/core/frontmatter.d.ts +12 -0
- package/dist/sdk/core/frontmatter.js +50 -0
- package/dist/sdk/core/fs.d.ts +18 -0
- package/dist/sdk/core/fs.js +106 -0
- package/dist/sdk/core/index.d.ts +24 -0
- package/dist/sdk/core/index.js +203 -0
- package/dist/sdk/core/interactiveProfile.d.ts +46 -0
- package/dist/sdk/core/interactiveProfile.js +143 -0
- package/dist/sdk/core/links.d.ts +51 -0
- package/dist/sdk/core/links.js +155 -0
- package/dist/sdk/core/path.d.ts +7 -0
- package/dist/sdk/core/path.js +79 -0
- package/dist/sdk/core/projects.d.ts +18 -0
- package/dist/sdk/core/projects.js +67 -0
- package/dist/sdk/core/secrets.d.ts +2 -0
- package/dist/sdk/core/secrets.js +5 -0
- package/dist/sdk/core/shell.d.ts +20 -0
- package/dist/sdk/core/shell.js +73 -0
- package/dist/sdk/core/text.d.ts +7 -0
- package/dist/sdk/core/text.js +40 -0
- package/dist/sdk/core/workspace.d.ts +13 -0
- package/dist/sdk/core/workspace.js +88 -0
- package/dist/sdk/core/workspaceBashTool.d.ts +20 -0
- package/dist/sdk/core/workspaceBashTool.js +50 -0
- package/dist/sdk/core/workspaceSandbox.d.ts +41 -0
- package/dist/sdk/core/workspaceSandbox.js +360 -0
- package/dist/sdk/core/workspaceWriteOperations.d.ts +57 -0
- package/dist/sdk/core/workspaceWriteOperations.js +245 -0
- package/dist/sdk/doctor/checks.d.ts +5 -0
- package/dist/sdk/doctor/checks.js +270 -0
- package/dist/sdk/doctor/probe.d.ts +4 -0
- package/dist/sdk/doctor/probe.js +94 -0
- package/dist/sdk/doctor/serverMethods.d.ts +3 -0
- package/dist/sdk/doctor/serverMethods.js +8 -0
- package/dist/sdk/doctor/service.d.ts +23 -0
- package/dist/sdk/doctor/service.js +144 -0
- package/dist/sdk/doctor/types.d.ts +141 -0
- package/dist/sdk/doctor/types.js +29 -0
- package/dist/sdk/harness.d.ts +172 -0
- package/dist/sdk/harness.js +387 -0
- package/dist/sdk/history/lessonPrompt.d.ts +2 -0
- package/dist/sdk/history/lessonPrompt.js +15 -0
- package/dist/sdk/history/lessons.d.ts +52 -0
- package/dist/sdk/history/lessons.js +173 -0
- package/dist/sdk/history/recall.d.ts +68 -0
- package/dist/sdk/history/recall.js +199 -0
- package/dist/sdk/history/serverMethods.d.ts +3 -0
- package/dist/sdk/history/serverMethods.js +8 -0
- package/dist/sdk/history/trajectory.d.ts +7 -0
- package/dist/sdk/history/trajectory.js +218 -0
- package/dist/sdk/hub/catalog.json +123 -0
- package/dist/sdk/hub/cli.d.ts +7 -0
- package/dist/sdk/hub/cli.js +81 -0
- package/dist/sdk/hub/hub.d.ts +74 -0
- package/dist/sdk/hub/hub.js +476 -0
- package/dist/sdk/hub/schema.d.ts +280 -0
- package/dist/sdk/hub/schema.js +78 -0
- package/dist/sdk/hub/serverMethods.d.ts +3 -0
- package/dist/sdk/hub/serverMethods.js +11 -0
- package/dist/sdk/index.d.ts +80 -0
- package/dist/sdk/index.js +60 -0
- package/dist/sdk/mcp/connections.d.ts +83 -0
- package/dist/sdk/mcp/connections.js +676 -0
- package/dist/sdk/mcp/manager.d.ts +26 -0
- package/dist/sdk/mcp/manager.js +124 -0
- package/dist/sdk/mcp/oauth.d.ts +35 -0
- package/dist/sdk/mcp/oauth.js +171 -0
- package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
- package/dist/sdk/mcp/scopeMigration.js +198 -0
- package/dist/sdk/mcp/serverMethods.d.ts +3 -0
- package/dist/sdk/mcp/serverMethods.js +22 -0
- package/dist/sdk/mcp/service.d.ts +160 -0
- package/dist/sdk/mcp/service.js +510 -0
- package/dist/sdk/mcp/types.d.ts +131 -0
- package/dist/sdk/mcp/types.js +49 -0
- package/dist/sdk/pi/retryPolicy.d.ts +19 -0
- package/dist/sdk/pi/retryPolicy.js +11 -0
- package/dist/sdk/pi/runtime.d.ts +14 -0
- package/dist/sdk/pi/runtime.js +31 -0
- package/dist/sdk/plugins/api.d.ts +66 -0
- package/dist/sdk/plugins/api.js +155 -0
- package/dist/sdk/plugins/attachments.d.ts +46 -0
- package/dist/sdk/plugins/attachments.js +111 -0
- package/dist/sdk/plugins/builtin.d.ts +7 -0
- package/dist/sdk/plugins/builtin.js +182 -0
- package/dist/sdk/plugins/builtinRegistry.d.ts +62 -0
- package/dist/sdk/plugins/builtinRegistry.js +77 -0
- package/dist/sdk/plugins/catalogue.d.ts +29 -0
- package/dist/sdk/plugins/catalogue.js +197 -0
- package/dist/sdk/plugins/cli.d.ts +13 -0
- package/dist/sdk/plugins/cli.js +188 -0
- package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
- package/dist/sdk/plugins/commandPrefix.js +21 -0
- package/dist/sdk/plugins/discover.d.ts +48 -0
- package/dist/sdk/plugins/discover.js +230 -0
- package/dist/sdk/plugins/firstParty.d.ts +50 -0
- package/dist/sdk/plugins/firstParty.js +119 -0
- package/dist/sdk/plugins/hooks.d.ts +94 -0
- package/dist/sdk/plugins/hooks.js +162 -0
- package/dist/sdk/plugins/identity.d.ts +19 -0
- package/dist/sdk/plugins/identity.js +48 -0
- package/dist/sdk/plugins/install.d.ts +24 -0
- package/dist/sdk/plugins/install.js +160 -0
- package/dist/sdk/plugins/inventory.d.ts +22 -0
- package/dist/sdk/plugins/inventory.js +111 -0
- package/dist/sdk/plugins/manifest.d.ts +21 -0
- package/dist/sdk/plugins/manifest.js +94 -0
- package/dist/sdk/plugins/plugins.d.ts +106 -0
- package/dist/sdk/plugins/plugins.js +165 -0
- package/dist/sdk/plugins/proposals.d.ts +17 -0
- package/dist/sdk/plugins/proposals.js +147 -0
- package/dist/sdk/plugins/runtime.d.ts +9 -0
- package/dist/sdk/plugins/runtime.js +95 -0
- package/dist/sdk/plugins/surfaces.d.ts +5 -0
- package/dist/sdk/plugins/surfaces.js +11 -0
- package/dist/sdk/plugins/trust.d.ts +44 -0
- package/dist/sdk/plugins/trust.js +120 -0
- package/dist/sdk/plugins/types.d.ts +174 -0
- package/dist/sdk/plugins/types.js +7 -0
- package/dist/sdk/prompt/compile.d.ts +245 -0
- package/dist/sdk/prompt/compile.js +535 -0
- package/dist/sdk/prompt/reporting.d.ts +2 -0
- package/dist/sdk/prompt/reporting.js +94 -0
- package/dist/sdk/prompt/standard.d.ts +32 -0
- package/dist/sdk/prompt/standard.js +76 -0
- package/dist/sdk/refine/cli.d.ts +4 -0
- package/dist/sdk/refine/cli.js +186 -0
- package/dist/sdk/refine/demo.d.ts +21 -0
- package/dist/sdk/refine/demo.js +114 -0
- package/dist/sdk/refine/evidence.d.ts +55 -0
- package/dist/sdk/refine/evidence.js +330 -0
- package/dist/sdk/refine/host.d.ts +59 -0
- package/dist/sdk/refine/host.js +105 -0
- package/dist/sdk/refine/ledger.d.ts +48 -0
- package/dist/sdk/refine/ledger.js +76 -0
- package/dist/sdk/refine/library.d.ts +55 -0
- package/dist/sdk/refine/library.js +177 -0
- package/dist/sdk/refine/pi.d.ts +72 -0
- package/dist/sdk/refine/pi.js +248 -0
- package/dist/sdk/refine/prompts.d.ts +60 -0
- package/dist/sdk/refine/prompts.js +434 -0
- package/dist/sdk/refine/recursion.d.ts +113 -0
- package/dist/sdk/refine/recursion.js +258 -0
- package/dist/sdk/refine/runner.d.ts +83 -0
- package/dist/sdk/refine/runner.js +151 -0
- package/dist/sdk/refine/selection.d.ts +57 -0
- package/dist/sdk/refine/selection.js +251 -0
- package/dist/sdk/refine/serverMethods.d.ts +3 -0
- package/dist/sdk/refine/serverMethods.js +23 -0
- package/dist/sdk/refine/service.d.ts +115 -0
- package/dist/sdk/refine/service.js +280 -0
- package/dist/sdk/refine/suite.d.ts +67 -0
- package/dist/sdk/refine/suite.js +174 -0
- package/dist/sdk/refine/trajectory.d.ts +9 -0
- package/dist/sdk/refine/trajectory.js +73 -0
- package/dist/sdk/refine/types.d.ts +93 -0
- package/dist/sdk/refine/types.js +10 -0
- package/dist/sdk/remote/addresses.d.ts +19 -0
- package/dist/sdk/remote/addresses.js +52 -0
- package/dist/sdk/remote/pairing.d.ts +59 -0
- package/dist/sdk/remote/pairing.js +160 -0
- package/dist/sdk/remote/seal.d.ts +28 -0
- package/dist/sdk/remote/seal.js +84 -0
- package/dist/sdk/remote/server.d.ts +28 -0
- package/dist/sdk/remote/server.js +158 -0
- package/dist/sdk/remote/service.d.ts +125 -0
- package/dist/sdk/remote/service.js +330 -0
- package/dist/sdk/remote/webClient.d.ts +4 -0
- package/dist/sdk/remote/webClient.js +452 -0
- package/dist/sdk/server/methods.d.ts +3 -0
- package/dist/sdk/server/methods.js +365 -0
- package/dist/sdk/server/params.d.ts +4 -0
- package/dist/sdk/server/params.js +11 -0
- package/dist/sdk/server/remote.d.ts +19 -0
- package/dist/sdk/server/remote.js +109 -0
- package/dist/sdk/server/rpc.d.ts +20 -0
- package/dist/sdk/server/rpc.js +102 -0
- package/dist/sdk/server/serve.d.ts +13 -0
- package/dist/sdk/server/serve.js +25 -0
- package/dist/sdk/server/socket.d.ts +28 -0
- package/dist/sdk/server/socket.js +122 -0
- package/dist/sdk/sessions/approvals.d.ts +47 -0
- package/dist/sdk/sessions/approvals.js +119 -0
- package/dist/sdk/sessions/checkpoint.d.ts +7 -0
- package/dist/sdk/sessions/checkpoint.js +41 -0
- package/dist/sdk/sessions/compactionCheckpoint.d.ts +18 -0
- package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
- package/dist/sdk/sessions/completionCheck.d.ts +51 -0
- package/dist/sdk/sessions/completionCheck.js +161 -0
- package/dist/sdk/sessions/continuation.d.ts +53 -0
- package/dist/sdk/sessions/continuation.js +90 -0
- package/dist/sdk/sessions/contracts.d.ts +991 -0
- package/dist/sdk/sessions/contracts.js +545 -0
- package/dist/sdk/sessions/control.d.ts +72 -0
- package/dist/sdk/sessions/control.js +158 -0
- package/dist/sdk/sessions/extensionUi.d.ts +19 -0
- package/dist/sdk/sessions/extensionUi.js +64 -0
- package/dist/sdk/sessions/goal.d.ts +145 -0
- package/dist/sdk/sessions/goal.js +405 -0
- package/dist/sdk/sessions/goalLoop.d.ts +37 -0
- package/dist/sdk/sessions/goalLoop.js +125 -0
- package/dist/sdk/sessions/goalPrompts.d.ts +4 -0
- package/dist/sdk/sessions/goalPrompts.js +93 -0
- package/dist/sdk/sessions/goalStop.d.ts +27 -0
- package/dist/sdk/sessions/goalStop.js +41 -0
- package/dist/sdk/sessions/history.d.ts +16 -0
- package/dist/sdk/sessions/history.js +68 -0
- package/dist/sdk/sessions/initialBash.d.ts +7 -0
- package/dist/sdk/sessions/initialBash.js +7 -0
- package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
- package/dist/sdk/sessions/lineageJoin.js +61 -0
- package/dist/sdk/sessions/live.d.ts +101 -0
- package/dist/sdk/sessions/live.js +265 -0
- package/dist/sdk/sessions/planMode.d.ts +116 -0
- package/dist/sdk/sessions/planMode.js +281 -0
- package/dist/sdk/sessions/policy.d.ts +43 -0
- package/dist/sdk/sessions/policy.js +1 -0
- package/dist/sdk/sessions/pricing.d.ts +34 -0
- package/dist/sdk/sessions/pricing.js +40 -0
- package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
- package/dist/sdk/sessions/reasoningSummaries.js +61 -0
- package/dist/sdk/sessions/registry.d.ts +124 -0
- package/dist/sdk/sessions/registry.js +392 -0
- package/dist/sdk/sessions/runIndex.d.ts +21 -0
- package/dist/sdk/sessions/runIndex.js +65 -0
- package/dist/sdk/sessions/runStore.d.ts +82 -0
- package/dist/sdk/sessions/runStore.js +393 -0
- package/dist/sdk/sessions/runner.d.ts +291 -0
- package/dist/sdk/sessions/runner.js +1040 -0
- package/dist/sdk/sessions/sessionState.d.ts +13 -0
- package/dist/sdk/sessions/sessionState.js +31 -0
- package/dist/sdk/sessions/sessions.d.ts +238 -0
- package/dist/sdk/sessions/sessions.js +923 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
- package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
- package/dist/sdk/sessions/sideQuestions.js +290 -0
- package/dist/sdk/sessions/stallWatch.d.ts +35 -0
- package/dist/sdk/sessions/stallWatch.js +42 -0
- package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/subagentServerMethods.js +41 -0
- package/dist/sdk/sessions/subagentService.d.ts +88 -0
- package/dist/sdk/sessions/subagentService.js +546 -0
- package/dist/sdk/sessions/subagents.d.ts +98 -0
- package/dist/sdk/sessions/subagents.js +136 -0
- package/dist/sdk/sessions/workSlice.d.ts +167 -0
- package/dist/sdk/sessions/workSlice.js +266 -0
- package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
- package/dist/sdk/sessions/workspaceBoundary.js +46 -0
- package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
- package/dist/sdk/terminal/accountsMenu.js +392 -0
- package/dist/sdk/terminal/browser.d.ts +62 -0
- package/dist/sdk/terminal/browser.js +41 -0
- package/dist/sdk/terminal/browserControl.d.ts +29 -0
- package/dist/sdk/terminal/browserControl.js +187 -0
- package/dist/sdk/terminal/cli.d.ts +20 -0
- package/dist/sdk/terminal/cli.js +121 -0
- package/dist/sdk/terminal/client.d.ts +20 -0
- package/dist/sdk/terminal/client.js +148 -0
- package/dist/sdk/terminal/commandHelp.d.ts +17 -0
- package/dist/sdk/terminal/commandHelp.js +20 -0
- package/dist/sdk/terminal/control.d.ts +4 -0
- package/dist/sdk/terminal/control.js +25 -0
- package/dist/sdk/terminal/controller.d.ts +136 -0
- package/dist/sdk/terminal/controller.js +579 -0
- package/dist/sdk/terminal/credentialStore.d.ts +4 -0
- package/dist/sdk/terminal/credentialStore.js +33 -0
- package/dist/sdk/terminal/daemon.d.ts +44 -0
- package/dist/sdk/terminal/daemon.js +264 -0
- package/dist/sdk/terminal/hubMenu.d.ts +10 -0
- package/dist/sdk/terminal/hubMenu.js +34 -0
- package/dist/sdk/terminal/launch.d.ts +5 -0
- package/dist/sdk/terminal/launch.js +27 -0
- package/dist/sdk/terminal/liveTerminal.d.ts +96 -0
- package/dist/sdk/terminal/liveTerminal.js +436 -0
- package/dist/sdk/terminal/logs.d.ts +14 -0
- package/dist/sdk/terminal/logs.js +59 -0
- package/dist/sdk/terminal/opentui/ansi.d.ts +25 -0
- package/dist/sdk/terminal/opentui/ansi.js +192 -0
- package/dist/sdk/terminal/opentui/model.d.ts +163 -0
- package/dist/sdk/terminal/opentui/model.js +484 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.js +54 -0
- package/dist/sdk/terminal/opentui/theme.d.ts +47 -0
- package/dist/sdk/terminal/opentui/theme.js +93 -0
- package/dist/sdk/terminal/piExtension.d.ts +12 -0
- package/dist/sdk/terminal/piExtension.js +847 -0
- package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
- package/dist/sdk/terminal/pluginMenu.js +101 -0
- package/dist/sdk/terminal/socket.d.ts +73 -0
- package/dist/sdk/terminal/socket.js +287 -0
- package/dist/sdk/terminal/standalone.d.ts +52 -0
- package/dist/sdk/terminal/standalone.js +329 -0
- package/dist/sdk/terminal/subagentMonitor.d.ts +62 -0
- package/dist/sdk/terminal/subagentMonitor.js +176 -0
- package/dist/sdk/terminal/terminals.d.ts +312 -0
- package/dist/sdk/terminal/terminals.js +1782 -0
- package/dist/sdk/terminal/toolName.d.ts +6 -0
- package/dist/sdk/terminal/toolName.js +12 -0
- package/dist/sdk/terminal/trajectory.d.ts +15 -0
- package/dist/sdk/terminal/trajectory.js +38 -0
- package/dist/sdk/terminal/tui/annotateCommand.d.ts +7 -0
- package/dist/sdk/terminal/tui/annotateCommand.js +36 -0
- package/dist/sdk/terminal/tui/annotateSend.d.ts +30 -0
- package/dist/sdk/terminal/tui/annotateSend.js +40 -0
- package/dist/sdk/terminal/tui/chrome.d.ts +68 -0
- package/dist/sdk/terminal/tui/chrome.js +182 -0
- package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
- package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
- package/dist/sdk/terminal/tui/commandPages.d.ts +16 -0
- package/dist/sdk/terminal/tui/commandPages.js +136 -0
- package/dist/sdk/terminal/tui/commands.d.ts +71 -0
- package/dist/sdk/terminal/tui/commands.js +496 -0
- package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
- package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
- package/dist/sdk/terminal/tui/dialogs.d.ts +81 -0
- package/dist/sdk/terminal/tui/dialogs.js +372 -0
- package/dist/sdk/terminal/tui/goalCommand.d.ts +19 -0
- package/dist/sdk/terminal/tui/goalCommand.js +83 -0
- package/dist/sdk/terminal/tui/harnessRuntime.d.ts +8 -0
- package/dist/sdk/terminal/tui/harnessRuntime.js +771 -0
- package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
- package/dist/sdk/terminal/tui/keybindings.js +49 -0
- package/dist/sdk/terminal/tui/list.d.ts +86 -0
- package/dist/sdk/terminal/tui/list.js +278 -0
- package/dist/sdk/terminal/tui/markdown.d.ts +16 -0
- package/dist/sdk/terminal/tui/markdown.js +55 -0
- package/dist/sdk/terminal/tui/modeChoices.d.ts +61 -0
- package/dist/sdk/terminal/tui/modeChoices.js +95 -0
- package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
- package/dist/sdk/terminal/tui/modelPicker.js +150 -0
- package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
- package/dist/sdk/terminal/tui/mouse.js +3 -0
- package/dist/sdk/terminal/tui/mouseReport.d.ts +30 -0
- package/dist/sdk/terminal/tui/mouseReport.js +80 -0
- package/dist/sdk/terminal/tui/page.d.ts +17 -0
- package/dist/sdk/terminal/tui/page.js +1 -0
- package/dist/sdk/terminal/tui/pageOverlay.d.ts +30 -0
- package/dist/sdk/terminal/tui/pageOverlay.js +183 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.js +193 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +148 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.js +576 -0
- package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
- package/dist/sdk/terminal/tui/pages/browserPage.js +739 -0
- package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
- package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
- package/dist/sdk/terminal/tui/pages/contextPage.d.ts +91 -0
- package/dist/sdk/terminal/tui/pages/contextPage.js +585 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
- package/dist/sdk/terminal/tui/pages/followUpQueuePage.d.ts +34 -0
- package/dist/sdk/terminal/tui/pages/followUpQueuePage.js +130 -0
- package/dist/sdk/terminal/tui/pages/hubPage.d.ts +52 -0
- package/dist/sdk/terminal/tui/pages/hubPage.js +292 -0
- package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
- package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
- package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
- package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +65 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.js +519 -0
- package/dist/sdk/terminal/tui/pages/remoteControlPage.d.ts +32 -0
- package/dist/sdk/terminal/tui/pages/remoteControlPage.js +170 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.js +155 -0
- package/dist/sdk/terminal/tui/pages/textPage.d.ts +17 -0
- package/dist/sdk/terminal/tui/pages/textPage.js +52 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +66 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.js +490 -0
- package/dist/sdk/terminal/tui/pages/usagePage.d.ts +45 -0
- package/dist/sdk/terminal/tui/pages/usagePage.js +397 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
- package/dist/sdk/terminal/tui/piAdapter.d.ts +17 -0
- package/dist/sdk/terminal/tui/piAdapter.js +46 -0
- package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
- package/dist/sdk/terminal/tui/planMode.js +2 -0
- package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
- package/dist/sdk/terminal/tui/pluginCommands.js +41 -0
- package/dist/sdk/terminal/tui/qr.d.ts +4 -0
- package/dist/sdk/terminal/tui/qr.js +35 -0
- package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
- package/dist/sdk/terminal/tui/questionPicker.js +150 -0
- package/dist/sdk/terminal/tui/questions.d.ts +21 -0
- package/dist/sdk/terminal/tui/questions.js +42 -0
- package/dist/sdk/terminal/tui/runtime.d.ts +117 -0
- package/dist/sdk/terminal/tui/runtime.js +544 -0
- package/dist/sdk/terminal/tui/search.d.ts +22 -0
- package/dist/sdk/terminal/tui/search.js +61 -0
- package/dist/sdk/terminal/tui/selection.d.ts +16 -0
- package/dist/sdk/terminal/tui/selection.js +16 -0
- package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
- package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
- package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
- package/dist/sdk/terminal/tui/sessionUi.js +30 -0
- package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
- package/dist/sdk/terminal/tui/settingsModel.js +195 -0
- package/dist/sdk/terminal/tui/sideQuestion.d.ts +57 -0
- package/dist/sdk/terminal/tui/sideQuestion.js +241 -0
- package/dist/sdk/terminal/tui/skillInvocation.d.ts +28 -0
- package/dist/sdk/terminal/tui/skillInvocation.js +63 -0
- package/dist/sdk/terminal/tui/status.d.ts +18 -0
- package/dist/sdk/terminal/tui/status.js +67 -0
- package/dist/sdk/terminal/tui/theme.d.ts +54 -0
- package/dist/sdk/terminal/tui/theme.js +185 -0
- package/dist/sdk/terminal/tui/thinkingLevels.d.ts +11 -0
- package/dist/sdk/terminal/tui/thinkingLevels.js +31 -0
- package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
- package/dist/sdk/terminal/tui/treeModel.js +483 -0
- package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
- package/dist/sdk/terminal/tui/treePicker.js +251 -0
- package/dist/sdk/terminal/tui/ui.d.ts +49 -0
- package/dist/sdk/terminal/tui/ui.js +149 -0
- package/dist/sdk/terminal/tui/variantCommands.d.ts +32 -0
- package/dist/sdk/terminal/tui/variantCommands.js +359 -0
- package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
- package/dist/sdk/terminal/tui/workingStatus.js +229 -0
- package/dist/sdk/terminal/variantControl.d.ts +24 -0
- package/dist/sdk/terminal/variantControl.js +145 -0
- package/dist/sdk/tools/askUser.d.ts +6 -0
- package/dist/sdk/tools/askUser.js +92 -0
- package/dist/sdk/tools/defaultSkills.d.ts +23 -0
- package/dist/sdk/tools/defaultSkills.js +46 -0
- package/dist/sdk/tools/definitions.d.ts +32 -0
- package/dist/sdk/tools/definitions.js +133 -0
- package/dist/sdk/tools/dispatch.d.ts +16 -0
- package/dist/sdk/tools/dispatch.js +92 -0
- package/dist/sdk/tools/getCapabilities.d.ts +31 -0
- package/dist/sdk/tools/getCapabilities.js +34 -0
- package/dist/sdk/tools/harnessTools.d.ts +8 -0
- package/dist/sdk/tools/harnessTools.js +20 -0
- package/dist/sdk/tools/sessionName.d.ts +16 -0
- package/dist/sdk/tools/sessionName.js +78 -0
- package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
- package/dist/sdk/tools/spawnSubagent.js +63 -0
- package/dist/sdk/tools/todo.d.ts +15 -0
- package/dist/sdk/tools/todo.js +66 -0
- package/dist/sdk/tools/types.d.ts +48 -0
- package/dist/sdk/tools/types.js +1 -0
- package/dist/sdk/usage/analytics.d.ts +20 -0
- package/dist/sdk/usage/analytics.js +151 -0
- package/dist/sdk/usage/ledger.d.ts +38 -0
- package/dist/sdk/usage/ledger.js +142 -0
- package/dist/sdk/usage/limits/adapters.d.ts +11 -0
- package/dist/sdk/usage/limits/adapters.js +349 -0
- package/dist/sdk/usage/limits/capture.d.ts +8 -0
- package/dist/sdk/usage/limits/capture.js +47 -0
- package/dist/sdk/usage/limits/http.d.ts +12 -0
- package/dist/sdk/usage/limits/http.js +51 -0
- package/dist/sdk/usage/limits/normalize.d.ts +15 -0
- package/dist/sdk/usage/limits/normalize.js +211 -0
- package/dist/sdk/usage/limits/service.d.ts +30 -0
- package/dist/sdk/usage/limits/service.js +176 -0
- package/dist/sdk/usage/limits/types.d.ts +65 -0
- package/dist/sdk/usage/limits/types.js +1 -0
- package/dist/sdk/usage/serverMethods.d.ts +3 -0
- package/dist/sdk/usage/serverMethods.js +22 -0
- package/dist/sdk/usage/service.d.ts +32 -0
- package/dist/sdk/usage/service.js +66 -0
- package/dist/sdk/usage/settings.d.ts +7 -0
- package/dist/sdk/usage/settings.js +28 -0
- package/dist/sdk/usage/types.d.ts +60 -0
- package/dist/sdk/usage/types.js +4 -0
- package/dist/sdk/variant/components.d.ts +34 -0
- package/dist/sdk/variant/components.js +230 -0
- package/dist/sdk/variant/materialise.d.ts +66 -0
- package/dist/sdk/variant/materialise.js +81 -0
- package/dist/sdk/variant/migrate.d.ts +4 -0
- package/dist/sdk/variant/migrate.js +41 -0
- package/dist/sdk/variant/seed.d.ts +20 -0
- package/dist/sdk/variant/seed.js +116 -0
- package/dist/sdk/variant/store.d.ts +114 -0
- package/dist/sdk/variant/store.js +256 -0
- package/dist/sdk/variant/surface.d.ts +56 -0
- package/dist/sdk/variant/surface.js +81 -0
- package/dist/sdk/variant/trust.d.ts +27 -0
- package/dist/sdk/variant/trust.js +64 -0
- package/dist/sdk/variant/variant.d.ts +71 -0
- package/dist/sdk/variant/variant.js +331 -0
- package/dist/sdk/web/markdown.d.ts +10 -0
- package/dist/sdk/web/markdown.js +66 -0
- package/dist/sdk/web/part.d.ts +10 -0
- package/dist/sdk/web/part.js +6 -0
- package/dist/sdk/web/safeRequest.d.ts +34 -0
- package/dist/sdk/web/safeRequest.js +175 -0
- package/dist/sdk/web/search.d.ts +53 -0
- package/dist/sdk/web/search.js +168 -0
- package/dist/sdk/web/serverMethods.d.ts +3 -0
- package/dist/sdk/web/serverMethods.js +7 -0
- package/dist/sdk/web/text.d.ts +2 -0
- package/dist/sdk/web/text.js +7 -0
- package/dist/sdk/web/tools.d.ts +22 -0
- package/dist/sdk/web/tools.js +195 -0
- package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
- package/dist/sdk/wiki/notes.d.ts +68 -0
- package/dist/sdk/wiki/notes.js +297 -0
- package/dist/sdk/wiki/serverMethods.d.ts +3 -0
- package/dist/sdk/wiki/serverMethods.js +26 -0
- package/dist/sdk/worktrees/cli.d.ts +11 -0
- package/dist/sdk/worktrees/cli.js +146 -0
- package/dist/sdk/worktrees/copy.d.ts +9 -0
- package/dist/sdk/worktrees/copy.js +111 -0
- package/dist/sdk/worktrees/git.d.ts +18 -0
- package/dist/sdk/worktrees/git.js +89 -0
- package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
- package/dist/sdk/worktrees/serverMethods.js +30 -0
- package/dist/sdk/worktrees/service.d.ts +73 -0
- package/dist/sdk/worktrees/service.js +483 -0
- package/dist/sdk/worktrees/setup.d.ts +23 -0
- package/dist/sdk/worktrees/setup.js +65 -0
- package/dist/sdk/worktrees/snapshot.d.ts +16 -0
- package/dist/sdk/worktrees/snapshot.js +83 -0
- package/dist/sdk/worktrees/types.d.ts +91 -0
- package/dist/sdk/worktrees/types.js +1 -0
- package/dist/sdk/world/actions.d.ts +23 -0
- package/dist/sdk/world/actions.js +31 -0
- package/dist/sdk/world/cli.d.ts +12 -0
- package/dist/sdk/world/cli.js +166 -0
- package/dist/sdk/world/images.d.ts +20 -0
- package/dist/sdk/world/images.js +48 -0
- package/dist/sdk/world/untrusted.d.ts +12 -0
- package/dist/sdk/world/untrusted.js +20 -0
- package/dist/sdk/world/world.d.ts +75 -0
- package/dist/sdk/world/world.js +117 -0
- package/dist/terminal-opentui.js +30986 -0
- package/dist/terminal-pi.js +3008 -610
- package/docs/README.md +45 -1
- package/docs/architecture/00-overview.md +171 -0
- package/docs/architecture/01-extension-points.md +78 -0
- package/docs/architecture/02-sessions-and-runs.md +505 -0
- package/docs/architecture/03-variants.md +122 -0
- package/docs/architecture/04-prompt.md +277 -0
- package/docs/architecture/05-refinement.md +134 -0
- package/docs/architecture/06-plugins-and-capabilities.md +208 -0
- package/docs/architecture/07-tools-and-gate.md +245 -0
- package/docs/architecture/08-memory-and-history.md +100 -0
- package/docs/architecture/09-accounts-and-connectors.md +153 -0
- package/docs/architecture/10-server-protocol.md +403 -0
- package/docs/architecture/11-terminal.md +555 -0
- package/docs/architecture/12-storage.md +118 -0
- package/docs/architecture/13-world-tools.md +114 -0
- package/docs/architecture/14-surfaces-and-parity.md +151 -0
- package/docs/architecture/15-remote-control.md +120 -0
- package/docs/architecture/README.md +143 -0
- package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
- package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
- package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
- package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
- package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
- package/docs/architecture/proposals/PROP-0006-run-checklist.md +72 -0
- package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
- package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
- package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
- package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
- package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
- package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
- package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
- package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
- package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
- package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
- package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
- package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +183 -0
- package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
- package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
- package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
- package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
- package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
- package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
- package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
- package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +96 -0
- package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
- package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
- package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
- package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
- package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
- package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
- package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
- package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
- package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
- package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
- package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
- package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
- package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
- package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
- package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +260 -0
- package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
- package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
- package/docs/architecture/proposals/PROP-0044-work-slice-defaults.md +93 -0
- package/docs/architecture/proposals/PROP-0045-rename-checklist-to-todo.md +132 -0
- package/docs/architecture/proposals/PROP-0046-progress-aware-stall-guards.md +82 -0
- package/docs/architecture/proposals/PROP-0047-plugins-hub-separation.md +122 -0
- package/docs/architecture/proposals/PROP-0048-simple-annotate.md +85 -0
- package/docs/architecture/proposals/PROP-0049-context-attribution.md +415 -0
- package/docs/architecture/proposals/PROP-0050-run-stop-codes-and-refusals.md +30 -0
- package/docs/architecture/proposals/PROP-0051-unfinished-run-handoff.md +110 -0
- package/docs/architecture/proposals/PROP-0052-terminal-refine-and-variant-switch.md +111 -0
- package/docs/architecture/proposals/README.md +123 -0
- package/docs/decisions/ADR-0001-owned-terminal.md +10 -3
- package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +3 -1
- package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +3 -2
- package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
- package/docs/decisions/ADR-0007-reporting-section.md +33 -0
- package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +41 -0
- package/docs/decisions/ADR-0009-xharness-command.md +39 -0
- package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
- package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
- package/docs/decisions/ADR-0012-native-session-names.md +34 -0
- package/docs/decisions/ADR-0013-doctor.md +27 -0
- package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
- package/docs/decisions/ADR-0015-resource-browser.md +28 -0
- package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
- package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
- package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
- package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
- package/docs/decisions/ADR-0020-page-annotations.md +37 -0
- package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
- package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
- package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
- package/docs/decisions/ADR-0024-xagent-command.md +40 -0
- package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
- package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
- package/docs/decisions/ADR-0027-connected-sketch-display.md +62 -0
- package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
- package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
- package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
- package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
- package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +35 -0
- package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
- package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
- package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
- package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
- package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
- package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
- package/docs/decisions/ADR-0039-progress-aware-stall-guards.md +43 -0
- package/docs/decisions/ADR-0040-architecture-change-workflow.md +31 -0
- package/docs/decisions/ADR-0041-plugins-hub-separation.md +41 -0
- package/docs/decisions/ADR-0042-windows-shell-without-sandbox.md +40 -0
- package/docs/decisions/ADR-0043-parents-continue-stopped-subagents.md +49 -0
- package/docs/decisions/ADR-0044-annotations-pending-or-sent.md +24 -0
- package/docs/decisions/ADR-0045-default-plugin-authoring-skill.md +9 -0
- package/docs/decisions/ADR-0046-hash-bound-plugin-proposals.md +20 -0
- package/docs/decisions/ADR-0047-links-open-with-the-os-handler.md +47 -0
- package/docs/decisions/ADR-0048-required-skills-from-a-message.md +42 -0
- package/docs/decisions/ADR-0050-approved-window-screenshots.md +19 -0
- package/docs/decisions/ADR-0051-terminal-decision-wait.md +10 -0
- package/docs/decisions/ADR-0052-per-profile-subagent-budgets.md +25 -0
- package/docs/decisions/ADR-0053-no-repeated-work-guard.md +45 -0
- package/docs/decisions/ADR-0054-terminal-reply-heartbeat-and-stall.md +52 -0
- package/docs/decisions/ADR-0055-plan-output-repair.md +51 -0
- package/docs/decisions/ADR-0056-remote-control.md +53 -0
- package/docs/decisions/ADR-0057-structured-plan-outcomes.md +39 -0
- package/docs/decisions/ADR-0058-ask-user-only-plan-clarification.md +36 -0
- package/docs/decisions/ADR-0059-run-diagnostic-evidence.md +35 -0
- package/docs/decisions/ADR-0060-approvals-are-controls.md +40 -0
- package/docs/decisions/ADR-0061-strict-plugin-command-namespaces.md +41 -0
- package/docs/decisions/ADR-0062-shared-account-state.md +67 -0
- package/docs/decisions/ADR-0063-unfinished-work-handoffs.md +34 -0
- package/docs/decisions/ADR-0064-account-model-fallback-on-resume.md +79 -0
- package/docs/decisions/ADR-0065-variant-switch-at-turn-boundaries.md +31 -0
- package/docs/decisions/ADR-0066-guided-refinement-from-turn-snapshots.md +37 -0
- package/docs/decisions/ADR-0067-cache-stable-compaction-checkpoint.md +54 -0
- package/docs/decisions/ADR-0068-scope-and-completion-report.md +60 -0
- package/docs/decisions/ADR-0069-stop-gate-and-finish.md +136 -0
- package/docs/decisions/ADR-0070-terminal-slice-continuation.md +49 -0
- package/docs/decisions/ADR-0071-completion-check.md +104 -0
- package/docs/decisions/ADR-0072-codex-prompts-and-goal.md +108 -0
- package/docs/decisions/ADR-0073-large-reporting-prompt.md +89 -0
- package/docs/decisions/ADR-0074-report-content-not-report-blocks.md +90 -0
- package/docs/decisions/ADR-0075-no-todo-gate.md +84 -0
- package/docs/decisions/ADR-0076-codex-final-answer-verbatim.md +98 -0
- package/docs/decisions/ADR-0077-plan-runs-may-conclude-no-plan-needed.md +120 -0
- package/docs/decisions/ADR-0078-child-aware-stall-watch.md +46 -0
- package/docs/decisions/ADR-0079-phase-led-reporting-guidance.md +72 -0
- package/docs/decisions/ADR-0080-fixed-width-question-sketch-canvas.md +50 -0
- package/docs/decisions/ADR-0081-no-work-slice-budget-by-default.md +36 -0
- package/docs/decisions/ADR-0082-connected-brave-browser.md +72 -0
- package/docs/decisions/ADR-0083-one-live-session-runtime.md +256 -0
- package/docs/doctor.md +95 -0
- package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
- package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
- package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
- package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
- package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
- package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
- package/docs/features/README.md +46 -0
- package/docs/features/automations/README.md +41 -0
- package/docs/features/cores/README.md +39 -0
- package/docs/features/google-harness2/README.md +52 -0
- package/docs/features/integrations/README.md +40 -0
- package/docs/features/interfaces/README.md +29 -0
- package/docs/features/memory/README.md +28 -0
- package/docs/future-work.md +48 -0
- package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
- package/docs/parity.md +158 -0
- package/docs/releases/1.0.0.md +40 -0
- package/docs/releases/1.1.1.md +28 -0
- package/docs/releases/1.2.0.md +49 -0
- package/docs/releases/1.3.0.md +21 -0
- package/docs/releases/1.3.1-unstable.1.md +8 -0
- package/docs/releases/1.3.1-unstable.2.md +11 -0
- package/docs/releases/1.3.1-unstable.3.md +54 -0
- package/docs/releases/1.3.1-unstable.4.md +56 -0
- package/docs/releases/1.3.1-unstable.5.md +53 -0
- package/docs/releases/1.3.1-unstable.6.md +31 -0
- package/docs/releases/1.3.1-unstable.7.md +17 -0
- package/docs/releases/1.3.1-unstable.8.md +19 -0
- package/docs/releases/1.3.1-unstable.9.md +54 -0
- package/docs/releases/1.4.0-unstable.md +25 -0
- package/docs/releases/1.5.0-unstable.md +32 -0
- package/docs/releases/1.5.1-unstable.md +24 -0
- package/docs/releases/1.6.0-unstable.md +59 -0
- package/docs/releases/2.0.1-unstable.md +63 -0
- package/docs/releases/4.0.0.md +47 -0
- package/docs/releases/README.md +49 -0
- package/docs/study/00-index.md +112 -0
- package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
- package/docs/study/STUDY-0004-turn-end-controls.md +130 -0
- package/docs/study/STUDY-0005-skill-installation-guidance.md +146 -0
- package/docs/study/STUDY-0006-reporting-prompts.md +119 -0
- package/docs/study/STUDY-0007-claude-code-prompt.md +162 -0
- package/docs/study/STUDY-0008-browser-control.md +281 -0
- package/docs/study/STUDY-0009-claude-code-reporting.md +205 -0
- package/docs/study/arms/00-matrix.md +20 -0
- package/docs/study/arms/01-system-prompt.md +211 -0
- package/docs/study/arms/02-tools.md +79 -0
- package/docs/study/arms/03-subagents.md +90 -0
- package/docs/study/arms/04-skills.md +81 -0
- package/docs/study/arms/05-context-management.md +90 -0
- package/docs/study/arms/06-memory.md +90 -0
- package/docs/study/arms/07-governance.md +71 -0
- package/docs/study/arms/08-execution.md +69 -0
- package/docs/study/arms/09-observability.md +60 -0
- package/docs/study/arms/10-refinement.md +110 -0
- package/docs/study/autonomous-engineering-sources.md +277 -0
- package/docs/study/autonomy-sources.md +147 -0
- package/docs/study/btw-comparison.md +37 -0
- package/docs/study/feature-gap-review.md +42 -0
- package/docs/study/insights.md +123 -0
- package/docs/study/proactive-autonomy.md +408 -0
- package/docs/study/roadmap.md +72 -0
- package/docs/study/sources/claude-code.md +56 -0
- package/docs/study/sources/deepseek-harness.md +102 -0
- package/docs/study/sources/harness2.md +50 -0
- package/docs/study/sources/kimi-cli.md +42 -0
- package/docs/study/sources/omp.md +93 -0
- package/docs/study/sources/opencode.md +43 -0
- package/docs/study/sources/openhands.md +46 -0
- package/docs/study/sources/smolagents.md +40 -0
- package/docs/study/sources/swe-agent.md +34 -0
- package/docs/study/tui-resource-browser.md +78 -0
- package/docs/system-prompt-design.md +196 -0
- package/docs/terminal-tui.md +887 -109
- package/package.json +46 -13
- package/src/accounts/accounts.test.ts +0 -419
- package/src/accounts/accounts.ts +0 -760
- package/src/accounts/env.test.ts +0 -95
- package/src/accounts/env.ts +0 -338
- package/src/accounts/secrets.ts +0 -50
- package/src/accounts/store.ts +0 -338
- package/src/capabilities/api.ts +0 -75
- package/src/capabilities/runSnapshot.ts +0 -59
- package/src/capabilities/types.ts +0 -34
- package/src/cli.ts +0 -118
- package/src/core/bus.test.ts +0 -22
- package/src/core/bus.ts +0 -49
- package/src/core/changes.ts +0 -33
- package/src/core/env.ts +0 -27
- package/src/core/errors.ts +0 -32
- package/src/core/frontmatter.ts +0 -47
- package/src/core/fs.test.ts +0 -38
- package/src/core/fs.ts +0 -92
- package/src/core/index.ts +0 -193
- package/src/core/path.test.ts +0 -14
- package/src/core/path.ts +0 -79
- package/src/core/projects.ts +0 -90
- package/src/core/text.ts +0 -39
- package/src/harness.ts +0 -322
- package/src/hub/catalog.json +0 -123
- package/src/hub/cli.ts +0 -59
- package/src/hub/hub.test.ts +0 -205
- package/src/hub/hub.ts +0 -256
- package/src/hub/schema.ts +0 -81
- package/src/index.ts +0 -80
- package/src/mcp/connections.ts +0 -641
- package/src/mcp/manager.ts +0 -130
- package/src/mcp/oauth.ts +0 -195
- package/src/mcp/scopeMigration.test.ts +0 -79
- package/src/mcp/scopeMigration.ts +0 -204
- package/src/mcp/service.test.ts +0 -422
- package/src/mcp/service.ts +0 -560
- package/src/mcp/types.ts +0 -118
- package/src/memory/api.test.ts +0 -82
- package/src/memory/api.ts +0 -303
- package/src/memory/blocks.test.ts +0 -78
- package/src/memory/blocks.ts +0 -408
- package/src/memory/caller.ts +0 -69
- package/src/memory/curation.test.ts +0 -206
- package/src/memory/curation.ts +0 -64
- package/src/memory/dispatch.ts +0 -64
- package/src/memory/facts.test.ts +0 -41
- package/src/memory/facts.ts +0 -248
- package/src/memory/graph.ts +0 -103
- package/src/memory/health.test.ts +0 -130
- package/src/memory/health.ts +0 -74
- package/src/memory/maintainer.ts +0 -272
- package/src/memory/maintenance.test.ts +0 -192
- package/src/memory/maintenance.ts +0 -679
- package/src/memory/migrate.ts +0 -79
- package/src/memory/operations.ts +0 -150
- package/src/memory/proposals.test.ts +0 -168
- package/src/memory/proposals.ts +0 -584
- package/src/memory/recall.test.ts +0 -115
- package/src/memory/recall.ts +0 -279
- package/src/memory/references.ts +0 -77
- package/src/memory/runContext.ts +0 -93
- package/src/memory/secrets.ts +0 -6
- package/src/memory/store.test.ts +0 -66
- package/src/memory/store.ts +0 -385
- package/src/memory/trajectory.test.ts +0 -178
- package/src/memory/trajectory.ts +0 -220
- package/src/memory/wiki.test.ts +0 -47
- package/src/memory/wiki.ts +0 -423
- package/src/memory/wikiIndex.test.ts +0 -88
- package/src/memory/wikiIndex.ts +0 -117
- package/src/plugins/api.ts +0 -181
- package/src/plugins/attachments.test.ts +0 -84
- package/src/plugins/attachments.ts +0 -141
- package/src/plugins/builtin.ts +0 -84
- package/src/plugins/catalogue.test.ts +0 -254
- package/src/plugins/catalogue.ts +0 -251
- package/src/plugins/cli.ts +0 -184
- package/src/plugins/discover.ts +0 -151
- package/src/plugins/firstParty.test.ts +0 -143
- package/src/plugins/firstParty.ts +0 -129
- package/src/plugins/hooks.test.ts +0 -250
- package/src/plugins/hooks.ts +0 -239
- package/src/plugins/identity.ts +0 -37
- package/src/plugins/install.test.ts +0 -107
- package/src/plugins/install.ts +0 -106
- package/src/plugins/inventory.ts +0 -123
- package/src/plugins/manifest.ts +0 -76
- package/src/plugins/plugins.test.ts +0 -205
- package/src/plugins/plugins.ts +0 -189
- package/src/plugins/proposal.ts +0 -121
- package/src/plugins/runtime.test.ts +0 -40
- package/src/plugins/runtime.ts +0 -82
- package/src/plugins/trust.ts +0 -142
- package/src/plugins/types.ts +0 -149
- package/src/prompt/compile.test.ts +0 -261
- package/src/prompt/compile.ts +0 -732
- package/src/server/methods.ts +0 -355
- package/src/server/remote.ts +0 -77
- package/src/server/rpc.ts +0 -116
- package/src/server/serve.ts +0 -28
- package/src/server/server.test.ts +0 -193
- package/src/sessions/approvals.test.ts +0 -49
- package/src/sessions/approvals.ts +0 -140
- package/src/sessions/contracts.ts +0 -336
- package/src/sessions/conversation.test.ts +0 -233
- package/src/sessions/extensionSession.test.ts +0 -74
- package/src/sessions/extensionUi.test.ts +0 -65
- package/src/sessions/extensionUi.ts +0 -102
- package/src/sessions/history.ts +0 -51
- package/src/sessions/lineageJoin.ts +0 -75
- package/src/sessions/policy.ts +0 -36
- package/src/sessions/pricing.ts +0 -60
- package/src/sessions/questionBatches.test.ts +0 -110
- package/src/sessions/reasoningSummaries.ts +0 -59
- package/src/sessions/registry.ts +0 -412
- package/src/sessions/runIndex.ts +0 -99
- package/src/sessions/runStore.test.ts +0 -152
- package/src/sessions/runStore.ts +0 -346
- package/src/sessions/runner.ts +0 -610
- package/src/sessions/runtimeResources.test.ts +0 -61
- package/src/sessions/sessions.test.ts +0 -588
- package/src/sessions/sessions.ts +0 -331
- package/src/sessions/subagentService.test.ts +0 -159
- package/src/sessions/subagentService.ts +0 -236
- package/src/sessions/subagents.ts +0 -97
- package/src/skills/registry.test.ts +0 -104
- package/src/skills/registry.ts +0 -413
- package/src/terminal/accountsMenu.test.ts +0 -225
- package/src/terminal/accountsMenu.ts +0 -382
- package/src/terminal/cli.ts +0 -149
- package/src/terminal/client.ts +0 -74
- package/src/terminal/control.test.ts +0 -23
- package/src/terminal/control.ts +0 -23
- package/src/terminal/controller.ts +0 -354
- package/src/terminal/hubMenu.ts +0 -24
- package/src/terminal/launch.test.ts +0 -25
- package/src/terminal/launch.ts +0 -48
- package/src/terminal/piExtension.lifecycle.test.ts +0 -55
- package/src/terminal/piExtension.ts +0 -295
- package/src/terminal/pluginControl.test.ts +0 -146
- package/src/terminal/pluginMenu.ts +0 -112
- package/src/terminal/socket.test.ts +0 -94
- package/src/terminal/socket.ts +0 -256
- package/src/terminal/standalone.test.ts +0 -167
- package/src/terminal/standalone.ts +0 -165
- package/src/terminal/terminal.test.ts +0 -534
- package/src/terminal/terminals.ts +0 -661
- package/src/terminal/trajectory.test.ts +0 -66
- package/src/terminal/trajectory.ts +0 -44
- package/src/terminal/tui/application.test.ts +0 -290
- package/src/terminal/tui/application.ts +0 -653
- package/src/terminal/tui/commands.test.ts +0 -278
- package/src/terminal/tui/commands.ts +0 -443
- package/src/terminal/tui/dialogs.ts +0 -301
- package/src/terminal/tui/editor.test.ts +0 -113
- package/src/terminal/tui/editor.ts +0 -109
- package/src/terminal/tui/keybindings.test.ts +0 -30
- package/src/terminal/tui/keybindings.ts +0 -59
- package/src/terminal/tui/piAdapter.ts +0 -62
- package/src/terminal/tui/planMode.test.ts +0 -10
- package/src/terminal/tui/planMode.ts +0 -12
- package/src/terminal/tui/presentation.test.ts +0 -79
- package/src/terminal/tui/questions.test.ts +0 -41
- package/src/terminal/tui/questions.ts +0 -47
- package/src/terminal/tui/runtime.socket.test.ts +0 -178
- package/src/terminal/tui/runtime.test.ts +0 -225
- package/src/terminal/tui/runtime.ts +0 -403
- package/src/terminal/tui/screen.test.ts +0 -143
- package/src/terminal/tui/screen.ts +0 -121
- package/src/terminal/tui/sessionUi.ts +0 -24
- package/src/terminal/tui/settings.test.ts +0 -150
- package/src/terminal/tui/settings.ts +0 -188
- package/src/terminal/tui/skillInvocation.test.ts +0 -71
- package/src/terminal/tui/skillInvocation.ts +0 -51
- package/src/terminal/tui/status.test.ts +0 -48
- package/src/terminal/tui/status.ts +0 -82
- package/src/terminal/tui/theme.ts +0 -185
- package/src/terminal/tui/tools.test.ts +0 -145
- package/src/terminal/tui/tools.ts +0 -142
- package/src/terminal/tui/trajectoryPanel.test.ts +0 -99
- package/src/terminal/tui/trajectoryPanel.ts +0 -226
- package/src/terminal/tui/transcript.test.ts +0 -39
- package/src/terminal/tui/transcript.ts +0 -135
- package/src/terminal/tui/ui.test.ts +0 -313
- package/src/terminal/tui/ui.ts +0 -166
- package/src/terminal/tui/welcome.ts +0 -102
- package/src/terminal/tui/workingStatus.test.ts +0 -44
- package/src/terminal/tui/workingStatus.ts +0 -238
- package/src/tools/askUser.test.ts +0 -69
- package/src/tools/askUser.ts +0 -59
- package/src/tools/definitions.ts +0 -228
- package/src/tools/maintenance.ts +0 -29
- package/src/tools/memoryTools.ts +0 -22
- package/src/tools/pluginPropose.ts +0 -41
- package/src/tools/registryWrite.test.ts +0 -101
- package/src/tools/registryWrite.ts +0 -182
- package/src/tools/spawnSubagent.ts +0 -47
- package/src/tools/types.ts +0 -41
- package/src/web/safeRequest.ts +0 -171
- package/src/web/text.ts +0 -53
- package/src/web/tools.ts +0 -134
- package/src/web/web.test.ts +0 -141
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0015
|
|
3
|
+
title: One capability surface — the Harness terminal and every host offer the same capabilities
|
|
4
|
+
status: Accepted
|
|
5
|
+
created: 2026-10-23
|
|
6
|
+
updated: 2026-10-23
|
|
7
|
+
affects: [INV-BND-2, new INV-PAR-1..4, 00-overview.md, 11-terminal.md, new 14-surfaces-and-parity.md, AGENTS.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0015: One capability surface
|
|
11
|
+
|
|
12
|
+
Accepted by the user's approval of the parity plan on 2026-10-23. Related decision:
|
|
13
|
+
[ADR-0017](../../decisions/ADR-0017-one-capability-surface.md).
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
Two front ends sit on the same harness: the Harness-owned terminal (`xharness`) and the App.
|
|
18
|
+
Capabilities a person uses grew in the App alone (web annotations, managed worktrees, agent
|
|
19
|
+
organizations, delegated work), so the terminal cannot do what the App does, and a reader cannot
|
|
20
|
+
tell which repository owns a feature. The App also carried an orchestration layer (agents as
|
|
21
|
+
product objects, routed chats, group chats, a reporting tree, delegated work queues) that no other
|
|
22
|
+
host could reuse and that was never verified in a running app.
|
|
23
|
+
|
|
24
|
+
The owner decided on 2026-10-23 that the App is a richer presentation of the Harness and that the
|
|
25
|
+
terminal and the App offer the same capabilities, with room reserved for future host-only
|
|
26
|
+
surfaces such as interactive agent output ("OpenUI").
|
|
27
|
+
|
|
28
|
+
## Affected rules
|
|
29
|
+
|
|
30
|
+
- 00-overview "Stays in the application: agents, groups, conversations, tasks and coordination,
|
|
31
|
+
projects and worktrees, App browser UI and tab sharing, computer use, windows, the PTY, the
|
|
32
|
+
keychain, and application UI."
|
|
33
|
+
- `INV-BND-2` lists "worktree" among application concepts.
|
|
34
|
+
- 11-terminal describes the terminal as one frontend, with no parity obligation.
|
|
35
|
+
|
|
36
|
+
## Proposal
|
|
37
|
+
|
|
38
|
+
A new page, [14 Surfaces and parity](../14-surfaces-and-parity.md), states four invariants:
|
|
39
|
+
|
|
40
|
+
- **INV-PAR-1** Every capability a person can use in a host is a Harness capability: a foundation
|
|
41
|
+
service, a `WorldPart`, or a first-party plugin, reachable through server methods. The standalone
|
|
42
|
+
terminal surfaces it. A host is a presentation of it.
|
|
43
|
+
- **INV-PAR-2** A capability is complete only when its terminal surface and its host surface both
|
|
44
|
+
pass acceptance. It lands in the Harness first, together with its terminal surface.
|
|
45
|
+
- **INV-PAR-3** A host-backed capability needs an operating-system object only a host has (a
|
|
46
|
+
WebKit tab, a native computer bridge, a keychain). The Harness defines its generic contract and a
|
|
47
|
+
terminal fallback. Without a fallback, the terminal shows the capability as unavailable with the
|
|
48
|
+
reason, in `/doctor` and `/tools`.
|
|
49
|
+
- **INV-PAR-4** A host-only surface is presentation that cannot exist in a terminal. It owns no
|
|
50
|
+
capability: its actions are Harness methods or tools, its data lives in Harness records, the
|
|
51
|
+
terminal shows a text fallback, and each one is listed in the host's register by an owner
|
|
52
|
+
decision. A generic rich-output event for such surfaces needs its own proposal; the name is
|
|
53
|
+
reserved, nothing is designed.
|
|
54
|
+
|
|
55
|
+
00-overview changes:
|
|
56
|
+
|
|
57
|
+
- "Belongs in the harness" gains managed worktrees (PROP-0016) and page annotations (PROP-0017).
|
|
58
|
+
- "Stays in the application" becomes: windows, the PTY, the keychain, native operating-system
|
|
59
|
+
bridges (WebKit tabs, computer control), presentation, and registered host-only surfaces.
|
|
60
|
+
- `INV-BND-2` no longer lists "worktree" as an application concept once PROP-0016 lands.
|
|
61
|
+
|
|
62
|
+
A non-binding register, [`docs/parity.md`](../../parity.md), lists every capability with its
|
|
63
|
+
Harness owner, its terminal surface, its host surface and its status.
|
|
64
|
+
|
|
65
|
+
## Alternatives
|
|
66
|
+
|
|
67
|
+
- **Keep the App as the full product and the terminal as a developer tool.** Rejected by the owner:
|
|
68
|
+
it keeps two products and the ownership confusion.
|
|
69
|
+
- **Strict identity of the two front ends.** Rejected: some presentation (rich panes, interactive
|
|
70
|
+
output) cannot exist in a terminal. INV-PAR-4 bounds that category instead.
|
|
71
|
+
- **Do nothing.** The gap grows with every App feature.
|
|
72
|
+
|
|
73
|
+
## Consequences
|
|
74
|
+
|
|
75
|
+
- New user capabilities are Harness work first, with their terminal surface.
|
|
76
|
+
- Hosts may still add tools through `ToolProvider`, but a tool a person relies on is either a
|
|
77
|
+
Harness capability or a declared host-backed capability (INV-PAR-3).
|
|
78
|
+
- The server protocol gains method groups only through the proposals that add each capability.
|
|
79
|
+
|
|
80
|
+
## Migration
|
|
81
|
+
|
|
82
|
+
No stored data changes. Existing gaps are recorded in `docs/parity.md` with IDs (`PAR-NNN`) and
|
|
83
|
+
closed one at a time.
|
|
84
|
+
|
|
85
|
+
## Checks
|
|
86
|
+
|
|
87
|
+
Documentation change. Link check of the edited pages; each later capability brings its own tests
|
|
88
|
+
on both surfaces.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0016
|
|
3
|
+
title: Managed git worktrees as a Harness capability, in the terminal and every host
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-23
|
|
6
|
+
updated: 2026-10-23
|
|
7
|
+
affects: [INV-BND-2, D-5, INV-STO-3, INV-SRV-1, 00-overview.md, 02-sessions-and-runs.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 14-surfaces-and-parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0016: Managed git worktrees
|
|
11
|
+
|
|
12
|
+
Accepted by the user's approval of the parity plan on 2026-10-23 (PROP-0015, ADR-0017).
|
|
13
|
+
Implemented in the working tree on 2026-10-23: `src/worktrees/`, `Sessions.run`, `Terminals`,
|
|
14
|
+
`xharness --worktree`, `xharness worktree`, `/worktree`; spec pages 00, 02, 10, 11, 12 updated.
|
|
15
|
+
The App source has create integration; remaining App actions are tracked as PAR-012. Harness and
|
|
16
|
+
terminal implementation is included in the 4.0.0 candidate. The owner chose the Codex model:
|
|
17
|
+
managed, disposable worktrees with automatic pruning and a handoff back to the main checkout.
|
|
18
|
+
|
|
19
|
+
## Problem
|
|
20
|
+
|
|
21
|
+
Worktrees exist only in the App (`App/src-tauri/src/projects.rs`: `create_worktree`,
|
|
22
|
+
`list_worktrees`), with no removal, so thread, task and Solo worktrees accumulate. The terminal
|
|
23
|
+
runs in its launch folder only (`terminal/standalone.ts`), with no way to isolate a session's
|
|
24
|
+
edits. `RunRecord.worktreeId` is an opaque App field (drift D-5). Under INV-PAR-1 a capability a
|
|
25
|
+
person uses must be a Harness capability with a terminal surface.
|
|
26
|
+
|
|
27
|
+
## Affected rules
|
|
28
|
+
|
|
29
|
+
- 00-overview "Stays in the application: … projects and worktrees …".
|
|
30
|
+
- `INV-BND-2` lists "worktree" as an application concept.
|
|
31
|
+
- Drift D-5: `RunRecord` carries `worktreeId` and `handoffId`, which are application concepts.
|
|
32
|
+
- `INV-STO-3`: a new top-level folder is an architecture change.
|
|
33
|
+
- `INV-SRV-1`: a new method group.
|
|
34
|
+
|
|
35
|
+
## Proposal
|
|
36
|
+
|
|
37
|
+
### Model
|
|
38
|
+
|
|
39
|
+
A **worktree** is a linked git worktree of a repository (the *source checkout*) that the Harness
|
|
40
|
+
created or adopted. It has an id, a repository root, a path, a name, a branch or a detached HEAD,
|
|
41
|
+
the ref and commit it started from, a kind and an origin.
|
|
42
|
+
|
|
43
|
+
- **Managed** worktrees (the default) are disposable, usually one per session, on a detached HEAD.
|
|
44
|
+
They are pruned automatically.
|
|
45
|
+
- **Permanent** worktrees are named, may host several sessions, and are never pruned.
|
|
46
|
+
- **Create branch** gives a worktree a branch under a configurable prefix (default `wt/`).
|
|
47
|
+
|
|
48
|
+
### Creation
|
|
49
|
+
|
|
50
|
+
`create({ repo, name?, baseRef?, kind?, carryChanges? })`:
|
|
51
|
+
|
|
52
|
+
1. Resolve the source checkout's top level; refuse a folder that is not a git repository with at
|
|
53
|
+
least one commit.
|
|
54
|
+
2. `git worktree add --detach <path> <baseRef>` (default `HEAD`), with repository filter drivers
|
|
55
|
+
switched off (`GIT_LFS_SKIP_SMUDGE=1`, `-c filter.lfs.*` cleared), never through a shell.
|
|
56
|
+
3. When `carryChanges` (default true for `baseRef: HEAD`), apply the source checkout's
|
|
57
|
+
uncommitted tracked changes (`git diff HEAD --binary` piped to `git apply`) and copy its
|
|
58
|
+
untracked, non-ignored files, as Codex does.
|
|
59
|
+
4. Copy ignored files matched by `.worktreeinclude` (gitignore syntax, matched by git itself). A
|
|
60
|
+
file is copied only when it does not exist in the worktree; symlinks are skipped; a per-file
|
|
61
|
+
(5 MB) and total (100 MB) cap applies; the result lists what was copied and skipped.
|
|
62
|
+
5. Run the repository's setup script `.xharness/worktree-setup` when it exists and its exact text
|
|
63
|
+
is trusted by hash (`worktrees.setup.trust`). It runs with `HARNESS_WORKTREE_PATH`,
|
|
64
|
+
`HARNESS_WORKTREE_SOURCE`, `HARNESS_WORKTREE_NAME`, a 10-minute timeout, and its output in a log
|
|
65
|
+
file. An untrusted script is reported, never run.
|
|
66
|
+
|
|
67
|
+
### Lifecycle
|
|
68
|
+
|
|
69
|
+
- **Lease and lock.** A session that runs in a worktree holds a lease (session id, process id) and
|
|
70
|
+
`git worktree lock --reason`. The lease is released on dispose; a lease whose process is gone is
|
|
71
|
+
released on `open` (recovery).
|
|
72
|
+
- **Prune.** `prune({ keep })` keeps the `keep` (default 15) most recently used managed worktrees
|
|
73
|
+
per repository and removes older ones that hold no lease. Permanent, leased and locked-by-others
|
|
74
|
+
worktrees are never pruned.
|
|
75
|
+
- **Snapshot before removal.** Every removal of a worktree with uncommitted changes or commits not
|
|
76
|
+
on any other branch first records them: `git stash create` (with untracked files committed into a
|
|
77
|
+
temporary index) and `git update-ref refs/xharness/snapshots/<id> <commit>`. `restore({ id })`
|
|
78
|
+
recreates the worktree from its snapshot.
|
|
79
|
+
- **Remove.** `remove({ id, force? })` refuses a leased worktree, and refuses dirty work unless
|
|
80
|
+
`force`, in which case it snapshots first.
|
|
81
|
+
- **Handoff.** `handoff({ id, direction: 'toSource' | 'toWorktree' })` moves uncommitted changes
|
|
82
|
+
between the worktree and the source checkout through git (`diff --binary` and `apply --3way`,
|
|
83
|
+
plus untracked files). It refuses when the target has uncommitted changes, when a branch would be
|
|
84
|
+
checked out twice, or when the patch does not apply cleanly; nothing is changed on refusal.
|
|
85
|
+
- **Adopt.** `adopt({ path })` registers an existing linked worktree (for example ones a host
|
|
86
|
+
created earlier) with origin `adopted`. It moves nothing.
|
|
87
|
+
|
|
88
|
+
### Sessions and runs
|
|
89
|
+
|
|
90
|
+
`SessionRunInput` and `TerminalPrepareInput` accept `worktreeId`. The Harness resolves the working
|
|
91
|
+
folder from the registry, takes the lease, and records `RunRecord.worktreeId`, which now has
|
|
92
|
+
Harness meaning. A caller that passes a folder without `worktreeId` behaves as before. D-5 narrows
|
|
93
|
+
to `handoffId`.
|
|
94
|
+
|
|
95
|
+
### Storage
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
<state dir>/worktrees.json registry, owner: worktrees/registry.ts
|
|
99
|
+
<state dir>/worktrees/<repoKey>/<name>/ checkouts (device-local)
|
|
100
|
+
<state dir>/worktrees/logs/<id>.setup.log setup output
|
|
101
|
+
<state dir>/worktree-setup-trust.json trusted setup-script hashes, owner-only
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`repoKey` is a slug of the source folder's name and a short hash of its real path. Checkouts are
|
|
105
|
+
device-local and may be large, so they live in the state directory (`INV-STO-1`). A host may set
|
|
106
|
+
`HarnessOptions.worktrees = { root?, branchPrefix?, keep? }`.
|
|
107
|
+
|
|
108
|
+
### Server methods
|
|
109
|
+
|
|
110
|
+
New group `worktrees`: `list { repo? }`, `status { id }`, `create`, `branch { id, name }`,
|
|
111
|
+
`handoff { id, direction }`, `remove { id, force? }`, `restore { id }`, `prune { repo?, keep? }`,
|
|
112
|
+
`adopt { path }`, `setup.trust { repo, hash }`. Terminal equivalents use the control key
|
|
113
|
+
(INV-TUI-4).
|
|
114
|
+
|
|
115
|
+
### Terminal
|
|
116
|
+
|
|
117
|
+
- `xharness --worktree [name]` (`-w`) starts the terminal in a new managed worktree of the current
|
|
118
|
+
repository (or reuses the named one).
|
|
119
|
+
- `xharness worktree list|new|rm|prune|adopt|restore`.
|
|
120
|
+
- `/worktree` opens a page: list with branch, changes and last use; actions new, switch, create
|
|
121
|
+
branch, hand off, remove, restore, prune, trust setup script. Switching uses the terminal
|
|
122
|
+
relaunch loop with the new folder.
|
|
123
|
+
|
|
124
|
+
### INV-BND-2
|
|
125
|
+
|
|
126
|
+
"worktree" leaves the list of application concepts; a worktree is now a Harness object.
|
|
127
|
+
|
|
128
|
+
## Alternatives
|
|
129
|
+
|
|
130
|
+
- **Keep worktrees in the App.** Breaks INV-PAR-1; the terminal could not isolate a session.
|
|
131
|
+
- **Claude Code's opt-in named worktrees only.** The owner chose Codex's managed model; named
|
|
132
|
+
permanent worktrees are kept as the second kind.
|
|
133
|
+
- **Inside the repository** (`.claude/worktrees`, `.agents/worktrees`). Puts large device-local
|
|
134
|
+
folders where editors and tools index them; the state directory avoids that.
|
|
135
|
+
- **Copy-on-write clones** (omp). Faster for large ignored folders but platform-specific; left for
|
|
136
|
+
a later option.
|
|
137
|
+
|
|
138
|
+
## Consequences
|
|
139
|
+
|
|
140
|
+
- Hosts call `worktrees.*` instead of running git themselves. The App's `projects.rs` worktree
|
|
141
|
+
code is replaced; its existing worktrees can be adopted on the person's command.
|
|
142
|
+
- New folders in the state directory; no data-root change.
|
|
143
|
+
- The terminal gains a command-line flag, a command and a page.
|
|
144
|
+
|
|
145
|
+
## Migration
|
|
146
|
+
|
|
147
|
+
Nothing moves automatically. `adopt` registers existing worktrees when a person asks. The change
|
|
148
|
+
can be undone by removing the registry; checkouts stay valid git worktrees.
|
|
149
|
+
|
|
150
|
+
## Checks
|
|
151
|
+
|
|
152
|
+
Unit tests on temporary repositories: create (detached, branch, carry changes), include copy (no
|
|
153
|
+
overwrite, symlink skip, caps), setup trust gate, lease and lock, recovery of a stale lease, prune
|
|
154
|
+
order and protection, snapshot and restore, remove refusal, handoff both ways and its refusals,
|
|
155
|
+
adopt. Terminal page model tests. `npm run typecheck`, `npm test`, `npm run prove`, and the App's
|
|
156
|
+
checks.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0017
|
|
3
|
+
title: Page annotations as a Harness capability, captured in the headed browser or a host's web view
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-23
|
|
6
|
+
updated: 2026-10-25
|
|
7
|
+
affects: [INV-STO-3, INV-SRV-1, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 13-world-tools.md, 14-surfaces-and-parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0017: Page annotations
|
|
11
|
+
|
|
12
|
+
Accepted by the user's approval of the parity plan on 2026-10-23 (PROP-0015, ADR-0017). The owner
|
|
13
|
+
chose capture through a visible (headed) Harness browser window when only the terminal runs.
|
|
14
|
+
Implemented in the working tree on 2026-10-23: `src/annotations/`, the `annotations` world part,
|
|
15
|
+
`annotations.*` methods, `/notes` and `/annotate`; spec pages 07, 10, 11, 12, 13 updated. The App
|
|
16
|
+
source changes migrate the prior store into Harness and provide the Annotate panel; acceptance of
|
|
17
|
+
native WKWebView gestures remains outstanding. The Harness implementation is included in the 4.0.0
|
|
18
|
+
candidate.
|
|
19
|
+
|
|
20
|
+
## Problem
|
|
21
|
+
|
|
22
|
+
Web annotations exist only in the App (`App/src-tauri/src/browser_annotations/`, FEAT-0016): a
|
|
23
|
+
person marks a page, a text range or an element in an App WebKit tab, writes a note, and shares it
|
|
24
|
+
with an agent, which reads it with `browser_annotations_list` / `browser_annotations_read`. The
|
|
25
|
+
store, the page script and the tools are App code, so the terminal has no annotations (INV-PAR-1).
|
|
26
|
+
|
|
27
|
+
## Affected rules
|
|
28
|
+
|
|
29
|
+
- 13-world-tools: "The App owns its shared WebKit browser UI, private/shared tab policy, …" — the
|
|
30
|
+
WebKit capture surface stays with the host; the store, tools and page script move here.
|
|
31
|
+
- `INV-STO-3`: new data-root folder `annotations/`.
|
|
32
|
+
- `INV-SRV-1`: new method group `annotations`.
|
|
33
|
+
|
|
34
|
+
## Proposal
|
|
35
|
+
|
|
36
|
+
### Records
|
|
37
|
+
|
|
38
|
+
A **note** is `{ id, version, source, target, body, tags, status, author, createdAt, updatedAt,
|
|
39
|
+
grants, history }`, the format of the App store, so existing notes import unchanged:
|
|
40
|
+
|
|
41
|
+
- `source`: `{ url, title, capturedAt }` plus an optional opaque `surface` string from the capturing
|
|
42
|
+
front end.
|
|
43
|
+
- `target`: `page`, `text { exact, prefix, suffix, start, end }` (Unicode code points over
|
|
44
|
+
normalised page text), or `element { tag, role, name, text, context, selector }`. Element capture
|
|
45
|
+
prefers role/name/text; when an otherwise empty visual element has no semantic label, it may use
|
|
46
|
+
a specific CSS selector (ID, test ID, classes, and a structural path when needed), never a bare
|
|
47
|
+
tag. Resolution uses that selector only when it identifies one allowed element and the captured
|
|
48
|
+
semantics/context still agree; stale or duplicate targets remain unresolved or ambiguous.
|
|
49
|
+
- `status`: `open` or `resolved`. `version` increases on every change; update and delete name the
|
|
50
|
+
version they expect (compare-and-swap). The last 100 change receipts are kept, without earlier
|
|
51
|
+
bodies. At most 10,000 notes.
|
|
52
|
+
- `grants`: `{ principal: { sessionId? , agentId? }, binding?: string, grantedAt }[]`. `binding` is
|
|
53
|
+
an opaque host string (the App uses its tab and sharing epoch); the Harness compares it, never
|
|
54
|
+
interprets it. Sharing and revoking are a person's action through the methods below, never a
|
|
55
|
+
model's.
|
|
56
|
+
|
|
57
|
+
Notes are one JSON file each under `<data root>/annotations/`, written atomically, owned by
|
|
58
|
+
`annotations/store.ts`. The store is synchronous, like the Wiki.
|
|
59
|
+
|
|
60
|
+
### Page script
|
|
61
|
+
|
|
62
|
+
`annotations/pageScript.js` is the App's page script, moved: plain DOM code with a pull model
|
|
63
|
+
(`identity`, `begin`, `capture`, `cancel`, `resolve`, `reveal`). The page never calls out; the
|
|
64
|
+
front end polls it. It runs in the page's own script world, as in the App, so a page can tamper
|
|
65
|
+
with it: every result is untrusted and validated by the store before it is saved. A host reads the
|
|
66
|
+
same source with `annotations.pageScript`.
|
|
67
|
+
|
|
68
|
+
### Tools
|
|
69
|
+
|
|
70
|
+
A world part `annotations` (plugin id `annotations`, switchable, on by default) offers two
|
|
71
|
+
read-only tools to SDK and terminal sessions:
|
|
72
|
+
|
|
73
|
+
- `page_notes_list { url?, status?, offset? }` — up to 20 summaries, 12,000 characters total.
|
|
74
|
+
- `page_notes_read { id }` — the full note, marked untrusted.
|
|
75
|
+
|
|
76
|
+
A tool returns only notes granted to the calling session or agent. A binding is the host's handle
|
|
77
|
+
for revocation: when what it stands for ends (a tab closes or is shared again), the host calls
|
|
78
|
+
`annotations.revokeBinding` and every grant made with it ends. The Harness never interprets a
|
|
79
|
+
binding. The part is separate from the browser part, so a host that replaces the browser
|
|
80
|
+
(`browser: false`) still has annotations.
|
|
81
|
+
|
|
82
|
+
### Server methods
|
|
83
|
+
|
|
84
|
+
Group `annotations`: `list { url?, query?, status?, offset? }`, `read { id }`,
|
|
85
|
+
`create { source, target, body, tags }`, `update { id, expectedVersion, patch }`,
|
|
86
|
+
`delete { id, expectedVersion }`, `share { id, principal, binding? }`,
|
|
87
|
+
`unshare { id, principal }`, `revokeBinding { binding }`, `import { notes }` (keeps ids; used once
|
|
88
|
+
by a host migrating its own store), `pageScript` (the page helper's source for a host's web view).
|
|
89
|
+
|
|
90
|
+
### Terminal capture
|
|
91
|
+
|
|
92
|
+
- `/annotate [url]` opens a visible capture browser for the terminal session (its own window and
|
|
93
|
+
its own profile, `<state dir>/browser/profiles/person`, separate from the agent's browser),
|
|
94
|
+
navigates when a URL is given, and runs the page script there. The person selects
|
|
95
|
+
text or an element in the Chromium window and presses Capture in the terminal; the terminal pulls
|
|
96
|
+
the selection, asks for a body and tags, and saves the note. `/annotate --page <url>` saves a
|
|
97
|
+
page note without opening a window.
|
|
98
|
+
- `/notes` lists notes for the current page or all notes, with search and status filter, and offers
|
|
99
|
+
edit, resolve or reopen, share with this session, unshare, delete and reveal (highlight in the
|
|
100
|
+
headed window; result `matched`, `ambiguous` or `unresolved`).
|
|
101
|
+
|
|
102
|
+
### Host capture
|
|
103
|
+
|
|
104
|
+
A host with its own web view (the App's WebKit tabs) runs the same page script there and calls the
|
|
105
|
+
same methods. The host keeps its tab and sharing policy and passes it as the grant's binding.
|
|
106
|
+
|
|
107
|
+
## Alternatives
|
|
108
|
+
|
|
109
|
+
- **Keep annotations in the App.** Breaks INV-PAR-1.
|
|
110
|
+
- **Terminal-only capture from page text and the accessibility snapshot.** The owner chose the
|
|
111
|
+
headed window, which captures exactly what the person selects. Snapshot picking can be added
|
|
112
|
+
later as a fallback.
|
|
113
|
+
- **Put the tools in the browser part.** A host that replaces the browser would lose them.
|
|
114
|
+
|
|
115
|
+
## Consequences
|
|
116
|
+
|
|
117
|
+
- New data-root folder `annotations/`, new method group, two new model tools.
|
|
118
|
+
- The App's store and tools are replaced by Harness calls; its WebKit capture stays.
|
|
119
|
+
|
|
120
|
+
## Migration
|
|
121
|
+
|
|
122
|
+
The App imports its existing `<data root>/browser-annotations/*.json` once with
|
|
123
|
+
`annotations.import`, keeping ids, then renames the old folder `browser-annotations.migrated`. If
|
|
124
|
+
the import fails, nothing is renamed and the App reports it.
|
|
125
|
+
|
|
126
|
+
## Checks
|
|
127
|
+
|
|
128
|
+
Store tests ported from the App's `store.rs` tests (compare-and-swap, cap, history, target
|
|
129
|
+
validation, code-point offsets); grant tests (an unshared note is invisible, a binding mismatch is
|
|
130
|
+
refused); page-script tests; capture and reveal with a fake browser launcher; terminal page model
|
|
131
|
+
tests. `npm run typecheck`, `npm test`, `npm run prove`, and the App's checks.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0018
|
|
3
|
+
title: Inspector-style page notes, a fix queue to the agent, and app windows as capture targets
|
|
4
|
+
status: Implemented; queue, three-button popover and page_notes_mark_fixed superseded by PROP-0048
|
|
5
|
+
created: 2026-10-23
|
|
6
|
+
updated: 2026-10-27
|
|
7
|
+
affects: [INV-STO-3, INV-SRV-1, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 13-world-tools.md, 14-surfaces-and-parity.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0018: Inspector, fix queue and app targets for page notes
|
|
11
|
+
|
|
12
|
+
> The fix queue, its three-button popover and `page_notes_mark_fixed` were replaced by
|
|
13
|
+
> [PROP-0048](PROP-0048-simple-annotate.md): a note is pending or sent, and the popover has Annotate
|
|
14
|
+
> and Annotate & send.
|
|
15
|
+
|
|
16
|
+
Requested by the owner on 2026-10-23. They chose these four things:
|
|
17
|
+
- the popover's three choices: Save, Queue, Send now
|
|
18
|
+
- the popover drawn inside the page
|
|
19
|
+
- Electron over its DevTools port, and real Tauri windows on macOS, as targets
|
|
20
|
+
- the Harness and terminal first, then the App pane
|
|
21
|
+
|
|
22
|
+
Implemented for the Harness and terminal on 2026-10-23 and in the App source on 2026-10-24 (store migration, `page_notes_*` tools, Annotate panel). The Harness implementation is included in the 4.0.0 candidate. Native WKWebView gestures still need acceptance in the running App.
|
|
23
|
+
|
|
24
|
+
## Problem
|
|
25
|
+
|
|
26
|
+
Page notes (PROP-0017) take several prompts each. The person picks a kind, confirms in the terminal, types the note in the terminal, then shares it. A note never reaches the agent unless the person asks the agent to read it. Capture works only on http(s) pages, in a new browser context. So a person cannot point at a component of the app they are building, say what to change, and have the agent do it, and they cannot do it at all in a desktop app's own window.
|
|
27
|
+
|
|
28
|
+
## Affected rules
|
|
29
|
+
|
|
30
|
+
- `INV-SRV-1`: new methods `annotations.queue`, `dequeue`, `confirm`, `queued`, `createAndAct`, `compose`, `delivered`, `send`, `annotations.capture.*` and `annotations.bridge.start`. All are additive.
|
|
31
|
+
- `INV-STO-3`: one new state-directory file, `<state dir>/notes-bridge.json`, which holds the page bridge's port and token. It is owned by `annotations/bridge.ts`.
|
|
32
|
+
- 07: a new model tool, `page_notes_mark_fixed`. It is the first page-note tool that writes.
|
|
33
|
+
- 13: "Capture happens in the terminal's visible browser or in a host web view" now also covers app windows, either over a loopback DevTools port or through the page bridge.
|
|
34
|
+
|
|
35
|
+
## Proposal
|
|
36
|
+
|
|
37
|
+
### Records
|
|
38
|
+
|
|
39
|
+
A note gains an optional `delivery`:
|
|
40
|
+
`{ state: 'queued' | 'sent' | 'fixed', sessionId, queuedAt, autoSend?, confirm?, sentAt?, runId?, fixedAt?, summary? }`.
|
|
41
|
+
|
|
42
|
+
- `status` (`open` | `resolved`) is unchanged, and only a person resolves a note.
|
|
43
|
+
- Queueing a note shares it with that session, because the agent must be able to read what it is asked to fix.
|
|
44
|
+
- New history operations: `queue`, `dequeue`, `deliver`, `mark_fixed`.
|
|
45
|
+
- A note captured in an app window carries `source.app: { kind: 'cdp' | 'bridge', name }`. Its URL may then also use `file:`, `app:`, `tauri:`, `electron:` or `asset:`, still without credentials. Web notes keep the http(s) rule.
|
|
46
|
+
|
|
47
|
+
### Inspector and popover
|
|
48
|
+
|
|
49
|
+
`begin` takes a third kind, `inspect`.
|
|
50
|
+
- Hovering draws an outline and a `tag.class W×H` chip.
|
|
51
|
+
- A click, or a drag over text, opens a popover beside the target. It has a comment box and three buttons:
|
|
52
|
+
- **Create annotation**: `save`
|
|
53
|
+
- **Ask agent to fix**: `queue`
|
|
54
|
+
- **Proceed now**: `send`
|
|
55
|
+
- ⌘/Ctrl+Enter is Proceed now; with Shift it is queue.
|
|
56
|
+
- Everything is drawn in a closed shadow root.
|
|
57
|
+
- The page never receives the press or click on what is inspected, nor anything typed in the popover.
|
|
58
|
+
- Inputs, secrets, `[data-sensitive]` elements, frames, shadow roots and custom elements are never picked, as in PROP-0017. (Open shadow roots and readable custom elements became pickable in [PROP-0038](PROP-0038-annotate-open-shadow-roots.md).)
|
|
59
|
+
- The inspector stays on after each comment.
|
|
60
|
+
- A new operation, `next`, returns `{ active, documentId, url, title, result }`, one comment at a time.
|
|
61
|
+
- `toast` shows a short status in the page.
|
|
62
|
+
- The helper's global key moves to `…page.v2`.
|
|
63
|
+
|
|
64
|
+
### Trust
|
|
65
|
+
|
|
66
|
+
What the page helper returns is page data. Whether a "Proceed now" goes straight to the agent depends on **where the helper ran**, decided by the Harness:
|
|
67
|
+
- **Chromium (the capture browser and DevTools-attached apps):** the helper runs in an isolated script world (`Page.createIsolatedWorld`). The DOM is shared, but the JavaScript globals are not, so the page cannot read or forge results. These results are trusted and sent directly.
|
|
68
|
+
- **Page bridge and host web views without isolation:** results are untrusted. A send becomes a queued note with `confirm: true`, which the person confirms in the panel before it goes out.
|
|
69
|
+
|
|
70
|
+
A host's `annotations.createAndAct` passes `trusted: true` only for comments from its own UI or an isolated world.
|
|
71
|
+
|
|
72
|
+
### Delivery
|
|
73
|
+
|
|
74
|
+
`compose(notes)` builds one instruction for a batch:
|
|
75
|
+
- It contains each note's id, where it is, the element (tag, role, name, selector, text) or the quoted text, and the person's comment.
|
|
76
|
+
- Page-derived text is labelled untrusted and fenced; the comment is in a `comment` fence.
|
|
77
|
+
- It asks the agent to call `page_notes_mark_fixed`.
|
|
78
|
+
- A batch holds at most 20 notes.
|
|
79
|
+
|
|
80
|
+
The `NoteDeliveries` service (`annotations/delivery.ts`) handles sending:
|
|
81
|
+
- **Terminal session:** the batch goes out as a new run through `TerminalSessions.send`, and the notes become `sent` with that run id. If the session is busy, the notes stay queued with `autoSend`.
|
|
82
|
+
- **Host session:** the reply is `{ state: 'host', text, ids }`. The host starts the run (`sessions.run`) and reports it with `annotations.delivered`.
|
|
83
|
+
- **When a run ends** (`runs.listen`, after 250 ms), the session's `autoSend` notes go out. Notes still waiting for a person's confirmation are skipped. For a host session, the service emits the notice `annotations.ready`.
|
|
84
|
+
- Every change emits `annotations.changed`.
|
|
85
|
+
|
|
86
|
+
### Model tool
|
|
87
|
+
|
|
88
|
+
`page_notes_mark_fixed { id, summary }` works only on a note shared with the caller. It sets `delivery.state = 'fixed'` with the summary. It never resolves a note and never changes grants. It is not read-only, so it is unavailable in plan mode.
|
|
89
|
+
|
|
90
|
+
### Capture targets
|
|
91
|
+
|
|
92
|
+
`AnnotationCapture` captures in one target per key:
|
|
93
|
+
- **`web`:** the visible browser window from PROP-0017. Its helper calls now run in an isolated world.
|
|
94
|
+
- **`cdp`:** an app started with a DevTools port, attached with `connectOverCDP` to a loopback address only. It uses the app's own windows, and nothing is routed or opened. Releasing the target disconnects; the app keeps running. The default name is `App at <host:port>`.
|
|
95
|
+
- **`bridge`:** a loopback HTTP server (`annotations/bridge.ts`) serves `/page-notes.js?token=…`. That script is the page helper plus a long-poll loop that pulls operations and posts replies.
|
|
96
|
+
- The port and token are kept in `notes-bridge.json`, so the script tag in an app stays valid across restarts.
|
|
97
|
+
- Requests need the token and the host name `127.0.0.1:<port>` or `localhost:<port>`, which blocks DNS rebinding.
|
|
98
|
+
- At most 32 windows; a window is dropped after 45 s without a poll.
|
|
99
|
+
|
|
100
|
+
Methods (`key`, `windows`, `selectWindow`, `inspect`, `stopInspect`, `next`, `toast`) behave the same for all three.
|
|
101
|
+
|
|
102
|
+
`inspectStep` (`annotations/inspect.ts`) is the one loop step the terminal and hosts share. It:
|
|
103
|
+
1. reads the next comment;
|
|
104
|
+
2. creates the note with `source.surface` and `source.app`;
|
|
105
|
+
3. applies the action with the target's trust;
|
|
106
|
+
4. shows a toast in the page.
|
|
107
|
+
|
|
108
|
+
### Server methods
|
|
109
|
+
|
|
110
|
+
| Method | Input | Reply |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `annotations.queue` | `{ id, sessionId, expectedVersion?, autoSend? }` | `Note` |
|
|
113
|
+
| `annotations.dequeue` | `{ id, expectedVersion? }` | `Note` |
|
|
114
|
+
| `annotations.confirm` | `{ id, expectedVersion? }` | `Note` |
|
|
115
|
+
| `annotations.queued` | `{ sessionId }` | `{ notes }`, oldest first |
|
|
116
|
+
| `annotations.createAndAct` | `{ note, action, sessionId?, trusted? }` | `{ note, send }` |
|
|
117
|
+
| `annotations.compose` | `{ sessionId, ids? }` | `{ text, ids }` |
|
|
118
|
+
| `annotations.delivered` | `{ ids, sessionId, runId }` | `{ notes }` |
|
|
119
|
+
| `annotations.send` | `{ sessionId, ids? }` | `{ state: sent \| busy \| host \| empty, … }` |
|
|
120
|
+
| `annotations.capture.attach` | `{ key, kind, endpoint?, name? }` | `{ kind, app, windows, bridge? }` |
|
|
121
|
+
| `annotations.capture.target` | `{ key }` | `{ kind, app, inspecting, windows }` |
|
|
122
|
+
| `annotations.capture.selectWindow` | `{ key, window }` | `{}` |
|
|
123
|
+
| `annotations.capture.open` | `{ key, url? }` | `{ url, title }` |
|
|
124
|
+
| `annotations.capture.inspect` / `stopInspect` | `{ key }` | `{ captureId }` / `{}` |
|
|
125
|
+
| `annotations.capture.next` | `{ key, sessionId?, surface? }` | `{ active, trusted, app, note, send, message, … }` |
|
|
126
|
+
| `annotations.capture.release` | `{ key }` | `{}` |
|
|
127
|
+
| `annotations.bridge.start` | `{}` | `{ port, token, scriptUrl, snippet }` |
|
|
128
|
+
|
|
129
|
+
### Terminal
|
|
130
|
+
|
|
131
|
+
`/annotate` is now a full-screen pane. The browser window or the app's window is the canvas, and the pane is the panel beside it.
|
|
132
|
+
|
|
133
|
+
Ways to start it:
|
|
134
|
+
- `/annotate [url]`: a web page or dev server
|
|
135
|
+
- `/annotate --app <DevTools address | port> [name]`: an app over its DevTools port
|
|
136
|
+
- `/annotate --bridge [name]`: shows the script tag to load in the app
|
|
137
|
+
|
|
138
|
+
The pane:
|
|
139
|
+
- The header shows the target, the window, and whether the inspector is on.
|
|
140
|
+
- Sections: **Queue (N)**, **Sent and fixed**, and **Saved**.
|
|
141
|
+
- Keys:
|
|
142
|
+
|
|
143
|
+
| Key | Action |
|
|
144
|
+
|---|---|
|
|
145
|
+
| `i` | inspector on/off |
|
|
146
|
+
| `s` | send the queue, confirming page-origin notes first |
|
|
147
|
+
| `x` | take the selected note out of the queue |
|
|
148
|
+
| `t` | choose a window |
|
|
149
|
+
| `Enter` | note menu: reveal, send, confirm, queue, unqueue, edit, resolve, delete |
|
|
150
|
+
|
|
151
|
+
- It polls `terminal.annotations.next` every 400 ms while the inspector is on.
|
|
152
|
+
|
|
153
|
+
New terminal routes: `target`, `attach`, `windows`, `selectWindow`, `inspect`, `stopInspect`, `next`, `queue`, `dequeue`, `confirm`, `send`. They queue and send only to the terminal's own session and need the control key. `/notes` stays the plain list.
|
|
154
|
+
|
|
155
|
+
## Alternatives
|
|
156
|
+
|
|
157
|
+
- **The host draws the popover.** The App's native web view covers React content, and each host would build its own. The owner chose in-page drawing.
|
|
158
|
+
- **A WebSocket bridge.** It would need a new dependency. Long-polling over plain HTTP is enough for one person's clicks, and `text/plain` posts avoid CORS preflights.
|
|
159
|
+
- **Trust whatever the page reports.** A hostile page could start a run with its own text. The isolated world, plus confirmation where isolation is impossible, prevents that.
|
|
160
|
+
- **Do nothing.** The owner's request goes unmet.
|
|
161
|
+
|
|
162
|
+
## Consequences
|
|
163
|
+
|
|
164
|
+
- **Notes:** the record has a new optional field; older notes read unchanged.
|
|
165
|
+
- **Protocol:** additive methods and notices.
|
|
166
|
+
- **Hosts:** the App replaces its bottom-strip panel with a pane, and calls `annotations.*`, `annotations.capture.*` for app targets, and `compose`/`delivered` around its own `sessions.run`.
|
|
167
|
+
- **Agent tools:** sessions get a third page-note tool.
|
|
168
|
+
|
|
169
|
+
## Migration
|
|
170
|
+
|
|
171
|
+
No data migration: `delivery` is optional. The App's PAR-011 migration (`annotations.import`) is unchanged. The bridge settings file is created on first use and can be deleted to get a new port and token.
|
|
172
|
+
|
|
173
|
+
## Checks
|
|
174
|
+
|
|
175
|
+
| What | Where |
|
|
176
|
+
|---|---|
|
|
177
|
+
| Queue, delivery, busy and auto-send, confirmation, host hand-off, mark fixed, app URLs | `annotations/delivery.test.ts` |
|
|
178
|
+
| Inspector in a real page: element, text drag, sensitive field refused, Escape, toast, cancel | `annotations/pageScript.test.ts` |
|
|
179
|
+
| Isolated world (the page cannot see the helper), reload re-arm, DevTools attach leaves the app running, bridge round-trip as untrusted, stable port and token | `annotations/capture.test.ts` |
|
|
180
|
+
| Bridge token, host-name check and relay | `annotations/bridge.test.ts` |
|
|
181
|
+
| Pane | `terminal/tui/pages/annotatePage.test.ts` |
|
|
182
|
+
| Terminal send and auto-send on run end | `terminal/terminal.test.ts` |
|
|
183
|
+
| Host compose and delivered | `npm run prove` |
|