@pellux/goodvibes-tui 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/.goodvibes/GOODVIBES.md +1 -1
  2. package/.goodvibes/agents/reviewer.md +8 -8
  3. package/.goodvibes/skills/add-provider/SKILL.md +22 -22
  4. package/CHANGELOG.md +61 -0
  5. package/README.md +40 -29
  6. package/docs/README.md +1 -1
  7. package/docs/foundation-artifacts/README.md +5 -5
  8. package/docs/foundation-artifacts/operator-contract.json +123 -123
  9. package/package.json +12 -10
  10. package/scripts/postinstall.js +3 -3
  11. package/src/audio/activation-sound.ts +7 -7
  12. package/src/audio/capture.ts +7 -7
  13. package/src/audio/onnxruntime-assets.d.ts +1 -1
  14. package/src/audio/player.ts +4 -4
  15. package/src/audio/spoken-turn-wiring.ts +4 -4
  16. package/src/audio/voice-capture-wiring.ts +5 -5
  17. package/src/audio/voice-input-session.ts +3 -3
  18. package/src/audio/wake-inference.ts +13 -8
  19. package/src/audio/wake-runtime.ts +10 -10
  20. package/src/cli/completions/generate.ts +2 -2
  21. package/src/cli/doctor.ts +13 -13
  22. package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
  23. package/src/cli/entrypoint.ts +3 -3
  24. package/src/cli/help.ts +6 -6
  25. package/src/cli/hooks-command.ts +4 -4
  26. package/src/cli/hooks-report.ts +4 -4
  27. package/src/cli/launch-auto-update.ts +17 -17
  28. package/src/cli/management-commands.ts +8 -8
  29. package/src/cli/management-utils.ts +3 -3
  30. package/src/cli/management.ts +1 -1
  31. package/src/cli/plugin-bundles-command.ts +10 -10
  32. package/src/cli/plugin-command.ts +9 -9
  33. package/src/cli/service-posture.ts +1 -1
  34. package/src/cli/status.ts +10 -10
  35. package/src/cli/surface-command.ts +4 -4
  36. package/src/cli/tui-startup.ts +23 -23
  37. package/src/config/run-daemon-config-migration.ts +3 -3
  38. package/src/config/secret-config.ts +10 -10
  39. package/src/config/surface.ts +1 -1
  40. package/src/config/tui-extension-settings.ts +8 -8
  41. package/src/core/active-model-identity.ts +7 -7
  42. package/src/core/approval-alert.ts +5 -5
  43. package/src/core/bookmark-navigation.ts +3 -3
  44. package/src/core/budget-breach-notifier.ts +6 -6
  45. package/src/core/compaction-receipt.ts +8 -8
  46. package/src/core/composer-state.ts +2 -2
  47. package/src/core/context-usage.ts +1 -1
  48. package/src/core/conversation-compaction-render.ts +3 -3
  49. package/src/core/conversation-event-navigation.ts +2 -2
  50. package/src/core/conversation-fold.ts +9 -9
  51. package/src/core/conversation-line-cache.ts +14 -14
  52. package/src/core/conversation-render-context.ts +6 -6
  53. package/src/core/conversation-rendering.ts +27 -30
  54. package/src/core/conversation-search-expansion.ts +6 -6
  55. package/src/core/conversation-splash-state.ts +3 -3
  56. package/src/core/conversation-turn-structure.ts +13 -13
  57. package/src/core/conversation-types.ts +3 -3
  58. package/src/core/conversation-user-receipts.ts +5 -5
  59. package/src/core/conversation.ts +17 -17
  60. package/src/core/format-user-error.ts +5 -5
  61. package/src/core/long-task-notifier.ts +9 -9
  62. package/src/core/memory-diagnostics-gateway.ts +8 -8
  63. package/src/core/memory-provenance.ts +5 -5
  64. package/src/core/model-routing-chip.ts +3 -3
  65. package/src/core/pairing-tailscale-gateway.ts +3 -3
  66. package/src/core/permission-mode.ts +5 -5
  67. package/src/core/power-chip-source.ts +3 -3
  68. package/src/core/power-status.ts +8 -8
  69. package/src/core/rewind-receipt.ts +6 -6
  70. package/src/core/session-resume-core.ts +8 -8
  71. package/src/core/stream-event-wiring.ts +36 -36
  72. package/src/core/stream-stall-watchdog.ts +4 -4
  73. package/src/core/system-message-noise.ts +7 -7
  74. package/src/core/system-message-router.ts +10 -10
  75. package/src/core/terminal-notifier.ts +5 -5
  76. package/src/core/turn-budget-outcome.ts +5 -5
  77. package/src/core/turn-cancellation.ts +3 -3
  78. package/src/core/turn-event-wiring.ts +16 -16
  79. package/src/core/voice-capture-status.ts +2 -2
  80. package/src/core/voice-provision-gateway.ts +12 -12
  81. package/src/core/voice-provision-status.ts +19 -19
  82. package/src/core/voice-stt-gateway.ts +6 -6
  83. package/src/core/wake-provision-runner.ts +7 -7
  84. package/src/core/wake-provision-status.ts +17 -17
  85. package/src/core/workstream-notification.ts +8 -8
  86. package/src/export/gist-uploader.ts +7 -7
  87. package/src/input/autocomplete.ts +3 -3
  88. package/src/input/bookmark-modal.ts +1 -1
  89. package/src/input/command-args-hint.ts +2 -2
  90. package/src/input/command-reference.ts +9 -9
  91. package/src/input/command-registry.ts +32 -32
  92. package/src/input/commands/acp-runtime.ts +6 -6
  93. package/src/input/commands/calendar-runtime.ts +9 -9
  94. package/src/input/commands/channel-pairing.ts +11 -11
  95. package/src/input/commands/channel-runtime.ts +1 -1
  96. package/src/input/commands/checkin-runtime.ts +4 -4
  97. package/src/input/commands/checkpoint-runtime.ts +4 -4
  98. package/src/input/commands/ci-runtime.ts +4 -4
  99. package/src/input/commands/cluster-runtime.ts +3 -3
  100. package/src/input/commands/codebase-runtime.ts +16 -16
  101. package/src/input/commands/config.ts +6 -6
  102. package/src/input/commands/connection-status.ts +12 -12
  103. package/src/input/commands/context-window.ts +2 -2
  104. package/src/input/commands/cost-attribution-format.ts +4 -4
  105. package/src/input/commands/cost-runtime.ts +2 -2
  106. package/src/input/commands/devices-runtime.ts +7 -7
  107. package/src/input/commands/diff-runtime.ts +2 -2
  108. package/src/input/commands/editor-runtime.ts +1 -1
  109. package/src/input/commands/eval.ts +4 -4
  110. package/src/input/commands/experience-runtime.ts +1 -1
  111. package/src/input/commands/git-runtime.ts +3 -3
  112. package/src/input/commands/graph-runtime.ts +3 -3
  113. package/src/input/commands/guidance-runtime.ts +1 -1
  114. package/src/input/commands/health-metrics-format.ts +2 -2
  115. package/src/input/commands/health-runtime.ts +8 -8
  116. package/src/input/commands/hosted-runtime.ts +13 -13
  117. package/src/input/commands/image-runtime.ts +6 -6
  118. package/src/input/commands/intelligence-runtime.ts +2 -2
  119. package/src/input/commands/local-auth-runtime.ts +3 -3
  120. package/src/input/commands/local-provider-runtime.ts +3 -3
  121. package/src/input/commands/local-runtime.ts +7 -7
  122. package/src/input/commands/mail-runtime.ts +9 -9
  123. package/src/input/commands/mcp-runtime.ts +1 -1
  124. package/src/input/commands/memory.ts +13 -13
  125. package/src/input/commands/notify-runtime.ts +1 -1
  126. package/src/input/commands/operator-panel-runtime.ts +8 -8
  127. package/src/input/commands/operator-rpc.ts +3 -3
  128. package/src/input/commands/operator-runtime.ts +3 -3
  129. package/src/input/commands/palette-runtime.ts +1 -1
  130. package/src/input/commands/payment-card-intake.ts +17 -17
  131. package/src/input/commands/permissions-provenance.ts +7 -7
  132. package/src/input/commands/permissions-runtime.ts +1 -1
  133. package/src/input/commands/planning-runtime.ts +9 -9
  134. package/src/input/commands/platform-services-runtime.ts +2 -2
  135. package/src/input/commands/policy-dispatch.ts +6 -6
  136. package/src/input/commands/power-runtime.ts +6 -6
  137. package/src/input/commands/principals-runtime.ts +3 -3
  138. package/src/input/commands/product-runtime.ts +3 -3
  139. package/src/input/commands/profile-render.ts +13 -13
  140. package/src/input/commands/profile-runtime.ts +13 -13
  141. package/src/input/commands/profile-types.ts +13 -13
  142. package/src/input/commands/provider-accounts-runtime.ts +5 -5
  143. package/src/input/commands/provider.ts +10 -10
  144. package/src/input/commands/qrcode-runtime.ts +3 -3
  145. package/src/input/commands/queue-runtime.ts +6 -6
  146. package/src/input/commands/recall-files-config.ts +4 -4
  147. package/src/input/commands/recall-files-git.ts +3 -3
  148. package/src/input/commands/recall-files.ts +12 -12
  149. package/src/input/commands/recall-query.ts +3 -3
  150. package/src/input/commands/recall-review.ts +3 -3
  151. package/src/input/commands/recall-shared.ts +1 -1
  152. package/src/input/commands/relay-runtime.ts +5 -5
  153. package/src/input/commands/remote-runtime.ts +3 -3
  154. package/src/input/commands/review-runtime.ts +8 -8
  155. package/src/input/commands/rewind-runtime.ts +21 -21
  156. package/src/input/commands/runtime-services.ts +1 -2
  157. package/src/input/commands/schedule-nl.ts +2 -2
  158. package/src/input/commands/schedule-runtime.ts +2 -2
  159. package/src/input/commands/secret-runtime.ts +3 -3
  160. package/src/input/commands/session-content.ts +7 -7
  161. package/src/input/commands/session-picker-filter.ts +3 -3
  162. package/src/input/commands/session-workflow.ts +10 -10
  163. package/src/input/commands/session.ts +15 -15
  164. package/src/input/commands/settings-sync-runtime.ts +2 -2
  165. package/src/input/commands/share-runtime.ts +4 -4
  166. package/src/input/commands/shell-core.ts +11 -11
  167. package/src/input/commands/tasks-runtime.ts +4 -4
  168. package/src/input/commands/test-runtime.ts +6 -6
  169. package/src/input/commands/tts-runtime.ts +4 -4
  170. package/src/input/commands/update-runtime.ts +27 -27
  171. package/src/input/commands/websearch-runtime.ts +2 -2
  172. package/src/input/commands/work-plan-runtime.ts +2 -2
  173. package/src/input/commands/workstream-attempt-dependents.ts +4 -4
  174. package/src/input/commands/workstream-attempts.ts +16 -16
  175. package/src/input/commands/workstream-runtime.ts +36 -36
  176. package/src/input/commands/worktree-runtime.ts +6 -6
  177. package/src/input/composer-capture.ts +5 -5
  178. package/src/input/concealed-input.ts +2 -2
  179. package/src/input/config-modal-types.ts +16 -16
  180. package/src/input/config-modal.ts +30 -30
  181. package/src/input/daemon-owned-settings-descriptions.ts +4 -4
  182. package/src/input/delete-key-policy.ts +1 -1
  183. package/src/input/exec-env-scrub-config.ts +7 -7
  184. package/src/input/feature-unit-layout.ts +5 -5
  185. package/src/input/feed-context-factory.ts +38 -38
  186. package/src/input/file-picker.ts +1 -1
  187. package/src/input/handler-command-route.ts +2 -2
  188. package/src/input/handler-content-actions.ts +8 -8
  189. package/src/input/handler-feed-routes.ts +13 -13
  190. package/src/input/handler-feed.ts +31 -31
  191. package/src/input/handler-interactions.ts +2 -2
  192. package/src/input/handler-modal-routes.ts +13 -13
  193. package/src/input/handler-modal-stack.ts +1 -1
  194. package/src/input/handler-modal-token-routes.ts +1 -1
  195. package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
  196. package/src/input/handler-picker-routes.ts +7 -7
  197. package/src/input/handler-prompt-buffer.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +12 -12
  199. package/src/input/handler-types.ts +3 -3
  200. package/src/input/handler-ui-state.ts +1 -1
  201. package/src/input/handler.ts +9 -9
  202. package/src/input/input-history.ts +1 -1
  203. package/src/input/keybindings.ts +13 -13
  204. package/src/input/kill-ring.ts +7 -11
  205. package/src/input/model-picker-filter.ts +3 -3
  206. package/src/input/model-picker-items.ts +5 -5
  207. package/src/input/model-picker-types.ts +2 -2
  208. package/src/input/model-picker.ts +18 -18
  209. package/src/input/onboarding/onboarding-feature-units.ts +9 -13
  210. package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
  211. package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
  212. package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
  213. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
  214. package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
  215. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
  216. package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
  217. package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
  218. package/src/input/panel-integration-actions.ts +3 -3
  219. package/src/input/panel-mouse-geometry.ts +1 -1
  220. package/src/input/panel-paste-flood-guard.ts +9 -9
  221. package/src/input/payments-config.ts +15 -15
  222. package/src/input/profile-picker-modal.ts +1 -1
  223. package/src/input/provider-key-intake.ts +9 -9
  224. package/src/input/relay-settings-descriptions.ts +3 -3
  225. package/src/input/sandbox-exec-config.ts +9 -9
  226. package/src/input/search.ts +18 -18
  227. package/src/input/selection-modal-queue.ts +10 -10
  228. package/src/input/selection-modal.ts +2 -2
  229. package/src/input/session-picker-modal.ts +7 -7
  230. package/src/input/settings-modal-activation.ts +1 -1
  231. package/src/input/settings-modal-adjustment.ts +2 -2
  232. package/src/input/settings-modal-commit.ts +6 -6
  233. package/src/input/settings-modal-connections.ts +2 -2
  234. package/src/input/settings-modal-data.ts +29 -29
  235. package/src/input/settings-modal-mutations.ts +7 -7
  236. package/src/input/settings-modal-reset.ts +3 -3
  237. package/src/input/settings-modal-search.ts +6 -6
  238. package/src/input/settings-modal-secrets.ts +3 -3
  239. package/src/input/settings-modal-types.ts +16 -16
  240. package/src/input/settings-modal.ts +4 -4
  241. package/src/input/voice-local-settings.ts +3 -3
  242. package/src/input/worktree-setup-config.ts +8 -8
  243. package/src/main.ts +15 -15
  244. package/src/panels/agent-inspector-shared.ts +5 -5
  245. package/src/panels/base-panel.ts +3 -3
  246. package/src/panels/builtin/agent.ts +3 -3
  247. package/src/panels/builtin/development.ts +4 -4
  248. package/src/panels/builtin/knowledge.ts +1 -1
  249. package/src/panels/builtin/operations.ts +12 -12
  250. package/src/panels/builtin/session.ts +8 -8
  251. package/src/panels/builtin/shared.ts +6 -6
  252. package/src/panels/builtin-modals.ts +8 -8
  253. package/src/panels/confirm-state.ts +5 -5
  254. package/src/panels/cost-tracker-panel.ts +22 -22
  255. package/src/panels/diff-panel.ts +20 -20
  256. package/src/panels/diff-review-model.ts +5 -5
  257. package/src/panels/diff-review-panel.ts +5 -5
  258. package/src/panels/eval-registry.ts +2 -2
  259. package/src/panels/expandable-list-panel.ts +5 -5
  260. package/src/panels/fleet-acts.ts +20 -20
  261. package/src/panels/fleet-deep-link.ts +5 -5
  262. package/src/panels/fleet-gateway.ts +12 -12
  263. package/src/panels/fleet-observed-render.ts +11 -11
  264. package/src/panels/fleet-panel-format.ts +14 -14
  265. package/src/panels/fleet-panel-worktree-detail.ts +8 -8
  266. package/src/panels/fleet-panel.ts +34 -34
  267. package/src/panels/fleet-read-model.ts +49 -49
  268. package/src/panels/fleet-spawn.ts +15 -15
  269. package/src/panels/fleet-steer.ts +7 -7
  270. package/src/panels/fleet-stop.ts +5 -5
  271. package/src/panels/fleet-tabs.ts +14 -14
  272. package/src/panels/fleet-transcript.ts +26 -26
  273. package/src/panels/git-panel.ts +8 -8
  274. package/src/panels/hosted-session-feed.ts +13 -13
  275. package/src/panels/hosted-session-panel.ts +7 -7
  276. package/src/panels/index.ts +1 -1
  277. package/src/panels/local-auth-panel.ts +15 -15
  278. package/src/panels/memory-consolidation-gateway.ts +8 -8
  279. package/src/panels/modals/devices-modal.ts +8 -8
  280. package/src/panels/modals/hooks-modal.ts +1 -1
  281. package/src/panels/modals/keybindings-modal.ts +5 -5
  282. package/src/panels/modals/knowledge-modal.ts +2 -2
  283. package/src/panels/modals/local-auth-modal.ts +4 -4
  284. package/src/panels/modals/marketplace-modal.ts +3 -3
  285. package/src/panels/modals/memory-modal.ts +19 -19
  286. package/src/panels/modals/modal-surface-helpers.ts +1 -1
  287. package/src/panels/modals/modal-theme.ts +3 -3
  288. package/src/panels/modals/pairing-modal.ts +19 -19
  289. package/src/panels/modals/planning-modal.ts +4 -4
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * ## The shapes come from the contract, not from a copy of it
8
8
  *
9
- * Every type below is derived from `OperatorMethodOutput<'profile.…'>` — the
9
+ * Every type below is derived from `OperatorMethodOutput<'profile.…'>`, the
10
10
  * types generated from the SDK's own output schemas
11
11
  * (`platform/control-plane/method-catalog-owner-profile.ts`). Nothing here
12
12
  * restates a field name, so this file cannot drift from the contract: if a
@@ -20,11 +20,11 @@
20
20
  * matching exported Zod schema and `buildSchemaRegistry` silently skips the
21
21
  * rest. Measured against the installed contracts package: 5 of 452 method ids
22
22
  * have one, and no `profile.*` verb is among them. So response validation is
23
- * not a safety net this command can lean on — for these verbs or for most
23
+ * not a safety net this command can lean on, for these verbs or for most
24
24
  * others.
25
25
  *
26
- * So a daemon on a different version — or a 200 from something that is not this
27
- * daemon at all — would otherwise reach a renderer and throw on a missing array,
26
+ * So a daemon on a different version, or a 200 from something that is not this
27
+ * daemon at all, would otherwise reach a renderer and throw on a missing array,
28
28
  * which in a slash command means a stack trace instead of an answer. Each `toX`
29
29
  * function does the cast to `Record<string, unknown>` in ONE place, checks every
30
30
  * property a renderer will read, and returns {@link MALFORMED} when anything is
@@ -66,16 +66,16 @@ type UnionKeys<T> = T extends unknown ? keyof T : never;
66
66
  * carries alone. Four ways a stale key can arrive, all compiled against this
67
67
  * repo's TypeScript with a `profile.forget`-shaped input:
68
68
  *
69
- * 1. written inline in a fresh literal — parameter typing already rejects
70
- * 2. written inline BESIDE a spread — parameter typing already rejects
71
- * 3. body built as a variable first — SLIPS PAST parameter typing
72
- * 4. carried in by the spread source's type — SLIPS PAST parameter typing
69
+ * 1. written inline in a fresh literal , parameter typing already rejects
70
+ * 2. written inline BESIDE a spread , parameter typing already rejects
71
+ * 3. body built as a variable first , SLIPS PAST parameter typing
72
+ * 4. carried in by the spread source's type, SLIPS PAST parameter typing
73
73
  *
74
74
  * A spread literal is not uniformly unchecked, which is the easy thing to get
75
75
  * wrong: anything written inline in one is still checked normally, and only what
76
76
  * arrives THROUGH the spread escapes, because it belongs to the source's type
77
77
  * rather than to the literal. Rows 3 and 4 are the two nothing else catches, and
78
- * this guard rejects both with TS2345 — measured, not reasoned about.
78
+ * this guard rejects both with TS2345, measured, not reasoned about.
79
79
  *
80
80
  * That is not hypothetical: `profile.forget` really did retire `lineIndex`, and
81
81
  * a body built one line earlier would have carried it silently past a correctly
@@ -83,7 +83,7 @@ type UnionKeys<T> = T extends unknown ? keyof T : never;
83
83
  * to seed; this closes the shape.
84
84
  *
85
85
  * There is a second reason it earns its place here. The SDK's `invoke` is
86
- * OVERLOADED — a typed signature plus a loose
86
+ * OVERLOADED, a typed signature plus a loose
87
87
  * `invoke<T = unknown>(methodId: string, input?: Record<string, unknown>)`. At a
88
88
  * bare call site a body the typed overload rejects does not raise an
89
89
  * excess-property error at all; overload resolution simply falls through to the
@@ -107,7 +107,7 @@ export type ExactProfileInput<TVerb extends ProfileVerb, TBody> =
107
107
  export type ProfileDocumentView = OperatorMethodOutput<'profile.read'>;
108
108
 
109
109
  /**
110
- * Load state — what `profile.status` answers, and the `state` half of a read.
110
+ * Load state, what `profile.status` answers, and the `state` half of a read.
111
111
  *
112
112
  * `kind` is `loaded` | `unavailable` | `disabled`. The counts belong to
113
113
  * `loaded` and `reason` to `unavailable`. There is no value property anywhere
@@ -124,7 +124,7 @@ export type ProfileWriteResultView = OperatorMethodOutput<'profile.set'>;
124
124
 
125
125
  /** One `## ` section, with the tier its content belongs to. */
126
126
  export type ProfileSectionView = ProfileDocumentView['sections'][number];
127
- /** One mechanical field. `valid: false` still carries the value — see §4.3. */
127
+ /** One mechanical field. `valid: false` still carries the value, see §4.3. */
128
128
  export type ProfileFieldView = ProfileSectionView['fields'][number];
129
129
  /** One prose line, preserved as written. */
130
130
  export type ProfileLineView = ProfileSectionView['prose'][number];
@@ -355,7 +355,7 @@ export function toProfileProvenanceReport(value: unknown): Checked<ProfileProven
355
355
  const superseded = checkedArray(record.superseded, toSuperseded);
356
356
  if (superseded === MALFORMED) return MALFORMED;
357
357
  // Platform runtime 2.0.8: the contract declares provenance nullable and
358
- // always present — null IS the answer for a hand-edited field.
358
+ // always present, null IS the answer for a hand-edited field.
359
359
  return { fieldId, present, handEdited, provenance: provenance ?? null, superseded };
360
360
  }
361
361
 
@@ -25,7 +25,7 @@ function findProviderAccountRecord(
25
25
  /**
26
26
  * Present a record's recommended actions as executable rows. A recommended
27
27
  * action that carries a structured command becomes a press-Enter row that RUNS
28
- * that command through the command registry — never a line the user has to
28
+ * that command through the command registry, never a line the user has to
29
29
  * retype. Actions with no command are genuinely out-of-product steps, so they
30
30
  * stay as plain (non-executing) rows. When there is no interactive selection
31
31
  * surface, each action is printed honestly instead.
@@ -68,7 +68,7 @@ export function presentRecommendedActions(
68
68
  if (action.command) {
69
69
  const args = [...action.command.args];
70
70
  void (ctx.executeCommand?.(action.command.name, args)
71
- ?? Promise.resolve(ctx.print(`Cannot run /${action.command.name} — command execution is unavailable here.`)));
71
+ ?? Promise.resolve(ctx.print(`Cannot run /${action.command.name}: command execution is unavailable here.`)));
72
72
  return;
73
73
  }
74
74
  ctx.print(action.description);
@@ -81,7 +81,7 @@ export function presentRecommendedActions(
81
81
  'Recommended actions:',
82
82
  ...actions.map((action) => (
83
83
  action.command
84
- ? ` • ${action.description} — /${action.command.name}${action.command.args.length > 0 ? ` ${action.command.args.join(' ')}` : ''}`
84
+ ? ` • ${action.description}: /${action.command.name}${action.command.args.length > 0 ? ` ${action.command.args.join(' ')}` : ''}`
85
85
  : ` • ${action.description} (manual step)`
86
86
  )),
87
87
  ].join('\n'));
@@ -155,9 +155,9 @@ export function registerProviderAccountsRuntimeCommands(registry: CommandRegistr
155
155
  ...(record.fallbackRoute ? [` fallbackRoute: ${record.fallbackRoute}`] : []),
156
156
  ...(record.fallbackRisk ? [` fallbackRisk: ${record.fallbackRisk}`] : []),
157
157
  ...(record.expiresAt ? [` expiresAt: ${new Date(record.expiresAt).toISOString()}`] : []),
158
- ...record.routeRecords.map((route) => ` route ${route.route}: usable=${route.usable ? 'yes' : 'no'} freshness=${route.freshness} — ${route.detail}`),
158
+ ...record.routeRecords.map((route) => ` route ${route.route}: usable=${route.usable ? 'yes' : 'no'} freshness=${route.freshness}; ${route.detail}`),
159
159
  ...record.routeRecords.flatMap((route) => route.issues.map((issue) => ` issue: ${issue}`)),
160
- ...record.usageWindows.map((entry) => ` window: ${entry.label} — ${entry.detail}`),
160
+ ...record.usageWindows.map((entry) => ` window: ${entry.label}; ${entry.detail}`),
161
161
  ...record.issues.map((issue) => ` issue: ${issue}`),
162
162
  ...record.notes.map((note) => ` note: ${note}`),
163
163
  ].join('\n'));
@@ -3,11 +3,11 @@
3
3
  *
4
4
  * Implements the Provider Optimizer panel commands:
5
5
  *
6
- * /provider optimizer on|off — Enable or disable the provider optimizer
7
- * /provider route auto|manual — Set optimizer routing mode
8
- * /provider explain-route — Print current route explanation
9
- * /provider pin <provider:model> — Pin routing to a specific provider/model
10
- * /provider fallback test — Simulate the fallback chain
6
+ * /provider optimizer on|off , Enable or disable the provider optimizer
7
+ * /provider route auto|manual , Set optimizer routing mode
8
+ * /provider explain-route , Print current route explanation
9
+ * /provider pin <provider:model>, Pin routing to a specific provider/model
10
+ * /provider fallback test , Simulate the fallback chain
11
11
  *
12
12
  * When the optimizer is disabled, commands report its status and
13
13
  * explain-route still works (reads current model capabilities).
@@ -112,7 +112,7 @@ function handleOptimizerToggle(
112
112
  context.print(' Provider selection returns to manual-only mode. No automatic failover.');
113
113
  context.print(' Pinned targets and fallback log are preserved; re-enable to resume.');
114
114
  } else {
115
- context.print(`[provider] Optimizer already ${enable ? 'enabled' : 'disabled'} — no change.`);
115
+ context.print(`[provider] Optimizer already ${enable ? 'enabled' : 'disabled'}; no change.`);
116
116
  }
117
117
  }
118
118
 
@@ -136,7 +136,7 @@ function handleRoute(
136
136
 
137
137
  if (!optimizer.enabled) {
138
138
  context.print(
139
- '[provider] Optimizer is off — routing mode recorded but failover will not fire until optimizer is enabled.',
139
+ '[provider] Optimizer is off: routing mode recorded but failover will not fire until optimizer is enabled.',
140
140
  );
141
141
  context.print(' Enable with: /provider optimizer on');
142
142
  }
@@ -273,7 +273,7 @@ async function handlePin(
273
273
  // Enable optimizer if it's off
274
274
  if (!optimizer.enabled) {
275
275
  optimizer.setEnabled(true);
276
- context.print('⚠ Optimizer was disabled — enabling it for pin to take effect.');
276
+ context.print('⚠ Optimizer was disabled: enabling it for pin to take effect.');
277
277
  }
278
278
 
279
279
  optimizer.pin(match.providerId, match.modelId);
@@ -299,7 +299,7 @@ function handleFallbackTest(
299
299
  return;
300
300
  }
301
301
 
302
- context.print('[provider] Simulating fallback chain (empty request profile — no requirements)...');
302
+ context.print('[provider] Simulating fallback chain (empty request profile; no requirements)...');
303
303
 
304
304
  const result: FallbackTestResult = optimizer.testFallback();
305
305
 
@@ -360,7 +360,7 @@ function handleFallbackTest(
360
360
  // ---------------------------------------------------------------------------
361
361
 
362
362
  /**
363
- * providerCommand — The `/provider` slash command.
363
+ * providerCommand, The `/provider` slash command.
364
364
  *
365
365
  * Routes to subcommand handlers based on args[0].
366
366
  */
@@ -7,7 +7,7 @@ import { openModalCommand } from './runtime-services.ts';
7
7
  * `/qrcode` (no args, aliases /qr /pair) opens the device-pairing modal: a QR of
8
8
  * the `#pair=<token>` deep link plus the offer set. Each open mints its own
9
9
  * named per-device token, so `/qrcode regenerate` no longer rotates a shared
10
- * token — it simply re-opens the modal, which mints a fresh token and QR. The
10
+ * token, it simply re-opens the modal, which mints a fresh token and QR. The
11
11
  * previously-shown token stays valid until you revoke it in
12
12
  * /settings → security → devices.
13
13
  */
@@ -22,9 +22,9 @@ export function registerQrcodeRuntimeCommands(registry: CommandRegistry): void {
22
22
  if (args[0]?.toLowerCase() === 'regenerate') {
23
23
  // Each pairing-modal open mints its own token, so "regenerate" is just a
24
24
  // fresh open: the re-pull mints a new named token + QR in place. The
25
- // prior token is not rotated out from under a live device — revoke it
25
+ // prior token is not rotated out from under a live device, revoke it
26
26
  // explicitly in /settings → security → devices when you no longer need it.
27
- ctx.print('Opening a fresh pairing QR — it mints a new device token. Revoke old ones in /settings → security → devices.');
27
+ ctx.print('Opening a fresh pairing QR; it mints a new device token. Revoke old ones in /settings → security → devices.');
28
28
  openModalCommand(ctx, 'pairing-modal');
29
29
  return;
30
30
  }
@@ -1,12 +1,12 @@
1
1
  import type { CommandRegistry } from '../command-registry.ts';
2
2
 
3
3
  // ---------------------------------------------------------------------------
4
- // /queue — the mid-turn message queue as an editable list.
4
+ // /queue, the mid-turn message queue as an editable list.
5
5
  //
6
6
  // Messages typed while a turn is streaming are QUEUED (they deliver after the
7
7
  // turn). Until a message is delivered it stays editable and deletable via the
8
8
  // SDK's editQueuedMessage / deleteQueuedMessage verbs; a delivered message has
9
- // left the queue and is no longer listed — delivery is immutability. This
9
+ // left the queue and is no longer listed, delivery is immutability. This
10
10
  // command is the editable interface over the same list the composer renders.
11
11
  // ---------------------------------------------------------------------------
12
12
 
@@ -14,7 +14,7 @@ export function registerQueueRuntimeCommands(registry: CommandRegistry): void {
14
14
  registry.register({
15
15
  name: 'queue',
16
16
  aliases: ['q'],
17
- description: 'Mid-turn message queue — list, edit, or delete still-undelivered messages',
17
+ description: 'Mid-turn message queue: list, edit, or delete still-undelivered messages',
18
18
  usage: '[list | edit <n> <text> | delete <n>]',
19
19
  argsHint: '[list|edit <n> <text>|delete <n>]',
20
20
  handler(args, ctx) {
@@ -26,7 +26,7 @@ export function registerQueueRuntimeCommands(registry: CommandRegistry): void {
26
26
  ctx.print('No queued messages. (Messages typed while a turn is streaming queue here until it finishes.)');
27
27
  return;
28
28
  }
29
- const lines = [`Queued messages (${list.length}) — editable until delivered:`];
29
+ const lines = [`Queued messages (${list.length}): editable until delivered:`];
30
30
  list.forEach((m, i) => lines.push(` ${i + 1}. ${m.text}`));
31
31
  lines.push('Use /queue edit <n> <new text> or /queue delete <n>.');
32
32
  ctx.print(lines.join('\n'));
@@ -47,7 +47,7 @@ export function registerQueueRuntimeCommands(registry: CommandRegistry): void {
47
47
  const ok = ctx.deleteQueuedMessage?.(target.id) ?? false;
48
48
  ctx.print(ok
49
49
  ? `Deleted queued message #${n}.`
50
- : `Could not delete message #${n} — it was already delivered (delivered messages are immutable).`);
50
+ : `Could not delete message #${n}; it was already delivered (delivered messages are immutable).`);
51
51
  return;
52
52
  }
53
53
 
@@ -60,7 +60,7 @@ export function registerQueueRuntimeCommands(registry: CommandRegistry): void {
60
60
  const ok = ctx.editQueuedMessage?.(target.id, text) ?? false;
61
61
  ctx.print(ok
62
62
  ? `Edited queued message #${n}.`
63
- : `Could not edit message #${n} — it was already delivered (delivered messages are immutable).`);
63
+ : `Could not edit message #${n}; it was already delivered (delivered messages are immutable).`);
64
64
  return;
65
65
  }
66
66
 
@@ -1,8 +1,8 @@
1
1
  /**
2
- * recall-files-config.ts — TUI-local synthetic setting for the memory file
2
+ * recall-files-config.ts, TUI-local synthetic setting for the memory file
3
3
  * projection directory (`memory.projection.dir`).
4
4
  *
5
- * `memory.projection.dir` is not in the SDK's ConfigKey union — same
5
+ * `memory.projection.dir` is not in the SDK's ConfigKey union, same
6
6
  * situation as worktree.setup.commands (see worktree-setup-config.ts, which
7
7
  * this file mirrors): a brand-new top-level config section with no
8
8
  * DEFAULT_CONFIG entry, so ConfigManager.get()/set() path resolution can
@@ -10,7 +10,7 @@
10
10
  * degrades a resolution failure into an honest "Save failed" message.
11
11
  *
12
12
  * Default: `.goodvibes/memory/projection`, relative to the project working
13
- * directory — under the project's own `.goodvibes/` control directory,
13
+ * directory, under the project's own `.goodvibes/` control directory,
14
14
  * alongside the (separate) KV-state memory directory used by the state tool.
15
15
  */
16
16
  import type { ConfigKey, ConfigManager, ConfigSetting } from '@pellux/goodvibes-sdk/platform/config';
@@ -24,7 +24,7 @@ export const MEMORY_PROJECTION_DIR_SYNTHETIC_SETTING: ConfigSetting = {
24
24
  key: MEMORY_PROJECTION_DIR_CONFIG_KEY,
25
25
  type: 'string',
26
26
  default: MEMORY_PROJECTION_DIR_DEFAULT,
27
- description: '/recall files sync writes one markdown file per standing (project/team-scope) memory record here, and commits the directory when it sits inside a git repository. Relative paths resolve against the project working directory. /recall files review reads user edits back from this directory as proposals — a file edit or deletion never mutates the store directly.',
27
+ description: '/recall files sync writes one markdown file per standing (project/team-scope) memory record here, and commits the directory when it sits inside a git repository. Relative paths resolve against the project working directory. /recall files review reads user edits back from this directory as proposals; a file edit or deletion never mutates the store directly.',
28
28
  };
29
29
 
30
30
  /** Read the configured projection directory, falling back to the default for an absent/malformed value. */
@@ -1,10 +1,10 @@
1
1
  /**
2
- * recall-files-git.ts — the git seam for memory file projection.
2
+ * recall-files-git.ts, the git seam for memory file projection.
3
3
  *
4
4
  * The SDK owns the production seam now (`createMemoryProjectionGit`,
5
5
  * platform/state): it shells out to the system git, commits with a neutral
6
6
  * projection identity (never the operator's), tolerates an unchanged tree,
7
- * and — through `projectMemoryToFiles`'s ownership gate — only ever commits
7
+ * and, through `projectMemoryToFiles`'s ownership gate, only ever commits
8
8
  * to a repository whose toplevel IS the projection directory, initializing
9
9
  * one there when needed. A projection directory nested inside some other
10
10
  * checkout can never pollute that checkout. This module is a thin local
@@ -13,7 +13,7 @@
13
13
  import { createMemoryProjectionGit } from '@pellux/goodvibes-sdk/platform/state';
14
14
  import type { MemoryProjectionGit } from '@pellux/goodvibes-sdk/platform/state';
15
15
 
16
- /** The projection git seam (see module note — SDK-owned behavior). */
16
+ /** The projection git seam (see module note, SDK-owned behavior). */
17
17
  export function createSyncGitSeam(): MemoryProjectionGit {
18
18
  return createMemoryProjectionGit();
19
19
  }
@@ -1,14 +1,14 @@
1
1
  /**
2
- * recall-files.ts — `/recall files sync|review|apply`, the git-backed markdown
2
+ * recall-files.ts, `/recall files sync|review|apply`, the git-backed markdown
3
3
  * projection surface for standing (project/team-scope) memory records.
4
4
  *
5
5
  * Round-trip:
6
- * sync — project store records to `<dir>/<id>.md`, git-commit the directory
6
+ * sync , project store records to `<dir>/<id>.md`, git-commit the directory
7
7
  * when it sits inside a repo. Read-only against the store.
8
- * review — diff the on-disk projection against the current store and print
8
+ * review, diff the on-disk projection against the current store and print
9
9
  * the resulting proposals (a file edit -> 'update', a deleted file
10
- * for an in-scope record -> 'delete'). PURE — no store writes.
11
- * apply — re-diff fresh, then mutate the store ONLY for the proposal ids
10
+ * for an in-scope record -> 'delete'). PURE, no store writes.
11
+ * apply , re-diff fresh, then mutate the store ONLY for the proposal ids
12
12
  * the caller explicitly names (or --all), through the memory spine
13
13
  * client's own update/delete. Never a silent write.
14
14
  *
@@ -17,14 +17,14 @@
17
17
  * snapshot from an earlier `review` call.
18
18
  *
19
19
  * Routes through `getMemorySpine` (not the host-only `knowledgeApi.memory`)
20
- * per the SDK's memory-wire-full-detach decision — same as every other
20
+ * per the SDK's memory-wire-full-detach decision, same as every other
21
21
  * mutating `/recall` subcommand, so this fully detaches from the local store
22
22
  * file when a daemon has been adopted.
23
23
  *
24
24
  * The memory spine's wire `MemoryUpdatePatch` (SDK platform/runtime/memory-spine)
25
- * now carries validFrom/validUntil alongside scope/summary/detail/tags — a
25
+ * now carries validFrom/validUntil alongside scope/summary/detail/tags, a
26
26
  * number sets the bound, `null` clears it, and an omitted field leaves it
27
- * unchanged — so a proposal whose `desired` changes ONLY the temporal window
27
+ * unchanged, so a proposal whose `desired` changes ONLY the temporal window
28
28
  * applies for real over the wire, the same as any other field change.
29
29
  */
30
30
  import { existsSync } from 'node:fs';
@@ -61,7 +61,7 @@ export async function handleRecallFilesSync(args: string[], context: CommandCont
61
61
 
62
62
  try {
63
63
  // The SDK's ownership gate commits only to a repository whose toplevel IS
64
- // the projection directory (initializing one there when needed) — never
64
+ // the projection directory (initializing one there when needed), never
65
65
  // to a checkout the directory merely sits inside.
66
66
  const report = projectMemoryToFiles(records, dir, { git: createSyncGitSeam() });
67
67
  context.print(`[recall] Projected ${report.written.length} record(s) to ${report.dir}`);
@@ -102,7 +102,7 @@ export async function handleRecallFilesReview(args: string[], context: CommandCo
102
102
  if (proposals === null) return;
103
103
 
104
104
  if (proposals.length === 0) {
105
- context.print(`[recall] No changes — ${dir} matches the store.`);
105
+ context.print(`[recall] No changes: ${dir} matches the store.`);
106
106
  return;
107
107
  }
108
108
  context.print(`[recall] ${proposals.length} proposal(s) from ${dir}:`);
@@ -116,7 +116,7 @@ export async function handleRecallFilesApply(args: string[], context: CommandCon
116
116
 
117
117
  const applyAll = args.includes('--all') || args.includes('all');
118
118
  const ids = new Set(args.filter((a) => a !== '--all' && a !== 'all' && a !== '--dir' && !a.startsWith('.') && !a.startsWith('/')));
119
- // --dir's value (the token right after it) is not a proposal id — drop it.
119
+ // --dir's value (the token right after it) is not a proposal id, drop it.
120
120
  const dirIdx = args.indexOf('--dir');
121
121
  if (dirIdx !== -1 && args[dirIdx + 1]) ids.delete(args[dirIdx + 1]!);
122
122
 
@@ -178,5 +178,5 @@ export async function handleRecallFilesApply(args: string[], context: CommandCon
178
178
 
179
179
  context.print(`[recall] Applied ${applied.length}, skipped ${skipped.length}, failed ${failed.length}.`);
180
180
  for (const proposal of applied) context.print(` applied ${proposal.id} [${proposal.kind}]`);
181
- for (const { proposal, reason } of failed) context.print(` failed ${proposal.id} [${proposal.kind}] — ${reason}`);
181
+ for (const { proposal, reason } of failed) context.print(` failed ${proposal.id} [${proposal.kind}]: ${reason}`);
182
182
  }
@@ -5,7 +5,7 @@ import type { MemorySearchFilter } from '@pellux/goodvibes-sdk/platform/state';
5
5
  import { VALID_CLASSES, VALID_SCOPES, isValidClass, isValidScope, temporalStatusLabel } from './recall-shared.ts';
6
6
 
7
7
  /**
8
- * The local, host-only `MemoryApi` — kept for `/recall explain` and `/recall
8
+ * The local, host-only `MemoryApi`, kept for `/recall explain` and `/recall
9
9
  * vector` only. Both are ruled explicitly out of the wire catalog in
10
10
  * docs/decisions/2026-07-06-memory-wire-full-detach.md (SDK repo): `explain`
11
11
  * is a client-side projection over whatever read surface is active, not a
@@ -24,7 +24,7 @@ export function getMemoryApi(context: CommandContext): MemoryApi | null {
24
24
  }
25
25
 
26
26
  /**
27
- * The cross-surface memory spine client — routes local when offline/embedded,
27
+ * The cross-surface memory spine client, routes local when offline/embedded,
28
28
  * over the wire when a daemon has been adopted, never both. `/recall`'s
29
29
  * browse/link/queue/export/import subcommands use this so they never read a
30
30
  * divergent local copy while a daemon owns the canonical store.
@@ -196,7 +196,7 @@ export async function handleRecallLink(args: string[], context: CommandContext):
196
196
  }
197
197
  const link = await memory.link(fromId, toId, relation);
198
198
  if (!link) {
199
- context.print('[recall] Link failed — check that both IDs exist.');
199
+ context.print('[recall] Link failed: check that both IDs exist.');
200
200
  return;
201
201
  }
202
202
  context.print(`[recall] Linked: ${fromId} -> ${toId} [${relation}]`);
@@ -40,7 +40,7 @@ export async function handleRecallQueue(args: string[], context: CommandContext)
40
40
  }
41
41
  context.print(`[recall] Review queue (${queue.length}):`);
42
42
  for (const record of queue) {
43
- const reason = record.staleReason ? ` — ${record.staleReason}` : '';
43
+ const reason = record.staleReason ? `: ${record.staleReason}` : '';
44
44
  context.print(` ${record.id} [${record.scope}/${record.cls}] ${record.reviewState} ${record.confidence}% ${record.summary}${reason}${temporalStatusLabel(record)}`);
45
45
  }
46
46
  }
@@ -107,13 +107,13 @@ export function handleRecallExplain(args: string[], context: CommandContext): vo
107
107
  * Per-turn passive knowledge injection inspectability.
108
108
  *
109
109
  * With an explicit agent id, reads `AgentRecord.turnInjections`
110
- * via `context.ops.agentManager.exportState()` — the CommandContext-exposed
110
+ * via `context.ops.agentManager.exportState()`, the CommandContext-exposed
111
111
  * `ShellAgentManagerService` doesn't have a `getStatus`/`list` pair, but
112
112
  * `exportState()` returns the same full `AgentRecord[]` (it's what
113
113
  * compactConversation() already uses for the same reason).
114
114
  *
115
115
  * With NO agent id (wiring), renders the MAIN interactive session's own
116
- * per-turn injection ring — `Orchestrator.getTurnInjections()`, threaded onto
116
+ * per-turn injection ring, `Orchestrator.getTurnInjections()`, threaded onto
117
117
  * the command context as `session.getMainSessionTurnInjections`. As of the
118
118
  * main session DOES route through the passive-injection engine, so this is the
119
119
  * honest main-session default (previously there was no record source, so the
@@ -23,7 +23,7 @@ export function resolveBundlePath(pathArg: string, shellPaths: ShellPathService)
23
23
  }
24
24
 
25
25
  /**
26
- * Compact inline label for a record's temporal validity window — appended
26
+ * Compact inline label for a record's temporal validity window, appended
27
27
  * wherever `/recall` lists records, so an out-of-window record is visibly
28
28
  * `[pending]`/`[expired]` rather than silently indistinguishable from an
29
29
  * always-valid one. Empty string for 'active' (the common case; no window,
@@ -4,7 +4,7 @@ import { generateQrMatrix, renderQrToString } from '@pellux/goodvibes-sdk/platfo
4
4
  import { RELAY_STATE_NOT_READABLE_HERE } from '../../runtime/relay-reachability-bridge.ts';
5
5
 
6
6
  /**
7
- * Register the /relay command — the relay's configuration, its reachability
7
+ * Register the /relay command, the relay's configuration, its reachability
8
8
  * state, and a QR-encodable pairing payload for the SDK's outbound
9
9
  * zero-knowledge relay (relay.* settings, gated by the `relay-connect` feature
10
10
  * flag).
@@ -12,7 +12,7 @@ import { RELAY_STATE_NOT_READABLE_HERE } from '../../runtime/relay-reachability-
12
12
  * The CONFIGURATION half is read here, from this terminal's own config. The
13
13
  * LIVE half is not: registration state and pairing live in the running daemon's
14
14
  * memory (`DaemonServer.getRelayReachability()`), and no verb exposes either to
15
- * a client — so both read 'unavailable' with the reason said out loud rather
15
+ * a client, so both read 'unavailable' with the reason said out loud rather
16
16
  * than a state this terminal is in no position to know. See
17
17
  * relay-reachability-bridge.ts.
18
18
  */
@@ -43,20 +43,20 @@ async function renderStatus(ctx: CommandContext): Promise<void> {
43
43
  const state = live === 'registered' || live === 'disabled' || live === 'unavailable' ? live : 'offline';
44
44
  ctx.print([
45
45
  `Relay: ${state}`,
46
- ` rendezvous id: ${cfg.rendezvousId || '(not yet minted — start the daemon to generate one)'}`,
46
+ ` rendezvous id: ${cfg.rendezvousId || '(not yet minted; start the daemon to generate one)'}`,
47
47
  ` url: ${cfg.url || '(not set)'}`,
48
48
  ` label: ${cfg.label || '(not set)'}`,
49
49
  state === 'unavailable'
50
50
  ? ` ${RELAY_STATE_NOT_READABLE_HERE}`
51
51
  : ` live connection state: ${live}`,
52
- ' The relay operator sees only ciphertext and connection metadata — self-host your own relay for full control.',
52
+ ' The relay operator sees only ciphertext and connection metadata; self-host your own relay for full control.',
53
53
  ].join('\n'));
54
54
  }
55
55
 
56
56
  async function renderPair(ctx: CommandContext): Promise<void> {
57
57
  const cfg = relayConfigured(ctx);
58
58
  if (!cfg.enabled || !cfg.flagOn) {
59
- ctx.print('Relay is disabled — turn on relay.enabled in /config relay first.');
59
+ ctx.print('Relay is disabled: turn on relay.enabled in /config relay first.');
60
60
  return;
61
61
  }
62
62
  const externalServices = ctx.platform.externalServices;
@@ -132,7 +132,7 @@ export function registerRemoteRuntimeCommands(registry: CommandRegistry): void {
132
132
  ' capabilities:',
133
133
  ...selected.capabilities.map((capability) => ` ${capability.id}: ${capability.supported ? 'yes' : 'no'} (${capability.detail})`),
134
134
  ' recovery:',
135
- ...selected.recovery.map((action) => ` ${action.command} — ${action.reason}`),
135
+ ...selected.recovery.map((action) => ` ${action.command}: ${action.reason}`),
136
136
  ].join('\n'));
137
137
  return;
138
138
  }
@@ -157,7 +157,7 @@ export function registerRemoteRuntimeCommands(registry: CommandRegistry): void {
157
157
  ` trustClass: ${selected.negotiation.trustClass}`,
158
158
  ' capabilities:',
159
159
  ...selected.capabilities.map((capability) => (
160
- ` ${capability.id}: ${capability.supported ? 'supported' : 'missing'} — ${capability.detail}`
160
+ ` ${capability.id}: ${capability.supported ? 'supported' : 'missing'}; ${capability.detail}`
161
161
  )),
162
162
  ].join('\n'));
163
163
  return;
@@ -190,7 +190,7 @@ export function registerRemoteRuntimeCommands(registry: CommandRegistry): void {
190
190
  ...(selected.lastError ? [` lastError: ${selected.lastError}`] : []),
191
191
  ...(selected.taskId ? [` bound task: ${selected.taskId}`] : []),
192
192
  ' actions:',
193
- ...nextSteps.map((action) => ` ${action.command} — ${action.reason}`),
193
+ ...nextSteps.map((action) => ` ${action.command}: ${action.reason}`),
194
194
  ].join('\n'));
195
195
  return;
196
196
  }
@@ -4,7 +4,7 @@ import type { ReviewHunk } from '../../panels/diff-review-model.ts';
4
4
  import { hunkPatchText, buildHunkRevertReceiptBlock } from '../../panels/diff-review-model.ts';
5
5
  import { requirePanelManager } from './runtime-services.ts';
6
6
 
7
- /** checkpoints.revertHunkPreview result — the read-only clean-or-conflict check plus a confirm token. */
7
+ /** checkpoints.revertHunkPreview result, the read-only clean-or-conflict check plus a confirm token. */
8
8
  interface RevertHunkPreview {
9
9
  readonly applies: boolean;
10
10
  readonly conflict: string | null;
@@ -13,7 +13,7 @@ interface RevertHunkPreview {
13
13
  readonly token: string | null;
14
14
  }
15
15
 
16
- /** checkpoints.revertHunk result — one applied hunk revert, or a confirmation refusal. */
16
+ /** checkpoints.revertHunk result, one applied hunk revert, or a confirmation refusal. */
17
17
  interface RevertHunkResult {
18
18
  readonly receipt: {
19
19
  readonly path: string;
@@ -31,7 +31,7 @@ interface RevertHunkResult {
31
31
  *
32
32
  * `explicitUserRequest: true` is honest here and only here-shaped: this path
33
33
  * runs because a person is looking at a hunk and pressed a key. Scheduled
34
- * work, triggers and channel-driven work must never set it — the distinction
34
+ * work, triggers and channel-driven work must never set it, the distinction
35
35
  * is exactly "did the owner ask for this right now", and it is what lets a
36
36
  * confirmation-gated verb tell an authorized action apart from one initiated
37
37
  * by content.
@@ -75,7 +75,7 @@ async function revertHunkFlow(ctx: CommandContext, panel: DiffReviewPanel, hunk:
75
75
  }
76
76
 
77
77
  if (!preview.applies || !preview.token) {
78
- panel.note(`Cannot revert — ${preview.conflict ?? 'this hunk no longer applies'}. The file changed since this diff was captured; press r again after /review reloads. Nothing was changed.`);
78
+ panel.note(`Cannot revert: ${preview.conflict ?? 'this hunk no longer applies'}. The file changed since this diff was captured; press r again after /review reloads. Nothing was changed.`);
79
79
  await panel.refresh();
80
80
  return;
81
81
  }
@@ -95,7 +95,7 @@ async function revertHunkFlow(ctx: CommandContext, panel: DiffReviewPanel, hunk:
95
95
  const summary = `restore ${preview.removedLinesRestored} deleted / drop ${preview.addedLinesRemoved} added line(s)`;
96
96
  diffPanel.confirmOverlay.arm({
97
97
  id: `${path}:${hunk.header}`,
98
- label: `Revert hunk in ${path} — ${summary}`,
98
+ label: `Revert hunk in ${path}: ${summary}`,
99
99
  verb: 'Revert',
100
100
  onConfirm: async () => {
101
101
  let result: RevertHunkResult;
@@ -105,7 +105,7 @@ async function revertHunkFlow(ctx: CommandContext, panel: DiffReviewPanel, hunk:
105
105
  pm.close('diff');
106
106
  ctx.focusPanels?.();
107
107
  if (isConflict(err)) {
108
- panel.note(`Not reverted — ${errorText(err)}. The file changed since captured; nothing was written. Reloading /review…`);
108
+ panel.note(`Not reverted: ${errorText(err)}. The file changed since captured; nothing was written. Reloading /review…`);
109
109
  await panel.refresh();
110
110
  } else {
111
111
  panel.note(`Revert failed: ${errorText(err)}`);
@@ -125,14 +125,14 @@ async function revertHunkFlow(ctx: CommandContext, panel: DiffReviewPanel, hunk:
125
125
  onCancel: () => {
126
126
  pm.close('diff');
127
127
  ctx.focusPanels?.();
128
- panel.note('Revert cancelled — nothing changed.');
128
+ panel.note('Revert cancelled: nothing changed.');
129
129
  },
130
130
  });
131
131
  ctx.renderRequest();
132
132
  }
133
133
 
134
134
  /**
135
- * `/review` — open the comment-on-hunk review loop. Loads this session's file
135
+ * `/review`, open the comment-on-hunk review loop. Loads this session's file
136
136
  * changes (the files the SDK SessionChangeTracker recorded) as a git working-
137
137
  * tree diff, hunk-boundaried, and wires the panel's steering submit path to the
138
138
  * session so an attached comment is sent to the model as a steering message with