okengine 0.2.6 → 0.2.8

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 (584) hide show
  1. package/AGENTS.md +24 -23
  2. package/README.md +52 -346
  3. package/docs/spec/console.md +165 -142
  4. package/docs/spec/example.md +490 -312
  5. package/docs/spec/four-applications.md +495 -314
  6. package/docs/spec/unified-theory.md +184 -175
  7. package/package.json +45 -37
  8. package/spec/manifest.v1.schema.json +40 -9
  9. package/src/auth/api-keys.ts +2 -5
  10. package/src/auth/attenuation.ts +2 -6
  11. package/src/auth/auth.test.ts +53 -31
  12. package/src/auth/invoke-as.ts +1 -3
  13. package/src/auth/operator.ts +8 -26
  14. package/src/auth/planes.ts +2 -7
  15. package/src/auth/plugin.ts +4 -7
  16. package/src/auth/roles.ts +1 -5
  17. package/src/auth/sessions.ts +10 -39
  18. package/src/cli/args.ts +1 -5
  19. package/src/cli/ask-dev-mode.ts +40 -0
  20. package/src/cli/build.ts +1 -2
  21. package/src/cli/client-add.test.ts +8 -15
  22. package/src/cli/client-add.ts +5 -14
  23. package/src/cli/completion.test.ts +1 -5
  24. package/src/cli/completion.ts +4 -17
  25. package/src/cli/db-auto-push.test.ts +64 -0
  26. package/src/cli/db-auto-push.ts +72 -0
  27. package/src/cli/db.test.ts +189 -0
  28. package/src/cli/db.ts +386 -0
  29. package/src/cli/dev-app-runner.ts +2 -8
  30. package/src/cli/dev-db-push.test.ts +163 -0
  31. package/src/cli/dev-mode.test.ts +45 -0
  32. package/src/cli/dev-mode.ts +78 -0
  33. package/src/cli/dev.test.ts +148 -21
  34. package/src/cli/dev.ts +208 -134
  35. package/src/cli/doc-drift.test.ts +3 -2
  36. package/src/cli/doc-drift.ts +21 -50
  37. package/src/cli/doc-staleness.test.ts +69 -0
  38. package/src/cli/docker-cli.test.ts +7 -8
  39. package/src/cli/docker.ts +1 -3
  40. package/src/cli/doctor-diff-examples.ts +1 -3
  41. package/src/cli/doctor-diff.test.ts +1 -5
  42. package/src/cli/doctor-diff.ts +17 -46
  43. package/src/cli/doctor-pii.ts +2 -7
  44. package/src/cli/doctor.test.ts +26 -4
  45. package/src/cli/doctor.ts +35 -11
  46. package/src/cli/eval.ts +4 -14
  47. package/src/cli/gates-list.ts +1 -4
  48. package/src/cli/hero-meta.test.ts +17 -19
  49. package/src/cli/hero-meta.ts +20 -30
  50. package/src/cli/images.ts +3 -8
  51. package/src/cli/index.ts +11 -2
  52. package/src/cli/load-config.images.test.ts +14 -14
  53. package/src/cli/load-config.ts +41 -47
  54. package/src/cli/mcp-from-console.ts +1 -4
  55. package/src/cli/mode.ts +45 -0
  56. package/src/cli/ports.test.ts +4 -13
  57. package/src/cli/ports.ts +1 -3
  58. package/src/cli/privacy-erase.ts +1 -3
  59. package/src/cli/registry.ts +75 -25
  60. package/src/cli/schema.ts +3 -10
  61. package/src/cli/stack.ts +2 -7
  62. package/src/cli/start.ts +4 -15
  63. package/src/cli/upgrade.ts +1 -4
  64. package/src/client/budget-entry.ts +1 -6
  65. package/src/client/create.test.ts +6 -12
  66. package/src/client/create.ts +2 -8
  67. package/src/client/errors.ts +1 -4
  68. package/src/client/index.ts +1 -6
  69. package/src/client/notes-contract.test.ts +4 -13
  70. package/src/client/transport.ts +9 -30
  71. package/src/client/types.ts +8 -29
  72. package/src/compiler/aot.test.ts +2 -9
  73. package/src/compiler/aot.ts +1 -4
  74. package/src/compiler/differential.test.ts +3 -11
  75. package/src/compiler/dynamic.ts +1 -4
  76. package/src/compiler/effects-infer.ts +8 -34
  77. package/src/compiler/emit.ts +1 -3
  78. package/src/compiler/extract.test.ts +96 -30
  79. package/src/compiler/extract.ts +362 -156
  80. package/src/compiler/fixtures/skyport/oke.config.ts +1 -1
  81. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
  82. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
  83. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
  84. package/src/compiler/fixtures/skyport.expected.json +24 -83
  85. package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
  86. package/src/compiler/http-parse.ts +2 -9
  87. package/src/compiler/index.ts +1 -5
  88. package/src/compiler/response.ts +4 -7
  89. package/src/compiler/sucrose.ts +11 -31
  90. package/src/config/define-config.test.ts +57 -34
  91. package/src/config/index.ts +181 -37
  92. package/src/config/resolve-driver.test.ts +28 -17
  93. package/src/console/budget.test.ts +1 -4
  94. package/src/console/index.ts +1 -4
  95. package/src/console/server/access.test.ts +15 -43
  96. package/src/console/server/access.ts +19 -49
  97. package/src/console/server/ai.test.ts +3 -11
  98. package/src/console/server/ai.ts +23 -46
  99. package/src/console/server/app.ts +14 -45
  100. package/src/console/server/auth-rate.test.ts +4 -12
  101. package/src/console/server/bind.ts +1 -5
  102. package/src/console/server/channels.test.ts +2 -6
  103. package/src/console/server/channels.ts +10 -35
  104. package/src/console/server/claim.ts +2 -8
  105. package/src/console/server/clock.test.ts +2 -6
  106. package/src/console/server/clock.ts +8 -26
  107. package/src/console/server/console.test.ts +1 -3
  108. package/src/console/server/diff.test.ts +5 -17
  109. package/src/console/server/diff.ts +10 -31
  110. package/src/console/server/dry-run.audit.test.ts +2 -8
  111. package/src/console/server/flows.ts +64 -233
  112. package/src/console/server/gates.test.ts +14 -50
  113. package/src/console/server/gates.ts +13 -48
  114. package/src/console/server/index.ts +2 -9
  115. package/src/console/server/live.ts +3 -12
  116. package/src/console/server/operator-db.test.ts +4 -15
  117. package/src/console/server/operator-db.ts +13 -32
  118. package/src/console/server/plugin.ts +50 -53
  119. package/src/console/server/plugins.test.ts +2 -6
  120. package/src/console/server/plugins.ts +17 -56
  121. package/src/console/server/runs-pii.ts +2 -7
  122. package/src/console/server/security.gate.test.ts +18 -40
  123. package/src/console/server/serve.ts +10 -25
  124. package/src/console/server/signals.test.ts +1 -3
  125. package/src/console/server/signals.ts +17 -40
  126. package/src/console/server/state.ts +21 -59
  127. package/src/console/server/store.test.ts +20 -22
  128. package/src/console/server/store.ts +31 -76
  129. package/src/console/server/vault.test.ts +12 -29
  130. package/src/console/server/vault.ts +23 -60
  131. package/src/console/ui/access/AccessA11yView.tsx +6 -21
  132. package/src/console/ui/access/a11y.test.tsx +3 -12
  133. package/src/console/ui/access/acknowledgement.test.ts +1 -4
  134. package/src/console/ui/access/acknowledgement.ts +1 -3
  135. package/src/console/ui/access/blast-radius.ts +1 -3
  136. package/src/console/ui/access/confirmation.test.ts +1 -5
  137. package/src/console/ui/access/confirmation.ts +1 -4
  138. package/src/console/ui/access/fixture.ts +1 -5
  139. package/src/console/ui/access/grantable.test.ts +1 -3
  140. package/src/console/ui/access/grantable.ts +2 -7
  141. package/src/console/ui/access/index.ts +2 -9
  142. package/src/console/ui/access/provenance.test.ts +1 -3
  143. package/src/console/ui/access/provenance.ts +2 -6
  144. package/src/console/ui/access/search.test.ts +1 -5
  145. package/src/console/ui/access/search.ts +2 -6
  146. package/src/console/ui/ai/AiA11yView.tsx +6 -17
  147. package/src/console/ui/ai/a11y.test.tsx +2 -5
  148. package/src/console/ui/ai/fixture.ts +2 -7
  149. package/src/console/ui/ai/format.ts +1 -3
  150. package/src/console/ui/ai/group.test.ts +1 -3
  151. package/src/console/ui/ai/group.ts +4 -12
  152. package/src/console/ui/ai/index.ts +2 -9
  153. package/src/console/ui/ai/promotion.test.ts +2 -7
  154. package/src/console/ui/ai/promotion.ts +4 -13
  155. package/src/console/ui/ai/search.test.ts +2 -11
  156. package/src/console/ui/ai/search.ts +3 -13
  157. package/src/console/ui/ai/types.ts +1 -8
  158. package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
  159. package/src/console/ui/architecture/a11y.test.tsx +1 -2
  160. package/src/console/ui/architecture/declared.ts +1 -5
  161. package/src/console/ui/architecture/index.ts +7 -35
  162. package/src/console/ui/architecture/layout.ts +1 -3
  163. package/src/console/ui/architecture/pathologies.ts +10 -19
  164. package/src/console/ui/architecture/search.ts +6 -15
  165. package/src/console/ui/architecture/traffic.ts +4 -14
  166. package/src/console/ui/architecture/types.ts +2 -10
  167. package/src/console/ui/architecture/view.test.ts +7 -19
  168. package/src/console/ui/architecture/view.ts +9 -36
  169. package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
  170. package/src/console/ui/channels/a11y.test.tsx +1 -2
  171. package/src/console/ui/channels/confirmation.test.ts +1 -4
  172. package/src/console/ui/channels/confirmation.ts +1 -4
  173. package/src/console/ui/channels/findings.ts +1 -5
  174. package/src/console/ui/channels/index.ts +2 -8
  175. package/src/console/ui/channels/locale.test.ts +1 -3
  176. package/src/console/ui/channels/locale.ts +2 -8
  177. package/src/console/ui/channels/search.ts +4 -13
  178. package/src/console/ui/channels/taxonomy.ts +1 -3
  179. package/src/console/ui/clock/ClockA11yView.tsx +9 -26
  180. package/src/console/ui/clock/a11y.test.tsx +2 -5
  181. package/src/console/ui/clock/confirmation.test.ts +1 -3
  182. package/src/console/ui/clock/confirmation.ts +1 -4
  183. package/src/console/ui/clock/findings.ts +1 -4
  184. package/src/console/ui/clock/health.ts +2 -7
  185. package/src/console/ui/clock/index.ts +2 -10
  186. package/src/console/ui/clock/search.test.ts +1 -3
  187. package/src/console/ui/clock/search.ts +2 -6
  188. package/src/console/ui/clock/timeline.test.ts +1 -3
  189. package/src/console/ui/clock/waiting-on.test.ts +1 -5
  190. package/src/console/ui/clock/waiting-on.ts +2 -7
  191. package/src/console/ui/diff/DiffA11yView.tsx +8 -17
  192. package/src/console/ui/diff/a11y.test.tsx +2 -5
  193. package/src/console/ui/diff/group.test.ts +3 -13
  194. package/src/console/ui/diff/group.ts +2 -8
  195. package/src/console/ui/diff/index.ts +2 -8
  196. package/src/console/ui/diff/search.test.ts +1 -5
  197. package/src/console/ui/diff/search.ts +4 -16
  198. package/src/console/ui/diff/summary.ts +1 -2
  199. package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
  200. package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
  201. package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
  202. package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
  203. package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
  204. package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
  205. package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
  206. package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
  207. package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
  208. package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
  209. package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
  210. package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
  211. package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
  212. package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
  213. package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
  214. package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
  215. package/src/console/ui/dist/index.html +1 -1
  216. package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
  217. package/src/console/ui/flows/a11y.test.tsx +2 -8
  218. package/src/console/ui/flows/buffer.test.ts +3 -11
  219. package/src/console/ui/flows/buffer.ts +4 -11
  220. package/src/console/ui/flows/confirmation.ts +1 -3
  221. package/src/console/ui/flows/contract.test.ts +3 -7
  222. package/src/console/ui/flows/contract.ts +12 -36
  223. package/src/console/ui/flows/graph.test.ts +3 -11
  224. package/src/console/ui/flows/graph.ts +5 -15
  225. package/src/console/ui/flows/index.ts +1 -6
  226. package/src/console/ui/flows/save-as-test.ts +1 -3
  227. package/src/console/ui/flows/search.ts +8 -25
  228. package/src/console/ui/flows/tiers.ts +2 -9
  229. package/src/console/ui/gates/GatesA11yView.tsx +4 -13
  230. package/src/console/ui/gates/a11y.test.tsx +2 -5
  231. package/src/console/ui/gates/audit.ts +1 -3
  232. package/src/console/ui/gates/denial.test.ts +1 -3
  233. package/src/console/ui/gates/denial.ts +4 -12
  234. package/src/console/ui/gates/findings.ts +1 -3
  235. package/src/console/ui/gates/group.test.ts +3 -3
  236. package/src/console/ui/gates/group.ts +3 -11
  237. package/src/console/ui/gates/index.ts +2 -10
  238. package/src/console/ui/gates/search.ts +3 -10
  239. package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
  240. package/src/console/ui/overview/a11y.test.tsx +1 -2
  241. package/src/console/ui/overview/busiest.ts +1 -3
  242. package/src/console/ui/overview/compose.ts +1 -13
  243. package/src/console/ui/overview/cost.ts +34 -38
  244. package/src/console/ui/overview/fixture.ts +21 -26
  245. package/src/console/ui/overview/golden.ts +4 -14
  246. package/src/console/ui/overview/index.ts +2 -9
  247. package/src/console/ui/overview/rank.test.ts +3 -10
  248. package/src/console/ui/overview/rank.ts +2 -7
  249. package/src/console/ui/overview/slo.test.ts +5 -9
  250. package/src/console/ui/overview/slo.ts +6 -23
  251. package/src/console/ui/overview/verdict.ts +3 -10
  252. package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
  253. package/src/console/ui/plugins/a11y.test.tsx +1 -2
  254. package/src/console/ui/plugins/fixture.ts +2 -4
  255. package/src/console/ui/plugins/group.test.ts +1 -3
  256. package/src/console/ui/plugins/group.ts +1 -6
  257. package/src/console/ui/plugins/index.ts +3 -13
  258. package/src/console/ui/plugins/search.ts +7 -19
  259. package/src/console/ui/runs/RunsA11yView.tsx +5 -20
  260. package/src/console/ui/runs/a11y.test.tsx +2 -5
  261. package/src/console/ui/runs/explain.ts +2 -6
  262. package/src/console/ui/runs/group.ts +3 -12
  263. package/src/console/ui/runs/histogram.test.ts +2 -11
  264. package/src/console/ui/runs/histogram.ts +1 -4
  265. package/src/console/ui/runs/index.ts +4 -18
  266. package/src/console/ui/runs/project.ts +2 -6
  267. package/src/console/ui/runs/query.test.ts +1 -3
  268. package/src/console/ui/runs/query.ts +12 -35
  269. package/src/console/ui/runs/search.ts +5 -19
  270. package/src/console/ui/runs/trace-link.test.ts +2 -6
  271. package/src/console/ui/runs/trace-link.ts +4 -16
  272. package/src/console/ui/runs/types.ts +1 -3
  273. package/src/console/ui/shell/App.tsx +2 -10
  274. package/src/console/ui/shell/client.ts +22 -115
  275. package/src/console/ui/shell/components/ui.tsx +1 -4
  276. package/src/console/ui/shell/layout/Shell.tsx +2 -4
  277. package/src/console/ui/shell/main.tsx +31 -96
  278. package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
  279. package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
  280. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
  281. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
  282. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
  283. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
  284. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
  285. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
  286. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
  287. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
  288. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
  289. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
  290. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
  291. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
  292. package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
  293. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
  294. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
  295. package/src/console/ui/shell/setup/Wizard.tsx +3 -5
  296. package/src/console/ui/shell/styles.css +1 -2
  297. package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
  298. package/src/console/ui/signals/a11y.test.tsx +2 -5
  299. package/src/console/ui/signals/confirmation.test.ts +1 -5
  300. package/src/console/ui/signals/confirmation.ts +2 -6
  301. package/src/console/ui/signals/dry-run.ts +1 -3
  302. package/src/console/ui/signals/durable.ts +1 -3
  303. package/src/console/ui/signals/findings.ts +1 -3
  304. package/src/console/ui/signals/group.test.ts +2 -8
  305. package/src/console/ui/signals/group.ts +2 -10
  306. package/src/console/ui/signals/index.ts +1 -4
  307. package/src/console/ui/signals/monitor.ts +2 -7
  308. package/src/console/ui/signals/schema-form.test.ts +3 -14
  309. package/src/console/ui/signals/schema-form.ts +1 -4
  310. package/src/console/ui/signals/search.ts +4 -13
  311. package/src/console/ui/store/StoreA11yView.tsx +3 -9
  312. package/src/console/ui/store/a11y.test.tsx +2 -5
  313. package/src/console/ui/store/confirmation.test.ts +1 -3
  314. package/src/console/ui/store/confirmation.ts +1 -4
  315. package/src/console/ui/store/dry-run.ts +2 -5
  316. package/src/console/ui/store/fixture.ts +1 -2
  317. package/src/console/ui/store/group.test.ts +1 -6
  318. package/src/console/ui/store/group.ts +1 -4
  319. package/src/console/ui/store/index.ts +1 -5
  320. package/src/console/ui/store/search.ts +2 -6
  321. package/src/console/ui/store/will-not-fire.ts +1 -2
  322. package/src/console/ui/traces/TracesA11yView.tsx +10 -29
  323. package/src/console/ui/traces/a11y.test.tsx +1 -2
  324. package/src/console/ui/traces/chain.test.ts +5 -19
  325. package/src/console/ui/traces/chain.ts +1 -3
  326. package/src/console/ui/traces/critical-path.test.ts +1 -3
  327. package/src/console/ui/traces/critical-path.ts +2 -6
  328. package/src/console/ui/traces/filter.test.ts +2 -6
  329. package/src/console/ui/traces/filter.ts +5 -13
  330. package/src/console/ui/traces/fold.test.ts +4 -12
  331. package/src/console/ui/traces/fold.ts +1 -3
  332. package/src/console/ui/traces/mini.ts +1 -3
  333. package/src/console/ui/traces/replay.test.ts +1 -3
  334. package/src/console/ui/traces/replay.ts +1 -3
  335. package/src/console/ui/traces/sampling.ts +1 -4
  336. package/src/console/ui/traces/search.ts +4 -17
  337. package/src/console/ui/traces/tier.ts +1 -3
  338. package/src/console/ui/vault/VaultA11yView.tsx +5 -17
  339. package/src/console/ui/vault/a11y.test.tsx +1 -2
  340. package/src/console/ui/vault/blast-radius.ts +1 -3
  341. package/src/console/ui/vault/confirmation.test.ts +1 -5
  342. package/src/console/ui/vault/confirmation.ts +1 -4
  343. package/src/console/ui/vault/dormant.test.ts +1 -4
  344. package/src/console/ui/vault/export-safe.test.ts +1 -5
  345. package/src/console/ui/vault/export-safe.ts +1 -4
  346. package/src/console/ui/vault/fixture.ts +3 -3
  347. package/src/console/ui/vault/group.ts +1 -2
  348. package/src/console/ui/vault/index.ts +2 -10
  349. package/src/console/ui/vault/search.ts +2 -6
  350. package/src/console/ui/vault/types.ts +1 -1
  351. package/src/console/xss.gate.test.ts +1 -3
  352. package/src/docker/compose.ts +112 -20
  353. package/src/docker/derive.ts +5 -19
  354. package/src/docker/docker.test.ts +15 -15
  355. package/src/docker/dockerfile.integration.test.ts +12 -21
  356. package/src/docker/helpers.ts +5 -4
  357. package/src/docker/index.ts +4 -11
  358. package/src/docker/pin.ts +1 -9
  359. package/src/docker/recipes/index.ts +5 -6
  360. package/src/docker/recipes/mailpit.ts +22 -0
  361. package/src/docker/recipes/postgres.ts +17 -6
  362. package/src/docker/recipes/redis.ts +6 -1
  363. package/src/docker/recipes/rustfs.ts +33 -0
  364. package/src/docker/stack-id.test.ts +33 -0
  365. package/src/docker/stack-id.ts +25 -13
  366. package/src/docker/stack.integration.test.ts +6 -21
  367. package/src/docker/types.ts +13 -4
  368. package/src/drivers/ai-anthropic.ts +5 -14
  369. package/src/drivers/ai-mock.ts +2 -5
  370. package/src/drivers/ai-openai-compatible.ts +4 -10
  371. package/src/drivers/ai-providers.test.ts +6 -13
  372. package/src/drivers/bun-native-completeness.test.ts +6 -15
  373. package/src/drivers/channel-console.ts +6 -7
  374. package/src/drivers/channel-fcm.ts +20 -30
  375. package/src/drivers/channel-resend.ts +1 -3
  376. package/src/drivers/channel-smtp.ts +2 -6
  377. package/src/drivers/channel-types.ts +2 -12
  378. package/src/drivers/channel-unifonic.ts +2 -6
  379. package/src/drivers/channel-wa-cloud.ts +2 -6
  380. package/src/drivers/channel-webpush.ts +21 -60
  381. package/src/drivers/conformance.test.ts +2 -10
  382. package/src/drivers/conformance.ts +8 -21
  383. package/src/drivers/fs.ts +2 -8
  384. package/src/drivers/index.ts +12 -56
  385. package/src/drivers/memory.ts +14 -41
  386. package/src/drivers/pgvector.ts +7 -11
  387. package/src/drivers/postgres.ts +7 -13
  388. package/src/drivers/redis.ts +13 -37
  389. package/src/drivers/s3.ts +5 -17
  390. package/src/drivers/signal-engine.ts +12 -49
  391. package/src/drivers/signal-memory.ts +2 -8
  392. package/src/drivers/signal-nats.ts +4 -9
  393. package/src/drivers/signal-postgres.ts +62 -129
  394. package/src/drivers/signal-redis.ts +7 -21
  395. package/src/drivers/signal-types.ts +1 -4
  396. package/src/drivers/sqlite.ts +3 -12
  397. package/src/drivers/types.ts +4 -23
  398. package/src/drivers/vault-env.ts +2 -6
  399. package/src/drivers/vault-infisical.ts +1 -5
  400. package/src/drivers/vault-managed.ts +1 -5
  401. package/src/drivers/vault-memory.ts +1 -5
  402. package/src/drivers/vault-openbao.ts +1 -5
  403. package/src/drivers/vault-sops.ts +10 -35
  404. package/src/drivers/vault-types.ts +1 -7
  405. package/src/elements/ai/declare.ts +4 -14
  406. package/src/elements/ai/eval.ts +2 -6
  407. package/src/elements/ai/pii.ts +1 -3
  408. package/src/elements/ai/runtime.ts +12 -50
  409. package/src/elements/ai/schema.ts +4 -15
  410. package/src/elements/ai.test.ts +13 -24
  411. package/src/elements/ai.ts +1 -5
  412. package/src/elements/channel/consent.ts +3 -12
  413. package/src/elements/channel/costs.ts +4 -15
  414. package/src/elements/channel/declare.ts +1 -4
  415. package/src/elements/channel/email-auth.ts +1 -4
  416. package/src/elements/channel/locale.ts +2 -10
  417. package/src/elements/channel/mask.ts +1 -3
  418. package/src/elements/channel/mime.ts +2 -12
  419. package/src/elements/channel/outcomes.test.ts +1 -5
  420. package/src/elements/channel/outcomes.ts +5 -15
  421. package/src/elements/channel/receipts.ts +2 -7
  422. package/src/elements/channel/runtime.ts +28 -74
  423. package/src/elements/channel/suppression.ts +8 -14
  424. package/src/elements/channel.test.ts +8 -31
  425. package/src/elements/channel.ts +3 -14
  426. package/src/elements/clock/actions.ts +6 -18
  427. package/src/elements/clock/declare.ts +1 -3
  428. package/src/elements/clock/dst.ts +1 -5
  429. package/src/elements/clock/durable.ts +4 -16
  430. package/src/elements/clock/health.ts +2 -7
  431. package/src/elements/clock/leader.ts +2 -9
  432. package/src/elements/clock/reconcile.ts +4 -15
  433. package/src/elements/clock/runtime.ts +2 -5
  434. package/src/elements/clock/schedule.ts +4 -20
  435. package/src/elements/clock.test.ts +2 -7
  436. package/src/elements/clock.ts +5 -23
  437. package/src/elements/gate/permissions.ts +1 -4
  438. package/src/elements/gate/runtime.ts +7 -28
  439. package/src/elements/gate.ts +1 -5
  440. package/src/elements/index.ts +9 -7
  441. package/src/elements/signal/declare.ts +2 -7
  442. package/src/elements/signal/reconcile.test.ts +1 -4
  443. package/src/elements/signal/runtime.ts +1 -3
  444. package/src/elements/signal.test.ts +3 -15
  445. package/src/elements/signal.ts +2 -8
  446. package/src/elements/store/cache.test.ts +46 -0
  447. package/src/elements/store/cache.ts +3 -11
  448. package/src/elements/store/classify.ts +5 -22
  449. package/src/elements/store/declare.ts +8 -17
  450. package/src/elements/store/domain-ddl.test.ts +86 -0
  451. package/src/elements/store/emit-drizzle.ts +363 -0
  452. package/src/elements/store/files-policy.test.ts +1 -5
  453. package/src/elements/store/files-policy.ts +4 -12
  454. package/src/elements/store/load-plugin-tables.ts +103 -0
  455. package/src/elements/store/missing-relation.test.ts +83 -0
  456. package/src/elements/store/missing-relation.ts +38 -0
  457. package/src/elements/store/replica.ts +1 -4
  458. package/src/elements/store/runtime.ts +25 -28
  459. package/src/elements/store/schema-decl.test.ts +227 -0
  460. package/src/elements/store/schema-decl.ts +516 -0
  461. package/src/elements/store/sql-condition.ts +11 -21
  462. package/src/elements/store/sql-session.test.ts +50 -0
  463. package/src/elements/store/sql-session.ts +60 -63
  464. package/src/elements/store/table.ts +35 -19
  465. package/src/elements/store.test.ts +17 -39
  466. package/src/elements/store.ts +37 -31
  467. package/src/elements/vault/chain.ts +34 -0
  468. package/src/elements/vault/declare.ts +22 -32
  469. package/src/elements/vault/fingerprint.ts +2 -7
  470. package/src/elements/vault/redact.ts +2 -6
  471. package/src/elements/vault/runtime.ts +18 -32
  472. package/src/elements/vault.test.ts +12 -28
  473. package/src/elements/vault.ts +8 -12
  474. package/src/index.ts +5 -2
  475. package/src/kernel/adopt-routes.ts +15 -29
  476. package/src/kernel/app.ts +34 -94
  477. package/src/kernel/auth-resolve.ts +2 -9
  478. package/src/kernel/boot-bind/ai.ts +1 -4
  479. package/src/kernel/boot-bind/channel.ts +2 -8
  480. package/src/kernel/boot-bind/clock.ts +2 -6
  481. package/src/kernel/boot-bind/gate.ts +2 -8
  482. package/src/kernel/boot-bind/runs.ts +1 -3
  483. package/src/kernel/boot-bind/signal.ts +3 -10
  484. package/src/kernel/boot-bind/store.test.ts +17 -17
  485. package/src/kernel/boot-bind/store.ts +44 -50
  486. package/src/kernel/boot-bind/vault.ts +2 -8
  487. package/src/kernel/boot.test.ts +4 -9
  488. package/src/kernel/boot.ts +29 -76
  489. package/src/kernel/budget.test.ts +1 -3
  490. package/src/kernel/capability.ts +3 -10
  491. package/src/kernel/dry-run.test.ts +1 -4
  492. package/src/kernel/dry-run.ts +3 -11
  493. package/src/kernel/effects.test.ts +1 -5
  494. package/src/kernel/effects.ts +4 -11
  495. package/src/kernel/errors.registry.test.ts +2 -8
  496. package/src/kernel/errors.ts +23 -32
  497. package/src/kernel/flow.test.ts +12 -25
  498. package/src/kernel/flow.ts +5 -25
  499. package/src/kernel/fx.test.ts +15 -44
  500. package/src/kernel/fx.ts +27 -79
  501. package/src/kernel/hook-timing.test.ts +3 -6
  502. package/src/kernel/hook-timing.ts +5 -14
  503. package/src/kernel/hooks.test.ts +10 -10
  504. package/src/kernel/hooks.ts +3 -12
  505. package/src/kernel/index.ts +4 -17
  506. package/src/kernel/journal.ts +7 -31
  507. package/src/kernel/on.ts +1 -6
  508. package/src/kernel/pipeline.test.ts +10 -19
  509. package/src/kernel/pipeline.ts +5 -17
  510. package/src/kernel/plug.ts +4 -11
  511. package/src/kernel/plugin/conflicts.test.ts +13 -25
  512. package/src/kernel/plugin/decorate.test.ts +8 -13
  513. package/src/kernel/plugin/scoping.test.ts +4 -11
  514. package/src/kernel/plugin.ts +48 -24
  515. package/src/kernel/registry.ts +80 -29
  516. package/src/kernel/router.test.ts +15 -13
  517. package/src/kernel/router.ts +9 -29
  518. package/src/kernel/routing-budget.test.ts +1 -3
  519. package/src/kernel/run-telemetry.ts +1 -3
  520. package/src/kernel/triggers.ts +4 -21
  521. package/src/manifest/diff.test.ts +26 -91
  522. package/src/manifest/diff.ts +95 -225
  523. package/src/manifest/index.ts +2 -9
  524. package/src/manifest/types.ts +29 -5
  525. package/src/manifest/undeclared.test.ts +4 -12
  526. package/src/manifest/undeclared.ts +1 -2
  527. package/src/manifest/validate.test.ts +2 -6
  528. package/src/manifest/validate.ts +4 -14
  529. package/src/mcp/authorization.ts +8 -27
  530. package/src/mcp/confirmation.ts +3 -10
  531. package/src/mcp/data.ts +2 -6
  532. package/src/mcp/docs-index.ts +4 -7
  533. package/src/mcp/docs-mcp.test.ts +3 -12
  534. package/src/mcp/docs-server.ts +7 -27
  535. package/src/mcp/docs-tools.ts +2 -6
  536. package/src/mcp/index.ts +1 -6
  537. package/src/mcp/injection.gate.test.ts +4 -18
  538. package/src/mcp/mcp.test.ts +18 -49
  539. package/src/mcp/protocol.ts +3 -10
  540. package/src/mcp/server.ts +11 -52
  541. package/src/mcp/session.ts +4 -14
  542. package/src/mcp/tools.ts +14 -50
  543. package/src/plugins/catalogue.test.ts +3 -7
  544. package/src/plugins/catalogue.ts +1 -3
  545. package/src/plugins/node-import-scan.ts +2 -5
  546. package/src/plugins/supply-chain.ts +5 -17
  547. package/src/release/exports.ts +3 -8
  548. package/src/release/measure.exports.test.ts +1 -3
  549. package/src/release/measure.ts +15 -43
  550. package/src/runs/bench.test.ts +1 -3
  551. package/src/runs/collect.ts +8 -25
  552. package/src/runs/drivers/clickhouse.ts +2 -9
  553. package/src/runs/drivers/files.ts +9 -31
  554. package/src/runs/drivers/memory.ts +5 -22
  555. package/src/runs/drivers/postgres.ts +8 -20
  556. package/src/runs/duckdb.ts +2 -8
  557. package/src/runs/index.ts +3 -14
  558. package/src/runs/outlier.ts +3 -10
  559. package/src/runs/parquet.ts +8 -26
  560. package/src/runs/privacy.ts +2 -8
  561. package/src/runs/runs.test.ts +3 -9
  562. package/src/runs/runtime.ts +7 -32
  563. package/src/runs/shred.ts +10 -29
  564. package/src/runs/types.ts +1 -4
  565. package/src/runtime/bun.ts +4 -15
  566. package/src/runtime/cold-start.bench.ts +1 -3
  567. package/src/runtime/dev-request-log.test.ts +1 -4
  568. package/src/runtime/dev-request-log.ts +1 -4
  569. package/src/runtime/index.ts +1 -6
  570. package/src/runtime/primitives.ts +5 -4
  571. package/src/runtime/security.ts +3 -13
  572. package/src/runtime/serve.test.ts +4 -7
  573. package/src/runtime/types.ts +1 -4
  574. package/src/runtime/web-standard.ts +3 -15
  575. package/src/term.test.ts +4 -6
  576. package/src/term.ts +49 -98
  577. package/src/test/create-test-app.test.ts +4 -14
  578. package/src/test/create-test-app.ts +13 -31
  579. package/src/test/provisions.integration.test.ts +3 -11
  580. package/src/upgrade/codemods.test.ts +25 -6
  581. package/src/upgrade/codemods.ts +116 -3
  582. package/src/validation/standard-schema.test.ts +2 -5
  583. package/src/validation/standard-schema.ts +13 -33
  584. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
@@ -7,11 +7,7 @@
7
7
 
8
8
  import type { SignalDecl } from "../elements/signal/declare.ts";
9
9
  import type { SignalDelivery } from "../manifest/types.ts";
10
- import {
11
- DryRunWriteIsolationError,
12
- setDryRunMessageId,
13
- withDryRun,
14
- } from "../kernel/dry-run.ts";
10
+ import { DryRunWriteIsolationError, setDryRunMessageId, withDryRun } from "../kernel/dry-run.ts";
15
11
  import type {
16
12
  DeadLetter,
17
13
  LiveHandler,
@@ -141,7 +137,10 @@ export function createPostgresSignalFake(options?: {
141
137
  };
142
138
  }
143
139
 
144
- const api: PostgresSignalSql & { killActiveTransaction(): void; _ensureReady: () => Promise<void> } = {
140
+ const api: PostgresSignalSql & {
141
+ killActiveTransaction(): void;
142
+ _ensureReady: () => Promise<void>;
143
+ } = {
145
144
  _ensureReady: ensureReady,
146
145
  killActiveTransaction() {
147
146
  active = null;
@@ -180,9 +179,7 @@ export function createPostgresSignalFake(options?: {
180
179
  );
181
180
  if (selMsg) {
182
181
  return state.messages
183
- .filter(
184
- (m) => m.signal === params[0] && m.status === params[1],
185
- )
182
+ .filter((m) => m.signal === params[0] && m.status === params[1])
186
183
  .map((m) => ({ ...m }));
187
184
  }
188
185
 
@@ -197,33 +194,24 @@ export function createPostgresSignalFake(options?: {
197
194
  }
198
195
 
199
196
  const selAll =
200
- /^SELECT\s+\*\s+FROM\s+oke_signal_messages\s+WHERE\s+signal\s*=\s*\?\s*$/i.exec(
201
- text,
202
- );
197
+ /^SELECT\s+\*\s+FROM\s+oke_signal_messages\s+WHERE\s+signal\s*=\s*\?\s*$/i.exec(text);
203
198
  if (selAll) {
204
- return state.messages
205
- .filter((m) => m.signal === params[0])
206
- .map((m) => ({ ...m }));
199
+ return state.messages.filter((m) => m.signal === params[0]).map((m) => ({ ...m }));
207
200
  }
208
201
 
209
202
  const selWrite =
210
- /^SELECT\s+value\s+FROM\s+oke_signal_writes\s+WHERE\s+key\s*=\s*\?\s*$/i.exec(
211
- text,
212
- );
203
+ /^SELECT\s+value\s+FROM\s+oke_signal_writes\s+WHERE\s+key\s*=\s*\?\s*$/i.exec(text);
213
204
  if (selWrite) {
214
205
  const v = state.writes.get(String(params[0]));
215
206
  if (v === undefined) return [];
216
207
  return [{ value: JSON.stringify(v) }];
217
208
  }
218
209
 
219
- const byId =
220
- /^SELECT\s+\*\s+FROM\s+oke_signal_messages\s+WHERE\s+id\s*=\s*\?\s*$/i.exec(
221
- text,
222
- );
210
+ const byId = /^SELECT\s+\*\s+FROM\s+oke_signal_messages\s+WHERE\s+id\s*=\s*\?\s*$/i.exec(
211
+ text,
212
+ );
223
213
  if (byId) {
224
- return state.messages
225
- .filter((m) => m.id === params[0])
226
- .map((m) => ({ ...m }));
214
+ return state.messages.filter((m) => m.id === params[0]).map((m) => ({ ...m }));
227
215
  }
228
216
 
229
217
  const selLive =
@@ -253,11 +241,7 @@ export function createPostgresSignalFake(options?: {
253
241
  let changes = 0;
254
242
  for (let i = state.messages.length - 1; i >= 0; i--) {
255
243
  const m = state.messages[i]!;
256
- if (
257
- m.id === params[0] &&
258
- m.signal === params[1] &&
259
- m.status === "dead"
260
- ) {
244
+ if (m.id === params[0] && m.signal === params[1] && m.status === "dead") {
261
245
  state.messages.splice(i, 1);
262
246
  changes += 1;
263
247
  }
@@ -266,9 +250,7 @@ export function createPostgresSignalFake(options?: {
266
250
  }
267
251
 
268
252
  const insertMsg =
269
- /^INSERT\s+INTO\s+oke_signal_messages\s*\(([^)]+)\)\s*VALUES\s*\(([^)]+)\)\s*$/i.exec(
270
- text,
271
- );
253
+ /^INSERT\s+INTO\s+oke_signal_messages\s*\(([^)]+)\)\s*VALUES\s*\(([^)]+)\)\s*$/i.exec(text);
272
254
  if (insertMsg) {
273
255
  const cols = insertMsg[1]!.split(",").map((c) => c.trim());
274
256
  const row: Record<string, unknown> = {};
@@ -300,10 +282,9 @@ export function createPostgresSignalFake(options?: {
300
282
  return { changes: 1 };
301
283
  }
302
284
 
303
- const upd =
304
- /^UPDATE\s+oke_signal_messages\s+SET\s+(.+)\s+WHERE\s+id\s*=\s*\?\s*$/i.exec(
305
- text,
306
- );
285
+ const upd = /^UPDATE\s+oke_signal_messages\s+SET\s+(.+)\s+WHERE\s+id\s*=\s*\?\s*$/i.exec(
286
+ text,
287
+ );
307
288
  if (upd) {
308
289
  const id = String(params[params.length - 1]);
309
290
  const row = state.messages.find((m) => m.id === id);
@@ -414,9 +395,7 @@ function rowToMessage(row: Record<string, unknown>): SignalMessage {
414
395
  *
415
396
  * @param options - Declarations / sql fake / clock
416
397
  */
417
- export async function openPostgresSignal(
418
- options: SignalOpenOptions,
419
- ): Promise<SignalBus> {
398
+ export async function openPostgresSignal(options: SignalOpenOptions): Promise<SignalBus> {
420
399
  const now = options.now ?? (() => Date.now());
421
400
  const signals = options.signals;
422
401
  const sql =
@@ -443,10 +422,7 @@ export async function openPostgresSignal(
443
422
  let unlisten: (() => void) | null = null;
444
423
  let draining: Promise<void> | null = null;
445
424
 
446
- function failureFromError(
447
- err: unknown,
448
- attempt: number,
449
- ): SignalFailureReason {
425
+ function failureFromError(err: unknown, attempt: number): SignalFailureReason {
450
426
  const code =
451
427
  err &&
452
428
  typeof err === "object" &&
@@ -539,10 +515,10 @@ export async function openPostgresSignal(
539
515
  finished = true;
540
516
  await sql.begin(async (tx) => {
541
517
  for (const [k, v] of stagedWrites) {
542
- await tx.exec(
543
- `INSERT INTO oke_signal_writes (key, value) VALUES (?, ?)`,
544
- [k, JSON.stringify(v)],
545
- );
518
+ await tx.exec(`INSERT INTO oke_signal_writes (key, value) VALUES (?, ?)`, [
519
+ k,
520
+ JSON.stringify(v),
521
+ ]);
546
522
  }
547
523
  for (const e of stagedEmits) {
548
524
  await insertEmit(tx, e.signal, e.payload);
@@ -594,10 +570,7 @@ export async function openPostgresSignal(
594
570
  };
595
571
  }
596
572
 
597
- async function live(
598
- signal: string,
599
- handler: LiveHandler,
600
- ): Promise<SignalUnsubscribe> {
573
+ async function live(signal: string, handler: LiveHandler): Promise<SignalUnsubscribe> {
601
574
  const decl = requireDecl(signal);
602
575
  if (decl.delivery !== "live") {
603
576
  throw new Error(`signal "${signal}" is not delivery: "live"`);
@@ -628,10 +601,10 @@ export async function openPostgresSignal(
628
601
  const msg = rowToMessage(row);
629
602
  try {
630
603
  await consumer.handler(msg);
631
- await sql.exec(
632
- `UPDATE oke_signal_messages SET status = ?, locked_by = NULL WHERE id = ?`,
633
- ["delivered", msg.id],
634
- );
604
+ await sql.exec(`UPDATE oke_signal_messages SET status = ?, locked_by = NULL WHERE id = ?`, [
605
+ "delivered",
606
+ msg.id,
607
+ ]);
635
608
  noteDelivered();
636
609
  } catch (err) {
637
610
  const failures = [...msg.failures, failureFromError(err, msg.attempts)];
@@ -689,38 +662,27 @@ export async function openPostgresSignal(
689
662
  for (const consumer of consumers) {
690
663
  const decl = signals.get(consumer.signal);
691
664
  if (decl?.delivery !== "broadcast") continue;
692
- const rows = await sql.query(
693
- `SELECT * FROM oke_signal_messages WHERE signal = ?`,
694
- [consumer.signal],
695
- );
665
+ const rows = await sql.query(`SELECT * FROM oke_signal_messages WHERE signal = ?`, [
666
+ consumer.signal,
667
+ ]);
696
668
  for (const row of rows) {
697
669
  if (row.status === "dead" || row.status === "delivered") continue;
698
670
  if (row.delivery !== "broadcast") continue;
699
671
  // Re-read delivered_to so concurrent drain (NOTIFY) cannot double-deliver.
700
- const fresh = await sql.query(
701
- `SELECT * FROM oke_signal_messages WHERE signal = ?`,
702
- [consumer.signal],
703
- );
672
+ const fresh = await sql.query(`SELECT * FROM oke_signal_messages WHERE signal = ?`, [
673
+ consumer.signal,
674
+ ]);
704
675
  const current = fresh.find((r) => r.id === row.id);
705
676
  if (!current || current.status === "delivered") continue;
706
- const deliveredTo = new Set(
707
- JSON.parse(String(current.delivered_to ?? "[]")) as string[],
708
- );
677
+ const deliveredTo = new Set(JSON.parse(String(current.delivered_to ?? "[]")) as string[]);
709
678
  if (deliveredTo.has(consumer.subscriberId)) continue;
710
679
  // Claim this subscriber slot before invoking the handler.
711
680
  deliveredTo.add(consumer.subscriberId);
712
681
  const subs = consumers.filter((c) => c.signal === consumer.signal);
713
- const status = subs.every((s) => deliveredTo.has(s.subscriberId))
714
- ? "delivered"
715
- : "pending";
682
+ const status = subs.every((s) => deliveredTo.has(s.subscriberId)) ? "delivered" : "pending";
716
683
  await sql.exec(
717
684
  `UPDATE oke_signal_messages SET delivered_to = ?, status = ?, attempts = ? WHERE id = ?`,
718
- [
719
- JSON.stringify([...deliveredTo]),
720
- status,
721
- Number(current.attempts) + 1,
722
- row.id,
723
- ],
685
+ [JSON.stringify([...deliveredTo]), status, Number(current.attempts) + 1, row.id],
724
686
  );
725
687
  progress = true;
726
688
  const msg = rowToMessage(current);
@@ -728,16 +690,13 @@ export async function openPostgresSignal(
728
690
  await consumer.handler(msg);
729
691
  noteDelivered();
730
692
  } catch (err) {
731
- const failures = [
732
- ...msg.failures,
733
- failureFromError(err, Number(current.attempts) + 1),
734
- ];
693
+ const failures = [...msg.failures, failureFromError(err, Number(current.attempts) + 1)];
735
694
  const key = `${consumer.signal}::${consumer.subscriberId}`;
736
695
  subscriberErrors.set(key, (subscriberErrors.get(key) ?? 0) + 1);
737
- await sql.exec(
738
- `UPDATE oke_signal_messages SET failures = ? WHERE id = ?`,
739
- [JSON.stringify(failures), row.id],
740
- );
696
+ await sql.exec(`UPDATE oke_signal_messages SET failures = ? WHERE id = ?`, [
697
+ JSON.stringify(failures),
698
+ row.id,
699
+ ]);
741
700
  }
742
701
  }
743
702
  }
@@ -805,10 +764,7 @@ export async function openPostgresSignal(
805
764
  async function statsFor(name: string): Promise<SignalStats | null> {
806
765
  const decl = signals.get(name);
807
766
  if (!decl) return null;
808
- const rows = await sql.query(
809
- `SELECT * FROM oke_signal_messages WHERE signal = ?`,
810
- [name],
811
- );
767
+ const rows = await sql.query(`SELECT * FROM oke_signal_messages WHERE signal = ?`, [name]);
812
768
  let pending = 0;
813
769
  let inflight = 0;
814
770
  let dead = 0;
@@ -843,9 +799,7 @@ export async function openPostgresSignal(
843
799
  for (const row of rows) {
844
800
  if (row.delivery !== "broadcast") continue;
845
801
  if (row.status === "dead" || row.status === "delivered") continue;
846
- const deliveredTo = new Set(
847
- JSON.parse(String(row.delivered_to ?? "[]")) as string[],
848
- );
802
+ const deliveredTo = new Set(JSON.parse(String(row.delivered_to ?? "[]")) as string[]);
849
803
  if (!deliveredTo.has(c.subscriberId)) lag += 1;
850
804
  }
851
805
  return {
@@ -864,8 +818,7 @@ export async function openPostgresSignal(
864
818
  delivered,
865
819
  retries: decl.retries,
866
820
  deadLetterEnabled: decl.deadLetter,
867
- outboxLagMs:
868
- oldestPending === null ? null : Math.max(0, now() - oldestPending),
821
+ outboxLagMs: oldestPending === null ? null : Math.max(0, now() - oldestPending),
869
822
  subscribers,
870
823
  connections: liveHandlers.get(name)?.size ?? 0,
871
824
  throughputPerSec: throughputPerSec(),
@@ -888,17 +841,13 @@ export async function openPostgresSignal(
888
841
  return out;
889
842
  }
890
843
 
891
- async function replay(
892
- options: SignalReplayOptions,
893
- ): Promise<SignalReplayResult> {
844
+ async function replay(options: SignalReplayOptions): Promise<SignalReplayResult> {
894
845
  requireDecl(options.signal);
895
846
  const rate = Math.max(1, options.ratePerSec);
896
847
  const intervalMs = Math.floor(1_000 / rate);
897
848
  const dead = await deadLetters(options.signal);
898
849
  const ids =
899
- options.messageIds && options.messageIds.length > 0
900
- ? new Set(options.messageIds)
901
- : null;
850
+ options.messageIds && options.messageIds.length > 0 ? new Set(options.messageIds) : null;
902
851
  const targets = dead.filter((m) => ids === null || ids.has(m.id));
903
852
  const results: SignalReplayResult["results"][number][] = [];
904
853
  const wouldHaveFired: SignalReplayResult["wouldHaveFired"][number][] = [];
@@ -910,18 +859,12 @@ export async function openPostgresSignal(
910
859
  await new Promise((r) => setTimeout(r, intervalMs));
911
860
  }
912
861
  const m = targets[i]!;
913
- const payload =
914
- options.payloads?.[m.id] !== undefined
915
- ? options.payloads[m.id]
916
- : m.payload;
917
- if (
918
- options.payloads?.[m.id] !== undefined &&
919
- !options.dryRun
920
- ) {
921
- await sql.exec(
922
- `UPDATE oke_signal_messages SET payload = ? WHERE id = ?`,
923
- [JSON.stringify(payload), m.id],
924
- );
862
+ const payload = options.payloads?.[m.id] !== undefined ? options.payloads[m.id] : m.payload;
863
+ if (options.payloads?.[m.id] !== undefined && !options.dryRun) {
864
+ await sql.exec(`UPDATE oke_signal_messages SET payload = ? WHERE id = ?`, [
865
+ JSON.stringify(payload),
866
+ m.id,
867
+ ]);
925
868
  }
926
869
 
927
870
  const handlers = consumers.filter((c) => {
@@ -983,10 +926,10 @@ export async function openPostgresSignal(
983
926
  lastErr = { code: reason.code, message: reason.message };
984
927
  if (!options.dryRun) {
985
928
  const failures = [...m.failures, reason];
986
- await sql.exec(
987
- `UPDATE oke_signal_messages SET failures = ? WHERE id = ?`,
988
- [JSON.stringify(failures), m.id],
989
- );
929
+ await sql.exec(`UPDATE oke_signal_messages SET failures = ? WHERE id = ?`, [
930
+ JSON.stringify(failures),
931
+ m.id,
932
+ ]);
990
933
  }
991
934
  }
992
935
  }
@@ -997,14 +940,9 @@ export async function openPostgresSignal(
997
940
  if (!options.dryRun) {
998
941
  if (options.subscriberId && m.delivery === "broadcast") {
999
942
  const row = (
1000
- await sql.query(
1001
- `SELECT * FROM oke_signal_messages WHERE id = ?`,
1002
- [m.id],
1003
- )
943
+ await sql.query(`SELECT * FROM oke_signal_messages WHERE id = ?`, [m.id])
1004
944
  )[0];
1005
- const deliveredTo = new Set(
1006
- JSON.parse(String(row?.delivered_to ?? "[]")) as string[],
1007
- );
945
+ const deliveredTo = new Set(JSON.parse(String(row?.delivered_to ?? "[]")) as string[]);
1008
946
  deliveredTo.delete(options.subscriberId);
1009
947
  await sql.exec(
1010
948
  `UPDATE oke_signal_messages SET status = 'pending', locked_by = NULL, attempts = 0, available_at = ?, delivered_to = ? WHERE id = ?`,
@@ -1033,9 +971,7 @@ export async function openPostgresSignal(
1033
971
  };
1034
972
  }
1035
973
 
1036
- async function discard(
1037
- options: SignalDiscardOptions,
1038
- ): Promise<{ readonly discarded: number }> {
974
+ async function discard(options: SignalDiscardOptions): Promise<{ readonly discarded: number }> {
1039
975
  let discarded = 0;
1040
976
  for (const id of options.messageIds) {
1041
977
  const result = await sql.exec(
@@ -1048,10 +984,7 @@ export async function openPostgresSignal(
1048
984
  }
1049
985
 
1050
986
  async function getWrite(key: string): Promise<unknown> {
1051
- const rows = await sql.query(
1052
- `SELECT value FROM oke_signal_writes WHERE key = ?`,
1053
- [key],
1054
- );
987
+ const rows = await sql.query(`SELECT value FROM oke_signal_writes WHERE key = ?`, [key]);
1055
988
  if (!rows[0]) return undefined;
1056
989
  return JSON.parse(String(rows[0].value));
1057
990
  }
@@ -27,15 +27,10 @@ import type {
27
27
  *
28
28
  * @param url - Optional Redis URL
29
29
  */
30
- export function createBunSignalRedisClient(
31
- url?: string,
32
- ): SignalRedisClientLike {
33
- const redis =
34
- url !== undefined ? new Bun.RedisClient(url) : Bun.redis;
30
+ export function createBunSignalRedisClient(url?: string): SignalRedisClientLike {
31
+ const redis = url !== undefined ? new Bun.RedisClient(url) : Bun.redis;
35
32
  /** Subscribe blocks a connection — keep a dedicated client. */
36
- let sub:
37
- | InstanceType<typeof Bun.RedisClient>
38
- | undefined;
33
+ let sub: InstanceType<typeof Bun.RedisClient> | undefined;
39
34
 
40
35
  function subClient(): InstanceType<typeof Bun.RedisClient> {
41
36
  if (!sub) {
@@ -127,16 +122,10 @@ export function parseXreadgroupReply(
127
122
  * In-memory redis-protocol fake for signal streams + pub/sub.
128
123
  */
129
124
  export function createSignalRedisFake(): SignalRedisClientLike & {
130
- readonly streams: Map<
131
- string,
132
- Array<{ id: string; fields: Record<string, string> }>
133
- >;
125
+ readonly streams: Map<string, Array<{ id: string; fields: Record<string, string> }>>;
134
126
  readonly published: Array<{ channel: string; message: string }>;
135
127
  } {
136
- const streams = new Map<
137
- string,
138
- Array<{ id: string; fields: Record<string, string> }>
139
- >();
128
+ const streams = new Map<string, Array<{ id: string; fields: Record<string, string> }>>();
140
129
  const groups = new Map<string, Set<string>>();
141
130
  const claimed = new Map<string, Set<string>>();
142
131
  const subs = new Map<string, Set<(message: string) => void>>();
@@ -210,9 +199,7 @@ export function createSignalRedisFake(): SignalRedisClientLike & {
210
199
  *
211
200
  * @param options - Declarations / redis client / durable outbox path
212
201
  */
213
- export async function openRedisSignal(
214
- options: SignalOpenOptions,
215
- ): Promise<SignalBus> {
202
+ export async function openRedisSignal(options: SignalOpenOptions): Promise<SignalBus> {
216
203
  // Same DI shape as postgres/redis/s3: inject a client in tests; production
217
204
  // binds Bun.redis (Streams via send until Bun ships typed xadd).
218
205
  const redis = options.redis ?? createBunSignalRedisClient();
@@ -255,8 +242,7 @@ export async function openRedisSignal(
255
242
  rollback: () => tx.rollback(),
256
243
  };
257
244
  },
258
- subscribe: (signal, subscriberId, handler) =>
259
- outbox.subscribe(signal, subscriberId, handler),
245
+ subscribe: (signal, subscriberId, handler) => outbox.subscribe(signal, subscriberId, handler),
260
246
  live: (signal, handler) => outbox.live(signal, handler),
261
247
  drain: () => outbox.drain(),
262
248
  deadLetters: (s) => outbox.deadLetters(s),
@@ -229,10 +229,7 @@ export interface SignalRedisClientLike {
229
229
  ): Promise<Array<{ id: string; fields: Record<string, string> }>>;
230
230
  xack(key: string, group: string, id: string): Promise<number>;
231
231
  publish(channel: string, message: string): Promise<number>;
232
- subscribe(
233
- channel: string,
234
- listener: (message: string) => void,
235
- ): Promise<() => void>;
232
+ subscribe(channel: string, listener: (message: string) => void): Promise<() => void>;
236
233
  }
237
234
 
238
235
  /** Minimal NATS / JetStream surface. */
@@ -3,26 +3,17 @@
3
3
  */
4
4
 
5
5
  import { Database, type SQLQueryBindings } from "bun:sqlite";
6
- import type {
7
- SqlConnectOptions,
8
- SqlConnection,
9
- SqlDriver,
10
- SqlRow,
11
- } from "./types.ts";
6
+ import type { SqlConnectOptions, SqlConnection, SqlDriver, SqlRow } from "./types.ts";
12
7
 
13
8
  /**
14
9
  * Open a bun:sqlite connection implementing {@link SqlConnection}.
15
10
  *
16
11
  * @param options - URL (`:memory:` / path) or injected Database
17
12
  */
18
- export async function connectSqlite(
19
- options: SqlConnectOptions = {},
20
- ): Promise<SqlConnection> {
13
+ export async function connectSqlite(options: SqlConnectOptions = {}): Promise<SqlConnection> {
21
14
  const role = options.role ?? "primary";
22
15
  const db =
23
- options.client instanceof Database
24
- ? options.client
25
- : new Database(options.url ?? ":memory:");
16
+ options.client instanceof Database ? options.client : new Database(options.url ?? ":memory:");
26
17
 
27
18
  function asBindings(params: readonly unknown[]): SQLQueryBindings[] {
28
19
  return params as SQLQueryBindings[];
@@ -8,14 +8,7 @@
8
8
  import type { ColumnClassification, StoreFacet } from "../manifest/types.ts";
9
9
 
10
10
  /** Protocol ids for store drivers in scope. */
11
- export type StoreDriverId =
12
- | "sqlite"
13
- | "postgres"
14
- | "memory"
15
- | "redis"
16
- | "fs"
17
- | "s3"
18
- | "pgvector";
11
+ export type StoreDriverId = "sqlite" | "postgres" | "memory" | "redis" | "fs" | "s3" | "pgvector";
19
12
 
20
13
  /** Facets a driver may serve. */
21
14
  export type DriverFacet = StoreFacet;
@@ -112,11 +105,7 @@ export interface KvNamespace {
112
105
  * @param keys - KEYS table entries (unprefixed)
113
106
  * @param args - ARGV table entries
114
107
  */
115
- eval<T = unknown>(
116
- script: string,
117
- keys: readonly string[],
118
- args?: readonly string[],
119
- ): Promise<T>;
108
+ eval<T = unknown>(script: string, keys: readonly string[], args?: readonly string[]): Promise<T>;
120
109
  /**
121
110
  * List keys in this namespace, optionally by prefix (Console Store browser).
122
111
  *
@@ -151,11 +140,7 @@ export interface KvClientLike {
151
140
  * @param numkeys - KEYS count
152
141
  * @param keysAndArgs - KEYS then ARGV
153
142
  */
154
- eval?(
155
- script: string,
156
- numkeys: number,
157
- ...keysAndArgs: string[]
158
- ): Promise<unknown>;
143
+ eval?(script: string, numkeys: number, ...keysAndArgs: string[]): Promise<unknown>;
159
144
  /**
160
145
  * Raw command send (Bun.RedisClient). Used when `eval` is absent.
161
146
  *
@@ -271,11 +256,7 @@ export interface IndexStore {
271
256
  * @param vector - Embedding
272
257
  * @param meta - Optional metadata
273
258
  */
274
- upsert(
275
- id: string,
276
- vector: readonly number[],
277
- meta?: Record<string, unknown>,
278
- ): Promise<void>;
259
+ upsert(id: string, vector: readonly number[], meta?: Record<string, unknown>): Promise<void>;
279
260
  /**
280
261
  * Similarity search (cosine).
281
262
  *
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `env` vault driver — resolves secrets from the process environment
3
- * and/or a dotenv file path (`.env.local`, `.env.stack`, …).
3
+ * and/or a dotenv file path (`.env.local`, `.env.docker`, …).
4
4
  *
5
5
  * Resolution order is owned by {@link createVaultRuntime}; this driver only
6
6
  * exposes one layer of the chain. Layer identity (`process.env` vs file)
@@ -8,11 +8,7 @@
8
8
  */
9
9
 
10
10
  import { parseDotenv, formatDotenv } from "./vault-dotenv-parse.ts";
11
- import type {
12
- VaultBag,
13
- VaultDriver,
14
- VaultOpenOptions,
15
- } from "./vault-types.ts";
11
+ import type { VaultBag, VaultDriver, VaultOpenOptions } from "./vault-types.ts";
16
12
 
17
13
  /**
18
14
  * Create an env vault driver.
@@ -2,11 +2,7 @@
2
2
  * `infisical` vault driver — Infisical REST secrets API (protocol-shaped).
3
3
  */
4
4
 
5
- import type {
6
- VaultBag,
7
- VaultDriver,
8
- VaultOpenOptions,
9
- } from "./vault-types.ts";
5
+ import type { VaultBag, VaultDriver, VaultOpenOptions } from "./vault-types.ts";
10
6
 
11
7
  /**
12
8
  * Infisical secrets driver.
@@ -4,11 +4,7 @@
4
4
  * Values arrive as an injected map (or env); OKE never invents a vendor client.
5
5
  */
6
6
 
7
- import type {
8
- VaultBag,
9
- VaultDriver,
10
- VaultOpenOptions,
11
- } from "./vault-types.ts";
7
+ import type { VaultBag, VaultDriver, VaultOpenOptions } from "./vault-types.ts";
12
8
 
13
9
  /**
14
10
  * Managed / platform vault driver.
@@ -2,11 +2,7 @@
2
2
  * In-memory vault driver — tests and deterministic harnesses.
3
3
  */
4
4
 
5
- import type {
6
- VaultBag,
7
- VaultDriver,
8
- VaultOpenOptions,
9
- } from "./vault-types.ts";
5
+ import type { VaultBag, VaultDriver, VaultOpenOptions } from "./vault-types.ts";
10
6
 
11
7
  /**
12
8
  * Create a memory vault driver seeded from `options.secrets`.
@@ -4,11 +4,7 @@
4
4
  * Protocol-named; image/vendor choice lives in `images`.
5
5
  */
6
6
 
7
- import type {
8
- VaultBag,
9
- VaultDriver,
10
- VaultOpenOptions,
11
- } from "./vault-types.ts";
7
+ import type { VaultBag, VaultDriver, VaultOpenOptions } from "./vault-types.ts";
12
8
 
13
9
  /**
14
10
  * OpenBao / Vault KV driver.