@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,123 @@
|
|
|
1
|
+
# Cross-arm comparison insights
|
|
2
|
+
|
|
3
|
+
Standing conclusions from the arm audits (arms 01–10, `docs/study/arms/`).
|
|
4
|
+
Each insight cites the arm that backs it. These are the ideas with the highest
|
|
5
|
+
leverage for designing this harness; per-action items live in `roadmap.md`.
|
|
6
|
+
|
|
7
|
+
## 1. Everyone rebuilt the same five-layer architecture
|
|
8
|
+
|
|
9
|
+
Prompt assembly, tool registry + gate, subagent machinery, compaction/context,
|
|
10
|
+
and durable records appeared independently in opencode, omp, dsh, harness² and
|
|
11
|
+
ours — with the same *problems*, not the same *solutions* (arms 01–06, 08–09).
|
|
12
|
+
The design space is covered; the interesting work is picking positions per
|
|
13
|
+
layer, not inventing layers. Harness² even distributes the same c1–c8 component
|
|
14
|
+
taxonomy across substrates (`external/harness2/harness2/core/prompts.py:424-431`)
|
|
15
|
+
that this harness independently uses for its trees — and this harness's
|
|
16
|
+
`src/refine/` is a documented port of harness² (arm 10). Convergence is
|
|
17
|
+
evidence both directions were right.
|
|
18
|
+
|
|
19
|
+
## 2. The stable prefix is an invariant, dynamic content is a protocol
|
|
20
|
+
|
|
21
|
+
Four projects converge hard: keep system prompt byte-stable; put changing state
|
|
22
|
+
into *appended*, dated, superseding messages (omp user-turn reminder
|
|
23
|
+
`date-cwd-reminder.ts:44-48`; dsh "Current runtime context… supersedes earlier"
|
|
24
|
+
snapshot `system-prompt/src/index.ts:314-318`; opencode instruction deltas
|
|
25
|
+
between history and the prompt; ours: `xingular-context`). The subtle
|
|
26
|
+
engineering is where volatile values may NOT live (omp: a tail date line
|
|
27
|
+
invalidated the whole tool array). Never place date/cwd/workspace state in the
|
|
28
|
+
prefix; never rewrite sections in place (arm 01, A1).
|
|
29
|
+
|
|
30
|
+
## 3. There are only three sincere answers to "who contributed this prompt text"
|
|
31
|
+
|
|
32
|
+
(a) **Declaration with an ordering contract** (dsh: numeric order → name ties,
|
|
33
|
+
duplicate names throw, scoped shadowing, `complete` replacement) — most
|
|
34
|
+
legible for caching and reasoning;
|
|
35
|
+
(b) **Ability/extension slots** (omp capabilities; opencode internal tools +
|
|
36
|
+
tool hooks) — most permissive;
|
|
37
|
+
(c) **A validated tree** (ours c1–c8; harness² tree files with machine
|
|
38
|
+
validation) — most durable, at the cost of pipeline ceremony.
|
|
39
|
+
Any addition to our prompt surface should strengthen (a)'s contract or (c)'s
|
|
40
|
+
machines, never invent a fourth pattern. When a plugin contributes a section,
|
|
41
|
+
deterministic ordering and duplicate rejection belong to the compiler
|
|
42
|
+
(`src/prompt/compile.ts`), not to plugin scheduling (arm 01, A2).
|
|
43
|
+
|
|
44
|
+
## 4. Tool interfaces are where public instruction lives
|
|
45
|
+
|
|
46
|
+
All sources push "how to use this" into tool descriptions and keep the system
|
|
47
|
+
prompt shorter. Where that text lives differs: inline strings (opencode),
|
|
48
|
+
static md templates (omp: "Prompts never in code"), fully erased behind a
|
|
49
|
+
generated SDK (dsh's PTC), whole prose files (claude-code's TODOWRITE
|
|
50
|
+
descendant in opencode `todowrite.txt`). For this harness, md-template
|
|
51
|
+
descriptions are the highest leverage per line changed: reviewable diffs,
|
|
52
|
+
`{product}` interpolation stays (arm 02, A3).
|
|
53
|
+
|
|
54
|
+
## 5. Gate taxonomies converge on *tiers × per-call decisions*
|
|
55
|
+
|
|
56
|
+
read/write/exec tier declarations + per-call allow/deny/ask outcomes +
|
|
57
|
+
fail-closed defaults, expressed as tiers (omp), per-leaf asserts (opencode),
|
|
58
|
+
pipeline events (dsh) or a final gate (ours). Two universals worth canonizing
|
|
59
|
+
here: **policy missing ⇒ ask**, and **one-time escalations with audit trails**
|
|
60
|
+
(dsh sandbox escalation ≈ our single-use approvals). Hooks may *advise*;
|
|
61
|
+
neither hooks nor tools *decide* (arm 07, G2).
|
|
62
|
+
|
|
63
|
+
## 6. Subagent geometry: fresh children, explicit delivery, no forks
|
|
64
|
+
|
|
65
|
+
Inheritance of parent history into children is rare (only dsh's explicit
|
|
66
|
+
`fork`; omp/ours/claude-code/opencode default fresh). Delivery splits between
|
|
67
|
+
block-on-result (simpler, slower), background + never-poll instruction
|
|
68
|
+
(opencode), and receipts with automatic delivery (ours). Depth and capacity
|
|
69
|
+
defaults (8 active / depth 1 dsh) are good calibrations. dsh's `fork` is the
|
|
70
|
+
one mechanism worth studying further but the anti-pattern posture ("no more
|
|
71
|
+
capabilities than you") should stay (arm 03).
|
|
72
|
+
|
|
73
|
+
## 7. Compaction is a strategy ladder, not a single pass
|
|
74
|
+
|
|
75
|
+
Trigger at a formula of the window; prune oversized tool outputs first;
|
|
76
|
+
summarize to a fixed, named template; keep a verbatim tail checkpoint; retry
|
|
77
|
+
down-scaled on provider rejection; log usage at the anchor + estimates beyond.
|
|
78
|
+
The distinctive frontier is opencode's whole-transcript-to-summarizer-for-
|
|
79
|
+
cache-reuse against omp's deterministic, no-LLM archive rung (snapcompact) —
|
|
80
|
+
an SRE-quality safety net no other source has. For this harness: adopt the
|
|
81
|
+
shape and invariants; do not adopt the machinery (arm 05, C1–C3).
|
|
82
|
+
|
|
83
|
+
## 8. Memory products are files with contracts, not databases
|
|
84
|
+
|
|
85
|
+
Where memory is model-facing, it is a file (`MEMORY.md`, our Wiki, harness²'s
|
|
86
|
+
`LongTermMEMORY.md`) with caps, a lesson shape (cue/lesson, never task facts)
|
|
87
|
+
and redaction; where memory is engine-facing (mnemopi's `memory://`), it is an
|
|
88
|
+
optional accelerator, never the source of truth. dsh deliberately ships *no*
|
|
89
|
+
memory package — durability only (JSONL session log + todos + spill). The
|
|
90
|
+
difference between them is one offer: "does the next session need to behave
|
|
91
|
+
differently?" (arm 06, M1).
|
|
92
|
+
|
|
93
|
+
## 9. Measurement has exactly one defensible home inside the harness: after selection, decoupled
|
|
94
|
+
|
|
95
|
+
harness²'s judge reads only the chosen run, never feeds selection, fails to
|
|
96
|
+
None, and is excluded from denominators (`judge.py:15-19,37-40`). omp puts a
|
|
97
|
+
judgment role next to subagents; our family places measurement in Evaluation.
|
|
98
|
+
The adoptable principle is the *decoupling shape*, whatever module ends up
|
|
99
|
+
owning the measurement (arm 10, R4 — decide layering before porting).
|
|
100
|
+
|
|
101
|
+
## 10. Editorial discipline is a competitive feature
|
|
102
|
+
|
|
103
|
+
harness² turns prompt-writing conventions into machine validation: unnamed
|
|
104
|
+
skills discarded, template braces rejected, unshipped scripts rejected,
|
|
105
|
+
always-on prose priced by output budget ("ALWAYS-ON PROSE IS THE EXPENSIVE
|
|
106
|
+
OPTION", `prompts.py:129-146`). omp similarly: prompts never in code, model
|
|
107
|
+
policy never code (KDL tables), one JSON judge-questions file per feature.
|
|
108
|
+
This harness already validates trees; the opportunity is extending
|
|
109
|
+
validation to prompt-behavior contracts spotted above (trigger lines, delta
|
|
110
|
+
protocols, tier coverage) rather than more prose (arms 01, 02, 04, 10).
|
|
111
|
+
|
|
112
|
+
## 11. Anti-patterns known across sources
|
|
113
|
+
|
|
114
|
+
- Instruction discovery with no caps (opencode AGENTS.md walk) — unbounded cost
|
|
115
|
+
drift into sessions.
|
|
116
|
+
- Model-conditional code (`id.includes("claude")`-style) — omp bans it; policy
|
|
117
|
+
belongs in tables (omp KDL; opencode's per-model prompt plugins are the
|
|
118
|
+
hook-flavored equivalent).
|
|
119
|
+
- Any module that can rewrite its own pending tool call (claude-code
|
|
120
|
+
PreToolUse mutation, harness² plugin `tool` registration for *capability
|
|
121
|
+
edits* mid-run needs trust gating we already have for c8).
|
|
122
|
+
- Polling loops from the model (opencode had to say "DO NOT sleep, poll" in
|
|
123
|
+
the spawn tool description; ours prevents it structurally with receipts).
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Adoption roadmap — implementing these findings in this harness
|
|
2
|
+
|
|
3
|
+
Derived from `arms/01–10` and `insights.md`. Tiering: **T1** = landed patterns
|
|
4
|
+
from battle-tested open harnesses, adopt now; **T2** = adopt after a check or a
|
|
5
|
+
measurement; **T3** = park. Every item lands through one of the seven surfaces
|
|
6
|
+
(prompt sections, tool providers, `ToolPolicy`, `SecretStore`, `Directory`,
|
|
7
|
+
plugin descriptions, `RefineHost`) or the tree/refine machinery already in
|
|
8
|
+
`src/`, never by naming an application concept. Check plan: `npm run typecheck`,
|
|
9
|
+
`npm test`; `npm run prove` when the server/CLI/startup changes.
|
|
10
|
+
|
|
11
|
+
## Tier 1 — adopt now
|
|
12
|
+
|
|
13
|
+
| # | What | Where it lands | Why & source | Verification |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| 1 | **Prompt-section ordering contract**: contributors declare a numeric order; compilation sorts (order, then name), rejects duplicate ids, scoped entries shadow globals | prompt compilation in `src/prompt/compile.ts` + plugin descriptor (`src/plugins/builtin.ts`) | dsh's section contract — deterministic ordering is a *cache* and *reasoning* asset (arm 01, insight 3) | unit tests incl. duplicate-order throws and shadowing either-order |
|
|
16
|
+
| 2 | **Tool approval tiers**: every ToolSpec declares `read\|write\|exec`; standing-approval policy wording derives from tiers | `ToolPolicy` + `src/tools/types.ts` (+ tool providers' default rows) | omp's tier×policy legibility (arm 02/07) | the tier is mandatory in the gate path; docs |
|
|
17
|
+
| 3 | **Policy-missing ⇒ ask** invariant with tests | gate in `src/` (`ToolPolicy` evaluation) | omp fails closed; dsh bundle default (arm 07) | a gate test per missing-policy shape |
|
|
18
|
+
| 4 | **Tool descriptions as template files**: description text lives in `.md` (interpolating `{product}`), imported `type:"text"` — no inline instruction literals in tool definitions | `src/tools/*` | omp's "prompts never in code"; reviewability (arm 02) | build renders identical output; no behavior change |
|
|
19
|
+
| 5 | **Subagent receipts self-describe limits** (24k cap, delivery semantics) inside the receipt text | `src/tools/spawnSubagent.ts` | ours — the cap exists but is implicit (arm 03, S2) | receipt content test |
|
|
20
|
+
| 6 | **Tree validation adopts harness²'s discard rules** where missing: skill trigger-line presence in always-on text; braces checking; script-existence (re-verify which already hold in `validate()`) | `src/tree/tree.ts` + tests | harness² turns prompt conventions into machine gates (arms 04/10, K2/K3) | a failing-tree test per rule |
|
|
21
|
+
| 7 | **Sync refinement prompts with upstream drift**: pull changed sentences from harness² `adapt` pack (pool-anonymity, deliverable-shape rule) into `src/refine/prompts.ts` | `src/refine/prompts.ts` | upstream evolved past our port snapshot (arm 10, R1) | existing refine tests stay green; wording-insensitive assertions |
|
|
22
|
+
| 8 | **`<notes>` decision-audit format** added to compose/selection stages (kept\|revised\|dropped → edit → evidence) | `src/refine/prompts.ts` | tts pack's auditability upgrade (arm 10, R2) | schema on notes parse |
|
|
23
|
+
| 9 | **Volatile-value placement rule**: no date/cwd/env in the stable prefix ever; supply via `xingular-context` channel or a user-turn injection | `src/prompt/compile.ts` (nothing, if currently absent — confirm) | omp's invalidation lesson (arm 01, A1; **verified**: our compiler injects none today) | a lint-style test asserting the prefix has no volatile lines |
|
|
24
|
+
| 10 | **Normative docs**: one-subprocess-service norm and identity-blind transport commitment for any future telemetry-like export | repo README / docs | dsh (arms 08/09, E2/O1) | ADR text only |
|
|
25
|
+
|
|
26
|
+
## Tier 2 — adopt after a check or measurement
|
|
27
|
+
|
|
28
|
+
| # | What | Precondition | Landing surface |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| 11 | Compaction shapes: fixed named-template summary + verbatim tail checkpoint + prune-first ordering | inventory our current compaction behavior first (Pi-native history; no `src/` compaction found) | `RefineHost`/session docs, then prompt sections for restoration text (arm 05, C1–C3) |
|
|
31
|
+
| 12 | `toolOrder` validation for pinned tool sets (unknown/rejected/marker rules) | confirm our capability freezing can't already be ordered inconsistently | `sessions.run` freeze path (arm 02, A4) |
|
|
32
|
+
| 13 | Restriction masks equivalent to dsh `ctx.tools.restrict` — check whether `capabilities.intersect` already covers scoped narrow-and-lift before adding anything | read `src/capabilities/` | none if covered (arm 02) |
|
|
33
|
+
| 14 | Skill-catalog deltas in `xingular-context` when tree versions change mid-run | assess token cost of name+description deltas vs tree sections | context update contents (arm 04, K1) |
|
|
34
|
+
| 15 | Substrate-parity test R5: an upstream harness² candidate tree validates under `PI_SURFACE` without edit | none — test only | `src/tree/` tests (arm 10, R5) |
|
|
35
|
+
| 16 | **Cache warming** near TTL (omp `cache-warmer.ts`) and the cache-*stable-prefix* probe protocol: engineering lives app-side; the harness may only need to expose request timing in run events | measure with `probe-chat-cache-app.py` from the App repo, with the account owner's permission | nothing harness-side unless events lack durations (arm 01, A5) |
|
|
36
|
+
| 17 | Sandbox classes offered as `ToolPolicy` options (read-only/workspace-write) | app-level sandbox plumbing exists | ToolPolicy (arm 08, E1) |
|
|
37
|
+
|
|
38
|
+
## Evaluation of the harness — suite and sweep items
|
|
39
|
+
|
|
40
|
+
How the harness itself gets measured over time (STUDY-0001; the mechanism is
|
|
41
|
+
`src/refine/`, with frozen tasks and sweeps owned by the Evaluation repo).
|
|
42
|
+
|
|
43
|
+
| # | What | Where it lives | Status |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| E1 | **Evaluation matrix** (`runMatrix`): tree × task deliverability records with comparability keys (task-hash, executor, package version, fingerprint); `refine matrix` CLI taking tree dirs or committed scope versions; records beside refinements (`refine/<id>/matrix.json`) | `src/refine/suite.ts`, `refine/cli.ts` | **landed** (05/12 pages updated) |
|
|
46
|
+
| E2 | No-model CI lane: the matrix through the demo executor, proved standalone | `scripts/prove-standalone.mjs` | **landed** |
|
|
47
|
+
| E3 | Tree-lineage sweep: matrix across every adopted version of a scope | suite `{scope, version}` entries; a driver later | capability landed |
|
|
48
|
+
| E4 | Frozen task library: answer-stripped `RefineTask` records + source fixtures + leak globs | Evaluation repo | pending |
|
|
49
|
+
| E5 | Commit-range sweep: per commit, git worktree → `refine matrix` → matrix rows | Evaluation repo (drives production code; never fakes a session) | pending |
|
|
50
|
+
| E6 | Regression report: flip table (delivered⇄empty), cost-per-delivered between two matrices | Evaluation repo dashboard | pending |
|
|
51
|
+
| E7 | Suite-based adoption gate: `adopt` only when the chosen tree wins the frozen suite, else `keep_base` | `refine/service.ts` policy; suite data from Evaluation | pending |
|
|
52
|
+
| E8 | Real PiExecutor lane with cost/wall budget stops | Evaluation repo + App; needs the account owner's approval | parked until approved |
|
|
53
|
+
|
|
54
|
+
## Parked / anti-candidates (recorded, do not build)
|
|
55
|
+
|
|
56
|
+
- `memory://` protocol over wiki tools (omp mnemopi) — caps/budgets suffice for now (arm 06, M2).
|
|
57
|
+
- `fork`-style history-seeded children (dsh) — breaks the fresh-child accounting model (arm 03).
|
|
58
|
+
- Free code-as-action for model tools (smolagents) — the per-call gate is a load-bearing contract; revisit only behind a RefineHost-scope opt-in (arm 02).
|
|
59
|
+
- In-harness judge module — requires the family-layering decision (Evaluation owns measurement) before any port; if ever ported, port the *decoupling shape* verbatim (arm 10, R4).
|
|
60
|
+
- omp's in-process coretools shell environment — an execution detail of
|
|
61
|
+
omp/pi-shell, host-supervised here; not adoptable machinery (arm 08).
|
|
62
|
+
|
|
63
|
+
## Sequencing
|
|
64
|
+
|
|
65
|
+
1. Items 1–4 (contract tier: prompt ordering, tiers, fail-closed, template descriptions) — one focused change each, with tests; land first because later items build on the vocabulary.
|
|
66
|
+
2. Items 5–9 (mechanical: receipts, validation, prompt sync/notes, placement rule).
|
|
67
|
+
3. Item 10 + Tier-2 checks (12–15) as a small batch.
|
|
68
|
+
4. Measurement-gated items (11, 16) last, through the App scripts where indicated.
|
|
69
|
+
|
|
70
|
+
Every landed item updates the relevant arm doc's "adoption candidates" row to
|
|
71
|
+
`landed: <path>` and adds an ADR when the change alters a contract (server
|
|
72
|
+
methods, tool gate semantics, tree validation).
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Source: Claude Code (Anthropic) — no local code
|
|
2
|
+
|
|
3
|
+
- Origin: [Anthropic Claude Code](https://www.anthropic.com/claude-code). Not open
|
|
4
|
+
source: no clone. Material to audit: the npm package (`@anthropic-ai/claude-code`,
|
|
5
|
+
bundled JS — inspect for system prompt and tool descriptions), Anthropic's
|
|
6
|
+
engineering blog posts on Claude Code (agent loop, harness internals, sub-agent
|
|
7
|
+
guidance, compaction), the skills spec (agent skills API), and observed CLI
|
|
8
|
+
behavior (`/hooks`, `Permission` modes, CLAUDE.md hierarchy, memory
|
|
9
|
+
instructions).
|
|
10
|
+
- Why studied: the de-facto reference for UX-shaped harness conventions — CLAUDE.md
|
|
11
|
+
hierarchy, skills, subagents as first-class configs, hook events, plan mode,
|
|
12
|
+
permission modes. Every other harness in this study copies it knowingly or not.
|
|
13
|
+
|
|
14
|
+
## Map to arms (from public, verifiable material — no code claims)
|
|
15
|
+
|
|
16
|
+
- Arm 01 (prompt): CLAUDE.md hierarchy (enterprise/user/project/local), `@file`
|
|
17
|
+
imports, `#` quick-memory, output styles forcing; the leak-history repo
|
|
18
|
+
(community) documents the shipped system prompt — cite carefully, it changes.
|
|
19
|
+
- Arm 02 (tools): bundled tools w/ rich descriptions ("use when…" instructions
|
|
20
|
+
live in tool descriptions, not the prompt); MCP support.
|
|
21
|
+
- Arm 03 (subagents): `.claude/agents/*.md` subagent files w/ own name/description/
|
|
22
|
+
toolset/model; auto-delegation by description matching.
|
|
23
|
+
- Arm 04 (skills): SKILL.md progressive disclosure (name+description only loaded;
|
|
24
|
+
body read on demand), script support.
|
|
25
|
+
- Arm 05 (context): compaction thresholds, `--continue/--resume`, context restore
|
|
26
|
+
via note files.
|
|
27
|
+
- Arm 06 (memory): `CLAUDE.local.md`, `#` memory notes, user memory file.
|
|
28
|
+
- Arm 07 (governance): permission modes (default/acceptEdits/plan/
|
|
29
|
+
bypassPermissions), allow/deny rules patterns, hooks (PreToolUse/PostToolUse)
|
|
30
|
+
as policy handlers, sandboxed bash per platform.
|
|
31
|
+
- Arm 08 (execution): bash w/ working-dir constraints; desktop app tooling.
|
|
32
|
+
|
|
33
|
+
## Open questions for the audit (each needs its citation landing)
|
|
34
|
+
|
|
35
|
+
1. SKILL.md spec: exact progressive-disclosure contract; compare against this
|
|
36
|
+
harness's skill loader c7/c8 + trust requirements.
|
|
37
|
+
2. Hooks: which events exist, do they mutate tool input (``PreToolUse`` update
|
|
38
|
+
semantics) — contrast with the here-rule "a hook is told, never asked".
|
|
39
|
+
3. Subagent file spec: fields, tool inheritance, model pinning; our extension
|
|
40
|
+
point answer.
|
|
41
|
+
4. Plan mode mechanics (bilateral approval) — how does its gate differ from our
|
|
42
|
+
refinement probes (answer-free, no world effect).
|
|
43
|
+
5. Verbatim from a recent npm bundle: capture current system prompt + tool
|
|
44
|
+
descriptions and date-stamp them.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Source: deepseek-harness (dsh)
|
|
2
|
+
|
|
3
|
+
- Origin: [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness),
|
|
4
|
+
released Aug 2026, MIT, developer preview (compatibility-breaking expected).
|
|
5
|
+
Built on the Cordis meta-framework ("spatiotemporal composability"); one radical
|
|
6
|
+
claim: **everything is a plugin** — model adapters, tool registry, session log,
|
|
7
|
+
sandboxes, and the agent loop itself have no privileged core.
|
|
8
|
+
- Local clone: `external/deepseek-harness` (205 MB).
|
|
9
|
+
- Status: **arm-01 audited; arms 02–06 audited** (explorer report; verified spot
|
|
10
|
+
checks pending — treat claims below as explorer-verified until I re-read).
|
|
11
|
+
|
|
12
|
+
## Verified layout
|
|
13
|
+
|
|
14
|
+
`packages/` (arm-shaped): `acp`, `api`, `attachment`, `boot`, `browser-use`,
|
|
15
|
+
`bundle`, `client`, `compaction`, `computer-use`, `context`, `core` (with
|
|
16
|
+
`packages/core/tools`, `packages/core/system-prompt`, `packages/core/agent-loop`),
|
|
17
|
+
`credentials`, `deliverables`, `fs`, `guard`, `host`, `identity`, `interaction`,
|
|
18
|
+
`jobs`, `llm`, `lsp`, `mcp`, `plan`, `preset`, `ptc-runtime`, `sandbox`,
|
|
19
|
+
`schedule`, `session`, `session-query`, `settings`, `shell`, `skill`, `spill`,
|
|
20
|
+
`ssh`, `storage`, `subagent`, `subprocess`, `telemetry`, `terminal`, `todo`,
|
|
21
|
+
`util`, `web`, `workflow`, `workspace`.
|
|
22
|
+
|
|
23
|
+
## Core facts per arm (audited)
|
|
24
|
+
|
|
25
|
+
**02 tools.** Canonical registry is `ctx.tools` (dsh-tools), not the loop:
|
|
26
|
+
declaring a tool via `defineTool` makes it visible, and ToolRuntime feeds the
|
|
27
|
+
system prompt automatically (`packages/core/tools/README.md:30,34-62`;
|
|
28
|
+
`packages/core/tools/src/index.ts:857`). Two presentation modes: `native`
|
|
29
|
+
(all schemas) vs `ptc` (models see only `run_code` + generated SDK — programmatic
|
|
30
|
+
tool calling), with per-agent `presentAs` override
|
|
31
|
+
(`packages/core/tools/README.md:68-81`). Plain restriction API:
|
|
32
|
+
`ctx.tools.restrict(filter)` allow/deny masks that intersect and lift on dispose
|
|
33
|
+
(`README.md:85`). **The gate is inside dsh-tools**, a fixed pipeline:
|
|
34
|
+
`tools/pre-execute` (allow/deny/ask) → monotonic `ctx.tools.guard()` reasons →
|
|
35
|
+
`tools/execute` → `tools/post-execute` → observe-only `tools/result`
|
|
36
|
+
(`README.md:89,109`; ask at `packages/core/tools/src/index.ts:608-612,1513-1527`).
|
|
37
|
+
`packages/guard` is *not* the gate — it is loop hygiene (repeat-tool reminder,
|
|
38
|
+
timeout policy). `toolOrder` is validated config: explicit model-facing order,
|
|
39
|
+
exactly one `<unlisted-tools>` rest entry, unknown names fail assembly
|
|
40
|
+
(`packages/core/system-prompt/README.md:50-52,179`). Bundle = profile patch
|
|
41
|
+
layer stacked over `dsh-base`, which ships a default wallet policy confining
|
|
42
|
+
file writes and asking before risky actions
|
|
43
|
+
(`packages/bundle/README.md:12`, `packages/bundle/base/README.md:50`).
|
|
44
|
+
|
|
45
|
+
**03 subagents.** `ctx.subagents` + provider backends + tool plugins
|
|
46
|
+
(`packages/subagent/README.md:27-35`). Spawn returns immediately with
|
|
47
|
+
`started subagent <childId>`; completion notice delivered later
|
|
48
|
+
(`tool-subagent/README.md:59`). Two kinds: fresh child (`spawn`) vs `fork`
|
|
49
|
+
seeded from the parent's completed history (`README.md:28-29`); local children
|
|
50
|
+
are continuable; external backends (ACP/Codex/Claude Code) "execute once"
|
|
51
|
+
(`README.md:12,61`). Capacity defaults: 8 active, depth 1
|
|
52
|
+
(`subagent/src/README.md:53,49`). **No description-based auto-routing** in dsh —
|
|
53
|
+
the model names a preset from an enum allowlist (`tool-subagent/README.md:52,68`).
|
|
54
|
+
|
|
55
|
+
**04 skills.** Progressive disclosure: before the first request the model gets a
|
|
56
|
+
durable catalog of names + capped descriptions (default cap 500 chars), and
|
|
57
|
+
loads full body via the `skill` tool; `/name` invocation injects the same
|
|
58
|
+
instructions (`packages/skill/tool-skill/README.md:12,54-56`); catalog changes
|
|
59
|
+
append a complete replacement; empty catalog retires names
|
|
60
|
+
(`:57`).
|
|
61
|
+
|
|
62
|
+
**05 context.** `compaction-basic` triggers at
|
|
63
|
+
`floor(min(W×0.8, W−O−headroom))` with 65_536 headroom, keeps the newest 16%,
|
|
64
|
+
one extra model request, only the summary retained
|
|
65
|
+
(`packages/compaction/compaction-basic/README.md:12,32,62-68`; `config.ts:75-78`);
|
|
66
|
+
oversized tool outputs pruned first, image placeholders swapped for offloaded
|
|
67
|
+
images (`packages/compaction/README.md:31-32`). `session-query` = SQLite FTS5
|
|
68
|
+
search over the durable log, independent of compaction
|
|
69
|
+
(`packages/session-query/README.md:12,30`).
|
|
70
|
+
|
|
71
|
+
**06 memory.** No memory package by design. Durables: immutable canonical JSONL
|
|
72
|
+
sessions with checkpoint policy (`packages/session/README.md:38-39`), todo lists
|
|
73
|
+
persisting across sessions (owned by the session, whole-list replace,
|
|
74
|
+
`packages/todo/README.md:12`), `spill` = full text stored outside context with
|
|
75
|
+
locator + retrieval guidance (`packages/spill/README.md:12,30-31`),
|
|
76
|
+
`storage` = non-session app data, never model-visible
|
|
77
|
+
(`packages/storage/README.md:12,27-30`), `deliverables` = per-turn outputs as
|
|
78
|
+
client-only session events with `workspace/changes` derived from git snapshots
|
|
79
|
+
(`packages/deliverables/README.md:12,27-28`). Cross-session agent memory:
|
|
80
|
+
unaddressed.
|
|
81
|
+
|
|
82
|
+
**07–09 briefs.** Sandbox = file-effect policy classes
|
|
83
|
+
(read-only/workspace-write/danger-full-access) with Landlock/Seatbelt/Windows
|
|
84
|
+
backends and one-time approved escalation (`packages/sandbox/README.md:12,30`);
|
|
85
|
+
one shell executor per composition (`packages/shell/README.md:12,38`); one
|
|
86
|
+
`ctx.subprocess` service with bounded output and scrubbed env
|
|
87
|
+
(`packages/subprocess/README.md:12,27`); telemetry is an OTel transport with
|
|
88
|
+
`FEEDBACK_ONLY` default (`packages/telemetry/README.md:12,25`,
|
|
89
|
+
`packages/bundle/base/README.md:50`).
|
|
90
|
+
|
|
91
|
+
## Open questions, answered
|
|
92
|
+
|
|
93
|
+
1. Tool plugin interface → `defineTool` + `ctx.tools` registry; schemas flow to
|
|
94
|
+
the prompt via ToolRuntime's self-registration.
|
|
95
|
+
2. `guard` → not the approval mechanism; gate = `tools/pre-execute` pipeline in
|
|
96
|
+
dsh-tools.
|
|
97
|
+
3. `ptc-runtime` → programmatic tool calling: models get exactly `run_code` plus
|
|
98
|
+
a generated SDK; executionInstructions carry syntax/state guidance.
|
|
99
|
+
4. `spill` → out-of-context storage returning locators; feeds compaction policy.
|
|
100
|
+
5. `acp` → Agent Client Protocol islands (one of several subagent backends).
|
|
101
|
+
6. Plugin prompt contributions → ordered sections incl. `.tools()` providers;
|
|
102
|
+
ordering is a validated contract (see arm 01).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Source: harness² (Google Research)
|
|
2
|
+
|
|
3
|
+
- Origin: [google-research/harness2](https://github.com/google-research/harness2)
|
|
4
|
+
(Apache 2.0) and the paper *Harness²: Recursive Agent Harnessing for an Open
|
|
5
|
+
World* — Xu et al., 2026, [arXiv:2610.14224](https://arxiv.org/abs/2610.14224)
|
|
6
|
+
(PDF saved at `external/harness2/harness2-arxiv-2610.14224.pdf`). Project page:
|
|
7
|
+
[harness2.github.io](https://harness2.github.io/). Site: 11.5 pts WorkBuddy-Bench
|
|
8
|
+
etc. — verify exact numbers from the paper before citing.
|
|
9
|
+
- Local clone: `external/harness2` (Python). Note: substrate adapters include
|
|
10
|
+
`opencode.py` and `codex.py` — harness² wraps other harnesses.
|
|
11
|
+
- Why studied: the conceptual core of this study. A harness = everything around a
|
|
12
|
+
frozen model (prompts, tools, memory, skills, orchestration); harnessing =
|
|
13
|
+
optimizing that system recursively, at task level (edit → probe → compose) and
|
|
14
|
+
harness level (experience reflector → improvement harness).
|
|
15
|
+
|
|
16
|
+
## Verified layout
|
|
17
|
+
|
|
18
|
+
`harness2/core/`: `prompts.py`, `proposer.py`, `recursion.py`, `selection.py`,
|
|
19
|
+
`judge.py`, `library.py`, `ledger.py`, `tree.py`, `context.py`, `spec.py`,
|
|
20
|
+
`schedule.py`, `runmark.py`, `report.py`.
|
|
21
|
+
|
|
22
|
+
`harness2/substrate/`: `base.py`, `codex.py`, `opencode.py`.
|
|
23
|
+
|
|
24
|
+
`harness2/cli/`: `bridge.py`, `judge.py`, `run_sweep.py`, `check.py`, `report.py`,
|
|
25
|
+
`setup.py`, `demo.py`.
|
|
26
|
+
|
|
27
|
+
Docs: `docs/BENCHMARKS.md`, `docs/EXPERIMENTS.md`, `docs/SETUP.md`.
|
|
28
|
+
|
|
29
|
+
## Map to arms
|
|
30
|
+
|
|
31
|
+
- Arm 10 (refinement ⭐ — primary): `proposer` (harness editor: invariant vs domain
|
|
32
|
+
edits), probes/executor for candidates, `selection` (composer choosing among
|
|
33
|
+
candidates), `recursion` (two levels), `judge` (answer-free self-labelling of
|
|
34
|
+
rollouts), `library` (experience library), `ledger` — compare against this
|
|
35
|
+
harness's Propose–Probe–Compose, answer-free selection, experience library,
|
|
36
|
+
refine/ledger identity, and `RefineHost` isolation.
|
|
37
|
+
- Arm 01 (prompt): `tree.py` + `context.py` — what their harness tree/editable
|
|
38
|
+
files look like vs this harness's versions never, only superseded.
|
|
39
|
+
- Arm 06 (memory): `library.py` — cross-task experience write-back policy.
|
|
40
|
+
|
|
41
|
+
## Open questions for the audit
|
|
42
|
+
|
|
43
|
+
1. What is editable in their harness tree, what is invariant, and how does
|
|
44
|
+
"invariant" map to this harness's capped/validated c1–c4?
|
|
45
|
+
2. How does their self-judge stay answer-free — is its label visible to proposer
|
|
46
|
+
and composer, and does its error bar matter?
|
|
47
|
+
3. How are candidate probes isolated (workspace, approvals refused)?
|
|
48
|
+
4. What does the experience reflector write back, with what schema and trigger?
|
|
49
|
+
5. Which substrate contract does `substrate/opencode.py` actually need — is one
|
|
50
|
+
substrate adapter for this harness feasible via `RefineHost`?
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Source: Kimi CLI (Moonshot)
|
|
2
|
+
|
|
3
|
+
- Origin: [MoonshotAI/Kimi-CLI](https://github.com/MoonshotAI/Kimi-CLI) — Moonshot's
|
|
4
|
+
coding agent CLI for Kimi models; also source for the K2 agent-harness lessons in
|
|
5
|
+
[the Kimi K2 technical report](https://github.com/MoonshotAI/Kimi-K2/blob/main/tech_report.md)
|
|
6
|
+
(agent-related: tool design, agentic data pipeline, prompt formats — offline read).
|
|
7
|
+
- Local clone: `external/kimi-cli` (30 MB, Python + Bun packages). **Note: neuron
|
|
8
|
+
shipped archived** — `packages/kosong/README.md:3-5` states the package (and the
|
|
9
|
+
Kimi CLI monorepo) is no longer maintained; PyPI versions remain. Treat as a
|
|
10
|
+
historical design point, not a living one.
|
|
11
|
+
- Why studied: they report agent-capability numbers from harness choices
|
|
12
|
+
(tool-call reliability, cross-platform behavior), and their harness is young —
|
|
13
|
+
a good contrast to opencode/dsh maturity.
|
|
14
|
+
|
|
15
|
+
## Verified layout
|
|
16
|
+
|
|
17
|
+
**Archived, no longer maintained** — `external/kimi-cli/packages/kosong/README.md:3-5`
|
|
18
|
+
states the Kimi CLI monorepo is archived; kosong itself ("LLM abstraction layer:
|
|
19
|
+
unified messages, async tool orchestration, pluggable providers", `README.md:9-10`)
|
|
20
|
+
remains published on PyPI.
|
|
21
|
+
- `packages/`: `kaos`, `kimi-code`, `kosong` — names suggest an OS-abstraction
|
|
22
|
+
layer (kaos), the coding product (kimi-code), and a core/primitive crate
|
|
23
|
+
(kosong). Verify.
|
|
24
|
+
- `klips/`, `sdks/`, `examples/`, `docs/`.
|
|
25
|
+
|
|
26
|
+
## Map to arms (pending verification per claim)
|
|
27
|
+
|
|
28
|
+
- Arm 02 (tools): kosong primitives (tool call protocol), shell/file tools.
|
|
29
|
+
- Arm 08 (execution): kaos (platform abstraction — include zsh/POSIX-specific
|
|
30
|
+
behavior matrices from their reports).
|
|
31
|
+
- Arm 01 (prompt): kimi-code's prompt assembly; system prompt size/variants.
|
|
32
|
+
- Arm 03 (subagents): verify — does kimi-cli have subagents or just parallel
|
|
33
|
+
tools?
|
|
34
|
+
- Arm 09 (observability): `klips`/vis.
|
|
35
|
+
|
|
36
|
+
## Open questions for the audit
|
|
37
|
+
|
|
38
|
+
1. What is kosong's tool interface, and does it version tool schemas?
|
|
39
|
+
2. kaos: which OS differences do they encode (Windows/macOS sandbox quirks)?
|
|
40
|
+
3. How does the CLI do cost/usage accounting and context tracking?
|
|
41
|
+
4. Tech report: what harness decisions do they credit for SWE-bench/ToolBench
|
|
42
|
+
deltas —tool granularity, prompting, or sandboxing?
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Source: oh-my-pi (omp) — the open tuning of pi
|
|
2
|
+
|
|
3
|
+
- Origin: [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi); a fork of
|
|
4
|
+
[badlogic/pi-mono](https://github.com/badlogic/pi-mono) by @mariozechner. This
|
|
5
|
+
harness family's Pi session runtime is upstream pi; omp is the sharpened sibling.
|
|
6
|
+
- Local clone: `external/omp` (907 MB incl. assets/Bazel).
|
|
7
|
+
- Status: **arm-01 verified in person; arms 02–06 audited** (explorer report;
|
|
8
|
+
my spot-check of `date-cwd-reminder.ts` done).
|
|
9
|
+
|
|
10
|
+
## Verified layout
|
|
11
|
+
|
|
12
|
+
Rust crates (`crates/`): `pi-ast`, `pi-builtins`, `pi-diff`, `pi-edit`, `pi-iso`,
|
|
13
|
+
`pi-natives`, `pi-predict`, `pi-shell`, `pi-vcs`, `pi-vfs`, `pi-voice`,
|
|
14
|
+
`pi-walker`. Bun/TS packages: `coding-agent` (the surface), `metaharness`,
|
|
15
|
+
`mnemopi`, `snapcompact`, `agent`, `stats`, `tui`, `wire`, `catalog`.
|
|
16
|
+
|
|
17
|
+
## Core facts per arm (audited)
|
|
18
|
+
|
|
19
|
+
**02 tools.** 30 built-in tool names as a const list
|
|
20
|
+
(`packages/coding-agent/src/tools/builtin-names.ts:1-32`) + 3 hidden
|
|
21
|
+
(`think/yield/goal`, `:36`; root README's "31" claim disagrees — unverified).
|
|
22
|
+
`createTools` resolves/constructs/registers into `session.toolRegistry`
|
|
23
|
+
(`.../tools/index.ts:554-591,831-861`); settings gate each tool
|
|
24
|
+
(`:96-105`). Tool definition is rich: `AgentTool` extends `Tool` with label,
|
|
25
|
+
TypeBox parameters, execute, renderCall/renderResult hooks, an **approval tier
|
|
26
|
+
declaration** (read|write|exec, exec default), `loadMode` essential/discoverable,
|
|
27
|
+
`docTopics` (`xd://` links), per-call concurrency (shared/exclusive), and
|
|
28
|
+
speculation policy (`packages/agent/src/types.ts:1129-1243`). Descriptions are
|
|
29
|
+
rendered from static `.md` templates via a dynamic getter (`.../tools/read.ts:975-996`).
|
|
30
|
+
Tool prompts never inline (`AGENTS.md` "Prompts never in code"). Rust side:
|
|
31
|
+
`pi-natives` = PTY/grep/diff/EditStore/snapcompact.rs bindings;
|
|
32
|
+
`pi-edit` = patch engine; `pi-shell` = in-process bash host **with vendored
|
|
33
|
+
uutils coretools (`pi-builtins`) — a real Unix environment**; `pi-edit`+`pi-shell`
|
|
34
|
+
compose the editing/shell backbone
|
|
35
|
+
(`crates/pi-shell/Cargo.toml:18`; `crates/pi-builtins/src/`). MCP: `mcp__<server>_<tool>`
|
|
36
|
+
names, 64-char cap, deduped transforms before registry reconciliation
|
|
37
|
+
(`.../mcp/tool-bridge.ts:428,468-491`; `session/session-tools.ts:2231-2264`).
|
|
38
|
+
|
|
39
|
+
**Gate (02/07).** Tier × policy per tool: user-overridable `allow|deny|prompt`
|
|
40
|
+
per tool; modes `always-ask | write | yolo`; missing context **fails closed**
|
|
41
|
+
to always-ask (`.../tools/approval.ts:17-18,53-84,100`). Extension hooks wrap
|
|
42
|
+
every call (`extensibility/hooks/tool-wrapper.ts`).
|
|
43
|
+
|
|
44
|
+
**03 subagents.** The `task` tool; agent definitions discovered from bundled +
|
|
45
|
+
`~/.omp/agent/agents/*.md` + `.omp/agents/*.md` (`.../task/index.ts:4-10`,
|
|
46
|
+
`task/discovery.ts`). `SpawnRun` holds a semaphore permit, streams progress,
|
|
47
|
+
adopted by the owner on abort/binding (`task/spawn-run.ts:1-9,47-88`);
|
|
48
|
+
**speculative launch** starts children while the `tasks[]` arguments are still
|
|
49
|
+
streaming (`task/speculative-launch.ts`). Isolation: pinned child settings,
|
|
50
|
+
advisor forced off, **mid-turn compaction forced on** (whole assignment = one
|
|
51
|
+
turn), isolated runs get their own **worktree** and may not expose roots outside
|
|
52
|
+
it (`task/executor.ts:1132,4033-4055,4339`; `docs/compaction.md:76`). Structured
|
|
53
|
+
children always get `yield`; depth-limited recursion (`task/index.ts:45`).
|
|
54
|
+
`autoresearch` is a hillclimb/eval loop with dashboard + own git branch — no
|
|
55
|
+
spawn refs found (**unverified** whether it uses task).
|
|
56
|
+
|
|
57
|
+
**05 context.** Compaction triggers post-turn above
|
|
58
|
+
`resolveThresholdTokens`, mid-turn before requests, idle, and on
|
|
59
|
+
overflow-recovery (`.../session/session-maintenance.ts:626,2147,2246,2412`).
|
|
60
|
+
`compaction.methodOrder` strategy ladder: LLM summarize (regular/handoff), `shake`
|
|
61
|
+
(local mechanical elision to `artifact://` refs), `snapcompact`
|
|
62
|
+
(`docs/compaction.md:202-215`). **Snapcompact = deterministic, no LLM**:
|
|
63
|
+
discarded history serialized with caps into provider-aware PNG bitmaps
|
|
64
|
+
(fonts per provider family), persisted and re-attached each rebuild
|
|
65
|
+
(`packages/snapcompact/README.md:3-29,44-68`). Sizing: archive gets half the
|
|
66
|
+
headroom; kept context ≤ 60% of threshold, target ≤ 80%
|
|
67
|
+
(`docs/compaction.md:217,221`). Cache care: pruned outputs blanked only within
|
|
68
|
+
the model's `prompt-cache-lookback` bound (`docs/compaction.md:248`); summary
|
|
69
|
+
drops whole call/result pairs (`:250`); **byte-stable system prompt between
|
|
70
|
+
turns is a session invariant** (`session/agent-session.ts:2607`).
|
|
71
|
+
`compress/` is unrelated — a separate "dense prompt register" rewriter
|
|
72
|
+
(`compress/index.ts:2-11`).
|
|
73
|
+
|
|
74
|
+
**06 memory.** Five `memory.backend` modes: off | local | hindsight | mnemopi |
|
|
75
|
+
sharpshooter (`docs/memory.md:3-11`). Injection = Memory Guidance block at
|
|
76
|
+
session start from a project summary; outputs are per-project `MEMORY.md` +
|
|
77
|
+
lessons + `skills/` on disk. Pipeline: startup background job, two phases
|
|
78
|
+
(per-session extraction → global consolidation with lease+heartbeat; skipped
|
|
79
|
+
for subagents), SQLite job queues (`memories/index.ts:29-67`; `docs/memory.md:74-89`).
|
|
80
|
+
Injection budget shares 5000 tokens (summary+lessons, `docs/memory.md:132`);
|
|
81
|
+
`learn` lessons capped 100 × 2000 chars and redacted (`docs/memory.md:70`).
|
|
82
|
+
`hindsight` = remote vector service; recall on first turn, auto-retain every N
|
|
83
|
+
turns (`hindsight/state.ts:385-388`). `mnemopi` = local SQLite working/episodic
|
|
84
|
+
engine + `memory://` read protocol; user-facing tools `recall/retain/reflect/
|
|
85
|
+
memory_edit` (`packages/mnemopi/README.md:5-8`; `docs/memory.md:34-46`).
|
|
86
|
+
Written on minutes/days cadence — not immediately at task end.
|
|
87
|
+
|
|
88
|
+
**07–09 briefs.** `judgment/` resolves a Judge model role for typed judgments
|
|
89
|
+
(`judgment/index.ts:1-10`); `capability/` is the provider/extension loading
|
|
90
|
+
registry. Execution: inside-process unix env via pi-shell, always
|
|
91
|
+
non-interactive env (pagers off, TERM=dumb) (`exec/non-interactive-env.ts:6-25`);
|
|
92
|
+
no OS-level sandbox located (**unverified**). `omp stats` = local usage
|
|
93
|
+
dashboard, live ingest, port 3847 (`packages/stats/README.md:3,9,31-35`).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Source: opencode
|
|
2
|
+
|
|
3
|
+
- Origin: [sst/opencode](https://github.com/sst/opencode), the coding agent this
|
|
4
|
+
harness family uses day-to-day. TypeScript/Bun monorepo.
|
|
5
|
+
- Local clone: `external/opencode` (shallow, cloned 2026-10-21).
|
|
6
|
+
- Why studied as an anchor: battle-tested open harness; this harness already borrows
|
|
7
|
+
its mental model of sessions/agents/tools, so deltas are cheap to evaluate.
|
|
8
|
+
|
|
9
|
+
## Verified layout
|
|
10
|
+
|
|
11
|
+
- `packages/core/src/` — the harness core. Observed top-level: `agent.ts`,
|
|
12
|
+
`permission.ts`, `mcp.ts`, `filesystem.ts`, `instructions` dir,
|
|
13
|
+
`instruction-discovery.ts`, `compaction`? (not yet verified below alphabet
|
|
14
|
+
cut), `codemode/`, `config/`, `event-logger.ts`, `persistent-pty.ts`,
|
|
15
|
+
`models-dev/`, `job.ts`, `kv.ts`.
|
|
16
|
+
- `packages/` of interest beyond core: `agent`, `cli`, `plugin`,
|
|
17
|
+
`plugin-browser`, `plugins`, `server`, `session-ui`, `tui`, `codemode`,
|
|
18
|
+
`httpapi-codegen`, `protocol`, `sdk`.
|
|
19
|
+
- AGENTS.md at repo root states their engineering expectations.
|
|
20
|
+
|
|
21
|
+
## Map to arms (pending verification per claim)
|
|
22
|
+
|
|
23
|
+
- Arm 01 (prompt): `instructions/`, `instruction-discovery` — AGENTS.md-style
|
|
24
|
+
instruction discovery; ayurveda of stable/dynamic sections unknown.
|
|
25
|
+
- Arm 02 (tools): built-in tool set + MCP (`mcp.ts`) + tool providers via plugins.
|
|
26
|
+
- Arm 03 (subagents): `agent.ts` — primary/secondary agents by description.
|
|
27
|
+
- Arm 04 (skills): plugins and community plugins; the `plugins/` package.
|
|
28
|
+
- Arm 05 (context): compaction (verify location), message queueing.
|
|
29
|
+
- Arm 06 (memory): no first-class memory beyond instructions; community plugins.
|
|
30
|
+
- Arm 07 (governance): `permission.ts` — permission model, per-tool approval modes.
|
|
31
|
+
- Arm 08 (execution): `persistent-pty.ts`, `terminal/` package, containers package.
|
|
32
|
+
- Arm 09 (observability): `event-logger.ts`, events bus (`bus.ts`), TUI
|
|
33
|
+
trajectories.
|
|
34
|
+
|
|
35
|
+
## Open questions for the audit
|
|
36
|
+
|
|
37
|
+
1. Where is the session system prompt assembled, and is any of it cache-stable?
|
|
38
|
+
2. How do tool descriptions reach the model: generated, hardcoded, or provider
|
|
39
|
+
overridable?
|
|
40
|
+
3. What compaction exists in core, and is it triggered in-band?
|
|
41
|
+
4. How does the permission model express "always/deny/ask" per tool and per
|
|
42
|
+
pattern?
|
|
43
|
+
5. What do plugin tool providers get access to (context object shape)?
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Source: OpenHands (All Hands AI)
|
|
2
|
+
|
|
3
|
+
- Origin: [All-Hands-AI/OpenHands](https://github.com/All-Hands-AI/OpenHands) is now
|
|
4
|
+
the **Agent Canvas frontend** (TypeScript UI + backend orchestration); the agent
|
|
5
|
+
runtime itself lives in the [OpenHands/software-agent-sdk](https://github.com/OpenHands/software-agent-sdk)
|
|
6
|
+
(`openhands-sdk`, `openhands-agent-server`, `openhands-tools`,
|
|
7
|
+
`openhands-workspace`). README: each conversation runs in its own Docker
|
|
8
|
+
container with its own Agent Server and tools; Agent Server is a REST API on a
|
|
9
|
+
host/port.
|
|
10
|
+
- Local clones: `external/openhands` (41 MB UI/orchestration) and
|
|
11
|
+
`external/openhands-agent-sdk` (runtime).
|
|
12
|
+
- Why studied: the most productized open harness — UI, server, containers,
|
|
13
|
+
scheduling, and a clean agent/skill/microagent story in Python.
|
|
14
|
+
|
|
15
|
+
## Verified layout
|
|
16
|
+
|
|
17
|
+
- `external/openhands-agent-sdk/`: `openhands-sdk/` (agent, tools, llm, events),
|
|
18
|
+
`openhands-agent-server/`, `openhands-tools/`, `openhands-workspace/`,
|
|
19
|
+
`clients/`. (Deeper inventory pending.)
|
|
20
|
+
- `external/openhands/src/`: React app (`routes`, `stores`, `services`,
|
|
21
|
+
`extensions`, `hooks`).
|
|
22
|
+
|
|
23
|
+
## Map to arms (pending verification per claim)
|
|
24
|
+
|
|
25
|
+
- Arm 03 (subagents): SDK agents + Agent Server's conversation-per-container
|
|
26
|
+
isolation; scheduling via the separate `automation` repo.
|
|
27
|
+
- Arm 04 (skills): SDK's skill/microagent model (condenser? verify) — historically
|
|
28
|
+
"microagents" from `.openhands/` folders.
|
|
29
|
+
- Arm 05 (context): SDK condensation pipeline (researched: LLM-based
|
|
30
|
+
condensers) — worth auditing closely; this harness has explicit opinions here.
|
|
31
|
+
- Arm 06 (memory): microagents + per-agent state in SDK; frontend `library/`?
|
|
32
|
+
- Arm 07 (governance): server-side confirmation policy, sandboxed exec, security
|
|
33
|
+
modes.
|
|
34
|
+
- Arm 08 (execution): workspace containers, per-conversation isolation.
|
|
35
|
+
- Arm 09 (observability): event stream persisted per conversation; frontend
|
|
36
|
+
trajectory UI.
|
|
37
|
+
|
|
38
|
+
## Open questions for the audit
|
|
39
|
+
|
|
40
|
+
1. SDK `openhands-sdk/`: how are tools, skills, agents wired — what is the
|
|
41
|
+
`llm.py` ↔ tool schema path?
|
|
42
|
+
2. Condensers: which ones exist, when triggered, how events are rewritten — does
|
|
43
|
+
it preserve caching/prefix stability?
|
|
44
|
+
3. What does the Agent Server persist per conversation (format, retention).
|
|
45
|
+
4. How do microagents differ from skills (trigger on file/mention vs on-demand)?
|
|
46
|
+
5. Where does the UI fit in governance (approval UI) vs server-side `ToolPolicy`.
|