@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
package/README.md
CHANGED
|
@@ -1,30 +1,62 @@
|
|
|
1
1
|
# Xingular Harness
|
|
2
2
|
|
|
3
|
-
A Pi agent harness
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
A Pi agent harness built on **recursive harnessing** ([Harness²](https://arxiv.org/abs/2610.14224),
|
|
4
|
+
Apache-2.0, Google LLC), as one TypeScript package (`@xingular/harness`). It lets a running host
|
|
5
|
+
improve the harness itself, with model weights fixed. To say that precisely, the harness has two
|
|
6
|
+
halves:
|
|
7
|
+
|
|
8
|
+
- **The foundation is fixed.** Pi sessions, the prompt compiler, the run recorder, the tool gate,
|
|
9
|
+
accounts, plugin-code trust, the refinement method and the extension points. Only a release
|
|
10
|
+
changes it.
|
|
11
|
+
- **A Harness Variant (HV) mutates.** It is what a model is told and can load: eight components
|
|
12
|
+
(c1–c8) for one scope. Each scope has versioned, validated HVs; a run pins one version, and
|
|
13
|
+
refinement proposes a better HV that a person adopts.
|
|
14
|
+
|
|
15
|
+
*The foundation runs a variant, records how it went, and lets refinement propose a better
|
|
16
|
+
variant; only a person adopts one.* Refinement edits a copy of a variant and never the
|
|
17
|
+
foundation. See [Foundation and variants](docs/architecture/00-overview.md#foundation-and-variants).
|
|
18
|
+
|
|
19
|
+
Recursive refinement proposes HV improvements from run evidence. A person adopts candidates;
|
|
20
|
+
model weights and the foundation stay fixed. See the [Google Harness² feature guide](docs/features/google-harness2/README.md)
|
|
21
|
+
for the method and HV components.
|
|
22
|
+
|
|
23
|
+
| Area | Main features | Guide |
|
|
7
24
|
|---|---|---|
|
|
8
|
-
|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
| Memory |
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
The [documentation index](docs/README.md) links current terminal architecture and decisions.
|
|
25
|
+
| Core runtime | Accounts, sessions and runs, prompt compilation, tool governance | [Cores](docs/features/cores/README.md) |
|
|
26
|
+
| Harness² | HVs, recursive refinement, answer-free selection, experience library | [Google Harness²](docs/features/google-harness2/README.md) |
|
|
27
|
+
| Automations | Subagents, recovery, optional run reflections, plugin hooks | [Automations](docs/features/automations/README.md) |
|
|
28
|
+
| Memory | Wiki notes, run recall, trajectory search and reads | [Memory](docs/features/memory/README.md) |
|
|
29
|
+
| Integrations | Application extension points, plugins, connected apps and Hub | [Integrations](docs/features/integrations/README.md) |
|
|
30
|
+
| Interfaces | Node embedding, standalone terminal and JSON-lines server | [Interfaces](docs/features/interfaces/README.md) |
|
|
31
|
+
|
|
32
|
+
The binding design of every part is the [architecture specification](docs/architecture/README.md).
|
|
33
|
+
|
|
34
|
+
Try refinement with no model and no credentials: `npm run build && node dist/cli.js refine demo --k 2`.
|
|
35
|
+
The [feature guide](docs/features/README.md) groups capabilities by area; the [documentation
|
|
36
|
+
index](docs/README.md) links the architecture and other project records.
|
|
21
37
|
|
|
22
38
|
### Session options for applications
|
|
23
39
|
|
|
24
|
-
- `subagents: { maxDepth }`
|
|
40
|
+
- Interactive sessions offer `spawn_subagent` and `wait_subagents` by default. `subagents: null` disables them; `{ maxDepth }` configures native nesting (default one, maximum three), independently of the host caller depth. Unattended sessions remain disabled unless the host explicitly supplies subagent options. A frozen capability set can narrow these tools further.
|
|
41
|
+
- `harness.subagents.spawn({ parentRunId, brief, tools?, wait? })` opens a fresh child of the same caller with no wider capabilities. It returns `{ runId, nativeSessionId }` once open; `wait: true` also waits for settlement. `harness.subagents.wait({ parentRunId, runIds? })` joins selected direct children, or the current children when omitted, and returns their outcomes. `results` reads the same bounded outcome records without waiting. RPC exposes `subagents.spawn`, `subagents.wait`, and `subagents.results`; `sessions.spawnSubagent` remains a compatibility alias.
|
|
42
|
+
- The model's `spawn_subagent` returns immediately by default; `wait: true` returns an inline result. `wait_subagents` joins selected children. The SDK and standalone terminal share this execution service. Terminal calls use its private control channel, including when connected apps are disabled.
|
|
43
|
+
- Parents receive results at native turn boundaries and join outstanding children before completing. Typed native-history receipts prevent duplicate automatic delivery; explicit waits can reread results. Ownership is recorded before startup so an explicit resume can recover even a lost spawn return. Startup reservations without a run become interrupted outcomes. A restarted Harness never restarts model work automatically. Recovery requires the same recorded account, caller, working folder, and selected history branch. Session IDs are opaque; consumers follow `parentRunId` and `relation`.
|
|
25
44
|
- `providers: false` runs a session with the harness's own tools only.
|
|
26
|
-
-
|
|
27
|
-
-
|
|
45
|
+
- `variant: { scope }` runs the session on that scope's head variant (or `{ scope, version }`, or `{ dir }` for a variant on disk). The version is pinned for the run and recorded on it.
|
|
46
|
+
- On the caller, `recallExcludeAgents` hides those agents' conversations from history and trajectory tools.
|
|
47
|
+
- `harnessTools: false` runs a session without the History, Wiki and skill tools (and without `ask_user` and `checklist_write`).
|
|
48
|
+
- Every session with harness tools gets `checklist_write`: the model sends its whole checklist (`pending`, `in_progress`, `completed`, at most 50 steps) and the run records it as a `checklist.updated` event. `checklistOf(events)` or the `runs.checklist` method reads the latest one. Plan mode allows it.
|
|
49
|
+
- `continueFrom: <run id>` continues a run that stopped before it finished (interrupted or failed) as a new run. `harness.recovery.interruptedRunIds` lists the runs `open` marked interrupted, and `continuationOf(root, runId, sessionDir)` (`runs.continuation`) says whether one can be continued and what it left: checklist, unanswered approvals and questions, the last tool and whether it finished, unfinished subagents. The new run reopens the same native history, records `resumedFromRunId`, keeps the account, variant version and capability set (`continuation_mismatch` otherwise), and the model is told where the earlier run stopped. The harness never continues a run by itself; which runs to continue, and when, is the application's choice.
|
|
50
|
+
- The first-party `lessons` plugin (off by default) reflects on a completed top-level run with enough tool calls and may keep one general lesson in the Wiki under `library/lessons/`, in refinement's cue/lesson shape. It uses the run's own account and model, read-only file tools, and is capped (`minToolCalls`, `maxLessons`, `maxChars`). See PROP-0008.
|
|
51
|
+
|
|
52
|
+
Every session also gets `trajectory_search` and `trajectory_read` from the built-in History plugin.
|
|
53
|
+
Search lists runs in the current data root, including active runs, with filters and a continuation
|
|
54
|
+
cursor. Read returns pages of the canonical execution events, including captured prompt/context,
|
|
55
|
+
tool, decision, retry, compaction, and usage evidence. Active runs show the latest events saved so
|
|
56
|
+
far; settled reads stop at the first outcome. Payloads are bounded and marked when truncated, and
|
|
57
|
+
the tools omit account identifiers, credential fields, attachment bytes, native adapter payloads,
|
|
58
|
+
and provider reasoning text or summaries.
|
|
59
|
+
They report recorded evidence without scoring runs, and do not backfill older records.
|
|
28
60
|
|
|
29
61
|
## Using it from Node
|
|
30
62
|
|
|
@@ -32,16 +64,19 @@ The [documentation index](docs/README.md) links current terminal architecture an
|
|
|
32
64
|
import { createHarness } from '@xingular/harness'
|
|
33
65
|
|
|
34
66
|
const harness = createHarness({
|
|
35
|
-
dataRoot: '/path/to/data', //
|
|
67
|
+
dataRoot: '/path/to/data', // variants/, library/, refine/, wiki/, registry/, runs/, index.sqlite
|
|
36
68
|
stateDir: '/path/to/state', // device-local: accounts, approvals, connections, sockets
|
|
37
69
|
productName: 'My App', // how the harness names itself to a model (default 'Xingular Harness')
|
|
38
70
|
secrets, // SecretStore; defaults to an owner-only file in stateDir
|
|
39
71
|
policy, // ToolPolicy: what a run may do, and what needs a person
|
|
40
72
|
directory, // names for the ids the application uses
|
|
41
73
|
builtins: ['/path/to/builtin'], // folders of built-in skills, prompts, and rules
|
|
42
|
-
plugins: [myPlugin]
|
|
74
|
+
plugins: [myPlugin], // the application's own parts, described as plugins
|
|
75
|
+
refineHost // where refinement executions work, as whom, with which tools
|
|
43
76
|
})
|
|
44
77
|
|
|
78
|
+
harness.refine.start({ task: { id, scope: 'agent-1', prompt }, k: 1, mode: 'parallel' })
|
|
79
|
+
|
|
45
80
|
harness.sessions.provide((session) => myTools(session)) // the application's own tools
|
|
46
81
|
harness.runs.listen((event, run) => show(event)) // every run event, after it is saved
|
|
47
82
|
|
|
@@ -49,6 +84,7 @@ await harness.sessions.run({
|
|
|
49
84
|
run: { id, sessionId },
|
|
50
85
|
cwd, sessionDir, text,
|
|
51
86
|
caller: { agentId, agentName, actor: 'Chat' },
|
|
87
|
+
variant: { scope: 'agent-1' },
|
|
52
88
|
launch: { sections: [{ id: 'identity', title: 'Identity', body, budget: 2000, order: 10 }] },
|
|
53
89
|
tools: { allow: ['read', 'bash', 'my_tool'], gated: ['bash'] }
|
|
54
90
|
})
|
|
@@ -56,14 +92,14 @@ await harness.sessions.run({
|
|
|
56
92
|
|
|
57
93
|
## How an application extends it
|
|
58
94
|
|
|
59
|
-
The harness knows a caller
|
|
60
|
-
An application adds what it knows through
|
|
95
|
+
The harness knows a caller and a harness scope (opaque ids), never an agent, a group, or a task.
|
|
96
|
+
An application adds what it knows through seven points:
|
|
61
97
|
|
|
62
98
|
1. **Prompt sections** (`Launch.sections`, `Launch.toolGroups`, `Launch.references`). Each
|
|
63
|
-
section has an `order` and may be `dynamic`. The harness adds its own (`
|
|
64
|
-
`
|
|
65
|
-
|
|
66
|
-
updates.
|
|
99
|
+
section has an `order` and may be `dynamic`. The harness adds its own (`system` 25,
|
|
100
|
+
`guardrails` 40, `memory` 45, `references` 50, `subagents` 64, `scripts` 66, `wiki` 80,
|
|
101
|
+
`tools` 90), applies budgets, keeps stable sections in the system prompt, and sends dynamic
|
|
102
|
+
ones as updates.
|
|
67
103
|
2. **Tool providers** (`harness.sessions.provide`). A provider returns `ToolSpec`s for a session;
|
|
68
104
|
only the names in the session's `allow` list are registered, in that order.
|
|
69
105
|
A tool may return `attachments` as `{ id, name, mimeType }` references. The harness records
|
|
@@ -72,9 +108,6 @@ An application adds what it knows through six points:
|
|
|
72
108
|
The harness provides the web tools itself: `webTools({ secrets })` gives `web_search` (Brave Search,
|
|
73
109
|
key read from the secret store) and `web_fetch` (checked reads of public pages). An application
|
|
74
110
|
passes it to `harness.sessions.provide` and switches the names on for each agent.
|
|
75
|
-
`registryTools({ harness })` gives `registry_write` (a skill, rule, or prompt) and `plugin_write`
|
|
76
|
-
(a plugin). Each writes for the calling agent only: the item is on for that agent, and a plugin's
|
|
77
|
-
code is trusted once written. An item others already use goes to the Inbox instead.
|
|
78
111
|
3. **`ToolPolicy`**. `scope` says whether a call is inside what the run may do (or needs one
|
|
79
112
|
approval). A decision with `humanOnly` is for a person alone: the always-approve switch and
|
|
80
113
|
remembered answers do not apply to it. `authorize` says whether the tool is still switched on;
|
|
@@ -87,6 +120,11 @@ An application adds what it knows through six points:
|
|
|
87
120
|
the application and says which tools, prompt sections and tool groups it provides. It is data:
|
|
88
121
|
it changes what `plugins.list` and `plugins.inventory` report, never what runs. `WEB_PLUGIN`
|
|
89
122
|
describes the web tools. A host that is not a Node program sends them with `plugins.describe`.
|
|
123
|
+
7. **`RefineHost`** (`HarnessOptions.refineHost`). Where a refinement execution works
|
|
124
|
+
(`prepareWorkspace`: an isolated folder, such as a git worktree), as whom and with which tools
|
|
125
|
+
(`session`), and what it produced (`deliverable`). Executions run as unattended runs with
|
|
126
|
+
trigger `probe`, so a `ToolPolicy` can refuse anything with effects outside that folder;
|
|
127
|
+
improver sessions run with trigger `improver`, file tools only, on a copy of the evidence.
|
|
90
128
|
|
|
91
129
|
`apps.expose(...)` additionally offers the application's tools through the connected-apps
|
|
92
130
|
broker (`mcp_list_tools`, `mcp_call_tool`), which is how a terminal session reaches them.
|
|
@@ -95,7 +133,7 @@ broker (`mcp_list_tools`, `mcp_call_tool`), which is how a terminal session reac
|
|
|
95
133
|
|
|
96
134
|
A plugin is a bundle with a title, a description and contributions: instructions, skills,
|
|
97
135
|
commands, tools, connections, code (a Pi extension) and themes. A Pi package is a plugin as it
|
|
98
|
-
is; so are the harness's own parts (
|
|
136
|
+
is; so are the harness's own parts (Harness, Wiki, History, Subagents, Ask the user, Connected apps, Pi), the
|
|
99
137
|
application's, a person's registry ("Yours"), the folder every account shares, and what a
|
|
100
138
|
working folder brings.
|
|
101
139
|
|
|
@@ -129,11 +167,10 @@ working folder brings.
|
|
|
129
167
|
input does so before the gate sees it. Every resource reload revalidates the parent's original
|
|
130
168
|
trusted selection; changed or revoked code requires review and a fresh terminal.
|
|
131
169
|
- **A required part can be extended.** A package names the part it adds to and, optionally, a
|
|
132
|
-
hooks file: `"harness": { "extends": ["
|
|
133
|
-
hooks itself (`src/plugins/hooks.ts`), in its own process, because
|
|
134
|
-
no session is open. `export default function (harness) { harness.on('
|
|
135
|
-
(event, ctx) => …) }`; the events are `
|
|
136
|
-
`wiki.page.saved` and `history.run.ended`. A hook is told after the write and cannot stop it,
|
|
170
|
+
hooks file: `"harness": { "extends": ["wiki"], "hooks": "./hooks.mjs" }`. The harness runs
|
|
171
|
+
hooks itself (`src/plugins/hooks.ts`), in its own process, because notes are often written while
|
|
172
|
+
no session is open. `export default function (harness) { harness.on('wiki.page.saved', async
|
|
173
|
+
(event, ctx) => …) }`; the events are `wiki.page.saved` and `history.run.ended`. A hook is told after the write and cannot stop it,
|
|
137
174
|
has 30 seconds, and what it throws is kept in `plugin-hooks.json` and shown on its plugin. It
|
|
138
175
|
runs only while its plugin is switched on for everyone and trusted; what is loaded is checked
|
|
139
176
|
against that before each delivery. `ctx.call(connection, tool, args)` reaches a connected app
|
|
@@ -157,10 +194,11 @@ working folder brings.
|
|
|
157
194
|
terminal process claims once (`control.claim`) and shares with its bridge in memory; the socket's
|
|
158
195
|
`plugins.list` is open to the session, and `plugins.attach`, `plugins.detach`, `plugins.trust`
|
|
159
196
|
and `plugins.untrust` refuse without that key. A change applies when the session restarts.
|
|
160
|
-
Outside a session, `
|
|
197
|
+
Outside a session, `xharness plugins list | show | install | remove | update | attach |
|
|
161
198
|
detach | trust | untrust` acts directly, as the person who typed it; `trust` shows the files
|
|
162
199
|
and wants a typed yes or `--yes`. It does not open the data root, so it settles no run.
|
|
163
|
-
- **Unattended runs
|
|
200
|
+
- **Unattended runs load no extension found on disk.** A variant's own trusted plugins still
|
|
201
|
+
load, so a refinement probe runs the plugin it is testing.
|
|
164
202
|
- **A person switches things on and off for a scope.** `plugins.attach` and `plugins.detach`
|
|
165
203
|
take a plugin's or a contribution's `id` and a `scope` (`{}` for everywhere, `{ agentId }`, or
|
|
166
204
|
`{ projectId }`). The narrowest scope that says something wins: an agent, then a project, then
|
|
@@ -204,7 +242,8 @@ table. With the `--host-*` flags the harness calls the host for `secrets.get|set
|
|
|
204
242
|
`policy.scope|authorize|approval|connections`, and `tools.call`; the host registers its tools
|
|
205
243
|
with `tools.register` and its names with `directory.set`.
|
|
206
244
|
|
|
207
|
-
`
|
|
245
|
+
`variants.importComponents` adds complete skill folders, or single-file rules and prompts, to the
|
|
246
|
+
component library:
|
|
208
247
|
|
|
209
248
|
```ts
|
|
210
249
|
{ skills: [{ name, files: [{ path, content, encoding }] }] }
|
|
@@ -215,7 +254,8 @@ It validates bounded relative paths and file encodings, requires a root
|
|
|
215
254
|
has no knowledge of the application feature that may call it.
|
|
216
255
|
|
|
217
256
|
`npm run prove` starts that server on a throwaway data root, with no application present, and
|
|
218
|
-
exercises accounts,
|
|
257
|
+
exercises accounts, variants, the Wiki, the prompt, connected apps, a recorded session, a
|
|
258
|
+
plugin hook, and the refinement demo end to end.
|
|
219
259
|
|
|
220
260
|
## Run it as a standalone Harness terminal
|
|
221
261
|
|
|
@@ -223,13 +263,12 @@ After the CLI package is published to npm or your company's npm registry, instal
|
|
|
223
263
|
|
|
224
264
|
```sh
|
|
225
265
|
npm install --global @xingular/harness
|
|
226
|
-
|
|
266
|
+
xharness
|
|
227
267
|
```
|
|
228
268
|
|
|
229
|
-
The machine needs Node 22.19 or newer. Harness runs its own
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
`/accounts` or `/login` to sign in.
|
|
269
|
+
The machine needs Node 22.19 or newer and Bun 1.3.14 or newer. Harness runs its own OpenTUI
|
|
270
|
+
terminal frontend with Bun, using its pinned Pi SDK; no separate global `pi` installation is
|
|
271
|
+
required. On first launch, it creates a `Default` isolated account. Use `/accounts` to sign in.
|
|
233
272
|
|
|
234
273
|
Provider sign-in progress lives in the running Harness process. An embedding application can call
|
|
235
274
|
`accounts.loginStatus` after reconnecting to recover the current device code or prompt by account;
|
|
@@ -244,30 +283,48 @@ npm run dev
|
|
|
244
283
|
```
|
|
245
284
|
|
|
246
285
|
`npm run dev` rebuilds the CLI and opens the Harness terminal in the current working directory.
|
|
247
|
-
It uses
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
286
|
+
It uses separate development directories by default: `~/.xingular-harness-dev/data` and
|
|
287
|
+
`~/.xingular-harness-dev/state`. This keeps development harness data and device settings—including
|
|
288
|
+
accounts, Pi settings, approvals, and connections—separate from the installed command. Press
|
|
289
|
+
`/quit`, Ctrl+C or Ctrl+D to close it. Override either directory with `--data <dir>` or
|
|
290
|
+
`--state <dir>`; for example: `npm run dev -- --data <dir> --state <dir>`. An omitted option keeps
|
|
291
|
+
its development specific default.
|
|
292
|
+
|
|
293
|
+
The OpenTUI/Solid frontend is the only terminal. Install Bun 1.3.14 or newer and run
|
|
294
|
+
`npm run build:tui` (or `npm run build`); without Bun the build fails rather than producing a
|
|
295
|
+
terminal that cannot start. The harness runs `dist/terminal-opentui.js`, which uses the same
|
|
296
|
+
session runtime, accounts, command pages, approvals, questions, plugins and run records as the
|
|
297
|
+
embedded SDK. See [the terminal guide](docs/terminal-tui.md).
|
|
298
|
+
|
|
299
|
+
Building a checkout does not update an existing global `xharness` installation.
|
|
252
300
|
To replace that command with this checkout, run `npm pack`, then install the exact tarball
|
|
253
301
|
filename it prints with `npm install --global ./<tarball-filename>`. This is a local install;
|
|
254
302
|
it does not publish a release. Close an already-running terminal session and launch the command
|
|
255
303
|
again to load the new frontend. A package version alone cannot distinguish an unreleased local
|
|
256
304
|
build from an older installed build with the same version.
|
|
257
305
|
|
|
258
|
-
This opens the Harness-owned terminal
|
|
259
|
-
|
|
260
|
-
status
|
|
261
|
-
owns screen composition, editing/input dispatch, scrolling, command routing and plugin UI;
|
|
262
|
-
Pi supplies the persistent execution runtime, native history and rich content components.
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
`/resume` stays inside the prepared history and working folder
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
306
|
+
This opens the Harness-owned OpenTUI terminal in the current working directory. Its presentation
|
|
307
|
+
uses the Harness titanium palette and an OpenCode-inspired layout: the transcript above a
|
|
308
|
+
borderless composer with the working status above it and the model, context and token line below.
|
|
309
|
+
Harness owns screen composition, editing/input dispatch, scrolling, command routing and plugin UI;
|
|
310
|
+
Pi supplies the persistent execution runtime, native history and rich content components. The
|
|
311
|
+
existing isolated account, compiled context, approval gate, telemetry and Wiki/socket commands
|
|
312
|
+
remain behind the terminal. No Pi `InteractiveMode` is constructed.
|
|
313
|
+
|
|
314
|
+
`/resume` stays inside the prepared account history and working folder. Cancel an active response
|
|
315
|
+
before changing or reloading a session. Full OMP visual parity is not established by the current
|
|
316
|
+
verification. `/accounts`, `/permissions`, `/plugins`, `/hub`, `/components`, `/settings`, `/trajectory`
|
|
317
|
+
and `/log` each open their own centered page dialog with local tabs. `/permissions` reviews device-local Pi
|
|
318
|
+
terminal grants and the Full Permission switch; tool grants apply across terminal sessions sharing this
|
|
319
|
+
Harness state, and Full Permission requires confirmation. `/components` browses reusable skills,
|
|
320
|
+
prompts and rules; a confirmed skill or rule addition creates a variant version for future sessions while
|
|
321
|
+
the current terminal stays pinned. `/trajectory` opens recorded runs for the current native conversation,
|
|
322
|
+
with event navigation and a detail inspector. `/log` shows a static, redacted snapshot of Harness
|
|
323
|
+
diagnostics and run events for the current conversation; press Escape to close. See
|
|
324
|
+
[terminal architecture and evidence](docs/terminal-tui.md),
|
|
325
|
+
[the ownership decision](docs/decisions/ADR-0001-owned-terminal.md),
|
|
326
|
+
[the OpenTUI-only decision](docs/decisions/ADR-0006-opentui-only-terminal.md), and
|
|
327
|
+
[third-party notices](NOTICE.md).
|
|
271
328
|
|
|
272
329
|
### `/accounts` in the terminal
|
|
273
330
|
|
|
@@ -279,36 +336,45 @@ command the model runs in the shell cannot make it.
|
|
|
279
336
|
A running session stays on the account it started with. To use another account for this
|
|
280
337
|
session, choose **Use for this session**: the terminal child restarts and the same conversation
|
|
281
338
|
resumes on that account. Removing an account that a running terminal is using is refused. Only
|
|
282
|
-
terminals in this process are counted, so an account used by another running `
|
|
339
|
+
terminals in this process are counted, so an account used by another running `xharness` window can
|
|
283
340
|
still be removed; that session then asks for another account the next time it starts.
|
|
284
341
|
|
|
285
|
-
The
|
|
286
|
-
`~/.xingular-harness/state
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
342
|
+
The installed standalone command defaults to `~/.xingular-harness/data` and
|
|
343
|
+
`~/.xingular-harness/state`; `npm run dev` instead defaults to the separate
|
|
344
|
+
`~/.xingular-harness-dev/data` and `~/.xingular-harness-dev/state`. Override either with
|
|
345
|
+
`--data <dir>` and `--state <dir>`. Session history is stored per working directory and can be
|
|
346
|
+
reopened with the terminal's `/resume` command. The explicit `terminal` command is an alias for
|
|
347
|
+
the default launch. Use `--help` to see the commands; `serve` remains the host-facing RPC service
|
|
348
|
+
for integrations such as Xingular Agent/App.
|
|
290
349
|
|
|
291
350
|
## Storage
|
|
292
351
|
|
|
293
352
|
```
|
|
294
353
|
<data root>/
|
|
295
|
-
|
|
296
|
-
|
|
354
|
+
variants/<scope>/ versions/<fingerprint>/variant/, head.json, lineage.jsonl (the eight components)
|
|
355
|
+
refine/<id>/ summary.json, task.json, variants/<label>/, rollouts/, context/, selection/, reflection/, improver/
|
|
356
|
+
library/<scope>/<area>/ INDEX.md, variants/<task>/{variant/, EXPERIENCE.md} (the experience library)
|
|
357
|
+
wiki/ home.md, library/, projects/<slug>/ (project notes)
|
|
358
|
+
wiki-history/ earlier versions of notes
|
|
359
|
+
legacy/ what an earlier Wiki kept (memory blocks, facts, revisions, Inbox), moved once
|
|
360
|
+
registry/ skills/, prompts/, rules/ (the component library; the Hub installs here)
|
|
297
361
|
plugins/<name>/ packages kept with a person's data; each is found as an installed plugin
|
|
298
|
-
runs/<id>/ run.json, events.jsonl, context.json, caller.json
|
|
299
|
-
config/
|
|
362
|
+
runs/<id>/ run.json, events.jsonl, context.json, caller.json, subagents.json (reserved child IDs)
|
|
363
|
+
config/ what is switched on for whom (plugin-attachments.json),
|
|
300
364
|
settings the harness reads
|
|
301
|
-
index.sqlite a rebuildable index of
|
|
365
|
+
index.sqlite a rebuildable index of runs for recall (FTS5)
|
|
302
366
|
projects.json read only: the application owns it
|
|
303
367
|
|
|
304
368
|
<state dir>/
|
|
305
369
|
accounts/ registry, per-account Pi agent folders, audit log
|
|
306
370
|
approvals.json standing approvals
|
|
307
371
|
plugin-trust.json the code a person trusted, by hash, and whether earlier packages were taken over
|
|
372
|
+
variant-plugin-trust.json harness-variant plugin code a person trusted, and scopes whose probes may run improver code
|
|
308
373
|
plugin-registered.json what each extension registered the last time a session loaded it
|
|
309
374
|
plugin-hooks.json what each hooks file listens for and how its last run went
|
|
310
375
|
connections.json connected apps (secrets are in the SecretStore)
|
|
311
376
|
run/ the session socket and the terminal commands
|
|
377
|
+
harness.log diagnostics from the standalone terminal, kept off its screen
|
|
312
378
|
```
|
|
313
379
|
|
|
314
380
|
The files are the source of truth; `index.sqlite` can be deleted and rebuilt
|
|
@@ -318,28 +384,39 @@ The files are the source of truth; `index.sqlite` can be deleted and rebuilt
|
|
|
318
384
|
|
|
319
385
|
```sh
|
|
320
386
|
npm run ci # typecheck, unit/golden tests, and standalone proof; matches GitHub CI
|
|
321
|
-
npm run build # dist/cli.js
|
|
387
|
+
npm run build # dist/cli.js, dist/terminal-pi.js, and the OpenTUI frontend
|
|
388
|
+
npm run build:tui # only the OpenTUI frontend
|
|
322
389
|
```
|
|
323
390
|
|
|
324
|
-
Node 22.19 or newer.
|
|
391
|
+
Node 22.19 or newer and Bun 1.3.14 or newer.
|
|
325
392
|
|
|
326
393
|
## Images
|
|
327
394
|
|
|
328
|
-
`SessionRunInput.requiresImageInput` optionally requires a vision-capable resolved Pi model before a prompt is delivered. The check includes direct `images` input, and the generic tool wrapper rejects image results on text-only models. Direct prompt images use Pi's `{ type: 'image', data, mimeType }` content shape. Applications own
|
|
395
|
+
`SessionRunInput.requiresImageInput` optionally requires a vision-capable resolved Pi model before a prompt is delivered. The check includes direct `images` input, and the generic tool wrapper rejects image results on text-only models. Direct prompt images use Pi's `{ type: 'image', data, mimeType }` content shape. Applications own attachment selection, extraction and image preparation; the Harness transports typed image content and validates model capability. In the standalone terminal, pasting Finder-copied HEIC/HEIF files on macOS converts them to temporary PNGs so Pi can read their pixels. See [the terminal guide](docs/terminal-tui.md#clipboard-image-paste).
|
|
396
|
+
|
|
397
|
+
`SessionRunInput.initialBashCommand` is an opt-in for one new interactive user turn. It must match
|
|
398
|
+
the leading `!` command in `text`; Harness checks it through the same per-call gate as model-issued
|
|
399
|
+
Bash, executes it once in Pi's native session, records its bounded result, and asks the model to
|
|
400
|
+
inspect that result before replying. Automatic, plan, resumed, relation, probe, and improver runs
|
|
401
|
+
cannot carry it. See the [terminal guide](docs/terminal-tui.md#bash-command-mode).
|
|
329
402
|
|
|
330
403
|
## Curated Hub
|
|
331
404
|
|
|
332
|
-
`
|
|
405
|
+
`xharness hub list [--refresh]`, `xharness hub show publisher/name@version`, and
|
|
333
406
|
`hub install publisher/name@version` browse and install exact catalog versions. `/hub` offers the
|
|
334
407
|
same review in the interactive terminal, using its private control key for installation. Both the
|
|
335
|
-
terminal and embedding applications use `hub.list`, `hub.get`, `hub.
|
|
336
|
-
`hub.get { id, version, preview: true }` verifies data
|
|
408
|
+
terminal and embedding applications use `hub.list`, `hub.get`, `hub.preview`, `hub.install`,
|
|
409
|
+
`hub.uninstall`, and `hub.readDocument`. `hub.get { id, version, preview: true }` verifies data
|
|
410
|
+
payload bytes without installing them. `hub.preview { id, version, offset }` returns bounded,
|
|
411
|
+
UTF-8-safe pages of up to 16 KiB from a verified payload.
|
|
337
412
|
|
|
338
413
|
Registry bundles import complete skills or single Markdown prompts/rules, disabled. Pi packages
|
|
339
414
|
reuse the existing installer and require an exact npm version or full GitHub commit. Documents
|
|
340
415
|
are saved as inert JSON for a compatible host to interpret; the harness does not apply them.
|
|
341
416
|
Installation grants no attachment, trust, credentials, or permission. Writes are serialized and
|
|
342
|
-
existing registry files are never overwritten.
|
|
417
|
+
existing registry files are never overwritten. Receipts report whether their resources are intact;
|
|
418
|
+
uninstall removes only the exact receipt's resources, including local edits within those paths, and
|
|
419
|
+
revokes its attachment choices.
|
|
343
420
|
|
|
344
421
|
Installed documents and provenance live under `<data root>/hub/`; the catalog cache is
|
|
345
422
|
`<state dir>/hub/catalog.json`. An offline snapshot ships with the package. Explicit refresh keeps
|
|
@@ -358,9 +435,34 @@ An embedding application may set `externalMaintenance: true`, supply trusted `Ca
|
|
|
358
435
|
`vaultAccess` (`self` or `curator`), and register `maintenanceTools`/`MAINTENANCE_PLUGIN`.
|
|
359
436
|
Self callers directly edit only their own writable persona/notes; shared knowledge and text-resource
|
|
360
437
|
writes become persistent proposals. Curator tools read original evidence, compare captured target
|
|
361
|
-
revisions,
|
|
438
|
+
revisions, read all host-assigned requests together, and apply reconciled Wiki proposals as one
|
|
439
|
+
undoable change set. Resource proposals keep their own receipts; executable proposals remain inert
|
|
440
|
+
until the user reviews/trusts them. Later user edits are never overwritten.
|
|
362
441
|
`maintenance.list`, `maintenance.review` and `maintenance.retry` let the host dispatch its own
|
|
363
442
|
recorded sessions. Curator runs do not recursively queue maintenance. Optional assigned IDs freeze
|
|
364
443
|
which requests a batch may claim. These fields are trusted host context, never model arguments.
|
|
365
|
-
|
|
366
|
-
|
|
444
|
+
`maintenance_read_batch` reads those assigned requests together; `maintenance_apply_batch` records
|
|
445
|
+
one decision for each and applies the evidence-checked Wiki set atomically. Standalone callers that
|
|
446
|
+
omit this option retain the existing lifecycle and direct-write contract.
|
|
447
|
+
|
|
448
|
+
## Readiness diagnostics
|
|
449
|
+
|
|
450
|
+
Use `/doctor` in the terminal for local readiness checks and explicitly selected live probes. The same
|
|
451
|
+
structured jobs are available through `harness.doctor` and `doctor.*` server methods. See
|
|
452
|
+
[Doctor](docs/doctor.md) for coverage, consent, isolation, and provider callbacks.
|
|
453
|
+
|
|
454
|
+
## Public 1.0.0 release candidate
|
|
455
|
+
|
|
456
|
+
The public package is ESM: import from `@xingular/harness` or supported subpaths such as
|
|
457
|
+
`@xingular/harness/variant/seed`. JavaScript and declarations are shipped in `dist/sdk`; a
|
|
458
|
+
TypeScript loader is not required. Node 22.19 or later is required. The interactive terminal
|
|
459
|
+
also requires Bun (release builds use 1.4.2); the CLI reports its version with `xharness --version`.
|
|
460
|
+
Original project code is Apache-2.0. See LICENSE, NOTICE.md and THIRD_PARTY_LICENSES.md.
|
|
461
|
+
|
|
462
|
+
A host providing its own browser tools sets `browser: false` on `createHarness` to disable the
|
|
463
|
+
generic backend and prevent tool-name collisions. The desktop App uses this for shared tabs.
|
|
464
|
+
The default standalone Harness keeps its isolated browser backend enabled.
|
|
465
|
+
|
|
466
|
+
This candidate intentionally resets development numbering to 1.0.0 while preserving old versions.
|
|
467
|
+
See [release notes](docs/releases/1.0.0.md) and [release procedure](docs/releases/README.md).
|
|
468
|
+
Publication requires registry verification, green CI and approval of the candidate/tag push.
|