@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,163 @@
|
|
|
1
|
+
// Built-in feature modules register their contributions here; this registry never loads Pi code.
|
|
2
|
+
import { CONNECTION_TOOLS, NATIVE_GROUP } from "../prompt/compile.js";
|
|
3
|
+
import { ASK_USER, askUserTool } from "../tools/askUser.js";
|
|
4
|
+
import { CHECKLIST_WRITE, checklistTool } from "../tools/checklist.js";
|
|
5
|
+
import { SPAWN_SUBAGENT, WAIT_SUBAGENTS } from "../sessions/subagents.js";
|
|
6
|
+
import { subagentTools } from "../tools/spawnSubagent.js";
|
|
7
|
+
import { SESSION_NAME } from "../tools/sessionName.js";
|
|
8
|
+
import { RECALL_TOOLS, SKILL_TOOLS, TRAJECTORY_TOOLS, WIKI_READ_TOOLS, WIKI_WRITE_TOOLS } from "../tools/definitions.js";
|
|
9
|
+
import { FIRST_PARTY_PLUGINS } from "./firstParty.js";
|
|
10
|
+
import { WEB_PLUGIN } from "../web/tools.js";
|
|
11
|
+
import { KEYLESS_SEARCH, webPart } from "../web/part.js";
|
|
12
|
+
import { BROWSER_PLUGIN, browserPluginPart } from "../browser/index.js";
|
|
13
|
+
import { ANNOTATIONS_PLUGIN } from "../annotations/part.js";
|
|
14
|
+
import { annotationsPart } from "../annotations/part.js";
|
|
15
|
+
import { webServerMethods } from "../web/serverMethods.js";
|
|
16
|
+
import { browserServerMethods } from "../browser/serverMethods.js";
|
|
17
|
+
import { annotationServerMethods } from "../annotations/serverMethods.js";
|
|
18
|
+
import { doctorServerMethods } from "../doctor/serverMethods.js";
|
|
19
|
+
import { worktreeServerMethods } from "../worktrees/serverMethods.js";
|
|
20
|
+
import { hubServerMethods } from "../hub/serverMethods.js";
|
|
21
|
+
import { refinementServerMethods } from "../refine/serverMethods.js";
|
|
22
|
+
import { wikiServerMethods } from "../wiki/serverMethods.js";
|
|
23
|
+
import { historyServerMethods } from "../history/serverMethods.js";
|
|
24
|
+
import { subagentServerMethods } from "../sessions/subagentServerMethods.js";
|
|
25
|
+
import { sideQuestionServerMethods } from "../sessions/sideQuestionServerMethods.js";
|
|
26
|
+
import { connectedAppServerMethods } from "../mcp/serverMethods.js";
|
|
27
|
+
import { harnessTools } from "../tools/harnessTools.js";
|
|
28
|
+
import { createBuiltinPluginRegistry } from "./builtinRegistry.js";
|
|
29
|
+
const tools = (definitions) => definitions.map((tool) => ({ name: tool.name, description: tool.label }));
|
|
30
|
+
const toolContribution = (definitions, toolOrder) => ({
|
|
31
|
+
toolOrder,
|
|
32
|
+
tools: (context) => context.harnessTools
|
|
33
|
+
? harnessTools(context.env, context.caller, { variantDir: context.variantDir, definitions })
|
|
34
|
+
: []
|
|
35
|
+
});
|
|
36
|
+
/** Pi itself. Its command's built-in extensions are added to it as they are found. */
|
|
37
|
+
export const PI_PLUGIN = {
|
|
38
|
+
id: 'pi',
|
|
39
|
+
title: 'Pi',
|
|
40
|
+
description: 'The engine every session runs on: its base prompt, its file and shell tools, and the extensions built into its command.',
|
|
41
|
+
required: 'Pi runs every session.',
|
|
42
|
+
tools: [...NATIVE_GROUP.map((name) => ({ name })), { name: SESSION_NAME }],
|
|
43
|
+
toolGroups: ['Native']
|
|
44
|
+
};
|
|
45
|
+
/** The variant: the eight components that shape what an agent is told and can do. */
|
|
46
|
+
export const VARIANT_PLUGIN = {
|
|
47
|
+
id: 'variant',
|
|
48
|
+
title: 'Variant',
|
|
49
|
+
description: 'The agent\'s own variant: system prompt, guardrails, memory and tool guidance in every prompt; skills, scripts and subagents on demand; plugins in the tool loop. Versioned, and refined from evidence.',
|
|
50
|
+
required: 'Every agent runs on a variant.',
|
|
51
|
+
sections: [
|
|
52
|
+
{ id: 'harness-identity', name: 'Harness identity', description: 'Fixed foundation identity; not part of the variant.' },
|
|
53
|
+
{ id: 'system', name: 'System prompt', description: 'c1: role and procedure.' },
|
|
54
|
+
{ id: 'guardrails', name: 'Guardrails', description: 'c2: standing rules.' },
|
|
55
|
+
{ id: 'memory', name: 'Memory', description: 'c3: durable facts about this kind of work.' },
|
|
56
|
+
{ id: 'subagents', name: 'Subagents', description: 'c5: the list of this variant\'s subagents.' },
|
|
57
|
+
{ id: 'scripts', name: 'Scripts', description: 'c7: where this variant\'s scripts are.' },
|
|
58
|
+
{ id: 'reporting', name: 'Reporting', description: 'Fixed foundation text, not part of the variant: how the final reply is shaped.' }
|
|
59
|
+
],
|
|
60
|
+
tools: tools(SKILL_TOOLS)
|
|
61
|
+
};
|
|
62
|
+
const SUBAGENTS_PLUGIN = { id: 'subagents', title: 'Subagents', description: 'Isolated child runs of the same caller, bounded by parent capabilities and nesting depth.', required: 'Availability is selected by the session host; child runs retain the parent permission boundary.', tools: [{ name: SPAWN_SUBAGENT, description: 'Start a subagent' }, { name: WAIT_SUBAGENTS, description: 'Wait for subagents' }] };
|
|
63
|
+
const WIKI_PLUGIN = {
|
|
64
|
+
id: 'wiki',
|
|
65
|
+
title: 'Wiki',
|
|
66
|
+
description: 'Notes about projects, linked to each other, that agents search and read.',
|
|
67
|
+
required: 'Project notes are reached through it.',
|
|
68
|
+
tools: tools([...WIKI_READ_TOOLS, ...WIKI_WRITE_TOOLS]),
|
|
69
|
+
sections: [
|
|
70
|
+
{ id: 'wiki', name: 'Wiki', description: 'The current project\'s notes.' },
|
|
71
|
+
{ id: 'references', name: 'Selected references', description: 'Notes pinned to one request.' }
|
|
72
|
+
],
|
|
73
|
+
toolGroups: ['Wiki']
|
|
74
|
+
};
|
|
75
|
+
const HISTORY_PLUGIN = { id: 'history', title: 'History', description: 'Search earlier conversations and inspect recorded run trajectories.', required: 'Earlier runs are how an agent picks up where work stopped.', tools: tools([...RECALL_TOOLS, ...TRAJECTORY_TOOLS]), toolGroups: ['History'] };
|
|
76
|
+
const ASK_USER_PLUGIN = { id: 'ask-user', title: 'Ask the user', description: 'Lets the agent stop and ask a question with choices.', required: 'An agent must be able to stop and ask you.', tools: [{ name: ASK_USER }] };
|
|
77
|
+
const CHECKLIST_PLUGIN = { id: 'checklist', title: 'Checklist', description: 'Lets the agent keep a checklist of the steps of its work, recorded with the run so progress can be shown and picked up again.', required: 'Progress of longer work is kept through it.', tools: [{ name: CHECKLIST_WRITE, description: 'Write the checklist' }] };
|
|
78
|
+
const CONNECTED_APPS_PLUGIN = {
|
|
79
|
+
id: 'connected-apps',
|
|
80
|
+
title: 'Connected apps',
|
|
81
|
+
description: 'Outside services reached over MCP, behind two tools that list and call what is connected.',
|
|
82
|
+
required: 'Connected apps are reached only through it. Each app is switched on its own.',
|
|
83
|
+
manage: 'connections',
|
|
84
|
+
tools: CONNECTION_TOOLS.map((name) => ({ name })),
|
|
85
|
+
toolGroups: ['Connections']
|
|
86
|
+
};
|
|
87
|
+
const DOCTOR_PLUGIN = { id: 'doctor', title: 'Doctor', description: 'Local readiness checks and explicitly confirmed live probes for accounts, models and tools.', required: 'Every local terminal has readiness diagnostics.' };
|
|
88
|
+
const WORKTREES_PLUGIN = { id: 'worktrees', title: 'Worktrees', description: 'Create and manage isolated git worktrees, move changes between them, and restore removed worktrees.', required: 'Managed worktrees are available to every local terminal.' };
|
|
89
|
+
const HUB_PLUGIN = { id: 'hub', title: 'Hub', description: 'Browse and install reviewed skills, plugins and documents from configured registries.', required: 'Reviewed Harness resources are available to every host.' };
|
|
90
|
+
const REFINEMENT_PLUGIN = { id: 'refinement', title: 'Refinement', description: 'Improve variants from recorded evidence through isolated refinement runs and reviewed candidates.', required: 'Variant refinement is available to every host.' };
|
|
91
|
+
const SIDE_QUESTIONS_PLUGIN = {
|
|
92
|
+
id: 'side-questions',
|
|
93
|
+
title: 'Side questions',
|
|
94
|
+
description: 'Separate, tool-free answers that use a redacted projection of the main conversation.',
|
|
95
|
+
required: 'Every host can ask a side question without steering its main run.',
|
|
96
|
+
sections: [{ id: 'side-question', name: 'Side-question role', description: 'Fixed instructions for an independent, tool-free side run.' }]
|
|
97
|
+
};
|
|
98
|
+
export const BUILTIN_PLUGIN_REGISTRY = createBuiltinPluginRegistry([
|
|
99
|
+
{
|
|
100
|
+
descriptor: PI_PLUGIN,
|
|
101
|
+
toolOrder: 60,
|
|
102
|
+
tools: context => context.harnessTools ? [context.sessionName] : []
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
descriptor: SUBAGENTS_PLUGIN,
|
|
106
|
+
toolOrder: 70,
|
|
107
|
+
tools: context => context.allowedTools.includes(SPAWN_SUBAGENT)
|
|
108
|
+
? subagentTools(context.subagents, context.runId).filter(tool => context.allowedTools.includes(tool.name))
|
|
109
|
+
: [],
|
|
110
|
+
commands: [{ name: 'subagents', description: 'Watch current subagent tasks and activity' }, { name: 'agents', description: 'Browse and edit agent profiles' }],
|
|
111
|
+
serverMethods: subagentServerMethods
|
|
112
|
+
},
|
|
113
|
+
{ descriptor: VARIANT_PLUGIN, ...toolContribution(SKILL_TOOLS, 30) },
|
|
114
|
+
{ descriptor: WIKI_PLUGIN, ...toolContribution([...WIKI_READ_TOOLS, ...WIKI_WRITE_TOOLS], 20), serverMethods: wikiServerMethods },
|
|
115
|
+
{
|
|
116
|
+
descriptor: HISTORY_PLUGIN,
|
|
117
|
+
...toolContribution([...RECALL_TOOLS, ...TRAJECTORY_TOOLS], 10),
|
|
118
|
+
commands: [{ name: 'trajectory', description: 'Inspect the recorded runs of this session' }],
|
|
119
|
+
serverMethods: historyServerMethods
|
|
120
|
+
},
|
|
121
|
+
{ descriptor: ASK_USER_PLUGIN, toolOrder: 40, tools: context => context.harnessTools && context.allowedTools.includes(ASK_USER) ? [askUserTool(context.run)] : [] },
|
|
122
|
+
{ descriptor: CHECKLIST_PLUGIN, toolOrder: 50, tools: context => context.harnessTools ? [checklistTool(context.run)] : [] },
|
|
123
|
+
{
|
|
124
|
+
descriptor: CONNECTED_APPS_PLUGIN,
|
|
125
|
+
toolOrder: 0,
|
|
126
|
+
tools: context => context.connectionTools?.() ?? [],
|
|
127
|
+
serverMethods: connectedAppServerMethods
|
|
128
|
+
},
|
|
129
|
+
{ descriptor: HUB_PLUGIN, serverMethods: hubServerMethods },
|
|
130
|
+
{ descriptor: REFINEMENT_PLUGIN, serverMethods: refinementServerMethods },
|
|
131
|
+
{ descriptor: SIDE_QUESTIONS_PLUGIN, serverMethods: sideQuestionServerMethods },
|
|
132
|
+
{
|
|
133
|
+
descriptor: WEB_PLUGIN,
|
|
134
|
+
createWorldPart: ({ options, setting }) => webPart({ secrets: options.secrets, request: options.request, keyless: () => setting(WEB_PLUGIN.id, KEYLESS_SEARCH) === 1 }),
|
|
135
|
+
serverMethods: webServerMethods
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
descriptor: BROWSER_PLUGIN,
|
|
139
|
+
createWorldPart: ({ browserEngine }) => browserEngine ? browserPluginPart(browserEngine) : null,
|
|
140
|
+
serverMethods: browserServerMethods
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
descriptor: ANNOTATIONS_PLUGIN,
|
|
144
|
+
commands: [
|
|
145
|
+
{ name: 'notes', description: 'Page notes: keep notes on web pages and share them with this session' },
|
|
146
|
+
{ name: 'annotate', description: 'Inspect a page or app, comment on components, send fixes to the agent: /plugin:annotate [url | --app <devtools address> | --bridge]' }
|
|
147
|
+
],
|
|
148
|
+
createWorldPart: ({ options }) => annotationsPart({ root: options.root, changed: options.notesChanged }),
|
|
149
|
+
serverMethods: annotationServerMethods
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
descriptor: DOCTOR_PLUGIN,
|
|
153
|
+
commands: [{ name: 'doctor', description: 'Check account, model, tools and runtime readiness' }],
|
|
154
|
+
serverMethods: doctorServerMethods
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
descriptor: WORKTREES_PLUGIN,
|
|
158
|
+
commands: [{ name: 'worktree', description: 'Work in a managed git worktree: new, switch, hand off, remove' }],
|
|
159
|
+
serverMethods: worktreeServerMethods
|
|
160
|
+
},
|
|
161
|
+
...FIRST_PARTY_PLUGINS.map(descriptor => ({ descriptor }))
|
|
162
|
+
]);
|
|
163
|
+
export const HARNESS_PLUGINS = BUILTIN_PLUGIN_REGISTRY.descriptors();
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Harness } from "../harness.js";
|
|
2
|
+
import type { Handler } from "../server/rpc.js";
|
|
3
|
+
import type { WorldOptions, WorldPart } from "../world/world.js";
|
|
4
|
+
import type { BrowserEngine } from "../browser/index.js";
|
|
5
|
+
import type { CallerContext } from "../core/caller.js";
|
|
6
|
+
import type { DispatchEnv } from "../tools/dispatch.js";
|
|
7
|
+
import type { ToolSpec } from "../tools/types.js";
|
|
8
|
+
import type { Subagents } from "../sessions/subagentService.js";
|
|
9
|
+
import type { ActiveRun } from "../sessions/registry.js";
|
|
10
|
+
import type { PluginDescriptor } from "./types.js";
|
|
11
|
+
export interface BuiltinPluginCommand {
|
|
12
|
+
pluginId: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
namespace: 'unprefixed' | 'plugin';
|
|
16
|
+
}
|
|
17
|
+
export interface BuiltinWorldContext {
|
|
18
|
+
options: WorldOptions;
|
|
19
|
+
setting(pluginId: string, key: string): number;
|
|
20
|
+
browserEngine: BrowserEngine | null;
|
|
21
|
+
}
|
|
22
|
+
export interface BuiltinToolContext {
|
|
23
|
+
env: DispatchEnv;
|
|
24
|
+
caller: CallerContext;
|
|
25
|
+
variantDir: string | null;
|
|
26
|
+
run: ActiveRun;
|
|
27
|
+
runId: string;
|
|
28
|
+
allowedTools: readonly string[];
|
|
29
|
+
harnessTools: boolean;
|
|
30
|
+
subagents: Subagents;
|
|
31
|
+
sessionName: ToolSpec;
|
|
32
|
+
connectionTools?: () => ToolSpec[];
|
|
33
|
+
}
|
|
34
|
+
export interface BuiltinPluginModule {
|
|
35
|
+
descriptor: PluginDescriptor;
|
|
36
|
+
/** Stable order for model tools, independent of descriptor display order. */
|
|
37
|
+
toolOrder?: number;
|
|
38
|
+
tools?: (context: BuiltinToolContext) => ToolSpec[];
|
|
39
|
+
commands?: readonly Omit<BuiltinPluginCommand, 'pluginId' | 'namespace'>[];
|
|
40
|
+
createWorldPart?: (context: BuiltinWorldContext) => WorldPart | null;
|
|
41
|
+
serverMethods?: (harness: Harness) => Record<string, Handler>;
|
|
42
|
+
}
|
|
43
|
+
export interface BuiltinPluginRegistry {
|
|
44
|
+
readonly modules: readonly BuiltinPluginModule[];
|
|
45
|
+
descriptors(): PluginDescriptor[];
|
|
46
|
+
commands(): BuiltinPluginCommand[];
|
|
47
|
+
command(name: string): BuiltinPluginCommand | undefined;
|
|
48
|
+
tools(context: BuiltinToolContext): ToolSpec[];
|
|
49
|
+
worldParts(context: BuiltinWorldContext): WorldPart[];
|
|
50
|
+
serverMethods(harness: Harness): Record<string, Handler>;
|
|
51
|
+
}
|
|
52
|
+
/** One checked registry for the Harness-owned plugin modules and their surface contributions. */
|
|
53
|
+
export declare function createBuiltinPluginRegistry(modules: readonly BuiltinPluginModule[]): BuiltinPluginRegistry;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** One checked registry for the Harness-owned plugin modules and their surface contributions. */
|
|
2
|
+
export function createBuiltinPluginRegistry(modules) {
|
|
3
|
+
const pluginIds = new Set();
|
|
4
|
+
const commandNames = new Set();
|
|
5
|
+
for (const module of modules) {
|
|
6
|
+
const id = module.descriptor.id;
|
|
7
|
+
if (pluginIds.has(id))
|
|
8
|
+
throw new Error(`Duplicate built-in plugin id: ${id}`);
|
|
9
|
+
pluginIds.add(id);
|
|
10
|
+
for (const command of module.commands ?? []) {
|
|
11
|
+
if (!/^[a-z][a-z0-9-]*$/i.test(command.name))
|
|
12
|
+
throw new Error(`Invalid built-in plugin command: ${command.name}`);
|
|
13
|
+
if (commandNames.has(command.name))
|
|
14
|
+
throw new Error(`Duplicate built-in plugin command: ${command.name}`);
|
|
15
|
+
commandNames.add(command.name);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const commands = modules.flatMap(module => (module.commands ?? []).map(command => ({
|
|
19
|
+
pluginId: module.descriptor.id,
|
|
20
|
+
...command,
|
|
21
|
+
namespace: module.descriptor.required ? 'unprefixed' : 'plugin'
|
|
22
|
+
})));
|
|
23
|
+
const byCommand = new Map(commands.map(command => [command.name, command]));
|
|
24
|
+
const toolModules = modules.map((module, index) => ({ module, index })).filter(({ module }) => module.tools)
|
|
25
|
+
.sort((left, right) => (left.module.toolOrder ?? left.index) - (right.module.toolOrder ?? right.index));
|
|
26
|
+
return {
|
|
27
|
+
modules,
|
|
28
|
+
descriptors: () => modules.map(module => module.descriptor),
|
|
29
|
+
commands: () => [...commands],
|
|
30
|
+
command: name => byCommand.get(name),
|
|
31
|
+
tools: context => toolModules.flatMap(({ module }) => module.tools(context)),
|
|
32
|
+
worldParts: context => modules.flatMap(module => {
|
|
33
|
+
const part = module.createWorldPart?.(context);
|
|
34
|
+
return part ? [part] : [];
|
|
35
|
+
}),
|
|
36
|
+
serverMethods: harness => {
|
|
37
|
+
const methods = {};
|
|
38
|
+
for (const module of modules) {
|
|
39
|
+
const contributed = module.serverMethods?.(harness) ?? {};
|
|
40
|
+
for (const [name, handler] of Object.entries(contributed)) {
|
|
41
|
+
if (name in methods)
|
|
42
|
+
throw new Error(`Duplicate built-in server method: ${name}`);
|
|
43
|
+
methods[name] = handler;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return methods;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Connection } from "../mcp/types.js";
|
|
2
|
+
import { type Attachments, type AttachScope } from "./attachments.js";
|
|
3
|
+
import type { HookStatus } from "./hooks.js";
|
|
4
|
+
import { type Loading, type Registered } from "./plugins.js";
|
|
5
|
+
import type { Plugin, PluginDescriptor } from "./types.js";
|
|
6
|
+
export interface CatalogueInput {
|
|
7
|
+
root: string;
|
|
8
|
+
/** The harness's own parts, then the application's. */
|
|
9
|
+
descriptors: readonly PluginDescriptor[];
|
|
10
|
+
/** Ids of the descriptors the application supplied. */
|
|
11
|
+
application: ReadonlySet<string>;
|
|
12
|
+
connections: readonly Connection[];
|
|
13
|
+
/** What was found for one account and working folder, or `null` when there is no account yet. */
|
|
14
|
+
loading: Loading | null;
|
|
15
|
+
/** The working folder the list is for. Without one, nothing a folder brings is listed. */
|
|
16
|
+
cwd: string | null;
|
|
17
|
+
/** The folder every account shares. */
|
|
18
|
+
sharedDir: string;
|
|
19
|
+
/** The folder of packages kept with a person's data. */
|
|
20
|
+
packagesDir: string;
|
|
21
|
+
/** What each hooks file listens for and how its last run went, by its path. */
|
|
22
|
+
hooks: Record<string, HookStatus>;
|
|
23
|
+
registered: Record<string, Registered>;
|
|
24
|
+
/** The choices a person made about what is switched on. */
|
|
25
|
+
attachments: Attachments;
|
|
26
|
+
/** Whose list this is. With an agent or a project, each state is what that caller gets. */
|
|
27
|
+
caller: AttachScope;
|
|
28
|
+
}
|
|
29
|
+
export declare function catalogue(input: CatalogueInput): Plugin[];
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// Every plugin there is, from every source, as one list. Building it reads files and settings;
|
|
2
|
+
// it runs no plugin's code and changes nothing.
|
|
3
|
+
import { basename, dirname } from 'node:path';
|
|
4
|
+
import { projectsOrNone } from "../core/projects.js";
|
|
5
|
+
import { compareText } from "../core/text.js";
|
|
6
|
+
import { attached, describe } from "./attachments.js";
|
|
7
|
+
import { settingValue } from "./firstParty.js";
|
|
8
|
+
import { BUILTIN_PREFIX } from "./discover.js";
|
|
9
|
+
import { registrationHash } from "./runtime.js";
|
|
10
|
+
import { contributionId, describeFound, FOUND_KINDS, packageManifest, pluginIdOf } from "./identity.js";
|
|
11
|
+
import { loads, switchable, trustedBy } from "./plugins.js";
|
|
12
|
+
const contribution = (plugin, kind, name, rest = {}) => ({
|
|
13
|
+
id: contributionId(plugin, kind, name),
|
|
14
|
+
kind,
|
|
15
|
+
name,
|
|
16
|
+
description: '',
|
|
17
|
+
path: null,
|
|
18
|
+
state: 'on',
|
|
19
|
+
scope: null,
|
|
20
|
+
attachment: null,
|
|
21
|
+
registered: null,
|
|
22
|
+
problem: null,
|
|
23
|
+
background: false,
|
|
24
|
+
...rest
|
|
25
|
+
});
|
|
26
|
+
function fromDescriptor(descriptor, source, attachments = null, caller = {}) {
|
|
27
|
+
const switchable = descriptor.switchable && attachments ? descriptor.switchable : null;
|
|
28
|
+
const on = switchable ? attached(attachments, [descriptor.id], caller, switchable.on) : true;
|
|
29
|
+
return {
|
|
30
|
+
id: descriptor.id,
|
|
31
|
+
title: descriptor.title,
|
|
32
|
+
description: descriptor.description,
|
|
33
|
+
version: null,
|
|
34
|
+
source,
|
|
35
|
+
path: null,
|
|
36
|
+
runsCode: !!descriptor.code?.length,
|
|
37
|
+
trust: 'none',
|
|
38
|
+
code: null,
|
|
39
|
+
install: null,
|
|
40
|
+
extends: [],
|
|
41
|
+
required: descriptor.required ?? null,
|
|
42
|
+
manage: descriptor.manage ?? (descriptor.tools?.length ? 'tools' : null),
|
|
43
|
+
settings: (descriptor.settings ?? []).map((setting) => ({ ...setting, value: settingValue(setting, attachments?.settings[descriptor.id]) })),
|
|
44
|
+
connectorTemplates: descriptor.connectorTemplates ?? [],
|
|
45
|
+
attachment: switchable ? describe(attachments, descriptor.id, switchable.on) : null,
|
|
46
|
+
contributions: [
|
|
47
|
+
...(descriptor.code ?? []).map((code) => contribution(descriptor.id, 'code', code.name, { description: code.description, state: on ? 'on' : 'off' })),
|
|
48
|
+
...(descriptor.sections ?? []).map((section) => contribution(descriptor.id, 'instruction', section.name, { description: section.description ?? '' })),
|
|
49
|
+
...(descriptor.tools ?? []).map((tool) => contribution(descriptor.id, 'tool', tool.name, { description: tool.description ?? '', ...(switchable ? { state: on ? 'on' : 'off' } : {}) }))
|
|
50
|
+
]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const named = (ids, names) => ids.flatMap((id) => (names.has(id) ? [names.get(id)] : []));
|
|
54
|
+
const counted = (count, word) => (count ? `${count} ${word}${count === 1 ? '' : 's'}` : '');
|
|
55
|
+
/** Who something is switched on for, in words; `null` when it is on for nobody. */
|
|
56
|
+
function scopeWords(attachment, projects) {
|
|
57
|
+
if (attachment.global) {
|
|
58
|
+
const except = [counted(attachment.off.agentIds.length, 'agent'), ...named(attachment.off.projectIds, projects)].filter(Boolean);
|
|
59
|
+
return except.length ? `Everywhere except ${except.join(', ')}` : 'Everywhere';
|
|
60
|
+
}
|
|
61
|
+
const parts = [...named(attachment.on.projectIds, projects), counted(attachment.on.agentIds.length, 'agent')].filter(Boolean);
|
|
62
|
+
return parts.length ? parts.join(', ') : null;
|
|
63
|
+
}
|
|
64
|
+
/** A connection keeps its own scope; this is the same shape for a screen. */
|
|
65
|
+
function connectionAttachment(connection) {
|
|
66
|
+
if (!connection.enabled)
|
|
67
|
+
return null;
|
|
68
|
+
return { global: connection.global, on: { agentIds: connection.agentIds, projectIds: connection.projectIds }, off: { agentIds: connection.excludedAgentIds, projectIds: connection.excludedProjectIds } };
|
|
69
|
+
}
|
|
70
|
+
function connectionScope(connection) {
|
|
71
|
+
if (!connection.enabled)
|
|
72
|
+
return null;
|
|
73
|
+
if (connection.global)
|
|
74
|
+
return 'Everywhere';
|
|
75
|
+
const parts = [counted(connection.agentIds.length, 'agent'), counted(connection.projectIds.length, 'project')].filter(Boolean);
|
|
76
|
+
return parts.length ? parts.join(', ') : null;
|
|
77
|
+
}
|
|
78
|
+
const CONTEXT_NOTES = {
|
|
79
|
+
'SYSTEM.md': "Replaces Pi's base prompt.",
|
|
80
|
+
'APPEND_SYSTEM.md': "Added to the end of Pi's base prompt."
|
|
81
|
+
};
|
|
82
|
+
/** What an extension added, in a line; or that no session has loaded it yet. */
|
|
83
|
+
function registeredLine(entry) {
|
|
84
|
+
if (!entry)
|
|
85
|
+
return 'Not loaded in a session yet, so what it adds is not known.';
|
|
86
|
+
const parts = [
|
|
87
|
+
entry.commands.length ? `commands ${entry.commands.map((name) => `/${name}`).join(', ')}` : '',
|
|
88
|
+
entry.tools.length ? `tools ${entry.tools.join(', ')}` : '',
|
|
89
|
+
entry.hooks.length ? `hooks ${entry.hooks.join(', ')}` : '',
|
|
90
|
+
entry.flags.length ? `flags ${entry.flags.map((name) => `--${name}`).join(', ')}` : '',
|
|
91
|
+
entry.shortcuts.length ? `shortcuts ${entry.shortcuts.join(', ')}` : ''
|
|
92
|
+
].filter(Boolean);
|
|
93
|
+
return parts.length ? `Adds ${parts.join('; ')}.` : 'Registers nothing a session can see.';
|
|
94
|
+
}
|
|
95
|
+
function foundContribution(plugin, item, trusted, input, projects) {
|
|
96
|
+
const kind = FOUND_KINDS[item.kind];
|
|
97
|
+
const { name, description } = describeFound(item);
|
|
98
|
+
const id = contributionId(plugin, kind, name);
|
|
99
|
+
// A hook runs for everyone or not at all: it follows its plugin's switch for everyone and has none of its own.
|
|
100
|
+
const attachment = switchable(item) && item.kind !== 'hook' ? describe(input.attachments, id, attached(input.attachments, [plugin], {}, true)) : null;
|
|
101
|
+
const on = item.kind === 'hook' ? attached(input.attachments, [plugin], {}, true) : !attachment || attached(input.attachments, [id, plugin], input.caller, true);
|
|
102
|
+
const state = !item.enabled || !on ? 'off' : loads(item, trusted) ? 'on' : 'untrusted';
|
|
103
|
+
const rest = { state, attachment, scope: attachment ? scopeWords(attachment, projects) : null };
|
|
104
|
+
if (item.path.startsWith(BUILTIN_PREFIX))
|
|
105
|
+
return contribution(plugin, kind, name, { ...rest, description: 'Built into the pi command. A terminal session loads it; other sessions do not have it.' });
|
|
106
|
+
if (item.kind === 'extension') {
|
|
107
|
+
const observed = input.registered[item.path];
|
|
108
|
+
const hash = input.loading ? registrationHash(input.loading, item.path) : null;
|
|
109
|
+
const current = observed && hash !== null && observed.hash === hash ? observed : undefined;
|
|
110
|
+
return contribution(plugin, kind, name, { ...rest, description: registeredLine(current), path: item.path, registered: current ?? null });
|
|
111
|
+
}
|
|
112
|
+
if (item.kind === 'hook') {
|
|
113
|
+
const status = input.hooks[item.path];
|
|
114
|
+
const events = status?.events ?? [];
|
|
115
|
+
const described = events.length ? `Runs in the background after: ${events.join(', ')}.` : state === 'on' ? 'Runs in the background. It has not said what it listens for yet.' : 'Runs in the background once it is switched on for everyone and trusted.';
|
|
116
|
+
return contribution(plugin, kind, name, { ...rest, description: described, path: item.path, problem: status?.lastError ?? null, background: true });
|
|
117
|
+
}
|
|
118
|
+
if (item.kind === 'context')
|
|
119
|
+
return contribution(plugin, kind, name, { ...rest, description: CONTEXT_NOTES[basename(item.path)] ?? 'Read by Pi at the start of every session in this folder.', path: item.path });
|
|
120
|
+
return contribution(plugin, kind, name, { ...rest, description: description ?? '', path: item.path });
|
|
121
|
+
}
|
|
122
|
+
const empty = (id, title, description, source, path) => ({ id, title, description, version: null, source, path, runsCode: false, trust: 'none', code: null, install: null, extends: [], required: null, manage: 'files', settings: [], connectorTemplates: [], attachment: null, contributions: [] });
|
|
123
|
+
export function catalogue(input) {
|
|
124
|
+
const plugins = new Map();
|
|
125
|
+
for (const descriptor of input.descriptors)
|
|
126
|
+
plugins.set(descriptor.id, fromDescriptor(descriptor, descriptor.id === 'pi' ? 'pi' : input.application.has(descriptor.id) ? 'application' : 'builtin', input.attachments, input.caller));
|
|
127
|
+
const apps = plugins.get('connected-apps');
|
|
128
|
+
if (apps) {
|
|
129
|
+
for (const connection of input.connections) {
|
|
130
|
+
const scope = connectionScope(connection);
|
|
131
|
+
apps.contributions.push({ ...contribution(apps.id, 'connection', connection.name || connection.id, { description: connection.serverName ?? connection.url ?? connection.command, state: scope ? 'on' : 'off', scope, attachment: connectionAttachment(connection) }), id: `${apps.id}/connection/${connection.id}` });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const projects = new Map(projectsOrNone(input.root).map((project) => [project.id, project.name]));
|
|
135
|
+
const loading = input.loading;
|
|
136
|
+
const trusted = trustedBy(loading);
|
|
137
|
+
for (const item of loading?.found ?? []) {
|
|
138
|
+
if (item.project && !input.cwd)
|
|
139
|
+
continue;
|
|
140
|
+
const id = pluginIdOf(item);
|
|
141
|
+
let plugin = plugins.get(id);
|
|
142
|
+
if (!plugin) {
|
|
143
|
+
if (item.origin === 'builtin')
|
|
144
|
+
continue;
|
|
145
|
+
if (item.packageRoot) {
|
|
146
|
+
const manifest = packageManifest(item.packageRoot);
|
|
147
|
+
// A package a working folder's settings name is that folder's to remove, not a person's install.
|
|
148
|
+
const install = item.project ? null : item.packageRoot.startsWith(`${input.packagesDir}/`) ? { kind: 'folder', source: item.packageRoot } : item.source ? { kind: 'settings', source: item.source } : null;
|
|
149
|
+
// Only parts that exist can be extended; a made-up name is dropped.
|
|
150
|
+
const extended = manifest.extends.filter((part) => input.descriptors.some((descriptor) => descriptor.id === part));
|
|
151
|
+
plugin = { ...empty(id, manifest.name, manifest.description, item.project ? 'project' : 'package', item.packageRoot), version: manifest.version, install, extends: extended, connectorTemplates: manifest.connectorTemplates };
|
|
152
|
+
}
|
|
153
|
+
else if (item.origin === 'home')
|
|
154
|
+
plugin = empty(id, 'Home folder skills', 'Skills in the .agents folder of your home folder. Pi reads them for every account.', 'home', dirname(dirname(item.path)));
|
|
155
|
+
else if (item.origin === 'project')
|
|
156
|
+
plugin = empty(id, 'Project folder', 'Found in the working folder: its .pi and .agents folders, and the instruction files Pi reads on the way up from it.', 'project', input.cwd);
|
|
157
|
+
else
|
|
158
|
+
plugin = empty(id, 'Shared Pi folder', 'Extensions, skills, prompts and instruction files in the folder every account shares.', 'shared', input.sharedDir);
|
|
159
|
+
plugin.attachment = describe(input.attachments, id, true);
|
|
160
|
+
plugins.set(id, plugin);
|
|
161
|
+
}
|
|
162
|
+
const added = foundContribution(plugin.id, item, trusted, input, projects);
|
|
163
|
+
if (plugin.contributions.some((existing) => existing.id === added.id))
|
|
164
|
+
continue;
|
|
165
|
+
plugin.contributions.push(added);
|
|
166
|
+
if (item.kind === 'extension' && added.registered) {
|
|
167
|
+
const registered = added.registered;
|
|
168
|
+
const append = (kind, name, rest = {}) => {
|
|
169
|
+
const id = contributionId(plugin.id, kind, name);
|
|
170
|
+
if (!plugin.contributions.some((existing) => existing.id === id))
|
|
171
|
+
plugin.contributions.push(contribution(plugin.id, kind, name, { state: added.state, description: `Registered by ${added.name}. Observed ${registered.seenAt ?? 'in a session'}.`, ...rest }));
|
|
172
|
+
};
|
|
173
|
+
for (const name of registered.tools)
|
|
174
|
+
append('tool', name);
|
|
175
|
+
for (const name of registered.commands)
|
|
176
|
+
append('command', name);
|
|
177
|
+
for (const resource of registered.resources ?? []) {
|
|
178
|
+
const id = contributionId(plugin.id, resource.kind, resource.name);
|
|
179
|
+
const on = attached(input.attachments, [id, plugin.id], input.caller, true);
|
|
180
|
+
append(resource.kind, resource.name, { path: resource.path, state: on ? added.state : 'off', attachment: describe(input.attachments, id, attached(input.attachments, [plugin.id], {}, true)) });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (added.kind === 'code' && item.origin !== 'builtin') {
|
|
184
|
+
plugin.runsCode = true;
|
|
185
|
+
// A working folder's code and an installed package's wait for trust; a loose file in the
|
|
186
|
+
// shared folder was placed by the person.
|
|
187
|
+
const code = item.project ? loading?.projectCode : item.packageRoot ? loading?.packageCode[item.packageRoot] : null;
|
|
188
|
+
if (code) {
|
|
189
|
+
plugin.trust = code.trusted ? 'trusted' : 'untrusted';
|
|
190
|
+
plugin.code = { hash: code.hash, files: code.files };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const order = ['project', 'package', 'shared', 'home', 'yours', 'application', 'builtin', 'pi'];
|
|
195
|
+
return [...plugins.values()].sort((left, right) => order.indexOf(left.source) - order.indexOf(right.source) || compareText(left.title, right.title));
|
|
196
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Harness, type HarnessOptions } from "../harness.js";
|
|
2
|
+
export declare const PLUGINS_USAGE = "Usage: xagent plugins <command> [options]\n\n list Every plugin and whether it is on\n show <plugin id> One plugin: what it brings, where it is on, its code\n install <source> A folder, an npm name, or a git address. It arrives off and untrusted\n remove <plugin id> Remove a plugin you installed\n update [plugin id] Fetch a newer version of one installed plugin, or of all\n attach <id> Switch a plugin, or one thing it brings, on\n detach <id> Switch it off\n trust <plugin id> [--yes] Show the files of its code, then trust them\n untrust <plugin id> Stop trusting its code\n\nOptions:\n --data <dir> Data directory (default: ~/.xingular-harness/data)\n --state <dir> State directory (default: ~/.xingular-harness/state)\n --cwd <dir> Also list what this working folder brings\n --project <id> attach/detach for one project instead of everywhere\n --agent <id> attach/detach for one agent instead of everywhere\n";
|
|
3
|
+
export interface PluginsCliDependencies {
|
|
4
|
+
home?: string;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
write?: (text: string) => void;
|
|
7
|
+
/** Asks the person a question and returns what they typed. Without it, a trust needs `--yes`. */
|
|
8
|
+
ask?: (question: string) => Promise<string>;
|
|
9
|
+
createHarness?: (options: HarnessOptions) => Harness;
|
|
10
|
+
}
|
|
11
|
+
export declare function runPluginsCli(argv: string[], dependencies?: PluginsCliDependencies): Promise<number>;
|
|
12
|
+
/** Asks on the terminal, when there is one to ask on. */
|
|
13
|
+
export declare function terminalAsk(): ((question: string) => Promise<string>) | undefined;
|