@pellux/goodvibes-tui 1.27.0 → 2.0.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 (404) hide show
  1. package/CHANGELOG.md +125 -2
  2. package/README.md +7 -9
  3. package/bin/goodvibes +2 -2
  4. package/bin/launcher-support.js +8 -4
  5. package/docs/README.md +11 -2
  6. package/docs/foundation-artifacts/operator-contract.json +6403 -2347
  7. package/package.json +14 -25
  8. package/scripts/postinstall.js +35 -35
  9. package/src/audio/spoken-turn-model-routing.ts +1 -1
  10. package/src/cli/bundle-command.ts +5 -5
  11. package/src/cli/completions/generate.ts +1 -1
  12. package/src/cli/doctor.ts +3 -3
  13. package/src/cli/entrypoint.ts +12 -7
  14. package/src/cli/help.ts +4 -5
  15. package/src/cli/hooks-command.ts +1 -1
  16. package/src/cli/index.ts +1 -4
  17. package/src/cli/launch-auto-update.ts +59 -7
  18. package/src/cli/management-commands.ts +6 -6
  19. package/src/cli/management-utils.ts +5 -5
  20. package/src/cli/management.ts +7 -7
  21. package/src/cli/network-posture.ts +1 -1
  22. package/src/cli/package-verification.ts +7 -6
  23. package/src/cli/plugin-bundles-command.ts +1 -1
  24. package/src/cli/plugin-command.ts +2 -2
  25. package/src/cli/service-command.ts +2 -2
  26. package/src/cli/service-posture.ts +4 -4
  27. package/src/cli/status.ts +9 -8
  28. package/src/cli/surface-command.ts +4 -4
  29. package/src/cli/tui-startup.ts +12 -3
  30. package/src/cli-flags.ts +3 -3
  31. package/src/config/goodvibes-home-audit.ts +0 -2
  32. package/src/config/secret-config.ts +37 -5
  33. package/src/config/tui-extension-settings.ts +1 -1
  34. package/src/core/approval-alert.ts +2 -2
  35. package/src/core/budget-breach-notifier.ts +3 -3
  36. package/src/core/conversation-compaction-render.ts +1 -1
  37. package/src/core/conversation-line-cache.ts +1 -1
  38. package/src/core/conversation-render-context.ts +1 -1
  39. package/src/core/conversation-rendering.ts +2 -2
  40. package/src/core/conversation.ts +10 -10
  41. package/src/core/long-task-notifier.ts +2 -2
  42. package/src/core/memory-diagnostics-gateway.ts +1 -1
  43. package/src/core/scriptable-statusline.ts +1 -1
  44. package/src/core/session-auto-titler.ts +1 -1
  45. package/src/core/session-resume-core.ts +2 -2
  46. package/src/core/stream-event-wiring.ts +24 -44
  47. package/src/core/terminal-notifier.ts +3 -3
  48. package/src/core/turn-cancellation.ts +1 -1
  49. package/src/core/turn-event-wiring.ts +5 -5
  50. package/src/input/command-registry.ts +6 -6
  51. package/src/input/commands/channel-pairing.ts +1 -1
  52. package/src/input/commands/cluster-runtime.ts +1 -1
  53. package/src/input/commands/codebase-runtime.ts +1 -1
  54. package/src/input/commands/devices-runtime.ts +1 -1
  55. package/src/input/commands/hosted-runtime.ts +330 -0
  56. package/src/input/commands/local-setup-review.ts +1 -1
  57. package/src/input/commands/local-setup-transfer.ts +2 -2
  58. package/src/input/commands/local-setup.ts +3 -3
  59. package/src/input/commands/managed-runtime.ts +2 -2
  60. package/src/input/commands/operator-rpc.ts +24 -110
  61. package/src/input/commands/payment-card-intake.ts +1 -1
  62. package/src/input/commands/permissions-provenance.ts +2 -2
  63. package/src/input/commands/plugin-runtime.ts +1 -1
  64. package/src/input/commands/provider.ts +1 -1
  65. package/src/input/commands/relay-runtime.ts +18 -9
  66. package/src/input/commands/rewind-runtime.ts +1 -1
  67. package/src/input/commands/runtime-services.ts +1 -1
  68. package/src/input/commands/services-runtime.ts +1 -1
  69. package/src/input/commands/session-workflow.ts +1 -1
  70. package/src/input/commands/settings-sync-runtime.ts +2 -2
  71. package/src/input/commands/share-runtime.ts +1 -1
  72. package/src/input/commands/tasks-runtime.ts +145 -55
  73. package/src/input/commands/update-runtime.ts +31 -28
  74. package/src/input/commands/work-plan-runtime.ts +2 -2
  75. package/src/input/commands/workstream-attempts.ts +1 -1
  76. package/src/input/commands/workstream-runtime.ts +2 -2
  77. package/src/input/commands.ts +2 -0
  78. package/src/input/feature-unit-layout.ts +1 -1
  79. package/src/input/feed-context-factory.ts +3 -3
  80. package/src/input/handler-content-actions.ts +2 -2
  81. package/src/input/handler-feed-routes.ts +1 -1
  82. package/src/input/handler-feed.ts +3 -3
  83. package/src/input/handler-modal-token-routes.ts +1 -1
  84. package/src/input/handler-onboarding-daemon-adopt.ts +3 -2
  85. package/src/input/handler-onboarding.ts +1 -1
  86. package/src/input/handler-types.ts +2 -2
  87. package/src/input/handler-ui-state.ts +1 -1
  88. package/src/input/handler.ts +4 -4
  89. package/src/input/input-history.ts +1 -1
  90. package/src/input/onboarding/onboarding-feature-units.ts +2 -2
  91. package/src/input/onboarding/onboarding-runtime-status.ts +15 -1
  92. package/src/input/onboarding/onboarding-wizard-apply.ts +17 -8
  93. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +5 -3
  94. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +1 -1
  95. package/src/input/onboarding/onboarding-wizard-types.ts +1 -1
  96. package/src/input/payments-config.ts +6 -6
  97. package/src/input/search.ts +1 -1
  98. package/src/input/session-picker-modal.ts +46 -0
  99. package/src/input/settings-modal-activation.ts +1 -1
  100. package/src/input/settings-modal-behavior.ts +4 -4
  101. package/src/input/settings-modal-commit.ts +11 -0
  102. package/src/input/settings-modal-data.ts +13 -80
  103. package/src/input/settings-modal-mutations.ts +33 -0
  104. package/src/input/settings-modal-secrets.ts +34 -0
  105. package/src/input/settings-modal-subscriptions.ts +1 -1
  106. package/src/input/settings-modal-types.ts +15 -1
  107. package/src/input/settings-modal.ts +28 -3
  108. package/src/input/worktree-setup-config.ts +1 -1
  109. package/src/main.ts +11 -9
  110. package/src/panels/agent-inspector-shared.ts +2 -2
  111. package/src/panels/base-panel.ts +2 -2
  112. package/src/panels/builtin/operations.ts +6 -8
  113. package/src/panels/builtin/session.ts +17 -0
  114. package/src/panels/builtin/shared.ts +5 -5
  115. package/src/panels/builtin-modals.ts +3 -3
  116. package/src/panels/confirm-state.ts +1 -1
  117. package/src/panels/cost-tracker-panel.ts +4 -4
  118. package/src/panels/diff-panel.ts +2 -2
  119. package/src/panels/diff-review-panel.ts +2 -2
  120. package/src/panels/expandable-list-panel.ts +2 -2
  121. package/src/panels/fleet-acts.ts +1 -1
  122. package/src/panels/fleet-observed-render.ts +1 -1
  123. package/src/panels/fleet-panel-format.ts +1 -1
  124. package/src/panels/fleet-panel.ts +1 -1
  125. package/src/panels/fleet-spawn.ts +1 -1
  126. package/src/panels/fleet-steer.ts +1 -1
  127. package/src/panels/fleet-transcript.ts +1 -1
  128. package/src/panels/git-panel.ts +1 -1
  129. package/src/panels/hosted-session-feed.ts +352 -0
  130. package/src/panels/hosted-session-panel.ts +221 -0
  131. package/src/panels/local-auth-panel.ts +3 -3
  132. package/src/panels/modals/devices-modal.ts +1 -1
  133. package/src/panels/modals/local-auth-modal.ts +1 -1
  134. package/src/panels/modals/pairing-modal.ts +1 -1
  135. package/src/panels/modals/services-modal.ts +1 -1
  136. package/src/panels/modals/settings-sync-modal.ts +1 -1
  137. package/src/panels/modals/subscription-modal.ts +1 -1
  138. package/src/panels/modals/work-plan-modal.ts +1 -1
  139. package/src/panels/notifications-panel.ts +1 -1
  140. package/src/panels/panel-confirm-overlay.ts +1 -1
  141. package/src/panels/plugins-panel.ts +2 -2
  142. package/src/panels/polish-core.ts +2 -2
  143. package/src/panels/polish-tables.ts +1 -1
  144. package/src/panels/polish.ts +2 -2
  145. package/src/panels/scrollable-list-panel.ts +3 -3
  146. package/src/panels/skills-panel.ts +3 -3
  147. package/src/panels/token-budget-panel.ts +5 -5
  148. package/src/panels/types.ts +1 -2
  149. package/src/permissions/prompt.ts +1 -1
  150. package/src/renderer/autocomplete-overlay.ts +1 -1
  151. package/src/renderer/block-actions-overlay.ts +1 -1
  152. package/src/renderer/bookmark-modal.ts +1 -1
  153. package/src/renderer/buffer.ts +1 -1
  154. package/src/renderer/code-block.ts +1 -1
  155. package/src/renderer/composer-fragments.ts +1 -1
  156. package/src/renderer/compositor.ts +2 -2
  157. package/src/renderer/config-modal.ts +1 -1
  158. package/src/renderer/context-inspector.ts +1 -1
  159. package/src/renderer/conversation-layout.ts +2 -2
  160. package/src/renderer/conversation-overlays.ts +1 -1
  161. package/src/renderer/conversation-surface.ts +2 -2
  162. package/src/renderer/diff-view.ts +1 -1
  163. package/src/renderer/diff.ts +1 -1
  164. package/src/renderer/file-picker-overlay.ts +1 -1
  165. package/src/renderer/fleet-tab-strip.ts +1 -1
  166. package/src/renderer/fullscreen-primitives.ts +2 -2
  167. package/src/renderer/fullscreen-workspace.ts +1 -1
  168. package/src/renderer/header-line.ts +1 -1
  169. package/src/renderer/help-overlay.ts +1 -1
  170. package/src/renderer/history-search-overlay.ts +2 -2
  171. package/src/renderer/layout.ts +5 -8
  172. package/src/renderer/markdown-inline.ts +1 -1
  173. package/src/renderer/markdown-table.ts +1 -1
  174. package/src/renderer/markdown.ts +1 -1
  175. package/src/renderer/mcp-workspace.ts +1 -1
  176. package/src/renderer/modal-factory.ts +2 -2
  177. package/src/renderer/model-workspace.ts +2 -2
  178. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  179. package/src/renderer/overlay-box.ts +1 -1
  180. package/src/renderer/panel-composite.ts +1 -1
  181. package/src/renderer/panel-workspace-bar.ts +1 -1
  182. package/src/renderer/process-indicator.ts +1 -1
  183. package/src/renderer/profile-picker-modal.ts +1 -1
  184. package/src/renderer/search-overlay.ts +2 -2
  185. package/src/renderer/selection-modal-overlay.ts +1 -1
  186. package/src/renderer/session-picker-modal.ts +124 -3
  187. package/src/renderer/settings-modal-helpers.ts +2 -0
  188. package/src/renderer/settings-modal.ts +2 -2
  189. package/src/renderer/shell-surface.ts +2 -2
  190. package/src/renderer/system-message.ts +1 -1
  191. package/src/renderer/tab-strip.ts +1 -1
  192. package/src/renderer/theme-mode-config.ts +1 -1
  193. package/src/renderer/theme.ts +11 -12
  194. package/src/renderer/thinking.ts +1 -1
  195. package/src/renderer/tool-call.ts +2 -2
  196. package/src/renderer/tool-result-expanded-lines.ts +1 -1
  197. package/src/renderer/turn-injection.ts +7 -8
  198. package/src/renderer/ui-factory.ts +3 -3
  199. package/src/runtime/bootstrap-command-context.ts +4 -4
  200. package/src/runtime/bootstrap-command-parts.ts +5 -5
  201. package/src/runtime/bootstrap-core.ts +30 -30
  202. package/src/runtime/bootstrap-shell.ts +4 -4
  203. package/src/runtime/bootstrap.ts +128 -157
  204. package/src/runtime/client/approval-updates.ts +82 -0
  205. package/src/runtime/client/build-floors.ts +167 -0
  206. package/src/runtime/client/daemon-attach-handshake.ts +115 -0
  207. package/src/runtime/client/fleet-union.ts +147 -0
  208. package/src/runtime/client/host-service-status.ts +71 -0
  209. package/src/runtime/client/hosted-exit.ts +86 -0
  210. package/src/runtime/client/hosted-roster.ts +110 -0
  211. package/src/runtime/client/hosted-session-stream.ts +178 -0
  212. package/src/runtime/client/hosted-sessions.ts +187 -0
  213. package/src/runtime/client/operator-endpoint.ts +213 -0
  214. package/src/runtime/client/spine-adoption.ts +99 -0
  215. package/src/runtime/cloudflare-control-plane.ts +1 -1
  216. package/src/runtime/context-accounting-source.ts +1 -1
  217. package/src/runtime/context.ts +2 -2
  218. package/src/runtime/conversation-rewind-port.ts +42 -14
  219. package/src/runtime/daemon-attach-notices.ts +55 -19
  220. package/src/runtime/diagnostics/panels/ops.ts +1 -1
  221. package/src/runtime/disposal-wiring.ts +4 -24
  222. package/src/runtime/index.ts +119 -105
  223. package/src/runtime/install-self-check-startup.ts +2 -2
  224. package/src/runtime/interaction-seams.ts +1 -1
  225. package/src/runtime/knowledge-services.ts +8 -2
  226. package/src/runtime/legacy-daemon-migration.ts +15 -3
  227. package/src/runtime/legacy-daemon-reconcile.ts +3 -2
  228. package/src/runtime/memory-spine-transport.ts +37 -267
  229. package/src/runtime/notification-dispatch.ts +2 -2
  230. package/src/runtime/onboarding/apply.ts +2 -2
  231. package/src/runtime/onboarding/derivation.ts +2 -2
  232. package/src/runtime/onboarding/markers.ts +2 -2
  233. package/src/runtime/onboarding/progress.ts +2 -2
  234. package/src/runtime/onboarding/snapshot.ts +1 -1
  235. package/src/runtime/onboarding/state.ts +2 -2
  236. package/src/runtime/onboarding/types.ts +2 -2
  237. package/src/runtime/orchestrator-core-services.ts +1 -1
  238. package/src/runtime/path-shadow-startup.ts +28 -221
  239. package/src/runtime/power-keepawake-remote.ts +3 -2
  240. package/src/runtime/process-lifecycle.ts +2 -2
  241. package/src/runtime/provider-fallback.ts +10 -66
  242. package/src/runtime/recovery-autosave.ts +1 -1
  243. package/src/runtime/recovery-offer-wiring.ts +39 -23
  244. package/src/runtime/recovery-prompt.ts +31 -17
  245. package/src/runtime/relay-reachability-bridge.ts +53 -42
  246. package/src/runtime/release-artifacts.ts +2 -1
  247. package/src/runtime/runtime-services-types.ts +82 -35
  248. package/src/runtime/services.ts +305 -300
  249. package/src/runtime/session-resume-liveness-confirm.ts +1 -1
  250. package/src/runtime/ui-services.ts +7 -6
  251. package/src/runtime/update-check.ts +23 -43
  252. package/src/runtime/workspace-checkpointing.ts +1 -1
  253. package/src/runtime/wrfc-persistence.ts +2 -2
  254. package/src/shell/ui-openers.ts +30 -7
  255. package/src/utils/clipboard.ts +1 -1
  256. package/src/verification/verification-ledger.ts +10 -8
  257. package/src/version.ts +1 -1
  258. package/bin/goodvibes-daemon +0 -90
  259. package/src/cli/config-overrides.ts +0 -267
  260. package/src/cli/endpoints.ts +0 -109
  261. package/src/cli/parser.ts +0 -395
  262. package/src/cli/redaction.ts +0 -170
  263. package/src/cli/types.ts +0 -84
  264. package/src/cluster/commands.ts +0 -382
  265. package/src/cluster/remote-daemon-target.ts +0 -225
  266. package/src/cluster/render.ts +0 -268
  267. package/src/config/atomic-write.ts +0 -70
  268. package/src/config/credential-availability.ts +0 -122
  269. package/src/config/goodvibes-home.ts +0 -149
  270. package/src/config/index.ts +0 -88
  271. package/src/config/provider-model.ts +0 -23
  272. package/src/config/read-versioned.ts +0 -228
  273. package/src/core/alert-gating.ts +0 -67
  274. package/src/core/consolidation-receipt.ts +0 -41
  275. package/src/core/focus-tracker.ts +0 -41
  276. package/src/core/history.ts +0 -45
  277. package/src/core/memory-status.ts +0 -118
  278. package/src/core/orchestrator.ts +0 -7
  279. package/src/core/pairing-devices.ts +0 -49
  280. package/src/core/pairing-handoff.ts +0 -101
  281. package/src/core/pairing-offers.ts +0 -83
  282. package/src/core/pairing-origin.ts +0 -78
  283. package/src/core/rewind-turn-anchors.ts +0 -311
  284. package/src/core/session-recovery.ts +0 -210
  285. package/src/core/stable-host.ts +0 -171
  286. package/src/core/transcript-journal.ts +0 -503
  287. package/src/daemon/cli.ts +0 -641
  288. package/src/daemon/handlers/context.ts +0 -29
  289. package/src/daemon/handlers/contracts.ts +0 -77
  290. package/src/daemon/handlers/credentials.ts +0 -139
  291. package/src/daemon/handlers/drafts/draft-store.ts +0 -427
  292. package/src/daemon/handlers/drafts/index.ts +0 -17
  293. package/src/daemon/handlers/drafts/register.ts +0 -331
  294. package/src/daemon/handlers/errors.ts +0 -18
  295. package/src/daemon/handlers/inbox/cursor-store.ts +0 -457
  296. package/src/daemon/handlers/inbox/index.ts +0 -284
  297. package/src/daemon/handlers/inbox/mapping.ts +0 -192
  298. package/src/daemon/handlers/inbox/poller.ts +0 -212
  299. package/src/daemon/handlers/inbox/provider-adapter.ts +0 -156
  300. package/src/daemon/handlers/inbox/providers/discord.ts +0 -252
  301. package/src/daemon/handlers/inbox/providers/email.ts +0 -152
  302. package/src/daemon/handlers/inbox/providers/imap-client.ts +0 -300
  303. package/src/daemon/handlers/inbox/providers/route-util.ts +0 -24
  304. package/src/daemon/handlers/inbox/providers/slack.ts +0 -263
  305. package/src/daemon/handlers/index.ts +0 -117
  306. package/src/daemon/handlers/register.ts +0 -168
  307. package/src/daemon/handlers/remote/backends/cloud-terminal.ts +0 -142
  308. package/src/daemon/handlers/remote/backends/docker.ts +0 -79
  309. package/src/daemon/handlers/remote/backends/index.ts +0 -40
  310. package/src/daemon/handlers/remote/backends/local-process.ts +0 -113
  311. package/src/daemon/handlers/remote/backends/process-runner.ts +0 -127
  312. package/src/daemon/handlers/remote/backends/ssh.ts +0 -125
  313. package/src/daemon/handlers/remote/backends/types.ts +0 -97
  314. package/src/daemon/handlers/remote/dispatcher.ts +0 -181
  315. package/src/daemon/handlers/remote/index.ts +0 -119
  316. package/src/daemon/handlers/remote/peer-registry.ts +0 -357
  317. package/src/daemon/handlers/remote/service.ts +0 -191
  318. package/src/daemon/handlers/routing/inbox-bridge.ts +0 -71
  319. package/src/daemon/handlers/routing/index.ts +0 -261
  320. package/src/daemon/handlers/routing/route-store.ts +0 -319
  321. package/src/daemon/handlers/routing/routing-resolver.ts +0 -75
  322. package/src/daemon/handlers/sqlite-store.ts +0 -278
  323. package/src/daemon/handlers/triage/index.ts +0 -57
  324. package/src/daemon/handlers/triage/integration.ts +0 -213
  325. package/src/daemon/handlers/triage/pipeline.ts +0 -274
  326. package/src/daemon/handlers/triage/scorer.ts +0 -287
  327. package/src/daemon/handlers/triage/tagger/discord.ts +0 -187
  328. package/src/daemon/handlers/triage/tagger/imap.ts +0 -384
  329. package/src/daemon/handlers/triage/tagger/index.ts +0 -184
  330. package/src/daemon/handlers/triage/tagger/shared.ts +0 -70
  331. package/src/daemon/handlers/triage/tagger/slack.ts +0 -69
  332. package/src/daemon/handlers/triage/types.ts +0 -50
  333. package/src/daemon/lifecycle.ts +0 -41
  334. package/src/daemon/provision-wake-model.ts +0 -81
  335. package/src/daemon/safe-serve.ts +0 -61
  336. package/src/daemon/send/channels.ts +0 -200
  337. package/src/daemon/send/command.ts +0 -332
  338. package/src/daemon/send/composition.ts +0 -99
  339. package/src/daemon/send/failure-text.ts +0 -93
  340. package/src/daemon/send/inert-text.ts +0 -225
  341. package/src/daemon/send/stdin.ts +0 -24
  342. package/src/daemon/service-commands.ts +0 -329
  343. package/src/export/cost-utils.ts +0 -319
  344. package/src/input/selection.ts +0 -135
  345. package/src/plugins/loader.ts +0 -15
  346. package/src/renderer/bottom-bar.ts +0 -58
  347. package/src/renderer/conversation-tree.ts +0 -228
  348. package/src/runtime/agent-graph-composition.ts +0 -78
  349. package/src/runtime/channel-composition.ts +0 -46
  350. package/src/runtime/cluster-composition.ts +0 -124
  351. package/src/runtime/cluster-group-composition.ts +0 -284
  352. package/src/runtime/code-index-services.ts +0 -167
  353. package/src/runtime/daemon-handler-composition.ts +0 -76
  354. package/src/runtime/device-posture-composition.ts +0 -110
  355. package/src/runtime/durability-housekeeping.ts +0 -183
  356. package/src/runtime/durability-services.ts +0 -155
  357. package/src/runtime/embedded-service-factories.ts +0 -58
  358. package/src/runtime/feature-settings.ts +0 -154
  359. package/src/runtime/fleet-needs-input-push.ts +0 -70
  360. package/src/runtime/fleet-services.ts +0 -41
  361. package/src/runtime/idle-power-services.ts +0 -85
  362. package/src/runtime/mail-composition.ts +0 -65
  363. package/src/runtime/memory-fold.ts +0 -55
  364. package/src/runtime/operator-token-cleanup.ts +0 -109
  365. package/src/runtime/path-shadow.ts +0 -418
  366. package/src/runtime/perf/panel-health-monitor.ts +0 -18
  367. package/src/runtime/provider-optimizer-wiring.ts +0 -55
  368. package/src/runtime/reachability-notice.ts +0 -100
  369. package/src/runtime/remote-execution-composition.ts +0 -62
  370. package/src/runtime/session-liveness-marker.ts +0 -257
  371. package/src/runtime/session-pointer-surface.ts +0 -22
  372. package/src/runtime/session-storage-services.ts +0 -41
  373. package/src/runtime/surface-feature-flags.ts +0 -96
  374. package/src/runtime/terminal-output-guard.ts +0 -235
  375. package/src/runtime/trust/workspace-registration.ts +0 -192
  376. package/src/runtime/trust/workspace-trust.ts +0 -229
  377. package/src/runtime/ui/index.ts +0 -39
  378. package/src/runtime/ui/model-picker/data-provider.ts +0 -182
  379. package/src/runtime/ui/model-picker/health-enrichment.ts +0 -231
  380. package/src/runtime/ui/model-picker/index.ts +0 -59
  381. package/src/runtime/ui/model-picker/types.ts +0 -153
  382. package/src/runtime/ui/provider-health/data-provider.ts +0 -244
  383. package/src/runtime/ui/provider-health/fallback-visualizer.ts +0 -71
  384. package/src/runtime/ui/provider-health/index.ts +0 -46
  385. package/src/runtime/ui/provider-health/types.ts +0 -146
  386. package/src/runtime/ui-events.ts +0 -1
  387. package/src/runtime/ui-read-model-helpers.ts +0 -1
  388. package/src/runtime/ui-read-models-observability-maintenance.ts +0 -1
  389. package/src/runtime/ui-read-models-observability-options.ts +0 -1
  390. package/src/runtime/ui-read-models-observability-remote.ts +0 -1
  391. package/src/runtime/ui-read-models-observability-security.ts +0 -1
  392. package/src/runtime/ui-read-models-observability-system.ts +0 -1
  393. package/src/runtime/ui-read-models-observability.ts +0 -1
  394. package/src/runtime/ui-service-queries.ts +0 -1
  395. package/src/runtime/voice-setup-services.ts +0 -98
  396. package/src/runtime/workstream-attempts-validation.ts +0 -77
  397. package/src/runtime/workstream-draft-edits.ts +0 -95
  398. package/src/runtime/workstream-draft-store.ts +0 -274
  399. package/src/runtime/workstream-draft-types.ts +0 -42
  400. package/src/runtime/workstream-services.ts +0 -373
  401. package/src/tools/index.ts +0 -1
  402. package/src/types/grid.ts +0 -48
  403. package/src/types/sql-js.d.ts +0 -15
  404. package/src/work-plans/work-plan-store.ts +0 -702
@@ -11,12 +11,31 @@ import {
11
11
 
12
12
  export type SettingsSecretsManager = Pick<SecretsManager, 'delete' | 'set'>;
13
13
 
14
+ /**
15
+ * The daemon's own credential write, when this app has a daemon to write to.
16
+ *
17
+ * A daemon-scoped credential is two writes that only work together — the secret
18
+ * value and the config reference that points at it — and `credentials.set` does
19
+ * both, verifying the value reads back before it touches the config. Splitting
20
+ * them across a process boundary leaves a window where the config names a
21
+ * reference resolving to nothing, which every reader treats as a
22
+ * configured-but-broken credential.
23
+ */
24
+ export interface SettingsDaemonCredentialWriter {
25
+ set(configKey: string, value: string): Promise<unknown>;
26
+ clear(configKey: string): Promise<void>;
27
+ }
28
+
14
29
  export function setSecretBackedSettingValue(args: {
15
30
  key: ConfigKey;
16
31
  value: string;
17
32
  configManager: ConfigManager;
18
33
  secretsManager: SettingsSecretsManager | null;
34
+ /** Present when a daemon is adopted; absent leaves the historical local path. */
35
+ daemonCredentials?: SettingsDaemonCredentialWriter | null;
19
36
  setConfigValue: (key: ConfigKey, value: unknown) => void;
37
+ /** Surface the daemon's refusal; without it a failed write would be silent. */
38
+ onError?: (message: string) => void;
20
39
  }): void {
21
40
  const { key, value, configManager, secretsManager, setConfigValue } = args;
22
41
  if (!secretsManager) {
@@ -24,6 +43,21 @@ export function setSecretBackedSettingValue(args: {
24
43
  return;
25
44
  }
26
45
 
46
+ // A daemon-scoped credential never lands in this surface's own tree: the
47
+ // daemon is the process that spends it, and a copy here would be a credential
48
+ // sitting somewhere nothing reads it from.
49
+ if (defaultSecretBackedScope(key) === 'daemon' && args.daemonCredentials) {
50
+ const writer = args.daemonCredentials;
51
+ const trimmed = value.trim();
52
+ const done = trimmed.length === 0 ? writer.clear(key) : writer.set(key, value);
53
+ void done.catch((error) => {
54
+ const message = summarizeError(error);
55
+ logger.error('SettingsModal: the daemon refused the credential write', { key, error: message });
56
+ args.onError?.(`Saving that credential failed: ${message}`);
57
+ });
58
+ return;
59
+ }
60
+
27
61
  const update = buildSecretBackedConfigUpdate(key, value);
28
62
  // A daemon-owned key (surfaces.*, payments.*, controlPlane.*, ...) names a
29
63
  // credential the daemon itself executes with, so its secret material lands in
@@ -1,7 +1,7 @@
1
1
  import type { ProviderAuthFreshness } from '@/runtime/index.ts';
2
2
  import { listBuiltinSubscriptionProviders } from '@pellux/goodvibes-sdk/platform/config';
3
3
  import type { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config';
4
- import type { ServiceInspectionQuery } from '../runtime/ui-service-queries.ts';
4
+ import type { ServiceInspectionQuery } from '@/runtime/index.ts';
5
5
  import type { SubscriptionEntry } from './settings-modal-types.ts';
6
6
 
7
7
  export function buildSubscriptionEntries(
@@ -71,6 +71,16 @@ export type SettingsCategory =
71
71
  // hand-editing a settings file — a third occurrence of the push.*/cluster.*
72
72
  // class the profile comment already names two of.
73
73
  | 'occasions'
74
+ // hostedSessions.* — sessions whose conversation loop runs inside the daemon
75
+ // instead of this terminal: what detaching does to one (the owner-confirmed
76
+ // default is `kill`, the behavior closing a client has always had), how many
77
+ // may run at once, how much of a conversation is kept, and how long a
78
+ // terminated one's record is retained. Same mandatory-dual-membership rule as
79
+ // profile and occasions above — without BOTH this entry and the
80
+ // SETTINGS_CATEGORY_GROUPS membership below, buildSettingGroups drops every
81
+ // hostedSessions.* key from the workspace, which is exactly what happened to
82
+ // push.* and cluster.* before them.
83
+ | 'hostedSessions'
74
84
  | 'danger';
75
85
 
76
86
  export type SettingsFocusPane = 'categories' | 'settings';
@@ -82,7 +92,11 @@ export const SETTINGS_CATEGORY_GROUPS: ReadonlyArray<{
82
92
  { label: 'Interface', categories: ['display', 'ui', 'behavior', 'notifications', 'permissions', 'policy', 'security'] },
83
93
  { label: 'AI Routing', categories: ['provider', 'pricing', 'subscriptions', 'helper', 'tools', 'tts', 'voice'] },
84
94
  { label: 'Service & Network', categories: ['service', 'daemon', 'network', 'controlPlane', 'httpListener', 'web', 'relay'] },
85
- { label: 'Surfaces & Cloud', categories: ['surfaces', 'device', 'conversationGate', 'integrations', 'connections', 'mcp', 'cloudflare'] },
95
+ // 'hostedSessions' sits beside 'surfaces' and 'conversationGate': all three
96
+ // answer "where does this conversation actually run, and who can reach it" —
97
+ // the detach policy is a fact about the daemon holding a session open, not
98
+ // about this terminal's presentation of it.
99
+ { label: 'Surfaces & Cloud', categories: ['surfaces', 'hostedSessions', 'device', 'conversationGate', 'integrations', 'connections', 'mcp', 'cloudflare'] },
86
100
  // 'occasions' sits beside 'checkin': both are proactive background loops
87
101
  // (a cadence, a judgment pass, a conditional channel delivery) rather than
88
102
  // facts held about the owner — the data occasions/plans declare lives in
@@ -20,8 +20,8 @@ import { type ConfigKey } from '@pellux/goodvibes-sdk/platform/config';
20
20
  import type { ModelPickerTarget } from './model-picker.ts';
21
21
  import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
22
22
  import type { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config';
23
- import type { ServiceInspectionQuery } from '../runtime/ui-service-queries.ts';
24
- import type { SettingsSecretsManager } from './settings-modal-secrets.ts';
23
+ import type { ServiceInspectionQuery } from '@/runtime/index.ts';
24
+ import type { SettingsDaemonCredentialWriter, SettingsSecretsManager } from './settings-modal-secrets.ts';
25
25
  import { CVV_PROMPT_TRADEOFF_WARNING } from '@pellux/goodvibes-sdk/platform/payments';
26
26
  import { PAYMENTS_CVV_HANDLING_CONFIG_KEY } from './payments-config.ts';
27
27
  import type { FeatureFlagManager } from '@/runtime/index.ts';
@@ -52,9 +52,10 @@ import { getSettingLabel } from '../renderer/settings-modal-helpers.ts';
52
52
  import {
53
53
  applySettingValue,
54
54
  syncFlagEntryFromManager,
55
+ type DaemonOwnedConfigWriter,
55
56
  type SettingAppliedCallback,
56
57
  } from './settings-modal-mutations.ts';
57
- import { featureEnablementWrite, isFeatureValueEnabled } from '../runtime/feature-settings.ts';
58
+ import { featureEnablementWrite, isFeatureValueEnabled } from '@pellux/goodvibes-terminal-shell';
58
59
  import {
59
60
  activateSelected as _activateSelected,
60
61
  handleSubscriptionLogoutKey as _handleSubscriptionLogoutKey,
@@ -85,6 +86,20 @@ export type SettingsModalChangeHandler = (change: SettingsModalChange) => Settin
85
86
 
86
87
  export interface SettingsModalOpenOptions {
87
88
  readonly onSettingApplied?: SettingsModalChangeHandler;
89
+ /**
90
+ * The daemon's credential write. A daemon-scoped credential (a mailbox
91
+ * password, a bot token, a card) must land where the daemon reads it — this
92
+ * surface storing a copy is a credential in a place nothing consults.
93
+ */
94
+ readonly daemonCredentials?: SettingsDaemonCredentialWriter | null;
95
+ /**
96
+ * Where a daemon-owned setting is written. Present when a daemon is
97
+ * configured; without it every write stays local, which is right only when
98
+ * there is no daemon to disagree with.
99
+ */
100
+ readonly daemonConfig?: DaemonOwnedConfigWriter | null;
101
+ /** Renders a refused credential write, so a failed save is never silent. */
102
+ readonly reportError?: (message: string) => void;
88
103
  /** In-process catalog the Connections category probes; see that module. */
89
104
  readonly gatewayMethods?: GatewayMethodCatalog;
90
105
  /** Called when an async connection refresh has new rows to paint. */
@@ -194,6 +209,9 @@ export class SettingsModal {
194
209
 
195
210
  private configManager: ConfigManager | null = null;
196
211
  private secretsManager: SettingsSecretsManager | null = null;
212
+ private daemonCredentials: SettingsDaemonCredentialWriter | null = null;
213
+ private daemonConfig: DaemonOwnedConfigWriter | null = null;
214
+ private reportError: ((message: string) => void) | null = null;
197
215
  private featureFlagManager: FeatureFlagManager | null = null;
198
216
  private mcpRegistry: McpRegistry | null = null;
199
217
  private subscriptionManager: SubscriptionManager | null = null;
@@ -217,6 +235,9 @@ export class SettingsModal {
217
235
  ): void {
218
236
  this.configManager = configManager;
219
237
  this.secretsManager = secretsManager ?? null;
238
+ this.daemonCredentials = options?.daemonCredentials ?? null;
239
+ this.daemonConfig = options?.daemonConfig ?? null;
240
+ this.reportError = options?.reportError ?? null;
220
241
  this.featureFlagManager = featureFlagManager;
221
242
  this.subscriptionManager = subscriptionManager;
222
243
  this.serviceRegistry = serviceRegistry;
@@ -557,6 +578,8 @@ export class SettingsModal {
557
578
  editBuffer: this.editBuffer,
558
579
  configManager: this.configManager,
559
580
  secretsManager: this.secretsManager,
581
+ daemonCredentials: this.daemonCredentials,
582
+ ...(this.reportError ? { reportError: this.reportError } : {}),
560
583
  mcpRegistry: this.mcpRegistry,
561
584
  mcpAllowAllConfirmationTarget: this.mcpAllowAllConfirmationTarget,
562
585
  getSelectedMcp: () => this.getSelectedMcp(),
@@ -678,6 +701,8 @@ export class SettingsModal {
678
701
  refreshGroups: () => {
679
702
  if (this.configManager) refreshEntryValues(this.groups, this.configManager);
680
703
  },
704
+ daemonConfig: this.daemonConfig,
705
+ ...(this.reportError ? { onAsyncError: this.reportError } : {}),
681
706
  });
682
707
 
683
708
  // Feature-unit headers write plain domain keys; the SDK settings bridge
@@ -9,7 +9,7 @@
9
9
  * settings modal even though they fully control what runs when a fresh
10
10
  * isolated worktree is provisioned (setup commands, then untracked-file
11
11
  * carry-over). Same rationale as the other synthetic settings in
12
- * settings-modal-data.ts (tts.speed, behavior.notifyAfterSeconds, etc).
12
+ * settings-modal-data.ts (behavior.notifyAfterSeconds, display.themeMode, etc).
13
13
  *
14
14
  * Both keys hold a JSON array of strings on disk. The settings modal's
15
15
  * inline editor is a single-line text field, so — matching the SDK's own
package/src/main.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env bun
2
- import { resolveGoodVibesDaemonHome, resolveGoodVibesHome } from './config/goodvibes-home.ts';
2
+ import { resolveGoodVibesDaemonHome, resolveGoodVibesHome } from '@pellux/goodvibes-sdk/platform/config';
3
3
  import { Compositor } from './renderer/compositor.ts';
4
- import { type Line } from './types/grid.ts';
4
+ import { type Line } from '@pellux/goodvibes-sdk/platform/types';
5
5
  import { UIFactory } from './renderer/ui-factory.ts';
6
- import { Orchestrator } from './core/orchestrator';
6
+ import { Orchestrator } from '@pellux/goodvibes-sdk/platform/core';
7
7
  import { InputHandler } from './input/handler.ts';
8
- import { SelectionManager } from './input/selection.ts';
8
+ import { SelectionManager } from '@pellux/goodvibes-terminal-shell';
9
9
  import type { ContentPart } from '@pellux/goodvibes-sdk/platform/providers';
10
10
  import { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools';
11
11
  import { registerAllTools } from '@pellux/goodvibes-sdk/platform/tools';
@@ -52,12 +52,12 @@ import { resolveFoldedBookmarkLine } from './core/bookmark-navigation.ts';
52
52
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
53
53
  import { prepareShellCliRuntime } from './cli/entrypoint.ts';
54
54
  import { applyInitialTuiCliState, reportFatalStartupError } from './cli/tui-startup.ts';
55
- import { applyConfiguredHitlMode, applyRuntimeConfigValue, applyTuiRuntimeConfigDefaults } from './cli/config-overrides.ts';
55
+ import { applyConfiguredHitlMode, applyRuntimeConfigValue, applyTerminalRuntimeConfigDefaults } from '@pellux/goodvibes-terminal-shell';
56
56
  import { renderToolCallBlock } from './renderer/tool-call.ts';
57
57
  import { wireSpokenTurnRuntime } from './audio/spoken-turn-wiring.ts';
58
58
  import { installVoiceCapture } from './shell/voice-capture-shell.ts';
59
59
  import { attachSpokenTurnModelRouting, createSpokenTurnInputOptions } from './audio/spoken-turn-model-routing.ts';
60
- import { allowTerminalWrite, installTuiTerminalOutputGuard } from './runtime/terminal-output-guard.ts';
60
+ import { allowTerminalWrite, installFullScreenTerminalOutputGuard } from '@pellux/goodvibes-terminal-shell/terminal-output-guard';
61
61
  import { installProcessLifecycle } from './runtime/process-lifecycle.ts';
62
62
  import { createRenderScheduler } from '@pellux/goodvibes-terminal-shell';
63
63
  import { buildCommandArgsHint } from './input/command-args-hint.ts';
@@ -67,7 +67,7 @@ import { formatUserFacingErrorLine } from './core/format-user-error.ts';
67
67
  import { wireStreamEventMetrics, createStreamMetrics, type StreamMetrics, type WireStreamEventMetricsResult } from './core/stream-event-wiring.ts';
68
68
  import { wireTurnEventHandlers } from './core/turn-event-wiring.ts';
69
69
  import { resolveContextStatusHint } from './renderer/context-status-hint.ts';
70
- import { isEffectiveDangerMode } from './config/index.ts';
70
+ import { isEffectiveDangerMode } from '@pellux/goodvibes-sdk/platform/config';
71
71
  import { createScriptableStatusline } from './core/scriptable-statusline.ts';
72
72
  import { applyComposerCapture, applyAtModelDirective } from './input/composer-capture.ts';
73
73
  import { createSessionAutoTitler } from './core/session-auto-titler.ts';
@@ -151,7 +151,7 @@ async function main() {
151
151
  conversation.setWidthProvider(() => activeConversationWidth);
152
152
  // Persisted HITL mode + TUI-side config defaults (doc'd at their definitions).
153
153
  applyConfiguredHitlMode(configManager, modeManager);
154
- applyTuiRuntimeConfigDefaults(configManager);
154
+ applyTerminalRuntimeConfigDefaults(configManager);
155
155
 
156
156
  // Re-surface pre-TUI launch-update lines in-session (the alt screen wipes
157
157
  // stdout). Launch-time update mechanics are routine, not urgent — low
@@ -650,7 +650,7 @@ async function main() {
650
650
  };
651
651
  const renderScheduler = createRenderScheduler(renderNow, undefined, () => lifecycle.isTerminalRestored()); // coalescer; no frames after terminal restore
652
652
  const render = (): void => renderScheduler.schedule(); // captured direct writes → activity log + quiet /debug counter, not repeated transcript lines (1a)
653
- const terminalOutputGuard = installTuiTerminalOutputGuard({ stdout, stderr: process.stderr, onCapture: (total) => { commandContext.session.runtime.terminalWritesIntercepted = total; render(); } });
653
+ const terminalOutputGuard = installFullScreenTerminalOutputGuard({ stdout, stderr: process.stderr, onCapture: (total) => { commandContext.session.runtime.terminalWritesIntercepted = total; render(); } });
654
654
 
655
655
  setRenderRequest(() => renderScheduler.flushNow()); // bootstrap's 16ms coalescer composites via the (restore-gated) scheduler
656
656
  setPanelFrameRequester(render); // live panels repaint when idle (a replay finding: fleet sat stale until keypress)
@@ -668,6 +668,8 @@ async function main() {
668
668
  mcpRegistry: ctx.services.mcpRegistry,
669
669
  subscriptionManager,
670
670
  secretsManager,
671
+ daemonCredentials: ctx.services.daemonCredentials, // a daemon-scoped credential is stored by the daemon, in one verified step
672
+ daemonConfig: ctx.services.daemonConfig, // a daemon-owned setting is written where the daemon reads it
671
673
  serviceRegistry: ctx.services.serviceRegistry,
672
674
  memoryEmbeddingRegistry: ctx.services.memoryEmbeddingRegistry,
673
675
  workingDirectory: workingDir,
@@ -1,7 +1,7 @@
1
1
  import { formatDuration } from '../utils/format-duration.ts';
2
- import { calcSessionCost, isModelPriced } from '../export/cost-utils.ts';
2
+ import { calcSessionCost, isModelPriced } from '@pellux/goodvibes-sdk/platform/providers';
3
3
  import type { AgentEvent } from '@/runtime/index.ts';
4
- import type { UiEventFeed } from '../runtime/ui-events.ts';
4
+ import type { UiEventFeed } from '@/runtime/index.ts';
5
5
 
6
6
  export type AgentInspectorEntryKind = 'user' | 'assistant' | 'tool_call' | 'tool_result' | 'session' | 'error';
7
7
 
@@ -1,7 +1,7 @@
1
- import type { Line } from '../types/grid.ts';
1
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import type { Panel, PanelCategory } from './types.ts';
3
3
  import type { ComponentResourceContract, ComponentHealthState } from '../runtime/perf/panel-contracts.ts';
4
- import type { ComponentHealthMonitor } from '../runtime/perf/panel-health-monitor.ts';
4
+ import type { ComponentHealthMonitor } from '@pellux/goodvibes-sdk/platform/runtime/observability';
5
5
  import { UIFactory } from '../renderer/ui-factory.ts';
6
6
  import { SPINNER_FRAMES } from '../renderer/ui-primitives.ts';
7
7
  import { fitDisplay } from '../utils/terminal-width.ts';
@@ -1,6 +1,5 @@
1
1
  import type { PanelManager } from '../panel-manager.ts';
2
2
  import { FleetPanel } from '../fleet-panel.ts';
3
- import { createFleetReadModel } from '../fleet-read-model.ts';
4
3
  import { FleetActs, type FleetDiffSurface } from '../fleet-acts.ts';
5
4
  import { createFleetGateway } from '../fleet-gateway.ts';
6
5
  import { FleetSpawn, createAcpSpawnGateway } from '../fleet-spawn.ts';
@@ -40,13 +39,12 @@ import { GOODVIBES_TUI_SURFACE_ROOT } from '../../config/surface.ts';
40
39
  export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
41
40
  const ui = requireUiServices(deps);
42
41
 
43
- // Fleet — the live unified process tree, read from the single
44
- // process registry constructed once in runtime/services.ts (shared with
45
- // every other consumer rather than duplicated here; the registry owns its
46
- // own coalesced tick, so no manual lifecycle-event wiring is needed).
47
- // runtimeBus is also passed so the read model can subscribe
48
- // to the honest COMMUNICATION_CONSUMED steer-ack signal (fleet-read-model.ts).
49
- const fleetReadModel = createFleetReadModel(ui.runtime.processRegistry, ui.runtime.runtimeBus);
42
+ // Fleet — everything running, not just what this terminal started. The read
43
+ // model is composed once in runtime/services.ts (so its refresh timer has an
44
+ // owner that stops it) and unions this surface's own live process registry
45
+ // with the adopted daemon's rows; see runtime/client/fleet-union.ts for who
46
+ // wins on a shared id and why the daemon half is polled rather than streamed.
47
+ const fleetReadModel = ui.runtime.fleetReadModel;
50
48
 
51
49
  // The Fleet panel's waiting-on-human acts (pick / conflict / discard) drive
52
50
  // gateway verbs over the same operator invoke path the command layer uses, and
@@ -1,5 +1,6 @@
1
1
  import type { PanelManager } from '../panel-manager.ts';
2
2
  import { TokenBudgetPanel } from '../token-budget-panel.ts';
3
+ import { HostedSessionPanel } from '../hosted-session-panel.ts';
3
4
  import type { ResolvedBuiltinPanelDeps } from './shared.ts';
4
5
  import { requireUiServices } from './shared.ts';
5
6
 
@@ -58,6 +59,22 @@ export function registerSessionPanels(manager: PanelManager, deps: ResolvedBuilt
58
59
  },
59
60
  });
60
61
 
62
+ // Hosted Session — a conversation whose loop runs INSIDE the daemon rather
63
+ // than in this process, rendered from the same `turn`/`tools` event domains a
64
+ // local turn emits (see panels/hosted-session-feed.ts). Not preloaded: a
65
+ // terminal that never opts into hosting should not carry an empty tab for it,
66
+ // and `/hosted new`/`/hosted attach` open it on the way in.
67
+ manager.registerType({
68
+ id: 'hosted',
69
+ name: 'Hosted Session',
70
+ // '◈' verified free against the registered builtin panel icons.
71
+ icon: '◈',
72
+ category: 'session',
73
+ description: 'A daemon-hosted conversation: its live transcript, the tool calls it is running, and what detaching would do to it',
74
+ retainOnClose: true,
75
+ factory: () => new HostedSessionPanel(),
76
+ });
77
+
61
78
  // compat: the retired 'context' panel id still resolves — redirected
62
79
  // to the merged tokens console ('/panel open context', saved layouts).
63
80
  manager.registerAlias('context', 'tokens');
@@ -2,7 +2,7 @@ import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
2
2
  import type { ServiceRegistry } from '@pellux/goodvibes-sdk/platform/config';
3
3
  import type { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools';
4
4
  import type { ProviderRegistry } from '@pellux/goodvibes-sdk/platform/providers';
5
- import type { Orchestrator } from '../../core/orchestrator';
5
+ import type { Orchestrator } from '@pellux/goodvibes-sdk/platform/core';
6
6
  import type { MemoryAccess } from '@pellux/goodvibes-sdk/platform/runtime/memory-spine';
7
7
  import type { ApprovalBroker } from '@pellux/goodvibes-sdk/platform/control-plane';
8
8
  import type { SessionReadFacade } from '@pellux/goodvibes-sdk/platform/runtime/session-spine';
@@ -23,7 +23,7 @@ import type { ExecutionPlanManager } from '@pellux/goodvibes-sdk/platform/core';
23
23
  import type { AdaptivePlanner } from '@pellux/goodvibes-sdk/platform/core';
24
24
  import type { ProjectPlanningService } from '@pellux/goodvibes-sdk/platform/knowledge';
25
25
  import type { ApiTokenAuditor } from '@pellux/goodvibes-sdk/platform/security';
26
- import type { ComponentHealthMonitor } from '../../runtime/perf/panel-health-monitor.ts';
26
+ import type { ComponentHealthMonitor } from '@pellux/goodvibes-sdk/platform/runtime/observability';
27
27
  import type { WorktreeRegistry } from '@/runtime/index.ts';
28
28
  import type { SandboxSessionRegistry } from '@/runtime/index.ts';
29
29
  import type { OpsApi, PlanRuntimeService } from '@/runtime/index.ts';
@@ -31,7 +31,7 @@ import type { WatcherRegistry } from '@pellux/goodvibes-sdk/platform/watchers';
31
31
  import type { RuntimeStore } from '../../runtime/store/index.ts';
32
32
  import type { KnowledgeApi } from '@pellux/goodvibes-sdk/platform/knowledge';
33
33
  import type { SessionChangeTracker } from '@pellux/goodvibes-sdk/platform/sessions';
34
- import type { Line } from '../../types/grid.ts';
34
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
35
35
  import type { Panel, PanelCategory } from '../types.ts';
36
36
  import { BasePanel } from '../base-panel.ts';
37
37
  import { buildEmptyState, buildPanelWorkspace, DEFAULT_PANEL_PALETTE } from '../polish.ts';
@@ -120,7 +120,7 @@ export interface BuiltinPanelDeps {
120
120
  /** Stable workspace project id for project:<projectId> planning spaces. */
121
121
  projectPlanningProjectId?: string;
122
122
  /** TUI-owned persistent work plan store. */
123
- workPlanStore?: import('../../work-plans/work-plan-store.ts').WorkPlanStore;
123
+ workPlanStore?: import('@pellux/goodvibes-sdk/platform/workflow').WorkPlanStore;
124
124
  /** Explicit UI-facing runtime services for agent/process/WRFC/remote panels and modals. */
125
125
  uiServices?: UiRuntimeServices;
126
126
  /** Shared plugin manager for plugin and security panels (widened past the read-only observer surface — — so PluginsPanel can drive enable/disable/verify/lift-quarantine). */
@@ -189,7 +189,7 @@ export type ResolvedBuiltinPanelDeps = Omit<
189
189
  readonly adaptivePlanner: AdaptivePlanner;
190
190
  readonly projectPlanningService: ProjectPlanningService;
191
191
  readonly projectPlanningProjectId: string;
192
- readonly workPlanStore: import('../../work-plans/work-plan-store.ts').WorkPlanStore;
192
+ readonly workPlanStore: import('@pellux/goodvibes-sdk/platform/workflow').WorkPlanStore;
193
193
  readonly policyRuntimeState: PolicyRuntimeState;
194
194
  };
195
195
 
@@ -1,11 +1,11 @@
1
1
  import type { PanelManager } from './panel-manager.ts';
2
2
  import { requireUiServices, type ResolvedBuiltinPanelDeps } from './builtin/shared.ts';
3
3
  import type { ConfigModalSurface, ConfigModalView } from '../input/config-modal-types.ts';
4
- import { createProviderRuntimeInspectionQuery } from '../runtime/ui-service-queries.ts';
4
+ import { createProviderRuntimeInspectionQuery } from '@/runtime/index.ts';
5
5
  import { createRuntimeProviderApi } from '@/runtime/index.ts';
6
6
  import { copyToClipboard } from '../utils/clipboard.ts';
7
- import { ensurePublicBaseUrl } from '../core/pairing-origin.ts';
8
- import { availablePairingOffers, mintPairingHandoff, defaultPairingTokenName } from '../core/pairing-handoff.ts';
7
+ import { ensurePublicBaseUrl } from '@pellux/goodvibes-sdk/platform/pairing';
8
+ import { availablePairingOffers, mintPairingHandoff, defaultPairingTokenName } from '@pellux/goodvibes-sdk/platform/pairing';
9
9
  import { probePairingTailscale, runPairingTailscaleServe } from '../core/pairing-tailscale-gateway.ts';
10
10
  // ── Providers & Connectivity + Security subset ────────────────────────────────
11
11
  import { createServicesModalSurface } from './modals/services-modal.ts';
@@ -19,7 +19,7 @@
19
19
  // do not implement a bespoke two-press or Enter-only variant.
20
20
  // ---------------------------------------------------------------------------
21
21
 
22
- import type { Line } from '../types/grid.ts';
22
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
23
23
  import { buildPanelLine } from './polish.ts';
24
24
  import { DEFAULT_PANEL_PALETTE } from './polish.ts';
25
25
 
@@ -2,12 +2,12 @@
2
2
  // CostTrackerPanel — per-session / per-agent / per-plan cost estimates
3
3
  // ---------------------------------------------------------------------------
4
4
 
5
- import type { Line } from '../types/grid.ts';
6
- import { createStyledCell, createEmptyLine } from '../types/grid.ts';
5
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
6
+ import { createStyledCell, createEmptyLine } from '@pellux/goodvibes-sdk/platform/types';
7
7
  import { fitDisplay, truncateDisplay } from '../utils/terminal-width.ts';
8
8
  import { BasePanel } from './base-panel.ts';
9
9
  import type { AgentEvent, TurnEvent } from '@/runtime/index.ts';
10
- import type { UiEventFeed } from '../runtime/ui-events.ts';
10
+ import type { UiEventFeed } from '@/runtime/index.ts';
11
11
  import type { AgentRecord } from '@pellux/goodvibes-sdk/platform/tools';
12
12
  import {
13
13
  buildEmptyState,
@@ -22,7 +22,7 @@ import {
22
22
  DEFAULT_PANEL_PALETTE,
23
23
  type PanelWorkspaceSection,
24
24
  } from './polish.ts';
25
- import { calcSessionCost, describePricingSource, isModelPriced, computeBudgetBreach, readBudgetAlertUsd, writeManualModelPrice, BUDGET_ALERT_USD_CONFIG_KEY, type BudgetAlertConfigAccess } from '../export/cost-utils.ts';
25
+ import { calcSessionCost, describePricingSource, isModelPriced, computeBudgetBreach, readBudgetAlertUsd, writeManualModelPrice, BUDGET_ALERT_USD_CONFIG_KEY, type BudgetAlertConfigAccess } from '@pellux/goodvibes-sdk/platform/providers';
26
26
  import { abbreviateCount } from '../utils/format-number.ts';
27
27
  import { isTextBackspace } from '../input/delete-key-policy.ts';
28
28
 
@@ -2,8 +2,8 @@
2
2
  // DiffPanel — unified diff view of agent file changes
3
3
  // ---------------------------------------------------------------------------
4
4
 
5
- import type { Line } from '../types/grid.ts';
6
- import { createStyledCell, createEmptyLine } from '../types/grid.ts';
5
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
6
+ import { createStyledCell, createEmptyLine } from '@pellux/goodvibes-sdk/platform/types';
7
7
  import { truncateDisplay, getDisplayWidth } from '../utils/terminal-width.ts';
8
8
  import { GitService, type StructuredDiff, type StructuredDiffFile } from '@pellux/goodvibes-sdk/platform/git';
9
9
  import { BasePanel } from './base-panel.ts';
@@ -13,8 +13,8 @@
13
13
  // snapshot. The panel never presents a stale diff as current.
14
14
  // ---------------------------------------------------------------------------
15
15
 
16
- import type { Line } from '../types/grid.ts';
17
- import { createEmptyLine } from '../types/grid.ts';
16
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
17
+ import { createEmptyLine } from '@pellux/goodvibes-sdk/platform/types';
18
18
  import { truncateDisplay } from '../utils/terminal-width.ts';
19
19
  import { GitService } from '@pellux/goodvibes-sdk/platform/git';
20
20
  import { BasePanel } from './base-panel.ts';
@@ -1,5 +1,5 @@
1
- import type { Line } from '../types/grid.ts';
2
- import { createEmptyLine } from '../types/grid.ts';
1
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
2
+ import { createEmptyLine } from '@pellux/goodvibes-sdk/platform/types';
3
3
  import { ScrollableListPanel } from './scrollable-list-panel.ts';
4
4
  import {
5
5
  buildKeyboardHints,
@@ -25,7 +25,7 @@
25
25
  import type { ProcessNode } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
26
26
  import type { WorkItem } from '@pellux/goodvibes-sdk/platform/orchestration';
27
27
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
28
- import type { Line } from '../types/grid.ts';
28
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
29
29
  import { isPanelSearchBackspace, isPanelSearchCancel, isPanelSearchCommit, isPanelSearchPrintable } from './search-focus.ts';
30
30
  import { appendSteerText } from './fleet-tabs.ts';
31
31
  import { isObservedExternalNode, observedKindLabel, type ObservedNode } from './fleet-observed-render.ts';
@@ -14,7 +14,7 @@
14
14
  // ---------------------------------------------------------------------------
15
15
 
16
16
  import type { ProcessNode, ProcessObserved, ObservedAgentKind } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
17
- import type { Line } from '../types/grid.ts';
17
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
18
18
  import { buildPanelLine, buildSearchInputLine, DEFAULT_PANEL_PALETTE, type PanelPalette } from './polish.ts';
19
19
  import { truncateDisplay, wrapText } from '../utils/terminal-width.ts';
20
20
 
@@ -8,7 +8,7 @@
8
8
  // ---------------------------------------------------------------------------
9
9
 
10
10
  import type { ProcessCostState, ProcessNode, ProcessReviewSummary, ProcessUsage } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
11
- import type { Line } from '../types/grid.ts';
11
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
12
12
  import { formatAgentCost } from './agent-inspector-shared.ts';
13
13
  import { buildPanelLine, DEFAULT_PANEL_PALETTE, type ColumnSpec, type PanelPalette } from './polish.ts';
14
14
  import { fleetAttentionText, fleetNodeAttention, fleetStallMarker, fleetUsageTokens, hasFleetCost, type FleetStateTone } from './fleet-read-model.ts';
@@ -12,7 +12,7 @@
12
12
  // ---------------------------------------------------------------------------
13
13
 
14
14
  import { readFile } from 'node:fs/promises';
15
- import type { Line } from '../types/grid.ts';
15
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
16
16
  import type { SteerResult } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
17
17
  import type { ConversationMessageSnapshot } from '@pellux/goodvibes-sdk/platform/core';
18
18
  import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
@@ -22,7 +22,7 @@
22
22
  import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
23
23
  import type { OperatorMethodOutput } from '@pellux/goodvibes-sdk';
24
24
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
25
- import type { Line } from '../types/grid.ts';
25
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
26
26
  import { resolveOperatorRpc } from '../input/commands/operator-rpc.ts';
27
27
  import {
28
28
  buildKeyboardHints,
@@ -13,7 +13,7 @@ import { STEER_TTL_MS, type ProcessNode } from '@pellux/goodvibes-sdk/platform/r
13
13
  import { isTerminalProcessState } from './fleet-read-model.ts';
14
14
  import type { FleetTab, SteerBadge, SteerBadgeStatus } from './fleet-tabs.ts';
15
15
  import { buildPanelLine, DEFAULT_PANEL_PALETTE, type PanelPalette } from './polish.ts';
16
- import type { Line } from '../types/grid.ts';
16
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
17
17
 
18
18
  /** Linger before an auto-resolved (consumed/dropped) steer badge is cleared from the tab. */
19
19
  export const STEER_BADGE_LINGER_MS = 4_000;
@@ -29,7 +29,7 @@
29
29
 
30
30
  import type { ConversationMessageSnapshot } from '@pellux/goodvibes-sdk/platform/core';
31
31
  import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
32
- import { createEmptyLine, type Line } from '../types/grid.ts';
32
+ import { createEmptyLine, type Line } from '@pellux/goodvibes-sdk/platform/types';
33
33
  import type { MessageLineCache } from '../core/conversation-line-cache.ts';
34
34
  import type { ConversationRenderContext } from '../core/conversation-rendering.ts';
35
35
  import { renderConversationEventLine, renderConversationNotice } from '../renderer/conversation-surface.ts';
@@ -1,5 +1,5 @@
1
1
  import { BasePanel } from './base-panel.ts';
2
- import { createEmptyLine, createStyledCell, type Line } from '../types/grid.ts';
2
+ import { createEmptyLine, createStyledCell, type Line } from '@pellux/goodvibes-sdk/platform/types';
3
3
  import { truncateDisplay, getDisplayWidth } from '../utils/terminal-width.ts';
4
4
  import { GitService } from '@pellux/goodvibes-sdk/platform/git';
5
5
  import { logger } from '@pellux/goodvibes-sdk/platform/utils';