@pellux/goodvibes-tui 2.0.14 → 2.0.16

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 +49 -0
  5. package/README.md +64 -44
  6. package/docs/README.md +6 -6
  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 +19 -19
  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 +11 -11
  290. package/src/panels/modals/plugins-modal.ts +1 -1
  291. package/src/panels/modals/policy-modal.ts +4 -4
  292. package/src/panels/modals/provider-health-modal.ts +1 -1
  293. package/src/panels/modals/remote-modal.ts +1 -1
  294. package/src/panels/modals/sandbox-modal.ts +2 -2
  295. package/src/panels/modals/security-modal.ts +4 -4
  296. package/src/panels/modals/services-modal.ts +1 -1
  297. package/src/panels/modals/work-plan-modal.ts +4 -4
  298. package/src/panels/notifications-feed.ts +6 -6
  299. package/src/panels/notifications-panel.ts +6 -6
  300. package/src/panels/panel-confirm-overlay.ts +4 -4
  301. package/src/panels/panel-manager.ts +13 -13
  302. package/src/panels/plugins-panel.ts +6 -6
  303. package/src/panels/polish-core.ts +2 -2
  304. package/src/panels/polish-tables.ts +2 -2
  305. package/src/panels/polish.ts +1 -1
  306. package/src/panels/project-planning-answer-actions.ts +3 -3
  307. package/src/panels/scrollable-list-panel.ts +15 -15
  308. package/src/panels/search-focus.ts +1 -1
  309. package/src/panels/session-maintenance.ts +1 -1
  310. package/src/panels/skills-panel.ts +3 -3
  311. package/src/panels/token-budget-panel.ts +11 -11
  312. package/src/panels/types.ts +14 -14
  313. package/src/panels/workstream-graph-render.ts +5 -5
  314. package/src/panels/wrfc-panel-format.ts +1 -1
  315. package/src/permissions/broker-approval-card.ts +13 -13
  316. package/src/permissions/hunk-selection.ts +13 -13
  317. package/src/permissions/prompt.ts +22 -22
  318. package/src/permissions/sandbox-exec-gate.ts +5 -5
  319. package/src/providers/provider-classification.ts +1 -1
  320. package/src/providers/reasoning-effort-surface.ts +12 -12
  321. package/src/renderer/ansi-sanitize.ts +5 -6
  322. package/src/renderer/autocomplete-overlay.ts +5 -5
  323. package/src/renderer/block-actions-overlay.ts +1 -1
  324. package/src/renderer/bookmark-modal.ts +1 -1
  325. package/src/renderer/code-block.ts +2 -2
  326. package/src/renderer/compaction-history-modal.ts +4 -4
  327. package/src/renderer/compaction-preview.ts +5 -5
  328. package/src/renderer/compaction-quality.ts +5 -5
  329. package/src/renderer/composer-fragments.ts +6 -6
  330. package/src/renderer/compositor.ts +9 -9
  331. package/src/renderer/config-modal.ts +3 -3
  332. package/src/renderer/context-inspector.ts +1 -1
  333. package/src/renderer/context-status-hint.ts +10 -10
  334. package/src/renderer/conversation-layout.ts +2 -2
  335. package/src/renderer/conversation-overlays.ts +2 -2
  336. package/src/renderer/conversation-surface.ts +6 -6
  337. package/src/renderer/diff.ts +4 -4
  338. package/src/renderer/fleet-tab-strip.ts +2 -2
  339. package/src/renderer/footer-tips.ts +4 -4
  340. package/src/renderer/fullscreen-primitives.ts +1 -1
  341. package/src/renderer/git-status.ts +5 -5
  342. package/src/renderer/header-line.ts +5 -5
  343. package/src/renderer/help-overlay.ts +5 -5
  344. package/src/renderer/hint-grammar.ts +2 -2
  345. package/src/renderer/layout.ts +1 -1
  346. package/src/renderer/markdown-inline.ts +3 -3
  347. package/src/renderer/markdown-table.ts +7 -7
  348. package/src/renderer/modal-factory.ts +3 -3
  349. package/src/renderer/model-picker-overlay.ts +2 -2
  350. package/src/renderer/model-workspace.ts +7 -7
  351. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  352. package/src/renderer/overlay-box.ts +1 -1
  353. package/src/renderer/panel-composite.ts +5 -5
  354. package/src/renderer/panel-workspace-bar.ts +1 -1
  355. package/src/renderer/process-indicator.ts +8 -8
  356. package/src/renderer/profile-picker-modal.ts +3 -3
  357. package/src/renderer/prompt-content-width.ts +1 -1
  358. package/src/renderer/search-overlay.ts +3 -3
  359. package/src/renderer/selection-modal-overlay.ts +6 -6
  360. package/src/renderer/semantic-diff.ts +6 -7
  361. package/src/renderer/session-picker-modal.ts +24 -24
  362. package/src/renderer/settings-modal-connections.ts +3 -3
  363. package/src/renderer/settings-modal-helpers.ts +16 -16
  364. package/src/renderer/settings-modal.ts +10 -10
  365. package/src/renderer/shell-surface.ts +8 -8
  366. package/src/renderer/status-glyphs.ts +6 -6
  367. package/src/renderer/syntax-highlighter.ts +2 -3
  368. package/src/renderer/system-message.ts +3 -3
  369. package/src/renderer/tab-strip.ts +2 -2
  370. package/src/renderer/term-caps.ts +12 -12
  371. package/src/renderer/terminal-bg-probe.ts +10 -10
  372. package/src/renderer/terminal-escapes.ts +1 -1
  373. package/src/renderer/theme-mode-config.ts +3 -3
  374. package/src/renderer/theme.ts +34 -34
  375. package/src/renderer/thinking.ts +1 -1
  376. package/src/renderer/tool-call.ts +5 -5
  377. package/src/renderer/tool-result-expanded-lines.ts +3 -3
  378. package/src/renderer/tool-result-summary.ts +6 -6
  379. package/src/renderer/turn-injection.ts +9 -9
  380. package/src/renderer/ui-factory.ts +33 -33
  381. package/src/renderer/ui-primitives.ts +4 -4
  382. package/src/runtime/bootstrap-command-parts.ts +3 -3
  383. package/src/runtime/bootstrap-core.ts +21 -21
  384. package/src/runtime/bootstrap-hook-bridge.ts +8 -8
  385. package/src/runtime/bootstrap-shell.ts +9 -9
  386. package/src/runtime/bootstrap.ts +16 -16
  387. package/src/runtime/client/approval-updates.ts +3 -3
  388. package/src/runtime/client/build-floors.ts +7 -7
  389. package/src/runtime/client/daemon-attach-handshake.ts +5 -5
  390. package/src/runtime/client/fleet-union.ts +7 -7
  391. package/src/runtime/client/host-service-status.ts +2 -2
  392. package/src/runtime/client/hosted-exit.ts +4 -4
  393. package/src/runtime/client/hosted-roster.ts +4 -4
  394. package/src/runtime/client/hosted-session-stream.ts +5 -5
  395. package/src/runtime/client/hosted-sessions.ts +8 -8
  396. package/src/runtime/client/operator-endpoint.ts +14 -14
  397. package/src/runtime/client/spine-adoption.ts +8 -8
  398. package/src/runtime/context-accounting-source.ts +4 -4
  399. package/src/runtime/context.ts +2 -2
  400. package/src/runtime/conversation-rewind-port.ts +6 -6
  401. package/src/runtime/credential-composition.ts +2 -2
  402. package/src/runtime/daemon-attach-notices.ts +6 -6
  403. package/src/runtime/diagnostics/panels/index.ts +1 -1
  404. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  405. package/src/runtime/disposal-wiring.ts +6 -6
  406. package/src/runtime/index.ts +11 -11
  407. package/src/runtime/install-self-check-startup.ts +4 -4
  408. package/src/runtime/install-self-check.ts +6 -6
  409. package/src/runtime/interaction-seams.ts +4 -4
  410. package/src/runtime/knowledge-services.ts +2 -2
  411. package/src/runtime/legacy-daemon-migration.ts +37 -37
  412. package/src/runtime/legacy-daemon-reconcile.ts +30 -30
  413. package/src/runtime/memory-governance-services.ts +3 -3
  414. package/src/runtime/memory-spine-transport.ts +3 -3
  415. package/src/runtime/notification-dispatch.ts +4 -4
  416. package/src/runtime/onboarding/apply.ts +1 -1
  417. package/src/runtime/onboarding/derivation.ts +1 -1
  418. package/src/runtime/onboarding/fast-path.ts +7 -7
  419. package/src/runtime/onboarding/progress.ts +2 -2
  420. package/src/runtime/onboarding/provider-key-capture.ts +4 -4
  421. package/src/runtime/onboarding/snapshot.ts +2 -2
  422. package/src/runtime/onboarding/state.ts +4 -4
  423. package/src/runtime/onboarding/types.ts +4 -4
  424. package/src/runtime/orchestrator-core-services.ts +5 -5
  425. package/src/runtime/path-shadow-startup.ts +3 -3
  426. package/src/runtime/perf/panel-contracts.ts +1 -1
  427. package/src/runtime/power-keepawake-remote.ts +6 -6
  428. package/src/runtime/process-lifecycle.ts +14 -14
  429. package/src/runtime/provider-fallback.ts +3 -3
  430. package/src/runtime/recovery-autosave.ts +3 -3
  431. package/src/runtime/recovery-decisions.ts +19 -19
  432. package/src/runtime/recovery-offer-wiring.ts +4 -4
  433. package/src/runtime/recovery-prompt.ts +20 -20
  434. package/src/runtime/relay-reachability-bridge.ts +3 -3
  435. package/src/runtime/release-artifacts.ts +1 -1
  436. package/src/runtime/resume-notice.ts +20 -20
  437. package/src/runtime/runtime-services-types.ts +20 -20
  438. package/src/runtime/services.ts +20 -20
  439. package/src/runtime/session-continuity-hints.ts +1 -1
  440. package/src/runtime/session-inbound-inputs.ts +12 -12
  441. package/src/runtime/session-resume-liveness-confirm.ts +4 -4
  442. package/src/runtime/session-spine-transport.ts +3 -3
  443. package/src/runtime/store/domains/panels.ts +2 -2
  444. package/src/runtime/store/domains/ui-perf.ts +2 -2
  445. package/src/runtime/store/index.ts +1 -1
  446. package/src/runtime/store/selectors/index.ts +1 -1
  447. package/src/runtime/store/state.ts +2 -2
  448. package/src/runtime/ui-services.ts +3 -3
  449. package/src/runtime/workspace-checkpointing.ts +3 -3
  450. package/src/runtime/wrfc-persistence.ts +15 -15
  451. package/src/scripts/process-messages.ts +1 -1
  452. package/src/shell/blocking-input.ts +9 -9
  453. package/src/shell/recovery-input-helpers.ts +2 -2
  454. package/src/shell/retry-affordance.ts +9 -9
  455. package/src/shell/ui-openers.ts +14 -14
  456. package/src/shell/voice-capture-shell.ts +3 -3
  457. package/src/tools/wrfc-agent-guard.ts +4 -4
  458. package/src/utils/browser.ts +2 -2
  459. package/src/utils/format-duration.ts +3 -3
  460. package/src/utils/format-number.ts +2 -2
  461. package/src/utils/splash-lines.ts +4 -4
  462. package/src/utils/terminal-width.ts +6 -6
  463. package/src/verification/verification-ledger.ts +25 -25
  464. package/src/version.ts +3 -3
@@ -1,12 +1,12 @@
1
1
  /**
2
- * NotificationsPanel — the visible home for notifications routed to the
2
+ * NotificationsPanel, the visible home for notifications routed to the
3
3
  * `panel_only` target (see notifications-feed.ts for why this exists).
4
4
  *
5
5
  * Renders every entry the feed has accumulated: standalone panel-routed
6
6
  * notifications, and collapsed burst/batch groups shown honestly with their
7
7
  * real running count and the plain-language reason they were held back from
8
8
  * the conversation. Descriptive text (titles, bodies, reason descriptions)
9
- * is always wrapped in full — never clipped to a column width.
9
+ * is always wrapped in full, never clipped to a column width.
10
10
  */
11
11
  import type { Line } from '@pellux/goodvibes-sdk/platform/types';
12
12
  import type { RoutingDecision } from '@/runtime/index.ts';
@@ -23,7 +23,7 @@ import { wrapText } from '../utils/terminal-width.ts';
23
23
  import { getSharedNotificationFeed, type PanelFeedEntry, type PanelNotificationFeed } from './notifications-feed.ts';
24
24
 
25
25
  // Reuses the shared, mode-aware (dark/light) panel palette's existing
26
- // bad/warn/info/dim tokens rather than minting new hex literals — this
26
+ // bad/warn/info/dim tokens rather than minting new hex literals, this
27
27
  // panel has no color needs the shared palette doesn't already name.
28
28
  const C = DEFAULT_PANEL_PALETTE;
29
29
 
@@ -51,17 +51,17 @@ function levelTag(level: PanelFeedEntry['level']): string {
51
51
  return `[${level}]`;
52
52
  }
53
53
 
54
- /** Build every Line an entry needs — title/meta row, then the full body and reason text wrapped with no line cap (descriptive text is never clipped). */
54
+ /** Build every Line an entry needs, title/meta row, then the full body and reason text wrapped with no line cap (descriptive text is never clipped). */
55
55
  function renderEntry(entry: PanelFeedEntry, width: number): Line[] {
56
56
  const lines: Line[] = [];
57
57
  const fg = levelColor(entry.level);
58
58
  const countSuffix = entry.collapsedCount > 1 ? ` ×${entry.collapsedCount}` : '';
59
- const headerText = `${levelTag(entry.level)} ${entry.domain} — ${entry.title}${countSuffix}`;
59
+ const headerText = `${levelTag(entry.level)} ${entry.domain}: ${entry.title}${countSuffix}`;
60
60
  for (const wrapped of wrapText(headerText, Math.max(1, width - 1))) {
61
61
  lines.push(buildStyledPanelLine(width, [{ text: ` ${wrapped}`, fg, bold: true }]));
62
62
  }
63
63
  const reasonText = entry.collapsedCount > 1
64
- ? ` ${entry.collapsedCount} notifications collapsed — ${REASON_DESCRIPTIONS[entry.reasonCode]}`
64
+ ? ` ${entry.collapsedCount} notifications collapsed: ${REASON_DESCRIPTIONS[entry.reasonCode]}`
65
65
  : ` ${REASON_DESCRIPTIONS[entry.reasonCode]}`;
66
66
  for (const wrapped of wrapText(reasonText, Math.max(1, width - 1))) {
67
67
  lines.push(buildStyledPanelLine(width, [{ text: ` ${wrapped}`, fg: C.dim }]));
@@ -1,10 +1,10 @@
1
1
  // ---------------------------------------------------------------------------
2
- // PanelConfirmOverlay — arm a confirm from outside, resolve it inside
2
+ // PanelConfirmOverlay, arm a confirm from outside, resolve it inside
3
3
  // handleInput().
4
4
  //
5
- // Why this exists: SlashCommand.handler(args, ctx) is a single-shot call —
5
+ // Why this exists: SlashCommand.handler(args, ctx) is a single-shot call,
6
6
  // there is no "await next keypress" primitive in the command layer. A command
7
- // that needs a destructive confirm (e.g. /rewind — checkpoint-runtime.ts) can
7
+ // that needs a destructive confirm (e.g. /rewind, checkpoint-runtime.ts) can
8
8
  // only resolve its target, open+focus a panel, and arm a pending confirm;
9
9
  // the actual y/n/Enter/Esc handling has to live in that panel's
10
10
  // handleInput() loop. This wraps the project's canonical ConfirmState<T>
@@ -24,7 +24,7 @@ export class PanelConfirmOverlay {
24
24
  private state: ConfirmState<{ id: string }> | null = null;
25
25
  private handlers: PanelConfirmOverlayHandlers | null = null;
26
26
 
27
- /** @param onChange Called after arm() and after a confirmed/cancelled resolution (not on an absorbed keypress) — wire to the host panel's protected markDirty(). */
27
+ /** @param onChange Called after arm() and after a confirmed/cancelled resolution (not on an absorbed keypress), wire to the host panel's protected markDirty(). */
28
28
  constructor(private readonly onChange: () => void = () => {}) {}
29
29
 
30
30
  /** Arm a confirm/cancel prompt. Caller's handlers run only from handleInput(), never eagerly. */
@@ -1,12 +1,12 @@
1
1
  // ---------------------------------------------------------------------------
2
- // PanelManager — central manager for panel lifecycle, navigation, and split
2
+ // PanelManager, central manager for panel lifecycle, navigation, and split
3
3
  // ---------------------------------------------------------------------------
4
4
 
5
5
  import type { Panel, PanelRegistration, PanelCategory, PanelDeepLinkTarget } from './types.ts';
6
6
  export type { PanelDeepLinkTarget } from './types.ts';
7
7
  // Type-only, erased at runtime, routed through the `@/` alias (not a relative
8
8
  // path) so it stays out of the relative-import graph the architecture
9
- // cycle-checker walks — same discipline as the PanelManager import in types.ts.
9
+ // cycle-checker walks, same discipline as the PanelManager import in types.ts.
10
10
  import type { ConfigModalSurface } from '@/input/config-modal-types.ts';
11
11
 
12
12
  // ---------------------------------------------------------------------------
@@ -39,7 +39,7 @@ export class PanelManager {
39
39
  /**
40
40
  * Retired panel id -> modal name (panels migrated to config-modal surfaces).
41
41
  * Unlike `aliases` (panel -> panel), a hit here means no panel is ever
42
- * constructed for this id — `open()` invokes `openModalCallback` instead
42
+ * constructed for this id, `open()` invokes `openModalCallback` instead
43
43
  * and returns a sentinel. This map and the open()-time check are the
44
44
  * sole mechanism for that redirect.
45
45
  */
@@ -75,7 +75,7 @@ export class PanelManager {
75
75
  // panel focus to disagree with workspace visibility (see getFocusTarget).
76
76
  private _focusTarget: 'prompt' | 'panel' = 'prompt';
77
77
 
78
- // Cache for getWorkspaceTabs() — invalidated on every panel lifecycle event
78
+ // Cache for getWorkspaceTabs(), invalidated on every panel lifecycle event
79
79
  private _cachedWorkspaceTabs: readonly WorkspaceTab[] | null = null;
80
80
 
81
81
  // Most-recently-opened panel ids (front = newest), for the picker's "Recent"
@@ -146,7 +146,7 @@ export class PanelManager {
146
146
  }
147
147
 
148
148
  /**
149
- * The modal name `panelIdOrAlias` redirects to, if any — lets callers
149
+ * The modal name `panelIdOrAlias` redirects to, if any, lets callers
150
150
  * (e.g. the `/panel` command) print "moved to the <name> modal" before or
151
151
  * instead of calling open().
152
152
  */
@@ -173,7 +173,7 @@ export class PanelManager {
173
173
 
174
174
  /**
175
175
  * Placeholder returned by open() for a modal-redirected id. Never pushed
176
- * into a pane, never retained, never rendered — it exists only so open()
176
+ * into a pane, never retained, never rendered, it exists only so open()
177
177
  * can keep its non-null `Panel` return type without constructing the real
178
178
  * (deleted) panel view. `name` carries the modal name so a caller that
179
179
  * inspects the returned panel's `name` (rather than calling
@@ -221,7 +221,7 @@ export class PanelManager {
221
221
  }
222
222
 
223
223
  // -------------------------------------------------------------------------
224
- // Panel lifecycle — operates on a specific pane (defaults to focused)
224
+ // Panel lifecycle, operates on a specific pane (defaults to focused)
225
225
  // -------------------------------------------------------------------------
226
226
 
227
227
  /** Invalidate the workspace tab cache. Call on every panel lifecycle mutation. */
@@ -278,7 +278,7 @@ export class PanelManager {
278
278
  /**
279
279
  * Hand an optional deep-link target (item 4) to a panel that just
280
280
  * resolved from open(). Panels without a "node" concept simply don't
281
- * implement `receiveDeepLink` — the call is a no-op via optional chaining.
281
+ * implement `receiveDeepLink`, the call is a no-op via optional chaining.
282
282
  */
283
283
  private _deliverDeepLink(panel: Panel, target: PanelDeepLinkTarget | undefined): Panel {
284
284
  if (target) panel.receiveDeepLink?.(target);
@@ -353,7 +353,7 @@ export class PanelManager {
353
353
  }
354
354
 
355
355
  // -------------------------------------------------------------------------
356
- // Navigation — operates on focused pane
356
+ // Navigation, operates on focused pane
357
357
  // -------------------------------------------------------------------------
358
358
 
359
359
  nextPanel(): void {
@@ -456,7 +456,7 @@ export class PanelManager {
456
456
 
457
457
  /**
458
458
  * Give keyboard focus to the panel workspace. No-op when there is nothing
459
- * focusable (no visible, non-empty pane with an active panel) — this is the
459
+ * focusable (no visible, non-empty pane with an active panel), this is the
460
460
  * guard that upholds the focus/visibility invariant on the write path.
461
461
  */
462
462
  focusPanels(): void {
@@ -497,10 +497,10 @@ export class PanelManager {
497
497
  this.bottomPane.activeIndex = 0;
498
498
  } else {
499
499
  // Open a predictable default panel in the bottom pane. purge:
500
- // 'panel-list' was deleted (dead weight over a 5-panel registry —
500
+ // 'panel-list' was deleted (dead weight over a 5-panel registry,
501
501
  // see the DELETE disposition), so the default is explicitly
502
502
  // 'fleet' rather than falling back to registry[0] (whatever
503
- // registers first, currently 'git' — see risk 5 in the brief).
503
+ // registers first, currently 'git', see risk 5 in the brief).
504
504
  const defaultPanel = this._getRegistration('fleet') ?? this.registry[0];
505
505
  if (defaultPanel) {
506
506
  this.open(defaultPanel.id, 'bottom');
@@ -606,7 +606,7 @@ export class PanelManager {
606
606
  toggle(): void {
607
607
  this._visible = !this._visible;
608
608
  // Auto-open a default panel if toggling visible with nothing open.
609
- // purge: explicitly 'fleet' rather than registry[0] — see the
609
+ // purge: explicitly 'fleet' rather than registry[0], see the
610
610
  // matching comment in toggleBottomPane() above.
611
611
  if (this._visible && this.topPane.panels.length === 0 && this.bottomPane.panels.length === 0) {
612
612
  const defaultPanel = this._getRegistration('fleet') ?? this.registry[0];
@@ -20,7 +20,7 @@ import {
20
20
  type PanelPalette,
21
21
  } from './polish.ts';
22
22
 
23
- // Base chrome only — title band, state colors, and text tokens all come
23
+ // Base chrome only, title band, state colors, and text tokens all come
24
24
  // straight from DEFAULT_PANEL_PALETTE.
25
25
  const C = DEFAULT_PANEL_PALETTE;
26
26
 
@@ -31,7 +31,7 @@ const C = DEFAULT_PANEL_PALETTE;
31
31
  * no mutation methods, so the constructor param is widened to also require
32
32
  * the handful of `PluginManager` methods this panel actually calls. The real
33
33
  * runtime object passed at bootstrap (`services.pluginManager`, a full
34
- * `PluginManager` instance — see src/runtime/services.ts) already satisfies
34
+ * `PluginManager` instance, see src/runtime/services.ts) already satisfies
35
35
  * this widened shape.
36
36
  */
37
37
  export type PluginManagerControls = PluginManagerObserver
@@ -87,7 +87,7 @@ export class PluginsPanel extends ScrollableListPanel<PluginStatus> {
87
87
  || plugin.version.toLowerCase().includes(q);
88
88
  }
89
89
 
90
- // selection is preserved across onActivate — BasePanel's default
90
+ // selection is preserved across onActivate, BasePanel's default
91
91
  // (mark dirty, no index reset) is exactly what we want, so no override.
92
92
 
93
93
  public override onDestroy(): void {
@@ -95,7 +95,7 @@ export class PluginsPanel extends ScrollableListPanel<PluginStatus> {
95
95
  }
96
96
 
97
97
  // -------------------------------------------------------------------------
98
- // Input — e=enable, d=disable (confirm), v=verify, q=lift quarantine (confirm)
98
+ // Input, e=enable, d=disable (confirm), v=verify, q=lift quarantine (confirm)
99
99
  // -------------------------------------------------------------------------
100
100
 
101
101
  public handleInput(key: string): boolean {
@@ -149,7 +149,7 @@ export class PluginsPanel extends ScrollableListPanel<PluginStatus> {
149
149
  }
150
150
 
151
151
  /**
152
- * optional one-key capture-to-memory for a quarantined plugin — 'm'
152
+ * optional one-key capture-to-memory for a quarantined plugin, 'm'
153
153
  * dispatches `/recall capture plugin <name>` (recall-capture.ts:146 pattern)
154
154
  * instead of requiring the operator to type the command by hand.
155
155
  */
@@ -273,7 +273,7 @@ export class PluginsPanel extends ScrollableListPanel<PluginStatus> {
273
273
  return workspace;
274
274
  }
275
275
 
276
- // Provenance/error posture header — surface trust + quarantine pressure first.
276
+ // Provenance/error posture header, surface trust + quarantine pressure first.
277
277
  const quarantined = plugins.filter((p) => p.quarantined).length;
278
278
  const untrusted = plugins.filter((p) => p.trustTier === 'untrusted').length;
279
279
  const active = plugins.filter((p) => p.active).length;
@@ -9,7 +9,7 @@ import { activeUiTones, registerThemeRefresh } from '../renderer/theme.ts';
9
9
  // The leaf foundation of the panel formatting toolkit: both `polish.ts` and
10
10
  // `polish-tables.ts` build on these. Kept dependency-free (only grid /
11
11
  // terminal-width / ui-primitives) so it never participates in an import cycle.
12
- // All symbols are re-exported from `polish.ts` — panels import from there.
12
+ // All symbols are re-exported from `polish.ts`, panels import from there.
13
13
  // ---------------------------------------------------------------------------
14
14
 
15
15
  export interface PanelPalette {
@@ -33,7 +33,7 @@ export interface PanelPalette {
33
33
 
34
34
  // Built from the mode-resolved chrome tones (activeUiTones). Because 100+ call
35
35
  // sites read this object by reference, mode changes rebuild it IN PLACE via the
36
- // registered refresher below rather than re-resolving per call — see theme.ts's
36
+ // registered refresher below rather than re-resolving per call, see theme.ts's
37
37
  // active-mode runtime note. This refresher is registered before any panel's
38
38
  // extendPalette() runs (panels import polish → polish-core first), so on a mode
39
39
  // flip the base is rebuilt before the extended palettes re-merge from it.
@@ -10,7 +10,7 @@ import type { PanelPalette, StyledPanelSegment } from './polish-core.ts';
10
10
  // Shared formatting primitives (the toolkit panels standardize on).
11
11
  //
12
12
  // All are display-width aware (via getDisplayWidth / truncateDisplay) so they
13
- // stay aligned across emoji, CJK, and other wide characters — never hand-roll
13
+ // stay aligned across emoji, CJK, and other wide characters, never hand-roll
14
14
  // .slice()/.padEnd() truncation or alignment in panels.
15
15
  // ---------------------------------------------------------------------------
16
16
 
@@ -113,7 +113,7 @@ const STATUS_BADGES: Record<StatusBadgeKind, BadgeSpec> = {
113
113
 
114
114
  /**
115
115
  * Canonical status badge (glyph + label) with a consistent color per lifecycle
116
- * state. Returns StyledPanelSegment[] — spread into a buildPanelLine call:
116
+ * state. Returns StyledPanelSegment[], spread into a buildPanelLine call:
117
117
  * buildPanelLine(width, [[' ', C.label], ...buildStatusBadge('running')])
118
118
  * Supersedes ad-hoc per-panel status→color maps.
119
119
  */
@@ -162,7 +162,7 @@ export function buildSearchInputLine(
162
162
  /**
163
163
  * Build a status pill segment (glyph + label) for use in buildPanelLine.
164
164
  *
165
- * Returns StyledPanelSegment[] — spread directly into a buildPanelLine segments
165
+ * Returns StyledPanelSegment[], spread directly into a buildPanelLine segments
166
166
  * array:
167
167
  * buildPanelLine(width, [[' count ', C.label], ...buildStatusPill('bad', '3')])
168
168
  *
@@ -17,7 +17,7 @@ export interface PlanningAnswerAction {
17
17
  readonly disabled?: boolean;
18
18
  }
19
19
 
20
- /** SDK placeholder recommendations that carry no real signal — never surfaced as an answer action. */
20
+ /** SDK placeholder recommendations that carry no real signal, never surfaced as an answer action. */
21
21
  export function isGenericRecommendation(value: string): boolean {
22
22
  return /\bdefine the first-pass scope\b/i.test(value)
23
23
  || /\bcreate task records\b/i.test(value)
@@ -32,12 +32,12 @@ function compactAnswerDetail(text: string): string {
32
32
 
33
33
  /**
34
34
  * Builds the answer-action list for the current question: keyword-matched
35
- * canned suggestions first (de-duplicated by normalized answer text — a
35
+ * canned suggestions first (de-duplicated by normalized answer text, a
36
36
  * question that matches more than one keyword category, e.g. scope +
37
37
  * recommendedAnswer echoing one of the scope answers verbatim, must not show
38
38
  * the same suggested answer twice), then the fixed ask-narrower/custom actions.
39
39
  *
40
- * dismissing planning is no longer a pseudo answer-row — it is a
40
+ * dismissing planning is no longer a pseudo answer-row, it is a
41
41
  * first-class confirmed modal action (the `d` key), so no dismiss row is
42
42
  * produced here. A canned answer records against the current open question via
43
43
  * /plan answer; the custom row's free-form text is submitted to chat.
@@ -22,15 +22,15 @@ import { GLYPHS } from '../renderer/ui-primitives.ts';
22
22
  * Base class for all list-based panels that require scroll/cursor navigation.
23
23
  *
24
24
  * Subclasses implement:
25
- * - `getItems()` — the ordered list of items to display
26
- * - `renderItem(item, index, selected, width)` — one `Line` per item
25
+ * - `getItems()`, the ordered list of items to display
26
+ * - `renderItem(item, index, selected, width)`, one `Line` per item
27
27
  *
28
28
  * Optionally override:
29
- * - `getEmptyStateMessage()` / `getEmptyStateActions()` — empty-state copy
30
- * - `onSelect(item)` — called when the user presses Enter
31
- * - `onAction(item, action)` — for secondary key bindings
32
- * - `getPalette()` — colour palette (defaults to `DEFAULT_PANEL_PALETTE`)
33
- * - `getPageSize()` — rows per page-up/page-down (default 10)
29
+ * - `getEmptyStateMessage()` / `getEmptyStateActions()`, empty-state copy
30
+ * - `onSelect(item)`, called when the user presses Enter
31
+ * - `onAction(item, action)`, for secondary key bindings
32
+ * - `getPalette()`, colour palette (defaults to `DEFAULT_PANEL_PALETTE`)
33
+ * - `getPageSize()`, rows per page-up/page-down (default 10)
34
34
  *
35
35
  * `renderList()` produces the full `Line[]` output that a trivial panel's
36
36
  * `render()` can return directly:
@@ -71,7 +71,7 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
71
71
  }
72
72
 
73
73
  /**
74
- * The list after applying the active filter — used for both display and
74
+ * The list after applying the active filter, used for both display and
75
75
  * navigation. Identical to `getItems()` unless a filter is enabled and a
76
76
  * non-empty query is set, so existing panels are unaffected.
77
77
  */
@@ -84,12 +84,12 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
84
84
 
85
85
  /**
86
86
  * The item currently under the cursor, resolved against the FILTERED list
87
- * that navigation actually moves over (`getVisibleItems()`) — never the raw
87
+ * that navigation actually moves over (`getVisibleItems()`), never the raw
88
88
  * `getItems()` source.
89
89
  *
90
90
  * Subclasses MUST read the selected row through this method (or, when a
91
91
  * function also needs the list for counts/windows, through a function-scope
92
- * `const visible = this.getVisibleItems()` local — indexing that local, never
92
+ * `const visible = this.getVisibleItems()` local, indexing that local, never
93
93
  * the raw source). Indexing a raw item array (`this.rows`, `this.entries`,
94
94
  * `getItems()`, …) with `this.selectedIndex` silently returns the wrong row
95
95
  * whenever a filter is active, because `selectedIndex` is an offset into the
@@ -126,7 +126,7 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
126
126
  this.needsRender = true;
127
127
  return true;
128
128
  }
129
- // Arrow/paging keys navigate the filtered list — fall through.
129
+ // Arrow/paging keys navigate the filtered list, fall through.
130
130
  if (key === 'up' || key === 'down' || key === 'pageup' || key === 'pagedown' || key === 'home' || key === 'end') {
131
131
  return null;
132
132
  }
@@ -172,7 +172,7 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
172
172
  }
173
173
 
174
174
  // -------------------------------------------------------------------------
175
- // Abstract — subclasses must implement
175
+ // Abstract, subclasses must implement
176
176
  // -------------------------------------------------------------------------
177
177
 
178
178
  /** Return the full ordered list of items to display. */
@@ -224,7 +224,7 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
224
224
  }
225
225
 
226
226
  // -------------------------------------------------------------------------
227
- // Navigation — consistent across ALL panels
227
+ // Navigation, consistent across ALL panels
228
228
  // -------------------------------------------------------------------------
229
229
 
230
230
  /**
@@ -245,7 +245,7 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
245
245
  /**
246
246
  * The `/`-to-filter buffer wants every character of a burst (paste, or a
247
247
  * fast-typed query landing in one input.feed() call), same as it always
248
- * has — see the interface doc on `Panel.isCapturingTextBurst`.
248
+ * has, see the interface doc on `Panel.isCapturingTextBurst`.
249
249
  */
250
250
  isCapturingTextBurst(): boolean {
251
251
  return this.filterEnabled && this.filterActive;
@@ -348,7 +348,7 @@ export abstract class ScrollableListPanel<T> extends BasePanel {
348
348
  }
349
349
 
350
350
  // -------------------------------------------------------------------------
351
- // Render helper — the main convenience entry point
351
+ // Render helper, the main convenience entry point
352
352
  // -------------------------------------------------------------------------
353
353
 
354
354
  /**
@@ -20,7 +20,7 @@ export function getPanelSearchFocusTransition(
20
20
  // Panel search filters are end-anchored (no moveable cursor).
21
21
  // Per the delete-key policy (src/input/delete-key-policy.ts):
22
22
  // 'backspace' removes the last character.
23
- // 'delete' is a no-op — there is no cursor, so forward-delete is meaningless.
23
+ // 'delete' is a no-op, there is no cursor, so forward-delete is meaningless.
24
24
  export function isPanelSearchBackspace(key: string): boolean {
25
25
  return isTextBackspace(key);
26
26
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * The canonical evaluator is the SDK version exported from @/runtime/index.ts
5
5
  * (via operations.evaluateSessionMaintenance), which reads from configManager.
6
- * Import the evaluator from there — this module provides only the shared
6
+ * Import the evaluator from there, this module provides only the shared
7
7
  * Panel* type surface used across TUI panels and tests; it intentionally does
8
8
  * not re-implement the evaluator.
9
9
  */
@@ -34,7 +34,7 @@ export interface SkillRecord {
34
34
  frontmatter: Record<string, string>;
35
35
  /**
36
36
  * Set when this skill's file lives under an installed ecosystem-marketplace
37
- * receipt's targetPath — the receipt's provenance summary (e.g. curated
37
+ * receipt's targetPath, the receipt's provenance summary (e.g. curated
38
38
  * source / signature info), so marketplace-installed skills read as such
39
39
  * instead of looking identical to hand-authored ones.
40
40
  */
@@ -370,7 +370,7 @@ export class SkillsPanel extends ScrollableListPanel<SkillRecord> {
370
370
  // (the purge): Enter used to open the skill's markdown source in the
371
371
  // preview panel via a staged pendingOpenPreview flag + handlePanelIntegrationAction
372
372
  // (same pattern diff-panel.ts used). 'preview' is DELETE-disposition with no
373
- // successor surface (no file-picker-overlay preview to repoint to either —
373
+ // successor surface (no file-picker-overlay preview to repoint to either,
374
374
  // verified), so that cross-panel jump was removed rather than repointed;
375
375
  // Enter is currently a no-op on this list (browse-only until migrates
376
376
  // Skills to a modal).
@@ -392,7 +392,7 @@ export class SkillsPanel extends ScrollableListPanel<SkillRecord> {
392
392
  }
393
393
  if (confirmResult === 'absorbed') return true;
394
394
 
395
- // I1: 'd' prompts delete confirmation — only outside filter mode, so 'd'
395
+ // I1: 'd' prompts delete confirmation, only outside filter mode, so 'd'
396
396
  // remains typeable into the filter query while it is active (// converged modal '/' filter coexists with single-letter action keys).
397
397
  if (!this.filterActive && key === 'd') {
398
398
  const skill = this.getSelectedItem();
@@ -43,7 +43,7 @@ interface TurnUsage {
43
43
  // ---------------------------------------------------------------------------
44
44
 
45
45
  const C = extendPalette(DEFAULT_PANEL_PALETTE, {
46
- // Token data-series colors (input/output/cache) — categorical, no shared equivalent
46
+ // Token data-series colors (input/output/cache), categorical, no shared equivalent
47
47
  input: '#00ffff',
48
48
  output: '#d000ff',
49
49
  cacheRead: '#00d700',
@@ -96,11 +96,11 @@ function fmtTok(n: number): string {
96
96
  export class TokenBudgetPanel extends BasePanel {
97
97
  /** Snapshot of cumulative usage from the Orchestrator after each turn. */
98
98
  private sessionUsage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
99
- /** lastInputTokens from the Orchestrator — current context window occupancy. */
99
+ /** lastInputTokens from the Orchestrator, current context window occupancy. */
100
100
  private lastInputTokens = 0;
101
101
  /** Context window size from the model config (0 = unknown). */
102
102
  private contextWindow = 0;
103
- /** Per-turn snapshots — at most MAX_TURN_HISTORY entries. */
103
+ /** Per-turn snapshots, at most MAX_TURN_HISTORY entries. */
104
104
  private turnHistory: TurnUsage[] = [];
105
105
  /** Previous cumulative snapshot to compute per-turn delta. */
106
106
  private prevCumulative = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
@@ -115,7 +115,7 @@ export class TokenBudgetPanel extends BasePanel {
115
115
  private readonly configManager: Pick<ConfigManager, 'get'>;
116
116
  private readonly requestRender: () => void;
117
117
 
118
- /** Turn-event bus subscriptions — absorbed from ContextVisualizerPanel. */
118
+ /** Turn-event bus subscriptions, absorbed from ContextVisualizerPanel. */
119
119
  private unsubs: Array<() => void> = [];
120
120
 
121
121
  /** Manual scroll cursor into turnHistory; -1 = auto-follow the latest turn. */
@@ -261,7 +261,7 @@ export class TokenBudgetPanel extends BasePanel {
261
261
  }
262
262
 
263
263
  handleInput(key: string): boolean {
264
- // Confirmation dialog — use the shared handleConfirmInput for y/n/Esc UX
264
+ // Confirmation dialog, use the shared handleConfirmInput for y/n/Esc UX
265
265
  const confirmResult = handleConfirmInput(this.confirm, key);
266
266
  if (confirmResult === 'confirmed') {
267
267
  this.confirm = null;
@@ -462,11 +462,11 @@ export class TokenBudgetPanel extends BasePanel {
462
462
  const nextStep = status.nextSteps[0]!;
463
463
  // when the recommended next step is /compact and C is armed
464
464
  // (see handleInput's elevated-only C branch and the footer hint),
465
- // advertise the key instead of the command — pressing C already
465
+ // advertise the key instead of the command, pressing C already
466
466
  // dispatches it for real, so printing '/compact' here was a redundant
467
467
  // action substitute.
468
468
  if (nextStep === '/compact' && this._pressureElevated()) {
469
- lines.push(buildGuidanceLine(width, 'C', 'compact context now — the recommended next maintenance action', DEFAULT_PANEL_PALETTE));
469
+ lines.push(buildGuidanceLine(width, 'C', 'compact context now: the recommended next maintenance action', DEFAULT_PANEL_PALETTE));
470
470
  } else {
471
471
  lines.push(buildGuidanceLine(width, nextStep, 'open the next maintenance action directly', DEFAULT_PANEL_PALETTE));
472
472
  }
@@ -569,14 +569,14 @@ export class TokenBudgetPanel extends BasePanel {
569
569
  const suffix = ` ${fmtTok(this.lastInputTokens)}/${fmtTok(this.contextWindow)} (${pctInt}%)${warnSuffix}`;
570
570
  const BAR_W = Math.max(8, width - label.length - suffix.length - 2);
571
571
  const filled = Math.round(pct * BAR_W);
572
- // Context fill is the headline metric — render it with the shared meter
572
+ // Context fill is the headline metric, render it with the shared meter
573
573
  // primitive so the bar glyphs and width handling match every other panel.
574
574
  lines.push(buildMeterLine(width, filled, BAR_W,
575
575
  { filled: barColor, empty: C.barBg, label: C.label },
576
576
  { prefix: label, suffix },
577
577
  ));
578
578
 
579
- // Pressure pill — absorbed from ContextVisualizerPanel's headline indicator.
579
+ // Pressure pill, absorbed from ContextVisualizerPanel's headline indicator.
580
580
  const overLimit = this.contextWindow > 0 && this.lastInputTokens > this.contextWindow;
581
581
  const pressureState = overLimit || pct >= WARN_RED ? 'bad' : pct >= WARN_YELLOW ? 'warn' : 'good';
582
582
  const pressureLabel = overLimit ? 'over limit' : pct >= WARN_RED ? 'critical' : pct >= WARN_YELLOW ? 'elevated' : 'healthy';
@@ -612,7 +612,7 @@ export class TokenBudgetPanel extends BasePanel {
612
612
  ]));
613
613
  }
614
614
 
615
- // Inline cost estimate — absorbed pricing wiring (cost-utils.ts), shown
615
+ // Inline cost estimate, absorbed pricing wiring (cost-utils.ts), shown
616
616
  // whenever the active model id is known.
617
617
  if (this.getCurrentModelId) {
618
618
  const modelId = this.getCurrentModelId();
@@ -628,7 +628,7 @@ export class TokenBudgetPanel extends BasePanel {
628
628
  ? [{ text: ` (${source})`, fg: C.dim }]
629
629
  : priced
630
630
  ? []
631
- : [{ text: ' — set it with p on the cost panel', fg: C.dim }]),
631
+ : [{ text: ': set it with p on the cost panel', fg: C.dim }]),
632
632
  ]));
633
633
  }
634
634
 
@@ -3,7 +3,7 @@ import type { StatusState } from '../renderer/status-glyphs.ts';
3
3
  import type { ComponentResourceContract, ComponentHealthState } from '../runtime/perf/panel-contracts.ts';
4
4
  // Routed through the `@/` alias (not `./panel-manager.ts`) so this foundational
5
5
  // types module stays a leaf in the relative-import graph the architecture
6
- // cycle-checker walks. Type-only, erased at runtime — no real dependency edge.
6
+ // cycle-checker walks. Type-only, erased at runtime, no real dependency edge.
7
7
  import type { PanelManager } from '@/panels/panel-manager.ts';
8
8
 
9
9
  /**
@@ -20,7 +20,7 @@ export interface PanelIntegrationContext {
20
20
  * A cross-panel deep-link target (item 4): a specific node a panel
21
21
  * should select + reveal when opened via `PanelManager.open(id, pane, target)`,
22
22
  * e.g. a Fleet tree node keyed by its process id and (optionally) its
23
- * ProcessKind for disambiguation. Panel-agnostic on purpose — only panels that
23
+ * ProcessKind for disambiguation. Panel-agnostic on purpose, only panels that
24
24
  * have a "node" concept implement `Panel.receiveDeepLink`.
25
25
  */
26
26
  export interface PanelDeepLinkTarget {
@@ -56,7 +56,7 @@ export type NamedKey =
56
56
  export type KeyName = NamedKey | (string & {});
57
57
 
58
58
  /**
59
- * the former single 'monitoring' bucket held 33 panels pre-merge —
59
+ * the former single 'monitoring' bucket held 33 panels pre-merge,
60
60
  * too coarse for the picker to be useful and too large for any one operator
61
61
  * mental model. Split into named operator domains so each category holds a
62
62
  * bounded, coherent set (no category may exceed 10 registrations):
@@ -102,10 +102,10 @@ export interface Panel {
102
102
  /** Called by the compositor after a successful render to clear the dirty flag. */
103
103
  markRendered(): void;
104
104
 
105
- // Resource contract (optional — panels may declare resource requirements)
105
+ // Resource contract (optional, panels may declare resource requirements)
106
106
  resourceContract?: Readonly<ComponentResourceContract>;
107
107
 
108
- // Health state (optional — set by ComponentHealthMonitor when panel is registered)
108
+ // Health state (optional, set by ComponentHealthMonitor when panel is registered)
109
109
  healthState?: Readonly<ComponentHealthState>;
110
110
 
111
111
  // Input (optional)
@@ -114,8 +114,8 @@ export interface Panel {
114
114
  /**
115
115
  * Optional: report `true` while this panel has an active inline text
116
116
  * capture (e.g. a `/`-to-filter or search buffer) that deliberately wants
117
- * every character of a burst — paste, or several keystrokes typed fast
118
- * enough to land in one `input.feed()` call — delivered to `handleInput`
117
+ * every character of a burst, paste, or several keystrokes typed fast
118
+ * enough to land in one `input.feed()` call, delivered to `handleInput`
119
119
  * one at a time, same as it always has. When this returns `false` or is
120
120
  * not implemented, the input router treats a printable burst as never a
121
121
  * deliberate single-key panel hotkey and routes it to the composer
@@ -141,11 +141,11 @@ export interface Panel {
141
141
  /**
142
142
  * Optional: called by the global Ctrl+X (`panel-close`) shortcut BEFORE it
143
143
  * closes this panel (handler-shortcuts.ts). Return `true` to consume
144
- * Ctrl+X for an in-panel action instead — e.g. FleetPanel (session
144
+ * Ctrl+X for an in-panel action instead, e.g. FleetPanel (session
145
145
  * tabs) detaches its active tab and leaves the panel open. Return `false`
146
146
  * (or omit this hook) to fall through to the ordinary close behavior.
147
147
  * Ctrl+X never reaches a panel's own `handleInput` (ctrl/meta combos are
148
- * intercepted earlier — see handlePanelFocusToken in
148
+ * intercepted earlier, see handlePanelFocusToken in
149
149
  * src/input/handler-feed-routes.ts), so this is the one seam a panel has
150
150
  * to intervene before the global shortcut acts.
151
151
  */
@@ -153,12 +153,12 @@ export interface Panel {
153
153
 
154
154
  /**
155
155
  * Optional: consume a deep-link target handed in by `PanelManager.open(id,
156
- * pane, target)` (item 4) — select + reveal the matching node on the
156
+ * pane, target)` (item 4), select + reveal the matching node on the
157
157
  * panel's next snapshot. A panel without a "node" concept simply doesn't
158
158
  * implement this (the call is a no-op via optional chaining in
159
159
  * PanelManager). A panel that DOES implement it owns its own honest
160
160
  * "not found" surface (e.g. FleetPanel.setError) when the target no longer
161
- * resolves — PanelManager has no transcript/print seam to report on its
161
+ * resolves, PanelManager has no transcript/print seam to report on its
162
162
  * behalf.
163
163
  */
164
164
  receiveDeepLink?(target: PanelDeepLinkTarget): void;
@@ -168,19 +168,19 @@ export interface PanelRegistration extends Pick<Panel, 'id' | 'name' | 'icon' |
168
168
  factory: () => Panel;
169
169
  description: string;
170
170
  /**
171
- * lifecycle flags. `preload` and `retainOnClose` are independent —
171
+ * lifecycle flags. `preload` and `retainOnClose` are independent,
172
172
  * a panel can eagerly instantiate without being kept alive on close, or be
173
173
  * kept alive on close without eager bootstrap instantiation. They happened
174
174
  * to be identical for all builtin panels before this split (both driven by
175
175
  * a single `preload: true`); that existing 10-panel retained set is
176
176
  * preserved unchanged by giving each of those 10 registrations both flags.
177
177
  *
178
- * - `preload` — instantiate this panel during `PanelManager.prewarmRegistered()`
178
+ * - `preload`, instantiate this panel during `PanelManager.prewarmRegistered()`
179
179
  * (called once at bootstrap) so its factory runs and it starts
180
180
  * accumulating background data (subscriptions, timers) before the user
181
181
  * ever opens the workspace. Panels without `preload` are instantiated
182
182
  * lazily on first `open()`.
183
- * - `retainOnClose` — when this panel is closed, keep the live instance in
183
+ * - `retainOnClose`, when this panel is closed, keep the live instance in
184
184
  * `PanelManager`'s retained-panel map (background subscriptions/timers
185
185
  * keep running) instead of calling `onDestroy()`. Reopening returns the
186
186
  * same instance with its accumulated state intact. Panels without