@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
@@ -54,11 +54,11 @@ export function buildOnboardingApplyRequest(controller: OnboardingWizardControll
54
54
  };
55
55
  // Every credential the first-run wizard captures is one the DAEMON executes
56
56
  // with: model provider API keys (the daemon runs the model), the Cloudflare
57
- // API token, and the masked fields of the external surfaces — all of which
57
+ // API token, and the masked fields of the external surfaces, all of which
58
58
  // live under daemon-owned `surfaces.*` config paths. So they all go to the
59
59
  // daemon tier, which is the one tier every surface AND the daemon read.
60
60
  //
61
- // 'project' — what this used to pass — filed them under whatever directory
61
+ // 'project', what this used to pass, filed them under whatever directory
62
62
  // the wizard happened to be run from. Run the wizard in ~/code/foo and the
63
63
  // daemon, which has no idea that directory exists, found nothing; run it
64
64
  // again elsewhere and the first setup silently stopped applying. First-run
@@ -108,7 +108,7 @@ export function buildOnboardingApplyRequest(controller: OnboardingWizardControll
108
108
  // One-Platform daemon-by-default (SDK docs/decisions/2026-07-05-daemon-by-default.md):
109
109
  // the loopback-only cross-surface session daemon is safe-by-design
110
110
  // (loopback bind, auth-gated, rate-limited) and runs regardless of whether
111
- // browser/LAN/webhook/external-app capabilities are selected here — it is no
111
+ // browser/LAN/webhook/external-app capabilities are selected here, it is no
112
112
  // longer bundled with those network-exposing surfaces, so onboarding leaves
113
113
  // daemon.enabled untouched and lets the SDK's own default-true (or an existing
114
114
  // explicit user override) govern. (The deprecated danger.daemon alias this
@@ -143,7 +143,7 @@ export function buildOnboardingApplyRequest(controller: OnboardingWizardControll
143
143
  setConfig('behavior.hitlMode', hitlMode);
144
144
  // behavior.hitlMode IS the enablement key of the hitl-ux-modes capability
145
145
  // (active for quiet/balanced/operator, off only at 'off'), so the write
146
- // above already carries the enablement — no separate gating write exists,
146
+ // above already carries the enablement, no separate gating write exists,
147
147
  // and adding one here would clobber a non-default choice with the stock
148
148
  // mode when the batch flushes.
149
149
  setConfig('behavior.guidanceMode', controller.getStringFieldValue('experience.guidance', controller.runtimeSnapshot?.runtimeDefaults.behavior.guidanceMode ?? 'minimal'));
@@ -204,7 +204,7 @@ export function buildOnboardingApplyRequest(controller: OnboardingWizardControll
204
204
  applyFeatureUnitOperations(controller, setConfig, featureFlagOverrides);
205
205
 
206
206
  // Surface/server capabilities are authoritative for the network-exposing
207
- // features they own — apply them last so they win over any feature-step
207
+ // features they own, apply them last so they win over any feature-step
208
208
  // override.
209
209
  for (const surfaceFlag of getServerSurfaceFeatureFlags({
210
210
  serverBacked: hasServers,
@@ -306,7 +306,7 @@ function addCloudflareOperations(
306
306
  // login-rate-limiter keys on the client address the tunnel forwards rather
307
307
  // than the tunnel's own egress address. On its own, that address is read
308
308
  // from X-Forwarded-For, which a client reaching the listener directly can
309
- // set for itself — so it could still choose which address the rate limiter
309
+ // set for itself, so it could still choose which address the rate limiter
310
310
  // and the audit log recorded.
311
311
  //
312
312
  // httpListener.trustCloudflare is what closes that: the listener reads
@@ -257,7 +257,7 @@ export function buildCloudflareStep(controller: OnboardingWizardControllerLike):
257
257
  );
258
258
  }
259
259
 
260
- // Trust-proxy notice — shown when Tunnel is selected so the
260
+ // Trust-proxy notice, shown when Tunnel is selected so the
261
261
  // operator sees the security implication before applying.
262
262
  const tunnelSelected = enabled && components.zeroTrustTunnel;
263
263
  if (tunnelSelected) {
@@ -21,7 +21,7 @@ export const DEFAULT_CAPABILITIES: readonly OnboardingStep1CapabilityItem[] = [
21
21
  // Honest wording (One-Platform daemon-by-default): this avoids browser/LAN/
22
22
  // webhook/external-app exposure, but the loopback-only GoodVibes daemon
23
23
  // still runs by default for cross-surface visibility on this machine.
24
- detail: 'Use GoodVibes only in this terminal. No browser access, HTTP listener, external app surface, or network setup. A loopback-only background daemon still runs by default so sessions here stay visible to other GoodVibes surfaces on this machine — turn it off in Settings > daemon if you want none at all.',
24
+ detail: 'Use GoodVibes only in this terminal. No browser access, HTTP listener, external app surface, or network setup. A loopback-only background daemon still runs by default so sessions here stay visible to other GoodVibes surfaces on this machine; turn it off in Settings > daemon if you want none at all.',
25
25
  },
26
26
  {
27
27
  id: 'browser-access',
@@ -11,8 +11,8 @@
11
11
  // • the per-surface auto-start enablement model (see the auto-start helpers),
12
12
  // • numeric UI bounds (min/max) the SDK schema does not carry,
13
13
  // • radio option copy (with hints) for select fields.
14
- // Everything else — a field's existence, its config key, its input kind, and its
15
- // default value — is derived from the SDK schema + DEFAULT_CONFIG, so the two can
14
+ // Everything else, a field's existence, its config key, its input kind, and its
15
+ // default value, is derived from the SDK schema + DEFAULT_CONFIG, so the two can
16
16
  // never silently drift. A field the overlay names that the SDK no longer defines
17
17
  // is a loud build error; a field the SDK adds that the overlay has not curated is
18
18
  // appended automatically with SDK-derived presentation.
@@ -65,7 +65,7 @@ function kebab(value: string): string {
65
65
 
66
66
  /**
67
67
  * The default value shown for a field. Derived, not hand-authored: the current
68
- * snapshot value if present, otherwise the config default (DEFAULT_CONFIG) — which
68
+ * snapshot value if present, otherwise the config default (DEFAULT_CONFIG), which
69
69
  * is exactly what the previous per-field literals returned. Numbers stringify.
70
70
  */
71
71
  function readFieldDefault(configKey: ConfigKey, snapshot: OnboardingSnapshotState | null): string {
@@ -286,7 +286,7 @@ const SURFACE_OVERLAYS: readonly SurfaceOverlay[] = [
286
286
  onboardingId: 'telephony',
287
287
  sdkSurface: 'telephony',
288
288
  label: 'Telephony surface',
289
- hint: 'Enable SMS/voice notification delivery — direct Twilio, or a self-hosted bridge.',
289
+ hint: 'Enable SMS/voice notification delivery: direct Twilio, or a self-hosted bridge.',
290
290
  fields: [
291
291
  { configKey: 'surfaces.telephony.provider', label: 'Telephony provider', hint: 'twilio for direct Twilio delivery, bridge for a self-hosted telephony bridge.', placeholder: 'twilio' },
292
292
  { configKey: 'surfaces.telephony.mode', label: 'Telephony mode', hint: 'sms, voice (call with spoken text), or bridge.', placeholder: 'sms' },
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Friction fix: the Network step's daemon-source choice
3
- * — start a new daemon owned by this TUI (default) vs connect to one that is
3
+ *, start a new daemon owned by this TUI (default) vs connect to one that is
4
4
  * already running elsewhere with a known token. Extracted from
5
5
  * onboarding-wizard-steps.ts to keep that file under the architecture line cap.
6
6
  */
@@ -19,7 +19,7 @@ export function getDaemonSource(controller: OnboardingWizardControllerLike): str
19
19
  /**
20
20
  * Push the daemon-source radio, plus the host/port/token/connect fields when
21
21
  * 'adopt' is selected, onto the Network step's field list. Independent of the
22
- * local/custom network mode — adopting someone else's daemon is a client-side
22
+ * local/custom network mode, adopting someone else's daemon is a client-side
23
23
  * choice about which daemon THIS TUI talks to, not about how THIS TUI's own
24
24
  * daemon binds to the network.
25
25
  */
@@ -79,7 +79,7 @@ export function pushDaemonAdoptionFields(
79
79
 
80
80
  /**
81
81
  * The guided, visible entry point for migrating a detected legacy
82
- * `goodvibes-daemon.service` unit — closes the fast-follow-up flagged when
82
+ * `goodvibes-daemon.service` unit, closes the fast-follow-up flagged when
83
83
  * `handleMigrateLegacyDaemonServiceForHandler` (handler-onboarding-daemon-adopt.ts)
84
84
  * shipped fully built but not wired to any onboarding control. Independent of
85
85
  * the daemon-source radio above: this offers to retire an old unmanaged unit
@@ -88,11 +88,11 @@ export function pushDaemonAdoptionFields(
88
88
  *
89
89
  * Visible ONLY when the runtime snapshot's read-only `legacyDaemon` detection
90
90
  * (collected via `detectLegacyUnit`, see `../../runtime/legacy-daemon-migration.ts`)
91
- * found a unit file present — never rendered speculatively. Confirm-gated on
91
+ * found a unit file present, never rendered speculatively. Confirm-gated on
92
92
  * top of the engine's own consent requirement: a checklist toggle must be
93
93
  * checked before the action executes the real migration (`confirmMigration:
94
94
  * true`); left unchecked, pressing the action still works but only prints the
95
- * engine's dry-run plan (`confirmMigration: false`) — see
95
+ * engine's dry-run plan (`confirmMigration: false`), see
96
96
  * `runLegacyDaemonMigration`'s honest dry-run branch. The action label and
97
97
  * hint change to make which mode is armed unambiguous before it is pressed.
98
98
  */
@@ -108,7 +108,7 @@ export function pushLegacyDaemonMigrationFields(
108
108
  id: 'network.migrate-legacy-daemon-detected',
109
109
  label: 'Separate install-script daemon service detected',
110
110
  // Follow-up: name the unit this host actually resolves (carried on the
111
- // snapshot from `resolveConfiguredServiceName` at collection time) — the
111
+ // snapshot from `resolveConfiguredServiceName` at collection time), the
112
112
  // MANAGED_SERVICE_NAME fallback only covers snapshots built without it.
113
113
  hint: legacyUnitNote(legacy, legacy.trackedServiceName ?? MANAGED_SERVICE_NAME),
114
114
  defaultValue: legacy.active ? 'Installed and running' : 'Installed (not active)',
@@ -162,7 +162,7 @@ export function buildProvidersStep(controller: OnboardingWizardControllerLike):
162
162
  );
163
163
  const signInPending = subscription.signInPending;
164
164
  // Provider-agnostic key capture: one field per provider the registry knows
165
- // accepts an API key (derived from registration truth — never a hardcoded
165
+ // accepts an API key (derived from registration truth, never a hardcoded
166
166
  // vendor list). No provider is named as the only option.
167
167
  const keyTargets = deriveProviderKeyCaptureTargets(controller.runtimeSnapshot?.providerAccounts?.providers);
168
168
  const configuredKeyCount = keyTargets.filter((target) => target.configured).length;
@@ -614,7 +614,7 @@ export function buildNetworkStep(controller: OnboardingWizardControllerLike): On
614
614
  if (controlPlaneRemote || listenerEnabled || browserEnabled) { // TLS warn + CORS notice.
615
615
  const cpOff = controlPlaneRemote && String(controller.runtimeSnapshot?.config.controlPlane?.tls?.mode ?? 'off') === 'off';
616
616
  const hlOff = listenerEnabled && String(controller.runtimeSnapshot?.config.httpListener?.tls?.mode ?? 'off') === 'off';
617
- if (cpOff || hlOff) { const a = [cpOff ? 'control plane' : '', hlOff ? 'HTTP listener' : ''].filter(Boolean).join(' and '); fields.push({ kind: 'status', id: 'network.tls-warn', label: `TLS off — ${a} transmits plaintext`, defaultValue: 'Warning', hint: `The ${a} is network-reachable but TLS is off. Traffic travels in plaintext. Enable TLS or use a terminating reverse proxy.` }); }
617
+ if (cpOff || hlOff) { const a = [cpOff ? 'control plane' : '', hlOff ? 'HTTP listener' : ''].filter(Boolean).join(' and '); fields.push({ kind: 'status', id: 'network.tls-warn', label: `TLS off: ${a} transmits plaintext`, defaultValue: 'Warning', hint: `The ${a} is network-reachable but TLS is off. Traffic travels in plaintext. Enable TLS or use a terminating reverse proxy.` }); }
618
618
  if (listenerEnabled) { fields.push({ kind: 'status', id: 'network.cors-note', label: 'Browser CORS is off by default', defaultValue: 'Info', hint: 'The webhook/control-plane HTTP listener honors controlPlane.cors.enabled and controlPlane.cors.allowedOrigins. Set both from Settings > Control Plane (or /config controlPlane) to allow browser origins, then restart the daemon. CORS stays off until you enable it.' }); }
619
619
  }
620
620
  return {
@@ -3,11 +3,11 @@ import type { Panel } from '../panels/types.ts';
3
3
  import type { PanelManager } from '../panels/panel-manager.ts';
4
4
 
5
5
  // (the purge): every instanceof-routed branch this file used to carry
6
- // (FileExplorerPanel/FilePreviewPanel/SymbolOutlinePanel — DELETE;
7
- // ApprovalPanel/TasksPanel/OrchestrationPanel/AgentInspectorPanel —
6
+ // (FileExplorerPanel/FilePreviewPanel/SymbolOutlinePanel, DELETE;
7
+ // ApprovalPanel/TasksPanel/OrchestrationPanel/AgentInspectorPanel,
8
8
  // RETIRE-INTO-FLEET) targeted a panel class that no longer exists. Panels
9
9
  // migrated onto the formal `Panel.handlePanelIntegrationAction` hook (the
10
- // preferred seam — see the comment below) are unaffected; this function now
10
+ // preferred seam, see the comment below) are unaffected; this function now
11
11
  // only provides that passthrough. See
12
12
  // .goodvibes/audit/2026-07-04-wave6-briefs.json for the disposition
13
13
  // map.
@@ -70,7 +70,7 @@ export function getPanelUnderMouse(
70
70
  /**
71
71
  * If the mouse is over the consolidated workspace tab bar (the first panel
72
72
  * row), return the index of the tab under the cursor, else null. Recomputes the
73
- * tab hit regions by rendering the bar with a layout callback — cheap and keeps
73
+ * tab hit regions by rendering the bar with a layout callback, cheap and keeps
74
74
  * the click geometry in lockstep with what was drawn.
75
75
  */
76
76
  export function workspaceTabAtMouse(
@@ -1,10 +1,10 @@
1
1
  // ---------------------------------------------------------------------------
2
- // panel-paste-flood-guard.ts — item 5.
2
+ // panel-paste-flood-guard.ts, item 5.
3
3
  //
4
4
  // A terminal WITHOUT bracketed paste delivers a pasted block as a burst of
5
5
  // discrete 1-char 'text' tokens (isPasteToken stays false for every one of
6
6
  // them, since that flag only fires for a single token whose value.length > 1
7
- // — see handler-feed-routes.ts's own Invariant B doc). Before this guard,
7
+ //, see handler-feed-routes.ts's own Invariant B doc). Before this guard,
8
8
  // each such character became a real panel hotkey on a focused non-capturing
9
9
  // panel (K arms kill, etc.) once it reached handlePanelFocusToken's per-char
10
10
  // dispatch loop.
@@ -16,15 +16,15 @@
16
16
  // same input layer already tore out once (see panel-focus-burst.test.ts's
17
17
  // header doc): that old guard summed one feed()'s character count with no
18
18
  // timing signal at all, so two ordinary nav keystrokes landing in a single
19
- // feed() — a real, common case, not an edge case — were misread as a burst
19
+ // feed(), a real, common case, not an edge case, were misread as a burst
20
20
  // and focus was silently flipped to the composer. This guard:
21
21
  // - never touches focus (panelFocused is untouched by trackPanelPasteFloodGuard
22
22
  // and by its caller);
23
23
  // - is keyed on WALL-CLOCK TIMING, not a per-feed token count, so it
24
24
  // doesn't care how many tokens land in one feed() call, only how fast
25
25
  // they arrive relative to each other;
26
- // - is sticky once tripped (only a quiet gap — no qualifying token for a
27
- // full window — clears it) so it doesn't flap dispatch on/off as the
26
+ // - is sticky once tripped (only a quiet gap, no qualifying token for a
27
+ // full window, clears it) so it doesn't flap dispatch on/off as the
28
28
  // count oscillates near the threshold mid-flood.
29
29
  //
30
30
  // ~8 keys/120ms is far beyond sustained human typing (a fast typist peaks
@@ -39,10 +39,10 @@ export const PANEL_PASTE_FLOOD_WINDOW_MS = 120;
39
39
  export const PANEL_PASTE_FLOOD_THRESHOLD = 8;
40
40
 
41
41
  /**
42
- * Guard state — a single persistent instance lives on the caller's
42
+ * Guard state, a single persistent instance lives on the caller's
43
43
  * long-lived context (handler-feed.ts's InputFeedContext, mirroring how that
44
44
  * object already owns `nextPasteId`/`mouseDownRow`/etc.) and is MUTATED IN
45
- * PLACE by trackPanelPasteFloodGuard below, never replaced — so callers never
45
+ * PLACE by trackPanelPasteFloodGuard below, never replaced, so callers never
46
46
  * need to thread a return value back into their own state (unlike
47
47
  * `panelFocused`, which handlePanelFocusToken returns because it is NOT a
48
48
  * mutable outparam).
@@ -54,7 +54,7 @@ export interface PanelBurstGuardState {
54
54
  }
55
55
 
56
56
  export interface PanelBurstGuardResult {
57
- /** False while suspended — the caller must drop this token, not dispatch it. */
57
+ /** False while suspended, the caller must drop this token, not dispatch it. */
58
58
  readonly dispatch: boolean;
59
59
  /** True exactly once per burst: the call that just tripped suspension. */
60
60
  readonly showHintNow: boolean;
@@ -66,7 +66,7 @@ export function trackPanelPasteFloodGuard(guard: PanelBurstGuardState, now: numb
66
66
  const isQuietGap = now - lastAt > PANEL_PASTE_FLOOD_WINDOW_MS;
67
67
  if (isQuietGap && guard.suspended) {
68
68
  // A silence at least as long as the window means whatever burst was
69
- // happening has ended — un-suspend so a LATER burst gets its own fresh
69
+ // happening has ended, un-suspend so a LATER burst gets its own fresh
70
70
  // count and its own one-shot hint.
71
71
  guard.suspended = false;
72
72
  guard.hintShown = false;
@@ -1,16 +1,16 @@
1
1
  /**
2
- * payments-config.ts — TUI-local synthetic settings for the payment card
2
+ * payments-config.ts, TUI-local synthetic settings for the payment card
3
3
  * capability's card MATERIAL fields.
4
4
  *
5
5
  * The SDK's CONFIG_SCHEMA now has a full real `payments` section (28 keys:
6
6
  * enabled, defaultCardId, currency, cvvHandling, the six budget keys,
7
7
  * shipping.preferredTier, the fourteen billing/shipping address sub-fields
8
- * (name, line1, line2, city, region, postalCode, country — each repeated for
8
+ * (name, line1, line2, city, region, postalCode, country, each repeated for
9
9
  * billingAddress and shippingAddress), the two window keys, and
10
- * notifyChannels — see `@pellux/goodvibes-sdk/platform/config`). Every one of
10
+ * notifyChannels, see `@pellux/goodvibes-sdk/platform/config`). Every one of
11
11
  * those keys reads and writes through the ordinary CONFIG_SCHEMA-driven path
12
12
  * in settings-modal-data.ts's buildSettingGroups, exactly like `relay.*` or
13
- * any other real SDK domain — no synthetic entry or dedicated store is needed
13
+ * any other real SDK domain, no synthetic entry or dedicated store is needed
14
14
  * for them, and this module builds none. (An earlier round of this module
15
15
  * modeled billing/shipping address as two flat TUI-local strings; the SDK's
16
16
  * own structured per-field keys superseded that the moment they shipped, so
@@ -25,39 +25,39 @@
25
25
  * SDK does not yet expose an equivalent config-level path for a single
26
26
  * implicit card the way this app's `/payments card` flow models it, so these
27
27
  * four fields are synthetic sub-keys under the SDK's real `payments`
28
- * section — the same established pattern this codebase already uses for
28
+ * section, the same established pattern this codebase already uses for
29
29
  * `behavior.notifyAfterSeconds`, `storage.codeIndexEnabled`, etc.: a key one
30
30
  * level under an EXISTING section that CONFIG_SCHEMA has no scalar entry for.
31
31
  *
32
32
  * That one-level-under-an-existing-section shape matters mechanically: the
33
33
  * real ConfigManager's dotted-path resolver only throws "Invalid config path"
34
34
  * when an INTERMEDIATE segment is missing (e.g. `payments.card.number`, where
35
- * `card` is not itself a section) — it does not throw for a final leaf that
35
+ * `card` is not itself a section), it does not throw for a final leaf that
36
36
  * the schema has not declared (`payments.cardNumber`), the same tolerance
37
37
  * `storage.codeIndexEnabled` relies on under `storage`. So these four keys are named
38
38
  * FLAT (`payments.cardNumber`, not `payments.card.number`) specifically so
39
- * `ConfigManager.get/setDynamic` accepts them — verified against the real
39
+ * `ConfigManager.get/setDynamic` accepts them, verified against the real
40
40
  * ConfigManager (not the fake store this module used before this round): a
41
41
  * flat sub-key persists to the real daemon-owned settings file precisely
42
42
  * because `payments.` is a `DAEMON_OWNED_CONFIG_PREFIXES` entry, which is
43
43
  * exactly what makes the daemon (and every other surface) able to see it
44
- * after this TUI closes — the thing the local JSON store this module used to
44
+ * after this TUI closes, the thing the local JSON store this module used to
45
45
  * use never gave them.
46
46
  *
47
47
  * All four keys are secret-tier (see config/secret-config.ts's
48
48
  * SECRET_CONFIG_KEYS). Primary entry for those is the concealed-input flow in
49
49
  * commands/payment-card-intake.ts, itself gated on the SDK's
50
50
  * `mayOfferCardEntryFlow` (card details may only be typed at a local
51
- * terminal or the webui, never over a remote messaging surface — see that
51
+ * terminal or the webui, never over a remote messaging surface, see that
52
52
  * file's header); they are also reachable as ordinary secret-backed settings
53
- * rows here, which is what makes them masked mid-edit — see
53
+ * rows here, which is what makes them masked mid-edit, see
54
54
  * renderer/settings-modal.ts's currentSettingValue().
55
55
  *
56
- * cvvHandling — real now, not built here — selects whether the CVV is stored
56
+ * cvvHandling, real now, not built here, selects whether the CVV is stored
57
57
  * (the default, per the 2026-07-27 payment-capability ruling) or requested at
58
58
  * purchase time; see `CVV_PROMPT_TRADEOFF_WARNING`, imported directly from
59
59
  * `@pellux/goodvibes-sdk/platform/payments` by every caller that needs it
60
- * (renderer/settings-modal.ts, settings-modal.ts) — no local copy lives here
60
+ * (renderer/settings-modal.ts, settings-modal.ts), no local copy lives here
61
61
  * or anywhere else in this app.
62
62
  */
63
63
 
@@ -65,7 +65,7 @@ import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
65
65
  import type { ConfigKey } from '@pellux/goodvibes-sdk/platform/config';
66
66
  import type { SettingEntry } from './settings-modal-types.ts';
67
67
 
68
- /** Real ConfigManager's read surface — these four keys are defensive reads (see header comment). */
68
+ /** Real ConfigManager's read surface, these four keys are defensive reads (see header comment). */
69
69
  export type PaymentsConfigReader = Pick<ConfigManager, 'get'>;
70
70
 
71
71
  export const PAYMENTS_CARD_NUMBER_CONFIG_KEY = 'payments.cardNumber' as ConfigKey;
@@ -73,14 +73,14 @@ export const PAYMENTS_CARD_EXPIRY_CONFIG_KEY = 'payments.cardExpiry' as ConfigKe
73
73
  export const PAYMENTS_CARD_CVV_CONFIG_KEY = 'payments.cardCvv' as ConfigKey;
74
74
  export const PAYMENTS_CARD_CARDHOLDER_NAME_CONFIG_KEY = 'payments.cardholderName' as ConfigKey;
75
75
 
76
- /** The real SDK schema key for the CVV-handling selector — no longer synthetic. */
76
+ /** The real SDK schema key for the CVV-handling selector, no longer synthetic. */
77
77
  export const PAYMENTS_CVV_HANDLING_CONFIG_KEY = 'payments.cvvHandling' as ConfigKey;
78
78
 
79
79
  function readStringField(configManager: PaymentsConfigReader, key: ConfigKey): string {
80
80
  // Defensive try/catch, same rationale as worktree-setup-config.ts's
81
81
  // readWorktreeSetupList and this codebase's other one-level-under-a-real-
82
82
  // section synthetic reads (behavior.notifyAfterSeconds, storage.codeIndexEnabled): the real
83
- // ConfigManager never throws for these particular keys (verified — see
83
+ // ConfigManager never throws for these particular keys (verified, see
84
84
  // header comment), but degrading to empty rather than crashing the whole
85
85
  // settings modal is the same posture every synthetic setting here takes
86
86
  // toward an unexpected value.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * ProfilePickerModal — state management for the /profiles picker modal.
2
+ * ProfilePickerModal, state management for the /profiles picker modal.
3
3
  *
4
4
  * Lists profiles from ProfileManager.list(), tracks selected index,
5
5
  * and handles load/delete/save actions.
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Provider key intake — capture a provider's API key at the moment the user
2
+ * Provider key intake, capture a provider's API key at the moment the user
3
3
  * selects an unconfigured provider or model, store it through the secrets
4
4
  * manager (never env-only, never cleartext into config or provider JSON), let
5
5
  * the provider re-register live, then complete the user's original selection.
6
6
  *
7
7
  * The decision of whether a key is needed is read from the provider's own
8
- * registration-time auth state (describeAuthState / isConfigured) — never a
9
- * hardcoded vendor list — so this works for any provider the registry knows
8
+ * registration-time auth state (describeAuthState / isConfigured), never a
9
+ * hardcoded vendor list, so this works for any provider the registry knows
10
10
  * accepts a key. The secrets-store key name is the provider's declared auth env
11
11
  * var; it is used only as the storage key and is never shown to the user.
12
12
  */
@@ -48,7 +48,7 @@ export function decideProviderKeyIntake(provider: LLMProvider | undefined): Prov
48
48
  return { needsKey: false, alreadyConfigured: configured };
49
49
  }
50
50
 
51
- /** Human-facing name for a provider — plain, vendor-neutral, never an env var. */
51
+ /** Human-facing name for a provider, plain, vendor-neutral, never an env var. */
52
52
  export function providerIntakeLabel(providerId: string): string {
53
53
  return `the ${providerId} provider`;
54
54
  }
@@ -57,7 +57,7 @@ export function providerIntakeLabel(providerId: string): string {
57
57
  export interface ProviderKeyIntakeDeps {
58
58
  /** The provider instance whose registration-time auth state drives the decision. */
59
59
  readonly provider: LLMProvider | undefined;
60
- /** Canonical secret store — the same path /secrets set writes through. */
60
+ /** Canonical secret store, the same path /secrets set writes through. */
61
61
  readonly secretsManager?: {
62
62
  set(key: string, value: string, options?: { scope?: SecretScope; medium?: 'secure' | 'plaintext' }): Promise<void>;
63
63
  } | undefined;
@@ -72,8 +72,8 @@ export interface ProviderKeyIntakeDeps {
72
72
  /**
73
73
  * If the selected provider needs a key, open the concealed prompt, store the
74
74
  * pasted value through the secrets manager, re-register the provider live, then
75
- * run `proceed` (the user's original selection). If no key is needed — or the
76
- * concealed surface is unavailable — `proceed` runs immediately. `proceed`
75
+ * run `proceed` (the user's original selection). If no key is needed, or the
76
+ * concealed surface is unavailable, `proceed` runs immediately. `proceed`
77
77
  * always runs exactly once, including when the user skips (empty/Escape), so a
78
78
  * selection is never stranded.
79
79
  */
@@ -89,7 +89,7 @@ export function runProviderKeyIntake(
89
89
  }
90
90
  const { secretsManager, beginConcealedInput } = deps;
91
91
  if (!secretsManager || !beginConcealedInput) {
92
- // No canonical store or no concealed surface here — keep the selection
92
+ // No canonical store or no concealed surface here, keep the selection
93
93
  // rather than blocking it; the user can add the key via /secrets set later.
94
94
  proceed();
95
95
  return;
@@ -114,7 +114,7 @@ export function runProviderKeyIntake(
114
114
  void (async () => {
115
115
  try {
116
116
  // Daemon scope, not user scope. The DAEMON is the process that runs
117
- // the model — it answers Telegram, ntfy, mail and every scheduled
117
+ // the model, it answers Telegram, ntfy, mail and every scheduled
118
118
  // run with this TUI closed. A model key filed in this surface's own
119
119
  // tier is readable only while the TUI is open, so the daemon has no
120
120
  // provider to call and cannot answer at all. Daemon tier is the one
@@ -1,9 +1,9 @@
1
1
  /**
2
- * relay-settings-descriptions.ts — appends the relay threat-model one-liner to
2
+ * relay-settings-descriptions.ts, appends the relay threat-model one-liner to
3
3
  * the `relay.*` CONFIG_SCHEMA descriptions shown in /config and the settings
4
4
  * modal.
5
5
  *
6
- * `relay.*` is a real SDK CONFIG_SCHEMA domain (schema-domain-runtime.ts) —
6
+ * `relay.*` is a real SDK CONFIG_SCHEMA domain (schema-domain-runtime.ts),
7
7
  * the settings-modal-data.ts CONFIG_SCHEMA loop already surfaces it once
8
8
  * `relay` is listed in SETTINGS_CATEGORIES (see settings-modal-types.ts). The
9
9
  * SDK's own descriptions explain WHAT each key does but not the trust
@@ -18,7 +18,7 @@ import type { SettingEntry, SettingsCategory } from './settings-modal-types.ts';
18
18
 
19
19
  /** The threat-model note every relay.* setting description gets appended with. */
20
20
  export const RELAY_THREAT_MODEL_NOTE =
21
- 'The relay operator sees only ciphertext and connection metadata — it cannot read message contents. Self-host your own relay for full control.';
21
+ 'The relay operator sees only ciphertext and connection metadata; it cannot read message contents. Self-host your own relay for full control.';
22
22
 
23
23
  /** Append the threat-model note to every relay.* entry's description, in place. */
24
24
  export function enrichRelaySettingDescriptions(groups: Map<SettingsCategory, SettingEntry[]>): void {
@@ -1,29 +1,29 @@
1
1
  /**
2
- * sandbox-exec-config.ts — TUI-local synthetic settings entries for
2
+ * sandbox-exec-config.ts, TUI-local synthetic settings entries for
3
3
  * sandbox.egressAllowlist / sandbox.workspaceWritable.
4
4
  *
5
5
  * The SDK's per-command exec sandbox (bubblewrap on Linux, gated by the
6
6
  * graduation-tracked `exec-sandbox` feature flag) reads its full configuration
7
7
  * straight off `configManager.getCategory('sandbox')` inside
8
- * `registerAllTools` (platform/tools/index.ts) — `sandbox.enabled`,
8
+ * `registerAllTools` (platform/tools/index.ts), `sandbox.enabled`,
9
9
  * `sandbox.egressAllowlist`, `sandbox.workspaceWritable`. `sandbox.enabled` is
10
10
  * already a real CONFIG_SCHEMA key (with its own honest "requires bubblewrap
11
11
  * on Linux, reports unavailable elsewhere" description) and needs no synthetic
12
- * entry — the CONFIG_SCHEMA loop in settings-modal-data.ts already surfaces it.
12
+ * entry, the CONFIG_SCHEMA loop in settings-modal-data.ts already surfaces it.
13
13
  * `egressAllowlist`/`workspaceWritable` are NOT in CONFIG_SCHEMA, so this file
14
14
  * mirrors worktree-setup-config.ts's synthetic-entry pattern for them.
15
15
  *
16
16
  * UNLIKE worktree.setup.* / learning.consolidation.*, no defensive try/catch is
17
17
  * needed here: DEFAULT_CONFIG.sandbox already carries both fields (as empty
18
18
  * arrays), so ConfigManager.resolvePath finds the `sandbox` section on a plain
19
- * get()/set() without throwing — only a missing SECTION throws, and `sandbox`
19
+ * get()/set() without throwing, only a missing SECTION throws, and `sandbox`
20
20
  * has existed since before this repack (it backs the older VM/REPL isolation
21
21
  * settings). Writing through these entries takes effect for real: the exec
22
22
  * sandbox reads the same `sandbox` config category at tool-registration time.
23
23
  *
24
24
  * Both keys hold a JSON array of strings on disk. The settings modal's inline
25
- * editor is a single-line text field, so — matching worktree.setup.* and
26
- * controlPlane.cors.allowedOrigins — they are displayed and edited as a
25
+ * editor is a single-line text field, so, matching worktree.setup.* and
26
+ * controlPlane.cors.allowedOrigins, they are displayed and edited as a
27
27
  * comma-separated list and parsed back into an array on commit (see
28
28
  * isSandboxExecListConfigKey's use in settings-modal.ts#commitEdit).
29
29
  */
@@ -50,7 +50,7 @@ export function readSandboxExecList(configManager: Pick<ConfigManager, 'get'>, k
50
50
  return raw.filter((entry): entry is string => typeof entry === 'string' && entry.length > 0);
51
51
  }
52
52
 
53
- /** Parse a comma-separated edit-buffer submission back into a string array (trimmed, empties dropped). Shared with worktree.setup.* — same convention. */
53
+ /** Parse a comma-separated edit-buffer submission back into a string array (trimmed, empties dropped). Shared with worktree.setup.*, same convention. */
54
54
  export function parseSandboxExecListInput(text: string): string[] {
55
55
  return text.split(',').map((part) => part.trim()).filter((part) => part.length > 0);
56
56
  }
@@ -59,14 +59,14 @@ export const SANDBOX_EGRESS_ALLOWLIST_SYNTHETIC_SETTING: ConfigSetting = {
59
59
  key: SANDBOX_EGRESS_ALLOWLIST_CONFIG_KEY,
60
60
  type: 'string',
61
61
  default: [],
62
- description: 'Comma-separated command base names (or "*" for all) whose network access is re-enabled inside the per-command exec sandbox boundary, as a named escalation the approval flow surfaces ("wants network"). Empty = the sandbox disables network for every command. Only takes effect when sandbox.enabled is on, the exec-sandbox setting is on, and bubblewrap is available (Linux only — reports unavailable elsewhere).',
62
+ description: 'Comma-separated command base names (or "*" for all) whose network access is re-enabled inside the per-command exec sandbox boundary, as a named escalation the approval flow surfaces ("wants network"). Empty = the sandbox disables network for every command. Only takes effect when sandbox.enabled is on, the exec-sandbox setting is on, and bubblewrap is available (Linux only; reports unavailable elsewhere).',
63
63
  };
64
64
 
65
65
  export const SANDBOX_WORKSPACE_WRITABLE_SYNTHETIC_SETTING: ConfigSetting = {
66
66
  key: SANDBOX_WORKSPACE_WRITABLE_CONFIG_KEY,
67
67
  type: 'string',
68
68
  default: [],
69
- description: 'Comma-separated absolute paths outside the workspace bound writable into the per-command exec sandbox boundary, as a named escalation the approval flow surfaces ("wants path outside workspace"). Empty = only the workspace (and an isolated /tmp) is writable. Only takes effect when sandbox.enabled is on, the exec-sandbox setting is on, and bubblewrap is available (Linux only — reports unavailable elsewhere).',
69
+ description: 'Comma-separated absolute paths outside the workspace bound writable into the per-command exec sandbox boundary, as a named escalation the approval flow surfaces ("wants path outside workspace"). Empty = only the workspace (and an isolated /tmp) is writable. Only takes effect when sandbox.enabled is on, the exec-sandbox setting is on, and bubblewrap is available (Linux only; reports unavailable elsewhere).',
70
70
  };
71
71
 
72
72
  function buildSandboxExecListEntry(configManager: Pick<ConfigManager, 'get'>, setting: ConfigSetting): SettingEntry {