@xingular/harness 0.1.7 → 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 +97 -1
- package/LICENSE +202 -0
- package/NOTICE.md +22 -0
- package/README.md +187 -85
- package/THIRD_PARTY_LICENSES.md +942 -0
- package/dist/cli.js +13701 -13498
- 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 +808 -151
- package/docs/README.md +22 -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-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 +473 -56
- package/package.json +43 -13
- package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
- package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
- package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
- package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
- package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
- package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
- package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
- package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
- package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
- package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
- package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
- package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
- package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
- package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
- package/src/accounts/accounts.test.ts +0 -333
- package/src/accounts/accounts.ts +0 -658
- package/src/accounts/env.test.ts +0 -95
- package/src/accounts/env.ts +0 -338
- package/src/accounts/secrets.ts +0 -50
- package/src/accounts/store.ts +0 -338
- package/src/capabilities/api.ts +0 -75
- package/src/capabilities/runSnapshot.ts +0 -59
- package/src/capabilities/types.ts +0 -34
- package/src/cli.ts +0 -118
- package/src/core/bus.ts +0 -34
- package/src/core/changes.ts +0 -33
- package/src/core/env.ts +0 -27
- package/src/core/errors.ts +0 -32
- package/src/core/frontmatter.ts +0 -47
- package/src/core/fs.test.ts +0 -38
- package/src/core/fs.ts +0 -92
- package/src/core/index.ts +0 -193
- package/src/core/path.test.ts +0 -14
- package/src/core/path.ts +0 -79
- package/src/core/projects.ts +0 -90
- package/src/core/text.ts +0 -39
- package/src/harness.ts +0 -312
- package/src/hub/catalog.json +0 -123
- package/src/hub/cli.ts +0 -59
- package/src/hub/hub.test.ts +0 -205
- package/src/hub/hub.ts +0 -256
- package/src/hub/schema.ts +0 -81
- package/src/index.ts +0 -75
- package/src/mcp/connections.ts +0 -614
- package/src/mcp/manager.ts +0 -130
- package/src/mcp/oauth.ts +0 -195
- package/src/mcp/scopeMigration.test.ts +0 -79
- package/src/mcp/scopeMigration.ts +0 -204
- package/src/mcp/service.test.ts +0 -376
- package/src/mcp/service.ts +0 -549
- package/src/mcp/types.ts +0 -108
- package/src/memory/api.test.ts +0 -82
- package/src/memory/api.ts +0 -303
- package/src/memory/blocks.test.ts +0 -78
- package/src/memory/blocks.ts +0 -408
- package/src/memory/caller.ts +0 -69
- package/src/memory/curation.test.ts +0 -163
- package/src/memory/curation.ts +0 -64
- package/src/memory/dispatch.ts +0 -59
- package/src/memory/facts.test.ts +0 -41
- package/src/memory/facts.ts +0 -248
- package/src/memory/graph.ts +0 -103
- package/src/memory/health.test.ts +0 -130
- package/src/memory/health.ts +0 -74
- package/src/memory/maintainer.ts +0 -272
- package/src/memory/maintenance.test.ts +0 -176
- package/src/memory/maintenance.ts +0 -518
- package/src/memory/migrate.ts +0 -79
- package/src/memory/operations.ts +0 -150
- package/src/memory/proposals.test.ts +0 -168
- package/src/memory/proposals.ts +0 -584
- package/src/memory/recall.test.ts +0 -115
- package/src/memory/recall.ts +0 -278
- package/src/memory/references.ts +0 -77
- package/src/memory/runContext.ts +0 -93
- package/src/memory/secrets.ts +0 -6
- package/src/memory/store.test.ts +0 -66
- package/src/memory/store.ts +0 -385
- package/src/memory/wiki.test.ts +0 -47
- package/src/memory/wiki.ts +0 -422
- package/src/memory/wikiIndex.test.ts +0 -88
- package/src/memory/wikiIndex.ts +0 -116
- package/src/plugins/api.ts +0 -181
- package/src/plugins/attachments.test.ts +0 -84
- package/src/plugins/attachments.ts +0 -141
- package/src/plugins/builtin.ts +0 -82
- package/src/plugins/catalogue.test.ts +0 -254
- package/src/plugins/catalogue.ts +0 -251
- package/src/plugins/cli.ts +0 -184
- package/src/plugins/discover.ts +0 -151
- package/src/plugins/firstParty.test.ts +0 -143
- package/src/plugins/firstParty.ts +0 -129
- package/src/plugins/hooks.test.ts +0 -250
- package/src/plugins/hooks.ts +0 -239
- package/src/plugins/identity.ts +0 -37
- package/src/plugins/install.test.ts +0 -107
- package/src/plugins/install.ts +0 -106
- package/src/plugins/inventory.ts +0 -123
- package/src/plugins/manifest.ts +0 -76
- package/src/plugins/plugins.test.ts +0 -205
- package/src/plugins/plugins.ts +0 -189
- package/src/plugins/proposal.ts +0 -121
- package/src/plugins/runtime.test.ts +0 -40
- package/src/plugins/runtime.ts +0 -82
- package/src/plugins/trust.ts +0 -142
- package/src/plugins/types.ts +0 -149
- package/src/prompt/compile.test.ts +0 -261
- package/src/prompt/compile.ts +0 -732
- package/src/server/methods.ts +0 -349
- package/src/server/remote.ts +0 -77
- package/src/server/rpc.ts +0 -116
- package/src/server/serve.ts +0 -28
- package/src/server/server.test.ts +0 -174
- package/src/sessions/approvals.ts +0 -118
- package/src/sessions/contracts.ts +0 -336
- package/src/sessions/conversation.test.ts +0 -177
- package/src/sessions/extensionSession.test.ts +0 -74
- package/src/sessions/extensionUi.test.ts +0 -65
- package/src/sessions/extensionUi.ts +0 -102
- package/src/sessions/history.ts +0 -51
- package/src/sessions/lineageJoin.ts +0 -75
- package/src/sessions/policy.ts +0 -36
- package/src/sessions/pricing.ts +0 -60
- package/src/sessions/questionBatches.test.ts +0 -110
- package/src/sessions/reasoningSummaries.ts +0 -59
- package/src/sessions/registry.ts +0 -381
- package/src/sessions/runIndex.ts +0 -99
- package/src/sessions/runStore.test.ts +0 -152
- package/src/sessions/runStore.ts +0 -332
- package/src/sessions/runner.ts +0 -604
- package/src/sessions/runtimeResources.test.ts +0 -61
- package/src/sessions/sessions.test.ts +0 -549
- package/src/sessions/sessions.ts +0 -339
- package/src/skills/registry.test.ts +0 -104
- package/src/skills/registry.ts +0 -413
- package/src/terminal/accountsMenu.test.ts +0 -225
- package/src/terminal/accountsMenu.ts +0 -382
- package/src/terminal/cli.ts +0 -149
- package/src/terminal/client.ts +0 -74
- package/src/terminal/control.test.ts +0 -23
- package/src/terminal/control.ts +0 -23
- package/src/terminal/controller.ts +0 -291
- package/src/terminal/hubMenu.ts +0 -24
- package/src/terminal/launch.test.ts +0 -25
- package/src/terminal/launch.ts +0 -48
- package/src/terminal/piExtension.lifecycle.test.ts +0 -55
- package/src/terminal/piExtension.ts +0 -259
- package/src/terminal/pluginControl.test.ts +0 -146
- package/src/terminal/pluginMenu.ts +0 -112
- package/src/terminal/socket.test.ts +0 -71
- package/src/terminal/socket.ts +0 -232
- package/src/terminal/standalone.test.ts +0 -167
- package/src/terminal/standalone.ts +0 -153
- package/src/terminal/terminal.test.ts +0 -399
- package/src/terminal/terminals.ts +0 -553
- package/src/terminal/tui/application.test.ts +0 -114
- package/src/terminal/tui/application.ts +0 -491
- package/src/terminal/tui/commands.test.ts +0 -218
- package/src/terminal/tui/commands.ts +0 -361
- package/src/terminal/tui/dialogs.ts +0 -301
- package/src/terminal/tui/editor.test.ts +0 -84
- package/src/terminal/tui/editor.ts +0 -79
- package/src/terminal/tui/keybindings.test.ts +0 -22
- package/src/terminal/tui/keybindings.ts +0 -50
- package/src/terminal/tui/piAdapter.ts +0 -62
- package/src/terminal/tui/presentation.test.ts +0 -79
- package/src/terminal/tui/questions.test.ts +0 -41
- package/src/terminal/tui/questions.ts +0 -47
- package/src/terminal/tui/runtime.socket.test.ts +0 -104
- package/src/terminal/tui/runtime.test.ts +0 -215
- package/src/terminal/tui/runtime.ts +0 -388
- package/src/terminal/tui/sessionUi.ts +0 -24
- package/src/terminal/tui/settings.test.ts +0 -150
- package/src/terminal/tui/settings.ts +0 -188
- package/src/terminal/tui/status.test.ts +0 -70
- package/src/terminal/tui/status.ts +0 -109
- package/src/terminal/tui/theme.ts +0 -174
- package/src/terminal/tui/tools.test.ts +0 -145
- package/src/terminal/tui/tools.ts +0 -142
- package/src/terminal/tui/transcript.test.ts +0 -25
- package/src/terminal/tui/transcript.ts +0 -124
- package/src/terminal/tui/ui.test.ts +0 -313
- package/src/terminal/tui/ui.ts +0 -166
- package/src/terminal/tui/welcome.ts +0 -102
- package/src/tools/askUser.test.ts +0 -69
- package/src/tools/askUser.ts +0 -59
- package/src/tools/definitions.ts +0 -187
- package/src/tools/maintenance.ts +0 -24
- package/src/tools/memoryTools.ts +0 -22
- package/src/tools/pluginPropose.ts +0 -41
- package/src/tools/registryWrite.test.ts +0 -101
- package/src/tools/registryWrite.ts +0 -182
- package/src/tools/spawnSubagent.ts +0 -92
- package/src/tools/types.ts +0 -39
- package/src/web/safeRequest.ts +0 -171
- package/src/web/text.ts +0 -53
- package/src/web/tools.ts +0 -134
- package/src/web/web.test.ts +0 -141
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# EXP-0001 — Results
|
|
2
|
+
|
|
3
|
+
- **Status:** completed on one local machine; slower-computer validation remains open.
|
|
4
|
+
- **Run date:** 2026-10-20.
|
|
5
|
+
- **Code:** base commit `24a9390` plus the shared, uncommitted worktree. Baseline and treatment
|
|
6
|
+
used the same profiler and workload; only the draft synchronization implementation differed.
|
|
7
|
+
- **Runtime:** Node v26.8.2, Vitest 4.1.11, macOS arm64, Apple M2, 8 CPU cores.
|
|
8
|
+
- **Workload:** 520 keys; 4 ms inter-key timer; 8 ms mocked draft reply; full TUI layout rendered per
|
|
9
|
+
key at 120 by 40, with terminal output intercepted. Separate local socket sample: 120 requests.
|
|
10
|
+
|
|
11
|
+
| Variant | Draft RPCs | Draft queue drain | Total sequence | Full TUI frame p50/p95 | Input plus frame p50/p95 |
|
|
12
|
+
|---|---:|---:|---:|---:|---:|
|
|
13
|
+
| Serialized baseline | 520 | 1,101.67 ms | 4,557.45 ms | 1.975 / 3.402 ms | 2.145 / 3.605 ms |
|
|
14
|
+
| Latest-state treatment | 401 | 11.63 ms | 3,440.87 ms | 1.953 / 3.199 ms | 2.155 / 3.410 ms |
|
|
15
|
+
|
|
16
|
+
The treatment reduced draft requests by 22.9%, queue drain by 98.9%, and total sequence time by
|
|
17
|
+
24.5%. Full-frame p95 was 6.0% lower and combined input/frame p95 was 5.4% lower in these single
|
|
18
|
+
runs; the p50 frame time was effectively unchanged. The small p95 differences are directional only
|
|
19
|
+
because there was one 520-key run per variant.
|
|
20
|
+
|
|
21
|
+
The separately measured local socket p95 was 0.122 ms for the baseline and 0.118 ms for treatment.
|
|
22
|
+
Editor-only input/render p95 was 0.157 ms and 0.161 ms respectively. These numbers indicate that
|
|
23
|
+
the editor itself was inexpensive on this machine; the treatment mainly prevents request backlog
|
|
24
|
+
when replies take longer than normal.
|
|
25
|
+
|
|
26
|
+
## Uncertainty, failures and limits
|
|
27
|
+
|
|
28
|
+
The mocked 8 ms response is about 65 times the measured 0.12 ms local socket p95, so the queue
|
|
29
|
+
improvement is strongest evidence for slow-reply conditions. The profile does not observe physical
|
|
30
|
+
terminal paint and was not run on the reported slower computer. That computer must run the profile
|
|
31
|
+
before claiming the user's lag is fixed there.
|
|
32
|
+
|
|
33
|
+
The focused Harness terminal/editor suites passed: 52 passed, 4 skipped. The opt-in profile passed
|
|
34
|
+
all three profile tests. The full Harness suite had 611 passing tests and one failure in the existing
|
|
35
|
+
untracked `src/terminal/tui/treeModel.test.ts` search expectation; Harness typecheck also reports
|
|
36
|
+
two errors in the existing untracked `treePicker` files. Neither failure is in the changed files.
|
|
37
|
+
|
|
38
|
+
Sibling App layer/UI checks, sidecar tests and Rust tests passed. App typecheck and root tests still
|
|
39
|
+
fail on existing Guide fixture/content mismatches in the shared App worktree.
|
|
40
|
+
|
|
41
|
+
## Conclusion
|
|
42
|
+
|
|
43
|
+
The hypothesis is supported for backlog under slow draft replies: coalescing cuts queued updates
|
|
44
|
+
and drain time without changing measured frame performance or the focused behavior tests. Whether
|
|
45
|
+
this resolves the reported slow-computer typing lag is inconclusive until the profile is run there
|
|
46
|
+
and the result is checked against interactive use.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: EXP-0002
|
|
3
|
+
title: OpenTUI terminal typing latency against pure Pi and opencode
|
|
4
|
+
status: completed
|
|
5
|
+
created: 2026-10-21
|
|
6
|
+
updated: 2026-10-21
|
|
7
|
+
related: [EXP-0001, ADR-0006]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# EXP-0002 — OpenTUI terminal typing latency
|
|
11
|
+
|
|
12
|
+
## Question and falsifiable hypothesis
|
|
13
|
+
|
|
14
|
+
Why does typing in the Harness terminal feel slow, and do targeted frontend changes bring its
|
|
15
|
+
keystroke-to-screen latency and CPU use in line with pure Pi and opencode while idle, after a long
|
|
16
|
+
history, and while a reply streams?
|
|
17
|
+
|
|
18
|
+
Hypotheses, from code review before measuring: (1) the renderer's continuous mode makes every key
|
|
19
|
+
wait for a frame tick; (2) every change rebuilds the whole view and the Solid tree, and a streamed
|
|
20
|
+
delta recreates the reply's markdown renderable; (3) each runtime event publishes synchronously, with
|
|
21
|
+
no coalescing; (4) per-request socket connections add steady CPU. EXP-0001 measured the old Pi
|
|
22
|
+
frontend, which ADR-0006 removed, so it says nothing about this frontend.
|
|
23
|
+
|
|
24
|
+
## Targets and controls
|
|
25
|
+
|
|
26
|
+
- **Xingular Harness:** `node dist/cli.js` with isolated `--state` and `--data`, an API-key account,
|
|
27
|
+
and the loopback model in the account's shared `models.json`.
|
|
28
|
+
- **Pure Pi:** `@earendil-works/pi-coding-agent` 1.2.0 `dist/bundle/cli.js` with an isolated
|
|
29
|
+
`PI_CODING_AGENT_DIR` (never `~/.pi`).
|
|
30
|
+
- **opencode:** v2.1.0, `--standalone`, isolated XDG folders and an `OPENCODE_CONFIG` that points an
|
|
31
|
+
`@ai-sdk/openai-compatible` provider at the loopback model.
|
|
32
|
+
- **Fixed:** 160 by 45 PTY, `TERM=xterm-256color`, `COLORTERM=truecolor`; four rounds of 60 keys
|
|
33
|
+
from `zqxjkvwy` (never produced by the replies) at 35 ms; the first 8 keys of a round are not
|
|
34
|
+
scored; the loopback server answers all three targets identically.
|
|
35
|
+
|
|
36
|
+
## Scenarios
|
|
37
|
+
|
|
38
|
+
- **idle:** a fresh session, nothing running.
|
|
39
|
+
- **history:** after the model has looped 80 `read` tool calls (about 240 messages).
|
|
40
|
+
- **stream:** three rounds typed while a reply streams 60 markdown chunks per second for 30 s, with
|
|
41
|
+
headings and code blocks. In a full run this follows `history`, so it streams over a long session.
|
|
42
|
+
- **approval / question** (Harness only): typing while a tool approval, then an `ask_user` question,
|
|
43
|
+
waits above the composer.
|
|
44
|
+
- **real:** `--real` runs `stream` with each tool's own login; for Harness, the Codex account on
|
|
45
|
+
`openai-codex` / `gpt-6-luna`.
|
|
46
|
+
|
|
47
|
+
## Metric and measurement
|
|
48
|
+
|
|
49
|
+
Latency is the time from writing a key to the PTY until the typed prefix ending at that key is
|
|
50
|
+
visible on a pyte virtual screen (nearest-rank p50/p95/p99, max). CPU is the tree's CPU time from
|
|
51
|
+
`ps` over the typing window. Bytes per key is PTY output divided by keys. Hot paths were found with
|
|
52
|
+
`bun --cpu-prof --cpu-prof-md` through `XINGULAR_HARNESS_BUN`.
|
|
53
|
+
|
|
54
|
+
The metric includes the frontend, the PTY and pyte parsing; it does not include a terminal emulator's
|
|
55
|
+
paint. A key that never appears (dropped) is stamped when later text shows, so dropped keys appear
|
|
56
|
+
as very large latencies rather than as misses.
|
|
57
|
+
|
|
58
|
+
## Success criteria
|
|
59
|
+
|
|
60
|
+
Harness p95 at or below opencode's and within 1.5 times pure Pi's in every scenario, idle latency
|
|
61
|
+
that does not grow with history, and streaming CPU no higher than opencode's.
|
|
62
|
+
|
|
63
|
+
## Reproduction
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
npm run build
|
|
67
|
+
python3 scripts/profile-terminal-latency.py --targets xingular,pi,opencode --output <dir>
|
|
68
|
+
python3 scripts/profile-terminal-latency.py --targets xingular --scenarios question --output <dir>
|
|
69
|
+
python3 scripts/profile-terminal-latency.py --real --targets xingular --setup /model '\r' gpt-6-luna '\r' --output <dir>
|
|
70
|
+
```
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# EXP-0002 — Results
|
|
2
|
+
|
|
3
|
+
- **Status:** completed on one machine; not yet repeated on a slower computer.
|
|
4
|
+
- **Run date:** 2026-10-21.
|
|
5
|
+
- **Code:** base commit `24a9390` on `harness2` plus the shared, uncommitted worktree (another session
|
|
6
|
+
was editing the same frontend in parallel; every run used the tree as built at that moment).
|
|
7
|
+
- **Runtime:** macOS arm64, Apple M2, 8 cores; Node v26.8.2; Bun 1.4.2; OpenTUI 0.6.6; Pi 1.2.0;
|
|
8
|
+
opencode 2.1.0; pyte for the virtual screen.
|
|
9
|
+
|
|
10
|
+
All latencies in ms, keystroke to visible on screen, p50 / p95 (p99 where it matters). Lower is better.
|
|
11
|
+
|
|
12
|
+
## Final comparison (loopback model, identical replies)
|
|
13
|
+
|
|
14
|
+
| Scenario | Xingular before | Xingular after | Pure Pi | opencode `--standalone` |
|
|
15
|
+
|---|---:|---:|---:|---:|
|
|
16
|
+
| idle | 13.1 / 19.2 | 5.1 / 10.1 | 3.9 / 6.2 | 7.5 / 10.9 |
|
|
17
|
+
| history (≈240 messages) | 13.2 / 20.3 | 5.2 / 10.6 | 5.1 / 10.4 | 9.8 / 13.1 |
|
|
18
|
+
| stream over history | 13.3 / 23.7 | 8.1 / 23.5 (p99 26.5) | 3.1 / 22.2 (p99 29.4) | 9.1 / 28.0 (p99 33.2) |
|
|
19
|
+
| CPU while streaming | 73.3% | 15.0% | 14.3% | 36.3% |
|
|
20
|
+
| CPU at rest, nothing typed | — | 2.5% | 0.0% | 3.4% |
|
|
21
|
+
|
|
22
|
+
Harness-only scenarios:
|
|
23
|
+
|
|
24
|
+
| Scenario | Before | After |
|
|
25
|
+
|---|---:|---:|
|
|
26
|
+
| typing into a tool-approval dialog during a run | 20.3 / 36.2 | 7.6 / 13.7 |
|
|
27
|
+
| typing while an `ask_user` question waits | 5.7 / 1,154.5 (max 1,402) — keys dropped | 5.0 / 12.9 (max 74) |
|
|
28
|
+
|
|
29
|
+
Real model (each tool's own login, `stream` scenario, three rounds while the reply streams):
|
|
30
|
+
|
|
31
|
+
| Target | Model | p50 / p95 / p99 / max | CPU |
|
|
32
|
+
|---|---|---:|---:|
|
|
33
|
+
| Xingular, after | Codex account, `openai-codex` / `gpt-6-luna` | 6.2 / 12.9 / 32.5 / 48.1 | 15.2% |
|
|
34
|
+
| opencode | its own login, MiniMax M3.1 Flash Free | 11.6 / 24.8 / 30.8 / 40.5 | 33.6% |
|
|
35
|
+
|
|
36
|
+
Pure Pi was not run with real credentials: its only real logins are OAuth accounts whose refresh
|
|
37
|
+
tokens rotate, and copying them into a second client could sign the Harness account out.
|
|
38
|
+
|
|
39
|
+
## What each change did
|
|
40
|
+
|
|
41
|
+
Full-run rows stream on top of `history`; the "stream only" rows start fresh and are compared only
|
|
42
|
+
with each other.
|
|
43
|
+
|
|
44
|
+
| Step | idle | history | stream | stream CPU |
|
|
45
|
+
|---|---:|---:|---:|---:|
|
|
46
|
+
| Baseline | 13.1 / 19.2 | 13.2 / 20.3 | 13.3 / 23.7 | 73.3% |
|
|
47
|
+
| 1. Render on demand (no `renderer.start()`) | 4.9 / 9.0 | 7.2 / 8.5 | 16.5 / 26.3 | 72.2% |
|
|
48
|
+
| 2. Store + `reconcile` by id, `<markdown streaming>`, coalesced `change()` at 16 ms | 4.8 / 8.8 | 4.7 / 9.1 | 18.0 / 28.1 | 30.2% |
|
|
49
|
+
| stream only: 2 + publish at 33 ms | | | 19.4 / 28.1 | |
|
|
50
|
+
| stream only: 2 + `maxFps: 120` | | | 13.6 / 20.0 | |
|
|
51
|
+
| stream only: 2 + both | | | 7.7 / 20.0 | |
|
|
52
|
+
| 3. 33 ms only while running, `maxFps: 120` | 4.8 / 9.7 | 4.8 / 9.0 | 10.0 / 24.0 (p99 34.7, max 45.0) | 25.0% |
|
|
53
|
+
| 4. Socket keep-alive, statistics cache, per-message transcript cache | 4.9 / 6.0 | 4.7 / 6.1 | 6.0 / 19.2 (p99 23.3) | 14.9% |
|
|
54
|
+
| 5. Input publishes at once, draft read at key time, dock reply fix | 5.1 / 10.1 | 5.2 / 10.6 | 8.1 / 23.5 (p99 26.5) | 15.0% |
|
|
55
|
+
|
|
56
|
+
The CPU profile of the baseline stream (Bun `--cpu-prof`) attributed 34% of samples to `change()` →
|
|
57
|
+
Solid updates, 18% to re-highlighting text (`startHighlight` → `setStyledText`), about 12% to
|
|
58
|
+
destroying and recreating renderables, about 30% to native painting, and 16% to socket requests:
|
|
59
|
+
two 100 ms polls and every draft update each opened a new Unix-socket connection.
|
|
60
|
+
|
|
61
|
+
Step 5 fixed correctness problems found while measuring, at no material latency cost:
|
|
62
|
+
|
|
63
|
+
- **Dropped keys:** while a question waited, letters the dock did not use reached nothing, so typing
|
|
64
|
+
showed only after an `x` happened to collapse the dock. They now move focus to the composer.
|
|
65
|
+
- **Stale draft on Enter:** OpenTUI reports composer text in a microtask after all keys of one input
|
|
66
|
+
chunk. Keys and Enter arriving together (a busy machine, a paste ending in a newline) sent an empty
|
|
67
|
+
or truncated draft. The root now reads the composer before each key.
|
|
68
|
+
- **Composer not cleared:** with coalesced publication, a send's cleared draft could be overwritten by
|
|
69
|
+
the composer's late report. Changes made while handling a key publish synchronously.
|
|
70
|
+
|
|
71
|
+
An A/B of the per-key composer read gave idle p95 6.7 and 9.4 ms without it and 10.0 and 6.8 ms with
|
|
72
|
+
it. Idle p95 alternates between about 7 and 10 ms from run to run: a key that lands within one
|
|
73
|
+
120 Hz frame (8.3 ms) of the previous frame waits for it.
|
|
74
|
+
|
|
75
|
+
## Against the success criteria
|
|
76
|
+
|
|
77
|
+
- p95 at or below opencode's: met in every scenario (10.1 vs 10.9, 10.6 vs 13.1, 23.5 vs 28.0).
|
|
78
|
+
- Within 1.5 times Pi's p95: met for history and stream; idle is 1.6 times in the final run and
|
|
79
|
+
1.1 times in step 4 and the A/B runs, inside the run-to-run spread above.
|
|
80
|
+
- No growth with history: met (idle 5.1 / 10.1, history 5.2 / 10.6).
|
|
81
|
+
- Streaming CPU no higher than opencode's: met (15.0% vs 36.3%).
|
|
82
|
+
|
|
83
|
+
## Limits
|
|
84
|
+
|
|
85
|
+
- One machine, one run per row; the spread of p95 between repeats is about 3–4 ms.
|
|
86
|
+
- The metric includes PTY and pyte parsing but not a terminal emulator's paint.
|
|
87
|
+
- The loopback stream is regular (60 chunks per second); real providers burst. The Luna run agrees
|
|
88
|
+
with the loopback figures at p50/p95.
|
|
89
|
+
- `scripts/verify-terminal.py` still fails after `/settings` on a `Try "` placeholder from the
|
|
90
|
+
removed Pi frontend; that check predates this work (`verification.json` recorded `passed: false`
|
|
91
|
+
for OpenTUI on 2026-10-20). It now matches the rendered screen when pyte is installed, which fixed
|
|
92
|
+
the earlier false failure on "Keyboard controls".
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Harness features
|
|
2
|
+
|
|
3
|
+
The Harness is a reusable Pi runtime: its fixed foundation runs a configurable agent, records each
|
|
4
|
+
run, and can use that evidence to propose improvements. These pages organize current capabilities
|
|
5
|
+
by area.
|
|
6
|
+
|
|
7
|
+
The feature guide is descriptive. The [architecture specification](../architecture/README.md) is
|
|
8
|
+
binding and defines the contracts and invariants.
|
|
9
|
+
|
|
10
|
+
| Area | Includes | Guide |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Core runtime | Foundation, accounts, sessions and runs, prompt compilation, tool governance | [Cores](cores/README.md) |
|
|
13
|
+
| Harness² | Harness Variants (HVs), recursive refinement, evidence-backed experience | [Google Harness²](google-harness2/README.md) |
|
|
14
|
+
| Automations | Subagents, recovery, optional run reflections, plugin hooks | [Automations](automations/README.md) |
|
|
15
|
+
| Memory | Wiki notes, run recall, trajectory search and reads | [Memory](memory/README.md) |
|
|
16
|
+
| Integrations | Application extension points, plugins, connected apps and Hub | [Integrations](integrations/README.md) |
|
|
17
|
+
| Interfaces | Node embedding, standalone terminal and JSON-lines server | [Interfaces](interfaces/README.md) |
|
|
18
|
+
|
|
19
|
+
**Harness Variant (HV)** is the short name used in these feature pages. The architecture
|
|
20
|
+
specification uses the canonical term *variant*.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Automations
|
|
2
|
+
|
|
3
|
+
The Harness includes bounded ways to coordinate or react to work. It supplies run-level mechanisms;
|
|
4
|
+
the embedding application decides when to dispatch application work and owns schedules and broader
|
|
5
|
+
orchestration.
|
|
6
|
+
|
|
7
|
+
## Subagents
|
|
8
|
+
|
|
9
|
+
An interactive run can spawn child runs and wait for their results. A child receives no wider
|
|
10
|
+
capabilities than its parent, and the parent joins outstanding children before it completes. Nesting
|
|
11
|
+
is bounded. The host can also spawn and wait for subagents through the Harness API.
|
|
12
|
+
|
|
13
|
+
## Recovery and continuation
|
|
14
|
+
|
|
15
|
+
The Harness records interrupted runs and exposes what was left unfinished. It never restarts model
|
|
16
|
+
work automatically. The application chooses whether and when to continue an interrupted run; a
|
|
17
|
+
continuation starts as a new run with the earlier account, variant version, and capability set pinned.
|
|
18
|
+
|
|
19
|
+
## Optional run reflections
|
|
20
|
+
|
|
21
|
+
The first-party `lessons` plugin is off by default. When enabled, a qualifying completed top-level
|
|
22
|
+
run may trigger a bounded reflection that keeps a general lesson in the Wiki. Reflection runs with
|
|
23
|
+
read-only file tools and cannot ask a person or act outside its allowed workspace.
|
|
24
|
+
|
|
25
|
+
## Plugin hooks
|
|
26
|
+
|
|
27
|
+
Trusted hooks can listen for supported events such as a saved Wiki page or an ended run. Hooks run
|
|
28
|
+
after the event, cannot block or change the originating write, and have a time limit. They run only
|
|
29
|
+
while their plugin is enabled and trusted.
|
|
30
|
+
|
|
31
|
+
## Refinement is human-adopted
|
|
32
|
+
|
|
33
|
+
Refinement is another multi-step workflow, described in [Google Harness²](../google-harness2/README.md).
|
|
34
|
+
Its probes and improvers run unattended, but refinement never adopts a candidate by itself.
|
|
35
|
+
|
|
36
|
+
## Further reading
|
|
37
|
+
|
|
38
|
+
- [02 Sessions and runs](../../architecture/02-sessions-and-runs.md) — subagents, interruption, and continuation.
|
|
39
|
+
- [05 Refinement](../../architecture/05-refinement.md) — isolated refinement executions.
|
|
40
|
+
- [06 Plugins and capabilities](../../architecture/06-plugins-and-capabilities.md) — hooks and plugin trust.
|
|
41
|
+
- [08 Memory and history](../../architecture/08-memory-and-history.md) — optional lessons behavior.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Core runtime
|
|
2
|
+
|
|
3
|
+
The core is the Harness's reusable, fixed foundation for running one agent turn well. It controls
|
|
4
|
+
the Pi session, compiles context, limits available tools, applies the call-by-call gate, and records
|
|
5
|
+
what happened. Application-specific behavior enters through the [integration points](../integrations/README.md),
|
|
6
|
+
not application-specific branches in the core.
|
|
7
|
+
|
|
8
|
+
## Capabilities
|
|
9
|
+
|
|
10
|
+
- **Isolated accounts** — Each session uses a pinned Pi account and its own account folder;
|
|
11
|
+
credentials are supplied through a secret store.
|
|
12
|
+
- **Sessions and runs** — A session is a native Pi conversation; each run pins its account, variant
|
|
13
|
+
version, and capability set. Validated events are saved before they are relayed.
|
|
14
|
+
- **Compiled context** — One compiler combines variant, Harness, and host sections, applies budgets,
|
|
15
|
+
and separates stable prompt text from changing context updates.
|
|
16
|
+
- **Tool governance** — A frozen capability set controls which tools are registered. Every tool call
|
|
17
|
+
passes through the gate, which applies host policy, standing approvals, and—when needed—a person's
|
|
18
|
+
decision.
|
|
19
|
+
- **Controlled resource loading** — The Harness chooses session resources and requires trust for
|
|
20
|
+
plugin code; plugins cannot bypass the final tool gate.
|
|
21
|
+
|
|
22
|
+
## Foundation and Harness Variant
|
|
23
|
+
|
|
24
|
+
The **foundation** is fixed: code and contracts such as session execution, the prompt compiler, run
|
|
25
|
+
recording, account isolation, and the tool gate change through releases. A **Harness Variant (HV)**
|
|
26
|
+
is the configurable behavior used by a scope. A run pins one validated HV version; it can shape the
|
|
27
|
+
agent's instructions and resources, but cannot change the foundation. See [Google Harness²](../google-harness2/README.md)
|
|
28
|
+
for its components and refinement process.
|
|
29
|
+
|
|
30
|
+
The Harness provides the single-run runtime. Higher-level orchestration—such as application agents,
|
|
31
|
+
tasks, scheduling, and UI—belongs to the embedding application.
|
|
32
|
+
|
|
33
|
+
## Further reading
|
|
34
|
+
|
|
35
|
+
- [00 Overview](../../architecture/00-overview.md) — foundation/variant split and module ownership.
|
|
36
|
+
- [02 Sessions and runs](../../architecture/02-sessions-and-runs.md) — execution lifecycle and run records.
|
|
37
|
+
- [04 Prompt](../../architecture/04-prompt.md) — compilation and delivery.
|
|
38
|
+
- [07 Tools and the gate](../../architecture/07-tools-and-gate.md) — tool registration, permissions, and approvals.
|
|
39
|
+
- [09 Accounts and connectors](../../architecture/09-accounts-and-connectors.md) — account isolation and secret handling.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Google Harness²
|
|
2
|
+
|
|
3
|
+
Harness² is the recursive-harnessing approach described in the [Harness² paper](https://arxiv.org/abs/2610.14224)
|
|
4
|
+
(Apache-2.0, Google LLC). The Harness applies the idea to improve agent behavior while keeping
|
|
5
|
+
model weights fixed: runs produce evidence, refinement proposes changes to a Harness Variant, and
|
|
6
|
+
a person decides whether to adopt them.
|
|
7
|
+
|
|
8
|
+
## Harness Variant (HV)
|
|
9
|
+
|
|
10
|
+
**HV** is the short name for **Harness Variant**. An HV is a validated, versioned set of eight
|
|
11
|
+
components for one scope. A run pins a version so its behavior does not change mid-run.
|
|
12
|
+
|
|
13
|
+
| Component | What it controls |
|
|
14
|
+
|---|---|
|
|
15
|
+
| c1 — System prompt | Agent instructions |
|
|
16
|
+
| c2 — Guardrails | Behavioral constraints |
|
|
17
|
+
| c3 — Memory | Always-on memory guidance |
|
|
18
|
+
| c4 — Tool guidance | Guidance for using available tools |
|
|
19
|
+
| c5 — Subagents | Named subagent instructions |
|
|
20
|
+
| c6 — Skills | On-demand skills and their scripts |
|
|
21
|
+
| c7 — Scripts | On-demand scripts |
|
|
22
|
+
| c8 — Plugins | Plugin extensions in the tool loop |
|
|
23
|
+
|
|
24
|
+
An HV changes agent guidance and selected resources, not the foundation. It cannot change the prompt
|
|
25
|
+
compiler, tool gate, run recorder, accounts, or trust rules. A candidate is not used until a person
|
|
26
|
+
adopts it as the scope's head version.
|
|
27
|
+
|
|
28
|
+
## The Propose–Probe–Compose loop
|
|
29
|
+
|
|
30
|
+
1. Run the current HV on a task in isolated workspaces and capture evidence.
|
|
31
|
+
2. Improver sessions propose edits to copies of the HV from two perspectives: **INV** (how the agent
|
|
32
|
+
works) and **DOM** (what a practitioner knows).
|
|
33
|
+
3. Probe candidates, then compose behavior from observed contrasts.
|
|
34
|
+
4. Select a final output blindly from anonymized candidates. Improvers and the selector never receive
|
|
35
|
+
scores, rubrics, or reviewer verdicts.
|
|
36
|
+
5. Return a candidate for a person to adopt; refinement never updates the active HV by itself.
|
|
37
|
+
|
|
38
|
+
Parallel mode explores more alternatives; sequential mode refines more deeply. Both follow the
|
|
39
|
+
method's budget identity of **R = 4k executions** and **P = 3k improver sessions**.
|
|
40
|
+
|
|
41
|
+
## Experience across tasks
|
|
42
|
+
|
|
43
|
+
Each scope has an experience library containing adopted HVs and evidence-backed lessons about their
|
|
44
|
+
edits. Future task improvers can consult that library. The library preserves the variants themselves
|
|
45
|
+
rather than only summaries.
|
|
46
|
+
|
|
47
|
+
## Further reading
|
|
48
|
+
|
|
49
|
+
- [03 Variants](../../architecture/03-variants.md) — component surface, validation, versions, and trust.
|
|
50
|
+
- [05 Refinement](../../architecture/05-refinement.md) — full method, evidence contract, budgets, and selection.
|
|
51
|
+
- [ADR-0011](../../decisions/ADR-0011-foundation-and-variants.md) — the fixed-foundation/mutating-variant decision.
|
|
52
|
+
- [Harness² paper](https://arxiv.org/abs/2610.14224).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Integrations
|
|
2
|
+
|
|
3
|
+
The Harness stays application-neutral. An embedding application contributes its own data and
|
|
4
|
+
capabilities through generic extension points; plugins and connected apps are loaded and governed by
|
|
5
|
+
the Harness.
|
|
6
|
+
|
|
7
|
+
## Application extension points
|
|
8
|
+
|
|
9
|
+
The Harness has seven extension points:
|
|
10
|
+
|
|
11
|
+
1. **Prompt sections** — application context added to the compiled prompt.
|
|
12
|
+
2. **Tool providers** — application tools offered to eligible sessions.
|
|
13
|
+
3. **Tool policy** — per-call scope, authorization, approvals, and connector limits.
|
|
14
|
+
4. **Secret store** — application-chosen credential storage.
|
|
15
|
+
5. **Directory** — names for opaque application identifiers.
|
|
16
|
+
6. **Plugin descriptions** — attribution for tools, sections, and groups supplied by a plugin.
|
|
17
|
+
7. **RefineHost** — isolated workspaces, sessions, and deliverables for refinement.
|
|
18
|
+
|
|
19
|
+
The server protocol provides equivalents for non-Node hosts except `RefineHost`, which is Node-only
|
|
20
|
+
today.
|
|
21
|
+
|
|
22
|
+
## Plugins and capabilities
|
|
23
|
+
|
|
24
|
+
Plugins can contribute instructions, skills, commands, tools, connections, extension code, and themes.
|
|
25
|
+
The Harness selects what loads, keeps capabilities scoped to callers, and requires trust for
|
|
26
|
+
executable plugin code. Enabling a plugin does not by itself grant tool permission; calls still pass
|
|
27
|
+
the gate.
|
|
28
|
+
|
|
29
|
+
## Connected apps and Hub
|
|
30
|
+
|
|
31
|
+
Connected apps use an MCP broker with scoped session access, approval for non-read calls, and
|
|
32
|
+
redaction of stored traces. The Hub installs exact catalog versions of skills, prompts, rules, and
|
|
33
|
+
Pi packages. Installation does not automatically enable, trust, or authorize the installed resources.
|
|
34
|
+
|
|
35
|
+
## Further reading
|
|
36
|
+
|
|
37
|
+
- [01 Extension points](../../architecture/01-extension-points.md) — the application-to-Harness contract.
|
|
38
|
+
- [06 Plugins and capabilities](../../architecture/06-plugins-and-capabilities.md) — loading, trust, and frozen capability sets.
|
|
39
|
+
- [07 Tools and the gate](../../architecture/07-tools-and-gate.md) — per-call authorization.
|
|
40
|
+
- [09 Accounts and connectors](../../architecture/09-accounts-and-connectors.md) — secrets, connected apps, OAuth, and Hub.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Interfaces
|
|
2
|
+
|
|
3
|
+
The same Harness runtime can be embedded by a Node application, hosted as a child process by another
|
|
4
|
+
language, or used through its standalone terminal.
|
|
5
|
+
|
|
6
|
+
## Node embedding
|
|
7
|
+
|
|
8
|
+
A Node host constructs the package with `createHarness(...)`, supplies application-owned capabilities
|
|
9
|
+
through the extension points, and uses its sessions, runs, accounts, variants, and other services
|
|
10
|
+
directly. The [embedding guide](../../README.md#using-it-from-node) has a code example and API details.
|
|
11
|
+
|
|
12
|
+
## Server protocol
|
|
13
|
+
|
|
14
|
+
A non-Node host can run the Harness server and exchange newline-delimited JSON messages over stdin
|
|
15
|
+
and stdout. The protocol exposes the Harness API, saved run events, state-change notices, and calls
|
|
16
|
+
for host-provided extension points.
|
|
17
|
+
|
|
18
|
+
## Standalone terminal
|
|
19
|
+
|
|
20
|
+
`xharness` provides the Harness-owned OpenTUI terminal over a persistent Pi session. An embedding
|
|
21
|
+
application may host the terminal in its own PTY; the Harness owns the terminal UI and session
|
|
22
|
+
behavior, while the host owns PTY and process supervision.
|
|
23
|
+
|
|
24
|
+
## Further reading
|
|
25
|
+
|
|
26
|
+
- [01 Extension points](../../architecture/01-extension-points.md) — how an embedding application extends the Harness.
|
|
27
|
+
- [10 Server protocol](../../architecture/10-server-protocol.md) — wire format and method contract.
|
|
28
|
+
- [11 Terminal](../../architecture/11-terminal.md) — terminal ownership and runtime.
|
|
29
|
+
- [Terminal guide](../../terminal-tui.md) — implementation details and verification evidence.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Memory and history
|
|
2
|
+
|
|
3
|
+
The Harness keeps two kinds of information outside a run's prompt configuration: reference notes in
|
|
4
|
+
the Wiki and evidence from earlier runs. Both are searchable; the run index is derived and rebuildable.
|
|
5
|
+
|
|
6
|
+
## Wiki
|
|
7
|
+
|
|
8
|
+
The Wiki stores linked, versioned Markdown notes for projects and shared knowledge. Notes are
|
|
9
|
+
reference material, not instructions: they do not replace or modify a Harness Variant's guidance.
|
|
10
|
+
Selected references may be delivered as changing context, but the Wiki itself is not an always-on
|
|
11
|
+
prompt.
|
|
12
|
+
|
|
13
|
+
## Run history and trajectories
|
|
14
|
+
|
|
15
|
+
History supports scoped recall over earlier conversations. Trajectory tools search and read bounded
|
|
16
|
+
pages of recorded run events, including context, tool calls, decisions, retries, and usage. Reads are
|
|
17
|
+
redacted and report evidence; they do not score runs.
|
|
18
|
+
|
|
19
|
+
## Lessons and the experience library
|
|
20
|
+
|
|
21
|
+
The optional `lessons` plugin may turn a completed run into a general Wiki lesson; see
|
|
22
|
+
[Automations](../automations/README.md). The [Harness² experience library](../google-harness2/README.md#experience-across-tasks)
|
|
23
|
+
is separate: it stores adopted Harness Variants with evidence-backed lessons about their edits.
|
|
24
|
+
|
|
25
|
+
## Further reading
|
|
26
|
+
|
|
27
|
+
- [08 Memory and history](../../architecture/08-memory-and-history.md) — Wiki, recall, trajectories, and indexing.
|
|
28
|
+
- [12 Storage](../../architecture/12-storage.md) — data root and state directory.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Xingular Harness 1.0.0
|
|
2
|
+
|
|
3
|
+
This release establishes @xingular/harness@1.0.0 as the stable baseline and retains the xharness
|
|
4
|
+
command. It intentionally resets the earlier development numbering; historical tags and published
|
|
5
|
+
versions remain unchanged. This document describes the candidate until registry publication is
|
|
6
|
+
verified.
|
|
7
|
+
|
|
8
|
+
## Included
|
|
9
|
+
|
|
10
|
+
- Pi execution with isolated accounts, pinned models/capabilities, gated tools and recorded usage.
|
|
11
|
+
- Foundation/variant architecture, validated c1–c8 variants, version history, continuation,
|
|
12
|
+
answer-free refinement and opt-in lessons.
|
|
13
|
+
- Wiki notes, history/trajectory tools, MCP connectors, plugins, Hub installation and terminal UI.
|
|
14
|
+
- Generic web search/fetch and isolated browser tools, plus account and backend diagnostics in
|
|
15
|
+
/doctor. Local inspection is the default; selected live probes require consent.
|
|
16
|
+
- Compiled Node ESM SDK and TypeScript declarations, including supported subpath imports.
|
|
17
|
+
- Apache-2.0 for original project code, with retained upstream attribution and license texts.
|
|
18
|
+
|
|
19
|
+
## Installation and requirements
|
|
20
|
+
|
|
21
|
+
Use `npm install --global @xingular/harness@1.0.0`, then `xharness`. Node 22.19 or later is required.
|
|
22
|
+
The terminal additionally requires Bun; release CI uses Node 22.19.0 and Bun 1.4.2. Browser operation
|
|
23
|
+
requires an installed compatible browser or a deliberately configured endpoint. Model credentials
|
|
24
|
+
are configured inside an isolated Harness account.
|
|
25
|
+
|
|
26
|
+
## Migration
|
|
27
|
+
|
|
28
|
+
- SDK tree symbols/paths become variant symbols/paths: VariantChoice, seedVariant, variant/*.
|
|
29
|
+
- Server harnesses.* methods become variants.*. Session/context inputs use variant; variant
|
|
30
|
+
snapshots use variant and materialisation returns files. Old method aliases are not provided.
|
|
31
|
+
- Existing stored data is migrated without overwriting; historical run records remain readable.
|
|
32
|
+
- Versions numerically above 1.0.0 will not receive this release through higher-major semver ranges.
|
|
33
|
+
Install the exact version or latest tag deliberately.
|
|
34
|
+
|
|
35
|
+
## Diagnostics limitations
|
|
36
|
+
|
|
37
|
+
Local readiness is not live connectivity. Doctor never signs in, switches accounts or repairs
|
|
38
|
+
settings. Provider probes may incur charges. Computer input remains blocked when the embedding
|
|
39
|
+
host cannot provide an isolated diagnostic surface. Runtime execution and compiled artifacts are
|
|
40
|
+
validated independently from publication; see the release checklist for actual gate results.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Release procedure
|
|
2
|
+
|
|
3
|
+
1. Review and commit completed Harness changes on release/1.0.0. Review App compatibility changes
|
|
4
|
+
separately. Preserve old tags and exclude outputs, external references and caches.
|
|
5
|
+
2. Run npm run ci and the required App checks on unrestricted macOS/Linux runners. Install Bun
|
|
6
|
+
1.4.2 and use Node 22.19.0 for the release build. Do not waive failing checks.
|
|
7
|
+
3. Run npm run release:pack. The unique output folder contains the candidate tarball, inventory,
|
|
8
|
+
SHA-256 checksum and npm integrity. Run npm run release:smoke -- <tarball> --terminal for a fresh
|
|
9
|
+
dependency installation and packaged SDK/server/terminal checks. --offline reuses the checkout's
|
|
10
|
+
installed dependency tree and is only a local smoke check, not fresh-install acceptance.
|
|
11
|
+
4. Run npm run release:preflight. Verify npm scope ownership and trusted-publisher settings for
|
|
12
|
+
tanntnny/xingular-harness, workflow release.yml, direct publishing enabled. No login is started
|
|
13
|
+
automatically. Existing 1.0.0 or an unreachable registry blocks publication.
|
|
14
|
+
5. Present the exact commit, candidate inventory/hash, notes and check results for approval. Pushing
|
|
15
|
+
v1.0.0 triggers publication; do not push the tag before this approval. Preserve historical tags.
|
|
16
|
+
6. After approval, push the reviewed commits and tag. The workflow runs both OS checks, packages
|
|
17
|
+
and tests one candidate, then publishes that same tarball with OIDC provenance and --tag latest.
|
|
18
|
+
No local publishing token is needed. It verifies registry integrity/provenance and creates a
|
|
19
|
+
GitHub release. Inspect registry state before retrying any failed publication.
|
|
20
|
+
|
|
21
|
+
A published version cannot be replaced. Corrections require a later version. This package's
|
|
22
|
+
intentional 1.0.0 reset does not rewrite historical decisions or claim an ordering above older
|
|
23
|
+
2.x–5.x development versions. Publication status and local evidence belong in the candidate report.
|
|
24
|
+
|
|
25
|
+
## Current preparation evidence
|
|
26
|
+
|
|
27
|
+
Local package inspection and the offline-dependency consumer smoke check pass. App compatibility
|
|
28
|
+
checks pass (592 renderer tests, 40 sidecar tests, 240 Rust tests with one ignored, and type/layer/UI
|
|
29
|
+
checks). A focused Harness run has 100 passing tests and the standalone proof passes. The full
|
|
30
|
+
Harness run is blocked by sandbox IPC and native HEIC encoding restrictions. The public GitHub
|
|
31
|
+
repository and absence of a remote v1.0.0 tag were verified through the connected GitHub service.
|
|
32
|
+
The npm registry and trusted-publisher settings could not be verified from this environment.
|
|
33
|
+
|
|
34
|
+
The release branch must run unrestricted CI and a fresh-install smoke check before a release-tag
|
|
35
|
+
approval is requested. Branch upload itself is a separate approval because it shares the source
|
|
36
|
+
with GitHub and starts CI; it does not publish npm. No local test failure is waived by this note.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Harness arm study — index
|
|
2
|
+
|
|
3
|
+
An audit of agent-harness designs, arm by arm: where each studied harness puts its
|
|
4
|
+
prompt assembly, tools, memory, subagents, skills, context management, refinement,
|
|
5
|
+
governance, execution and observability, and what to adopt into this harness.
|
|
6
|
+
|
|
7
|
+
Positioning: this is analysis, not checked source behavior. Living contract docs and
|
|
8
|
+
decisions stay in `docs/`; when a study produces an actual change here, an ADR is
|
|
9
|
+
written and the claim moves to checked behavior. Cite material as
|
|
10
|
+
`external/<name>/<path>:<line>` — never second-hand summaries.
|
|
11
|
+
|
|
12
|
+
## Focused notes
|
|
13
|
+
|
|
14
|
+
- [`/btw` side-question comparison](btw-comparison.md) — this terminal, the App-owned
|
|
15
|
+
side question, and checked-out external implementations.
|
|
16
|
+
- [Harness feature-gap review](feature-gap-review.md) — task/goal management, long-running work,
|
|
17
|
+
memory, execution isolation, verification, and observability gaps against the studied peers.
|
|
18
|
+
|
|
19
|
+
## Sources
|
|
20
|
+
|
|
21
|
+
Clones live in `external/` (this repo). Field notes in `sources/`.
|
|
22
|
+
|
|
23
|
+
| Source | Origin | Note | Stage |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| opencode | [sst/opencode](https://github.com/sst/opencode) — TypeScript, the tool this harness family runs sessions in | [opencode.md](sources/opencode.md) | arm-01 audited |
|
|
26
|
+
| pi / omp | [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) — tuned fork of [pi-mono](https://github.com/badlogic/pi-mono), the session runtime underneath this harness | [omp.md](sources/omp.md) | arm-01 audited |
|
|
27
|
+
| deepseek-harness (`dsh`) | [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) — MIT, Cordis, "everything is a plugin" | [deepseek-harness.md](sources/deepseek-harness.md) | arm-01 audited |
|
|
28
|
+
| harness2 | [google-research/harness2](https://github.com/google-research/harness2) + paper *Harness²: Recursive Agent Harnessing for an Open World* (arXiv:2610.14224, PDF in the clone) | [harness2.md](sources/harness2.md) | arm-01 audited |
|
|
29
|
+
| swe-agent | [SWE-agent/SWE-agent](https://github.com/SWE-agent/SWE-agent) | [swe-agent.md](sources/swe-agent.md) | inventory |
|
|
30
|
+
| openhands | [All-Hands-AI/OpenHands](https://github.com/All-Hands-AI/OpenHands) (UI) + [OpenHands/software-agent-sdk](https://github.com/OpenHands/software-agent-sdk) (agent server runtime) | [openhands.md](sources/openhands.md) | inventory |
|
|
31
|
+
| kimi-cli | [MoonshotAI/Kimi-CLI](https://github.com/MoonshotAI/Kimi-CLI) | [kimi-cli.md](sources/kimi-cli.md) | inventory |
|
|
32
|
+
| smolagents | [huggingface/smolagents](https://github.com/huggingface/smolagents) — CodeAct | [smolagents.md](sources/smolagents.md) | inventory |
|
|
33
|
+
| claude-code | [Anthropic Claude Code](https://www.anthropic.com/claude-code) — not open source; audit npm bundle, published prompts, observed behavior | [claude-code.md](sources/claude-code.md) | no clone |
|
|
34
|
+
|
|
35
|
+
## Arms
|
|
36
|
+
|
|
37
|
+
One doc per arm: *design space → per-source comparison → trade-offs → adoption
|
|
38
|
+
candidates*. Adoption candidates feed a two-tier roadmap: Tier 1 = patterns already
|
|
39
|
+
battle-tested in open harnesses (OpenCode / pi / dsh); Tier 2 = research-backed ideas
|
|
40
|
+
(harness² and the literature) attempted after Tier 1.
|
|
41
|
+
|
|
42
|
+
| # | Arm | Doc | Stage |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| 1 | System prompt / context assembly | [arms/01-system-prompt.md](arms/01-system-prompt.md) | core four audited (opencode, omp, dsh, harness²); 5 sources pending |
|
|
45
|
+
| 2 | Tools | [arms/02-tools.md](arms/02-tools.md) | core four audited (opencode, omp, dsh + harness²/swe-agent/smolagents in person); partial |
|
|
46
|
+
| 4 | Subagents | [arms/03-subagents.md](arms/03-subagents.md) | core four audited; openhands/claude-code pending |
|
|
47
|
+
| 5 | Skills & loading | [arms/04-skills.md](arms/04-skills.md) | three sources audited (dsh, opencode, harness²) + our tree; omp partial |
|
|
48
|
+
| 6 | Context management | [arms/05-context-management.md](arms/05-context-management.md) | core three audited; ours needs inventory |
|
|
49
|
+
| 3 | Memory | [arms/06-memory.md](arms/06-memory.md) | core four audited + our Wiki |
|
|
50
|
+
| 8 | Governance | [arms/07-governance.md](arms/07-governance.md) | core three audited; claude-code/openhands pending |
|
|
51
|
+
| 9 | Execution | [arms/08-execution.md](arms/08-execution.md) | core three audited; hands pending |
|
|
52
|
+
| 10 | Observability | [arms/09-observability.md](arms/09-observability.md) | core three audited; hands pending |
|
|
53
|
+
| 7 | Refinement / self-improvement | [arms/10-refinement.md](arms/10-refinement.md) | **done in person — port confirmed**; judge delta + drift sync open |
|
|
54
|
+
|
|
55
|
+
Wide comparison: [arms/00-matrix.md](arms/00-matrix.md). Standing conclusions:
|
|
56
|
+
[insights.md](insights.md). Roadmap: [roadmap.md](roadmap.md).
|
|
57
|
+
|
|
58
|
+
## Work order
|
|
59
|
+
|
|
60
|
+
1. `sources/` inventories (all nine), then arms 01–02 (prompt, tools)
|
|
61
|
+
2. Arms 03–06 (subagents, skills, context management, memory)
|
|
62
|
+
3. Arms 07–09 (governance, execution, observability)
|
|
63
|
+
4. Arm 10 (refinement ⭐ — the merge study against harness²) + `roadmap.md`
|
|
64
|
+
5. `arms/00-matrix.md` last, from the finished arm docs
|
|
65
|
+
|
|
66
|
+
## Method rules
|
|
67
|
+
|
|
68
|
+
- **Ground truth first.** Read the code before forming a position; every claim in an
|
|
69
|
+
arm doc needs at least one `path:line` citation per source, or an explicit
|
|
70
|
+
"unverified".
|
|
71
|
+
- **Describe, then judge.** The comparison table states what each harness does; the
|
|
72
|
+
trade-off section says why; only `adoption candidates` mentions this harness.
|
|
73
|
+
- **Respect the boundary.** Nothing here changes `src/`; study docs name no product
|
|
74
|
+
concept that the harness would learn. Adoption goes through the extension-point
|
|
75
|
+
flow later.
|
|
76
|
+
- **The anchor arms are the seven surfaces.** Prompt sections, tool providers,
|
|
77
|
+
`ToolPolicy`, `SecretStore`, `Directory`, plugin descriptions, `RefineHost` — map
|
|
78
|
+
foreign mechanisms onto these without inventing application concepts.
|