@pellux/goodvibes-tui 2.0.21 → 2.1.1

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 (391) hide show
  1. package/CHANGELOG.md +65 -1
  2. package/README.md +30 -29
  3. package/docs/README.md +8 -5
  4. package/docs/foundation-artifacts/operator-contract.json +1 -1
  5. package/package.json +28 -19
  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-reference.ts +2 -2
  52. package/src/input/command-registry.ts +77 -35
  53. package/src/input/commands/acp-runtime.ts +19 -9
  54. package/src/input/commands/channel-runtime.ts +2 -2
  55. package/src/input/commands/ci-runtime.ts +1 -1
  56. package/src/input/commands/codebase-runtime.ts +1 -1
  57. package/src/input/commands/config.ts +7 -1
  58. package/src/input/commands/context-window.ts +25 -19
  59. package/src/input/commands/control-room-runtime.ts +18 -18
  60. package/src/input/commands/conversation-runtime.ts +0 -1
  61. package/src/input/commands/cost-runtime.ts +29 -20
  62. package/src/input/commands/diff-runtime.ts +35 -181
  63. package/src/input/commands/eval.ts +1 -1
  64. package/src/input/commands/experience-runtime.ts +3 -7
  65. package/src/input/commands/fresh-conversation.ts +86 -0
  66. package/src/input/commands/git-runtime.ts +5 -22
  67. package/src/input/commands/graph-runtime.ts +1 -1
  68. package/src/input/commands/guidance-runtime.ts +1 -1
  69. package/src/input/commands/health-runtime.ts +8 -9
  70. package/src/input/commands/hooks-runtime.ts +2 -2
  71. package/src/input/commands/hosted-runtime.ts +3 -3
  72. package/src/input/commands/incident-runtime.ts +3 -3
  73. package/src/input/commands/intelligence-runtime.ts +6 -9
  74. package/src/input/commands/knowledge.ts +2 -2
  75. package/src/input/commands/legacy-panel-command.ts +57 -0
  76. package/src/input/commands/local-auth-runtime.ts +8 -9
  77. package/src/input/commands/local-provider-runtime.ts +7 -4
  78. package/src/input/commands/local-runtime.ts +12 -15
  79. package/src/input/commands/local-setup-review.ts +1 -1
  80. package/src/input/commands/local-setup.ts +13 -19
  81. package/src/input/commands/memory.ts +1 -1
  82. package/src/input/commands/notify-runtime.ts +9 -0
  83. package/src/input/commands/operator-runtime.ts +10 -12
  84. package/src/input/commands/permissions-provenance.ts +3 -3
  85. package/src/input/commands/planning-runtime.ts +7 -7
  86. package/src/input/commands/platform-sandbox-runtime.ts +2 -2
  87. package/src/input/commands/platform-services-runtime.ts +1 -1
  88. package/src/input/commands/policy-dispatch.ts +2 -2
  89. package/src/input/commands/policy.ts +3 -3
  90. package/src/input/commands/provider.ts +1 -1
  91. package/src/input/commands/remote-runtime.ts +1 -1
  92. package/src/input/commands/review-runtime.ts +39 -94
  93. package/src/input/commands/rewind-runtime.ts +81 -108
  94. package/src/input/commands/runtime-services.ts +15 -17
  95. package/src/input/commands/services-runtime.ts +2 -2
  96. package/src/input/commands/session-content.ts +21 -5
  97. package/src/input/commands/session-workflow.ts +13 -38
  98. package/src/input/commands/settings-sync-runtime.ts +2 -2
  99. package/src/input/commands/shell-core.ts +19 -4
  100. package/src/input/commands/skills-runtime.ts +2 -2
  101. package/src/input/commands/status-runtime.ts +13 -0
  102. package/src/input/commands/subscription-runtime.ts +1 -1
  103. package/src/input/commands/tasks-runtime.ts +2 -8
  104. package/src/input/commands/work-plan-runtime.ts +4 -4
  105. package/src/input/commands/workstream-attempts.ts +24 -47
  106. package/src/input/commands/workstream-runtime.ts +2 -2
  107. package/src/input/commands/worktree-runtime.ts +3 -3
  108. package/src/input/commands.ts +3 -1
  109. package/src/input/composer-editor.ts +44 -0
  110. package/src/input/concealed-input.ts +1 -1
  111. package/src/input/config-modal-types.ts +20 -8
  112. package/src/input/config-modal.ts +106 -105
  113. package/src/input/confirm-dialog-types.ts +28 -0
  114. package/src/input/confirm-dialog.ts +70 -0
  115. package/src/input/delete-key-policy.ts +3 -3
  116. package/src/input/feed-context-factory.ts +15 -16
  117. package/src/input/handler-command-route.ts +7 -42
  118. package/src/input/handler-content-actions.ts +16 -15
  119. package/src/input/handler-feed-routes.ts +26 -211
  120. package/src/input/handler-feed.ts +68 -95
  121. package/src/input/handler-interactions.ts +5 -3
  122. package/src/input/handler-modal-routes.ts +215 -216
  123. package/src/input/handler-modal-stack.ts +81 -11
  124. package/src/input/handler-modal-token-routes.ts +4 -0
  125. package/src/input/handler-onboarding.ts +0 -1
  126. package/src/input/handler-picker-routes.ts +65 -107
  127. package/src/input/handler-session-view-route.ts +149 -0
  128. package/src/input/handler-shortcuts.ts +16 -154
  129. package/src/input/handler-types.ts +4 -2
  130. package/src/input/handler-ui-state.ts +45 -15
  131. package/src/input/handler-work-tree-route.ts +123 -0
  132. package/src/input/handler.ts +25 -70
  133. package/src/input/keybindings.ts +16 -71
  134. package/src/input/masked-entry-modal.ts +117 -0
  135. package/src/input/mcp-workspace.ts +48 -17
  136. package/src/input/model-picker-filter.ts +8 -0
  137. package/src/input/model-picker-open.ts +99 -0
  138. package/src/input/model-picker-types.ts +1 -1
  139. package/src/input/model-picker.ts +92 -9
  140. package/src/input/notifications-modal.ts +123 -0
  141. package/src/input/overlay-filter.ts +26 -0
  142. package/src/input/profile-picker-modal.ts +37 -8
  143. package/src/input/search.ts +3 -3
  144. package/src/input/selection-modal-queue.ts +2 -0
  145. package/src/input/selection-modal.ts +28 -16
  146. package/src/input/session-picker-modal.ts +33 -8
  147. package/src/input/settings-modal-activation.ts +7 -2
  148. package/src/input/settings-modal-data.ts +11 -6
  149. package/src/input/settings-modal-types.ts +1 -1
  150. package/src/input/settings-modal.ts +20 -20
  151. package/src/input/submission-intent.ts +1 -1
  152. package/src/input/submission-router.ts +4 -9
  153. package/src/input/surface-modal-host.ts +110 -0
  154. package/src/input/theme-settings-actions.ts +82 -0
  155. package/src/input/usage-modal.ts +183 -0
  156. package/src/input/views.ts +97 -0
  157. package/src/main.ts +175 -165
  158. package/src/permissions/hunk-selection.ts +1 -1
  159. package/src/permissions/prompt-card.ts +511 -0
  160. package/src/permissions/prompt.ts +59 -622
  161. package/src/renderer/agents-modal.ts +310 -0
  162. package/src/renderer/autocomplete-overlay.ts +42 -220
  163. package/src/renderer/back-to-bottom.ts +80 -0
  164. package/src/renderer/block-actions-overlay.ts +30 -48
  165. package/src/renderer/bookmark-modal.ts +48 -79
  166. package/src/renderer/changes-modal.ts +325 -0
  167. package/src/renderer/code-block.ts +184 -106
  168. package/src/renderer/command-palette.ts +93 -0
  169. package/src/renderer/composer-fragments.ts +4 -4
  170. package/src/renderer/composer.ts +146 -0
  171. package/src/renderer/compositor.ts +26 -160
  172. package/src/renderer/config-modal.ts +185 -81
  173. package/src/renderer/confirm-dialog.ts +50 -0
  174. package/src/renderer/context-inspector.ts +116 -154
  175. package/src/renderer/context-status-hint.ts +4 -4
  176. package/src/renderer/conversation-layout.ts +20 -0
  177. package/src/renderer/conversation-overlays.ts +94 -84
  178. package/src/renderer/conversation-surface.ts +19 -38
  179. package/src/renderer/diff-tint.ts +98 -0
  180. package/src/renderer/file-picker-overlay.ts +63 -90
  181. package/src/renderer/footer-targets.ts +38 -0
  182. package/src/renderer/git-status.ts +3 -4
  183. package/src/renderer/header-line.ts +140 -117
  184. package/src/renderer/help-overlay.ts +133 -219
  185. package/src/renderer/history-search-overlay.ts +15 -12
  186. package/src/renderer/lane-graph/bead.ts +800 -0
  187. package/src/renderer/lane-graph/glyphs.ts +134 -0
  188. package/src/renderer/lane-graph/layout.ts +248 -0
  189. package/src/renderer/lane-graph/paint.ts +537 -0
  190. package/src/renderer/lane-graph/semantic-memo.ts +77 -0
  191. package/src/renderer/layout-engine.ts +2 -57
  192. package/src/renderer/layout.ts +7 -13
  193. package/src/renderer/markdown-inline.ts +2 -1
  194. package/src/renderer/markdown-table.ts +17 -12
  195. package/src/renderer/markdown.ts +92 -34
  196. package/src/renderer/masked-entry-modal.ts +78 -0
  197. package/src/renderer/mcp-workspace.ts +166 -203
  198. package/src/renderer/model-workspace.ts +381 -436
  199. package/src/renderer/notifications-modal.ts +116 -0
  200. package/src/renderer/onboarding/onboarding-wizard.ts +178 -588
  201. package/src/renderer/process-view.ts +192 -0
  202. package/src/renderer/profile-picker-modal.ts +58 -110
  203. package/src/renderer/search-overlay.ts +6 -3
  204. package/src/renderer/selection-modal-overlay.ts +87 -327
  205. package/src/renderer/semantic-diff.ts +2 -2
  206. package/src/renderer/session-chips.ts +102 -0
  207. package/src/renderer/session-picker-modal.ts +177 -297
  208. package/src/renderer/settings-modal-connections.ts +14 -23
  209. package/src/renderer/settings-modal-context.ts +367 -0
  210. package/src/renderer/settings-modal-helpers.ts +6 -11
  211. package/src/renderer/settings-modal.ts +322 -726
  212. package/src/renderer/shell-surface.ts +277 -175
  213. package/src/renderer/shortcuts-overlay.ts +217 -0
  214. package/src/renderer/status-line.ts +475 -0
  215. package/src/renderer/surface-compose.ts +174 -0
  216. package/src/renderer/surface-kit-extra.ts +303 -0
  217. package/src/renderer/surface-kit-list.ts +366 -0
  218. package/src/renderer/surface-kit-parts.ts +360 -0
  219. package/src/renderer/surface-kit.ts +568 -0
  220. package/src/renderer/syntax-highlighter.ts +280 -197
  221. package/src/renderer/syntax-theme.ts +51 -0
  222. package/src/renderer/system-message.ts +0 -1
  223. package/src/renderer/term-caps.ts +42 -1
  224. package/src/renderer/terminal-bg-probe.ts +116 -19
  225. package/src/renderer/terminal-palette-probe.ts +322 -0
  226. package/src/renderer/terminal-palette-reader.ts +183 -0
  227. package/src/renderer/terminal-palette.ts +58 -0
  228. package/src/renderer/theme-mode-config.ts +16 -1
  229. package/src/renderer/theme.ts +234 -207
  230. package/src/renderer/thinking.ts +0 -1
  231. package/src/renderer/throbber.ts +188 -0
  232. package/src/renderer/toast-center.ts +119 -0
  233. package/src/renderer/ui-factory.ts +39 -602
  234. package/src/renderer/ui-primitives.ts +8 -25
  235. package/src/renderer/usage-modal.ts +353 -0
  236. package/src/renderer/user-message.ts +58 -0
  237. package/src/renderer/voice-capture-chip.ts +53 -0
  238. package/src/runtime/bootstrap-command-context.ts +0 -5
  239. package/src/runtime/bootstrap-command-parts.ts +38 -89
  240. package/src/runtime/bootstrap-core.ts +13 -15
  241. package/src/runtime/bootstrap-hook-bridge.ts +12 -21
  242. package/src/runtime/bootstrap-notifier-sync.ts +17 -1
  243. package/src/runtime/bootstrap-shell.ts +16 -50
  244. package/src/runtime/bootstrap.ts +14 -14
  245. package/src/runtime/client/fleet-union.ts +5 -5
  246. package/src/runtime/client/hosted-exit.ts +2 -2
  247. package/src/runtime/client/hosted-sessions.ts +1 -1
  248. package/src/runtime/client/spine-adoption.ts +1 -1
  249. package/src/runtime/context-accounting-source.ts +5 -4
  250. package/src/runtime/index.ts +1 -0
  251. package/src/runtime/notification-dispatch.ts +102 -29
  252. package/src/runtime/recovery-offer-wiring.ts +4 -1
  253. package/src/runtime/recovery-prompt.ts +31 -15
  254. package/src/runtime/runtime-services-types.ts +10 -6
  255. package/src/runtime/services.ts +17 -12
  256. package/src/runtime/session-continuity-hints.ts +2 -5
  257. package/src/runtime/session-inbound-inputs.ts +1 -1
  258. package/src/runtime/session-resume-liveness-confirm.ts +14 -2
  259. package/src/runtime/startup-typeahead-gate.ts +103 -0
  260. package/src/runtime/store/domains/domain-read-matrix.ts +0 -1
  261. package/src/runtime/store/domains/index.ts +0 -8
  262. package/src/runtime/store/selectors/index.ts +0 -28
  263. package/src/runtime/store/state.ts +0 -8
  264. package/src/runtime/ui-services.ts +4 -6
  265. package/src/runtime/usage-tracker.ts +348 -0
  266. package/src/runtime/wrfc-persistence.ts +4 -4
  267. package/src/shell/blocking-input.ts +92 -2
  268. package/src/shell/recovery-input-helpers.ts +1 -1
  269. package/src/shell/session-views.ts +539 -0
  270. package/src/shell/status-report.ts +86 -0
  271. package/src/shell/transcript-scroll.ts +68 -0
  272. package/src/shell/ui-openers.ts +84 -172
  273. package/src/shell/view-openers.ts +205 -0
  274. package/src/tools/wrfc-agent-guard.ts +22 -2
  275. package/src/utils/format-duration.ts +4 -8
  276. package/src/utils/splash-lines.ts +9 -1
  277. package/src/utils/terminal-width.ts +56 -0
  278. package/src/verification/live-verifier.ts +0 -10
  279. package/src/version.ts +1 -1
  280. package/src/{panels → views}/agent-inspector-shared.ts +2 -2
  281. package/src/{panels → views}/builtin-modals.ts +22 -21
  282. package/src/views/builtin-views.ts +135 -0
  283. package/src/{panels → views}/confirm-state.ts +9 -9
  284. package/src/{panels → views}/diff-review-model.ts +10 -3
  285. package/src/{panels → views}/eval-registry.ts +1 -1
  286. package/src/{panels → views}/fleet-acts.ts +49 -85
  287. package/src/{panels/fleet-panel-format.ts → views/fleet-format.ts} +40 -40
  288. package/src/{panels → views}/fleet-gateway.ts +5 -5
  289. package/src/{panels → views}/fleet-observed-render.ts +16 -16
  290. package/src/{panels → views}/fleet-read-model.ts +9 -9
  291. package/src/{panels/fleet-tabs.ts → views/fleet-session-tabs.ts} +13 -13
  292. package/src/{panels → views}/fleet-spawn.ts +33 -49
  293. package/src/{panels → views}/fleet-steer.ts +12 -12
  294. package/src/{panels → views}/fleet-stop.ts +4 -4
  295. package/src/{panels → views}/fleet-transcript.ts +26 -27
  296. package/src/{panels/fleet-panel-worktree-detail.ts → views/fleet-worktree-detail.ts} +7 -7
  297. package/src/{panels → views}/hosted-session-feed.ts +6 -6
  298. package/src/views/modal-surface-registry.ts +41 -0
  299. package/src/{panels → views}/modals/devices-modal.ts +2 -2
  300. package/src/{panels → views}/modals/hooks-modal.ts +13 -13
  301. package/src/{panels → views}/modals/keybindings-modal.ts +19 -27
  302. package/src/{panels → views}/modals/knowledge-modal.ts +6 -5
  303. package/src/{panels → views}/modals/local-auth-modal.ts +22 -21
  304. package/src/{panels → views}/modals/marketplace-modal.ts +11 -11
  305. package/src/{panels → views}/modals/memory-modal.ts +8 -8
  306. package/src/{panels → views}/modals/modal-surface-helpers.ts +15 -5
  307. package/src/{panels → views}/modals/pairing-modal.ts +9 -9
  308. package/src/{panels → views}/modals/planning-modal.ts +15 -20
  309. package/src/{panels → views}/modals/plugins-modal.ts +6 -6
  310. package/src/{panels → views}/modals/policy-modal.ts +13 -5
  311. package/src/{panels → views}/modals/provider-health-modal.ts +4 -4
  312. package/src/{panels → views}/modals/remote-modal.ts +3 -3
  313. package/src/{panels → views}/modals/sandbox-modal.ts +4 -4
  314. package/src/{panels → views}/modals/security-modal.ts +22 -16
  315. package/src/{panels → views}/modals/services-modal.ts +3 -3
  316. package/src/{panels → views}/modals/settings-sync-modal.ts +4 -4
  317. package/src/{panels → views}/modals/skills-modal.ts +9 -9
  318. package/src/{panels → views}/modals/subscription-modal.ts +3 -3
  319. package/src/{panels → views}/modals/work-plan-modal.ts +10 -13
  320. package/src/views/notifications-feed.ts +314 -0
  321. package/src/{panels → views}/polish-core.ts +38 -36
  322. package/src/{panels → views}/polish-tables.ts +35 -26
  323. package/src/{panels → views}/polish.ts +101 -95
  324. package/src/{panels → views}/project-planning-answer-actions.ts +3 -3
  325. package/src/{panels → views}/provider-health-routes.ts +14 -14
  326. package/src/{panels → views}/search-focus.ts +8 -8
  327. package/src/{panels → views}/session-maintenance.ts +11 -11
  328. package/src/views/skills-discovery.ts +159 -0
  329. package/src/views/view-deps.ts +80 -0
  330. package/src/views/view-panel-adapter.ts +53 -0
  331. package/src/{panels → views}/workstream-graph-render.ts +1 -1
  332. package/src/core/conversation-fold.ts +0 -101
  333. package/src/core/conversation-turn-structure.ts +0 -464
  334. package/src/core/conversation-user-receipts.ts +0 -42
  335. package/src/input/commands/operator-panel-runtime.ts +0 -186
  336. package/src/input/panel-integration-actions.ts +0 -33
  337. package/src/input/panel-mouse-geometry.ts +0 -97
  338. package/src/input/panel-paste-flood-guard.ts +0 -86
  339. package/src/panels/base-panel.ts +0 -301
  340. package/src/panels/builtin/agent.ts +0 -27
  341. package/src/panels/builtin/development.ts +0 -92
  342. package/src/panels/builtin/knowledge.ts +0 -12
  343. package/src/panels/builtin/operations.ts +0 -177
  344. package/src/panels/builtin/session.ts +0 -81
  345. package/src/panels/builtin/shared.ts +0 -357
  346. package/src/panels/builtin-panels.ts +0 -28
  347. package/src/panels/cost-tracker-panel.ts +0 -746
  348. package/src/panels/diff-panel.ts +0 -797
  349. package/src/panels/diff-review-panel.ts +0 -395
  350. package/src/panels/expandable-list-panel.ts +0 -189
  351. package/src/panels/fleet-deep-link.ts +0 -31
  352. package/src/panels/fleet-panel.ts +0 -799
  353. package/src/panels/git-panel.ts +0 -800
  354. package/src/panels/hosted-session-panel.ts +0 -221
  355. package/src/panels/index.ts +0 -21
  356. package/src/panels/local-auth-panel.ts +0 -478
  357. package/src/panels/notifications-feed.ts +0 -127
  358. package/src/panels/notifications-panel.ts +0 -160
  359. package/src/panels/panel-confirm-overlay.ts +0 -72
  360. package/src/panels/panel-manager.ts +0 -791
  361. package/src/panels/plugins-panel.ts +0 -371
  362. package/src/panels/scrollable-list-panel.ts +0 -498
  363. package/src/panels/skills-panel.ts +0 -454
  364. package/src/panels/token-budget-panel.ts +0 -688
  365. package/src/panels/types.ts +0 -191
  366. package/src/panels/wrfc-panel-format.ts +0 -133
  367. package/src/renderer/diff-view.ts +0 -134
  368. package/src/renderer/fleet-tab-strip.ts +0 -56
  369. package/src/renderer/footer-tips.ts +0 -53
  370. package/src/renderer/fullscreen-primitives.ts +0 -146
  371. package/src/renderer/fullscreen-workspace.ts +0 -194
  372. package/src/renderer/hint-grammar.ts +0 -52
  373. package/src/renderer/modal-factory.ts +0 -480
  374. package/src/renderer/overlay-box.ts +0 -154
  375. package/src/renderer/overlay-viewport.ts +0 -104
  376. package/src/renderer/panel-composite.ts +0 -145
  377. package/src/renderer/panel-workspace-bar.ts +0 -54
  378. package/src/renderer/process-indicator.ts +0 -163
  379. package/src/renderer/tab-strip.ts +0 -222
  380. package/src/renderer/text-layout.ts +0 -31
  381. package/src/renderer/tool-call.ts +0 -276
  382. package/src/renderer/tool-result-expanded-lines.ts +0 -48
  383. package/src/renderer/tool-result-summary.ts +0 -219
  384. package/src/runtime/diagnostics/panels/index.ts +0 -21
  385. package/src/runtime/diagnostics/panels/ops.ts +0 -156
  386. package/src/runtime/perf/panel-contracts.ts +0 -32
  387. package/src/runtime/store/domains/panels.ts +0 -117
  388. package/src/verification/verification-ledger.ts +0 -707
  389. /package/src/{panels → views}/memory-consolidation-gateway.ts +0 -0
  390. /package/src/{panels → views}/modals/modal-theme.ts +0 -0
  391. /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,