@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
@@ -1,331 +0,0 @@
1
- /**
2
- * channels.drafts.* handler surface (Channel Drafts / Draft Sync Backend).
3
- *
4
- * Attaches host handlers to the four SDK-registered builtin descriptors:
5
- * channels.drafts.list read:channels read-only
6
- * channels.drafts.get read:channels read-only
7
- * channels.drafts.save write:channels access:admin, confirm-gated
8
- * channels.drafts.delete write:channels access:admin, dangerous, confirm-gated
9
- *
10
- * The SDK owns every id, descriptor, access flag, and I/O schema (auto-
11
- * registered with handler:undefined). This module NEVER re-declares any of
12
- * them — it looks each up via catalog.get(id) (inside registerCatalogHandler)
13
- * and re-registers with the wrapped handler. save/delete are confirm-gated via
14
- * RegisterHandlerOptions.confirm; the wrapper enforces body.confirm === true
15
- * AND context.explicitUserRequest === true before the handler runs.
16
- *
17
- * SECURITY: the message body is encrypted at rest and NEVER returned (the wire
18
- * `message` field carries the sha256First(body,12) digest). Webhooks are
19
- * encrypted at rest and ALWAYS redacted on read; RAW webhook tokens submitted
20
- * to save are REJECTED — the agent must redact ('[redacted]') or pass a
21
- * goodvibes://secrets/ reference before transmission.
22
- */
23
- import type { HandlerContext } from '../context.ts';
24
- import { createAtRestCipher } from '../credentials.ts';
25
- import { HandlerError } from '../errors.ts';
26
- import { registerCatalogHandlers } from '../register.ts';
27
- import type { TypedHandler, Unregister } from '../register.ts';
28
- import {
29
- ALL_DRAFT_STATUSES,
30
- DraftSyncStore,
31
- MAX_DRAFT_LIST_LIMIT,
32
- WRITABLE_DRAFT_STATUSES,
33
- } from './draft-store.ts';
34
- import type {
35
- DraftListQuery,
36
- DraftRecord,
37
- DraftSaveInput,
38
- DraftStatus,
39
- } from './draft-store.ts';
40
-
41
- const BAD_INPUT = 'INVALID_INPUT';
42
-
43
- const LIST_ID = 'channels.drafts.list';
44
- const GET_ID = 'channels.drafts.get';
45
- const SAVE_ID = 'channels.drafts.save';
46
- const DELETE_ID = 'channels.drafts.delete';
47
-
48
- const writableStatusSet = new Set<string>(WRITABLE_DRAFT_STATUSES);
49
- const allStatusSet = new Set<string>(ALL_DRAFT_STATUSES);
50
-
51
- // --- Input validation helpers ----------------------------------------------
52
-
53
- function asRecord(body: unknown): Record<string, unknown> {
54
- if (typeof body !== 'object' || body === null || Array.isArray(body)) {
55
- throw new HandlerError('Request body must be an object.', BAD_INPUT, 400);
56
- }
57
- return body as Record<string, unknown>;
58
- }
59
-
60
- function optionalString(value: unknown, field: string): string | undefined {
61
- if (value === undefined || value === null) return undefined;
62
- if (typeof value !== 'string') {
63
- throw new HandlerError(`Field '${field}' must be a string.`, BAD_INPUT, 400);
64
- }
65
- return value;
66
- }
67
-
68
- function requiredString(value: unknown, field: string): string {
69
- const str = optionalString(value, field);
70
- if (str === undefined || str.length === 0) {
71
- throw new HandlerError(`Field '${field}' is required.`, BAD_INPUT, 400);
72
- }
73
- return str;
74
- }
75
-
76
- function optionalTags(value: unknown): string[] | undefined {
77
- if (value === undefined || value === null) return undefined;
78
- if (!Array.isArray(value)) {
79
- throw new HandlerError("Field 'tags' must be an array of strings.", BAD_INPUT, 400);
80
- }
81
- const tags: string[] = [];
82
- for (const entry of value) {
83
- if (typeof entry !== 'string') {
84
- throw new HandlerError("Field 'tags' must contain only strings.", BAD_INPUT, 400);
85
- }
86
- tags.push(entry);
87
- }
88
- return tags;
89
- }
90
-
91
- function optionalLimit(value: unknown): number | undefined {
92
- if (value === undefined || value === null) return undefined;
93
- if (typeof value !== 'number' || !Number.isInteger(value)) {
94
- throw new HandlerError("Field 'limit' must be an integer.", BAD_INPUT, 400);
95
- }
96
- if (value < 1 || value > MAX_DRAFT_LIST_LIMIT) {
97
- throw new HandlerError(
98
- `Field 'limit' must be between 1 and ${MAX_DRAFT_LIST_LIMIT}.`,
99
- BAD_INPUT,
100
- 400,
101
- );
102
- }
103
- return value;
104
- }
105
-
106
- function optionalVersion(value: unknown): number | undefined {
107
- if (value === undefined || value === null) return undefined;
108
- if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {
109
- throw new HandlerError("Field 'version' must be a positive integer.", BAD_INPUT, 400);
110
- }
111
- return value;
112
- }
113
-
114
- // Strict ISO-8601 date-time. Anchored so loosely-formatted but Date.parse-able
115
- // values (e.g. '2020', 'Jan 1 2020', '2020-1-1') are rejected.
116
- const ISO_8601_DATE_TIME =
117
- /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/;
118
-
119
- function optionalIso8601(value: unknown, field: string): string | undefined {
120
- const str = optionalString(value, field);
121
- if (str === undefined) return undefined;
122
- const time = ISO_8601_DATE_TIME.test(str) ? Date.parse(str) : Number.NaN;
123
- if (Number.isNaN(time)) {
124
- throw new HandlerError(`Field '${field}' must be an ISO-8601 timestamp.`, BAD_INPUT, 400);
125
- }
126
- return new Date(time).toISOString();
127
- }
128
-
129
- /**
130
- * Reject RAW webhook tokens submitted to save. The contract requires webhooks
131
- * to be redacted before transmission; the daemon only stores '[redacted]' or a
132
- * goodvibes://secrets/ reference (which carries no token material). Any other
133
- * value bearing a scheme (e.g. an https:// URL with an embedded token) is a raw
134
- * secret and is rejected outright — never persisted, never logged.
135
- */
136
- function validateWebhook(value: string | undefined): string | undefined {
137
- if (value === undefined) return undefined;
138
- if (value === '' || value === '[redacted]') return value;
139
- if (value.startsWith('goodvibes://secrets/')) return value;
140
- if (value.includes('://')) {
141
- throw new HandlerError(
142
- "Field 'webhook' must be redacted before transmission: pass '[redacted]' "
143
- + 'or a goodvibes://secrets/ reference, never a raw webhook URL.',
144
- 'WEBHOOK_REDACTION_REQUIRED',
145
- 400,
146
- );
147
- }
148
- return value;
149
- }
150
-
151
- function parseListStatus(value: unknown): DraftStatus | undefined {
152
- const str = optionalString(value, 'status');
153
- if (str === undefined) return undefined;
154
- if (!allStatusSet.has(str)) {
155
- throw new HandlerError(
156
- `Field 'status' must be one of: ${ALL_DRAFT_STATUSES.join(', ')}.`,
157
- BAD_INPUT,
158
- 400,
159
- );
160
- }
161
- return str as DraftStatus;
162
- }
163
-
164
- function parseSaveStatus(value: unknown): DraftStatus | undefined {
165
- const str = optionalString(value, 'status');
166
- if (str === undefined) return undefined;
167
- if (!writableStatusSet.has(str)) {
168
- throw new HandlerError(
169
- `Field 'status' must be one of: ${WRITABLE_DRAFT_STATUSES.join(', ')}.`,
170
- BAD_INPUT,
171
- 400,
172
- );
173
- }
174
- return str as DraftStatus;
175
- }
176
-
177
- function parseListQuery(body: unknown): DraftListQuery {
178
- const record = asRecord(body ?? {});
179
- const query: DraftListQuery = {};
180
- const status = parseListStatus(record.status);
181
- if (status !== undefined) query.status = status;
182
- const limit = optionalLimit(record.limit);
183
- if (limit !== undefined) query.limit = limit;
184
- return query;
185
- }
186
-
187
- function parseSaveInput(body: unknown): DraftSaveInput {
188
- const record = asRecord(body);
189
- const input: DraftSaveInput = {
190
- message: requiredString(record.message, 'message'),
191
- };
192
- const id = optionalString(record.id, 'id');
193
- if (id !== undefined) input.id = id;
194
- const version = optionalVersion(record.version);
195
- if (version !== undefined) input.version = version;
196
- const title = optionalString(record.title, 'title');
197
- if (title !== undefined) input.title = title;
198
- const channel = optionalString(record.channel, 'channel');
199
- if (channel !== undefined) input.channel = channel;
200
- const route = optionalString(record.route, 'route');
201
- if (route !== undefined) input.route = route;
202
- const webhook = validateWebhook(optionalString(record.webhook, 'webhook'));
203
- if (webhook !== undefined) input.webhook = webhook;
204
- const link = optionalString(record.link, 'link');
205
- if (link !== undefined) input.link = link;
206
- const tags = optionalTags(record.tags);
207
- if (tags !== undefined) input.tags = tags;
208
- const status = parseSaveStatus(record.status);
209
- if (status !== undefined) input.status = status;
210
- const createdAt = optionalIso8601(record.createdAt, 'createdAt');
211
- if (createdAt !== undefined) input.createdAt = createdAt;
212
- const updatedAt = optionalIso8601(record.updatedAt, 'updatedAt');
213
- if (updatedAt !== undefined) input.updatedAt = updatedAt;
214
- return input;
215
- }
216
-
217
- /** Both get and delete identify a draft by `draftId` (per the SDK input schema). */
218
- function parseDraftId(body: unknown): string {
219
- const record = asRecord(body);
220
- return requiredString(record.draftId, 'draftId');
221
- }
222
-
223
- // --- Response shapes (match the SDK output schemas) -------------------------
224
-
225
- interface ListResponse {
226
- drafts: DraftRecord[];
227
- total: number;
228
- }
229
-
230
- /** get: a flat draft (CHANNEL_DRAFT_GET_OUTPUT permits additionalProperties) or a notFound marker. */
231
- type GetResponse = (DraftRecord & { messageDigest: string }) | { notFound: true; id: string };
232
-
233
- interface SaveResponse {
234
- draft: DraftRecord;
235
- created: boolean;
236
- }
237
-
238
- interface DeleteResponse {
239
- deleted: boolean;
240
- draftId: string;
241
- }
242
-
243
- export interface RegisterDraftsOptions {
244
- /** Override the sqlite filename (tests). */
245
- fileName?: string;
246
- /** Inject a pre-built store (tests). When provided, the caller owns its lifecycle. */
247
- store?: DraftSyncStore;
248
- }
249
-
250
- /**
251
- * Register the channels.drafts.* handlers against the catalog held by `ctx`.
252
- * Returns an Unregister that removes all four handlers (and closes the store
253
- * when this function owns it).
254
- *
255
- * The store is created eagerly but initialized lazily on first invocation (the
256
- * SQLite WASM load is deferred until a draft method is actually called). Every
257
- * mutating handler persists the store via save() after the mutation so the
258
- * mirror survives daemon restarts.
259
- */
260
- export function registerDraftMethods(
261
- ctx: HandlerContext,
262
- options: RegisterDraftsOptions = {},
263
- ): Unregister {
264
- const store =
265
- options.store
266
- ?? new DraftSyncStore({
267
- workingDirectory: ctx.workingDirectory,
268
- cipher: createAtRestCipher(ctx.credentials),
269
- ...(options.fileName !== undefined ? { fileName: options.fileName } : {}),
270
- });
271
-
272
- let initPromise: Promise<void> | null = null;
273
- const ensureInit = (): Promise<void> => {
274
- if (!initPromise) initPromise = store.init();
275
- return initPromise;
276
- };
277
-
278
- const listHandler: TypedHandler<unknown, ListResponse> = async ({ body }) => {
279
- await ensureInit();
280
- const query = parseListQuery(body);
281
- const drafts = store.list(query);
282
- return { drafts, total: store.count(query.status) };
283
- };
284
-
285
- const getHandler: TypedHandler<unknown, GetResponse> = async ({ body }) => {
286
- await ensureInit();
287
- const id = parseDraftId(body);
288
- const record = store.get(id);
289
- if (record === null) return { notFound: true, id };
290
- // get output permits additional properties — expose messageDigest explicitly
291
- // alongside the schema-required `message` field (both carry the digest).
292
- return { ...record, messageDigest: record.message };
293
- };
294
-
295
- const saveHandler: TypedHandler<unknown, SaveResponse> = async ({ body }) => {
296
- await ensureInit();
297
- const input = parseSaveInput(body);
298
- const result = await store.upsert(input);
299
- await store.save();
300
- return result;
301
- };
302
-
303
- const deleteHandler: TypedHandler<unknown, DeleteResponse> = async ({ body }) => {
304
- await ensureInit();
305
- const draftId = parseDraftId(body);
306
- const deleted = store.delete(draftId);
307
- if (deleted) await store.save();
308
- return { deleted, draftId };
309
- };
310
-
311
- const unregister = registerCatalogHandlers(ctx.catalog, [
312
- { id: LIST_ID, handler: listHandler as TypedHandler<unknown, unknown> },
313
- { id: GET_ID, handler: getHandler as TypedHandler<unknown, unknown> },
314
- {
315
- id: SAVE_ID,
316
- handler: saveHandler as TypedHandler<unknown, unknown>,
317
- options: { confirm: true },
318
- },
319
- {
320
- id: DELETE_ID,
321
- handler: deleteHandler as TypedHandler<unknown, unknown>,
322
- options: { confirm: true },
323
- },
324
- ]);
325
-
326
- const ownsStore = options.store === undefined;
327
- return () => {
328
- unregister();
329
- if (ownsStore) store.close();
330
- };
331
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * Error type for daemon handler execution. Carries a stable machine `code`
3
- * and an HTTP `status` so the control-plane dispatcher can map failures to
4
- * wire responses without leaking implementation detail.
5
- */
6
- export class HandlerError extends Error {
7
- constructor(
8
- message: string,
9
- public readonly code: string,
10
- public readonly status: number,
11
- ) {
12
- super(message);
13
- this.name = 'HandlerError';
14
- }
15
- }
16
-
17
- /** Code emitted when a confirmation-gated method is invoked without explicit user confirmation. */
18
- export const REQUIRE_CONFIRM = 'REQUIRE_CONFIRM';