@xingular/harness 1.0.0 → 1.2.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 +46 -5
- package/README.md +75 -21
- package/dist/cli.js +17421 -8711
- package/dist/sdk/accounts/accounts.d.ts +27 -3
- package/dist/sdk/accounts/accounts.js +78 -24
- package/dist/sdk/accounts/secrets.d.ts +12 -0
- package/dist/sdk/accounts/secrets.js +114 -7
- package/dist/sdk/accounts/store.d.ts +26 -1
- package/dist/sdk/accounts/store.js +1 -1
- package/dist/sdk/agents/builtin.d.ts +2 -0
- package/dist/sdk/agents/builtin.js +48 -0
- package/dist/sdk/agents/narrow.d.ts +13 -0
- package/dist/sdk/agents/narrow.js +29 -0
- package/dist/sdk/agents/planResearch.d.ts +5 -0
- package/dist/sdk/agents/planResearch.js +19 -0
- package/dist/sdk/agents/profiles.d.ts +81 -0
- package/dist/sdk/agents/profiles.js +226 -0
- package/dist/sdk/annotations/bridge.d.ts +42 -0
- package/dist/sdk/annotations/bridge.js +264 -0
- package/dist/sdk/annotations/capture.d.ts +116 -0
- package/dist/sdk/annotations/capture.js +308 -0
- package/dist/sdk/annotations/delivery.d.ts +72 -0
- package/dist/sdk/annotations/delivery.js +130 -0
- package/dist/sdk/annotations/inspect.d.ts +10 -0
- package/dist/sdk/annotations/inspect.js +33 -0
- package/dist/sdk/annotations/isolated.d.ts +6 -0
- package/dist/sdk/annotations/isolated.js +51 -0
- package/dist/sdk/annotations/pageScript.d.ts +28 -0
- package/dist/sdk/annotations/pageScript.js +871 -0
- package/dist/sdk/annotations/part.d.ts +10 -0
- package/dist/sdk/annotations/part.js +155 -0
- package/dist/sdk/annotations/queue.d.ts +4 -0
- package/dist/sdk/annotations/queue.js +40 -0
- package/dist/sdk/annotations/serverMethods.d.ts +3 -0
- package/dist/sdk/annotations/serverMethods.js +62 -0
- package/dist/sdk/annotations/store.d.ts +167 -0
- package/dist/sdk/annotations/store.js +394 -0
- package/dist/sdk/browser/backend.d.ts +16 -0
- package/dist/sdk/browser/backend.js +17 -0
- package/dist/sdk/browser/contracts.d.ts +19 -0
- package/dist/sdk/browser/contracts.js +116 -0
- package/dist/sdk/browser/index.d.ts +14 -3
- package/dist/sdk/browser/index.js +11 -4
- package/dist/sdk/browser/serverMethods.d.ts +3 -0
- package/dist/sdk/browser/serverMethods.js +7 -0
- package/dist/sdk/browser/session.d.ts +1 -0
- package/dist/sdk/browser/session.js +45 -9
- package/dist/sdk/browser/tools.d.ts +1 -4
- package/dist/sdk/browser/tools.js +14 -91
- package/dist/sdk/cli.js +24 -15
- package/dist/sdk/commands/list.d.ts +3 -0
- package/dist/sdk/commands/list.js +75 -0
- package/dist/sdk/commands/registry.d.ts +250 -0
- package/dist/sdk/commands/registry.js +47 -0
- package/dist/sdk/commands/routes.d.ts +16 -0
- package/dist/sdk/commands/routes.js +33 -0
- package/dist/sdk/core/bus.js +1 -1
- package/dist/sdk/core/commandBudget.d.ts +23 -0
- package/dist/sdk/core/commandBudget.js +57 -0
- package/dist/sdk/core/env.d.ts +1 -1
- package/dist/sdk/core/env.js +1 -1
- package/dist/sdk/core/index.js +17 -1
- package/dist/sdk/core/interactiveProfile.d.ts +46 -0
- package/dist/sdk/core/interactiveProfile.js +143 -0
- package/dist/sdk/core/workspace.d.ts +13 -0
- package/dist/sdk/core/workspace.js +88 -0
- package/dist/sdk/core/workspaceBashTool.d.ts +4 -0
- package/dist/sdk/core/workspaceBashTool.js +36 -0
- package/dist/sdk/core/workspaceSandbox.d.ts +31 -0
- package/dist/sdk/core/workspaceSandbox.js +320 -0
- package/dist/sdk/core/workspaceWriteOperations.d.ts +22 -0
- package/dist/sdk/core/workspaceWriteOperations.js +206 -0
- package/dist/sdk/doctor/serverMethods.d.ts +3 -0
- package/dist/sdk/doctor/serverMethods.js +8 -0
- package/dist/sdk/doctor/types.d.ts +2 -2
- package/dist/sdk/harness.d.ts +22 -0
- package/dist/sdk/harness.js +84 -5
- package/dist/sdk/history/recall.js +8 -8
- package/dist/sdk/history/serverMethods.d.ts +3 -0
- package/dist/sdk/history/serverMethods.js +8 -0
- package/dist/sdk/hub/cli.d.ts +1 -1
- package/dist/sdk/hub/cli.js +1 -1
- package/dist/sdk/hub/schema.d.ts +1 -1
- package/dist/sdk/hub/serverMethods.d.ts +3 -0
- package/dist/sdk/hub/serverMethods.js +11 -0
- package/dist/sdk/index.d.ts +16 -1
- package/dist/sdk/index.js +10 -0
- package/dist/sdk/mcp/connections.js +14 -7
- package/dist/sdk/mcp/serverMethods.d.ts +3 -0
- package/dist/sdk/mcp/serverMethods.js +22 -0
- package/dist/sdk/pi/runtime.d.ts +2 -1
- package/dist/sdk/pi/runtime.js +2 -2
- package/dist/sdk/plugins/builtin.d.ts +1 -0
- package/dist/sdk/plugins/builtin.js +145 -33
- package/dist/sdk/plugins/builtinRegistry.d.ts +60 -0
- package/dist/sdk/plugins/builtinRegistry.js +71 -0
- package/dist/sdk/plugins/catalogue.js +2 -1
- package/dist/sdk/plugins/cli.d.ts +1 -1
- package/dist/sdk/plugins/cli.js +4 -3
- package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
- package/dist/sdk/plugins/commandPrefix.js +21 -0
- package/dist/sdk/plugins/firstParty.d.ts +1 -1
- package/dist/sdk/plugins/firstParty.js +8 -2
- package/dist/sdk/plugins/inventory.js +4 -3
- package/dist/sdk/plugins/manifest.d.ts +2 -0
- package/dist/sdk/plugins/manifest.js +2 -1
- package/dist/sdk/plugins/surfaces.d.ts +5 -0
- package/dist/sdk/plugins/surfaces.js +11 -0
- package/dist/sdk/plugins/types.d.ts +15 -0
- package/dist/sdk/prompt/compile.d.ts +19 -2
- package/dist/sdk/prompt/compile.js +79 -26
- package/dist/sdk/prompt/standard.d.ts +17 -0
- package/dist/sdk/prompt/standard.js +21 -0
- package/dist/sdk/refine/cli.d.ts +1 -1
- package/dist/sdk/refine/cli.js +2 -2
- package/dist/sdk/refine/serverMethods.d.ts +3 -0
- package/dist/sdk/refine/serverMethods.js +20 -0
- package/dist/sdk/server/methods.js +27 -86
- package/dist/sdk/server/params.d.ts +4 -0
- package/dist/sdk/server/params.js +11 -0
- package/dist/sdk/server/remote.js +36 -11
- package/dist/sdk/sessions/compactionCheckpoint.d.ts +11 -0
- package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
- package/dist/sdk/sessions/continuation.d.ts +3 -0
- package/dist/sdk/sessions/continuation.js +5 -1
- package/dist/sdk/sessions/contracts.d.ts +185 -0
- package/dist/sdk/sessions/contracts.js +101 -4
- package/dist/sdk/sessions/control.d.ts +72 -0
- package/dist/sdk/sessions/control.js +158 -0
- package/dist/sdk/sessions/initialBash.d.ts +7 -0
- package/dist/sdk/sessions/initialBash.js +7 -0
- package/dist/sdk/sessions/planMode.d.ts +18 -4
- package/dist/sdk/sessions/planMode.js +82 -16
- package/dist/sdk/sessions/reasoningSummaries.d.ts +2 -2
- package/dist/sdk/sessions/reasoningSummaries.js +3 -3
- package/dist/sdk/sessions/registry.d.ts +2 -1
- package/dist/sdk/sessions/registry.js +6 -3
- package/dist/sdk/sessions/runIndex.js +7 -7
- package/dist/sdk/sessions/runStore.d.ts +14 -0
- package/dist/sdk/sessions/runStore.js +38 -1
- package/dist/sdk/sessions/runner.d.ts +40 -2
- package/dist/sdk/sessions/runner.js +163 -15
- package/dist/sdk/sessions/sessions.d.ts +40 -8
- package/dist/sdk/sessions/sessions.js +279 -27
- package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
- package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
- package/dist/sdk/sessions/sideQuestions.js +290 -0
- package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/subagentServerMethods.js +41 -0
- package/dist/sdk/sessions/subagentService.d.ts +22 -2
- package/dist/sdk/sessions/subagentService.js +93 -16
- package/dist/sdk/sessions/subagents.d.ts +9 -1
- package/dist/sdk/sessions/subagents.js +19 -0
- package/dist/sdk/sessions/workSlice.d.ts +103 -0
- package/dist/sdk/sessions/workSlice.js +297 -0
- package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
- package/dist/sdk/sessions/workspaceBoundary.js +46 -0
- package/dist/sdk/terminal/browser.d.ts +62 -0
- package/dist/sdk/terminal/browser.js +41 -0
- package/dist/sdk/terminal/browserControl.d.ts +29 -0
- package/dist/sdk/terminal/browserControl.js +187 -0
- package/dist/sdk/terminal/commandHelp.d.ts +17 -0
- package/dist/sdk/terminal/commandHelp.js +20 -0
- package/dist/sdk/terminal/controller.d.ts +15 -1
- package/dist/sdk/terminal/controller.js +67 -8
- package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
- package/dist/sdk/terminal/opentui/theme.d.ts +43 -0
- package/dist/sdk/terminal/opentui/theme.js +87 -0
- package/dist/sdk/terminal/piExtension.d.ts +6 -1
- package/dist/sdk/terminal/piExtension.js +169 -84
- package/dist/sdk/terminal/socket.d.ts +6 -3
- package/dist/sdk/terminal/socket.js +40 -9
- package/dist/sdk/terminal/standalone.d.ts +9 -0
- package/dist/sdk/terminal/standalone.js +118 -19
- package/dist/sdk/terminal/subagentMonitor.d.ts +47 -0
- package/dist/sdk/terminal/subagentMonitor.js +152 -0
- package/dist/sdk/terminal/terminals.d.ts +60 -7
- package/dist/sdk/terminal/terminals.js +598 -47
- package/dist/sdk/terminal/trajectory.js +2 -2
- package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
- package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
- package/dist/sdk/terminal/tui/commandPages.d.ts +7 -1
- package/dist/sdk/terminal/tui/commandPages.js +57 -6
- package/dist/sdk/terminal/tui/commands.d.ts +10 -4
- package/dist/sdk/terminal/tui/commands.js +269 -65
- package/dist/sdk/terminal/tui/dialogGeometry.d.ts +2 -2
- package/dist/sdk/terminal/tui/dialogGeometry.js +4 -2
- package/dist/sdk/terminal/tui/dialogs.d.ts +6 -1
- package/dist/sdk/terminal/tui/dialogs.js +9 -2
- package/dist/sdk/terminal/tui/list.d.ts +14 -1
- package/dist/sdk/terminal/tui/list.js +96 -14
- package/dist/sdk/terminal/tui/modelPicker.js +1 -6
- package/dist/sdk/terminal/tui/page.d.ts +3 -0
- package/dist/sdk/terminal/tui/pageOverlay.js +27 -7
- package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +26 -4
- package/dist/sdk/terminal/tui/pages/accountsPage.js +264 -36
- package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
- package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
- package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +2 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.js +103 -15
- package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
- package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +0 -5
- package/dist/sdk/terminal/tui/pages/pluginsPage.js +9 -3
- package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +8 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.js +16 -1
- package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.js +152 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +12 -5
- package/dist/sdk/terminal/tui/pages/trajectoryPage.js +156 -83
- package/dist/sdk/terminal/tui/pages/usagePage.d.ts +43 -0
- package/dist/sdk/terminal/tui/pages/usagePage.js +370 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
- package/dist/sdk/terminal/tui/piAdapter.d.ts +1 -2
- package/dist/sdk/terminal/tui/piAdapter.js +3 -5
- package/dist/sdk/terminal/tui/planMode.d.ts +1 -1
- package/dist/sdk/terminal/tui/planMode.js +1 -1
- package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
- package/dist/sdk/terminal/tui/pluginCommands.js +31 -0
- package/dist/sdk/terminal/tui/questions.d.ts +2 -0
- package/dist/sdk/terminal/tui/runtime.js +27 -5
- package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
- package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
- package/dist/sdk/terminal/tui/settingsModel.d.ts +2 -0
- package/dist/sdk/terminal/tui/settingsModel.js +32 -2
- package/dist/sdk/terminal/tui/sideQuestion.d.ts +26 -26
- package/dist/sdk/terminal/tui/sideQuestion.js +131 -98
- package/dist/sdk/terminal/tui/ui.d.ts +2 -0
- package/dist/sdk/terminal/tui/ui.js +1 -0
- package/dist/sdk/tools/askUser.js +26 -8
- package/dist/sdk/tools/checklist.js +3 -2
- package/dist/sdk/tools/checkpoint.d.ts +27 -0
- package/dist/sdk/tools/checkpoint.js +154 -0
- package/dist/sdk/tools/getCapabilities.d.ts +31 -0
- package/dist/sdk/tools/getCapabilities.js +34 -0
- package/dist/sdk/tools/harnessTools.d.ts +2 -0
- package/dist/sdk/tools/harnessTools.js +1 -1
- package/dist/sdk/tools/spawnSubagent.js +14 -4
- package/dist/sdk/usage/analytics.d.ts +20 -0
- package/dist/sdk/usage/analytics.js +151 -0
- package/dist/sdk/usage/ledger.d.ts +38 -0
- package/dist/sdk/usage/ledger.js +142 -0
- package/dist/sdk/usage/limits/adapters.d.ts +11 -0
- package/dist/sdk/usage/limits/adapters.js +349 -0
- package/dist/sdk/usage/limits/capture.d.ts +8 -0
- package/dist/sdk/usage/limits/capture.js +47 -0
- package/dist/sdk/usage/limits/http.d.ts +12 -0
- package/dist/sdk/usage/limits/http.js +51 -0
- package/dist/sdk/usage/limits/normalize.d.ts +15 -0
- package/dist/sdk/usage/limits/normalize.js +211 -0
- package/dist/sdk/usage/limits/service.d.ts +30 -0
- package/dist/sdk/usage/limits/service.js +176 -0
- package/dist/sdk/usage/limits/types.d.ts +65 -0
- package/dist/sdk/usage/limits/types.js +1 -0
- package/dist/sdk/usage/serverMethods.d.ts +3 -0
- package/dist/sdk/usage/serverMethods.js +22 -0
- package/dist/sdk/usage/service.d.ts +32 -0
- package/dist/sdk/usage/service.js +66 -0
- package/dist/sdk/usage/settings.d.ts +7 -0
- package/dist/sdk/usage/settings.js +28 -0
- package/dist/sdk/usage/types.d.ts +60 -0
- package/dist/sdk/usage/types.js +4 -0
- package/dist/sdk/web/part.d.ts +10 -0
- package/dist/sdk/web/part.js +6 -0
- package/dist/sdk/web/serverMethods.d.ts +3 -0
- package/dist/sdk/web/serverMethods.js +7 -0
- package/dist/sdk/wiki/serverMethods.d.ts +3 -0
- package/dist/sdk/wiki/serverMethods.js +26 -0
- package/dist/sdk/worktrees/cli.d.ts +11 -0
- package/dist/sdk/worktrees/cli.js +146 -0
- package/dist/sdk/worktrees/copy.d.ts +9 -0
- package/dist/sdk/worktrees/copy.js +111 -0
- package/dist/sdk/worktrees/git.d.ts +16 -0
- package/dist/sdk/worktrees/git.js +81 -0
- package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
- package/dist/sdk/worktrees/serverMethods.js +30 -0
- package/dist/sdk/worktrees/service.d.ts +73 -0
- package/dist/sdk/worktrees/service.js +483 -0
- package/dist/sdk/worktrees/setup.d.ts +23 -0
- package/dist/sdk/worktrees/setup.js +65 -0
- package/dist/sdk/worktrees/types.d.ts +91 -0
- package/dist/sdk/worktrees/types.js +1 -0
- package/dist/sdk/world/cli.d.ts +2 -2
- package/dist/sdk/world/cli.js +6 -6
- package/dist/sdk/world/world.d.ts +3 -1
- package/dist/sdk/world/world.js +8 -9
- package/dist/terminal-opentui.js +16456 -5966
- package/dist/terminal-pi.js +1579 -573
- package/docs/README.md +22 -2
- package/docs/architecture/00-overview.md +28 -16
- package/docs/architecture/02-sessions-and-runs.md +184 -25
- package/docs/architecture/03-variants.md +10 -2
- package/docs/architecture/04-prompt.md +65 -7
- package/docs/architecture/06-plugins-and-capabilities.md +57 -4
- package/docs/architecture/07-tools-and-gate.md +112 -17
- package/docs/architecture/08-memory-and-history.md +4 -2
- package/docs/architecture/09-accounts-and-connectors.md +39 -1
- package/docs/architecture/10-server-protocol.md +168 -4
- package/docs/architecture/11-terminal.md +251 -8
- package/docs/architecture/12-storage.md +45 -3
- package/docs/architecture/13-world-tools.md +49 -6
- package/docs/architecture/14-surfaces-and-parity.md +136 -0
- package/docs/architecture/README.md +17 -4
- package/docs/architecture/proposals/PROP-0006-run-checklist.md +4 -2
- package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
- package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
- package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
- package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
- package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
- package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
- package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
- package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
- package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
- package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
- package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
- package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
- package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
- package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
- package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
- package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
- package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
- package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
- package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
- package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
- package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
- package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
- package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
- package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
- package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
- package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
- package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
- package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
- package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +247 -0
- package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
- package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
- package/docs/architecture/proposals/README.md +39 -0
- package/docs/decisions/ADR-0001-owned-terminal.md +1 -1
- package/docs/decisions/ADR-0009-xharness-command.md +6 -5
- package/docs/decisions/ADR-0014-public-release-baseline.md +3 -2
- package/docs/decisions/ADR-0015-resource-browser.md +28 -0
- package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
- package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
- package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
- package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
- package/docs/decisions/ADR-0020-page-annotations.md +37 -0
- package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
- package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
- package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
- package/docs/decisions/ADR-0024-xagent-command.md +40 -0
- package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
- package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
- package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
- package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
- package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
- package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
- package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
- package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +33 -0
- package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
- package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
- package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
- package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
- package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
- package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
- package/docs/doctor.md +10 -4
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
- package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
- package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
- package/docs/features/README.md +26 -0
- package/docs/features/interfaces/README.md +1 -1
- package/docs/future-work.md +48 -0
- package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
- package/docs/parity.md +134 -0
- package/docs/releases/1.0.0.md +2 -2
- package/docs/releases/1.1.1.md +28 -0
- package/docs/releases/1.2.0.md +49 -0
- package/docs/releases/4.0.0.md +47 -0
- package/docs/releases/README.md +37 -27
- package/docs/study/00-index.md +8 -0
- package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
- package/docs/study/autonomous-engineering-sources.md +277 -0
- package/docs/study/autonomy-sources.md +147 -0
- package/docs/study/proactive-autonomy.md +408 -0
- package/docs/study/tui-resource-browser.md +78 -0
- package/docs/terminal-tui.md +386 -113
- package/package.json +6 -5
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0030
|
|
3
|
+
title: A parent-set title for each subagent, shown in the roster
|
|
4
|
+
status: Accepted; implemented
|
|
5
|
+
created: 2026-10-24
|
|
6
|
+
updated: 2026-10-24
|
|
7
|
+
affects: [02-sessions-and-runs.md, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, terminal-tui.md, 14-surfaces-and-parity.md, parity]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0030: A parent-set title for each subagent, shown in the roster
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
A live subagent row shows the child's `session_name` once the child calls it successfully, and
|
|
15
|
+
otherwise the whole brief (`subagentsWidget.ts`, `safe(item.name) || safe(item.goal)`). The brief
|
|
16
|
+
can run to 4000 characters, so the row shows a paragraph of instructions cut to the terminal width.
|
|
17
|
+
In a live run of two explorers, neither had a name, and both rows showed their briefs.
|
|
18
|
+
|
|
19
|
+
The child is the only one asked to name itself. The "six words at most" rule is in the
|
|
20
|
+
`session_name` tool description and the prompt, and nothing checks it. A child may skip the call,
|
|
21
|
+
or its call may fail, and the row then shows the brief for the whole run. The parent, which wrote
|
|
22
|
+
the brief, knows the purpose in a few words and names nothing.
|
|
23
|
+
|
|
24
|
+
## Affected rules
|
|
25
|
+
|
|
26
|
+
No invariant changes. The contracts that change are:
|
|
27
|
+
|
|
28
|
+
- `spawn_subagent` (page 07): a `title` parameter. The model must supply it.
|
|
29
|
+
- `subagents.spawn` (page 10): an optional `title`.
|
|
30
|
+
- The run record (page 02): an optional `title`, stored like `profile` (PROP-0029).
|
|
31
|
+
- The live roster and `/subagents` (page 11, `terminal-tui.md`): the row title is the parent's title.
|
|
32
|
+
- Parity (page 14, `parity.md`): the Subagents row names the title, not the child's session name.
|
|
33
|
+
|
|
34
|
+
## Proposal
|
|
35
|
+
|
|
36
|
+
- `spawn_subagent` takes `title`, a required string: one short imperative of at most six words,
|
|
37
|
+
such as "Map the auth flow". It is checked the way `session_name` is: whitespace collapses, and
|
|
38
|
+
control characters and empty values are refused with a message the model can act on.
|
|
39
|
+
- `subagents.spawn` takes an optional `title` with the same check. A host or script that omits it
|
|
40
|
+
gets `briefTitle(brief)`: the first non-empty line of the brief, collapsed and capped at 60
|
|
41
|
+
characters. The model cannot omit it.
|
|
42
|
+
- The child run record stores `title`, an optional text field (`RunRecord.title`). The spawn sets it
|
|
43
|
+
before the child launches, and a startup failure keeps it. A record written before this change
|
|
44
|
+
has no title and reads as `briefTitle(goal)`.
|
|
45
|
+
- The terminal roster, the `/subagents` label and its search read the title. The row no longer
|
|
46
|
+
reads the child's `session_name`. The child still names its own Pi session with `session_name`,
|
|
47
|
+
and that name stays in the child's session history.
|
|
48
|
+
- The transcript's `spawn_subagent` row shows the title, and the brief only when no title is given.
|
|
49
|
+
|
|
50
|
+
## Alternatives
|
|
51
|
+
|
|
52
|
+
- **Require the child to name itself.** This is the current design. The child must be prompted,
|
|
53
|
+
and the rule is not checked. The screenshot shows it was skipped.
|
|
54
|
+
- **Make `title` optional in the tool.** A model skips an optional field the same way it skipped the
|
|
55
|
+
child's name. Rejected: the tool requires it, and only programmatic callers may omit it.
|
|
56
|
+
- **Generate the title with an extra model call.** It costs a call and adds latency to every spawn.
|
|
57
|
+
Rejected.
|
|
58
|
+
- **Keep the child's name first, then the parent's title.** A child that names itself would still
|
|
59
|
+
replace the title the parent chose. Rejected: one source keeps the roster stable.
|
|
60
|
+
- **Do nothing.** Rows keep showing briefs whenever the child does not name itself.
|
|
61
|
+
|
|
62
|
+
## Consequences
|
|
63
|
+
|
|
64
|
+
- Applications built on the harness get a new required argument in `spawn_subagent`, and an
|
|
65
|
+
optional one in `subagents.spawn`. A model that omits `title` gets an error and retries.
|
|
66
|
+
- The run record gains an optional field. Readers that ignore unknown fields are unaffected. The
|
|
67
|
+
App reads run records in Rust and does not render the roster.
|
|
68
|
+
- The terminal monitor drops the child's `name` field. Its tests change with it.
|
|
69
|
+
|
|
70
|
+
## Migration
|
|
71
|
+
|
|
72
|
+
No data moves. Records without `title` read as `briefTitle(goal)`. The change can be undone by
|
|
73
|
+
removing the parameter; records written with `title` stay readable, because the field is optional.
|
|
74
|
+
|
|
75
|
+
## Checks
|
|
76
|
+
|
|
77
|
+
- `src/sessions/subagentService.test.ts`: the title is stored on the child run, and defaults from the
|
|
78
|
+
brief's first line when omitted. An over-long title is refused.
|
|
79
|
+
- `src/tools/spawnSubagent.test.ts` (new): the tool refuses a missing or over-long title before it
|
|
80
|
+
starts a child, and cleaning and the brief fallback behave as stated.
|
|
81
|
+
- `src/terminal/subagentMonitor.test.ts`: the row takes the parent's title, and the child's
|
|
82
|
+
`session_name` does not change it.
|
|
83
|
+
- `src/terminal/opentui/subagentsWidget.test.ts` and `model.test.ts`: the row and the transcript row
|
|
84
|
+
show the title.
|
|
85
|
+
- `npm run typecheck`, `npm test`, and `npm run prove` (the spawn path is server code), then the App's
|
|
86
|
+
checks, because a harness change requires them.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0031
|
|
3
|
+
title: Namespace plugin commands by owner
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-25
|
|
6
|
+
updated: 2026-10-25
|
|
7
|
+
affects: [INV-TUI-7, 06-plugins-and-capabilities.md, 11-terminal.md, 14-surfaces-and-parity.md, terminal-tui.md, README.md, ADR-0021, ADR-0031]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0031: Namespace plugin commands by owner
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
The terminal currently uses `/plugin:<command>` for optional built-in and Pi extension commands, but bare names for commands owned by required built-ins. The generic `plugin` prefix does not identify the owner and still requires global command-name collision handling. Annotation commands are exposed as `/plugin:annotate` and `/plugin:notes`, while the plugin is named `Page notes` despite supporting interactive web annotation.
|
|
15
|
+
|
|
16
|
+
Evidence: `src/plugins/builtinRegistry.ts` selects `unprefixed` or `plugin` from `descriptor.required`; `src/terminal/tui/commands.ts` routes the single `plugin:<name>` namespace; Pi commands are grouped only by command name and `sourceInfo.path`.
|
|
17
|
+
|
|
18
|
+
## Affected rules
|
|
19
|
+
|
|
20
|
+
- **INV-TUI-7** currently says required built-in commands use unprefixed names and optional built-in/Pi extension commands use `/plugin:<command>`.
|
|
21
|
+
- **14 Surfaces and parity, Contracts** currently says optional built-in and Pi extension commands use `/plugin:<command>`.
|
|
22
|
+
- **ADR-0021** records bare required built-ins and the generic `/plugin:<command>` form. This proposal supersedes its command-namespace decision.
|
|
23
|
+
|
|
24
|
+
## Proposal
|
|
25
|
+
|
|
26
|
+
Every plugin-owned terminal command uses `/<owner-prefix>:<command>`, whether the owner is a required built-in, optional built-in, or Pi extension. Core terminal commands remain bare. Help, completion, dispatch, and duplicate diagnostics all use the same owner-qualified route. A collision is determined by the complete owner-prefix/command pair; different plugins may use the same command name.
|
|
27
|
+
|
|
28
|
+
Built-in modules declare a stable command prefix (defaulting to a validated slug derived from the plugin id, with explicit overrides where the public slug differs). Pi package extensions use `harness.commandPrefix` when declared and otherwise a normalized package name; loose extensions use a normalized extension name. Prefix collisions between owners and duplicate commands within an owner are reported with their source paths rather than silently routed. The `skill:` namespace remains reserved for skill invocation.
|
|
29
|
+
|
|
30
|
+
A built-in plugin module may declare a default terminal command for the owner root. The annotations plugin uses prefix `annotate`: `/annotate:` opens the capture pane, `/annotate:annotate` is an equivalent discoverable alias, and `/annotate:notes` opens the saved-annotations page. Its public plugin title becomes **Web annotations**. The stable plugin id, stored note schema, `annotations.*` methods, and `page_notes_*` tools do not change.
|
|
31
|
+
|
|
32
|
+
For one release, retain the existing `/plugin:<command>` forms and prior bare required-plugin forms as compatibility aliases when they still resolve unambiguously. These aliases are not shown in help or completion. Core commands keep precedence. Prompt templates and `/skill:<name>` keep their existing behavior.
|
|
33
|
+
|
|
34
|
+
## Alternatives
|
|
35
|
+
|
|
36
|
+
- Keep `/plugin:<command>` and only rename the annotations plugin. This leaves plugin ownership hidden and preserves a global collision surface.
|
|
37
|
+
- Namespace only optional plugins. This retains two command rules and leaves required plugin commands able to collide with core or prompt names.
|
|
38
|
+
- Use each plugin's display title as its prefix. Titles are presentation and can change; route identity must remain stable.
|
|
39
|
+
- Do nothing. The generic prefix and current naming ambiguity remain.
|
|
40
|
+
|
|
41
|
+
## Consequences
|
|
42
|
+
|
|
43
|
+
The terminal command contract and `BuiltinPluginRegistry` metadata change. A plugin package may optionally declare `harness.commandPrefix`; packages without the field continue to work with a normalized source-derived prefix. No server method, capability set, data root, stored note, or run record changes. Host surfaces continue to use Harness methods; the Web annotations title is part of `plugins.list` metadata.
|
|
44
|
+
|
|
45
|
+
## Migration
|
|
46
|
+
|
|
47
|
+
New commands become owner-qualified. Existing generic and bare forms remain temporary aliases for one release, without appearing in completion or help. Scripts and keybindings should migrate to the owner-qualified forms. Removing the aliases later requires a release note; no stored-data migration is needed.
|
|
48
|
+
|
|
49
|
+
## Checks
|
|
50
|
+
|
|
51
|
+
- Registry and terminal tests cover prefix validation, owner-qualified routing, default plugin roots, aliases, extension identity, collisions, help, and completion.
|
|
52
|
+
- Annotation tests cover `/annotate:`, `/annotate:annotate`, `/annotate:notes`, and the Web annotations title.
|
|
53
|
+
- Run Harness typecheck, tests, and `npm run prove`.
|
|
54
|
+
- Run Xingular Agent typecheck, tests, layer checks, and Rust tests; inspect terminal completion and the host's annotation/plugin presentation.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0032
|
|
3
|
+
title: Evidence-grounded planning with read-only research delegation
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-25
|
|
6
|
+
updated: 2026-10-25
|
|
7
|
+
affects: [02-sessions-and-runs.md, 06-plugins-and-capabilities.md, 07-tools-and-gate.md, 14-surfaces-and-parity.md, parity]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0032: Evidence-grounded planning with read-only research delegation
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
Plan mode has a strong read-only gate and a usable terminal handoff, but its instructions describe
|
|
15
|
+
only broad research, a UI-specific set of directions, and a loose output shape. They do not require
|
|
16
|
+
plans to ground code claims in inspected sources, map the requested outcomes to actionable steps,
|
|
17
|
+
resolve user-owned choices without asking about discoverable facts, or handle revisions as complete
|
|
18
|
+
replacement plans. Plan mode also forbids delegation entirely, so substantial investigations cannot
|
|
19
|
+
use the existing `explorer` profile to research in parallel; it has an explicit no-write tool list,
|
|
20
|
+
but no plan-specific plugin restriction, and there is no built-in `researcher` profile. The
|
|
21
|
+
instruction to explore “typically 3–5” UI directions also pushes ordinary UI implementation requests
|
|
22
|
+
toward unnecessary design alternatives. Verification is requested but not defined as concrete checks
|
|
23
|
+
with expected results.
|
|
24
|
+
|
|
25
|
+
Evidence: `src/sessions/planMode.ts` defines `PLAN_INSTRUCTIONS`; `src/sessions/planMode.test.ts`
|
|
26
|
+
checks prompt phrases and parser mechanics but does not measure plan quality. The binding summary in
|
|
27
|
+
`docs/architecture/02-sessions-and-runs.md` currently says UI plans explore distinct design directions,
|
|
28
|
+
compare trade-offs and recommend one. This differs from the stronger planning rubric in the checked-
|
|
29
|
+
out oh-my-pi prompt (`external/omp/packages/coding-agent/src/prompts/system/plan-mode-active.md`):
|
|
30
|
+
“Plan: execution spec, not design doc,” and “Every asserted path, symbol, signature, behavior:
|
|
31
|
+
actually read this session.” Adopt those principles, not its plan-file/approval mechanics. OpenCode's
|
|
32
|
+
checked-out plan plugin primarily defines role and read-only constraints; DeepSeek Harness leaves the
|
|
33
|
+
planning guidance deployment-defined. Neither provides the same detailed planning rubric.
|
|
34
|
+
|
|
35
|
+
## Affected rules
|
|
36
|
+
|
|
37
|
+
- `02-sessions-and-runs.md`, Plan mode: “for UI-related plans it asks the model to explore distinct
|
|
38
|
+
design directions, compare trade-offs and recommend one, using contextual `uiSketch` questions when
|
|
39
|
+
helpful. The reply ends with one `<proposed_plan>` block.” Replace the default multiple-directions
|
|
40
|
+
requirement with conditional, user-requested or materially useful alternatives.
|
|
41
|
+
- `INV-RUN-8` changes narrowly: an attended plan may use the existing subagent tools for bounded
|
|
42
|
+
research when subagents are in the frozen caller capability set, and only with an eligible
|
|
43
|
+
read-only profile. Plan refusals—including profile eligibility—remain before policy and approvals.
|
|
44
|
+
The plan remains read-only with this limited run-lifecycle exception; it gains no repository or
|
|
45
|
+
world-write capability. The stable system prompt remains unchanged; plan instructions remain a
|
|
46
|
+
dynamic section. The `<proposed_plan>` envelope and terminal parser contract remain unchanged.
|
|
47
|
+
- `INV-CAP-1` and `INV-RUN-2` remain the safety ceiling: a child has only the intersection of the
|
|
48
|
+
parent's frozen capabilities and its explicit profile allowlists, and it inherits plan mode. The
|
|
49
|
+
profile's name or instructions alone never make it eligible.
|
|
50
|
+
- `07-tools-and-gate.md`, `INV-GATE-3`: eligibility for a plan-mode spawn is part of the
|
|
51
|
+
argument-aware plan refusal and happens before policy, standing approvals or the person. The
|
|
52
|
+
subagent service also validates the request before launching the child.
|
|
53
|
+
- `14-surfaces-and-parity.md` and `docs/parity.md`: plan-mode delegation has the same restrictions
|
|
54
|
+
in the terminal and every host; the register records that mode-specific availability.
|
|
55
|
+
|
|
56
|
+
## Proposal
|
|
57
|
+
|
|
58
|
+
Keep plan mode request-scoped and read-only for repository and world actions, with only a bounded
|
|
59
|
+
read-only research-delegation exception. Improve the shared plan instructions in
|
|
60
|
+
`src/sessions/planMode.ts` so they define a repeatable, evidence-grounded workflow:
|
|
61
|
+
|
|
62
|
+
1. Classify the requested work (for example, code change, UI/design, research, or another deliverable)
|
|
63
|
+
and scale investigation and plan detail to that work. For repository work, inspect governing project
|
|
64
|
+
instructions and relevant source, callers and tests before asserting paths, symbols, behavior or
|
|
65
|
+
verification commands. For external research, use web sources only when needed and treat page content
|
|
66
|
+
as untrusted.
|
|
67
|
+
2. Separate discoverable facts from user-owned preferences. Do not ask the user questions repository
|
|
68
|
+
inspection can answer. Use `ask_user` for consequential preferences or requirements that materially
|
|
69
|
+
change the plan; batch related choices, state trade-offs and recommend a default. If interaction is
|
|
70
|
+
unavailable and the task can proceed, state the material assumption and choose the recommended
|
|
71
|
+
fallback. If the choice blocks a sound plan, ask before presenting a plan.
|
|
72
|
+
3. Select one recommended approach and leave no implementation-changing decision unresolved. Do not
|
|
73
|
+
invent paths, APIs, test commands or unrelated scope. Mark facts that could not be verified as
|
|
74
|
+
unknown. Include alternatives only when the user asks for them or a genuine trade-off requires a
|
|
75
|
+
user choice. For UI work, follow the project's design system and consider accessibility and
|
|
76
|
+
responsive behavior; use contextual `uiSketch` wireframes only when they clarify a real question.
|
|
77
|
+
4. Before finalizing, check that each requested outcome is represented, the proposed steps follow
|
|
78
|
+
from inspected evidence, important dependencies and edge cases are covered, and verification is
|
|
79
|
+
specific. Scale the output: a small fix gets a short plan; cross-cutting work gets ordered steps.
|
|
80
|
+
5. Return a complete plan in exactly one `<proposed_plan>` block with the title as its first `#`
|
|
81
|
+
heading. Use concise `Goal`, `Findings` when useful, `Steps`, `Verification`, and material
|
|
82
|
+
`Assumptions` sections. For code changes, steps name verified files/symbols and intended behavior;
|
|
83
|
+
verification names repository-grounded commands/checks and expected results without claiming they ran.
|
|
84
|
+
For non-code work, describe concrete deliverables and success checks instead of forcing file lists.
|
|
85
|
+
6. When revising an earlier plan, treat the latest user request as primary, incorporate prior answers,
|
|
86
|
+
preserve still-valid decisions, and return a complete replacement block rather than a delta.
|
|
87
|
+
7. For substantial work where independent investigation adds value, delegate bounded research using
|
|
88
|
+
the existing `spawn_subagent` and `wait_subagents` tools when they are in the frozen caller
|
|
89
|
+
capabilities. Use `explorer` for repository tracing and a new built-in `researcher` for source-based
|
|
90
|
+
external research. Give each child a focused question and require evidence (`path:line` or source
|
|
91
|
+
URLs), uncertainty and findings only; never delegate implementation. The parent verifies useful
|
|
92
|
+
claims and synthesizes them into its plan. Small tasks need not spawn a child, and user questions
|
|
93
|
+
remain with the parent.
|
|
94
|
+
|
|
95
|
+
Plan mode may spawn only profiles whose *effective resolved* tool and plugin allowlists are
|
|
96
|
+
explicit and confined to a plan research set. Add the `researcher` built-in and give `explorer` an
|
|
97
|
+
explicit safe plugin allowlist. Expose only eligible profiles in the plan's agent guidance; the
|
|
98
|
+
runtime check remains authoritative. Global or project overrides are checked by their resolved
|
|
99
|
+
capabilities, not trusted by name or role text; reject omitted profiles, profiles with
|
|
100
|
+
inherited unbounded allowlists, and profiles that include write/edit/Bash, connected-app actions or
|
|
101
|
+
other non-research capabilities. The gate makes this an argument-aware plan refusal before approvals;
|
|
102
|
+
the shared subagent service rechecks it before launch. A child keeps `plan: true`, remains within
|
|
103
|
+
the parent's frozen capability ceiling, cannot ask the user or spawn nested agents, and receives
|
|
104
|
+
only the intersection of parent tools/plugins, the profile allowlists and the plan research set.
|
|
105
|
+
`wait_subagents` can collect only the resulting eligible child work. Existing automatic join and
|
|
106
|
+
result-delivery behavior remains in force.
|
|
107
|
+
|
|
108
|
+
Keep the existing PlanCard's implement/edit behavior and same-session handoff. Reuse the existing
|
|
109
|
+
subagent methods, records and lifecycle; add no public server methods, writable plan files, new
|
|
110
|
+
approval tool, persistent plan state, or application-specific behavior. The mode-specific tool-set
|
|
111
|
+
exception is limited to eligible research delegation; it does not permit arbitrary profiles or
|
|
112
|
+
writes. Keep the plan section dynamic; increase its character budget from 2,000 to 4,000 only to fit
|
|
113
|
+
the richer instructions, and test that the compiled section is not cut.
|
|
114
|
+
|
|
115
|
+
Evaluate plan quality in the separate Evaluation repository, not by treating prompt-string assertions
|
|
116
|
+
as proof. Add a small representative planning task set and a rubric for source grounding, request
|
|
117
|
+
coverage, decision quality, actionability, verification and calibrated use of alternatives/questions.
|
|
118
|
+
Use deterministic checks where possible and blinded semantic review for qualities a keyword grader
|
|
119
|
+
cannot establish. Evaluation task/grader paths and adapter support for `plan: true` must be inspected
|
|
120
|
+
before selecting implementation points. Any changed task or grader must receive the required suite or
|
|
121
|
+
grader version bump. Compare current and candidate prompts on the same tasks, model, effort and tools;
|
|
122
|
+
run live trials only with explicit credential/model selection and authorization.
|
|
123
|
+
|
|
124
|
+
## Alternatives
|
|
125
|
+
|
|
126
|
+
- **Make only a short wording edit.** Rejected: it could remove the UI bias but would not define
|
|
127
|
+
evidence grounding, revision behavior, decision-completeness or how to measure improvement.
|
|
128
|
+
- **Copy oh-my-pi's plan workflow wholesale.** Rejected: it depends on writable `local://` plan files,
|
|
129
|
+
plan-file editing and `xd://propose` approval. This Harness prohibits those actions in plan mode and
|
|
130
|
+
already carries the proposed plan in session history for its PlanCard handoff.
|
|
131
|
+
- **Add a plan file, new approval tool or persisted plan lifecycle.** Deferred: these introduce new
|
|
132
|
+
behavior/state and are not needed to improve plan quality with the current handoff. Reconsider only
|
|
133
|
+
if controlled evaluations show the existing history-based handoff is insufficient.
|
|
134
|
+
- **Keep 3–5 UI directions as the default.** Rejected: alternatives are useful for explicit design
|
|
135
|
+
exploration or genuine preference decisions, not as a routine precondition for implementing a
|
|
136
|
+
clear UI request.
|
|
137
|
+
- **Allow every subagent profile in plan mode and rely on prompt wording.** Rejected: profiles can
|
|
138
|
+
be overridden and may inherit the parent's full tool/plugin set; a prompt is not an enforcement
|
|
139
|
+
boundary.
|
|
140
|
+
- **Allow only profiles whose names are `explorer` or `researcher`.** Rejected: a global or project
|
|
141
|
+
profile can replace either name with broader capabilities. Eligibility must be checked against the
|
|
142
|
+
effective explicit allowlists, with the plan gate and child capability intersection as enforcement.
|
|
143
|
+
- **Do not allow delegation in plan mode.** Rejected: independent read-only research can improve
|
|
144
|
+
coverage on substantial plans without granting implementation capability.
|
|
145
|
+
- **Do nothing.** Rejected: the current tests cannot detect unsupported claims, missing requested
|
|
146
|
+
outcomes, vague verification or unnecessary alternatives.
|
|
147
|
+
|
|
148
|
+
## Consequences
|
|
149
|
+
|
|
150
|
+
The plan-mode prompt becomes more prescriptive only while planning; its dynamic-section delivery
|
|
151
|
+
continues to leave the stable system prompt unchanged. Plan responses become more consistently
|
|
152
|
+
structured, while retaining the existing title/tag parser and PlanCard. Both the SDK and terminal
|
|
153
|
+
use the shared instructions and enforce the same profile eligibility before approvals. When the
|
|
154
|
+
parent already has subagent capability, a plan may create ordinary child-run records for eligible
|
|
155
|
+
read-only research; no child can gain tools beyond the parent's frozen set, and plan-mode refusals
|
|
156
|
+
still prevent writes and commands. The terminal and App expose the same conditional behavior, with
|
|
157
|
+
no host-only capability or presentation change. Existing saved histories, run records and old
|
|
158
|
+
`<proposed_plan>` blocks remain readable; no storage or public protocol schema changes. Planning
|
|
159
|
+
runs carry a larger dynamic section (up to 4,000 characters).
|
|
160
|
+
|
|
161
|
+
The Evaluation repository will gain versioned planning tasks and grading, including a case where
|
|
162
|
+
research delegation is useful and the parent must verify evidence. Its benchmark results are
|
|
163
|
+
separately versioned and are not product behavior. The Xingular Agent application requires no
|
|
164
|
+
presentation change unless evaluation identifies a genuine surface gap.
|
|
165
|
+
|
|
166
|
+
## Migration
|
|
167
|
+
|
|
168
|
+
No stored-data migration. Reuse the current subagent run records and methods; no server protocol or
|
|
169
|
+
capability schema migration is required. Preserve the opening and closing `<proposed_plan>` tags and
|
|
170
|
+
first-level title heading so old and new plans remain parseable. Existing plans are not rewritten;
|
|
171
|
+
revisions produce a new complete block in the existing conversation. The plan-mode tool set and
|
|
172
|
+
argument-aware refusal behavior change only as described above; all other approval behavior remains
|
|
173
|
+
unchanged.
|
|
174
|
+
|
|
175
|
+
## Checks
|
|
176
|
+
|
|
177
|
+
- Harness tests cover the revised prompt contract, section budget/no-cut behavior, dynamic
|
|
178
|
+
delivery/withdrawal, plan revisions and structured-plan parsing. Add profile and subagent cases for
|
|
179
|
+
eligible built-ins, disabled parent capabilities, omitted/unsafe profiles, global/project overrides,
|
|
180
|
+
child inheritance of `plan: true`, strict child tool/plugin intersection, blocked write/command
|
|
181
|
+
attempts before approvals, non-nested delegation and result delivery. Exercise the same eligibility
|
|
182
|
+
and refusal behavior through SDK and terminal plan runs. Run Harness typecheck and tests.
|
|
183
|
+
- After acceptance, update `docs/architecture/02-sessions-and-runs.md`,
|
|
184
|
+
`docs/architecture/06-plugins-and-capabilities.md`, `docs/architecture/07-tools-and-gate.md`,
|
|
185
|
+
`docs/architecture/14-surfaces-and-parity.md` and `docs/parity.md` in the implementation change.
|
|
186
|
+
Confirm both surfaces display and enforce the same mode-specific restriction.
|
|
187
|
+
- In Evaluation, add representative planning scenarios, including a research task where delegation
|
|
188
|
+
is useful and a case where it is not; grade evidence verification and verify that no child performs
|
|
189
|
+
writes. Version the suite/grader as required. Verify the adapter launches a real plan-mode run and
|
|
190
|
+
retains native tool/output evidence.
|
|
191
|
+
- Run a controlled baseline/candidate pilot with the same explicitly selected model, provider,
|
|
192
|
+
effort, tools and tasks; use repeated trials and blinded review. Do not call it a passing baseline
|
|
193
|
+
until complete. Live requests require explicit authorization and credentials. No live model comparison
|
|
194
|
+
was run for this implementation; it remains pending explicit model/credential selection and authorization.
|
|
195
|
+
- After a Harness implementation, run its required checks and the Xingular Agent checks. For
|
|
196
|
+
Evaluation runner/grader changes, run its offline dependency and unit-test commands.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0033
|
|
3
|
+
title: Rehydrate bounded run checkpoints after compaction
|
|
4
|
+
status: Accepted
|
|
5
|
+
created: 2026-10-25
|
|
6
|
+
updated: 2026-10-25
|
|
7
|
+
affects: [INV-PRM-1, INV-PRM-4, INV-RUN-8, 02-sessions-and-runs.md, 04-prompt.md, 11-terminal.md, 14-surfaces-and-parity.md, ADR-0032]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0033: Rehydrate bounded run checkpoints after compaction
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
Pi keeps the native transcript when it compacts context, but the model receives a summary and
|
|
15
|
+
recent messages. A run's latest checklist is already persisted as `checklist.updated`, and
|
|
16
|
+
continuations restore it, but the active run does not put that state back into model context after a
|
|
17
|
+
successful compaction. Dynamic plan instructions can likewise be summarized away during an SDK
|
|
18
|
+
run. This can leave an unfinished task without a reliable current step or planning contract.
|
|
19
|
+
|
|
20
|
+
## Affected rules
|
|
21
|
+
|
|
22
|
+
- **INV-PRM-1:** “The prompt is assembled only in `src/prompt/compile.ts`. Nothing else builds
|
|
23
|
+
model instructions.” The checkpoint must use that compiler.
|
|
24
|
+
- **INV-PRM-4:** “An update carries only changed dynamic sections, so an unchanged turn appends
|
|
25
|
+
nothing. A compaction on the active branch forces the full snapshot again.” This proposal adds
|
|
26
|
+
rehydration inside an active run, before its next model request.
|
|
27
|
+
- **INV-RUN-8:** Plan-mode tools and gate restrictions stay unchanged; checkpointing must not widen
|
|
28
|
+
the callable set or change the stable system prompt.
|
|
29
|
+
|
|
30
|
+
## Proposal
|
|
31
|
+
|
|
32
|
+
- Add a foundation-owned Pi extension, used by both `Sessions.run` and the Harness terminal. It
|
|
33
|
+
observes successful checklist tool results and the active request, and detects compaction through
|
|
34
|
+
the model-context projection.
|
|
35
|
+
- After compaction, on each model request while that run remains active, append one ephemeral,
|
|
36
|
+
hidden context message compiled by `src/prompt/compile.ts`. It contains the bounded user request,
|
|
37
|
+
the latest validated checklist (including current and pending items), and current plan-mode
|
|
38
|
+
instructions when applicable. Continuations may seed it from their already persisted checklist.
|
|
39
|
+
- Do not persist the checkpoint as another session entry or run event. Keep it scoped to the active
|
|
40
|
+
request, clear its in-memory state when that run settles or the branch changes, and never include
|
|
41
|
+
hidden reasoning. The existing native transcript, `checklist.updated` event and continuation
|
|
42
|
+
behavior remain the durable records.
|
|
43
|
+
- Keep all authorization in the existing plan-mode gate. The checkpoint only restores context; it
|
|
44
|
+
grants no tools or permissions.
|
|
45
|
+
|
|
46
|
+
## Alternatives
|
|
47
|
+
|
|
48
|
+
- **Rely on the compaction summary to retain progress.** Rejected: the summarizer is probabilistic
|
|
49
|
+
and may omit exact checklist state or dynamic plan instructions.
|
|
50
|
+
- **Add a checkpoint side file or run-event type.** Rejected: the run already records its checklist,
|
|
51
|
+
and an additional durable format would duplicate state and require protocol migration.
|
|
52
|
+
- **Persist a custom context message after every compaction.** Rejected: it would remain in future
|
|
53
|
+
requests after the active run ended. An ephemeral context projection keeps the checkpoint
|
|
54
|
+
request-scoped.
|
|
55
|
+
- **Do nothing.** Rejected: a bounded state checkpoint improves recovery without retaining the full
|
|
56
|
+
conversation in model context.
|
|
57
|
+
|
|
58
|
+
## Consequences
|
|
59
|
+
|
|
60
|
+
After compaction, each model request in the active run receives the checkpoint again; this adds a
|
|
61
|
+
bounded amount of input until the run settles. There is no model call, run-event schema, public
|
|
62
|
+
method, storage-layout, or stable-prefix change. Both the terminal and embedding sessions use the
|
|
63
|
+
same compiler and checkpoint semantics. Existing application event validators require no update.
|
|
64
|
+
|
|
65
|
+
## Migration
|
|
66
|
+
|
|
67
|
+
None. Existing run events and native session histories remain readable. Runs without a checklist or
|
|
68
|
+
active plan context receive no checkpoint. Interrupted-run continuation continues to use its
|
|
69
|
+
existing dynamic continuation section.
|
|
70
|
+
|
|
71
|
+
## Checks
|
|
72
|
+
|
|
73
|
+
Test the compiler's bounds and content, active compaction detection, per-request reinjection,
|
|
74
|
+
checklist updates, plan instruction restoration, and state clearing. Run Harness `npm run typecheck`,
|
|
75
|
+
`npm test`, and `npm run prove`, then the Xingular Agent App checks required for a Harness change.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0034
|
|
3
|
+
title: Conversation-scoped provider fast mode
|
|
4
|
+
status: Proposed
|
|
5
|
+
created: 2026-10-25
|
|
6
|
+
updated: 2026-10-25
|
|
7
|
+
affects: [INV-RUN-1, INV-RUN-3, INV-PAR-1, INV-PAR-2, 02-sessions-and-runs.md, 09-accounts-and-connectors.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 14-surfaces-and-parity.md, parity, App thread runtime settings]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0034: Conversation-scoped provider fast mode
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
People cannot request a provider's native priority/fast service for a conversation without changing
|
|
15
|
+
models or reasoning effort. Adding a UI-only flag would not reach Pi's provider request, and
|
|
16
|
+
forwarding an unchecked option would send unsupported fields to APIs that do not implement it.
|
|
17
|
+
The terminal and App must agree on the setting, restore it with the conversation, and explain when
|
|
18
|
+
the selected provider/API/model cannot honor it.
|
|
19
|
+
|
|
20
|
+
Evidence: Pi 1.2.0 exposes `serviceTier` for OpenAI Responses and Codex Responses requests. The
|
|
21
|
+
Anthropic SDK exposes `speed: 'fast'` for beta Messages; Anthropic documents the eligible Claude
|
|
22
|
+
models and the preview beta requirement at
|
|
23
|
+
https://platform.claude.com/docs/en/build-with-claude/fast-mode. The existing Harness terminal has
|
|
24
|
+
a persistent Pi history branch, while the App stores `ThreadRuntimeSettings` with each conversation
|
|
25
|
+
and passes `SessionRunInput` through its sidecar.
|
|
26
|
+
|
|
27
|
+
## Affected rules
|
|
28
|
+
|
|
29
|
+
- **INV-RUN-1** currently says: “A run pins one account, one variant version and one capability set
|
|
30
|
+
when it starts. None of them changes during the run.” The selected service tier must also be fixed
|
|
31
|
+
for the whole run; it must not alter the model or effort.
|
|
32
|
+
- **INV-RUN-3** currently says: “Every run event is validated against its schema, redacted,
|
|
33
|
+
persisted, and only then relayed to listeners, in order.” A provider rejection that disables fast
|
|
34
|
+
mode needs a validated event so both surfaces can persist the conversation setting as off.
|
|
35
|
+
- **INV-PAR-1** requires every host capability to be a Harness capability surfaced by the terminal.
|
|
36
|
+
- **INV-PAR-2** requires both terminal and host surfaces to pass acceptance for a capability.
|
|
37
|
+
|
|
38
|
+
## Proposal
|
|
39
|
+
|
|
40
|
+
Add an optional `fastMode` boolean to `SessionRunInput`, defaulting to `false`. A run captures this
|
|
41
|
+
value at start and uses the same value for all model requests in that run. The option changes only a
|
|
42
|
+
provider-native request parameter; it never changes the selected model, reasoning effort, prompt, or
|
|
43
|
+
tool set. Fast mode is an attended conversation setting; automated, refinement, reflection,
|
|
44
|
+
subagent, and side-question runs do not inherit it implicitly.
|
|
45
|
+
|
|
46
|
+
Use a conservative, explicit provider capability map based on the resolved model's provider, API,
|
|
47
|
+
model id, and endpoint:
|
|
48
|
+
|
|
49
|
+
- OpenAI Responses and Codex Responses use their native `service_tier: 'fast'` option.
|
|
50
|
+
- Eligible Anthropic Messages models use `speed: 'fast'`; preview models also receive the required
|
|
51
|
+
fast-mode beta header, composed with any existing headers and Pi payload hooks.
|
|
52
|
+
- Only documented model/API combinations on verified official endpoints are supported. Unknown
|
|
53
|
+
APIs, custom endpoints, proxies and other providers are unsupported until verified. The model
|
|
54
|
+
capability response reports both support and a short reason when unavailable.
|
|
55
|
+
|
|
56
|
+
Unsupported combinations never receive a fast request. Attempting to enable the setting leaves it
|
|
57
|
+
off and explains why. Selecting an unsupported model while fast mode is on turns the setting off
|
|
58
|
+
with an explanation. If a provider explicitly rejects the fast/priority option after a supported
|
|
59
|
+
request was sent, do not retry at standard priority: surface the provider error, emit a validated
|
|
60
|
+
`fast_mode.disabled` run event, and disable fast mode for later requests in that conversation.
|
|
61
|
+
|
|
62
|
+
Persist the conversation setting at the owning surface:
|
|
63
|
+
|
|
64
|
+
- The terminal writes an invisible custom entry to Pi's native history branch. New sessions start
|
|
65
|
+
off; resumed sessions and branch navigation restore the last setting on that branch. A failed
|
|
66
|
+
fast request appends the off state to the branch.
|
|
67
|
+
- The App adds `fastMode` to its existing per-thread `ThreadRuntimeSettings` and passes it with each
|
|
68
|
+
run. Missing values in older thread files mean off. The App handles `fast_mode.disabled` by
|
|
69
|
+
saving the setting as off.
|
|
70
|
+
|
|
71
|
+
Expose `/fast`, `/fast on`, and `/fast off` in the terminal and App composer. The App also offers a
|
|
72
|
+
Fast on/off row in the existing thread Account/Model/Effort settings popover. The terminal status
|
|
73
|
+
line shows a shimmering `⚡ fast` immediately after effort when enabled. Both surfaces explain that
|
|
74
|
+
fast mode may cost more and does not guarantee lower latency. New conversations default off; resume
|
|
75
|
+
restores the existing conversation setting.
|
|
76
|
+
|
|
77
|
+
The account model capability response gains `fastModeSupported` and an optional explanatory reason
|
|
78
|
+
so the App can disable the setting before a request. No new Harness storage directory or run-record
|
|
79
|
+
file is added; the terminal setting uses native Pi history, the App setting uses its existing thread
|
|
80
|
+
record, and the rejection event uses the existing run event store.
|
|
81
|
+
|
|
82
|
+
## Alternatives
|
|
83
|
+
|
|
84
|
+
- **Do nothing.** This avoids a new provider option but leaves no supported way to request native
|
|
85
|
+
priority.
|
|
86
|
+
- **Change model or effort to imply fast mode.** Rejected: those are independent user choices and
|
|
87
|
+
would not select the provider's priority service.
|
|
88
|
+
- **Forward a generic priority field to every provider or proxy.** Rejected: support and semantics
|
|
89
|
+
are API-specific, and an unknown endpoint must not receive an unverified option.
|
|
90
|
+
- **Retry at standard priority after rejection.** Rejected: this hides the provider's error and
|
|
91
|
+
changes the requested service without consent.
|
|
92
|
+
- **Keep the setting only in the App.** Rejected by INV-PAR-1/2: the terminal must offer the same
|
|
93
|
+
conversation capability.
|
|
94
|
+
|
|
95
|
+
## Consequences
|
|
96
|
+
|
|
97
|
+
`SessionRunInput`, the model-capability response, and the run-event schema change. The terminal,
|
|
98
|
+
App sidecar, App thread settings UI, and both surfaces' command handling change. No prompt compiler,
|
|
99
|
+
model-selection, effort-selection, or tool-gate behavior changes. Because fast mode can cost more,
|
|
100
|
+
the UI must disclose that; no latency improvement is promised. A provider error remains visible and
|
|
101
|
+
is not hidden by a normal-priority retry.
|
|
102
|
+
|
|
103
|
+
## Migration
|
|
104
|
+
|
|
105
|
+
No native-history or App thread migration is required. A missing terminal custom entry and a missing
|
|
106
|
+
App `fastMode` field both mean off. Existing provider and run-event readers remain compatible with
|
|
107
|
+
old records; the App's run-event schema must be updated before it consumes the new event. Resuming a
|
|
108
|
+
conversation restores its setting; starting a separate conversation defaults off.
|
|
109
|
+
|
|
110
|
+
## Checks
|
|
111
|
+
|
|
112
|
+
- Unit tests for provider/API/model/endpoint support and native request-option composition, including
|
|
113
|
+
preserving Anthropic reasoning-summary hooks and headers.
|
|
114
|
+
- Harness tests for preflight rejection, per-run stability, provider rejection without standard-tier
|
|
115
|
+
retry, validated disable events, and terminal setting persistence across resume/fork/navigation.
|
|
116
|
+
- App tests for legacy thread defaults, persistence, capability gating, `/fast`, the settings row,
|
|
117
|
+
and handling `fast_mode.disabled`.
|
|
118
|
+
- Run Harness `npm run typecheck`, `npm test`, and `npm run prove`; App `npm run typecheck`,
|
|
119
|
+
`npm test`, `npm run check:layers`, and `cd src-tauri && cargo test`; exercise the terminal status
|
|
120
|
+
line in a local PTY. Do not make live-provider requests as part of these checks.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PROP-0035
|
|
3
|
+
title: Retain terminal subagent status until the next run
|
|
4
|
+
status: Implemented
|
|
5
|
+
created: 2026-10-25
|
|
6
|
+
updated: 2026-11-19
|
|
7
|
+
affects: [11-terminal.md, terminal-tui.md]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PROP-0035: Retain terminal subagent status until the next run
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
The terminal shows subagent descendants under the working status line and in `/subagents:subagents`, but removes them when the parent run settles. The terminal specification says finished rows remain only until the parent settles. This makes the final child statuses unavailable during the idle interval before the next run, even though the terminal itself remains open.
|
|
15
|
+
|
|
16
|
+
Evidence: `src/terminal/controller.ts` clears the volatile `SubagentMonitor` in `finish()` and `subagentSnapshot()` returns an empty list without an active run. `src/terminal/opentui/app.ts` polls only during an active run and clears its local rows on `agent_settled`. The current retention boundary is documented in `docs/architecture/11-terminal.md` and `docs/terminal-tui.md`.
|
|
17
|
+
|
|
18
|
+
## Affected rules
|
|
19
|
+
|
|
20
|
+
- `docs/architecture/11-terminal.md` currently says: “Finished rows remain until the parent run settles. The projection is volatile and scoped to that parent run; it is not a persisted event or public server method.”
|
|
21
|
+
- `docs/terminal-tui.md` currently says the projection “keeps finished child rows until that parent settles.”
|
|
22
|
+
|
|
23
|
+
## Proposal
|
|
24
|
+
|
|
25
|
+
Retain the latest parent run's subagent projection in the terminal after that parent settles. Keep showing the compact rows and the `/subagents:subagents` roster, with each child's final known status, until the next parent run starts. At the next run's start, clear the old projection before displaying that run's children. A final settlement read should capture child states that the periodic monitor poll has not yet reflected; overlapping or late reads must not replace data from a newer run.
|
|
26
|
+
|
|
27
|
+
The projection remains volatile, read-only, and limited to the existing redacted fields. It is scoped to the latest parent run for the current terminal session, and is cleared when the session is replaced or the terminal is disposed. It remains neither a persisted event nor a public server method. No run-event schema, storage, or host API changes.
|
|
28
|
+
|
|
29
|
+
## Alternatives
|
|
30
|
+
|
|
31
|
+
- **Do nothing.** The last statuses remain unavailable once the parent settles.
|
|
32
|
+
- **Retain only the frontend's last poll.** This can leave a child marked active after it has completed because monitor updates may fall between one-second polls.
|
|
33
|
+
- **Persist a separate status snapshot.** Rejected: the requested lifetime is only until the next run, and retaining the existing volatile projection is sufficient.
|
|
34
|
+
|
|
35
|
+
## Consequences
|
|
36
|
+
|
|
37
|
+
The terminal monitor and presentation retain one run's already-redacted subagent rows while idle. The next run replaces them. Other Harness capabilities and the App surface are unchanged. There is no new persistent data, migration, public method, or event contract.
|
|
38
|
+
|
|
39
|
+
## Migration
|
|
40
|
+
|
|
41
|
+
None. Existing terminals clear their in-memory monitor on restart; the new behavior applies to runs observed by the updated terminal process.
|
|
42
|
+
|
|
43
|
+
## Checks
|
|
44
|
+
|
|
45
|
+
- Harness `npm run typecheck`, `npm test` (150 files; 1,141 passed, 3 skipped), focused terminal tests (61 passed), `npm run build`, and `npm run prove` passed.
|
|
46
|
+
- App `npm run typecheck`, `npm test` (567 App and 67 sidecar tests passed), `npm run check:layers`, and `cd src-tauri && cargo test` (167 passed, 1 ignored) passed.
|
|
47
|
+
- The initial full PTY run failed waiting for `1 of 1` in its plan-question flow, and `--questions-only` failed waiting for `UI layout`. After the question-dock/layout fixes, `python3 scripts/verify-terminal.py --cli dist/cli.js --sizes 40x20,80x24,100x30` passed 19 interaction groups at each size with the tty restored (2026-11-19). Focused unit and real-socket tests cover subagent retention. No real-model request was made.
|