@pellux/goodvibes-tui 2.0.14 → 2.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/.goodvibes/GOODVIBES.md +1 -1
  2. package/.goodvibes/agents/reviewer.md +8 -8
  3. package/.goodvibes/skills/add-provider/SKILL.md +22 -22
  4. package/CHANGELOG.md +49 -0
  5. package/README.md +64 -44
  6. package/docs/README.md +6 -6
  7. package/docs/foundation-artifacts/README.md +5 -5
  8. package/docs/foundation-artifacts/operator-contract.json +123 -123
  9. package/package.json +12 -10
  10. package/scripts/postinstall.js +3 -3
  11. package/src/audio/activation-sound.ts +7 -7
  12. package/src/audio/capture.ts +7 -7
  13. package/src/audio/onnxruntime-assets.d.ts +1 -1
  14. package/src/audio/player.ts +4 -4
  15. package/src/audio/spoken-turn-wiring.ts +4 -4
  16. package/src/audio/voice-capture-wiring.ts +5 -5
  17. package/src/audio/voice-input-session.ts +3 -3
  18. package/src/audio/wake-inference.ts +13 -8
  19. package/src/audio/wake-runtime.ts +10 -10
  20. package/src/cli/completions/generate.ts +2 -2
  21. package/src/cli/doctor.ts +13 -13
  22. package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
  23. package/src/cli/entrypoint.ts +3 -3
  24. package/src/cli/help.ts +6 -6
  25. package/src/cli/hooks-command.ts +4 -4
  26. package/src/cli/hooks-report.ts +4 -4
  27. package/src/cli/launch-auto-update.ts +17 -17
  28. package/src/cli/management-commands.ts +8 -8
  29. package/src/cli/management-utils.ts +3 -3
  30. package/src/cli/management.ts +1 -1
  31. package/src/cli/plugin-bundles-command.ts +10 -10
  32. package/src/cli/plugin-command.ts +9 -9
  33. package/src/cli/service-posture.ts +1 -1
  34. package/src/cli/status.ts +10 -10
  35. package/src/cli/surface-command.ts +4 -4
  36. package/src/cli/tui-startup.ts +23 -23
  37. package/src/config/run-daemon-config-migration.ts +3 -3
  38. package/src/config/secret-config.ts +10 -10
  39. package/src/config/surface.ts +1 -1
  40. package/src/config/tui-extension-settings.ts +8 -8
  41. package/src/core/active-model-identity.ts +7 -7
  42. package/src/core/approval-alert.ts +5 -5
  43. package/src/core/bookmark-navigation.ts +3 -3
  44. package/src/core/budget-breach-notifier.ts +6 -6
  45. package/src/core/compaction-receipt.ts +8 -8
  46. package/src/core/composer-state.ts +2 -2
  47. package/src/core/context-usage.ts +1 -1
  48. package/src/core/conversation-compaction-render.ts +3 -3
  49. package/src/core/conversation-event-navigation.ts +2 -2
  50. package/src/core/conversation-fold.ts +9 -9
  51. package/src/core/conversation-line-cache.ts +14 -14
  52. package/src/core/conversation-render-context.ts +6 -6
  53. package/src/core/conversation-rendering.ts +27 -30
  54. package/src/core/conversation-search-expansion.ts +6 -6
  55. package/src/core/conversation-splash-state.ts +3 -3
  56. package/src/core/conversation-turn-structure.ts +13 -13
  57. package/src/core/conversation-types.ts +3 -3
  58. package/src/core/conversation-user-receipts.ts +5 -5
  59. package/src/core/conversation.ts +17 -17
  60. package/src/core/format-user-error.ts +5 -5
  61. package/src/core/long-task-notifier.ts +9 -9
  62. package/src/core/memory-diagnostics-gateway.ts +8 -8
  63. package/src/core/memory-provenance.ts +5 -5
  64. package/src/core/model-routing-chip.ts +3 -3
  65. package/src/core/pairing-tailscale-gateway.ts +3 -3
  66. package/src/core/permission-mode.ts +5 -5
  67. package/src/core/power-chip-source.ts +3 -3
  68. package/src/core/power-status.ts +8 -8
  69. package/src/core/rewind-receipt.ts +6 -6
  70. package/src/core/session-resume-core.ts +8 -8
  71. package/src/core/stream-event-wiring.ts +36 -36
  72. package/src/core/stream-stall-watchdog.ts +4 -4
  73. package/src/core/system-message-noise.ts +7 -7
  74. package/src/core/system-message-router.ts +10 -10
  75. package/src/core/terminal-notifier.ts +5 -5
  76. package/src/core/turn-budget-outcome.ts +5 -5
  77. package/src/core/turn-cancellation.ts +3 -3
  78. package/src/core/turn-event-wiring.ts +16 -16
  79. package/src/core/voice-capture-status.ts +2 -2
  80. package/src/core/voice-provision-gateway.ts +12 -12
  81. package/src/core/voice-provision-status.ts +19 -19
  82. package/src/core/voice-stt-gateway.ts +6 -6
  83. package/src/core/wake-provision-runner.ts +7 -7
  84. package/src/core/wake-provision-status.ts +17 -17
  85. package/src/core/workstream-notification.ts +8 -8
  86. package/src/export/gist-uploader.ts +7 -7
  87. package/src/input/autocomplete.ts +3 -3
  88. package/src/input/bookmark-modal.ts +1 -1
  89. package/src/input/command-args-hint.ts +2 -2
  90. package/src/input/command-reference.ts +9 -9
  91. package/src/input/command-registry.ts +32 -32
  92. package/src/input/commands/acp-runtime.ts +6 -6
  93. package/src/input/commands/calendar-runtime.ts +9 -9
  94. package/src/input/commands/channel-pairing.ts +11 -11
  95. package/src/input/commands/channel-runtime.ts +1 -1
  96. package/src/input/commands/checkin-runtime.ts +4 -4
  97. package/src/input/commands/checkpoint-runtime.ts +4 -4
  98. package/src/input/commands/ci-runtime.ts +4 -4
  99. package/src/input/commands/cluster-runtime.ts +3 -3
  100. package/src/input/commands/codebase-runtime.ts +16 -16
  101. package/src/input/commands/config.ts +6 -6
  102. package/src/input/commands/connection-status.ts +12 -12
  103. package/src/input/commands/context-window.ts +2 -2
  104. package/src/input/commands/cost-attribution-format.ts +4 -4
  105. package/src/input/commands/cost-runtime.ts +2 -2
  106. package/src/input/commands/devices-runtime.ts +7 -7
  107. package/src/input/commands/diff-runtime.ts +2 -2
  108. package/src/input/commands/editor-runtime.ts +1 -1
  109. package/src/input/commands/eval.ts +4 -4
  110. package/src/input/commands/experience-runtime.ts +1 -1
  111. package/src/input/commands/git-runtime.ts +3 -3
  112. package/src/input/commands/graph-runtime.ts +3 -3
  113. package/src/input/commands/guidance-runtime.ts +1 -1
  114. package/src/input/commands/health-metrics-format.ts +2 -2
  115. package/src/input/commands/health-runtime.ts +8 -8
  116. package/src/input/commands/hosted-runtime.ts +13 -13
  117. package/src/input/commands/image-runtime.ts +6 -6
  118. package/src/input/commands/intelligence-runtime.ts +2 -2
  119. package/src/input/commands/local-auth-runtime.ts +3 -3
  120. package/src/input/commands/local-provider-runtime.ts +3 -3
  121. package/src/input/commands/local-runtime.ts +7 -7
  122. package/src/input/commands/mail-runtime.ts +9 -9
  123. package/src/input/commands/mcp-runtime.ts +1 -1
  124. package/src/input/commands/memory.ts +13 -13
  125. package/src/input/commands/notify-runtime.ts +1 -1
  126. package/src/input/commands/operator-panel-runtime.ts +8 -8
  127. package/src/input/commands/operator-rpc.ts +3 -3
  128. package/src/input/commands/operator-runtime.ts +3 -3
  129. package/src/input/commands/palette-runtime.ts +1 -1
  130. package/src/input/commands/payment-card-intake.ts +17 -17
  131. package/src/input/commands/permissions-provenance.ts +7 -7
  132. package/src/input/commands/permissions-runtime.ts +1 -1
  133. package/src/input/commands/planning-runtime.ts +19 -19
  134. package/src/input/commands/platform-services-runtime.ts +2 -2
  135. package/src/input/commands/policy-dispatch.ts +6 -6
  136. package/src/input/commands/power-runtime.ts +6 -6
  137. package/src/input/commands/principals-runtime.ts +3 -3
  138. package/src/input/commands/product-runtime.ts +3 -3
  139. package/src/input/commands/profile-render.ts +13 -13
  140. package/src/input/commands/profile-runtime.ts +13 -13
  141. package/src/input/commands/profile-types.ts +13 -13
  142. package/src/input/commands/provider-accounts-runtime.ts +5 -5
  143. package/src/input/commands/provider.ts +10 -10
  144. package/src/input/commands/qrcode-runtime.ts +3 -3
  145. package/src/input/commands/queue-runtime.ts +6 -6
  146. package/src/input/commands/recall-files-config.ts +4 -4
  147. package/src/input/commands/recall-files-git.ts +3 -3
  148. package/src/input/commands/recall-files.ts +12 -12
  149. package/src/input/commands/recall-query.ts +3 -3
  150. package/src/input/commands/recall-review.ts +3 -3
  151. package/src/input/commands/recall-shared.ts +1 -1
  152. package/src/input/commands/relay-runtime.ts +5 -5
  153. package/src/input/commands/remote-runtime.ts +3 -3
  154. package/src/input/commands/review-runtime.ts +8 -8
  155. package/src/input/commands/rewind-runtime.ts +21 -21
  156. package/src/input/commands/runtime-services.ts +1 -2
  157. package/src/input/commands/schedule-nl.ts +2 -2
  158. package/src/input/commands/schedule-runtime.ts +2 -2
  159. package/src/input/commands/secret-runtime.ts +3 -3
  160. package/src/input/commands/session-content.ts +7 -7
  161. package/src/input/commands/session-picker-filter.ts +3 -3
  162. package/src/input/commands/session-workflow.ts +10 -10
  163. package/src/input/commands/session.ts +15 -15
  164. package/src/input/commands/settings-sync-runtime.ts +2 -2
  165. package/src/input/commands/share-runtime.ts +4 -4
  166. package/src/input/commands/shell-core.ts +11 -11
  167. package/src/input/commands/tasks-runtime.ts +4 -4
  168. package/src/input/commands/test-runtime.ts +6 -6
  169. package/src/input/commands/tts-runtime.ts +4 -4
  170. package/src/input/commands/update-runtime.ts +27 -27
  171. package/src/input/commands/websearch-runtime.ts +2 -2
  172. package/src/input/commands/work-plan-runtime.ts +2 -2
  173. package/src/input/commands/workstream-attempt-dependents.ts +4 -4
  174. package/src/input/commands/workstream-attempts.ts +16 -16
  175. package/src/input/commands/workstream-runtime.ts +36 -36
  176. package/src/input/commands/worktree-runtime.ts +6 -6
  177. package/src/input/composer-capture.ts +5 -5
  178. package/src/input/concealed-input.ts +2 -2
  179. package/src/input/config-modal-types.ts +16 -16
  180. package/src/input/config-modal.ts +30 -30
  181. package/src/input/daemon-owned-settings-descriptions.ts +4 -4
  182. package/src/input/delete-key-policy.ts +1 -1
  183. package/src/input/exec-env-scrub-config.ts +7 -7
  184. package/src/input/feature-unit-layout.ts +5 -5
  185. package/src/input/feed-context-factory.ts +38 -38
  186. package/src/input/file-picker.ts +1 -1
  187. package/src/input/handler-command-route.ts +2 -2
  188. package/src/input/handler-content-actions.ts +8 -8
  189. package/src/input/handler-feed-routes.ts +13 -13
  190. package/src/input/handler-feed.ts +31 -31
  191. package/src/input/handler-interactions.ts +2 -2
  192. package/src/input/handler-modal-routes.ts +13 -13
  193. package/src/input/handler-modal-stack.ts +1 -1
  194. package/src/input/handler-modal-token-routes.ts +1 -1
  195. package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
  196. package/src/input/handler-picker-routes.ts +7 -7
  197. package/src/input/handler-prompt-buffer.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +12 -12
  199. package/src/input/handler-types.ts +3 -3
  200. package/src/input/handler-ui-state.ts +1 -1
  201. package/src/input/handler.ts +9 -9
  202. package/src/input/input-history.ts +1 -1
  203. package/src/input/keybindings.ts +13 -13
  204. package/src/input/kill-ring.ts +7 -11
  205. package/src/input/model-picker-filter.ts +3 -3
  206. package/src/input/model-picker-items.ts +5 -5
  207. package/src/input/model-picker-types.ts +2 -2
  208. package/src/input/model-picker.ts +18 -18
  209. package/src/input/onboarding/onboarding-feature-units.ts +9 -13
  210. package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
  211. package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
  212. package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
  213. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
  214. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
  215. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
  216. package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
  217. package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
  218. package/src/input/panel-integration-actions.ts +3 -3
  219. package/src/input/panel-mouse-geometry.ts +1 -1
  220. package/src/input/panel-paste-flood-guard.ts +9 -9
  221. package/src/input/payments-config.ts +15 -15
  222. package/src/input/profile-picker-modal.ts +1 -1
  223. package/src/input/provider-key-intake.ts +9 -9
  224. package/src/input/relay-settings-descriptions.ts +3 -3
  225. package/src/input/sandbox-exec-config.ts +9 -9
  226. package/src/input/search.ts +18 -18
  227. package/src/input/selection-modal-queue.ts +10 -10
  228. package/src/input/selection-modal.ts +2 -2
  229. package/src/input/session-picker-modal.ts +7 -7
  230. package/src/input/settings-modal-activation.ts +1 -1
  231. package/src/input/settings-modal-adjustment.ts +2 -2
  232. package/src/input/settings-modal-commit.ts +6 -6
  233. package/src/input/settings-modal-connections.ts +2 -2
  234. package/src/input/settings-modal-data.ts +29 -29
  235. package/src/input/settings-modal-mutations.ts +7 -7
  236. package/src/input/settings-modal-reset.ts +3 -3
  237. package/src/input/settings-modal-search.ts +6 -6
  238. package/src/input/settings-modal-secrets.ts +3 -3
  239. package/src/input/settings-modal-types.ts +16 -16
  240. package/src/input/settings-modal.ts +4 -4
  241. package/src/input/voice-local-settings.ts +3 -3
  242. package/src/input/worktree-setup-config.ts +8 -8
  243. package/src/main.ts +15 -15
  244. package/src/panels/agent-inspector-shared.ts +5 -5
  245. package/src/panels/base-panel.ts +3 -3
  246. package/src/panels/builtin/agent.ts +3 -3
  247. package/src/panels/builtin/development.ts +4 -4
  248. package/src/panels/builtin/knowledge.ts +1 -1
  249. package/src/panels/builtin/operations.ts +12 -12
  250. package/src/panels/builtin/session.ts +8 -8
  251. package/src/panels/builtin/shared.ts +6 -6
  252. package/src/panels/builtin-modals.ts +8 -8
  253. package/src/panels/confirm-state.ts +5 -5
  254. package/src/panels/cost-tracker-panel.ts +22 -22
  255. package/src/panels/diff-panel.ts +20 -20
  256. package/src/panels/diff-review-model.ts +5 -5
  257. package/src/panels/diff-review-panel.ts +5 -5
  258. package/src/panels/eval-registry.ts +2 -2
  259. package/src/panels/expandable-list-panel.ts +5 -5
  260. package/src/panels/fleet-acts.ts +20 -20
  261. package/src/panels/fleet-deep-link.ts +5 -5
  262. package/src/panels/fleet-gateway.ts +12 -12
  263. package/src/panels/fleet-observed-render.ts +11 -11
  264. package/src/panels/fleet-panel-format.ts +14 -14
  265. package/src/panels/fleet-panel-worktree-detail.ts +8 -8
  266. package/src/panels/fleet-panel.ts +34 -34
  267. package/src/panels/fleet-read-model.ts +49 -49
  268. package/src/panels/fleet-spawn.ts +15 -15
  269. package/src/panels/fleet-steer.ts +7 -7
  270. package/src/panels/fleet-stop.ts +5 -5
  271. package/src/panels/fleet-tabs.ts +14 -14
  272. package/src/panels/fleet-transcript.ts +26 -26
  273. package/src/panels/git-panel.ts +8 -8
  274. package/src/panels/hosted-session-feed.ts +13 -13
  275. package/src/panels/hosted-session-panel.ts +7 -7
  276. package/src/panels/index.ts +1 -1
  277. package/src/panels/local-auth-panel.ts +15 -15
  278. package/src/panels/memory-consolidation-gateway.ts +8 -8
  279. package/src/panels/modals/devices-modal.ts +8 -8
  280. package/src/panels/modals/hooks-modal.ts +1 -1
  281. package/src/panels/modals/keybindings-modal.ts +5 -5
  282. package/src/panels/modals/knowledge-modal.ts +2 -2
  283. package/src/panels/modals/local-auth-modal.ts +4 -4
  284. package/src/panels/modals/marketplace-modal.ts +3 -3
  285. package/src/panels/modals/memory-modal.ts +19 -19
  286. package/src/panels/modals/modal-surface-helpers.ts +1 -1
  287. package/src/panels/modals/modal-theme.ts +3 -3
  288. package/src/panels/modals/pairing-modal.ts +19 -19
  289. package/src/panels/modals/planning-modal.ts +11 -11
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -6,7 +6,7 @@ export interface SearchMatch {
6
6
  col: number;
7
7
  length: number;
8
8
  /**
9
- * Present when this match lives inside content that is still collapsed —
9
+ * Present when this match lives inside content that is still collapsed,
10
10
  * `line`/`col` are placeholders (the containing block's own header line,
11
11
  * col 0) rather than a real navigable position. `collapseKeys` names every
12
12
  * collapse key that must be expanded to make the hit a real rendered
@@ -18,7 +18,7 @@ export interface SearchMatch {
18
18
  primaryKey?: string;
19
19
  }
20
20
 
21
- /** Count non-overlapping occurrences of `needle` in `haystack` — used for
21
+ /** Count non-overlapping occurrences of `needle` in `haystack`, used for
22
22
  * the collapsed-content scan below, mirroring the per-line indexOf loop
23
23
  * search() already runs over the rendered buffer, so a hidden hit counts
24
24
  * the same way a visible one would once revealed. */
@@ -63,19 +63,19 @@ export class SearchManager {
63
63
  this.wrapAround = false;
64
64
  }
65
65
 
66
- /** Lock the query — switches from typing mode to navigation mode. */
66
+ /** Lock the query, switches from typing mode to navigation mode. */
67
67
  lock(): void {
68
68
  this.locked = true;
69
69
  }
70
70
 
71
- /** Unlock — return to typing mode. */
71
+ /** Unlock, return to typing mode. */
72
72
  unlock(): void {
73
73
  this.locked = false;
74
74
  }
75
75
 
76
76
  /**
77
77
  * Close search mode. Re-collapses every block/group search auto-expanded
78
- * while it was open — except ones the user explicitly acted on (toggled,
78
+ * while it was open, except ones the user explicitly acted on (toggled,
79
79
  * copied, bookmarked, saved) while they were expanded, which stay exactly
80
80
  * as the user left them (see SearchExpansionTracker.restoreOnto).
81
81
  * `conversationManager` is optional so existing call sites that never had
@@ -88,19 +88,19 @@ export class SearchManager {
88
88
  }
89
89
 
90
90
  /**
91
- * Update query and find matches — honestly counting hits inside collapsed
91
+ * Update query and find matches, honestly counting hits inside collapsed
92
92
  * blocks and folded tool-result groups WITHOUT expanding them. Expansion
93
93
  * only happens on navigation (see revealCurrentMatch): typing a query must
94
94
  * never collapse-destroy the transcript the user folded on purpose, but a
95
95
  * "no matches" while text the user watched stream by sits collapsed
96
- * somewhere would be a lie too — so the count includes it, tagged as
96
+ * somewhere would be a lie too, so the count includes it, tagged as
97
97
  * hidden until the user actually navigates there.
98
98
  *
99
- * That collapsed corpus is the block's own RAW content, plus — for a
100
- * folded tool-result group — the raw content of every one of its member
99
+ * That collapsed corpus is the block's own RAW content, plus, for a
100
+ * folded tool-result group, the raw content of every one of its member
101
101
  * messages (a group's own rawContent is only its summary header line, and
102
- * its members push no BlockMeta of their own while folded — see
103
- * conversation-tool-groups.ts — so without the member corpus a needle
102
+ * its members push no BlockMeta of their own while folded, see
103
+ * conversation-tool-groups.ts, so without the member corpus a needle
104
104
  * living inside a member would count as zero hits for text the user
105
105
  * watched stream by).
106
106
  *
@@ -124,7 +124,7 @@ export class SearchManager {
124
124
  }
125
125
 
126
126
  /**
127
- * Shared match builder for search() and revealCurrentMatch() — scans the
127
+ * Shared match builder for search() and revealCurrentMatch(), scans the
128
128
  * currently-rendered buffer for visible matches and every collapsed
129
129
  * block/folded group for hidden ones, without mutating any collapse
130
130
  * state. Kept separate from search() so revealCurrentMatch can rebuild the
@@ -142,7 +142,7 @@ export class SearchManager {
142
142
 
143
143
  if (block.type === 'assistant_turn' && block.groupMemberIndexes) {
144
144
  // The header's own synthetic summary rarely matches, but count it
145
- // honestly too — expanding the whole group is the only way to even
145
+ // honestly too, expanding the whole group is the only way to even
146
146
  // attempt to reveal a header-corpus hit, since there is no single
147
147
  // member to isolate it to.
148
148
  const headerHits = countOccurrences(block.rawContent.toLowerCase(), lowerQuery);
@@ -169,7 +169,7 @@ export class SearchManager {
169
169
  line: block.startLine, col: 0, length: query.length,
170
170
  // Revealing a member-specific hit only needs the group
171
171
  // header (to unfold the group at all) and that member's own
172
- // key — not its siblings, which stay exactly as they were.
172
+ // key, not its siblings, which stay exactly as they were.
173
173
  collapseKeys: [block.collapseKey, memberKey], primaryKey: memberKey,
174
174
  });
175
175
  }
@@ -203,7 +203,7 @@ export class SearchManager {
203
203
 
204
204
  // Stable sort (V8/JSC have guaranteed stable Array#sort) puts each
205
205
  // block's hidden hits in the same relative order they were generated
206
- // in — self-corpus first, then members in order — right where that
206
+ // in, self-corpus first, then members in order, right where that
207
207
  // block's header line falls among the visible matches.
208
208
  return [...visibleMatches, ...hiddenMatches].sort((a, b) => a.line - b.line || a.col - b.col);
209
209
  }
@@ -216,7 +216,7 @@ export class SearchManager {
216
216
  * the match list against the now-expanded buffer.
217
217
  *
218
218
  * `currentMatch` is repointed at the first now-visible match inside the
219
- * revealed block's new line range, rather than reset to 0 — expansion
219
+ * revealed block's new line range, rather than reset to 0, expansion
220
220
  * only changes how many lines that ONE block renders as, so every match
221
221
  * belonging to earlier blocks keeps its relative position.
222
222
  *
@@ -273,7 +273,7 @@ export class SearchManager {
273
273
  }
274
274
 
275
275
  /** Get the line number of the current match (for scroll). Returns -1 for a
276
- * match that's still hidden inside collapsed content — revealCurrentMatch
276
+ * match that's still hidden inside collapsed content, revealCurrentMatch
277
277
  * must run first to give it a real line. */
278
278
  getCurrentMatchLine(): number {
279
279
  if (this.matches.length === 0) return -1;
@@ -284,7 +284,7 @@ export class SearchManager {
284
284
  }
285
285
 
286
286
  /** Get matches on a given line. Hidden (still-collapsed) matches are
287
- * excluded — they have no real line to render a highlight on yet. */
287
+ * excluded, they have no real line to render a highlight on yet. */
288
288
  getMatchesOnLine(lineIdx: number): SearchMatch[] {
289
289
  return this.matches.filter(m => m.line === lineIdx && !m.collapseKeys);
290
290
  }
@@ -1,9 +1,9 @@
1
1
  /**
2
- * selection-modal-queue.ts — Serializes overlapping InputHandler.openSelection() calls.
2
+ * selection-modal-queue.ts, Serializes overlapping InputHandler.openSelection() calls.
3
3
  *
4
4
  * openSelection (handler.ts) writes into a singleton SelectionModal plus a
5
5
  * single callback slot. A second openSelection call while one is already
6
- * showing used to silently overwrite both — the pre-empted caller's callback
6
+ * showing used to silently overwrite both, the pre-empted caller's callback
7
7
  * was never invoked, not even with null, so any caller that awaits it (see
8
8
  * the `ask()` helper in runtime/recovery-prompt.ts, which wraps the callback
9
9
  * in a Promise) hung forever. This is reachable in production: the
@@ -13,12 +13,12 @@
13
13
  *
14
14
  * Fix: queue overlapping requests FIFO and open each automatically once the
15
15
  * previous one resolves, through the SAME callback the caller already
16
- * supplied — openSelection's public signature never changes.
16
+ * supplied, openSelection's public signature never changes.
17
17
  *
18
18
  * Why the drain is deferred to a microtask instead of running inline inside
19
- * the resolving callback: both resolution paths — the select/enter path in
19
+ * the resolving callback: both resolution paths, the select/enter path in
20
20
  * handler-modal-routes.ts's dispatchSelectionAction, and the Escape path in
21
- * handler-modal-stack.ts's handleEscape/closeSelection — take a snapshot of
21
+ * handler-modal-stack.ts's handleEscape/closeSelection, take a snapshot of
22
22
  * the current selectionCallback before dispatch and write some form of that
23
23
  * snapshot back into handler/context state AFTER invoking the callback (the
24
24
  * select path re-reads via getSelectionCallback; the Escape path threads a
@@ -28,7 +28,7 @@
28
28
  * write-backs would immediately clobber the freshly-set callback for the
29
29
  * newly-opened modal. Deferring past the end of the synchronous resolution
30
30
  * (queueMicrotask) lets all of that settle first, then opens the next
31
- * request cleanly — the same shape as the production race this fixes, which
31
+ * request cleanly, the same shape as the production race this fixes, which
32
32
  * itself resolves via a deferred (macrotask) call.
33
33
  */
34
34
  import type { SelectionItem, SelectionAction, SelectionResult, SelectionModal } from './selection-modal.ts';
@@ -55,7 +55,7 @@ export interface PendingSelectionRequest {
55
55
  * modal vs. the recovery offer's 0ms macrotask), so 8 is generous headroom
56
56
  * for any future chained-picker sequence without letting a misbehaving
57
57
  * caller queue without bound. Once full, the overflowing call is resolved
58
- * with `null` immediately — a bounded queue must still give every caller a
58
+ * with `null` immediately, a bounded queue must still give every caller a
59
59
  * definite answer, never silently drop one.
60
60
  */
61
61
  export const MAX_QUEUED_SELECTIONS = 8;
@@ -115,7 +115,7 @@ export class SelectionModalQueue {
115
115
  const wrapped: SelectionModalCallback = (result) => {
116
116
  request.callback(result);
117
117
  // Only a terminal resolution (select/cancel/escape) actually closes
118
- // the modal — dispatchSelectionAction's toggle/increment/decrement
118
+ // the modal, dispatchSelectionAction's toggle/increment/decrement
119
119
  // branch invokes the callback but leaves the modal open for further
120
120
  // interaction, so only drain the queue once the modal has gone
121
121
  // inactive, never on every callback invocation.
@@ -133,7 +133,7 @@ export class SelectionModalQueue {
133
133
  private drain(): void {
134
134
  // Something else already opened a modal in the meantime (e.g. a
135
135
  // synchronously chained openSelection call from inside the resolving
136
- // callback) — leave the queue alone; that modal's own resolution will
136
+ // callback), leave the queue alone; that modal's own resolution will
137
137
  // drain it in turn.
138
138
  if (this.host.selectionModal.active) return;
139
139
  const next = this.pending.shift();
@@ -142,7 +142,7 @@ export class SelectionModalQueue {
142
142
  }
143
143
  }
144
144
 
145
- /** InputHandler's actual field/method shape — satisfies this structurally, no import needed. */
145
+ /** InputHandler's actual field/method shape, satisfies this structurally, no import needed. */
146
146
  export interface SelectionQueueOwner {
147
147
  readonly selectionModal: Pick<SelectionModal, 'active' | 'open'>;
148
148
  selectionCallback: SelectionModalCallback | null;
@@ -88,7 +88,7 @@ export class SelectionModal {
88
88
  }
89
89
 
90
90
  moveUp(): void {
91
- // Skip category headers (items with no id-based content — filtered items include only selectable ones)
91
+ // Skip category headers (items with no id-based content, filtered items include only selectable ones)
92
92
  if (this.filteredItems.length === 0) return;
93
93
  this.selectedIndex = this.selectedIndex > 0
94
94
  ? this.selectedIndex - 1
@@ -127,7 +127,7 @@ export class SelectionModal {
127
127
  return this.filteredItems[this.selectedIndex] ?? null;
128
128
  }
129
129
 
130
- /** Fuzzy match items against query — resets filteredItems */
130
+ /** Fuzzy match items against query, resets filteredItems */
131
131
  private filterItems(): void {
132
132
  if (this.query.length === 0) {
133
133
  this.filteredItems = this.items.slice();
@@ -1,13 +1,13 @@
1
1
  /**
2
- * SessionPickerModal — state management for the /sessions picker modal.
2
+ * SessionPickerModal, state management for the /sessions picker modal.
3
3
  *
4
4
  * Lists LOCAL saved transcript files from SessionManager.list() (load/delete
5
- * operate on these — a saved JSONL session is a different thing from a live
5
+ * operate on these, a saved JSONL session is a different thing from a live
6
6
  * control-plane session, see below), tracks selected index, and handles
7
7
  * load/delete actions.
8
8
  *
9
9
  * Union-sessions surface: additionally surfaces the cross-surface
10
- * session union from `sessionBroker` (a SessionReadFacade — normally
10
+ * session union from `sessionBroker` (a SessionReadFacade, normally
11
11
  * `uiServices.sessions.sessionBroker`, the SessionUnionCache) so a user can
12
12
  * SEE what sessions are live/closed across every surface sharing this
13
13
  * daemon (TUI, webui, companion, automation), not just this process's own
@@ -21,7 +21,7 @@
21
21
  * Hosted sessions: a third, also read-only section lists the conversations
22
22
  * running INSIDE the daemon (`sessions.hosted.list`, held by the shared roster
23
23
  * in runtime/client/hosted-roster.ts). They belong in the place a person
24
- * already goes to ask "what sessions are there" — a hosted session is exactly
24
+ * already goes to ask "what sessions are there", a hosted session is exactly
25
25
  * that, one whose loop happens to live elsewhere. Joining one is `/hosted
26
26
  * attach <id>` rather than an Enter here, for the same reason cross-surface
27
27
  * rows are not loadable: there is no on-disk transcript this process can
@@ -38,7 +38,7 @@ import type { ConversationManager } from '../core/conversation';
38
38
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
39
39
  import type { HostedRosterSnapshot } from '../runtime/client/hosted-roster.ts';
40
40
  // Re-exported so the composition site (input/handler.ts) reaches the picker and
41
- // its hosted roster through ONE import — that file sits on this repo's 800-line
41
+ // its hosted roster through ONE import, that file sits on this repo's 800-line
42
42
  // per-file gate and a second import line there is a real cost.
43
43
  export { getSharedHostedSessionRoster } from '../runtime/client/hosted-roster.ts';
44
44
 
@@ -67,7 +67,7 @@ const DORMANT_CROSS_SURFACE_VIEW: CrossSurfaceView = {
67
67
  export class SessionPickerModal {
68
68
  public active = false;
69
69
  public sessions: SessionInfo[] = [];
70
- /** Cross-surface session union (view-only) — see class doc. Empty until open(). */
70
+ /** Cross-surface session union (view-only), see class doc. Empty until open(). */
71
71
  public crossSurfaceSessions: readonly SharedSessionRecord[] = [];
72
72
  /** Honest posture for crossSurfaceSessions: mode/online/stale/offlineNote. */
73
73
  public crossSurfaceView: CrossSurfaceView = DORMANT_CROSS_SURFACE_VIEW;
@@ -76,7 +76,7 @@ export class SessionPickerModal {
76
76
  public visibleRows = 8;
77
77
  public deleteConfirmationTarget: string | null = null;
78
78
 
79
- /** Daemon-hosted sessions (view-only) — see class doc. Never a fabricated empty list. */
79
+ /** Daemon-hosted sessions (view-only), see class doc. Never a fabricated empty list. */
80
80
  public hostedRoster: HostedRosterSnapshot = UNREAD_HOSTED_ROSTER;
81
81
 
82
82
  /** Last status message to show in the modal (e.g. error or success). */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-activation — pure action helpers for SettingsModal.
2
+ * settings-modal-activation, pure action helpers for SettingsModal.
3
3
  *
4
4
  * These functions encapsulate the two activation/interaction operations:
5
5
  * - activateSelected: toggle boolean, cycle enum, enter edit mode, launch pickers
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-adjustment — pure adjustment helpers for SettingsModal.
2
+ * settings-modal-adjustment, pure adjustment helpers for SettingsModal.
3
3
  *
4
4
  * These functions encapsulate the directional-adjustment operation:
5
5
  * - adjustSelected: cycle enum/boolean/number values via left/right arrow keys
@@ -43,7 +43,7 @@ export function adjustSelected(
43
43
  if (ctx.editingMode) return;
44
44
 
45
45
  // Feature-unit headers are the real config rows for their enablement keys
46
- // (boolean or enum), so they fall through to the ordinary branches below —
46
+ // (boolean or enum), so they fall through to the ordinary branches below,
47
47
  // a plain config write the settings bridge forwards to the gate manager.
48
48
 
49
49
  if (ctx.currentCategory === 'mcp') {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-commit.ts — commitEdit(), extracted out of the SettingsModal
2
+ * settings-modal-commit.ts, commitEdit(), extracted out of the SettingsModal
3
3
  * class body so the class file can stay under the repo's architecture
4
4
  * line-count gate without trimming arbitrary lines to clear the number.
5
5
  *
@@ -31,7 +31,7 @@ export interface CommitEditContext {
31
31
  /**
32
32
  * The daemon's credential write, when a daemon is adopted. A daemon-scoped
33
33
  * credential must land where the daemon reads it, not in this surface's own
34
- * tree — see settings-modal-secrets.ts.
34
+ * tree, see settings-modal-secrets.ts.
35
35
  */
36
36
  readonly daemonCredentials?: SettingsDaemonCredentialWriter | null;
37
37
  /** Renders a refused credential write; without it a failure would be silent. */
@@ -50,7 +50,7 @@ export interface CommitEditContext {
50
50
  /**
51
51
  * Commit the current editBuffer to the config. Returns true on success,
52
52
  * false if validation failed (the caller always clears editingMode/editBuffer
53
- * regardless — a failed commit never leaves stale edit state behind).
53
+ * regardless, a failed commit never leaves stale edit state behind).
54
54
  */
55
55
  export function commitEditValue(ctx: CommitEditContext): boolean {
56
56
  if (!ctx.editingMode) return false;
@@ -127,16 +127,16 @@ export function commitEditValue(ctx: CommitEditContext): boolean {
127
127
 
128
128
  if (isWorktreeSetupListConfigKey(setting.key)) {
129
129
  // Comma-separated display/edit convention for the array-backed
130
- // worktree.setup.* keys — see worktree-setup-config.ts.
130
+ // worktree.setup.* keys, see worktree-setup-config.ts.
131
131
  ctx.setValue(setting.key, parseWorktreeSetupListInput(ctx.editBuffer));
132
132
  } else if (isSandboxExecListConfigKey(setting.key)) {
133
133
  // Same comma-separated convention for the array-backed
134
- // sandbox.egressAllowlist / sandbox.workspaceWritable keys — see
134
+ // sandbox.egressAllowlist / sandbox.workspaceWritable keys, see
135
135
  // sandbox-exec-config.ts.
136
136
  ctx.setValue(setting.key, parseSandboxExecListInput(ctx.editBuffer));
137
137
  } else if (isExecEnvScrubAllowlistConfigKey(setting.key)) {
138
138
  // Same comma-separated convention for permissions.execEnvScrubAllowlist
139
- // — see exec-env-scrub-config.ts.
139
+ //, see exec-env-scrub-config.ts.
140
140
  ctx.setValue(setting.key, parseExecEnvScrubAllowlistInput(ctx.editBuffer));
141
141
  } else if (setting.type === 'string' && isSecretConfigKey(setting.key)) {
142
142
  setSecretBackedSettingValue({
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-connections.ts — the Connections category of the settings
2
+ * settings-modal-connections.ts, the Connections category of the settings
3
3
  * workspace: whether mail and calendar are actually usable, and if not, the
4
4
  * exact next step.
5
5
  *
@@ -14,7 +14,7 @@
14
14
  * Every other settings category reads a value out of config and renders it.
15
15
  * This one cannot: "is mail connected?" is only answerable by asking the
16
16
  * daemon's handler, which is real I/O. The workspace renders synchronously, so
17
- * the rows start in `checking` — which is true — and the refresh replaces them
17
+ * the rows start in `checking`, which is true, and the refresh replaces them
18
18
  * and asks for a re-render, the same contract the Services surface uses for its
19
19
  * inspections. Nothing is ever shown as "not configured" merely because an
20
20
  * answer has not arrived yet; that would be a guess rendered as a fact.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * settings-modal-data — pure data-assembly helpers for SettingsModal.
2
+ * settings-modal-data, pure data-assembly helpers for SettingsModal.
3
3
  *
4
4
  * All functions are stateless: they take dependencies as arguments and return
5
5
  * derived data without mutating state. The class in settings-modal.ts delegates
@@ -55,7 +55,7 @@ import {
55
55
  } from './payments-config.ts';
56
56
 
57
57
  // ---------------------------------------------------------------------------
58
- // deepEqual — structural equality for isDefault comparisons
58
+ // deepEqual, structural equality for isDefault comparisons
59
59
  // ---------------------------------------------------------------------------
60
60
 
61
61
  /**
@@ -89,7 +89,7 @@ export function deepEqual(a: unknown, b: unknown): boolean {
89
89
  }
90
90
 
91
91
  // ---------------------------------------------------------------------------
92
- // buildSettingGroups — loads CONFIG_SCHEMA into per-category SettingEntry maps
92
+ // buildSettingGroups, loads CONFIG_SCHEMA into per-category SettingEntry maps
93
93
  // ---------------------------------------------------------------------------
94
94
 
95
95
  export function buildSettingGroups(
@@ -127,13 +127,13 @@ export function buildSettingGroups(
127
127
  // pushCompletion), so the contact address and the subscription
128
128
  // housekeeping bounds belong in that same category rather than in one of
129
129
  // their own. Without this they match no category at all and would be
130
- // dropped from the workspace entirely — reachable only by editing the
130
+ // dropped from the workspace entirely, reachable only by editing the
131
131
  // config file by hand.
132
132
  if (rawCat === 'push' && groups.has('notifications')) groups.get('notifications')!.push(entry);
133
133
  // cluster.* decides which node on this network reads the inbox, and it is
134
134
  // configured in the same terms the network category already speaks: a
135
135
  // group address, a port, a shared phrase, a peer list. Given no category of
136
- // its own it would match nothing and drop out of the workspace entirely —
136
+ // its own it would match nothing and drop out of the workspace entirely,
137
137
  // reachable only by hand-editing a settings file.
138
138
  if (rawCat === 'cluster' && groups.has('network')) groups.get('network')!.push(entry);
139
139
  }
@@ -183,7 +183,7 @@ export function buildSettingGroups(
183
183
  behaviorEntries.push(entry);
184
184
  }
185
185
  }
186
- // In-terminal (OSC 9) notification toggles + audible bell — same category,
186
+ // In-terminal (OSC 9) notification toggles + audible bell, same category,
187
187
  // per-key defaults (see terminal-notifier.ts).
188
188
  for (const entry of buildTerminalNotifySyntheticEntries(configManager)) {
189
189
  if (!behaviorEntries.some((e) => e.setting.key === entry.setting.key)) {
@@ -194,7 +194,7 @@ export function buildSettingGroups(
194
194
 
195
195
  // Inject the storage.codeIndexEnabled toggle into the
196
196
  // storage category. TUI-local synthetic setting (not in the SDK ConfigKey
197
- // union — see code-index-services.ts), same rationale as
197
+ // union, see code-index-services.ts), same rationale as
198
198
  // notifyAfterSeconds above: opt-in, default off, states its own bounds.
199
199
  const storageEntries = groups.get('storage');
200
200
  if (storageEntries && !storageEntries.some((e) => e.setting.key === (CODE_INDEX_ENABLED_CONFIG_KEY as ConfigKey))) {
@@ -202,13 +202,13 @@ export function buildSettingGroups(
202
202
  }
203
203
 
204
204
  // Inject the memory.projection.dir synthetic entry into the storage
205
- // category (alongside codeIndexEnabled — both are local-storage posture
205
+ // category (alongside codeIndexEnabled, both are local-storage posture
206
206
  // settings). Not in the SDK ConfigKey union, same rationale as above.
207
207
  if (storageEntries && !storageEntries.some((e) => e.setting.key === MEMORY_PROJECTION_DIR_CONFIG_KEY)) {
208
208
  storageEntries.push(buildMemoryProjectionDirSyntheticEntry(configManager));
209
209
  }
210
210
 
211
- // Synthetic memory.showProvenance (TUI-local, default OFF — see memory-provenance.ts).
211
+ // Synthetic memory.showProvenance (TUI-local, default OFF, see memory-provenance.ts).
212
212
  const memoryEntries = groups.get('memory');
213
213
  if (memoryEntries && !memoryEntries.some((e) => e.setting.key === (MEMORY_SHOW_PROVENANCE_CONFIG_KEY as ConfigKey))) {
214
214
  memoryEntries.push(buildMemoryProvenanceSyntheticEntry(configManager) as unknown as SettingEntry);
@@ -216,7 +216,7 @@ export function buildSettingGroups(
216
216
 
217
217
  // Inject the worktree.setup.commands / worktree.setup.carryOverGlobs
218
218
  // synthetic entries into the orchestration category (worktree isolation is
219
- // an orchestration-engine concern — see WorkstreamIsolation 'worktree').
219
+ // an orchestration-engine concern, see WorkstreamIsolation 'worktree').
220
220
  // Neither key is in the SDK ConfigKey union (see worktree-setup-config.ts),
221
221
  // same rationale as the other synthetic settings above.
222
222
  const orchestrationEntries = groups.get('orchestration');
@@ -230,7 +230,7 @@ export function buildSettingGroups(
230
230
  }
231
231
 
232
232
  // Inject the sandbox.egressAllowlist / sandbox.workspaceWritable and
233
- // permissions.execEnvScrubAllowlist synthetic entries — see
233
+ // permissions.execEnvScrubAllowlist synthetic entries, see
234
234
  // sandbox-exec-config.ts / exec-env-scrub-config.ts for why they are not in
235
235
  // CONFIG_SCHEMA, same rationale as the other synthetic settings above.
236
236
  injectSandboxExecSyntheticEntries(groups, configManager);
@@ -242,7 +242,7 @@ export function buildSettingGroups(
242
242
  // windows, notifyChannels). What's injected here are the four secret-tier
243
243
  // card-material fields and the two ordinary address fields, which are
244
244
  // TUI-local synthetic sub-keys under that real section (not yet SDK
245
- // CONFIG_SCHEMA entries — see payments-config.ts's header comment), backed
245
+ // CONFIG_SCHEMA entries, see payments-config.ts's header comment), backed
246
246
  // by the same real configManager as everything else in this group.
247
247
  const paymentsEntries = groups.get('payments');
248
248
  if (paymentsEntries && !paymentsEntries.some((e) => isPaymentsSyntheticConfigKey(e.setting.key))) {
@@ -254,7 +254,7 @@ export function buildSettingGroups(
254
254
  enrichRelaySettingDescriptions(groups);
255
255
 
256
256
  // Daemon-owned keys (e.g. surfaces.telegram.*) live only in the daemon's
257
- // own config store — say so in the detail text (daemon-owned-settings-descriptions.ts).
257
+ // own config store, say so in the detail text (daemon-owned-settings-descriptions.ts).
258
258
  enrichDaemonOwnedSettingDescriptions(groups, configManager);
259
259
 
260
260
  // Feature-unit presentation: each capability becomes ONE unit (its real
@@ -322,7 +322,7 @@ export function buildNotifyAfterSecondsSyntheticEntry(configManager: Pick<Config
322
322
  /**
323
323
  * The synthetic ConfigSetting descriptor for behavior.budgetAlertUsd.
324
324
  *
325
- * This key is TUI-local and is not yet in the SDK ConfigKey union — it never
325
+ * This key is TUI-local and is not yet in the SDK ConfigKey union, it never
326
326
  * appeared in CONFIG_SCHEMA, so it was invisible to every schema-driven
327
327
  * inspection surface (/config, /settings-sync show <key>) even though the
328
328
  * value round-trips correctly through configManager.get/set. The descriptor
@@ -357,7 +357,7 @@ export function buildBudgetAlertUsdSyntheticEntry(configManager: Pick<ConfigMana
357
357
  }
358
358
 
359
359
  // ---------------------------------------------------------------------------
360
- // alert-class synthetic settings — behavior.notifyOn* + notifyOnlyWhenUnfocused
360
+ // alert-class synthetic settings, behavior.notifyOn* + notifyOnlyWhenUnfocused
361
361
  // ---------------------------------------------------------------------------
362
362
 
363
363
  /**
@@ -365,7 +365,7 @@ export function buildBudgetAlertUsdSyntheticEntry(configManager: Pick<ConfigMana
365
365
  * ConfigKey union), all defaulting to on. Read/written generically by
366
366
  * core/alert-gating.ts (readBooleanConfig) and the per-alert-class modules
367
367
  * (budget-breach-notifier.ts, approval-alert.ts, turn-event-wiring.ts,
368
- * long-task-notifier.ts) — this is only the settings-modal-visible surface.
368
+ * long-task-notifier.ts), this is only the settings-modal-visible surface.
369
369
  */
370
370
  const NOTIFY_ALERT_SYNTHETIC_SETTINGS: ReadonlyArray<{ readonly key: string; readonly description: string }> = [
371
371
  {
@@ -411,7 +411,7 @@ export function buildNotifyAlertSyntheticEntries(configManager: Pick<ConfigManag
411
411
  }
412
412
 
413
413
  // ---------------------------------------------------------------------------
414
- // In-terminal (OSC 9) notification settings — see core/terminal-notifier.ts
414
+ // In-terminal (OSC 9) notification settings, see core/terminal-notifier.ts
415
415
  // ---------------------------------------------------------------------------
416
416
 
417
417
  /**
@@ -421,7 +421,7 @@ export function buildNotifyAlertSyntheticEntries(configManager: Pick<ConfigManag
421
421
  * on, turn-end/agent-blocked off, bell off. Read generically by
422
422
  * core/terminal-notifier.ts (readBooleanConfig); this is only the
423
423
  * settings-modal-visible surface. These are independent of the master
424
- * `notifyOnlyWhenUnfocused` gate — an in-terminal notification is always
424
+ * `notifyOnlyWhenUnfocused` gate, an in-terminal notification is always
425
425
  * focus-gated on its own (only fires for an unfocused/unknown terminal).
426
426
  */
427
427
  const TERMINAL_NOTIFY_SYNTHETIC_SETTINGS: ReadonlyArray<{ readonly key: string; readonly description: string; readonly defaultOn: boolean }> = [
@@ -460,7 +460,7 @@ export function buildTerminalNotifySyntheticEntries(configManager: Pick<ConfigMa
460
460
  * The repo source-tree code index's auto-build-on-startup toggle
461
461
  * (code-index-services.ts). TUI-local, default OFF: /codebase build is the
462
462
  * explicit trigger unless a user opts in here. Honest bounds stated inline
463
- * so enabling this isn't a surprise — see code-index-services.ts's
463
+ * so enabling this isn't a surprise, see code-index-services.ts's
464
464
  * CODE_INDEX_MAX_FILES/CODE_INDEX_MAX_FILE_BYTES for the numbers this
465
465
  * description would otherwise duplicate as magic numbers.
466
466
  */
@@ -468,13 +468,13 @@ export function buildCodeIndexEnabledSyntheticEntry(configManager: Pick<ConfigMa
468
468
  return buildBooleanSyntheticEntry(
469
469
  configManager,
470
470
  CODE_INDEX_ENABLED_CONFIG_KEY,
471
- 'Auto-build the repo source-tree code index on startup (bounded file/size scan; see /codebase status for bounds). Off by default — /codebase build indexes on demand.',
471
+ 'Auto-build the repo source-tree code index on startup (bounded file/size scan; see /codebase status for bounds). Off by default: /codebase build indexes on demand.',
472
472
  false,
473
473
  );
474
474
  }
475
475
 
476
476
  // ---------------------------------------------------------------------------
477
- // buildFlagEntries — snapshot of current feature flag states
477
+ // buildFlagEntries, snapshot of current feature flag states
478
478
  // ---------------------------------------------------------------------------
479
479
 
480
480
  export function buildFlagEntries(featureFlagManager: FeatureFlagManager | null): FlagEntry[] {
@@ -489,7 +489,7 @@ export function buildFlagEntries(featureFlagManager: FeatureFlagManager | null):
489
489
  }
490
490
 
491
491
  // ---------------------------------------------------------------------------
492
- // buildMcpEntries — snapshot of current MCP server security entries
492
+ // buildMcpEntries, snapshot of current MCP server security entries
493
493
  // ---------------------------------------------------------------------------
494
494
 
495
495
  export function buildMcpEntries(mcpRegistry: McpRegistry | null): McpEntry[] {
@@ -505,13 +505,13 @@ export function buildMcpEntries(mcpRegistry: McpRegistry | null): McpEntry[] {
505
505
  }
506
506
 
507
507
  // ---------------------------------------------------------------------------
508
- // buildSubscriptionEntries — re-export for use by SettingsModal
508
+ // buildSubscriptionEntries, re-export for use by SettingsModal
509
509
  // ---------------------------------------------------------------------------
510
510
 
511
511
  export { buildSubscriptionEntries };
512
512
 
513
513
  // ---------------------------------------------------------------------------
514
- // buildNetworkFilteredItems — applies host-mode visibility rules for 'network' tab
514
+ // buildNetworkFilteredItems, applies host-mode visibility rules for 'network' tab
515
515
  // ---------------------------------------------------------------------------
516
516
 
517
517
  export function buildNetworkFilteredItems(
@@ -533,7 +533,7 @@ export function buildNetworkFilteredItems(
533
533
  }
534
534
 
535
535
  // ---------------------------------------------------------------------------
536
- // refreshEntryValues — re-reads currentValue/isDefault for all loaded entries
536
+ // refreshEntryValues, re-reads currentValue/isDefault for all loaded entries
537
537
  // ---------------------------------------------------------------------------
538
538
 
539
539
  export function refreshEntryValues(
@@ -560,19 +560,19 @@ export function refreshEntryValues(
560
560
  entry.isDefault = (entry.currentValue as string[]).length === 0;
561
561
  continue;
562
562
  }
563
- // 'memory' has no DEFAULT_CONFIG entry — its synthetic leaves read defensively below.
563
+ // 'memory' has no DEFAULT_CONFIG entry, its synthetic leaves read defensively below.
564
564
  if (entry.setting.key === MEMORY_PROJECTION_DIR_CONFIG_KEY) {
565
565
  const refreshed = buildMemoryProjectionDirSyntheticEntry(configManager);
566
566
  entry.currentValue = refreshed.currentValue; entry.isDefault = refreshed.isDefault;
567
567
  continue;
568
568
  }
569
- // memory.showProvenance: same 'memory'-has-no-DEFAULT_CONFIG trap — read defensively.
569
+ // memory.showProvenance: same 'memory'-has-no-DEFAULT_CONFIG trap, read defensively.
570
570
  if (entry.setting.key === (MEMORY_SHOW_PROVENANCE_CONFIG_KEY as ConfigKey)) {
571
571
  const refreshed = buildMemoryProvenanceSyntheticEntry(configManager);
572
572
  entry.currentValue = refreshed.currentValue; entry.isDefault = refreshed.isDefault;
573
573
  continue;
574
574
  }
575
- // payments.* synthetic sub-keys (card material + addresses — see
575
+ // payments.* synthetic sub-keys (card material + addresses, see
576
576
  // payments-config.ts): real configManager-backed now, but still
577
577
  // defensively normalized (undefined -> '') the same way the initial
578
578
  // build does, so isDefault stays consistent between build and refresh.
@@ -591,7 +591,7 @@ export function refreshEntryValues(
591
591
  }
592
592
 
593
593
  // ---------------------------------------------------------------------------
594
- // updateEntryForKey — updates a single setting entry after a value change
594
+ // updateEntryForKey, updates a single setting entry after a value change
595
595
  // ---------------------------------------------------------------------------
596
596
 
597
597
  export function updateEntryForKey(
@@ -1,8 +1,8 @@
1
1
  /**
2
- * settings-modal-mutations — pure mutation helpers for SettingsModal.
2
+ * settings-modal-mutations, pure mutation helpers for SettingsModal.
3
3
  *
4
4
  * These functions encapsulate the side-effectful write operations. Every
5
- * write — feature-unit headers included — is a plain domain-settings config
5
+ * write, feature-unit headers included, is a plain domain-settings config
6
6
  * write; the SDK's settings bridge keeps the runtime gate manager in sync
7
7
  * (flipping runtime-toggleable gates live and recording honest
8
8
  * pending-restart markers for startup-gated ones). Each function takes its
@@ -17,7 +17,7 @@ import type { FlagEntry, SettingEntry } from './settings-modal-types.ts';
17
17
  import { deepEqual } from './settings-modal-data.ts';
18
18
 
19
19
  // ---------------------------------------------------------------------------
20
- // ApplyValueResult — returned by applySettingValue so the caller can react
20
+ // ApplyValueResult, returned by applySettingValue so the caller can react
21
21
  // ---------------------------------------------------------------------------
22
22
 
23
23
  export interface ApplyValueResult {
@@ -45,7 +45,7 @@ export type SettingAppliedCallback = (change: {
45
45
  * `surfaces.*`, `controlPlane.*`, `watchers.*`, `device.*`, `automation.*` and
46
46
  * the rest are executed by the daemon, unattended, with every surface closed.
47
47
  * Writing one into this surface's own settings file reports success and
48
- * configures nothing — the daemon reads a different file and never sees it.
48
+ * configures nothing, the daemon reads a different file and never sees it.
49
49
  * So a daemon-owned write goes over `config.set`, and a write with no reachable
50
50
  * daemon FAILS rather than landing somewhere harmless-looking.
51
51
  */
@@ -80,8 +80,8 @@ export function applySettingValue({
80
80
  // live under a config section CONFIG_SCHEMA/DEFAULT_CONFIG has never populated
81
81
  // (e.g. 'worktree' as of the SDK 1.6.1 repack), so configManager.get can throw
82
82
  // "Invalid config path" here even though the write attempt below is already
83
- // guarded. Without this, that read — which runs unconditionally, before the
84
- // write's own try/catch — would crash the whole settings modal on save instead
83
+ // guarded. Without this, that read, which runs unconditionally, before the
84
+ // write's own try/catch, would crash the whole settings modal on save instead
85
85
  // of surfacing the honest "Save failed" message the write path below produces.
86
86
  let previousValue: unknown;
87
87
  try {
@@ -101,7 +101,7 @@ export function applySettingValue({
101
101
  // manager is still written so this session's own reads and the rows
102
102
  // below reflect the edit immediately; the daemon's copy is what the
103
103
  // daemon acts on, and a refusal from it is surfaced rather than
104
- // swallowed — the local value would then be the lie.
104
+ // swallowed, the local value would then be the lie.
105
105
  void daemonConfig.set(key, value).catch((error) => {
106
106
  logger.error('SettingsModal: the daemon refused a daemon-owned config write', { key, error: summarizeError(error) });
107
107
  onAsyncError?.(`That setting is applied by the daemon and saving it there failed: ${summarizeError(error)}`);