@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
@@ -56,7 +56,7 @@ type WireShellUiOpenersOptions = {
56
56
  getConfiguredProviderIds: () => string[];
57
57
  getPinned: () => Promise<string[]>;
58
58
  render: () => void;
59
- /** Trust-at-consequence-time bridge — patched here with the real modal-driving implementation. */
59
+ /** Trust-at-consequence-time bridge, patched here with the real modal-driving implementation. */
60
60
  trustPromptRef: { requestTrustDecision: () => Promise<WorkspaceTrustLevel> };
61
61
  };
62
62
 
@@ -90,7 +90,7 @@ function deriveConfiguredVia(
90
90
  ): 'env' | 'secrets' | 'subscription' | 'anonymous' | undefined {
91
91
  if (!configuredIds.has(providerId)) return undefined;
92
92
 
93
- // Tier 1: subscription check (most specific — subscription overrides env for this provider)
93
+ // Tier 1: subscription check (most specific, subscription overrides env for this provider)
94
94
  const subs = subscriptionManager.list();
95
95
  if (subs.some((s) => s.provider === providerId)) return 'subscription';
96
96
 
@@ -148,7 +148,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
148
148
 
149
149
  // Trust-at-consequence-time: raised by trustGatedAsk on the first non-read
150
150
  // request in an undecided workspace; the answer persists via setLevel().
151
- // Registration self-records here too when trusted (never for restricted —
151
+ // Registration self-records here too when trusted (never for restricted,
152
152
  // see selfRecordWorkspaceRegistration's doc).
153
153
  trustPromptRef.requestTrustDecision = () =>
154
154
  new Promise((resolve) => {
@@ -205,7 +205,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
205
205
  * Fetch the embedding-provider status list once per picker-open and shape
206
206
  * it into the picker's own tiny item type. Uses the registry's async
207
207
  * `.status()` (not the sync `.list()`) specifically because `.list()` does
208
- * not carry `configured` — and unconfigured providers must be shown
208
+ * not carry `configured`, and unconfigured providers must be shown
209
209
  * honestly, not hidden.
210
210
  */
211
211
  async function resolveEmbeddingProviderEntries(): Promise<EmbeddingProviderPickerEntry[]> {
@@ -274,7 +274,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
274
274
  {
275
275
  target: 'embeddings',
276
276
  label: 'Embeddings',
277
- description: 'Embedding provider used for memory search and the code index. Not an LLM route — no model concept.',
277
+ description: 'Embedding provider used for memory search and the code index. Not an LLM route: no model concept.',
278
278
  provider: embeddingProviderId,
279
279
  model: '',
280
280
  enabled: true,
@@ -386,7 +386,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
386
386
  };
387
387
 
388
388
  // Mirrors the Ctrl+F chord's own toggle exactly (handler-shortcuts.ts's
389
- // 'search' case) — the transcript search overlay isn't tracked on the
389
+ // 'search' case), the transcript search overlay isn't tracked on the
390
390
  // modal stack, so this doesn't call modalOpened either.
391
391
  commandContext.openTranscriptSearch = () => {
392
392
  if (input.searchManager.active) input.searchManager.close(input.conversationManager);
@@ -411,7 +411,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
411
411
  input.modalOpened('settings');
412
412
  input.settingsModal.open(configManager, featureFlags, subscriptionManager, serviceRegistry, mcpRegistry, secretsManager, {
413
413
  // The Connections category probes through this app's catalog, which is
414
- // empty by construction — so those rows read 'unreachable' rather than
414
+ // empty by construction, so those rows read 'unreachable' rather than
415
415
  // inventing a settled state nothing established. Retargeting that probe
416
416
  // at the daemon is the remaining half of this seam.
417
417
  ...(commandContext.workspace?.gatewayMethods
@@ -451,11 +451,11 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
451
451
  // open()-time modal-redirect callback (a legacy panel id resolving to a modal
452
452
  // name). Surfaces are registered in builtin-modals.ts; a name with no
453
453
  // registered surface degrades honestly to a print rather than a blank modal.
454
- // The stack name is the stable 'config' slot (one config modal at a time —
454
+ // The stack name is the stable 'config' slot (one config modal at a time,
455
455
  // opening another swaps the surface), so Esc close/return and the modal-stack
456
456
  // machinery need only the single 'config' case (handler-ui-state.ts).
457
457
  // Some panel-id redirects (and migrated front-doors) resolve to a NATIVE
458
- // modal that is not a ConfigModalSurface — e.g. `sessions` -> `sessionPicker`,
458
+ // modal that is not a ConfigModalSurface, e.g. `sessions` -> `sessionPicker`,
459
459
  // where 'sessionPicker' is the real session-picker modal opened by
460
460
  // commandContext.openSessionPicker below, NOT a registered config surface.
461
461
  // getModalSurface can never find these, so consult this small name->opener
@@ -513,7 +513,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
513
513
  }
514
514
  if (panelManager.getAllOpen().length === 0) {
515
515
  // (the purge): 'panel-list' (a browse-all-panels picker PANEL)
516
- // was DELETE-disposition — a picker over a handful of panels is dead
516
+ // was DELETE-disposition, a picker over a handful of panels is dead
517
517
  // weight now. Its replacement is this selection MODAL, built from the
518
518
  // live registry (PanelManager.getRegisteredTypes()) rather than a
519
519
  // hardcoded list, so it can never list a retired/deleted id.
@@ -547,8 +547,8 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
547
547
  commandContext.getCommandCategories = () => getCommandCategoryMap();
548
548
 
549
549
  commandContext.openCommandPalette = () => {
550
- // The palette is built live from the command registry — never a hardcoded
551
- // list — so it can never drift from the real command set. Category labels
550
+ // The palette is built live from the command registry, never a hardcoded
551
+ // list, so it can never drift from the real command set. Category labels
552
552
  // come from the same source the generated docs use (getCommandCategoryMap).
553
553
  const registry = input.commandRegistry;
554
554
  if (!registry) return;
@@ -582,7 +582,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
582
582
  // Pre-fill the composer with the command (and a trailing space so the
583
583
  // inline args hint shows what the command wants). Keyboard-first: focus
584
584
  // returns to the composer with command mode armed so the user fills any
585
- // args and presses Enter — matching tab-completion's fill behavior.
585
+ // args and presses Enter, matching tab-completion's fill behavior.
586
586
  input.prompt = `/${cmd.name} `;
587
587
  input.cursorPos = input.prompt.length;
588
588
  input.commandMode = true;
@@ -610,7 +610,7 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
610
610
  panelManager.open(panelId, pane, target);
611
611
  panelManager.show();
612
612
  // focus rule 1a: every registered caller of showPanel is a slash
613
- // command (/panel open, /routes, /approval, /tasks, /ops-control, ...) —
613
+ // command (/panel open, /routes, /approval, /tasks, /ops-control, ...),
614
614
  // the command path leaves focus in the composer ("the user is
615
615
  // mid-command-flow") unless the caller explicitly asks to grab it.
616
616
  if (opts?.focus) panelManager.focusPanels();
@@ -1,11 +1,11 @@
1
1
  /**
2
- * voice-capture-shell.ts — the shell's side of microphone capture.
2
+ * voice-capture-shell.ts, the shell's side of microphone capture.
3
3
  *
4
4
  * Extracted from main() for the same reason the process-lifecycle wiring was:
5
5
  * the entrypoint is a wiring file held under a source-line gate, and new shell
6
6
  * composition gets its own module and a single call there.
7
7
  *
8
- * What this owns is only the shell-facing half — where a transcript lands (the
8
+ * What this owns is only the shell-facing half, where a transcript lands (the
9
9
  * composer draft, through the same public `prompt`/`cursorPos` fields the
10
10
  * external-editor path writes), how a turn is submitted, which keybinding seam
11
11
  * the Alt+V action hangs off, and the teardown registration that guarantees a
@@ -30,7 +30,7 @@ export interface VoiceCaptureShellDeps {
30
30
  readonly commandContext: CommandContext;
31
31
  /** The shell's teardown registry; the device release is appended to it. */
32
32
  readonly unsubs: Array<() => void>;
33
- /** The live composer buffer — InputHandler exposes public `prompt`/`cursorPos`. */
33
+ /** The live composer buffer, InputHandler exposes public `prompt`/`cursorPos`. */
34
34
  readonly buffer: { prompt: string; cursorPos: number };
35
35
  readonly submitInput: (text: string) => void;
36
36
  readonly notify: (message: string) => void;
@@ -46,8 +46,8 @@ type AgentTaskArgs = {
46
46
 
47
47
  /**
48
48
  * Emitted whenever the guard changes the effective routing decision:
49
- * - 'spawn-forced-wrfc' — implementation-like spawn promoted to WRFC
50
- * - 'spawn-suppressed-wrfc' — spawn judged read-only; WRFC suppressed
49
+ * - 'spawn-forced-wrfc' , implementation-like spawn promoted to WRFC
50
+ * - 'spawn-suppressed-wrfc' , spawn judged read-only; WRFC suppressed
51
51
  * - 'batch-collapsed-to-wrfc'— batch-spawn collapsed into a single WRFC owner chain
52
52
  */
53
53
  export type WrfcGuardTraceKind =
@@ -248,7 +248,7 @@ function isImplementationLikeTask(task: AgentTaskArgs): boolean {
248
248
  function isReadOnlyTask(text: string): boolean {
249
249
  // Branch A: explicit do-not-write guards
250
250
  if (/\bdo\s+not\s+(?:write|edit|modify|change|create)\b|\bread[-\s]*only\b|\bwithout\s+(?:writing|editing|modifying|changing|creating)\b/i.test(text)) return true;
251
- // Branch B: task leads with an analysis/reporting verb — treat it as read-only regardless
251
+ // Branch B: task leads with an analysis/reporting verb, treat it as read-only regardless
252
252
  // of any action verbs that appear later in the sentence. A task that LEADS with
253
253
  // "report", "investigate", "describe", "audit", etc. is describing or evaluating an
254
254
  // action, not performing it. Examples that must NOT reach WRFC:
@@ -259,7 +259,7 @@ function isReadOnlyTask(text: string): boolean {
259
259
  // "audit which modules to delete"
260
260
  // "evaluate whether to migrate"
261
261
  // The negative-lookahead is intentionally absent: the leading verb is authoritative.
262
- // Note: 'review' is intentionally excluded — tasks leading with 'review' are caught
262
+ // Note: 'review' is intentionally excluded, tasks leading with 'review' are caught
263
263
  // by isRootReviewRoleTask() and routed to a WRFC chain as a reviewer role.
264
264
  return /^\s*(?:inspect|research|read|find|list|summarize|analy[sz]e|explain|report|investigate|document|describe|audit|evaluate|assess|check|compare|tell|show)\b/i.test(text);
265
265
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * browser.ts — cross-platform browser launcher utility.
2
+ * browser.ts, cross-platform browser launcher utility.
3
3
  *
4
4
  * Extracted from cli/management.ts so it can be used by input-layer commands
5
5
  * without creating an upward cli→input dependency. Lives in utils (Layer 0)
@@ -12,7 +12,7 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
12
12
  /**
13
13
  * Open the given URL in the user's default browser.
14
14
  * Returns a status string (success or error description).
15
- * Does not throw — errors are returned as a descriptive string.
15
+ * Does not throw, errors are returned as a descriptive string.
16
16
  */
17
17
  export function openBrowser(url: string): string {
18
18
  const platform = process.platform;
@@ -2,13 +2,13 @@
2
2
  * Shared ms-duration formatters for the panel layer.
3
3
  *
4
4
  * Two families are exported, each matching a distinct behavior cluster.
5
- * DO NOT replace these with formatElapsed from utils/format-elapsed.ts —
5
+ * DO NOT replace these with formatElapsed from utils/format-elapsed.ts,
6
6
  * formatElapsed floors to integer seconds and lacks the null/'?ms' guards
7
7
  * that the latency panels require.
8
8
  *
9
9
  * (the purge): formatShortDuration (used only by incident-review-panel
10
- * and eval-panel, both removed — RETIRE-INTO-FLEET and DELETE respectively)
11
- * was removed as a genuinely orphaned export — no remaining caller anywhere
10
+ * and eval-panel, both removed, RETIRE-INTO-FLEET and DELETE respectively)
11
+ * was removed as a genuinely orphaned export, no remaining caller anywhere
12
12
  * in src/.
13
13
  */
14
14
 
@@ -30,7 +30,7 @@ export interface AbbreviateCountOpts {
30
30
  mDecimals?: number;
31
31
  /**
32
32
  * 'fixed' → value.toFixed(decimals) (default)
33
- * 'round' → String(Math.round(value)) — always integer, decimals ignored
33
+ * 'round' → String(Math.round(value)), always integer, decimals ignored
34
34
  */
35
35
  rounding?: 'fixed' | 'round';
36
36
  /**
@@ -39,7 +39,7 @@ export interface AbbreviateCountOpts {
39
39
  */
40
40
  bSuffix?: boolean;
41
41
  /**
42
- * When true, never produce M/B/T — format as k even for millions.
42
+ * When true, never produce M/B/T, format as k even for millions.
43
43
  * Default: false
44
44
  */
45
45
  noM?: boolean;
@@ -23,7 +23,7 @@ const TAGLINE = '[ good vibes ・ A I ・ いい雰囲気
23
23
  const versionLine = (version: string) =>
24
24
  ` ✦ v${version} █ terminal AI assistant █ 自動コード  ✦`;
25
25
 
26
- /** Fixed hint line — the three primary shell entry points. */
26
+ /** Fixed hint line, the three primary shell entry points. */
27
27
  const HINT_LINE = 'Ctrl+P panels / ? help / F2 fleet';
28
28
 
29
29
  export interface SplashOptions {
@@ -38,7 +38,7 @@ export interface SplashOptions {
38
38
  lastSessionId?: string;
39
39
  /**
40
40
  * Version string rendered on the splash's version line. Defaults to the
41
- * build VERSION; injectable so the golden-frame tests can pin a fixture —
41
+ * build VERSION; injectable so the golden-frame tests can pin a fixture,
42
42
  * the version's display width shifts the line's centering, so goldens tied
43
43
  * to the live VERSION break on every release bump (v1.0.0 release failure).
44
44
  */
@@ -66,7 +66,7 @@ export function getSplashLines(columns: number, opts: SplashOptions = {}): strin
66
66
  '',
67
67
  ];
68
68
 
69
- // Live session context — real state pulled from SplashOptions rather than a
69
+ // Live session context, real state pulled from SplashOptions rather than a
70
70
  // static "/help" signpost: model (provider) and tool count on one line, cwd
71
71
  // on the next.
72
72
  const contextBits: string[] = [];
@@ -85,7 +85,7 @@ export function getSplashLines(columns: number, opts: SplashOptions = {}): strin
85
85
 
86
86
  // Last-session resume pointer (readLastSessionPointer result), when recorded.
87
87
  if (opts.lastSessionId) {
88
- lines.push(metaLine(`↩ resume last session — /resume ${opts.lastSessionId}`, columns));
88
+ lines.push(metaLine(`↩ resume last session: /resume ${opts.lastSessionId}`, columns));
89
89
  }
90
90
 
91
91
  lines.push('');
@@ -52,7 +52,7 @@ function stripAnsi(text: string): string {
52
52
  * each component's width is summed and ZWJ/VS chars contribute zero width,
53
53
  * so the total is accurate. However, truncation (truncateDisplay) may split
54
54
  * a ZWJ family mid-sequence, leaving dangling ZWJ/VS characters. This is a
55
- * cosmetic degradation only — line widths remain correct.
55
+ * cosmetic degradation only, line widths remain correct.
56
56
  */
57
57
  export function getDisplayWidth(text: string): number {
58
58
  text = stripAnsi(text);
@@ -86,7 +86,7 @@ export function getDisplayWidth(text: string): number {
86
86
  code === 0x2717 ||
87
87
  code === 0x2714 ||
88
88
  code === 0x2718 ||
89
- // ✕ (0x2715) and ✖ (0x2716) — the multiplication-X cross family used for
89
+ // ✕ (0x2715) and ✖ (0x2716), the multiplication-X cross family used for
90
90
  // the error-line prefix. Terminals draw them one cell wide, but they sit
91
91
  // inside the 0x2600–0x27bf emoji block below and would otherwise be counted
92
92
  // as width 2, desyncing the styled cell grid from the physical glyph and
@@ -176,12 +176,12 @@ export interface PrioritizedSegment {
176
176
  /**
177
177
  * Join segments left-to-right with `separator`, but when the joined line
178
178
  * would exceed `width`, drop whole low-priority segments (highest `priority`
179
- * number first) one at a time until it fits — rather than character-truncating
179
+ * number first) one at a time until it fits, rather than character-truncating
180
180
  * the joined string, which can mangle a high-value segment mid-word (e.g. a
181
181
  * `spine:online` daemon-liveness marker clipped to `spi…`).
182
182
  *
183
183
  * Only falls back to character truncation (via truncateDisplay) if the
184
- * remaining highest-priority segments still don't fit at width — a rare,
184
+ * remaining highest-priority segments still don't fit at width, a rare,
185
185
  * very-narrow-terminal case.
186
186
  */
187
187
  export function joinPrioritizedSegments(
@@ -192,11 +192,11 @@ export function joinPrioritizedSegments(
192
192
  const join = (list: readonly PrioritizedSegment[]) => list.map(s => s.text).join(separator);
193
193
  let kept = segments;
194
194
  // Keep dropping whole segments while more than one remains; once a single
195
- // segment is left, stop — an empty result would be a worse outcome than
195
+ // segment is left, stop, an empty result would be a worse outcome than
196
196
  // falling through to character truncation on that last segment below.
197
197
  while (kept.length > 1 && getDisplayWidth(join(kept)) > width) {
198
198
  // Drop the single lowest-priority (highest `priority` number) segment;
199
- // ties broken toward the leftmost (earlier-declared) segment surviving —
199
+ // ties broken toward the leftmost (earlier-declared) segment surviving,
200
200
  // `>=` (not `>`) so that on equal priority the LATER index keeps winning
201
201
  // as the drop candidate, leaving the earliest-declared segment of that
202
202
  // priority tier intact (e.g. cwd survives over model when both are
@@ -43,21 +43,21 @@ const SETTINGS_BEHAVIOR_BASELINE = 184;
43
43
  * knobs"). Adding these 28 keys raised the settings inventory `total` without a
44
44
  * matching rise in behavior-verified coverage, which dropped
45
45
  * `localBehaviorPercent` below its floor. Each key is a local, non-external
46
- * setting whose full persistence behavior — schema default, set → write →
47
- * reload round-trip, and reset-to-default — is exercised by
46
+ * setting whose full persistence behavior, schema default, set → write →
47
+ * reload round-trip, and reset-to-default, is exercised by
48
48
  * `src/test/verification/feature-knob-settings-persistence.test.ts`. They are
49
49
  * therefore genuinely behavior-verified locally and counted as such here.
50
50
  */
51
51
  /**
52
52
  * The daemon's own mailbox and calendar keys (`surfaces.email.*`,
53
- * `surfaces.calendar.*`), promoted into CONFIG_SCHEMA so the settings modal —
54
- * which renders from that schema — can actually show them. Before, the
53
+ * `surfaces.calendar.*`), promoted into CONFIG_SCHEMA so the settings modal,
54
+ * which renders from that schema, can actually show them. Before, the
55
55
  * daemon's handlers named these keys in their own error messages
56
56
  * ("Set surfaces.calendar.caldavUrl and surfaces.calendar.caldavUser") while
57
57
  * the UI that told an operator to set them could not display one of them.
58
58
  *
59
59
  * Declaring 25 keys raised the settings inventory `total` with no matching
60
- * behavior coverage, which dropped `localBehaviorPercent` below its floor —
60
+ * behavior coverage, which dropped `localBehaviorPercent` below its floor,
61
61
  * the same arrival shape as the two lists above.
62
62
  *
63
63
  * THIS CONSTANT IS NOT A DIAL. Every key below is counted because
@@ -75,7 +75,7 @@ const SETTINGS_BEHAVIOR_BASELINE = 184;
75
75
  * (platform/email/surface-config.ts and platform/calendar/caldav-gateway-config.ts)
76
76
  * resolve every one of them when the daemon serves `email.*` and `calendar.*`,
77
77
  * and the `surfaces.email.inbound.*` block is read by the daemon's inbound mail
78
- * reader — the poller/IDLE path that makes incoming mail visible at all.
78
+ * reader, the poller/IDLE path that makes incoming mail visible at all.
79
79
  * The five password keys (email.password, email.imapPassword,
80
80
  * email.imap.password, email.smtp.password, calendar.caldavPassword)
81
81
  * additionally resolve through the daemon secret tier rather than from config,
@@ -106,7 +106,7 @@ export const DAEMON_MAILBOX_LOCAL_SETTINGS = [
106
106
  'surfaces.email.smtp.port',
107
107
  'surfaces.email.smtp.password',
108
108
  'surfaces.email.smtp.secure',
109
- // Inbound mail — the poller/IDLE reader the daemon runs to actually READ mail,
109
+ // Inbound mail, the poller/IDLE reader the daemon runs to actually READ mail,
110
110
  // which arrived with the platform runtime. These are counted for exactly the
111
111
  // reason the keys above are: the same four-part persistence contract runs over
112
112
  // every one of them in
@@ -179,14 +179,14 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
179
179
  * exercises it was actually written:
180
180
  * `src/test/verification/device-and-trigger-settings-persistence.test.ts` runs,
181
181
  * for every key in this list, the same four-part persistence contract the
182
- * feature-knob keys are counted for — schema default exposure, `set()` through
182
+ * feature-knob keys are counted for, schema default exposure, `set()` through
183
183
  * the key's own validator to disk, reload into a fresh ConfigManager with
184
184
  * read-back equality, and reset-to-default that also survives reload. That test
185
185
  * additionally asserts this list is exactly the non-enablement key set of both
186
186
  * domains and overlaps neither of the other counted sets, so nothing here is
187
187
  * double-counted and nothing drifts in uncounted.
188
188
  *
189
- * PER-KEY EVIDENCE — what is verified, and how live the key is TODAY.
189
+ * PER-KEY EVIDENCE, what is verified, and how live the key is TODAY.
190
190
  * "persistence" below means the four-part contract above; the second column
191
191
  * records whether anything in this tree (TUI or the pinned SDK) reads the key,
192
192
  * audited by tracing each key to its consumers.
@@ -221,7 +221,7 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
221
221
  * device.grants.auditRetentionDays persistence · behavior (grant ledger retention)
222
222
  * device.nodes.maxPaired persistence · live (enforced at the pairing path)
223
223
  *
224
- * On `device.nodes.maxPaired`: the SDK enforces it where a device pairs —
224
+ * On `device.nodes.maxPaired`: the SDK enforces it where a device pairs,
225
225
  * PairingTokenManager.mint refuses a NEW node at the cap with
226
226
  * PairingLimitReachedError (code DEVICE_NODES_MAX_PAIRED, carrying the setting
227
227
  * name, the cap and the live count), mapped to HTTP 409 by the pairing and
@@ -231,7 +231,7 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
231
231
  * non-finite value reads as no cap so a broken setting cannot lock the owner
232
232
  * out. The cap is read per mint, so a change applies without a restart. What is
233
233
  * counted HERE is still only the persistence contract this repo's test
234
- * exercises — the enforcement itself is SDK-side and SDK-tested, and is recorded
234
+ * exercises, the enforcement itself is SDK-side and SDK-tested, and is recorded
235
235
  * in this column so the "how live is it" audit stays accurate, not to claim
236
236
  * coverage this repo did not write.
237
237
  *
@@ -239,7 +239,7 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
239
239
  * platform's device posture runtime (src/runtime/device-posture-composition.ts)
240
240
  * on the same distributed runtime phones pair onto and the same approval broker
241
241
  * every other confirmation rides, registers the `phone` tool on it, and binds the
242
- * devices.* verbs to it — so each of these keys is read, per request and per
242
+ * devices.* verbs to it, so each of these keys is read, per request and per
243
243
  * sweep, by the DeviceCapabilityService / DeviceGrantStore /
244
244
  * DeviceCaptureArtifactStore / DeviceHousekeeper that serve them. They were dark
245
245
  * before that: the policy struct carried matching defaults and named the keys in
@@ -251,7 +251,7 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
251
251
  * `src/test/verification/device-posture-behavior.test.ts`, which drives THIS
252
252
  * app's composition with a real ConfigManager over a temp home and the platform's
253
253
  * real stores, stubs only the peer transport and the approval bridge, and asserts
254
- * per key at two values that the observable outcome differs — refusal code, how
254
+ * per key at two values that the observable outcome differs, refusal code, how
255
255
  * authority was established, what reached the transport, what the prompt was
256
256
  * given, and what survives on disk after a sweep. It also invokes the `phone`
257
257
  * tool and the devices.* verbs off the composed runtime graph, because a mapping
@@ -259,7 +259,7 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
259
259
  *
260
260
  * STILL NOT COUNTED, FOR A DIFFERENT REASON NOW: the 24 non-enablement
261
261
  * `voice.wake.*` keys from the same release. When this list was written they were
262
- * excluded because nothing captured audio at all. That is no longer true — this
262
+ * excluded because nothing captured audio at all. That is no longer true, this
263
263
  * terminal opens a recorder subprocess (src/audio/capture.ts), runs the SDK
264
264
  * detector over it through onnxruntime-web (src/audio/wake-inference.ts), and
265
265
  * hands both a confirmed wake's utterance and a push-to-talk recording to the
@@ -267,8 +267,8 @@ export const FEATURE_KNOB_LOCAL_SETTINGS = [
267
267
  * resolveWakeRuntimeSettings and reaches this surface's runtime.
268
268
  *
269
269
  * They stay out of the NUMERATOR here because this constant counts exactly one
270
- * thing — keys whose four-part PERSISTENCE contract is exercised by
271
- * device-and-trigger-settings-persistence.test.ts — and that test does not cover
270
+ * thing, keys whose four-part PERSISTENCE contract is exercised by
271
+ * device-and-trigger-settings-persistence.test.ts, and that test does not cover
272
272
  * them. The behaviour they now drive is covered instead by the capture and wake
273
273
  * tests under src/test/audio/, which assert the frame path, the detection
274
274
  * chain, the disabled-means-no-capture rule, the supervisor's restart and latch,
@@ -343,24 +343,24 @@ const ENABLEMENT_KEYS_BEHAVIOR_VERIFIED = new Set(
343
343
  * THIS CONSTANT IS NOT A DIAL, for the same reason as the two above. Each key
344
344
  * is counted because a test that exercises it was actually written:
345
345
  * `src/test/verification/cluster-group-settings-persistence.test.ts` runs the
346
- * same four-part persistence contract — schema default exposure, `set()`
346
+ * same four-part persistence contract, schema default exposure, `set()`
347
347
  * through the key's own validator to disk, reload into a fresh ConfigManager
348
348
  * with read-back equality, and reset-to-default that survives reload.
349
349
  *
350
350
  * PER-KEY EVIDENCE. All four have a LIVE consumer in this build, which is more
351
351
  * than several of the keys counted above can claim:
352
- * cluster.keyRotationHours — read by resolveClusterGroupSettings and
352
+ * cluster.keyRotationHours , read by resolveClusterGroupSettings and
353
353
  * compared against the current key's age in
354
354
  * the group runtime's rotation check.
355
- * cluster.keyRotationGraceMinutes — sets how long the previous generation
355
+ * cluster.keyRotationGraceMinutes, sets how long the previous generation
356
356
  * stays accepted after a scheduled
357
357
  * rotation; drives the keyring's accepted
358
358
  * generation set.
359
- * cluster.beaconSeconds — the discovery beacon timer interval, and
359
+ * cluster.beaconSeconds , the discovery beacon timer interval, and
360
360
  * the basis of the "recently heard from"
361
361
  * window that decides which member mints a
362
362
  * rotation.
363
- * cluster.rosterGossipSeconds — how often the member list is shared.
363
+ * cluster.rosterGossipSeconds , how often the member list is shared.
364
364
  *
365
365
  * `cluster.enabled` is NOT here: it is a feature enablement key and the ledger
366
366
  * counts those in its own set.
@@ -378,7 +378,7 @@ export const CLUSTER_GROUP_LOCAL_SETTINGS = [
378
378
  * budget knobs, the shipping-tier preference, the fourteen billing/shipping
379
379
  * address sub-fields, the two approval/veto windows, and the notify-channel
380
380
  * list. Card MATERIAL (number, expiry, CVV, cardholder name) is intentionally
381
- * NOT here — see the SDK's schema-domain-payments.ts header and this repo's
381
+ * NOT here, see the SDK's schema-domain-payments.ts header and this repo's
382
382
  * own input/payments-config.ts: that material lives write-only in the daemon
383
383
  * secret store, never in CONFIG_SCHEMA, so there is nothing for a persistence
384
384
  * contract to count.
@@ -439,7 +439,7 @@ export const PAYMENTS_LOCAL_SETTINGS = [
439
439
  ] as const;
440
440
 
441
441
  /**
442
- * Connector settings — the daemon's Google-backed mail/calendar keys plus the
442
+ * Connector settings, the daemon's Google-backed mail/calendar keys plus the
443
443
  * connected-host dial switch and the hosted-turn routing switch, declared as
444
444
  * described schema rows by platform runtime 2.0.8 (before that the connector
445
445
  * keys were cast onto the live config invisibly and the settings surface
@@ -451,7 +451,7 @@ export const PAYMENTS_LOCAL_SETTINGS = [
451
451
  * google prefixes
452
452
  * plus the two switches. Arriving uncounted is what dropped
453
453
  * localBehaviorPercent through its floor when the schema grew. The three
454
- * secret-valued keys hold goodvibes://secrets/ references, never values —
454
+ * secret-valued keys hold goodvibes://secrets/ references, never values,
455
455
  * same note as the mailbox passwords above.
456
456
  */
457
457
  export const CONNECTOR_LOCAL_SETTINGS = [
@@ -577,7 +577,7 @@ function countBuiltinPanels(root: string): number {
577
577
 
578
578
  /**
579
579
  * The CLI command words this terminal actually accepts, read off the catalog
580
- * the parser is driven by rather than scraped out of a source file — the
580
+ * the parser is driven by rather than scraped out of a source file, the
581
581
  * ledger counts what ships, and a catalog entry IS what ships.
582
582
  */
583
583
  function listCliCommands(): string[] {
package/src/version.ts CHANGED
@@ -6,21 +6,21 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '2.0.14';
9
+ let _version = '2.0.15';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
12
12
  // Only trust a version read from OUR OWN package.json. A Bun single-file
13
13
  // compiled binary resolves import.meta.dir to a virtual root where the
14
14
  // `../package.json` path can land on a DIFFERENT package.json (a bundled
15
15
  // dependency's, or the embedded runtime's) that reports a placeholder like
16
- // "0.0.0" — exactly the wrong-version banner a bare daemon launch showed in
16
+ // "0.0.0", exactly the wrong-version banner a bare daemon launch showed in
17
17
  // the field. Guarding on the package name means the prebuild-baked fallback
18
18
  // above wins in that case instead of a stray version.
19
19
  if (pkg?.name === '@pellux/goodvibes-tui' && typeof pkg.version === 'string' && pkg.version.length > 0) {
20
20
  _version = pkg.version;
21
21
  }
22
22
  } catch {
23
- // Compiled binary or missing package.json — use fallback
23
+ // Compiled binary or missing package.json, use fallback
24
24
  }
25
25
 
26
26
  export const VERSION = _version;