@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,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // checkpoint-runtime.ts — /checkpoints, /checkpoint
2
+ // checkpoint-runtime.ts, /checkpoints, /checkpoint
3
3
  //
4
4
  // UX over WorkspaceCheckpointManager (@pellux/goodvibes-sdk/platform/workspace),
5
5
  // the whole-workspace, git-backed snapshot engine wired onto RuntimeServices as
@@ -8,7 +8,7 @@
8
8
  //
9
9
  // Restoring a checkpoint is now done through the unified, message-anchored
10
10
  // /rewind (rewind-runtime.ts), which rewinds files AND/OR conversation to a
11
- // completed turn — reusing this same checkpoint store for the files half.
11
+ // completed turn, reusing this same checkpoint store for the files half.
12
12
  // ---------------------------------------------------------------------------
13
13
 
14
14
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
@@ -77,7 +77,7 @@ export function registerCheckpointRuntimeCommands(registry: CommandRegistry): vo
77
77
  // them would cost one diff spawn per checkpoint (O(checkpoints)), which
78
78
  // stops being cheap once there are more than a handful. /rewind <id>
79
79
  // loads exactly one diff, so the exact file list is available there.
80
- ctx.print('Use /rewind to preview and restore a completed turn (files and/or conversation) — it reuses these checkpoints for the files half. With no completed turns recorded this run (e.g. right after a restart), /rewind falls back to restoring one of these checkpoints directly, by number or id — files only, no conversation state.');
80
+ ctx.print('Use /rewind to preview and restore a completed turn (files and/or conversation); it reuses these checkpoints for the files half. With no completed turns recorded this run (e.g. right after a restart), /rewind falls back to restoring one of these checkpoints directly, by number or id; files only, no conversation state.');
81
81
  },
82
82
  });
83
83
 
@@ -96,7 +96,7 @@ export function registerCheckpointRuntimeCommands(registry: CommandRegistry): vo
96
96
  try {
97
97
  const checkpoint = await mgr.create({ kind: 'manual', label, retentionClass: 'forensic' });
98
98
  if (!checkpoint) {
99
- ctx.print('No changes since the last checkpoint — nothing to save.');
99
+ ctx.print('No changes since the last checkpoint; nothing to save.');
100
100
  return;
101
101
  }
102
102
  ctx.print(`Checkpoint created: ${shortId(checkpoint.id)} "${checkpoint.label}" (forensic retention).`);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ci-runtime.ts
3
3
  *
4
- * `/ci` — the CI-watch surface: a one-shot per-job status check (`ci.status`)
4
+ * `/ci`, the CI-watch surface: a one-shot per-job status check (`ci.status`)
5
5
  * and standing watches (`ci.watches.*`) over the operator wire (see
6
6
  * operator-rpc.ts for why this goes over HTTP rather than the in-process
7
7
  * OperatorClient facade). The doctrine, verbatim from the operator contract's
@@ -10,7 +10,7 @@
10
10
  * violations and force the verdict off 'passed'." `platform/ci-watch` (the
11
11
  * module implementing that doctrine server-side) is not in this SDK's public
12
12
  * export map yet, so the per-job rendering below is a thin, doctrine-faithful
13
- * mirror of the contract's own `ci.status`/`ci.watches.run` output — every job
13
+ * mirror of the contract's own `ci.status`/`ci.watches.run` output, every job
14
14
  * name and conclusion listed individually, never summarized.
15
15
  */
16
16
  import type { CommandRegistry } from '../command-registry.ts';
@@ -83,7 +83,7 @@ export function renderWatch(watch: CiWatchSubscription): string {
83
83
  export function registerCiRuntimeCommands(registry: CommandRegistry): void {
84
84
  registry.register({
85
85
  name: 'ci',
86
- description: 'CI-watch: one-shot per-job status and standing watches over the operator surface',
86
+ description: 'CI-watch: one-shot per-job status and standing watches over the operator panel',
87
87
  usage: 'status <repo-or-pr> | watch <repo-or-pr> <deliveryChannel> [--fix-session] | watches | unwatch <id>',
88
88
  argsHint: '[status|watch|watches|unwatch]',
89
89
  async handler(args, ctx) {
@@ -158,7 +158,7 @@ export function registerCiRuntimeCommands(registry: CommandRegistry): void {
158
158
  lines.push(`fix-session triggered: ${result.fixSessionTriggered ? 'yes' : 'no'}`);
159
159
  ctx.print(lines.join('\n'));
160
160
  // Route the spawned session through the shared one-key jump affordance
161
- // instead of printing the id for the user to retype — same attach flow
161
+ // instead of printing the id for the user to retype, same attach flow
162
162
  // as the accepted fix-this card.
163
163
  if (result.fixSessionId) ctx.armFixSessionAttach?.(result.fixSessionId);
164
164
  } catch (error) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * cluster-runtime.ts — `/cluster` in the TUI.
2
+ * cluster-runtime.ts, `/cluster` in the TUI.
3
3
  *
4
4
  * The same operations as the `goodvibes-daemon cluster` subcommands, reaching
5
5
  * the same daemon verbs through the same caller. There is no cluster logic in
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * The one honest difference is `join` without arguments. The CLI can stop and
10
10
  * ask which group and for the join key; a slash command has nowhere to ask, so
11
- * it requires `--group` and `--key` and says so — which is exactly what the
11
+ * it requires `--group` and `--key` and says so, which is exactly what the
12
12
  * shared caller already reports for any non-interactive invocation.
13
13
  */
14
14
  import { resolveDaemonHomeDir } from '@pellux/goodvibes-sdk/platform/workspace';
@@ -33,7 +33,7 @@ export function registerClusterRuntimeCommands(registry: CommandRegistry): void
33
33
  registry.register({
34
34
  name: 'cluster',
35
35
  description: 'Share inbound channel work with your other goodvibes machines on this network',
36
- usage: `[${CLUSTER_SUBCOMMANDS.join('|')}] — status is the default; `
36
+ usage: `[${CLUSTER_SUBCOMMANDS.join('|')}]: status is the default; `
37
37
  + 'add --host/--port/--token to reach a daemon on another machine',
38
38
  argsHint: `[${CLUSTER_SUBCOMMANDS.join('|')}]`,
39
39
  async handler(args, ctx) {
@@ -1,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // codebase-runtime.ts — /codebase
2
+ // codebase-runtime.ts, /codebase
3
3
  //
4
4
  // Explicit-query + transparency surface over the repo source-tree code index
5
5
  // (CodeIndexStore, @pellux/goodvibes-sdk/platform/state, landed on SDK main
@@ -10,10 +10,10 @@
10
10
  //
11
11
  // Mirrors /recall's transparency idiom (recall-query.ts's handleRecallVector:
12
12
  // status/rebuild) and /workstream's registerXRuntimeCommands function-export
13
- // shape: build (schedules the index build — visible as a fleet 'code-index'
13
+ // shape: build (schedules the index build, visible as a fleet 'code-index'
14
14
  // node while it runs), status (counts, skips, degradation state, last
15
15
  // build), search <query> (explicit retrieval, results labeled
16
- // 'lexical'|'semantic' honestly — never implied as more precise than they
16
+ // 'lexical'|'semantic' honestly, never implied as more precise than they
17
17
  // are). Passive auto-injection into coding turns and tool-site incremental
18
18
  // reindex followed later; `status` surfaces both honestly (the
19
19
  // auto-injection flag+setting gate, and the last reindex activity).
@@ -37,15 +37,15 @@ function formatBytes(bytes: number): string {
37
37
  /**
38
38
  * Honest one-line auto-injection state: both the (default-off)
39
39
  * `agent-passive-code-injection` feature flag AND storage.codeIndexEnabled must
40
- * be on for passive code injection to run — state which is off, and why.
40
+ * be on for passive code injection to run, state which is off, and why.
41
41
  */
42
42
  function renderAutoInjectionState(flagEnabled: boolean, settingEnabled: boolean): string {
43
43
  if (flagEnabled && settingEnabled) {
44
44
  return ' auto-injection: on (code hits may be injected into coding turns within the shared knowledge budget)';
45
45
  }
46
46
  const reasons: string[] = [];
47
- if (!flagEnabled) reasons.push('agent-passive-code-injection flag off (default off) — enable in the settings modal flags section');
48
- if (!settingEnabled) reasons.push('storage.codeIndexEnabled off — /config to change');
47
+ if (!flagEnabled) reasons.push('agent-passive-code-injection flag off (default off); enable in the settings modal flags section');
48
+ if (!settingEnabled) reasons.push('storage.codeIndexEnabled off: /config to change');
49
49
  return ` auto-injection: off (${reasons.join('; ')})`;
50
50
  }
51
51
 
@@ -58,7 +58,7 @@ function renderReindexActivity(activity: CodeIndexReindexActivity | null, now: n
58
58
  : activity.status === 'skipped'
59
59
  ? `skipped (${activity.mode ?? 'empty'})`
60
60
  : `indexed (${activity.mode ?? 'symbols'})`;
61
- return ` last reindex: ${activity.path} — ${detail}, ${agoSec}s ago`;
61
+ return ` last reindex: ${activity.path}; ${detail}, ${agoSec}s ago`;
62
62
  }
63
63
 
64
64
  interface CodeIndexStatusExtras {
@@ -69,18 +69,18 @@ interface CodeIndexStatusExtras {
69
69
 
70
70
  function renderCodeIndexStatus(stats: CodeIndexStats, configManager: Pick<ConfigManager, 'get'>, extras: CodeIndexStatusExtras): string {
71
71
  const lines: string[] = [];
72
- lines.push(`Code index — backend: ${stats.backend}, available: ${stats.available ? 'yes' : 'no'}`);
72
+ lines.push(`Code index: backend: ${stats.backend}, available: ${stats.available ? 'yes' : 'no'}`);
73
73
  lines.push(` path: ${stats.path}`);
74
74
  lines.push(` indexed: ${stats.indexedFiles} file(s), ${stats.indexedChunks} chunk(s), ${stats.dimensions} dims`);
75
75
  lines.push(` embedding provider: ${stats.embeddingProviderLabel} (${stats.embeddingProviderId})`);
76
76
  lines.push(
77
77
  stats.semanticRetrievalAvailable
78
78
  ? ' search results labeled: semantic'
79
- : ' search results labeled: lexical (hashed fallback — low precision)',
79
+ : ' search results labeled: lexical (hashed fallback; low precision)',
80
80
  );
81
81
  const autoStart = isCodeIndexAutoStartEnabled(configManager);
82
82
  lines.push(
83
- ` auto-build on startup: ${autoStart ? 'on' : 'off'} (storage.codeIndexEnabled, default off — /config to change)`,
83
+ ` auto-build on startup: ${autoStart ? 'on' : 'off'} (storage.codeIndexEnabled, default off; /config to change)`,
84
84
  );
85
85
  // Passive code auto-injection state (flag + setting) and the last tool-site reindex.
86
86
  lines.push(renderAutoInjectionState(extras.flagEnabled, autoStart));
@@ -91,9 +91,9 @@ function renderCodeIndexStatus(stats: CodeIndexStats, configManager: Pick<Config
91
91
  );
92
92
  // Provider-space honesty (SDK finding): vectors embedded under a different
93
93
  // provider than the current default disable the vector search path until a
94
- // rebuild re-embeds — say so, in the store's own words.
94
+ // rebuild re-embeds, say so, in the store's own words.
95
95
  if (stats.embeddingProviderMismatch) {
96
- lines.push(` provider mismatch: ${stats.embeddingProviderMismatch} (vector search disabled — lexical fallback only)`);
96
+ lines.push(` provider mismatch: ${stats.embeddingProviderMismatch} (vector search disabled; lexical fallback only)`);
97
97
  }
98
98
 
99
99
  if (stats.building) {
@@ -115,7 +115,7 @@ function renderCodeIndexStatus(stats: CodeIndexStats, configManager: Pick<Config
115
115
  if (skip.chunkedByWindow) skipParts.push(`${skip.chunkedByWindow} windowed (no tree-sitter symbols)`);
116
116
  lines.push(skipParts.length > 0 ? ` skipped: ${skipParts.join(', ')}` : ' skipped: none');
117
117
  } else {
118
- lines.push(' last build: never — run /codebase build');
118
+ lines.push(' last build: never; run /codebase build');
119
119
  }
120
120
 
121
121
  if (stats.error) lines.push(` error: ${stats.error}`);
@@ -170,7 +170,7 @@ const USAGE = 'Usage:\n'
170
170
  export function registerCodebaseRuntimeCommands(registry: CommandRegistry): void {
171
171
  registry.register({
172
172
  name: 'codebase',
173
- description: 'Repo source-tree code index — build, inspect, and search',
173
+ description: 'Repo source-tree code index: build, inspect, and search',
174
174
  usage: 'build | status | search <query...> [--limit n]',
175
175
  argsHint: 'build | status | search <query>',
176
176
  handler(args: string[], ctx: CommandContext) {
@@ -201,7 +201,7 @@ export function registerCodebaseRuntimeCommands(registry: CommandRegistry): void
201
201
  return;
202
202
  }
203
203
  store.scheduleBuild();
204
- ctx.print('Build scheduled — track progress with /codebase status or the fleet panel (code-index node).');
204
+ ctx.print('Build scheduled: track progress with /codebase status or the fleet panel (code-index node).');
205
205
  return;
206
206
  }
207
207
 
@@ -217,7 +217,7 @@ export function registerCodebaseRuntimeCommands(registry: CommandRegistry): void
217
217
  const stats = store.stats();
218
218
  ctx.print(
219
219
  stats.indexedChunks === 0
220
- ? 'No results — the code index is empty. Run /codebase build first.'
220
+ ? 'No results: the code index is empty. Run /codebase build first.'
221
221
  : 'No matching chunks found.',
222
222
  );
223
223
  return;
@@ -18,13 +18,13 @@ export function registerConfigCommand(registry: CommandRegistry): void {
18
18
  argsHint: '[category|key] | set <key> <value>',
19
19
  async handler(args, ctx) {
20
20
  // An earlier replay fix: `/config set <key> <value>` used to fall through to
21
- // the workspace with the assignment silently ignored — the dishonest-
21
+ // the workspace with the assignment silently ignored, the dishonest-
22
22
  // fallthrough class. `set` is now a real verb.
23
23
  if (args[0] === 'set') {
24
24
  const key = args[1];
25
25
  const value = args.slice(2).join(' ');
26
26
  if (!key || value === '') {
27
- ctx.print('Usage: /config set <key> <value> — e.g. /config set display.themeMode light');
27
+ ctx.print('Usage: /config set <key> <value>; e.g. /config set display.themeMode light');
28
28
  return;
29
29
  }
30
30
  // A credential key must never take the generic path below: setDynamic
@@ -72,9 +72,9 @@ export function registerConfigCommand(registry: CommandRegistry): void {
72
72
  * writing it into a config file: the value goes to the secret store and the
73
73
  * config key keeps only a `goodvibes://secrets/...` reference to it.
74
74
  *
75
- * The entered value is never echoed. The transcript is a diagnostic surface —
75
+ * The entered value is never echoed. The transcript is a diagnostic surface,
76
76
  * it is scrolled back through, copied into support threads and captured in
77
- * screen recordings — so it gets the reference and the store key, never the
77
+ * screen recordings, so it gets the reference and the store key, never the
78
78
  * secret.
79
79
  *
80
80
  * With no secret manager in this runtime there is nowhere safe to put it, and
@@ -89,7 +89,7 @@ async function handleSecretConfigSet(
89
89
  const secretsManager = ctx.platform?.secretsManager;
90
90
  if (!secretsManager) {
91
91
  ctx.print(
92
- `${key} holds a credential, and this runtime has no secret store to put it in — `
92
+ `${key} holds a credential, and this runtime has no secret store to put it in; `
93
93
  + `refusing rather than writing it in cleartext into a config file.\n`
94
94
  + ` Store it with: /secrets set ${secretKey} <value>`,
95
95
  );
@@ -105,7 +105,7 @@ async function handleSecretConfigSet(
105
105
  const scope = defaultSecretBackedScope(key);
106
106
  ctx.print(
107
107
  `Set ${key}: stored in the ${scope} secret tier as ${secretKey} (value hidden).\n`
108
- + ` ${key} now holds the reference ${configValue} — the value itself is never written to a config file.`
108
+ + ` ${key} now holds the reference ${configValue}; the value itself is never written to a config file.`
109
109
  + (scope === 'daemon'
110
110
  ? '\n The daemon reads that tier, so this keeps working with this client closed.'
111
111
  : ''),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * connection-status.ts — honest connection state for the mail and calendar
2
+ * connection-status.ts, honest connection state for the mail and calendar
3
3
  * capabilities, derived from the daemon's own answer rather than re-decided
4
4
  * here.
5
5
  *
@@ -7,7 +7,7 @@
7
7
  * settings resolution, the credential read, the connectors, the confirmation
8
8
  * posture (see src/daemon/handlers/email and src/daemon/handlers/calendar).
9
9
  * The TUI holds no second copy of any of it. So "is mail connected?" is not a
10
- * question this file answers from config — it is a question it ASKS, by
10
+ * question this file answers from config, it is a question it ASKS, by
11
11
  * invoking the cheapest read verb and reading the failure code that comes back:
12
12
  *
13
13
  * EMAIL_NOT_CONFIGURED host/user are missing
@@ -23,7 +23,7 @@
23
23
  * Every `email.*` / `calendar.*` descriptor the SDK catalogs carries
24
24
  * `invokable: false`. On the generic HTTP/WS dispatch path that flag is checked
25
25
  * by `validateGatewayInvocation` BEFORE any handler lookup and answered with a
26
- * flat 400 `NOT_INVOKABLE` — so `sdk.operator.invoke('email.inbox.list', …)`
26
+ * flat 400 `NOT_INVOKABLE`, so `sdk.operator.invoke('email.inbox.list', …)`
27
27
  * cannot reach these verbs no matter what is configured, and a surface built on
28
28
  * it would be a dead button.
29
29
  *
@@ -32,7 +32,7 @@
32
32
  * own method works. This product registers those handlers into its own catalog
33
33
  * at composition time (`createDaemonHandlerComposition`, called by the shared
34
34
  * `createRuntimeServices` root that both the TUI and the daemon boot from), so
35
- * the in-process catalog is a live, correct route to the same code — the same
35
+ * the in-process catalog is a live, correct route to the same code, the same
36
36
  * seam `/review` already uses for `checkpoints.*`. That is what these surfaces
37
37
  * call.
38
38
  *
@@ -48,7 +48,7 @@ export type ConnectionSurface = 'mail' | 'calendar';
48
48
  * What a surface can be.
49
49
  *
50
50
  * `checking` exists because the probe is real I/O and the settings workspace
51
- * renders synchronously — a row has to say something true while the answer is
51
+ * renders synchronously, a row has to say something true while the answer is
52
52
  * in flight, and "checking" is true where "not configured" would be invented.
53
53
  */
54
54
  export type ConnectionState = 'ready' | 'needs-setup' | 'unreachable' | 'checking';
@@ -67,7 +67,7 @@ export function connectionSurfaceLabel(surface: ConnectionSurface): string {
67
67
  return surface === 'mail' ? 'Mail' : 'Calendar';
68
68
  }
69
69
 
70
- /** The read verb each surface is probed with — the cheapest read it has. */
70
+ /** The read verb each surface is probed with, the cheapest read it has. */
71
71
  export const CONNECTION_PROBE_METHOD = {
72
72
  mail: 'email.inbox.list',
73
73
  calendar: 'calendar.events.list',
@@ -78,12 +78,12 @@ export const CONNECTION_PROBE_METHOD = {
78
78
  *
79
79
  * The `surfaces.*` settings are daemon-owned by prefix (see the SDK's
80
80
  * `config-ownership`), so `/config set` on them lands in the daemon's own
81
- * store and keeps working with this client closed — which is the requirement.
81
+ * store and keeps working with this client closed, which is the requirement.
82
82
  *
83
83
  * The PASSWORDS now have it too, and these steps changed the round the platform
84
84
  * gave it to them. A credential is filed in the daemon's tier only when a
85
85
  * daemon-owned config path declares it, and the two keys this product's daemon
86
- * reads — `surfaces.email.password` and `surfaces.calendar.caldavPassword` —
86
+ * reads, `surfaces.email.password` and `surfaces.calendar.caldavPassword`,
87
87
  * were declared in neither `CONFIG_SCHEMA` nor the platform's non-schema
88
88
  * daemon-owned path list. `isDaemonOwnedSecretKey()` answered false for both,
89
89
  * so a `/secrets set` filed them in THIS client's store where the daemon never
@@ -144,7 +144,7 @@ export function daemonErrorCode(error: unknown): string | null {
144
144
  }
145
145
 
146
146
  /**
147
- * Turn a probe outcome into a status. Pure — the caller does the I/O, so every
147
+ * Turn a probe outcome into a status. Pure, the caller does the I/O, so every
148
148
  * daemon answer is exercised in tests without a daemon.
149
149
  *
150
150
  * `error === null` means the read verb returned. That is the only evidence
@@ -160,7 +160,7 @@ export function describeConnectionProbe(
160
160
  return {
161
161
  surface,
162
162
  state: 'ready',
163
- detail: `${label} is connected — the daemon reached the server and returned a result.`,
163
+ detail: `${label} is connected: the daemon reached the server and returned a result.`,
164
164
  nextActions: [],
165
165
  };
166
166
  }
@@ -215,7 +215,7 @@ export const READ_INVOCATION_CONTEXT = { context: { clientKind: 'tui' as const }
215
215
  * The daemon's register wrapper demands BOTH `body.confirm === true` and
216
216
  * `context.metadata.explicitUserRequest === true`. The second is set only on
217
217
  * paths where a person typed the command that performs the write, which is the
218
- * whole point of the flag — it is never set on a read or on a background
218
+ * whole point of the flag, it is never set on a read or on a background
219
219
  * refresh.
220
220
  */
221
221
  export const EXPLICIT_WRITE_INVOCATION_CONTEXT = {
@@ -225,7 +225,7 @@ export const EXPLICIT_WRITE_INVOCATION_CONTEXT = {
225
225
  /**
226
226
  * Probe one surface against the in-process gateway catalog.
227
227
  *
228
- * Asks for a single item — enough to prove the whole path (settings →
228
+ * Asks for a single item, enough to prove the whole path (settings →
229
229
  * credential → connector → server) without pulling a mailbox into memory.
230
230
  */
231
231
  export async function probeConnection(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * /context window — view, set, or clear a custom context window for the
2
+ * /context window, view, set, or clear a custom context window for the
3
3
  * current model.
4
4
  *
5
5
  * The override is stored by the SDK's ProviderRegistry (persisted under the
@@ -84,7 +84,7 @@ export function handleContextWindowSubcommand(args: readonly string[], ctx: Comm
84
84
  } else {
85
85
  const size = parseContextWindowSize(arg);
86
86
  if (size === null) {
87
- output = `Invalid size '${args[0]}'. Use a token count between 1 and ${MAX_CONTEXT_WINDOW_OVERRIDE.toLocaleString()} — e.g. 120000, 200k, 1m — or 'clear'.`;
87
+ output = `Invalid size '${args[0]}'. Use a token count between 1 and ${MAX_CONTEXT_WINDOW_OVERRIDE.toLocaleString()}, e.g. 120000, 200k, 1m, or 'clear'.`;
88
88
  } else {
89
89
  registry.setModelContextCap(model.registryKey, size);
90
90
  output = `Context window for ${model.displayName} set to ${size.toLocaleString()} tokens (was ${registry.getContextWindowForModel(model).toLocaleString()}). Clear with /context window clear.`;
@@ -1,11 +1,11 @@
1
1
  /**
2
- * cost-attribution-format.ts — pure rendering helpers for /cost attribution.
2
+ * cost-attribution-format.ts, pure rendering helpers for /cost attribution.
3
3
  *
4
4
  * cost.attribution.get (SDK 1.6.1) is honest-unpriced by design: an unknown
5
5
  * model contributes to unpricedRecordCount with a null cost rather than a
6
6
  * fabricated amount, and costState is 'priced' | 'estimated' | 'unpriced'
7
7
  * (a mix across contributors). These helpers preserve that distinction all
8
- * the way to the rendered line — "unpriced" always reads as unpriced,
8
+ * the way to the rendered line, "unpriced" always reads as unpriced,
9
9
  * "estimated" is always labeled, and a dollar figure only ever comes from a
10
10
  * real priced/estimated costUsd.
11
11
  */
@@ -21,7 +21,7 @@ export const COST_ATTRIBUTION_PRIMARY_DIMENSIONS: readonly CostAttributionDimens
21
21
  /**
22
22
  * Dimensions that exist on the wire but return honest-empty until their
23
23
  * emit sites tag records with this dimension. Queried the same as the
24
- * primary set, but rendered ONLY when non-empty — never a fabricated
24
+ * primary set, but rendered ONLY when non-empty, never a fabricated
25
25
  * "0 tool calls" section implying tool-level attribution works today.
26
26
  */
27
27
  export const COST_ATTRIBUTION_OPTIONAL_DIMENSIONS: readonly CostAttributionDimension[] = ['tool', 'hook', 'mcp'];
@@ -47,6 +47,6 @@ export function formatCostAttributionSection(result: CostAttributionResult, isOp
47
47
  for (const row of result.rows) {
48
48
  lines.push(` ${row.key.padEnd(24)} ${formatCostAmount(row.costUsd, row.costState).padEnd(20)} ${formatTokens(row.tokens)}`);
49
49
  }
50
- lines.push(` total: ${formatCostAmount(result.totalCostUsd, result.costState)} — ${result.pricedRecordCount} priced, ${result.unpricedRecordCount} unpriced record(s)`);
50
+ lines.push(` total: ${formatCostAmount(result.totalCostUsd, result.costState)}; ${result.pricedRecordCount} priced, ${result.unpricedRecordCount} unpriced record(s)`);
51
51
  return lines;
52
52
  }
@@ -11,7 +11,7 @@ import {
11
11
  } from './cost-attribution-format.ts';
12
12
 
13
13
  /**
14
- * /cost budget <usd> — makes the CostTrackerPanel's budget alert real.
14
+ * /cost budget <usd>, makes the CostTrackerPanel's budget alert real.
15
15
  * Opens the cost panel (creating it via the registered factory if not already
16
16
  * open) and sets its budget threshold directly, so the meter+alert already
17
17
  * built into CostTrackerPanel.render() (:266-290) actually fires. 0 disables
@@ -73,7 +73,7 @@ export function registerCostRuntimeCommands(registry: CommandRegistry): void {
73
73
  ctx.print(JSON.stringify(results, null, 2));
74
74
  return;
75
75
  }
76
- const lines: string[] = [`Cost Attribution — ${window}`];
76
+ const lines: string[] = [`Cost Attribution: ${window}`];
77
77
  for (const result of results) {
78
78
  const isOptional = (COST_ATTRIBUTION_OPTIONAL_DIMENSIONS as readonly string[]).includes(result.dimension);
79
79
  const section = formatCostAttributionSection(result, isOptional);
@@ -2,7 +2,7 @@ import type { CommandContext, CommandRegistry } from '../command-registry.ts';
2
2
  import { formatDeviceLine, resolveTokenByIdPrefix } from '@pellux/goodvibes-sdk/platform/pairing';
3
3
 
4
4
  /**
5
- * Register the /devices command — manage the per-device pairing tokens minted by
5
+ * Register the /devices command, manage the per-device pairing tokens minted by
6
6
  * the pairing surfaces. Mirrors the pairing.tokens.* gateway verbs the daemon
7
7
  * serves (list/rename/revoke/migrate/revoke-shared) so the terminal has the same
8
8
  * capability as the web app's device manager.
@@ -42,7 +42,7 @@ export function registerDevicesRuntimeCommands(registry: CommandRegistry): void
42
42
  }
43
43
  const resolved = resolveTokenByIdPrefix(pairingTokens.list(), idOrPrefix);
44
44
  if (!resolved.ok) {
45
- ctx.print(resolved.reason === 'ambiguous' ? `Ambiguous device id "${idOrPrefix}" — use more characters.` : `No device matches "${idOrPrefix}".`);
45
+ ctx.print(resolved.reason === 'ambiguous' ? `Ambiguous device id "${idOrPrefix}": use more characters.` : `No device matches "${idOrPrefix}".`);
46
46
  return;
47
47
  }
48
48
  pairingTokens.rename(resolved.token.id, name);
@@ -58,11 +58,11 @@ export function registerDevicesRuntimeCommands(registry: CommandRegistry): void
58
58
  }
59
59
  const resolved = resolveTokenByIdPrefix(pairingTokens.list(), idOrPrefix);
60
60
  if (!resolved.ok) {
61
- ctx.print(resolved.reason === 'ambiguous' ? `Ambiguous device id "${idOrPrefix}" — use more characters.` : `No device matches "${idOrPrefix}".`);
61
+ ctx.print(resolved.reason === 'ambiguous' ? `Ambiguous device id "${idOrPrefix}": use more characters.` : `No device matches "${idOrPrefix}".`);
62
62
  return;
63
63
  }
64
64
  const revoked = pairingTokens.revoke(resolved.token.id);
65
- ctx.print(revoked ? `Revoked "${resolved.token.name}" — its token stops working immediately.` : `Device "${resolved.token.name}" was already absent.`);
65
+ ctx.print(revoked ? `Revoked "${resolved.token.name}": its token stops working immediately.` : `Device "${resolved.token.name}" was already absent.`);
66
66
  return;
67
67
  }
68
68
 
@@ -82,7 +82,7 @@ export function registerDevicesRuntimeCommands(registry: CommandRegistry): void
82
82
  return;
83
83
  }
84
84
  pairingTokens.revokeLegacyShared();
85
- ctx.print('Revoked the legacy shared token — devices still on it must re-pair with their own token.');
85
+ ctx.print('Revoked the legacy shared token; devices still on it must re-pair with their own token.');
86
86
  return;
87
87
  }
88
88
 
@@ -95,7 +95,7 @@ function renderList(ctx: CommandContext, pairingTokens: NonNullable<CommandConte
95
95
  const list = pairingTokens.list();
96
96
  const lines: string[] = ['Paired devices:'];
97
97
  if (list.length === 0) {
98
- lines.push(' (none yet — pair one with /pair)');
98
+ lines.push(' (none yet: pair one with /pair)');
99
99
  } else {
100
100
  for (const token of list) lines.push(` ${formatDeviceLine(token)}`);
101
101
  }
@@ -103,7 +103,7 @@ function renderList(ctx: CommandContext, pairingTokens: NonNullable<CommandConte
103
103
  '',
104
104
  pairingTokens.isLegacyRevoked()
105
105
  ? 'Legacy shared token: revoked.'
106
- : 'Legacy shared token: active — run /devices migrate-shared then /devices revoke-shared to retire it.',
106
+ : 'Legacy shared token: active; run /devices migrate-shared then /devices revoke-shared to retire it.',
107
107
  );
108
108
  ctx.print(lines.join('\n'));
109
109
  }
@@ -7,7 +7,7 @@ import { requirePanelManager, requireSessionChangeTracker, requireShellPaths } f
7
7
  /**
8
8
  * Run a git command that lists changed file names, capturing stderr instead
9
9
  * of letting it fall through to the process's real stderr (which, for a
10
- * spawned child with no stdio option, is inherited from the parent — i.e.
10
+ * spawned child with no stdio option, is inherited from the parent, i.e.
11
11
  * written straight to the TUI's controlling terminal, corrupting the screen
12
12
  * outside the renderer's front/back-buffer diffing). Mirrors the 'staged'
13
13
  * subcommand's existing pattern below.
@@ -89,7 +89,7 @@ export function registerDiffRuntimeCommands(registry: CommandRegistry): void {
89
89
  const shellPaths = requireShellPaths(ctx);
90
90
  const workingDirectory = shellPaths.workingDirectory;
91
91
  // Gate before any git spawn happens (same defensive check /git already
92
- // has) — every subcommand below shells out to git, and without this
92
+ // has), every subcommand below shells out to git, and without this
93
93
  // they each produced a differently-shaped error for the same
94
94
  // not-a-git-repo condition.
95
95
  if (!GitService.isGitRepo(workingDirectory)) {
@@ -1,7 +1,7 @@
1
1
  import type { CommandRegistry } from '../command-registry.ts';
2
2
 
3
3
  /**
4
- * `/editor` — open the current composer draft in the user's $EDITOR / $VISUAL,
4
+ * `/editor`, open the current composer draft in the user's $EDITOR / $VISUAL,
5
5
  * then load the edited text back into the composer. The actual terminal
6
6
  * suspend/resume and buffer round-trip are wired in main.ts as the
7
7
  * `openComposerEditor` command action; this command is the front door for it.
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * Implements the Evaluation Harness commands:
5
5
  *
6
- * /eval list — List all available eval suites
7
- * /eval run <suite> — Run a named suite (or 'all')
8
- * /eval compare <baseline-file> — Compare last run against a baseline file
9
- * /eval gate <suite> — Run suite and apply CI gate (exits 1 on regression)
6
+ * /eval list , List all available eval suites
7
+ * /eval run <suite> , Run a named suite (or 'all')
8
+ * /eval compare <baseline-file>, Compare last run against a baseline file
9
+ * /eval gate <suite> , Run suite and apply CI gate (exits 1 on regression)
10
10
  */
11
11
 
12
12
  import type { SlashCommand, CommandContext } from '../command-registry.ts';
@@ -237,7 +237,7 @@ export function registerExperienceRuntimeCommands(registry: CommandRegistry): vo
237
237
  // download), not through a daemon verb, so this path needs no gateway.
238
238
  // Installation already provisions them and a daemon retries at boot;
239
239
  // `setup` here is the recovery act, and nothing downloads unless the user
240
- // typed it — see wake-provision-runner.ts.
240
+ // typed it, see wake-provision-runner.ts.
241
241
  const wakeSub = (args[1] ?? 'status').toLowerCase();
242
242
  const managedRoot = shellPaths.resolveUserPath('voice');
243
243
  const runner = {
@@ -7,7 +7,7 @@ export function registerGitRuntimeCommands(registry: CommandRegistry): void {
7
7
  registry.register({
8
8
  name: 'git',
9
9
  aliases: ['g'],
10
- description: 'Git repository commands — status, log, diff',
10
+ description: 'Git repository commands: status, log, diff',
11
11
  usage: '[status|log|diff]',
12
12
  argsHint: '[status|log|diff]',
13
13
  async handler(args, ctx) {
@@ -29,7 +29,7 @@ export function registerGitRuntimeCommands(registry: CommandRegistry): void {
29
29
  const st = await git.status();
30
30
  const lines: string[] = ['Git status:'];
31
31
  if (st.isClean()) {
32
- lines.push(' Working tree clean — nothing to commit.');
32
+ lines.push(' Working tree clean: nothing to commit.');
33
33
  } else {
34
34
  if (st.staged.length > 0) {
35
35
  lines.push(` Staged (${st.staged.length}):`);
@@ -65,7 +65,7 @@ export function registerGitRuntimeCommands(registry: CommandRegistry): void {
65
65
  }
66
66
  case 'diff': {
67
67
  // Route the full, uncapped working-tree diff (GitService.diffStructured
68
- // — parsed per-file/per-hunk with no size limit) into the real diff
68
+ //, parsed per-file/per-hunk with no size limit) into the real diff
69
69
  // panel. The old path sliced the raw text at 4,000 chars and printed a
70
70
  // stub; a large diff now renders complete.
71
71
  try {
@@ -3,11 +3,11 @@ import { getOperatorRpc, describeOperatorRpcError } from './operator-rpc.ts';
3
3
  import { renderWorkstreamGraphLines } from '../../panels/workstream-graph-render.ts';
4
4
 
5
5
  // ---------------------------------------------------------------------------
6
- // /graph — a workstream's task graph (fleet.graph.get) rendered legibly.
6
+ // /graph, a workstream's task graph (fleet.graph.get) rendered legibly.
7
7
  //
8
8
  // The observability-layer surface: nodes, edges, per-node states (ready /
9
9
  // running / blocked-with-"waiting on: X" / stalled / orphaned) and the elastic
10
- // pool posture ("N ready, M running, at cap (fleet.maxSize=N)") — the shape of
10
+ // pool posture ("N ready, M running, at cap (fleet.maxSize=N)"), the shape of
11
11
  // the dependency graph WITHOUT opening any transcript. The fix-phase chain's
12
12
  // task graph is one such workstream.
13
13
  // ---------------------------------------------------------------------------
@@ -20,7 +20,7 @@ function renderWidth(): number {
20
20
  export function registerGraphRuntimeCommands(registry: CommandRegistry): void {
21
21
  registry.register({
22
22
  name: 'graph',
23
- description: "Show a workstream's task graph — nodes, edges, states, and pool posture",
23
+ description: "Show a workstream's task graph: nodes, edges, states, and pool posture",
24
24
  usage: '<workstreamId>',
25
25
  argsHint: '<workstreamId>',
26
26
  async handler(args, ctx) {
@@ -8,7 +8,7 @@ export function registerGuidanceRuntimeCommands(registry: CommandRegistry): void
8
8
  registry.register({
9
9
  name: 'welcome',
10
10
  aliases: ['guide'],
11
- description: 'Open the product entry surface for the onboarding wizard, security, marketplace, remote, and operator workflows',
11
+ description: 'Open the product entry point for the onboarding wizard, security, marketplace, remote, and operator workflows',
12
12
  usage: '[open|print]',
13
13
  handler(args, ctx) {
14
14
  const sub = args[0] ?? 'open';
@@ -28,12 +28,12 @@ export function renderMetricMap(label: string, map: Record<string, unknown> | un
28
28
 
29
29
  /**
30
30
  * When a telemetry verb fails because the companion token lacks the required
31
- * scope, say exactly that — never render zeros in place of missing authority.
31
+ * scope, say exactly that, never render zeros in place of missing authority.
32
32
  * Returns the honest line, or null when the error is not a scope refusal.
33
33
  */
34
34
  export function telemetryScopeRefusalLine(error: unknown, what: string): string | null {
35
35
  if (error instanceof GoodVibesSdkError && (error.status === 401 || error.status === 403)) {
36
- return ` ${what}: unavailable — the companion token lacks the read:telemetry scope this data requires (daemon returned ${error.status}).`;
36
+ return ` ${what}: unavailable; the companion token lacks the read:telemetry scope this data requires (daemon returned ${error.status}).`;
37
37
  }
38
38
  return null;
39
39
  }