@pellux/goodvibes-tui 1.27.1 → 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 (405) hide show
  1. package/CHANGELOG.md +116 -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 +3 -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 +4 -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 -693
  288. package/src/daemon/fatal-boot-report.ts +0 -111
  289. package/src/daemon/handlers/context.ts +0 -29
  290. package/src/daemon/handlers/contracts.ts +0 -77
  291. package/src/daemon/handlers/credentials.ts +0 -139
  292. package/src/daemon/handlers/drafts/draft-store.ts +0 -427
  293. package/src/daemon/handlers/drafts/index.ts +0 -17
  294. package/src/daemon/handlers/drafts/register.ts +0 -331
  295. package/src/daemon/handlers/errors.ts +0 -18
  296. package/src/daemon/handlers/inbox/cursor-store.ts +0 -457
  297. package/src/daemon/handlers/inbox/index.ts +0 -284
  298. package/src/daemon/handlers/inbox/mapping.ts +0 -192
  299. package/src/daemon/handlers/inbox/poller.ts +0 -212
  300. package/src/daemon/handlers/inbox/provider-adapter.ts +0 -156
  301. package/src/daemon/handlers/inbox/providers/discord.ts +0 -252
  302. package/src/daemon/handlers/inbox/providers/email.ts +0 -152
  303. package/src/daemon/handlers/inbox/providers/imap-client.ts +0 -300
  304. package/src/daemon/handlers/inbox/providers/route-util.ts +0 -24
  305. package/src/daemon/handlers/inbox/providers/slack.ts +0 -263
  306. package/src/daemon/handlers/index.ts +0 -117
  307. package/src/daemon/handlers/register.ts +0 -168
  308. package/src/daemon/handlers/remote/backends/cloud-terminal.ts +0 -142
  309. package/src/daemon/handlers/remote/backends/docker.ts +0 -79
  310. package/src/daemon/handlers/remote/backends/index.ts +0 -40
  311. package/src/daemon/handlers/remote/backends/local-process.ts +0 -113
  312. package/src/daemon/handlers/remote/backends/process-runner.ts +0 -127
  313. package/src/daemon/handlers/remote/backends/ssh.ts +0 -125
  314. package/src/daemon/handlers/remote/backends/types.ts +0 -97
  315. package/src/daemon/handlers/remote/dispatcher.ts +0 -181
  316. package/src/daemon/handlers/remote/index.ts +0 -119
  317. package/src/daemon/handlers/remote/peer-registry.ts +0 -357
  318. package/src/daemon/handlers/remote/service.ts +0 -191
  319. package/src/daemon/handlers/routing/inbox-bridge.ts +0 -71
  320. package/src/daemon/handlers/routing/index.ts +0 -261
  321. package/src/daemon/handlers/routing/route-store.ts +0 -319
  322. package/src/daemon/handlers/routing/routing-resolver.ts +0 -75
  323. package/src/daemon/handlers/sqlite-store.ts +0 -278
  324. package/src/daemon/handlers/triage/index.ts +0 -57
  325. package/src/daemon/handlers/triage/integration.ts +0 -213
  326. package/src/daemon/handlers/triage/pipeline.ts +0 -274
  327. package/src/daemon/handlers/triage/scorer.ts +0 -287
  328. package/src/daemon/handlers/triage/tagger/discord.ts +0 -187
  329. package/src/daemon/handlers/triage/tagger/imap.ts +0 -384
  330. package/src/daemon/handlers/triage/tagger/index.ts +0 -184
  331. package/src/daemon/handlers/triage/tagger/shared.ts +0 -70
  332. package/src/daemon/handlers/triage/tagger/slack.ts +0 -69
  333. package/src/daemon/handlers/triage/types.ts +0 -50
  334. package/src/daemon/lifecycle.ts +0 -41
  335. package/src/daemon/provision-wake-model.ts +0 -81
  336. package/src/daemon/safe-serve.ts +0 -61
  337. package/src/daemon/send/channels.ts +0 -200
  338. package/src/daemon/send/command.ts +0 -332
  339. package/src/daemon/send/composition.ts +0 -99
  340. package/src/daemon/send/failure-text.ts +0 -93
  341. package/src/daemon/send/inert-text.ts +0 -225
  342. package/src/daemon/send/stdin.ts +0 -24
  343. package/src/daemon/service-commands.ts +0 -329
  344. package/src/export/cost-utils.ts +0 -319
  345. package/src/input/selection.ts +0 -135
  346. package/src/plugins/loader.ts +0 -15
  347. package/src/renderer/bottom-bar.ts +0 -58
  348. package/src/renderer/conversation-tree.ts +0 -228
  349. package/src/runtime/agent-graph-composition.ts +0 -78
  350. package/src/runtime/channel-composition.ts +0 -46
  351. package/src/runtime/cluster-composition.ts +0 -124
  352. package/src/runtime/cluster-group-composition.ts +0 -284
  353. package/src/runtime/code-index-services.ts +0 -167
  354. package/src/runtime/daemon-handler-composition.ts +0 -76
  355. package/src/runtime/device-posture-composition.ts +0 -110
  356. package/src/runtime/durability-housekeeping.ts +0 -183
  357. package/src/runtime/durability-services.ts +0 -155
  358. package/src/runtime/embedded-service-factories.ts +0 -74
  359. package/src/runtime/feature-settings.ts +0 -154
  360. package/src/runtime/fleet-needs-input-push.ts +0 -70
  361. package/src/runtime/fleet-services.ts +0 -41
  362. package/src/runtime/idle-power-services.ts +0 -85
  363. package/src/runtime/mail-composition.ts +0 -65
  364. package/src/runtime/memory-fold.ts +0 -55
  365. package/src/runtime/operator-token-cleanup.ts +0 -109
  366. package/src/runtime/path-shadow.ts +0 -418
  367. package/src/runtime/perf/panel-health-monitor.ts +0 -18
  368. package/src/runtime/provider-optimizer-wiring.ts +0 -55
  369. package/src/runtime/reachability-notice.ts +0 -100
  370. package/src/runtime/remote-execution-composition.ts +0 -62
  371. package/src/runtime/session-liveness-marker.ts +0 -257
  372. package/src/runtime/session-pointer-surface.ts +0 -22
  373. package/src/runtime/session-storage-services.ts +0 -41
  374. package/src/runtime/surface-feature-flags.ts +0 -96
  375. package/src/runtime/terminal-output-guard.ts +0 -235
  376. package/src/runtime/trust/workspace-registration.ts +0 -192
  377. package/src/runtime/trust/workspace-trust.ts +0 -229
  378. package/src/runtime/ui/index.ts +0 -39
  379. package/src/runtime/ui/model-picker/data-provider.ts +0 -182
  380. package/src/runtime/ui/model-picker/health-enrichment.ts +0 -231
  381. package/src/runtime/ui/model-picker/index.ts +0 -59
  382. package/src/runtime/ui/model-picker/types.ts +0 -153
  383. package/src/runtime/ui/provider-health/data-provider.ts +0 -244
  384. package/src/runtime/ui/provider-health/fallback-visualizer.ts +0 -71
  385. package/src/runtime/ui/provider-health/index.ts +0 -46
  386. package/src/runtime/ui/provider-health/types.ts +0 -146
  387. package/src/runtime/ui-events.ts +0 -1
  388. package/src/runtime/ui-read-model-helpers.ts +0 -1
  389. package/src/runtime/ui-read-models-observability-maintenance.ts +0 -1
  390. package/src/runtime/ui-read-models-observability-options.ts +0 -1
  391. package/src/runtime/ui-read-models-observability-remote.ts +0 -1
  392. package/src/runtime/ui-read-models-observability-security.ts +0 -1
  393. package/src/runtime/ui-read-models-observability-system.ts +0 -1
  394. package/src/runtime/ui-read-models-observability.ts +0 -1
  395. package/src/runtime/ui-service-queries.ts +0 -1
  396. package/src/runtime/voice-setup-services.ts +0 -98
  397. package/src/runtime/workstream-attempts-validation.ts +0 -77
  398. package/src/runtime/workstream-draft-edits.ts +0 -95
  399. package/src/runtime/workstream-draft-store.ts +0 -274
  400. package/src/runtime/workstream-draft-types.ts +0 -42
  401. package/src/runtime/workstream-services.ts +0 -373
  402. package/src/tools/index.ts +0 -1
  403. package/src/types/grid.ts +0 -48
  404. package/src/types/sql-js.d.ts +0 -15
  405. package/src/work-plans/work-plan-store.ts +0 -702
@@ -87,6 +87,7 @@ export const CATEGORY_INFO: Record<SettingsCategory, string> = {
87
87
  automation: 'Scheduled and automated run settings, concurrency, timeout, catch-up, cooldown, and retention behavior.',
88
88
  checkin: 'Proactive check-in: on a cadence, a briefing is judged and you are contacted only when something warrants it. Off by default; every run — scheduled or manual — leaves a receipt (see /checkin) recording whether it stayed quiet, delivered a message, or was skipped.',
89
89
  occasions: 'Proactive occasions and plans: dated, usually-recurring things that need an action (birthdays, anniversaries) and dated ranges that need only to be known about (a vacation). On by default. Lead time before a date, active hours nudges are allowed to arrive in, the nudge channel (empty makes it pull-only through /occasions), cadence while a window is open and the daily final stretch before it closes, whether an away plan moves a nudge earlier, whether a confirmed occasion mirrors to the calendar and whether a mirrored one suppresses its own nudge, how many questions the gift interview asks, how many years of gift history it keeps, and how often the sweep pass runs. The nudge itself never names the date — only how soon.',
90
+ hostedSessions: 'Sessions whose conversation loop runs INSIDE the daemon instead of this terminal, so the work does not end when the window that started it closes. What happens when the last client leaves is the detach policy: the shipped default is `kill` — exactly what closing a client has always done — and `survive` is the opt-in that leaves the session idle and reattachable. A session created with /hosted new --survive or --kill overrides the setting for itself. The remaining rows bound the capability: how many hosted sessions may run at once, how many messages one keeps, and how long a terminated session\'s record (with the reason it ended) is retained before it is retired.',
90
91
  watchers: 'File/process watcher heartbeat, polling, and recovery-window behavior, plus the trigger family (watchers.triggers.*, rendered as its own unit): stream watchers that regex-filter and batch a long-lived command\'s output, model-free condition checks running a probe/extract/rule pipeline with no LLM in the loop, and one-shot on-exit triggers that fire exactly one payload when a launched command terminates. The trigger family is off by default — a trigger supervises real processes with nobody watching — and its rows tune the backoff ladder, the strike breaker, retention bounds, batching, and process caps.',
91
92
  runtime: 'Runtime guardrails such as companion chat limiter and event bus listener caps.',
92
93
  telemetry: 'Telemetry payload policy.',
@@ -143,6 +144,7 @@ export const CATEGORY_LABELS: Record<(typeof SETTINGS_CATEGORIES)[number], strin
143
144
  automation: 'Automation',
144
145
  checkin: 'Check-in',
145
146
  occasions: 'Occasions & Plans',
147
+ hostedSessions: 'Hosted Sessions',
146
148
  watchers: 'Watchers',
147
149
  runtime: 'Runtime',
148
150
  telemetry: 'Telemetry',
@@ -5,10 +5,10 @@
5
5
  * roomy workspace with contextual documentation, not a cramped modal list.
6
6
  */
7
7
 
8
- import type { Line } from '../types/grid.ts';
8
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
9
9
  import type { SettingsModal, SettingEntry, McpEntry, SubscriptionEntry, SettingsCategory } from '../input/settings-modal.ts';
10
10
  import { SETTINGS_CATEGORIES, SETTINGS_CATEGORY_GROUPS } from '../input/settings-modal.ts';
11
- import { FEATURE_SETTINGS_BY_ID, isFeatureValueEnabled } from '../runtime/feature-settings.ts';
11
+ import { FEATURE_SETTINGS_BY_ID, isFeatureValueEnabled } from '@pellux/goodvibes-terminal-shell';
12
12
  import { getDisplayWidth, wrapText } from '../utils/terminal-width.ts';
13
13
  import { CATEGORY_INFO, CATEGORY_LABELS, describeUiRouting, formatValue, getSettingLabel, inferSubscriptionRouteReason, valueColor } from './settings-modal-helpers.ts';
14
14
  import { buildConnectionContext, renderConnectionRows } from './settings-modal-connections.ts';
@@ -1,4 +1,4 @@
1
- import type { Line } from '../types/grid.ts';
1
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import { renderProcessIndicator, renderVoiceCaptureIndicator } from './process-indicator.ts';
3
3
  import { UIFactory } from './ui-factory.ts';
4
4
  import { voiceCaptureRowVisible, type VoiceCaptureIndicatorState } from '../core/voice-capture-status.ts';
@@ -78,7 +78,7 @@ export interface ShellFooterBuildOptions {
78
78
  /**
79
79
  * Cross-surface session-spine posture for the context-info segment.
80
80
  * Set ONLY in adopted-daemon mode ('online'/'offline'); left undefined in
81
- * embedded/local mode so no segment renders.
81
+ * local-only mode so no segment renders.
82
82
  */
83
83
  readonly sessionSpineStatus?: 'online' | 'offline';
84
84
  /** The web surface's reachable URL, when that surface is enabled; a persistent footer segment. */
@@ -1,4 +1,4 @@
1
- import { type Line } from '../types/grid.ts';
1
+ import { type Line } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import { BORDERS } from './layout.ts';
3
3
  import { renderConversationNotice } from './conversation-surface.ts';
4
4
  import { activeUiTones } from './theme.ts';
@@ -1,4 +1,4 @@
1
- import type { Line } from '../types/grid.ts';
1
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import { getDisplayWidth } from '../utils/terminal-width.ts';
3
3
  import { buildStyledPanelLine, type StyledPanelSegment } from '../panels/polish.ts';
4
4
 
@@ -8,7 +8,7 @@
8
8
  * DEFAULT_CONFIG, and adding an `appearance` section would require an SDK schema
9
9
  * change (out of scope for this TUI-only work order). Storing under `display`
10
10
  * reuses the same proven "TUI-local synthetic setting" pattern the codebase
11
- * already uses for tts.speed / behavior.notifyAfterSeconds / storage.codeIndexEnabled:
11
+ * already uses for behavior.notifyAfterSeconds / storage.codeIndexEnabled:
12
12
  * ConfigManager.setDynamic writes it to settings.json and get() reads it back,
13
13
  * with zero SDK changes.
14
14
  *
@@ -5,11 +5,11 @@
5
5
  * conversation-rendering pipeline, resolved to concrete hex or ANSI-256 values
6
6
  * per background mode.
7
7
  *
8
- * Dark mode values are the historically used colours.
9
- * Light mode values are defined now for correctness parity; they are consumed
10
- * when background-detection (terminal-bg-probe) lands and passes the
11
- * resolved mode down. Callers that do not yet have mode detection MUST call
12
- * resolveTheme('dark') as the safe default.
8
+ * Dark mode values are the historically used colours. Light mode values are
9
+ * consumed when the terminal-background probe (terminal-bg-probe.ts) resolves a
10
+ * light background under `display.themeMode: auto`, or when the owner forces
11
+ * light. A caller with no mode of its own passes 'dark', the safe default for a
12
+ * terminal whose background is unknown.
13
13
  *
14
14
  * IMPORTANT: inline code has NO background token. The bg:#1a1a1a hardcode
15
15
  * that previously existed caused a near-black box on light terminals.
@@ -20,14 +20,13 @@
20
20
  * status colours). It composes the same ThemeMode dimension so that
21
21
  * DEFAULT_PANEL_PALETTE, DEFAULT_STYLE, FULLSCREEN_PALETTE and
22
22
  * DEFAULT_OVERLAY_PALETTE all read through ONE mode-resolved path instead of
23
- * importing the static UI_TONES constant directly. Mode stays 'dark'
24
- * everywhere until the terminal-bg-probe lands (see) — the light
25
- * entry is type-complete, not a shipped light theme.
23
+ * importing the static UI_TONES constant directly, so one mode flip reaches
24
+ * every one of them.
26
25
  */
27
26
 
28
27
  import { UI_TONES } from './ui-primitives.ts';
29
28
 
30
- /** Background mode — dark is the safe default until terminal-bg-probe lands. */
29
+ /** Background mode — dark is the safe default for an unprobed terminal. */
31
30
  export type ThemeMode = 'dark' | 'light';
32
31
 
33
32
  /** Resolved semantic colour tokens (concrete hex strings or ANSI-256 indices). */
@@ -150,8 +149,8 @@ const LIGHT: ThemeTokens = {
150
149
  /**
151
150
  * resolveTheme — Return the semantic token set for the given background mode.
152
151
  *
153
- * Call with 'dark' (the safe default) until terminal-bg-probe lands.
154
- * The returned object is frozen; callers should not mutate it.
152
+ * Call with the session's resolved mode; 'dark' is the safe default for a
153
+ * caller that has none. The returned object is frozen — do not mutate it.
155
154
  */
156
155
  export function resolveTheme(mode: ThemeMode): Readonly<ThemeTokens> {
157
156
  return mode === 'light' ? LIGHT : DARK;
@@ -242,7 +241,7 @@ export function resolveUiTones(mode: ThemeMode): Readonly<UiToneTokens> {
242
241
  }
243
242
 
244
243
  // ===========================================================================
245
- // Active-mode runtime (terminal-bg-probe landing).
244
+ // Active-mode runtime.
246
245
  //
247
246
  // The mode is decided ONCE at startup — from appearance config (display.themeMode
248
247
  // forced dark/light) or the terminal-background probe (auto) — and is then stable
@@ -1,4 +1,4 @@
1
- import { type Line } from '../types/grid.ts';
1
+ import { type Line } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import { BORDERS } from './layout.ts';
3
3
  import { renderConversationNotice } from './conversation-surface.ts';
4
4
  import { activeUiTones } from './theme.ts';
@@ -1,4 +1,4 @@
1
- import { type Line, createStyledCell, createEmptyLine } from '../types/grid.ts';
1
+ import { type Line, createStyledCell, createEmptyLine } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import { LAYOUT, TOOL_STATUS } from './layout.ts';
3
3
  import { getDisplayWidth, truncateDisplay } from '../utils/terminal-width.ts';
4
4
  import type { ToolCall } from '@pellux/goodvibes-sdk/platform/types';
@@ -6,7 +6,7 @@ import { stripDangerousAnsi } from './ansi-sanitize.ts';
6
6
  import { formatElapsed } from '../utils/format-elapsed.ts';
7
7
  import { GLYPHS } from './ui-primitives.ts';
8
8
  import { activeUiTones } from './theme.ts';
9
- import { treeContentCol, treeTextCol, writeTreeStatusMarker } from './conversation-tree.ts';
9
+ import { treeContentCol, treeTextCol, writeTreeStatusMarker } from '@pellux/goodvibes-terminal-shell';
10
10
 
11
11
  const TOOL_NAME_MIN_WIDTH = 8;
12
12
  const TOOL_NAME_MAX_WIDTH = 20;
@@ -11,7 +11,7 @@
11
11
  * each other and both can disagree with what Tab actually reveals.
12
12
  */
13
13
 
14
- import type { Line } from '../types/grid.ts';
14
+ import type { Line } from '@pellux/goodvibes-sdk/platform/types';
15
15
  import { renderMarkdownTracked } from './markdown.ts';
16
16
  import { renderDiffView } from './diff-view.ts';
17
17
 
@@ -7,11 +7,10 @@
7
7
  * ring, default 20 entries) and appends the same record to the agent's
8
8
  * session transcript as `{type:'knowledge_injection', turn, ...record}`.
9
9
  *
10
- * `TurnInjectionRecord` itself is not re-exported from the SDK's
11
- * `platform/agents` barrel (only `AgentRecord.turnInjections` carries its
12
- * structural shape through the already-public `platform/tools` barrel), so
13
- * the entry type here is DERIVED from `AgentRecord` rather than imported by
14
- * name — this needs no SDK export change.
10
+ * `TurnInjectionRecord` was reachable only as the element type of
11
+ * `AgentRecord.turnInjections`, so the entry type here was derived positionally
12
+ * from that array rather than named. The `platform/agents` barrel exports the
13
+ * record type now, and this names it.
15
14
  *
16
15
  * Reality check (since updated): the TUI's main interactive
17
16
  * session DOES route through this engine. The SDK `Orchestrator` runs per-turn
@@ -24,10 +23,10 @@
24
23
  * record onto their own `AgentRecord.turnInjections`, rendered per-agent by
25
24
  * `buildTurnInjectionsText` when an explicit agent id is given.
26
25
  */
27
- import type { AgentRecord } from '@pellux/goodvibes-sdk/platform/tools';
26
+ import type { TurnInjectionRecord } from '@pellux/goodvibes-sdk/platform/agents';
28
27
 
29
- /** One TurnInjectionRecord entry, derived from AgentRecord (see module doc). */
30
- export type TurnInjectionEntry = NonNullable<AgentRecord['turnInjections']>[number];
28
+ /** One per-turn injection record, under the name this renderer already used. */
29
+ export type TurnInjectionEntry = TurnInjectionRecord;
31
30
 
32
31
  function fmtN(n: number): string {
33
32
  return n.toLocaleString();
@@ -1,4 +1,4 @@
1
- import { type Line, type Cell, createEmptyLine, createEmptyCell } from '../types/grid.ts';
1
+ import { type Line, type Cell, createEmptyLine, createEmptyCell } from '@pellux/goodvibes-sdk/platform/types';
2
2
  import { LAYOUT } from './layout.ts';
3
3
  import { VERSION } from '../version.ts';
4
4
  import { fitDisplay, getDisplayWidth, truncateDisplay, wrapText, interpolateColor, joinPrioritizedSegments, type PrioritizedSegment } from '../utils/terminal-width.ts';
@@ -13,7 +13,7 @@ import { computeContextUsage } from '../core/context-usage.ts';
13
13
  import { permissionModeLabel, permissionModeTone } from '../core/permission-mode.ts';
14
14
  import { SLEEP_DISABLED_CHIP } from '../core/power-status.ts';
15
15
  import { renderQueuedMessageList, renderMemoryProvenanceChip, type MemoryProvenanceEntry } from './composer-fragments.ts';
16
- import { calcSessionCost, isModelPriced } from '../export/cost-utils.ts';
16
+ import { calcSessionCost, isModelPriced } from '@pellux/goodvibes-sdk/platform/providers';
17
17
  import { buildFooterTip, isAgentActive } from './footer-tips.ts';
18
18
  import type { StreamMetrics } from '../core/stream-event-wiring.ts';
19
19
  import { waitingPhrase, type WaitingState } from '@pellux/goodvibes-sdk/platform/presentation';
@@ -145,7 +145,7 @@ export class UIFactory {
145
145
  composerPendingRisk?: 'none' | 'approval-wait' | 'shell' | 'command' | 'remote',
146
146
  compact: boolean = false,
147
147
  // Honest cross-surface spine posture. Defined ONLY in adopted-daemon
148
- // mode (undefined in embedded/local), so the segment is absent otherwise.
148
+ // mode (undefined in local-only mode), so the segment is absent otherwise.
149
149
  sessionSpineStatus?: 'online' | 'offline',
150
150
  // Session permission mode (config value). Rendered as a leading pill in the
151
151
  // posture block; undefined suppresses the pill (e.g. bare test callers).
@@ -19,8 +19,8 @@ import type { PolicyRuntimeState } from '@/runtime/index.ts';
19
19
  import type { FileUndoManager } from '@pellux/goodvibes-sdk/platform/state';
20
20
  import type { WorkspaceCheckpointManager } from '@pellux/goodvibes-sdk/platform/workspace';
21
21
  import type { GatewayMethodCatalog } from '@pellux/goodvibes-sdk/platform/control-plane';
22
- import type { WorkspaceTrustManager } from './trust/workspace-trust.ts';
23
- import type { WorkspaceRegistrationManager } from './trust/workspace-registration.ts';
22
+ import type { WorkspaceTrustManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
23
+ import type { WorkspaceRegistrationManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
24
24
  import type { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp';
25
25
  import type { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
26
26
  import type { IntegrationHelperService } from '@/runtime/index.ts';
@@ -91,7 +91,7 @@ export type CreateBootstrapCommandContextOptions = {
91
91
  knowledgeService?: KnowledgeService;
92
92
  projectPlanningService?: import('@pellux/goodvibes-sdk/platform/knowledge').ProjectPlanningService;
93
93
  projectPlanningProjectId?: string;
94
- workPlanStore?: import('../work-plans/work-plan-store.ts').WorkPlanStore;
94
+ workPlanStore?: import('@pellux/goodvibes-sdk/platform/workflow').WorkPlanStore;
95
95
  providerOptimizer?: import('@pellux/goodvibes-sdk/platform/providers').ProviderOptimizer;
96
96
  pluginManager?: PluginManager;
97
97
  hookWorkbench?: HookWorkbench;
@@ -134,7 +134,7 @@ export type CreateBootstrapCommandContextOptions = {
134
134
  wrfcController?: import('@pellux/goodvibes-sdk/platform/agents').WrfcController;
135
135
  componentHealthMonitor: import('@/runtime/index.ts').ComponentHealthMonitor;
136
136
  hydrateSessionUsage?: () => void;
137
- workstreamEngine?: import('./workstream-services.ts').WorkstreamCommandService;
137
+ workstreamEngine?: import('@pellux/goodvibes-sdk/platform/orchestration').WorkstreamCommandService;
138
138
  codeIndexStore?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexStore;
139
139
  codeIndexReindexScheduler?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexReindexScheduler;
140
140
  isPassiveCodeInjectionFlagEnabled?: () => boolean;
@@ -1,4 +1,4 @@
1
- import { getConfigSnapshot } from '../config/index.ts';
1
+ import { getConfigSnapshot } from '@pellux/goodvibes-sdk/platform/config';
2
2
  import {
3
3
  describeServingEffort,
4
4
  publishActiveEffortOptions,
@@ -27,8 +27,8 @@ import type { PolicyRuntimeState } from '@/runtime/index.ts';
27
27
  import type { CodeIndexStore, FileUndoManager } from '@pellux/goodvibes-sdk/platform/state';
28
28
  import type { WorkspaceCheckpointManager } from '@pellux/goodvibes-sdk/platform/workspace';
29
29
  import type { GatewayMethodCatalog } from '@pellux/goodvibes-sdk/platform/control-plane';
30
- import type { WorkspaceTrustManager } from './trust/workspace-trust.ts';
31
- import type { WorkspaceRegistrationManager } from './trust/workspace-registration.ts';
30
+ import type { WorkspaceTrustManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
31
+ import type { WorkspaceRegistrationManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
32
32
  import type { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp';
33
33
  import type { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
34
34
  import type { IntegrationHelperService } from '@/runtime/index.ts';
@@ -113,7 +113,7 @@ export interface BootstrapCommandSectionOptions {
113
113
  readonly knowledgeService?: KnowledgeService;
114
114
  readonly projectPlanningService?: import('@pellux/goodvibes-sdk/platform/knowledge').ProjectPlanningService;
115
115
  readonly projectPlanningProjectId?: string;
116
- readonly workPlanStore?: import('../work-plans/work-plan-store.ts').WorkPlanStore;
116
+ readonly workPlanStore?: import('@pellux/goodvibes-sdk/platform/workflow').WorkPlanStore;
117
117
  readonly pluginManager?: PluginManager;
118
118
  readonly hookWorkbench?: HookWorkbench;
119
119
  readonly providerOptimizer?: import('@pellux/goodvibes-sdk/platform/providers').ProviderOptimizer;
@@ -134,7 +134,7 @@ export interface BootstrapCommandSectionOptions {
134
134
  readonly wrfcController?: import('@pellux/goodvibes-sdk/platform/agents').WrfcController;
135
135
  readonly changeTracker?: import('@pellux/goodvibes-sdk/platform/sessions').SessionChangeTracker;
136
136
  readonly hydrateSessionUsage?: () => void;
137
- readonly workstreamEngine?: import('./workstream-services.ts').WorkstreamCommandService;
137
+ readonly workstreamEngine?: import('@pellux/goodvibes-sdk/platform/orchestration').WorkstreamCommandService;
138
138
  readonly codeIndexStore?: CodeIndexStore;
139
139
  readonly codeIndexReindexScheduler?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexReindexScheduler;
140
140
  readonly isPassiveCodeInjectionFlagEnabled?: () => boolean;
@@ -1,9 +1,9 @@
1
1
  import { ConversationManager } from '../core/conversation';
2
2
  import { registerSessionConversation } from './conversation-rewind-port.ts';
3
- import { SelectionManager } from '../input/selection.ts';
3
+ import { SelectionManager } from '@pellux/goodvibes-terminal-shell';
4
4
  import { logger } from '@pellux/goodvibes-sdk/platform/utils';
5
- import { ConfigManager, getConfiguredSystemPrompt } from '../config/index.ts';
6
- import { getProviderIdFromModel } from '../config/provider-model.ts';
5
+ import { ConfigManager, getConfiguredSystemPrompt } from '@pellux/goodvibes-sdk/platform/config';
6
+ import { getProviderIdFromModel } from '@pellux/goodvibes-sdk/platform/providers';
7
7
  import { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools';
8
8
  import { registerAllTools } from '@pellux/goodvibes-sdk/platform/tools';
9
9
  import { createSandboxContainmentNotice } from './daemon-attach-notices.ts';
@@ -13,7 +13,7 @@ import { Compositor } from '../renderer/compositor.ts';
13
13
  import type { PermissionRequestHandler } from '@pellux/goodvibes-sdk/platform/permissions';
14
14
  import type { SystemMessageRouter } from '../core/system-message-router.ts';
15
15
  import type { ConversationFollowUpItem } from '@pellux/goodvibes-sdk/platform/core';
16
- import type { OrchestratorUserInputOptions } from '../core/orchestrator.ts';
16
+ import type { OrchestratorUserInputOptions } from '@pellux/goodvibes-sdk/platform/core';
17
17
  import type { ControlPlaneRecentEvent } from '@pellux/goodvibes-sdk/platform/control-plane';
18
18
  import type { BootstrapOptions } from './context.ts';
19
19
  import { createRuntimeStore, createDomainDispatch, type RuntimeStore } from './store/index.ts';
@@ -24,10 +24,11 @@ import {
24
24
  } from '@/runtime/index.ts';
25
25
  import { readExecEnvScrubAllowlist } from '../input/exec-env-scrub-config.ts';
26
26
  import { createSandboxExecAsk, sandboxExecAskDepsFromRuntime } from '../permissions/sandbox-exec-gate.ts';
27
- import { createRuntimeServices, installDevicePosture, type RuntimeServices } from './services.ts';
27
+ import { createRuntimeServices, type RuntimeServices } from './services.ts';
28
+ import { registerClientPhoneTool } from '@pellux/goodvibes-sdk/platform/runtime/client';
28
29
  import { createHostPowerSeam } from '@pellux/goodvibes-sdk/platform/power';
29
- import { runBootMemoryFold } from './memory-fold.ts';
30
- import { wireCostPricing } from '../export/cost-utils.ts';
30
+ import { runBootMemoryFold } from '@pellux/goodvibes-sdk/platform/runtime/operations';
31
+ import { wireCostPricing } from '@pellux/goodvibes-sdk/platform/providers';
31
32
  import { createUiRuntimeServices, type UiRuntimeServices } from './ui-services.ts';
32
33
  import { join } from 'node:path';
33
34
  import { installWrfcAgentToolGuard } from '../tools/wrfc-agent-guard.ts';
@@ -35,7 +36,7 @@ import { createWrfcPersistence, type WrfcPersistence } from './wrfc-persistence.
35
36
  import type { SystemMessagePriority } from '../core/system-message-router.ts';
36
37
  import { SessionSpineClient, SessionUnionCache, TUI_SPINE_PARTICIPANT } from '@pellux/goodvibes-sdk/platform/runtime/session-spine';
37
38
  import { SessionInboundInputPoller, createBootstrapInboundInputPoller } from './session-inbound-inputs.ts';
38
- import { trustGatedAsk, type WorkspaceTrustLevel } from './trust/workspace-trust.ts';
39
+ import { trustGatedAsk, type WorkspaceTrustLevel } from '@pellux/goodvibes-sdk/platform/runtime/operations';
39
40
  import { syncNotifierQueueIntegrations } from './bootstrap-notifier-sync.ts';
40
41
 
41
42
  // --- Pre-router buffer ---
@@ -117,11 +118,11 @@ export interface BootstrapCoreState {
117
118
  readonly requestRender: () => void;
118
119
  readonly setRenderRequest: (fn: () => void) => void;
119
120
  readonly runtimeSessionIdRef: { value: string };
120
- /** Cross-surface identity mirror; permanently dormant for embedded/local-only (docs/decisions/2026-07-06-session-spine-mode-branch-is-permanent.md), activated by bootstrap.ts only for an adopted 'external' daemon. */
121
+ /** Cross-surface identity mirror; dormant for local-only, and for the SDK's 'embedded' HostServiceMode, which no product-facing setting can select — this product only ever adopts an external daemon or runs local-only (see the ADOPT ONLY guard in bootstrap.ts) (docs/decisions/2026-07-06-session-spine-mode-branch-is-permanent.md). Activated by bootstrap.ts only for an adopted 'external' daemon. */
121
122
  readonly sessionSpine: SessionSpineClient;
122
123
  /** Inbound steer/follow-up delivery; dormant until bootstrap.ts activates it. */
123
124
  readonly sessionInboundInputs: SessionInboundInputPoller;
124
- /** Cache-backed read facade; bootstrap.ts drives its mode (embedded/external/local-only) from the same HostServiceMode as the spine above. */
125
+ /** Cache-backed read facade; bootstrap.ts drives its mode (external/local-only in this product — 'embedded' is a HostServiceMode value with no product-facing setting to select it here) from the same HostServiceMode as the spine above. */
125
126
  readonly sessionUnionCache: SessionUnionCache;
126
127
  /**
127
128
  * WRFC chain persistence — call `rehydrate()` once after the SystemMessageRouter
@@ -249,8 +250,8 @@ export async function initializeBootstrapCore(
249
250
  runtimeStore: store,
250
251
  getConversationTitle: () => getConversationTitle(),
251
252
  workingDir, homeDirectory, ...(options.daemonHomeDirectory === undefined ? {} : { daemonHomeDirectory: options.daemonHomeDirectory }),
252
- // Embedded topology: the in-process runtime IS the daemon, so it holds its own OS inhibitor (fork
253
- // default is non-spawning) and owns the wake-model boot retry a standalone daemon would. See services.ts.
253
+ // This product only ever adopts an external daemon (or runs local-only), never embedding one,
254
+ // so it holds its own OS inhibitor (fork default is non-spawning) and owns the wake-model boot retry itself. See services.ts.
254
255
  powerSeam: createHostPowerSeam(), provisionWakeModelsAtBoot: true,
255
256
  });
256
257
  await services.workspaceTrustManager.load(); // settle any already-persisted trust decision before any tool runs
@@ -295,10 +296,11 @@ export async function initializeBootstrapCore(
295
296
  surfaceRegistry,
296
297
  watcherRegistry,
297
298
  } = services;
298
- // Permanently dormant for embedded/local-only (nothing to mirror to); bootstrap.ts activates it only for an adopted 'external' daemon.
299
+ // Dormant for local-only, and for the SDK's 'embedded' HostServiceMode — no product-facing
300
+ // setting can select it (SDK-internal embedder/test machinery); bootstrap.ts activates this spine only for an adopted 'external' daemon.
299
301
  const sessionSpine = new SessionSpineClient({ participant: TUI_SPINE_PARTICIPANT, recordKind: 'tui' });
300
- // Cache-backed read facade over the local broker (passthrough until bootstrap.ts marks it
301
- // embedded, or activates the adopted-daemon wire union for 'external').
302
+ // Cache-backed read facade over the local broker (passthrough until bootstrap.ts
303
+ // activates the adopted-daemon wire union for 'external').
302
304
  // selfSessionIds keeps local authoritative for our own wire-mirrored session even when local/wire ids diverge (D-TUI-1).
303
305
  const sessionUnionCache = new SessionUnionCache({ local: sharedSessionBroker, selfSessionIds: () => sessionSpine.mirroredSessionIds });
304
306
 
@@ -381,7 +383,7 @@ export async function initializeBootstrapCore(
381
383
  contextAccountingHolder: services.contextAccountingHolder,
382
384
  // First contained (sandboxed) command run announces "commands now run contained" once — recorded and surfaced now.
383
385
  onSandboxedRun: createSandboxContainmentNotice({ configManager, notify: (text) => conversation.log(`[Sandbox] ${text}`, { fg: '135' }) }),
384
- }); installDevicePosture(toolRegistry, services.devicePosture); // the `phone` tool is the only path that reaches the device capability service, so without this every `device.*` posture key governs nothing a session can observe; the housekeeping timer starts here (not at composition) so building a runtime in a test sweeps nothing
386
+ }); registerClientPhoneTool(toolRegistry, services.devices); // the `phone` tool follows the LOOP, so it is registered here; the posture runtime it used to call is the daemon's now and this tool reaches it over the devices.* verbs (see the SDK's client/phone-tool.ts)
385
387
  // Note: installWrfcAgentToolGuard is called after routeOrBuffer is defined (further below) so the onTrace callback routes guard decisions through the pre-router buffer.
386
388
  services.agentOrchestrator.setDependencies({
387
389
  surfaceRoot: services.surface.surfaceRoot,
@@ -445,9 +447,9 @@ export async function initializeBootstrapCore(
445
447
  } catch (err) {
446
448
  logger.error('Render threw; next requestRender will reschedule', { error: String(err) });
447
449
  }
448
- // Debounced spine heartbeat on turn/render activity (no-op while dormant, i.e.
449
- // embedded/local-only): a cheap synchronous no-op unless its own internal window has
450
- // elapsed (at most one wire call per heartbeatMinIntervalMs) — safe on the hot path.
450
+ // Debounced spine heartbeat on turn/render activity (no-op while dormant, i.e. local-only, or
451
+ // the SDK's 'embedded' mode, for which no product-facing setting exists): a cheap synchronous
452
+ // no-op unless its own internal window has elapsed (at most one wire call per heartbeatMinIntervalMs) — safe on the hot path.
451
453
  sessionSpine.heartbeat(runtimeSessionIdRef.value);
452
454
  };
453
455
  const requestRender = (): void => {
@@ -464,9 +466,9 @@ export async function initializeBootstrapCore(
464
466
  }
465
467
  });
466
468
  };
467
- const permissionPromptRef = {
468
- requestPermission: (async () => ({ approved: false, remember: false })) as PermissionRequestHandler,
469
- };
469
+ // THE ref, not a second one: the composition already holds the prompt seam its
470
+ // client approval raiser calls, so the UI layer patching this patches that.
471
+ const permissionPromptRef = services.localPromptRef as { requestPermission: PermissionRequestHandler };
470
472
  // Trust-at-consequence-time: raised by trustGatedAsk on the first non-read
471
473
  // request in an undecided workspace; overridden once the UI layer exists — same ref-patching pattern as permissionPromptRef above.
472
474
  const trustPromptRef = { requestTrustDecision: (async () => 'restricted') as () => Promise<WorkspaceTrustLevel> };
@@ -699,16 +701,12 @@ export async function initializeBootstrapCore(
699
701
  await syncConfiguredServices(domainDispatch.syncIntegration, services.serviceRegistry);
700
702
 
701
703
  const permissionManager = new PermissionManager(
702
- // Composed ask layer: the workspace trust gate (outer) wraps the sandbox-aware exec gate (inner); see sandbox-exec-gate.ts. The catastrophic block is untouched.
704
+ // Composed ask layer: the workspace trust gate (outer) wraps the sandbox-aware exec gate (inner); see sandbox-exec-gate.ts. The catastrophic block is untouched. The innermost ask is the CLIENT raiser: it posts approvals.raise to the daemon and prompts here (see the SDK's platform/runtime/client/approval-raiser.ts).
703
705
  trustGatedAsk(
704
706
  services.workspaceTrustManager,
705
707
  createSandboxExecAsk(
706
708
  sandboxExecAskDepsFromRuntime(configManager, featureFlags),
707
- (request) => approvalBroker.requestApproval({
708
- request,
709
- sessionId: runtimeSessionIdRef.value,
710
- localPrompt: permissionPromptRef.requestPermission,
711
- }),
709
+ (request) => services.requestApproval({ request }),
712
710
  ),
713
711
  () => trustPromptRef.requestTrustDecision(), // indirection through the ref, not bound early — main.ts patches the real impl in later
714
712
  ),
@@ -729,8 +727,10 @@ export async function initializeBootstrapCore(
729
727
  sessionId: userSessionId,
730
728
  };
731
729
  runtimeSessionIdRef.value = runtime.sessionId;
732
- // Register the live conversation so the composed daemon's rewind.plan/apply verbs
733
- // can serve conversation scope for this session (see conversation-rewind-port.ts).
730
+ services.liveSessionIdRef.value = runtime.sessionId; // the session an ask raised on the daemon belongs to
731
+ // The live conversation, for this process's own /rewind AND for the daemon's
732
+ // questions about it — only the process holding the messages can count or
733
+ // drop them (conversation-rewind-port.ts, the SDK's client/conversation-rewind-host.ts).
734
734
  registerSessionConversation(runtime.sessionId, conversation);
735
735
  void sharedSessionBroker.createSession({
736
736
  id: runtime.sessionId,
@@ -1,8 +1,8 @@
1
1
  import { join } from 'node:path';
2
- import { readBudgetAlertUsd, BUDGET_ALERT_USD_DEFAULT } from '../export/cost-utils.ts';
2
+ import { readBudgetAlertUsd, BUDGET_ALERT_USD_DEFAULT } from '@pellux/goodvibes-sdk/platform/providers';
3
3
  import { refreshMemoryRecallSnapshot } from './orchestrator-core-services.ts';
4
4
  import { sumConversationUsage, type ConversationManager } from '../core/conversation';
5
- import type { Orchestrator } from '../core/orchestrator';
5
+ import type { Orchestrator } from '@pellux/goodvibes-sdk/platform/core';
6
6
  import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
7
7
  import type { RuntimeEventBus } from '@/runtime/index.ts';
8
8
  import type { MutableRuntimeState } from '@/runtime/index.ts';
@@ -17,9 +17,9 @@ import { GitStatusProvider } from '../renderer/git-status.ts';
17
17
  import type { GitHeaderInfo } from '../renderer/git-status.ts';
18
18
  import type { PermissionRequestHandler } from '@pellux/goodvibes-sdk/platform/permissions';
19
19
  import { registerBuiltinPanels } from '../panels/builtin-panels.ts';
20
- import { WorkspaceRegistrationManager } from './trust/workspace-registration.ts';
20
+ import { WorkspaceRegistrationManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
21
21
  import { createSystemMessageRouter, type SystemMessageRouter } from '../core/system-message-router.ts';
22
- import { getConfigSnapshot } from '../config/index.ts';
22
+ import { getConfigSnapshot } from '@pellux/goodvibes-sdk/platform/config';
23
23
  import { createBootstrapCommandContext } from './bootstrap-command-context.ts';
24
24
  import { createResumeSessionHandler } from './bootstrap-hook-bridge.ts';
25
25
  import { confirmLiveResume } from './session-resume-liveness-confirm.ts';