@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
@@ -17,7 +17,7 @@ import type { CompactionQualityScore } from './compaction-quality.ts';
17
17
  // ─── formatCompactionEvent ────────────────────────────────────────────────────
18
18
 
19
19
  /**
20
- * Exported for direct unit testing () — the grade suffix is a pure
20
+ * Exported for direct unit testing (), the grade suffix is a pure
21
21
  * function of the event and an optional score, independent of whichever
22
22
  * runtime lookup (getCompactionQualityScore) supplies that score.
23
23
  */
@@ -35,7 +35,7 @@ export function formatCompactionEvent(
35
35
  const trigger = ev.trigger === 'auto' ? 'auto' : 'manual';
36
36
  // Honest omission: no score means none was computed for this event (e.g. it
37
37
  // pre-dates this feature, or ran through the small-window path, which has
38
- // no CompactionEvent to key a score by) — never fabricate a grade.
38
+ // no CompactionEvent to key a score by), never fabricate a grade.
39
39
  const qualityStr = qualityScore ? ` quality=${qualityScore.grade} (${qualityScore.score.toFixed(2)})` : '';
40
40
  return (
41
41
  `#${n} ${timeStr} [${trigger}] ` +
@@ -56,7 +56,7 @@ function fmtN(n: number): string {
56
56
  export function buildCompactionHistoryText(): string {
57
57
  const events = getCompactionEvents();
58
58
  if (events.length === 0) {
59
- return '[Context] No compactions recorded this session. (Restore is not available — the SDK does not yet expose a snapshot restore API.)';
59
+ return '[Context] No compactions recorded this session. (Restore is not available: the SDK does not yet expose a snapshot restore API.)';
60
60
  }
61
61
  const lines: string[] = [
62
62
  `[Context] Compaction history (${events.length} total, most recent first):`,
@@ -66,6 +66,6 @@ export function buildCompactionHistoryText(): string {
66
66
  const ev = ordered[i]!;
67
67
  lines.push(' ' + formatCompactionEvent(ev, ordered.length - i, getCompactionQualityScore(ev.timestamp)));
68
68
  }
69
- lines.push(' (Restore not available — the SDK does not yet expose a snapshot restore API.)');
69
+ lines.push(' (Restore not available: the SDK does not yet expose a snapshot restore API.)');
70
70
  return lines.join('\n');
71
71
  }
@@ -4,7 +4,7 @@
4
4
  * Pre-compact: shows an honest estimate of what compaction will do
5
5
  * (message count and token estimate before → after). The SDK has no dry-run
6
6
  * API; we derive the after-estimate from the DEFAULT_COMPACTION_CONFIG
7
- * totalCeiling (6500 tokens) — clearly labelled as an ESTIMATE.
7
+ * totalCeiling (6500 tokens), clearly labelled as an ESTIMATE.
8
8
  *
9
9
  * Post-compact: shows a before/after notice using the CompactionEvent
10
10
  * data returned by compactMessages(), which contains the real
@@ -49,7 +49,7 @@ export interface CompactionAfterOptions {
49
49
  /**
50
50
  * Out-of-band quality-score grade for this run (). Omitted or null
51
51
  * when no score was computed (e.g. the small-window compaction path, which
52
- * has no CompactionEvent to key a score by) — no line is rendered then.
52
+ * has no CompactionEvent to key a score by), no line is rendered then.
53
53
  */
54
54
  readonly qualityScore?: CompactionQualityScore | null | undefined;
55
55
  }
@@ -78,7 +78,7 @@ export function buildCompactionPreview(opts: CompactionPreviewOptions): string {
78
78
 
79
79
  return (
80
80
  `[Context] ${triggerStr} conversation: ~${fmtN(tokensBefore)} tokens across ${msgCount} message${msgCount === 1 ? '' : 's'}${contextStr}.` +
81
- ` Estimated result: ~${fmtN(tokensAfterEstimate)} tokens (estimate — actual depends on content).` +
81
+ ` Estimated result: ~${fmtN(tokensAfterEstimate)} tokens (estimate; actual depends on content).` +
82
82
  (pinStr ? ` ${pinStr.trim()}` : '')
83
83
  );
84
84
  }
@@ -129,7 +129,7 @@ function fmtN(n: number): string {
129
129
  /**
130
130
  * Build the /keep command usage text (shown when no args are provided).
131
131
  *
132
- * Exported for testability — the shell-core handler renders this string directly.
132
+ * Exported for testability, the shell-core handler renders this string directly.
133
133
  */
134
134
  export function buildPinUsageText(): string {
135
135
  return (
@@ -147,7 +147,7 @@ export function buildPinUsageText(): string {
147
147
  * @param text - The pinned text
148
148
  * @param count - Total pinned memory count after adding
149
149
  *
150
- * Exported for testability — the shell-core handler renders this string directly.
150
+ * Exported for testability, the shell-core handler renders this string directly.
151
151
  */
152
152
  export function buildPinSuccessText(id: string, text: string, count: number): string {
153
153
  return (
@@ -4,7 +4,7 @@
4
4
  * Reality check: the SDK's `computeQualityScore()`
5
5
  * (platform/runtime/compaction/quality-score.ts) is only ever called from a
6
6
  * SEPARATE pipeline, `CompactionManager` (platform/runtime/compaction/manager.ts).
7
- * The TUI's actual `/compact` path never instantiates `CompactionManager` — it
7
+ * The TUI's actual `/compact` path never instantiates `CompactionManager`, it
8
8
  * goes through `platform/core/context-compaction.ts` via
9
9
  * `ConversationManager.compact()` (see `compactConversation()` in
10
10
  * runtime-services.ts), which has no scoring of its own. Adopting the whole
@@ -20,7 +20,7 @@
20
20
  * Honesty note: the `strategy` value passed to `computeQualityScore()` is a
21
21
  * BORROWED rubric label describing what `compactConversation()`'s structured
22
22
  * multi-section extraction actually does (collapse the whole conversation
23
- * into one handoff message) — it is NOT a real `CompactionStrategy`
23
+ * into one handoff message), it is NOT a real `CompactionStrategy`
24
24
  * escalation result, and no strategy switch is triggered from it. Every
25
25
  * rendering of the score says so explicitly (see `formatQualityScoreLine`).
26
26
  *
@@ -29,7 +29,7 @@
29
29
  * api-extractor regen for a value the SDK's own compaction log never
30
30
  * populates). Keyed by `CompactionEvent.timestamp` rather than array index,
31
31
  * because `compactSmallWindow`'s null-event path (small-context-window
32
- * models — see runtime-services.ts) can create index gaps.
32
+ * models, see runtime-services.ts) can create index gaps.
33
33
  */
34
34
 
35
35
  import { computeQualityScore, describeScore } from '@/runtime/index.ts';
@@ -41,7 +41,7 @@ export type { CompactionQualityScore } from '@/runtime/index.ts';
41
41
  /**
42
42
  * Bound the TUI-local score store the same way the SDK bounds its own
43
43
  * compaction event log (context-compaction.ts caps at 50 and shifts the
44
- * oldest entry) — a long-running session should not accumulate this forever.
44
+ * oldest entry), a long-running session should not accumulate this forever.
45
45
  */
46
46
  const MAX_TRACKED_SCORES = 50;
47
47
 
@@ -80,7 +80,7 @@ export function scoreCompactionRun(input: ScoreCompactionRunInput): CompactionQu
80
80
  messages: input.messagesBefore,
81
81
  tokensBefore: input.tokensBefore,
82
82
  contextWindow: input.contextWindow,
83
- // Borrowed rubric label, not a real strategy escalation — see module doc.
83
+ // Borrowed rubric label, not a real strategy escalation, see module doc.
84
84
  strategy: 'collapse',
85
85
  };
86
86
  const strategyOutput: StrategyOutput = {
@@ -1,5 +1,5 @@
1
1
  // ---------------------------------------------------------------------------
2
- // composer-fragments.ts — composer-adjacent transcript fragments extracted from
2
+ // composer-fragments.ts, composer-adjacent transcript fragments extracted from
3
3
  // ui-factory.ts (file-size hygiene): the mid-turn queued-message editable list
4
4
  // and the optional "used N memories" provenance chip. Pure renderers; the
5
5
  // UIFactory static methods are thin wrappers over these.
@@ -15,14 +15,14 @@ import { activeTheme } from './theme.ts';
15
15
  * message shows a 1-based number so it can be named to `/queue edit <n> …` /
16
16
  * `/queue delete <n>` (the SDK editQueuedMessage / deleteQueuedMessage verbs). A
17
17
  * delivered message has already left the queue, so the list only ever shows what
18
- * is still editable — delivery is immutability, made visible.
18
+ * is still editable, delivery is immutability, made visible.
19
19
  */
20
20
  export function renderQueuedMessageList(width: number, items: readonly { readonly id: string; readonly text: string }[]): Line[] {
21
21
  if (items.length === 0) return [];
22
22
  const t = activeUiTones();
23
23
  const bodyBg = activeTheme().collapsedBodyBg;
24
24
  const lines: Line[] = [];
25
- const header = `${items.length} queued — /queue edit·delete until delivered`;
25
+ const header = `${items.length} queued: /queue edit·delete until delivered`;
26
26
  lines.push(...renderConversationFragment(header, width, { prefix: ' ⧗ ', prefixFg: t.state.reasoning, text: t.fg.dim, bodyBg, dim: true }));
27
27
  items.forEach((item, index) => {
28
28
  lines.push(...renderConversationFragment(item.text, width, { prefix: ` ${index + 1}. `, prefixFg: t.state.reasoning, text: t.fg.dim, bodyBg, dim: true }));
@@ -32,7 +32,7 @@ export function renderQueuedMessageList(width: number, items: readonly { readonl
32
32
 
33
33
  /**
34
34
  * One drilled-in memory-provenance row. `record` is the RESOLVED record summary
35
- * (undefined = still resolving, null = no longer available) — the drill-in
35
+ * (undefined = still resolving, null = no longer available), the drill-in
36
36
  * shows a human summary, never a raw record id, matching the webui's detail
37
37
  * fetch (per-id, so one missing record never blanks the rest).
38
38
  */
@@ -44,7 +44,7 @@ export interface MemoryProvenanceEntry {
44
44
  /**
45
45
  * The optional "used N memories" turn chip. Collapsed: one small line naming the
46
46
  * count with the drill-in hint. Expanded (Alt+M): the same line followed by one
47
- * line per memory — its resolved SUMMARY (with the record class), a "resolving…"
47
+ * line per memory, its resolved SUMMARY (with the record class), a "resolving…"
48
48
  * placeholder while the fetch is in flight, or an honest "no longer available"
49
49
  * for a record that has since been forgotten. Empty when no memories were used.
50
50
  */
@@ -53,7 +53,7 @@ export function renderMemoryProvenanceChip(width: number, count: number, entries
53
53
  const t = activeUiTones();
54
54
  const bodyBg = activeTheme().collapsedBodyBg;
55
55
  const noun = count === 1 ? 'memory' : 'memories';
56
- const header = expanded ? `used ${count} ${noun} — Alt+M to hide` : `used ${count} ${noun} — Alt+M to list`;
56
+ const header = expanded ? `used ${count} ${noun}: Alt+M to hide` : `used ${count} ${noun}: Alt+M to list`;
57
57
  const lines: Line[] = renderConversationFragment(header, width, { prefix: ' ◆ ', prefixFg: t.state.info, text: t.fg.dim, bodyBg, dim: true });
58
58
  if (expanded) {
59
59
  entries.forEach((entry, index) => {
@@ -28,7 +28,7 @@ export interface SearchInfo {
28
28
  export interface PanelCompositeData {
29
29
  /**
30
30
  * The single consolidated workspace tab bar spanning all open panels across
31
- * both panes. There are no per-pane tab bars — pane focus is shown by the
31
+ * both panes. There are no per-pane tab bars, pane focus is shown by the
32
32
  * accent border (see `topFocused`/`bottomFocused`).
33
33
  */
34
34
  workspaceBar: Line;
@@ -62,7 +62,7 @@ export interface CompositeRequest {
62
62
 
63
63
  /**
64
64
  * Compositor - Authoritative TUI layout engine with Selection Overlay.
65
- * Decoupled from global state — all needed data is passed as parameters.
65
+ * Decoupled from global state, all needed data is passed as parameters.
66
66
  */
67
67
  export class Compositor {
68
68
  /** Double-buffer reuse: back is written, front is the last-rendered reference. */
@@ -80,7 +80,7 @@ export class Compositor {
80
80
  * and anything that writes to the terminal outside composite() moves content
81
81
  * the compositor never wrote. After either, a row the model believes is
82
82
  * already blank is never re-emitted, so whatever the terminal is showing
83
- * there — splash art, a stale rule line — survives every later frame. The
83
+ * there, splash art, a stale rule line, survives every later frame. The
84
84
  * erase is what clears cells the diff structurally skips (wide-glyph
85
85
  * continuation cells, see DiffEngine.diff), which a diff against a null
86
86
  * front buffer alone cannot do.
@@ -93,12 +93,12 @@ export class Compositor {
93
93
  this.diffEngine = new DiffEngine(this.caps);
94
94
  }
95
95
 
96
- /** Exposed for unit tests — returns the detected color capability. */
96
+ /** Exposed for unit tests, returns the detected color capability. */
97
97
  public get termCapsForTest(): TermColorCaps {
98
98
  return this.caps;
99
99
  }
100
100
 
101
- /** Exposed for unit tests — returns the last composited buffer. */
101
+ /** Exposed for unit tests, returns the last composited buffer. */
102
102
  public get lastBufferForTest(): TerminalBuffer | null {
103
103
  return this.frontBuffer;
104
104
  }
@@ -126,7 +126,7 @@ export class Compositor {
126
126
  public composite(params: CompositeRequest): void {
127
127
  const { width, height, header, viewport, footer, selection, search, panel, panelWidth } = params;
128
128
  // A size change reallocates the buffer, which drops every record of what
129
- // the terminal is currently showing — repaint in full rather than diff
129
+ // the terminal is currently showing, repaint in full rather than diff
130
130
  // against a model that no longer describes the screen.
131
131
  const resized = this.frontBuffer !== null
132
132
  && (this.frontBuffer.width !== width || this.frontBuffer.height !== height);
@@ -148,7 +148,7 @@ export class Compositor {
148
148
  const leftWidth = hasPanel ? Math.max(1, width - panelWidth - 1) : width;
149
149
  const sepX = hasPanel ? leftWidth : -1;
150
150
 
151
- // 1. Draw Header — always full width
151
+ // 1. Draw Header, always full width
152
152
  header.forEach((line, i) => newBuffer.blitLine(i, line));
153
153
 
154
154
  // 2. Draw Viewport directly after the supplied header.
@@ -320,7 +320,7 @@ export class Compositor {
320
320
  // (rows past the supplied viewport lines are covered by the loop above,
321
321
  // separator column included, so they can no longer keep a stale frame.)
322
322
 
323
- // 3. Draw Footer (Pinned to Bottom) — always full width
323
+ // 3. Draw Footer (Pinned to Bottom), always full width
324
324
  const footerStart = height - footer.length;
325
325
  footer.forEach((line, i) => {
326
326
  const screenY = footerStart + i;
@@ -329,7 +329,7 @@ export class Compositor {
329
329
  });
330
330
 
331
331
  // 4. Diff and Render
332
- // Diff against front-buffer (last-rendered), then swap front/back — no clone() needed.
332
+ // Diff against front-buffer (last-rendered), then swap front/back, no clone() needed.
333
333
  // On a full repaint the SGR run-state is reset (the erase below leaves the
334
334
  // terminal's attributes unknown) and the diff runs against no previous
335
335
  // frame, so every cell of the grid is emitted.
@@ -5,13 +5,13 @@ import { activeUiTones } from './theme.ts';
5
5
  import type { ConfigModal, ConfigModalRenderModel } from '../input/config-modal.ts';
6
6
 
7
7
  // Matches ModalFactory.createModal's own box-width computation (margin 4,
8
- // requested max width 76 — see renderConfigModalModel below) so the
8
+ // requested max width 76, see renderConfigModalModel below) so the
9
9
  // wrap-clamp in ConfigModal.getRenderModel() measures against the SAME width
10
10
  // the list section will actually wrap at, at the current terminal size.
11
11
  const MODAL_MARGIN = 4;
12
12
  const MODAL_MAX_WIDTH = 76;
13
13
  /**
14
- * renderConfigModal — the single render path for every ConfigModalSurface.
14
+ * renderConfigModal, the single render path for every ConfigModalSurface.
15
15
  * Reads the host's frozen-structure-plus-live-values render model and maps it
16
16
  * onto ModalFactory.createModal (the same renderer settings-modal uses), so the
17
17
  * chrome, tab strip, list, and footer are one dialect across all migrated
@@ -32,7 +32,7 @@ export function renderConfigModal(modal: ConfigModal, width: number, height: num
32
32
  return renderConfigModalModel(model, width);
33
33
  }
34
34
 
35
- /** Pure model→Line[] mapping — the shared inner step of renderConfigModal. */
35
+ /** Pure model→Line[] mapping, the shared inner step of renderConfigModal. */
36
36
  function renderConfigModalModel(model: ConfigModalRenderModel, width: number): Line[] {
37
37
  // Read the active-mode chrome tones per call (this render path is not on a
38
38
  // hot loop; the modal renders once per keystroke).
@@ -8,7 +8,7 @@ import { UI_TONES } from './ui-primitives.ts';
8
8
  // ─── ContextInspectorModal ────────────────────────────────────────────────────
9
9
 
10
10
  /**
11
- * ContextInspectorModal — state for the context inspector overlay.
11
+ * ContextInspectorModal, state for the context inspector overlay.
12
12
  */
13
13
  export class ContextInspectorModal {
14
14
  public active = false;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Context status hint — TASK-056.
2
+ * Context status hint, TASK-056.
3
3
  *
4
4
  * Produces a short, dismissible status-line hint when the session maintenance
5
5
  * level indicates compaction is recommended or repair is needed. The hint is
@@ -15,11 +15,11 @@
15
15
  *
16
16
  * Evidence policy (why the guards below exist)
17
17
  * ────────────────────────────────────────────
18
- * A fresh boot printed "Context high (0% used) — auto-compact will run before
18
+ * A fresh boot printed "Context high (0% used), auto-compact will run before
19
19
  * the next turn." before a single token had been counted. The evaluator was
20
20
  * not at fault: `evaluateSessionMaintenance` reaches 'suggest-compact' when
21
21
  * `remainingTokens <= 15_000`, and at boot the resolved window is still the
22
- * SDK's DEFAULT_CONTEXT_WINDOW fallback (8,192 — the "8.2k" the footer meter
22
+ * SDK's DEFAULT_CONTEXT_WINDOW fallback (8,192, the "8.2k" the footer meter
23
23
  * shows before the real window arrives), so 8,192 free tokens tripped that
24
24
  * rule instantly. Arithmetically consistent; factually false. No context had
25
25
  * been consumed and no auto-compact was imminent.
@@ -31,7 +31,7 @@
31
31
  * 2. The window is one the provider vouched for, not the fallback constant.
32
32
  * A model whose real window happens to equal the fallback is
33
33
  * indistinguishable from "not resolved yet", and in that ambiguity
34
- * staying quiet is the honest choice — the Tokens panel and /context
34
+ * staying quiet is the honest choice, the Tokens panel and /context
35
35
  * still show the real numbers either way.
36
36
  * Neither guard touches 'compacting', which reports work that is provably
37
37
  * running rather than a prediction about headroom.
@@ -69,8 +69,8 @@ function hasRealContextNumbers(
69
69
  * Build the passive status-line hint text for context pressure.
70
70
  *
71
71
  * Returns null when no hint is warranted (stable / watch / unknown), and also
72
- * when a pressure level is not yet backed by real numbers — see the evidence
73
- * policy above. The caller renders this as a dim informational line — no
72
+ * when a pressure level is not yet backed by real numbers, see the evidence
73
+ * policy above. The caller renders this as a dim informational line, no
74
74
  * prompts, no blocking, no confirmation required.
75
75
  */
76
76
  function buildContextStatusHint(options: ContextStatusHintOptions): string | null {
@@ -79,17 +79,17 @@ function buildContextStatusHint(options: ContextStatusHintOptions): string | nul
79
79
  switch (level) {
80
80
  case 'needs-repair':
81
81
  if (!hasRealContextNumbers(options)) return null;
82
- return ` Context pressure critical (${usagePct}% used) — compaction needs attention. Run /compact or /health review.`;
82
+ return ` Context pressure critical (${usagePct}% used); compaction needs attention. Run /compact or /health review.`;
83
83
 
84
84
  case 'suggest-compact':
85
85
  if (!hasRealContextNumbers(options)) return null;
86
86
  if (autoCompactEnabled) {
87
- return ` Context high (${usagePct}% used) — auto-compact will run before the next turn.`;
87
+ return ` Context high (${usagePct}% used): auto-compact will run before the next turn.`;
88
88
  }
89
- return ` Context high (${usagePct}% used) — run /compact to recover headroom.`;
89
+ return ` Context high (${usagePct}% used): run /compact to recover headroom.`;
90
90
 
91
91
  case 'compacting':
92
- return ` Compacting context — freeing headroom...`;
92
+ return ` Compacting context: freeing headroom...`;
93
93
 
94
94
  default:
95
95
  return null;
@@ -42,11 +42,11 @@ export function buildConversationViewport(
42
42
  * Absolute history-line index of the bottom-most visible row of the
43
43
  * conversation viewport. The buffer bottom-aligns content shorter than the
44
44
  * viewport (InfiniteBuffer.getSnapshot pads with blank lines at the TOP, not
45
- * the bottom — see history.ts), so the naive `scrollTop + viewportHeight - 1`
45
+ * the bottom, see history.ts), so the naive `scrollTop + viewportHeight - 1`
46
46
  * overshoots past the real last line whenever the whole transcript already
47
47
  * fits on screen. Clamping to `lineCount - 1` handles both cases with one
48
48
  * formula: when scrollLocked at the true bottom (the common case), this is
49
- * exactly the last rendered content line — the block the user is actually
49
+ * exactly the last rendered content line, the block the user is actually
50
50
  * looking at, not whatever sits at the TOP of the viewport (scrollTop alone).
51
51
  */
52
52
  export function getViewportBottomLine(scrollTop: number, viewportHeight: number, lineCount: number): number {
@@ -42,7 +42,7 @@ export function applyConversationOverlays(
42
42
  // Overlay posture rule: workspaces (onboarding, model, settings, mcp, help,
43
43
  // shortcuts) claim the full viewport and are mutually exclusive with docked
44
44
  // pickers/modals. Once a fullscreen workspace claims the screen, no docked
45
- // overlay is drawn on top of it — enforcing a single visible overlay even if
45
+ // overlay is drawn on top of it, enforcing a single visible overlay even if
46
46
  // stray state survives the handler's clearModalStack. The input layer keeps
47
47
  // the modal stack to one entry; this is the renderer-side backstop.
48
48
  let fullscreenClaimed = false;
@@ -78,7 +78,7 @@ export function applyConversationOverlays(
78
78
  }
79
79
 
80
80
  // retirement: the process, agent-detail, and live-tail modal overlays
81
- // were removed with those modals — F2 now opens the Fleet panel, which
81
+ // were removed with those modals, F2 now opens the Fleet panel, which
82
82
  // subsumes the live process tree.
83
83
 
84
84
  if (!fullscreenClaimed && input.contextInspectorModal.active) {
@@ -106,14 +106,14 @@ export function renderConversationFragment(
106
106
  indentCols = 0,
107
107
  ): Line[] {
108
108
  // A tree fragment is a continuation of the row above it, so it starts at that
109
- // row's content column — which puts its ` ▸ ` prefix glyph in exactly the same
109
+ // row's content column, which puts its ` ▸ ` prefix glyph in exactly the same
110
110
  // column as the parent row's own ` ▸ N lines ` badge. A flush fragment (a user
111
111
  // message ghost box) keeps the box margin it has always used.
112
112
  const indent = Math.max(0, indentCols);
113
113
  const margin = indent > 0 ? treeContentCol(indent) : LAYOUT.USER_BOX_MARGIN;
114
114
  const prefixWidth = getDisplayWidth(palette.prefix);
115
115
  // The indent is charged to the content budget rather than allowed to push the
116
- // fragment past the right edge — a narrow terminal shrinks the preview text
116
+ // fragment past the right edge, a narrow terminal shrinks the preview text
117
117
  // instead of silently truncating its tail.
118
118
  const maxContentWidth = Math.max(1, width - margin - LAYOUT.USER_BOX_MARGIN - prefixWidth - 2);
119
119
  const wrapped = wrapText(content, maxContentWidth);
@@ -177,15 +177,15 @@ export function renderConversationFragment(
177
177
  * A COLLAPSED block, as exactly one row: the event line, with its preview
178
178
  * riding on the same line right after the badges.
179
179
  *
180
- * Collapsed blocks used to render as a framed fragment — a `▄▄▄` cap, an
181
- * interior line of text, a `▀▀▀` cap — around what was, in every case, a single
180
+ * Collapsed blocks used to render as a framed fragment, a `▄▄▄` cap, an
181
+ * interior line of text, a `▀▀▀` cap, around what was, in every case, a single
182
182
  * line. Four rows of chrome per fold made a screen of collapsed output mostly
183
183
  * frame. The text those rows carried moves onto the event line and the frame
184
184
  * goes; the `▸ N lines` badge is the count, so nothing restates it.
185
185
  *
186
186
  * The preview is TRUNCATED to fit, never wrapped: wrapping would put the row
187
187
  * back to two lines, which is the thing being removed. Whitespace is flattened
188
- * by the caller's choice of preview text — a raw tab or newline would blow the
188
+ * by the caller's choice of preview text, a raw tab or newline would blow the
189
189
  * column out.
190
190
  */
191
191
  export function renderConversationFoldedRow(
@@ -202,7 +202,7 @@ export function renderConversationFoldedRow(
202
202
  // Whether a preview renders at all, and its flattening, are the policy's call
203
203
  // (foldPreviewText returns null for "no preview"). Only the TRUNCATION is
204
204
  // ours: display width is a product-local rule the policy deliberately leaves
205
- // to the caller — and it must truncate, never wrap.
205
+ // to the caller, and it must truncate, never wrap.
206
206
  const trimmed = foldPreviewText(preview, availCols);
207
207
  if (trimmed === null) {
208
208
  return renderConversationEventLine(width, tone, details, indentCols);
@@ -74,7 +74,7 @@ export class DiffEngine {
74
74
  // the SGR state did not change, skip cursor re-addressing.
75
75
  // Emit a cursor move only on run breaks (new row, gap, or style change).
76
76
  if (sgrOutput === '' && this.lastEmitY === y && this.lastEmitX === x - 1) {
77
- // Contiguous run on same row, same SGR — just append the char.
77
+ // Contiguous run on same row, same SGR, just append the char.
78
78
  output += newCell.char;
79
79
  } else {
80
80
  output += `\x1b[${y + 1};${x + 1}H`;
@@ -107,7 +107,7 @@ export class DiffEngine {
107
107
  * Convert a raw color string (hex or r;g;b) to the "r;g;b" form expected
108
108
  * by applyStyles. For non-RGB palette indices the value is returned as-is.
109
109
  * This mirrors the original sanitizeColor contract but is now capability-aware
110
- * only in the sense of normalizing hex → "r;g;b" — downsampling happens in
110
+ * only in the sense of normalizing hex → "r;g;b", downsampling happens in
111
111
  * applyStyles via downsampleColor.
112
112
  */
113
113
  private sanitizeColor(color: string): string {
@@ -148,7 +148,7 @@ export class DiffEngine {
148
148
  if (cell.strikethrough) style += '\x1b[9m';
149
149
  }
150
150
 
151
- // Foreground color — capability-downsampled
151
+ // Foreground color, capability-downsampled
152
152
  const fgOut = downsampleColor(fg, this.caps, 'fg');
153
153
  if (fgOut !== null) {
154
154
  if (this.caps.capability === 'basic16') {
@@ -160,7 +160,7 @@ export class DiffEngine {
160
160
  }
161
161
  }
162
162
 
163
- // Background color — capability-downsampled
163
+ // Background color, capability-downsampled
164
164
  const bgOut = downsampleColor(bg, this.caps, 'bg');
165
165
  if (bgOut !== null) {
166
166
  if (this.caps.capability === 'basic16') {
@@ -5,7 +5,7 @@
5
5
  // renderTabStrip exactly as panel-workspace-bar.ts does for the workspace
6
6
  // tab bar. Deliberately a SEPARATE, visually distinct strip from the
7
7
  // workspace bar: workspace tabs switch PANELS, fleet session tabs switch
8
- // ATTACHED PROCESSES within one panel — conflating their styling would blur
8
+ // ATTACHED PROCESSES within one panel, conflating their styling would blur
9
9
  // that distinction for the operator.
10
10
  // ---------------------------------------------------------------------------
11
11
 
@@ -22,7 +22,7 @@ const LABEL_FG = UI_TONES.fg.secondary;
22
22
 
23
23
  /**
24
24
  * Render the fleet session-tab strip, or `null` when there are no attached
25
- * tabs — the panel omits the strip entirely in that case (root-tab-only),
25
+ * tabs, the panel omits the strip entirely in that case (root-tab-only),
26
26
  * which is what keeps the pre-session-tab fleet-panel goldens byte-identical.
27
27
  */
28
28
  export function renderFleetTabStrip(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * footer-tips.ts — the persistent discoverability hint shown in the shell
2
+ * footer-tips.ts, the persistent discoverability hint shown in the shell
3
3
  * footer's tip slot.
4
4
  *
5
5
  * instead of a single frozen "/help for commands" line, the footer
@@ -8,7 +8,7 @@
8
8
  * is actively running, the process-monitor tip is promoted to the front so the
9
9
  * operator can jump to F2 while work is in flight. Selection is a pure function
10
10
  * of context so the footer renders deterministically (golden frames stay
11
- * stable) — no wall-clock input.
11
+ * stable), no wall-clock input.
12
12
  */
13
13
 
14
14
  export interface FooterTipContext {
@@ -25,7 +25,7 @@ export function isAgentActive(composerStatus: string | undefined): boolean {
25
25
  }
26
26
 
27
27
  // Ctrl+P is a TOGGLE (open+focus when nothing is open or unfocused,
28
- // hide when the workspace already has focus — see openPanelPicker in
28
+ // hide when the workspace already has focus, see openPanelPicker in
29
29
  // shell/ui-openers.ts). The bare noun 'panels' undersold that; naming the verb
30
30
  // keeps the tip honest about what the chord actually does.
31
31
  const TIP_PANELS = 'Ctrl+P toggle panels';
@@ -33,7 +33,7 @@ const TIP_PANELS = 'Ctrl+P toggle panels';
33
33
  // tip names 'fleet', not 'processes'.
34
34
  const TIP_PROCESSES = 'F2 fleet';
35
35
  const TIP_HELP = '? help';
36
- // f: an empty-composer Ctrl+C does NOT quit on the first press — it arms a
36
+ // f: an empty-composer Ctrl+C does NOT quit on the first press, it arms a
37
37
  // ~1s "press again to exit" confirm, and only a SECOND Ctrl+C within that window
38
38
  // exits (an intentional accidental-exit guard). The old 'Ctrl+C quit' tip
39
39
  // implied a single press quits, so two presses seconds apart appeared to do
@@ -6,7 +6,7 @@ import { activeUiTones, registerThemeRefresh } from './theme.ts';
6
6
 
7
7
  // Built from the mode-resolved chrome tones (activeUiTones) and rebuilt IN PLACE
8
8
  // on a mode flip via the registered refresher (read by reference across the
9
- // fullscreen workspace surfaces — see theme.ts's active-mode runtime note).
9
+ // fullscreen workspace surfaces, see theme.ts's active-mode runtime note).
10
10
  function buildFullscreenPalette(): Record<string, string> {
11
11
  const t = activeUiTones();
12
12
  return {
@@ -13,11 +13,11 @@ export interface GitHeaderInfo {
13
13
  const FALLBACK: GitHeaderInfo = { branch: '?', dirty: false, ahead: 0, behind: 0 };
14
14
 
15
15
  /**
16
- * GitStatusProvider — Fetches git state for the header bar.
16
+ * GitStatusProvider, Fetches git state for the header bar.
17
17
  *
18
18
  * Results are cached for 2 seconds (TTL). The next call after expiry triggers
19
19
  * a fresh fetch and returns the cached value immediately (stale-while-revalidate).
20
- * Never throws — returns FALLBACK on any error.
20
+ * Never throws, returns FALLBACK on any error.
21
21
  */
22
22
  export class GitStatusProvider {
23
23
  private cache: GitHeaderInfo = { ...FALLBACK };
@@ -61,7 +61,7 @@ export class GitStatusProvider {
61
61
  * GitService.isGitRepo() check) but amortizes the cost for the header: the
62
62
  * cheap synchronous isGitRepo() spawn runs every tick; the heavier async
63
63
  * status()+branch() fetch (this.refresh()) only runs when that boolean
64
- * actually flips — e.g. an external `git init`, or `.git` removed.
64
+ * actually flips, e.g. an external `git init`, or `.git` removed.
65
65
  */
66
66
  startPolling(intervalMs: number, onChange: (info: GitHeaderInfo) => void): void {
67
67
  if (this.pollTimer !== null) return;
@@ -110,7 +110,7 @@ export class GitStatusProvider {
110
110
  statusResult.conflicted.length > 0 ||
111
111
  statusResult.not_added.length > 0;
112
112
  this.cache = {
113
- // Empty `current` means an unborn HEAD — a repo with no commits yet.
113
+ // Empty `current` means an unborn HEAD, a repo with no commits yet.
114
114
  // Show "new" instead of an unfriendly "?" for that first-run case. (5a)
115
115
  branch: branchResult.current || 'new',
116
116
  dirty,
@@ -119,7 +119,7 @@ export class GitStatusProvider {
119
119
  };
120
120
  this.lastFetch = Date.now();
121
121
  } catch {
122
- // Never throw — return fallback
122
+ // Never throw, return fallback
123
123
  if (this.lastFetch === 0) {
124
124
  this.cache = { ...FALLBACK };
125
125
  this.lastFetch = Date.now();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * header-line.ts — the top-of-screen header row: brand, version, optional
2
+ * header-line.ts, the top-of-screen header row: brand, version, optional
3
3
  * conversation title, optional git segment, and the right-hand model/provider
4
4
  * pair.
5
5
  *
@@ -8,7 +8,7 @@
8
8
  * remains the call name everywhere and delegates here.
9
9
  *
10
10
  * The model/provider pair rendered here is the SERVING backend, resolved by
11
- * core/active-model-identity.ts — the same resolution the footer uses, so the
11
+ * core/active-model-identity.ts, the same resolution the footer uses, so the
12
12
  * two surfaces can no longer disagree about who is answering. `note` carries
13
13
  * the divergence marker naming the user's configured selection when serving
14
14
  * has moved off it.
@@ -43,7 +43,7 @@ function buildGitSegment(gitInfo: GitHeaderInfo): { text: string; width: number
43
43
  * Graded, never truncated mid-word: the full marker (which names the
44
44
  * configured selection) is preferred; a bare "divergent" keyword is the
45
45
  * fallback on a narrow terminal; on a very narrow terminal the marker is
46
- * dropped entirely. Dropping it is safe — what remains is still the SERVING
46
+ * dropped entirely. Dropping it is safe, what remains is still the SERVING
47
47
  * backend, so the header never claims the configured backend is answering.
48
48
  * The footer carries the full marker with far more room (see ui-factory's
49
49
  * prioritized context segments).
@@ -80,7 +80,7 @@ export function renderHeaderLine(
80
80
  ): Line[] {
81
81
  const lines: Line[] = [];
82
82
  // Header/footer/thinking paint on the transparent terminal background, so
83
- // they read chrome.* (light-terminal-aware) — NOT fg.*/state.*, which stay
83
+ // they read chrome.* (light-terminal-aware), NOT fg.*/state.*, which stay
84
84
  // tuned for the opaque dark modal/panel boxes. Read live per render so a
85
85
  // mode flip re-resolves without any module reload (see theme.ts).
86
86
  const t = activeUiTones();
@@ -99,7 +99,7 @@ export function renderHeaderLine(
99
99
  let curX = 0;
100
100
  for (const char of brand) { line[curX++] = { char, fg: CYAN, bg: '', bold: true, dim: false, underline: false, italic: false, strikethrough: false }; }
101
101
  for (const char of ver) { line[curX++] = { char, fg: GREY, bg: '', bold: false, dim: true, underline: false, italic: false, strikethrough: false }; }
102
- // Optional conversation title — shown after brand/ver, truncated to fit
102
+ // Optional conversation title, shown after brand/ver, truncated to fit
103
103
  if (title) {
104
104
  const titleStr = `│ ${title} `;
105
105
  // Reserve space for git info (if present) + model/provider + marker on the right