@pellux/goodvibes-tui 1.27.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/CHANGELOG.md +125 -2
  2. package/README.md +7 -9
  3. package/bin/goodvibes +2 -2
  4. package/bin/launcher-support.js +8 -4
  5. package/docs/README.md +11 -2
  6. package/docs/foundation-artifacts/operator-contract.json +6403 -2347
  7. package/package.json +14 -25
  8. package/scripts/postinstall.js +35 -35
  9. package/src/audio/spoken-turn-model-routing.ts +1 -1
  10. package/src/cli/bundle-command.ts +5 -5
  11. package/src/cli/completions/generate.ts +1 -1
  12. package/src/cli/doctor.ts +3 -3
  13. package/src/cli/entrypoint.ts +12 -7
  14. package/src/cli/help.ts +4 -5
  15. package/src/cli/hooks-command.ts +1 -1
  16. package/src/cli/index.ts +1 -4
  17. package/src/cli/launch-auto-update.ts +59 -7
  18. package/src/cli/management-commands.ts +6 -6
  19. package/src/cli/management-utils.ts +5 -5
  20. package/src/cli/management.ts +7 -7
  21. package/src/cli/network-posture.ts +1 -1
  22. package/src/cli/package-verification.ts +7 -6
  23. package/src/cli/plugin-bundles-command.ts +1 -1
  24. package/src/cli/plugin-command.ts +2 -2
  25. package/src/cli/service-command.ts +2 -2
  26. package/src/cli/service-posture.ts +4 -4
  27. package/src/cli/status.ts +9 -8
  28. package/src/cli/surface-command.ts +4 -4
  29. package/src/cli/tui-startup.ts +12 -3
  30. package/src/cli-flags.ts +3 -3
  31. package/src/config/goodvibes-home-audit.ts +0 -2
  32. package/src/config/secret-config.ts +37 -5
  33. package/src/config/tui-extension-settings.ts +1 -1
  34. package/src/core/approval-alert.ts +2 -2
  35. package/src/core/budget-breach-notifier.ts +3 -3
  36. package/src/core/conversation-compaction-render.ts +1 -1
  37. package/src/core/conversation-line-cache.ts +1 -1
  38. package/src/core/conversation-render-context.ts +1 -1
  39. package/src/core/conversation-rendering.ts +2 -2
  40. package/src/core/conversation.ts +10 -10
  41. package/src/core/long-task-notifier.ts +2 -2
  42. package/src/core/memory-diagnostics-gateway.ts +1 -1
  43. package/src/core/scriptable-statusline.ts +1 -1
  44. package/src/core/session-auto-titler.ts +1 -1
  45. package/src/core/session-resume-core.ts +2 -2
  46. package/src/core/stream-event-wiring.ts +24 -44
  47. package/src/core/terminal-notifier.ts +3 -3
  48. package/src/core/turn-cancellation.ts +1 -1
  49. package/src/core/turn-event-wiring.ts +5 -5
  50. package/src/input/command-registry.ts +6 -6
  51. package/src/input/commands/channel-pairing.ts +1 -1
  52. package/src/input/commands/cluster-runtime.ts +1 -1
  53. package/src/input/commands/codebase-runtime.ts +1 -1
  54. package/src/input/commands/devices-runtime.ts +1 -1
  55. package/src/input/commands/hosted-runtime.ts +330 -0
  56. package/src/input/commands/local-setup-review.ts +1 -1
  57. package/src/input/commands/local-setup-transfer.ts +2 -2
  58. package/src/input/commands/local-setup.ts +3 -3
  59. package/src/input/commands/managed-runtime.ts +2 -2
  60. package/src/input/commands/operator-rpc.ts +24 -110
  61. package/src/input/commands/payment-card-intake.ts +1 -1
  62. package/src/input/commands/permissions-provenance.ts +2 -2
  63. package/src/input/commands/plugin-runtime.ts +1 -1
  64. package/src/input/commands/provider.ts +1 -1
  65. package/src/input/commands/relay-runtime.ts +18 -9
  66. package/src/input/commands/rewind-runtime.ts +1 -1
  67. package/src/input/commands/runtime-services.ts +1 -1
  68. package/src/input/commands/services-runtime.ts +1 -1
  69. package/src/input/commands/session-workflow.ts +1 -1
  70. package/src/input/commands/settings-sync-runtime.ts +2 -2
  71. package/src/input/commands/share-runtime.ts +1 -1
  72. package/src/input/commands/tasks-runtime.ts +145 -55
  73. package/src/input/commands/update-runtime.ts +31 -28
  74. package/src/input/commands/work-plan-runtime.ts +2 -2
  75. package/src/input/commands/workstream-attempts.ts +1 -1
  76. package/src/input/commands/workstream-runtime.ts +2 -2
  77. package/src/input/commands.ts +2 -0
  78. package/src/input/feature-unit-layout.ts +1 -1
  79. package/src/input/feed-context-factory.ts +3 -3
  80. package/src/input/handler-content-actions.ts +2 -2
  81. package/src/input/handler-feed-routes.ts +1 -1
  82. package/src/input/handler-feed.ts +3 -3
  83. package/src/input/handler-modal-token-routes.ts +1 -1
  84. package/src/input/handler-onboarding-daemon-adopt.ts +3 -2
  85. package/src/input/handler-onboarding.ts +1 -1
  86. package/src/input/handler-types.ts +2 -2
  87. package/src/input/handler-ui-state.ts +1 -1
  88. package/src/input/handler.ts +4 -4
  89. package/src/input/input-history.ts +1 -1
  90. package/src/input/onboarding/onboarding-feature-units.ts +2 -2
  91. package/src/input/onboarding/onboarding-runtime-status.ts +15 -1
  92. package/src/input/onboarding/onboarding-wizard-apply.ts +17 -8
  93. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +5 -3
  94. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +1 -1
  95. package/src/input/onboarding/onboarding-wizard-types.ts +1 -1
  96. package/src/input/payments-config.ts +6 -6
  97. package/src/input/search.ts +1 -1
  98. package/src/input/session-picker-modal.ts +46 -0
  99. package/src/input/settings-modal-activation.ts +1 -1
  100. package/src/input/settings-modal-behavior.ts +4 -4
  101. package/src/input/settings-modal-commit.ts +11 -0
  102. package/src/input/settings-modal-data.ts +13 -80
  103. package/src/input/settings-modal-mutations.ts +33 -0
  104. package/src/input/settings-modal-secrets.ts +34 -0
  105. package/src/input/settings-modal-subscriptions.ts +1 -1
  106. package/src/input/settings-modal-types.ts +15 -1
  107. package/src/input/settings-modal.ts +28 -3
  108. package/src/input/worktree-setup-config.ts +1 -1
  109. package/src/main.ts +11 -9
  110. package/src/panels/agent-inspector-shared.ts +2 -2
  111. package/src/panels/base-panel.ts +2 -2
  112. package/src/panels/builtin/operations.ts +6 -8
  113. package/src/panels/builtin/session.ts +17 -0
  114. package/src/panels/builtin/shared.ts +5 -5
  115. package/src/panels/builtin-modals.ts +3 -3
  116. package/src/panels/confirm-state.ts +1 -1
  117. package/src/panels/cost-tracker-panel.ts +4 -4
  118. package/src/panels/diff-panel.ts +2 -2
  119. package/src/panels/diff-review-panel.ts +2 -2
  120. package/src/panels/expandable-list-panel.ts +2 -2
  121. package/src/panels/fleet-acts.ts +1 -1
  122. package/src/panels/fleet-observed-render.ts +1 -1
  123. package/src/panels/fleet-panel-format.ts +1 -1
  124. package/src/panels/fleet-panel.ts +1 -1
  125. package/src/panels/fleet-spawn.ts +1 -1
  126. package/src/panels/fleet-steer.ts +1 -1
  127. package/src/panels/fleet-transcript.ts +1 -1
  128. package/src/panels/git-panel.ts +1 -1
  129. package/src/panels/hosted-session-feed.ts +352 -0
  130. package/src/panels/hosted-session-panel.ts +221 -0
  131. package/src/panels/local-auth-panel.ts +3 -3
  132. package/src/panels/modals/devices-modal.ts +1 -1
  133. package/src/panels/modals/local-auth-modal.ts +1 -1
  134. package/src/panels/modals/pairing-modal.ts +1 -1
  135. package/src/panels/modals/services-modal.ts +1 -1
  136. package/src/panels/modals/settings-sync-modal.ts +1 -1
  137. package/src/panels/modals/subscription-modal.ts +1 -1
  138. package/src/panels/modals/work-plan-modal.ts +1 -1
  139. package/src/panels/notifications-panel.ts +1 -1
  140. package/src/panels/panel-confirm-overlay.ts +1 -1
  141. package/src/panels/plugins-panel.ts +2 -2
  142. package/src/panels/polish-core.ts +2 -2
  143. package/src/panels/polish-tables.ts +1 -1
  144. package/src/panels/polish.ts +2 -2
  145. package/src/panels/scrollable-list-panel.ts +3 -3
  146. package/src/panels/skills-panel.ts +3 -3
  147. package/src/panels/token-budget-panel.ts +5 -5
  148. package/src/panels/types.ts +1 -2
  149. package/src/permissions/prompt.ts +1 -1
  150. package/src/renderer/autocomplete-overlay.ts +1 -1
  151. package/src/renderer/block-actions-overlay.ts +1 -1
  152. package/src/renderer/bookmark-modal.ts +1 -1
  153. package/src/renderer/buffer.ts +1 -1
  154. package/src/renderer/code-block.ts +1 -1
  155. package/src/renderer/composer-fragments.ts +1 -1
  156. package/src/renderer/compositor.ts +2 -2
  157. package/src/renderer/config-modal.ts +1 -1
  158. package/src/renderer/context-inspector.ts +1 -1
  159. package/src/renderer/conversation-layout.ts +2 -2
  160. package/src/renderer/conversation-overlays.ts +1 -1
  161. package/src/renderer/conversation-surface.ts +2 -2
  162. package/src/renderer/diff-view.ts +1 -1
  163. package/src/renderer/diff.ts +1 -1
  164. package/src/renderer/file-picker-overlay.ts +1 -1
  165. package/src/renderer/fleet-tab-strip.ts +1 -1
  166. package/src/renderer/fullscreen-primitives.ts +2 -2
  167. package/src/renderer/fullscreen-workspace.ts +1 -1
  168. package/src/renderer/header-line.ts +1 -1
  169. package/src/renderer/help-overlay.ts +1 -1
  170. package/src/renderer/history-search-overlay.ts +2 -2
  171. package/src/renderer/layout.ts +5 -8
  172. package/src/renderer/markdown-inline.ts +1 -1
  173. package/src/renderer/markdown-table.ts +1 -1
  174. package/src/renderer/markdown.ts +1 -1
  175. package/src/renderer/mcp-workspace.ts +1 -1
  176. package/src/renderer/modal-factory.ts +2 -2
  177. package/src/renderer/model-workspace.ts +2 -2
  178. package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
  179. package/src/renderer/overlay-box.ts +1 -1
  180. package/src/renderer/panel-composite.ts +1 -1
  181. package/src/renderer/panel-workspace-bar.ts +1 -1
  182. package/src/renderer/process-indicator.ts +1 -1
  183. package/src/renderer/profile-picker-modal.ts +1 -1
  184. package/src/renderer/search-overlay.ts +2 -2
  185. package/src/renderer/selection-modal-overlay.ts +1 -1
  186. package/src/renderer/session-picker-modal.ts +124 -3
  187. package/src/renderer/settings-modal-helpers.ts +2 -0
  188. package/src/renderer/settings-modal.ts +2 -2
  189. package/src/renderer/shell-surface.ts +2 -2
  190. package/src/renderer/system-message.ts +1 -1
  191. package/src/renderer/tab-strip.ts +1 -1
  192. package/src/renderer/theme-mode-config.ts +1 -1
  193. package/src/renderer/theme.ts +11 -12
  194. package/src/renderer/thinking.ts +1 -1
  195. package/src/renderer/tool-call.ts +2 -2
  196. package/src/renderer/tool-result-expanded-lines.ts +1 -1
  197. package/src/renderer/turn-injection.ts +7 -8
  198. package/src/renderer/ui-factory.ts +3 -3
  199. package/src/runtime/bootstrap-command-context.ts +4 -4
  200. package/src/runtime/bootstrap-command-parts.ts +5 -5
  201. package/src/runtime/bootstrap-core.ts +30 -30
  202. package/src/runtime/bootstrap-shell.ts +4 -4
  203. package/src/runtime/bootstrap.ts +128 -157
  204. package/src/runtime/client/approval-updates.ts +82 -0
  205. package/src/runtime/client/build-floors.ts +167 -0
  206. package/src/runtime/client/daemon-attach-handshake.ts +115 -0
  207. package/src/runtime/client/fleet-union.ts +147 -0
  208. package/src/runtime/client/host-service-status.ts +71 -0
  209. package/src/runtime/client/hosted-exit.ts +86 -0
  210. package/src/runtime/client/hosted-roster.ts +110 -0
  211. package/src/runtime/client/hosted-session-stream.ts +178 -0
  212. package/src/runtime/client/hosted-sessions.ts +187 -0
  213. package/src/runtime/client/operator-endpoint.ts +213 -0
  214. package/src/runtime/client/spine-adoption.ts +99 -0
  215. package/src/runtime/cloudflare-control-plane.ts +1 -1
  216. package/src/runtime/context-accounting-source.ts +1 -1
  217. package/src/runtime/context.ts +2 -2
  218. package/src/runtime/conversation-rewind-port.ts +42 -14
  219. package/src/runtime/daemon-attach-notices.ts +55 -19
  220. package/src/runtime/diagnostics/panels/ops.ts +1 -1
  221. package/src/runtime/disposal-wiring.ts +4 -24
  222. package/src/runtime/index.ts +119 -105
  223. package/src/runtime/install-self-check-startup.ts +2 -2
  224. package/src/runtime/interaction-seams.ts +1 -1
  225. package/src/runtime/knowledge-services.ts +8 -2
  226. package/src/runtime/legacy-daemon-migration.ts +15 -3
  227. package/src/runtime/legacy-daemon-reconcile.ts +3 -2
  228. package/src/runtime/memory-spine-transport.ts +37 -267
  229. package/src/runtime/notification-dispatch.ts +2 -2
  230. package/src/runtime/onboarding/apply.ts +2 -2
  231. package/src/runtime/onboarding/derivation.ts +2 -2
  232. package/src/runtime/onboarding/markers.ts +2 -2
  233. package/src/runtime/onboarding/progress.ts +2 -2
  234. package/src/runtime/onboarding/snapshot.ts +1 -1
  235. package/src/runtime/onboarding/state.ts +2 -2
  236. package/src/runtime/onboarding/types.ts +2 -2
  237. package/src/runtime/orchestrator-core-services.ts +1 -1
  238. package/src/runtime/path-shadow-startup.ts +28 -221
  239. package/src/runtime/power-keepawake-remote.ts +3 -2
  240. package/src/runtime/process-lifecycle.ts +2 -2
  241. package/src/runtime/provider-fallback.ts +10 -66
  242. package/src/runtime/recovery-autosave.ts +1 -1
  243. package/src/runtime/recovery-offer-wiring.ts +39 -23
  244. package/src/runtime/recovery-prompt.ts +31 -17
  245. package/src/runtime/relay-reachability-bridge.ts +53 -42
  246. package/src/runtime/release-artifacts.ts +2 -1
  247. package/src/runtime/runtime-services-types.ts +82 -35
  248. package/src/runtime/services.ts +305 -300
  249. package/src/runtime/session-resume-liveness-confirm.ts +1 -1
  250. package/src/runtime/ui-services.ts +7 -6
  251. package/src/runtime/update-check.ts +23 -43
  252. package/src/runtime/workspace-checkpointing.ts +1 -1
  253. package/src/runtime/wrfc-persistence.ts +2 -2
  254. package/src/shell/ui-openers.ts +30 -7
  255. package/src/utils/clipboard.ts +1 -1
  256. package/src/verification/verification-ledger.ts +10 -8
  257. package/src/version.ts +1 -1
  258. package/bin/goodvibes-daemon +0 -90
  259. package/src/cli/config-overrides.ts +0 -267
  260. package/src/cli/endpoints.ts +0 -109
  261. package/src/cli/parser.ts +0 -395
  262. package/src/cli/redaction.ts +0 -170
  263. package/src/cli/types.ts +0 -84
  264. package/src/cluster/commands.ts +0 -382
  265. package/src/cluster/remote-daemon-target.ts +0 -225
  266. package/src/cluster/render.ts +0 -268
  267. package/src/config/atomic-write.ts +0 -70
  268. package/src/config/credential-availability.ts +0 -122
  269. package/src/config/goodvibes-home.ts +0 -149
  270. package/src/config/index.ts +0 -88
  271. package/src/config/provider-model.ts +0 -23
  272. package/src/config/read-versioned.ts +0 -228
  273. package/src/core/alert-gating.ts +0 -67
  274. package/src/core/consolidation-receipt.ts +0 -41
  275. package/src/core/focus-tracker.ts +0 -41
  276. package/src/core/history.ts +0 -45
  277. package/src/core/memory-status.ts +0 -118
  278. package/src/core/orchestrator.ts +0 -7
  279. package/src/core/pairing-devices.ts +0 -49
  280. package/src/core/pairing-handoff.ts +0 -101
  281. package/src/core/pairing-offers.ts +0 -83
  282. package/src/core/pairing-origin.ts +0 -78
  283. package/src/core/rewind-turn-anchors.ts +0 -311
  284. package/src/core/session-recovery.ts +0 -210
  285. package/src/core/stable-host.ts +0 -171
  286. package/src/core/transcript-journal.ts +0 -503
  287. package/src/daemon/cli.ts +0 -641
  288. package/src/daemon/handlers/context.ts +0 -29
  289. package/src/daemon/handlers/contracts.ts +0 -77
  290. package/src/daemon/handlers/credentials.ts +0 -139
  291. package/src/daemon/handlers/drafts/draft-store.ts +0 -427
  292. package/src/daemon/handlers/drafts/index.ts +0 -17
  293. package/src/daemon/handlers/drafts/register.ts +0 -331
  294. package/src/daemon/handlers/errors.ts +0 -18
  295. package/src/daemon/handlers/inbox/cursor-store.ts +0 -457
  296. package/src/daemon/handlers/inbox/index.ts +0 -284
  297. package/src/daemon/handlers/inbox/mapping.ts +0 -192
  298. package/src/daemon/handlers/inbox/poller.ts +0 -212
  299. package/src/daemon/handlers/inbox/provider-adapter.ts +0 -156
  300. package/src/daemon/handlers/inbox/providers/discord.ts +0 -252
  301. package/src/daemon/handlers/inbox/providers/email.ts +0 -152
  302. package/src/daemon/handlers/inbox/providers/imap-client.ts +0 -300
  303. package/src/daemon/handlers/inbox/providers/route-util.ts +0 -24
  304. package/src/daemon/handlers/inbox/providers/slack.ts +0 -263
  305. package/src/daemon/handlers/index.ts +0 -117
  306. package/src/daemon/handlers/register.ts +0 -168
  307. package/src/daemon/handlers/remote/backends/cloud-terminal.ts +0 -142
  308. package/src/daemon/handlers/remote/backends/docker.ts +0 -79
  309. package/src/daemon/handlers/remote/backends/index.ts +0 -40
  310. package/src/daemon/handlers/remote/backends/local-process.ts +0 -113
  311. package/src/daemon/handlers/remote/backends/process-runner.ts +0 -127
  312. package/src/daemon/handlers/remote/backends/ssh.ts +0 -125
  313. package/src/daemon/handlers/remote/backends/types.ts +0 -97
  314. package/src/daemon/handlers/remote/dispatcher.ts +0 -181
  315. package/src/daemon/handlers/remote/index.ts +0 -119
  316. package/src/daemon/handlers/remote/peer-registry.ts +0 -357
  317. package/src/daemon/handlers/remote/service.ts +0 -191
  318. package/src/daemon/handlers/routing/inbox-bridge.ts +0 -71
  319. package/src/daemon/handlers/routing/index.ts +0 -261
  320. package/src/daemon/handlers/routing/route-store.ts +0 -319
  321. package/src/daemon/handlers/routing/routing-resolver.ts +0 -75
  322. package/src/daemon/handlers/sqlite-store.ts +0 -278
  323. package/src/daemon/handlers/triage/index.ts +0 -57
  324. package/src/daemon/handlers/triage/integration.ts +0 -213
  325. package/src/daemon/handlers/triage/pipeline.ts +0 -274
  326. package/src/daemon/handlers/triage/scorer.ts +0 -287
  327. package/src/daemon/handlers/triage/tagger/discord.ts +0 -187
  328. package/src/daemon/handlers/triage/tagger/imap.ts +0 -384
  329. package/src/daemon/handlers/triage/tagger/index.ts +0 -184
  330. package/src/daemon/handlers/triage/tagger/shared.ts +0 -70
  331. package/src/daemon/handlers/triage/tagger/slack.ts +0 -69
  332. package/src/daemon/handlers/triage/types.ts +0 -50
  333. package/src/daemon/lifecycle.ts +0 -41
  334. package/src/daemon/provision-wake-model.ts +0 -81
  335. package/src/daemon/safe-serve.ts +0 -61
  336. package/src/daemon/send/channels.ts +0 -200
  337. package/src/daemon/send/command.ts +0 -332
  338. package/src/daemon/send/composition.ts +0 -99
  339. package/src/daemon/send/failure-text.ts +0 -93
  340. package/src/daemon/send/inert-text.ts +0 -225
  341. package/src/daemon/send/stdin.ts +0 -24
  342. package/src/daemon/service-commands.ts +0 -329
  343. package/src/export/cost-utils.ts +0 -319
  344. package/src/input/selection.ts +0 -135
  345. package/src/plugins/loader.ts +0 -15
  346. package/src/renderer/bottom-bar.ts +0 -58
  347. package/src/renderer/conversation-tree.ts +0 -228
  348. package/src/runtime/agent-graph-composition.ts +0 -78
  349. package/src/runtime/channel-composition.ts +0 -46
  350. package/src/runtime/cluster-composition.ts +0 -124
  351. package/src/runtime/cluster-group-composition.ts +0 -284
  352. package/src/runtime/code-index-services.ts +0 -167
  353. package/src/runtime/daemon-handler-composition.ts +0 -76
  354. package/src/runtime/device-posture-composition.ts +0 -110
  355. package/src/runtime/durability-housekeeping.ts +0 -183
  356. package/src/runtime/durability-services.ts +0 -155
  357. package/src/runtime/embedded-service-factories.ts +0 -58
  358. package/src/runtime/feature-settings.ts +0 -154
  359. package/src/runtime/fleet-needs-input-push.ts +0 -70
  360. package/src/runtime/fleet-services.ts +0 -41
  361. package/src/runtime/idle-power-services.ts +0 -85
  362. package/src/runtime/mail-composition.ts +0 -65
  363. package/src/runtime/memory-fold.ts +0 -55
  364. package/src/runtime/operator-token-cleanup.ts +0 -109
  365. package/src/runtime/path-shadow.ts +0 -418
  366. package/src/runtime/perf/panel-health-monitor.ts +0 -18
  367. package/src/runtime/provider-optimizer-wiring.ts +0 -55
  368. package/src/runtime/reachability-notice.ts +0 -100
  369. package/src/runtime/remote-execution-composition.ts +0 -62
  370. package/src/runtime/session-liveness-marker.ts +0 -257
  371. package/src/runtime/session-pointer-surface.ts +0 -22
  372. package/src/runtime/session-storage-services.ts +0 -41
  373. package/src/runtime/surface-feature-flags.ts +0 -96
  374. package/src/runtime/terminal-output-guard.ts +0 -235
  375. package/src/runtime/trust/workspace-registration.ts +0 -192
  376. package/src/runtime/trust/workspace-trust.ts +0 -229
  377. package/src/runtime/ui/index.ts +0 -39
  378. package/src/runtime/ui/model-picker/data-provider.ts +0 -182
  379. package/src/runtime/ui/model-picker/health-enrichment.ts +0 -231
  380. package/src/runtime/ui/model-picker/index.ts +0 -59
  381. package/src/runtime/ui/model-picker/types.ts +0 -153
  382. package/src/runtime/ui/provider-health/data-provider.ts +0 -244
  383. package/src/runtime/ui/provider-health/fallback-visualizer.ts +0 -71
  384. package/src/runtime/ui/provider-health/index.ts +0 -46
  385. package/src/runtime/ui/provider-health/types.ts +0 -146
  386. package/src/runtime/ui-events.ts +0 -1
  387. package/src/runtime/ui-read-model-helpers.ts +0 -1
  388. package/src/runtime/ui-read-models-observability-maintenance.ts +0 -1
  389. package/src/runtime/ui-read-models-observability-options.ts +0 -1
  390. package/src/runtime/ui-read-models-observability-remote.ts +0 -1
  391. package/src/runtime/ui-read-models-observability-security.ts +0 -1
  392. package/src/runtime/ui-read-models-observability-system.ts +0 -1
  393. package/src/runtime/ui-read-models-observability.ts +0 -1
  394. package/src/runtime/ui-service-queries.ts +0 -1
  395. package/src/runtime/voice-setup-services.ts +0 -98
  396. package/src/runtime/workstream-attempts-validation.ts +0 -77
  397. package/src/runtime/workstream-draft-edits.ts +0 -95
  398. package/src/runtime/workstream-draft-store.ts +0 -274
  399. package/src/runtime/workstream-draft-types.ts +0 -42
  400. package/src/runtime/workstream-services.ts +0 -373
  401. package/src/tools/index.ts +0 -1
  402. package/src/types/grid.ts +0 -48
  403. package/src/types/sql-js.d.ts +0 -15
  404. package/src/work-plans/work-plan-store.ts +0 -702
@@ -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.0';
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);