@xingular/harness 0.1.7 → 1.1.1
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 +125 -1
- package/LICENSE +202 -0
- package/NOTICE.md +22 -0
- package/README.md +239 -86
- package/THIRD_PARTY_LICENSES.md +942 -0
- package/dist/cli.js +17853 -13114
- package/dist/sdk/accounts/accounts.d.ts +165 -0
- package/dist/sdk/accounts/accounts.js +730 -0
- package/dist/sdk/accounts/choices.d.ts +23 -0
- package/dist/sdk/accounts/choices.js +62 -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 +16 -0
- package/dist/sdk/accounts/secrets.js +40 -0
- package/dist/sdk/accounts/store.d.ts +114 -0
- package/dist/sdk/accounts/store.js +255 -0
- package/dist/sdk/agents/builtin.d.ts +2 -0
- package/dist/sdk/agents/builtin.js +34 -0
- package/dist/sdk/agents/narrow.d.ts +13 -0
- package/dist/sdk/agents/narrow.js +29 -0
- package/dist/sdk/agents/profiles.d.ts +80 -0
- package/dist/sdk/agents/profiles.js +221 -0
- package/dist/sdk/annotations/bridge.d.ts +42 -0
- package/dist/sdk/annotations/bridge.js +264 -0
- package/dist/sdk/annotations/capture.d.ts +116 -0
- package/dist/sdk/annotations/capture.js +308 -0
- package/dist/sdk/annotations/delivery.d.ts +72 -0
- package/dist/sdk/annotations/delivery.js +130 -0
- package/dist/sdk/annotations/inspect.d.ts +10 -0
- package/dist/sdk/annotations/inspect.js +33 -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 +570 -0
- package/dist/sdk/annotations/part.d.ts +10 -0
- package/dist/sdk/annotations/part.js +144 -0
- package/dist/sdk/annotations/queue.d.ts +4 -0
- package/dist/sdk/annotations/queue.js +40 -0
- package/dist/sdk/annotations/serverMethods.d.ts +3 -0
- package/dist/sdk/annotations/serverMethods.js +62 -0
- package/dist/sdk/annotations/store.d.ts +160 -0
- package/dist/sdk/annotations/store.js +386 -0
- package/dist/sdk/browser/config.d.ts +16 -0
- package/dist/sdk/browser/config.js +22 -0
- package/dist/sdk/browser/diagnostics.d.ts +4 -0
- package/dist/sdk/browser/diagnostics.js +38 -0
- package/dist/sdk/browser/index.d.ts +28 -0
- package/dist/sdk/browser/index.js +72 -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 +7 -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 +8 -0
- package/dist/sdk/browser/tools.js +329 -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 +47 -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 +150 -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/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 +187 -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/text.d.ts +7 -0
- package/dist/sdk/core/text.js +40 -0
- package/dist/sdk/doctor/checks.d.ts +5 -0
- package/dist/sdk/doctor/checks.js +208 -0
- package/dist/sdk/doctor/probe.d.ts +4 -0
- package/dist/sdk/doctor/probe.js +92 -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 +148 -0
- package/dist/sdk/harness.js +338 -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 +216 -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 +474 -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 +73 -0
- package/dist/sdk/index.js +55 -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/runtime.d.ts +13 -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 +163 -0
- package/dist/sdk/plugins/builtinRegistry.d.ts +53 -0
- package/dist/sdk/plugins/builtinRegistry.js +49 -0
- package/dist/sdk/plugins/catalogue.d.ts +29 -0
- package/dist/sdk/plugins/catalogue.js +196 -0
- package/dist/sdk/plugins/cli.d.ts +13 -0
- package/dist/sdk/plugins/cli.js +188 -0
- package/dist/sdk/plugins/discover.d.ts +42 -0
- package/dist/sdk/plugins/discover.js +115 -0
- package/dist/sdk/plugins/firstParty.d.ts +50 -0
- package/dist/sdk/plugins/firstParty.js +113 -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 +20 -0
- package/dist/sdk/plugins/install.js +110 -0
- package/dist/sdk/plugins/inventory.d.ts +22 -0
- package/dist/sdk/plugins/inventory.js +110 -0
- package/dist/sdk/plugins/manifest.d.ts +13 -0
- package/dist/sdk/plugins/manifest.js +56 -0
- package/dist/sdk/plugins/plugins.d.ts +104 -0
- package/dist/sdk/plugins/plugins.js +164 -0
- package/dist/sdk/plugins/runtime.d.ts +9 -0
- package/dist/sdk/plugins/runtime.js +95 -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 +159 -0
- package/dist/sdk/plugins/types.js +7 -0
- package/dist/sdk/prompt/compile.d.ts +177 -0
- package/dist/sdk/prompt/compile.js +413 -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 +51 -0
- package/dist/sdk/refine/host.js +76 -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 +45 -0
- package/dist/sdk/refine/prompts.js +390 -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 +81 -0
- package/dist/sdk/refine/runner.js +150 -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 +20 -0
- package/dist/sdk/refine/service.d.ts +84 -0
- package/dist/sdk/refine/service.js +165 -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 +68 -0
- package/dist/sdk/refine/types.d.ts +77 -0
- package/dist/sdk/refine/types.js +10 -0
- package/dist/sdk/server/methods.d.ts +3 -0
- package/dist/sdk/server/methods.js +293 -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 +84 -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 +10 -0
- package/dist/sdk/server/serve.js +18 -0
- package/dist/sdk/sessions/approvals.d.ts +47 -0
- package/dist/sdk/sessions/approvals.js +119 -0
- package/dist/sdk/sessions/continuation.d.ts +48 -0
- package/dist/sdk/sessions/continuation.js +85 -0
- package/dist/sdk/sessions/contracts.d.ts +551 -0
- package/dist/sdk/sessions/contracts.js +338 -0
- package/dist/sdk/sessions/extensionUi.d.ts +19 -0
- package/dist/sdk/sessions/extensionUi.js +64 -0
- package/dist/sdk/sessions/history.d.ts +16 -0
- package/dist/sdk/sessions/history.js +68 -0
- package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
- package/dist/sdk/sessions/lineageJoin.js +61 -0
- package/dist/sdk/sessions/planMode.d.ts +39 -0
- package/dist/sdk/sessions/planMode.js +93 -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 +103 -0
- package/dist/sdk/sessions/registry.js +386 -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 +66 -0
- package/dist/sdk/sessions/runStore.js +337 -0
- package/dist/sdk/sessions/runner.d.ts +213 -0
- package/dist/sdk/sessions/runner.js +589 -0
- package/dist/sdk/sessions/sessions.d.ts +152 -0
- package/dist/sdk/sessions/sessions.js +461 -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/subagentServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/subagentServerMethods.js +41 -0
- package/dist/sdk/sessions/subagentService.d.ts +52 -0
- package/dist/sdk/sessions/subagentService.js +265 -0
- package/dist/sdk/sessions/subagents.d.ts +58 -0
- package/dist/sdk/sessions/subagents.js +87 -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 +186 -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 +15 -0
- package/dist/sdk/terminal/client.js +126 -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 +78 -0
- package/dist/sdk/terminal/controller.js +383 -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/logs.d.ts +14 -0
- package/dist/sdk/terminal/logs.js +59 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
- package/dist/sdk/terminal/piExtension.d.ts +6 -0
- package/dist/sdk/terminal/piExtension.js +377 -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 +20 -0
- package/dist/sdk/terminal/standalone.js +186 -0
- package/dist/sdk/terminal/subagentMonitor.d.ts +38 -0
- package/dist/sdk/terminal/subagentMonitor.js +121 -0
- package/dist/sdk/terminal/terminals.d.ts +212 -0
- package/dist/sdk/terminal/terminals.js +1108 -0
- package/dist/sdk/terminal/trajectory.d.ts +10 -0
- package/dist/sdk/terminal/trajectory.js +30 -0
- package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
- package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
- package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
- package/dist/sdk/terminal/tui/chrome.js +169 -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 +11 -0
- package/dist/sdk/terminal/tui/commandPages.js +111 -0
- package/dist/sdk/terminal/tui/commands.d.ts +46 -0
- package/dist/sdk/terminal/tui/commands.js +399 -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 +80 -0
- package/dist/sdk/terminal/tui/dialogs.js +370 -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 +73 -0
- package/dist/sdk/terminal/tui/list.js +196 -0
- package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
- package/dist/sdk/terminal/tui/modeChoices.js +70 -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/page.d.ts +17 -0
- package/dist/sdk/terminal/tui/page.js +1 -0
- package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
- package/dist/sdk/terminal/tui/pageOverlay.js +156 -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 +190 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
- package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
- package/dist/sdk/terminal/tui/pages/browserPage.js +738 -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/doctorPage.d.ts +39 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
- package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
- package/dist/sdk/terminal/tui/pages/hubPage.js +128 -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/notesPage.d.ts +75 -0
- package/dist/sdk/terminal/tui/pages/notesPage.js +201 -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 +57 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -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 +23 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.js +70 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +65 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.js +450 -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 +18 -0
- package/dist/sdk/terminal/tui/piAdapter.js +48 -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 +14 -0
- package/dist/sdk/terminal/tui/pluginCommands.js +27 -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 +114 -0
- package/dist/sdk/terminal/tui/runtime.js +443 -0
- package/dist/sdk/terminal/tui/search.d.ts +22 -0
- package/dist/sdk/terminal/tui/search.js +60 -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/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 +114 -0
- package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
- package/dist/sdk/terminal/tui/sideQuestion.js +230 -0
- package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
- package/dist/sdk/terminal/tui/skillInvocation.js +43 -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 +45 -0
- package/dist/sdk/terminal/tui/theme.js +176 -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/workingStatus.d.ts +9 -0
- package/dist/sdk/terminal/tui/workingStatus.js +229 -0
- package/dist/sdk/tools/askUser.d.ts +6 -0
- package/dist/sdk/tools/askUser.js +92 -0
- package/dist/sdk/tools/checklist.d.ts +9 -0
- package/dist/sdk/tools/checklist.js +54 -0
- package/dist/sdk/tools/definitions.d.ts +30 -0
- package/dist/sdk/tools/definitions.js +117 -0
- package/dist/sdk/tools/dispatch.d.ts +16 -0
- package/dist/sdk/tools/dispatch.js +67 -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 +7 -0
- package/dist/sdk/tools/sessionName.js +31 -0
- package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
- package/dist/sdk/tools/spawnSubagent.js +58 -0
- package/dist/sdk/tools/types.d.ts +48 -0
- package/dist/sdk/tools/types.js +1 -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 +82 -0
- package/dist/sdk/variant/store.js +151 -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 +16 -0
- package/dist/sdk/worktrees/git.js +81 -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/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 +67 -0
- package/dist/sdk/world/world.js +79 -0
- package/dist/terminal-opentui.js +20778 -0
- package/dist/terminal-pi.js +794 -518
- package/docs/README.md +42 -0
- 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 +203 -0
- package/docs/architecture/03-variants.md +103 -0
- package/docs/architecture/04-prompt.md +122 -0
- package/docs/architecture/05-refinement.md +107 -0
- package/docs/architecture/06-plugins-and-capabilities.md +129 -0
- package/docs/architecture/07-tools-and-gate.md +103 -0
- package/docs/architecture/08-memory-and-history.md +94 -0
- package/docs/architecture/09-accounts-and-connectors.md +98 -0
- package/docs/architecture/10-server-protocol.md +193 -0
- package/docs/architecture/11-terminal.md +261 -0
- package/docs/architecture/12-storage.md +75 -0
- package/docs/architecture/13-world-tools.md +45 -0
- package/docs/architecture/14-surfaces-and-parity.md +89 -0
- package/docs/architecture/README.md +125 -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 +70 -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 +127 -0
- package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -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 +94 -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/README.md +101 -0
- package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
- package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
- package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
- package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
- 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 +38 -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 +60 -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/doctor.md +80 -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/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/parity.md +78 -0
- package/docs/releases/1.0.0.md +40 -0
- package/docs/releases/4.0.0.md +46 -0
- package/docs/releases/README.md +41 -0
- package/docs/study/00-index.md +83 -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 +75 -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 +44 -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 +707 -58
- package/package.json +43 -13
- package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
- package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
- package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
- package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
- package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
- package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
- package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
- package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
- package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
- package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
- package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
- package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
- package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
- package/src/accounts/accounts.test.ts +0 -333
- package/src/accounts/accounts.ts +0 -658
- 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.ts +0 -34
- 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 -312
- 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 -75
- package/src/mcp/connections.ts +0 -614
- 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 -376
- package/src/mcp/service.ts +0 -549
- package/src/mcp/types.ts +0 -108
- 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 -163
- package/src/memory/curation.ts +0 -64
- package/src/memory/dispatch.ts +0 -59
- 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 -176
- package/src/memory/maintenance.ts +0 -518
- 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 -278
- 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/wiki.test.ts +0 -47
- package/src/memory/wiki.ts +0 -422
- package/src/memory/wikiIndex.test.ts +0 -88
- package/src/memory/wikiIndex.ts +0 -116
- 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 -82
- 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 -349
- 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 -174
- package/src/sessions/approvals.ts +0 -118
- package/src/sessions/contracts.ts +0 -336
- package/src/sessions/conversation.test.ts +0 -177
- 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 -381
- package/src/sessions/runIndex.ts +0 -99
- package/src/sessions/runStore.test.ts +0 -152
- package/src/sessions/runStore.ts +0 -332
- package/src/sessions/runner.ts +0 -604
- package/src/sessions/runtimeResources.test.ts +0 -61
- package/src/sessions/sessions.test.ts +0 -549
- package/src/sessions/sessions.ts +0 -339
- 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 -291
- 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 -259
- package/src/terminal/pluginControl.test.ts +0 -146
- package/src/terminal/pluginMenu.ts +0 -112
- package/src/terminal/socket.test.ts +0 -71
- package/src/terminal/socket.ts +0 -232
- package/src/terminal/standalone.test.ts +0 -167
- package/src/terminal/standalone.ts +0 -153
- package/src/terminal/terminal.test.ts +0 -399
- package/src/terminal/terminals.ts +0 -553
- package/src/terminal/tui/application.test.ts +0 -114
- package/src/terminal/tui/application.ts +0 -491
- package/src/terminal/tui/commands.test.ts +0 -218
- package/src/terminal/tui/commands.ts +0 -361
- package/src/terminal/tui/dialogs.ts +0 -301
- package/src/terminal/tui/editor.test.ts +0 -84
- package/src/terminal/tui/editor.ts +0 -79
- package/src/terminal/tui/keybindings.test.ts +0 -22
- package/src/terminal/tui/keybindings.ts +0 -50
- package/src/terminal/tui/piAdapter.ts +0 -62
- 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 -104
- package/src/terminal/tui/runtime.test.ts +0 -215
- package/src/terminal/tui/runtime.ts +0 -388
- 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/status.test.ts +0 -70
- package/src/terminal/tui/status.ts +0 -109
- package/src/terminal/tui/theme.ts +0 -174
- package/src/terminal/tui/tools.test.ts +0 -145
- package/src/terminal/tui/tools.ts +0 -142
- package/src/terminal/tui/transcript.test.ts +0 -25
- package/src/terminal/tui/transcript.ts +0 -124
- 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/tools/askUser.test.ts +0 -69
- package/src/tools/askUser.ts +0 -59
- package/src/tools/definitions.ts +0 -187
- package/src/tools/maintenance.ts +0 -24
- 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 -92
- package/src/tools/types.ts +0 -39
- 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,98 @@
|
|
|
1
|
+
# 09 Accounts and connectors
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
**Accounts** are isolated Pi identities: each has its own agent folder, credentials, sessions and
|
|
6
|
+
history, so one person can use several providers and subscriptions without them mixing.
|
|
7
|
+
**Connectors** (connected apps) are MCP servers a session reaches through a broker, with scoped
|
|
8
|
+
access, approval of non-read calls, and redaction. The **Hub** installs exact catalog versions of
|
|
9
|
+
skills, prompts, rules and Pi packages.
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
| Type / function | Module | Role |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `Accounts` | `accounts/accounts.ts` | Accounts and pools: `resolve`, `context`, `runtime`, `models`, `status`, sign-in (`loginStart`, `loginStatus`, `loginRespond`, `loginCancel`), `setApiKey`, `signOut`, terminal accounting. |
|
|
16
|
+
| `isolateProcess`, `ensureSharedDir`, `sharedDir` | `accounts/env.ts` | Isolated launch environments. |
|
|
17
|
+
| account store, audit | `accounts/store.ts` | The registry and audit log. |
|
|
18
|
+
| `SecretStore`, `secretKey`, `fileSecretStore`, `memorySecretStore` | `accounts/secrets.ts` | Where credentials live (page 01). |
|
|
19
|
+
| `ConnectedApps` | `mcp/service.ts` | The broker: `grant`, `session`, `expose`, `tools`, `revokeRun`, `callUnattended`, traces. |
|
|
20
|
+
| `Connections` | `mcp/connections.ts` | Saved connections, scopes, secrets, `redactEvent`, `scrub`. |
|
|
21
|
+
| `McpManager` | `mcp/manager.ts` | MCP clients. |
|
|
22
|
+
| OAuth | `mcp/oauth.ts` | Sign-in; an application's own registered clients (`AppOAuthClients`). |
|
|
23
|
+
| `Hub` | `hub/hub.ts`, `hub/schema.ts` | Catalog, preview, install, uninstall, receipts. |
|
|
24
|
+
|
|
25
|
+
## Contracts
|
|
26
|
+
|
|
27
|
+
- **Account folder.** Every Pi session gets its account's own agent folder
|
|
28
|
+
(`PI_CODING_AGENT_DIR`) under `<state dir>/accounts/`. Settings, skills, prompts and
|
|
29
|
+
instructions are shared through links to `_shared/pi/`; credentials, sessions and history stay
|
|
30
|
+
in the account's own folder.
|
|
31
|
+
- **Resolution.** A new session may name an account, a pool, or neither (the default). Once
|
|
32
|
+
started, it stays on that account.
|
|
33
|
+
- **Sign-in progress** lives in the running process only. `accounts.loginStatus` recovers the
|
|
34
|
+
current code or prompt with a revision; it is never written to account files.
|
|
35
|
+
- **Broker tools.** `mcp_list_tools` and `mcp_call_tool`. A connection reaches a session only if
|
|
36
|
+
its scope allows the caller and the policy's `connections` keeps it. Calls that are not reads
|
|
37
|
+
are approved through the gate. Each call's redacted result is traced in `mcp-context.json`.
|
|
38
|
+
- **`apps.expose(tools)`** offers the application's own tools through the broker, which is how a
|
|
39
|
+
terminal session reaches them.
|
|
40
|
+
- **Hub.** `hub.list`, `get`, `preview`, `install`, `uninstall`, `readDocument`. Pi packages need
|
|
41
|
+
an exact npm version or a full Git commit. Documents are saved as inert JSON.
|
|
42
|
+
|
|
43
|
+
## Invariants
|
|
44
|
+
|
|
45
|
+
- **INV-ACC-1** Accounts are isolated. A session runs in its account's own Pi folder, never in
|
|
46
|
+
`~/.pi`. The process drops inherited credential variables (`*_API_KEY`, `*_AUTH_TOKEN`,
|
|
47
|
+
`*_OAUTH_TOKEN`, `*_ACCESS_TOKEN`, `CODEX_HOME`, `CLAUDE_CONFIG_DIR`, `PI_CODING_AGENT_DIR`)
|
|
48
|
+
before any session starts.
|
|
49
|
+
- **INV-ACC-2** An account is never exchanged for another. A pinned session that cannot use its
|
|
50
|
+
account fails. Changing account for a terminal is an explicit person's action that restarts
|
|
51
|
+
the child.
|
|
52
|
+
- **INV-ACC-3** The harness never writes a secret to its own files; it asks the `SecretStore`.
|
|
53
|
+
The default file store is owner-only (`0600`).
|
|
54
|
+
- **INV-ACC-4** A terminal's `/accounts` goes through the session socket's `accounts.*` calls, and
|
|
55
|
+
every one needs the session's control key. A command the model runs in the shell cannot make
|
|
56
|
+
an account change.
|
|
57
|
+
- **INV-MCP-1** Connector secrets live in the `SecretStore`; `connections.json` holds no secret.
|
|
58
|
+
Run events and traces are redacted before they are stored or shown.
|
|
59
|
+
- **INV-MCP-2** A session reaches only the connections its scope and the policy allow, and loses
|
|
60
|
+
them when its run ends (`revokeRun`).
|
|
61
|
+
- **INV-MCP-3** An application's OAuth client is usable only by a catalog entry it lists, and
|
|
62
|
+
nothing of it is stored.
|
|
63
|
+
- **INV-MCP-4** Hub installation grants no attachment, trust, credential or permission. Writes
|
|
64
|
+
are serialized; existing registry files are never overwritten; uninstall removes only the exact
|
|
65
|
+
receipt's resources and revokes its attachment choices.
|
|
66
|
+
|
|
67
|
+
## Data
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
<state dir>/accounts/ registry, per-account Pi agent folders, _shared/pi/, audit log
|
|
71
|
+
<state dir>/secrets.json default SecretStore (owner-only)
|
|
72
|
+
<state dir>/connections.json connected apps, no secrets
|
|
73
|
+
<state dir>/hub/catalog.json catalog cache
|
|
74
|
+
<data root>/hub/ installed documents and provenance
|
|
75
|
+
<data root>/runs/<id>/mcp-context.json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Source map
|
|
79
|
+
|
|
80
|
+
`src/accounts/*.ts`, `src/mcp/*.ts`, `src/hub/*.ts`. Decision:
|
|
81
|
+
[ADR-0005](../decisions/ADR-0005-app-provided-oauth-clients.md).
|
|
82
|
+
|
|
83
|
+
## Account and connector diagnostics
|
|
84
|
+
|
|
85
|
+
`Accounts.inspect` reads credentials and a non-refreshing Pi model catalogue through a read-only
|
|
86
|
+
credential store. It never refreshes OAuth tokens or verifies a key over the network. `/doctor`
|
|
87
|
+
labels this local readiness. A selected live model probe sends one synthetic request, caps output
|
|
88
|
+
at 64 tokens, and records usage through the normal run writer. It never substitutes an account.
|
|
89
|
+
MCP live diagnostics connect and list tools on the selected scoped connector, without calling
|
|
90
|
+
connector tools or starting sign-in. Disposable grants and clients are closed afterwards.
|
|
91
|
+
|
|
92
|
+
## Terminal connection setup
|
|
93
|
+
|
|
94
|
+
The unified browser exposes existing connection save/test/sign-in/sign-out/remove services through
|
|
95
|
+
private terminal controls (PROP-0013). New definitions are saved disabled. Saving does not connect,
|
|
96
|
+
sign in or approve tools. Secrets use masked fields and the existing secret store; snapshots omit
|
|
97
|
+
saved credential values and scrub connection errors/tool metadata. Hub documents remain inert until
|
|
98
|
+
a person explicitly chooses setup and completes the normal validated connection form.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# 10 Server protocol
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
A host that is not a Node program embeds the harness as a child process and talks to it over
|
|
6
|
+
newline-delimited JSON on stdin and stdout. The protocol exposes the same in-process API a Node
|
|
7
|
+
application uses, run events as they are saved, state-change notices, and calls from the harness
|
|
8
|
+
to the host for the extension points the host supplies.
|
|
9
|
+
|
|
10
|
+
## Components
|
|
11
|
+
|
|
12
|
+
| Type / function | Module | Role |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `RpcPeer`, `Transport`, `stdioTransport`, `PROTOCOL_VERSION` | `server/rpc.ts` | Framing, requests, replies, host calls. |
|
|
15
|
+
| `methods(harness)` | `server/methods.ts` | Merges Foundation handlers with built-in plugin handlers from `BuiltinPluginRegistry` and rejects overlapping ownership. |
|
|
16
|
+
| `serve`, `attach` | `server/serve.ts` | Registers the table, forwards events and notices. |
|
|
17
|
+
| `remoteSecrets`, remote policy, directory, tools | `server/remote.ts` | Extension points supplied by the host over the protocol. |
|
|
18
|
+
| CLI `serve` | `src/cli.ts` | `serve --state <dir> --data <dir> --name <product> [--builtins <dir>] [--host-secrets] [--host-policy] [--host-tools] [--host-directory]`. |
|
|
19
|
+
|
|
20
|
+
## Contracts
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
host → harness { v: 1, id, method, params } harness → host { v: 1, id, result | error }
|
|
24
|
+
harness → host { v: 1, event } a run event, validated, after it is saved
|
|
25
|
+
harness → host { v: 1, notice } state changed: read it again
|
|
26
|
+
harness → host { v: 1, id, call, params } host → harness { v: 1, id, result | error }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- stdout carries only protocol lines; diagnostics go to stderr.
|
|
30
|
+
- Run events use the validated, persisted payload schemas in page 02. `question.requested` may carry
|
|
31
|
+
the optional bounded ASCII sketch metadata described there; the server relays it without changing
|
|
32
|
+
answer payloads or the protocol framing (PROP-0024).
|
|
33
|
+
- `harness.methods` lists every method. Groups in the table: `accounts`, `harnesses`, `runs`,
|
|
34
|
+
`connections`, `plugins`, `wiki`, `refine`, `capabilities`, `hub`, `terminal`, `approvals`,
|
|
35
|
+
`harness`, `subagents`, `agents`, `sessions`, `sideQuestions`, `library`, `recall`, `context`,
|
|
36
|
+
`worktrees`, `annotations`.
|
|
37
|
+
- Host calls (only with the matching `--host-*` flag): `secrets.get|set|delete`,
|
|
38
|
+
`policy.scope|authorize|approval|connections`, `tools.call`. The host registers tools with
|
|
39
|
+
`tools.register` and names with `directory.set`, and describes its parts with
|
|
40
|
+
`plugins.describe`.
|
|
41
|
+
- `refine.start` takes `{ task, k?, mode?, improver?, executor?, baseVersion?, retainWorkspaces?, id? }`;
|
|
42
|
+
`refine.candidates` returns each execution with `workspace: string | null` (page 05, PROP-0002, PROP-0003).
|
|
43
|
+
- `runs.checklist { runId }` returns the run's latest checklist, `[]` when it wrote none (PROP-0006).
|
|
44
|
+
- `agents.list { cwd? }` returns `{ profiles, problems }`; `agents.get { cwd?, name }` one profile;
|
|
45
|
+
`agents.create { cwd?, name, scope: 'global' | 'project', from? }` writes the template or a copy
|
|
46
|
+
and refuses an existing file; `agents.remove { cwd?, name, scope }` deletes a person's own file.
|
|
47
|
+
`subagents.spawn` takes `agent` as a profile name and returns `agent` and `unavailableTools`
|
|
48
|
+
(PROP-0029). It takes an optional `title` (at most six words); without one the child's title is
|
|
49
|
+
the first line of its brief (PROP-0030).
|
|
50
|
+
- `runs.continuation { runId, sessionDir? }` returns a `Continuation`, and `sessions.run` accepts
|
|
51
|
+
`continueFrom` (page 02, PROP-0007). `harness.status` reports `recovery.interruptedRunIds`.
|
|
52
|
+
- Errors carry a stable `code`, a message and an optional hint (`core/errors.ts`).
|
|
53
|
+
|
|
54
|
+
## Invariants
|
|
55
|
+
|
|
56
|
+
- **INV-SRV-1** `src/server/methods.ts` is the contract for every non-Node host. Adding a method
|
|
57
|
+
to an existing group is an additive change (update this page). Renaming, removing, or changing
|
|
58
|
+
the params or result shape of a method is an architecture change.
|
|
59
|
+
- **INV-SRV-2** A method handler calls the same in-process API a Node application uses. The server
|
|
60
|
+
holds no logic of its own beyond parameter checking.
|
|
61
|
+
- **INV-SRV-3** Events reach the host only after they are persisted and redacted (`INV-RUN-3`).
|
|
62
|
+
- **INV-SRV-4** Changing the framing or `PROTOCOL_VERSION` is an architecture change.
|
|
63
|
+
- **INV-SRV-5** The harness works with none of the host calls supplied (`INV-EXT-2`).
|
|
64
|
+
- **INV-SRV-6** After a change to the server, the CLI or startup, `npm run prove` must pass: it
|
|
65
|
+
starts the server on a throwaway data root with no application present and exercises accounts,
|
|
66
|
+
variants, the Wiki, the prompt, connected apps, a recorded session, a plugin hook and the
|
|
67
|
+
refinement demo. The App's sidecar tests parse every reply with its schemas and must pass too.
|
|
68
|
+
|
|
69
|
+
Built-in feature modules may contribute handlers through `BuiltinPluginRegistry`, but the
|
|
70
|
+
`methods(harness)` result remains the public contract. Plugin module ownership does not rename
|
|
71
|
+
methods or change their params, result shapes or authorization paths (PROP-0020).
|
|
72
|
+
|
|
73
|
+
## Source map
|
|
74
|
+
|
|
75
|
+
`src/server/*.ts`, `src/cli.ts`, `src/core/errors.ts`, `scripts/prove-standalone.mjs`.
|
|
76
|
+
|
|
77
|
+
## Doctor jobs (PROP-0011)
|
|
78
|
+
|
|
79
|
+
| Method | Input | Reply |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| `doctor.start` | `{ context: { caller, cwd, accountId, model, tools, variant?, capabilities? }, mode?: "local" \| "live", checks?: string[], confirmed?: boolean }` | `DoctorReport` |
|
|
82
|
+
| `doctor.read` | `{ id }` | `DoctorReport` |
|
|
83
|
+
| `doctor.cancel` | `{ id }` | `DoctorReport` |
|
|
84
|
+
|
|
85
|
+
A trusted host attests confirmation for the exact selected live checks. Live mode requires both
|
|
86
|
+
`confirmed: true` and non-empty `checks`. Terminal equivalents are `terminal.doctor.*`; every call
|
|
87
|
+
requires the control key and each job belongs to its originating terminal. The terminal supplies
|
|
88
|
+
its account and pinned variant; the controlled frontend supplies its current model and tool list.
|
|
89
|
+
|
|
90
|
+
Reports carry job state (`running`, `completed`, `cancelled`), progress, timestamps, selected
|
|
91
|
+
account/model, findings, and available live-check notices. Findings distinguish `local` from
|
|
92
|
+
`live` and statuses `pass`, `warning`, `fail`, `disabled`, `blocked`, `unverified`. Schemas and
|
|
93
|
+
Node types are exported. Jobs are in-memory until shutdown; real live-run records remain.
|
|
94
|
+
|
|
95
|
+
## Side questions (PROP-0019)
|
|
96
|
+
|
|
97
|
+
| Method | Input | Reply |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `sideQuestions.start` | `{ question, cwd, caller, context?: { instructions?, transcript?, references? }, parentRunId?, parentSessionId?, accountId?, model?, effort?, runId?, sessionId? }` | `{ runId, sessionId, nativeSessionId }` |
|
|
100
|
+
| `sideQuestions.read` | `{ runId, sessionId, afterSequence? }` | `{ run: RunRecord, events: RunEvent[] }` |
|
|
101
|
+
| `sideQuestions.interrupt` | `{ runId, sessionId }` | `{ runId }` |
|
|
102
|
+
|
|
103
|
+
The Harness builds bounded context from the parent's persisted effective prompt and public events
|
|
104
|
+
plus the surface's visible transcript. Read and interrupt require the side run's session id. The
|
|
105
|
+
standalone terminal exposes the same operations through control-key-protected
|
|
106
|
+
`terminal.sideQuestions.*` calls; its caller identity, account and working folder come from terminal
|
|
107
|
+
preparation, not client-supplied values.
|
|
108
|
+
|
|
109
|
+
Remote `tools.register` may include `diagnostics: [{ id, category, title, tools, probe?: { notice,
|
|
110
|
+
tool, input, contains } }]`. The host answers `tools.diagnose({ id, context })` with `{ status,
|
|
111
|
+
evidence, remedy? }` for local inspection. A probe is a declared registered tool call through
|
|
112
|
+
the gate, with an expected response marker; it cannot supply arbitrary executable code.
|
|
113
|
+
|
|
114
|
+
## Private terminal resource controls (PROP-0013)
|
|
115
|
+
|
|
116
|
+
These methods are session-socket controls, not additions to the public host RPC table. All
|
|
117
|
+
require the claimed terminal control key; account, working directory and variant pin come
|
|
118
|
+
from preparation, never from the request.
|
|
119
|
+
|
|
120
|
+
| Method | Input | Reply |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| `terminal.browser.config` | `{}` | `{ allowPrivate }`, the device-local private-address setting |
|
|
123
|
+
| `terminal.browser.configure` | `{ allowPrivate: boolean }` | `{ allowPrivate }`, updated setting |
|
|
124
|
+
| `terminal.browser.snapshot` | `{ refresh?: boolean }` | `BrowserSnapshot`: resources, plugins, safe connection records, pinned/latest variant identity and Hub overview |
|
|
125
|
+
| `terminal.browser.read` | `{ id, latest?: boolean }` | `{ content }`, bounded enumerated resource content |
|
|
126
|
+
| `terminal.browser.importSkill` | `{ path }` | `{}`, validated bounded local bundle imported into the existing library |
|
|
127
|
+
| `terminal.browser.hubPreview` | `{ id, version, offset? }` | Existing `HubPreviewPage` |
|
|
128
|
+
| `terminal.browser.hubDocument` | `{ id, version }` | Existing verified installed document |
|
|
129
|
+
| `terminal.browser.connections.appClients` | `{}` | Existing available application OAuth catalog IDs |
|
|
130
|
+
| `terminal.browser.connections.save` | `{ input: ConnectionInput }` | Existing safe `Connection` record |
|
|
131
|
+
| `terminal.browser.connections.test\|signIn\|signOut\|remove` | `{ id }` | Existing connection service result |
|
|
132
|
+
|
|
133
|
+
Protected `plugins.install { source }` and `plugins.remove { pluginId }` delegate to the package
|
|
134
|
+
service. Optional matching callbacks extend `PluginControl`; hosts without them receive a clear
|
|
135
|
+
unsupported-operation error. No protocol version or persisted schema changes.
|
|
136
|
+
|
|
137
|
+
## Worktrees (PROP-0016)
|
|
138
|
+
|
|
139
|
+
| Method | Input | Reply |
|
|
140
|
+
|---|---|---|
|
|
141
|
+
| `worktrees.list` | `{ repo? }` | active `WorktreeRecord[]` (of the repository `repo` is in) |
|
|
142
|
+
| `worktrees.removed` | `{ repo? }` | removed records that `restore` can bring back |
|
|
143
|
+
| `worktrees.status` | `{ id }` | `WorktreeStatus`: exists, head, changed paths, commits since it started |
|
|
144
|
+
| `worktrees.create` | `{ repo, name?, baseRef?, branch?, kind?, carryChanges?, setup? }` | `{ worktree, carried, included, setup }` |
|
|
145
|
+
| `worktrees.branch` | `{ id, name }` | the record, on branch `<prefix><name>` |
|
|
146
|
+
| `worktrees.handoff` | `{ id, direction: "toSource" \| "toWorktree", move? }` | `{ direction, patched, copied, stash }` |
|
|
147
|
+
| `worktrees.remove` | `{ id, force? }` | `{ worktree, snapshot }` |
|
|
148
|
+
| `worktrees.restore` | `{ id }` | the record |
|
|
149
|
+
| `worktrees.prune` | `{ repo?, keep? }` | `{ removed, failed }` |
|
|
150
|
+
| `worktrees.adopt` | `{ path }` | the record (kind `permanent`, origin `adopted`) |
|
|
151
|
+
| `worktrees.setup.trust` | `{ repo, hash }` | `{}` |
|
|
152
|
+
|
|
153
|
+
Errors: `not_a_repository`, `repository_empty`, `worktree_exists`, `branch_exists`,
|
|
154
|
+
`worktree_in_use`, `worktree_has_work`, `worktree_removed`, `worktree_missing`, `not_a_worktree`,
|
|
155
|
+
`handoff_target_dirty`, `handoff_conflict`, `git_failed`, `git_unavailable`. The terminal reaches the
|
|
156
|
+
same service through `terminal.worktrees.*` routes, which need the control key (`INV-TUI-4`).
|
|
157
|
+
|
|
158
|
+
## Page notes (PROP-0017)
|
|
159
|
+
|
|
160
|
+
| Method | Input | Reply |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| `annotations.list` | `{ url?, query?, status?, offset?, limit? }` | `{ notes, total }`, newest first |
|
|
163
|
+
| `annotations.read` | `{ id }` | `Note` |
|
|
164
|
+
| `annotations.create` | `{ source, target, body, tags? }` | `Note` (private) |
|
|
165
|
+
| `annotations.update` | `{ id, expectedVersion, patch: { body?, tags?, status?, target? } }` | `Note` |
|
|
166
|
+
| `annotations.delete` | `{ id, expectedVersion }` | `{}` |
|
|
167
|
+
| `annotations.share` | `{ id, principal: { sessionId } \| { agentId }, binding? }` | `Note` |
|
|
168
|
+
| `annotations.unshare` | `{ id, principal }` | `Note` |
|
|
169
|
+
| `annotations.revokeBinding` | `{ binding }` | `{ revoked }` |
|
|
170
|
+
| `annotations.import` | `{ notes }` | `{ imported, skipped }` (ids kept) |
|
|
171
|
+
| `annotations.pageScript` | `{}` | `{ script }`: the page helper, with `__ARGS__` for one operation |
|
|
172
|
+
| `annotations.queue` | `{ id, sessionId, expectedVersion?, autoSend? }` | `Note`, shared with the session and queued (PROP-0018) |
|
|
173
|
+
| `annotations.dequeue` / `annotations.confirm` | `{ id, expectedVersion? }` | `Note` |
|
|
174
|
+
| `annotations.queued` | `{ sessionId }` | `{ notes }`, oldest first |
|
|
175
|
+
| `annotations.createAndAct` | `{ note, action: save \| queue \| send, sessionId?, trusted? }` | `{ note, send }`; an untrusted send waits for `confirm` |
|
|
176
|
+
| `annotations.compose` | `{ sessionId, ids? }` | `{ text, ids }`: one instruction for a host's own `sessions.run` |
|
|
177
|
+
| `annotations.delivered` | `{ ids, sessionId, runId }` | `{ notes }`, marked sent |
|
|
178
|
+
| `annotations.send` | `{ sessionId, ids? }` | `{ state: sent \| busy \| host \| empty, … }` |
|
|
179
|
+
| `annotations.capture.attach` | `{ key, kind: web \| cdp \| bridge, endpoint?, name? }` | `{ kind, app, windows, bridge? }` |
|
|
180
|
+
| `annotations.capture.target` | `{ key }` | `{ kind, app, inspecting, windows }` |
|
|
181
|
+
| `annotations.capture.selectWindow` | `{ key, window }` | `{}` |
|
|
182
|
+
| `annotations.capture.open` | `{ key, url? }` | `{ url, title }` |
|
|
183
|
+
| `annotations.capture.inspect` / `stopInspect` | `{ key }` | `{ captureId }` / `{}` |
|
|
184
|
+
| `annotations.capture.next` | `{ key, sessionId?, surface? }` | `{ active, trusted, app, note, send, message, … }` |
|
|
185
|
+
| `annotations.capture.release` | `{ key }` | `{}` |
|
|
186
|
+
| `annotations.bridge.start` | `{}` | `{ port, token, scriptUrl, snippet }` |
|
|
187
|
+
|
|
188
|
+
Notices: `annotations.changed { sessionId, ids }` after any queue, send or fix;
|
|
189
|
+
`annotations.ready { sessionId, ids }` when a host session's waiting notes should be sent now.
|
|
190
|
+
|
|
191
|
+
Errors: `version_conflict`, `not_found`, `annotation_limit`, `invalid_request`, `invalid_data`. The
|
|
192
|
+
terminal reaches the same store through `terminal.annotations.*`, which shares only with its own
|
|
193
|
+
session and needs the control key (`INV-TUI-4`).
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# 11 Terminal
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The harness owns a generic interactive terminal application (`xagent`) over a
|
|
6
|
+
persistent Pi session on a variant. It is the standalone way to use the harness, and an
|
|
7
|
+
embedding application can host it in its own PTY. Detail, screen layout and verification evidence
|
|
8
|
+
are in [`../terminal-tui.md`](../terminal-tui.md); this page states the binding parts.
|
|
9
|
+
|
|
10
|
+
## Components
|
|
11
|
+
|
|
12
|
+
| Type / module | Role |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `Terminals` (`terminal/terminals.ts`) | Parent side: `prepare` (account, compiled context, trusted resources, run writer) returns a launch specification; `send`, `state`, `input`, `dispose`. |
|
|
15
|
+
| `src/terminal/opentui/` (`app.ts`, `root.tsx`) | The OpenTUI/Solid frontend: lifecycle, submission, commands, decisions, composition, transcript, composer, dialogs. |
|
|
16
|
+
| `src/terminal/opentui/attachments.ts`, `composerMarks.ts` | Composer attachments: pasted images and collapsed large pastes, their atomic labels, and expansion into the prompt text and Pi image content on send. |
|
|
17
|
+
| `src/terminal/tui/runtime.ts` | `AgentSessionRuntime` over `createAgentSession`, `ModelRuntime`, `SessionManager`, `DefaultResourceLoader`. |
|
|
18
|
+
| `src/terminal/socket.ts`, `client.ts`, `control.ts`, `controller.ts` | The session socket, the private control key, and the run controller. |
|
|
19
|
+
| `src/terminal/piExtension.ts` | The bridge extension, loaded last as the trusted inline gate. |
|
|
20
|
+
| `src/terminal/cli.ts` | Wiki and connected-apps commands for the session's shell. |
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
Harness parent: account + compiled context + trusted resources + run writer
|
|
24
|
+
| launch specification / session socket
|
|
25
|
+
Harness terminal child (Bun): OpenTUI application + persistent Pi AgentSessionRuntime
|
|
26
|
+
| typed native events / plugin UI callbacks
|
|
27
|
+
Screen: transcript above the composer, centred dialogs, full-screen resource browser
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Contracts
|
|
31
|
+
|
|
32
|
+
- The published executable is `xagent`; `xharness` is not retained as a compatibility alias. With no command, `xagent` starts the interactive terminal. `terminal` remains an explicit alias, and `serve` remains the host-facing RPC path.
|
|
33
|
+
- `TerminalAssets` is `{ node, cli, piExtension, openTui }`. The command is Bun with
|
|
34
|
+
`--conditions=browser` and `dist/terminal-opentui.js`; no global `pi` is needed.
|
|
35
|
+
- The `piExtension` path is the final prepared extension argument; the runtime loads it as the
|
|
36
|
+
final trusted inline factory.
|
|
37
|
+
- The terminal compiles its prompt once (`compile` + `render`) and keeps that pack; each run
|
|
38
|
+
records a copy (page 04).
|
|
39
|
+
- Normal mode keeps `ask_user` and `ask_user_question` out of the active tool set. A plan request
|
|
40
|
+
enables the registered question tools alongside its read-only set and restores the normal set on
|
|
41
|
+
success, failure or interruption. See page 02 and the [terminal guide](../terminal-tui.md).
|
|
42
|
+
- Standalone defaults: `~/.xingular-harness/{data,state}`; `npm run dev` uses
|
|
43
|
+
`~/.xingular-harness-dev/{data,state}`.
|
|
44
|
+
- An empty conversation shows a centered welcome using `env.productName` (default `Xingular Agent`):
|
|
45
|
+
the first letter of a multiword name is the orange block mark and its remaining words are letter-spaced
|
|
46
|
+
in blue. The welcome adds a greeting, tagline and `/help` hint without replacing the composer or
|
|
47
|
+
status bar. Explicit host product names use the same generic formatting.
|
|
48
|
+
- `xagent --worktree [name]` (`-w`) starts in a new managed worktree of the current repository,
|
|
49
|
+
or in the named one, and prunes older managed worktrees (PROP-0016). A session that names a
|
|
50
|
+
worktree holds it for its whole life. `/worktree` switches folders by asking the host to restart
|
|
51
|
+
the frontend there (`TerminalRelaunch.cwd`), as a new conversation: Pi keeps one history per
|
|
52
|
+
working folder.
|
|
53
|
+
- Slash-command aliases share one registry entry: `/session (resume)` switches saved sessions,
|
|
54
|
+
`/history (tree)` navigates branches in the current session, and `/btw (side)` asks a side
|
|
55
|
+
question through the Harness `SideQuestions` service. It uses the same account/model/effort,
|
|
56
|
+
mirrors the main run's redacted prompt and public evidence, starts a separate tool-free run, and
|
|
57
|
+
leaves the main conversation untouched. The dock streams, scrolls and copies the complete answer.
|
|
58
|
+
Aliases remain callable and searchable, but help and palette show only the canonical
|
|
59
|
+
entry. Commands owned by required built-in plugins and core terminal commands are unprefixed.
|
|
60
|
+
Optional built-in plugin and Pi extension commands use `/plugin:<command>`. A bare command or
|
|
61
|
+
prompt owns its name; a colliding `/plugin:<command>` is omitted and rejected with a hint to use
|
|
62
|
+
the bare command. Prompt templates and `/skill:<name>` otherwise keep their existing forms.
|
|
63
|
+
|
|
64
|
+
## Invariants
|
|
65
|
+
|
|
66
|
+
- **INV-TUI-1** OpenTUI is the only terminal frontend. Pi's `InteractiveMode` is never constructed
|
|
67
|
+
([ADR-0006](../decisions/ADR-0006-opentui-only-terminal.md)).
|
|
68
|
+
- **INV-TUI-2** The harness owns screen composition, input, scrolling, command routing and plugin
|
|
69
|
+
UI. Pi owns the execution runtime, native history and rich content components. A host owns the
|
|
70
|
+
PTY and process supervision ([ADR-0001](../decisions/ADR-0001-owned-terminal.md)).
|
|
71
|
+
- **INV-TUI-3** Execution, account isolation, trust, authorization and run recording stay behind
|
|
72
|
+
their existing layers. The terminal adds no second path for any of them; its runs are written
|
|
73
|
+
through the controller and the run store.
|
|
74
|
+
- **INV-TUI-4** Changes made through the session socket (`plugins.attach|detach|trust|untrust|configure`,
|
|
75
|
+
`accounts.*`, Hub installs, `terminal.browser.*`, `terminal.worktrees.*`,
|
|
76
|
+
`terminal.annotations.*`, `terminal.sideQuestions.*`) require the control key the trusted terminal process claimed once
|
|
77
|
+
(`control.claim`). The session's shell can read the session token, so the token alone is never
|
|
78
|
+
enough.
|
|
79
|
+
- **INV-TUI-5** Every resource reload revalidates the original trusted selection; changed or
|
|
80
|
+
revoked code needs review and a fresh terminal.
|
|
81
|
+
- **INV-TUI-6** `sessions.run` stays the embedding and unattended path. The terminal keeps a
|
|
82
|
+
persistent child instead of opening a session per turn.
|
|
83
|
+
- **INV-TUI-7** Required built-in plugin commands use their unprefixed names; optional built-in
|
|
84
|
+
plugin commands and Pi extension commands use `/plugin:<command>`. Completions and help show each
|
|
85
|
+
command in its canonical namespace. Bare core commands, aliases, required built-in commands and
|
|
86
|
+
loaded prompts reserve their names; a colliding prefixed command is hidden and rejected with a hint
|
|
87
|
+
to use the bare command. Duplicate extension names are rejected with owner diagnostics. Old
|
|
88
|
+
prefixed forms of required built-in commands are not aliases.
|
|
89
|
+
|
|
90
|
+
## Source map
|
|
91
|
+
|
|
92
|
+
`src/terminal/**`. Decisions: ADR-0001, [ADR-0004](../decisions/ADR-0004-fullscreen-terminal-layout.md)
|
|
93
|
+
(superseded), ADR-0006, [ADR-0021](../decisions/ADR-0021-required-command-namespaces.md),
|
|
94
|
+
[ADR-0024](../decisions/ADR-0024-xagent-command.md),
|
|
95
|
+
[ADR-0027](../decisions/ADR-0027-connected-sketch-display.md),
|
|
96
|
+
[ADR-0028](../decisions/ADR-0028-xingular-agent-product-identity.md). Experiments:
|
|
97
|
+
EXP-0001, EXP-0002 in `../experiments/`.
|
|
98
|
+
|
|
99
|
+
## Session name in the working line (PROP-0010)
|
|
100
|
+
|
|
101
|
+
The bridge registers `session_name` against Pi's `getSessionName` / `setSessionName` APIs.
|
|
102
|
+
The native `session_info_changed` event invalidates the frontend's cached snapshot and
|
|
103
|
+
refreshes the working line. Both the active and retained completion line append
|
|
104
|
+
` – <name>` after duration and token rate, for example
|
|
105
|
+
`Working (2m, 50 tok/s) – Add web browser integrations`. Unnamed sessions omit the suffix.
|
|
106
|
+
Names use the existing terminal text sanitization, remain outside the verb shimmer, and
|
|
107
|
+
truncate at the right edge. Manual `/name` and existing long names remain supported.
|
|
108
|
+
|
|
109
|
+
## Doctor command
|
|
110
|
+
|
|
111
|
+
`/doctor` opens a command page and runs local readiness checks. Refresh and retry are local;
|
|
112
|
+
Live checks opens an explicit selection followed by account/model, destination, cost and isolation
|
|
113
|
+
confirmation. The page polls structured reports, retains findings after cancellation, and cancels
|
|
114
|
+
on close. No command text is sent to the conversation model. See [Doctor](../doctor.md).
|
|
115
|
+
|
|
116
|
+
## Resource browser (PROP-0013)
|
|
117
|
+
|
|
118
|
+
`/harness` owns shared navigation for Foundation, Variant, Skills, Plugins, Connections, Tools
|
|
119
|
+
and Library. `/skills`, `/plugins`, `/connections` (`/mcp`), `/tools`, `/hub` and `/components`
|
|
120
|
+
are shortcuts into that browser. Current availability comes from the live resource loader and
|
|
121
|
+
active tool registry, independently of saved configuration and the latest variant head.
|
|
122
|
+
|
|
123
|
+
Every `terminal.browser.*` call requires the private control key, including bounded resource
|
|
124
|
+
inspection, local imports, connection management and browser settings. Package install/remove use protected
|
|
125
|
+
`plugins.install|remove`. These are adapters to the existing services, not another loader,
|
|
126
|
+
attachment store, gate or secret store. Browsing neither executes plugin code nor connects MCP.
|
|
127
|
+
The browser uses the full terminal with persistent section tabs (PROP-0014); wide screens keep
|
|
128
|
+
inventory beside details, actions and content, while compact screens keep inline details under
|
|
129
|
+
the same tabs. Other command pages remain centered except `/settings` and `/accounts`, which use
|
|
130
|
+
full-screen page layouts. Accounts keeps Accounts/Pools tabs, search and account-service operations.
|
|
131
|
+
Wide terminals show selected-account details beside the list; Enter or a primary click opens grouped
|
|
132
|
+
actions in that inspector. Compact terminals replace the list with a full-page account detail view
|
|
133
|
+
and its grouped actions. Enter opens the selected account; Escape returns to the list while
|
|
134
|
+
preserving its section, query and selection across navigation and resizing. Tab/Shift+Tab moves focus
|
|
135
|
+
between tabs, the list and (when open) actions; Left/Right changes a focused tab and Up/Down moves
|
|
136
|
+
the focused list or action list. Account actions retain their Session, Account, Sign-in and Remove
|
|
137
|
+
groups; pool actions remain grouped under Manage and Remove. See the
|
|
138
|
+
[terminal guide](../terminal-tui.md#blocks-and-pages) for layout and interaction.
|
|
139
|
+
|
|
140
|
+
`/settings` is a full-screen page with category tabs, search, settings list and the device-local
|
|
141
|
+
Browser tab for `allowPrivate`. Enabling private address access requires confirmation and allows both
|
|
142
|
+
agent browsing and annotation capture to reach localhost and private networks. It is off by default.
|
|
143
|
+
|
|
144
|
+
## Worktrees command (PROP-0016)
|
|
145
|
+
|
|
146
|
+
`/worktree` opens a page of the managed worktrees of the repository the session works in: make a
|
|
147
|
+
managed or permanent worktree, switch the terminal to one (or back to the main checkout), create a
|
|
148
|
+
branch on a detached one, hand changes off in either direction, remove one (with a snapshot when it
|
|
149
|
+
holds work, never the one this terminal uses), restore a removed one, prune older ones, and trust
|
|
150
|
+
the repository's setup script. The page calls `terminal.worktrees.*` routes, which use the same
|
|
151
|
+
`Worktrees` service as the `worktrees.*` server methods. `xagent worktree <command>` offers the
|
|
152
|
+
same actions from a shell.
|
|
153
|
+
|
|
154
|
+
## Question dock
|
|
155
|
+
|
|
156
|
+
Pending questions appear in a flat block above the composer, with a tab for each 1–2 word question
|
|
157
|
+
label above its title. Tabs can be clicked; Left/Right also switch questions and preserve staged
|
|
158
|
+
answers. The header has no pager or collapse control, and the dock stays expanded until the answer
|
|
159
|
+
is submitted or Escape cancels the pending question. While it is active, the chat composer and its
|
|
160
|
+
lower status bar are hidden. `n` opens a note for the focused selected choice; Tab and Shift+Tab
|
|
161
|
+
navigate existing note fields, the free-text answer and the action without creating notes. Notes
|
|
162
|
+
and the “Something else” answer wrap across lines. Choice recommendations remain visual only and
|
|
163
|
+
never preselect an answer.
|
|
164
|
+
|
|
165
|
+
Every choice uses one shared measured layout: a marker gutter, a one-third label cell, a two-cell
|
|
166
|
+
gap, and the remaining description cell. Column boundaries align across all rows at every terminal
|
|
167
|
+
width, including compact widths. Text wraps within its cell; a missing description keeps its cell
|
|
168
|
+
and columns never stack. Recommendation text uses `(Rec.)` when the label column is fewer than 14
|
|
169
|
+
cells. Below 60 terminal columns, the dock uses a compact hint.
|
|
170
|
+
|
|
171
|
+
The dock body has bounded height and vertical scrolling; question tabs and answer/action controls
|
|
172
|
+
stay outside that scrolling region. PageUp/PageDown scroll the body and Ctrl+Home/End jump to its
|
|
173
|
+
beginning/end while the dock is active, rather than scrolling the transcript. Focused choices and
|
|
174
|
+
note fields are brought into view. Ordinary arrows retain question/choice navigation; Shift+arrows
|
|
175
|
+
pan the sketch horizontally or vertically.
|
|
176
|
+
|
|
177
|
+
When a question sets `uiSketch: true`, one shared border-only monospace preview below the choices
|
|
178
|
+
shows the hovered or focused choice's ASCII wireframe, with no visible caption or extra left rule.
|
|
179
|
+
Sketch source supports up to 80 columns by 24 lines (page 02) and remains literal ASCII in
|
|
180
|
+
persistence. The terminal uses a bounded structural display projection: recognized ASCII table-border
|
|
181
|
+
rows—including a title between horizontal runs—and enclosed vertical table edges become connected
|
|
182
|
+
box-drawing glyphs, while internal framed tables retain their original widths and positions. For a
|
|
183
|
+
high-confidence frame with matched `+` corners, missing or slightly displaced side edges may be
|
|
184
|
+
filled or moved only through whitespace to the established boundary columns; interior text is never
|
|
185
|
+
moved or overwritten, and conflicting or ambiguous rows remain literal. Bare standalone hyphen
|
|
186
|
+
divider rows expand to `max(panel viewport width, original sketch widest line)` and join the outer
|
|
187
|
+
single-line preview frame with `├` and `┤`. This is not a global `+|-` substitution: prose, content
|
|
188
|
+
operators, ordinary pipes and unrecognized rows remain literal. Source sketches and all persisted
|
|
189
|
+
whitespace remain unchanged; only the display projection adjusts recognized boundary cells.
|
|
190
|
+
|
|
191
|
+
There is no wrapping, reflow, truncation or markup interpretation. A bounded two-axis viewport makes
|
|
192
|
+
all overflow reachable by panning. Moving focus changes the preview without changing the staged
|
|
193
|
+
answer. Projected glyphs and expanded dividers never enter persisted events or answers; the wire
|
|
194
|
+
contract is unchanged. See [PROP-0025](proposals/PROP-0025-contextual-question-wireframes.md),
|
|
195
|
+
[ADR-0026](../decisions/ADR-0026-contextual-question-wireframes.md) and the approved display amendment
|
|
196
|
+
[PROP-0026](proposals/PROP-0026-connected-sketch-display.md) /
|
|
197
|
+
[ADR-0027](../decisions/ADR-0027-connected-sketch-display.md), and
|
|
198
|
+
[PROP-0028](proposals/PROP-0028-normalize-question-wireframes.md) /
|
|
199
|
+
[ADR-0029](../decisions/ADR-0029-normalized-question-wireframe-borders.md). Isolated production
|
|
200
|
+
PTY verification is retained in `docs/evidence/terminal-wireframe-normalization/`; it establishes
|
|
201
|
+
cell topology for bounded fixtures, not every emulator/font or live-model sketch quality.
|
|
202
|
+
|
|
203
|
+
## Page notes commands (PROP-0017)
|
|
204
|
+
|
|
205
|
+
`/plugin:notes` lists the page notes kept in the data root, with search, and offers reveal, edit, resolve or
|
|
206
|
+
reopen, share with this session or stop sharing, and delete. `/plugin:annotate [url]` starts a new note: it
|
|
207
|
+
opens a visible capture browser (its own window and profile, separate from the agent's browser), and
|
|
208
|
+
the person notes the whole page, selects text, or clicks an element there, then confirms in the
|
|
209
|
+
terminal. A note is private until shared; this session's agent then reads it with `page_notes_list`
|
|
210
|
+
and `page_notes_read`.
|
|
211
|
+
|
|
212
|
+
`/plugin:annotate` is the annotate pane (PROP-0018): a full-screen page beside the window being inspected.
|
|
213
|
+
|
|
214
|
+
- **Ways to start it:**
|
|
215
|
+
- `/plugin:annotate [url]`: the browser window
|
|
216
|
+
- `/plugin:annotate --app <DevTools address | port> [name]`: an app's own windows over its DevTools port
|
|
217
|
+
- `/plugin:annotate --bridge [name]`: app windows that load the page bridge script, which the pane shows
|
|
218
|
+
- **The inspector** (`i`) outlines components on hover. A click or a text drag opens a popover in the page with Create annotation, Ask agent to fix, and Proceed now.
|
|
219
|
+
- **Sections:** Queue, Sent and fixed (with the agent's summary), and Saved.
|
|
220
|
+
- **Other keys:** `s` sends the queue as one run of this session, confirming notes that came from a page-world script first; `x` takes a note out of the queue; `t` picks a window.
|
|
221
|
+
- **Routes:** `terminal.annotations.target|attach|windows|selectWindow|inspect|stopInspect|next|queue|dequeue|confirm|send` act only on this terminal's session and need the control key.
|
|
222
|
+
|
|
223
|
+
## Checklist (PROP-0006, PAR-001)
|
|
224
|
+
|
|
225
|
+
Terminal sessions register the shared `checklist_write` tool. The extension validates each list
|
|
226
|
+
with the same tool code and sends it as `checklist` telemetry; the controller emits it as
|
|
227
|
+
`checklist.updated` on the active run, so `runs.checklist` and continuation read terminal runs too.
|
|
228
|
+
The gate treats it as read-only, plan mode allows it, and terminal children inherit it. The
|
|
229
|
+
transcript shows each write as a checklist block (`✓` done, `●` in progress (warning yellow), `○` pending) under a
|
|
230
|
+
`Checklist · n of m done` header instead of a tool row; a failed or malformed call stays a tool row.
|
|
231
|
+
|
|
232
|
+
## Subagent activity monitor
|
|
233
|
+
|
|
234
|
+
During an active parent run, the terminal polls a private read-only monitor once per second. It
|
|
235
|
+
projects the flat set of child and nested-child runs with task, status, elapsed time, the latest
|
|
236
|
+
tool name, the child's agent profile (name and colour, PROP-0029), the title the parent gave it
|
|
237
|
+
(PROP-0030), and counts from the child's own checklist. The child's own `session_name` is not
|
|
238
|
+
projected; it names the child's session, not its row. Tool summaries, other
|
|
239
|
+
arguments, output and checklist item text never enter the monitor. The latest completed tool name
|
|
240
|
+
remains visible across one-second snapshots until new tool or response activity replaces it. The
|
|
241
|
+
monitor exposes no controls to steer or stop children.
|
|
242
|
+
|
|
243
|
+
The live rows sit under the status line, after one blank row, with no heading. Each row reads, in
|
|
244
|
+
order: the status mark (`○` queued, a running row that shows the working spinner's frame in the profile's colour (warning for a copy of the parent), `●` waiting in the accent,
|
|
245
|
+
`✓` done, `✕` failed, `!` stopped), the profile name in its colour (`subagent`, muted, for a copy
|
|
246
|
+
of the parent), the title the parent gave the child (PROP-0030), and `n of m tasks` when the child
|
|
247
|
+
keeps a checklist. Active rows come first, at most three, then `+N more · /subagents`; a narrow
|
|
248
|
+
terminal cuts the title first. `/subagents` opens the searchable full roster with the same fields.
|
|
249
|
+
Finished rows remain until the parent run settles. The projection is volatile and scoped to that
|
|
250
|
+
parent run; it is not a persisted event or public server method.
|
|
251
|
+
|
|
252
|
+
## Agent profiles (PROP-0029)
|
|
253
|
+
|
|
254
|
+
`/agents` opens the Agents page over `terminal.agents.list|create|remove`, which call the same
|
|
255
|
+
`agents/profiles.ts` functions as `agents.*`. It lists built-in, global, project and variant
|
|
256
|
+
profiles, and files that cannot be read. The detail pane shows the colour, description, tools,
|
|
257
|
+
plugins, variant, model, effort, file and instructions. Enter on a row offers: for a person's own
|
|
258
|
+
profile, edit (opens the file in `$VISUAL`/`$EDITOR` with the renderer suspended), copy and delete
|
|
259
|
+
(confirmed); for a built-in or variant profile, copy. New profile asks for a name and a place
|
|
260
|
+
(project or global), writes the template and opens it. The terminal passes its pinned variant to
|
|
261
|
+
`Subagents.register`, so the variant's c5 names are profiles there too.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 12 Storage
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The harness keeps two folders. The **data root** holds knowledge and history that may be shared
|
|
6
|
+
or synced: variants, refinements, the library, the Wiki, runs. The **state directory** holds
|
|
7
|
+
device-local state that must never travel with the data: accounts, secrets, approvals, trust,
|
|
8
|
+
connections, sockets. Files are the source of truth everywhere; the only database is a derived
|
|
9
|
+
index.
|
|
10
|
+
|
|
11
|
+
## Layout
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
<data root>/
|
|
15
|
+
variants/<scope>/ versions/<fingerprint>/{variant/, version.json}, head.json, lineage.jsonl, restores.jsonl (03)
|
|
16
|
+
refine/<id>/ summary.json, task.json, variants/, rollouts/, sessions/, context/, selection/, reflection/, improver/, or matrix.json + suite.json for evaluation matrices (05)
|
|
17
|
+
rollouts/<label>/workspace/ only when started with retainWorkspaces
|
|
18
|
+
library/<scope>/<area>/ INDEX.md, variants/<task>/{variant/, EXPERIENCE.md} (05)
|
|
19
|
+
annotations/<id>.json page notes (13, PROP-0017)
|
|
20
|
+
wiki/ home.md, library/ (library/lessons/ from the lessons plugin), projects/<slug>/ (08)
|
|
21
|
+
reflection/improver/lesson-<run id>/ a reflection's native history and reply (08)
|
|
22
|
+
wiki-history/ earlier versions of notes (08)
|
|
23
|
+
legacy/ an earlier Wiki's data, moved once (08)
|
|
24
|
+
registry/ skills/, prompts/, rules/: the component library (03)
|
|
25
|
+
plugins/<name>/ packages kept with the data (06)
|
|
26
|
+
trash/plugins/ removed packages (06)
|
|
27
|
+
hub/ installed documents and provenance (09)
|
|
28
|
+
runs/<id>/ run.json, events.jsonl, owner.json, subagents.json, context.json, caller.json, capabilities.json, mcp-context.json (02)
|
|
29
|
+
config/ plugin-attachments.json and settings the harness reads (06)
|
|
30
|
+
agents/<name>.md a person's global agent profiles; agents/profiles.ts owns it (02, PROP-0029)
|
|
31
|
+
index.sqlite derived index (FTS5) (08)
|
|
32
|
+
projects.json read only: the application owns it
|
|
33
|
+
|
|
34
|
+
<state dir>/
|
|
35
|
+
accounts/ registry, per-account Pi agent folders, _shared/pi/, audit log (09)
|
|
36
|
+
secrets.json default SecretStore, owner-only (09)
|
|
37
|
+
approvals.json standing approvals (07)
|
|
38
|
+
plugin-trust.json, variant-plugin-trust.json, plugin-registered.json, plugin-hooks.json (03, 06)
|
|
39
|
+
connections.json connected apps, no secrets (09)
|
|
40
|
+
hub/catalog.json catalog cache (09)
|
|
41
|
+
run/ terminal commands, and one session socket per Harness process,
|
|
42
|
+
harness-<pid>-<random>.sock; files of ended processes are pruned (11)
|
|
43
|
+
worktrees.json managed worktree registry (02, PROP-0016)
|
|
44
|
+
worktrees/<repo>/<name>/ managed worktree checkouts; worktrees/logs/ setup output (PROP-0016)
|
|
45
|
+
worktree-setup-trust.json trusted setup-script hashes, owner-only (PROP-0016)
|
|
46
|
+
browser/ isolated browser settings and profiles (13)
|
|
47
|
+
notes-bridge.json the page bridge's port and token, kept so an app's script tag stays valid (13, PROP-0018)
|
|
48
|
+
harness.log standalone terminal diagnostics
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Side-question runs use the ordinary `runs/<id>/` records. Their temporary Pi native history is
|
|
52
|
+
created under the operating system temporary directory and removed when the run ends; it is not
|
|
53
|
+
retained in the data root or state directory.
|
|
54
|
+
|
|
55
|
+
## Invariants
|
|
56
|
+
|
|
57
|
+
- **INV-STO-1** Device-local state (credentials, approvals, trust, connections, sockets) is never
|
|
58
|
+
written to the data root, and knowledge or history is never written to the state directory.
|
|
59
|
+
- **INV-STO-2** Files are the source of truth. `index.sqlite` can be deleted and rebuilt
|
|
60
|
+
(`INV-MEM-5`); its migrations are append-only (`INV-MEM-6`).
|
|
61
|
+
- **INV-STO-3** Each folder has one owning module, named on its page. Another module reads it
|
|
62
|
+
through that module's functions. A new top-level folder or a new file in `runs/<id>/` is an
|
|
63
|
+
architecture change.
|
|
64
|
+
- **INV-STO-4** `projects.json` belongs to the application; the harness only reads it.
|
|
65
|
+
Project agent profiles live in the repository at `<project>/.xingular/agents/<name>.md`; the
|
|
66
|
+
harness writes them only through `agents.create` and `agents.remove` (PROP-0029).
|
|
67
|
+
- **INV-STO-5** Migrations of stored data are one-way and safe: the old data is backed up or left
|
|
68
|
+
as it was when a migration fails, and the failure is reported in `Recovery.migrationError`.
|
|
69
|
+
- **INV-STO-6** Writes of shared JSON files are atomic (`core/fs.ts::atomicWrite`, `writeJson`).
|
|
70
|
+
- **INV-STO-7** Files holding trust or secrets are owner-only (`0600`).
|
|
71
|
+
|
|
72
|
+
## Source map
|
|
73
|
+
|
|
74
|
+
`src/harness.ts` (`open`), `src/core/fs.ts`, `src/core/index.ts`, and the store module of each
|
|
75
|
+
part, listed on its page.
|