@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
@@ -181,10 +181,10 @@ export class InputHandler implements InputHandlerLike {
181
181
  public nextPasteId = 1;
182
182
  public lastCtrlCTime = 0;
183
183
  /** Pending "hide the exit notice" timer from the last empty-prompt Ctrl+C
184
- * press, if any — cleared before every subsequent press decides its own
184
+ * press, if any, cleared before every subsequent press decides its own
185
185
  * outcome (see handleCtrlC in handler-content-actions.ts). */
186
186
  public lastCtrlCTimeoutId: ReturnType<typeof setTimeout> | null = null;
187
- /** Long-lived feed context — reused across every feed() call to avoid per-keystroke allocation. */
187
+ /** Long-lived feed context, reused across every feed() call to avoid per-keystroke allocation. */
188
188
  public feedContext!: import('./handler-feed.ts').InputFeedContext;
189
189
  public commandRegistry: CommandRegistry | null = null;
190
190
  public commandContext: CommandContext | undefined = undefined;
@@ -197,7 +197,7 @@ export class InputHandler implements InputHandlerLike {
197
197
  public blockActionsMenu = new BlockActionsMenu();
198
198
  public settingsModal = new SettingsModal();
199
199
  public configModal = new ConfigModal();
200
- /** item 5 — paste-flood guard state, mutated in place across tokens (never reallocated). */
200
+ /** item 5, paste-flood guard state, mutated in place across tokens (never reallocated). */
201
201
  private panelBurstGuard: PanelBurstGuardState = { timestamps: [], suspended: false, hintShown: false };
202
202
  public mcpWorkspace = new McpWorkspace();
203
203
  public onboardingWizard = new OnboardingWizardController();
@@ -225,7 +225,7 @@ export class InputHandler implements InputHandlerLike {
225
225
  public conversationManager: ConversationManager | null = null;
226
226
  public selectionCallback: SelectionModalCallback | null = null;
227
227
  public syncFeedSelectionCallback: ((callback: SelectionModalCallback | null) => void) | null = null;
228
- /** FIFO queue for overlapping openSelection() calls — see selection-modal-queue.ts. */
228
+ /** FIFO queue for overlapping openSelection() calls, see selection-modal-queue.ts. */
229
229
  private selectionQueue!: SelectionModalQueue;
230
230
  /** Time of last [COPIED] block feedback, for brief display. */
231
231
  public lastBlockCopyTime = 0;
@@ -283,7 +283,7 @@ export class InputHandler implements InputHandlerLike {
283
283
  uiServices.providers.providerRegistry,
284
284
  );
285
285
  // retirement: ProcessModal/LiveTailModal/AgentDetailModal were removed
286
- // — F2 now opens the Fleet panel, which subsumes the live process tree.
286
+ //, F2 now opens the Fleet panel, which subsumes the live process tree.
287
287
  this.bookmarkModal = new BookmarkModal(uiServices.shell.bookmarkManager);
288
288
  this.sessionPickerModal = new SessionPickerModal(uiServices.sessions.sessionManager, uiServices.sessions.sessionBroker, getSharedHostedSessionRoster(), () => this.requestRender()); // third source: the daemon-hosted roster
289
289
  this.profilePickerModal = new ProfilePickerModal(uiServices.shell.profileManager);
@@ -292,7 +292,7 @@ export class InputHandler implements InputHandlerLike {
292
292
  }
293
293
 
294
294
  /**
295
- * initFeedContext — Build the long-lived InputFeedContext once via factory.
295
+ * initFeedContext, Build the long-lived InputFeedContext once via factory.
296
296
  * See feed-context-factory.ts for full field documentation.
297
297
  */
298
298
  public initFeedContext(): void {
@@ -411,7 +411,7 @@ export class InputHandler implements InputHandlerLike {
411
411
  * openSelection - Open the generic selection modal with a callback.
412
412
  * The callback receives SelectionResult on selection, or null on cancel/escape.
413
413
  * A second call while one is already showing queues FIFO instead of
414
- * overwriting it — see selection-modal-queue.ts.
414
+ * overwriting it, see selection-modal-queue.ts.
415
415
  */
416
416
  public openSelection(
417
417
  title: string,
@@ -443,7 +443,7 @@ export class InputHandler implements InputHandlerLike {
443
443
  public handleBlockSave(): void { handleBlockSaveForHandler(this); }
444
444
  public executeBlockAction(actionId: string): void { executeBlockActionForHandler(this, actionId); }
445
445
  /** The block the user is actually looking at: the viewport's bottom-most
446
- * visible line (see getViewportBottomLine's doc) — not the raw scrollTop,
446
+ * visible line (see getViewportBottomLine's doc), not the raw scrollTop,
447
447
  * which is off-screen-above once the transcript exceeds one page. Every
448
448
  * anchor-based block action (Ctrl+Y/B/S/A, Tab, the block-actions menu)
449
449
  * resolves its target through this, so they all agree on what "nearest
@@ -585,7 +585,7 @@ export class InputHandler implements InputHandlerLike {
585
585
  */
586
586
  public clipboardSource: ClipboardPasteSource = { pasteImageFromClipboard, pasteFromClipboard };
587
587
 
588
- /** Content width for wrapping — set by main.ts via setContentWidth(). */
588
+ /** Content width for wrapping, set by main.ts via setContentWidth(). */
589
589
  public contentWidth = 76;
590
590
  public panelMouseLayout: PanelMouseLayout | null = null;
591
591
 
@@ -5,7 +5,7 @@ import { logger } from '@pellux/goodvibes-sdk/platform/utils';
5
5
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
6
6
 
7
7
  /**
8
- * InputHistory — Persisted command history with arrow-key navigation.
8
+ * InputHistory, Persisted command history with arrow-key navigation.
9
9
  *
10
10
  * Navigation model:
11
11
  * position = -1 : not browsing (at the live draft)
@@ -1,5 +1,5 @@
1
1
  /**
2
- * KeybindingsManager — loads and merges keyboard shortcut configuration.
2
+ * KeybindingsManager, loads and merges keyboard shortcut configuration.
3
3
  *
4
4
  * Default bindings are hardcoded here. Users can override any binding by
5
5
  * creating ~/.goodvibes/tui/keybindings.json.
@@ -119,7 +119,7 @@ export const ACTION_DESCRIPTIONS: Record<KeyAction, string> = {
119
119
  'toggle-keep-awake': 'Toggle keep-awake (the "sleep disabled" chip)',
120
120
  'toggle-memory-provenance': 'List/hide the memories a turn used (provenance chip drill-in)',
121
121
  // Named for what it actually does. A terminal delivers key EVENTS, not held-key
122
- // state — there is no release event to watch — so this is two discrete presses,
122
+ // state, there is no release event to watch, so this is two discrete presses,
123
123
  // and the description says so instead of implying a hold that cannot exist.
124
124
  'voice-input': 'Voice input: press to start recording, press again to stop and transcribe into the composer',
125
125
  };
@@ -138,7 +138,7 @@ export const DEFAULT_KEYBINDINGS: Record<KeyAction, KeyCombo[]> = {
138
138
  'panel-close-all': [{ key: 'x', ctrl: true, shift: true }],
139
139
  // Ctrl+] stays the primary next-tab chord; Ctrl+PageDown is added as a second
140
140
  // binding. Ctrl+[ was REMOVED as prev-tab: it is byte 0x1B (ESC), so the
141
- // legacy tokenizer path emits it as 'escape' — the binding never matched on
141
+ // legacy tokenizer path emits it as 'escape', the binding never matched on
142
142
  // most terminals AND the key fired Escape (a split-brain chord). Ctrl+PageUp
143
143
  // replaces it: Ctrl+PageUp/PageDown tokenize consistently (\x1b[5;5~ /
144
144
  // \x1b[6;5~ -> pageup/pagedown ctrl:true) in both the legacy and CSI-u paths.
@@ -158,7 +158,7 @@ export const DEFAULT_KEYBINDINGS: Record<KeyAction, KeyCombo[]> = {
158
158
  'panel-tab-8': [{ key: '8', alt: true }],
159
159
  'panel-tab-9': [{ key: '9', alt: true }],
160
160
  // Ctrl+O: TOGGLE the Fleet panel (open+focus / bring-to-front+focus / close
161
- // — see toggleFleetPanel in handler-shortcuts.ts). The former Ops
161
+ //, see toggleFleetPanel in handler-shortcuts.ts). The former Ops
162
162
  // Control panel was retired to an 'ops-control' -> 'fleet' alias; the
163
163
  // binding is KEPT (repointed, not removed) so the Ctrl+O muscle memory still
164
164
  // lands somewhere useful. Routed globally in handleGlobalShortcutToken.
@@ -185,7 +185,7 @@ export const DEFAULT_KEYBINDINGS: Record<KeyAction, KeyCombo[]> = {
185
185
  'undo': [{ key: 'z', ctrl: true }],
186
186
  'redo': [{ key: 'z', ctrl: true, shift: true }],
187
187
  'paste': [{ key: 'v', ctrl: true }],
188
- // Word navigation (Alt+B / Alt+F — emacs readline standard)
188
+ // Word navigation (Alt+B / Alt+F, emacs readline standard)
189
189
  'word-back': [{ key: 'b', alt: true }],
190
190
  'word-forward': [{ key: 'f', alt: true }],
191
191
  // Kill-ring operations.
@@ -214,7 +214,7 @@ export const DEFAULT_KEYBINDINGS: Record<KeyAction, KeyCombo[]> = {
214
214
  'toggle-memory-provenance': [{ key: 'm', alt: true }],
215
215
  // Alt+V: start/stop voice input. Alt+V is unused by any other default (Ctrl+V
216
216
  // is paste and stays paste). Two presses rather than a hold: see the action's
217
- // description — a terminal has no key-release event to hold against.
217
+ // description, a terminal has no key-release event to hold against.
218
218
  'voice-input': [{ key: 'v', alt: true }],
219
219
  };
220
220
 
@@ -243,7 +243,7 @@ function resolveKeybindingsPath(options?: KeybindingsManagerOptions): string {
243
243
  }
244
244
 
245
245
  /**
246
- * KeybindingsManager — owns the resolved keybinding table.
246
+ * KeybindingsManager, owns the resolved keybinding table.
247
247
  *
248
248
  * Call loadFromDisk() once at startup (in main.ts) to merge user config.
249
249
  * Then use matches() anywhere a key token is being evaluated.
@@ -304,7 +304,7 @@ export class KeybindingsManager {
304
304
  }
305
305
 
306
306
  /**
307
- * buildLookupMap — Rebuild the inverted lookup map from the current bindings table.
307
+ * buildLookupMap, Rebuild the inverted lookup map from the current bindings table.
308
308
  * Called after constructor init and after loadFromDisk().
309
309
  * Map key format: "logicalName:ctrl:shift:alt" (booleans as 0/1).
310
310
  * Last writer wins for duplicate combos (deterministic: iterate actions in order).
@@ -320,7 +320,7 @@ export class KeybindingsManager {
320
320
  }
321
321
 
322
322
  /**
323
- * lookup — O(1) keybinding lookup by token.
323
+ * lookup, O(1) keybinding lookup by token.
324
324
  * Returns the matching KeyAction, or null if no binding matches.
325
325
  */
326
326
  lookup(token: { logicalName?: string; ctrl?: boolean; shift?: boolean; alt?: boolean; meta?: boolean }): KeyAction | null {
@@ -342,7 +342,7 @@ export class KeybindingsManager {
342
342
  }
343
343
 
344
344
  /**
345
- * matches — Check whether a keyboard token matches the given action.
345
+ * matches, Check whether a keyboard token matches the given action.
346
346
  *
347
347
  * @param action The action to test.
348
348
  * @param token The parsed keyboard token from InputTokenizer.
@@ -370,7 +370,7 @@ export class KeybindingsManager {
370
370
  }
371
371
 
372
372
  /**
373
- * getAll — Return the full resolved binding table for display purposes.
373
+ * getAll, Return the full resolved binding table for display purposes.
374
374
  */
375
375
  getAll(): Array<{ action: KeyAction; combos: KeyCombo[]; description: string }> {
376
376
  return (Object.keys(this.bindings) as KeyAction[]).map((action) => ({
@@ -381,7 +381,7 @@ export class KeybindingsManager {
381
381
  }
382
382
 
383
383
  /**
384
- * getComboLabel — Return a human-readable label for the first combo of an action.
384
+ * getComboLabel, Return a human-readable label for the first combo of an action.
385
385
  * Example: { key: 'f', ctrl: true } → "Ctrl+F"
386
386
  */
387
387
  getComboLabel(action: KeyAction): string {
@@ -391,7 +391,7 @@ export class KeybindingsManager {
391
391
  }
392
392
 
393
393
  /**
394
- * formatCombo — Format a KeyCombo as a human-readable string.
394
+ * formatCombo, Format a KeyCombo as a human-readable string.
395
395
  */
396
396
  formatCombo(combo: KeyCombo): string {
397
397
  const parts: string[] = [];
@@ -1,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // KillRing — emacs/readline-compatible kill ring implementation.
2
+ // KillRing, emacs/readline-compatible kill ring implementation.
3
3
  //
4
4
  // The ring holds up to MAX_ENTRIES text strings. Kill commands push to the
5
5
  // head. Yank pastes from the current yank pointer (default: head). Yank-pop
@@ -13,7 +13,7 @@
13
13
  export const KILL_RING_MAX = 32;
14
14
 
15
15
  /**
16
- * KillRing — bounded circular ring of killed text segments.
16
+ * KillRing, bounded circular ring of killed text segments.
17
17
  *
18
18
  * All public mutation methods are pure-functional helpers at module level;
19
19
  * this class owns the mutable state so the handler can hold a single ref.
@@ -41,7 +41,7 @@ export class KillRing {
41
41
  }
42
42
 
43
43
  /**
44
- * Yank — return the entry at the current yank pointer.
44
+ * Yank, return the entry at the current yank pointer.
45
45
  * Returns '' if the ring is empty.
46
46
  * Sets lastActionWasYank so a subsequent yank-pop is valid.
47
47
  */
@@ -53,7 +53,7 @@ export class KillRing {
53
53
  }
54
54
 
55
55
  /**
56
- * YankPop — advance the yank pointer by one step (wrapping) and return the
56
+ * YankPop, advance the yank pointer by one step (wrapping) and return the
57
57
  * new entry. Only valid after a yank; if the ring has <=1 entry, returns the
58
58
  * same string. Returns '' if the ring is empty.
59
59
  */
@@ -85,7 +85,7 @@ export class KillRing {
85
85
  // ---------------------------------------------------------------------------
86
86
 
87
87
  /**
88
- * isWordChar — true when the character is a "word" character.
88
+ * isWordChar, true when the character is a "word" character.
89
89
  * Word = letter (Unicode), digit, or underscore. This is the emacs/readline
90
90
  * word boundary definition used for Alt+B, Alt+F, Ctrl+W, Alt+D.
91
91
  */
@@ -94,7 +94,7 @@ function isWordChar(ch: string): boolean {
94
94
  }
95
95
 
96
96
  /**
97
- * wordBoundaryBack — find the start of the word that the cursor is in, or the
97
+ * wordBoundaryBack, find the start of the word that the cursor is in, or the
98
98
  * start of the previous word if the cursor is at a non-word character.
99
99
  *
100
100
  * Emacs Alt+B semantics:
@@ -106,15 +106,13 @@ function isWordChar(ch: string): boolean {
106
106
  */
107
107
  export function wordBoundaryBack(text: string, pos: number): number {
108
108
  let p = pos;
109
- // Skip non-word chars first (move past punctuation/spaces)
110
109
  while (p > 0 && !isWordChar(text[p - 1]!)) p--;
111
- // Then skip word chars (the word body)
112
110
  while (p > 0 && isWordChar(text[p - 1]!)) p--;
113
111
  return p;
114
112
  }
115
113
 
116
114
  /**
117
- * wordBoundaryForward — find the position just past the end of the next word.
115
+ * wordBoundaryForward, find the position just past the end of the next word.
118
116
  *
119
117
  * Emacs Alt+F semantics:
120
118
  * - Skip non-word chars forward
@@ -126,9 +124,7 @@ export function wordBoundaryBack(text: string, pos: number): number {
126
124
  export function wordBoundaryForward(text: string, pos: number): number {
127
125
  let p = pos;
128
126
  const len = text.length;
129
- // Skip non-word chars first
130
127
  while (p < len && !isWordChar(text[p]!)) p++;
131
- // Then skip word chars
132
128
  while (p < len && isWordChar(text[p]!)) p++;
133
129
  return p;
134
130
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * model-picker-filter — pure filtering, sorting, and cache-key helpers for ModelPickerModal.
2
+ * model-picker-filter, pure filtering, sorting, and cache-key helpers for ModelPickerModal.
3
3
  *
4
4
  * All functions are stateless: they receive inputs and return results without
5
5
  * side-effects. The class in model-picker.ts uses these as delegates.
@@ -139,7 +139,7 @@ export function buildFilteredModels(
139
139
  result = result.filter(m => m.capabilities?.multimodal === true);
140
140
  }
141
141
 
142
- // Query filter — fuzzy: every space-separated word must appear somewhere
142
+ // Query filter, fuzzy: every space-separated word must appear somewhere
143
143
  if (query.trim().length > 0) {
144
144
  const words = query.toLowerCase().split(/\s+/).filter(Boolean);
145
145
  result = result.filter(m => {
@@ -168,7 +168,7 @@ export function buildFilteredModels(
168
168
  scoreB = bB ? compositeScore(bB.benchmarks) : null;
169
169
  }
170
170
  } else {
171
- // swe/gpqa sort — individual scores not available for synthetic models
171
+ // swe/gpqa sort, individual scores not available for synthetic models
172
172
  const bA = a.provider === 'synthetic' ? null : (benchmarkStore.getBenchmarks(a.id) ?? benchmarkStore.getBenchmarks(a.displayName));
173
173
  const bB = b.provider === 'synthetic' ? null : (benchmarkStore.getBenchmarks(b.id) ?? benchmarkStore.getBenchmarks(b.displayName));
174
174
  if (benchmarkSort === 'swe') {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * model-picker-items — pure item-building helpers for ModelPickerModal.
2
+ * model-picker-items, pure item-building helpers for ModelPickerModal.
3
3
  *
4
4
  * Converts filtered ModelDefinition/provider arrays into PickerItem lists
5
5
  * with group headers, quality-tier badges, pin markers, and configured-via flags.
@@ -55,7 +55,7 @@ export function getModelGroupKey(
55
55
  }
56
56
 
57
57
  // ---------------------------------------------------------------------------
58
- // toModelItem — single model -> PickerItem
58
+ // toModelItem, single model -> PickerItem
59
59
  // ---------------------------------------------------------------------------
60
60
 
61
61
  export function toModelItem(
@@ -94,7 +94,7 @@ export function toModelItem(
94
94
  }
95
95
 
96
96
  // ---------------------------------------------------------------------------
97
- // buildModelItems — filtered models -> PickerItem[] with group headers
97
+ // buildModelItems, filtered models -> PickerItem[] with group headers
98
98
  // ---------------------------------------------------------------------------
99
99
 
100
100
  export function buildModelItems(
@@ -151,7 +151,7 @@ export function buildModelItems(
151
151
  }
152
152
 
153
153
  // ---------------------------------------------------------------------------
154
- // buildProviderItems — filtered providers -> PickerItem[] with group headers
154
+ // buildProviderItems, filtered providers -> PickerItem[] with group headers
155
155
  // ---------------------------------------------------------------------------
156
156
 
157
157
  export function buildProviderItems(
@@ -200,7 +200,7 @@ export function buildProviderItems(
200
200
  }
201
201
 
202
202
  // ---------------------------------------------------------------------------
203
- // buildEffortItems — effort levels -> PickerItem[]
203
+ // buildEffortItems, effort levels -> PickerItem[]
204
204
  // ---------------------------------------------------------------------------
205
205
 
206
206
  /**
@@ -9,7 +9,7 @@ export type PickerMode = 'model' | 'provider' | 'effort' | 'contextCap' | 'embed
9
9
  * 'tool' -> tools.llmProvider + tools.llmModel (+ tools.llmEnabled: true)
10
10
  * 'tts' -> tts.llmProvider + tts.llmModel
11
11
  * 'embeddings' -> provider.embeddingProvider, via MemoryEmbeddingProviderRegistry.setDefaultProvider()
12
- * (not an LLM route — no model concept, see ModelPickerTargetInfo.configuredNote)
12
+ * (not an LLM route, no model concept, see ModelPickerTargetInfo.configuredNote)
13
13
  */
14
14
  export type ModelPickerTarget = 'main' | 'helper' | 'tool' | 'tts' | 'embeddings';
15
15
 
@@ -25,7 +25,7 @@ export interface ModelPickerTargetInfo {
25
25
  readonly inherited: boolean;
26
26
  /**
27
27
  * Honest override for the "Current:" summary line. Used by the 'embeddings'
28
- * target (which has no model concept — only a provider id + dimensions +
28
+ * target (which has no model concept, only a provider id + dimensions +
29
29
  * configured state) so the renderer never prints a phantom "model:" value.
30
30
  * When set, this replaces the computed provider:model route text.
31
31
  */
@@ -100,7 +100,7 @@ export class ModelPickerModal {
100
100
  * spec carries a caveat. Null outside effort mode.
101
101
  */
102
102
  public effortPresentation: EffortPresentation | null = null;
103
- /** Entries for PickerMode 'embeddingProvider' — the 'embeddings' target's own tiny item list. */
103
+ /** Entries for PickerMode 'embeddingProvider', the 'embeddings' target's own tiny item list. */
104
104
  public embeddingProviders: EmbeddingProviderPickerEntry[] = [];
105
105
  /** Mode to restore when navigating the targets rail away from 'embeddings'. */
106
106
  private nonEmbeddingMode: PickerMode = 'model';
@@ -124,11 +124,11 @@ export class ModelPickerModal {
124
124
  public availableOnly = true;
125
125
  /** Set of provider names that have a configured key (used for availableOnly filter). */
126
126
  public configuredProviders: Set<string> = new Set();
127
- /** How each provider is configured — drives badge display in provider mode. */
127
+ /** How each provider is configured, drives badge display in provider mode. */
128
128
  public configuredViaMap: Map<string, 'env' | 'secrets' | 'subscription' | 'anonymous'> = new Map();
129
- /** IDs of pinned/favorite models — shown at top of list. */
129
+ /** IDs of pinned/favorite models, shown at top of list. */
130
130
  public pinnedIds: Set<string> = new Set();
131
- /** IDs of recently used models — shown after pinned, before the rest. */
131
+ /** IDs of recently used models, shown after pinned, before the rest. */
132
132
  public recentIds: string[] = [];
133
133
  /** Benchmark score sort order. */
134
134
  public benchmarkSort: BenchmarkSort = 'none';
@@ -274,13 +274,13 @@ export class ModelPickerModal {
274
274
  }
275
275
 
276
276
  /**
277
- * Open showing all models — entry point for /model.
277
+ * Open showing all models, entry point for /model.
278
278
  *
279
279
  * Search starts FOCUSED. A live tmux repro showed the actual
280
- * friction wasn't the filter itself (it already works — fuzzy multi-word
280
+ * friction wasn't the filter itself (it already works, fuzzy multi-word
281
281
  * substring over id/displayName/provider) but that with search unfocused by
282
282
  * default, typing a search term went character-by-character into single-key
283
- * shortcuts instead (g=group, c=capability, a=available-only, b=benchmark) —
283
+ * shortcuts instead (g=group, c=capability, a=available-only, b=benchmark),
284
284
  * e.g. typing "claude" silently cycled the capability filter (on 'c') and
285
285
  * toggled available-only off (on 'a') while the visible list never
286
286
  * filtered, with no error and no indication anything happened. Reaching
@@ -307,7 +307,7 @@ export class ModelPickerModal {
307
307
  this.scrollOffset = 0;
308
308
  }
309
309
 
310
- /** Open showing providers first — entry point for /provider. Search starts focused — see openAllModels(). */
310
+ /** Open showing providers first, entry point for /provider. Search starts focused, see openAllModels(). */
311
311
  openProviders(providers: string[], currentProvider: string): void {
312
312
  this.previousMode = null;
313
313
  this.providers = providers;
@@ -327,9 +327,9 @@ export class ModelPickerModal {
327
327
  }
328
328
 
329
329
  /**
330
- * Open the embedding-provider list — entry point for the 'embeddings' target.
330
+ * Open the embedding-provider list, entry point for the 'embeddings' target.
331
331
  * Deliberately NOT routed through openAllModels (ModelDefinition-shaped) or
332
- * openProviders (LLM-provider label resolution) — embedding providers are a
332
+ * openProviders (LLM-provider label resolution), embedding providers are a
333
333
  * flat {id, label, dimensions, configured} list with no model concept, and
334
334
  * reusing either existing opener would mislabel or drop unrecognized ids.
335
335
  */
@@ -356,7 +356,7 @@ export class ModelPickerModal {
356
356
  this.query = '';
357
357
  this.categoryFilter = 'all';
358
358
  this.capabilityFilter = 'none';
359
- // User explicitly chose this provider — disable availability filter so synthetic
359
+ // User explicitly chose this provider, disable availability filter so synthetic
360
360
  // models (which have no real API key) are not filtered out.
361
361
  this.availableOnly = false;
362
362
  this.selectedIndex = 0;
@@ -521,8 +521,8 @@ export class ModelPickerModal {
521
521
  * Used for inserting group headers in getItems().
522
522
  *
523
523
  * For synthetic provider models with groupBy 'provider', returns sub-group keys:
524
- * - 'Top Models' — benchmark composite score ≥ 0.65 (A-tier or S-tier)
525
- * - 'All Synthetic' — remaining synthetic models
524
+ * - 'Top Models' , benchmark composite score ≥ 0.65 (A-tier or S-tier)
525
+ * - 'All Synthetic', remaining synthetic models
526
526
  */
527
527
  getModelGroupKey(model: ModelDefinition): string {
528
528
  return getModelGroupKey(model, this.groupBy, this.providerRegistry, this.benchmarkStore);
@@ -555,7 +555,7 @@ export class ModelPickerModal {
555
555
  return result;
556
556
  }
557
557
  if (this.mode === 'embeddingProvider') {
558
- // Tiny list (typically 2-4 entries) — no caching infrastructure needed.
558
+ // Tiny list (typically 2-4 entries), no caching infrastructure needed.
559
559
  // Unconfigured providers are shown honestly (isConfigured: false), never hidden.
560
560
  return this.embeddingProviders.map((provider) => ({
561
561
  id: provider.id,
@@ -577,7 +577,7 @@ export class ModelPickerModal {
577
577
  }
578
578
 
579
579
  /**
580
- * Move selection up (stops at 0 — no wrap to avoid going off-screen).
580
+ * Move selection up (stops at 0, no wrap to avoid going off-screen).
581
581
  * Updates scrollOffset to keep selection visible.
582
582
  */
583
583
  moveUp(maxVisible = 20): void {
@@ -587,7 +587,7 @@ export class ModelPickerModal {
587
587
  this.selectedIndex--;
588
588
  this._scrollToSelection(maxVisible);
589
589
  }
590
- // At index 0 — stop. Do NOT wrap to count-1 (that puts selection off-screen).
590
+ // At index 0, stop. Do NOT wrap to count-1 (that puts selection off-screen).
591
591
  }
592
592
 
593
593
  /**
@@ -632,10 +632,10 @@ export class ModelPickerModal {
632
632
  */
633
633
  _scrollToSelection(maxVisible: number): void {
634
634
  if (this.selectedIndex < this.scrollOffset) {
635
- // Selection moved above viewport — scroll up
635
+ // Selection moved above viewport, scroll up
636
636
  this.scrollOffset = this.selectedIndex;
637
637
  } else if (this.selectedIndex >= this.scrollOffset + maxVisible) {
638
- // Selection moved below viewport — scroll down
638
+ // Selection moved below viewport, scroll down
639
639
  this.scrollOffset = this.selectedIndex - maxVisible + 1;
640
640
  }
641
641
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Every feature flag that is NOT already reached through a surface/server
5
5
  * capability selection (or the HITL experience step) is presented here as ONE
6
- * unit — its enable toggle plus a meaningful subset of its config sub-options —
6
+ * unit, its enable toggle plus a meaningful subset of its config sub-options,
7
7
  * grouped into thematic first-run steps (safety & sandboxing, memory & context,
8
8
  * telemetry & observability, automation & initiative, provider & runtime, and a
9
9
  * compact advanced-toggles step). Full sub-option depth lives in /settings; each
@@ -154,7 +154,7 @@ export const FEATURE_ONBOARDING_SECTIONS: readonly FeatureSection[] = [
154
154
  key: 'source',
155
155
  configKey: 'policy.bundleSource' as ConfigKey,
156
156
  label: 'Startup bundle source',
157
- hint: 'none (bundles supplied via commands) or file (load policy.bundlePath — set it in /settings).',
157
+ hint: 'none (bundles supplied via commands) or file (load policy.bundlePath: set it in /settings).',
158
158
  valueType: 'enum',
159
159
  options: ['none', 'file'],
160
160
  defaultValue: 'none',
@@ -231,7 +231,7 @@ export const FEATURE_ONBOARDING_SECTIONS: readonly FeatureSection[] = [
231
231
  {
232
232
  flagId: 'otel-remote-export',
233
233
  label: 'OTLP remote export',
234
- hint: 'Export spans over OTLP/HTTP JSON to a collector. Enabling this also turns on the OpenTelemetry foundation. Span export reads the OTEL_EXPORTER_OTLP_* environment variables; decision export reads telemetry.decisionOtlpEndpoint — this unit sets the latter.',
234
+ hint: 'Export spans over OTLP/HTTP JSON to a collector. Enabling this also turns on the OpenTelemetry foundation. Span export reads the OTEL_EXPORTER_OTLP_* environment variables; decision export reads telemetry.decisionOtlpEndpoint: this unit sets the latter.',
235
235
  requiresFlags: ['otel-foundation'],
236
236
  impliedConfig: [{ key: 'telemetry.decisionOtlpEnabled' as ConfigKey, value: true }],
237
237
  subOptions: [
@@ -284,7 +284,7 @@ export const FEATURE_ONBOARDING_SECTIONS: readonly FeatureSection[] = [
284
284
  {
285
285
  flagId: 'watcher-triggers',
286
286
  label: 'Trigger family',
287
- hint: 'Three unattended watcher kinds over one supervision spine: stream watchers that regex-filter and batch a long-lived command\'s output, model-free condition checks running a probe/extract/rule pipeline with no LLM in the loop, and one-shot on-exit triggers that fire exactly one payload when a launched command terminates. A firing trigger runs an agent turn or a pre-registered digest-pinned action grant — never a command composed at fire time. Off by default because a trigger supervises real processes with nobody watching; with it on and no triggers defined the supervisor idles and consumes nothing.',
287
+ hint: 'Three unattended watcher kinds over one supervision spine: stream watchers that regex-filter and batch a long-lived command\'s output, model-free condition checks running a probe/extract/rule pipeline with no LLM in the loop, and one-shot on-exit triggers that fire exactly one payload when a launched command terminates. A firing trigger runs an agent turn or a pre-registered digest-pinned action grant; never a command composed at fire time. Off by default because a trigger supervises real processes with nobody watching; with it on and no triggers defined the supervisor idles and consumes nothing.',
288
288
  note: 'Backoff ladder, strike breaker, retention bounds, batching and process caps are tuned through watchers.triggers.* in /settings.',
289
289
  impliedConfig: [{ key: 'watchers.triggers.enabled' as ConfigKey, value: true }],
290
290
  },
@@ -331,14 +331,14 @@ export const FEATURE_ONBOARDING_SECTIONS: readonly FeatureSection[] = [
331
331
  {
332
332
  flagId: 'paired-device-capabilities',
333
333
  label: 'Paired phone capabilities',
334
- hint: 'Turning this on grants access to nothing by itself — it lets the agent ASK to use a paired phone as a tool: either camera, its screen, its location, its clipboard, and a small set of device effects (notification, link, buzz). It rides the existing peer transport as a native contract, never an MCP server. Every capture and every effect asks the person holding the phone first, and answering one request grants nothing beyond it; choosing "always allow" is a separate, explicit choice you make later on that prompt, and it writes one durable, revocable grant for that one capability on that one phone, with an age limit and a count cap so nothing is granted forever.',
334
+ hint: 'Turning this on grants access to nothing by itself; it lets the agent ASK to use a paired phone as a tool: either camera, its screen, its location, its clipboard, and a small set of device effects (notification, link, buzz). It rides the existing peer transport as a native contract, never an MCP server. Every capture and every effect asks the person holding the phone first, and answering one request grants nothing beyond it; choosing "always allow" is a separate, explicit choice you make later on that prompt, and it writes one durable, revocable grant for that one capability on that one phone, with an age limit and a count cap so nothing is granted forever.',
335
335
  note: 'Captures are kept 24 hours by default and then deleted, and every housekeeping sweep records exactly what it removed and why. Retention, grant limits, clipboard and location posture are tuned through device.* in /settings.',
336
336
  subOptions: [
337
337
  {
338
338
  key: 'mode',
339
339
  configKey: 'device.capabilities.mode' as ConfigKey,
340
340
  label: 'Consent posture',
341
- hint: 'honor-grants (stock) asks the first time and every time after unless you chose "always allow" for that capability on that phone; ask-every-time prompts on every single request and never consults a durable grant — use it when someone else is holding the phone; off stops any capability request reaching any paired device.',
341
+ hint: 'honor-grants (stock) asks the first time and every time after unless you chose "always allow" for that capability on that phone; ask-every-time prompts on every single request and never consults a durable grant; use it when someone else is holding the phone; off stops any capability request reaching any paired device.',
342
342
  valueType: 'enum',
343
343
  options: ['off', 'ask-every-time', 'honor-grants'],
344
344
  defaultValue: 'honor-grants',
@@ -349,7 +349,7 @@ export const FEATURE_ONBOARDING_SECTIONS: readonly FeatureSection[] = [
349
349
  flagId: 'wake-word-detection',
350
350
  label: 'Wake-word detection',
351
351
  hint: 'Listen continuously on a capture device for the pinned "hey goodvibes" phrase and hand the utterance that follows to speech-to-text. Off by default because holding a microphone open must be an explicit act.',
352
- note: 'On this terminal, turning this on starts a recorder (pw-record, parecord, arecord, ffmpeg or sox — whichever is installed), scores every frame with the pinned classifier, plays a short chime the moment a wake confirms, and shows a persistent "listening" row in the footer for as long as it runs. What follows a wake goes to speech-to-text and lands in the composer, or is sent straight away if you turn voice.wake.autoSubmit on. The model it scores with is already here — installing GoodVibes downloads and checksum-verifies it, and a running daemon retries at boot if the install could not reach the network — so turning this on normally needs no setup step. What it will NOT do on its own is download anything at the moment you turn it on: a host whose artifacts are missing or fail verification says which and names /voice wake setup, instead of pretending to listen. That same provisioning fetches the speech gate, so voice.wake.vadThreshold above 0 screens frames once it has run and refuses to start before it has, rather than scoring frames it claims to be screening. voice.wake.noiseSuppression: speex runs here too — the filter travels with the platform, so there is nothing to install for it.',
352
+ note: 'On this terminal, turning this on starts a recorder (pw-record, parecord, arecord, ffmpeg or sox; whichever is installed), scores every frame with the pinned classifier, plays a short chime the moment a wake confirms, and shows a persistent "listening" row in the footer for as long as it runs. What follows a wake goes to speech-to-text and lands in the composer, or is sent straight away if you turn voice.wake.autoSubmit on. The model it scores with is already here: installing GoodVibes downloads and checksum-verifies it, and a running daemon retries at boot if the install could not reach the network, so turning this on normally needs no setup step. What it will NOT do on its own is download anything at the moment you turn it on: a host whose artifacts are missing or fail verification says which and names /voice wake setup, instead of pretending to listen. That same provisioning fetches the speech gate, so voice.wake.vadThreshold above 0 screens frames once it has run and refuses to start before it has, rather than scoring frames it claims to be screening. voice.wake.noiseSuppression: speex runs here too, the filter travels with the platform, so there is nothing to install for it.',
353
353
  },
354
354
  ],
355
355
  },
@@ -447,10 +447,6 @@ function radioOptionsForSubOption(sub: FeatureSubOption): readonly OnboardingWiz
447
447
  return (sub.options ?? []).map((id) => ({ id, label: id, hint: `Use ${id}.` }));
448
448
  }
449
449
 
450
- // ---------------------------------------------------------------------------
451
- // Step builder
452
- // ---------------------------------------------------------------------------
453
-
454
450
  export function buildFeatureUnitStep(
455
451
  controller: OnboardingWizardControllerLike,
456
452
  section: FeatureSection,
@@ -512,7 +508,7 @@ export function buildFeatureUnitStep(
512
508
  summaryTitle: `${section.title} selections`,
513
509
  summaryLines: [
514
510
  `${enabledCount}/${section.units.length} feature(s) enabled in this step`,
515
- 'Skippable — the honest defaults above apply if you make no change.',
511
+ 'Skippable: the honest defaults above apply if you make no change.',
516
512
  'Full sub-option depth for every feature lives in /settings.',
517
513
  ],
518
514
  fields,
@@ -571,7 +567,7 @@ export function applyFeatureUnitOperations(
571
567
  }
572
568
  // A sub-option that writes the unit's OWN enablement key (e.g. the
573
569
  // provider-optimizer routing mode) is the authoritative enablement
574
- // value — drop the pending override so the flush cannot clobber it.
570
+ // value, drop the pending override so the flush cannot clobber it.
575
571
  if (wrote && enablementKey !== undefined && sub.configKey === enablementKey) {
576
572
  overrides.delete(unit.flagId);
577
573
  }
@@ -15,15 +15,15 @@ import type {
15
15
  } from './onboarding-wizard-types.ts';
16
16
 
17
17
  /**
18
- * Providers with a wired in-wizard subscription sign-in flow. This is DATA — the
19
- * set of providers whose OAuth login the wizard can start/finish itself — not an
18
+ * Providers with a wired in-wizard subscription sign-in flow. This is DATA, the
19
+ * set of providers whose OAuth login the wizard can start/finish itself, not an
20
20
  * assumption that any one vendor is the only subscription option.
21
21
  */
22
22
  const SUBSCRIPTION_SIGN_IN_PROVIDER_IDS = new Set<string>(['openai']);
23
23
 
24
24
  /**
25
25
  * One subscription-status row per subscription-capable provider. The row's copy
26
- * names the provider from data — never a vendor hardcoded in the field set — so
26
+ * names the provider from data, never a vendor hardcoded in the field set, so
27
27
  * the status surface tracks whatever subscription-capable providers the runtime
28
28
  * reports, not a single assumed one.
29
29
  */
@@ -41,7 +41,7 @@ export function runtimePortDiagnostic(
41
41
  // The only mode left after every named branch above is 'embedded', and this
42
42
  // function reads either endpoint's status (see getRuntimeEndpointStatus):
43
43
  // the daemon status can never carry it in this product (adoptOnly is
44
- // hardcoded — see bootstrap.ts), but the HTTP listener's status legitimately
44
+ // hardcoded, see bootstrap.ts), but the HTTP listener's status legitimately
45
45
  // does, since the SDK always reports its in-process listener as 'embedded'.
46
46
  return `An embedded GoodVibes service is running at ${status.baseUrl}.`;
47
47
  }
@@ -66,7 +66,7 @@ export function isRuntimeEndpointActive(
66
66
  // This helper serves both endpoints (see handler-onboarding.ts's daemon and
67
67
  // httpListener calls), so the 'embedded' arm stays live for httpListener even
68
68
  // though a daemon status here is never 'embedded' in this product (adoptOnly
69
- // is hardcoded — see bootstrap.ts). Dropping the arm would mark a running
69
+ // is hardcoded, see bootstrap.ts). Dropping the arm would mark a running
70
70
  // HTTP listener as inactive.
71
71
  if (status) return status.mode === 'embedded' || status.mode === 'external';
72
72
  return endpoint === 'daemon'
@@ -80,7 +80,7 @@ export function isRuntimeEndpointOccupyingConfiguredPort(
80
80
  ): boolean {
81
81
  const status = getRuntimeEndpointStatus(state, endpoint);
82
82
  // 'incompatible' means a GoodVibes daemon holds the configured port (we just
83
- // did not adopt it) — the port IS occupied, so report it as such. As with
83
+ // did not adopt it), the port IS occupied, so report it as such. As with
84
84
  // isRuntimeEndpointActive above, 'embedded' stays live here for httpListener
85
85
  // (daemon status never carries it in this product).
86
86
  if (status) return status.mode === 'embedded' || status.mode === 'external' || status.mode === 'blocked' || status.mode === 'incompatible';