@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
@@ -1,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // gist-uploader — upload export content to a GitHub Gist
2
+ // gist-uploader, upload export content to a GitHub Gist
3
3
  // ---------------------------------------------------------------------------
4
4
  //
5
5
  // Architecture: UploadTarget interface with a single GistUploadTarget
@@ -7,12 +7,12 @@
7
7
  // UploadTarget without changing the caller in share-runtime.
8
8
  //
9
9
  // Token resolution:
10
- // 1. serviceRegistry.resolveAuth('github') — standard service registry path
10
+ // 1. serviceRegistry.resolveAuth('github'), standard service registry path
11
11
  // (configured via .goodvibes/tui/services.json with tokenKey: GITHUB_TOKEN)
12
12
  // 2. process.env.GITHUB_TOKEN fallback
13
13
  // 3. No token → honest guidance; no upload.
14
14
  //
15
- // Privacy: Gist is created as secret=true (unlisted, not private — anyone with
15
+ // Privacy: Gist is created as secret=true (unlisted, not private, anyone with
16
16
  // the URL can view it).
17
17
  // ---------------------------------------------------------------------------
18
18
 
@@ -23,7 +23,7 @@ export type UploadResult =
23
23
  | { ok: false; error: string };
24
24
 
25
25
  /**
26
- * UploadTarget — interface for pluggable export upload backends.
26
+ * UploadTarget, interface for pluggable export upload backends.
27
27
  * Future HTTP PUT / other targets implement this.
28
28
  */
29
29
  export interface UploadTarget {
@@ -41,7 +41,7 @@ export interface GistUploaderOptions {
41
41
  }
42
42
 
43
43
  /**
44
- * resolveGithubToken — try auth header map then env var.
44
+ * resolveGithubToken, try auth header map then env var.
45
45
  * Returns undefined when no token is available.
46
46
  */
47
47
  export function resolveGithubToken(
@@ -65,7 +65,7 @@ export function resolveGithubToken(
65
65
  }
66
66
 
67
67
  /**
68
- * GistUploadTarget — uploads content to a secret (unlisted) GitHub Gist.
68
+ * GistUploadTarget, uploads content to a secret (unlisted) GitHub Gist.
69
69
  */
70
70
  export class GistUploadTarget implements UploadTarget {
71
71
  private readonly token: string;
@@ -127,7 +127,7 @@ export class GistUploadTarget implements UploadTarget {
127
127
  }
128
128
 
129
129
  /**
130
- * noTokenGuidance — message printed when no GitHub PAT is found.
130
+ * noTokenGuidance, message printed when no GitHub PAT is found.
131
131
  */
132
132
  export const NO_TOKEN_GUIDANCE = [
133
133
  'No GitHub token found for --upload.',
@@ -20,7 +20,7 @@ export interface AutocompleteState {
20
20
  selectedIndex: number;
21
21
  /**
22
22
  * (item 4): how many leading entries of `results` belong to the
23
- * curated "common" tier — only meaningful when `query === ''` (0
23
+ * curated "common" tier, only meaningful when `query === ''` (0
24
24
  * otherwise, since a typed filter searches everything and the common/rest
25
25
  * split no longer applies). The renderer uses this to draw a separator
26
26
  * before the alphabetical rest.
@@ -57,11 +57,11 @@ export class AutocompleteEngine {
57
57
  this.state.results = this.registry.fuzzyMatch(query);
58
58
  this.state.active = true;
59
59
  // fuzzyMatch('') sorts the curated common tier first (score 2),
60
- // then the alphabetical rest (score 1) — both tiers alphabetical within
60
+ // then the alphabetical rest (score 1), both tiers alphabetical within
61
61
  // themselves. Count the leading common run to tell the renderer where to
62
62
  // draw the separator. A non-empty query means every command was scored on
63
63
  // its actual match quality, not tier, so the common/rest split does not
64
- // apply — the resulting 0 is not a real answer to "how many are common"
64
+ // apply, the resulting 0 is not a real answer to "how many are common"
65
65
  // and is unused because renderAutocompleteOverlay itself gates on the
66
66
  // query string too, but zeroing here keeps the field internally honest.
67
67
  let commonCount = 0;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * BookmarkModal — state management for the /bookmarks command modal.
2
+ * BookmarkModal, state management for the /bookmarks command modal.
3
3
  *
4
4
  * Lists bookmarks from BookmarkManager and tracks UI state:
5
5
  * selected index, scroll offset, and pending action.
@@ -4,8 +4,8 @@ import { CLUSTER_SUBCOMMAND_ARG_HINTS } from './commands/cluster-runtime.ts';
4
4
 
5
5
  /**
6
6
  * Per-command subcommand → argument-hint maps. `session`'s entries come
7
- * straight from session.ts (SESSION_SUBCOMMAND_ARG_HINTS) — the same table
8
- * the `/session` switch itself is built from — so the two can never drift
7
+ * straight from session.ts (SESSION_SUBCOMMAND_ARG_HINTS), the same table
8
+ * the `/session` switch itself is built from, so the two can never drift
9
9
  * apart; the others are hand-maintained here since they're small and their
10
10
  * owning modules don't export an equivalent table. A drift test
11
11
  * (src/test/input/command-args-hint.test.ts) checks every top-level key
@@ -1,12 +1,12 @@
1
1
  /**
2
- * command-reference.ts — pure renderer for the generated slash-command
2
+ * command-reference.ts, pure renderer for the generated slash-command
3
3
  * reference (docs/commands-reference.md).
4
4
  *
5
5
  * The reference is generated from the live command registry (via
6
6
  * {@link categorizeBuiltinCommands} in ./commands.ts), never hand-maintained.
7
7
  * This module is deliberately side-effect free so both the generator
8
8
  * (scripts/project-surfaces.ts) and the drift-check test import the same
9
- * rendering logic — the committed file and a fresh render must be byte-identical
9
+ * rendering logic, the committed file and a fresh render must be byte-identical
10
10
  * or the gate fails.
11
11
  */
12
12
  import type { SlashCommand } from './command-registry.ts';
@@ -31,10 +31,10 @@ function slug(text: string): string {
31
31
  }
32
32
 
33
33
  /**
34
- * renderCommandReferenceMarkdown — deterministic markdown for the full command
34
+ * renderCommandReferenceMarkdown, deterministic markdown for the full command
35
35
  * set. Categories are sorted alphabetically and commands alphabetically by
36
36
  * primary name within each category, so the output depends only on the command
37
- * set and their metadata — not on registration order — which keeps the drift
37
+ * set and their metadata, not on registration order, which keeps the drift
38
38
  * check meaningful (a genuinely new/renamed command moves the bytes; a pure
39
39
  * reordering does not).
40
40
  */
@@ -50,7 +50,7 @@ export function renderCommandReferenceMarkdown(entries: readonly CategorizedComm
50
50
  const total = entries.length;
51
51
 
52
52
  const lines: string[] = [];
53
- lines.push('<!-- GENERATED FILE — DO NOT EDIT BY HAND.');
53
+ lines.push('<!-- GENERATED FILE: DO NOT EDIT BY HAND.');
54
54
  lines.push(' Regenerate with `bun run docs:commands`.');
55
55
  lines.push(' Source of truth: the slash-command registry (src/input/commands.ts).');
56
56
  lines.push(' A drift check (src/test/release-gates/command-reference-gate.test.ts)');
@@ -69,7 +69,7 @@ export function renderCommandReferenceMarkdown(entries: readonly CategorizedComm
69
69
  lines.push('');
70
70
  for (const category of categories) {
71
71
  const count = byCategory.get(category)?.length ?? 0;
72
- lines.push(`- [${escapeCell(category)}](#${slug(category)}) — ${count}`);
72
+ lines.push(`- [${escapeCell(category)}](#${slug(category)}): ${count}`);
73
73
  }
74
74
  lines.push('');
75
75
 
@@ -83,10 +83,10 @@ export function renderCommandReferenceMarkdown(entries: readonly CategorizedComm
83
83
  const name = `\`/${escapeCell(cmd.name)}\``;
84
84
  const aliases = (cmd.aliases ?? []).length > 0
85
85
  ? (cmd.aliases ?? []).map((a) => `\`/${escapeCell(a)}\``).join(', ')
86
- : '—';
86
+ : 'None';
87
87
  const usageText = cmd.usage ?? cmd.argsHint ?? '';
88
- const usage = usageText ? `\`${escapeCell(usageText)}\`` : '—';
89
- const description = cmd.description ? escapeCell(cmd.description) : '—';
88
+ const usage = usageText ? `\`${escapeCell(usageText)}\`` : 'None';
89
+ const description = cmd.description ? escapeCell(cmd.description) : 'None';
90
90
  lines.push(`| ${name} | ${aliases} | ${usage} | ${description} |`);
91
91
  }
92
92
  lines.push('');
@@ -55,7 +55,7 @@ export interface CommandRuntimeState {
55
55
  sessionId: string;
56
56
  /**
57
57
  * Cumulative count of direct terminal writes the output guard intercepted
58
- * this session — surfaced by /debug. Optional so the SDK's MutableRuntimeState
58
+ * this session, surfaced by /debug. Optional so the SDK's MutableRuntimeState
59
59
  * (which has no such field) stays assignable; the guard sets it lazily on the
60
60
  * shared runtime object. (item 1a.)
61
61
  */
@@ -83,7 +83,7 @@ export interface CommandUiActions {
83
83
  };
84
84
  /**
85
85
  * Read-only view of pending `[TEXT: pN, M lines]` fold markers currently
86
- * sitting in the composer (registerPaste in handler-content-actions.ts) —
86
+ * sitting in the composer (registerPaste in handler-content-actions.ts),
87
87
  * backs /pastes, which previews a folded paste's actual content before the
88
88
  * user submits it. A paste over the fold threshold is otherwise invisible
89
89
  * until the LLM sees it.
@@ -95,7 +95,7 @@ export interface CommandUiActions {
95
95
  cancelGeneration?: () => void;
96
96
  /**
97
97
  * Cancel JUST the currently-running tool call (the live transcript row),
98
- * leaving the turn to continue — the local-session equivalent of the
98
+ * leaving the turn to continue, the local-session equivalent of the
99
99
  * sessions.toolCalls.cancel wire verb over the in-process orchestrator.
100
100
  * Returns true when a running call was found and cancelled.
101
101
  */
@@ -114,7 +114,7 @@ export interface CommandUiActions {
114
114
  * terminal delivers key events and never key-release state.
115
115
  */
116
116
  toggleVoiceInput?: () => void;
117
- /** The current host sleep-ownership projection (power.status.get, flattened) — chip, held-because, lid-split. */
117
+ /** The current host sleep-ownership projection (power.status.get, flattened), chip, held-because, lid-split. */
118
118
  getPowerState?: () => import('../core/power-status.ts').PowerSurfaceState;
119
119
  /** Set the daemon-held keep-awake toggle (power.keepAwake.set), acquiring/releasing the inhibitor live; returns the new state. */
120
120
  setKeepAwake?: (enabled: boolean) => Promise<import('../core/power-status.ts').PowerSurfaceState>;
@@ -128,7 +128,7 @@ export interface CommandUiActions {
128
128
  /** Which config target to write the selected model to. Defaults to 'main'. */
129
129
  target?: import('./model-picker.ts').ModelPickerTarget;
130
130
  /**
131
- * True only when `effort` came from the picker's effort STEP — an explicit
131
+ * True only when `effort` came from the picker's effort STEP, an explicit
132
132
  * user choice, which is the only thing allowed to update the stored
133
133
  * preference `provider.reasoningEffort`. The model-only and context-cap
134
134
  * commit routes pass a level merely carried over from the previous model;
@@ -139,7 +139,7 @@ export interface CommandUiActions {
139
139
  /**
140
140
  * Commit an embedding-provider selection from the model picker's
141
141
  * 'embeddingProvider' mode (the 'embeddings' target). Deliberately separate
142
- * from completeModelSelection — embedding providers are not
142
+ * from completeModelSelection, embedding providers are not
143
143
  * ModelDefinition-shaped, so routing them through the same commit path
144
144
  * would require fabricating a fake model object.
145
145
  */
@@ -157,7 +157,7 @@ export interface CommandUiActions {
157
157
  * Force a full-screen repaint on the next frame (reuses Compositor.resetDiff(),
158
158
  * the same call resize/bootstrap already use). Defense-in-depth for command
159
159
  * handlers whose spawned subprocess may have written to the real tty (e.g. a
160
- * stderr-capture regression) — nulls the diff buffers so the next composite()
160
+ * stderr-capture regression), nulls the diff buffers so the next composite()
161
161
  * repaints over any stray output instead of leaving it until an unrelated resize.
162
162
  */
163
163
  requestFullRepaint?: () => void;
@@ -175,7 +175,7 @@ export interface CommandShellUiOpeners {
175
175
  jumpToBookmark?: (key: string) => void;
176
176
  scrollToLine?: (line: number) => void;
177
177
  openHelpOverlay?: () => void;
178
- /** Toggle the transcript search overlay (same action as Ctrl+F) — backs /find. */
178
+ /** Toggle the transcript search overlay (same action as Ctrl+F), backs /find. */
179
179
  openTranscriptSearch?: () => void;
180
180
  openSelection?: (
181
181
  title: string,
@@ -185,7 +185,7 @@ export interface CommandShellUiOpeners {
185
185
  ) => void;
186
186
  openSettingsModal?: (target?: string) => void;
187
187
  /**
188
- * Open a MIGRATE-TO-MODAL surface by name (purge skeleton — B
188
+ * Open a MIGRATE-TO-MODAL surface by name (purge skeleton, B
189
189
  * command runtimes call this instead of openCommandPanel once their panel
190
190
  * is converted to a ModalFactory config). Threaded from ui-openers.ts the
191
191
  * same way openSettingsModal is.
@@ -197,7 +197,7 @@ export interface CommandShellUiOpeners {
197
197
  getScrollTop?: () => number;
198
198
  openPanelPicker?: () => void;
199
199
  /**
200
- * Open the fuzzy command palette — a searchable picker over every registered
200
+ * Open the fuzzy command palette, a searchable picker over every registered
201
201
  * slash command (generated live from the registry). Bound to Ctrl+K and the
202
202
  * /palette command. Selecting a command pre-fills it into the composer.
203
203
  */
@@ -207,16 +207,16 @@ export interface CommandShellUiOpeners {
207
207
  * truth as the generated command reference (categorizeBuiltinCommands),
208
208
  * memoized by the shell. Lets registry-driven surfaces built inside command
209
209
  * handlers (/help) group by category without importing the aggregation
210
- * module — a static import there would cycle (commands.ts registers those
210
+ * module, a static import there would cycle (commands.ts registers those
211
211
  * very handlers).
212
212
  */
213
213
  getCommandCategories?: () => ReadonlyMap<string, string>;
214
214
  /**
215
215
  * Open (and optionally focus) a panel. focus rule: the command path is
216
- * "the user is mid-command-flow" — opening a panel this way leaves keyboard
216
+ * "the user is mid-command-flow", opening a panel this way leaves keyboard
217
217
  * focus in the composer by default. Pass `{ focus: true }` for a caller that
218
218
  * genuinely wants to grab focus (chords use panelManager.focusPanels()
219
- * directly instead of this method, so no current call site needs it — but
219
+ * directly instead of this method, so no current call site needs it, but
220
220
  * the intent is explicit rather than implicit here). `target` is a
221
221
  * fleet deep-link jump target forwarded to PanelManager.open.
222
222
  */
@@ -265,17 +265,17 @@ export interface CommandSessionServices {
265
265
  * fresh Orchestrator's zeroed default.
266
266
  */
267
267
  readonly hydrateSessionUsage?: () => void;
268
- /** The orchestration engine's command-facing facade — see runtime/workstream-services.ts. */
268
+ /** The orchestration engine's command-facing facade, see runtime/workstream-services.ts. */
269
269
  readonly workstreamEngine?: import('@pellux/goodvibes-sdk/platform/orchestration').WorkstreamCommandService;
270
- /** The repo source-tree code index — see runtime/code-index-services.ts. */
270
+ /** The repo source-tree code index, see runtime/code-index-services.ts. */
271
271
  readonly codeIndexStore?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexStore;
272
- /** Tool-site reindex scheduler — `/codebase status` reports its last activity. */
272
+ /** Tool-site reindex scheduler, `/codebase status` reports its last activity. */
273
273
  readonly codeIndexReindexScheduler?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexReindexScheduler;
274
- /** Whether the (default-off) `agent-passive-code-injection` flag is on — for `/codebase status`. */
274
+ /** Whether the (default-off) `agent-passive-code-injection` flag is on, for `/codebase status`. */
275
275
  readonly isPassiveCodeInjectionFlagEnabled?: () => boolean;
276
276
  /**
277
277
  * The MAIN interactive session's per-turn passive-injection
278
- * honesty ring — `Orchestrator.getTurnInjections()`, the main-session
278
+ * honesty ring, `Orchestrator.getTurnInjections()`, the main-session
279
279
  * counterpart to `AgentRecord.turnInjections`. `/recall injections`
280
280
  * with no agent id reads this. Optional so command contexts built without an
281
281
  * orchestrator (headless, tests) fall back to the honest empty state.
@@ -297,8 +297,8 @@ export interface CommandProviderServices {
297
297
  export interface CommandWorkspaceUiServices {
298
298
  /**
299
299
  * The app's declare-once session-storage handle (runtime/services.ts). Every
300
- * command that reads or writes session state — resume, save, the liveness
301
- * markers, the rewind anchor sidecar — takes its paths from here instead of
300
+ * command that reads or writes session state, resume, save, the liveness
301
+ * markers, the rewind anchor sidecar, takes its paths from here instead of
302
302
  * re-deriving a scope from shellPaths, so a command can never land on a
303
303
  * different directory than the runtime that wrote the file.
304
304
  */
@@ -306,7 +306,7 @@ export interface CommandWorkspaceUiServices {
306
306
  keybindingsManager?: KeybindingsManager;
307
307
  fileUndoManager?: FileUndoManager;
308
308
  workspaceCheckpointManager?: WorkspaceCheckpointManager;
309
- /** In-process gateway catalog — the /review hunk-revert flow invokes checkpoints.revertHunk(Preview) over it. */
309
+ /** In-process gateway catalog, the /review hunk-revert flow invokes checkpoints.revertHunk(Preview) over it. */
310
310
  gatewayMethods?: GatewayMethodCatalog;
311
311
  workspaceTrustManager?: import('@pellux/goodvibes-sdk/platform/runtime/operations').WorkspaceTrustManager;
312
312
  workspaceRegistrationManager?: import('@pellux/goodvibes-sdk/platform/runtime/operations').WorkspaceRegistrationManager;
@@ -325,15 +325,15 @@ export interface CommandWorkspaceServices
325
325
  export interface CommandPlatformConfigServices {
326
326
  readonly config: DeepReadonly<GoodVibesConfig>;
327
327
  readonly configManager: ConfigManager;
328
- /** Per-device pairing tokens — backs the /devices command family. */
328
+ /** Per-device pairing tokens, backs the /devices command family. */
329
329
  readonly pairingTokens?: import('@pellux/goodvibes-sdk/platform/pairing').PairingTokenManager;
330
- /** Capability gate runtime — feature states derive from domain settings keys; surfaces read live/pending state here. */
330
+ /** Capability gate runtime, feature states derive from domain settings keys; surfaces read live/pending state here. */
331
331
  readonly featureFlagManager?: FeatureFlagManager;
332
332
  readonly voiceProviderRegistry?: VoiceProviderRegistry;
333
333
  readonly voiceService?: VoiceService;
334
334
  /** Direct-command consumer (`/search`) alongside the existing agent-tool consumer. */
335
335
  readonly webSearchService?: import('@pellux/goodvibes-sdk/platform/web-search').WebSearchService;
336
- /** Direct-command consumer (`/image`) — first production caller of `.generate()`. */
336
+ /** Direct-command consumer (`/image`), first production caller of `.generate()`. */
337
337
  readonly mediaProviders?: import('@pellux/goodvibes-sdk/platform/media').MediaProviderRegistry;
338
338
  readonly artifactStore?: import('@pellux/goodvibes-sdk/platform/artifacts').ArtifactStore;
339
339
  /** Background daemon/HTTP-listener/relay controller. Mutable: main.ts patches it in post-bootstrap (see bootstrap-command-parts.ts ordering note). */
@@ -378,8 +378,8 @@ export interface CommandContext
378
378
  readonly knowledgeApi?: KnowledgeApi;
379
379
  /**
380
380
  * The cross-surface memory spine client (SDK 1.2.0 full-detach). `/recall`'s
381
- * browse/link/queue/export/import subcommands read and write through this —
382
- * not `knowledgeApi.memory` — so they fully detach from the local store file
381
+ * browse/link/queue/export/import subcommands read and write through this,
382
+ * not `knowledgeApi.memory`, so they fully detach from the local store file
383
383
  * when a daemon has been adopted, per
384
384
  * docs/decisions/2026-07-06-memory-wire-full-detach.md in the SDK repo.
385
385
  * `explain` and the `vector` diagnostic subcommand stay on `knowledgeApi.memory`
@@ -403,9 +403,9 @@ export interface CommandContext
403
403
  /**
404
404
  * palette curation (item 4): the "common" first tier the slash-command
405
405
  * autocomplete dropdown shows before the alphabetical rest when it opens with
406
- * no filter typed yet (bare '/') — the "132-command palette unranked"
406
+ * no filter typed yet (bare '/'), the "132-command palette unranked"
407
407
  * evaluator finding. Typed filtering (any non-empty query) is completely
408
- * unaffected — fuzzyMatch still searches every registered command exactly as
408
+ * unaffected, fuzzyMatch still searches every registered command exactly as
409
409
  * before; this only reorders the empty-query case. Curated for breadth across
410
410
  * the product's main workflows rather than raw usage frequency: help/config
411
411
  * (orientation), panel/model (workspace + provider), recall/codebase/search
@@ -446,7 +446,7 @@ export class CommandRegistry {
446
446
  /**
447
447
  * Register a command. Also indexes all aliases for O(1) lookup.
448
448
  * Throws if the primary name or any alias collides with an existing
449
- * registration — silent last-write-wins previously shadowed whole
449
+ * registration, silent last-write-wins previously shadowed whole
450
450
  * commands, so collisions must fail fast at startup (and are caught
451
451
  * statically by the alias lint test).
452
452
  */
@@ -454,9 +454,9 @@ export class CommandRegistry {
454
454
  // Every registered command is rendered with its description in /help, the
455
455
  // command palette, and the generated reference (docs/commands-reference.md).
456
456
  // A blank description would ship an unexplained row in all three, so it
457
- // fails fast here — the release gate red-tests this invariant.
457
+ // fails fast here, the release gate red-tests this invariant.
458
458
  if (!command.description || command.description.trim().length === 0) {
459
- throw new Error(`Command registration for "${command.name}" has no description — every command must describe itself.`);
459
+ throw new Error(`Command registration for "${command.name}" has no description: every command must describe itself.`);
460
460
  }
461
461
  const existingByName = this.commands.get(command.name) ?? this.aliasIndex.get(command.name);
462
462
  if (existingByName) {
@@ -527,7 +527,7 @@ export class CommandRegistry {
527
527
 
528
528
  if (bestScore > 0 || q === '') {
529
529
  // with no query yet, rank the curated common tier (score 2)
530
- // ahead of everything else (score 1) — the tie-break below then sorts
530
+ // ahead of everything else (score 1), the tie-break below then sorts
531
531
  // each tier alphabetically, so the result is "common tier, then the
532
532
  // alphabetical rest" rather than one flat alphabetical list.
533
533
  const score = q === '' ? (COMMON_COMMAND_NAMES.has(cmd.name) ? 2 : 1) : bestScore;
@@ -1,11 +1,11 @@
1
1
  // ---------------------------------------------------------------------------
2
- // acp-runtime.ts — the scripted path for hosting third-party coding agents,
2
+ // acp-runtime.ts, the scripted path for hosting third-party coding agents,
3
3
  // over the SAME verbs the Fleet panel's spawn affordance drives (acp.agents.list
4
4
  // / acp.sessions.create). `/agents list` shows what the daemon discovered
5
5
  // (read-only, quiet when none); `/agents host <agentId> [dir]` spawns one as a
6
6
  // long-lived daemon session that shows up as an acp-agent fleet row. A working
7
7
  // directory defaults to the current one; a known workspace root can be named
8
- // instead — but no path is ever required beyond what the operator already has.
8
+ // instead, but no path is ever required beyond what the operator already has.
9
9
  //
10
10
  // A structured spawn failure ({binary, stage, message}) is printed verbatim,
11
11
  // never left as a hung row: the daemon bounds the handshake and returns a
@@ -37,7 +37,7 @@ export function registerAcpRuntimeCommands(registry: CommandRegistry): void {
37
37
  }
38
38
  ctx.print([
39
39
  'Discovered ACP agents (host with /agents host <id> [directory]):',
40
- ...agents.map((a) => ` ${a.id} — ${a.title} (${a.binaryPath})`),
40
+ ...agents.map((a) => ` ${a.id}: ${a.title} (${a.binaryPath})`),
41
41
  ].join('\n'));
42
42
  } catch (error) {
43
43
  ctx.print(`[agents list] ${describeOperatorRpcError(error)}`);
@@ -55,11 +55,11 @@ export function registerAcpRuntimeCommands(registry: CommandRegistry): void {
55
55
  try {
56
56
  const { hosted, started } = await rpc.sdk.operator.invoke('acp.sessions.create', { agentId, cwd });
57
57
  if (hosted.error) {
58
- // Structured failure, verbatim — never a hung row.
59
- ctx.print(`[agents host] Could not host ${hosted.title || agentId}: ${hosted.error.stage} stage failed for ${hosted.error.binary} — ${hosted.error.message}`);
58
+ // Structured failure, verbatim, never a hung row.
59
+ ctx.print(`[agents host] Could not host ${hosted.title || agentId}: ${hosted.error.stage} stage failed for ${hosted.error.binary}; ${hosted.error.message}`);
60
60
  return;
61
61
  }
62
- ctx.print(`[agents host] Hosting ${hosted.title || agentId} in ${cwd}${started ? '' : ' (queued)'} — it appears as an acp-agent row in the fleet; steer and stop it like any agent.`);
62
+ ctx.print(`[agents host] Hosting ${hosted.title || agentId} in ${cwd}${started ? '' : ' (queued)'}; it appears as an acp-agent row in the fleet; steer and stop it like any agent.`);
63
63
  } catch (error) {
64
64
  ctx.print(`[agents host] ${describeOperatorRpcError(error)}`);
65
65
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * calendar-runtime.ts — `/calendar`, the terminal surface over the daemon's
2
+ * calendar-runtime.ts, `/calendar`, the terminal surface over the daemon's
3
3
  * calendar capability.
4
4
  *
5
5
  * As with `/mail`, no calendar logic lives here. CalDAV, ICS parsing, settings
@@ -17,7 +17,7 @@
17
17
  * nuisance to undo.
18
18
  *
19
19
  * `calendar.ics.import` and `calendar.ics.export` are deliberately NOT given a
20
- * command. They are bulk file-level transfers of a whole calendar — an
20
+ * command. They are bulk file-level transfers of a whole calendar, an
21
21
  * operation whose natural home is a file path and a scheduled job, not a line
22
22
  * typed into a coding session. They stay available to any surface through the
23
23
  * same catalog; this product simply does not claim to be the right place for
@@ -52,7 +52,7 @@ const MAX_LIST_LIMIT = 200;
52
52
  * Render a timestamp for a terminal agenda.
53
53
  *
54
54
  * An unparseable value is printed verbatim rather than replaced with a
55
- * placeholder — showing what the server actually returned is more useful than
55
+ * placeholder, showing what the server actually returned is more useful than
56
56
  * hiding it behind "invalid date".
57
57
  */
58
58
  export function formatWhen(raw: string): string {
@@ -70,12 +70,12 @@ function truncate(value: string, width: number): string {
70
70
 
71
71
  export function renderAgenda(events: readonly CalendarEvent[]): string {
72
72
  if (events.length === 0) return 'No events in this window.';
73
- const lines = [`Agenda — ${events.length} event${events.length === 1 ? '' : 's'}:`];
73
+ const lines = [`Agenda: ${events.length} event${events.length === 1 ? '' : 's'}:`];
74
74
  for (const event of events) {
75
75
  const where = event.location ? ` @ ${truncate(event.location, 24)}` : '';
76
76
  lines.push(` ${formatWhen(event.start)} ${truncate(event.title, 44).padEnd(44)}${where}`);
77
77
  }
78
- lines.push('', ' /calendar get <id> — open one event');
78
+ lines.push('', ' /calendar get <id>: open one event');
79
79
  return lines.join('\n');
80
80
  }
81
81
 
@@ -95,7 +95,7 @@ export function renderEvent(event: CalendarEvent): string {
95
95
  }
96
96
 
97
97
  /**
98
- * Split `title | start | end` on unescaped pipes — same separator rule as
98
+ * Split `title | start | end` on unescaped pipes, same separator rule as
99
99
  * `/mail`, for the same reason: titles contain spaces and per-command quoting
100
100
  * conventions are their own bug source.
101
101
  */
@@ -188,7 +188,7 @@ async function listEvents(ctx: CommandContext, gateway: Gateway, limit: number,
188
188
  ctx.print(renderConnectionStatus({
189
189
  surface: 'calendar',
190
190
  state: 'ready',
191
- detail: 'Calendar is connected — the daemon reached the server and returned a result.',
191
+ detail: 'Calendar is connected: the daemon reached the server and returned a result.',
192
192
  nextActions: [],
193
193
  }));
194
194
  }
@@ -198,7 +198,7 @@ async function listEvents(ctx: CommandContext, gateway: Gateway, limit: number,
198
198
 
199
199
  async function getEvent(ctx: CommandContext, gateway: Gateway, eventId: string | undefined): Promise<void> {
200
200
  if (!eventId) {
201
- ctx.print('Usage: /calendar get <id> — the id from /calendar list.');
201
+ ctx.print('Usage: /calendar get <id>; the id from /calendar list.');
202
202
  return;
203
203
  }
204
204
  await withStatusOnFailure(ctx, gateway, 'get', async () => {
@@ -217,7 +217,7 @@ async function createEvent(ctx: CommandContext, gateway: Gateway, rest: readonly
217
217
  if (parsed === null) {
218
218
  ctx.print([
219
219
  'Usage: /calendar create <title | start | end>',
220
- ' Three fields separated by | — for example:',
220
+ ' Three fields separated by |, for example:',
221
221
  ' /calendar create Design review | 2026-08-01T14:00:00Z | 2026-08-01T15:00:00Z',
222
222
  ].join('\n'));
223
223
  return;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * channel-pairing.ts — guided `/channel pair` flow.
2
+ * channel-pairing.ts, guided `/channel pair` flow.
3
3
  *
4
4
  * Adapters and their credential requirements are driven from the SDK's
5
- * getBuiltinSetupSchema — the same setup-schema source every GoodVibes
5
+ * getBuiltinSetupSchema, the same setup-schema source every GoodVibes
6
6
  * consumer (TUI, webui, agent) reads, not a hand-maintained list here.
7
7
  * Secret (masked) credentials are stored the same secure way onboarding
8
8
  * stores them, via persistSecretBackedConfigValue (secret manager + a
@@ -25,7 +25,7 @@ import { persistSecretBackedConfigValue } from '../../config/secret-config.ts';
25
25
  import { describeOperatorRpcError, getOperatorRpc } from './operator-rpc.ts';
26
26
 
27
27
  /**
28
- * Surfaces pairable through /channel pair — every ChannelSurface except the
28
+ * Surfaces pairable through /channel pair, every ChannelSurface except the
29
29
  * two internal render surfaces ('tui', 'web'), which are not externally
30
30
  * paired channels. The `satisfies Record<...>` shape makes this exhaustive:
31
31
  * a new ChannelSurface value that isn't listed here fails to compile.
@@ -71,7 +71,7 @@ function fieldConfigured(field: ChannelSetupFieldDescriptor, configManager: Conf
71
71
  return fieldValue(field, configManager).length > 0;
72
72
  }
73
73
 
74
- /** Credential fields the user must supply — secret (masked) and plain text; booleans/selects are defaulted. */
74
+ /** Credential fields the user must supply, secret (masked) and plain text; booleans/selects are defaulted. */
75
75
  function credentialFields(schema: ChannelSetupSchema): ChannelSetupFieldDescriptor[] {
76
76
  return schema.fields.filter((field) => field.kind === 'secret' || field.kind === 'string' || field.kind === 'url' || field.kind === 'number');
77
77
  }
@@ -87,7 +87,7 @@ function fieldHint(field: ChannelSetupFieldDescriptor, schema: ChannelSetupSchem
87
87
 
88
88
  function listAdapters(ctx: CommandContext): void {
89
89
  const configManager = ctx.platform.configManager;
90
- const lines: string[] = ['Channel adapters — pair with /channel pair <surface>:', ''];
90
+ const lines: string[] = ['Channel adapters: pair with /channel pair <surface>:', ''];
91
91
  for (const surface of PAIRABLE_SURFACES) {
92
92
  const schema = getBuiltinSetupSchema(surface);
93
93
  const creds = credentialFields(schema);
@@ -108,7 +108,7 @@ function renderSurface(schema: ChannelSetupSchema, configManager: ConfigManager)
108
108
  const configured = fieldConfigured(field, configManager);
109
109
  const kindTag = field.kind === 'secret' ? 'secret' : 'value';
110
110
  const status = configured ? 'set' : 'not set';
111
- lines.push(` - ${field.label} (${kindTag}): ${status} — ${fieldHint(field, schema)}`);
111
+ lines.push(` - ${field.label} (${kindTag}): ${status}; ${fieldHint(field, schema)}`);
112
112
  }
113
113
  if (schema.externalSteps.length > 0) {
114
114
  lines.push('', 'External setup steps:');
@@ -143,7 +143,7 @@ function promptMissingSecrets(
143
143
  ctx.print('[pair] Concealed input is unavailable on this surface; set credentials via /config and re-run verify.');
144
144
  return;
145
145
  }
146
- ctx.print(`[pair] Enter ${field.label} (${field.placeholder || 'value'}) — masked; Enter to store, Esc to stop.`);
146
+ ctx.print(`[pair] Enter ${field.label} (${field.placeholder || 'value'}): masked; Enter to store, Esc to stop.`);
147
147
  ctx.beginConcealedInput({
148
148
  label: field.label,
149
149
  onSubmit: (value) => {
@@ -171,7 +171,7 @@ function promptMissingSecrets(
171
171
  /**
172
172
  * Verify a surface: report which declared credentials resolve locally, then
173
173
  * perform a REAL round-trip through the daemon (channels.test.send) and
174
- * report the actual delivered/error outcome — never a fabricated success.
174
+ * report the actual delivered/error outcome, never a fabricated success.
175
175
  */
176
176
  async function verifySurface(ctx: CommandContext, schema: ChannelSetupSchema): Promise<void> {
177
177
  const configManager = ctx.platform.configManager;
@@ -181,7 +181,7 @@ async function verifySurface(ctx: CommandContext, schema: ChannelSetupSchema): P
181
181
  for (const field of creds) {
182
182
  const ok = fieldConfigured(field, configManager);
183
183
  if (!ok) missing.push(field);
184
- lines.push(` ${ok ? '[ok] ' : '[fail]'} ${field.label}${ok ? '' : ' — missing'}`);
184
+ lines.push(` ${ok ? '[ok] ' : '[fail]'} ${field.label}${ok ? '' : '; missing'}`);
185
185
  }
186
186
  lines.push('');
187
187
  if (missing.length === 0) {
@@ -203,7 +203,7 @@ async function verifySurface(ctx: CommandContext, schema: ChannelSetupSchema): P
203
203
  if (result.delivered) {
204
204
  ctx.print(`[verify] delivered:true${result.responseId ? ` (responseId: ${result.responseId})` : ''}${result.address ? ` → ${result.address}` : ''}`);
205
205
  } else {
206
- ctx.print(`[verify] delivered:false — ${result.error ?? 'the daemon returned no error detail'}`);
206
+ ctx.print(`[verify] delivered:false; ${result.error ?? 'the daemon returned no error detail'}`);
207
207
  }
208
208
  } catch (error) {
209
209
  ctx.print(`[verify] round-trip request failed: ${describeOperatorRpcError(error)}`);
@@ -240,6 +240,6 @@ export async function runChannelPairing(args: readonly string[], ctx: CommandCon
240
240
  ctx.print(`\nNo missing secrets. Verify with: /channel pair ${schema.surface} verify`);
241
241
  return;
242
242
  }
243
- ctx.print(`\nEntering ${missingSecrets.length} secret credential(s) — Esc to stop.`);
243
+ ctx.print(`\nEntering ${missingSecrets.length} secret credential(s): Esc to stop.`);
244
244
  promptMissingSecrets(ctx, schema, missingSecrets, 0);
245
245
  }
@@ -231,7 +231,7 @@ export function registerChannelRuntimeCommands(registry: CommandRegistry): void
231
231
  if (sub === 'policy') {
232
232
  const configManager = ctx.platform.configManager;
233
233
  // Channel policy is persisted by ChannelPolicyManager in
234
- // .goodvibes/tui/channels/policies.json — surface via configManager
234
+ // .goodvibes/tui/channels/policies.json, surface via configManager
235
235
  // category (runtime-accessible without a daemon round-trip).
236
236
  const surfaces = [
237
237
  'slack', 'discord', 'ntfy', 'webhook', 'homeassistant',
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * checkin-runtime.ts
3
3
  *
4
- * `/checkin` — the proactive check-in surface: config (enabled/cadence/
4
+ * `/checkin`, the proactive check-in surface: config (enabled/cadence/
5
5
  * delivery channel/quiet hours) and its receipt trail, over the operator
6
6
  * wire (see operator-rpc.ts for why this goes over HTTP rather than the
7
- * in-process OperatorClient facade). Off by default; every run — scheduled
8
- * or manual — leaves a receipt (`checkin.receipts.list`) recording whether it
7
+ * in-process OperatorClient facade). Off by default; every run, scheduled
8
+ * or manual, leaves a receipt (`checkin.receipts.list`) recording whether it
9
9
  * stayed quiet, delivered a message, or was skipped, so the config surface
10
10
  * in /config's Automation group is never the only place this feature's
11
11
  * behavior is visible.
@@ -79,7 +79,7 @@ export function registerCheckinRuntimeCommands(registry: CommandRegistry): void
79
79
  lines.push('Recent receipts:');
80
80
  lines.push(...receipts.map(renderReceipt));
81
81
  }
82
- lines.push('', ' /checkin run — trigger one now');
82
+ lines.push('', ' /checkin run: trigger one now');
83
83
  ctx.print(lines.join('\n'));
84
84
  } catch (error) {
85
85
  ctx.print(`[checkin] ${describeOperatorRpcError(error)}`);