@pellux/goodvibes-tui 2.0.21 → 2.1.0

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 (388) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +16 -16
  3. package/docs/README.md +4 -4
  4. package/docs/foundation-artifacts/operator-contract.json +1 -1
  5. package/package.json +16 -6
  6. package/src/cli/management.ts +5 -2
  7. package/src/cli/tui-startup.ts +34 -39
  8. package/src/core/agent-view-render.ts +157 -0
  9. package/src/core/approval-alert.ts +49 -11
  10. package/src/core/bookmark-navigation.ts +7 -1
  11. package/src/core/budget-breach-notifier.ts +27 -8
  12. package/src/core/compaction-receipt.ts +1 -1
  13. package/src/core/context-usage.ts +1 -1
  14. package/src/core/conversation-compaction-render.ts +3 -3
  15. package/src/core/conversation-display-only.ts +86 -0
  16. package/src/core/conversation-event-navigation.ts +27 -0
  17. package/src/core/conversation-line-cache.ts +216 -447
  18. package/src/core/conversation-render-context.ts +20 -27
  19. package/src/core/conversation-rendering.ts +157 -575
  20. package/src/core/conversation-splash-state.ts +6 -1
  21. package/src/core/conversation-types.ts +35 -0
  22. package/src/core/conversation-usage.ts +12 -0
  23. package/src/core/conversation.ts +130 -131
  24. package/src/core/long-task-notifier.ts +100 -31
  25. package/src/core/notices.ts +75 -0
  26. package/src/core/pairing-tailscale-gateway.ts +1 -1
  27. package/src/core/process-output-log.ts +143 -0
  28. package/src/core/rewind-receipt.ts +1 -1
  29. package/src/core/session-focus.ts +190 -0
  30. package/src/core/session-resume-core.ts +23 -81
  31. package/src/core/stream-event-wiring.ts +31 -5
  32. package/src/core/system-message-noise.ts +2 -2
  33. package/src/core/system-message-router.ts +16 -18
  34. package/src/core/turn-event-wiring.ts +272 -33
  35. package/src/core/work-tree-focus.ts +290 -0
  36. package/src/core/work-tree-fold-store.ts +143 -0
  37. package/src/core/work-tree-model.ts +799 -0
  38. package/src/core/work-tree-render.ts +384 -0
  39. package/src/core/work-tree-sources.ts +184 -0
  40. package/src/core/work-tree-wiring.ts +176 -0
  41. package/src/core/workstream-notification.ts +36 -6
  42. package/src/core/wrfc-notice-titles.ts +37 -0
  43. package/src/input/agents-modal-text.ts +119 -0
  44. package/src/input/agents-modal.ts +699 -0
  45. package/src/input/bookmark-modal.ts +33 -9
  46. package/src/input/changes-git.ts +251 -0
  47. package/src/input/changes-modal.ts +629 -0
  48. package/src/input/changes-model.ts +125 -0
  49. package/src/input/command-palette-types.ts +41 -0
  50. package/src/input/command-palette.ts +272 -0
  51. package/src/input/command-registry.ts +77 -35
  52. package/src/input/commands/acp-runtime.ts +19 -9
  53. package/src/input/commands/channel-runtime.ts +2 -2
  54. package/src/input/commands/ci-runtime.ts +1 -1
  55. package/src/input/commands/codebase-runtime.ts +1 -1
  56. package/src/input/commands/config.ts +7 -1
  57. package/src/input/commands/context-window.ts +25 -19
  58. package/src/input/commands/control-room-runtime.ts +18 -18
  59. package/src/input/commands/conversation-runtime.ts +0 -1
  60. package/src/input/commands/cost-runtime.ts +29 -20
  61. package/src/input/commands/diff-runtime.ts +35 -181
  62. package/src/input/commands/eval.ts +1 -1
  63. package/src/input/commands/experience-runtime.ts +3 -7
  64. package/src/input/commands/fresh-conversation.ts +86 -0
  65. package/src/input/commands/git-runtime.ts +5 -22
  66. package/src/input/commands/graph-runtime.ts +1 -1
  67. package/src/input/commands/guidance-runtime.ts +1 -1
  68. package/src/input/commands/health-runtime.ts +8 -9
  69. package/src/input/commands/hooks-runtime.ts +2 -2
  70. package/src/input/commands/hosted-runtime.ts +3 -3
  71. package/src/input/commands/incident-runtime.ts +3 -3
  72. package/src/input/commands/intelligence-runtime.ts +6 -9
  73. package/src/input/commands/knowledge.ts +2 -2
  74. package/src/input/commands/legacy-panel-command.ts +57 -0
  75. package/src/input/commands/local-auth-runtime.ts +8 -9
  76. package/src/input/commands/local-provider-runtime.ts +7 -4
  77. package/src/input/commands/local-runtime.ts +12 -15
  78. package/src/input/commands/local-setup-review.ts +1 -1
  79. package/src/input/commands/local-setup.ts +13 -19
  80. package/src/input/commands/memory.ts +1 -1
  81. package/src/input/commands/notify-runtime.ts +9 -0
  82. package/src/input/commands/operator-runtime.ts +10 -12
  83. package/src/input/commands/permissions-provenance.ts +3 -3
  84. package/src/input/commands/planning-runtime.ts +7 -7
  85. package/src/input/commands/platform-sandbox-runtime.ts +2 -2
  86. package/src/input/commands/platform-services-runtime.ts +1 -1
  87. package/src/input/commands/policy-dispatch.ts +2 -2
  88. package/src/input/commands/policy.ts +3 -3
  89. package/src/input/commands/provider.ts +1 -1
  90. package/src/input/commands/remote-runtime.ts +1 -1
  91. package/src/input/commands/review-runtime.ts +39 -94
  92. package/src/input/commands/rewind-runtime.ts +81 -108
  93. package/src/input/commands/runtime-services.ts +15 -17
  94. package/src/input/commands/services-runtime.ts +2 -2
  95. package/src/input/commands/session-content.ts +21 -5
  96. package/src/input/commands/session-workflow.ts +13 -38
  97. package/src/input/commands/settings-sync-runtime.ts +2 -2
  98. package/src/input/commands/shell-core.ts +19 -4
  99. package/src/input/commands/skills-runtime.ts +2 -2
  100. package/src/input/commands/status-runtime.ts +13 -0
  101. package/src/input/commands/subscription-runtime.ts +1 -1
  102. package/src/input/commands/tasks-runtime.ts +2 -8
  103. package/src/input/commands/work-plan-runtime.ts +4 -4
  104. package/src/input/commands/workstream-attempts.ts +24 -47
  105. package/src/input/commands/workstream-runtime.ts +2 -2
  106. package/src/input/commands/worktree-runtime.ts +3 -3
  107. package/src/input/commands.ts +3 -1
  108. package/src/input/composer-editor.ts +44 -0
  109. package/src/input/concealed-input.ts +1 -1
  110. package/src/input/config-modal-types.ts +20 -8
  111. package/src/input/config-modal.ts +106 -105
  112. package/src/input/confirm-dialog-types.ts +28 -0
  113. package/src/input/confirm-dialog.ts +70 -0
  114. package/src/input/delete-key-policy.ts +3 -3
  115. package/src/input/feed-context-factory.ts +15 -16
  116. package/src/input/handler-command-route.ts +7 -42
  117. package/src/input/handler-content-actions.ts +16 -15
  118. package/src/input/handler-feed-routes.ts +26 -211
  119. package/src/input/handler-feed.ts +68 -95
  120. package/src/input/handler-interactions.ts +5 -3
  121. package/src/input/handler-modal-routes.ts +215 -216
  122. package/src/input/handler-modal-stack.ts +81 -11
  123. package/src/input/handler-modal-token-routes.ts +4 -0
  124. package/src/input/handler-onboarding.ts +0 -1
  125. package/src/input/handler-picker-routes.ts +65 -107
  126. package/src/input/handler-session-view-route.ts +149 -0
  127. package/src/input/handler-shortcuts.ts +16 -154
  128. package/src/input/handler-types.ts +4 -2
  129. package/src/input/handler-ui-state.ts +45 -15
  130. package/src/input/handler-work-tree-route.ts +123 -0
  131. package/src/input/handler.ts +25 -70
  132. package/src/input/keybindings.ts +16 -71
  133. package/src/input/masked-entry-modal.ts +117 -0
  134. package/src/input/mcp-workspace.ts +48 -17
  135. package/src/input/model-picker-filter.ts +8 -0
  136. package/src/input/model-picker-open.ts +99 -0
  137. package/src/input/model-picker-types.ts +1 -1
  138. package/src/input/model-picker.ts +92 -9
  139. package/src/input/notifications-modal.ts +123 -0
  140. package/src/input/overlay-filter.ts +26 -0
  141. package/src/input/profile-picker-modal.ts +37 -8
  142. package/src/input/search.ts +3 -3
  143. package/src/input/selection-modal-queue.ts +2 -0
  144. package/src/input/selection-modal.ts +28 -16
  145. package/src/input/session-picker-modal.ts +33 -8
  146. package/src/input/settings-modal-activation.ts +7 -2
  147. package/src/input/settings-modal-data.ts +11 -6
  148. package/src/input/settings-modal-types.ts +1 -1
  149. package/src/input/settings-modal.ts +20 -20
  150. package/src/input/submission-intent.ts +1 -1
  151. package/src/input/submission-router.ts +4 -9
  152. package/src/input/surface-modal-host.ts +110 -0
  153. package/src/input/theme-settings-actions.ts +82 -0
  154. package/src/input/usage-modal.ts +183 -0
  155. package/src/input/views.ts +97 -0
  156. package/src/main.ts +175 -165
  157. package/src/permissions/hunk-selection.ts +1 -1
  158. package/src/permissions/prompt-card.ts +511 -0
  159. package/src/permissions/prompt.ts +59 -622
  160. package/src/renderer/agents-modal.ts +310 -0
  161. package/src/renderer/autocomplete-overlay.ts +42 -220
  162. package/src/renderer/back-to-bottom.ts +80 -0
  163. package/src/renderer/block-actions-overlay.ts +30 -48
  164. package/src/renderer/bookmark-modal.ts +48 -79
  165. package/src/renderer/changes-modal.ts +325 -0
  166. package/src/renderer/code-block.ts +184 -106
  167. package/src/renderer/command-palette.ts +93 -0
  168. package/src/renderer/composer-fragments.ts +4 -4
  169. package/src/renderer/composer.ts +146 -0
  170. package/src/renderer/compositor.ts +26 -160
  171. package/src/renderer/config-modal.ts +185 -81
  172. package/src/renderer/confirm-dialog.ts +50 -0
  173. package/src/renderer/context-inspector.ts +116 -154
  174. package/src/renderer/context-status-hint.ts +4 -4
  175. package/src/renderer/conversation-layout.ts +20 -0
  176. package/src/renderer/conversation-overlays.ts +94 -84
  177. package/src/renderer/conversation-surface.ts +19 -38
  178. package/src/renderer/diff-tint.ts +98 -0
  179. package/src/renderer/file-picker-overlay.ts +63 -90
  180. package/src/renderer/footer-targets.ts +38 -0
  181. package/src/renderer/git-status.ts +3 -4
  182. package/src/renderer/header-line.ts +140 -117
  183. package/src/renderer/help-overlay.ts +133 -219
  184. package/src/renderer/history-search-overlay.ts +15 -12
  185. package/src/renderer/lane-graph/bead.ts +800 -0
  186. package/src/renderer/lane-graph/glyphs.ts +134 -0
  187. package/src/renderer/lane-graph/layout.ts +248 -0
  188. package/src/renderer/lane-graph/paint.ts +537 -0
  189. package/src/renderer/lane-graph/semantic-memo.ts +77 -0
  190. package/src/renderer/layout-engine.ts +2 -57
  191. package/src/renderer/layout.ts +7 -13
  192. package/src/renderer/markdown-inline.ts +2 -1
  193. package/src/renderer/markdown-table.ts +17 -12
  194. package/src/renderer/markdown.ts +92 -34
  195. package/src/renderer/masked-entry-modal.ts +78 -0
  196. package/src/renderer/mcp-workspace.ts +166 -203
  197. package/src/renderer/model-workspace.ts +381 -436
  198. package/src/renderer/notifications-modal.ts +116 -0
  199. package/src/renderer/onboarding/onboarding-wizard.ts +178 -588
  200. package/src/renderer/process-view.ts +192 -0
  201. package/src/renderer/profile-picker-modal.ts +58 -110
  202. package/src/renderer/search-overlay.ts +6 -3
  203. package/src/renderer/selection-modal-overlay.ts +87 -327
  204. package/src/renderer/semantic-diff.ts +2 -2
  205. package/src/renderer/session-chips.ts +102 -0
  206. package/src/renderer/session-picker-modal.ts +177 -297
  207. package/src/renderer/settings-modal-connections.ts +14 -23
  208. package/src/renderer/settings-modal-context.ts +367 -0
  209. package/src/renderer/settings-modal-helpers.ts +6 -11
  210. package/src/renderer/settings-modal.ts +322 -726
  211. package/src/renderer/shell-surface.ts +277 -175
  212. package/src/renderer/shortcuts-overlay.ts +217 -0
  213. package/src/renderer/status-line.ts +475 -0
  214. package/src/renderer/surface-compose.ts +174 -0
  215. package/src/renderer/surface-kit-extra.ts +303 -0
  216. package/src/renderer/surface-kit-list.ts +366 -0
  217. package/src/renderer/surface-kit-parts.ts +360 -0
  218. package/src/renderer/surface-kit.ts +568 -0
  219. package/src/renderer/syntax-highlighter.ts +280 -197
  220. package/src/renderer/syntax-theme.ts +51 -0
  221. package/src/renderer/system-message.ts +0 -1
  222. package/src/renderer/term-caps.ts +42 -1
  223. package/src/renderer/terminal-bg-probe.ts +116 -19
  224. package/src/renderer/terminal-palette-probe.ts +322 -0
  225. package/src/renderer/terminal-palette-reader.ts +183 -0
  226. package/src/renderer/terminal-palette.ts +58 -0
  227. package/src/renderer/theme-mode-config.ts +16 -1
  228. package/src/renderer/theme.ts +234 -207
  229. package/src/renderer/thinking.ts +0 -1
  230. package/src/renderer/throbber.ts +188 -0
  231. package/src/renderer/toast-center.ts +119 -0
  232. package/src/renderer/ui-factory.ts +39 -602
  233. package/src/renderer/ui-primitives.ts +8 -25
  234. package/src/renderer/usage-modal.ts +353 -0
  235. package/src/renderer/user-message.ts +58 -0
  236. package/src/renderer/voice-capture-chip.ts +53 -0
  237. package/src/runtime/bootstrap-command-context.ts +0 -5
  238. package/src/runtime/bootstrap-command-parts.ts +38 -89
  239. package/src/runtime/bootstrap-core.ts +13 -15
  240. package/src/runtime/bootstrap-hook-bridge.ts +12 -21
  241. package/src/runtime/bootstrap-notifier-sync.ts +17 -1
  242. package/src/runtime/bootstrap-shell.ts +16 -50
  243. package/src/runtime/bootstrap.ts +14 -14
  244. package/src/runtime/client/fleet-union.ts +5 -5
  245. package/src/runtime/client/hosted-exit.ts +2 -2
  246. package/src/runtime/client/hosted-sessions.ts +1 -1
  247. package/src/runtime/client/spine-adoption.ts +1 -1
  248. package/src/runtime/context-accounting-source.ts +5 -4
  249. package/src/runtime/index.ts +1 -0
  250. package/src/runtime/notification-dispatch.ts +102 -29
  251. package/src/runtime/recovery-offer-wiring.ts +4 -1
  252. package/src/runtime/recovery-prompt.ts +31 -15
  253. package/src/runtime/runtime-services-types.ts +10 -6
  254. package/src/runtime/services.ts +17 -12
  255. package/src/runtime/session-continuity-hints.ts +2 -5
  256. package/src/runtime/session-inbound-inputs.ts +1 -1
  257. package/src/runtime/session-resume-liveness-confirm.ts +14 -2
  258. package/src/runtime/startup-typeahead-gate.ts +103 -0
  259. package/src/runtime/store/domains/domain-read-matrix.ts +0 -1
  260. package/src/runtime/store/domains/index.ts +0 -8
  261. package/src/runtime/store/selectors/index.ts +0 -28
  262. package/src/runtime/store/state.ts +0 -8
  263. package/src/runtime/ui-services.ts +4 -6
  264. package/src/runtime/usage-tracker.ts +348 -0
  265. package/src/runtime/wrfc-persistence.ts +4 -4
  266. package/src/shell/blocking-input.ts +92 -2
  267. package/src/shell/recovery-input-helpers.ts +1 -1
  268. package/src/shell/session-views.ts +539 -0
  269. package/src/shell/status-report.ts +86 -0
  270. package/src/shell/transcript-scroll.ts +68 -0
  271. package/src/shell/ui-openers.ts +84 -172
  272. package/src/shell/view-openers.ts +205 -0
  273. package/src/tools/wrfc-agent-guard.ts +22 -2
  274. package/src/utils/format-duration.ts +4 -8
  275. package/src/utils/splash-lines.ts +9 -1
  276. package/src/utils/terminal-width.ts +56 -0
  277. package/src/verification/verification-ledger.ts +18 -16
  278. package/src/{panels → views}/agent-inspector-shared.ts +2 -2
  279. package/src/{panels → views}/builtin-modals.ts +22 -21
  280. package/src/views/builtin-views.ts +135 -0
  281. package/src/{panels → views}/confirm-state.ts +9 -9
  282. package/src/{panels → views}/diff-review-model.ts +10 -3
  283. package/src/{panels → views}/eval-registry.ts +1 -1
  284. package/src/{panels → views}/fleet-acts.ts +49 -85
  285. package/src/{panels/fleet-panel-format.ts → views/fleet-format.ts} +40 -40
  286. package/src/{panels → views}/fleet-gateway.ts +5 -5
  287. package/src/{panels → views}/fleet-observed-render.ts +16 -16
  288. package/src/{panels → views}/fleet-read-model.ts +9 -9
  289. package/src/{panels/fleet-tabs.ts → views/fleet-session-tabs.ts} +13 -13
  290. package/src/{panels → views}/fleet-spawn.ts +33 -49
  291. package/src/{panels → views}/fleet-steer.ts +12 -12
  292. package/src/{panels → views}/fleet-stop.ts +4 -4
  293. package/src/{panels → views}/fleet-transcript.ts +26 -27
  294. package/src/{panels/fleet-panel-worktree-detail.ts → views/fleet-worktree-detail.ts} +7 -7
  295. package/src/{panels → views}/hosted-session-feed.ts +6 -6
  296. package/src/views/modal-surface-registry.ts +41 -0
  297. package/src/{panels → views}/modals/devices-modal.ts +2 -2
  298. package/src/{panels → views}/modals/hooks-modal.ts +13 -13
  299. package/src/{panels → views}/modals/keybindings-modal.ts +19 -27
  300. package/src/{panels → views}/modals/knowledge-modal.ts +6 -5
  301. package/src/{panels → views}/modals/local-auth-modal.ts +22 -21
  302. package/src/{panels → views}/modals/marketplace-modal.ts +11 -11
  303. package/src/{panels → views}/modals/memory-modal.ts +8 -8
  304. package/src/{panels → views}/modals/modal-surface-helpers.ts +15 -5
  305. package/src/{panels → views}/modals/pairing-modal.ts +9 -9
  306. package/src/{panels → views}/modals/planning-modal.ts +15 -20
  307. package/src/{panels → views}/modals/plugins-modal.ts +6 -6
  308. package/src/{panels → views}/modals/policy-modal.ts +13 -5
  309. package/src/{panels → views}/modals/provider-health-modal.ts +4 -4
  310. package/src/{panels → views}/modals/remote-modal.ts +3 -3
  311. package/src/{panels → views}/modals/sandbox-modal.ts +4 -4
  312. package/src/{panels → views}/modals/security-modal.ts +22 -16
  313. package/src/{panels → views}/modals/services-modal.ts +3 -3
  314. package/src/{panels → views}/modals/settings-sync-modal.ts +4 -4
  315. package/src/{panels → views}/modals/skills-modal.ts +9 -9
  316. package/src/{panels → views}/modals/subscription-modal.ts +3 -3
  317. package/src/{panels → views}/modals/work-plan-modal.ts +10 -13
  318. package/src/views/notifications-feed.ts +314 -0
  319. package/src/{panels → views}/polish-core.ts +38 -36
  320. package/src/{panels → views}/polish-tables.ts +35 -26
  321. package/src/{panels → views}/polish.ts +101 -95
  322. package/src/{panels → views}/project-planning-answer-actions.ts +3 -3
  323. package/src/{panels → views}/provider-health-routes.ts +14 -14
  324. package/src/{panels → views}/search-focus.ts +8 -8
  325. package/src/{panels → views}/session-maintenance.ts +11 -11
  326. package/src/views/skills-discovery.ts +159 -0
  327. package/src/views/view-deps.ts +80 -0
  328. package/src/views/view-panel-adapter.ts +53 -0
  329. package/src/{panels → views}/workstream-graph-render.ts +1 -1
  330. package/src/core/conversation-fold.ts +0 -101
  331. package/src/core/conversation-turn-structure.ts +0 -464
  332. package/src/core/conversation-user-receipts.ts +0 -42
  333. package/src/input/commands/operator-panel-runtime.ts +0 -186
  334. package/src/input/panel-integration-actions.ts +0 -33
  335. package/src/input/panel-mouse-geometry.ts +0 -97
  336. package/src/input/panel-paste-flood-guard.ts +0 -86
  337. package/src/panels/base-panel.ts +0 -301
  338. package/src/panels/builtin/agent.ts +0 -27
  339. package/src/panels/builtin/development.ts +0 -92
  340. package/src/panels/builtin/knowledge.ts +0 -12
  341. package/src/panels/builtin/operations.ts +0 -177
  342. package/src/panels/builtin/session.ts +0 -81
  343. package/src/panels/builtin/shared.ts +0 -357
  344. package/src/panels/builtin-panels.ts +0 -28
  345. package/src/panels/cost-tracker-panel.ts +0 -746
  346. package/src/panels/diff-panel.ts +0 -797
  347. package/src/panels/diff-review-panel.ts +0 -395
  348. package/src/panels/expandable-list-panel.ts +0 -189
  349. package/src/panels/fleet-deep-link.ts +0 -31
  350. package/src/panels/fleet-panel.ts +0 -799
  351. package/src/panels/git-panel.ts +0 -800
  352. package/src/panels/hosted-session-panel.ts +0 -221
  353. package/src/panels/index.ts +0 -21
  354. package/src/panels/local-auth-panel.ts +0 -478
  355. package/src/panels/notifications-feed.ts +0 -127
  356. package/src/panels/notifications-panel.ts +0 -160
  357. package/src/panels/panel-confirm-overlay.ts +0 -72
  358. package/src/panels/panel-manager.ts +0 -791
  359. package/src/panels/plugins-panel.ts +0 -371
  360. package/src/panels/scrollable-list-panel.ts +0 -498
  361. package/src/panels/skills-panel.ts +0 -454
  362. package/src/panels/token-budget-panel.ts +0 -688
  363. package/src/panels/types.ts +0 -191
  364. package/src/panels/wrfc-panel-format.ts +0 -133
  365. package/src/renderer/diff-view.ts +0 -134
  366. package/src/renderer/fleet-tab-strip.ts +0 -56
  367. package/src/renderer/footer-tips.ts +0 -53
  368. package/src/renderer/fullscreen-primitives.ts +0 -146
  369. package/src/renderer/fullscreen-workspace.ts +0 -194
  370. package/src/renderer/hint-grammar.ts +0 -52
  371. package/src/renderer/modal-factory.ts +0 -480
  372. package/src/renderer/overlay-box.ts +0 -154
  373. package/src/renderer/overlay-viewport.ts +0 -104
  374. package/src/renderer/panel-composite.ts +0 -145
  375. package/src/renderer/panel-workspace-bar.ts +0 -54
  376. package/src/renderer/process-indicator.ts +0 -163
  377. package/src/renderer/tab-strip.ts +0 -222
  378. package/src/renderer/text-layout.ts +0 -31
  379. package/src/renderer/tool-call.ts +0 -276
  380. package/src/renderer/tool-result-expanded-lines.ts +0 -48
  381. package/src/renderer/tool-result-summary.ts +0 -219
  382. package/src/runtime/diagnostics/panels/index.ts +0 -21
  383. package/src/runtime/diagnostics/panels/ops.ts +0 -156
  384. package/src/runtime/perf/panel-contracts.ts +0 -32
  385. package/src/runtime/store/domains/panels.ts +0 -117
  386. /package/src/{panels → views}/memory-consolidation-gateway.ts +0 -0
  387. /package/src/{panels → views}/modals/modal-theme.ts +0 -0
  388. /package/src/{panels → views}/provider-health-domains.ts +0 -0
@@ -19,7 +19,7 @@
19
19
  *
20
20
  * The SDK's own note on that shape applies here literally: it is a FLOOR, not a
21
21
  * ceiling. Everything below the `createClientRuntimeServices` call is what THIS
22
- * surface adds on top, panels, keybindings, the WRFC controller wired over the
22
+ * surface adds on top, views, keybindings, the WRFC controller wired over the
23
23
  * client's own `agentManager`, the workstream engine, the fleet read model, the
24
24
  * voice stack with its local playback sink, the knowledge stack the recall
25
25
  * surfaces read. None of those need daemon furniture; they are simply not
@@ -30,7 +30,7 @@
30
30
  *
31
31
  * `sessionBroker` and `approvalBroker` are still constructed. They are this
32
32
  * surface's own record of the sessions it is running and the asks it raised,
33
- * what the transcript, the session panel and the approval card read. They are
33
+ * what the transcript, the session browser and the approval card read. They are
34
34
  * NOT authoritative: session identity is mirrored to the daemon's spine
35
35
  * (register/heartbeat/inputs) and an ask is raised on the daemon
36
36
  * (`approvals.raise`) so every other surface can see and answer it. Where the
@@ -65,7 +65,7 @@ import { VoiceProviderRegistry, VoiceService, ensureBuiltinVoiceProviders } from
65
65
  import { CacheRegistry, PauseController } from '@pellux/goodvibes-sdk/platform/runtime/memory';
66
66
  import { wireMemoryGovernance } from './memory-governance-services.ts';
67
67
  import { wireVoiceSetup } from '@pellux/goodvibes-sdk/platform/runtime/operations';
68
- import { PanelManager } from '../panels/panel-manager.ts';
68
+ import { createViewPanelAdapter } from '../views/view-panel-adapter.ts';
69
69
  import { BookmarkManager } from '@pellux/goodvibes-sdk/platform/bookmarks';
70
70
  import { ProfileManager } from '@pellux/goodvibes-sdk/platform/profiles';
71
71
  import { SessionChangeTracker } from '@pellux/goodvibes-sdk/platform/sessions';
@@ -79,7 +79,7 @@ import { deriveFeatureStates, bindFeatureSettingsBridge } from '@pellux/goodvibe
79
79
  import { createChannelComposition } from '@pellux/goodvibes-sdk/platform/runtime/operations';
80
80
  import { applyProviderOptimizerConfigMode, bindProviderOptimizerFeatureFlag } from '@pellux/goodvibes-sdk/platform/runtime/operations';
81
81
  import { createFleetServices } from '@pellux/goodvibes-terminal-shell';
82
- import { createWorkstreamServices } from '@pellux/goodvibes-sdk/platform/orchestration';
82
+ import { createFixWorkstreamRunner, createWorkstreamServices } from '@pellux/goodvibes-sdk/platform/orchestration';
83
83
  import { codeIndexDbPath, createCodeIndexServices, createStoreRerooter, isCodeInjectionSettingEnabled } from '@pellux/goodvibes-sdk/platform/runtime/operations';
84
84
  import { WorkspaceTrustManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
85
85
  import { ensureConfiguredModelIsRoutable } from '@pellux/goodvibes-sdk/platform/providers';
@@ -102,7 +102,7 @@ import { createFleetUnionReadModel } from './client/fleet-union.ts';
102
102
  import { logger } from '@pellux/goodvibes-sdk/platform/utils';
103
103
  import { VERSION } from '../version.ts';
104
104
  import { createSessionConversationRewindPort, hasSessionConversation } from './conversation-rewind-port.ts';
105
- import { createFleetReadModel } from '../panels/fleet-read-model.ts';
105
+ import { createFleetReadModel } from '../views/fleet-read-model.ts';
106
106
  import type { PermissionPromptDecision, PermissionPromptRequest } from '@pellux/goodvibes-sdk/platform/permissions';
107
107
  import type { RuntimeServicesOptions, RuntimeServices } from './runtime-services-types.ts';
108
108
  export type { RuntimeServicesOptions, RuntimeServices } from './runtime-services-types.ts';
@@ -136,7 +136,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
136
136
  // nothing and keeps the ordering honest.
137
137
  const shellPaths = createShellPathService({ workingDirectory, homeDirectory });
138
138
  // The surface's own record of the asks it raised, what the approval card and
139
- // the panel read. The AUTHORITATIVE record is the daemon's; the raiser below
139
+ // the modal read. The AUTHORITATIVE record is the daemon's; the raiser below
140
140
  // keeps the two in step (see the SDK's client/approval-raiser.ts).
141
141
  const approvalBroker = new ApprovalBroker({
142
142
  storePath: shellPaths.resolveProjectPath('tui', 'control-plane', 'approvals.json'),
@@ -156,7 +156,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
156
156
  actor: 'tui',
157
157
  sessionId: () => liveSessionIdRef.value,
158
158
  // The "local prompt" is this surface's own broker plus the terminal ask:
159
- // that is what puts the ask on the approval card and in the panel while the
159
+ // that is what puts the ask on the approval card and in the modal while the
160
160
  // daemon holds the record every other surface reads.
161
161
  localPrompt: () => (request) => approvalBroker.requestApproval({
162
162
  request,
@@ -218,7 +218,8 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
218
218
  const admitExpensiveWork = (label: string): { allowed: boolean; reason?: string | undefined } =>
219
219
  admitExpensiveWorkRef.current?.(label) ?? { allowed: true };
220
220
  const isKnowledgeBackgroundPaused = (): boolean => pauseController.isPaused('knowledge-self-improvement');
221
- const panelManager = new PanelManager();
221
+ // The operator API's panels.list / panels.open, answered by the modal views.
222
+ const viewPanelAdapter = createViewPanelAdapter();
222
223
  const keybindingsManager = new KeybindingsManager({
223
224
  configPath: shellPaths.resolveUserPath('tui', 'keybindings.json'),
224
225
  });
@@ -265,6 +266,10 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
265
266
  agentManager,
266
267
  configManager,
267
268
  projectRoot: workingDirectory,
269
+ // A chain's fix phase: review findings become a dependency-graph
270
+ // workstream on the one orchestration engine, composed further down
271
+ // (createWorkstreamServices); the runner reads it when a fix cycle starts.
272
+ fixWorkstreamRunner: createFixWorkstreamRunner({ engine: () => orchestrationEngine }),
268
273
  });
269
274
  agentManager.setWrfcController(wrfcController);
270
275
  const sessionBroker = new SharedSessionBroker({
@@ -463,10 +468,10 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
463
468
  runtimeBus: options.runtimeBus,
464
469
  providerRegistry,
465
470
  });
466
- // What the Fleet panel reads: this surface's own live registry UNION the
471
+ // What the Agents modal reads: this surface's own live registry UNION the
467
472
  // adopted daemon's rows. The daemon runs work no registry here knows about
468
473
  // (scheduled jobs, channel-driven runs, sessions other surfaces started, the
469
- // external agents it observes), and a panel showing only half the fleet is
474
+ // external agents it observes), and a modal showing only half the fleet is
470
475
  // worse than one showing none, the half it shows looks complete.
471
476
  const fleetReadModel = createFleetUnionReadModel({
472
477
  local: createFleetReadModel(processRegistry, options.runtimeBus),
@@ -508,7 +513,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
508
513
 
509
514
  const integrationHelpers = new IntegrationHelperService({
510
515
  surface, configManager, automationManager, approvalBroker, sessionBroker, distributedRuntime,
511
- remoteRunnerRegistry, remoteSupervisor, panelManager, localUserAuthManager, providerRegistry,
516
+ remoteRunnerRegistry, remoteSupervisor, panelManager: viewPanelAdapter, localUserAuthManager, providerRegistry,
512
517
  serviceRegistry, subscriptionManager, secretsManager,
513
518
  runtimeStore: options.runtimeStore, runtimeBus: options.runtimeBus,
514
519
  getConversationTitle: options.getConversationTitle,
@@ -568,7 +573,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
568
573
  runtimeBus: options.runtimeBus,
569
574
  runtimeStore: options.runtimeStore,
570
575
  runtimeDispatch,
571
- panelManager,
576
+ panelManager: viewPanelAdapter,
572
577
  keybindingsManager,
573
578
  routeBindings,
574
579
  surfaceRegistry,
@@ -4,11 +4,10 @@
4
4
  * Extracted from main.ts (which sits at the architecture line cap) so the
5
5
  * startup wiring there stays within budget. Builds the small counts/paths
6
6
  * bundle written into the recovery file so a resumed session can describe what
7
- * was in flight (pending approvals, active/blocked tasks, remotes, worktrees,
8
- * open panels) without re-reading live state.
7
+ * was in flight (pending approvals, active/blocked tasks, remotes, worktrees)
8
+ * without re-reading live state.
9
9
  */
10
10
  import type { UiReadModels } from './ui-read-models.ts';
11
- import type { PanelManager } from '../panels/panel-manager.ts';
12
11
 
13
12
  /**
14
13
  * The continuity summary written into the recovery file. A loose serializable
@@ -17,7 +16,6 @@ import type { PanelManager } from '../panels/panel-manager.ts';
17
16
  */
18
17
  export function createSessionContinuityHintsBuilder(deps: {
19
18
  readonly readModels: UiReadModels;
20
- readonly panelManager: Pick<PanelManager, 'getAllOpen'>;
21
19
  }): () => Record<string, unknown> {
22
20
  return () => {
23
21
  const sessionSnapshot = deps.readModels.session.getSnapshot();
@@ -32,7 +30,6 @@ export function createSessionContinuityHintsBuilder(deps: {
32
30
  remoteRunners: remoteSnapshot.contracts.slice(0, 4).map((contract) => contract.runnerId),
33
31
  worktreeCount: worktreeSnapshot.records.length,
34
32
  worktreePaths: worktreeSnapshot.records.slice(0, 3).map((record) => record.path),
35
- openPanels: deps.panelManager.getAllOpen().map((panel) => panel.id),
36
33
  };
37
34
  };
38
35
  }
@@ -214,7 +214,7 @@ export class SessionInboundInputPoller {
214
214
  }
215
215
 
216
216
  /** Format the operator-facing narration for an inbound steer, e.g.
217
- * "steer received from webui (Alice): resize the panel". */
217
+ * "steer received from webui (Alice): resize the sidebar". */
218
218
  export function narrateInboundSteer(steer: InboundSteer): string {
219
219
  const surface = steer.surfaceKind ?? steer.surfaceId ?? 'another surface';
220
220
  const who = steer.displayName ? ` (${steer.displayName})` : '';
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * session-resume-liveness-confirm.ts, the "this session is open somewhere
3
- * else" check for the session-browser / panel resume seam.
3
+ * else" check for the session-browser resume seam.
4
4
  *
5
5
  * `/session resume <id>` already refuses to resume a session whose liveness
6
6
  * marker points at another running process, and tells the operator to re-run
7
- * with `--force`. The panel seam had no such check at all: picking a session
7
+ * with `--force`. The session-browser seam had no such check at all: picking a session
8
8
  * from the browser forked another terminal's live state with no warning. That
9
9
  * seam has no argv to carry a `--force`, so it asks the same question as a
10
10
  * modal instead.
@@ -17,6 +17,7 @@
17
17
  import { checkSessionLiveness } from '@pellux/goodvibes-sdk/platform/runtime/operations';
18
18
  import type { SessionSurface } from '@/runtime/index.ts';
19
19
  import type { SelectionItem, SelectionResult } from '../input/selection-modal.ts';
20
+ import type { ConfirmOptions } from '../input/confirm-dialog.ts';
20
21
 
21
22
  export type LiveResumeSelectionOpener = (
22
23
  title: string,
@@ -54,6 +55,8 @@ export interface ConfirmLiveResumeDeps {
54
55
  readonly surface: SessionSurface;
55
56
  /** Late-bound: the shell builds its selection opener after the resume handler exists. */
56
57
  readonly openSelection: () => LiveResumeSelectionOpener | undefined;
58
+ /** Late-bound confirm dialog; preferred over the selection list when the shell has one. */
59
+ readonly confirm?: () => ((options: ConfirmOptions) => Promise<boolean>) | undefined;
57
60
  /** Injectable for tests; defaults to this process's own pid. */
58
61
  readonly selfPid?: number;
59
62
  }
@@ -71,6 +74,15 @@ export async function confirmLiveResume(sessionId: string, deps: ConfirmLiveResu
71
74
  const selfPid = deps.selfPid ?? process.pid;
72
75
  const liveness = checkSessionLiveness(deps.surface, sessionId);
73
76
  if (!liveness.live || liveness.pid === null || liveness.pid === selfPid) return true;
77
+ const confirm = deps.confirm?.();
78
+ if (confirm) {
79
+ return confirm({
80
+ title: `${LIVE_RESUME_CONFIRM_TITLE}?`,
81
+ body: `This session appears open in another terminal (pid ${liveness.pid}); resuming will fork its live state. Both terminals would hold their own copy of the conversation from this point on.`,
82
+ confirmLabel: 'Resume anyway',
83
+ tone: 'warning',
84
+ });
85
+ }
74
86
  const open = deps.openSelection();
75
87
  if (!open) return true;
76
88
  return new Promise<boolean>((resolve) => {
@@ -0,0 +1,103 @@
1
+ /**
2
+ * startup-typeahead-gate.ts, keeps keys typed before a startup question
3
+ * appeared out of that question.
4
+ *
5
+ * The crash-recovery offer (recovery-prompt.ts) opens a modal at startup whose
6
+ * Enter resumes a snapshot. A user who started typing before that modal was
7
+ * on screen (during boot, or while the first frame was still on its way) is
8
+ * typing into the composer in their head; routing those keys to the modal
9
+ * would drop the text and let their Enter answer a question they never saw.
10
+ *
11
+ * The gate sits in the stdin path after the terminal-reply filters and before
12
+ * the input router. While a startup modal is armed it HOLDS keyboard input
13
+ * that is typeahead, and lets through input that is an answer:
14
+ * - anything that arrives before the modal's first frame was painted is
15
+ * typeahead by definition;
16
+ * - anything within settleMs of that paint is typeahead too (nobody reads a
17
+ * question and answers it that fast; it is a keystroke already in flight);
18
+ * - a key within burstGapMs of the previous held key continues the same
19
+ * burst of typing, and is held with it.
20
+ * The first key after a pause goes to the modal, and from then on the modal
21
+ * gets everything. When the modal flow ends, release() hands the held bytes
22
+ * back and the caller replays them into the normal input path: they land in
23
+ * the composer exactly as typed, nothing lost and nothing misrouted.
24
+ *
25
+ * Mouse reports and focus events are never held: they are not typing, and a
26
+ * click on the modal is an answer.
27
+ */
28
+
29
+ /** Input this soon after the modal's first frame is typeahead. */
30
+ export const TYPEAHEAD_SETTLE_MS = 250;
31
+ /** A key this soon after the previous held key continues the same burst. */
32
+ export const TYPEAHEAD_BURST_GAP_MS = 500;
33
+
34
+ /** SGR mouse reports and focus in/out reports: never typing. */
35
+ const NON_TYPING = /\x1b\[<\d+;\d+;\d+[Mm]|\x1b\[[IO]/g;
36
+
37
+ export interface StartupTypeaheadGate {
38
+ /** A startup modal just opened. Holding starts; ignored when already armed. */
39
+ arm(): void;
40
+ /** The render loop painted a frame (only the first one after arm() counts). */
41
+ framePainted(): void;
42
+ /** Route one stdin chunk: returns the bytes to route now ('' when held). */
43
+ filter(chunk: string): string;
44
+ /** The modal flow ended: stop holding and return what was held. */
45
+ release(): string;
46
+ /** True while armed (holding or already passing input to the modal). */
47
+ readonly armed: boolean;
48
+ }
49
+
50
+ export interface StartupTypeaheadGateOptions {
51
+ readonly now?: () => number;
52
+ readonly settleMs?: number;
53
+ readonly burstGapMs?: number;
54
+ }
55
+
56
+ export function createStartupTypeaheadGate(options: StartupTypeaheadGateOptions = {}): StartupTypeaheadGate {
57
+ const now = options.now ?? Date.now;
58
+ const settleMs = options.settleMs ?? TYPEAHEAD_SETTLE_MS;
59
+ const burstGapMs = options.burstGapMs ?? TYPEAHEAD_BURST_GAP_MS;
60
+ let state: 'idle' | 'holding' | 'passing' = 'idle';
61
+ let paintedAt: number | null = null;
62
+ let lastHeldAt: number | null = null;
63
+ let held = '';
64
+
65
+ const isTyping = (chunk: string): boolean => chunk.replace(NON_TYPING, '').length > 0;
66
+
67
+ return {
68
+ get armed() {
69
+ return state !== 'idle';
70
+ },
71
+ arm() {
72
+ if (state !== 'idle') return;
73
+ state = 'holding';
74
+ paintedAt = null;
75
+ lastHeldAt = null;
76
+ },
77
+ framePainted() {
78
+ if (state === 'holding' && paintedAt === null) paintedAt = now();
79
+ },
80
+ filter(chunk) {
81
+ if (state !== 'holding' || !isTyping(chunk)) return chunk;
82
+ const t = now();
83
+ const typeahead = paintedAt === null
84
+ || t - paintedAt <= settleMs
85
+ || (lastHeldAt !== null && t - lastHeldAt <= burstGapMs);
86
+ if (typeahead) {
87
+ held += chunk;
88
+ lastHeldAt = t;
89
+ return '';
90
+ }
91
+ state = 'passing';
92
+ return chunk;
93
+ },
94
+ release() {
95
+ const out = held;
96
+ held = '';
97
+ state = 'idle';
98
+ paintedAt = null;
99
+ lastHeldAt = null;
100
+ return out;
101
+ },
102
+ };
103
+ }
@@ -1,5 +1,4 @@
1
1
  export const DOMAINS = [
2
- 'panels',
3
2
  'ui-perf',
4
3
  ] as const;
5
4
 
@@ -36,14 +36,6 @@ export type {
36
36
  } from '@/runtime/index.ts';
37
37
  export { createInitialOverlaysState } from '@/runtime/index.ts';
38
38
 
39
- export type {
40
- PanelId,
41
- PanelPosition,
42
- PanelState,
43
- PanelDomainState,
44
- } from './panels.ts';
45
- export { createInitialPanelsState } from './panels.ts';
46
-
47
39
  export type {
48
40
  PermissionMode,
49
41
  PermissionDecisionMachineState,
@@ -13,7 +13,6 @@ import type { SessionDomainState } from '@/runtime/index.ts';
13
13
  import type { ModelDomainState } from '@/runtime/index.ts';
14
14
  import type { ConversationDomainState, TurnState } from '@/runtime/index.ts';
15
15
  import type { OverlayDomainState, OverlayId } from '@/runtime/index.ts';
16
- import type { PanelDomainState, PanelState } from '../domains/panels.ts';
17
16
  import type { PermissionDomainState, PermissionMode } from '@/runtime/index.ts';
18
17
  import type { TaskDomainState, RuntimeTask, TaskKind } from '@/runtime/index.ts';
19
18
  import type { AgentDomainState, RuntimeAgent } from '@/runtime/index.ts';
@@ -53,11 +52,6 @@ export function selectOverlays(state: RuntimeState): OverlayDomainState {
53
52
  return state.overlays;
54
53
  }
55
54
 
56
- /** Select the full panels domain slice. Casts from Record<string,unknown> to PanelDomainState. */
57
- export function selectPanels(state: RuntimeState): PanelDomainState {
58
- return state.panels as unknown as PanelDomainState;
59
- }
60
-
61
55
  /** Select the full permissions domain slice. */
62
56
  export function selectPermissions(state: RuntimeState): PermissionDomainState {
63
57
  return state.permissions;
@@ -269,28 +263,6 @@ export function selectPermissionMode(state: RuntimeState): PermissionMode {
269
263
  return state.permissions.mode;
270
264
  }
271
265
 
272
- /**
273
- * Returns all panels that are currently open.
274
- */
275
- export function selectActivePanels(state: RuntimeState): PanelState[] {
276
- const result: PanelState[] = [];
277
- const panelDomain = state.panels as unknown as PanelDomainState;
278
- for (const panel of panelDomain.panels.values()) {
279
- if (panel.open) {
280
- result.push(panel);
281
- }
282
- }
283
- return result;
284
- }
285
-
286
- /**
287
- * Returns the panel currently holding focus.
288
- */
289
- export function selectFocusedPanel(state: RuntimeState): PanelState | undefined {
290
- const panelDomain = state.panels as unknown as PanelDomainState;
291
- return panelDomain.panels.get(panelDomain.focusedPanelId);
292
- }
293
-
294
266
  /**
295
267
  * Returns whether any overlay is currently visible.
296
268
  */
@@ -10,7 +10,6 @@ import type { SessionDomainState } from '@/runtime/index.ts';
10
10
  import type { ModelDomainState } from '@/runtime/index.ts';
11
11
  import type { ConversationDomainState } from '@/runtime/index.ts';
12
12
  import type { OverlayDomainState } from '@/runtime/index.ts';
13
- import type { PanelDomainState } from './domains/panels.ts';
14
13
  import type { PermissionDomainState } from '@/runtime/index.ts';
15
14
  import type { TaskDomainState } from '@/runtime/index.ts';
16
15
  import type { AgentDomainState } from '@/runtime/index.ts';
@@ -41,7 +40,6 @@ import { createInitialSessionState } from '@/runtime/index.ts';
41
40
  import { createInitialModelState } from '@/runtime/index.ts';
42
41
  import { createInitialConversationState } from '@/runtime/index.ts';
43
42
  import { createInitialOverlaysState } from '@/runtime/index.ts';
44
- import { createInitialPanelsState } from './domains/panels.ts';
45
43
  import { createInitialPermissionsState } from '@/runtime/index.ts';
46
44
  import { createInitialTasksState } from '@/runtime/index.ts';
47
45
  import { createInitialAgentsState } from '@/runtime/index.ts';
@@ -76,11 +74,6 @@ export interface RuntimeState {
76
74
  model: ModelDomainState;
77
75
  conversation: ConversationDomainState;
78
76
  overlays: OverlayDomainState;
79
- /**
80
- * TUI panel state. Typed as Record<string,unknown> for SDK RuntimeState
81
- * compatibility. Use selectPanels() which casts to PanelDomainState.
82
- */
83
- panels: Record<string, unknown>;
84
77
  permissions: PermissionDomainState;
85
78
  tasks: TaskDomainState;
86
79
  agents: AgentDomainState;
@@ -118,7 +111,6 @@ export function createInitialRuntimeState(): RuntimeState {
118
111
  model: createInitialModelState(),
119
112
  conversation: createInitialConversationState(),
120
113
  overlays: createInitialOverlaysState(),
121
- panels: createInitialPanelsState() as unknown as Record<string, unknown>,
122
114
  permissions: createInitialPermissionsState(),
123
115
  tasks: createInitialTasksState(),
124
116
  agents: createInitialAgentsState(),
@@ -20,7 +20,6 @@ export interface UiEnvironmentServices {
20
20
 
21
21
  export interface UiShellServices {
22
22
  readonly keybindingsManager: RuntimeServices['keybindingsManager'];
23
- readonly panelManager: RuntimeServices['panelManager'];
24
23
  readonly processManager: RuntimeServices['processManager'];
25
24
  readonly profileManager: RuntimeServices['profileManager'];
26
25
  readonly bookmarkManager: RuntimeServices['bookmarkManager'];
@@ -41,7 +40,7 @@ export interface UiProviderServices {
41
40
  export interface UiSessionServices {
42
41
  readonly sessionManager: RuntimeServices['sessionManager'];
43
42
  /**
44
- * The panel-facing session READ source is the cross-surface union
43
+ * The modal-facing session READ source is the cross-surface union
45
44
  * facade, not the raw local broker, in adopted-daemon ('external') mode the
46
45
  * local broker misses sessions hosted for other surfaces. Sync signature
47
46
  * preserved; the facade's cache makes that honest (see session-union-cache.ts).
@@ -115,11 +114,11 @@ export interface UiRuntimeSharedServices {
115
114
  readonly distributedRuntime: RuntimeServices['distributedRuntime'];
116
115
  readonly remoteRunnerRegistry: RuntimeServices['remoteRunnerRegistry'] & RemoteRunnerRegistry;
117
116
  readonly remoteSupervisor: RuntimeServices['remoteSupervisor'] & RemoteSupervisor;
118
- /** the shared live process registry backing the Fleet panel. */
117
+ /** the shared live process registry backing the Agents modal. */
119
118
  readonly processRegistry: RuntimeServices['processRegistry'];
120
- /** The Fleet panel's read model: local rows union the adopted daemon's. */
119
+ /** The Agents modal's read model: local rows union the adopted daemon's. */
121
120
  readonly fleetReadModel: RuntimeServices['fleetReadModel'];
122
- /** The shared runtime event bus, the Fleet panel subscribes to its 'communication' domain for the honest steer-consumed signal. */
121
+ /** The shared runtime event bus, the Agents modal subscribes to its 'communication' domain for the honest steer-consumed signal. */
123
122
  readonly runtimeBus: RuntimeServices['runtimeBus'];
124
123
  };
125
124
  }
@@ -161,7 +160,6 @@ export function createUiRuntimeServices(
161
160
  },
162
161
  shell: {
163
162
  keybindingsManager: runtimeServices.keybindingsManager,
164
- panelManager: runtimeServices.panelManager,
165
163
  processManager: runtimeServices.processManager,
166
164
  profileManager: runtimeServices.profileManager,
167
165
  bookmarkManager: runtimeServices.bookmarkManager,