@xingular/harness 0.1.6 → 1.0.0
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 +107 -0
- package/LICENSE +202 -0
- package/NOTICE.md +60 -0
- package/README.md +265 -71
- package/THIRD_PARTY_LICENSES.md +942 -0
- package/dist/cli.js +14842 -9445
- 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/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 +17 -0
- package/dist/sdk/browser/index.js +65 -0
- package/dist/sdk/browser/network.d.ts +10 -0
- package/dist/sdk/browser/network.js +59 -0
- package/dist/sdk/browser/session.d.ts +84 -0
- package/dist/sdk/browser/session.js +192 -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 +142 -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/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 +133 -0
- package/dist/sdk/harness.js +299 -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/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/index.d.ts +63 -0
- package/dist/sdk/index.js +48 -0
- package/dist/sdk/mcp/connections.d.ts +83 -0
- package/dist/sdk/mcp/connections.js +669 -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/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 +6 -0
- package/dist/sdk/plugins/builtin.js +68 -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 +187 -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 +174 -0
- package/dist/sdk/prompt/compile.js +396 -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/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 +370 -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 +534 -0
- package/dist/sdk/sessions/contracts.js +299 -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 +36 -0
- package/dist/sdk/sessions/planMode.js +84 -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 +102 -0
- package/dist/sdk/sessions/registry.js +383 -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 +335 -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 +140 -0
- package/dist/sdk/sessions/sessions.js +394 -0
- package/dist/sdk/sessions/subagentService.d.ts +41 -0
- package/dist/sdk/sessions/subagentService.js +247 -0
- package/dist/sdk/sessions/subagents.d.ts +50 -0
- package/dist/sdk/sessions/subagents.js +68 -0
- package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
- package/dist/sdk/terminal/accountsMenu.js +392 -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/control.d.ts +4 -0
- package/dist/sdk/terminal/control.js +25 -0
- package/dist/sdk/terminal/controller.d.ts +72 -0
- package/dist/sdk/terminal/controller.js +351 -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/piExtension.d.ts +6 -0
- package/dist/sdk/terminal/piExtension.js +392 -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 +70 -0
- package/dist/sdk/terminal/socket.js +256 -0
- package/dist/sdk/terminal/standalone.d.ts +18 -0
- package/dist/sdk/terminal/standalone.js +146 -0
- package/dist/sdk/terminal/terminals.d.ts +176 -0
- package/dist/sdk/terminal/terminals.js +767 -0
- package/dist/sdk/terminal/trajectory.d.ts +10 -0
- package/dist/sdk/terminal/trajectory.js +30 -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 +7 -0
- package/dist/sdk/terminal/tui/commandPages.js +63 -0
- package/dist/sdk/terminal/tui/commands.d.ts +42 -0
- package/dist/sdk/terminal/tui/commands.js +276 -0
- package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
- package/dist/sdk/terminal/tui/dialogGeometry.js +50 -0
- package/dist/sdk/terminal/tui/dialogs.d.ts +75 -0
- package/dist/sdk/terminal/tui/dialogs.js +363 -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 +155 -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 +14 -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 +145 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +54 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.js +181 -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 +37 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.js +145 -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/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 +55 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.js +88 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +58 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.js +377 -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/questionPicker.d.ts +20 -0
- package/dist/sdk/terminal/tui/questionPicker.js +150 -0
- package/dist/sdk/terminal/tui/questions.d.ts +19 -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 +441 -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 +12 -0
- package/dist/sdk/terminal/tui/settingsModel.js +84 -0
- package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
- package/dist/sdk/terminal/tui/sideQuestion.js +197 -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 +47 -0
- package/dist/sdk/terminal/tui/ui.js +148 -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 +74 -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 +6 -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 +49 -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/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/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/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 +65 -0
- package/dist/sdk/world/world.js +80 -0
- package/dist/terminal-opentui.js +13612 -0
- package/dist/terminal-pi.js +1170 -62
- package/docs/README.md +34 -0
- package/docs/architecture/00-overview.md +159 -0
- package/docs/architecture/01-extension-points.md +78 -0
- package/docs/architecture/02-sessions-and-runs.md +146 -0
- package/docs/architecture/03-variants.md +95 -0
- package/docs/architecture/04-prompt.md +102 -0
- package/docs/architecture/05-refinement.md +107 -0
- package/docs/architecture/06-plugins-and-capabilities.md +93 -0
- package/docs/architecture/07-tools-and-gate.md +88 -0
- package/docs/architecture/08-memory-and-history.md +94 -0
- package/docs/architecture/09-accounts-and-connectors.md +90 -0
- package/docs/architecture/10-server-protocol.md +84 -0
- package/docs/architecture/11-terminal.md +81 -0
- package/docs/architecture/12-storage.md +61 -0
- package/docs/architecture/13-world-tools.md +23 -0
- package/docs/architecture/README.md +114 -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 +68 -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/README.md +76 -0
- package/docs/decisions/ADR-0001-owned-terminal.md +87 -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 +38 -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 +21 -0
- package/docs/doctor.md +74 -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 +20 -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/releases/1.0.0.md +40 -0
- package/docs/releases/README.md +36 -0
- package/docs/study/00-index.md +78 -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/btw-comparison.md +37 -0
- package/docs/study/feature-gap-review.md +42 -0
- package/docs/study/insights.md +123 -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/system-prompt-design.md +196 -0
- package/docs/terminal-tui.md +671 -0
- package/package.json +48 -12
- package/src/accounts/accounts.test.ts +0 -223
- package/src/accounts/accounts.ts +0 -522
- 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 -114
- 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 -299
- package/src/index.ts +0 -70
- 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 -289
- package/src/memory/blocks.test.ts +0 -78
- package/src/memory/blocks.ts +0 -406
- package/src/memory/caller.ts +0 -57
- 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 -330
- package/src/memory/migrate.ts +0 -79
- package/src/memory/operations.ts +0 -138
- package/src/memory/proposals.test.ts +0 -168
- package/src/memory/proposals.ts +0 -576
- package/src/memory/recall.test.ts +0 -104
- package/src/memory/recall.ts +0 -271
- 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 -314
- 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 -310
- package/src/sessions/conversation.test.ts +0 -150
- 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 -32
- package/src/sessions/pricing.ts +0 -60
- package/src/sessions/reasoningSummaries.ts +0 -59
- package/src/sessions/registry.ts +0 -294
- 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 -569
- package/src/sessions/runtimeResources.test.ts +0 -61
- package/src/sessions/sessions.test.ts +0 -455
- package/src/sessions/sessions.ts +0 -295
- package/src/skills/registry.test.ts +0 -104
- package/src/skills/registry.ts +0 -407
- package/src/terminal/cli.ts +0 -149
- package/src/terminal/client.ts +0 -74
- package/src/terminal/controller.ts +0 -227
- package/src/terminal/launch.test.ts +0 -34
- package/src/terminal/launch.ts +0 -88
- package/src/terminal/piExtension.ts +0 -210
- 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 -221
- package/src/terminal/standalone.test.ts +0 -130
- package/src/terminal/standalone.ts +0 -144
- package/src/terminal/terminal.test.ts +0 -330
- package/src/terminal/terminals.ts +0 -443
- package/src/tools/askUser.ts +0 -45
- package/src/tools/definitions.ts +0 -187
- package/src/tools/memoryTools.ts +0 -22
- package/src/tools/pluginPropose.ts +0 -41
- 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,174 @@
|
|
|
1
|
+
// Evaluating variants on a task set: one execution per version × task, recorded as an
|
|
2
|
+
// answer-free matrix of what each variant delivered. No improver, no selection, no adoption —
|
|
3
|
+
// the only executions here are the given Executor's probe runs. Records live beside a
|
|
4
|
+
// refinement's, under `<data root>/refine/<id>/`, so a sweep over variant versions or package
|
|
5
|
+
// commits reads the same record family (`refine/<id>/matrix.json`).
|
|
6
|
+
//
|
|
7
|
+
// Every row carries its comparability keys (task-prompt hash, executor name, package
|
|
8
|
+
// version, variant fingerprint), so two matrices — taken at different commits or versions —
|
|
9
|
+
// are diffable without re-reading the runs that produced them.
|
|
10
|
+
import { createHash } from 'node:crypto';
|
|
11
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { dirname, join } from 'node:path';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
14
|
+
import { now, readJson, safeId, writeJson } from "../core/fs.js";
|
|
15
|
+
import * as store from "../variant/store.js";
|
|
16
|
+
import { PI_SURFACE } from "../variant/surface.js";
|
|
17
|
+
import { writeVariant } from "../variant/variant.js";
|
|
18
|
+
import { assertVariantHasNoGraderVerdicts } from "./evidence.js";
|
|
19
|
+
import { mapLimit } from "./recursion.js";
|
|
20
|
+
export function matrixDir(root, id) {
|
|
21
|
+
return join(root, 'refine', safeId(id));
|
|
22
|
+
}
|
|
23
|
+
export function readMatrix(root, id) {
|
|
24
|
+
return readJson(join(matrixDir(root, id), 'matrix.json'));
|
|
25
|
+
}
|
|
26
|
+
let packageVersionMemo = null;
|
|
27
|
+
/** This package's release, whatever shape the module took: source, esbuild bundle, or an
|
|
28
|
+
* installed copy. Walks up from the module's own URL to the nearest package.json. */
|
|
29
|
+
function packageVersion() {
|
|
30
|
+
if (packageVersionMemo === null) {
|
|
31
|
+
packageVersionMemo = 'unknown';
|
|
32
|
+
try {
|
|
33
|
+
let dir = fileURLToPath(import.meta.url);
|
|
34
|
+
for (let up = 0; up < 6; up++) {
|
|
35
|
+
dir = dirname(dir);
|
|
36
|
+
const manifest = join(dir, 'package.json');
|
|
37
|
+
if (existsSync(manifest)) {
|
|
38
|
+
const json = JSON.parse(readFileSync(manifest, 'utf8'));
|
|
39
|
+
if (json.version)
|
|
40
|
+
packageVersionMemo = json.version;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// A record without a version is still a record.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return packageVersionMemo;
|
|
50
|
+
}
|
|
51
|
+
function taskHash(task) {
|
|
52
|
+
return createHash('sha256').update(task.prompt).digest('hex').slice(0, 16);
|
|
53
|
+
}
|
|
54
|
+
const SEGMENT = /^[A-Za-z0-9_-]{1,128}$/;
|
|
55
|
+
function stage(input) {
|
|
56
|
+
const labels = [];
|
|
57
|
+
for (const entry of input.versions) {
|
|
58
|
+
if (!SEGMENT.test(entry.label))
|
|
59
|
+
throw new Error(`Version label '${entry.label}' must be a usable record name (A-Z a-z 0-9 _ -).`);
|
|
60
|
+
labels.push(entry.label);
|
|
61
|
+
}
|
|
62
|
+
if (new Set(labels).size !== labels.length)
|
|
63
|
+
throw new Error('Version labels must be unique.');
|
|
64
|
+
if (input.tasks.some((task) => !SEGMENT.test(task.id)))
|
|
65
|
+
throw new Error('Task ids must be usable record names (A-Z a-z 0-9 _ -).');
|
|
66
|
+
if (new Set(input.tasks.map((task) => task.id)).size !== input.tasks.length)
|
|
67
|
+
throw new Error('Task ids must be unique.');
|
|
68
|
+
// Staging and the tripwire happen before any execution: a variant carrying grader output
|
|
69
|
+
// never reaches an execution, the same guard the refinement's evidence folder applies
|
|
70
|
+
// (INV-REF-1). A variant that cannot be written becomes an error row, never an abort.
|
|
71
|
+
return input.versions.map((entry) => {
|
|
72
|
+
try {
|
|
73
|
+
assertVariantHasNoGraderVerdicts(entry.variant);
|
|
74
|
+
return { label: entry.label, variant: entry.variant, fingerprint: store.fingerprint(entry.variant), dir: writeVariant(PI_SURFACE, entry.variant, join(matrixDir(input.root, input.id), 'variants', entry.label)), error: '' };
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return { label: entry.label, variant: entry.variant, fingerprint: store.fingerprint(entry.variant), dir: '', error: error instanceof Error ? error.message : String(error) };
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** Runs the full version × task matrix. Bad input throws; execution failures become rows. */
|
|
82
|
+
export async function runMatrix(input) {
|
|
83
|
+
if (!input.versions.length)
|
|
84
|
+
throw new Error('A matrix needs at least one harness version.');
|
|
85
|
+
if (!input.tasks.length)
|
|
86
|
+
throw new Error('A matrix needs at least one task.');
|
|
87
|
+
if (input.tasks.some((task) => !task.prompt.trim()))
|
|
88
|
+
throw new Error('Every task needs a non-empty prompt.');
|
|
89
|
+
const { root, id, tasks, executor } = input;
|
|
90
|
+
const executorName = input.executorName ?? executor.constructor?.name ?? 'executor';
|
|
91
|
+
const emit = (event) => input.onEvent?.(event);
|
|
92
|
+
const staged = stage(input);
|
|
93
|
+
const summary = {
|
|
94
|
+
id,
|
|
95
|
+
status: 'running',
|
|
96
|
+
startedAt: now(),
|
|
97
|
+
endedAt: null,
|
|
98
|
+
versions: staged.map((entry) => entry.label),
|
|
99
|
+
tasks: tasks.map((task) => task.id),
|
|
100
|
+
rows: [],
|
|
101
|
+
usd: 0,
|
|
102
|
+
errors: []
|
|
103
|
+
};
|
|
104
|
+
const save = () => {
|
|
105
|
+
summary.usd = Math.round(summary.rows.reduce((sum, row) => sum + row.costUsd, 0) * 1e6) / 1e6;
|
|
106
|
+
writeJson(join(matrixDir(root, id), 'matrix.json'), summary);
|
|
107
|
+
emit({ type: 'summary', summary: structuredClone(summary) });
|
|
108
|
+
};
|
|
109
|
+
writeJson(join(matrixDir(root, id), 'suite.json'), { id, versions: staged.map(({ label, fingerprint }) => ({ label, fingerprint })), tasks });
|
|
110
|
+
save();
|
|
111
|
+
const pairs = staged.flatMap((version) => tasks.map((task) => ({ version, task })));
|
|
112
|
+
await mapLimit(pairs, input.rolloutWidth ?? 4, async ({ version, task }) => {
|
|
113
|
+
const runId = `${id}-${version.label}-${task.id}`;
|
|
114
|
+
let row;
|
|
115
|
+
if (input.signal?.aborted)
|
|
116
|
+
row = failedRow(version, task, runId, executorName, 'The matrix was cancelled.');
|
|
117
|
+
else if (version.error)
|
|
118
|
+
row = failedRow(version, task, runId, executorName, `the variant could not be staged: ${version.error}`);
|
|
119
|
+
else {
|
|
120
|
+
let validation = null;
|
|
121
|
+
if (executor.validateVariant) {
|
|
122
|
+
try {
|
|
123
|
+
executor.validateVariant(task, version.variant);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
validation = `invalid variant for this task: ${error instanceof Error ? error.message : String(error)}`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (validation)
|
|
130
|
+
row = failedRow(version, task, runId, executorName, validation);
|
|
131
|
+
else {
|
|
132
|
+
emit({ type: 'execution.started', version: version.label, task: task.id, label: runId });
|
|
133
|
+
let rollout;
|
|
134
|
+
try {
|
|
135
|
+
rollout = await executor.execute(task, version.dir, runId, runId);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
// The Executor contract says execute never throws; this keeps the record honest if one does.
|
|
139
|
+
rollout = { label: runId, runId, dir: join(matrixDir(root, id), 'missing', version.label, task.id), ok: false, delivered: false, costUsd: 0, wallMs: 0, error: error instanceof Error ? error.message : String(error) };
|
|
140
|
+
}
|
|
141
|
+
emit({ type: 'execution.finished', version: version.label, task: task.id, ok: rollout.ok, delivered: rollout.delivered, error: rollout.error });
|
|
142
|
+
row = rowOf(version, task, runId, executorName, rollout);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
summary.rows.push(row);
|
|
146
|
+
save();
|
|
147
|
+
});
|
|
148
|
+
for (const error of staged.filter((entry) => entry.error).map((entry) => `${entry.label}: ${entry.error}`))
|
|
149
|
+
summary.errors.push(error);
|
|
150
|
+
summary.status = input.signal?.aborted ? 'cancelled' : summary.rows.some((row) => row.ok) ? 'ok' : summary.rows.length ? 'partial' : 'failed';
|
|
151
|
+
summary.endedAt = now();
|
|
152
|
+
save();
|
|
153
|
+
return summary;
|
|
154
|
+
}
|
|
155
|
+
function rowOf(version, task, runId, executorName, rollout) {
|
|
156
|
+
return {
|
|
157
|
+
version: version.label,
|
|
158
|
+
fingerprint: version.fingerprint,
|
|
159
|
+
task: task.id,
|
|
160
|
+
runId,
|
|
161
|
+
dir: rollout.dir,
|
|
162
|
+
ok: rollout.ok,
|
|
163
|
+
delivered: rollout.delivered,
|
|
164
|
+
costUsd: rollout.costUsd,
|
|
165
|
+
wallMs: rollout.wallMs,
|
|
166
|
+
error: rollout.error,
|
|
167
|
+
taskHash: taskHash(task),
|
|
168
|
+
executor: executorName,
|
|
169
|
+
packageVersion: packageVersion()
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function failedRow(version, task, runId, executorName, error) {
|
|
173
|
+
return rowOf(version, task, runId, executorName, { label: runId, runId, dir: '', ok: false, delivered: false, costUsd: 0, wallMs: 0, error });
|
|
174
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RunEvent } from "../sessions/contracts.js";
|
|
2
|
+
export declare function renderEvents(events: readonly RunEvent[], options: {
|
|
3
|
+
obsTrunc: number;
|
|
4
|
+
argsTrunc?: number;
|
|
5
|
+
}): string;
|
|
6
|
+
/** The last assistant message of a run. */
|
|
7
|
+
export declare function finalText(events: readonly RunEvent[]): string;
|
|
8
|
+
/** The run's cost so far, from its last usage report. */
|
|
9
|
+
export declare function costOf(events: readonly RunEvent[]): number;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const TRUNC = (n) => `…(+${n} chars — render truncation)`;
|
|
2
|
+
function clip(text, limit) {
|
|
3
|
+
const clean = text.replace(/\0/g, '');
|
|
4
|
+
return limit > 0 && clean.length > limit ? `${clean.slice(0, limit)}${TRUNC(clean.length - limit)}` : clean;
|
|
5
|
+
}
|
|
6
|
+
export function renderEvents(events, options) {
|
|
7
|
+
const out = [];
|
|
8
|
+
const argsTrunc = options.argsTrunc ?? 2000;
|
|
9
|
+
for (const event of events) {
|
|
10
|
+
const payload = (event.payload ?? {});
|
|
11
|
+
switch (event.type) {
|
|
12
|
+
case 'message.completed':
|
|
13
|
+
if (typeof payload.text === 'string' && payload.text.trim())
|
|
14
|
+
out.push(`[${payload.role === 'user' ? 'USER' : 'ASSISTANT'}]\n${clip(payload.text, options.obsTrunc)}`);
|
|
15
|
+
break;
|
|
16
|
+
case 'tool.started':
|
|
17
|
+
out.push(`[ACTION] ${String(payload.name ?? 'tool')}${typeof payload.input === 'string' && payload.input ? ` ${clip(payload.input, argsTrunc)}` : ''}`);
|
|
18
|
+
break;
|
|
19
|
+
case 'tool.completed': {
|
|
20
|
+
const text = typeof payload.output === 'string' ? payload.output : '';
|
|
21
|
+
out.push(`${payload.ok === false ? '[ERROR]' : '[OBSERVATION]'} ${String(payload.name ?? 'tool')}${typeof payload.durationMs === 'number' ? ` (${Math.round(payload.durationMs)} ms)` : ''}\n${clip(text, options.obsTrunc)}${payload.outputTruncated ? '\n(the tool output was already bounded when it was recorded)' : ''}`);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
case 'retry.started':
|
|
25
|
+
out.push(`[ERROR] model request failed, retrying (${String(payload.attempt)}/${String(payload.maxAttempts)}): ${String(payload.error ?? '')}`);
|
|
26
|
+
break;
|
|
27
|
+
case 'compaction.ended':
|
|
28
|
+
out.push(`[ACTION] context compacted (${String(payload.reason ?? '')})${typeof payload.tokensBefore === 'number' ? `: ${payload.tokensBefore} → ${String(payload.tokensAfter ?? '?')} tokens` : ''}`);
|
|
29
|
+
break;
|
|
30
|
+
case 'approval.resolved':
|
|
31
|
+
if (payload.decision === 'denied')
|
|
32
|
+
out.push('[ERROR] a tool call was refused');
|
|
33
|
+
break;
|
|
34
|
+
case 'extension.notice':
|
|
35
|
+
if (typeof payload.text === 'string')
|
|
36
|
+
out.push(`[OBSERVATION] notice: ${clip(payload.text, 2000)}`);
|
|
37
|
+
break;
|
|
38
|
+
case 'failed':
|
|
39
|
+
out.push(`[ERROR] run failed: ${String(payload.message ?? payload.code ?? '')}`);
|
|
40
|
+
break;
|
|
41
|
+
case 'status.changed':
|
|
42
|
+
if (payload.status === 'interrupted')
|
|
43
|
+
out.push('[ERROR] run interrupted');
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return out.length ? out.join('\n\n') : '(no trajectory: the run recorded no messages or tool use)';
|
|
50
|
+
}
|
|
51
|
+
/** The last assistant message of a run. */
|
|
52
|
+
export function finalText(events) {
|
|
53
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
54
|
+
const payload = events[i].payload;
|
|
55
|
+
if (events[i].type === 'message.completed' && payload?.role === 'assistant' && typeof payload.text === 'string' && payload.text.trim())
|
|
56
|
+
return payload.text;
|
|
57
|
+
}
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
/** The run's cost so far, from its last usage report. */
|
|
61
|
+
export function costOf(events) {
|
|
62
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
63
|
+
const payload = events[i].payload;
|
|
64
|
+
if (events[i].type === 'usage.updated' && typeof payload?.costUsd === 'number')
|
|
65
|
+
return payload.costUsd;
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Variant } from "../variant/surface.js";
|
|
2
|
+
import type { WorkPrompts } from "./prompts.js";
|
|
3
|
+
export type RecursionMode = 'parallel' | 'sequential';
|
|
4
|
+
/** One piece of work to refine on. */
|
|
5
|
+
export interface RefineTask {
|
|
6
|
+
/** Stable id of the task; names its folder and its library entry. */
|
|
7
|
+
id: string;
|
|
8
|
+
/** The request, as the agent received it, with any expected answer stripped. */
|
|
9
|
+
prompt: string;
|
|
10
|
+
/** The harness scope: whose variant this is and whose library it reads and grows. */
|
|
11
|
+
scope: string;
|
|
12
|
+
/** A grouping inside the scope's library. Defaults to the scope. */
|
|
13
|
+
domain?: string;
|
|
14
|
+
/** Material the work was done from, served to improvers and the selector as `source/`. */
|
|
15
|
+
sourceDir?: string | null;
|
|
16
|
+
/** Paths that must never reach a model (answer keys and the like), as globs. */
|
|
17
|
+
leakGlobs?: string[];
|
|
18
|
+
/** The text about the work the prompts interpolate. */
|
|
19
|
+
prompts?: WorkPrompts;
|
|
20
|
+
/** Whether a harness here may carry subagents. Default true. */
|
|
21
|
+
allowSubagents?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** What the method knows about one finished execution. Never carries a score. */
|
|
24
|
+
export interface Rollout {
|
|
25
|
+
label: string;
|
|
26
|
+
runId: string;
|
|
27
|
+
/** A folder that holds this execution's evidence. */
|
|
28
|
+
dir: string;
|
|
29
|
+
ok: boolean;
|
|
30
|
+
delivered: boolean;
|
|
31
|
+
costUsd: number;
|
|
32
|
+
wallMs: number;
|
|
33
|
+
error: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Executor {
|
|
36
|
+
/**
|
|
37
|
+
* Runs one execution of `task` with the harness in `variantDir` (null: the base harness) and
|
|
38
|
+
* returns what it produced. A failure is returned as `ok: false`, never thrown.
|
|
39
|
+
*/
|
|
40
|
+
execute(task: RefineTask, variantDir: string | null, label: string, runId: string): Promise<Rollout>;
|
|
41
|
+
/** The execution in the shared `[ACTION]/[OBSERVATION]/[ERROR]` grammar. */
|
|
42
|
+
trajectory(rollout: Rollout, options: {
|
|
43
|
+
obsTrunc: number;
|
|
44
|
+
}): string;
|
|
45
|
+
/** filename → readable text, one entry per artifact produced. */
|
|
46
|
+
deliverableFiles(rollout: Rollout): Record<string, string>;
|
|
47
|
+
/** Extra validation of a proposed variant for this task; throw with every problem listed. */
|
|
48
|
+
validateVariant?(task: RefineTask, variant: Variant): void;
|
|
49
|
+
}
|
|
50
|
+
export interface ImproverReply {
|
|
51
|
+
label: string;
|
|
52
|
+
text: string;
|
|
53
|
+
costUsd: number;
|
|
54
|
+
attempts: number;
|
|
55
|
+
cached: boolean;
|
|
56
|
+
/** The harvested folder, when the call asked for one; null when it did not come back. */
|
|
57
|
+
workspace: string | null;
|
|
58
|
+
}
|
|
59
|
+
export declare class ImproverError extends Error {
|
|
60
|
+
readonly attempts: number;
|
|
61
|
+
readonly costUsd: number;
|
|
62
|
+
constructor(message: string, attempts?: number, costUsd?: number);
|
|
63
|
+
}
|
|
64
|
+
export interface ImproverCall {
|
|
65
|
+
/** The instruction; evidence stays on disk under `context/`. */
|
|
66
|
+
mission: string;
|
|
67
|
+
/** The folder copied into the session as `context/`. */
|
|
68
|
+
contextDir: string;
|
|
69
|
+
/** A unique label for the audit trail and cache. */
|
|
70
|
+
label: string;
|
|
71
|
+
/** A path inside the session's folder to copy out before it is removed, e.g. `context/harness`. */
|
|
72
|
+
harvest?: string;
|
|
73
|
+
signal?: AbortSignal;
|
|
74
|
+
}
|
|
75
|
+
export interface Improver {
|
|
76
|
+
call(input: ImproverCall): Promise<ImproverReply>;
|
|
77
|
+
}
|