@pellux/goodvibes-tui 2.0.14 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/.goodvibes/GOODVIBES.md +1 -1
  2. package/.goodvibes/agents/reviewer.md +8 -8
  3. package/.goodvibes/skills/add-provider/SKILL.md +22 -22
  4. package/CHANGELOG.md +35 -0
  5. package/README.md +40 -29
  6. package/docs/README.md +1 -1
  7. package/docs/foundation-artifacts/README.md +5 -5
  8. package/docs/foundation-artifacts/operator-contract.json +123 -123
  9. package/package.json +12 -10
  10. package/scripts/postinstall.js +3 -3
  11. package/src/audio/activation-sound.ts +7 -7
  12. package/src/audio/capture.ts +7 -7
  13. package/src/audio/onnxruntime-assets.d.ts +1 -1
  14. package/src/audio/player.ts +4 -4
  15. package/src/audio/spoken-turn-wiring.ts +4 -4
  16. package/src/audio/voice-capture-wiring.ts +5 -5
  17. package/src/audio/voice-input-session.ts +3 -3
  18. package/src/audio/wake-inference.ts +13 -8
  19. package/src/audio/wake-runtime.ts +10 -10
  20. package/src/cli/completions/generate.ts +2 -2
  21. package/src/cli/doctor.ts +13 -13
  22. package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
  23. package/src/cli/entrypoint.ts +3 -3
  24. package/src/cli/help.ts +6 -6
  25. package/src/cli/hooks-command.ts +4 -4
  26. package/src/cli/hooks-report.ts +4 -4
  27. package/src/cli/launch-auto-update.ts +17 -17
  28. package/src/cli/management-commands.ts +8 -8
  29. package/src/cli/management-utils.ts +3 -3
  30. package/src/cli/management.ts +1 -1
  31. package/src/cli/plugin-bundles-command.ts +10 -10
  32. package/src/cli/plugin-command.ts +9 -9
  33. package/src/cli/service-posture.ts +1 -1
  34. package/src/cli/status.ts +10 -10
  35. package/src/cli/surface-command.ts +4 -4
  36. package/src/cli/tui-startup.ts +23 -23
  37. package/src/config/run-daemon-config-migration.ts +3 -3
  38. package/src/config/secret-config.ts +10 -10
  39. package/src/config/surface.ts +1 -1
  40. package/src/config/tui-extension-settings.ts +8 -8
  41. package/src/core/active-model-identity.ts +7 -7
  42. package/src/core/approval-alert.ts +5 -5
  43. package/src/core/bookmark-navigation.ts +3 -3
  44. package/src/core/budget-breach-notifier.ts +6 -6
  45. package/src/core/compaction-receipt.ts +8 -8
  46. package/src/core/composer-state.ts +2 -2
  47. package/src/core/context-usage.ts +1 -1
  48. package/src/core/conversation-compaction-render.ts +3 -3
  49. package/src/core/conversation-event-navigation.ts +2 -2
  50. package/src/core/conversation-fold.ts +9 -9
  51. package/src/core/conversation-line-cache.ts +14 -14
  52. package/src/core/conversation-render-context.ts +6 -6
  53. package/src/core/conversation-rendering.ts +27 -30
  54. package/src/core/conversation-search-expansion.ts +6 -6
  55. package/src/core/conversation-splash-state.ts +3 -3
  56. package/src/core/conversation-turn-structure.ts +13 -13
  57. package/src/core/conversation-types.ts +3 -3
  58. package/src/core/conversation-user-receipts.ts +5 -5
  59. package/src/core/conversation.ts +17 -17
  60. package/src/core/format-user-error.ts +5 -5
  61. package/src/core/long-task-notifier.ts +9 -9
  62. package/src/core/memory-diagnostics-gateway.ts +8 -8
  63. package/src/core/memory-provenance.ts +5 -5
  64. package/src/core/model-routing-chip.ts +3 -3
  65. package/src/core/pairing-tailscale-gateway.ts +3 -3
  66. package/src/core/permission-mode.ts +5 -5
  67. package/src/core/power-chip-source.ts +3 -3
  68. package/src/core/power-status.ts +8 -8
  69. package/src/core/rewind-receipt.ts +6 -6
  70. package/src/core/session-resume-core.ts +8 -8
  71. package/src/core/stream-event-wiring.ts +36 -36
  72. package/src/core/stream-stall-watchdog.ts +4 -4
  73. package/src/core/system-message-noise.ts +7 -7
  74. package/src/core/system-message-router.ts +10 -10
  75. package/src/core/terminal-notifier.ts +5 -5
  76. package/src/core/turn-budget-outcome.ts +5 -5
  77. package/src/core/turn-cancellation.ts +3 -3
  78. package/src/core/turn-event-wiring.ts +16 -16
  79. package/src/core/voice-capture-status.ts +2 -2
  80. package/src/core/voice-provision-gateway.ts +12 -12
  81. package/src/core/voice-provision-status.ts +19 -19
  82. package/src/core/voice-stt-gateway.ts +6 -6
  83. package/src/core/wake-provision-runner.ts +7 -7
  84. package/src/core/wake-provision-status.ts +17 -17
  85. package/src/core/workstream-notification.ts +8 -8
  86. package/src/export/gist-uploader.ts +7 -7
  87. package/src/input/autocomplete.ts +3 -3
  88. package/src/input/bookmark-modal.ts +1 -1
  89. package/src/input/command-args-hint.ts +2 -2
  90. package/src/input/command-reference.ts +9 -9
  91. package/src/input/command-registry.ts +32 -32
  92. package/src/input/commands/acp-runtime.ts +6 -6
  93. package/src/input/commands/calendar-runtime.ts +9 -9
  94. package/src/input/commands/channel-pairing.ts +11 -11
  95. package/src/input/commands/channel-runtime.ts +1 -1
  96. package/src/input/commands/checkin-runtime.ts +4 -4
  97. package/src/input/commands/checkpoint-runtime.ts +4 -4
  98. package/src/input/commands/ci-runtime.ts +4 -4
  99. package/src/input/commands/cluster-runtime.ts +3 -3
  100. package/src/input/commands/codebase-runtime.ts +16 -16
  101. package/src/input/commands/config.ts +6 -6
  102. package/src/input/commands/connection-status.ts +12 -12
  103. package/src/input/commands/context-window.ts +2 -2
  104. package/src/input/commands/cost-attribution-format.ts +4 -4
  105. package/src/input/commands/cost-runtime.ts +2 -2
  106. package/src/input/commands/devices-runtime.ts +7 -7
  107. package/src/input/commands/diff-runtime.ts +2 -2
  108. package/src/input/commands/editor-runtime.ts +1 -1
  109. package/src/input/commands/eval.ts +4 -4
  110. package/src/input/commands/experience-runtime.ts +1 -1
  111. package/src/input/commands/git-runtime.ts +3 -3
  112. package/src/input/commands/graph-runtime.ts +3 -3
  113. package/src/input/commands/guidance-runtime.ts +1 -1
  114. package/src/input/commands/health-metrics-format.ts +2 -2
  115. package/src/input/commands/health-runtime.ts +8 -8
  116. package/src/input/commands/hosted-runtime.ts +13 -13
  117. package/src/input/commands/image-runtime.ts +6 -6
  118. package/src/input/commands/intelligence-runtime.ts +2 -2
  119. package/src/input/commands/local-auth-runtime.ts +3 -3
  120. package/src/input/commands/local-provider-runtime.ts +3 -3
  121. package/src/input/commands/local-runtime.ts +7 -7
  122. package/src/input/commands/mail-runtime.ts +9 -9
  123. package/src/input/commands/mcp-runtime.ts +1 -1
  124. package/src/input/commands/memory.ts +13 -13
  125. package/src/input/commands/notify-runtime.ts +1 -1
  126. package/src/input/commands/operator-panel-runtime.ts +8 -8
  127. package/src/input/commands/operator-rpc.ts +3 -3
  128. package/src/input/commands/operator-runtime.ts +3 -3
  129. package/src/input/commands/palette-runtime.ts +1 -1
  130. package/src/input/commands/payment-card-intake.ts +17 -17
  131. package/src/input/commands/permissions-provenance.ts +7 -7
  132. package/src/input/commands/permissions-runtime.ts +1 -1
  133. package/src/input/commands/planning-runtime.ts +9 -9
  134. package/src/input/commands/platform-services-runtime.ts +2 -2
  135. package/src/input/commands/policy-dispatch.ts +6 -6
  136. package/src/input/commands/power-runtime.ts +6 -6
  137. package/src/input/commands/principals-runtime.ts +3 -3
  138. package/src/input/commands/product-runtime.ts +3 -3
  139. package/src/input/commands/profile-render.ts +13 -13
  140. package/src/input/commands/profile-runtime.ts +13 -13
  141. package/src/input/commands/profile-types.ts +13 -13
  142. package/src/input/commands/provider-accounts-runtime.ts +5 -5
  143. package/src/input/commands/provider.ts +10 -10
  144. package/src/input/commands/qrcode-runtime.ts +3 -3
  145. package/src/input/commands/queue-runtime.ts +6 -6
  146. package/src/input/commands/recall-files-config.ts +4 -4
  147. package/src/input/commands/recall-files-git.ts +3 -3
  148. package/src/input/commands/recall-files.ts +12 -12
  149. package/src/input/commands/recall-query.ts +3 -3
  150. package/src/input/commands/recall-review.ts +3 -3
  151. package/src/input/commands/recall-shared.ts +1 -1
  152. package/src/input/commands/relay-runtime.ts +5 -5
  153. package/src/input/commands/remote-runtime.ts +3 -3
  154. package/src/input/commands/review-runtime.ts +8 -8
  155. package/src/input/commands/rewind-runtime.ts +21 -21
  156. package/src/input/commands/runtime-services.ts +1 -2
  157. package/src/input/commands/schedule-nl.ts +2 -2
  158. package/src/input/commands/schedule-runtime.ts +2 -2
  159. package/src/input/commands/secret-runtime.ts +3 -3
  160. package/src/input/commands/session-content.ts +7 -7
  161. package/src/input/commands/session-picker-filter.ts +3 -3
  162. package/src/input/commands/session-workflow.ts +10 -10
  163. package/src/input/commands/session.ts +15 -15
  164. package/src/input/commands/settings-sync-runtime.ts +2 -2
  165. package/src/input/commands/share-runtime.ts +4 -4
  166. package/src/input/commands/shell-core.ts +11 -11
  167. package/src/input/commands/tasks-runtime.ts +4 -4
  168. package/src/input/commands/test-runtime.ts +6 -6
  169. package/src/input/commands/tts-runtime.ts +4 -4
  170. package/src/input/commands/update-runtime.ts +27 -27
  171. package/src/input/commands/websearch-runtime.ts +2 -2
  172. package/src/input/commands/work-plan-runtime.ts +2 -2
  173. package/src/input/commands/workstream-attempt-dependents.ts +4 -4
  174. package/src/input/commands/workstream-attempts.ts +16 -16
  175. package/src/input/commands/workstream-runtime.ts +36 -36
  176. package/src/input/commands/worktree-runtime.ts +6 -6
  177. package/src/input/composer-capture.ts +5 -5
  178. package/src/input/concealed-input.ts +2 -2
  179. package/src/input/config-modal-types.ts +16 -16
  180. package/src/input/config-modal.ts +30 -30
  181. package/src/input/daemon-owned-settings-descriptions.ts +4 -4
  182. package/src/input/delete-key-policy.ts +1 -1
  183. package/src/input/exec-env-scrub-config.ts +7 -7
  184. package/src/input/feature-unit-layout.ts +5 -5
  185. package/src/input/feed-context-factory.ts +38 -38
  186. package/src/input/file-picker.ts +1 -1
  187. package/src/input/handler-command-route.ts +2 -2
  188. package/src/input/handler-content-actions.ts +8 -8
  189. package/src/input/handler-feed-routes.ts +13 -13
  190. package/src/input/handler-feed.ts +31 -31
  191. package/src/input/handler-interactions.ts +2 -2
  192. package/src/input/handler-modal-routes.ts +13 -13
  193. package/src/input/handler-modal-stack.ts +1 -1
  194. package/src/input/handler-modal-token-routes.ts +1 -1
  195. package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
  196. package/src/input/handler-picker-routes.ts +7 -7
  197. package/src/input/handler-prompt-buffer.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +12 -12
  199. package/src/input/handler-types.ts +3 -3
  200. package/src/input/handler-ui-state.ts +1 -1
  201. package/src/input/handler.ts +9 -9
  202. package/src/input/input-history.ts +1 -1
  203. package/src/input/keybindings.ts +13 -13
  204. package/src/input/kill-ring.ts +7 -11
  205. package/src/input/model-picker-filter.ts +3 -3
  206. package/src/input/model-picker-items.ts +5 -5
  207. package/src/input/model-picker-types.ts +2 -2
  208. package/src/input/model-picker.ts +18 -18
  209. package/src/input/onboarding/onboarding-feature-units.ts +9 -13
  210. package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
  211. package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
  212. package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
  213. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
  214. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
  215. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
  216. package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
  217. package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
  218. package/src/input/panel-integration-actions.ts +3 -3
  219. package/src/input/panel-mouse-geometry.ts +1 -1
  220. package/src/input/panel-paste-flood-guard.ts +9 -9
  221. package/src/input/payments-config.ts +15 -15
  222. package/src/input/profile-picker-modal.ts +1 -1
  223. package/src/input/provider-key-intake.ts +9 -9
  224. package/src/input/relay-settings-descriptions.ts +3 -3
  225. package/src/input/sandbox-exec-config.ts +9 -9
  226. package/src/input/search.ts +18 -18
  227. package/src/input/selection-modal-queue.ts +10 -10
  228. package/src/input/selection-modal.ts +2 -2
  229. package/src/input/session-picker-modal.ts +7 -7
  230. package/src/input/settings-modal-activation.ts +1 -1
  231. package/src/input/settings-modal-adjustment.ts +2 -2
  232. package/src/input/settings-modal-commit.ts +6 -6
  233. package/src/input/settings-modal-connections.ts +2 -2
  234. package/src/input/settings-modal-data.ts +29 -29
  235. package/src/input/settings-modal-mutations.ts +7 -7
  236. package/src/input/settings-modal-reset.ts +3 -3
  237. package/src/input/settings-modal-search.ts +6 -6
  238. package/src/input/settings-modal-secrets.ts +3 -3
  239. package/src/input/settings-modal-types.ts +16 -16
  240. package/src/input/settings-modal.ts +4 -4
  241. package/src/input/voice-local-settings.ts +3 -3
  242. package/src/input/worktree-setup-config.ts +8 -8
  243. package/src/main.ts +15 -15
  244. package/src/panels/agent-inspector-shared.ts +5 -5
  245. package/src/panels/base-panel.ts +3 -3
  246. package/src/panels/builtin/agent.ts +3 -3
  247. package/src/panels/builtin/development.ts +4 -4
  248. package/src/panels/builtin/knowledge.ts +1 -1
  249. package/src/panels/builtin/operations.ts +12 -12
  250. package/src/panels/builtin/session.ts +8 -8
  251. package/src/panels/builtin/shared.ts +6 -6
  252. package/src/panels/builtin-modals.ts +8 -8
  253. package/src/panels/confirm-state.ts +5 -5
  254. package/src/panels/cost-tracker-panel.ts +22 -22
  255. package/src/panels/diff-panel.ts +20 -20
  256. package/src/panels/diff-review-model.ts +5 -5
  257. package/src/panels/diff-review-panel.ts +5 -5
  258. package/src/panels/eval-registry.ts +2 -2
  259. package/src/panels/expandable-list-panel.ts +5 -5
  260. package/src/panels/fleet-acts.ts +20 -20
  261. package/src/panels/fleet-deep-link.ts +5 -5
  262. package/src/panels/fleet-gateway.ts +12 -12
  263. package/src/panels/fleet-observed-render.ts +11 -11
  264. package/src/panels/fleet-panel-format.ts +14 -14
  265. package/src/panels/fleet-panel-worktree-detail.ts +8 -8
  266. package/src/panels/fleet-panel.ts +34 -34
  267. package/src/panels/fleet-read-model.ts +49 -49
  268. package/src/panels/fleet-spawn.ts +15 -15
  269. package/src/panels/fleet-steer.ts +7 -7
  270. package/src/panels/fleet-stop.ts +5 -5
  271. package/src/panels/fleet-tabs.ts +14 -14
  272. package/src/panels/fleet-transcript.ts +26 -26
  273. package/src/panels/git-panel.ts +8 -8
  274. package/src/panels/hosted-session-feed.ts +13 -13
  275. package/src/panels/hosted-session-panel.ts +7 -7
  276. package/src/panels/index.ts +1 -1
  277. package/src/panels/local-auth-panel.ts +15 -15
  278. package/src/panels/memory-consolidation-gateway.ts +8 -8
  279. package/src/panels/modals/devices-modal.ts +8 -8
  280. package/src/panels/modals/hooks-modal.ts +1 -1
  281. package/src/panels/modals/keybindings-modal.ts +5 -5
  282. package/src/panels/modals/knowledge-modal.ts +2 -2
  283. package/src/panels/modals/local-auth-modal.ts +4 -4
  284. package/src/panels/modals/marketplace-modal.ts +3 -3
  285. package/src/panels/modals/memory-modal.ts +19 -19
  286. package/src/panels/modals/modal-surface-helpers.ts +1 -1
  287. package/src/panels/modals/modal-theme.ts +3 -3
  288. package/src/panels/modals/pairing-modal.ts +19 -19
  289. package/src/panels/modals/planning-modal.ts +4 -4
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -1,8 +1,8 @@
1
1
  /**
2
- * renderHelpOverlay — renders the help overlay with keyboard shortcuts and slash commands.
2
+ * renderHelpOverlay, renders the help overlay with keyboard shortcuts and slash commands.
3
3
  *
4
4
  * Opened via `/commands`. `?` and `/help` open the searchable command
5
- * browser (a selection modal that runs the picked command) instead — they
5
+ * browser (a selection modal that runs the picked command) instead, they
6
6
  * are a different, complementary surface, not this one.
7
7
  */
8
8
 
@@ -80,7 +80,7 @@ export function renderHelpOverlay(
80
80
  ` ${'Shift+Enter'.padEnd(20)} Insert newline`,
81
81
  ` ${kb('paste').padEnd(20)} Paste (image priority)`,
82
82
  ` ${(kb('undo') + ' / ' + kb('redo')).padEnd(20)} Undo / redo`,
83
- shortcutLine('(paste >8 lines)', 'Folds to [TEXT: pN, M lines] — /pastes previews it before you submit'),
83
+ shortcutLine('(paste >8 lines)', 'Folds to [TEXT: pN, M lines]; /pastes previews it before you submit'),
84
84
  '',
85
85
  ' Overlays And Panels',
86
86
  ' ' + '\u2500'.repeat(40),
@@ -213,7 +213,7 @@ export function renderHelpOverlay(
213
213
 
214
214
  const allRows = [...shortcutRows, ...commandRows];
215
215
 
216
- // Apply scroll offset — show a window of rows
216
+ // Apply scroll offset, show a window of rows
217
217
  const metrics = getOverlaySurfaceMetrics(width, viewportHeight, {
218
218
  chromeRows: 4,
219
219
  minContentRows: 8,
@@ -249,7 +249,7 @@ export function renderHelpOverlay(
249
249
  }
250
250
 
251
251
  /**
252
- * renderShortcutsOverlay — renders keyboard shortcuts as Line[].
252
+ * renderShortcutsOverlay, renders keyboard shortcuts as Line[].
253
253
  * Accessed via /shortcuts command. Reflects live keybindings (user overrides included).
254
254
  */
255
255
  export function renderShortcutsOverlay(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * hint-grammar.ts — the single hint-bar grammar for every overlay footer.
2
+ * hint-grammar.ts, the single hint-bar grammar for every overlay footer.
3
3
  *
4
4
  * one grammar across the model picker, settings modal, help/shortcuts
5
5
  * overlays, and ModalFactory variants so footers stop drifting into three
@@ -44,7 +44,7 @@ export function formatHints(specs: readonly HintSpec[]): string {
44
44
 
45
45
  /**
46
46
  * Join already-rendered segments (hint bars, state tags) with the shared
47
- * separator, dropping empties. Order is preserved — use this to append state
47
+ * separator, dropping empties. Order is preserved, use this to append state
48
48
  * indicators after a {@link formatHints} bar.
49
49
  */
50
50
  export function joinHints(...segments: Array<string | null | undefined>): string {
@@ -1,7 +1,7 @@
1
1
  import { GLYPHS, SPINNER_FRAMES, UI_TONES } from './ui-primitives.ts';
2
2
 
3
3
  /**
4
- * Layout constants — single source of truth for margins and content width.
4
+ * Layout constants, single source of truth for margins and content width.
5
5
  * All renderers import these instead of hardcoding indent values. The object
6
6
  * itself lives in @pellux/goodvibes-terminal-shell alongside the transcript
7
7
  * tree geometry that reads LEFT_MARGIN/RIGHT_MARGIN out of it, so the margins
@@ -1,5 +1,5 @@
1
1
  /**
2
- * markdown-inline.ts — inline markdown tokenizer (bold, italic, inline code,
2
+ * markdown-inline.ts, inline markdown tokenizer (bold, italic, inline code,
3
3
  * links, bare URLs, absolute file paths).
4
4
  *
5
5
  * Extracted from markdown.ts so both the block renderer (markdown.ts) and the
@@ -63,7 +63,7 @@ export function renderInlineMarkdown(text: string): InlineToken[] {
63
63
  i = end + 3;
64
64
  continue;
65
65
  }
66
- // No closing *** found — emit the leading * as plain text so the ** bold
66
+ // No closing *** found, emit the leading * as plain text so the ** bold
67
67
  // check can handle the remaining ** on the next iteration.
68
68
  tokens.push({ type: 'text', text: '*', style: {} });
69
69
  i += 1;
@@ -108,7 +108,7 @@ export function renderInlineMarkdown(text: string): InlineToken[] {
108
108
  }
109
109
  }
110
110
 
111
- // Plain text — accumulate until next special char, detect bare URLs and file paths
111
+ // Plain text, accumulate until next special char, detect bare URLs and file paths
112
112
  let end = i + 1;
113
113
  while (end < text.length && !INLINE_SPECIAL_CHARS.has(text[end])) {
114
114
  const code = text.charCodeAt(end);
@@ -1,11 +1,11 @@
1
1
  /**
2
- * markdown-table.ts — box-drawn markdown tables whose cells WRAP.
2
+ * markdown-table.ts, box-drawn markdown tables whose cells WRAP.
3
3
  *
4
4
  * The previous implementation (inside markdown.ts) allocated each column a
5
5
  * proportional slice of the terminal width and then ellipsized any cell that
6
6
  * did not fit: a comparison table rendered "Files, code, and…" in its label
7
7
  * column and "citation coverage, checkpoin…" in its content columns, and the
8
- * cut text was unrecoverable — it was never written to the buffer at all, so
8
+ * cut text was unrecoverable, it was never written to the buffer at all, so
9
9
  * no scroll, copy, or expand could bring it back.
10
10
  *
11
11
  * This renderer never ellipsizes. A cell that exceeds its column width wraps
@@ -17,7 +17,7 @@
17
17
  * gets its full natural width, so a narrow label column is never starved down
18
18
  * to one word plus an ellipsis while a wide prose column takes the rest:
19
19
  *
20
- * 1. Each column asks for `desiredMin` — enough to hold its longest single
20
+ * 1. Each column asks for `desiredMin`, enough to hold its longest single
21
21
  * word (capped at WORD_MIN_CAP so one long URL cannot starve the table),
22
22
  * but never more than the column's natural width and never less than
23
23
  * MIN_COL when the budget allows it.
@@ -31,7 +31,7 @@
31
31
  * When even HARD_MIN_COL per column plus the borders exceeds the terminal
32
32
  * width, no allocation helps: the box drawing itself does not fit. That case
33
33
  * used to write the overflowing columns past the end of the line buffer, where
34
- * they were discarded — an eight-column table at width 40 lost its last
34
+ * they were discarded, an eight-column table at width 40 lost its last
35
35
  * columns, headers included, with nothing on screen to say so. The renderer now
36
36
  * abandons the box at that point and stacks each row as `Header: value` records
37
37
  * wrapped to the available width, so every column header and every cell is
@@ -131,7 +131,7 @@ function flattenCellChars(raw: string, isHdr: boolean): StyledChar[] {
131
131
  /**
132
132
  * Word-aware wrap of a styled character run into lines no wider than `maxW`
133
133
  * display columns. A word wider than `maxW` is broken across lines character
134
- * by character — the text is always emitted in full, never cut.
134
+ * by character, the text is always emitted in full, never cut.
135
135
  */
136
136
  function wrapStyledChars(chars: readonly StyledChar[], maxW: number): StyledChar[][] {
137
137
  if (maxW <= 0) return [[]];
@@ -306,7 +306,7 @@ function emitStyledLines(
306
306
  * Each data row becomes a block of `Header: value` lines wrapped to the
307
307
  * available width, separated by a rule. Header text is styled as a header and
308
308
  * force-broken rather than cut if it is somehow wider than the terminal, so the
309
- * guarantee the box layout makes — every column present, nothing truncated —
309
+ * guarantee the box layout makes, every column present, nothing truncated,
310
310
  * holds at any width.
311
311
  */
312
312
  function renderStackedTable(
@@ -370,7 +370,7 @@ export function renderTable(rows: string[], width: number, indent: number): Line
370
370
  const availW = width - indent;
371
371
 
372
372
  // Measure using stripped text (no markdown markers), both the natural width
373
- // and the widest single word — the latter is what a column needs before it
373
+ // and the widest single word, the latter is what a column needs before it
374
374
  // has to start breaking words apart.
375
375
  const naturalWidths: number[] = new Array(colCount).fill(0);
376
376
  const minWordWidths: number[] = new Array(colCount).fill(0);
@@ -95,7 +95,7 @@ export interface ModalConfig {
95
95
  // DEFAULT_STYLE is built from the mode-resolved chrome tones (activeUiTones) and
96
96
  // rebuilt IN PLACE on a mode flip via the registered refresher. createModal reads
97
97
  // it per call via `{ ...DEFAULT_STYLE, ...config.style }`, so the in-place rebuild
98
- // reaches every modal — see theme.ts's active-mode runtime note.
98
+ // reaches every modal, see theme.ts's active-mode runtime note.
99
99
  function buildDefaultModalStyle(): Required<ModalStyle> {
100
100
  const t = activeUiTones();
101
101
  return {
@@ -120,7 +120,7 @@ registerThemeRefresh(() => Object.assign(DEFAULT_STYLE, buildDefaultModalStyle()
120
120
  // ── ModalFactory ─────────────────────────────────────────────────────────────
121
121
 
122
122
  /**
123
- * ModalFactory — unified modal rendering for goodvibes-tui.
123
+ * ModalFactory, unified modal rendering for goodvibes-tui.
124
124
  *
125
125
  * Renders modals as Line[] (Cell arrays) consistent with the compositor
126
126
  * overlay pipeline. All existing modals (file-picker, model-picker,
@@ -271,7 +271,7 @@ export class ModalFactory {
271
271
 
272
272
  /**
273
273
  * Render a single selectable list item row.
274
- * ┤ text ├ — bordered left/right, with optional selection highlight.
274
+ * ┤ text ├ , bordered left/right, with optional selection highlight.
275
275
  */
276
276
  static renderListItem(
277
277
  boxW: number,
@@ -4,8 +4,8 @@
4
4
  *
5
5
  * this file used to also hold `renderModelPickerOverlay`, the
6
6
  * overlay-style model-picker renderer. It was superseded by
7
- * `renderModelWorkspace` (model-workspace.ts) — conversation-overlays.ts
8
- * routes `input.modelPicker.active` there, not here — and had no remaining
7
+ * `renderModelWorkspace` (model-workspace.ts), conversation-overlays.ts
8
+ * routes `input.modelPicker.active` there, not here, and had no remaining
9
9
  * non-test import site, so it (and its dedicated unit/golden tests) were
10
10
  * removed. This constant is still live: handler-picker-routes.ts uses it to
11
11
  * size the current workspace's visible-row window.
@@ -124,7 +124,7 @@ function modelKey(model: ModelDefinition): string {
124
124
 
125
125
  function targetSummary(info: ModelPickerTargetInfo): string {
126
126
  if (!info.enabled) return 'disabled';
127
- // 'embeddings' has no model concept — configuredNote carries the honest
127
+ // 'embeddings' has no model concept, configuredNote carries the honest
128
128
  // provider id + dimensions + configured-state summary instead of a
129
129
  // computed provider:model route (which would print a phantom "model:").
130
130
  if (info.configuredNote) return info.configuredNote;
@@ -189,7 +189,7 @@ function detailLines(picker: ModelPickerModal, width: number): string[] {
189
189
  } else {
190
190
  lines.push(`Context cap overrides the detected local-model context window for this selection.`);
191
191
  }
192
- // A visible cursor glyph on the query itself when search is focused —
192
+ // A visible cursor glyph on the query itself when search is focused,
193
193
  // the only prior affordance was a footer-hint text swap ('/ search' vs.
194
194
  // 'Typing filters search...'), buried at the end of a long hint line and
195
195
  // easy to miss (confirmed via live tmux repro). This puts the "you are
@@ -283,8 +283,8 @@ function renderModelRows(picker: ModelPickerModal, lines: Line[], rows: number,
283
283
  /**
284
284
  * The effort step of the model picker.
285
285
  *
286
- * The list is exactly the levels the chosen model resolved to — not a fixed
287
- * four — and it is introduced by a headline naming what this model does with
286
+ * The list is exactly the levels the chosen model resolved to, not a fixed
287
+ * four, and it is introduced by a headline naming what this model does with
288
288
  * the setting (named levels, a thinking-token budget, an on/off toggle, or
289
289
  * nothing at all). A best-guess spec prints its caveat under the list rather
290
290
  * than presenting unverified levels as if the provider had confirmed them.
@@ -433,8 +433,8 @@ export function renderModelWorkspace(picker: ModelPickerModal, width: number, vi
433
433
  const details = detailLines(picker, contentW - 2);
434
434
  // Never drop detail lines (the modal rule: UI-authored descriptive text is
435
435
  // always shown in full). Size the detail band to the ACTUAL content,
436
- // growing past the old fixed proportional default up to maxDetailRows —
437
- // the ceiling that keeps at least a header row and one list row available —
436
+ // growing past the old fixed proportional default up to maxDetailRows,
437
+ // the ceiling that keeps at least a header row and one list row available,
438
438
  // rather than silently slicing off whatever didn't fit a 32% guess.
439
439
  const detailRows = clamp(Math.max(details.length, Math.round(bodyRows * 0.32)), minDetailRows, maxDetailRows);
440
440
  const listRows = Math.max(1, bodyRows - detailRows - 1);
@@ -475,7 +475,7 @@ export function renderModelWorkspace(picker: ModelPickerModal, width: number, vi
475
475
  const footer = contentLine(safeWidth, PALETTE.footerBg);
476
476
  const targetHint = picker.focusPane === 'targets' ? 'Focus targets' : 'Focus list';
477
477
  // W3 Finding 2: while search is focused, every printable key (including
478
- // c/a/b/g) types into the query — handler-picker-routes.ts guards those
478
+ // c/a/b/g) types into the query, handler-picker-routes.ts guards those
479
479
  // single-key shortcuts with `!searchFocused` (Up/Down blur search first).
480
480
  // Advertising them here regardless of focus state was a footer that lied
481
481
  // about what the keys currently do. Tab still cycles price in both states
@@ -306,7 +306,7 @@ function renderWideLayout(
306
306
  const selectedText = selectedFieldText(wizard);
307
307
  // The selected field's own hint is the direct analog of the reported
308
308
  // defect (descriptive text explaining what the currently-focused option
309
- // does) — some hints run past 400 characters, e.g. security-caveat text.
309
+ // does), some hints run past 400 characters, e.g. security-caveat text.
310
310
  // It is never clipped to a single row: it wraps onto as many lines as it
311
311
  // needs, and the field list below starts after it, growing/shrinking the
312
312
  // field-list area rather than losing hint text. Title/description/controls
@@ -18,7 +18,7 @@ export interface OverlayBoxPalette {
18
18
 
19
19
  // Built from the mode-resolved chrome tones (activeUiTones) and rebuilt IN PLACE
20
20
  // on a mode flip via the registered refresher (60+ call sites read it by
21
- // reference — see theme.ts's active-mode runtime note).
21
+ // reference, see theme.ts's active-mode runtime note).
22
22
  function buildOverlayPalette(): OverlayBoxPalette {
23
23
  const t = activeUiTones();
24
24
  return {
@@ -9,7 +9,7 @@ import { renderPanelWorkspaceBar } from './panel-workspace-bar.ts';
9
9
  /**
10
10
  * Per-panel render cache for dirty-flag skipping.
11
11
  *
12
- * Maintainability hazard — mid-render invalidation race:
12
+ * Maintainability hazard, mid-render invalidation race:
13
13
  *
14
14
  * If an event listener (e.g. a runtime-bus subscriber) fires DURING a panel's
15
15
  * `render()` call and mutates state such that `needsRender = true`, the
@@ -25,7 +25,7 @@ import { renderPanelWorkspaceBar } from './panel-workspace-bar.ts';
25
25
  *
26
26
  * The fix (now applied): snapshot `needsRender` before calling `render()` and
27
27
  * only call `markRendered()` when no concurrent invalidation occurred during
28
- * the render pass — preserving any mid-render invalidation.
28
+ * the render pass, preserving any mid-render invalidation.
29
29
  */
30
30
  interface PanelRenderCache {
31
31
  lines: Line[];
@@ -40,7 +40,7 @@ const panelRenderCache = new WeakMap<Panel, PanelRenderCache>();
40
40
  * its invalidate() to bump the counter stored in this map.
41
41
  *
42
42
  * Race-guard: snapshot the generation before render(), compare after. If it
43
- * changed, a mid-render invalidation occurred — leave needsRender=true.
43
+ * changed, a mid-render invalidation occurred, leave needsRender=true.
44
44
  */
45
45
  const panelRenderGen = new WeakMap<Panel, { gen: number }>();
46
46
 
@@ -72,13 +72,13 @@ export function renderPanel(panel: Panel, width: number, height: number): Line[]
72
72
  const genBefore = genState.gen;
73
73
  const lines = panel.render(width, height);
74
74
  // Only call markRendered() when no mid-render invalidation occurred.
75
- // If the generation changed during render(), a concurrent invalidate() fired —
75
+ // If the generation changed during render(), a concurrent invalidate() fired,
76
76
  // leave needsRender=true so the next frame re-renders with the new state.
77
77
  if (genState.gen === genBefore) {
78
78
  panel.markRendered();
79
79
  }
80
80
  // If gen changed, needsRender is already true (invalidate() set it); do not
81
- // call markRendered() — the next frame will pick it up.
81
+ // call markRendered(), the next frame will pick it up.
82
82
  panelRenderCache.set(panel, { lines, width, height });
83
83
  return lines;
84
84
  }
@@ -3,7 +3,7 @@ import type { WorkspaceTab } from '../panels/panel-manager.ts';
3
3
  import { renderTabStrip, type TabHitRegion } from './tab-strip.ts';
4
4
  import { UI_TONES } from './ui-primitives.ts';
5
5
 
6
- // Theme tokens (no raw hex) — keeps the bar in sync with the shared palette.
6
+ // Theme tokens (no raw hex), keeps the bar in sync with the shared palette.
7
7
  const ACTIVE_FG = UI_TONES.fg.primary; // selected tab text
8
8
  const ACTIVE_BG = UI_TONES.bg.selected; // selected tab fill (stronger contrast)
9
9
  const INACTIVE_FG = UI_TONES.fg.muted; // unselected tabs
@@ -7,7 +7,7 @@ import { formatHints } from './hint-grammar.ts';
7
7
  import { voiceCaptureRowVisible, type VoiceCaptureIndicatorState } from '../core/voice-capture-status.ts';
8
8
 
9
9
  /**
10
- * renderProcessIndicator — shows a one-line summary of active background
10
+ * renderProcessIndicator, shows a one-line summary of active background
11
11
  * processes below the input area.
12
12
  *
13
13
  * Dimmed when no processes are active, highlighted (cyan) when agents or
@@ -17,7 +17,7 @@ import { voiceCaptureRowVisible, type VoiceCaptureIndicatorState } from '../core
17
17
  /**
18
18
  * Agent-count label. The footer counts only ACTIVE agents, while the fleet
19
19
  * lists every node (running, terminal, chains, watchers). Label the count
20
- * "active" so it is never misread as a grand total — the [Enter] View hint
20
+ * "active" so it is never misread as a grand total, the [Enter] View hint
21
21
  * opens the fleet for the full picture. (item 5d.)
22
22
  */
23
23
  function agentCountLabel(agentCount: number): string {
@@ -100,21 +100,21 @@ export function renderProcessIndicator(
100
100
  /**
101
101
  * Sentence each capture state renders as. Written out per state rather than
102
102
  * assembled from fragments because these are the words that tell a user whether
103
- * their microphone is open — "listening" and "recording" mean different things
103
+ * their microphone is open, "listening" and "recording" mean different things
104
104
  * and a row that blurred them would be worse than no row.
105
105
  */
106
106
  const VOICE_CAPTURE_LABELS: Record<VoiceCaptureIndicatorState['kind'], string> = {
107
107
  requesting: 'opening the microphone',
108
- recording: 'recording — press the voice-input key again to stop',
108
+ recording: 'recording: press the voice-input key again to stop',
109
109
  transcribing: 'transcribing what you said',
110
110
  'wake-listening': 'listening for the wake phrase',
111
- 'wake-capturing': 'wake heard — recording what follows',
112
- 'wake-restarting': 'capture stream ended — restarting',
111
+ 'wake-capturing': 'wake heard: recording what follows',
112
+ 'wake-restarting': 'capture stream ended: restarting',
113
113
  'wake-latched': 'wake detection stopped',
114
114
  };
115
115
 
116
116
  /**
117
- * renderVoiceCaptureIndicator — the persistent row shown while a microphone is
117
+ * renderVoiceCaptureIndicator, the persistent row shown while a microphone is
118
118
  * open, below the input area beside the process indicator.
119
119
  *
120
120
  * It exists because a held-open capture device is otherwise invisible: wake
@@ -125,7 +125,7 @@ const VOICE_CAPTURE_LABELS: Record<VoiceCaptureIndicatorState['kind'], string> =
125
125
  * moment ago and is waiting on it.
126
126
  *
127
127
  * Returns no lines when nothing is captured, or when the wake rows are turned
128
- * off — the caller splices whatever comes back, so an empty array is "no row".
128
+ * off, the caller splices whatever comes back, so an empty array is "no row".
129
129
  */
130
130
  export function renderVoiceCaptureIndicator(
131
131
  width: number,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * renderProfilePickerModal — renders the /profiles picker modal as Line[]
2
+ * renderProfilePickerModal, renders the /profiles picker modal as Line[]
3
3
  * using ModalFactory.
4
4
  *
5
5
  * Shows a list of saved profiles with:
@@ -57,9 +57,9 @@ export function renderProfilePickerModal(
57
57
  } else {
58
58
  // Proportional column widths that adapt to the modal's content width:
59
59
  // timestamp ~22% (clamped 10..16); the name column absorbs the remainder
60
- // (ported from session-picker-modal.ts). Reserves 4 cols — 2 for the
60
+ // (ported from session-picker-modal.ts). Reserves 4 cols, 2 for the
61
61
  // name/timestamp separator and 2 for the list row's selection indicator
62
- // ("▸ ") that ModalFactory prepends outside the wrapped label — so the
62
+ // ("▸ ") that ModalFactory prepends outside the wrapped label, so the
63
63
  // row never spills the timestamp's embedded space onto a wrapped line.
64
64
  const tsW = Math.min(16, Math.max(10, Math.floor(contentW * 0.22)));
65
65
  const nameW = Math.max(8, contentW - tsW - 4);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * computePromptContentWidth — content width available for prompt text inside
2
+ * computePromptContentWidth, content width available for prompt text inside
3
3
  * the footer input box, after the box margin, inner padding, and the ' > '
4
4
  * prefix are subtracted.
5
5
  *
@@ -14,7 +14,7 @@ export function renderSearchOverlay(
14
14
  manager: SearchManager,
15
15
  width: number
16
16
  ): Line[] {
17
- // Match count / status text — displayed in dim grey, right of query
17
+ // Match count / status text, displayed in dim grey, right of query
18
18
  const hasMatches = manager.matches.length > 0;
19
19
  const matchCount = hasMatches
20
20
  ? `${manager.currentMatch + 1}/${manager.matches.length}${manager.wrapAround ? ' (wrap)' : ''}`
@@ -31,11 +31,11 @@ export function renderSearchOverlay(
31
31
  : ' [Enter/Tab] lock [Esc] close';
32
32
  const shortHints = locked ? ' [n/N] [Esc]' : ' [Esc]';
33
33
 
34
- // Build left portion: label + query (no match count — that gets separate styling)
34
+ // Build left portion: label + query (no match count, that gets separate styling)
35
35
  const leftPart = label + queryDisplay;
36
36
 
37
37
  // Tiered degradation: as the terminal narrows, first shorten the hints, then
38
- // drop them, then drop the match-count segment — so the query area (leftWidth)
38
+ // drop them, then drop the match-count segment, so the query area (leftWidth)
39
39
  // never collapses to zero or negative and the overlay never renders garbage.
40
40
  const minLeft = getDisplayWidth(label) + 4; // label + a few query cells
41
41
  let hints = fullHints;
@@ -88,7 +88,7 @@ function frameRowsFor(modal: SelectionModal): number {
88
88
  }
89
89
 
90
90
  /**
91
- * Physical rows every row of the list needs, category headers included — the
91
+ * Physical rows every row of the list needs, category headers included, the
92
92
  * height the box would have to give the list for nothing to be scrolled away.
93
93
  */
94
94
  function totalContentRowsFor(modal: SelectionModal, remaining: number): number {
@@ -124,7 +124,7 @@ export function renderSelectionModalOverlay(
124
124
  // Size to content before falling back to the viewport's height ratio. When
125
125
  // every row (and its wrapped detail) fits in the space the terminal
126
126
  // actually has, ask for exactly that many rows, so a short list is never
127
- // split behind a "(n below)" hint with screen still empty below the box —
127
+ // split behind a "(n below)" hint with screen still empty below the box,
128
128
  // a two-item question in particular must always show both its answers. A
129
129
  // list genuinely taller than the terminal keeps the ratio-derived budget
130
130
  // and scrolls as before.
@@ -142,7 +142,7 @@ export function renderSelectionModalOverlay(
142
142
  // Modals size to content: items whose detail wraps onto extra lines can
143
143
  // need more physical rows than a plain one-row-per-item modal, so this
144
144
  // ceiling grows with the viewport rather than staying pinned at a small
145
- // constant (still bounded — never larger than the terminal can show).
145
+ // constant (still bounded, never larger than the terminal can show).
146
146
  maxContentRows: Math.max(10, viewportHeight - chromeRows - 4),
147
147
  // A floor only. The shared budget keeps its own target and ceiling, so a
148
148
  // modal whose content is shorter than that target is unaffected: this can
@@ -208,7 +208,7 @@ export function renderSelectionModalOverlay(
208
208
  // visible window never silently shows fewer full items than the budget
209
209
  // allows just because a fixed item-count cap ran out. Always shows the
210
210
  // selected item (even alone, if its wrapped detail is taller than the
211
- // whole budget — descriptive text is never clipped to make it fit),
211
+ // whole budget, descriptive text is never clipped to make it fit),
212
212
  // then grows outward, roughly centered, until the budget is spent.
213
213
  const selected = Math.max(0, Math.min(modal.selectedIndex, items.length - 1));
214
214
  let startIdx = selected;
@@ -278,7 +278,7 @@ export function renderSelectionModalOverlay(
278
278
  });
279
279
  if (item.detail) {
280
280
  if (detailLayout.wrappedDetail === null) {
281
- // Fits beside the label at a readable width — no truncation needed.
281
+ // Fits beside the label at a readable width, no truncation needed.
282
282
  putText(labelLine, layout.margin + 2 + INDICATOR_WIDTH + labelWidth, 2, ' ', {
283
283
  fg: BODY_FG,
284
284
  bg: isSelected ? SELECTED_BG : DEFAULT_OVERLAY_PALETTE.bodyBg,
@@ -289,7 +289,7 @@ export function renderSelectionModalOverlay(
289
289
  });
290
290
  lines.push(labelLine);
291
291
  } else {
292
- // Doesn't fit beside the label — wrap the FULL detail text onto as
292
+ // Doesn't fit beside the label, wrap the FULL detail text onto as
293
293
  // many lines as it needs below the label, rather than clipping it.
294
294
  lines.push(labelLine);
295
295
  for (const detailLineText of detailLayout.wrappedDetail) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * semantic-diff.ts — Functional change summary after file edits.
2
+ * semantic-diff.ts, Functional change summary after file edits.
3
3
  *
4
4
  * Compares AST before/after an edit and extracts:
5
5
  * - Added / removed / modified functions, methods, classes, etc.
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Returns a compact SemanticDiff that can be rendered alongside a regular diff.
10
10
  * Gracefully returns null when tree-sitter is unavailable or the language is
11
- * unsupported — callers should treat null as "no semantic info available".
11
+ * unsupported, callers should treat null as "no semantic info available".
12
12
  */
13
13
 
14
14
  import { TreeSitterService } from '@pellux/goodvibes-sdk/platform/intelligence';
@@ -28,9 +28,9 @@ export interface SymbolChange {
28
28
  kind: ChangeKind;
29
29
  symbolKind: SymbolInfo['kind'];
30
30
  name: string;
31
- /** Present for 'modified' — the old signature. */
31
+ /** Present for 'modified', the old signature. */
32
32
  oldSignature?: string;
33
- /** Present for 'added' or 'modified' — the new signature. */
33
+ /** Present for 'added' or 'modified', the new signature. */
34
34
  newSignature?: string;
35
35
  }
36
36
 
@@ -49,7 +49,7 @@ export interface SemanticDiff {
49
49
  }
50
50
 
51
51
  // ---------------------------------------------------------------------------
52
- // Import extraction (regex-based — fast, no grammar needed)
52
+ // Import extraction (regex-based, fast, no grammar needed)
53
53
  // ---------------------------------------------------------------------------
54
54
 
55
55
  interface ParsedImport {
@@ -179,7 +179,6 @@ function diffImports(
179
179
  if (!aImp) {
180
180
  changes.push({ kind: 'removed', specifier: spec, names: bImp.names });
181
181
  } else {
182
- // Check if named imports changed
183
182
  const bSet = new Set(bImp.names);
184
183
  const aSet = new Set(aImp.names);
185
184
  const added = aImp.names.filter(n => !bSet.has(n));
@@ -231,7 +230,7 @@ export async function computeSemanticDiff(
231
230
 
232
231
  const langId = detectLanguage(filePath);
233
232
  if (!langId) {
234
- // No language support — return import changes only if any
233
+ // No language support, return import changes only if any
235
234
  if (imports.length === 0) return null;
236
235
  return { symbols: [], imports, totalChanges: imports.length };
237
236
  }