@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
@@ -1,5 +1,5 @@
1
1
  import { MODAL_TONES } from './modal-theme.ts';
2
- import { infoRow } from './modal-surface-helpers.ts';
2
+ import { infoRow, headerRow } from './modal-surface-helpers.ts';
3
3
  import type {
4
4
  ConfigModalActionContext,
5
5
  ConfigModalRow,
@@ -14,11 +14,11 @@ import type {
14
14
 
15
15
  // ---------------------------------------------------------------------------
16
16
  // Plugins → config-modal surface (group-B port). Mirrors the retired
17
- // PluginsPanel's read surface (list/capabilities/getTrustRecord/
17
+ // the retired plugins view's read surface (list/capabilities/getTrustRecord/
18
18
  // getQuarantineRecord) plus `verify` (a pure read-only signature check).
19
19
  // enable/disable/liftQuarantine are DROPPED from the dep shape on purpose:
20
20
  // those verbs are destructive/interactive mutations and route to the `/plugin`
21
- // command path (action-parity charter rule). Selection-blind port: the panel's
21
+ // command path (action-parity charter rule). Selection-blind port: the earlier view's
22
22
  // selected-plugin signature/quarantine/verify detail is folded into row labels.
23
23
  // ---------------------------------------------------------------------------
24
24
 
@@ -87,9 +87,9 @@ class PluginsModalSurface implements ConfigModalSurface {
87
87
 
88
88
  if (all.length === 0) {
89
89
  rows.push(infoRow('empty:0', 'No plugins discovered.'));
90
- rows.push(infoRow('empty:title', 'Next steps'));
91
- rows.push(infoRow('empty:list', '/plugin list — inspect plugin discovery paths and current registry state', { dim: true }));
92
- rows.push(infoRow('empty:market', '/marketplace — review curated ecosystem entries and provenance posture', { dim: true }));
90
+ rows.push(headerRow('empty:title', 'Next steps'));
91
+ rows.push(infoRow('empty:list', '/plugin list — inspect plugin discovery paths and current registry state', { fg: MODAL_TONES.dim }));
92
+ rows.push(infoRow('empty:market', '/marketplace — review curated ecosystem entries and provenance posture', { fg: MODAL_TONES.dim }));
93
93
  return { title: 'Plugins', tabs: [{ id: 'plugins', label: 'Plugins', rows, emptyText: '' }] };
94
94
  }
95
95
 
@@ -9,7 +9,8 @@ import type {
9
9
  PolicyPreflightReview,
10
10
  PolicySimulationSummary,
11
11
  } from '@/runtime/index.ts';
12
- import type { ModalSectionStyle } from '../../renderer/modal-factory.ts';
12
+ import { registerThemeRefresh } from '../../renderer/theme.ts';
13
+ import type { ModalSectionStyle } from '../../input/config-modal-types.ts';
13
14
  import type {
14
15
  ConfigModalActionContext,
15
16
  ConfigModalRow,
@@ -22,9 +23,9 @@ import type {
22
23
  // not a selectable list, current/candidate bundle state, diff, divergence
23
24
  // gate, history, permission audit, lint findings, preflight review, and
24
25
  // simulation samples render as non-selectable rows (the host windows/scrolls
25
- // them). EVERY dispatchable key in the original panel (s/f/l/p/b) already
26
- // routed to `/policy <sub>` via executeCommand, none were in-panel mutations;
27
- // the panel's promote/rollback confirm step is dropped per charter (never fold
26
+ // them). EVERY dispatchable key in the original view (s/f/l/p/b) already
27
+ // routed to `/policy <sub>` via executeCommand, none were in-view mutations;
28
+ // the earlier view's promote/rollback confirm step is dropped per charter (never fold
28
29
  // a confirm into a modal) and the command dispatches directly. Determinism:
29
30
  // timestamps are formatted (fmtTime/fmtRate), never read from the clock.
30
31
  // ---------------------------------------------------------------------------
@@ -49,7 +50,14 @@ export interface PolicyModalDeps {
49
50
  const BAD: ModalSectionStyle = { fg: MODAL_TONES.bad };
50
51
  const WARN: ModalSectionStyle = { fg: MODAL_TONES.warn };
51
52
  const GOOD: ModalSectionStyle = { fg: MODAL_TONES.good };
52
- const DIM: ModalSectionStyle = { dim: true };
53
+ // Rebuilt in place on theme change (MODAL_TONES refreshes first: it registers at its own module eval).
54
+ registerThemeRefresh(() => {
55
+ Object.assign(BAD, { fg: MODAL_TONES.bad });
56
+ Object.assign(WARN, { fg: MODAL_TONES.warn });
57
+ Object.assign(GOOD, { fg: MODAL_TONES.good });
58
+ Object.assign(DIM, { fg: MODAL_TONES.dim });
59
+ });
60
+ const DIM: ModalSectionStyle = { fg: MODAL_TONES.dim };
53
61
  const MAX_ROWS = 5;
54
62
 
55
63
  function fmtTime(value: string | undefined): string {
@@ -11,17 +11,17 @@ export interface ProviderRuntimeInspect {
11
11
 
12
12
  /**
13
13
  * Provider-health config-modal surface (migrated from the `provider-health`
14
- * panel, the charter's live-modal exemplar; also the target of the `providers`
14
+ * view, the charter's live-modal exemplar; also the target of the `providers`
15
15
  * and `accounts` redirects). providerRuntime.inspectAll() is async, so its
16
16
  * result is cached and refreshed on open, on `r`, and on a 3s live tick (the
17
- * panel's display-tick cadence); buildView reads the cache synchronously so
17
+ * view's display-tick cadence); buildView reads the cache synchronously so
18
18
  * live status/model-count values update in place with a stable layout.
19
19
  *
20
- * Fidelity boundary (stated divergence): the panel's per-request latency
20
+ * Fidelity boundary (stated divergence): the earlier view's per-request latency
21
21
  * timelines, auth-route table, and 8 repair-domain posture blocks are driven by
22
22
  * an event-fed tracker + account-posture snapshots; those deep views remain on
23
23
  * the `/health` and `/accounts` commands (which print them in full). The modal
24
- * ports the live provider status list + the panel's one dispatch action
24
+ * ports the live provider status list + the earlier view's one dispatch action
25
25
  * (Enter → `/accounts repair <provider>`), across a Health and an Accounts tab.
26
26
  */
27
27
  class ProviderHealthModalSurface implements ConfigModalSurface {
@@ -20,11 +20,11 @@ function stateTone(state: string): Tone {
20
20
  }
21
21
 
22
22
  /**
23
- * Remote config-modal surface (migrated from the `remote` panel). The read-model
23
+ * Remote config-modal surface (migrated from the `remote` view). The read-model
24
24
  * snapshot is synchronous; a subscribe() keeps live transport/heartbeat values
25
- * refreshing between key presses. The panel's `Tab` connections/contracts browse
25
+ * refreshing between key presses. The earlier view's `Tab` connections/contracts browse
26
26
  * toggle becomes two real tabs. `r`/Enter dispatch `/remote recover` for the
27
- * selected runner, the panel's only corrective keybinding; the richer
27
+ * selected runner, the earlier view's only corrective keybinding; the richer
28
28
  * `/remote` command set (show/supervisor/cancel/dispatch/artifact/…) stays on
29
29
  * the command front-door.
30
30
  */
@@ -6,7 +6,7 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
6
6
  import { toneStyle, statusGlyph, pad, postureLine, kv, type Tone } from './modal-surface-helpers.ts';
7
7
 
8
8
  /** SandboxSessionRegistry has no event subscription, poll at the same 3s
9
- * cadence the retired panel used (POLL_INTERVAL_MS in sandbox-panel.ts). */
9
+ * cadence the retired view used (POLL_INTERVAL_MS in the sandbox modal's earlier view). */
10
10
  const POLL_INTERVAL_MS = 3_000;
11
11
 
12
12
  function sessionTone(state: SandboxSession['state']): Tone {
@@ -28,13 +28,13 @@ function sessionIdOf(row: ConfigModalRow | null): string | null {
28
28
  }
29
29
 
30
30
  /**
31
- * Sandbox config-modal surface (migrated from the `sandbox` panel). All reads
31
+ * Sandbox config-modal surface (migrated from the `sandbox` view). All reads
32
32
  * (buildSandboxReview, listSandboxProfiles, sessions.list) are synchronous, so
33
- * buildView reads them live each tick. The panel's single profile+session
33
+ * buildView reads them live each tick. The earlier view's single profile+session
34
34
  * selectable list becomes two real tabs. s/x/e call the SandboxSessionRegistry
35
35
  * directly (these were never slash commands), start/execute are wrapped so a
36
36
  * rejection surfaces via ctx.setStatus instead of an unhandled rejection,
37
- * matching the panel's try/catch + setError behaviour.
37
+ * matching the earlier view's try/catch + setError behaviour.
38
38
  */
39
39
  class SandboxModalSurface implements ConfigModalSurface {
40
40
  readonly name = 'sandbox-modal';
@@ -1,7 +1,8 @@
1
1
  import { MODAL_TONES } from './modal-theme.ts';
2
- import { infoRow } from './modal-surface-helpers.ts';
2
+ import { infoRow, headerRow } from './modal-surface-helpers.ts';
3
3
  import type { TokenAuditResult } from '@pellux/goodvibes-sdk/platform/security';
4
- import type { ModalSectionStyle } from '../../renderer/modal-factory.ts';
4
+ import { registerThemeRefresh } from '../../renderer/theme.ts';
5
+ import type { ModalSectionStyle } from '../../input/config-modal-types.ts';
5
6
  import type { UiReadModel, UiSecuritySnapshot } from '../../runtime/ui-read-models.ts';
6
7
  import type {
7
8
  ConfigModalActionContext,
@@ -18,7 +19,7 @@ import type {
18
19
  // the MCP attack-path review). Read-model-backed, so refresh() is a no-op,
19
20
  // buildView reads getSnapshot() fresh every render. 'f' (preflight) routes to
20
21
  // its `/policy preflight` command path; 'i' jumps to the incident surface
21
- // (fleet) via the command path. Selection-blind port: the panel's
22
+ // (fleet) via the command path. Selection-blind port: the earlier view's
22
23
  // selected-token scope/rotation detail is folded into each token row label.
23
24
  // Determinism: absolute ISO timestamps (never Date.now()).
24
25
  // ---------------------------------------------------------------------------
@@ -29,6 +30,11 @@ export interface SecurityModalDeps {
29
30
 
30
31
  const BAD: ModalSectionStyle = { fg: MODAL_TONES.bad };
31
32
  const WARN: ModalSectionStyle = { fg: MODAL_TONES.warn };
33
+ // Rebuilt in place on theme change (MODAL_TONES refreshes first: it registers at its own module eval).
34
+ registerThemeRefresh(() => {
35
+ Object.assign(BAD, { fg: MODAL_TONES.bad });
36
+ Object.assign(WARN, { fg: MODAL_TONES.warn });
37
+ });
32
38
  const MAX_FINDINGS_SHOWN = 5;
33
39
 
34
40
  function resultColor(result: TokenAuditResult): ModalSectionStyle | undefined {
@@ -105,11 +111,11 @@ class SecurityModalSurface implements ConfigModalSurface {
105
111
  if (audit.results.length === 0) {
106
112
  const quarantinedMcp = snapshot.mcpServers.filter((s) => s.schemaFreshness === 'quarantined');
107
113
  rows.push(infoRow('empty:0', 'No API tokens are registered with the security auditor yet.'));
108
- rows.push(infoRow('empty:1', 'The security control room can already review policy, MCP, plugin, and incident posture, but token-specific scope and rotation audit data has not been registered.', { dim: true }));
114
+ rows.push(infoRow('empty:1', 'The security control room can already review policy, MCP, plugin, and incident posture, but token-specific scope and rotation audit data has not been registered.', { fg: MODAL_TONES.dim }));
109
115
  if (quarantinedMcp.length > 0) rows.push(infoRow('empty:mcp', 'MCP quarantine still active despite no registered tokens.', WARN));
110
- rows.push(infoRow('empty:title', 'Inspect further'));
111
- rows.push(infoRow('empty:storage', '/storage review — inspect secure secret storage and environment overrides', { dim: true }));
112
- rows.push(infoRow('empty:mcptrust', '/mcp trust — inspect active MCP trust and quarantine posture', { dim: true }));
116
+ rows.push(headerRow('empty:title', 'Inspect further'));
117
+ rows.push(infoRow('empty:storage', '/storage review — inspect secure secret storage and environment overrides', { fg: MODAL_TONES.dim }));
118
+ rows.push(infoRow('empty:mcptrust', '/mcp trust — inspect active MCP trust and quarantine posture', { fg: MODAL_TONES.dim }));
113
119
  return { id: 'tokens', label: 'Tokens', header, rows, emptyText: '' };
114
120
  }
115
121
 
@@ -121,7 +127,7 @@ class SecurityModalSurface implements ConfigModalSurface {
121
127
  ...(resultColor(result) ? { style: resultColor(result)! } : {}),
122
128
  });
123
129
  }
124
- rows.push(infoRow('audit:when', `Last audit ${fmtIso(audit.lastAuditAt)}: press r to refresh`, { dim: true }));
130
+ rows.push(infoRow('audit:when', `Last audit ${fmtIso(audit.lastAuditAt)}: press r to refresh`, { fg: MODAL_TONES.dim }));
125
131
  return { id: 'tokens', label: 'Tokens', header, rows, hints: ['f preflight'] };
126
132
  }
127
133
 
@@ -144,18 +150,18 @@ class SecurityModalSurface implements ConfigModalSurface {
144
150
  }
145
151
 
146
152
  const review = snapshot.attackPathReview;
147
- rows.push(infoRow('atk:title', 'MCP Attack-Path Review'));
148
- rows.push(infoRow('atk:counts', `critical ${review.criticalFindings} incoherent ${review.incoherentFindings}`, review.criticalFindings > 0 ? BAD : { dim: true }));
149
- rows.push(infoRow('atk:summary', review.summary, { dim: true }));
153
+ rows.push(headerRow('atk:title', 'MCP Attack-Path Review'));
154
+ rows.push(infoRow('atk:counts', `critical ${review.criticalFindings} incoherent ${review.incoherentFindings}`, review.criticalFindings > 0 ? BAD : { fg: MODAL_TONES.dim }));
155
+ rows.push(infoRow('atk:summary', review.summary, { fg: MODAL_TONES.dim }));
150
156
  const shown = review.findings.slice(0, MAX_FINDINGS_SHOWN);
151
157
  shown.forEach((finding, i) => {
152
158
  rows.push(infoRow(`atk:${i}:h`, `${finding.severity.toUpperCase()} ${finding.serverName}: ${finding.route}`, findingColor(finding.severity)));
153
- rows.push(infoRow(`atk:${i}:r`, ` ${finding.reason}`, { dim: true }));
154
- rows.push(infoRow(`atk:${i}:e`, ` evidence: ${finding.evidence.join(' | ')}`, { dim: true }));
159
+ rows.push(infoRow(`atk:${i}:r`, ` ${finding.reason}`, { fg: MODAL_TONES.dim }));
160
+ rows.push(infoRow(`atk:${i}:e`, ` evidence: ${finding.evidence.join(' | ')}`, { fg: MODAL_TONES.dim }));
155
161
  });
156
162
  if (review.findings.length > shown.length) {
157
163
  const extra = review.findings.length - shown.length;
158
- rows.push(infoRow('atk:more', `+${extra} more finding${extra === 1 ? '' : 's'} not shown`, { dim: true }));
164
+ rows.push(infoRow('atk:more', `+${extra} more finding${extra === 1 ? '' : 's'} not shown`, { fg: MODAL_TONES.dim }));
159
165
  }
160
166
  return { id: 'governance', label: 'Governance', rows, emptyText: 'No governance findings.' };
161
167
  }
@@ -169,8 +175,8 @@ class SecurityModalSurface implements ConfigModalSurface {
169
175
  if (id === 'refresh') { ctx.setStatus('Security posture is read live.'); ctx.requestRender(); return; }
170
176
  if (id === 'preflight') { void ctx.executeCommand?.('policy', ['preflight']); ctx.setStatus('Dispatched /policy preflight.'); return; }
171
177
  if (id === 'jumpToIncident' && this.deps.readModel.getSnapshot().latestIncident) {
172
- void ctx.executeCommand?.('panel', ['open', 'incident']);
173
- ctx.setStatus('Opened the incident surface (fleet).');
178
+ void ctx.executeCommand?.('agents', []);
179
+ ctx.setStatus('Opened Agents on the running processes.');
174
180
  return;
175
181
  }
176
182
  if (id === 'manageDevices') {
@@ -33,7 +33,7 @@ function statusDotTone(e: Entry): Tone {
33
33
  return 'dim';
34
34
  }
35
35
 
36
- // Ported verbatim from ServicesPanel.authSummary (the retired panel's derivation).
36
+ // Ported verbatim from the retired services view's authSummary derivation.
37
37
  function authSummary(config: ServiceConfig, manager: SubscriptionAccessQuery): string {
38
38
  const provider = config.providerId ?? config.name;
39
39
  const hasOverride = manager.getAccessToken(provider) != null;
@@ -46,10 +46,10 @@ function authSummary(config: ServiceConfig, manager: SubscriptionAccessQuery): s
46
46
  }
47
47
 
48
48
  /**
49
- * Services config-modal surface (migrated from the `services` panel). Reads the
49
+ * Services config-modal surface (migrated from the `services` view). Reads the
50
50
  * same ServiceInspectionQuery, getAll() is sync but inspect()/testConnection()
51
51
  * are async, so an inspection cache is refreshed on open / `r` and read
52
- * synchronously by buildView (mirrors the panel's own refresh contract).
52
+ * synchronously by buildView (mirrors the earlier view's own refresh contract).
53
53
  * Actions map onto their existing behaviours; `s` jumps to the subscription
54
54
  * surface, `t`/`T` run the same live connection tests, `r` re-inspects.
55
55
  */
@@ -14,13 +14,13 @@ function sourceTone(source: string, conflict: boolean, locked: boolean): Tone {
14
14
  }
15
15
 
16
16
  /**
17
- * Settings-sync config-modal surface (migrated from the `settings-sync` panel).
18
- * All reads are synchronous (getSettingsControlPlaneSnapshot). The panel's six
17
+ * Settings-sync config-modal surface (migrated from the `settings-sync` view).
18
+ * All reads are synchronous (getSettingsControlPlaneSnapshot). The earlier view's six
19
19
  * Tab-cycled browse modes become six real tabs. Conflict resolution keeps the
20
- * panel's two-step shape: Enter on a conflicted key arms a resolve prompt, then
20
+ * view's two-step shape: Enter on a conflicted key arms a resolve prompt, then
21
21
  * l/s dispatch the existing `/settings-sync resolve <key> <local|synced>`
22
22
  * command (the command owns the mutation + live-session refresh). `m` dispatches
23
- * `/managed review`. push/pull remain CLI-only (they were never panel actions).
23
+ * `/managed review`. push/pull remain CLI-only (they were never view actions).
24
24
  */
25
25
  class SettingsSyncModalSurface implements ConfigModalSurface {
26
26
  readonly name = 'settings-sync-modal';
@@ -1,22 +1,22 @@
1
1
  import { MODAL_TONES } from './modal-theme.ts';
2
- import { infoRow } from './modal-surface-helpers.ts';
2
+ import { infoRow, headerRow } from './modal-surface-helpers.ts';
3
3
  import { readFileSync, readdirSync, mkdtempSync, rmSync } from 'node:fs';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { join, sep } from 'node:path';
6
6
  import type { ConfigModalActionContext, ConfigModalRow, ConfigModalSurface, ConfigModalView } from '../../input/config-modal-types.ts';
7
- import type { SkillOrigin, SkillRecord } from '../skills-panel.ts';
7
+ import type { SkillOrigin, SkillRecord } from '../skills-discovery.ts';
8
8
  import { listInstalledEcosystemEntries, type EcosystemCatalogPathOptions, type ShellPathService } from '@/runtime/index.ts';
9
9
 
10
10
  // ---------------------------------------------------------------------------
11
11
  // Skills → config-modal surface (group-B port). Project-local and global
12
12
  // skill-pack discovery. Disk scans happen only in refresh() (never in
13
- // buildView), mirroring the panel's onActivate()-triggered load. Browse-only:
14
- // the panel never had a command-routable mutation verb (no /skills delete/remove
13
+ // buildView), mirroring the earlier view's onActivate()-triggered load. Browse-only:
14
+ // the earlier view never had a command-routable mutation verb (no /skills delete/remove
15
15
  // subcommand exists), so the only action is refresh/navigate. Selection-blind
16
- // port: the panel's selected-skill path/deps/includes detail is folded into
16
+ // port: the earlier view's selected-skill path/deps/includes detail is folded into
17
17
  // each row label.
18
18
  //
19
- // discoverSkills() in the panel was async; the sync re-implementation below
19
+ // discoverSkills() in the earlier view was async; the sync re-implementation below
20
20
  // mirrors the same directory/frontmatter/marketplace-provenance conventions
21
21
  // (the two are independent implementations of the same on-disk contract).
22
22
  // ---------------------------------------------------------------------------
@@ -136,9 +136,9 @@ class SkillsModalSurface implements ConfigModalSurface {
136
136
  const rows: ConfigModalRow[] = [];
137
137
  if (this.cached.length === 0) {
138
138
  rows.push(infoRow('empty:0', 'No skills discovered.'));
139
- rows.push(infoRow('empty:title', 'Next steps'));
140
- rows.push(infoRow('empty:dir', '.goodvibes/skills — place skill .md files here (project-local) or ~/.goodvibes/skills (global)', { dim: true }));
141
- rows.push(infoRow('empty:registry', '/registry search skills — inspect the same skill directories from the shell', { dim: true }));
139
+ rows.push(headerRow('empty:title', 'Next steps'));
140
+ rows.push(infoRow('empty:dir', '.goodvibes/skills — place skill .md files here (project-local) or ~/.goodvibes/skills (global)', { fg: MODAL_TONES.dim }));
141
+ rows.push(infoRow('empty:registry', '/registry search skills — inspect the same skill directories from the shell', { fg: MODAL_TONES.dim }));
142
142
  return { title: 'Skills', tabs: [{ id: 'skills', label: 'Skills', rows, emptyText: '' }] };
143
143
  }
144
144
 
@@ -38,12 +38,12 @@ function isExpiringSoon(sub: ProviderSubscription | null): boolean {
38
38
  }
39
39
 
40
40
  /**
41
- * Subscription config-modal surface (migrated from the `subscription` panel).
41
+ * Subscription config-modal surface (migrated from the `subscription` view).
42
42
  * All reads are synchronous (serviceRegistry.getAll + subscription-manager
43
43
  * queries) so buildView reads them live each tick; a 5s timer keeps an
44
44
  * externally-completed browser OAuth handshake visible without a keypress, the
45
- * same cadence the panel used. Enter signs out (surface-managed confirm,
46
- * matching the panel's ConfirmState) on an active row, or starts login via the
45
+ * same cadence the earlier view used. Enter signs out (surface-managed confirm,
46
+ * matching the earlier view's ConfirmState) on an active row, or starts login via the
47
47
  * existing `/subscription login <p> start` command on an available row.
48
48
  */
49
49
  class SubscriptionModalSurface implements ConfigModalSurface {
@@ -11,10 +11,10 @@ import type { WorkPlanItemStatus } from '@pellux/goodvibes-sdk/platform/workflow
11
11
  // persistent plan's checklist items with a progress summary + status counts.
12
12
  // All mutations (add/edit item, cycle/set status, remove, clear-completed)
13
13
  // route to the existing `/work-plan` command path (charter: no
14
- // destructive/interactive mutation direct-called from a modal; the panel's
14
+ // destructive/interactive mutation direct-called from a modal; the earlier view's
15
15
  // inline add/edit draft form has no place in a read/navigate modal, the bare
16
16
  // `/work-plan add` subcommand is the honest stand-in). Selection-blind port:
17
- // the panel's selected-item owner/source/notes/linked detail is folded into
17
+ // the earlier view's selected-item owner/source/notes/linked detail is folded into
18
18
  // each row label.
19
19
  // ---------------------------------------------------------------------------
20
20
 
@@ -64,11 +64,8 @@ class WorkPlanModalSurface implements ConfigModalSurface {
64
64
 
65
65
  private readonly hasRow = (row: ConfigModalRow | null): boolean => row !== null;
66
66
 
67
- /** 'i'/'w' jump to the selected item's linked agent/WRFC chain in Fleet
68
- * (item 4, restores the retired WorkPlanPanel's per-item deep-link,
69
- * lost when migrated this surface to a modal without it). Gated on
70
- * the link actually being present, same as the retired panel gated the key
71
- * on `item?.linked?.agentId`/`wrfcId` before ever reaching the jump. */
67
+ /** 'i'/'w' open the Agents modal on the selected item's linked agent or
68
+ * WRFC chain. Gated on the link actually being present. */
72
69
  private readonly hasAgentLink = (row: ConfigModalRow | null): boolean =>
73
70
  !!(row && this.itemFrom(row.id)?.linked?.agentId);
74
71
  private readonly hasWrfcLink = (row: ConfigModalRow | null): boolean =>
@@ -137,17 +134,17 @@ class WorkPlanModalSurface implements ConfigModalSurface {
137
134
  if (id === 'jumpAgent') {
138
135
  const agentId = item.linked?.agentId;
139
136
  if (!agentId) return;
140
- // 'agent' matches the SDK's ProcessKind for a live agent node, see
141
- // FleetPanel.receiveDeepLink's id+kind match.
142
- void ctx.executeCommand?.('panel', ['open', 'fleet', '--target', `${agentId}:agent`]);
143
- ctx.setStatus(`Opened Fleet on agent ${agentId}.`);
137
+ // 'agent' matches the SDK's ProcessKind for a live agent node, which
138
+ // AgentsModal.reveal matches on id and kind.
139
+ void ctx.executeCommand?.('agents', ['--target', `${agentId}:agent`]);
140
+ ctx.setStatus(`Opened Agents on agent ${agentId}.`);
144
141
  return;
145
142
  }
146
143
  if (id === 'jumpWrfc') {
147
144
  const wrfcId = item.linked?.wrfcId;
148
145
  if (!wrfcId) return;
149
- void ctx.executeCommand?.('panel', ['open', 'fleet', '--target', `${wrfcId}:wrfc-chain`]);
150
- ctx.setStatus(`Opened Fleet on WRFC chain ${wrfcId}.`);
146
+ void ctx.executeCommand?.('agents', ['--target', `${wrfcId}:wrfc-chain`]);
147
+ ctx.setStatus(`Opened Agents on WRFC chain ${wrfcId}.`);
151
148
  return;
152
149
  }
153
150
  const status: WorkPlanItemStatus | null =