@pellux/goodvibes-tui 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/.goodvibes/GOODVIBES.md +1 -1
  2. package/.goodvibes/agents/reviewer.md +8 -8
  3. package/.goodvibes/skills/add-provider/SKILL.md +22 -22
  4. package/CHANGELOG.md +61 -0
  5. package/README.md +40 -29
  6. package/docs/README.md +1 -1
  7. package/docs/foundation-artifacts/README.md +5 -5
  8. package/docs/foundation-artifacts/operator-contract.json +123 -123
  9. package/package.json +12 -10
  10. package/scripts/postinstall.js +3 -3
  11. package/src/audio/activation-sound.ts +7 -7
  12. package/src/audio/capture.ts +7 -7
  13. package/src/audio/onnxruntime-assets.d.ts +1 -1
  14. package/src/audio/player.ts +4 -4
  15. package/src/audio/spoken-turn-wiring.ts +4 -4
  16. package/src/audio/voice-capture-wiring.ts +5 -5
  17. package/src/audio/voice-input-session.ts +3 -3
  18. package/src/audio/wake-inference.ts +13 -8
  19. package/src/audio/wake-runtime.ts +10 -10
  20. package/src/cli/completions/generate.ts +2 -2
  21. package/src/cli/doctor.ts +13 -13
  22. package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
  23. package/src/cli/entrypoint.ts +3 -3
  24. package/src/cli/help.ts +6 -6
  25. package/src/cli/hooks-command.ts +4 -4
  26. package/src/cli/hooks-report.ts +4 -4
  27. package/src/cli/launch-auto-update.ts +17 -17
  28. package/src/cli/management-commands.ts +8 -8
  29. package/src/cli/management-utils.ts +3 -3
  30. package/src/cli/management.ts +1 -1
  31. package/src/cli/plugin-bundles-command.ts +10 -10
  32. package/src/cli/plugin-command.ts +9 -9
  33. package/src/cli/service-posture.ts +1 -1
  34. package/src/cli/status.ts +10 -10
  35. package/src/cli/surface-command.ts +4 -4
  36. package/src/cli/tui-startup.ts +23 -23
  37. package/src/config/run-daemon-config-migration.ts +3 -3
  38. package/src/config/secret-config.ts +10 -10
  39. package/src/config/surface.ts +1 -1
  40. package/src/config/tui-extension-settings.ts +8 -8
  41. package/src/core/active-model-identity.ts +7 -7
  42. package/src/core/approval-alert.ts +5 -5
  43. package/src/core/bookmark-navigation.ts +3 -3
  44. package/src/core/budget-breach-notifier.ts +6 -6
  45. package/src/core/compaction-receipt.ts +8 -8
  46. package/src/core/composer-state.ts +2 -2
  47. package/src/core/context-usage.ts +1 -1
  48. package/src/core/conversation-compaction-render.ts +3 -3
  49. package/src/core/conversation-event-navigation.ts +2 -2
  50. package/src/core/conversation-fold.ts +9 -9
  51. package/src/core/conversation-line-cache.ts +14 -14
  52. package/src/core/conversation-render-context.ts +6 -6
  53. package/src/core/conversation-rendering.ts +27 -30
  54. package/src/core/conversation-search-expansion.ts +6 -6
  55. package/src/core/conversation-splash-state.ts +3 -3
  56. package/src/core/conversation-turn-structure.ts +13 -13
  57. package/src/core/conversation-types.ts +3 -3
  58. package/src/core/conversation-user-receipts.ts +5 -5
  59. package/src/core/conversation.ts +17 -17
  60. package/src/core/format-user-error.ts +5 -5
  61. package/src/core/long-task-notifier.ts +9 -9
  62. package/src/core/memory-diagnostics-gateway.ts +8 -8
  63. package/src/core/memory-provenance.ts +5 -5
  64. package/src/core/model-routing-chip.ts +3 -3
  65. package/src/core/pairing-tailscale-gateway.ts +3 -3
  66. package/src/core/permission-mode.ts +5 -5
  67. package/src/core/power-chip-source.ts +3 -3
  68. package/src/core/power-status.ts +8 -8
  69. package/src/core/rewind-receipt.ts +6 -6
  70. package/src/core/session-resume-core.ts +8 -8
  71. package/src/core/stream-event-wiring.ts +36 -36
  72. package/src/core/stream-stall-watchdog.ts +4 -4
  73. package/src/core/system-message-noise.ts +7 -7
  74. package/src/core/system-message-router.ts +10 -10
  75. package/src/core/terminal-notifier.ts +5 -5
  76. package/src/core/turn-budget-outcome.ts +5 -5
  77. package/src/core/turn-cancellation.ts +3 -3
  78. package/src/core/turn-event-wiring.ts +16 -16
  79. package/src/core/voice-capture-status.ts +2 -2
  80. package/src/core/voice-provision-gateway.ts +12 -12
  81. package/src/core/voice-provision-status.ts +19 -19
  82. package/src/core/voice-stt-gateway.ts +6 -6
  83. package/src/core/wake-provision-runner.ts +7 -7
  84. package/src/core/wake-provision-status.ts +17 -17
  85. package/src/core/workstream-notification.ts +8 -8
  86. package/src/export/gist-uploader.ts +7 -7
  87. package/src/input/autocomplete.ts +3 -3
  88. package/src/input/bookmark-modal.ts +1 -1
  89. package/src/input/command-args-hint.ts +2 -2
  90. package/src/input/command-reference.ts +9 -9
  91. package/src/input/command-registry.ts +32 -32
  92. package/src/input/commands/acp-runtime.ts +6 -6
  93. package/src/input/commands/calendar-runtime.ts +9 -9
  94. package/src/input/commands/channel-pairing.ts +11 -11
  95. package/src/input/commands/channel-runtime.ts +1 -1
  96. package/src/input/commands/checkin-runtime.ts +4 -4
  97. package/src/input/commands/checkpoint-runtime.ts +4 -4
  98. package/src/input/commands/ci-runtime.ts +4 -4
  99. package/src/input/commands/cluster-runtime.ts +3 -3
  100. package/src/input/commands/codebase-runtime.ts +16 -16
  101. package/src/input/commands/config.ts +6 -6
  102. package/src/input/commands/connection-status.ts +12 -12
  103. package/src/input/commands/context-window.ts +2 -2
  104. package/src/input/commands/cost-attribution-format.ts +4 -4
  105. package/src/input/commands/cost-runtime.ts +2 -2
  106. package/src/input/commands/devices-runtime.ts +7 -7
  107. package/src/input/commands/diff-runtime.ts +2 -2
  108. package/src/input/commands/editor-runtime.ts +1 -1
  109. package/src/input/commands/eval.ts +4 -4
  110. package/src/input/commands/experience-runtime.ts +1 -1
  111. package/src/input/commands/git-runtime.ts +3 -3
  112. package/src/input/commands/graph-runtime.ts +3 -3
  113. package/src/input/commands/guidance-runtime.ts +1 -1
  114. package/src/input/commands/health-metrics-format.ts +2 -2
  115. package/src/input/commands/health-runtime.ts +8 -8
  116. package/src/input/commands/hosted-runtime.ts +13 -13
  117. package/src/input/commands/image-runtime.ts +6 -6
  118. package/src/input/commands/intelligence-runtime.ts +2 -2
  119. package/src/input/commands/local-auth-runtime.ts +3 -3
  120. package/src/input/commands/local-provider-runtime.ts +3 -3
  121. package/src/input/commands/local-runtime.ts +7 -7
  122. package/src/input/commands/mail-runtime.ts +9 -9
  123. package/src/input/commands/mcp-runtime.ts +1 -1
  124. package/src/input/commands/memory.ts +13 -13
  125. package/src/input/commands/notify-runtime.ts +1 -1
  126. package/src/input/commands/operator-panel-runtime.ts +8 -8
  127. package/src/input/commands/operator-rpc.ts +3 -3
  128. package/src/input/commands/operator-runtime.ts +3 -3
  129. package/src/input/commands/palette-runtime.ts +1 -1
  130. package/src/input/commands/payment-card-intake.ts +17 -17
  131. package/src/input/commands/permissions-provenance.ts +7 -7
  132. package/src/input/commands/permissions-runtime.ts +1 -1
  133. package/src/input/commands/planning-runtime.ts +9 -9
  134. package/src/input/commands/platform-services-runtime.ts +2 -2
  135. package/src/input/commands/policy-dispatch.ts +6 -6
  136. package/src/input/commands/power-runtime.ts +6 -6
  137. package/src/input/commands/principals-runtime.ts +3 -3
  138. package/src/input/commands/product-runtime.ts +3 -3
  139. package/src/input/commands/profile-render.ts +13 -13
  140. package/src/input/commands/profile-runtime.ts +13 -13
  141. package/src/input/commands/profile-types.ts +13 -13
  142. package/src/input/commands/provider-accounts-runtime.ts +5 -5
  143. package/src/input/commands/provider.ts +10 -10
  144. package/src/input/commands/qrcode-runtime.ts +3 -3
  145. package/src/input/commands/queue-runtime.ts +6 -6
  146. package/src/input/commands/recall-files-config.ts +4 -4
  147. package/src/input/commands/recall-files-git.ts +3 -3
  148. package/src/input/commands/recall-files.ts +12 -12
  149. package/src/input/commands/recall-query.ts +3 -3
  150. package/src/input/commands/recall-review.ts +3 -3
  151. package/src/input/commands/recall-shared.ts +1 -1
  152. package/src/input/commands/relay-runtime.ts +5 -5
  153. package/src/input/commands/remote-runtime.ts +3 -3
  154. package/src/input/commands/review-runtime.ts +8 -8
  155. package/src/input/commands/rewind-runtime.ts +21 -21
  156. package/src/input/commands/runtime-services.ts +1 -2
  157. package/src/input/commands/schedule-nl.ts +2 -2
  158. package/src/input/commands/schedule-runtime.ts +2 -2
  159. package/src/input/commands/secret-runtime.ts +3 -3
  160. package/src/input/commands/session-content.ts +7 -7
  161. package/src/input/commands/session-picker-filter.ts +3 -3
  162. package/src/input/commands/session-workflow.ts +10 -10
  163. package/src/input/commands/session.ts +15 -15
  164. package/src/input/commands/settings-sync-runtime.ts +2 -2
  165. package/src/input/commands/share-runtime.ts +4 -4
  166. package/src/input/commands/shell-core.ts +11 -11
  167. package/src/input/commands/tasks-runtime.ts +4 -4
  168. package/src/input/commands/test-runtime.ts +6 -6
  169. package/src/input/commands/tts-runtime.ts +4 -4
  170. package/src/input/commands/update-runtime.ts +27 -27
  171. package/src/input/commands/websearch-runtime.ts +2 -2
  172. package/src/input/commands/work-plan-runtime.ts +2 -2
  173. package/src/input/commands/workstream-attempt-dependents.ts +4 -4
  174. package/src/input/commands/workstream-attempts.ts +16 -16
  175. package/src/input/commands/workstream-runtime.ts +36 -36
  176. package/src/input/commands/worktree-runtime.ts +6 -6
  177. package/src/input/composer-capture.ts +5 -5
  178. package/src/input/concealed-input.ts +2 -2
  179. package/src/input/config-modal-types.ts +16 -16
  180. package/src/input/config-modal.ts +30 -30
  181. package/src/input/daemon-owned-settings-descriptions.ts +4 -4
  182. package/src/input/delete-key-policy.ts +1 -1
  183. package/src/input/exec-env-scrub-config.ts +7 -7
  184. package/src/input/feature-unit-layout.ts +5 -5
  185. package/src/input/feed-context-factory.ts +38 -38
  186. package/src/input/file-picker.ts +1 -1
  187. package/src/input/handler-command-route.ts +2 -2
  188. package/src/input/handler-content-actions.ts +8 -8
  189. package/src/input/handler-feed-routes.ts +13 -13
  190. package/src/input/handler-feed.ts +31 -31
  191. package/src/input/handler-interactions.ts +2 -2
  192. package/src/input/handler-modal-routes.ts +13 -13
  193. package/src/input/handler-modal-stack.ts +1 -1
  194. package/src/input/handler-modal-token-routes.ts +1 -1
  195. package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
  196. package/src/input/handler-picker-routes.ts +7 -7
  197. package/src/input/handler-prompt-buffer.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +12 -12
  199. package/src/input/handler-types.ts +3 -3
  200. package/src/input/handler-ui-state.ts +1 -1
  201. package/src/input/handler.ts +9 -9
  202. package/src/input/input-history.ts +1 -1
  203. package/src/input/keybindings.ts +13 -13
  204. package/src/input/kill-ring.ts +7 -11
  205. package/src/input/model-picker-filter.ts +3 -3
  206. package/src/input/model-picker-items.ts +5 -5
  207. package/src/input/model-picker-types.ts +2 -2
  208. package/src/input/model-picker.ts +18 -18
  209. package/src/input/onboarding/onboarding-feature-units.ts +9 -13
  210. package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
  211. package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
  212. package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
  213. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
  214. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
  215. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
  216. package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
  217. package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
  218. package/src/input/panel-integration-actions.ts +3 -3
  219. package/src/input/panel-mouse-geometry.ts +1 -1
  220. package/src/input/panel-paste-flood-guard.ts +9 -9
  221. package/src/input/payments-config.ts +15 -15
  222. package/src/input/profile-picker-modal.ts +1 -1
  223. package/src/input/provider-key-intake.ts +9 -9
  224. package/src/input/relay-settings-descriptions.ts +3 -3
  225. package/src/input/sandbox-exec-config.ts +9 -9
  226. package/src/input/search.ts +18 -18
  227. package/src/input/selection-modal-queue.ts +10 -10
  228. package/src/input/selection-modal.ts +2 -2
  229. package/src/input/session-picker-modal.ts +7 -7
  230. package/src/input/settings-modal-activation.ts +1 -1
  231. package/src/input/settings-modal-adjustment.ts +2 -2
  232. package/src/input/settings-modal-commit.ts +6 -6
  233. package/src/input/settings-modal-connections.ts +2 -2
  234. package/src/input/settings-modal-data.ts +29 -29
  235. package/src/input/settings-modal-mutations.ts +7 -7
  236. package/src/input/settings-modal-reset.ts +3 -3
  237. package/src/input/settings-modal-search.ts +6 -6
  238. package/src/input/settings-modal-secrets.ts +3 -3
  239. package/src/input/settings-modal-types.ts +16 -16
  240. package/src/input/settings-modal.ts +4 -4
  241. package/src/input/voice-local-settings.ts +3 -3
  242. package/src/input/worktree-setup-config.ts +8 -8
  243. package/src/main.ts +15 -15
  244. package/src/panels/agent-inspector-shared.ts +5 -5
  245. package/src/panels/base-panel.ts +3 -3
  246. package/src/panels/builtin/agent.ts +3 -3
  247. package/src/panels/builtin/development.ts +4 -4
  248. package/src/panels/builtin/knowledge.ts +1 -1
  249. package/src/panels/builtin/operations.ts +12 -12
  250. package/src/panels/builtin/session.ts +8 -8
  251. package/src/panels/builtin/shared.ts +6 -6
  252. package/src/panels/builtin-modals.ts +8 -8
  253. package/src/panels/confirm-state.ts +5 -5
  254. package/src/panels/cost-tracker-panel.ts +22 -22
  255. package/src/panels/diff-panel.ts +20 -20
  256. package/src/panels/diff-review-model.ts +5 -5
  257. package/src/panels/diff-review-panel.ts +5 -5
  258. package/src/panels/eval-registry.ts +2 -2
  259. package/src/panels/expandable-list-panel.ts +5 -5
  260. package/src/panels/fleet-acts.ts +20 -20
  261. package/src/panels/fleet-deep-link.ts +5 -5
  262. package/src/panels/fleet-gateway.ts +12 -12
  263. package/src/panels/fleet-observed-render.ts +11 -11
  264. package/src/panels/fleet-panel-format.ts +14 -14
  265. package/src/panels/fleet-panel-worktree-detail.ts +8 -8
  266. package/src/panels/fleet-panel.ts +34 -34
  267. package/src/panels/fleet-read-model.ts +49 -49
  268. package/src/panels/fleet-spawn.ts +15 -15
  269. package/src/panels/fleet-steer.ts +7 -7
  270. package/src/panels/fleet-stop.ts +5 -5
  271. package/src/panels/fleet-tabs.ts +14 -14
  272. package/src/panels/fleet-transcript.ts +26 -26
  273. package/src/panels/git-panel.ts +8 -8
  274. package/src/panels/hosted-session-feed.ts +13 -13
  275. package/src/panels/hosted-session-panel.ts +7 -7
  276. package/src/panels/index.ts +1 -1
  277. package/src/panels/local-auth-panel.ts +15 -15
  278. package/src/panels/memory-consolidation-gateway.ts +8 -8
  279. package/src/panels/modals/devices-modal.ts +8 -8
  280. package/src/panels/modals/hooks-modal.ts +1 -1
  281. package/src/panels/modals/keybindings-modal.ts +5 -5
  282. package/src/panels/modals/knowledge-modal.ts +2 -2
  283. package/src/panels/modals/local-auth-modal.ts +4 -4
  284. package/src/panels/modals/marketplace-modal.ts +3 -3
  285. package/src/panels/modals/memory-modal.ts +19 -19
  286. package/src/panels/modals/modal-surface-helpers.ts +1 -1
  287. package/src/panels/modals/modal-theme.ts +3 -3
  288. package/src/panels/modals/pairing-modal.ts +19 -19
  289. package/src/panels/modals/planning-modal.ts +4 -4
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-reset — pure reset helpers for SettingsModal.
2
+ * settings-modal-reset, pure reset helpers for SettingsModal.
3
3
  *
4
4
  * These functions encapsulate the three reset operations:
5
5
  * - resetSelected: reset the currently selected setting to its schema default
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * Each function takes its dependencies as explicit arguments rather than
11
11
  * accessing class-level state. resetCategoryConfirm and resetAllConfirm
12
- * remain public class fields on SettingsModal — the renderer reads them
12
+ * remain public class fields on SettingsModal, the renderer reads them
13
13
  * directly to decide the footer state.
14
14
  */
15
15
 
@@ -44,7 +44,7 @@ export function resetSelected({
44
44
  // Delete from the tier the write went to. A daemon-owned key was stored in
45
45
  // the daemon tier (defaultSecretBackedScope), so a delete narrowed to 'user'
46
46
  // would report a cleared setting while the daemon kept using the live
47
- // credential — the reset that isn't one.
47
+ // credential, the reset that isn't one.
48
48
  void secretsManager.delete(buildGoodVibesSecretKey(key), { scope: defaultSecretBackedScope(key) }).catch((error) => {
49
49
  logger.error('SettingsModal: failed to clear secret while resetting setting', { key, error: summarizeError(error) });
50
50
  });
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-search — ranked search over the settings workspace.
2
+ * settings-modal-search, ranked search over the settings workspace.
3
3
  *
4
4
  * Split out of settings-modal-data.ts, which had reached its 800-line ceiling.
5
5
  * Scoring and search are a self-contained unit: they read a SettingEntry and a
@@ -11,7 +11,7 @@
11
11
  import type { SettingEntry, SettingsCategory } from './settings-modal-types.ts';
12
12
 
13
13
  // ---------------------------------------------------------------------------
14
- // fuzzyScoreSettingEntry — score an entry against a query for ranked search
14
+ // fuzzyScoreSettingEntry, score an entry against a query for ranked search
15
15
  // ---------------------------------------------------------------------------
16
16
 
17
17
  /**
@@ -40,20 +40,20 @@ export function fuzzyScoreSettingEntry(
40
40
  const label = getLabel(entry).toLowerCase();
41
41
  const description = (entry.setting.description ?? '').toLowerCase();
42
42
 
43
- // Tier 1: key substring — base 3000, position bonus up to 999
43
+ // Tier 1: key substring, base 3000, position bonus up to 999
44
44
  // A key match at position 0 scores 3999; at position 999 scores 3000.
45
45
  const keyIdx = key.indexOf(lq);
46
46
  if (keyIdx !== -1) return 3000 + Math.max(0, 999 - keyIdx);
47
47
 
48
- // Tier 2: label substring — base 2000, position bonus up to 999
48
+ // Tier 2: label substring, base 2000, position bonus up to 999
49
49
  const labelIdx = label.indexOf(lq);
50
50
  if (labelIdx !== -1) return 2000 + Math.max(0, 999 - labelIdx);
51
51
 
52
- // Tier 3: description substring — base 1000, position bonus up to 999
52
+ // Tier 3: description substring, base 1000, position bonus up to 999
53
53
  const descIdx = description.indexOf(lq);
54
54
  if (descIdx !== -1) return 1000 + Math.max(0, 999 - descIdx);
55
55
 
56
- // Tier 4: subsequence across concatenated key + label + description — 1..99
56
+ // Tier 4: subsequence across concatenated key + label + description, 1..99
57
57
  const haystack = `${key} ${label} ${description}`;
58
58
  let qi = 0;
59
59
  let score = 0;
@@ -14,8 +14,8 @@ export type SettingsSecretsManager = Pick<SecretsManager, 'delete' | 'set'>;
14
14
  /**
15
15
  * The daemon's own credential write, when this app has a daemon to write to.
16
16
  *
17
- * A daemon-scoped credential is two writes that only work together — the secret
18
- * value and the config reference that points at it — and `credentials.set` does
17
+ * A daemon-scoped credential is two writes that only work together, the secret
18
+ * value and the config reference that points at it, and `credentials.set` does
19
19
  * both, verifying the value reads back before it touches the config. Splitting
20
20
  * them across a process boundary leaves a window where the config names a
21
21
  * reference resolving to nothing, which every reader treats as a
@@ -61,7 +61,7 @@ export function setSecretBackedSettingValue(args: {
61
61
  const update = buildSecretBackedConfigUpdate(key, value);
62
62
  // A daemon-owned key (surfaces.*, payments.*, controlPlane.*, ...) names a
63
63
  // credential the daemon itself executes with, so its secret material lands in
64
- // the daemon tier — the one the daemon reads with every surface closed —
64
+ // the daemon tier, the one the daemon reads with every surface closed,
65
65
  // regardless of which client edited it. Everything else stays at user scope.
66
66
  // See secret-config.ts's defaultSecretBackedScope.
67
67
  const scope = defaultSecretBackedScope(key);
@@ -52,40 +52,40 @@ export type SettingsCategory =
52
52
  | 'update'
53
53
  | 'power'
54
54
  | 'memory'
55
- // payments.* — the card on file for daemon-initiated purchases. Like
55
+ // payments.*, the card on file for daemon-initiated purchases. Like
56
56
  // 'profile' below, this entry and its SETTINGS_CATEGORY_GROUPS membership are
57
57
  // both mandatory or the whole prefix is dropped from the workspace.
58
58
  | 'payments'
59
- // profile.* — the owner profile (docs/owner-profile.md §12.1). This entry and
59
+ // profile.*, the owner profile (docs/owner-profile.md §12.1). This entry and
60
60
  // its SETTINGS_CATEGORY_GROUPS membership below are both mandatory:
61
61
  // buildSettingGroups guards every push with `if (groups.has(cat))`, so a
62
62
  // config prefix with no category here is dropped from the workspace entirely
63
- // and reachable only by hand-editing a settings file — see the push.* and
63
+ // and reachable only by hand-editing a settings file, see the push.* and
64
64
  // cluster.* comments in settings-modal-data.ts for the two times that happened.
65
65
  | 'profile'
66
- // occasions.* — the proactive occasions/plans loop (docs/occasions.md §8):
66
+ // occasions.*, the proactive occasions/plans loop (docs/occasions.md §8):
67
67
  // lead time, active hours, nudge channel and cadence, away-date adjustment,
68
68
  // calendar mirroring, interview length, gift-history retention, and the
69
69
  // sweep interval. Same mandatory-dual-membership rule as profile above, or
70
70
  // all twelve keys are dropped from the workspace and reachable only by
71
- // hand-editing a settings file — a third occurrence of the push.*/cluster.*
71
+ // hand-editing a settings file, a third occurrence of the push.*/cluster.*
72
72
  // class the profile comment already names two of.
73
73
  | 'occasions'
74
- // hostedSessions.* — sessions whose conversation loop runs inside the daemon
74
+ // hostedSessions.*, sessions whose conversation loop runs inside the daemon
75
75
  // instead of this terminal: what detaching does to one (the owner-confirmed
76
76
  // default is `kill`, the behavior closing a client has always had), how many
77
77
  // may run at once, how much of a conversation is kept, and how long a
78
78
  // terminated one's record is retained. Same mandatory-dual-membership rule as
79
- // profile and occasions above — without BOTH this entry and the
79
+ // profile and occasions above, without BOTH this entry and the
80
80
  // SETTINGS_CATEGORY_GROUPS membership below, buildSettingGroups drops every
81
81
  // hostedSessions.* key from the workspace, which is exactly what happened to
82
82
  // push.* and cluster.* before them.
83
83
  | 'hostedSessions'
84
- // email.* / calendar.* / google.* — the connector keys the daemon really
84
+ // email.* / calendar.* / google.*, the connector keys the daemon really
85
85
  // reads for its Google-backed mail and calendar services (platform runtime
86
86
  // 2.0.8 registered them as described schema rows; before that they were
87
87
  // cast onto the live config invisibly and answered "Unknown setting").
88
- // Same mandatory-dual-membership rule as profile and hostedSessions above —
88
+ // Same mandatory-dual-membership rule as profile and hostedSessions above,
89
89
  // without BOTH these entries and the SETTINGS_CATEGORY_GROUPS membership
90
90
  // below, every one of the 22 connector keys is dropped from the workspace.
91
91
  | 'email'
@@ -103,22 +103,22 @@ export const SETTINGS_CATEGORY_GROUPS: ReadonlyArray<{
103
103
  { label: 'AI Routing', categories: ['provider', 'pricing', 'subscriptions', 'helper', 'tools', 'tts', 'voice'] },
104
104
  { label: 'Service & Network', categories: ['service', 'daemon', 'network', 'controlPlane', 'httpListener', 'web', 'relay'] },
105
105
  // 'hostedSessions' sits beside 'surfaces' and 'conversationGate': all three
106
- // answer "where does this conversation actually run, and who can reach it" —
106
+ // answer "where does this conversation actually run, and who can reach it",
107
107
  // the detach policy is a fact about the daemon holding a session open, not
108
108
  // about this terminal's presentation of it.
109
109
  // 'email', 'calendar' and 'google' sit beside 'surfaces': they configure
110
- // the daemon's connections to the owner's mail and calendar — where those
110
+ // the daemon's connections to the owner's mail and calendar, where those
111
111
  // services reach the world, not how this terminal presents anything.
112
112
  { label: 'Surfaces & Cloud', categories: ['surfaces', 'hostedSessions', 'device', 'conversationGate', 'integrations', 'connections', 'email', 'calendar', 'google', 'mcp', 'cloudflare'] },
113
113
  // 'occasions' sits beside 'checkin': both are proactive background loops
114
114
  // (a cadence, a judgment pass, a conditional channel delivery) rather than
115
- // facts held about the owner — the data occasions/plans declare lives in
115
+ // facts held about the owner, the data occasions/plans declare lives in
116
116
  // the owner profile file itself (docs/occasions.md §3), but these SETTINGS
117
117
  // rows tune the loop, exactly like checkin's.
118
118
  { label: 'Automation', categories: ['batch', 'automation', 'checkin', 'occasions', 'watchers', 'orchestration', 'planner', 'wrfc', 'payments'] },
119
119
  // 'profile' sits beside 'memory' and 'learning': all three are what the
120
120
  // platform retains about the person using it, and this is the group a reader
121
- // looking for "what does it know about me" already scans — Interface is
121
+ // looking for "what does it know about me" already scans, Interface is
122
122
  // presentation and permission posture, and nothing there is a store of facts.
123
123
  { label: 'Runtime & Data', categories: ['storage', 'atRest', 'sandbox', 'fetch', 'agents', 'runtime', 'power', 'profile', 'memory', 'cache', 'telemetry', 'diagnostics', 'learning'] },
124
124
  { label: 'Advanced', categories: ['release', 'update', 'danger'] },
@@ -138,14 +138,14 @@ export interface SettingEntry {
138
138
  /**
139
139
  * Present when this row is a feature-unit header (a platform capability
140
140
  * rendered as one unit with the settings that tune it beneath). The row IS
141
- * the real config row for the feature's enablement key — boolean headers
141
+ * the real config row for the feature's enablement key, boolean headers
142
142
  * toggle and enum headers cycle their mode choices through the ordinary
143
143
  * settings write path (a plain config write; the settings bridge keeps the
144
144
  * runtime gate in sync).
145
145
  */
146
146
  flag?: FlagEntry;
147
147
  /**
148
- * Present when this row is a settings sub-option OWNED by a feature unit —
148
+ * Present when this row is a settings sub-option OWNED by a feature unit,
149
149
  * the id of the owning feature. Drives the indented rendering beneath its
150
150
  * header and marks the row as claimed so it does not double-list as an
151
151
  * orphan.
@@ -162,7 +162,7 @@ export interface FlagEntry {
162
162
  state: FlagState;
163
163
  /**
164
164
  * Last known config-layer (persisted) value. Equals `state` unless a
165
- * startup-gated feature was changed this session — then it holds the value
165
+ * startup-gated feature was changed this session, then it holds the value
166
166
  * that will take effect on the next launch.
167
167
  */
168
168
  persistedState: FlagState;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * SettingsModal — state management for the /settings and /config fullscreen workspace.
2
+ * SettingsModal, state management for the /settings and /config fullscreen workspace.
3
3
  *
4
4
  * Loads CONFIG_SCHEMA, groups settings by category, and tracks UI state:
5
5
  * - Active category (Tab to cycle)
@@ -88,7 +88,7 @@ export interface SettingsModalOpenOptions {
88
88
  readonly onSettingApplied?: SettingsModalChangeHandler;
89
89
  /**
90
90
  * The daemon's credential write. A daemon-scoped credential (a mailbox
91
- * password, a bot token, a card) must land where the daemon reads it — this
91
+ * password, a bot token, a card) must land where the daemon reads it, this
92
92
  * surface storing a copy is a credential in a place nothing consults.
93
93
  */
94
94
  readonly daemonCredentials?: SettingsDaemonCredentialWriter | null;
@@ -141,7 +141,7 @@ export class SettingsModal {
141
141
  /**
142
142
  * Scroll offset (in wrapped lines) of the documentation pane for the
143
143
  * selected row. The renderer clamps it to the pane's real content height
144
- * and shows honest more-above/below markers — long feature documentation
144
+ * and shows honest more-above/below markers, long feature documentation
145
145
  * scrolls, it never clips. Reset whenever the selection changes.
146
146
  */
147
147
  public contextScroll = 0;
@@ -721,7 +721,7 @@ export class SettingsModal {
721
721
  // No-op (result.changed === false, effectMessage === null): leave lastSettingEffectMessage untouched.
722
722
 
723
723
  // Selecting 'prompt' for payments.cvvHandling states the tradeoff at the
724
- // moment of selection, not just in the documentation pane — see the
724
+ // moment of selection, not just in the documentation pane, see the
725
725
  // SDK's own CVV_PROMPT_TRADEOFF_WARNING (platform/payments).
726
726
  if (key === PAYMENTS_CVV_HANDLING_CONFIG_KEY && value === 'prompt') {
727
727
  this.lastSettingEffectMessage = CVV_PROMPT_TRADEOFF_WARNING;
@@ -1,11 +1,11 @@
1
1
  // ---------------------------------------------------------------------------
2
- // voice-local-settings.ts — the managed local-voice setup affordance the voice
2
+ // voice-local-settings.ts, the managed local-voice setup affordance the voice
3
3
  // settings surfaces render beside ElevenLabs.
4
4
  //
5
5
  // The local engine registers in the voice provider registry regardless of
6
6
  // whether it is provisioned yet (its status is honestly "unconfigured", never
7
7
  // an error). When it is NOT provisioned, the settings/provider-picker surface
8
- // offers the one-act install with its download size declared up front — the
8
+ // offers the one-act install with its download size declared up front, the
9
9
  // size is computed synchronously from the pinned piper manifest
10
10
  // (piperProvisionBytes) so no daemon round-trip is needed just to label the
11
11
  // offer. Platforms with no pinned managed build say so honestly.
@@ -45,7 +45,7 @@ export function localVoiceSetupOffer(configGet: (key: string) => unknown): Local
45
45
  let detail: string;
46
46
  if (!supported) detail = 'local voice: no managed build for this platform (set voice.local.* by hand to use it)';
47
47
  else if (provisioned) detail = 'local voice: configured (managed engine set)';
48
- else detail = `local voice: not set up — run /voice setup (${sizeLabel})`;
48
+ else detail = `local voice: not set up; run /voice setup (${sizeLabel})`;
49
49
 
50
50
  const actions = supported && !provisioned ? '[Enter] select · /voice setup to provision' : '[Enter] set provider';
51
51
  return { supported, provisioned, sizeLabel, detail, actions };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * worktree-setup-config.ts — TUI-local synthetic settings entries for
2
+ * worktree-setup-config.ts, TUI-local synthetic settings entries for
3
3
  * worktree.setup.commands / worktree.setup.carryOverGlobs.
4
4
  *
5
5
  * Neither key is in the SDK's ConfigKey union: the SDK's cold-start worktree
@@ -12,8 +12,8 @@
12
12
  * settings-modal-data.ts (behavior.notifyAfterSeconds, storage.codeIndexEnabled, etc).
13
13
  *
14
14
  * Both keys hold a JSON array of strings on disk. The settings modal's
15
- * inline editor is a single-line text field, so — matching the SDK's own
16
- * convention for controlPlane.cors.allowedOrigins — they are displayed and
15
+ * inline editor is a single-line text field, so, matching the SDK's own
16
+ * convention for controlPlane.cors.allowedOrigins, they are displayed and
17
17
  * edited as a comma-separated list and parsed back into an array on commit
18
18
  * (see isWorktreeSetupListConfigKey's use in settings-modal.ts#commitEdit).
19
19
  */
@@ -34,14 +34,14 @@ export function isWorktreeSetupListConfigKey(key: ConfigKey): boolean {
34
34
  }
35
35
 
36
36
  /**
37
- * Read a config value as a string array — mirrors the SDK's own tolerant
37
+ * Read a config value as a string array, mirrors the SDK's own tolerant
38
38
  * readStringArray (non-array/malformed degrades to empty).
39
39
  *
40
40
  * Defensive try/catch (now belt-and-suspenders): the SDK registers the
41
41
  * `worktree` section in DEFAULT_CONFIG (setup.commands / setup.carryOverGlobs,
42
42
  * both empty lists) as of this repack, so ConfigManager.get no longer throws
43
- * for these keys on a fresh store. The guard is retained so an older SDK — or
44
- * a config store whose section was pruned — degrades to an empty list here
43
+ * for these keys on a fresh store. The guard is retained so an older SDK, or
44
+ * a config store whose section was pruned, degrades to an empty list here
45
45
  * (this read runs on every settings-modal build) rather than crashing /config
46
46
  * or /settings.
47
47
  */
@@ -65,14 +65,14 @@ export const WORKTREE_SETUP_COMMANDS_SYNTHETIC_SETTING: ConfigSetting = {
65
65
  key: WORKTREE_SETUP_COMMANDS_CONFIG_KEY,
66
66
  type: 'string',
67
67
  default: [],
68
- description: 'Comma-separated shell command lines run in order in a freshly-created isolated worktree before it is handed to an agent (e.g. "bun install, bun run codegen"). A command that exits non-zero stops setup there and marks the worktree failed — visible on /worktree review and the worktree record, never silent. Empty = no setup commands run.',
68
+ description: 'Comma-separated shell command lines run in order in a freshly-created isolated worktree before it is handed to an agent (e.g. "bun install, bun run codegen"). A command that exits non-zero stops setup there and marks the worktree failed; visible on /worktree review and the worktree record, never silent. Empty = no setup commands run.',
69
69
  };
70
70
 
71
71
  export const WORKTREE_SETUP_CARRY_OVER_GLOBS_SYNTHETIC_SETTING: ConfigSetting = {
72
72
  key: WORKTREE_SETUP_CARRY_OVER_GLOBS_CONFIG_KEY,
73
73
  type: 'string',
74
74
  default: [],
75
- description: 'Comma-separated glob patterns (e.g. ".env, .env.*, config/local.json") of UNTRACKED files copied from the source working tree into a freshly-created isolated worktree, after setup commands run. Only files git reports as untracked are eligible — committed files already carry over through the worktree checkout itself. Empty = nothing carried over.',
75
+ description: 'Comma-separated glob patterns (e.g. ".env, .env.*, config/local.json") of UNTRACKED files copied from the source working tree into a freshly-created isolated worktree, after setup commands run. Only files git reports as untracked are eligible; committed files already carry over through the worktree checkout itself. Empty = nothing carried over.',
76
76
  };
77
77
 
78
78
  function buildWorktreeSetupListEntry(configManager: Pick<ConfigManager, 'get'>, setting: ConfigSetting): SettingEntry {
package/src/main.ts CHANGED
@@ -90,7 +90,7 @@ async function main() {
90
90
  const stdin = process.stdin;
91
91
  // Both roots come from the one resolver the daemon CLI also uses. This line
92
92
  // called homedir() unconditionally, so a harness that redirected the tree got
93
- // a client that wrote the real one — secret store included.
93
+ // a client that wrote the real one, secret store included.
94
94
  const { cli, configManager, bootstrapWorkingDir, bootstrapHomeDirectory } = await prepareShellCliRuntime(process.argv.slice(2), {
95
95
  defaultWorkingDirectory: process.env['GOODVIBES_WORKING_DIR'] ?? process.cwd(),
96
96
  homeDirectory: resolveGoodVibesHome(),
@@ -140,7 +140,7 @@ async function main() {
140
140
  const { approvalBroker, agentManager, modeManager, processManager, providerRegistry, secretsManager, subscriptionManager } = ctx.services;
141
141
  conversation.setSessionMemoryStore(ctx.services.sessionMemoryStore);
142
142
  conversation.setSessionLineageTracker(ctx.services.sessionLineageTracker);
143
- // Shared payload (single source of truth, includes the memoryRegistry —
143
+ // Shared payload (single source of truth, includes the memoryRegistry,
144
144
  // see orchestrator-core-services.ts) plus this site's favoritesStore.
145
145
  orchestrator.setCoreServices({
146
146
  ...buildSharedOrchestratorCoreServices({ services: ctx.services, configManager, providerRegistry }),
@@ -154,7 +154,7 @@ async function main() {
154
154
  applyTerminalRuntimeConfigDefaults(configManager);
155
155
 
156
156
  // Re-surface pre-TUI launch-update lines in-session (the alt screen wipes
157
- // stdout). Launch-time update mechanics are routine, not urgent — low
157
+ // stdout). Launch-time update mechanics are routine, not urgent, low
158
158
  // priority, not high (a skipped/deferred check is not the kind of thing
159
159
  // that should compete with real session alerts for attention).
160
160
  for (const line of launchUpdateLines) systemMessageRouter.low(`[Update] ${line}`);
@@ -186,7 +186,7 @@ async function main() {
186
186
  let lastMaxScroll: number | null = null;
187
187
  // Stream and tool-timer state; mutated by wireStreamEventMetrics handlers, read during render.
188
188
  const streamMetrics: StreamMetrics = createStreamMetrics();
189
- // Live failover record — written by the failover path, read every frame so the header and footer agree.
189
+ // Live failover record, written by the failover path, read every frame so the header and footer agree.
190
190
  const failoverState = createFailoverTurnState();
191
191
 
192
192
  const getPromptContentWidth = () => computePromptContentWidth(stdout.columns);
@@ -222,7 +222,7 @@ async function main() {
222
222
  const unsubs: Array<() => void> = [];
223
223
  let recoveryInterval: ReturnType<typeof setInterval> | null = null;
224
224
  let stopSpokenOutputForExit: (() => Promise<void>) | null = null;
225
- // The optional "used N memories" provenance chip (default OFF) — see interaction-seams.ts.
225
+ // The optional "used N memories" provenance chip (default OFF), see interaction-seams.ts.
226
226
  const memoryProvenanceUi = createMemoryProvenanceUi({ render: () => render(), memorySpine: ctx.services.memorySpine });
227
227
  // Topology-aware keep-awake: the chip renders the DAEMON's state in adopted-external mode (power-chip-source.ts) and every toggle is forwarded to that daemon (power-keepawake-remote.ts) so keep-awake survives the TUI closing in BOTH topologies.
228
228
  const isExternalDaemon = () => uiServices.platform.externalServices?.inspect()?.daemonStatus?.mode === 'external';
@@ -426,10 +426,10 @@ async function main() {
426
426
  commandContext.openComposerEditor = makeComposerEditorOpener({ buffer: input, stdin, stdout, writeGuard: allowTerminalWrite, repaint: () => { compositor.resetDiff(); render(); }, cwd: workingDir, env: process.env, notify: (m) => systemMessageRouter.high(m) });
427
427
  input.setConversationManager(conversation);
428
428
  input.setContentWidth(getPromptContentWidth()); input.filePicker.setOnUpdate(() => render());
429
- // retirement: agentDetailModal/processModal setOnRefresh wiring removed —
429
+ // retirement: agentDetailModal/processModal setOnRefresh wiring removed,
430
430
  // those modals were deleted (Fleet subsumes the live process tree via F2).
431
431
 
432
- // Model picker callback is handled in bootstrap.ts — do not duplicate here.
432
+ // Model picker callback is handled in bootstrap.ts, do not duplicate here.
433
433
  input.setHistory(inputHistory);
434
434
  // ONE microphone path, shared by push-to-talk voice input (Alt+V) and wake-word detection; opens no device by itself (shell/voice-capture-shell.ts).
435
435
  voiceCaptureStatus = installVoiceCapture({ configManager, shellPaths: ctx.services.shellPaths, homeDirectory, sessionId: ctx.runtime.sessionId, commandContext, unsubs, buffer: input, submitInput, notify: (m) => { systemMessageRouter.high(m); render(); }, render: () => render() });
@@ -504,7 +504,7 @@ async function main() {
504
504
  // Cross-surface spine posture segment (adopted-daemon mode only).
505
505
  sessionSpineStatus: (() => { const s = uiServices.platform.externalServices?.inspect(); return s?.sessionSpineActive && s.sessionSpineStatus && s.sessionSpineStatus !== 'unknown' ? s.sessionSpineStatus : undefined; })(), runningAgentCount, runningProcessCount,
506
506
  webSurfaceUrl: configManager.get('web.enabled') ? resolveWebSurfaceUrl(configManager) : undefined,
507
- // Always-visible "sleep disabled" chip — topology-aware: the DAEMON's state in adopted-external mode, the in-process manager otherwise (power-chip-source.ts).
507
+ // Always-visible "sleep disabled" chip, topology-aware: the DAEMON's state in adopted-external mode, the in-process manager otherwise (power-chip-source.ts).
508
508
  powerKeepAwake: powerChipSource.get().keepAwake,
509
509
  // Composer must not read as focused while the panel/process indicator owns keyboard focus.
510
510
  promptFocused: !input.panelFocused && !input.indicatorFocused,
@@ -579,7 +579,7 @@ async function main() {
579
579
  const partialToolPreview = showPreview ? sessionSnapshot.streamToolPreview : undefined;
580
580
  // Elapsed from turn start (stream or tool execution), used for the thinking indicator timer.
581
581
  const turnElapsedMs = streamMetrics.startTime > 0 ? Date.now() - streamMetrics.startTime : undefined;
582
- // Suppressed while a tool executes — its ticking timer is the honest indicator then.
582
+ // Suppressed while a tool executes, its ticking timer is the honest indicator then.
583
583
  const stallInfo = UIFactory.computeRenderStallInfo(streamMetrics, Date.now());
584
584
  const thinking = UIFactory.createThinkingFragment(
585
585
  conversationWidth,
@@ -698,19 +698,19 @@ async function main() {
698
698
 
699
699
  unsubs.push(uiServices.events.turns.on('TURN_COMPLETED', (evt) => memoryProvenanceUi.onTurnCompleted(evt)));
700
700
 
701
- // Stable turn context for failover retry — set in submitInput, read by retryTurn.
701
+ // Stable turn context for failover retry, set in submitInput, read by retryTurn.
702
702
  let retryCtx: { count: number; text: string; content?: ContentPart[]; opts?: Parameters<typeof orchestrator.handleUserInput>[2] } | null = null;
703
703
  // One-key retry affordance, active right after a user-visible TURN_ERROR: 'r' re-submits on the
704
704
  // current provider, 'm' opens the model picker, any other character clears it and routes normally.
705
705
  // Surfaced as a transient FOOTER hint (see retryAffordanceHint below), not a transcript message.
706
706
  // Time-bounded: onExpire repaints once the 60s disarm timer fires, so a stray keypress hours
707
- // later can never trigger a real retry — see retry-affordance.ts.
707
+ // later can never trigger a real retry, see retry-affordance.ts.
708
708
  const retryAffordance = createRetryAffordanceState({ onExpire: render });
709
709
  const retryTurn = (notice?: string): boolean => {
710
710
  if (!retryCtx) return false; // nothing to roll back to; the caller narrates instead
711
711
  const { count, text, content: rContent, opts: rOpts } = retryCtx;
712
- // Roll back to pre-submission count, then re-submit. SDK gap — no retry-in-place (see handoff).
713
- // The rollback erases the failed turn's transcript — the failover notice included, which is how
712
+ // Roll back to pre-submission count, then re-submit. SDK gap, no retry-in-place (see handoff).
713
+ // The rollback erases the failed turn's transcript, the failover notice included, which is how
714
714
  // that notice used to vanish before anyone could read it. The caller hands it over instead, and
715
715
  // it is posted here: after the rollback, above the prompt it explains.
716
716
  conversation.removeMessagesAfter(count);
@@ -775,7 +775,7 @@ async function main() {
775
775
  });
776
776
  process.on('SIGINT', sigintHandler); process.on('unhandledRejection', unhandledRejectionHandler); stdout.on('resize', resizeHandler);
777
777
 
778
- // State restores happen ONLY when the user explicitly asks — a CLI flag
778
+ // State restores happen ONLY when the user explicitly asks, a CLI flag
779
779
  // (--continue/--resume/--fork), a slash command (/session resume,
780
780
  // /checkpoints, /rewind), or the startup recovery offer's modal. There is
781
781
  // deliberately no unconditional auto-restore here: a bare launch never
@@ -793,7 +793,7 @@ async function main() {
793
793
  }));
794
794
 
795
795
  // Auto-save to recovery file every 60s + multi-instance liveness-marker
796
- // refresh — see runtime/recovery-autosave.ts.
796
+ // refresh, see runtime/recovery-autosave.ts.
797
797
  recoveryInterval = startRecoveryAutosave({ conversation, runtime, surface: ctx.services.surface, buildSessionContinuityHints });
798
798
  }
799
799
 
@@ -11,7 +11,7 @@ export type AgentInspectorEntryKind = 'user' | 'assistant' | 'tool_call' | 'tool
11
11
  // AgentDetailModal, which was retired in).
12
12
  // ---------------------------------------------------------------------------
13
13
 
14
- /** Terminal statuses — cancel not offered; stall check skipped. */
14
+ /** Terminal statuses, cancel not offered; stall check skipped. */
15
15
  export const AGENT_TERMINAL_STATUSES = new Set(['completed', 'failed', 'cancelled']);
16
16
 
17
17
  /** Agents in a non-terminal state for longer than this are considered STALLED. */
@@ -172,7 +172,7 @@ export function formatAgentCost(usd: number): string {
172
172
  export interface AgentUsageSummary {
173
173
  readonly tokens: number;
174
174
  readonly cost: number;
175
- /** False when the model never resolved to a real price — `cost` is a zero placeholder, not a real reading. */
175
+ /** False when the model never resolved to a real price, `cost` is a zero placeholder, not a real reading. */
176
176
  readonly priced: boolean;
177
177
  }
178
178
 
@@ -190,12 +190,12 @@ interface AgentUsageLike {
190
190
  * True when a usage object carries actual reported token data rather than
191
191
  * being present-but-empty.: the SDK's AgentRecord.usage is initialised
192
192
  * to an all-zero object at agent spawn (platform/tools/agent/manager.ts) and
193
- * — in the currently pinned SDK version — is never updated past that, so a
193
+ *, in the currently pinned SDK version, is never updated past that, so a
194
194
  * plain truthiness check on `rec.usage` treats every agent, including ones
195
195
  * that did real work, as "has data" and renders a fabricated $0.00/0-token
196
196
  * reading. Guarding on real (nonzero) counts instead keeps today's "n/a"
197
197
  * honest and lights up automatically once a future SDK actually populates
198
- * usage — no further TUI change needed.
198
+ * usage, no further TUI change needed.
199
199
  */
200
200
  export function hasReportedUsage(
201
201
  usage: AgentUsageLike['usage'],
@@ -262,7 +262,7 @@ export function buildWrfcCostSegments(
262
262
  export interface AgentActivityHooks {
263
263
  /** Any AGENT_* activity event for this agent (running/progress/stream/awaiting/finalizing/spawning). */
264
264
  readonly onActivity: (agentId: string) => void;
265
- /** AGENT_SPAWNING only — used for auto-select-newest-agent. */
265
+ /** AGENT_SPAWNING only, used for auto-select-newest-agent. */
266
266
  readonly onSpawn: (agentId: string) => void;
267
267
  /** AGENT_COMPLETED/FAILED/CANCELLED. */
268
268
  readonly onTerminal: (agentId: string) => void;
@@ -12,7 +12,7 @@ const ERROR_FG = '#ef4444';
12
12
  /**
13
13
  * Frame requester wired by main.ts to the render scheduler. Without it,
14
14
  * markDirty() only sets a flag the compositor reads when a frame is ALREADY
15
- * being composed for another reason (input, streaming) — so a live panel
15
+ * being composed for another reason (input, streaming), so a live panel
16
16
  * (fleet ticks, registry subscriptions) sat visibly stale while the app was
17
17
  * idle until the next keypress (a replay finding). The scheduler
18
18
  * coalesces same-tick requests, so this stays cheap.
@@ -67,7 +67,7 @@ export abstract class BasePanel implements Panel {
67
67
  * Last error message to surface in the panel footer.
68
68
  * Auto-cleared on the next keystroke by `ScrollableListPanel.handleInput()` (and any
69
69
  * subclass that calls `super.handleInput()` or manually calls `this.clearError()` at
70
- * the start of its handler). BasePanel itself does NOT auto-clear — only subclasses
70
+ * the start of its handler). BasePanel itself does NOT auto-clear, only subclasses
71
71
  * that opt into the contract do.
72
72
  */
73
73
  protected lastError: string | null = null;
@@ -227,7 +227,7 @@ export abstract class BasePanel implements Panel {
227
227
  return consumed;
228
228
  }
229
229
 
230
- /** Mark this panel dirty — it will be re-rendered on the next compositor frame. */
230
+ /** Mark this panel dirty, it will be re-rendered on the next compositor frame. */
231
231
  public invalidate(): void { this.needsRender = true; }
232
232
 
233
233
  /** Called by the compositor after a successful render to clear the dirty flag. */
@@ -3,7 +3,7 @@ import type { ResolvedBuiltinPanelDeps } from './shared.ts';
3
3
 
4
4
  // (the purge): thinking, tools, inspector, and wrfc were registered here
5
5
  // before the purge. thinking/tools were DELETE-disposition (no surviving
6
- // human surface — thinking already renders inline in the transcript, tool
6
+ // human surface, thinking already renders inline in the transcript, tool
7
7
  // results render inline plus per-node in Fleet); inspector/wrfc were
8
8
  // RETIRE-INTO-FLEET (their live console is subsumed by the Fleet panel,
9
9
  // operations.ts:84). See registerOperationsPanels for the fleet
@@ -11,7 +11,7 @@ import type { ResolvedBuiltinPanelDeps } from './shared.ts';
11
11
  // the full disposition map.
12
12
  export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
13
13
  // Compat: '/panel open agent-logs' and 'inspector' (and any saved
14
- // layout/muscle memory) still resolve — redirected straight to fleet.
14
+ // layout/muscle memory) still resolve, redirected straight to fleet.
15
15
  // Repointed from agent-logs->inspector now that inspector itself
16
16
  // is retired; alias resolution is a single hop (PanelManager._resolveId),
17
17
  // so this must point at the real surviving id, not at another alias.
@@ -19,7 +19,7 @@ export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltin
19
19
  manager.registerAlias('inspector', 'fleet');
20
20
  manager.registerAlias('wrfc', 'fleet');
21
21
 
22
- // (the purge) — group B: 'work-plan' and 'project-planning'
22
+ // (the purge), group B: 'work-plan' and 'project-planning'
23
23
  // migrated to the 'work-plan-modal' / 'planning-modal' config-modal surfaces.
24
24
  // Their surfaces AND panel→modal redirects are registered centrally in
25
25
  // registerBuiltinModals (builtin-modals.ts). Panel registrations retired here.
@@ -8,8 +8,8 @@ import { requireUiServices, withUnconfiguredFallback } from './shared.ts';
8
8
 
9
9
  // (the purge): plan, intelligence, explorer, preview, and symbols were
10
10
  // registered here before the purge. plan was RETIRE-INTO-FLEET (its
11
- // execution-plan view is subsumed by Fleet — operations.ts:84); the other
12
- // four were DELETE-disposition (no surviving human surface — intelligence's
11
+ // execution-plan view is subsumed by Fleet, operations.ts:84); the other
12
+ // four were DELETE-disposition (no surviving human surface, intelligence's
13
13
  // read-model still backs the surviving `/intelligence` CLI subcommands, see
14
14
  // intelligence-runtime.ts; explorer/preview/symbols had no dedicated
15
15
  // read-model to preserve). See .goodvibes/audit/2026-07-04-wave6-briefs.json
@@ -31,7 +31,7 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
31
31
  });
32
32
 
33
33
  // Compat: '/panel open plan' (and any saved layout/muscle memory) still
34
- // resolves — redirected to fleet, which absorbs the execution-plan view.
34
+ // resolves, redirected to fleet, which absorbs the execution-plan view.
35
35
  manager.registerAlias('plan', 'fleet');
36
36
 
37
37
  manager.registerType({
@@ -57,7 +57,7 @@ export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedB
57
57
  });
58
58
 
59
59
  // 'inspector' registration moved to builtin/agent.ts (category
60
- // 'agent') — it now absorbs the merged agent-logs capabilities.
60
+ // 'agent'), it now absorbs the merged agent-logs capabilities.
61
61
 
62
62
  // always registered (was gated behind `if (deps.getOrchestratorUsage)`,
63
63
  // so `/panel open cost` reported "Unknown panel" on builds without usage
@@ -1,7 +1,7 @@
1
1
  import type { PanelManager } from '../panel-manager.ts';
2
2
  import type { ResolvedBuiltinPanelDeps } from './shared.ts';
3
3
 
4
- // (the purge) — group B: 'knowledge' and 'memory' migrated to the
4
+ // (the purge), group B: 'knowledge' and 'memory' migrated to the
5
5
  // 'knowledge-modal' / 'memory-modal' config-modal surfaces. Both surfaces and
6
6
  // their panel→modal redirects are registered centrally in registerBuiltinModals
7
7
  // (src/panels/builtin-modals.ts). This registrar is intentionally empty