@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
@@ -103,13 +103,13 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
103
103
  registry.register({
104
104
  name: 'find',
105
105
  aliases: ['findtext'],
106
- description: 'Search THIS conversation transcript (same as Ctrl+F) — searching the web instead? use /search',
106
+ description: 'Search THIS conversation transcript (same as Ctrl+F). Searching the web instead? Use /search',
107
107
  handler(_args, ctx) {
108
108
  if (ctx.openTranscriptSearch) {
109
109
  ctx.openTranscriptSearch();
110
110
  return;
111
111
  }
112
- ctx.print('Transcript search is not available in this context — try Ctrl+F.');
112
+ ctx.print('Transcript search is not available in this context; try Ctrl+F.');
113
113
  },
114
114
  });
115
115
 
@@ -121,7 +121,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
121
121
  const km = requireKeybindingsManager(ctx);
122
122
  // The full binding table (~45 rows) is presented via the same
123
123
  // generated, scrollable overlay /shortcuts opens (see
124
- // renderShortcutsOverlay) rather than a one-shot transcript dump —
124
+ // renderShortcutsOverlay) rather than a one-shot transcript dump,
125
125
  // the file path (dynamic, per-user) still gets a short transcript
126
126
  // line since the overlay itself doesn't show it.
127
127
  ctx.print(`Keybindings config: ${km.getConfigPath()} (create it to override any binding: { "action": { "key": "x", "ctrl": true } })`);
@@ -196,8 +196,8 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
196
196
  aliases: ['h', '?'],
197
197
  description: 'Browse every command with its description; picking one runs it',
198
198
  handler(_args, ctx) {
199
- // Generated live from the command registry — never a hand-maintained
200
- // list — so /help can never drift from the real command set. Category
199
+ // Generated live from the command registry, never a hand-maintained
200
+ // list, so /help can never drift from the real command set. Category
201
201
  // labels come from the same single source of truth as the generated
202
202
  // reference and the palette (ctx.getCommandCategories; see its doc for
203
203
  // why it is threaded through the context rather than imported here).
@@ -217,7 +217,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
217
217
  category: categoryByName.get(cmd.name) ?? 'Other',
218
218
  };
219
219
  });
220
- // every item here is a command, and picking one RUNS it — label
220
+ // every item here is a command, and picking one RUNS it, label
221
221
  // the verb "Run" (matching the slash-command palette) instead of the
222
222
  // generic "Select" default.
223
223
  ctx.openSelection('Help — Commands', items, { allowSearch: true, primaryVerbLabel: 'Run' }, (result) => {
@@ -269,7 +269,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
269
269
  description: 'Summarize conversation to free context window',
270
270
  async handler(_args, ctx) {
271
271
  const messages = ctx.session.conversationManager.getMessagesForLLM();
272
- // contextWindow IS reachable from CommandContext — the same
272
+ // contextWindow IS reachable from CommandContext, the same
273
273
  // call compactConversation() (runtime-services.ts) already makes to scale
274
274
  // its own behaviour by window size. Previously hardcoded to 0 here, which
275
275
  // silently suppressed buildCompactionPreview()'s capacity-% clause even
@@ -320,7 +320,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
320
320
  const memStore = requireSessionMemoryStore(ctx);
321
321
  const id = memStore.add(text);
322
322
  if (!id) {
323
- ctx.print('[Pin] Nothing pinned — text was blank.');
323
+ ctx.print('[Pin] Nothing pinned: text was blank.');
324
324
  } else {
325
325
  const count = memStore.list().length;
326
326
  ctx.print(buildPinSuccessText(id, text, count));
@@ -370,7 +370,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
370
370
  usage: '[level]',
371
371
  // No fixed list here. The accepted levels belong to the serving model, so
372
372
  // the old '[instant|low|medium|high]' hint was wrong for every model that
373
- // offers 'none', 'minimal', 'xhigh' or 'max' — and for every model that
373
+ // offers 'none', 'minimal', 'xhigh' or 'max', and for every model that
374
374
  // rejects 'instant'. Running `/effort` with no argument prints the real
375
375
  // ones for the model currently in use.
376
376
  argsHint: '[level]',
@@ -394,7 +394,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
394
394
  // command is where the preference is read back and re-chosen, so it must
395
395
  // show what was asked for even while a capped model is serving.
396
396
  const current = requestedEffortLevel(ctx.platform.configManager);
397
- // What the list should open on, though, is the level in EFFECT — the
397
+ // What the list should open on, though, is the level in EFFECT, the
398
398
  // requested level snapped to this model. The requested level may not be
399
399
  // in the list at all when the model caps lower, and preselecting a
400
400
  // missing id lands the cursor on the lowest level instead of on what is
@@ -402,7 +402,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
402
402
  const inEffect = servingEffortForLevel(current, model).effective ?? current;
403
403
 
404
404
  const applyLevel = (level: string): void => {
405
- // An explicit user choice — the one kind of write that is allowed to
405
+ // An explicit user choice, the one kind of write that is allowed to
406
406
  // change the stored preference.
407
407
  ctx.platform.configManager.set('provider.reasoningEffort', level);
408
408
  const serving = servingEffortForLevel(level, model);
@@ -1,17 +1,17 @@
1
1
  /**
2
- * tasks-runtime.ts — `/tasks`.
2
+ * tasks-runtime.ts, `/tasks`.
3
3
  *
4
4
  * The reads are a UNION now: this surface's own runtime tasks (the exec, agent
5
5
  * and ACP work the loop here spawned) plus the daemon's (scheduled work,
6
6
  * channel-driven runs, tasks other surfaces submitted). Before the daemon
7
7
  * became its own product one registry held both, and `tasks.list(500)` off the
8
8
  * in-process transport answered synchronously. It no longer holds both, so this
9
- * command crosses a wire and is async — the same shape `/ci` and the fleet act
9
+ * command crosses a wire and is async, the same shape `/ci` and the fleet act
10
10
  * verbs already use.
11
11
  *
12
12
  * The list output is unchanged for a local-only fleet: same header, same
13
13
  * columns, same 20-row cap, same filter semantics. What is added is the daemon
14
- * half, and one honest line when the daemon could not be reached — a partial
14
+ * half, and one honest line when the daemon could not be reached, a partial
15
15
  * list of real tasks beats an error page, but it must not read as complete.
16
16
  *
17
17
  * Writes do NOT degrade that way. A lifecycle act against a task this terminal
@@ -226,7 +226,7 @@ export function registerTasksRuntimeCommands(registry: CommandRegistry): void {
226
226
 
227
227
  // Which registry owns this id decides what may be done to it. An act
228
228
  // aimed at a daemon task must never be applied to a local record that
229
- // does not exist — that reports success and changes nothing.
229
+ // does not exist, that reports success and changes nothing.
230
230
  const found = await tasksClient.get(taskId);
231
231
  if (!found) {
232
232
  ctx.print(`Unknown task: ${taskId}`);
@@ -5,7 +5,7 @@ import { requireShellPaths } from './runtime-services.ts';
5
5
 
6
6
  /**
7
7
  * Timeout for a /test run, in milliseconds. Deliberately much longer than
8
- * WRFC's WRFC_GATE_TIMEOUT_MS (120s, tuned for CI gates) — this repo's own
8
+ * WRFC's WRFC_GATE_TIMEOUT_MS (120s, tuned for CI gates), this repo's own
9
9
  * suite is 600+ test files (scripts/run-tests.ts), and /test is an
10
10
  * interactive command with no other caller waiting on it.
11
11
  *
@@ -48,7 +48,7 @@ interface ParsedTestResults {
48
48
  * Parse this repo's own scripts/run-tests.ts output shape:
49
49
  * per-file: `==> path/to/file.test.ts [FAIL]` (only present on failure)
50
50
  * summary: `Test files: N, passed: P, failed: F`
51
- * Returns null when the summary line isn't present at all — the fallback
51
+ * Returns null when the summary line isn't present at all, the fallback
52
52
  * path (raw tail, no fabricated counts) covers a different project's
53
53
  * jest/vitest/pytest output, or any run that bypassed run-tests.ts.
54
54
  */
@@ -96,7 +96,7 @@ export function parseTestOutput(output: string): ParsedTestResults | null {
96
96
  * quote into `'\''` (close quote, escaped literal quote, reopen quote).
97
97
  * Mirrors the injection-risk class already present in the SDK's
98
98
  * wrfc-gates.ts (executeGateCommand) and this repo's git-runtime.ts /
99
- * diff-runtime.ts, which build shell command strings the same way — a
99
+ * diff-runtime.ts, which build shell command strings the same way, a
100
100
  * pattern arg is never string-concatenated into the command raw.
101
101
  */
102
102
  export function shQuote(value: string): string {
@@ -215,13 +215,13 @@ export async function runTestCommand(
215
215
  // Durable end state: logToolResultBlock (above) renders straight into the
216
216
  // display-only history buffer and never touches the real message list, so
217
217
  // it does not survive the next full rebuildHistory() (which rebuilds
218
- // strictly from conversationManager.getMessageSnapshot()) — the very next
218
+ // strictly from conversationManager.getMessageSnapshot()), the very next
219
219
  // dirty render silently wipes it back to how the transcript looked before
220
220
  // /test ran. addSystemMessage persists the same content as a real message
221
221
  // (same durable pattern as /rewind's confirm notice in
222
222
  // checkpoint-runtime.ts) so the timeout outcome survives like any other
223
223
  // command's output. The streamed output during the run is allowed to stay
224
- // transient — only this final state needs to persist.
224
+ // transient, only this final state needs to persist.
225
225
  ctx.session.conversationManager.addSystemMessage(
226
226
  `[Test] Timed out after ${timeoutSeconds}s and was killed.`,
227
227
  );
@@ -241,7 +241,7 @@ export async function runTestCommand(
241
241
  const failedNoun = parsed.unit === 'files' ? 'file' : 'test';
242
242
  const errorMsg = ok ? undefined : `${parsed.failed} ${failedNoun}${parsed.failed === 1 ? '' : 's'} failed`;
243
243
  ctx.session.conversationManager.logToolResultBlock(toolCall, ok ? 'done' : 'error', summary, durationMs, errorMsg);
244
- const durableLines = [`[Test] ${summary}${errorMsg ? ` — ${errorMsg}` : ''}`];
244
+ const durableLines = [`[Test] ${summary}${errorMsg ? `: ${errorMsg}` : ''}`];
245
245
  if (parsed.failingFiles.length > 0) {
246
246
  const shown = parsed.failingFiles.slice(0, MAX_FAILING_NAMES_SHOWN);
247
247
  const failListHeader = parsed.unit === 'files' ? 'Failing test files:' : 'Failing tests:';
@@ -8,14 +8,14 @@ export function registerTtsRuntimeCommands(registry: CommandRegistry): void {
8
8
  handler(args, ctx) {
9
9
  const first = (args[0] ?? '').toLowerCase();
10
10
 
11
- // /tts stop — cancel active playback
11
+ // /tts stop, cancel active playback
12
12
  if (first === 'stop' || first === 'cancel') {
13
13
  ctx.stopSpokenOutput?.();
14
14
  ctx.print('Live TTS playback stopped.');
15
15
  return;
16
16
  }
17
17
 
18
- // /tts on — enable always-speak mode (every turn spoken automatically)
18
+ // /tts on, enable always-speak mode (every turn spoken automatically)
19
19
  if (first === 'on') {
20
20
  if (!ctx.platform.voiceService) {
21
21
  ctx.print('Live TTS is not available in this runtime.');
@@ -28,7 +28,7 @@ export function registerTtsRuntimeCommands(registry: CommandRegistry): void {
28
28
  return;
29
29
  }
30
30
 
31
- // /tts off — disable always-speak mode
31
+ // /tts off, disable always-speak mode
32
32
  if (first === 'off') {
33
33
  ctx.platform.configManager.setDynamic('ui.voiceEnabled', false);
34
34
  ctx.platform.configManager.save();
@@ -37,7 +37,7 @@ export function registerTtsRuntimeCommands(registry: CommandRegistry): void {
37
37
  return;
38
38
  }
39
39
 
40
- // /tts <prompt> — mark this prompt for spoken output
40
+ // /tts <prompt>, mark this prompt for spoken output
41
41
  const prompt = args.join(' ').trim();
42
42
  if (!prompt) {
43
43
  const enabled = ctx.platform.configManager.get('ui.voiceEnabled');
@@ -1,16 +1,16 @@
1
1
  /**
2
- * `/update` — a real self-update path for binary installs. The
2
+ * `/update`, a real self-update path for binary installs. The
3
3
  * download-verify-swap mechanics are the SDK's canonical update policy
4
- * module (platform/runtime/self-update — hoisted from this file's
4
+ * module (platform/runtime/self-update, hoisted from this file's
5
5
  * semantics), the same mechanism the daemon's hourly loop and
6
6
  * the suite installer follow: one update mechanism everywhere. This file owns
7
7
  * only the /update UX: install-kind gating, target selection, and the
8
8
  * printed report.
9
9
  *
10
10
  * Subcommands:
11
- * /update [check] — resolve the latest release tag and report
11
+ * /update [check] , resolve the latest release tag and report
12
12
  * whether this build is already current.
13
- * /update apply — for a binary install (the curl installer),
13
+ * /update apply , for a binary install (the curl installer),
14
14
  * download + verify + atomically swap THIS
15
15
  * app's binary, and refresh the sqlite-vec
16
16
  * native addon in lockstep so the vector index
@@ -18,9 +18,9 @@
18
18
  * swap parks the outgoing file at
19
19
  * `<path>.previous`, so the replaced version is
20
20
  * always kept. For any other install kind,
21
- * prints the exact command to run instead — it
21
+ * prints the exact command to run instead, it
22
22
  * never attempts a swap it can't do safely.
23
- * /update rollback — exchange each installed file with its kept
23
+ * /update rollback , exchange each installed file with its kept
24
24
  * `.previous` counterpart: one command back to
25
25
  * the version that ran before the last update
26
26
  * (and, being an exchange, one more command
@@ -30,15 +30,15 @@
30
30
  * binary as part of the same release, and this command swapped both. The daemon
31
31
  * is its own product now, released from its own repository on its own version
32
32
  * line, and it updates itself on an hourly loop. A swap from here would fetch
33
- * an asset this repository's releases do not publish — and if one ever appeared
33
+ * an asset this repository's releases do not publish, and if one ever appeared
34
34
  * under that name, would overwrite a working daemon with a build from the wrong
35
35
  * line. The daemon is a neighbour in the install directory, not cargo.
36
- * /update review — install/subscription/sandbox posture,
36
+ * /update review , install/subscription/sandbox posture,
37
37
  * unrelated to the update mechanics above.
38
- * /update bundle export|inspect <path> — portable posture bundle, as before.
38
+ * /update bundle export|inspect <path>, portable posture bundle, as before.
39
39
  *
40
40
  * The former `/update channel <stable|preview>` subcommand wrote a
41
- * release.channel config value that nothing downstream ever read — it only
41
+ * release.channel config value that nothing downstream ever read, it only
42
42
  * ever changed what a later `/update review` printed back to you. It has
43
43
  * been removed rather than kept decorative; this repo's release process
44
44
  * (scripts/release.ts) does not publish separate stable/preview channels,
@@ -94,13 +94,13 @@ async function downloadText(fetchImpl: UpdateFetchLike, url: string): Promise<st
94
94
  * to and including the moment BEFORE the first file is written: every fetch on
95
95
  * the way there carries the caller's signal, and every await boundary re-checks
96
96
  * it. From the first write onward the swap owns the installed files and always
97
- * runs to completion — a half-applied swap is the one outcome worse than a slow
97
+ * runs to completion, a half-applied swap is the one outcome worse than a slow
98
98
  * one.
99
99
  *
100
100
  * This record makes that boundary readable from outside the call. The launch
101
101
  * updater gives `applyUpdate` a budget and abandons the promise when it runs
102
102
  * out, so it cannot learn from the return value which side of the line the work
103
- * was on — it reads these flags instead, and prints the receipt that is
103
+ * was on, it reads these flags instead, and prints the receipt that is
104
104
  * actually true (see src/cli/launch-auto-update.ts).
105
105
  */
106
106
  export interface UpdateSwapProgress {
@@ -116,7 +116,7 @@ export function createUpdateSwapProgress(): UpdateSwapProgress {
116
116
  return { begun: false, committed: false, targetTag: null };
117
117
  }
118
118
 
119
- /** The failure an aborted update ends with — raised only while nothing has been written yet. */
119
+ /** The failure an aborted update ends with, raised only while nothing has been written yet. */
120
120
  export const UPDATE_ABORTED_MESSAGE = 'update cancelled before any file was replaced';
121
121
 
122
122
  function throwIfAborted(signal: AbortSignal | undefined): void {
@@ -127,8 +127,8 @@ function throwIfAborted(signal: AbortSignal | undefined): void {
127
127
 
128
128
  /**
129
129
  * The shared UpdateFetchLike init shape predates cancellation, so the signal
130
- * rides on a widened version of it: the real `fetch` reads it — which is what
131
- * makes the DOWNLOAD itself cancellable rather than merely abandoned — and a
130
+ * rides on a widened version of it: the real `fetch` reads it, which is what
131
+ * makes the DOWNLOAD itself cancellable rather than merely abandoned, and a
132
132
  * test stub that ignores the extra field behaves exactly as it did before.
133
133
  */
134
134
  type AbortableFetchInit = NonNullable<Parameters<UpdateFetchLike>[1]> & { signal?: AbortSignal };
@@ -175,7 +175,7 @@ function trackSwapProgress(io: UpdateFileIo, progress: UpdateSwapProgress): Upda
175
175
  }
176
176
 
177
177
  /**
178
- * Suffix under which every swap keeps the file it replaced — re-exported
178
+ * Suffix under which every swap keeps the file it replaced, re-exported
179
179
  * from the SDK's canonical update policy module so rollback and swap share
180
180
  * one definition everywhere.
181
181
  */
@@ -202,7 +202,7 @@ const defaultRunCommand: RunCommand = (command, args) => {
202
202
 
203
203
  /**
204
204
  * Detects, honestly, whether the daemon is currently running as a systemd
205
- * user service — so the post-update message can tell the user the real
205
+ * user service, so the post-update message can tell the user the real
206
206
  * restart command instead of assuming one. Only Linux/systemd is checked
207
207
  * (this repo's PlatformServiceManager also supports launchd on macOS and
208
208
  * Scheduled Tasks on Windows, but those aren't restarted with `systemctl`,
@@ -246,7 +246,7 @@ export interface ApplyUpdateOptions {
246
246
  /** Injectable filesystem seam (the SDK's UpdateFileIo) so tests observe swaps in memory. */
247
247
  readonly io?: UpdateFileIo;
248
248
  /**
249
- * Cancels the update — for real: it is passed to every fetch in the path and
249
+ * Cancels the update, for real: it is passed to every fetch in the path and
250
250
  * re-checked at every await boundary, so an abort stops the download instead
251
251
  * of leaving it running unwatched. Honoured only up to the moment before the
252
252
  * swap begins; from the first file write onward it is deliberately ignored
@@ -259,13 +259,13 @@ export interface ApplyUpdateOptions {
259
259
 
260
260
  /**
261
261
  * The real self-update path, delegating the download-verify-swap mechanics
262
- * to the SDK's canonical update policy module (applyVerifiedUpdate — the
262
+ * to the SDK's canonical update policy module (applyVerifiedUpdate, the
263
263
  * same mechanism the daemon's hourly loop uses). For a binary install:
264
264
  * resolve the latest tag, compare to the running version, and if newer,
265
265
  * download + checksum-verify EVERY artifact before swapping any one (so a
266
266
  * checksum failure never leaves a mismatched pair installed), then
267
267
  * atomically swap each in place with the outgoing file kept at
268
- * `<path>.previous`. For any other install kind, never attempts a swap — it
268
+ * `<path>.previous`. For any other install kind, never attempts a swap, it
269
269
  * prints the exact command for that install method instead.
270
270
  */
271
271
  export async function applyUpdate(options: ApplyUpdateOptions): Promise<void> {
@@ -313,7 +313,7 @@ export async function applyUpdate(options: ApplyUpdateOptions): Promise<void> {
313
313
  // same download-verify-swap pass so /update never leaves a new binary beside a
314
314
  // stale addon. It lands at <execDir>/lib/sqlite-vec-<os>-<arch>/vec0.<suffix>,
315
315
  // exactly where the SDK's loader resolves it. The manifest entry decides
316
- // whether the target release ships it — an entry that IS present makes the
316
+ // whether the target release ships it, an entry that IS present makes the
317
317
  // download and checksum mandatory (a mismatch is fatal, verified before any
318
318
  // swap), while an absent entry means the target predates the addon and is
319
319
  // skipped rather than blocking an otherwise-valid binary update. On macOS the
@@ -343,7 +343,7 @@ export async function applyUpdate(options: ApplyUpdateOptions): Promise<void> {
343
343
  // This is the last point at which the update can be called off. The
344
344
  // downloads inside applyVerifiedUpdate are still cancellable (the signal
345
345
  // rides on every request), but its swap loop is synchronous and runs to
346
- // completion once its first write lands — which is precisely what
346
+ // completion once its first write lands, which is precisely what
347
347
  // `progress.begun` records, and why nothing below this call re-checks the
348
348
  // signal.
349
349
  throwIfAborted(signal);
@@ -368,8 +368,8 @@ export async function applyUpdate(options: ApplyUpdateOptions): Promise<void> {
368
368
  // Named, not silently omitted: someone who used to see two binaries swap
369
369
  // here should read why only one did.
370
370
  serviceInfo.managed
371
- ? `The daemon updates itself on its own release line — this changed nothing about it (it runs under ${serviceInfo.unitName}.service).`
372
- : 'The daemon updates itself on its own release line — this changed nothing about it.',
371
+ ? `The daemon updates itself on its own release line; this changed nothing about it (it runs under ${serviceInfo.unitName}.service).`
372
+ : 'The daemon updates itself on its own release line; this changed nothing about it.',
373
373
  ].join('\n'),
374
374
  );
375
375
  }
@@ -390,7 +390,7 @@ export interface RollbackUpdateOptions {
390
390
  * delegating the exchange mechanics to the SDK's rollbackKeptPrevious (the
391
391
  * same module the swap uses): every installed file this command owns (the app
392
392
  * binary and the vector addon) that has a kept `.previous` counterpart is
393
- * EXCHANGED with it — the previous version becomes live, and the version being rolled
393
+ * EXCHANGED with it, the previous version becomes live, and the version being rolled
394
394
  * back is itself kept at `.previous`, so a second `/update rollback` rolls
395
395
  * forward again. Files without a kept counterpart are reported and left
396
396
  * untouched; nothing is downloaded.
@@ -434,8 +434,8 @@ export function rollbackUpdate(options: RollbackUpdateOptions): void {
434
434
  '',
435
435
  'Restart goodvibes to run the restored version.',
436
436
  serviceInfo.managed
437
- ? `The daemon was not rolled back — it updates itself on its own release line (it runs under ${serviceInfo.unitName}.service).`
438
- : 'The daemon was not rolled back — it updates itself on its own release line.',
437
+ ? `The daemon was not rolled back; it updates itself on its own release line (it runs under ${serviceInfo.unitName}.service).`
438
+ : 'The daemon was not rolled back; it updates itself on its own release line.',
439
439
  ].join('\n'),
440
440
  );
441
441
  }
@@ -25,7 +25,7 @@ function parseSearchArgs(args: string[]): ParsedSearchArgs {
25
25
  * registerWebSearchRuntimeCommands - `/search <query> [--limit <n>]`.
26
26
  *
27
27
  * Calls webSearchService.search() directly (skipping the agent-tool wrapper's
28
- * JSON-stringify contract — same shape as /schedule's ctx.ops.automationManager
28
+ * JSON-stringify contract, same shape as /schedule's ctx.ops.automationManager
29
29
  * pattern: read the service off the context, guard on undefined, print) and
30
30
  * renders ranked results + the instant answer into the transcript with
31
31
  * source labels. webSearchService is already constructed in services.ts and
@@ -35,7 +35,7 @@ function parseSearchArgs(args: string[]): ParsedSearchArgs {
35
35
  export function registerWebSearchRuntimeCommands(registry: CommandRegistry): void {
36
36
  registry.register({
37
37
  name: 'search',
38
- description: 'Web search — ranked results with source labels (searching THIS transcript? use /find)',
38
+ description: 'Web search, ranked results with source labels (searching THIS transcript? use /find)',
39
39
  usage: '<query> [--limit <n>]',
40
40
  argsHint: '<query> [--limit <n>]',
41
41
  async handler(args, ctx) {
@@ -25,7 +25,7 @@ function getStore(ctx: import('../command-registry.ts').CommandContext): WorkPla
25
25
  }
26
26
 
27
27
  function openPanel(ctx: import('../command-registry.ts').CommandContext): void {
28
- // work-plan migrated to the 'work-plan' modal — open it via the seam.
28
+ // work-plan migrated to the 'work-plan' modal, open it via the seam.
29
29
  openModalCommand(ctx, 'work-plan-modal');
30
30
  }
31
31
 
@@ -99,7 +99,7 @@ export function registerWorkPlanRuntimeCommands(registry: CommandRegistry): void
99
99
  return;
100
100
  }
101
101
  if (subcommand === 'export') {
102
- // Thin wrapper over WorkPlanStore.exportMarkdown() — writes the plan's
102
+ // Thin wrapper over WorkPlanStore.exportMarkdown(), writes the plan's
103
103
  // markdown alongside the JSON and reports the path. (W6 command-path
104
104
  // parity: the work-plan modal's export action routes here.)
105
105
  const { path } = store.exportMarkdown();
@@ -1,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // workstream-attempt-dependents.ts — held-dependent rendering for non-leaf
2
+ // workstream-attempt-dependents.ts, held-dependent rendering for non-leaf
3
3
  // best-of-N groups.
4
4
  //
5
5
  // A best-of-N item may be NON-LEAF: other items can depend on it. The scheduler
@@ -7,7 +7,7 @@
7
7
  // resolves the dependency to that winner (SDK scheduler.ts attemptGroup
8
8
  // DependencyStatus). This module mirrors that status computation as a pure
9
9
  // function so the /workstream attempts surface can show, honestly, which
10
- // dependents are held/waiting/released for a group — and reflect the losing
10
+ // dependents are held/waiting/released for a group, and reflect the losing
11
11
  // attempts' cleanup that the winner pick performs.
12
12
  // ---------------------------------------------------------------------------
13
13
 
@@ -65,9 +65,9 @@ export interface DependentHold {
65
65
  function holdDescriptor(status: AttemptGroupDependencyStatus): string {
66
66
  switch (status) {
67
67
  case 'satisfied':
68
- return 'released — the winner was picked and merged';
68
+ return 'released: the winner was picked and merged';
69
69
  case 'failed':
70
- return 'blocked — every attempt in the group failed';
70
+ return 'blocked: every attempt in the group failed';
71
71
  default:
72
72
  return 'held until the winner is picked and merged';
73
73
  }
@@ -1,16 +1,16 @@
1
1
  // ---------------------------------------------------------------------------
2
- // workstream-attempts.ts — the /workstream attempts surface for best-of-N.
2
+ // workstream-attempts.ts, the /workstream attempts surface for best-of-N.
3
3
  //
4
4
  // The engine runs a best-of-N work item as N sibling attempts in isolated
5
5
  // worktrees and HOLDS the merge, exposing the candidates for a winner pick
6
6
  // (orchestration engine.listHeldMergeGroups / proposeAttemptWinner /
7
- // pickAttemptWinner — the same seam the fleet.attempts.* gateway verbs use).
7
+ // pickAttemptWinner, the same seam the fleet.attempts.* gateway verbs use).
8
8
  // This module drives that seam from the /workstream command:
9
- // • list — the held-merge groups awaiting a pick, with candidates.
10
- // • diff <c> — one candidate's worktree diff in the existing DiffPanel.
11
- // • judge — the OPTIONAL model proposal, clearly labelled a model
9
+ // • list , the held-merge groups awaiting a pick, with candidates.
10
+ // • diff <c> , one candidate's worktree diff in the existing DiffPanel.
11
+ // • judge , the OPTIONAL model proposal, clearly labelled a model
12
12
  // judgment (scoredBy 'model'), with its reasons; never a pick.
13
- // • pick <c> — behind a DiffPanel confirm; merges the winner and lets
13
+ // • pick <c> , behind a DiffPanel confirm; merges the winner and lets
14
14
  // the engine clean the losers, then renders the receipt.
15
15
  // ---------------------------------------------------------------------------
16
16
 
@@ -64,7 +64,7 @@ function candidateLine(c: AttemptCandidate): string {
64
64
  : isTurnBudgetReason(c.failureReason)
65
65
  ? describeFailureReason(c.failureReason) // a spent budget, not an infrastructure failure
66
66
  : `failed${c.failureReason ? `: ${c.failureReason}` : ''}`;
67
- return ` ${c.attemptIndex + 1}. [${state}] ${c.title} — ${files}, item ${shortId(c.itemId)}`;
67
+ return ` ${c.attemptIndex + 1}. [${state}] ${c.title}: ${files}, item ${shortId(c.itemId)}`;
68
68
  }
69
69
 
70
70
  function renderGroupList(groups: readonly HeldMergeGroup[], resolveItems?: ResolveWorkstreamItems): string {
@@ -73,7 +73,7 @@ function renderGroupList(groups: readonly HeldMergeGroup[], resolveItems?: Resol
73
73
  }
74
74
  const lines: string[] = ['Best-of-N groups (held for a winner pick):'];
75
75
  for (const g of groups) {
76
- lines.push(` ${shortId(g.groupId)} — "${g.sourceTitle}" (workstream ${shortId(g.workstreamId)}) ${g.ready ? 'READY' : 'still running'}${g.autoAccept ? ', auto-accept' : ''}`);
76
+ lines.push(` ${shortId(g.groupId)}: "${g.sourceTitle}" (workstream ${shortId(g.workstreamId)}) ${g.ready ? 'READY' : 'still running'}${g.autoAccept ? ', auto-accept' : ''}`);
77
77
  for (const c of g.candidates) lines.push(candidateLine(c));
78
78
  if (g.judgment?.proposedWinnerItemId) {
79
79
  lines.push(` judge proposal: item ${shortId(g.judgment.proposedWinnerItemId)} (model, advisory)`);
@@ -91,13 +91,13 @@ function renderGroupList(groups: readonly HeldMergeGroup[], resolveItems?: Resol
91
91
 
92
92
  /** The model proposal, CLEARLY labelled a model judgment (never ground truth), with reasons. */
93
93
  function renderJudgment(group: HeldMergeGroup, judgment: AttemptJudgment): string {
94
- const lines: string[] = [`Judge proposal for group ${shortId(group.groupId)} — "${group.sourceTitle}"`];
95
- lines.push(' MODEL PROPOSAL (scoredBy: model) — advisory only; a human still confirms the pick.');
94
+ const lines: string[] = [`Judge proposal for group ${shortId(group.groupId)}: "${group.sourceTitle}"`];
95
+ lines.push(' MODEL PROPOSAL (scoredBy: model); advisory only; a human still confirms the pick.');
96
96
  if (judgment.proposedWinnerItemId) {
97
97
  const cand = group.candidates.find((c) => c.itemId === judgment.proposedWinnerItemId);
98
- lines.push(` Proposed winner: ${cand ? `attempt ${cand.attemptIndex + 1} — ${cand.title}` : `item ${shortId(judgment.proposedWinnerItemId)}`}`);
98
+ lines.push(` Proposed winner: ${cand ? `attempt ${cand.attemptIndex + 1}: ${cand.title}` : `item ${shortId(judgment.proposedWinnerItemId)}`}`);
99
99
  } else {
100
- lines.push(' Proposed winner: none — the judge declined to choose.');
100
+ lines.push(' Proposed winner: none; the judge declined to choose.');
101
101
  }
102
102
  if (judgment.model) lines.push(` Model: ${judgment.model}`);
103
103
  if (judgment.reasons.length > 0) {
@@ -199,10 +199,10 @@ export async function handleAttemptsSubcommand(ctx: CommandContext, service: Wor
199
199
  if (action === 'pick') {
200
200
  const candRef = args[3];
201
201
  if (!candRef) { ctx.print(`Usage: /workstream attempts pick ${shortId(group.groupId)} <#>`); return true; }
202
- if (!group.ready) { ctx.print(`Group ${shortId(group.groupId)} is not ready — its siblings are still running. Wait until every attempt is terminal.`); return true; }
202
+ if (!group.ready) { ctx.print(`Group ${shortId(group.groupId)} is not ready: its siblings are still running. Wait until every attempt is terminal.`); return true; }
203
203
  const cand = resolveCandidate(group, candRef);
204
204
  if ('error' in cand) { ctx.print(cand.error); return true; }
205
- if (cand.state !== 'held-merge') { ctx.print(`Attempt ${cand.attemptIndex + 1} failed — only a held (pick-ready) candidate can win.`); return true; }
205
+ if (cand.state !== 'held-merge') { ctx.print(`Attempt ${cand.attemptIndex + 1} failed: only a held (pick-ready) candidate can win.`); return true; }
206
206
 
207
207
  const { DiffPanel } = await import('../../panels/diff-panel.ts');
208
208
  const pm = requirePanelManager(ctx);
@@ -217,7 +217,7 @@ export async function handleAttemptsSubcommand(ctx: CommandContext, service: Wor
217
217
 
218
218
  diffPanel.confirmOverlay.arm({
219
219
  id: `${group.groupId}:${cand.itemId}`,
220
- label: `Pick attempt ${cand.attemptIndex + 1} ("${cand.title}") — merge it, clean the ${group.candidates.length - 1} other worktree(s)`,
220
+ label: `Pick attempt ${cand.attemptIndex + 1} ("${cand.title}"): merge it, clean the ${group.candidates.length - 1} other worktree(s)`,
221
221
  verb: 'Pick',
222
222
  onConfirm: async () => {
223
223
  try {
@@ -235,7 +235,7 @@ export async function handleAttemptsSubcommand(ctx: CommandContext, service: Wor
235
235
  onCancel: () => {
236
236
  pm.close('diff');
237
237
  ctx.focusPrompt?.();
238
- ctx.print('Pick cancelled — nothing merged, no worktree cleaned.');
238
+ ctx.print('Pick cancelled: nothing merged, no worktree cleaned.');
239
239
  ctx.renderRequest();
240
240
  },
241
241
  });