@pellux/goodvibes-tui 2.0.14 → 2.0.16

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 +49 -0
  5. package/README.md +64 -44
  6. package/docs/README.md +6 -6
  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 +19 -19
  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 +11 -11
  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
@@ -42,7 +42,7 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
42
42
  name: 'health',
43
43
  aliases: ['doctor'],
44
44
  description: 'Health workspace for startup posture, service readiness, sandbox posture, and provider health',
45
- usage: '[report|review|open|setup|services|sandbox|provider|accounts|auth|settings|intelligence|remote|mcp|memory|metrics|continuity|worktrees|maintenance|term|repair [domain]] — bare and report stay a cross-domain transcript report (see also /health provider for the providers modal)',
45
+ usage: '[report|review|open|setup|services|sandbox|provider|accounts|auth|settings|intelligence|remote|mcp|memory|metrics|continuity|worktrees|maintenance|term|repair [domain]]: bare and report stay a cross-domain transcript report (see also /health provider for the providers modal)',
46
46
  async handler(args, ctx) {
47
47
  const sub = (args[0] ?? 'review').toLowerCase();
48
48
  const readModels = requireReadModels(ctx);
@@ -54,7 +54,7 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
54
54
 
55
55
  if (sub === 'memory') {
56
56
  // The MemoryGovernor snapshot (ops.memory.get): tier, budget vs RSS,
57
- // per-cache footprints, paused jobs, tripwire — read-only, honest 501
57
+ // per-cache footprints, paused jobs, tripwire, read-only, honest 501
58
58
  // when a daemon predates the governor verb.
59
59
  const resolution = createMemoryDiagnosticsGateway({
60
60
  configManager: ctx.platform.configManager,
@@ -354,9 +354,9 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
354
354
  if (sub === 'term') {
355
355
  const caps = probeTermCaps(process.stdout as NodeJS.WriteStream);
356
356
  const issues: string[] = [];
357
- if (caps.capability === 'none') issues.push('terminal reports no color support — UI rendering will be degraded (no ANSI colors)');
358
- if (caps.capability === 'basic16') issues.push('terminal limited to 16 ANSI colors — gradient and true-color UI elements will be approximated');
359
- if (!caps.syncedOutput) issues.push('DEC Synchronized Output (mode 2026) is disabled — screen-tearing may be visible on slow connections');
357
+ if (caps.capability === 'none') issues.push('terminal reports no color support; UI rendering will be degraded (no ANSI colors)');
358
+ if (caps.capability === 'basic16') issues.push('terminal limited to 16 ANSI colors; gradient and true-color UI elements will be approximated');
359
+ if (!caps.syncedOutput) issues.push('DEC Synchronized Output (mode 2026) is disabled; screen-tearing may be visible on slow connections');
360
360
  ctx.print([
361
361
  'Health Review: Terminal Capabilities',
362
362
  ` color capability: ${caps.capability}`,
@@ -490,13 +490,13 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
490
490
  ctx.print([
491
491
  'Health Review',
492
492
  // item 3: /health stays a cross-domain transcript report (it
493
- // genuinely spans settings/accounts/auth/sandbox/etc — no single
493
+ // genuinely spans settings/accounts/auth/sandbox/etc, no single
494
494
  // modal owns this data), but the providers domain DOES have one, so
495
495
  // point at it honestly. "/provider" (no domain) is a DIFFERENT
496
- // command (switch/manage custom providers) — the real front door to
496
+ // command (switch/manage custom providers), the real front door to
497
497
  // the providers modal is /health provider (see sub === 'provider'
498
498
  // above), so that is what this hint names.
499
- ' see also: the providers modal — /health provider',
499
+ ' see also: the providers modal; /health provider',
500
500
  ` session: ${snapshot.sessionId}`,
501
501
  ` setup issues: ${snapshot.issues.length}`,
502
502
  ` service issues: ${snapshot.serviceIssues.length}`,
@@ -1,10 +1,10 @@
1
1
  /**
2
- * hosted-runtime.ts — `/hosted`, the front door to a conversation the DAEMON
2
+ * hosted-runtime.ts, `/hosted`, the front door to a conversation the DAEMON
3
3
  * runs.
4
4
  *
5
5
  * Local sessions are unchanged and remain the default experience: a turn typed
6
6
  * into the composer runs in this process, exactly as it always has. `/hosted`
7
- * is the opt-in — it asks the daemon to compose the same loop on its side, so
7
+ * is the opt-in, it asks the daemon to compose the same loop on its side, so
8
8
  * the conversation does not depend on this window staying open.
9
9
  *
10
10
  * ── The subcommands, and why they are these ───────────────────────────────
@@ -18,7 +18,7 @@
18
18
  * /hosted say <text…> steer the attached session (ordinary verb)
19
19
  * /hosted later <text…> queue a follow-up (ordinary verb)
20
20
  * /hosted cancel [callId] cancel one in-flight tool call (ordinary verb)
21
- * /hosted detach leave — the policy the record names then applies
21
+ * /hosted detach leave, the policy the record names then applies
22
22
  * /hosted kill [id] end it regardless of policy
23
23
  *
24
24
  * There is no `/hosted steer` beside `say` and no hosted-only cancel: those
@@ -54,7 +54,7 @@ let lastListedIds: readonly string[] = [];
54
54
  export function renderHostedRecordLine(record: HostedSessionRecord, index: number): string {
55
55
  const attached = record.attachedClients.length > 0 ? record.attachedClients.join(', ') : 'nobody';
56
56
  const ended = record.status === 'terminated'
57
- ? ` — ended: ${record.terminatedReason ?? 'no reason recorded'}`
57
+ ? `: ended: ${record.terminatedReason ?? 'no reason recorded'}`
58
58
  : '';
59
59
  return [
60
60
  ` ${index + 1}. ${hostedSessionLabel(record)} [${record.status}]${ended}`,
@@ -84,7 +84,7 @@ export function renderHostedStatus(feed: HostedSessionFeed): string {
84
84
  ` ${record.turnCount} turn(s), ${record.messageCount} message(s)`,
85
85
  state.streaming
86
86
  ? ' live event stream open'
87
- : ` no live stream — ${state.streamNote ?? 'not subscribed'}`,
87
+ : ` no live stream: ${state.streamNote ?? 'not subscribed'}`,
88
88
  state.runningToolCalls.length > 0
89
89
  ? ` running: ${state.runningToolCalls.map((call) => `${call.tool} (${call.callId})`).join(', ')}`
90
90
  : ' no tool call is running',
@@ -248,7 +248,7 @@ export function registerHostedRuntimeCommands(registry: CommandRegistry): void {
248
248
  const records = await seams.client.list({ includeTerminated });
249
249
  lastListedIds = records.map((record) => record.id);
250
250
  // The session picker reads the same roster, so a list typed here is
251
- // the list it shows — one answer, not two that drift.
251
+ // the list it shows, one answer, not two that drift.
252
252
  if (!includeTerminated) getSharedHostedSessionRoster().accept(records);
253
253
  if (records.length === 0) {
254
254
  ctx.print(includeTerminated
@@ -272,14 +272,14 @@ export function registerHostedRuntimeCommands(registry: CommandRegistry): void {
272
272
  }
273
273
  case 'say':
274
274
  case 'later': {
275
- if (!attachedId) { ctx.print('[hosted] no hosted session is attached — /hosted attach <id> first.'); return; }
275
+ if (!attachedId) { ctx.print('[hosted] no hosted session is attached; /hosted attach <id> first.'); return; }
276
276
  const body = args.slice(1).join(' ').trim();
277
277
  if (!body) { ctx.print(`Usage: /hosted ${sub} <text>`); return; }
278
278
  if (sub === 'say') await seams.client.steer(attachedId, body);
279
279
  else await seams.client.followUp(attachedId, body);
280
280
  ctx.print(sub === 'say'
281
- ? '[hosted] sent — its output arrives on the Hosted Session panel.'
282
- : '[hosted] queued — it runs after the current turn.');
281
+ ? '[hosted] sent: its output arrives on the Hosted Session panel.'
282
+ : '[hosted] queued: it runs after the current turn.');
283
283
  return;
284
284
  }
285
285
  case 'cancel': {
@@ -290,7 +290,7 @@ export function registerHostedRuntimeCommands(registry: CommandRegistry): void {
290
290
  const cancelled = await seams.client.cancelToolCall(attachedId, callId);
291
291
  ctx.print(cancelled
292
292
  ? `[hosted] cancelled tool call ${callId}.`
293
- : `[hosted] the daemon did not cancel ${callId} — it may have already settled.`);
293
+ : `[hosted] the daemon did not cancel ${callId}; it may have already settled.`);
294
294
  return;
295
295
  }
296
296
  case 'detach': {
@@ -298,8 +298,8 @@ export function registerHostedRuntimeCommands(registry: CommandRegistry): void {
298
298
  const record = await seams.client.detach(attachedId);
299
299
  feed.clear();
300
300
  ctx.print(record.status === 'terminated'
301
- ? `[hosted] detached — the session ended (${record.terminatedReason ?? 'no reason recorded'}), which is what its detach policy said would happen.`
302
- : '[hosted] detached — the session is still running in the daemon and can be reattached.');
301
+ ? `[hosted] detached: the session ended (${record.terminatedReason ?? 'no reason recorded'}), which is what its detach policy said would happen.`
302
+ : '[hosted] detached: the session is still running in the daemon and can be reattached.');
303
303
  return;
304
304
  }
305
305
  case 'kill': {
@@ -307,7 +307,7 @@ export function registerHostedRuntimeCommands(registry: CommandRegistry): void {
307
307
  if (!target) { ctx.print('Usage: /hosted kill <id> (or attach one first)'); return; }
308
308
  const record = await seams.client.kill(target);
309
309
  if (target === attachedId) feed.clear();
310
- ctx.print(`[hosted] ended ${hostedSessionLabel(record)} — ${record.terminatedReason ?? 'no reason recorded'}.`);
310
+ ctx.print(`[hosted] ended ${hostedSessionLabel(record)}: ${record.terminatedReason ?? 'no reason recorded'}.`);
311
311
  return;
312
312
  }
313
313
  default:
@@ -4,17 +4,17 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
4
4
  /**
5
5
  * registerImageRuntimeCommands - `/imagine <prompt>`.
6
6
  *
7
- * Named 'imagine', not 'image' — `/image <path> [prompt]` already exists
7
+ * Named 'imagine', not 'image', `/image <path> [prompt]` already exists
8
8
  * (local-runtime.ts) and does something entirely different (attach a local
9
9
  * image file to the next message). Re-verified against the current registry
10
10
  * before wiring this in: the brief that scoped this command was written
11
11
  * before checking for the collision.
12
12
  *
13
- * First production caller of MediaProviderRegistry.generate() — the SDK
13
+ * First production caller of MediaProviderRegistry.generate(), the SDK
14
14
  * plumbing existed with zero non-test call sites before this command.
15
15
  * findProvider('generate') returns whichever generation-capable provider is
16
16
  * configured; when none are, the command prints the registry's own
17
- * per-provider status (id/state/detail) verbatim — those detail strings
17
+ * per-provider status (id/state/detail) verbatim, those detail strings
18
18
  * already name the exact env var per builtin provider
19
19
  * (builtin-generation-providers.ts's buildStatus()), so this command never
20
20
  * has to (and never should) guess or hardcode an env-var name itself.
@@ -48,7 +48,7 @@ export function registerImageRuntimeCommands(registry: CommandRegistry): void {
48
48
  lines.push('No media-generation providers are registered in this build.');
49
49
  } else {
50
50
  for (const status of generationStatuses) {
51
- lines.push(` ${status.id} (${status.label}): ${status.state}${status.detail ? ` — ${status.detail}` : ''}`);
51
+ lines.push(` ${status.id} (${status.label}): ${status.state}${status.detail ? `; ${status.detail}` : ''}`);
52
52
  }
53
53
  }
54
54
  ctx.print(lines.join('\n'));
@@ -70,7 +70,7 @@ export function registerImageRuntimeCommands(registry: CommandRegistry): void {
70
70
  const lines = [`Generated ${result.artifacts.length} artifact(s) via ${provider.label} (${result.providerId}).`];
71
71
  for (const artifact of result.artifacts) {
72
72
  if (!artifact.mimeType.startsWith('image/')) {
73
- lines.push(` Note: ${provider.label} produced ${artifact.mimeType}, not an image — no image-capable provider is configured in this build.`);
73
+ lines.push(` Note: ${provider.label} produced ${artifact.mimeType}, not an image; no image-capable provider is configured in this build.`);
74
74
  }
75
75
  if (artifact.dataBase64) {
76
76
  const descriptor = await artifactStore.create({
@@ -97,7 +97,7 @@ export function registerImageRuntimeCommands(registry: CommandRegistry): void {
97
97
  sourceUri: artifact.uri,
98
98
  metadata: { ...artifact.metadata, generatedBy: result.providerId, remote: true },
99
99
  });
100
- lines.push(` artifact: ${descriptor.id} (remote reference — not downloaded)`);
100
+ lines.push(` artifact: ${descriptor.id} (remote reference; not downloaded)`);
101
101
  lines.push(` url: ${artifact.uri}`);
102
102
  } else {
103
103
  lines.push(' artifact: (no retrievable content returned)');
@@ -56,11 +56,11 @@ export function registerIntelligenceRuntimeCommands(registry: CommandRegistry):
56
56
  const sub = (args[0] ?? 'review').toLowerCase();
57
57
  if (sub === 'panel' || sub === 'open') {
58
58
  // (the purge): 'intelligence'/IntelligencePanel was
59
- // DELETE-disposition (no surviving human surface — its read model
59
+ // DELETE-disposition (no surviving human surface, its read model
60
60
  // stays and still backs every subcommand below). There is no alias
61
61
  // to resolve through, so this prints an honest notice and opens
62
62
  // Fleet instead of throwing "Unknown panel".
63
- ctx.print('Intelligence panel retired — use /intelligence review|diagnostics|symbols|outline|definition|references|hover|repair for the live data. Opening Fleet.');
63
+ ctx.print('Intelligence panel retired: use /intelligence review|diagnostics|symbols|outline|definition|references|hover|repair for the live data. Opening Fleet.');
64
64
  try {
65
65
  openCommandPanel(ctx, 'fleet');
66
66
  } catch {
@@ -12,7 +12,7 @@ export function handleLocalAuthCommand(args: string[], ctx: CommandContext): voi
12
12
  if (sub === 'panel' || sub === 'open') {
13
13
  // browse view moved to local-auth-modal. The LocalAuthPanel itself is
14
14
  // kept (masked password-entry host) but is no longer the /local-auth panel
15
- // destination — masked entry is reached via add-user/rotate-password below.
15
+ // destination, masked entry is reached via add-user/rotate-password below.
16
16
  ctx.openModal?.('local-auth-modal');
17
17
  return;
18
18
  }
@@ -25,7 +25,7 @@ export function handleLocalAuthCommand(args: string[], ctx: CommandContext): voi
25
25
  return;
26
26
  }
27
27
  if (!password) {
28
- // No password supplied — open masked-entry mode on the LocalAuthPanel.
28
+ // No password supplied, open masked-entry mode on the LocalAuthPanel.
29
29
  if (ctx.openLocalAuthMaskedEntry) {
30
30
  ctx.openLocalAuthMaskedEntry('add-user', username);
31
31
  } else {
@@ -68,7 +68,7 @@ export function handleLocalAuthCommand(args: string[], ctx: CommandContext): voi
68
68
  return;
69
69
  }
70
70
  if (!password) {
71
- // No password supplied — open masked-entry mode on the LocalAuthPanel.
71
+ // No password supplied, open masked-entry mode on the LocalAuthPanel.
72
72
  if (ctx.openLocalAuthMaskedEntry) {
73
73
  ctx.openLocalAuthMaskedEntry('rotate-password', username);
74
74
  } else {
@@ -69,7 +69,7 @@ export function registerLocalProviderRuntimeCommands(registry: CommandRegistry):
69
69
  }
70
70
  }
71
71
  } catch {
72
- ctx.print(`Could not reach ${baseURL}/models — creating provider with a minimal starter config.`);
72
+ ctx.print(`Could not reach ${baseURL}/models: creating provider with a minimal starter config.`);
73
73
  }
74
74
 
75
75
  let contextWindows: Record<string, number> = {};
@@ -117,7 +117,7 @@ export function registerLocalProviderRuntimeCommands(registry: CommandRegistry):
117
117
  }
118
118
  ctx.print(`Provider '${name}' added with ${models.length} model(s):\n${discoveredModelIds.length > 0 ? discoveredModelIds.map((id) => ` • ${id} (${(contextWindows[id] ?? 8192).toLocaleString()} ctx)`).join('\n') : ` • ${defaultModel} (starter entry)`}\nThe file watcher will auto-register it shortly.`);
119
119
  // Capture the key with the keystrokes masked, straight into the secrets
120
- // manager — never a cleartext argument, never written into the JSON.
120
+ // manager, never a cleartext argument, never written into the JSON.
121
121
  if (ctx.beginConcealedInput) {
122
122
  const secretsManager = requireSecretsManager(ctx);
123
123
  ctx.print(`Enter the API key for provider '${name}' (input is masked; press Enter to store, Esc to skip if the endpoint needs no key).`);
@@ -139,7 +139,7 @@ export function registerLocalProviderRuntimeCommands(registry: CommandRegistry):
139
139
  // has to reach the daemon tier or a locally-hosted endpoint
140
140
  // is usable only while this TUI is open.
141
141
  await secretsManager.set(keyName, value, { scope: 'daemon', medium: 'secure' });
142
- ctx.print(`Stored the API key for '${name}' (value hidden). It resolves live for this provider — no restart needed.`);
142
+ ctx.print(`Stored the API key for '${name}' (value hidden). It resolves live for this provider; no restart needed.`);
143
143
  } catch (error) {
144
144
  ctx.print(`Could not store the key for '${name}': ${summarizeError(error)}`);
145
145
  }
@@ -37,7 +37,7 @@ function toggleBlocks(typeFilter: string, collapsed: boolean, ctx: CommandContex
37
37
  // A merged assistant turn (type 'assistant_turn', see
38
38
  // conversation-turn-structure.ts) owns the whole tool subtree beneath its
39
39
  // header, so '/expand tool'/'collapse tool' treats it the same as a plain
40
- // 'tool' block — toggling the header's collapse key shows or hides every
40
+ // 'tool' block, toggling the header's collapse key shows or hides every
41
41
  // tool row underneath it.
42
42
  const matchesType = typeFilter === 'all'
43
43
  || (typeFilter === 'tool' && (block.type === 'tool' || block.type === 'assistant_turn'))
@@ -50,7 +50,7 @@ function toggleBlocks(typeFilter: string, collapsed: boolean, ctx: CommandContex
50
50
  // Expanding a turn also expands each result's own collapse key in the
51
51
  // same pass. A result hidden by a collapsed turn pushes no BlockMeta of
52
52
  // its own, so it never surfaces from this loop to be toggled
53
- // individually — without this, '/expand tool' would only open the turn
53
+ // individually, without this, '/expand tool' would only open the turn
54
54
  // header and each result would still render at its own default collapse
55
55
  // state, needing a second pass. '/collapse tool' needs no matching step:
56
56
  // collapsing the turn hides every result regardless of its own key.
@@ -59,7 +59,7 @@ function toggleBlocks(typeFilter: string, collapsed: boolean, ctx: CommandContex
59
59
  const memberKey = `msg_${memberIdx}`;
60
60
  ctx.session.conversationManager.setCollapsed(memberKey, false);
61
61
  // An explicit /expand is a deliberate user action on this key, same
62
- // as Tab/Ctrl+Y/Ctrl+B — exempts it from search's close-time
62
+ // as Tab/Ctrl+Y/Ctrl+B, exempts it from search's close-time
63
63
  // auto-re-collapse (see ConversationManager.noteUserTouch).
64
64
  ctx.session.conversationManager.searchExpansion.noteUserTouch(memberKey);
65
65
  }
@@ -88,17 +88,17 @@ export function registerLocalRuntimeCommands(registry: CommandRegistry): void {
88
88
  registry.register({
89
89
  name: 'tools',
90
90
  aliases: ['t'],
91
- description: 'List available tools and review compact native tool capability surfaces',
91
+ description: 'List available tools and review compact native tool capabilities',
92
92
  usage: '[review|panel]',
93
93
  handler(args, ctx) {
94
94
  const sub = (args[0] ?? '').toLowerCase();
95
95
  if (sub === 'panel' || sub === 'review') {
96
96
  // (the purge): 'tools'/ToolInspectorPanel was DELETE-disposition
97
- // (no surviving human surface — tool results render inline in the
97
+ // (no surviving human surface, tool results render inline in the
98
98
  // transcript, plus a per-node tool list in Fleet). There is no alias
99
99
  // to resolve through, so this prints an honest notice and opens
100
100
  // Fleet instead of the retired inspector.
101
- ctx.print('Tools panel retired — tool activity now renders inline in the transcript and per-agent in the Fleet panel. Opening Fleet.');
101
+ ctx.print('Tools panel retired: tool activity now renders inline in the transcript and per-agent in the Fleet panel. Opening Fleet.');
102
102
  try {
103
103
  openCommandPanel(ctx, 'fleet');
104
104
  } catch {
@@ -407,7 +407,7 @@ export function registerLocalRuntimeCommands(registry: CommandRegistry): void {
407
407
  } catch (e) {
408
408
  ctx.print(`Live model discovery failed: ${summarizeError(e)}`);
409
409
  }
410
- if (!catalogOk || !benchmarksOk || !limitsOk || !discoveryOk) ctx.print('Some refreshes failed — see messages above.');
410
+ if (!catalogOk || !benchmarksOk || !limitsOk || !discoveryOk) ctx.print('Some refreshes failed: see messages above.');
411
411
  },
412
412
  });
413
413
 
@@ -1,12 +1,12 @@
1
1
  /**
2
- * mail-runtime.ts — `/mail`, the terminal surface over the daemon's mail
2
+ * mail-runtime.ts, `/mail`, the terminal surface over the daemon's mail
3
3
  * capability.
4
4
  *
5
5
  * This command implements no mail. Every verb here is one call into the
6
6
  * gateway method catalog, where `src/daemon/handlers/email/` owns IMAP, SMTP,
7
7
  * settings resolution, the credential read, and the confirmation gate. What
8
8
  * lives in this file is argument parsing, rendering, and an honest refusal when
9
- * the capability is not set up — nothing else.
9
+ * the capability is not set up, nothing else.
10
10
  *
11
11
  * ## What is exposed, and what is not
12
12
  *
@@ -14,8 +14,8 @@
14
14
  * without leaving the terminal is squarely what this product is for, and
15
15
  * because a draft changes nothing outside the account's own Drafts folder.
16
16
  *
17
- * Sending is exposed too — a shipped route with no way to reach it is a route
18
- * that is not wired up — but never in one step. `/mail send` first renders
17
+ * Sending is exposed too, a shipped route with no way to reach it is a route
18
+ * that is not wired up, but never in one step. `/mail send` first renders
19
19
  * exactly what would leave the machine and stops; only a re-run carrying
20
20
  * `--confirm` sets both flags the daemon's gate demands. That mirrors the
21
21
  * preview-then-confirm shape `/review` uses for hunk reverts, and it means the
@@ -65,12 +65,12 @@ function truncate(value: string, width: number): string {
65
65
 
66
66
  export function renderInboxList(messages: readonly InboxMessage[]): string {
67
67
  if (messages.length === 0) return 'Inbox is empty (nothing matched).';
68
- const lines = [`Inbox — ${messages.length} message${messages.length === 1 ? '' : 's'}:`];
68
+ const lines = [`Inbox: ${messages.length} message${messages.length === 1 ? '' : 's'}:`];
69
69
  for (const message of messages) {
70
70
  const mark = message.unread ? '●' : ' ';
71
71
  lines.push(` ${mark} ${String(message.uid).padStart(6)} ${truncate(message.from, 28).padEnd(28)} ${truncate(message.subject, 48)}`);
72
72
  }
73
- lines.push('', ' /mail read <uid> — open one message');
73
+ lines.push('', ' /mail read <uid>: open one message');
74
74
  return lines.join('\n');
75
75
  }
76
76
 
@@ -191,7 +191,7 @@ async function listInbox(ctx: CommandContext, gateway: Gateway, limit: number, w
191
191
  ctx.print(renderConnectionStatus({
192
192
  surface: 'mail',
193
193
  state: 'ready',
194
- detail: 'Mail is connected — the daemon reached the server and returned a result.',
194
+ detail: 'Mail is connected: the daemon reached the server and returned a result.',
195
195
  nextActions: [],
196
196
  }));
197
197
  }
@@ -202,7 +202,7 @@ async function listInbox(ctx: CommandContext, gateway: Gateway, limit: number, w
202
202
  async function readMessage(ctx: CommandContext, gateway: Gateway, rawUid: string | undefined): Promise<void> {
203
203
  const uid = Number(rawUid);
204
204
  if (!Number.isFinite(uid) || uid <= 0) {
205
- ctx.print('Usage: /mail read <uid> — the uid column from /mail list.');
205
+ ctx.print('Usage: /mail read <uid>; the uid column from /mail list.');
206
206
  return;
207
207
  }
208
208
  await withStatusOnFailure(ctx, gateway, 'read', async () => {
@@ -221,7 +221,7 @@ async function compose(ctx: CommandContext, gateway: Gateway, verb: 'draft' | 's
221
221
  if (parsed === null) {
222
222
  ctx.print([
223
223
  `Usage: /mail ${verb} <to | subject | body>`,
224
- ' Three fields separated by | — for example:',
224
+ ' Three fields separated by |, for example:',
225
225
  ` /mail ${verb} me@example.com | Build is green | All gates passed.`,
226
226
  ].join('\n'));
227
227
  return;
@@ -184,7 +184,7 @@ export function registerMcpRuntimeCommands(registry: CommandRegistry): void {
184
184
  lines.push(`\n [${tool.serverName}]`);
185
185
  lastServer = tool.serverName;
186
186
  }
187
- lines.push(` ${tool.toolName}${tool.description ? ` — ${tool.description}` : ''}`);
187
+ lines.push(` ${tool.toolName}${tool.description ? `: ${tool.description}` : ''}`);
188
188
  }
189
189
  ctx.print(lines.join('\n'));
190
190
  return;
@@ -3,14 +3,14 @@
3
3
  *
4
4
  * Implements the Project Memory Substrate commands:
5
5
  *
6
- * /recall add <class> <summary> — Add a new memory record
6
+ * /recall add <class> <summary> , Add a new memory record
7
7
  * /recall add <class> <summary> --detail <text> --tags <tag,tag>
8
- * /recall search [query] — Search memory records
9
- * /recall search --cls <class> — Filter by class
10
- * /recall link <fromId> <toId> <relation> — Link two records
11
- * /recall get <id> — Show a single record with provenance
12
- * /recall list [class] — List all records (optionally by class)
13
- * /recall remove <id> — Delete a record
8
+ * /recall search [query] , Search memory records
9
+ * /recall search --cls <class> , Filter by class
10
+ * /recall link <fromId> <toId> <relation>, Link two records
11
+ * /recall get <id> , Show a single record with provenance
12
+ * /recall list [class] , List all records (optionally by class)
13
+ * /recall remove <id> , Delete a record
14
14
  */
15
15
 
16
16
  import type { SlashCommand, CommandContext } from '../command-registry.ts';
@@ -27,17 +27,17 @@ import { handleRecallFilesApply, handleRecallFilesReview, handleRecallFilesSync
27
27
  * item 3 divergence note (historical): the work order that shipped
28
28
  * this command named its front door "/memory", but at the time `/memory` was
29
29
  * already a distinct, unrelated command (session-pinned sticky notes,
30
- * src/input/commands/session-content.ts) with no modal surface — so that
30
+ * src/input/commands/session-content.ts) with no modal surface, so that
31
31
  * work order deliberately did NOT touch /memory and used /recall instead.
32
32
  *
33
- * Update from the core-verb naming pass (MEMORY fragmentation — worst-class
33
+ * Update from the core-verb naming pass (MEMORY fragmentation, worst-class
34
34
  * collision #2): the agent's own `/memory` command was a plain alias for its
35
35
  * `/recall`-equivalent the whole time, meaning "/memory" meant two unrelated
36
36
  * things depending which surface you were on. The session-notes command was
37
37
  * renamed to `/note` (session-content.ts) to free the word, and `/memory` is
38
- * now registered here as a real alias of `/recall` — the word means the same
38
+ * now registered here as a real alias of `/recall`, the word means the same
39
39
  * durable Project Memory Substrate on both surfaces. The modal that exists
40
- * for this data — the Project Memory Substrate — is still `memory-modal.ts`,
40
+ * for this data, the Project Memory Substrate, is still `memory-modal.ts`,
41
41
  * owned by THIS command, confirmed by the panel-id redirect
42
42
  * `registerModalRedirect('memory', 'memory-modal')` in builtin-modals.ts.
43
43
  */
@@ -79,12 +79,12 @@ export const recallCommand: SlashCommand = {
79
79
  name: 'recall',
80
80
  aliases: ['rc', 'memory', 'mem'],
81
81
  description: 'Bare opens the Memory modal; project memory subcommands add decisions, constraints, incidents, and patterns with provenance',
82
- usage: '[<subcommand> [args]] — bare opens the modal; report prints the subcommand usage text',
82
+ usage: '[<subcommand> [args]]: bare opens the modal; report prints the subcommand usage text',
83
83
  argsHint: 'add|search|link|get|list|remove|report',
84
84
  handler: async (args: string[], context: CommandContext): Promise<void> => {
85
85
  const [sub, ...rest] = args;
86
86
 
87
- // item 3: bare `/recall` opens the memory-modal surface — the old
87
+ // item 3: bare `/recall` opens the memory-modal surface, the old
88
88
  // bare/unknown-subcommand usage block moved to an explicit `report`
89
89
  // subcommand (scriptability preserved: /recall report).
90
90
  if (sub === undefined) {
@@ -73,7 +73,7 @@ export function registerNotifyRuntimeCommands(registry: CommandRegistry): void {
73
73
  ctx.print(`Testing ${urls.length} webhook${urls.length !== 1 ? 's' : ''}...`);
74
74
  notifier.setUrls(urls);
75
75
  const results = await notifier.test();
76
- ctx.print(results.map((r) => r.ok ? ` [ok] ${r.url}` : ` [fail] ${r.url} — ${r.error ?? 'unknown error'}`).join('\n'));
76
+ ctx.print(results.map((r) => r.ok ? ` [ok] ${r.url}` : ` [fail] ${r.url}: ${r.error ?? 'unknown error'}`).join('\n'));
77
77
  return;
78
78
  }
79
79
 
@@ -8,7 +8,7 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
8
8
  * [top|bottom]` (item 4). Splits the args array in place (removing the
9
9
  * flag + its value) so positional `pane` parsing downstream is unaffected by
10
10
  * where the flag appears. Only `open fleet` currently has a deep-link
11
- * consumer (FleetPanel.receiveDeepLink) — other panel ids just ignore an
11
+ * consumer (FleetPanel.receiveDeepLink), other panel ids just ignore an
12
12
  * unused target via PanelManager's optional-chaining delivery.
13
13
  */
14
14
  function extractTargetFlag(rest: string[]): PanelDeepLinkTarget | undefined {
@@ -33,7 +33,7 @@ export function registerOperatorPanelCommand(registry: CommandRegistry): void {
33
33
  const sub = args[0]?.toLowerCase() ?? '';
34
34
  if (!sub || sub === 'toggle') {
35
35
  // (the purge): 'panel-list' (the browse-all-panels picker) was
36
- // DELETE-disposition — a picker over a handful of panels is dead
36
+ // DELETE-disposition, a picker over a handful of panels is dead
37
37
  // weight now (see the Ctrl+P selectionModal repoint in
38
38
  // shell/ui-openers.ts for its interactive replacement). Bare
39
39
  // `/panel` and `/panel toggle` now do what "toggle" actually means:
@@ -43,7 +43,7 @@ export function registerOperatorPanelCommand(registry: CommandRegistry): void {
43
43
  pm.toggle();
44
44
  ctx.renderRequest();
45
45
  } else if (sub === 'list') {
46
- // Print a text listing instead of opening a picker panel — grouped
46
+ // Print a text listing instead of opening a picker panel, grouped
47
47
  // by category from the live registry, so this can never drift from
48
48
  // what's actually registered.
49
49
  const byCategory = pm.getTypesByCategory();
@@ -51,7 +51,7 @@ export function registerOperatorPanelCommand(registry: CommandRegistry): void {
51
51
  for (const [category, entries] of byCategory) {
52
52
  lines.push(`${category}:`);
53
53
  for (const entry of entries) {
54
- lines.push(` ${entry.icon} ${entry.id} — ${entry.name}`);
54
+ lines.push(` ${entry.icon} ${entry.id}: ${entry.name}`);
55
55
  }
56
56
  }
57
57
  ctx.print(lines.length > 0 ? lines.join('\n') : 'No panels registered.');
@@ -72,7 +72,7 @@ export function registerOperatorPanelCommand(registry: CommandRegistry): void {
72
72
  // claiming "Panel opened: <id>".
73
73
  const redirectTarget = pm.getModalRedirect(id);
74
74
  // focus rule 1a: the command path leaves focus in the composer
75
- // ("mid-command-flow") — showPanel does not grab panel focus here.
75
+ // ("mid-command-flow"), showPanel does not grab panel focus here.
76
76
  // forward the deep-link target so the panel lands on the row.
77
77
  if (ctx.showPanel) ctx.showPanel(id, pane as 'top' | 'bottom' | undefined, target);
78
78
  else {
@@ -81,13 +81,13 @@ export function registerOperatorPanelCommand(registry: CommandRegistry): void {
81
81
  ctx.renderRequest();
82
82
  }
83
83
  if (redirectTarget) {
84
- ctx.print(`"${id}" moved to the ${redirectTarget} modal — opening it.`);
84
+ ctx.print(`"${id}" moved to the ${redirectTarget} modal; opening it.`);
85
85
  } else {
86
86
  ctx.print(`Panel opened: ${id}${pane ? ` (${pane} pane)` : ''}`);
87
87
  }
88
88
  } catch (e) {
89
89
  // A deleted/unknown panel id throws "No panel type registered with
90
- // id: <id>" from PanelManager.open — surface the same friendly line
90
+ // id: <id>" from PanelManager.open, surface the same friendly line
91
91
  // the bare-/panel path uses instead of leaking the raw error. Any
92
92
  // genuinely unexpected failure still shows its real message.
93
93
  const message = summarizeError(e);
@@ -170,7 +170,7 @@ export function registerOperatorPanelCommand(registry: CommandRegistry): void {
170
170
  const id = args[0]!;
171
171
  try {
172
172
  // bare `/panel <id>` is the same command path as `/panel open
173
- // <id>` — composer stays focused.
173
+ // <id>`, composer stays focused.
174
174
  if (ctx.showPanel) ctx.showPanel(id);
175
175
  else {
176
176
  pm.open(id);
@@ -1,10 +1,10 @@
1
1
  /**
2
- * operator-rpc.ts — the command layer's handle on the daemon.
2
+ * operator-rpc.ts, the command layer's handle on the daemon.
3
3
  *
4
4
  * The resolution itself (is the daemon enabled, what base URL, what bearer)
5
5
  * moved to runtime/client/operator-endpoint.ts when the terminal app became a
6
- * pure client: the runtime seams — approvals, config, credentials, sessions,
7
- * fleet, tasks, devices, checkpoints — all need the same answer, and two copies
6
+ * pure client: the runtime seams, approvals, config, credentials, sessions,
7
+ * fleet, tasks, devices, checkpoints, all need the same answer, and two copies
8
8
  * of it is how one call ended up on a DirectTransport while another made a real
9
9
  * request. This module keeps the command-context-shaped entry point and
10
10
  * re-exports the rest so no command import site had to change.
@@ -66,9 +66,9 @@ export function registerOperatorRuntimeCommands(registry: CommandRegistry): void
66
66
  registry.register({
67
67
  name: 'profiles',
68
68
  // The singular `profile` alias was given up to /profile, the owner profile
69
- // (docs/owner-profile.md). These are two unrelated things — this command
69
+ // (docs/owner-profile.md). These are two unrelated things, this command
70
70
  // loads saved display/provider settings presets, and the other one is what
71
- // the platform knows about the person who owns it — and the singular word
71
+ // the platform knows about the person who owns it, and the singular word
72
72
  // now belongs to the second. `/profiles` is unchanged; only the abbreviation
73
73
  // moved. See the naming note in docs/owner-profile.md §3.
74
74
  description: 'Browse and load config profiles',
@@ -254,7 +254,7 @@ export function registerOperatorRuntimeCommands(registry: CommandRegistry): void
254
254
 
255
255
  registry.register({
256
256
  name: 'tool',
257
- description: 'Tool contract verification — verify registered tool contracts',
257
+ description: 'Verify registered tool contracts',
258
258
  usage: 'verify <name> | verify-all | contract show <name>',
259
259
  argsHint: 'verify <name> | verify-all | contract show <name>',
260
260
  handler(args, ctx) {
@@ -1,7 +1,7 @@
1
1
  import type { CommandRegistry } from '../command-registry.ts';
2
2
 
3
3
  /**
4
- * /palette — open the fuzzy command palette, a searchable picker over every
4
+ * /palette, open the fuzzy command palette, a searchable picker over every
5
5
  * registered slash command. The palette itself is generated live from the
6
6
  * registry (see openCommandPalette in shell/ui-openers.ts); this command is
7
7
  * just the discoverable front door, mirroring the Ctrl+K chord.