@pellux/goodvibes-tui 2.0.14 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/.goodvibes/GOODVIBES.md +1 -1
  2. package/.goodvibes/agents/reviewer.md +8 -8
  3. package/.goodvibes/skills/add-provider/SKILL.md +22 -22
  4. package/CHANGELOG.md +35 -0
  5. package/README.md +40 -29
  6. package/docs/README.md +1 -1
  7. package/docs/foundation-artifacts/README.md +5 -5
  8. package/docs/foundation-artifacts/operator-contract.json +123 -123
  9. package/package.json +12 -10
  10. package/scripts/postinstall.js +3 -3
  11. package/src/audio/activation-sound.ts +7 -7
  12. package/src/audio/capture.ts +7 -7
  13. package/src/audio/onnxruntime-assets.d.ts +1 -1
  14. package/src/audio/player.ts +4 -4
  15. package/src/audio/spoken-turn-wiring.ts +4 -4
  16. package/src/audio/voice-capture-wiring.ts +5 -5
  17. package/src/audio/voice-input-session.ts +3 -3
  18. package/src/audio/wake-inference.ts +13 -8
  19. package/src/audio/wake-runtime.ts +10 -10
  20. package/src/cli/completions/generate.ts +2 -2
  21. package/src/cli/doctor.ts +13 -13
  22. package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
  23. package/src/cli/entrypoint.ts +3 -3
  24. package/src/cli/help.ts +6 -6
  25. package/src/cli/hooks-command.ts +4 -4
  26. package/src/cli/hooks-report.ts +4 -4
  27. package/src/cli/launch-auto-update.ts +17 -17
  28. package/src/cli/management-commands.ts +8 -8
  29. package/src/cli/management-utils.ts +3 -3
  30. package/src/cli/management.ts +1 -1
  31. package/src/cli/plugin-bundles-command.ts +10 -10
  32. package/src/cli/plugin-command.ts +9 -9
  33. package/src/cli/service-posture.ts +1 -1
  34. package/src/cli/status.ts +10 -10
  35. package/src/cli/surface-command.ts +4 -4
  36. package/src/cli/tui-startup.ts +23 -23
  37. package/src/config/run-daemon-config-migration.ts +3 -3
  38. package/src/config/secret-config.ts +10 -10
  39. package/src/config/surface.ts +1 -1
  40. package/src/config/tui-extension-settings.ts +8 -8
  41. package/src/core/active-model-identity.ts +7 -7
  42. package/src/core/approval-alert.ts +5 -5
  43. package/src/core/bookmark-navigation.ts +3 -3
  44. package/src/core/budget-breach-notifier.ts +6 -6
  45. package/src/core/compaction-receipt.ts +8 -8
  46. package/src/core/composer-state.ts +2 -2
  47. package/src/core/context-usage.ts +1 -1
  48. package/src/core/conversation-compaction-render.ts +3 -3
  49. package/src/core/conversation-event-navigation.ts +2 -2
  50. package/src/core/conversation-fold.ts +9 -9
  51. package/src/core/conversation-line-cache.ts +14 -14
  52. package/src/core/conversation-render-context.ts +6 -6
  53. package/src/core/conversation-rendering.ts +27 -30
  54. package/src/core/conversation-search-expansion.ts +6 -6
  55. package/src/core/conversation-splash-state.ts +3 -3
  56. package/src/core/conversation-turn-structure.ts +13 -13
  57. package/src/core/conversation-types.ts +3 -3
  58. package/src/core/conversation-user-receipts.ts +5 -5
  59. package/src/core/conversation.ts +17 -17
  60. package/src/core/format-user-error.ts +5 -5
  61. package/src/core/long-task-notifier.ts +9 -9
  62. package/src/core/memory-diagnostics-gateway.ts +8 -8
  63. package/src/core/memory-provenance.ts +5 -5
  64. package/src/core/model-routing-chip.ts +3 -3
  65. package/src/core/pairing-tailscale-gateway.ts +3 -3
  66. package/src/core/permission-mode.ts +5 -5
  67. package/src/core/power-chip-source.ts +3 -3
  68. package/src/core/power-status.ts +8 -8
  69. package/src/core/rewind-receipt.ts +6 -6
  70. package/src/core/session-resume-core.ts +8 -8
  71. package/src/core/stream-event-wiring.ts +36 -36
  72. package/src/core/stream-stall-watchdog.ts +4 -4
  73. package/src/core/system-message-noise.ts +7 -7
  74. package/src/core/system-message-router.ts +10 -10
  75. package/src/core/terminal-notifier.ts +5 -5
  76. package/src/core/turn-budget-outcome.ts +5 -5
  77. package/src/core/turn-cancellation.ts +3 -3
  78. package/src/core/turn-event-wiring.ts +16 -16
  79. package/src/core/voice-capture-status.ts +2 -2
  80. package/src/core/voice-provision-gateway.ts +12 -12
  81. package/src/core/voice-provision-status.ts +19 -19
  82. package/src/core/voice-stt-gateway.ts +6 -6
  83. package/src/core/wake-provision-runner.ts +7 -7
  84. package/src/core/wake-provision-status.ts +17 -17
  85. package/src/core/workstream-notification.ts +8 -8
  86. package/src/export/gist-uploader.ts +7 -7
  87. package/src/input/autocomplete.ts +3 -3
  88. package/src/input/bookmark-modal.ts +1 -1
  89. package/src/input/command-args-hint.ts +2 -2
  90. package/src/input/command-reference.ts +9 -9
  91. package/src/input/command-registry.ts +32 -32
  92. package/src/input/commands/acp-runtime.ts +6 -6
  93. package/src/input/commands/calendar-runtime.ts +9 -9
  94. package/src/input/commands/channel-pairing.ts +11 -11
  95. package/src/input/commands/channel-runtime.ts +1 -1
  96. package/src/input/commands/checkin-runtime.ts +4 -4
  97. package/src/input/commands/checkpoint-runtime.ts +4 -4
  98. package/src/input/commands/ci-runtime.ts +4 -4
  99. package/src/input/commands/cluster-runtime.ts +3 -3
  100. package/src/input/commands/codebase-runtime.ts +16 -16
  101. package/src/input/commands/config.ts +6 -6
  102. package/src/input/commands/connection-status.ts +12 -12
  103. package/src/input/commands/context-window.ts +2 -2
  104. package/src/input/commands/cost-attribution-format.ts +4 -4
  105. package/src/input/commands/cost-runtime.ts +2 -2
  106. package/src/input/commands/devices-runtime.ts +7 -7
  107. package/src/input/commands/diff-runtime.ts +2 -2
  108. package/src/input/commands/editor-runtime.ts +1 -1
  109. package/src/input/commands/eval.ts +4 -4
  110. package/src/input/commands/experience-runtime.ts +1 -1
  111. package/src/input/commands/git-runtime.ts +3 -3
  112. package/src/input/commands/graph-runtime.ts +3 -3
  113. package/src/input/commands/guidance-runtime.ts +1 -1
  114. package/src/input/commands/health-metrics-format.ts +2 -2
  115. package/src/input/commands/health-runtime.ts +8 -8
  116. package/src/input/commands/hosted-runtime.ts +13 -13
  117. package/src/input/commands/image-runtime.ts +6 -6
  118. package/src/input/commands/intelligence-runtime.ts +2 -2
  119. package/src/input/commands/local-auth-runtime.ts +3 -3
  120. package/src/input/commands/local-provider-runtime.ts +3 -3
  121. package/src/input/commands/local-runtime.ts +7 -7
  122. package/src/input/commands/mail-runtime.ts +9 -9
  123. package/src/input/commands/mcp-runtime.ts +1 -1
  124. package/src/input/commands/memory.ts +13 -13
  125. package/src/input/commands/notify-runtime.ts +1 -1
  126. package/src/input/commands/operator-panel-runtime.ts +8 -8
  127. package/src/input/commands/operator-rpc.ts +3 -3
  128. package/src/input/commands/operator-runtime.ts +3 -3
  129. package/src/input/commands/palette-runtime.ts +1 -1
  130. package/src/input/commands/payment-card-intake.ts +17 -17
  131. package/src/input/commands/permissions-provenance.ts +7 -7
  132. package/src/input/commands/permissions-runtime.ts +1 -1
  133. package/src/input/commands/planning-runtime.ts +9 -9
  134. package/src/input/commands/platform-services-runtime.ts +2 -2
  135. package/src/input/commands/policy-dispatch.ts +6 -6
  136. package/src/input/commands/power-runtime.ts +6 -6
  137. package/src/input/commands/principals-runtime.ts +3 -3
  138. package/src/input/commands/product-runtime.ts +3 -3
  139. package/src/input/commands/profile-render.ts +13 -13
  140. package/src/input/commands/profile-runtime.ts +13 -13
  141. package/src/input/commands/profile-types.ts +13 -13
  142. package/src/input/commands/provider-accounts-runtime.ts +5 -5
  143. package/src/input/commands/provider.ts +10 -10
  144. package/src/input/commands/qrcode-runtime.ts +3 -3
  145. package/src/input/commands/queue-runtime.ts +6 -6
  146. package/src/input/commands/recall-files-config.ts +4 -4
  147. package/src/input/commands/recall-files-git.ts +3 -3
  148. package/src/input/commands/recall-files.ts +12 -12
  149. package/src/input/commands/recall-query.ts +3 -3
  150. package/src/input/commands/recall-review.ts +3 -3
  151. package/src/input/commands/recall-shared.ts +1 -1
  152. package/src/input/commands/relay-runtime.ts +5 -5
  153. package/src/input/commands/remote-runtime.ts +3 -3
  154. package/src/input/commands/review-runtime.ts +8 -8
  155. package/src/input/commands/rewind-runtime.ts +21 -21
  156. package/src/input/commands/runtime-services.ts +1 -2
  157. package/src/input/commands/schedule-nl.ts +2 -2
  158. package/src/input/commands/schedule-runtime.ts +2 -2
  159. package/src/input/commands/secret-runtime.ts +3 -3
  160. package/src/input/commands/session-content.ts +7 -7
  161. package/src/input/commands/session-picker-filter.ts +3 -3
  162. package/src/input/commands/session-workflow.ts +10 -10
  163. package/src/input/commands/session.ts +15 -15
  164. package/src/input/commands/settings-sync-runtime.ts +2 -2
  165. package/src/input/commands/share-runtime.ts +4 -4
  166. package/src/input/commands/shell-core.ts +11 -11
  167. package/src/input/commands/tasks-runtime.ts +4 -4
  168. package/src/input/commands/test-runtime.ts +6 -6
  169. package/src/input/commands/tts-runtime.ts +4 -4
  170. package/src/input/commands/update-runtime.ts +27 -27
  171. package/src/input/commands/websearch-runtime.ts +2 -2
  172. package/src/input/commands/work-plan-runtime.ts +2 -2
  173. package/src/input/commands/workstream-attempt-dependents.ts +4 -4
  174. package/src/input/commands/workstream-attempts.ts +16 -16
  175. package/src/input/commands/workstream-runtime.ts +36 -36
  176. package/src/input/commands/worktree-runtime.ts +6 -6
  177. package/src/input/composer-capture.ts +5 -5
  178. package/src/input/concealed-input.ts +2 -2
  179. package/src/input/config-modal-types.ts +16 -16
  180. package/src/input/config-modal.ts +30 -30
  181. package/src/input/daemon-owned-settings-descriptions.ts +4 -4
  182. package/src/input/delete-key-policy.ts +1 -1
  183. package/src/input/exec-env-scrub-config.ts +7 -7
  184. package/src/input/feature-unit-layout.ts +5 -5
  185. package/src/input/feed-context-factory.ts +38 -38
  186. package/src/input/file-picker.ts +1 -1
  187. package/src/input/handler-command-route.ts +2 -2
  188. package/src/input/handler-content-actions.ts +8 -8
  189. package/src/input/handler-feed-routes.ts +13 -13
  190. package/src/input/handler-feed.ts +31 -31
  191. package/src/input/handler-interactions.ts +2 -2
  192. package/src/input/handler-modal-routes.ts +13 -13
  193. package/src/input/handler-modal-stack.ts +1 -1
  194. package/src/input/handler-modal-token-routes.ts +1 -1
  195. package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
  196. package/src/input/handler-picker-routes.ts +7 -7
  197. package/src/input/handler-prompt-buffer.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +12 -12
  199. package/src/input/handler-types.ts +3 -3
  200. package/src/input/handler-ui-state.ts +1 -1
  201. package/src/input/handler.ts +9 -9
  202. package/src/input/input-history.ts +1 -1
  203. package/src/input/keybindings.ts +13 -13
  204. package/src/input/kill-ring.ts +7 -11
  205. package/src/input/model-picker-filter.ts +3 -3
  206. package/src/input/model-picker-items.ts +5 -5
  207. package/src/input/model-picker-types.ts +2 -2
  208. package/src/input/model-picker.ts +18 -18
  209. package/src/input/onboarding/onboarding-feature-units.ts +9 -13
  210. package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
  211. package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
  212. package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
  213. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
  214. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
  215. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
  216. package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
  217. package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
  218. package/src/input/panel-integration-actions.ts +3 -3
  219. package/src/input/panel-mouse-geometry.ts +1 -1
  220. package/src/input/panel-paste-flood-guard.ts +9 -9
  221. package/src/input/payments-config.ts +15 -15
  222. package/src/input/profile-picker-modal.ts +1 -1
  223. package/src/input/provider-key-intake.ts +9 -9
  224. package/src/input/relay-settings-descriptions.ts +3 -3
  225. package/src/input/sandbox-exec-config.ts +9 -9
  226. package/src/input/search.ts +18 -18
  227. package/src/input/selection-modal-queue.ts +10 -10
  228. package/src/input/selection-modal.ts +2 -2
  229. package/src/input/session-picker-modal.ts +7 -7
  230. package/src/input/settings-modal-activation.ts +1 -1
  231. package/src/input/settings-modal-adjustment.ts +2 -2
  232. package/src/input/settings-modal-commit.ts +6 -6
  233. package/src/input/settings-modal-connections.ts +2 -2
  234. package/src/input/settings-modal-data.ts +29 -29
  235. package/src/input/settings-modal-mutations.ts +7 -7
  236. package/src/input/settings-modal-reset.ts +3 -3
  237. package/src/input/settings-modal-search.ts +6 -6
  238. package/src/input/settings-modal-secrets.ts +3 -3
  239. package/src/input/settings-modal-types.ts +16 -16
  240. package/src/input/settings-modal.ts +4 -4
  241. package/src/input/voice-local-settings.ts +3 -3
  242. package/src/input/worktree-setup-config.ts +8 -8
  243. package/src/main.ts +15 -15
  244. package/src/panels/agent-inspector-shared.ts +5 -5
  245. package/src/panels/base-panel.ts +3 -3
  246. package/src/panels/builtin/agent.ts +3 -3
  247. package/src/panels/builtin/development.ts +4 -4
  248. package/src/panels/builtin/knowledge.ts +1 -1
  249. package/src/panels/builtin/operations.ts +12 -12
  250. package/src/panels/builtin/session.ts +8 -8
  251. package/src/panels/builtin/shared.ts +6 -6
  252. package/src/panels/builtin-modals.ts +8 -8
  253. package/src/panels/confirm-state.ts +5 -5
  254. package/src/panels/cost-tracker-panel.ts +22 -22
  255. package/src/panels/diff-panel.ts +20 -20
  256. package/src/panels/diff-review-model.ts +5 -5
  257. package/src/panels/diff-review-panel.ts +5 -5
  258. package/src/panels/eval-registry.ts +2 -2
  259. package/src/panels/expandable-list-panel.ts +5 -5
  260. package/src/panels/fleet-acts.ts +20 -20
  261. package/src/panels/fleet-deep-link.ts +5 -5
  262. package/src/panels/fleet-gateway.ts +12 -12
  263. package/src/panels/fleet-observed-render.ts +11 -11
  264. package/src/panels/fleet-panel-format.ts +14 -14
  265. package/src/panels/fleet-panel-worktree-detail.ts +8 -8
  266. package/src/panels/fleet-panel.ts +34 -34
  267. package/src/panels/fleet-read-model.ts +49 -49
  268. package/src/panels/fleet-spawn.ts +15 -15
  269. package/src/panels/fleet-steer.ts +7 -7
  270. package/src/panels/fleet-stop.ts +5 -5
  271. package/src/panels/fleet-tabs.ts +14 -14
  272. package/src/panels/fleet-transcript.ts +26 -26
  273. package/src/panels/git-panel.ts +8 -8
  274. package/src/panels/hosted-session-feed.ts +13 -13
  275. package/src/panels/hosted-session-panel.ts +7 -7
  276. package/src/panels/index.ts +1 -1
  277. package/src/panels/local-auth-panel.ts +15 -15
  278. package/src/panels/memory-consolidation-gateway.ts +8 -8
  279. package/src/panels/modals/devices-modal.ts +8 -8
  280. package/src/panels/modals/hooks-modal.ts +1 -1
  281. package/src/panels/modals/keybindings-modal.ts +5 -5
  282. package/src/panels/modals/knowledge-modal.ts +2 -2
  283. package/src/panels/modals/local-auth-modal.ts +4 -4
  284. package/src/panels/modals/marketplace-modal.ts +3 -3
  285. package/src/panels/modals/memory-modal.ts +19 -19
  286. package/src/panels/modals/modal-surface-helpers.ts +1 -1
  287. package/src/panels/modals/modal-theme.ts +3 -3
  288. package/src/panels/modals/pairing-modal.ts +19 -19
  289. package/src/panels/modals/planning-modal.ts +4 -4
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -1,25 +1,25 @@
1
1
  /**
2
- * hosted-session-feed.ts — what this terminal knows about the daemon-hosted
2
+ * hosted-session-feed.ts, what this terminal knows about the daemon-hosted
3
3
  * session it is attached to.
4
4
  *
5
5
  * One place holds it because two surfaces read it: the `/hosted` command family
6
6
  * (which prints status and drives the verbs) and the Hosted Session panel
7
7
  * (which renders the conversation). The same shared-feed shape
8
- * notifications-feed.ts already uses in this repo — a module-level instance a
9
- * command writes and a panel subscribes to — rather than threading a service
8
+ * notifications-feed.ts already uses in this repo, a module-level instance a
9
+ * command writes and a panel subscribes to, rather than threading a service
10
10
  * through the command context and the panel deps for one feature.
11
11
  *
12
12
  * ── What is a fact here, and what is a rendering ──────────────────────────
13
13
  *
14
14
  * The RECORD is the daemon's, verbatim: status, attached clients, turn count,
15
- * and `effectiveDetachPolicy` — what leaving would do right now. This feed
15
+ * and `effectiveDetachPolicy`, what leaving would do right now. This feed
16
16
  * never recomputes those; it stores the last record a verb or a lifecycle event
17
17
  * handed it.
18
18
  *
19
19
  * The ROWS are this terminal's rendering of the transcript: the history
20
20
  * `attach` backfilled, plus what the live `turn` and `tools` frames have said
21
21
  * since. A row that is still being streamed is marked `streaming` so the panel
22
- * can show it growing rather than waiting for the turn to end — the same thing
22
+ * can show it growing rather than waiting for the turn to end, the same thing
23
23
  * a local turn does.
24
24
  *
25
25
  * ── Bounded, because it is a live buffer ──────────────────────────────────
@@ -142,7 +142,7 @@ export class HostedSessionFeed {
142
142
  this.emit();
143
143
  }
144
144
 
145
- /** Replace the record — every verb answer and every lifecycle notice lands here. */
145
+ /** Replace the record, every verb answer and every lifecycle notice lands here. */
146
146
  setRecord(record: HostedSessionRecord): void {
147
147
  if (this.state.record && this.state.record.id !== record.id) return;
148
148
  this.state = { ...this.state, record };
@@ -167,7 +167,7 @@ export class HostedSessionFeed {
167
167
  close?.();
168
168
  }
169
169
 
170
- /** Append a note of this terminal's own — a detach, a refusal, a stream drop. */
170
+ /** Append a note of this terminal's own, a detach, a refusal, a stream drop. */
171
171
  note(text: string, kind: HostedRowKind = 'system'): void {
172
172
  this.appendRow({ kind, text, at: Date.now(), streaming: false });
173
173
  }
@@ -231,7 +231,7 @@ export class HostedSessionFeed {
231
231
  const reason = readString(event.payload, 'reason');
232
232
  this.appendRow({
233
233
  kind: 'system',
234
- text: reason ? `turn cancelled — ${reason}` : 'turn cancelled',
234
+ text: reason ? `turn cancelled: ${reason}` : 'turn cancelled',
235
235
  at: event.at,
236
236
  streaming: false,
237
237
  });
@@ -256,7 +256,7 @@ export class HostedSessionFeed {
256
256
  { callId, tool, startedAt: event.at },
257
257
  ],
258
258
  };
259
- this.appendRow({ kind: 'tool', text: `${tool} — running`, at: event.at, streaming: true, callId });
259
+ this.appendRow({ kind: 'tool', text: `${tool}: running`, at: event.at, streaming: true, callId });
260
260
  return;
261
261
  }
262
262
  case 'TOOL_SUCCEEDED':
@@ -265,14 +265,14 @@ export class HostedSessionFeed {
265
265
  const outcome = event.type === 'TOOL_SUCCEEDED'
266
266
  ? 'done'
267
267
  : event.type === 'TOOL_FAILED'
268
- ? `failed — ${readString(event.payload, 'error') || 'no reason reported'}`
269
- : `cancelled${readString(event.payload, 'reason') ? ` — ${readString(event.payload, 'reason')}` : ''}`;
268
+ ? `failed: ${readString(event.payload, 'error') || 'no reason reported'}`
269
+ : `cancelled${readString(event.payload, 'reason') ? `: ${readString(event.payload, 'reason')}` : ''}`;
270
270
  this.state = {
271
271
  ...this.state,
272
272
  runningToolCalls: this.state.runningToolCalls.filter((call) => call.callId !== callId),
273
273
  rows: this.state.rows.map((row) => (
274
274
  row.callId === callId && row.streaming
275
- ? { ...row, text: `${tool} — ${outcome}`, streaming: false }
275
+ ? { ...row, text: `${tool}: ${outcome}`, streaming: false }
276
276
  : row
277
277
  )),
278
278
  };
@@ -290,7 +290,7 @@ export class HostedSessionFeed {
290
290
  if (update.event === 'hosted-session-terminated') {
291
291
  this.settleStreamingRow();
292
292
  const reason = update.session.terminatedReason ?? 'no reason recorded';
293
- this.note(`this hosted session ended — ${reason}${update.detail ? ` (${update.detail})` : ''}`);
293
+ this.note(`this hosted session ended: ${reason}${update.detail ? ` (${update.detail})` : ''}`);
294
294
  }
295
295
  }
296
296
 
@@ -1,11 +1,11 @@
1
1
  /**
2
- * HostedSessionPanel — the conversation the daemon is running, rendered here.
2
+ * HostedSessionPanel, the conversation the daemon is running, rendered here.
3
3
  *
4
4
  * A hosted session's turn arrives on the same `turn` and `tools` event domains
5
5
  * a local turn does, so what this panel shows is the same thing the transcript
6
6
  * shows for a local conversation: what was said, what tool is running, and
7
7
  * whether text is still streaming. The difference is where the loop lives, and
8
- * the header says so plainly — including `effectiveDetachPolicy`, so a person
8
+ * the header says so plainly, including `effectiveDetachPolicy`, so a person
9
9
  * about to quit knows whether that ends the work.
10
10
  *
11
11
  * The panel renders; it decides nothing. Every fact in the header is a field of
@@ -33,7 +33,7 @@ import {
33
33
 
34
34
  const C = DEFAULT_PANEL_PALETTE;
35
35
 
36
- const INTRO = 'A conversation whose loop runs inside the daemon. Steer it with /hosted say, leave it with /hosted detach — the header says what leaving would do.';
36
+ const INTRO = 'A conversation whose loop runs inside the daemon. Steer it with /hosted say, leave it with /hosted detach; the header says what leaving would do.';
37
37
 
38
38
  function rowColor(kind: HostedSessionRow['kind']): string {
39
39
  switch (kind) {
@@ -80,7 +80,7 @@ export function buildHostedHeaderLines(state: HostedSessionFeedState, width: num
80
80
  : 'detaching ends it (kill)';
81
81
  const policySource = record.detachPolicy === null ? 'from the setting' : 'per-session override';
82
82
  const rows: { text: string; fg: string }[] = [
83
- { text: `${record.title.trim() || record.id} — ${record.status}`, fg: C.header },
83
+ { text: `${record.title.trim() || record.id}: ${record.status}`, fg: C.header },
84
84
  { text: `id ${record.id}`, fg: C.dim },
85
85
  { text: `workspace ${record.workspaceRoot}`, fg: C.dim },
86
86
  {
@@ -93,14 +93,14 @@ export function buildHostedHeaderLines(state: HostedSessionFeedState, width: num
93
93
  },
94
94
  ];
95
95
  if (record.status === 'terminated') {
96
- rows.push({ text: `ended — ${record.terminatedReason ?? 'no reason recorded'}`, fg: C.bad });
96
+ rows.push({ text: `ended: ${record.terminatedReason ?? 'no reason recorded'}`, fg: C.bad });
97
97
  }
98
98
  if (record.restoredFromDisk) {
99
99
  rows.push({ text: 'restored from disk after a daemon restart', fg: C.warn });
100
100
  }
101
101
  rows.push(state.streaming
102
102
  ? { text: 'live event stream open', fg: C.good }
103
- : { text: `no live stream — ${state.streamNote ?? 'not subscribed'}`, fg: C.warn });
103
+ : { text: `no live stream: ${state.streamNote ?? 'not subscribed'}`, fg: C.warn });
104
104
  if (state.runningToolCalls.length > 0) {
105
105
  rows.push({
106
106
  text: `running: ${state.runningToolCalls.map((call) => `${call.tool} (${call.callId})`).join(', ')}`,
@@ -108,7 +108,7 @@ export function buildHostedHeaderLines(state: HostedSessionFeedState, width: num
108
108
  });
109
109
  }
110
110
  if (state.droppedRows > 0) {
111
- rows.push({ text: `${state.droppedRows} earlier row(s) dropped by this panel's buffer — reattach to backfill`, fg: C.dim });
111
+ rows.push({ text: `${state.droppedRows} earlier row(s) dropped by this panel's buffer; reattach to backfill`, fg: C.dim });
112
112
  }
113
113
  const lines: Line[] = [];
114
114
  for (const row of rows) {
@@ -7,7 +7,7 @@ export { CostTrackerPanel } from './cost-tracker-panel.ts';
7
7
  export { GitPanel } from './git-panel.ts';
8
8
  export { registerBuiltinPanels } from './builtin-panels.ts';
9
9
  export type { BuiltinPanelDeps } from './builtin-panels.ts';
10
- // (the purge) — group B: plugins/skills panels are register-retired but
10
+ // (the purge), group B: plugins/skills panels are register-retired but
11
11
  // their modules are retained for shared non-class exports (PluginManagerControls;
12
12
  // discoverSkills + SkillRecord/SkillOrigin, consumed by command runtimes and the
13
13
  // skills modal). The other group-A and group-B panel classes are deleted outright
@@ -20,7 +20,7 @@ import { isTextBackspace } from '../input/delete-key-policy.ts';
20
20
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
21
21
  import { type ConfirmState, handleConfirmInput } from './confirm-state.ts';
22
22
 
23
- // Base chrome only — state colors and text tokens come straight from
23
+ // Base chrome only, state colors and text tokens come straight from
24
24
  // DEFAULT_PANEL_PALETTE.
25
25
  const C = DEFAULT_PANEL_PALETTE;
26
26
 
@@ -40,7 +40,7 @@ interface MaskedEntryState {
40
40
  buffer: string;
41
41
  }
42
42
 
43
- /** Mutation surface the panel needs for p/a/d/b — a subset of UserAuthManager. */
43
+ /** Mutation surface the panel needs for p/a/d/b, a subset of UserAuthManager. */
44
44
  type LocalAuthMutations = Pick<UserAuthManager, 'addUser' | 'deleteUser' | 'rotatePassword' | 'clearBootstrapCredentialFile'>;
45
45
 
46
46
  function hasLocalAuthMutations(value: LocalAuthInspectionQuery): value is LocalAuthInspectionQuery & LocalAuthMutations {
@@ -54,12 +54,12 @@ function hasLocalAuthMutations(value: LocalAuthInspectionQuery): value is LocalA
54
54
  export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
55
55
  private readonly authManager: LocalAuthInspectionQuery;
56
56
  private maskedState: MaskedEntryState | null = null;
57
- /** Pending delete-user confirmation — project-standard ConfirmState contract. */
57
+ /** Pending delete-user confirmation, project-standard ConfirmState contract. */
58
58
  private deleteConfirm: ConfirmState<string> | null = null;
59
59
  /** Draft username buffer for the 'a' add-user flow's first step (username,
60
- * then openMaskedEntry for the password). Not masked — usernames aren't secret. */
60
+ * then openMaskedEntry for the password). Not masked, usernames aren't secret. */
61
61
  private usernameEntry: string | null = null;
62
- /** Cached inspect() snapshot for the current render pass — see render(). */
62
+ /** Cached inspect() snapshot for the current render pass, see render(). */
63
63
  private cachedSnapshot: LocalAuthSnapshot | null = null;
64
64
 
65
65
  public constructor(authManager: LocalAuthInspectionQuery) {
@@ -99,7 +99,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
99
99
  /**
100
100
  * Masked password/username entry wants every character of a burst (paste,
101
101
  * or fast typing landing in one input.feed() call) delivered one at a
102
- * time, same as it always has — see the interface doc on
102
+ * time, same as it always has, see the interface doc on
103
103
  * `Panel.isCapturingTextBurst`.
104
104
  */
105
105
  public override isCapturingTextBurst(): boolean {
@@ -107,7 +107,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
107
107
  }
108
108
 
109
109
  public override handleInput(key: KeyName): boolean {
110
- // Masked entry takes priority when active — it must capture every
110
+ // Masked entry takes priority when active, it must capture every
111
111
  // keystroke (including letters that would otherwise be p/a/d/b actions)
112
112
  // as part of the password being typed.
113
113
  if (this.maskedState !== null) {
@@ -200,7 +200,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
200
200
  this.invalidate();
201
201
  return true;
202
202
  }
203
- // 'absorbed' (or defensively, 'inactive' — deleteConfirm is non-null here so this never fires)
203
+ // 'absorbed' (or defensively, 'inactive', deleteConfirm is non-null here so this never fires)
204
204
  return true;
205
205
  }
206
206
 
@@ -242,7 +242,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
242
242
  }
243
243
 
244
244
  private handleMaskedEntryInput(key: KeyName): boolean {
245
- // Masked entry is active — capture all keystrokes.
245
+ // Masked entry is active, capture all keystrokes.
246
246
  const state = this.maskedState!;
247
247
 
248
248
  if (key === 'escape') {
@@ -330,7 +330,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
330
330
  }
331
331
 
332
332
  const intro = 'Manage local daemon and HTTP-listener auth users, bootstrap state, and active sessions.';
333
- // Single inspect() call for this whole render pass — getItems() (called
333
+ // Single inspect() call for this whole render pass, getItems() (called
334
334
  // both directly below and again inside renderList()'s internal
335
335
  // getVisibleItems()) reads from this cache instead of re-inspecting.
336
336
  this.cachedSnapshot = this.authManager.inspect();
@@ -338,7 +338,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
338
338
  const users = this.getItems();
339
339
 
340
340
  const issueMessages: string[] = [];
341
- if (snapshot.bootstrapCredentialPresent) issueMessages.push('Bootstrap credential file still exists — press b to clear it after password rotation.');
341
+ if (snapshot.bootstrapCredentialPresent) issueMessages.push('Bootstrap credential file still exists; press b to clear it after password rotation.');
342
342
  if (snapshot.sessionCount === 0) issueMessages.push('No active local auth sessions are currently tracked.');
343
343
 
344
344
  const headerLines: Line[] = [
@@ -407,7 +407,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
407
407
  });
408
408
  }
409
409
 
410
- /** Footer keyboard hints, adapted to the current state — confirm-pending
410
+ /** Footer keyboard hints, adapted to the current state, confirm-pending
411
411
  * vs. normal browsing, and whether there's a bootstrap credential to clear. */
412
412
  private buildHints(
413
413
  selected: LocalAuthUser | null,
@@ -435,14 +435,14 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
435
435
  private renderUsernameEntryPrompt(width: number, height: number): Line[] {
436
436
  const draft = this.usernameEntry ?? '';
437
437
  const promptLines: Line[] = [
438
- buildPanelLine(width, [[' Add local auth user — enter a username, then set a masked password.', C.value]]),
438
+ buildPanelLine(width, [[' Add local auth user: enter a username, then set a masked password.', C.value]]),
439
439
  buildPanelLine(width, [['', C.label]]),
440
440
  buildPanelLine(width, [[' Username ', C.label], [`${draft}█`, C.info]]),
441
441
  buildPanelLine(width, [['', C.label]]),
442
442
  buildPanelLine(width, [[' [Enter] Continue to password entry [Esc] Cancel [Backspace] Delete char', C.dim]]),
443
443
  ];
444
444
  const workspace = buildPanelWorkspace(width, height, {
445
- title: 'Local Auth — Add User',
445
+ title: 'Local Auth: Add User',
446
446
  intro: 'Type the new username and press Enter to continue to masked password entry.',
447
447
  sections: [{ lines: promptLines }],
448
448
  palette: C,
@@ -467,7 +467,7 @@ export class LocalAuthPanel extends ScrollableListPanel<LocalAuthUser> {
467
467
  ];
468
468
 
469
469
  const workspace = buildPanelWorkspace(width, height, {
470
- title: 'Local Auth — Password Entry',
470
+ title: 'Local Auth: Password Entry',
471
471
  intro: `Type a password for ${state.username}. The value is never echoed in plaintext or stored in history.`,
472
472
  sections: [{ lines: promptLines }],
473
473
  palette: C,
@@ -2,7 +2,7 @@
2
2
  // memory-consolidation-gateway.ts
3
3
  //
4
4
  // The async, daemon-backed verb the Memory modal's Proposals tab reads:
5
- // memory.consolidation.receipts (GET /api/memory/consolidation/receipts) — the
5
+ // memory.consolidation.receipts (GET /api/memory/consolidation/receipts), the
6
6
  // retained memory-consolidation run receipts plus the flattened
7
7
  // pendingProposals (contradiction / cross-scope-duplicate / stale-delete)
8
8
  // awaiting human review. The records a proposal references are already
@@ -11,12 +11,12 @@
11
11
  // how the Memory modal learns WHAT was proposed and WHY, so it can show that
12
12
  // reason next to the affected records and offer a jump to them.
13
13
  //
14
- // No named facade exists on the in-process OperatorClient for this verb, so —
15
- // exactly like the Fleet gateway (fleet-gateway.ts) — it goes over the
14
+ // No named facade exists on the in-process OperatorClient for this verb, so,
15
+ // exactly like the Fleet gateway (fleet-gateway.ts), it goes over the
16
16
  // generic operator invoke path (operator-rpc.ts's resolveOperatorRpc ->
17
17
  // sdk.operator.invoke), reaching the SAME daemon the command layer does. A
18
18
  // runtime without the consolidation scheduler answers an honest 501; an older
19
- // daemon that has not wired this route yet answers 404 — both are "verb
19
+ // daemon that has not wired this route yet answers 404, both are "verb
20
20
  // unavailable", not "no proposals" (see classifyConsolidationFetchError).
21
21
  //
22
22
  // The interface is injectable so the modal's proposals fetch round-trips
@@ -30,7 +30,7 @@ import type { OperatorMethodOutput } from '@pellux/goodvibes-sdk';
30
30
  import { GoodVibesSdkError } from '@pellux/goodvibes-sdk';
31
31
  import { resolveOperatorRpc, describeOperatorRpcError } from '../input/commands/operator-rpc.ts';
32
32
 
33
- /** memory.consolidation.receipts output — retained receipts + the flattened pending proposals. */
33
+ /** memory.consolidation.receipts output, retained receipts + the flattened pending proposals. */
34
34
  export type MemoryConsolidationReceiptsResult = OperatorMethodOutput<'memory.consolidation.receipts'>;
35
35
  /** One pending judgment proposal (contradiction / cross-scope-duplicate / stale-delete) awaiting human review. */
36
36
  export type MemoryConsolidationProposal = MemoryConsolidationReceiptsResult['pendingProposals'][number];
@@ -44,7 +44,7 @@ export interface MemoryConsolidationGateway {
44
44
  /**
45
45
  * Why the gateway could not be built (daemon disabled / no control-plane URL),
46
46
  * surfaced verbatim so the modal can print an honest "unavailable" line
47
- * rather than guessing — mirrors FleetGatewayResolution.
47
+ * rather than guessing, mirrors FleetGatewayResolution.
48
48
  */
49
49
  export type MemoryConsolidationGatewayResolution =
50
50
  | { readonly available: true; readonly gateway: MemoryConsolidationGateway }
@@ -57,7 +57,7 @@ export interface MemoryConsolidationGatewayDeps {
57
57
 
58
58
  /**
59
59
  * Build the live consolidation-receipts gateway over the generic operator
60
- * invoke path — the same daemon resolution the command layer and the Fleet
60
+ * invoke path, the same daemon resolution the command layer and the Fleet
61
61
  * gateway use. Returns an honest unavailable reason when no daemon is
62
62
  * reachable, so the modal can refuse cleanly instead of throwing mid-render.
63
63
  */
@@ -79,7 +79,7 @@ export type MemoryConsolidationFetchFailure =
79
79
  /**
80
80
  * Classify a `fetchReceipts()` rejection: a 501 (the documented "no
81
81
  * consolidation scheduler on this runtime" response) or a 404 (an older
82
- * daemon that has not wired this route yet) are both "verb unavailable" —
82
+ * daemon that has not wired this route yet) are both "verb unavailable",
83
83
  * distinct from a generic request failure (network error, 401/403, 500),
84
84
  * which renders as an honest fetch error instead. Reuses
85
85
  * describeOperatorRpcError's wording so the two call sites (command layer,
@@ -10,7 +10,7 @@ import type { MintedPairingToken, PublicPairingToken } from '@pellux/goodvibes-s
10
10
  import { formatDeviceLine, shortTokenId } from '@pellux/goodvibes-sdk/platform/pairing';
11
11
 
12
12
  // ---------------------------------------------------------------------------
13
- // Paired Devices — the settings security-domain device/token management surface.
13
+ // Paired Devices, the settings security-domain device/token management surface.
14
14
  // Lists every per-device pairing token (name · created · last-seen · id) and
15
15
  // mirrors the pairing.tokens.* gateway verbs: revoke a device, migrate off the
16
16
  // legacy shared token, revoke the shared token. Rename needs a name, which the
@@ -19,7 +19,7 @@ import { formatDeviceLine, shortTokenId } from '@pellux/goodvibes-sdk/platform/p
19
19
  // fresh every render, so a revoke/migrate reflects immediately.
20
20
  // ---------------------------------------------------------------------------
21
21
 
22
- /** The token-store capability this surface needs — satisfied by PairingTokenManager. */
22
+ /** The token-store capability this surface needs, satisfied by PairingTokenManager. */
23
23
  export interface DevicesModalPairingTokens {
24
24
  list(): PublicPairingToken[];
25
25
  rename(id: string, name: string): boolean;
@@ -62,10 +62,10 @@ class DevicesModalSurface implements ConfigModalSurface {
62
62
  const now = this.deps.now?.() ?? Date.now();
63
63
  const tokens = this.deps.pairingTokens.list();
64
64
  const rows: ConfigModalRow[] = [];
65
- rows.push(infoRow('intro', 'Devices paired to this daemon. Each has its own token — revoke one without affecting the others.', { dim: true }));
65
+ rows.push(infoRow('intro', 'Devices paired to this daemon. Each has its own token; revoke one without affecting the others.', { dim: true }));
66
66
 
67
67
  if (tokens.length === 0) {
68
- rows.push(infoRow('empty', 'No devices paired yet — run /pair (or open the pairing QR) to add one.'));
68
+ rows.push(infoRow('empty', 'No devices paired yet: run /pair (or open the pairing QR) to add one.'));
69
69
  } else {
70
70
  for (const token of tokens) {
71
71
  rows.push({ id: `${DEVICE_ROW_PREFIX}${token.id}`, label: formatDeviceLine(token, now) });
@@ -77,7 +77,7 @@ class DevicesModalSurface implements ConfigModalSurface {
77
77
  'legacy',
78
78
  legacyRevoked
79
79
  ? 'Legacy shared token: revoked.'
80
- : 'Legacy shared token: active — migrate a device off it (m), then revoke it (s).',
80
+ : 'Legacy shared token: active; migrate a device off it (m), then revoke it (s).',
81
81
  legacyRevoked ? { dim: true } : { fg: MODAL_TONES.reasoning },
82
82
  ));
83
83
 
@@ -93,7 +93,7 @@ class DevicesModalSurface implements ConfigModalSurface {
93
93
  if (id === 'rename') {
94
94
  const deviceId = deviceIdOf(ctx.row);
95
95
  if (!deviceId) { ctx.setStatus('Select a device row first.'); return; }
96
- // The stable-layout modal cannot capture a name inline — route to the
96
+ // The stable-layout modal cannot capture a name inline, route to the
97
97
  // command with the id pre-filled so the user only types the new name.
98
98
  ctx.print(`To rename this device, run: /devices rename ${shortTokenId(deviceId)} <new name>`);
99
99
  return;
@@ -104,7 +104,7 @@ class DevicesModalSurface implements ConfigModalSurface {
104
104
  if (!deviceId) { ctx.setStatus('Select a device row first.'); return; }
105
105
  const record = tokens.list().find((t) => t.id === deviceId);
106
106
  const revoked = tokens.revoke(deviceId);
107
- ctx.setStatus(revoked ? `Revoked "${record?.name ?? shortTokenId(deviceId)}" — its token stops working now.` : 'That device was already absent.');
107
+ ctx.setStatus(revoked ? `Revoked "${record?.name ?? shortTokenId(deviceId)}": its token stops working now.` : 'That device was already absent.');
108
108
  this.requestRender();
109
109
  return;
110
110
  }
@@ -124,7 +124,7 @@ class DevicesModalSurface implements ConfigModalSurface {
124
124
  if (id === 'revokeShared') {
125
125
  if (tokens.isLegacyRevoked()) { ctx.setStatus('The legacy shared token is already revoked.'); return; }
126
126
  tokens.revokeLegacyShared();
127
- ctx.setStatus('Revoked the legacy shared token — devices on it must re-pair with their own token.');
127
+ ctx.setStatus('Revoked the legacy shared token; devices on it must re-pair with their own token.');
128
128
  this.requestRender();
129
129
  return;
130
130
  }
@@ -18,7 +18,7 @@ import type {
18
18
  // ---------------------------------------------------------------------------
19
19
  // Hooks → config-modal surface (group-B port). Two tabs: 'Hooks' (active
20
20
  // registrations + contract posture) and 'Activity' (recent runtime activity +
21
- // managed authoring + last simulation — the panel's expand-activity view, now a
21
+ // managed authoring + last simulation, the panel's expand-activity view, now a
22
22
  // dedicated tab). All sources are in-memory (dispatcher/workbench/tracker hold
23
23
  // live state), so buildView reads live and refresh() is a no-op. Toggle/remove/
24
24
  // simulate route to their `/hooks` command path. Selection-blind port: the
@@ -12,8 +12,8 @@ import { KeybindingsManager } from '../../input/keybindings.ts';
12
12
  // Docs + Shortcuts → 'keybindings' config-modal surface (group-B port).
13
13
  // A MERGE of the retired DocsPanel (tools/models/shortcuts) and the
14
14
  // shortcuts-overlay reference. Three tabs: 'Tools', 'Models', and 'Shortcuts'
15
- // (the categorized keyboard reference — driven live off keybindingsManager so
16
- // user overrides show up — followed by an exhaustive 'All Bindings (live)'
15
+ // (the categorized keyboard reference, driven live off keybindingsManager so
16
+ // user overrides show up, followed by an exhaustive 'All Bindings (live)'
17
17
  // table). Enter opens the tool-inspector successor ('fleet') or switches the
18
18
  // active model, both via the command path (fleet is a panel; /model is a
19
19
  // settings mutation). Selection-blind port: the panel's selected tool/model
@@ -114,11 +114,11 @@ class KeybindingsModalSurface implements ConfigModalSurface {
114
114
  if (ctx.tabId === 'tools') {
115
115
  // item 4: pass the tool name through as a deep-link target.
116
116
  // Honest caveat (documented, not a bug to silently paper over): fleet's
117
- // ProcessKind set has no 'tool' node — a docs Tools row names a static
117
+ // ProcessKind set has no 'tool' node, a docs Tools row names a static
118
118
  // tool DEFINITION, not a live process, so FleetPanel.receiveDeepLink
119
119
  // will not currently find a match and shows its honest "node no longer
120
120
  // present" line. The plumbing is still worth wiring now (matches the
121
- // work-plan agent/wrfc jumps' shape) — it starts resolving for free the
121
+ // work-plan agent/wrfc jumps' shape), it starts resolving for free the
122
122
  // day fleet grows a per-tool-call node (the retired DocsPanel's own
123
123
  // comment already anticipated this: "no filter-by-tool equivalent
124
124
  // there yet").
@@ -145,7 +145,7 @@ export function createKeybindingsModalSurface(deps: KeybindingsModalDeps): Confi
145
145
  /**
146
146
  * Deterministic golden fixture. KeybindingsManager is pointed at a nonexistent
147
147
  * config path so it always resolves to DEFAULT_KEYBINDINGS. Tool and model
148
- * fixtures are frozen literals — no disk, no live registry.
148
+ * fixtures are frozen literals, no disk, no live registry.
149
149
  */
150
150
  export function keybindingsModalGoldenSurface(): ConfigModalSurface {
151
151
  const keybindingsManager = new KeybindingsManager({ configPath: '/nonexistent/golden-keybindings.json' });
@@ -11,7 +11,7 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
11
11
  // ---------------------------------------------------------------------------
12
12
  // Knowledge (graph) → config-modal surface (group-B port). Two tabs:
13
13
  // 'Browse' (sources/nodes/issues + schedules) and 'Review' (the open-issue
14
- // queue) — the panel's browse/review toggle, now host tabs. Issue review
14
+ // queue), the panel's browse/review toggle, now host tabs. Issue review
15
15
  // mutations (accept/reject/resolve/reopen) route to the `/knowledge
16
16
  // review-issue` command. 'm' cross-opens the memory surface. Selection-blind
17
17
  // port: the panel's selected-row id/detail is folded into each row label.
@@ -140,7 +140,7 @@ export function createKnowledgeModalSurface(deps: KnowledgeModalDeps): ConfigMod
140
140
  }
141
141
 
142
142
  /**
143
- * Deterministic golden fixture: fixed node/source/issue/schedule records —
143
+ * Deterministic golden fixture: fixed node/source/issue/schedule records,
144
144
  * no live SDK calls, no random ids, no wall-clock reads.
145
145
  */
146
146
  export function knowledgeModalGoldenSurface(): ConfigModalSurface {
@@ -4,7 +4,7 @@ import type { UserAuthManager } from '@pellux/goodvibes-sdk/platform/security';
4
4
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
5
5
  import { postureLine, kv } from './modal-surface-helpers.ts';
6
6
 
7
- /** Mutation surface the surface needs to gate p/d/b on — a subset of UserAuthManager,
7
+ /** Mutation surface the surface needs to gate p/d/b on, a subset of UserAuthManager,
8
8
  * mirroring LocalAuthPanel's own `hasLocalAuthMutations` guard. */
9
9
  type LocalAuthMutations = Pick<UserAuthManager, 'addUser' | 'deleteUser' | 'rotatePassword' | 'clearBootstrapCredentialFile'>;
10
10
 
@@ -29,7 +29,7 @@ function usernameOf(row: ConfigModalRow | null): string | null {
29
29
  * `inspect()` is synchronous, so buildView reads it live every tick. All
30
30
  * mutations (add-user, rotate-password, delete-user, clear-bootstrap-file)
31
31
  * dispatch through the existing `/local-auth` command rather than touching
32
- * the auth manager directly — the command opens masked password entry for
32
+ * the auth manager directly, the command opens masked password entry for
33
33
  * add-user/rotate-password when no password argument is supplied, which is
34
34
  * exactly how the retired panel kept plaintext out of history and the
35
35
  * transcript. This surface never renders, accepts, or holds a password.
@@ -37,7 +37,7 @@ function usernameOf(row: ConfigModalRow | null): string | null {
37
37
  class LocalAuthModalSurface implements ConfigModalSurface {
38
38
  readonly name = 'local-auth-modal';
39
39
  readonly title = 'Local Auth';
40
- /** Cached from the last buildView() — read by the 'b' action's enabledFor,
40
+ /** Cached from the last buildView(), read by the 'b' action's enabledFor,
41
41
  * set fresh every tick (buildView always runs before enabledFor is
42
42
  * consulted; see settings-sync-modal's `hasStaged` for the same idiom). */
43
43
  private bootstrapPresent = false;
@@ -97,7 +97,7 @@ class LocalAuthModalSurface implements ConfigModalSurface {
97
97
  // which renders on the LocalAuthPanel and cannot draw or capture input
98
98
  // underneath this fullscreen modal. Point the operator at the command
99
99
  // (which opens masked entry) rather than dispatching it into a hidden
100
- // surface — the secure flow stays a keystroke away, just not from here.
100
+ // surface, the secure flow stays a keystroke away, just not from here.
101
101
  case 'add-user':
102
102
  ctx.print('To add a user securely, run /local-auth add-user <username> (opens masked password entry).');
103
103
  ctx.setStatus('Run /local-auth add-user <username> for masked entry.');
@@ -46,7 +46,7 @@ const KINDS: readonly EcosystemEntryKind[] = ['plugin', 'skill', 'hook-pack', 'p
46
46
  * destructive confirm folded into a modal).
47
47
  *
48
48
  * Honest empty-state: the panel's original "No curated marketplace
49
- * entries found yet." copy implied a curated remote catalog. It isn't one —
49
+ * entries found yet." copy implied a curated remote catalog. It isn't one,
50
50
  * loadEcosystemCatalog only ever reads .goodvibes/ecosystem/<kind>s.json under
51
51
  * the project/home, populated solely by `/marketplace publish` and
52
52
  * `/marketplace bundle import`. The empty-state copy below (locked byte-for-byte
@@ -126,7 +126,7 @@ class MarketplaceModalSurface implements ConfigModalSurface {
126
126
  if (!this.deps.ecosystemPaths) {
127
127
  rows.push(infoRow('empty:unwired', 'Marketplace catalog roots aren’t wired into this session, so there’s nothing to read yet.'));
128
128
  } else {
129
- rows.push(infoRow('empty:0', 'This is your local plugin, skill, hook-pack, and policy-pack catalog — not a remote store.'));
129
+ rows.push(infoRow('empty:0', 'This is your local plugin, skill, hook-pack, and policy-pack catalog; not a remote store.'));
130
130
  rows.push(infoRow('empty:1', 'It’s empty because nothing has been published or imported into this workspace yet. Entries appear here once you publish a local component or import a bundle.'));
131
131
  }
132
132
  rows.push(infoRow('empty:title', 'Populate it', { bold: true }));
@@ -152,7 +152,7 @@ class MarketplaceModalSurface implements ConfigModalSurface {
152
152
  rows.push(infoRow(`issue:${i}`, `⚠ ${issue}`, { fg: MODAL_TONES.warn }));
153
153
  }
154
154
 
155
- // Catalog list — selection-blind: fold provenance/compat/risk/state into the label.
155
+ // Catalog list, selection-blind: fold provenance/compat/risk/state into the label.
156
156
  for (const row of this.rows) {
157
157
  const review = row.review;
158
158
  const provenance = row.entry.provenance ?? 'local';