@pellux/goodvibes-tui 2.0.13 → 2.0.15

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.
Files changed (464) hide show
  1. package/.goodvibes/GOODVIBES.md +1 -1
  2. package/.goodvibes/agents/reviewer.md +8 -8
  3. package/.goodvibes/skills/add-provider/SKILL.md +22 -22
  4. package/CHANGELOG.md +61 -0
  5. package/README.md +40 -29
  6. package/docs/README.md +1 -1
  7. package/docs/foundation-artifacts/README.md +5 -5
  8. package/docs/foundation-artifacts/operator-contract.json +123 -123
  9. package/package.json +12 -10
  10. package/scripts/postinstall.js +3 -3
  11. package/src/audio/activation-sound.ts +7 -7
  12. package/src/audio/capture.ts +7 -7
  13. package/src/audio/onnxruntime-assets.d.ts +1 -1
  14. package/src/audio/player.ts +4 -4
  15. package/src/audio/spoken-turn-wiring.ts +4 -4
  16. package/src/audio/voice-capture-wiring.ts +5 -5
  17. package/src/audio/voice-input-session.ts +3 -3
  18. package/src/audio/wake-inference.ts +13 -8
  19. package/src/audio/wake-runtime.ts +10 -10
  20. package/src/cli/completions/generate.ts +2 -2
  21. package/src/cli/doctor.ts +13 -13
  22. package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
  23. package/src/cli/entrypoint.ts +3 -3
  24. package/src/cli/help.ts +6 -6
  25. package/src/cli/hooks-command.ts +4 -4
  26. package/src/cli/hooks-report.ts +4 -4
  27. package/src/cli/launch-auto-update.ts +17 -17
  28. package/src/cli/management-commands.ts +8 -8
  29. package/src/cli/management-utils.ts +3 -3
  30. package/src/cli/management.ts +1 -1
  31. package/src/cli/plugin-bundles-command.ts +10 -10
  32. package/src/cli/plugin-command.ts +9 -9
  33. package/src/cli/service-posture.ts +1 -1
  34. package/src/cli/status.ts +10 -10
  35. package/src/cli/surface-command.ts +4 -4
  36. package/src/cli/tui-startup.ts +23 -23
  37. package/src/config/run-daemon-config-migration.ts +3 -3
  38. package/src/config/secret-config.ts +10 -10
  39. package/src/config/surface.ts +1 -1
  40. package/src/config/tui-extension-settings.ts +8 -8
  41. package/src/core/active-model-identity.ts +7 -7
  42. package/src/core/approval-alert.ts +5 -5
  43. package/src/core/bookmark-navigation.ts +3 -3
  44. package/src/core/budget-breach-notifier.ts +6 -6
  45. package/src/core/compaction-receipt.ts +8 -8
  46. package/src/core/composer-state.ts +2 -2
  47. package/src/core/context-usage.ts +1 -1
  48. package/src/core/conversation-compaction-render.ts +3 -3
  49. package/src/core/conversation-event-navigation.ts +2 -2
  50. package/src/core/conversation-fold.ts +9 -9
  51. package/src/core/conversation-line-cache.ts +14 -14
  52. package/src/core/conversation-render-context.ts +6 -6
  53. package/src/core/conversation-rendering.ts +27 -30
  54. package/src/core/conversation-search-expansion.ts +6 -6
  55. package/src/core/conversation-splash-state.ts +3 -3
  56. package/src/core/conversation-turn-structure.ts +13 -13
  57. package/src/core/conversation-types.ts +3 -3
  58. package/src/core/conversation-user-receipts.ts +5 -5
  59. package/src/core/conversation.ts +17 -17
  60. package/src/core/format-user-error.ts +5 -5
  61. package/src/core/long-task-notifier.ts +9 -9
  62. package/src/core/memory-diagnostics-gateway.ts +8 -8
  63. package/src/core/memory-provenance.ts +5 -5
  64. package/src/core/model-routing-chip.ts +3 -3
  65. package/src/core/pairing-tailscale-gateway.ts +3 -3
  66. package/src/core/permission-mode.ts +5 -5
  67. package/src/core/power-chip-source.ts +3 -3
  68. package/src/core/power-status.ts +8 -8
  69. package/src/core/rewind-receipt.ts +6 -6
  70. package/src/core/session-resume-core.ts +8 -8
  71. package/src/core/stream-event-wiring.ts +36 -36
  72. package/src/core/stream-stall-watchdog.ts +4 -4
  73. package/src/core/system-message-noise.ts +7 -7
  74. package/src/core/system-message-router.ts +10 -10
  75. package/src/core/terminal-notifier.ts +5 -5
  76. package/src/core/turn-budget-outcome.ts +5 -5
  77. package/src/core/turn-cancellation.ts +3 -3
  78. package/src/core/turn-event-wiring.ts +16 -16
  79. package/src/core/voice-capture-status.ts +2 -2
  80. package/src/core/voice-provision-gateway.ts +12 -12
  81. package/src/core/voice-provision-status.ts +19 -19
  82. package/src/core/voice-stt-gateway.ts +6 -6
  83. package/src/core/wake-provision-runner.ts +7 -7
  84. package/src/core/wake-provision-status.ts +17 -17
  85. package/src/core/workstream-notification.ts +8 -8
  86. package/src/export/gist-uploader.ts +7 -7
  87. package/src/input/autocomplete.ts +3 -3
  88. package/src/input/bookmark-modal.ts +1 -1
  89. package/src/input/command-args-hint.ts +2 -2
  90. package/src/input/command-reference.ts +9 -9
  91. package/src/input/command-registry.ts +32 -32
  92. package/src/input/commands/acp-runtime.ts +6 -6
  93. package/src/input/commands/calendar-runtime.ts +9 -9
  94. package/src/input/commands/channel-pairing.ts +11 -11
  95. package/src/input/commands/channel-runtime.ts +1 -1
  96. package/src/input/commands/checkin-runtime.ts +4 -4
  97. package/src/input/commands/checkpoint-runtime.ts +4 -4
  98. package/src/input/commands/ci-runtime.ts +4 -4
  99. package/src/input/commands/cluster-runtime.ts +3 -3
  100. package/src/input/commands/codebase-runtime.ts +16 -16
  101. package/src/input/commands/config.ts +6 -6
  102. package/src/input/commands/connection-status.ts +12 -12
  103. package/src/input/commands/context-window.ts +2 -2
  104. package/src/input/commands/cost-attribution-format.ts +4 -4
  105. package/src/input/commands/cost-runtime.ts +2 -2
  106. package/src/input/commands/devices-runtime.ts +7 -7
  107. package/src/input/commands/diff-runtime.ts +2 -2
  108. package/src/input/commands/editor-runtime.ts +1 -1
  109. package/src/input/commands/eval.ts +4 -4
  110. package/src/input/commands/experience-runtime.ts +1 -1
  111. package/src/input/commands/git-runtime.ts +3 -3
  112. package/src/input/commands/graph-runtime.ts +3 -3
  113. package/src/input/commands/guidance-runtime.ts +1 -1
  114. package/src/input/commands/health-metrics-format.ts +2 -2
  115. package/src/input/commands/health-runtime.ts +8 -8
  116. package/src/input/commands/hosted-runtime.ts +13 -13
  117. package/src/input/commands/image-runtime.ts +6 -6
  118. package/src/input/commands/intelligence-runtime.ts +2 -2
  119. package/src/input/commands/local-auth-runtime.ts +3 -3
  120. package/src/input/commands/local-provider-runtime.ts +3 -3
  121. package/src/input/commands/local-runtime.ts +7 -7
  122. package/src/input/commands/mail-runtime.ts +9 -9
  123. package/src/input/commands/mcp-runtime.ts +1 -1
  124. package/src/input/commands/memory.ts +13 -13
  125. package/src/input/commands/notify-runtime.ts +1 -1
  126. package/src/input/commands/operator-panel-runtime.ts +8 -8
  127. package/src/input/commands/operator-rpc.ts +3 -3
  128. package/src/input/commands/operator-runtime.ts +3 -3
  129. package/src/input/commands/palette-runtime.ts +1 -1
  130. package/src/input/commands/payment-card-intake.ts +17 -17
  131. package/src/input/commands/permissions-provenance.ts +7 -7
  132. package/src/input/commands/permissions-runtime.ts +1 -1
  133. package/src/input/commands/planning-runtime.ts +9 -9
  134. package/src/input/commands/platform-services-runtime.ts +2 -2
  135. package/src/input/commands/policy-dispatch.ts +6 -6
  136. package/src/input/commands/power-runtime.ts +6 -6
  137. package/src/input/commands/principals-runtime.ts +3 -3
  138. package/src/input/commands/product-runtime.ts +3 -3
  139. package/src/input/commands/profile-render.ts +13 -13
  140. package/src/input/commands/profile-runtime.ts +13 -13
  141. package/src/input/commands/profile-types.ts +13 -13
  142. package/src/input/commands/provider-accounts-runtime.ts +5 -5
  143. package/src/input/commands/provider.ts +10 -10
  144. package/src/input/commands/qrcode-runtime.ts +3 -3
  145. package/src/input/commands/queue-runtime.ts +6 -6
  146. package/src/input/commands/recall-files-config.ts +4 -4
  147. package/src/input/commands/recall-files-git.ts +3 -3
  148. package/src/input/commands/recall-files.ts +12 -12
  149. package/src/input/commands/recall-query.ts +3 -3
  150. package/src/input/commands/recall-review.ts +3 -3
  151. package/src/input/commands/recall-shared.ts +1 -1
  152. package/src/input/commands/relay-runtime.ts +5 -5
  153. package/src/input/commands/remote-runtime.ts +3 -3
  154. package/src/input/commands/review-runtime.ts +8 -8
  155. package/src/input/commands/rewind-runtime.ts +21 -21
  156. package/src/input/commands/runtime-services.ts +1 -2
  157. package/src/input/commands/schedule-nl.ts +2 -2
  158. package/src/input/commands/schedule-runtime.ts +2 -2
  159. package/src/input/commands/secret-runtime.ts +3 -3
  160. package/src/input/commands/session-content.ts +7 -7
  161. package/src/input/commands/session-picker-filter.ts +3 -3
  162. package/src/input/commands/session-workflow.ts +10 -10
  163. package/src/input/commands/session.ts +15 -15
  164. package/src/input/commands/settings-sync-runtime.ts +2 -2
  165. package/src/input/commands/share-runtime.ts +4 -4
  166. package/src/input/commands/shell-core.ts +11 -11
  167. package/src/input/commands/tasks-runtime.ts +4 -4
  168. package/src/input/commands/test-runtime.ts +6 -6
  169. package/src/input/commands/tts-runtime.ts +4 -4
  170. package/src/input/commands/update-runtime.ts +27 -27
  171. package/src/input/commands/websearch-runtime.ts +2 -2
  172. package/src/input/commands/work-plan-runtime.ts +2 -2
  173. package/src/input/commands/workstream-attempt-dependents.ts +4 -4
  174. package/src/input/commands/workstream-attempts.ts +16 -16
  175. package/src/input/commands/workstream-runtime.ts +36 -36
  176. package/src/input/commands/worktree-runtime.ts +6 -6
  177. package/src/input/composer-capture.ts +5 -5
  178. package/src/input/concealed-input.ts +2 -2
  179. package/src/input/config-modal-types.ts +16 -16
  180. package/src/input/config-modal.ts +30 -30
  181. package/src/input/daemon-owned-settings-descriptions.ts +4 -4
  182. package/src/input/delete-key-policy.ts +1 -1
  183. package/src/input/exec-env-scrub-config.ts +7 -7
  184. package/src/input/feature-unit-layout.ts +5 -5
  185. package/src/input/feed-context-factory.ts +38 -38
  186. package/src/input/file-picker.ts +1 -1
  187. package/src/input/handler-command-route.ts +2 -2
  188. package/src/input/handler-content-actions.ts +8 -8
  189. package/src/input/handler-feed-routes.ts +13 -13
  190. package/src/input/handler-feed.ts +31 -31
  191. package/src/input/handler-interactions.ts +2 -2
  192. package/src/input/handler-modal-routes.ts +13 -13
  193. package/src/input/handler-modal-stack.ts +1 -1
  194. package/src/input/handler-modal-token-routes.ts +1 -1
  195. package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
  196. package/src/input/handler-picker-routes.ts +7 -7
  197. package/src/input/handler-prompt-buffer.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +12 -12
  199. package/src/input/handler-types.ts +3 -3
  200. package/src/input/handler-ui-state.ts +1 -1
  201. package/src/input/handler.ts +9 -9
  202. package/src/input/input-history.ts +1 -1
  203. package/src/input/keybindings.ts +13 -13
  204. package/src/input/kill-ring.ts +7 -11
  205. package/src/input/model-picker-filter.ts +3 -3
  206. package/src/input/model-picker-items.ts +5 -5
  207. package/src/input/model-picker-types.ts +2 -2
  208. package/src/input/model-picker.ts +18 -18
  209. package/src/input/onboarding/onboarding-feature-units.ts +9 -13
  210. package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
  211. package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
  212. package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
  213. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
  214. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
  215. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
  216. package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
  217. package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
  218. package/src/input/panel-integration-actions.ts +3 -3
  219. package/src/input/panel-mouse-geometry.ts +1 -1
  220. package/src/input/panel-paste-flood-guard.ts +9 -9
  221. package/src/input/payments-config.ts +15 -15
  222. package/src/input/profile-picker-modal.ts +1 -1
  223. package/src/input/provider-key-intake.ts +9 -9
  224. package/src/input/relay-settings-descriptions.ts +3 -3
  225. package/src/input/sandbox-exec-config.ts +9 -9
  226. package/src/input/search.ts +18 -18
  227. package/src/input/selection-modal-queue.ts +10 -10
  228. package/src/input/selection-modal.ts +2 -2
  229. package/src/input/session-picker-modal.ts +7 -7
  230. package/src/input/settings-modal-activation.ts +1 -1
  231. package/src/input/settings-modal-adjustment.ts +2 -2
  232. package/src/input/settings-modal-commit.ts +6 -6
  233. package/src/input/settings-modal-connections.ts +2 -2
  234. package/src/input/settings-modal-data.ts +29 -29
  235. package/src/input/settings-modal-mutations.ts +7 -7
  236. package/src/input/settings-modal-reset.ts +3 -3
  237. package/src/input/settings-modal-search.ts +6 -6
  238. package/src/input/settings-modal-secrets.ts +3 -3
  239. package/src/input/settings-modal-types.ts +16 -16
  240. package/src/input/settings-modal.ts +4 -4
  241. package/src/input/voice-local-settings.ts +3 -3
  242. package/src/input/worktree-setup-config.ts +8 -8
  243. package/src/main.ts +15 -15
  244. package/src/panels/agent-inspector-shared.ts +5 -5
  245. package/src/panels/base-panel.ts +3 -3
  246. package/src/panels/builtin/agent.ts +3 -3
  247. package/src/panels/builtin/development.ts +4 -4
  248. package/src/panels/builtin/knowledge.ts +1 -1
  249. package/src/panels/builtin/operations.ts +12 -12
  250. package/src/panels/builtin/session.ts +8 -8
  251. package/src/panels/builtin/shared.ts +6 -6
  252. package/src/panels/builtin-modals.ts +8 -8
  253. package/src/panels/confirm-state.ts +5 -5
  254. package/src/panels/cost-tracker-panel.ts +22 -22
  255. package/src/panels/diff-panel.ts +20 -20
  256. package/src/panels/diff-review-model.ts +5 -5
  257. package/src/panels/diff-review-panel.ts +5 -5
  258. package/src/panels/eval-registry.ts +2 -2
  259. package/src/panels/expandable-list-panel.ts +5 -5
  260. package/src/panels/fleet-acts.ts +20 -20
  261. package/src/panels/fleet-deep-link.ts +5 -5
  262. package/src/panels/fleet-gateway.ts +12 -12
  263. package/src/panels/fleet-observed-render.ts +11 -11
  264. package/src/panels/fleet-panel-format.ts +14 -14
  265. package/src/panels/fleet-panel-worktree-detail.ts +8 -8
  266. package/src/panels/fleet-panel.ts +34 -34
  267. package/src/panels/fleet-read-model.ts +49 -49
  268. package/src/panels/fleet-spawn.ts +15 -15
  269. package/src/panels/fleet-steer.ts +7 -7
  270. package/src/panels/fleet-stop.ts +5 -5
  271. package/src/panels/fleet-tabs.ts +14 -14
  272. package/src/panels/fleet-transcript.ts +26 -26
  273. package/src/panels/git-panel.ts +8 -8
  274. package/src/panels/hosted-session-feed.ts +13 -13
  275. package/src/panels/hosted-session-panel.ts +7 -7
  276. package/src/panels/index.ts +1 -1
  277. package/src/panels/local-auth-panel.ts +15 -15
  278. package/src/panels/memory-consolidation-gateway.ts +8 -8
  279. package/src/panels/modals/devices-modal.ts +8 -8
  280. package/src/panels/modals/hooks-modal.ts +1 -1
  281. package/src/panels/modals/keybindings-modal.ts +5 -5
  282. package/src/panels/modals/knowledge-modal.ts +2 -2
  283. package/src/panels/modals/local-auth-modal.ts +4 -4
  284. package/src/panels/modals/marketplace-modal.ts +3 -3
  285. package/src/panels/modals/memory-modal.ts +19 -19
  286. package/src/panels/modals/modal-surface-helpers.ts +1 -1
  287. package/src/panels/modals/modal-theme.ts +3 -3
  288. package/src/panels/modals/pairing-modal.ts +19 -19
  289. package/src/panels/modals/planning-modal.ts +4 -4
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -1,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // workstream-runtime.ts — /workstream
2
+ // workstream-runtime.ts, /workstream
3
3
  //
4
4
  // UX over the OrchestrationEngine (@pellux/goodvibes-sdk/platform/orchestration,
5
5
  //) via its command-facing facade wired onto RuntimeServices as
@@ -8,11 +8,11 @@
8
8
  // already is (bootstrap-command-context.ts).
9
9
  //
10
10
  // Render precedent: TRANSCRIPT + subcommand approve (like /plan approve,
11
- // planning-runtime.ts), NOT a panel — a multi-phase proposal is too rich for
11
+ // planning-runtime.ts), NOT a panel, a multi-phase proposal is too rich for
12
12
  // a one-line confirm overlay, and Pillar-3 doctrine keeps work visible in the
13
13
  // transcript. create -> approve -> launch is a real three-step flow (edit and
14
14
  // cancel apply to the pending proposal too). The transcript IS the plan-review
15
- // gate: between create and approve the proposal is reshapable in place —
15
+ // gate: between create and approve the proposal is reshapable in place,
16
16
  // edit-item rewrites one item's brief, remove-item drops an item (and unlinks
17
17
  // it from siblings' dependencies), move-item reorders authoring order, and
18
18
  // each re-renders the whole proposal and clears any prior approval, so nothing
@@ -20,7 +20,7 @@
20
20
  // immediately materializes a real, ticking-eligible Workstream with no
21
21
  // pre-creation "draft" concept, so approval happens on a TUI-held draft
22
22
  // (workstream-services.ts's WorkstreamDraft) before anything is created in
23
- // the engine at all — see that module's header doc for the full reality-wins
23
+ // the engine at all, see that module's header doc for the full reality-wins
24
24
  // divergence from the design brief.
25
25
  // ---------------------------------------------------------------------------
26
26
 
@@ -43,7 +43,7 @@ function shortId(id: string): string {
43
43
  /**
44
44
  * The engine's ONLY two terminal work-item states (mirrors the SDK's own
45
45
  * internal TERMINAL_ITEM_STATES in platform/runtime/fleet/adapters/
46
- * orchestration.ts and engine.ts's kill() guard — neither is exported, so
46
+ * orchestration.ts and engine.ts's kill() guard, neither is exported, so
47
47
  * this is kept in lockstep by hand). Deriving "active" as NOT-terminal
48
48
  * instead of enumerating the non-terminal states means a state this module
49
49
  * doesn't know about yet (as 'blocked-budget' once was here) is still
@@ -56,7 +56,7 @@ function isActiveItemState(state: WorkItemState): boolean {
56
56
  return !TERMINAL_ITEM_STATES.has(state);
57
57
  }
58
58
 
59
- /** Mirrors the engine's templateForPhase (phase-runner.ts): only 'review'/'gate' phases run the general template — everything else, INCLUDING 'custom', runs the engineer template regardless of phase.role's text. */
59
+ /** Mirrors the engine's templateForPhase (phase-runner.ts): only 'review'/'gate' phases run the general template, everything else, INCLUDING 'custom', runs the engineer template regardless of phase.role's text. */
60
60
  function templateForPhaseKind(kind: PhaseKind): string {
61
61
  return kind === 'review' || kind === 'gate' ? 'general' : 'engineer';
62
62
  }
@@ -64,13 +64,13 @@ function templateForPhaseKind(kind: PhaseKind): string {
64
64
  /**
65
65
  * Pre-fan-out quota consultation for /workstream launch. Assesses whether the
66
66
  * draft's work-item count (the fan-out this launch is about to create, worst
67
- * case — items can run concurrently within a phase) is likely to exhaust the
67
+ * case, items can run concurrently within a phase) is likely to exhaust the
68
68
  * active provider's quota window, grounded in observed rate-limit signals
69
69
  * (quota.fanout.get). Returns a printable warning + evidence when the daemon
70
70
  * reports 'likely-exhausts'; returns null for 'unlikely'/'unknown' (no
71
71
  * evidence of risk is not itself evidence of safety, so those verdicts never
72
72
  * block) and whenever the check itself can't run (daemon unavailable/
73
- * unreachable, or no active provider) — an infra gap in the quota check is
73
+ * unreachable, or no active provider), an infra gap in the quota check is
74
74
  * not grounds to block launching work the operator already approved.
75
75
  */
76
76
  async function checkFanoutQuotaWarning(ctx: CommandContext, draft: WorkstreamDraft): Promise<string | null> {
@@ -93,12 +93,12 @@ async function checkFanoutQuotaWarning(ctx: CommandContext, draft: WorkstreamDra
93
93
  ev.observedLimit !== undefined ? `observedLimit=${ev.observedLimit}` : null,
94
94
  ].filter((part): part is string => part !== null);
95
95
  return [
96
- `[workstream launch] WARNING — ${provider} likely exhausts its quota window for ${agentCount} agent(s) fanning out.`,
96
+ `[workstream launch] WARNING: ${provider} likely exhausts its quota window for ${agentCount} agent(s) fanning out.`,
97
97
  ` reason: ${assessment.reason}`,
98
98
  ` evidence: ${evidenceParts.join(' ')}`,
99
99
  '',
100
100
  `Launch anyway: /workstream launch ${draft.id} --force`,
101
- 'Cancel: do nothing — the approved proposal stays ready to launch later.',
101
+ 'Cancel: do nothing; the approved proposal stays ready to launch later.',
102
102
  ].join('\n');
103
103
  }
104
104
 
@@ -106,12 +106,12 @@ async function checkFanoutQuotaWarning(ctx: CommandContext, draft: WorkstreamDra
106
106
  * Launch an already-approved draft through its gates (best-of-N attempt
107
107
  * validation, then the fan-out quota warning unless `--force`), and print the
108
108
  * outcome. Shared by `launch` and by `approve` (which launches in the same act
109
- * — the one confirmed step that replaces the old approve-then-retype ceremony).
109
+ *, the one confirmed step that replaces the old approve-then-retype ceremony).
110
110
  */
111
111
  async function launchApprovedDraft(ctx: CommandContext, service: WorkstreamCommandService, id: string, draft: WorkstreamDraft, force: boolean): Promise<void> {
112
112
  const attemptsCheck = validateAttempts(draft.spec);
113
113
  if (attemptsCheck.violations.length > 0) {
114
- ctx.print(`Cannot launch ${id} — best-of-N plan constraints are violated:\n${attemptsCheck.violations.map((v) => ` - ${v}`).join('\n')}\nFix the plan (or drop the attempts) and re-approve.`);
114
+ ctx.print(`Cannot launch ${id}: best-of-N plan constraints are violated:\n${attemptsCheck.violations.map((v) => ` - ${v}`).join('\n')}\nFix the plan (or drop the attempts) and re-approve.`);
115
115
  return;
116
116
  }
117
117
  if (!force) {
@@ -126,15 +126,15 @@ async function launchApprovedDraft(ctx: CommandContext, service: WorkstreamComma
126
126
  ctx.print(`Could not launch ${id}.`);
127
127
  return;
128
128
  }
129
- ctx.print(`Launched workstream ${result.workstreamId} — track it with /workstream status ${result.workstreamId} or the Fleet panel.`);
129
+ ctx.print(`Launched workstream ${result.workstreamId}: track it with /workstream status ${result.workstreamId} or the Fleet panel.`);
130
130
  }
131
131
 
132
132
  /**
133
133
  * phase.role for a 'custom' phase is the free-text description passed to
134
- * `/workstream insert-phase` — it is purely COSMETIC. Neither
134
+ * `/workstream insert-phase`, it is purely COSMETIC. Neither
135
135
  * templateForPhase nor buildPhaseTask (phase-runner.ts, engine-side) ever
136
136
  * reads it: a custom phase always runs the engineer template against the
137
- * work item's own task text. Rendering it as `<kind> — <role>` like a real
137
+ * work item's own task text. Rendering it as `<kind>, <role>` like a real
138
138
  * role would falsely imply the description drives what the phase does, so
139
139
  * custom phases get an explicit "this is a description, not a role" label
140
140
  * instead.
@@ -143,7 +143,7 @@ function formatPhaseLabel(phase: { readonly kind: PhaseKind; readonly role: Phas
143
143
  if (phase.kind === 'custom') {
144
144
  return `custom: "${phase.role}" (runs the ${templateForPhaseKind(phase.kind)} template)`;
145
145
  }
146
- return `${phase.kind} — ${phase.role}`;
146
+ return `${phase.kind}: ${phase.role}`;
147
147
  }
148
148
 
149
149
  /**
@@ -151,7 +151,7 @@ function formatPhaseLabel(phase: { readonly kind: PhaseKind; readonly role: Phas
151
151
  * `args` (create/edit both accept it ahead of, or interleaved with, the task
152
152
  * text). Returns the flag stripped out so the remaining tokens are the task
153
153
  * text exactly as before this flag existed. An unrecognized value is a hard
154
- * error (never silently ignored or defaulted) — a typo'd isolation mode
154
+ * error (never silently ignored or defaulted), a typo'd isolation mode
155
155
  * must never quietly launch in the wrong one.
156
156
  */
157
157
  function extractIsolationFlag(args: readonly string[]): { isolation?: WorkstreamIsolation; rest: string[]; error?: string } {
@@ -174,7 +174,7 @@ function extractIsolationFlag(args: readonly string[]): { isolation?: Workstream
174
174
 
175
175
  /**
176
176
  * Per-item merge-state text for `/workstream status` (worktree isolation
177
- * only — see formatItemMergeState's caller). Distinct from `item.state` (the
177
+ * only, see formatItemMergeState's caller). Distinct from `item.state` (the
178
178
  * pipeline verdict): an item can be terminally 'passed' while its branch is
179
179
  * still 'merge pending' in the integration lane, or stuck at
180
180
  * 'merge-conflict' with its worktree deliberately kept for inspection.
@@ -213,7 +213,7 @@ function formatItemDependencyNote(item: WorkItem, ws: Workstream): string {
213
213
  /**
214
214
  * Compact item + dependency graph for the draft-approval view (BIG-3 item 4):
215
215
  * items in ordinal order (the spec preserves the proposal's order), each with
216
- * an honest text 'after: X, Y' clause when it depends on siblings — no fake DAG
216
+ * an honest text 'after: X, Y' clause when it depends on siblings, no fake DAG
217
217
  * art. Dependency ids are resolved back to titles from the spec itself.
218
218
  */
219
219
  function formatDraftItems(spec: CreateWorkstreamInput): string[] {
@@ -225,7 +225,7 @@ function formatDraftItems(spec: CreateWorkstreamInput): string[] {
225
225
  const attempts = (it.attempts ?? 1) > 1 ? ` [best-of-${it.attempts}${it.autoAcceptWinner ? ', auto-accept winner' : ''}]` : '';
226
226
  lines.push(` ${i + 1}. ${it.title}${after}${attempts}`);
227
227
  // Show the brief (the instructions the item's agent runs) only when it says
228
- // something the title doesn't — an edited brief (via /workstream edit-item)
228
+ // something the title doesn't, an edited brief (via /workstream edit-item)
229
229
  // must be visible on the review surface, but a decomposition whose title and
230
230
  // brief coincide would just repeat itself.
231
231
  if (it.task.trim() && it.task.trim() !== it.title.trim()) {
@@ -265,13 +265,13 @@ function formatProvenance(p: WorkstreamDraftProvenance): string {
265
265
  return 'Decomposition: heuristic (configured)';
266
266
  }
267
267
 
268
- /** The engine's own PlanProposal is deliberately not rendered as the launchable spec — see workstream-services.ts's buildSpec doc. This renders the REAL launchable spec (so the proposal and the launch are always the same plan) plus an honest provenance line describing how the goal was decomposed. */
268
+ /** The engine's own PlanProposal is deliberately not rendered as the launchable spec, see workstream-services.ts's buildSpec doc. This renders the REAL launchable spec (so the proposal and the launch are always the same plan) plus an honest provenance line describing how the goal was decomposed. */
269
269
  function renderDraftProposal(draft: WorkstreamDraft): string {
270
270
  const lines: string[] = [];
271
- lines.push(`Workstream proposal ${draft.id} — "${draft.task}"`);
271
+ lines.push(`Workstream proposal ${draft.id}: "${draft.task}"`);
272
272
  lines.push(`Isolation: ${draft.spec.isolation ?? 'shared (default)'}`);
273
273
  lines.push(
274
- `Planner: strategy=${draft.gate.strategy} (${draft.gate.reasonCode}) — ${AdaptivePlanner.explainReasonCode(draft.gate.reasonCode)}`,
274
+ `Planner: strategy=${draft.gate.strategy} (${draft.gate.reasonCode}); ${AdaptivePlanner.explainReasonCode(draft.gate.reasonCode)}`,
275
275
  );
276
276
  lines.push(formatProvenance(draft.provenance));
277
277
  // Honest mapping boundary (BIG-3 item 4): a multi-item proposal launches as
@@ -281,8 +281,8 @@ function renderDraftProposal(draft: WorkstreamDraft): string {
281
281
  const multiItem = draft.spec.items.length > 1;
282
282
  lines.push(
283
283
  multiItem
284
- ? `Mapping: multi-item plan — ${draft.spec.items.length} items run the engineer→review pipeline, dependency-scheduled.`
285
- : 'Mapping: single-item compat chain (engineer→review) — no multi-item structure to schedule.',
284
+ ? `Mapping: multi-item plan; ${draft.spec.items.length} items run the engineer→review pipeline, dependency-scheduled.`
285
+ : 'Mapping: single-item compat chain (engineer→review); no multi-item structure to schedule.',
286
286
  );
287
287
  lines.push('Phases:');
288
288
  draft.spec.phases.forEach((phase, i) => {
@@ -299,7 +299,7 @@ function renderDraftProposal(draft: WorkstreamDraft): string {
299
299
  lines.push('Best-of-N: plan is INVALID and cannot launch until fixed:');
300
300
  for (const v of attemptsCheck.violations) lines.push(` ✗ ${v}`);
301
301
  } else if (attemptsCheck.hasAttempts) {
302
- lines.push('Best-of-N: worktree + stable-id constraints satisfied — winners are chosen via /workstream attempts pick, and any dependents wait for the winner to be picked and merged.');
302
+ lines.push('Best-of-N: worktree + stable-id constraints satisfied; winners are chosen via /workstream attempts pick, and any dependents wait for the winner to be picked and merged.');
303
303
  }
304
304
  for (const n of attemptsCheck.notes) lines.push(` note: ${n}`);
305
305
  lines.push(
@@ -312,18 +312,18 @@ function renderDraftProposal(draft: WorkstreamDraft): string {
312
312
  // Honest durability note (see workstream-services.ts's REALITY-WINS doc):
313
313
  // the engine has no pre-launch draft concept, but the TUI journals this
314
314
  // proposal to disk (.goodvibes/orchestration/drafts/) and reloads it at
315
- // startup, so it survives a restart and is here to launch afterward — its
315
+ // startup, so it survives a restart and is here to launch afterward, its
316
316
  // approval state included.
317
- lines.push('Note: saved to .goodvibes/orchestration/drafts/ — survives a restart until you launch or cancel it.');
317
+ lines.push('Note: saved to .goodvibes/orchestration/drafts/; survives a restart until you launch or cancel it.');
318
318
  return lines.join('\n');
319
319
  }
320
320
 
321
321
  function renderWorkstreamStatus(ws: Workstream): string {
322
322
  const isolated = ws.isolation === 'worktree';
323
323
  const lines: string[] = [];
324
- lines.push(`Workstream ${ws.id} — "${ws.title}"`);
324
+ lines.push(`Workstream ${ws.id}: "${ws.title}"`);
325
325
  lines.push(`Isolation: ${ws.isolation ?? 'shared'}`);
326
- // Origin provenance (BIG-3 item 1) — only present on workstreams assembled
326
+ // Origin provenance (BIG-3 item 1), only present on workstreams assembled
327
327
  // from a decomposition proposal; absent for compat/authored ones.
328
328
  if (ws.provenance) {
329
329
  const pv = ws.provenance;
@@ -344,7 +344,7 @@ function renderWorkstreamStatus(ws: Workstream): string {
344
344
  lines.push(` ${shortId(item.id)} [${item.state}] ${item.title} — phase: ${item.currentPhaseId ?? '—'}${depNote}${mergeNote}`);
345
345
  }
346
346
  if (isolated) {
347
- // Honest terminal-summary truth (never inferred from item.state alone —
347
+ // Honest terminal-summary truth (never inferred from item.state alone,
348
348
  // an item can be terminally 'passed' with its branch still unmerged):
349
349
  // an item counts as unmerged the instant it enters the integration lane
350
350
  // (mergeState 'pending') and stays counted through a conflict or any
@@ -352,8 +352,8 @@ function renderWorkstreamStatus(ws: Workstream): string {
352
352
  const unmerged = ws.items.filter((item) => item.mergeState === 'pending' || item.mergeState === 'conflict' || item.worktreeKept);
353
353
  lines.push(
354
354
  unmerged.length > 0
355
- ? `Unmerged items: ${unmerged.length} (${unmerged.map((item) => shortId(item.id)).join(', ')}) — this run is NOT fully integrated yet.`
356
- : 'Unmerged items: none — every terminated item is merged (or had nothing to merge).',
355
+ ? `Unmerged items: ${unmerged.length} (${unmerged.map((item) => shortId(item.id)).join(', ')}); this run is NOT fully integrated yet.`
356
+ : 'Unmerged items: none; every terminated item is merged (or had nothing to merge).',
357
357
  );
358
358
  }
359
359
  return lines.join('\n');
@@ -387,7 +387,7 @@ function resolveWorkstream(service: WorkstreamCommandService, ref: string): Work
387
387
  * approve/edit/launch/*-item all fail this way when `id` doesn't resolve to a
388
388
  * held draft. Drafts are now journaled to disk and reloaded at startup (see
389
389
  * renderDraftProposal's note and workstream-services.ts's REALITY-WINS doc), so
390
- * a restart no longer silently wipes them — a missing id is a typo or a
390
+ * a restart no longer silently wipes them, a missing id is a typo or a
391
391
  * stale/already-launched proposal, and the plain message is the honest guess.
392
392
  * `service` is kept in the signature so callers stay uniform and a future
393
393
  * "did you mean <closest id>?" hint has somewhere to live.
@@ -458,7 +458,7 @@ export function registerWorkstreamRuntimeCommands(registry: CommandRegistry): vo
458
458
  const target = ref ? resolveWorkstream(service, ref) : (live.length === 1 ? live[0] : undefined);
459
459
  if (!target) {
460
460
  if (!ref && live.length > 1) {
461
- ctx.print(`Multiple workstreams running — specify one: ${live.map((ws) => shortId(ws.id)).join(', ')}`);
461
+ ctx.print(`Multiple workstreams running: specify one: ${live.map((ws) => shortId(ws.id)).join(', ')}`);
462
462
  return;
463
463
  }
464
464
  ctx.print(ref ? `No workstream found: ${ref}` : 'No workstreams running. Use /workstream list to see pending proposals.');
@@ -489,7 +489,7 @@ export function registerWorkstreamRuntimeCommands(registry: CommandRegistry): vo
489
489
  gate: templateGate,
490
490
  });
491
491
  if (!inserted) {
492
- ctx.print(`Could not insert phase — is "${id}" still an active workstream?`);
492
+ ctx.print(`Could not insert phase: is "${id}" still an active workstream?`);
493
493
  return;
494
494
  }
495
495
  ctx.print(`Inserted phase "${description}" into ${shortId(ws.id)} after ordinal ${lastOrdinal} (new ordinal ${inserted.ordinal}).`);
@@ -4,7 +4,7 @@ import type { CommandRegistry } from '../command-registry.ts';
4
4
  import { openCommandPanel, requireShellPaths } from './runtime-services.ts';
5
5
  import { describeOperatorRpcError, getOperatorRpc } from './operator-rpc.ts';
6
6
 
7
- /** Compact per-row setup-state tag for /worktree review — absent when setup has never run; failure stands out. */
7
+ /** Compact per-row setup-state tag for /worktree review, absent when setup has never run; failure stands out. */
8
8
  export function formatSetupTag(setup: ManagedWorktreeMeta['setup']): string {
9
9
  if (!setup) return '';
10
10
  if (setup.state === 'failed') return ' setup:FAILED';
@@ -12,13 +12,13 @@ export function formatSetupTag(setup: ManagedWorktreeMeta['setup']): string {
12
12
  return ' setup:skipped';
13
13
  }
14
14
 
15
- /** Full setup-state block for /worktree inspect — the failing step + captured output when failed. */
15
+ /** Full setup-state block for /worktree inspect, the failing step + captured output when failed. */
16
16
  export function formatSetupDetail(setup: ManagedWorktreeMeta['setup']): string[] {
17
17
  if (!setup) return [' setup: never run'];
18
18
  if (setup.state !== 'failed') return [` setup: ${setup.state}`];
19
19
  const failingStep = setup.steps.find((step) => !step.ok);
20
20
  return [
21
- ` setup: FAILED — ${setup.error ?? 'unknown error'}`,
21
+ ` setup: FAILED; ${setup.error ?? 'unknown error'}`,
22
22
  ...(failingStep
23
23
  ? [
24
24
  ` failing step (${failingStep.kind}): ${failingStep.label}${failingStep.exitCode !== undefined ? ` (exit ${failingStep.exitCode})` : ''}`,
@@ -94,7 +94,7 @@ export function registerWorktreeRuntimeCommands(registry: CommandRegistry): void
94
94
  try {
95
95
  const { setup } = await rpc.sdk.operator.invoke('worktrees.setup.run', { path });
96
96
  if (setup.state === 'skipped') {
97
- ctx.print('[worktree setup] skipped — no setup commands or carry-over globs are configured.');
97
+ ctx.print('[worktree setup] skipped: no setup commands or carry-over globs are configured.');
98
98
  } else if (setup.state === 'succeeded') {
99
99
  ctx.print(`[worktree setup] succeeded (${setup.steps.length} step(s)).`);
100
100
  } else {
@@ -148,7 +148,7 @@ export function registerWorktreeRuntimeCommands(registry: CommandRegistry): void
148
148
  if (sub === 'discard') {
149
149
  // Discard is a real destructive act, not a metadata flip: route it
150
150
  // through the worktrees.discard operator verb (preservation commit,
151
- // git worktree removal, honest receipt) — the SAME behavior as the
151
+ // git worktree removal, honest receipt), the SAME behavior as the
152
152
  // Fleet panel's D key. Typing the verb with an explicit path is the
153
153
  // confirmation.
154
154
  const path = args[1];
@@ -167,7 +167,7 @@ export function registerWorktreeRuntimeCommands(registry: CommandRegistry): void
167
167
  ctx.print([
168
168
  `[worktree discard] Discarded ${receipt.path}`,
169
169
  ` branch kept: ${receipt.branch || '(unknown)'}`,
170
- ` preservation commit: ${receipt.preservedCommit || '(none — nothing to preserve)'}`,
170
+ ` preservation commit: ${receipt.preservedCommit || '(none; nothing to preserve)'}`,
171
171
  ` ${receipt.detail}`,
172
172
  ].join('\n'));
173
173
  } else {
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Composer capture intents — leading markers in the composer that write to
2
+ * Composer capture intents, leading markers in the composer that write to
3
3
  * memory instead of (or in addition to) sending a turn.
4
4
  *
5
5
  * `!# <text>` pins <text> to session memory AND sends it as a normal prompt
6
6
  * (pre-existing behavior).
7
7
  * `# <text>` captures <text> as a session-memory note and does NOT send a
8
- * turn — a pure "jot this down" gesture. A single leading `#`
8
+ * turn, a pure "jot this down" gesture. A single leading `#`
9
9
  * only; `##...` (markdown headings) is left alone so it can be
10
10
  * sent as an ordinary prompt.
11
11
  *
@@ -38,7 +38,7 @@ const AT_MODEL_PATTERN = /@model:([^\s]+)/g;
38
38
  * The switch is a real, persisted selection (config `provider.model`), not a
39
39
  * per-turn override, so the runtime labels are updated alongside it and each
40
40
  * one is announced. An unknown id is reported as unknown rather than silently
41
- * dropped — the user asked for a specific backend and did not get it.
41
+ * dropped, the user asked for a specific backend and did not get it.
42
42
  */
43
43
  export function applyAtModelDirective(input: string, deps: AtModelDeps): string {
44
44
  let text = input;
@@ -84,7 +84,7 @@ function truncateForChip(text: string): string {
84
84
  * the returned `text` is empty, the caller should not send a turn.
85
85
  */
86
86
  export function applyComposerCapture(input: string, deps: ComposerCaptureDeps): ComposerCaptureResult {
87
- // `!#` — pin to session memory and continue to send as a prompt.
87
+ // `!#`, pin to session memory and continue to send as a prompt.
88
88
  if (input.startsWith('!#')) {
89
89
  const memoryText = input.slice(2).trim();
90
90
  if (!memoryText) {
@@ -96,7 +96,7 @@ export function applyComposerCapture(input: string, deps: ComposerCaptureDeps):
96
96
  return { text: memoryText, captured: true };
97
97
  }
98
98
 
99
- // `#` (single, not `##`) — capture a note to session memory; do not send.
99
+ // `#` (single, not `##`), capture a note to session memory; do not send.
100
100
  const leading = input.replace(/^\s+/, '');
101
101
  if (leading.startsWith('#') && !leading.startsWith('##')) {
102
102
  const noteText = leading.slice(1).trim();
@@ -17,7 +17,7 @@
17
17
  export interface ConcealedInputRequest {
18
18
  /**
19
19
  * Short label describing what is being asked for, e.g. 'Password' or
20
- * 'API key'. Surfaced by the caller (e.g. as a system message) — the composer
20
+ * 'API key'. Surfaced by the caller (e.g. as a system message), the composer
21
21
  * itself only masks; it does not print the label.
22
22
  */
23
23
  readonly label?: string;
@@ -30,7 +30,7 @@ export interface ConcealedInputRequest {
30
30
  /**
31
31
  * Mask a composer buffer for display. Every UTF-16 code unit except a newline
32
32
  * becomes a bullet, so the masked string has the EXACT same length and line
33
- * structure as the plaintext — word-wrap and cursor-position math (which index
33
+ * structure as the plaintext, word-wrap and cursor-position math (which index
34
34
  * the string by code unit) stay correct while no plaintext character ever
35
35
  * reaches the screen buffer.
36
36
  */
@@ -1,14 +1,14 @@
1
1
  import type { ModalSectionStyle } from '../renderer/modal-factory.ts';
2
2
 
3
3
  /**
4
- * Config-modal host — the shared seam every MIGRATE-TO-MODAL surface
4
+ * Config-modal host, the shared seam every MIGRATE-TO-MODAL surface
5
5
  * (provider-health, services, subscription, remote, local-auth, settings-sync,
6
6
  * sandbox, and the ecosystem/governance set) is expressed through.
7
7
  *
8
8
  * A surface is PURE DATA + ACTIONS: it hands the host a `buildView()` that maps
9
9
  * live read-models to a tabbed, list-structured view, plus a declarative action
10
10
  * table. The host owns all key routing (tab switch, list nav, Esc, confirm) and
11
- * the stable-layout liveness contract — the surface never touches the input
11
+ * the stable-layout liveness contract, the surface never touches the input
12
12
  * system directly (the charter's "do not invent a parallel input system").
13
13
  *
14
14
  * Liveness doctrine (charter: "live data, stable layout"): `buildView()` is
@@ -41,7 +41,7 @@ export interface ConfigModalRow {
41
41
 
42
42
  /** One tab (section) of a surface. Tabs are switched with left/right or Tab. */
43
43
  export interface ConfigModalTab {
44
- /** Stable id — preserves the active tab across refresh + re-open. */
44
+ /** Stable id, preserves the active tab across refresh + re-open. */
45
45
  readonly id: string;
46
46
  /** Tab-strip label. */
47
47
  readonly label: string;
@@ -61,7 +61,7 @@ export interface ConfigModalView {
61
61
  readonly title: string;
62
62
  readonly tabs: readonly ConfigModalTab[];
63
63
  /**
64
- * Non-null when the read-model is unavailable/degraded — the host renders a
64
+ * Non-null when the read-model is unavailable/degraded, the host renders a
65
65
  * banner and still shows whatever tabs/rows are present (honest degraded
66
66
  * state rather than a blank or a throw).
67
67
  */
@@ -79,7 +79,7 @@ export interface ConfigModalActionContext {
79
79
  /** Print a line to the conversation transcript. */
80
80
  readonly print: (message: string) => void;
81
81
  /**
82
- * Execute a slash command — the same seam panels used via
82
+ * Execute a slash command, the same seam panels used via
83
83
  * `PanelIntegrationContext.executeCommand`. This is how a migrated action
84
84
  * preserves parity: the mutation still runs through its existing, tested
85
85
  * command (e.g. `/settings-sync resolve`, `/local-auth delete-user`).
@@ -87,14 +87,14 @@ export interface ConfigModalActionContext {
87
87
  readonly executeCommand?: (name: string, args: string[]) => Promise<unknown>;
88
88
  /** Open another named modal surface (cross-surface navigation, e.g. the
89
89
  * services surface jumping to the subscription surface). Swaps the active
90
- * surface in place — the same seam ctx.openModal uses. */
90
+ * surface in place, the same seam ctx.openModal uses. */
91
91
  readonly openModal?: (name: string) => void;
92
92
  /**
93
- * Submit text to the chat/model as a real user turn — the same composer
93
+ * Submit text to the chat/model as a real user turn, the same composer
94
94
  * submission seam `handleUserInput` uses (threaded from CommandContext.submitInput).
95
95
  * Generic across surfaces (any modal may hand free-form input to the model).
96
96
  *
97
- * ORDERING GUARD: a turn must never start while a modal owns the keyboard —
97
+ * ORDERING GUARD: a turn must never start while a modal owns the keyboard,
98
98
  * that is the modal-liveness hazard (a live turn painting under a modal that
99
99
  * still captures keys). Callers MUST `close()` the modal BEFORE invoking
100
100
  * `submitInput`. The planning modal's free-form submit follows this ordering.
@@ -107,11 +107,11 @@ export interface ConfigModalActionContext {
107
107
  /** Close the modal (focus returns to whatever opened it). */
108
108
  readonly close: () => void;
109
109
  /**
110
- * Switch the active tab and select a row within it, by id — the in-surface
110
+ * Switch the active tab and select a row within it, by id, the in-surface
111
111
  * "jump" affordance (e.g. the Memory modal's Proposals tab jumping to an
112
112
  * affected record in the Review Queue tab, rather than opening a second
113
113
  * modal). Host-owned, populated by ConfigModal itself (like `close`/
114
- * `setStatus`) — a surface's `onAction` calls it, never constructs it. A
114
+ * `setStatus`), a surface's `onAction` calls it, never constructs it. A
115
115
  * no-op if either id is not present in the surface's current structure; the
116
116
  * surface should check reachability itself and print an honest status line
117
117
  * when it isn't, rather than relying on a silent no-op.
@@ -124,10 +124,10 @@ export interface ConfigModalAction {
124
124
  /**
125
125
  * Trigger key: a single printable char ('r', 'd') or a named key ('enter').
126
126
  * Must not collide with the host-reserved nav keys (up/down/left/right/tab/
127
- * j/k/escape/'/') — those are consumed by the host before actions are
127
+ * j/k/escape/'/'), those are consumed by the host before actions are
128
128
  * consulted. '/' arms the host's type-to-filter (item 1); while
129
129
  * filtering, EVERY printable key (not just j/k) is captured by the query
130
- * instead of firing an action — see handleConfigModalToken.
130
+ * instead of firing an action, see handleConfigModalToken.
131
131
  */
132
132
  readonly key: string;
133
133
  /** Action id passed to `onAction`. */
@@ -149,23 +149,23 @@ export interface ConfigModalAction {
149
149
  }
150
150
 
151
151
  /**
152
- * A named config-modal surface. Pure seam — the host knows nothing about the
152
+ * A named config-modal surface. Pure seam, the host knows nothing about the
153
153
  * surface's data. Built once (closing over its read-models) and registered on
154
154
  * PanelManager via `registerModalSurface`; opened by name from a panel-id
155
155
  * redirect hit or `ctx.openModal(name)`.
156
156
  */
157
157
  export interface ConfigModalSurface {
158
- /** Modal name — the key `registerModalRedirect` / `ctx.openModal` use. */
158
+ /** Modal name, the key `registerModalRedirect` / `ctx.openModal` use. */
159
159
  readonly name: string;
160
160
  /** Fallback title (buildView().title wins per tick). */
161
161
  readonly title: string;
162
162
  /**
163
163
  * Build the current view from live read-models. Called on open, on every
164
- * interaction boundary, AND on every render tick. MUST be pure and cheap —
164
+ * interaction boundary, AND on every render tick. MUST be pure and cheap,
165
165
  * snapshot reads only, no async, no mutation.
166
166
  */
167
167
  buildView(): ConfigModalView;
168
- /** Declarative action table (optional — a read-only surface has none). */
168
+ /** Declarative action table (optional, a read-only surface has none). */
169
169
  readonly actions?: readonly ConfigModalAction[];
170
170
  /** Handle an action fired by its key. */
171
171
  onAction?(actionId: string, ctx: ConfigModalActionContext): void;