@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,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A tool or message id as a person reads it: `todo_write` becomes `TodoWrite`,
|
|
3
|
+
* `computer-screenshot` becomes `ComputerScreenshot`. Only the first letter of each part is
|
|
4
|
+
* raised, so a name that already carries capitals keeps them.
|
|
5
|
+
*/
|
|
6
|
+
export declare function toolDisplayName(name: string): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A tool or message id as a person reads it: `todo_write` becomes `TodoWrite`,
|
|
3
|
+
* `computer-screenshot` becomes `ComputerScreenshot`. Only the first letter of each part is
|
|
4
|
+
* raised, so a name that already carries capitals keeps them.
|
|
5
|
+
*/
|
|
6
|
+
export function toolDisplayName(name) {
|
|
7
|
+
return name
|
|
8
|
+
.split(/[^A-Za-z0-9]+/u)
|
|
9
|
+
.filter(part => part !== '')
|
|
10
|
+
.map(part => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`)
|
|
11
|
+
.join('');
|
|
12
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RunEvent, RunRecord, TodoItem } from "../sessions/contracts.js";
|
|
2
|
+
export type TerminalTrajectoryRun = Pick<RunRecord, 'id' | 'mode' | 'goal' | 'startedAt' | 'endedAt' | 'status'>;
|
|
3
|
+
export interface TerminalTrajectorySnapshot {
|
|
4
|
+
run: TerminalTrajectoryRun;
|
|
5
|
+
events: RunEvent[];
|
|
6
|
+
}
|
|
7
|
+
/** The native conversation file is the terminal's boundary for this read-only view. */
|
|
8
|
+
export declare function listTerminalTrajectoryRuns(root: string, sessionId: string, nativeSessionId: string | null): TerminalTrajectoryRun[];
|
|
9
|
+
/** The todo of the latest reply in this native conversation, for a host's /todo view. */
|
|
10
|
+
export declare function latestTerminalTodo(root: string, sessionId: string, nativeSessionId: string | null): {
|
|
11
|
+
runId: string;
|
|
12
|
+
todo: TodoItem[];
|
|
13
|
+
};
|
|
14
|
+
/** Read a run only when it belongs to both this terminal and its current native conversation. */
|
|
15
|
+
export declare function readTerminalTrajectory(root: string, sessionId: string, nativeSessionId: string | null, runId: string, afterSequence?: number): TerminalTrajectorySnapshot;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { notFound } from "../core/errors.js";
|
|
2
|
+
import { findRun, listRuns, readEvents } from "../sessions/runStore.js";
|
|
3
|
+
import { todoOf } from "../tools/todo.js";
|
|
4
|
+
function summary(run) {
|
|
5
|
+
return {
|
|
6
|
+
id: run.id,
|
|
7
|
+
mode: run.mode,
|
|
8
|
+
goal: run.goal,
|
|
9
|
+
startedAt: run.startedAt,
|
|
10
|
+
endedAt: run.endedAt,
|
|
11
|
+
status: run.status
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** The native conversation file is the terminal's boundary for this read-only view. */
|
|
15
|
+
export function listTerminalTrajectoryRuns(root, sessionId, nativeSessionId) {
|
|
16
|
+
if (!nativeSessionId)
|
|
17
|
+
return [];
|
|
18
|
+
return listRuns(root, { sessionId })
|
|
19
|
+
.filter(run => run.nativeSessionId === nativeSessionId)
|
|
20
|
+
.map(summary);
|
|
21
|
+
}
|
|
22
|
+
/** The todo of the latest reply in this native conversation, for a host's /todo view. */
|
|
23
|
+
export function latestTerminalTodo(root, sessionId, nativeSessionId) {
|
|
24
|
+
if (!nativeSessionId)
|
|
25
|
+
return { runId: '', todo: [] };
|
|
26
|
+
const run = listRuns(root, { sessionId }).find(candidate => candidate.nativeSessionId === nativeSessionId && candidate.trigger !== 'side-question');
|
|
27
|
+
return run ? { runId: run.id, todo: todoOf(readEvents(root, run.id)) } : { runId: '', todo: [] };
|
|
28
|
+
}
|
|
29
|
+
/** Read a run only when it belongs to both this terminal and its current native conversation. */
|
|
30
|
+
export function readTerminalTrajectory(root, sessionId, nativeSessionId, runId, afterSequence) {
|
|
31
|
+
if (!nativeSessionId || !Number.isSafeInteger(afterSequence ?? 0) || (afterSequence ?? 0) < 0)
|
|
32
|
+
throw notFound('Run');
|
|
33
|
+
const run = findRun(root, runId);
|
|
34
|
+
if (!run || run.sessionId !== sessionId || run.nativeSessionId !== nativeSessionId)
|
|
35
|
+
throw notFound('Run');
|
|
36
|
+
const events = readEvents(root, runId).filter(event => afterSequence === undefined || event.sequence > afterSequence);
|
|
37
|
+
return { run: summary(run), events };
|
|
38
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnnotateStart } from "./pages/annotatePage.js";
|
|
2
|
+
/** A typed page address: a bare host gets https, localhost gets http. */
|
|
3
|
+
export declare function normalizeAddress(text: string): string;
|
|
4
|
+
/** A typed DevTools port or loopback address. */
|
|
5
|
+
export declare function normalizeDevTools(text: string): string;
|
|
6
|
+
/** `/annotate:` accepts a page address, an app's DevTools port, or the page bridge. */
|
|
7
|
+
export declare function parseAnnotate(argument: string): AnnotateStart | string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** A typed page address: a bare host gets https, localhost gets http. */
|
|
2
|
+
export function normalizeAddress(text) {
|
|
3
|
+
const word = text.trim();
|
|
4
|
+
if (/^[a-z][a-z0-9+.-]*:\/\//i.test(word))
|
|
5
|
+
return word;
|
|
6
|
+
return /^(localhost|127\.0\.0\.1)(:\d+)?(\/|$)/.test(word) ? `http://${word}` : `https://${word}`;
|
|
7
|
+
}
|
|
8
|
+
/** A typed DevTools port or loopback address. */
|
|
9
|
+
export function normalizeDevTools(text) {
|
|
10
|
+
const word = text.trim();
|
|
11
|
+
if (/^\d+$/.test(word))
|
|
12
|
+
return `http://127.0.0.1:${word}`;
|
|
13
|
+
if (/^(localhost|127\.0\.0\.1|\[::1\]):\d+$/.test(word))
|
|
14
|
+
return `http://${word}`;
|
|
15
|
+
return word;
|
|
16
|
+
}
|
|
17
|
+
/** `/annotate:` accepts a page address, an app's DevTools port, or the page bridge. */
|
|
18
|
+
export function parseAnnotate(argument) {
|
|
19
|
+
const words = argument.trim().split(/\s+/).filter(Boolean);
|
|
20
|
+
if (!words.length)
|
|
21
|
+
return { kind: 'web' };
|
|
22
|
+
if (words[0] === '--app') {
|
|
23
|
+
const endpoint = words[1];
|
|
24
|
+
if (!endpoint)
|
|
25
|
+
return { kind: 'apps' };
|
|
26
|
+
const name = words.slice(2).join(' ');
|
|
27
|
+
return { kind: 'cdp', endpoint: normalizeDevTools(endpoint), ...(name ? { name } : {}) };
|
|
28
|
+
}
|
|
29
|
+
if (words[0] === '--bridge') {
|
|
30
|
+
const name = words.slice(1).join(' ');
|
|
31
|
+
return { kind: 'bridge', ...(name ? { name } : {}) };
|
|
32
|
+
}
|
|
33
|
+
if (words.length > 1 || words[0].startsWith('--'))
|
|
34
|
+
return 'Use /annotate: [url], /annotate: --app [port], or /annotate: --bridge.';
|
|
35
|
+
return { kind: 'web', url: normalizeAddress(words[0]) };
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MenuCall } from "../pluginMenu.js";
|
|
2
|
+
import type { Note } from "../../annotations/store.js";
|
|
3
|
+
type SendResult = {
|
|
4
|
+
state: 'sent';
|
|
5
|
+
ids: string[];
|
|
6
|
+
} | {
|
|
7
|
+
state: 'busy';
|
|
8
|
+
ids: string[];
|
|
9
|
+
} | {
|
|
10
|
+
state: 'host';
|
|
11
|
+
ids: string[];
|
|
12
|
+
} | {
|
|
13
|
+
state: 'empty';
|
|
14
|
+
ids: [];
|
|
15
|
+
unconfirmed?: number;
|
|
16
|
+
};
|
|
17
|
+
export interface AnnotateSendUi {
|
|
18
|
+
confirm(title: string, message: string): Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
/** Unsent annotations of `sessionId`, oldest first. */
|
|
21
|
+
export declare function unsent(notes: readonly Note[], sessionId: string | null): Note[];
|
|
22
|
+
/**
|
|
23
|
+
* Sends every unsent annotation of this terminal's session, with `prompt` after them when given.
|
|
24
|
+
* Returns what to tell the person.
|
|
25
|
+
*/
|
|
26
|
+
export declare function sendUnsent(call: MenuCall, ui: AnnotateSendUi, options?: {
|
|
27
|
+
prompt?: string;
|
|
28
|
+
}): Promise<string>;
|
|
29
|
+
export declare function describeSend(result: SendResult, withPrompt?: boolean): string;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const count = (n) => `${n} annotation${n === 1 ? '' : 's'}`;
|
|
2
|
+
/** Unsent annotations of `sessionId`, oldest first. */
|
|
3
|
+
export function unsent(notes, sessionId) {
|
|
4
|
+
return notes
|
|
5
|
+
.filter((note) => note.status === 'open' && note.delivery?.state === 'pending' && note.delivery.sessionId === sessionId)
|
|
6
|
+
.sort((left, right) => left.delivery.queuedAt.localeCompare(right.delivery.queuedAt));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Sends every unsent annotation of this terminal's session, with `prompt` after them when given.
|
|
10
|
+
* Returns what to tell the person.
|
|
11
|
+
*/
|
|
12
|
+
export async function sendUnsent(call, ui, options = {}) {
|
|
13
|
+
const listed = await call('terminal.annotations.list');
|
|
14
|
+
const waiting = unsent(listed.notes, listed.sessionId);
|
|
15
|
+
if (!waiting.length) {
|
|
16
|
+
return options.prompt
|
|
17
|
+
? 'No unsent annotations. Annotate something with /annotate: first, or send your request as a normal message.'
|
|
18
|
+
: 'Nothing to send. Annotate something first.';
|
|
19
|
+
}
|
|
20
|
+
const unconfirmed = waiting.filter((note) => note.delivery?.confirm);
|
|
21
|
+
if (unconfirmed.length) {
|
|
22
|
+
const yes = await ui.confirm(`Send ${count(waiting.length)} to the agent?`, `${count(unconfirmed.length)} came from the app's own page scripts, which could have written them. Check that the comments are yours.`);
|
|
23
|
+
if (!yes)
|
|
24
|
+
return 'Nothing was sent.';
|
|
25
|
+
await call('terminal.annotations.confirmAll');
|
|
26
|
+
}
|
|
27
|
+
const result = await call('terminal.annotations.send', options.prompt ? { prompt: options.prompt } : {});
|
|
28
|
+
return describeSend(result, !!options.prompt);
|
|
29
|
+
}
|
|
30
|
+
export function describeSend(result, withPrompt = false) {
|
|
31
|
+
if (result.state === 'sent')
|
|
32
|
+
return `Sent ${count(result.ids.length)} to the agent.`;
|
|
33
|
+
if (result.state === 'busy' && withPrompt)
|
|
34
|
+
return 'The agent is still working. Submit again when it finishes; your annotations stay unsent.';
|
|
35
|
+
if (result.state === 'busy')
|
|
36
|
+
return `The agent is working; ${count(result.ids.length)} go${result.ids.length === 1 ? 'es' : ''} out when it finishes.`;
|
|
37
|
+
if (result.state === 'host')
|
|
38
|
+
return `${count(result.ids.length)} handed to the app to send.`;
|
|
39
|
+
return result.unconfirmed ? `${count(result.unconfirmed)} still wait for your confirmation.` : 'Nothing to send.';
|
|
40
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Theme } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
/** Cells kept clear on each side of a row, the width of the composer's `❯` gutter. */
|
|
3
|
+
export declare const CHROME_PAD = 2;
|
|
4
|
+
/** Rows a frame spends on itself: header, footer and two rules. */
|
|
5
|
+
export declare const CHROME_ROWS = 4;
|
|
6
|
+
export declare const CENTER_DIALOG_PAD = 4;
|
|
7
|
+
/** Terminal rows are roughly twice as tall as character columns, so 2 rows match 4 columns. */
|
|
8
|
+
export declare const CENTER_DIALOG_VERTICAL_PAD = 2;
|
|
9
|
+
export declare function safeText(text: string): string;
|
|
10
|
+
/** Fills a selected row with the shared background without changing its text styling. */
|
|
11
|
+
export declare function selectedRow(line: string, width: number, theme: Theme): string;
|
|
12
|
+
/** Primary text on a selected row, explicit so no accent colour sits on the blue field. */
|
|
13
|
+
export declare function selectionText(theme: Theme, text: string): string;
|
|
14
|
+
/** Secondary text on a selected row: quieter than the label but still readable on the blue. */
|
|
15
|
+
export declare function selectionMuted(theme: Theme, text: string): string;
|
|
16
|
+
/** The width a surface's content is laid out in. */
|
|
17
|
+
export declare function contentWidth(width: number): number;
|
|
18
|
+
/** Content width after the four-cell inset on each side of a centered dialog. */
|
|
19
|
+
export declare function centerDialogContentWidth(width: number): number;
|
|
20
|
+
export declare function centerDialogVerticalPad(rows: number): number;
|
|
21
|
+
/** Header and its following gap, plus fixed top and bottom padding, at the available height. */
|
|
22
|
+
export declare function centerDialogChromeRows(rows: number): number;
|
|
23
|
+
export declare function centerDialogBodyRows(rows: number): number;
|
|
24
|
+
/** A centered dialog: plain title, muted Escape hint, and generous inset with no rules or footer. */
|
|
25
|
+
export declare function centerDialogFrame({ title, body, width, rows, theme }: Pick<FrameInput, 'title' | 'body' | 'width' | 'theme'> & {
|
|
26
|
+
rows: number;
|
|
27
|
+
}): string[];
|
|
28
|
+
/** The divider above a block: the `warning` amber the slash-command list's divider uses. */
|
|
29
|
+
export declare function blockRule(width: number, theme: Theme): string;
|
|
30
|
+
/** The neutral rule that closes a block and frames a page, like the composer's own rules. */
|
|
31
|
+
export declare function neutralRule(width: number, theme: Theme): string;
|
|
32
|
+
/** A row indented by the chrome padding and clipped to the width. */
|
|
33
|
+
export declare function padded(line: string, width: number): string;
|
|
34
|
+
/** A bold title with an optional dim note at the right edge. */
|
|
35
|
+
export declare function headerRow(title: string, meta: string | undefined, width: number, theme: Theme): string;
|
|
36
|
+
export interface TabInfo {
|
|
37
|
+
id: string;
|
|
38
|
+
title: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The topmost row of a console page, or a page's sub-strip. Too narrow for every title, it
|
|
42
|
+
* collapses to the active one with its place: `‹ Accounts 1/7 ›`. `width` is the content width.
|
|
43
|
+
*/
|
|
44
|
+
export declare function tabIndexAt(tabs: readonly TabInfo[], width: number, x: number, kind?: 'top' | 'sub'): number | undefined;
|
|
45
|
+
export declare function tabStrip(tabs: readonly TabInfo[], activeId: string, width: number, theme: Theme, kind?: 'top' | 'sub', hoveredId?: string): string;
|
|
46
|
+
/** The hint row at the foot of a surface. */
|
|
47
|
+
export declare function footerRow(text: string, width: number, theme: Theme): string;
|
|
48
|
+
export interface FrameInput {
|
|
49
|
+
title: string;
|
|
50
|
+
meta?: string;
|
|
51
|
+
body: readonly string[];
|
|
52
|
+
footer: string;
|
|
53
|
+
width: number;
|
|
54
|
+
theme: Theme;
|
|
55
|
+
}
|
|
56
|
+
/** A block: amber rule, title, body, hint, neutral rule. It is as tall as its body. */
|
|
57
|
+
export declare function blockFrame({ title, meta, body, footer, width, theme }: FrameInput): string[];
|
|
58
|
+
/** Rows a page leaves for its body at a given terminal height. */
|
|
59
|
+
export declare function pageBodyRows(rows: number): number;
|
|
60
|
+
/** A page: title (or `headerLine`, such as a tab strip), rule, body padded to fill the screen, rule, hint. */
|
|
61
|
+
export declare function pageFrame({ title, meta, body, footer, width, rows, theme, headerLine }: FrameInput & {
|
|
62
|
+
rows: number;
|
|
63
|
+
headerLine?: string;
|
|
64
|
+
}): string[];
|
|
65
|
+
/** A full-width two-pane list uses a 40/60 split once there is room to read both panes. */
|
|
66
|
+
export declare function inspectorListWidth(width: number): number | undefined;
|
|
67
|
+
/** Joins a list and passive detail pane without drawing a box around either. */
|
|
68
|
+
export declare function splitColumns(left: readonly string[], right: readonly string[], leftWidth: number, width: number, rows: number, theme: Theme): string[];
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { parseColor, stripTerminalSequences, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
|
|
2
|
+
import { SELECTION_COLORS } from "./selection.js";
|
|
3
|
+
/** Cells kept clear on each side of a row, the width of the composer's `❯` gutter. */
|
|
4
|
+
export const CHROME_PAD = 2;
|
|
5
|
+
/** Rows a frame spends on itself: header, footer and two rules. */
|
|
6
|
+
export const CHROME_ROWS = 4;
|
|
7
|
+
export const CENTER_DIALOG_PAD = 4;
|
|
8
|
+
/** Terminal rows are roughly twice as tall as character columns, so 2 rows match 4 columns. */
|
|
9
|
+
export const CENTER_DIALOG_VERTICAL_PAD = 2;
|
|
10
|
+
export function safeText(text) {
|
|
11
|
+
return stripTerminalSequences(text).replace(/[\x00-\x1f\x7f]/g, ' ');
|
|
12
|
+
}
|
|
13
|
+
/** Fills a selected row with the shared background without changing its text styling. */
|
|
14
|
+
export function selectedRow(line, width, theme) {
|
|
15
|
+
if (width < 1)
|
|
16
|
+
return '';
|
|
17
|
+
const bounded = truncateToWidth(line, width, '');
|
|
18
|
+
return theme.bg('selectedBg', bounded + ' '.repeat(Math.max(0, width - visibleWidth(bounded))));
|
|
19
|
+
}
|
|
20
|
+
function selectionPalette(theme) {
|
|
21
|
+
return theme.appearance === 'light' ? SELECTION_COLORS.light : SELECTION_COLORS.dark;
|
|
22
|
+
}
|
|
23
|
+
/** Primary text on a selected row, explicit so no accent colour sits on the blue field. */
|
|
24
|
+
export function selectionText(theme, text) {
|
|
25
|
+
return theme.style(text, { fg: parseColor(selectionPalette(theme).text) });
|
|
26
|
+
}
|
|
27
|
+
/** Secondary text on a selected row: quieter than the label but still readable on the blue. */
|
|
28
|
+
export function selectionMuted(theme, text) {
|
|
29
|
+
return theme.style(text, { fg: parseColor(selectionPalette(theme).muted) });
|
|
30
|
+
}
|
|
31
|
+
/** The width a surface's content is laid out in. */
|
|
32
|
+
export function contentWidth(width) {
|
|
33
|
+
return Math.max(2, width - CHROME_PAD * 2);
|
|
34
|
+
}
|
|
35
|
+
/** Content width after the four-cell inset on each side of a centered dialog. */
|
|
36
|
+
export function centerDialogContentWidth(width) {
|
|
37
|
+
return Math.max(1, width - CENTER_DIALOG_PAD * 2);
|
|
38
|
+
}
|
|
39
|
+
export function centerDialogVerticalPad(rows) {
|
|
40
|
+
return Math.min(CENTER_DIALOG_VERTICAL_PAD, Math.max(0, Math.floor((Math.trunc(rows) - 2) / 2)));
|
|
41
|
+
}
|
|
42
|
+
/** Header and its following gap, plus fixed top and bottom padding, at the available height. */
|
|
43
|
+
export function centerDialogChromeRows(rows) {
|
|
44
|
+
const pad = centerDialogVerticalPad(rows);
|
|
45
|
+
return pad * 2 + 2;
|
|
46
|
+
}
|
|
47
|
+
export function centerDialogBodyRows(rows) {
|
|
48
|
+
return Math.max(0, Math.trunc(rows) - centerDialogChromeRows(rows));
|
|
49
|
+
}
|
|
50
|
+
/** A centered dialog: plain title, muted Escape hint, and generous inset with no rules or footer. */
|
|
51
|
+
export function centerDialogFrame({ title, body, width, rows, theme }) {
|
|
52
|
+
rows = Math.max(0, Math.trunc(rows));
|
|
53
|
+
if (width < 1 || rows < 1)
|
|
54
|
+
return [];
|
|
55
|
+
const pad = Math.min(CENTER_DIALOG_PAD, Math.floor(width / 2));
|
|
56
|
+
const verticalPad = centerDialogVerticalPad(rows);
|
|
57
|
+
const room = Math.max(0, width - pad * 2);
|
|
58
|
+
const name = truncateToWidth(safeText(title), Math.max(0, room - 4), '');
|
|
59
|
+
const heading = ' '.repeat(pad) + theme.fg('text', name) + ' '.repeat(Math.max(1, room - visibleWidth(name) - 3)) + theme.fg('muted', 'Esc');
|
|
60
|
+
const shown = body.slice(0, centerDialogBodyRows(rows)).map(line => truncateToWidth(' '.repeat(pad) + line, width, ''));
|
|
61
|
+
return [
|
|
62
|
+
...Array.from({ length: verticalPad }, () => ''),
|
|
63
|
+
truncateToWidth(heading, width, ''),
|
|
64
|
+
'',
|
|
65
|
+
...shown,
|
|
66
|
+
...Array.from({ length: verticalPad }, () => '')
|
|
67
|
+
].slice(0, rows);
|
|
68
|
+
}
|
|
69
|
+
/** The divider above a block: the `warning` amber the slash-command list's divider uses. */
|
|
70
|
+
export function blockRule(width, theme) {
|
|
71
|
+
return width > 0 ? theme.fg('warning', '─'.repeat(width)) : '';
|
|
72
|
+
}
|
|
73
|
+
/** The neutral rule that closes a block and frames a page, like the composer's own rules. */
|
|
74
|
+
export function neutralRule(width, theme) {
|
|
75
|
+
return width > 0 ? theme.fg('dim', '─'.repeat(width)) : '';
|
|
76
|
+
}
|
|
77
|
+
/** A row indented by the chrome padding and clipped to the width. */
|
|
78
|
+
export function padded(line, width) {
|
|
79
|
+
return truncateToWidth(' '.repeat(Math.min(CHROME_PAD, width)) + line, width, '');
|
|
80
|
+
}
|
|
81
|
+
/** A bold title with an optional dim note at the right edge. */
|
|
82
|
+
export function headerRow(title, meta, width, theme) {
|
|
83
|
+
const room = Math.max(0, width - CHROME_PAD * 2);
|
|
84
|
+
const name = truncateToWidth(safeText(title), room, '');
|
|
85
|
+
const note = meta ? truncateToWidth(safeText(meta), Math.max(0, room - visibleWidth(name) - 2), '') : '';
|
|
86
|
+
const gap = Math.max(0, room - visibleWidth(name) - visibleWidth(note));
|
|
87
|
+
return padded(theme.bold(theme.fg('accent', name)) + ' '.repeat(gap) + (note ? theme.fg('dim', note) : ''), width);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The topmost row of a console page, or a page's sub-strip. Too narrow for every title, it
|
|
91
|
+
* collapses to the active one with its place: `‹ Accounts 1/7 ›`. `width` is the content width.
|
|
92
|
+
*/
|
|
93
|
+
export function tabIndexAt(tabs, width, x, kind = 'top') {
|
|
94
|
+
if (x < 0 || x >= width || tabs.length === 0)
|
|
95
|
+
return undefined;
|
|
96
|
+
const labels = tabs.map(tab => kind === 'sub' ? safeText(tab.title) : ` ${safeText(tab.title)} `);
|
|
97
|
+
const gap = kind === 'sub' ? ' · ' : ' ';
|
|
98
|
+
const total = labels.reduce((sum, label) => sum + visibleWidth(label), 0) + Math.max(0, tabs.length - 1) * visibleWidth(gap);
|
|
99
|
+
if (total > width)
|
|
100
|
+
return undefined;
|
|
101
|
+
let cursor = 0;
|
|
102
|
+
for (let index = 0; index < labels.length; index += 1) {
|
|
103
|
+
const end = cursor + visibleWidth(labels[index]);
|
|
104
|
+
if (x < end)
|
|
105
|
+
return index;
|
|
106
|
+
if (index < labels.length - 1) {
|
|
107
|
+
const next = end + visibleWidth(gap);
|
|
108
|
+
if (x < next)
|
|
109
|
+
return x - end < next - x ? index : index + 1;
|
|
110
|
+
cursor = next;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return labels.length - 1;
|
|
114
|
+
}
|
|
115
|
+
export function tabStrip(tabs, activeId, width, theme, kind = 'top', hoveredId) {
|
|
116
|
+
if (width < 1 || !tabs.length)
|
|
117
|
+
return '';
|
|
118
|
+
const active = Math.max(0, tabs.findIndex(tab => tab.id === activeId));
|
|
119
|
+
const full = tabs.map((tab, index) => {
|
|
120
|
+
const title = safeText(tab.title);
|
|
121
|
+
const selected = index === active || tab.id === hoveredId;
|
|
122
|
+
if (kind === 'sub') {
|
|
123
|
+
if (index === active)
|
|
124
|
+
return theme.bold(selectionText(theme, title));
|
|
125
|
+
return tab.id === hoveredId ? theme.bg('selectedBg', theme.bold(selectionText(theme, title))) : theme.fg('dim', title);
|
|
126
|
+
}
|
|
127
|
+
return selected ? theme.bg('selectedBg', theme.bold(selectionText(theme, ` ${title} `))) : theme.fg('muted', ` ${title} `);
|
|
128
|
+
}).join(kind === 'sub' ? theme.fg('dim', ' · ') : ' ');
|
|
129
|
+
if (visibleWidth(full) <= width)
|
|
130
|
+
return full;
|
|
131
|
+
return truncateToWidth(theme.bg('selectedBg', theme.bold(selectionText(theme, `‹ ${safeText(tabs[active].title)} ${active + 1}/${tabs.length} ›`))), width, '');
|
|
132
|
+
}
|
|
133
|
+
/** The hint row at the foot of a surface. */
|
|
134
|
+
export function footerRow(text, width, theme) {
|
|
135
|
+
return padded(theme.fg('dim', truncateToWidth(safeText(text), Math.max(0, width - CHROME_PAD * 2), '')), width);
|
|
136
|
+
}
|
|
137
|
+
/** A block: amber rule, title, body, hint, neutral rule. It is as tall as its body. */
|
|
138
|
+
export function blockFrame({ title, meta, body, footer, width, theme }) {
|
|
139
|
+
if (width < 1)
|
|
140
|
+
return [];
|
|
141
|
+
return [
|
|
142
|
+
blockRule(width, theme),
|
|
143
|
+
headerRow(title, meta, width, theme),
|
|
144
|
+
...body.map(line => padded(line, width)),
|
|
145
|
+
footerRow(footer, width, theme),
|
|
146
|
+
neutralRule(width, theme)
|
|
147
|
+
];
|
|
148
|
+
}
|
|
149
|
+
/** Rows a page leaves for its body at a given terminal height. */
|
|
150
|
+
export function pageBodyRows(rows) {
|
|
151
|
+
return Math.max(0, Math.trunc(rows) - CHROME_ROWS);
|
|
152
|
+
}
|
|
153
|
+
/** A page: title (or `headerLine`, such as a tab strip), rule, body padded to fill the screen, rule, hint. */
|
|
154
|
+
export function pageFrame({ title, meta, body, footer, width, rows, theme, headerLine }) {
|
|
155
|
+
rows = Math.max(0, Math.trunc(rows));
|
|
156
|
+
if (width < 1 || rows < 1)
|
|
157
|
+
return [];
|
|
158
|
+
const room = pageBodyRows(rows);
|
|
159
|
+
const shown = body.slice(0, room).map(line => padded(line, width));
|
|
160
|
+
while (shown.length < room)
|
|
161
|
+
shown.push('');
|
|
162
|
+
return [
|
|
163
|
+
headerLine === undefined ? headerRow(title, meta, width, theme) : padded(headerLine, width),
|
|
164
|
+
neutralRule(width, theme),
|
|
165
|
+
...shown,
|
|
166
|
+
neutralRule(width, theme),
|
|
167
|
+
footerRow(footer, width, theme)
|
|
168
|
+
].slice(0, rows);
|
|
169
|
+
}
|
|
170
|
+
/** A full-width two-pane list uses a 40/60 split once there is room to read both panes. */
|
|
171
|
+
export function inspectorListWidth(width) {
|
|
172
|
+
return width < 88 ? undefined : Math.max(32, Math.floor((width - 3) * 0.4));
|
|
173
|
+
}
|
|
174
|
+
/** Joins a list and passive detail pane without drawing a box around either. */
|
|
175
|
+
export function splitColumns(left, right, leftWidth, width, rows, theme) {
|
|
176
|
+
const rightWidth = Math.max(0, width - leftWidth - 3);
|
|
177
|
+
return Array.from({ length: Math.max(0, Math.trunc(rows)) }, (_, index) => {
|
|
178
|
+
const leftLine = truncateToWidth(left[index] ?? '', leftWidth, '');
|
|
179
|
+
const rightLine = truncateToWidth(right[index] ?? '', rightWidth, '');
|
|
180
|
+
return leftLine + ' '.repeat(Math.max(0, leftWidth - visibleWidth(leftLine))) + theme.fg('dim', ' │ ') + rightLine;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ClipboardFileOptions {
|
|
2
|
+
platform?: NodeJS.Platform;
|
|
3
|
+
tempRoot?: string;
|
|
4
|
+
convert?: (source: string, output: string) => Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export interface StagedClipboardFiles {
|
|
7
|
+
paths: string[];
|
|
8
|
+
cleanup?: () => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/** Convert Finder-copied HEIC/HEIF paths to images that Pi's terminal reader can consume. */
|
|
11
|
+
export declare function stageClipboardFiles(paths: string[], options?: ClipboardFileOptions): Promise<StagedClipboardFiles>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { chmod, mkdtemp, open, rm, stat } from 'node:fs/promises';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { basename, join } from 'node:path';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
const exec = promisify(execFile);
|
|
8
|
+
const PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
9
|
+
function isHeicPath(path) {
|
|
10
|
+
return /\.hei[cf]$/i.test(path);
|
|
11
|
+
}
|
|
12
|
+
async function convertWithSips(source, output) {
|
|
13
|
+
await exec('/usr/bin/sips', ['-s', 'format', 'png', source, '--out', output], {
|
|
14
|
+
timeout: 30_000,
|
|
15
|
+
maxBuffer: 1024 * 1024
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async function assertPng(path) {
|
|
19
|
+
const info = await stat(path);
|
|
20
|
+
if (!info.isFile() || info.size < PNG_SIGNATURE.length)
|
|
21
|
+
throw new Error('Conversion did not create an image.');
|
|
22
|
+
const file = await open(path, 'r');
|
|
23
|
+
try {
|
|
24
|
+
const signature = Buffer.alloc(PNG_SIGNATURE.length);
|
|
25
|
+
const { bytesRead } = await file.read(signature, 0, signature.length, 0);
|
|
26
|
+
if (bytesRead !== PNG_SIGNATURE.length || !signature.equals(PNG_SIGNATURE))
|
|
27
|
+
throw new Error('Conversion did not create a PNG image.');
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await file.close();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Convert Finder-copied HEIC/HEIF paths to images that Pi's terminal reader can consume. */
|
|
34
|
+
export async function stageClipboardFiles(paths, options = {}) {
|
|
35
|
+
const platform = options.platform ?? process.platform;
|
|
36
|
+
if (platform !== 'darwin' || !paths.some(isHeicPath))
|
|
37
|
+
return { paths };
|
|
38
|
+
let directory;
|
|
39
|
+
try {
|
|
40
|
+
directory = await mkdtemp(join(options.tempRoot ?? tmpdir(), 'harness-clipboard-'));
|
|
41
|
+
const stagedPaths = [];
|
|
42
|
+
for (const [index, path] of paths.entries()) {
|
|
43
|
+
if (!isHeicPath(path)) {
|
|
44
|
+
stagedPaths.push(path);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const output = join(directory, `${index}-${randomUUID()}.png`);
|
|
48
|
+
try {
|
|
49
|
+
await (options.convert ?? convertWithSips)(path, output);
|
|
50
|
+
await chmod(output, 0o600);
|
|
51
|
+
await assertPng(output);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
throw new Error(`Could not prepare HEIC image "${basename(path)}" for the terminal.`);
|
|
55
|
+
}
|
|
56
|
+
stagedPaths.push(output);
|
|
57
|
+
}
|
|
58
|
+
let cleaned = false;
|
|
59
|
+
return {
|
|
60
|
+
paths: stagedPaths,
|
|
61
|
+
cleanup: async () => {
|
|
62
|
+
if (cleaned || !directory)
|
|
63
|
+
return;
|
|
64
|
+
cleaned = true;
|
|
65
|
+
await rm(directory, { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (directory)
|
|
71
|
+
await rm(directory, { recursive: true, force: true }).catch(() => { });
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TerminalPage } from "./page.js";
|
|
2
|
+
import type { TerminalCommandHost } from "./commands.js";
|
|
3
|
+
import { type AnnotateStart } from "./pages/annotatePage.js";
|
|
4
|
+
import { type ContextTab } from "./pages/contextPage.js";
|
|
5
|
+
export type CommandPageId = 'doctor' | 'accounts' | 'permissions' | 'plugins' | 'hub' | 'components' | 'settings' | 'trajectory' | 'log' | 'harness' | 'skills' | 'connections' | 'tools' | 'worktree' | 'notes' | 'annotate' | 'subagents' | 'agents' | 'usage' | 'context' | 'remote-control' | 'follow-up';
|
|
6
|
+
/** Construct one independent full-screen page for a slash command. */
|
|
7
|
+
export declare function createCommandPage(host: TerminalCommandHost, id: CommandPageId, options?: {
|
|
8
|
+
runId?: string;
|
|
9
|
+
url?: string;
|
|
10
|
+
annotate?: AnnotateStart;
|
|
11
|
+
usageTab?: 'analysis' | 'limit' | 'accounts';
|
|
12
|
+
usagePeriod?: 'today' | '7d' | '30d' | 'all';
|
|
13
|
+
contextTab?: ContextTab;
|
|
14
|
+
close?(): void;
|
|
15
|
+
navigate?(id: CommandPageId, runId?: string): void;
|
|
16
|
+
}): TerminalPage;
|