@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,22 @@
|
|
|
1
|
+
import type { Harness } from "../harness.js";
|
|
2
|
+
import type { CallerContext } from "../core/caller.js";
|
|
3
|
+
import type { Launch } from "../prompt/compile.js";
|
|
4
|
+
import * as pluginApi from "../plugins/api.js";
|
|
5
|
+
import type { CapabilityCatalogue, CapabilityScope, CapabilitySet } from "./types.js";
|
|
6
|
+
export interface ListParams extends CapabilityScope {
|
|
7
|
+
}
|
|
8
|
+
export interface InventoryParams extends CapabilityScope {
|
|
9
|
+
context?: CallerContext;
|
|
10
|
+
launch?: Launch;
|
|
11
|
+
tools?: string[];
|
|
12
|
+
connections?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function list(harness: Harness, params?: ListParams): Promise<CapabilityCatalogue>;
|
|
15
|
+
/** The resolved callable set for one caller, based on the stores and caller-supplied tool list. */
|
|
16
|
+
export declare function resolve(harness: Harness, params: ListParams & {
|
|
17
|
+
tools?: readonly string[];
|
|
18
|
+
}): Promise<CapabilitySet>;
|
|
19
|
+
export declare function toolIntersection(parent: CapabilitySet, assignee: CapabilitySet, taskTools?: readonly string[]): CapabilitySet;
|
|
20
|
+
export declare function inventory(harness: Harness, params?: InventoryParams): Promise<import("../index.js").Inventory>;
|
|
21
|
+
export declare function attach(harness: Harness, params: pluginApi.AttachParams, on: boolean): Promise<CapabilityCatalogue>;
|
|
22
|
+
export declare function switchCapability(harness: Harness, params: pluginApi.AttachParams, on: boolean): Promise<CapabilityCatalogue>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// A generic view of what is available to a caller. The existing plugin, registry, and connector
|
|
2
|
+
// stores remain the source of truth; this module gives hosts one capability-shaped contract.
|
|
3
|
+
import { invalid } from "../core/errors.js";
|
|
4
|
+
import * as pluginApi from "../plugins/api.js";
|
|
5
|
+
const unique = (values) => [...new Set(values.filter((value) => value.length > 0))];
|
|
6
|
+
function contributions(plugins) {
|
|
7
|
+
return plugins.flatMap((plugin) => plugin.contributions.map((item) => ({
|
|
8
|
+
id: item.id,
|
|
9
|
+
pluginId: plugin.id,
|
|
10
|
+
kind: item.kind,
|
|
11
|
+
name: item.name,
|
|
12
|
+
description: item.description,
|
|
13
|
+
source: plugin.source,
|
|
14
|
+
state: item.state,
|
|
15
|
+
attachment: item.attachment
|
|
16
|
+
})));
|
|
17
|
+
}
|
|
18
|
+
export async function list(harness, params = {}) {
|
|
19
|
+
const plugins = await pluginApi.list(harness, params);
|
|
20
|
+
return { plugins, capabilities: contributions(plugins) };
|
|
21
|
+
}
|
|
22
|
+
/** The resolved callable set for one caller, based on the stores and caller-supplied tool list. */
|
|
23
|
+
export async function resolve(harness, params) {
|
|
24
|
+
const caller = { agentId: params.agentId ?? null, projectId: params.projectId ?? null };
|
|
25
|
+
const catalogue = await list(harness, params);
|
|
26
|
+
const connectors = harness.apps.connections.forScope(caller).map((connection) => connection.id);
|
|
27
|
+
return {
|
|
28
|
+
version: 1,
|
|
29
|
+
tools: unique(params.tools ?? []),
|
|
30
|
+
connectors: unique(connectors),
|
|
31
|
+
contributions: catalogue.capabilities.filter((item) => item.state === 'on').map((item) => item.id)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function toolIntersection(parent, assignee, taskTools) {
|
|
35
|
+
const permitted = taskTools === undefined ? null : new Set(taskTools);
|
|
36
|
+
return {
|
|
37
|
+
version: 1,
|
|
38
|
+
tools: parent.tools.filter((tool) => assignee.tools.includes(tool) && (!permitted || permitted.has(tool))),
|
|
39
|
+
connectors: parent.connectors.filter((id) => assignee.connectors.includes(id)),
|
|
40
|
+
contributions: parent.contributions.filter((id) => assignee.contributions.includes(id))
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function inventory(harness, params = {}) {
|
|
44
|
+
return pluginApi.inventoryFor(harness, params);
|
|
45
|
+
}
|
|
46
|
+
export async function attach(harness, params, on) {
|
|
47
|
+
const plugins = await pluginApi.attach(harness, params, on);
|
|
48
|
+
return { plugins, capabilities: contributions(plugins) };
|
|
49
|
+
}
|
|
50
|
+
export async function switchCapability(harness, params, on) {
|
|
51
|
+
if (!params.id.trim())
|
|
52
|
+
throw invalid('A capability id is required.');
|
|
53
|
+
return attach(harness, params, on);
|
|
54
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CapabilitySet } from "./types.js";
|
|
2
|
+
export interface RunCapabilitySnapshot {
|
|
3
|
+
version: 1;
|
|
4
|
+
caller: {
|
|
5
|
+
agentId: string | null;
|
|
6
|
+
projectId: string | null;
|
|
7
|
+
};
|
|
8
|
+
tools: string[];
|
|
9
|
+
connectors: string[];
|
|
10
|
+
contributions: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function capabilitySet(value: unknown): CapabilitySet;
|
|
13
|
+
/** Writes a run's capability set once. A resumed or duplicate launch cannot replace it. */
|
|
14
|
+
export declare function freezeRun(root: string, runId: string, caller: {
|
|
15
|
+
agentId?: string | null;
|
|
16
|
+
projectId?: string | null;
|
|
17
|
+
}, set: CapabilitySet): RunCapabilitySnapshot;
|
|
18
|
+
export declare function loadRun(root: string, runId: string): RunCapabilitySnapshot | null;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { HarnessError, invalid } from "../core/errors.js";
|
|
4
|
+
import { readJson, safeId, writeJson } from "../core/fs.js";
|
|
5
|
+
const path = (root, runId) => join(root, 'runs', safeId(runId), 'capabilities.json');
|
|
6
|
+
function strings(value) {
|
|
7
|
+
return Array.isArray(value) ? [...new Set(value.filter((item) => typeof item === 'string' && item.length > 0))] : [];
|
|
8
|
+
}
|
|
9
|
+
export function capabilitySet(value) {
|
|
10
|
+
if (!value || typeof value !== 'object' || value.version !== 1)
|
|
11
|
+
throw invalid('A capability set must use version 1.');
|
|
12
|
+
const record = value;
|
|
13
|
+
return { version: 1, tools: strings(record.tools), connectors: strings(record.connectors), contributions: strings(record.contributions) };
|
|
14
|
+
}
|
|
15
|
+
/** Writes a run's capability set once. A resumed or duplicate launch cannot replace it. */
|
|
16
|
+
export function freezeRun(root, runId, caller, set) {
|
|
17
|
+
const target = path(root, runId);
|
|
18
|
+
const snapshot = {
|
|
19
|
+
version: 1,
|
|
20
|
+
caller: { agentId: caller.agentId ?? null, projectId: caller.projectId ?? null },
|
|
21
|
+
tools: strings(set.tools),
|
|
22
|
+
connectors: strings(set.connectors),
|
|
23
|
+
contributions: strings(set.contributions)
|
|
24
|
+
};
|
|
25
|
+
const existing = existsSync(target) ? readJson(target) : null;
|
|
26
|
+
if (existing) {
|
|
27
|
+
if (JSON.stringify(existing) !== JSON.stringify(snapshot))
|
|
28
|
+
throw new HarnessError('capabilities_frozen', 'This run already has a different frozen capability set.');
|
|
29
|
+
return existing;
|
|
30
|
+
}
|
|
31
|
+
writeJson(target, snapshot);
|
|
32
|
+
return snapshot;
|
|
33
|
+
}
|
|
34
|
+
export function loadRun(root, runId) {
|
|
35
|
+
const stored = readJson(path(root, runId));
|
|
36
|
+
if (!stored || typeof stored !== 'object' || stored.version !== 1)
|
|
37
|
+
return null;
|
|
38
|
+
const record = stored;
|
|
39
|
+
const caller = record.caller && typeof record.caller === 'object' ? record.caller : {};
|
|
40
|
+
return {
|
|
41
|
+
version: 1,
|
|
42
|
+
caller: { agentId: typeof caller.agentId === 'string' ? caller.agentId : null, projectId: typeof caller.projectId === 'string' ? caller.projectId : null },
|
|
43
|
+
tools: strings(record.tools),
|
|
44
|
+
connectors: strings(record.connectors),
|
|
45
|
+
contributions: strings(record.contributions)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AttachScope, Attachment } from "../plugins/attachments.js";
|
|
2
|
+
import type { ContributionKind, ContributionState, PluginSource } from "../plugins/types.js";
|
|
3
|
+
export type CapabilityKind = ContributionKind | 'plugin';
|
|
4
|
+
/** One item the caller can switch on or off, or that a plugin makes available. */
|
|
5
|
+
export interface Capability {
|
|
6
|
+
id: string;
|
|
7
|
+
pluginId: string;
|
|
8
|
+
kind: CapabilityKind;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
source: PluginSource;
|
|
12
|
+
state: ContributionState;
|
|
13
|
+
attachment: Attachment | null;
|
|
14
|
+
}
|
|
15
|
+
export interface CapabilityCatalogue {
|
|
16
|
+
plugins: import("../plugins/types.js").Plugin[];
|
|
17
|
+
capabilities: Capability[];
|
|
18
|
+
}
|
|
19
|
+
/** The callable capabilities a run starts with. Permission to run still goes through the gate. */
|
|
20
|
+
export interface CapabilitySet {
|
|
21
|
+
version: 1;
|
|
22
|
+
tools: string[];
|
|
23
|
+
connectors: string[];
|
|
24
|
+
contributions: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface CapabilityScope extends AttachScope {
|
|
27
|
+
cwd?: string | null;
|
|
28
|
+
accountId?: string | null;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/sdk/cli.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// The `xagent` command.
|
|
3
|
+
//
|
|
4
|
+
// xagent serve --state <dir> [--data <dir>] [--name <product>] [--builtins <dir>]…
|
|
5
|
+
// [--host-secrets] [--host-policy] [--host-tools] [--host-directory]
|
|
6
|
+
// Serves the harness to a host process over stdin/stdout (newline-delimited JSON).
|
|
7
|
+
// xagent wiki <command> Project notes, skills and history, from inside a terminal session.
|
|
8
|
+
// xagent refine <command> Refine a variant from evidence (refine demo needs no model).
|
|
9
|
+
// xagent mcp <command> Connected apps, from inside a terminal session.
|
|
10
|
+
// xagent plugins <command> List, install, switch and trust plugins.
|
|
11
|
+
// xagent web <command> Search keys for web_search.
|
|
12
|
+
// xagent browser <command> How the agent's browser runs.
|
|
13
|
+
// xagent worktree <command> Managed git worktrees of the repository you are in.
|
|
14
|
+
import { resolve } from 'node:path';
|
|
15
|
+
import manifest from "../../package.json" with { type: 'json' };
|
|
16
|
+
import { log } from "./core/bus.js";
|
|
17
|
+
import { createHarness } from "./harness.js";
|
|
18
|
+
import { runPluginsCli, terminalAsk } from "./plugins/cli.js";
|
|
19
|
+
import { runHubCli } from "./hub/cli.js";
|
|
20
|
+
import { runRefineCli } from "./refine/cli.js";
|
|
21
|
+
import { runBrowserCli, runWebCli } from "./world/cli.js";
|
|
22
|
+
import { remoteDirectory, remotePolicy, remoteSecrets, remoteTools } from "./server/remote.js";
|
|
23
|
+
import { RpcPeer, stdioTransport } from "./server/rpc.js";
|
|
24
|
+
import { attach } from "./server/serve.js";
|
|
25
|
+
import { runAppsCli, runWikiCli } from "./terminal/cli.js";
|
|
26
|
+
import { runStandaloneTerminal, standaloneArguments } from "./terminal/standalone.js";
|
|
27
|
+
import { runWorktreeCli } from "./worktrees/cli.js";
|
|
28
|
+
const USAGE = `Usage: xagent [--data <dir>] [--state <dir>]
|
|
29
|
+
xagent <terminal | serve | wiki | mcp | plugins | hub | refine | web | browser | worktree> [arguments]
|
|
30
|
+
|
|
31
|
+
--version Print the package version
|
|
32
|
+
(no command) Start the interactive Harness terminal
|
|
33
|
+
terminal Start the interactive Harness terminal
|
|
34
|
+
serve --state <dir> [--data <dir>] [--name <product>] [--builtins <dir>]
|
|
35
|
+
[--host-secrets] [--host-policy] [--host-tools] [--host-directory]
|
|
36
|
+
Serve the harness over newline-delimited JSON
|
|
37
|
+
wiki <command> Wiki, skill and history commands for a terminal session
|
|
38
|
+
mcp <command> Connected-app commands for a terminal session
|
|
39
|
+
plugins <command> List, install, switch and trust plugins (plugins help)
|
|
40
|
+
hub <command> Browse and install curated items (hub help)
|
|
41
|
+
refine <command> Refine a harness from evidence (refine demo, refine run)
|
|
42
|
+
web <command> Search keys for the web tools (web help)
|
|
43
|
+
browser <command> How the agent's browser runs (browser help)
|
|
44
|
+
worktree <command> Managed git worktrees (worktree help)
|
|
45
|
+
|
|
46
|
+
Standalone terminal options:
|
|
47
|
+
--data <dir> Data directory (installed default: ~/.xingular-harness/data;
|
|
48
|
+
npm run dev default: ~/.xingular-harness-dev/data)
|
|
49
|
+
--state <dir> State directory (installed default: ~/.xingular-harness/state;
|
|
50
|
+
npm run dev default: ~/.xingular-harness-dev/state)
|
|
51
|
+
--worktree [name], -w [name]
|
|
52
|
+
Start in a new managed worktree of this repository, or in
|
|
53
|
+
the named one
|
|
54
|
+
`;
|
|
55
|
+
function flags(argv) {
|
|
56
|
+
const values = {};
|
|
57
|
+
const switches = new Set();
|
|
58
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
59
|
+
const name = argv[index];
|
|
60
|
+
if (!name.startsWith('--'))
|
|
61
|
+
continue;
|
|
62
|
+
const next = argv[index + 1];
|
|
63
|
+
if (next !== undefined && !next.startsWith('--')) {
|
|
64
|
+
;
|
|
65
|
+
(values[name.slice(2)] ??= []).push(next);
|
|
66
|
+
index += 1;
|
|
67
|
+
}
|
|
68
|
+
else
|
|
69
|
+
switches.add(name.slice(2));
|
|
70
|
+
}
|
|
71
|
+
return { values, switches };
|
|
72
|
+
}
|
|
73
|
+
function serveCommand(argv) {
|
|
74
|
+
const { values, switches } = flags(argv);
|
|
75
|
+
const stateArgument = values.state?.[0];
|
|
76
|
+
if (!stateArgument) {
|
|
77
|
+
process.stderr.write('serve needs --state <dir>.\n');
|
|
78
|
+
return Promise.resolve(2);
|
|
79
|
+
}
|
|
80
|
+
// The socket path is built from this folder, so a relative one would depend on where the host ran.
|
|
81
|
+
const stateDir = resolve(stateArgument);
|
|
82
|
+
const peer = new RpcPeer(stdioTransport());
|
|
83
|
+
const options = {
|
|
84
|
+
stateDir,
|
|
85
|
+
dataRoot: values.data?.[0] ? resolve(values.data[0]) : null,
|
|
86
|
+
productName: values.name?.[0],
|
|
87
|
+
builtins: values.builtins,
|
|
88
|
+
...(switches.has('host-secrets') ? { secrets: remoteSecrets(peer) } : {}),
|
|
89
|
+
...(switches.has('host-policy') ? { policy: remotePolicy(peer) } : {}),
|
|
90
|
+
...(switches.has('host-directory') ? { directory: remoteDirectory(peer) } : {})
|
|
91
|
+
};
|
|
92
|
+
const harness = createHarness(options);
|
|
93
|
+
if (switches.has('host-tools'))
|
|
94
|
+
harness.sessions.provide(remoteTools(peer));
|
|
95
|
+
attach(harness, peer);
|
|
96
|
+
return new Promise((resolve) => {
|
|
97
|
+
let closing = false;
|
|
98
|
+
const shutdown = () => {
|
|
99
|
+
if (closing)
|
|
100
|
+
return;
|
|
101
|
+
closing = true;
|
|
102
|
+
void Promise.race([harness.close(), new Promise((done) => setTimeout(done, 5000))]).then(() => resolve(0));
|
|
103
|
+
};
|
|
104
|
+
peer.handle('harness.shutdown', () => void setImmediate(shutdown));
|
|
105
|
+
process.stdin.on('end', shutdown);
|
|
106
|
+
process.on('SIGTERM', shutdown);
|
|
107
|
+
process.on('SIGINT', shutdown);
|
|
108
|
+
peer.send({ notice: { type: 'ready' } });
|
|
109
|
+
log('ready');
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
async function main() {
|
|
113
|
+
const argv = process.argv.slice(2);
|
|
114
|
+
if (argv.length === 1 && (argv[0] === '--version' || argv[0] === '-v')) {
|
|
115
|
+
process.stdout.write(`${manifest.version}\n`);
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
const [command, ...rest] = argv;
|
|
119
|
+
if (argv.includes('--help') || argv.includes('-h')) {
|
|
120
|
+
process.stdout.write(USAGE);
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
const terminalArgs = standaloneArguments(argv);
|
|
124
|
+
if (terminalArgs !== null)
|
|
125
|
+
return runStandaloneTerminal(terminalArgs);
|
|
126
|
+
if (command === 'serve')
|
|
127
|
+
return serveCommand(rest);
|
|
128
|
+
if (command === 'wiki')
|
|
129
|
+
return runWikiCli(rest);
|
|
130
|
+
if (command === 'mcp')
|
|
131
|
+
return runAppsCli(rest);
|
|
132
|
+
if (command === 'plugins')
|
|
133
|
+
return runPluginsCli(rest, { ask: terminalAsk() });
|
|
134
|
+
if (command === 'hub')
|
|
135
|
+
return runHubCli(rest);
|
|
136
|
+
if (command === 'refine')
|
|
137
|
+
return runRefineCli(rest);
|
|
138
|
+
if (command === 'web')
|
|
139
|
+
return runWebCli(rest);
|
|
140
|
+
if (command === 'browser')
|
|
141
|
+
return runBrowserCli(rest);
|
|
142
|
+
if (command === 'worktree')
|
|
143
|
+
return runWorktreeCli(rest);
|
|
144
|
+
process.stdout.write(USAGE);
|
|
145
|
+
return command ? 2 : 0;
|
|
146
|
+
}
|
|
147
|
+
void main().then((code) => process.exit(code), (error) => {
|
|
148
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
149
|
+
process.exit(1);
|
|
150
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface Notice {
|
|
2
|
+
/** `accounts.changed`, `accounts.login`, `accounts.loginEvent`, `wiki.changed`, `wiki.maintenance`, … */
|
|
3
|
+
type: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export type NoticeListener = (notice: Notice) => void;
|
|
7
|
+
export declare class Bus {
|
|
8
|
+
private readonly listeners;
|
|
9
|
+
on(listener: NoticeListener): () => void;
|
|
10
|
+
emit(notice: Notice): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Sends diagnostics somewhere other than stderr, or back to stderr with `null`. A host whose stderr is
|
|
14
|
+
* the terminal a frontend is drawing on must not write into it, so it sets a sink.
|
|
15
|
+
*/
|
|
16
|
+
export declare function setLogSink(sink: ((text: string) => void) | null): void;
|
|
17
|
+
/** One line of diagnostics. Diagnostics go to stderr by default; stdout may be carrying a protocol. */
|
|
18
|
+
export declare function logLine(text: string): void;
|
|
19
|
+
/** Redacts common credentials and URL query values before diagnostic text is persisted or shown. */
|
|
20
|
+
export declare function redactLogText(text: string): string;
|
|
21
|
+
/** Records useful failure detail without persisting credentials or response bodies. */
|
|
22
|
+
export declare function logDiagnostic(scope: string, error: unknown, metadata?: Record<string, unknown>): void;
|
|
23
|
+
export declare function log(...parts: unknown[]): void;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Notices: what the harness tells whoever embeds it. Run events travel separately, through the
|
|
2
|
+
// run tracker; a notice says that some state changed and should be read again.
|
|
3
|
+
export class Bus {
|
|
4
|
+
listeners = new Set();
|
|
5
|
+
on(listener) {
|
|
6
|
+
this.listeners.add(listener);
|
|
7
|
+
return () => this.listeners.delete(listener);
|
|
8
|
+
}
|
|
9
|
+
emit(notice) {
|
|
10
|
+
for (const listener of this.listeners) {
|
|
11
|
+
try {
|
|
12
|
+
listener(notice);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
log('a notice listener failed', error instanceof Error ? error.message : String(error));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let logSink = null;
|
|
21
|
+
/**
|
|
22
|
+
* Sends diagnostics somewhere other than stderr, or back to stderr with `null`. A host whose stderr is
|
|
23
|
+
* the terminal a frontend is drawing on must not write into it, so it sets a sink.
|
|
24
|
+
*/
|
|
25
|
+
export function setLogSink(sink) {
|
|
26
|
+
logSink = sink;
|
|
27
|
+
}
|
|
28
|
+
/** One line of diagnostics. Diagnostics go to stderr by default; stdout may be carrying a protocol. */
|
|
29
|
+
export function logLine(text) {
|
|
30
|
+
if (logSink)
|
|
31
|
+
logSink(text);
|
|
32
|
+
else
|
|
33
|
+
process.stderr.write(`${text}\n`);
|
|
34
|
+
}
|
|
35
|
+
/** Redacts common credentials and URL query values before diagnostic text is persisted or shown. */
|
|
36
|
+
export function redactLogText(text) {
|
|
37
|
+
return text
|
|
38
|
+
.replace(/\bBearer\s+\S+/gi, 'Bearer [redacted]')
|
|
39
|
+
.replace(/(["']?(?:authorization|proxy-authorization|cookie|set-cookie|x-[\w-]{0,64}(?:token|key)|[\w-]{0,64}(?:api[_-]?key|access[_-]?token|refresh[_-]?token|id[_-]?token|token|secret|password|client[_-]?secret))["']?\s*[:=]\s*["']?)[^"'\s,;]+/gi, '$1[redacted]')
|
|
40
|
+
.replace(/\b(?:sk|sess)-[A-Za-z0-9_-]{16,}\b/gi, '[redacted]')
|
|
41
|
+
.replace(/\bhttps?:\/\/[^\s"'<>]+/gi, (raw) => {
|
|
42
|
+
const punctuation = /[),.;!?]+$/.exec(raw)?.[0] ?? '';
|
|
43
|
+
const address = punctuation ? raw.slice(0, -punctuation.length) : raw;
|
|
44
|
+
try {
|
|
45
|
+
const url = new URL(address);
|
|
46
|
+
url.username = '';
|
|
47
|
+
url.password = '';
|
|
48
|
+
url.search = '';
|
|
49
|
+
url.hash = '';
|
|
50
|
+
return `${url.href}${punctuation}`;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return raw;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** Records useful failure detail without persisting credentials or response bodies. */
|
|
58
|
+
export function logDiagnostic(scope, error, metadata = {}) {
|
|
59
|
+
const failure = error instanceof Error ? error : new Error(String(error));
|
|
60
|
+
const details = {
|
|
61
|
+
...metadata,
|
|
62
|
+
message: failure.message,
|
|
63
|
+
...(failure.stack ? { stack: failure.stack } : {})
|
|
64
|
+
};
|
|
65
|
+
let serialized;
|
|
66
|
+
try {
|
|
67
|
+
serialized = JSON.stringify(details);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
serialized = JSON.stringify({ message: failure.message, stack: failure.stack });
|
|
71
|
+
}
|
|
72
|
+
logLine(`[harness] ${redactLogText(scope)} ${redactLogText(serialized)}`);
|
|
73
|
+
}
|
|
74
|
+
export function log(...parts) {
|
|
75
|
+
logLine(`[harness] ${parts.map((part) => (typeof part === 'string' ? part : JSON.stringify(part))).join(' ')}`);
|
|
76
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Project } from "./projects.js";
|
|
2
|
+
export interface CallerContext {
|
|
3
|
+
/** Opaque, host-owned policy data frozen when this session starts. The harness only forwards it to the embedding app's tool policy. */
|
|
4
|
+
policyContext?: unknown;
|
|
5
|
+
runId?: string | null;
|
|
6
|
+
sessionId?: string | null;
|
|
7
|
+
projectId?: string | null;
|
|
8
|
+
/** The caller: decides which plugins and connectors reach it, and whose history it recalls. */
|
|
9
|
+
agentId?: string | null;
|
|
10
|
+
/** Callers whose conversations this one may not recall (opaque ids from the embedding host). */
|
|
11
|
+
recallExcludeAgents?: string[] | null;
|
|
12
|
+
/** The caller's name, recorded on what it writes. */
|
|
13
|
+
agentName?: string | null;
|
|
14
|
+
/** `Chat` for an agent's own conversation, `Code` for a session in a project. */
|
|
15
|
+
actor?: string | null;
|
|
16
|
+
/** `cli` when the caller reaches the harness through a terminal command. */
|
|
17
|
+
surface?: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare const isSession: (context: CallerContext) => boolean;
|
|
20
|
+
export declare const actorOf: (context: CallerContext) => string;
|
|
21
|
+
export declare const usesCli: (context: CallerContext) => boolean;
|
|
22
|
+
export declare function projectOf(root: string, context: CallerContext): Project | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Who a session works as. The embedding application supplies this when a session starts; the
|
|
2
|
+
// harness never looks an agent up by itself. The ids are opaque to the harness.
|
|
3
|
+
import { findProject } from "./projects.js";
|
|
4
|
+
export const isSession = (context) => context.actor === 'Code';
|
|
5
|
+
export const actorOf = (context) => (isSession(context) ? 'Code' : 'Chat');
|
|
6
|
+
export const usesCli = (context) => context.surface === 'cli';
|
|
7
|
+
export function projectOf(root, context) {
|
|
8
|
+
if (!context.projectId)
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
return findProject(root, context.projectId);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Change {
|
|
2
|
+
/** The Wiki folder the entry is in. */
|
|
3
|
+
wiki: string;
|
|
4
|
+
id: string;
|
|
5
|
+
/** The file that was written. */
|
|
6
|
+
path: string;
|
|
7
|
+
/** Its new contents, front matter included. */
|
|
8
|
+
text: string;
|
|
9
|
+
actor: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
12
|
+
type Listener = (change: Change) => void;
|
|
13
|
+
export declare function noteChange(change: Change): void;
|
|
14
|
+
export declare function onChange(listener: Listener): () => void;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const listeners = new Set();
|
|
2
|
+
export function noteChange(change) {
|
|
3
|
+
for (const listener of listeners) {
|
|
4
|
+
try {
|
|
5
|
+
listener(change);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
// A listener must never break the write it is told about.
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function onChange(listener) {
|
|
13
|
+
listeners.add(listener);
|
|
14
|
+
return () => void listeners.delete(listener);
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const EFFORTS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Names the harness shows but does not own. Every lookup may answer `null`. */
|
|
2
|
+
export interface Directory {
|
|
3
|
+
/** An agent's display name. */
|
|
4
|
+
agentName(agentId: string): string | null;
|
|
5
|
+
/** The agent a conversation belongs to, when the session id is not the agent's own id. */
|
|
6
|
+
sessionAgent(sessionId: string): string | null;
|
|
7
|
+
}
|
|
8
|
+
/** The name used when an application gives none. */
|
|
9
|
+
export declare const DEFAULT_PRODUCT_NAME = "Xingular Agent";
|
|
10
|
+
export declare const EMPTY_DIRECTORY: Directory;
|
|
11
|
+
export interface HarnessEnv {
|
|
12
|
+
/** The data root: `wiki/`, `registry/`, `runs/`, `config/`, `index.sqlite`. */
|
|
13
|
+
root: string;
|
|
14
|
+
directory: Directory;
|
|
15
|
+
/** How the harness names itself to a model and in the Wiki it creates. */
|
|
16
|
+
productName: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function createEnv(root: string, options?: Partial<Omit<HarnessEnv, 'root'>>): HarnessEnv;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// What every harness module is given: where the data lives, and what the embedding application
|
|
2
|
+
// knows that the harness does not.
|
|
3
|
+
/** The name used when an application gives none. */
|
|
4
|
+
export const DEFAULT_PRODUCT_NAME = 'Xingular Agent';
|
|
5
|
+
export const EMPTY_DIRECTORY = { agentName: () => null, sessionAgent: () => null };
|
|
6
|
+
export function createEnv(root, options = {}) {
|
|
7
|
+
return { root, directory: options.directory ?? EMPTY_DIRECTORY, productName: options.productName ?? DEFAULT_PRODUCT_NAME };
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** A typed failure: a stable code, a message a person can read, and an optional hint on what to do next. */
|
|
2
|
+
export declare class HarnessError extends Error {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
readonly retryHint: string | null;
|
|
5
|
+
constructor(code: string, message: string, retryHint?: string | null);
|
|
6
|
+
withHint(hint: string): HarnessError;
|
|
7
|
+
}
|
|
8
|
+
export declare const invalid: (message: string) => HarnessError;
|
|
9
|
+
export declare const notFound: (what: string) => HarnessError;
|
|
10
|
+
export interface ErrorShape {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
retryHint?: string | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function toErrorShape(error: unknown, fallbackCode?: string): ErrorShape;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** A typed failure: a stable code, a message a person can read, and an optional hint on what to do next. */
|
|
2
|
+
export class HarnessError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
retryHint;
|
|
5
|
+
constructor(code, message, retryHint = null) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'HarnessError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.retryHint = retryHint;
|
|
10
|
+
}
|
|
11
|
+
withHint(hint) {
|
|
12
|
+
return new HarnessError(this.code, this.message, hint);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const invalid = (message) => new HarnessError('invalid_request', message);
|
|
16
|
+
export const notFound = (what) => new HarnessError('not_found', `${what} was not found.`);
|
|
17
|
+
export function toErrorShape(error, fallbackCode = 'harness_error') {
|
|
18
|
+
if (error instanceof HarnessError)
|
|
19
|
+
return { code: error.code, message: error.message, retryHint: error.retryHint };
|
|
20
|
+
const code = error?.code;
|
|
21
|
+
if (error instanceof Error && typeof code === 'string' && code.startsWith('E'))
|
|
22
|
+
return { code: 'io_error', message: error.message };
|
|
23
|
+
return { code: fallbackCode, message: error instanceof Error ? error.message : String(error) };
|
|
24
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function split(text: string): {
|
|
2
|
+
yaml: string;
|
|
3
|
+
body: string;
|
|
4
|
+
} | null;
|
|
5
|
+
/** The frontmatter as a plain object and the body, or `null` when the block is missing or is not a mapping. */
|
|
6
|
+
export declare function parse(text: string): {
|
|
7
|
+
front: Record<string, unknown>;
|
|
8
|
+
body: string;
|
|
9
|
+
} | null;
|
|
10
|
+
/** The text after a readable frontmatter block, or the whole text when there is none. */
|
|
11
|
+
export declare function bodyOf(text: string): string;
|
|
12
|
+
export declare function serialize(front: Record<string, unknown>, body: string): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Markdown files with a YAML frontmatter block (`---` … `---`), used by Wiki pages, facts, blocks and registry items.
|
|
2
|
+
import { parse as parseYaml, stringify } from 'yaml';
|
|
3
|
+
import { HarnessError } from "./errors.js";
|
|
4
|
+
export function split(text) {
|
|
5
|
+
const rest = text.startsWith('---\n') ? text.slice(4) : text.startsWith('---\r\n') ? text.slice(5) : null;
|
|
6
|
+
if (rest === null)
|
|
7
|
+
return null;
|
|
8
|
+
const end = rest.indexOf('\n---');
|
|
9
|
+
if (end < 0)
|
|
10
|
+
return null;
|
|
11
|
+
return { yaml: rest.slice(0, end), body: rest.slice(end + 4).replace(/^[\r\n]+/, '') };
|
|
12
|
+
}
|
|
13
|
+
/** The frontmatter as a plain object and the body, or `null` when the block is missing or is not a mapping. */
|
|
14
|
+
export function parse(text) {
|
|
15
|
+
const parts = split(text);
|
|
16
|
+
if (!parts)
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
const front = parseYaml(parts.yaml);
|
|
20
|
+
if (!front || typeof front !== 'object' || Array.isArray(front))
|
|
21
|
+
return null;
|
|
22
|
+
return { front: front, body: parts.body };
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** The text after a readable frontmatter block, or the whole text when there is none. */
|
|
29
|
+
export function bodyOf(text) {
|
|
30
|
+
const parts = split(text);
|
|
31
|
+
if (!parts)
|
|
32
|
+
return text;
|
|
33
|
+
try {
|
|
34
|
+
parseYaml(parts.yaml);
|
|
35
|
+
return parts.body;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return text;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function serialize(front, body) {
|
|
42
|
+
let yaml;
|
|
43
|
+
try {
|
|
44
|
+
yaml = stringify(front, { lineWidth: 0 });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new HarnessError('invalid_data', error instanceof Error ? error.message : String(error));
|
|
48
|
+
}
|
|
49
|
+
return `---\n${yaml}---\n\n${body.trimEnd()}\n`;
|
|
50
|
+
}
|