@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
@@ -14,7 +14,7 @@
14
14
  * proceeds exactly as it always did. The marker belonging to THIS process is
15
15
  * ignored too — re-resuming the session already open here is not a fork.
16
16
  */
17
- import { checkSessionLiveness } from './session-liveness-marker.ts';
17
+ import { checkSessionLiveness } from '@pellux/goodvibes-sdk/platform/runtime/operations';
18
18
  import type { SessionSurface } from '@/runtime/index.ts';
19
19
  import type { SelectionItem, SelectionResult } from '../input/selection-modal.ts';
20
20
 
@@ -1,7 +1,7 @@
1
1
  import type { RuntimeServices } from './services.ts';
2
2
  import type { RemoteRunnerRegistry } from '@/runtime/index.ts';
3
3
  import type { RemoteSupervisor } from '@/runtime/index.ts';
4
- import { createUiRuntimeEvents, type UiRuntimeEvents } from './ui-events.ts';
4
+ import { createUiRuntimeEvents, type UiRuntimeEvents } from '@/runtime/index.ts';
5
5
  import { createUiReadModels, type UiReadModels, type UiReadModelOptions } from './ui-read-models.ts';
6
6
  import type { ForensicsRegistry } from '@/runtime/index.ts';
7
7
  import type { ControlPlaneRecentEvent } from '@pellux/goodvibes-sdk/platform/control-plane';
@@ -10,7 +10,7 @@ import { SessionUnionCache, type SessionReadFacade } from '@pellux/goodvibes-sdk
10
10
  import type { ShellPathService } from '@/runtime/index.ts';
11
11
  import type { HostServiceStatus } from '@/runtime/index.ts';
12
12
  import type { SecretsManager } from '../config/secrets.ts';
13
- import type { buildRelayExternalServiceMethods } from './relay-reachability-bridge.ts';
13
+ import type { RelayReadAccessors } from './relay-reachability-bridge.ts';
14
14
 
15
15
  export interface UiEnvironmentServices {
16
16
  readonly workingDirectory: string;
@@ -66,7 +66,7 @@ export interface UiPlatformServices {
66
66
  readonly webhookNotifier: RuntimeServices['webhookNotifier'];
67
67
  readonly focusTracker: RuntimeServices['focusTracker'];
68
68
  readonly policyRuntimeState: RuntimeServices['policyRuntimeState'];
69
- readonly externalServices?: ReturnType<typeof buildRelayExternalServiceMethods> & {
69
+ readonly externalServices?: RelayReadAccessors & {
70
70
  inspect(): {
71
71
  readonly daemonRunning: boolean;
72
72
  readonly daemonPortInUse?: boolean;
@@ -79,8 +79,6 @@ export interface UiPlatformServices {
79
79
  readonly sessionSpineActive?: boolean;
80
80
  readonly sessionSpineStatus?: 'unknown' | 'online' | 'offline';
81
81
  };
82
- /** Undelivered daemon receipts (update/crash/migration) for the attach-time consuming read; empty when no daemon runs. */
83
- collectDaemonReceipts(): readonly { readonly id: string; readonly text: string; readonly at: number }[];
84
82
  restart(): Promise<{
85
83
  readonly daemonRunning: boolean;
86
84
  readonly daemonPortInUse?: boolean;
@@ -119,6 +117,8 @@ export interface UiRuntimeSharedServices {
119
117
  readonly remoteSupervisor: RuntimeServices['remoteSupervisor'] & RemoteSupervisor;
120
118
  /** the shared live process registry backing the Fleet panel. */
121
119
  readonly processRegistry: RuntimeServices['processRegistry'];
120
+ /** The Fleet panel's read model: local rows union the adopted daemon's. */
121
+ readonly fleetReadModel: RuntimeServices['fleetReadModel'];
122
122
  /** The shared runtime event bus — the Fleet panel subscribes to its 'communication' domain for the honest steer-consumed signal. */
123
123
  readonly runtimeBus: RuntimeServices['runtimeBus'];
124
124
  };
@@ -143,7 +143,7 @@ export interface UiRuntimeServicesOptions extends UiReadModelOptions {
143
143
  readonly getControlPlaneRecentEvents?: (limit: number) => readonly ControlPlaneRecentEvent[];
144
144
  /**
145
145
  * The shared session read facade constructed in bootstrap-core (so
146
- * bootstrap.ts can drive its adopted-external/embedded/local mode). When omitted
146
+ * bootstrap.ts can drive its adopted-external/local mode). When omitted
147
147
  * (test callers), a local-only passthrough facade over the broker is auto-created.
148
148
  */
149
149
  readonly sessionUnionCache?: SessionUnionCache;
@@ -212,6 +212,7 @@ export function createUiRuntimeServices(
212
212
  remoteRunnerRegistry: runtimeServices.remoteRunnerRegistry,
213
213
  remoteSupervisor: runtimeServices.remoteSupervisor,
214
214
  processRegistry: runtimeServices.processRegistry,
215
+ fleetReadModel: runtimeServices.fleetReadModel,
215
216
  runtimeBus: runtimeServices.runtimeBus,
216
217
  },
217
218
  events: createUiRuntimeEvents(runtimeServices.runtimeBus),
@@ -1,17 +1,16 @@
1
1
  /**
2
- * Pure logic for `/update`: version comparison, the latest-release-tag
3
- * redirect lookup, and honest install-kind detection.
2
+ * Pure logic for `/update`, re-exported from the platform's update-policy
3
+ * modules so there is one mechanism everywhere: version comparison and the
4
+ * release-tag redirect lookup from `platform/runtime/self-update`, install-kind
5
+ * detection from `platform/runtime/operations`.
4
6
  *
5
- * Version comparison and the release-tag lookup are re-exported from the
6
- * SDK's canonical update policy module (platform/runtime/self-update), which
7
- * was hoisted from this file's semantics — one mechanism everywhere.
8
- * Install-kind detection stays local: it encodes how THIS package is
9
- * installed (compiled binary vs bun/npm package vs source run) and what
10
- * command replaces a swap for each kind.
7
+ * The self-update download/verify/swap orchestration that USES these lives in
8
+ * src/input/commands/update-runtime.ts; this module only decides "is there a
9
+ * newer version" and "can this install be swapped in place".
11
10
  *
12
- * The self-update download/verify/swap orchestration that USES these lives
13
- * in src/input/commands/update-runtime.ts; this module only decides "is
14
- * there a newer version" and "can this install be swapped in place".
11
+ * `fallbackUpdateCommand` is wrapped rather than re-exported: the platform's
12
+ * takes the package name a package-managed install is upgraded through, and
13
+ * that name is this product's own.
15
14
  */
16
15
  export {
17
16
  compareVersions,
@@ -21,39 +20,20 @@ export {
21
20
  type UpdateFetchLike,
22
21
  } from '@pellux/goodvibes-sdk/platform/runtime/self-update';
23
22
 
24
- /**
25
- * How this running process was installed, detected honestly from
26
- * process.execPath rather than assumed:
27
- * - "binary": a standalone `bun build --compile` executable with no
28
- * package-manager ancestry — the scripts/install.sh install path.
29
- * Swappable in place.
30
- * - "bun-global-package": running the vendored binary shipped inside an
31
- * npm/bun-managed package install (execPath contains a "node_modules"
32
- * path segment — true for both `bun add -g` and a local project
33
- * dependency). Managed by the package manager; swapping the vendored
34
- * file in place would fight the next `bun add -g` upgrade, so this is
35
- * never swapped — the user re-runs their package manager instead.
36
- * - "source": running directly via the `bun` interpreter (`bun run
37
- * src/main.ts`), not a compiled binary at all.
38
- */
39
- export type InstallKind = 'binary' | 'bun-global-package' | 'source';
23
+ export {
24
+ detectInstallKind,
25
+ type InstallKind,
26
+ } from '@pellux/goodvibes-sdk/platform/runtime/operations';
40
27
 
41
- export function detectInstallKind(execPath: string): InstallKind {
42
- const segments = execPath.split(/[\\/]/);
43
- const execName = (segments[segments.length - 1] ?? '').toLowerCase();
44
- if (execName === 'bun' || execName === 'bun.exe') {
45
- return 'source';
46
- }
47
- if (segments.includes('node_modules')) {
48
- return 'bun-global-package';
49
- }
50
- return 'binary';
51
- }
28
+ import {
29
+ fallbackUpdateCommand as platformFallbackUpdateCommand,
30
+ type InstallKind as PlatformInstallKind,
31
+ } from '@pellux/goodvibes-sdk/platform/runtime/operations';
32
+
33
+ /** The package a package-managed install of this terminal is upgraded through. */
34
+ const TERMINAL_PACKAGE_NAME = '@pellux/goodvibes-tui';
52
35
 
53
36
  /** The exact command to tell the user to run instead of a swap, for each non-binary install kind. */
54
- export function fallbackUpdateCommand(kind: Exclude<InstallKind, 'binary'>): string {
55
- if (kind === 'bun-global-package') {
56
- return 'bun add -g @pellux/goodvibes-tui';
57
- }
58
- return 'curl -fsSL https://goodvibes.sh/install.sh | sh';
37
+ export function fallbackUpdateCommand(kind: Exclude<PlatformInstallKind, 'binary'>): string {
38
+ return platformFallbackUpdateCommand(kind, TERMINAL_PACKAGE_NAME);
59
39
  }
@@ -1,6 +1,6 @@
1
1
  import { WorkspaceCheckpointManager } from '@pellux/goodvibes-sdk/platform/workspace';
2
2
  import { withCheckpointGuardSettings } from '../config/tui-extension-settings.ts';
3
- import type { ConfigManager } from '../config/index.ts';
3
+ import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
4
4
  import type { RuntimeEventBus, SessionSurface } from '@/runtime/index.ts';
5
5
 
6
6
  /**
@@ -46,8 +46,8 @@
46
46
 
47
47
  import type { WrfcChain, WrfcState } from '@pellux/goodvibes-sdk/platform/agents';
48
48
  import type { RuntimeEventBus, WorkflowEvent } from '@/runtime/index.ts';
49
- import { atomicWriteFileSync } from '../config/atomic-write.ts';
50
- import { readVersioned } from '../config/read-versioned.ts';
49
+ import { atomicWriteFileSync } from '@pellux/goodvibes-sdk/platform/config';
50
+ import { readVersioned } from '@pellux/goodvibes-sdk/platform/config';
51
51
  import type { SystemMessageRouter } from '../core/system-message-router.ts';
52
52
 
53
53
  // ─── Constants ───────────────────────────────────────────────────────────────
@@ -1,5 +1,5 @@
1
- import type { ConfigManager } from '../config/index.ts';
2
- import { getProviderIdFromModel } from '../config/provider-model.ts';
1
+ import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
2
+ import { getProviderIdFromModel } from '@pellux/goodvibes-sdk/platform/providers';
3
3
  import type { ConversationManager } from '../core/conversation';
4
4
  import type { CommandContext } from '../input/command-registry.ts';
5
5
  import type { InputHandler } from '../input/handler.ts';
@@ -11,7 +11,7 @@ import type { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp';
11
11
  import type { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config';
12
12
  import type { SecretsManager } from '@pellux/goodvibes-sdk/platform/config';
13
13
  import type { MemoryEmbeddingProviderRegistry } from '@pellux/goodvibes-sdk/platform/state';
14
- import type { ServiceInspectionQuery } from '../runtime/ui-service-queries.ts';
14
+ import type { ServiceInspectionQuery } from '@/runtime/index.ts';
15
15
  import type { EmbeddingProviderPickerEntry, ModelPickerTargetInfo } from '../input/model-picker.ts';
16
16
  import type { SelectionItem } from '../input/selection-modal.ts';
17
17
  import { categorizeBuiltinCommands } from '../input/commands.ts';
@@ -20,7 +20,9 @@ import { setActiveThemeMode } from '../renderer/theme.ts';
20
20
  import { THEME_MODE_CONFIG_KEY, coerceThemeModeSetting } from '../renderer/theme-mode-config.ts';
21
21
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
22
22
  import { buildFirstOpenItems, decodeFirstOpenChoice, selfRecordWorkspaceRegistration } from '../cli/tui-startup.ts';
23
- import type { WorkspaceTrustLevel } from '../runtime/trust/workspace-trust.ts';
23
+ import type { SettingsDaemonCredentialWriter } from '../input/settings-modal-secrets.ts';
24
+ import type { DaemonOwnedConfigWriter } from '../input/settings-modal-mutations.ts';
25
+ import type { WorkspaceTrustLevel } from '@pellux/goodvibes-sdk/platform/runtime/operations';
24
26
 
25
27
  type WireShellUiOpenersOptions = {
26
28
  commandContext: CommandContext;
@@ -34,6 +36,18 @@ type WireShellUiOpenersOptions = {
34
36
  mcpRegistry: McpRegistry;
35
37
  subscriptionManager: SubscriptionManager;
36
38
  secretsManager?: Pick<SecretsManager, 'delete' | 'get' | 'set'>;
39
+ /**
40
+ * The daemon's credential write. Present when a daemon is configured; a
41
+ * daemon-scoped credential goes there rather than into this surface's own
42
+ * store, which the daemon never reads.
43
+ */
44
+ daemonCredentials?: SettingsDaemonCredentialWriter | null;
45
+ /**
46
+ * Where a daemon-owned setting is written. `surfaces.*`, `watchers.*`,
47
+ * `automation.*` and the rest are applied by the daemon; writing one into
48
+ * this surface's own file reports success and configures nothing.
49
+ */
50
+ daemonConfig?: DaemonOwnedConfigWriter | null;
37
51
  serviceRegistry: Pick<ServiceInspectionQuery, 'getAll'>;
38
52
  /** Backs the model picker's 'embeddings' target and its own item-list mode. */
39
53
  memoryEmbeddingRegistry: Pick<MemoryEmbeddingProviderRegistry, 'getDefaultProviderId' | 'setDefaultProvider' | 'status'>;
@@ -120,6 +134,8 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
120
134
  mcpRegistry,
121
135
  subscriptionManager,
122
136
  secretsManager,
137
+ daemonCredentials,
138
+ daemonConfig,
123
139
  serviceRegistry,
124
140
  memoryEmbeddingRegistry,
125
141
  workingDirectory,
@@ -394,12 +410,19 @@ export function wireShellUiOpeners(options: WireShellUiOpenersOptions): void {
394
410
  commandContext.openSettingsModal = (target?: string) => {
395
411
  input.modalOpened('settings');
396
412
  input.settingsModal.open(configManager, featureFlags, subscriptionManager, serviceRegistry, mcpRegistry, secretsManager, {
397
- // The Connections category asks the daemon handlers directly, through the
398
- // same in-process catalog `/mail` and `/calendar` use, so the workspace
399
- // reports the daemon's state rather than a local guess about it.
413
+ // The Connections category probes through this app's catalog, which is
414
+ // empty by construction — so those rows read 'unreachable' rather than
415
+ // inventing a settled state nothing established. Retargeting that probe
416
+ // at the daemon is the remaining half of this seam.
400
417
  ...(commandContext.workspace?.gatewayMethods
401
418
  ? { gatewayMethods: commandContext.workspace.gatewayMethods }
402
419
  : {}),
420
+ // A daemon-scoped credential goes to the daemon, which writes the secret,
421
+ // verifies it reads back, and only then points the config key at it.
422
+ ...(daemonCredentials ? { daemonCredentials } : {}),
423
+ // A daemon-owned setting is applied by the daemon, so it is written there.
424
+ ...(daemonConfig ? { daemonConfig } : {}),
425
+ reportError: (message: string) => { commandContext.print?.(message); },
403
426
  requestRender: render,
404
427
  onSettingApplied: (change) => {
405
428
  // forced dark/light applies immediately (rebuild palettes + full
@@ -1,6 +1,6 @@
1
1
  import { logger } from '@pellux/goodvibes-sdk/platform/utils';
2
2
  import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
3
- import { allowTerminalWrite } from '../runtime/terminal-output-guard.ts';
3
+ import { allowTerminalWrite } from '@pellux/goodvibes-terminal-shell/terminal-output-guard';
4
4
 
5
5
  /**
6
6
  * copyToClipboard - Uses OSC 52 escape sequence to copy text to the terminal clipboard.
@@ -2,7 +2,7 @@ import { readFileSync, readdirSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { CONFIG_SCHEMA } from '@pellux/goodvibes-sdk/platform/config';
4
4
  import { FEATURE_SETTINGS } from '@pellux/goodvibes-sdk/platform/runtime/state';
5
- import { featureEnablementWrite } from '../runtime/feature-settings.ts';
5
+ import { featureEnablementWrite, GOODVIBES_CLI_CATALOG } from '@pellux/goodvibes-terminal-shell';
6
6
  import { CommandRegistry } from '../input/command-registry.ts';
7
7
  import { registerBuiltinCommands } from '../input/commands.ts';
8
8
 
@@ -531,18 +531,20 @@ function countBuiltinPanels(root: string): number {
531
531
  return count;
532
532
  }
533
533
 
534
- function listCliCommands(root: string): string[] {
535
- const text = readFileSync(join(root, 'src', 'cli', 'types.ts'), 'utf8');
536
- const match = text.match(/export type GoodVibesCliCommand =([\s\S]*?)export type GoodVibesCliOutputFormat/);
537
- if (!match) return [];
538
- return [...match[1].matchAll(/\|\s*'([^']+)'/g)]
539
- .map((entry) => entry[1])
534
+ /**
535
+ * The CLI command words this terminal actually accepts, read off the catalog
536
+ * the parser is driven by rather than scraped out of a source file — the
537
+ * ledger counts what ships, and a catalog entry IS what ships.
538
+ */
539
+ function listCliCommands(): string[] {
540
+ return GOODVIBES_CLI_CATALOG.commands
541
+ .map((spec) => spec.name as string)
540
542
  .filter((command) => command !== 'unknown');
541
543
  }
542
544
 
543
545
  export function buildVerificationLedger(root: string): VerificationLedger {
544
546
  const slashCommandNames = listSlashCommands();
545
- const cliCommandNames = listCliCommands(root);
547
+ const cliCommandNames = listCliCommands();
546
548
  const slashCommands = slashCommandNames.length;
547
549
  const panels = countBuiltinPanels(root);
548
550
  const cliCommands = cliCommandNames.length;
package/src/version.ts CHANGED
@@ -6,7 +6,7 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '1.27.1';
9
+ let _version = '2.0.1';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
12
12
  // Only trust a version read from OUR OWN package.json. A Bun single-file
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env bun
2
- //
3
- // ── READ THIS BEFORE DEV-TESTING DAEMON ROUTES THROUGH THIS SHIM ──────────
4
- //
5
- // This launcher prefers a PREBUILT binary over the source checkout. On a
6
- // machine with `vendor/goodvibes-daemon-<platform>` staged, `bun bin/goodvibes-daemon`
7
- // runs THAT binary — compiled against the PUBLISHED SDK — not the source in
8
- // this repo and not whatever `sdk-dev link` overlaid into node_modules.
9
- //
10
- // The consequence is quiet and expensive: a route you just added returns 404
11
- // and every explanation you reach for is wrong, because the process answering
12
- // never contained your code. It cost a round several hours.
13
- //
14
- // Two further traps in the same area:
15
- // - Killing this shim does NOT kill the vendored child. `pkill -f` on the
16
- // shim's command line leaves the daemon listening, so the "restart" you
17
- // think you performed changed nothing.
18
- // - `sdk-dev link` overlays node_modules only. A vendored binary ignores it
19
- // completely.
20
- //
21
- // To exercise source (and a linked SDK), bypass this launcher:
22
- // bun src/daemon/cli.ts --port <port> --hostname 127.0.0.1
23
- // and isolate it with GOODVIBES_HOME / GOODVIBES_DAEMON_HOME / GOODVIBES_WORKING_DIR
24
- // so it cannot read the machine's real credentials or claim its service unit.
25
- //
26
- import { dirname, join } from 'node:path';
27
- import { fileURLToPath } from 'node:url';
28
- import { spawnSync } from 'node:child_process';
29
- import {
30
- ensureVendoredBinary,
31
- isExecutable,
32
- isSourceCheckout,
33
- resolveArtifactName,
34
- resolvePlatformPackageBinary,
35
- run,
36
- supportedTargetsText,
37
- } from './launcher-support.js';
38
-
39
- const __dirname = dirname(fileURLToPath(import.meta.url));
40
- const packageRoot = join(__dirname, '..');
41
-
42
- if (process.platform === 'win32') {
43
- console.error('goodvibes-daemon: native Windows is not supported.');
44
- console.error('Use WSL so the Linux release binary path applies.');
45
- process.exit(1);
46
- }
47
-
48
- const artifactName = resolveArtifactName('daemon', process.platform, process.arch);
49
- const localPlatformBuild = artifactName ? join(packageRoot, 'dist', artifactName) : null;
50
- const localBuild = join(packageRoot, 'dist', 'goodvibes-daemon');
51
- const vendoredBinary = artifactName ? join(packageRoot, 'vendor', artifactName) : null;
52
-
53
- if (localPlatformBuild && isExecutable(localPlatformBuild)) {
54
- run(localPlatformBuild, process.argv.slice(2));
55
- }
56
-
57
- if (isExecutable(localBuild)) {
58
- run(localBuild, process.argv.slice(2));
59
- }
60
-
61
- if (vendoredBinary && isExecutable(vendoredBinary)) {
62
- run(vendoredBinary, process.argv.slice(2));
63
- }
64
-
65
- const platformPackageBinary = resolvePlatformPackageBinary('daemon', process.platform, process.arch, packageRoot);
66
- if (platformPackageBinary) {
67
- run(platformPackageBinary, process.argv.slice(2));
68
- }
69
-
70
- if (artifactName) {
71
- try {
72
- const installedBinary = await ensureVendoredBinary({ packageRoot, artifactName });
73
- run(installedBinary, process.argv.slice(2));
74
- } catch (error) {
75
- console.error(`goodvibes-daemon: failed to install release binary: ${error instanceof Error ? error.message : String(error)}`);
76
- }
77
- }
78
-
79
- const bunProbe = spawnSync('bun', ['--version'], { stdio: 'ignore' });
80
- if (bunProbe.status === 0 && isSourceCheckout(packageRoot)) {
81
- run('bun', [join(packageRoot, 'src', 'daemon', 'cli.ts'), ...process.argv.slice(2)]);
82
- }
83
-
84
- console.error('goodvibes-daemon: no runnable binary is available.');
85
- console.error(`platform: ${process.platform}-${process.arch}`);
86
- console.error(`supported prebuilt targets: ${supportedTargetsText()}`);
87
- console.error('Either:');
88
- console.error(' 1. check network access to the GitHub release assets, or');
89
- console.error(' 2. build locally with `bun run build:daemon:<platform>` in a source checkout.');
90
- process.exit(1);