@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
@@ -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';