okengine 0.2.6 → 0.3.2

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 (681) hide show
  1. package/AGENTS.md +33 -30
  2. package/README.md +74 -340
  3. package/{spec/manifest.v1.schema.json → manifest.v1.schema.json} +40 -9
  4. package/package.json +47 -44
  5. package/site/content/docs/ai/llms-txt.mdx +54 -0
  6. package/site/content/docs/ai/mcp.mdx +123 -0
  7. package/site/content/docs/ai/meta.json +5 -0
  8. package/site/content/docs/ai/skills.mdx +53 -0
  9. package/site/content/docs/console/access.mdx +29 -0
  10. package/site/content/docs/console/ai.mdx +35 -0
  11. package/site/content/docs/console/architecture.mdx +35 -0
  12. package/site/content/docs/console/channels.mdx +37 -0
  13. package/site/content/docs/console/clock.mdx +31 -0
  14. package/site/content/docs/console/flows.mdx +31 -0
  15. package/site/content/docs/console/gates.mdx +35 -0
  16. package/site/content/docs/console/manifest-diff.mdx +34 -0
  17. package/site/content/docs/console/meta.json +23 -0
  18. package/site/content/docs/console/overview.mdx +40 -0
  19. package/site/content/docs/console/plugins.mdx +41 -0
  20. package/site/content/docs/console/privacy.mdx +32 -0
  21. package/site/content/docs/console/runs.mdx +40 -0
  22. package/site/content/docs/console/signals.mdx +31 -0
  23. package/site/content/docs/console/store.mdx +32 -0
  24. package/site/content/docs/console/tenancy.mdx +32 -0
  25. package/site/content/docs/console/traces.mdx +34 -0
  26. package/site/content/docs/console/vault.mdx +37 -0
  27. package/site/content/docs/elements/ai.mdx +180 -0
  28. package/site/content/docs/elements/channel.mdx +167 -0
  29. package/site/content/docs/elements/clock.mdx +182 -0
  30. package/site/content/docs/elements/flow.mdx +288 -0
  31. package/site/content/docs/elements/gate.mdx +171 -0
  32. package/site/content/docs/elements/meta.json +5 -0
  33. package/site/content/docs/elements/signal.mdx +171 -0
  34. package/site/content/docs/elements/store.mdx +320 -0
  35. package/site/content/docs/elements/vault.mdx +263 -0
  36. package/site/content/docs/get-started/basic-usage.mdx +124 -0
  37. package/site/content/docs/get-started/comparison.mdx +65 -0
  38. package/site/content/docs/get-started/installation.mdx +113 -0
  39. package/site/content/docs/get-started/introduction.mdx +123 -0
  40. package/site/content/docs/get-started/meta.json +5 -0
  41. package/site/content/docs/index.mdx +63 -0
  42. package/site/content/docs/meta.json +5 -0
  43. package/site/content/docs/plugins/compression.mdx +60 -0
  44. package/site/content/docs/plugins/cors.mdx +92 -0
  45. package/site/content/docs/plugins/csrf.mdx +96 -0
  46. package/site/content/docs/plugins/ip-allowlist.mdx +92 -0
  47. package/site/content/docs/plugins/maintenance-mode.mdx +101 -0
  48. package/site/content/docs/plugins/meta.json +15 -0
  49. package/site/content/docs/plugins/security-headers.mdx +136 -0
  50. package/site/content/docs/reference/cli.md +101 -0
  51. package/site/content/docs/reference/configuration.mdx +159 -0
  52. package/site/content/docs/reference/environment-variables.mdx +87 -0
  53. package/site/content/docs/reference/errors.mdx +80 -0
  54. package/site/content/docs/reference/fx.mdx +117 -0
  55. package/site/content/docs/reference/meta.json +5 -0
  56. package/site/content/docs/reference/plugins.mdx +249 -0
  57. package/site/content/docs/reference/security.md +63 -0
  58. package/src/auth/api-keys.ts +2 -5
  59. package/src/auth/attenuation.ts +2 -6
  60. package/src/auth/auth.test.ts +56 -31
  61. package/src/auth/invoke-as.ts +1 -3
  62. package/src/auth/operator.ts +8 -26
  63. package/src/auth/planes.ts +2 -7
  64. package/src/auth/plugin.ts +4 -7
  65. package/src/auth/roles.ts +1 -5
  66. package/src/auth/sessions.ts +10 -39
  67. package/src/cli/args.ts +1 -5
  68. package/src/cli/ask-dev-mode.ts +40 -0
  69. package/src/cli/build.ts +1 -2
  70. package/src/cli/client-add.test.ts +8 -15
  71. package/src/cli/client-add.ts +5 -14
  72. package/src/cli/completion.test.ts +1 -5
  73. package/src/cli/completion.ts +4 -17
  74. package/src/cli/db-auto-push.test.ts +64 -0
  75. package/src/cli/db-auto-push.ts +72 -0
  76. package/src/cli/db.test.ts +189 -0
  77. package/src/cli/db.ts +456 -0
  78. package/src/cli/dev-app-runner.ts +2 -8
  79. package/src/cli/dev-db-push.test.ts +193 -0
  80. package/src/cli/dev-mode.test.ts +45 -0
  81. package/src/cli/dev-mode.ts +78 -0
  82. package/src/cli/dev-schema-sync.test.ts +66 -0
  83. package/src/cli/dev-schema-sync.ts +139 -0
  84. package/src/cli/dev.test.ts +264 -15
  85. package/src/cli/dev.ts +355 -139
  86. package/src/cli/doc-staleness.test.ts +69 -0
  87. package/src/cli/docker-cli.test.ts +27 -8
  88. package/src/cli/docker.ts +11 -3
  89. package/src/cli/doctor-diff.test.ts +1 -5
  90. package/src/cli/doctor-diff.ts +17 -46
  91. package/src/cli/doctor-pii.ts +2 -7
  92. package/src/cli/doctor.test.ts +26 -4
  93. package/src/cli/doctor.ts +35 -11
  94. package/src/cli/drizzle-env.test.ts +67 -0
  95. package/src/cli/drizzle-env.ts +78 -0
  96. package/src/cli/ensure-drizzle-config.ts +50 -0
  97. package/src/cli/eval.ts +4 -14
  98. package/src/cli/gates-list.ts +1 -4
  99. package/src/cli/hero-meta.test.ts +17 -19
  100. package/src/cli/hero-meta.ts +20 -30
  101. package/src/cli/images.ts +3 -8
  102. package/src/cli/index.ts +11 -2
  103. package/src/cli/load-config.images.test.ts +14 -14
  104. package/src/cli/load-config.ts +47 -47
  105. package/src/cli/mcp-from-console.ts +1 -4
  106. package/src/cli/mode.ts +65 -0
  107. package/src/cli/openbao-bootstrap.test.ts +147 -0
  108. package/src/cli/openbao-bootstrap.ts +280 -0
  109. package/src/cli/openbao-restart.integration.test.ts +136 -0
  110. package/src/cli/ports.test.ts +7 -14
  111. package/src/cli/ports.ts +7 -5
  112. package/src/cli/privacy-erase.ts +1 -3
  113. package/src/cli/registry.ts +75 -25
  114. package/src/cli/resolve-dev-sql-env.test.ts +48 -0
  115. package/src/cli/resolve-dev-sql-env.ts +42 -0
  116. package/src/cli/schema.ts +3 -10
  117. package/src/cli/stack.ts +8 -10
  118. package/src/cli/start.ts +4 -15
  119. package/src/cli/upgrade.ts +1 -4
  120. package/src/cli/vault-cmd.ts +63 -0
  121. package/src/client/budget-entry.ts +1 -6
  122. package/src/client/create.test.ts +6 -12
  123. package/src/client/create.ts +2 -8
  124. package/src/client/errors.ts +1 -4
  125. package/src/client/index.ts +1 -6
  126. package/src/client/notes-contract.test.ts +4 -13
  127. package/src/client/transport.ts +9 -30
  128. package/src/client/types.ts +15 -30
  129. package/src/compiler/aot.test.ts +2 -9
  130. package/src/compiler/aot.ts +1 -4
  131. package/src/compiler/differential.test.ts +3 -11
  132. package/src/compiler/dynamic.ts +1 -4
  133. package/src/compiler/effects-infer.ts +8 -34
  134. package/src/compiler/emit.ts +1 -3
  135. package/src/compiler/extract.test.ts +136 -30
  136. package/src/compiler/extract.ts +485 -157
  137. package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
  138. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
  139. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
  140. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
  141. package/src/compiler/fixtures/skyport.expected.json +24 -83
  142. package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
  143. package/src/compiler/http-parse.ts +2 -9
  144. package/src/compiler/index.ts +1 -5
  145. package/src/compiler/response.ts +16 -7
  146. package/src/compiler/sucrose.ts +11 -31
  147. package/src/config/define-config.test.ts +55 -34
  148. package/src/config/index.ts +177 -46
  149. package/src/config/resolve-driver.test.ts +28 -17
  150. package/src/console/budget.test.ts +1 -4
  151. package/src/console/index.ts +1 -4
  152. package/src/console/server/access.test.ts +15 -43
  153. package/src/console/server/access.ts +19 -49
  154. package/src/console/server/ai.test.ts +3 -11
  155. package/src/console/server/ai.ts +23 -46
  156. package/src/console/server/app.ts +16 -45
  157. package/src/console/server/auth-rate.test.ts +4 -12
  158. package/src/console/server/bind.ts +1 -5
  159. package/src/console/server/channels.test.ts +2 -6
  160. package/src/console/server/channels.ts +10 -35
  161. package/src/console/server/claim.ts +2 -8
  162. package/src/console/server/clock.test.ts +2 -6
  163. package/src/console/server/clock.ts +8 -26
  164. package/src/console/server/console.test.ts +1 -3
  165. package/src/console/server/diff.test.ts +5 -17
  166. package/src/console/server/diff.ts +10 -31
  167. package/src/console/server/dry-run.audit.test.ts +2 -8
  168. package/src/console/server/flows.ts +64 -233
  169. package/src/console/server/gates.test.ts +14 -50
  170. package/src/console/server/gates.ts +13 -48
  171. package/src/console/server/index.ts +2 -9
  172. package/src/console/server/live.ts +3 -12
  173. package/src/console/server/operator-db.test.ts +4 -15
  174. package/src/console/server/operator-db.ts +13 -32
  175. package/src/console/server/plugin.ts +50 -53
  176. package/src/console/server/plugins.test.ts +2 -6
  177. package/src/console/server/plugins.ts +17 -56
  178. package/src/console/server/runs-pii.ts +2 -7
  179. package/src/console/server/security.gate.test.ts +18 -40
  180. package/src/console/server/serve.ts +10 -25
  181. package/src/console/server/signals.test.ts +1 -3
  182. package/src/console/server/signals.ts +17 -40
  183. package/src/console/server/state.ts +21 -59
  184. package/src/console/server/store.test.ts +20 -22
  185. package/src/console/server/store.ts +31 -76
  186. package/src/console/server/vault.test.ts +12 -29
  187. package/src/console/server/vault.ts +44 -66
  188. package/src/console/ui/access/AccessA11yView.tsx +6 -21
  189. package/src/console/ui/access/a11y.test.tsx +3 -12
  190. package/src/console/ui/access/acknowledgement.test.ts +1 -4
  191. package/src/console/ui/access/acknowledgement.ts +1 -3
  192. package/src/console/ui/access/blast-radius.ts +1 -3
  193. package/src/console/ui/access/confirmation.test.ts +1 -5
  194. package/src/console/ui/access/confirmation.ts +1 -4
  195. package/src/console/ui/access/fixture.ts +1 -5
  196. package/src/console/ui/access/grantable.test.ts +1 -3
  197. package/src/console/ui/access/grantable.ts +2 -7
  198. package/src/console/ui/access/index.ts +2 -9
  199. package/src/console/ui/access/provenance.test.ts +1 -3
  200. package/src/console/ui/access/provenance.ts +2 -6
  201. package/src/console/ui/access/search.test.ts +1 -5
  202. package/src/console/ui/access/search.ts +2 -6
  203. package/src/console/ui/ai/AiA11yView.tsx +6 -17
  204. package/src/console/ui/ai/a11y.test.tsx +2 -5
  205. package/src/console/ui/ai/fixture.ts +2 -7
  206. package/src/console/ui/ai/format.ts +1 -3
  207. package/src/console/ui/ai/group.test.ts +1 -3
  208. package/src/console/ui/ai/group.ts +4 -12
  209. package/src/console/ui/ai/index.ts +2 -9
  210. package/src/console/ui/ai/promotion.test.ts +2 -7
  211. package/src/console/ui/ai/promotion.ts +4 -13
  212. package/src/console/ui/ai/search.test.ts +2 -11
  213. package/src/console/ui/ai/search.ts +3 -13
  214. package/src/console/ui/ai/types.ts +1 -8
  215. package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
  216. package/src/console/ui/architecture/a11y.test.tsx +1 -2
  217. package/src/console/ui/architecture/declared.ts +1 -5
  218. package/src/console/ui/architecture/index.ts +7 -35
  219. package/src/console/ui/architecture/layout.ts +1 -3
  220. package/src/console/ui/architecture/pathologies.ts +10 -19
  221. package/src/console/ui/architecture/search.ts +6 -15
  222. package/src/console/ui/architecture/traffic.ts +4 -14
  223. package/src/console/ui/architecture/types.ts +2 -10
  224. package/src/console/ui/architecture/view.test.ts +7 -19
  225. package/src/console/ui/architecture/view.ts +9 -36
  226. package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
  227. package/src/console/ui/channels/a11y.test.tsx +1 -2
  228. package/src/console/ui/channels/confirmation.test.ts +1 -4
  229. package/src/console/ui/channels/confirmation.ts +1 -4
  230. package/src/console/ui/channels/findings.ts +1 -5
  231. package/src/console/ui/channels/index.ts +2 -8
  232. package/src/console/ui/channels/locale.test.ts +1 -3
  233. package/src/console/ui/channels/locale.ts +2 -8
  234. package/src/console/ui/channels/search.ts +4 -13
  235. package/src/console/ui/channels/taxonomy.ts +1 -3
  236. package/src/console/ui/clock/ClockA11yView.tsx +9 -26
  237. package/src/console/ui/clock/a11y.test.tsx +2 -5
  238. package/src/console/ui/clock/confirmation.test.ts +1 -3
  239. package/src/console/ui/clock/confirmation.ts +1 -4
  240. package/src/console/ui/clock/findings.ts +1 -4
  241. package/src/console/ui/clock/health.ts +2 -7
  242. package/src/console/ui/clock/index.ts +2 -10
  243. package/src/console/ui/clock/search.test.ts +1 -3
  244. package/src/console/ui/clock/search.ts +2 -6
  245. package/src/console/ui/clock/timeline.test.ts +1 -3
  246. package/src/console/ui/clock/waiting-on.test.ts +1 -5
  247. package/src/console/ui/clock/waiting-on.ts +2 -7
  248. package/src/console/ui/diff/DiffA11yView.tsx +8 -17
  249. package/src/console/ui/diff/a11y.test.tsx +2 -5
  250. package/src/console/ui/diff/group.test.ts +3 -13
  251. package/src/console/ui/diff/group.ts +2 -8
  252. package/src/console/ui/diff/index.ts +2 -8
  253. package/src/console/ui/diff/search.test.ts +1 -5
  254. package/src/console/ui/diff/search.ts +4 -16
  255. package/src/console/ui/diff/summary.ts +1 -2
  256. package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
  257. package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
  258. package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
  259. package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
  260. package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
  261. package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
  262. package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
  263. package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
  264. package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
  265. package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
  266. package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
  267. package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
  268. package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
  269. package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
  270. package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
  271. package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
  272. package/src/console/ui/dist/index.html +1 -1
  273. package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
  274. package/src/console/ui/flows/a11y.test.tsx +2 -8
  275. package/src/console/ui/flows/buffer.test.ts +3 -11
  276. package/src/console/ui/flows/buffer.ts +4 -11
  277. package/src/console/ui/flows/confirmation.ts +1 -3
  278. package/src/console/ui/flows/contract.test.ts +3 -7
  279. package/src/console/ui/flows/contract.ts +12 -36
  280. package/src/console/ui/flows/graph.test.ts +3 -11
  281. package/src/console/ui/flows/graph.ts +5 -15
  282. package/src/console/ui/flows/index.ts +1 -6
  283. package/src/console/ui/flows/save-as-test.ts +1 -3
  284. package/src/console/ui/flows/search.ts +8 -25
  285. package/src/console/ui/flows/tiers.ts +2 -9
  286. package/src/console/ui/gates/GatesA11yView.tsx +4 -13
  287. package/src/console/ui/gates/a11y.test.tsx +2 -5
  288. package/src/console/ui/gates/audit.ts +1 -3
  289. package/src/console/ui/gates/denial.test.ts +1 -3
  290. package/src/console/ui/gates/denial.ts +4 -12
  291. package/src/console/ui/gates/findings.ts +1 -3
  292. package/src/console/ui/gates/group.test.ts +3 -3
  293. package/src/console/ui/gates/group.ts +3 -11
  294. package/src/console/ui/gates/index.ts +2 -10
  295. package/src/console/ui/gates/search.ts +3 -10
  296. package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
  297. package/src/console/ui/overview/a11y.test.tsx +1 -2
  298. package/src/console/ui/overview/busiest.ts +1 -3
  299. package/src/console/ui/overview/compose.ts +1 -13
  300. package/src/console/ui/overview/cost.ts +34 -38
  301. package/src/console/ui/overview/fixture.ts +21 -26
  302. package/src/console/ui/overview/golden.ts +4 -14
  303. package/src/console/ui/overview/index.ts +2 -9
  304. package/src/console/ui/overview/rank.test.ts +3 -10
  305. package/src/console/ui/overview/rank.ts +2 -7
  306. package/src/console/ui/overview/slo.test.ts +5 -9
  307. package/src/console/ui/overview/slo.ts +6 -23
  308. package/src/console/ui/overview/verdict.ts +3 -10
  309. package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
  310. package/src/console/ui/plugins/a11y.test.tsx +1 -2
  311. package/src/console/ui/plugins/fixture.ts +2 -4
  312. package/src/console/ui/plugins/group.test.ts +1 -3
  313. package/src/console/ui/plugins/group.ts +1 -6
  314. package/src/console/ui/plugins/index.ts +3 -13
  315. package/src/console/ui/plugins/search.ts +7 -19
  316. package/src/console/ui/runs/RunsA11yView.tsx +5 -20
  317. package/src/console/ui/runs/a11y.test.tsx +2 -5
  318. package/src/console/ui/runs/explain.ts +2 -6
  319. package/src/console/ui/runs/group.ts +3 -12
  320. package/src/console/ui/runs/histogram.test.ts +2 -11
  321. package/src/console/ui/runs/histogram.ts +1 -4
  322. package/src/console/ui/runs/index.ts +4 -18
  323. package/src/console/ui/runs/project.ts +2 -6
  324. package/src/console/ui/runs/query.test.ts +1 -3
  325. package/src/console/ui/runs/query.ts +12 -35
  326. package/src/console/ui/runs/search.ts +5 -19
  327. package/src/console/ui/runs/trace-link.test.ts +2 -6
  328. package/src/console/ui/runs/trace-link.ts +4 -16
  329. package/src/console/ui/runs/types.ts +1 -3
  330. package/src/console/ui/shell/App.tsx +2 -10
  331. package/src/console/ui/shell/client.ts +22 -115
  332. package/src/console/ui/shell/components/ui.tsx +1 -4
  333. package/src/console/ui/shell/layout/Shell.tsx +2 -4
  334. package/src/console/ui/shell/main.tsx +31 -96
  335. package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
  336. package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
  337. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
  338. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
  339. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
  340. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
  341. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
  342. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
  343. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
  344. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
  345. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
  346. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
  347. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
  348. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
  349. package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
  350. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
  351. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
  352. package/src/console/ui/shell/setup/Wizard.tsx +3 -5
  353. package/src/console/ui/shell/styles.css +1 -2
  354. package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
  355. package/src/console/ui/signals/a11y.test.tsx +2 -5
  356. package/src/console/ui/signals/confirmation.test.ts +1 -5
  357. package/src/console/ui/signals/confirmation.ts +2 -6
  358. package/src/console/ui/signals/dry-run.ts +1 -3
  359. package/src/console/ui/signals/durable.ts +1 -3
  360. package/src/console/ui/signals/findings.ts +1 -3
  361. package/src/console/ui/signals/group.test.ts +2 -8
  362. package/src/console/ui/signals/group.ts +2 -10
  363. package/src/console/ui/signals/index.ts +1 -4
  364. package/src/console/ui/signals/monitor.ts +2 -7
  365. package/src/console/ui/signals/schema-form.test.ts +3 -14
  366. package/src/console/ui/signals/schema-form.ts +1 -4
  367. package/src/console/ui/signals/search.ts +4 -13
  368. package/src/console/ui/store/StoreA11yView.tsx +3 -9
  369. package/src/console/ui/store/a11y.test.tsx +2 -5
  370. package/src/console/ui/store/confirmation.test.ts +1 -3
  371. package/src/console/ui/store/confirmation.ts +1 -4
  372. package/src/console/ui/store/dry-run.ts +2 -5
  373. package/src/console/ui/store/fixture.ts +1 -2
  374. package/src/console/ui/store/group.test.ts +1 -6
  375. package/src/console/ui/store/group.ts +1 -4
  376. package/src/console/ui/store/index.ts +1 -5
  377. package/src/console/ui/store/search.ts +2 -6
  378. package/src/console/ui/store/will-not-fire.ts +1 -2
  379. package/src/console/ui/traces/TracesA11yView.tsx +10 -29
  380. package/src/console/ui/traces/a11y.test.tsx +1 -2
  381. package/src/console/ui/traces/chain.test.ts +5 -19
  382. package/src/console/ui/traces/chain.ts +1 -3
  383. package/src/console/ui/traces/critical-path.test.ts +1 -3
  384. package/src/console/ui/traces/critical-path.ts +2 -6
  385. package/src/console/ui/traces/filter.test.ts +2 -6
  386. package/src/console/ui/traces/filter.ts +5 -13
  387. package/src/console/ui/traces/fold.test.ts +4 -12
  388. package/src/console/ui/traces/fold.ts +1 -3
  389. package/src/console/ui/traces/mini.ts +1 -3
  390. package/src/console/ui/traces/replay.test.ts +1 -3
  391. package/src/console/ui/traces/replay.ts +1 -3
  392. package/src/console/ui/traces/sampling.ts +1 -4
  393. package/src/console/ui/traces/search.ts +4 -17
  394. package/src/console/ui/traces/tier.ts +1 -3
  395. package/src/console/ui/vault/VaultA11yView.tsx +5 -17
  396. package/src/console/ui/vault/a11y.test.tsx +1 -2
  397. package/src/console/ui/vault/blast-radius.ts +1 -3
  398. package/src/console/ui/vault/confirmation.test.ts +1 -5
  399. package/src/console/ui/vault/confirmation.ts +1 -4
  400. package/src/console/ui/vault/dormant.test.ts +1 -4
  401. package/src/console/ui/vault/export-safe.test.ts +1 -5
  402. package/src/console/ui/vault/export-safe.ts +1 -4
  403. package/src/console/ui/vault/fixture.ts +3 -3
  404. package/src/console/ui/vault/group.ts +1 -2
  405. package/src/console/ui/vault/index.ts +2 -10
  406. package/src/console/ui/vault/search.ts +2 -6
  407. package/src/console/ui/vault/types.ts +1 -1
  408. package/src/console/xss.gate.test.ts +1 -3
  409. package/src/docker/compose.ts +215 -27
  410. package/src/docker/derive.ts +6 -14
  411. package/src/docker/docker.test.ts +118 -15
  412. package/src/docker/dockerfile.integration.test.ts +12 -21
  413. package/src/docker/helpers.ts +5 -4
  414. package/src/docker/index.ts +9 -6
  415. package/src/docker/pin.ts +1 -9
  416. package/src/docker/recipes/index.ts +6 -6
  417. package/src/docker/recipes/mailpit.ts +22 -0
  418. package/src/docker/recipes/openbao.ts +47 -0
  419. package/src/docker/recipes/postgres.ts +17 -6
  420. package/src/docker/recipes/redis.ts +11 -2
  421. package/src/docker/recipes/rustfs.ts +32 -0
  422. package/src/docker/stack-id.test.ts +73 -5
  423. package/src/docker/stack-id.ts +124 -33
  424. package/src/docker/stack.integration.test.ts +6 -21
  425. package/src/docker/stack.ts +36 -4
  426. package/src/docker/types.ts +16 -4
  427. package/src/docs-origin.ts +4 -4
  428. package/src/drivers/ai-anthropic.ts +5 -14
  429. package/src/drivers/ai-mock.ts +2 -5
  430. package/src/drivers/ai-openai-compatible.ts +4 -10
  431. package/src/drivers/ai-providers.test.ts +6 -13
  432. package/src/drivers/bun-native-completeness.test.ts +6 -15
  433. package/src/drivers/channel-console.ts +6 -7
  434. package/src/drivers/channel-fcm.ts +20 -30
  435. package/src/drivers/channel-resend.ts +1 -3
  436. package/src/drivers/channel-smtp.ts +2 -6
  437. package/src/drivers/channel-types.ts +2 -12
  438. package/src/drivers/channel-unifonic.ts +2 -6
  439. package/src/drivers/channel-wa-cloud.ts +2 -6
  440. package/src/drivers/channel-webpush.ts +21 -60
  441. package/src/drivers/conformance.test.ts +2 -10
  442. package/src/drivers/conformance.ts +8 -21
  443. package/src/drivers/drizzle-dialect.test.ts +20 -0
  444. package/src/drivers/drizzle-dialect.ts +37 -0
  445. package/src/drivers/fs.ts +2 -8
  446. package/src/drivers/index.ts +12 -57
  447. package/src/drivers/memory.ts +287 -75
  448. package/src/drivers/pgvector.ts +7 -11
  449. package/src/drivers/postgres.ts +7 -13
  450. package/src/drivers/redis.ts +13 -37
  451. package/src/drivers/s3.ts +15 -18
  452. package/src/drivers/signal-engine.ts +12 -49
  453. package/src/drivers/signal-memory.ts +2 -8
  454. package/src/drivers/signal-nats.ts +4 -9
  455. package/src/drivers/signal-postgres.ts +62 -129
  456. package/src/drivers/signal-redis.ts +7 -21
  457. package/src/drivers/signal-types.ts +1 -4
  458. package/src/drivers/sqlite.ts +3 -12
  459. package/src/drivers/types.ts +4 -23
  460. package/src/drivers/vault-driver-removal.test.ts +55 -0
  461. package/src/drivers/vault-env.ts +2 -6
  462. package/src/drivers/vault-infisical.ts +1 -5
  463. package/src/drivers/vault-managed.ts +1 -5
  464. package/src/drivers/vault-memory.ts +1 -5
  465. package/src/drivers/vault-openbao.test.ts +97 -0
  466. package/src/drivers/vault-openbao.ts +103 -40
  467. package/src/drivers/vault-types.ts +3 -16
  468. package/src/elements/ai/declare.ts +4 -14
  469. package/src/elements/ai/eval.ts +2 -6
  470. package/src/elements/ai/pii.ts +1 -3
  471. package/src/elements/ai/runtime.ts +12 -50
  472. package/src/elements/ai/schema.ts +4 -15
  473. package/src/elements/ai.test.ts +13 -24
  474. package/src/elements/ai.ts +1 -5
  475. package/src/elements/channel/consent.ts +3 -12
  476. package/src/elements/channel/costs.ts +4 -15
  477. package/src/elements/channel/declare.ts +1 -4
  478. package/src/elements/channel/email-auth.ts +1 -4
  479. package/src/elements/channel/locale.ts +2 -10
  480. package/src/elements/channel/mask.ts +1 -3
  481. package/src/elements/channel/mime.ts +2 -12
  482. package/src/elements/channel/outcomes.test.ts +1 -5
  483. package/src/elements/channel/outcomes.ts +5 -15
  484. package/src/elements/channel/receipts.ts +2 -7
  485. package/src/elements/channel/runtime.ts +28 -74
  486. package/src/elements/channel/suppression.ts +8 -14
  487. package/src/elements/channel.test.ts +8 -31
  488. package/src/elements/channel.ts +3 -14
  489. package/src/elements/clock/actions.ts +6 -18
  490. package/src/elements/clock/declare.ts +1 -3
  491. package/src/elements/clock/dst.ts +1 -5
  492. package/src/elements/clock/durable.ts +4 -16
  493. package/src/elements/clock/health.ts +2 -7
  494. package/src/elements/clock/leader.ts +2 -9
  495. package/src/elements/clock/reconcile.ts +4 -15
  496. package/src/elements/clock/runtime.ts +2 -5
  497. package/src/elements/clock/schedule.ts +4 -20
  498. package/src/elements/clock.test.ts +2 -7
  499. package/src/elements/clock.ts +5 -23
  500. package/src/elements/gate/permissions.ts +1 -4
  501. package/src/elements/gate/runtime.ts +7 -28
  502. package/src/elements/gate.ts +1 -5
  503. package/src/elements/index.ts +9 -7
  504. package/src/elements/signal/declare.ts +2 -7
  505. package/src/elements/signal/reconcile.test.ts +1 -4
  506. package/src/elements/signal/runtime.ts +1 -3
  507. package/src/elements/signal.test.ts +3 -15
  508. package/src/elements/signal.ts +2 -8
  509. package/src/elements/store/cache.test.ts +46 -0
  510. package/src/elements/store/cache.ts +3 -11
  511. package/src/elements/store/classify.ts +5 -22
  512. package/src/elements/store/declare.ts +11 -17
  513. package/src/elements/store/domain-ddl.test.ts +86 -0
  514. package/src/elements/store/emit-drizzle.ts +363 -0
  515. package/src/elements/store/files-policy.test.ts +1 -5
  516. package/src/elements/store/files-policy.ts +4 -12
  517. package/src/elements/store/load-plugin-tables.ts +103 -0
  518. package/src/elements/store/missing-relation.test.ts +83 -0
  519. package/src/elements/store/missing-relation.ts +38 -0
  520. package/src/elements/store/replica.ts +1 -4
  521. package/src/elements/store/resource-list-docs.fixture.ts +56 -0
  522. package/src/elements/store/resource-list-docs.test.ts +79 -0
  523. package/src/elements/store/resource.test.ts +253 -0
  524. package/src/elements/store/resource.ts +786 -0
  525. package/src/elements/store/runtime.ts +25 -28
  526. package/src/elements/store/schema-decl.test.ts +227 -0
  527. package/src/elements/store/schema-decl.ts +516 -0
  528. package/src/elements/store/sql-condition.test.ts +132 -0
  529. package/src/elements/store/sql-condition.ts +293 -65
  530. package/src/elements/store/sql-session.test.ts +135 -0
  531. package/src/elements/store/sql-session.ts +241 -84
  532. package/src/elements/store/table.ts +69 -23
  533. package/src/elements/store.test.ts +17 -39
  534. package/src/elements/store.ts +53 -31
  535. package/src/elements/vault/chain.ts +34 -0
  536. package/src/elements/vault/declare.ts +22 -32
  537. package/src/elements/vault/fingerprint.ts +2 -7
  538. package/src/elements/vault/redact.ts +2 -6
  539. package/src/elements/vault/runtime.ts +19 -33
  540. package/src/elements/vault.test.ts +12 -55
  541. package/src/elements/vault.ts +9 -13
  542. package/src/index.ts +5 -2
  543. package/src/kernel/adopt-routes.ts +15 -29
  544. package/src/kernel/app.ts +92 -118
  545. package/src/kernel/auth-resolve.ts +2 -9
  546. package/src/kernel/boot-bind/ai.ts +1 -4
  547. package/src/kernel/boot-bind/channel.test.ts +60 -0
  548. package/src/kernel/boot-bind/channel.ts +61 -5
  549. package/src/kernel/boot-bind/clock.ts +2 -6
  550. package/src/kernel/boot-bind/gate.ts +2 -8
  551. package/src/kernel/boot-bind/runs.ts +1 -3
  552. package/src/kernel/boot-bind/signal.ts +3 -10
  553. package/src/kernel/boot-bind/store.test.ts +27 -18
  554. package/src/kernel/boot-bind/store.ts +93 -52
  555. package/src/kernel/boot-bind/vault.ts +2 -8
  556. package/src/kernel/boot.test.ts +4 -10
  557. package/src/kernel/boot.ts +30 -77
  558. package/src/kernel/budget.test.ts +1 -3
  559. package/src/kernel/capability.ts +3 -10
  560. package/src/kernel/dry-run.test.ts +1 -4
  561. package/src/kernel/dry-run.ts +3 -11
  562. package/src/kernel/edge.test.ts +68 -0
  563. package/src/kernel/effects.test.ts +1 -5
  564. package/src/kernel/effects.ts +4 -11
  565. package/src/kernel/errors.registry.test.ts +2 -8
  566. package/src/kernel/errors.ts +23 -32
  567. package/src/kernel/flow.test.ts +12 -25
  568. package/src/kernel/flow.ts +13 -25
  569. package/src/kernel/fx.test.ts +31 -40
  570. package/src/kernel/fx.ts +135 -90
  571. package/src/kernel/hook-timing.test.ts +3 -6
  572. package/src/kernel/hook-timing.ts +5 -14
  573. package/src/kernel/hooks.test.ts +43 -10
  574. package/src/kernel/hooks.ts +25 -12
  575. package/src/kernel/index.ts +11 -17
  576. package/src/kernel/journal.ts +7 -31
  577. package/src/kernel/on.ts +45 -9
  578. package/src/kernel/pipeline.test.ts +10 -19
  579. package/src/kernel/pipeline.ts +5 -17
  580. package/src/kernel/plug.ts +4 -11
  581. package/src/kernel/plugin/conflicts.test.ts +13 -25
  582. package/src/kernel/plugin/decorate.test.ts +8 -13
  583. package/src/kernel/plugin/scoping.test.ts +4 -11
  584. package/src/kernel/plugin.ts +81 -27
  585. package/src/kernel/registry-isolation.test.ts +74 -0
  586. package/src/kernel/registry.ts +102 -30
  587. package/src/kernel/router.test.ts +15 -13
  588. package/src/kernel/router.ts +9 -29
  589. package/src/kernel/routing-budget.test.ts +1 -3
  590. package/src/kernel/run-telemetry.ts +1 -3
  591. package/src/kernel/triggers.ts +63 -21
  592. package/src/manifest/diff.test.ts +26 -91
  593. package/src/manifest/diff.ts +95 -225
  594. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  595. package/src/manifest/fixtures/skyport.manifest.json +1 -1
  596. package/src/manifest/index.ts +3 -10
  597. package/src/manifest/types.ts +30 -6
  598. package/src/manifest/undeclared.test.ts +4 -12
  599. package/src/manifest/undeclared.ts +1 -2
  600. package/src/manifest/validate.test.ts +2 -6
  601. package/src/manifest/validate.ts +5 -15
  602. package/src/mcp/authorization.ts +8 -27
  603. package/src/mcp/confirmation.ts +3 -10
  604. package/src/mcp/data.ts +2 -6
  605. package/src/mcp/docs-index.ts +4 -7
  606. package/src/mcp/docs-mcp.test.ts +3 -12
  607. package/src/mcp/docs-server.ts +7 -27
  608. package/src/mcp/docs-tools.ts +2 -6
  609. package/src/mcp/index.ts +1 -6
  610. package/src/mcp/injection.gate.test.ts +4 -18
  611. package/src/mcp/mcp.test.ts +18 -49
  612. package/src/mcp/protocol.ts +3 -10
  613. package/src/mcp/server.ts +11 -52
  614. package/src/mcp/session.ts +4 -14
  615. package/src/mcp/tools.ts +14 -50
  616. package/src/plugins/catalogue.test.ts +3 -7
  617. package/src/plugins/catalogue.ts +1 -3
  618. package/src/plugins/compression.test.ts +127 -0
  619. package/src/plugins/compression.ts +94 -0
  620. package/src/plugins/config-source.test.ts +204 -0
  621. package/src/plugins/config-source.ts +209 -0
  622. package/src/plugins/cors.test.ts +138 -0
  623. package/src/plugins/cors.ts +129 -0
  624. package/src/plugins/csrf.test.ts +102 -0
  625. package/src/plugins/csrf.ts +86 -0
  626. package/src/plugins/headers.ts +54 -0
  627. package/src/plugins/index.ts +26 -0
  628. package/src/plugins/ip-allowlist.test.ts +105 -0
  629. package/src/plugins/ip-allowlist.ts +76 -0
  630. package/src/plugins/maintenance-mode.test.ts +91 -0
  631. package/src/plugins/maintenance-mode.ts +85 -0
  632. package/src/plugins/node-import-scan.ts +2 -5
  633. package/src/plugins/security-headers.test.ts +243 -0
  634. package/src/plugins/security-headers.ts +255 -0
  635. package/src/plugins/supply-chain.ts +5 -17
  636. package/src/release/exports.ts +3 -8
  637. package/src/release/measure.exports.test.ts +1 -3
  638. package/src/release/measure.ts +16 -45
  639. package/src/runs/bench.test.ts +1 -3
  640. package/src/runs/collect.ts +8 -25
  641. package/src/runs/drivers/clickhouse.ts +2 -9
  642. package/src/runs/drivers/files.ts +9 -31
  643. package/src/runs/drivers/memory.ts +5 -22
  644. package/src/runs/drivers/postgres.ts +8 -20
  645. package/src/runs/duckdb.ts +2 -8
  646. package/src/runs/index.ts +3 -14
  647. package/src/runs/outlier.ts +3 -10
  648. package/src/runs/parquet.ts +8 -26
  649. package/src/runs/privacy.ts +2 -8
  650. package/src/runs/runs.test.ts +3 -9
  651. package/src/runs/runtime.ts +7 -32
  652. package/src/runs/shred.ts +10 -29
  653. package/src/runs/types.ts +1 -4
  654. package/src/runtime/bun.ts +4 -15
  655. package/src/runtime/cold-start.bench.ts +1 -3
  656. package/src/runtime/dev-request-log.test.ts +1 -4
  657. package/src/runtime/dev-request-log.ts +1 -4
  658. package/src/runtime/index.ts +1 -6
  659. package/src/runtime/primitives.ts +5 -4
  660. package/src/runtime/security.ts +3 -13
  661. package/src/runtime/serve.test.ts +4 -7
  662. package/src/runtime/types.ts +1 -4
  663. package/src/runtime/web-standard.ts +3 -15
  664. package/src/term.test.ts +4 -6
  665. package/src/term.ts +49 -98
  666. package/src/test/create-test-app.test.ts +4 -14
  667. package/src/test/create-test-app.ts +27 -33
  668. package/src/test/provisions.integration.test.ts +3 -11
  669. package/src/upgrade/codemods.test.ts +25 -6
  670. package/src/upgrade/codemods.ts +116 -3
  671. package/src/validation/standard-schema.test.ts +2 -5
  672. package/src/validation/standard-schema.ts +13 -33
  673. package/docs/spec/console.md +0 -739
  674. package/docs/spec/example.md +0 -1196
  675. package/docs/spec/four-applications.md +0 -1195
  676. package/docs/spec/unified-theory.md +0 -489
  677. package/src/cli/doc-drift.test.ts +0 -146
  678. package/src/cli/doc-drift.ts +0 -430
  679. package/src/cli/doctor-diff-examples.ts +0 -92
  680. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
  681. package/src/drivers/vault-sops.ts +0 -271
@@ -6,19 +6,11 @@
6
6
  * Agent denials are recorded on the denial ledger — not errors.
7
7
  */
8
8
 
9
- import type {
10
- AiDriver,
11
- AiModelClient,
12
- } from "../../drivers/ai-types.ts";
9
+ import type { AiDriver, AiModelClient } from "../../drivers/ai-types.ts";
13
10
  import type { IndexStore } from "../../drivers/types.ts";
14
11
  import type { GatePolicyContext } from "../gate/declare.ts";
15
12
  import type { GateRuntime } from "../gate/runtime.ts";
16
- import type {
17
- AiAgentDecl,
18
- AiEmbedDecl,
19
- AiModelDecl,
20
- AiPromptDecl,
21
- } from "./declare.ts";
13
+ import type { AiAgentDecl, AiEmbedDecl, AiModelDecl, AiPromptDecl } from "./declare.ts";
22
14
  import {
23
15
  AiSchemaValidationError,
24
16
  coerceModelObject,
@@ -37,14 +29,7 @@ export interface AgentDenial {
37
29
 
38
30
  /** Effect on a tool flow — same vocabulary as Flows / Traces. */
39
31
  export interface AgentToolEffect {
40
- readonly kind:
41
- | "read"
42
- | "write"
43
- | "emit"
44
- | "send"
45
- | "ask"
46
- | "secret"
47
- | "call";
32
+ readonly kind: "read" | "write" | "emit" | "send" | "ask" | "secret" | "call";
48
33
  readonly resource: string;
49
34
  }
50
35
 
@@ -122,10 +107,7 @@ export interface CreateAiRuntimeOptions {
122
107
  * @param name - Flow name
123
108
  * @param input - Tool input
124
109
  */
125
- readonly callFlow?: (
126
- name: string,
127
- input: unknown,
128
- ) => Promise<unknown>;
110
+ readonly callFlow?: (name: string, input: unknown) => Promise<unknown>;
129
111
  /**
130
112
  * Resolve gates required for a tool flow.
131
113
  *
@@ -186,11 +168,7 @@ export interface AiRuntime {
186
168
  * @param input - Prompt input
187
169
  * @param opts - via / allowPii
188
170
  */
189
- ask(
190
- prompt: string,
191
- input?: unknown,
192
- opts?: AiAskOptions,
193
- ): Promise<Record<string, unknown>>;
171
+ ask(prompt: string, input?: unknown, opts?: AiAskOptions): Promise<Record<string, unknown>>;
194
172
  /**
195
173
  * Run a bounded agent; tool calls that fail gates are denied + recorded.
196
174
  *
@@ -215,11 +193,7 @@ export interface AiRuntime {
215
193
  * @param id - Document id
216
194
  * @param text - Text to embed
217
195
  */
218
- embed(
219
- embed: string,
220
- id: string,
221
- text: string,
222
- ): Promise<void>;
196
+ embed(embed: string, id: string, text: string): Promise<void>;
223
197
  }
224
198
 
225
199
  /**
@@ -227,9 +201,7 @@ export interface AiRuntime {
227
201
  *
228
202
  * @param options - Declarations + clients + gates
229
203
  */
230
- export function createAiRuntime(
231
- options: CreateAiRuntimeOptions = {},
232
- ): AiRuntime {
204
+ export function createAiRuntime(options: CreateAiRuntimeOptions = {}): AiRuntime {
233
205
  const prompts = new Map<string, AiPromptDecl>();
234
206
  for (const p of options.prompts ?? []) prompts.set(p.name, p);
235
207
  const agents = new Map<string, AiAgentDecl>();
@@ -239,9 +211,7 @@ export function createAiRuntime(
239
211
  const models = new Map<string, AiModelDecl>();
240
212
  for (const m of options.models ?? []) models.set(m.name, m);
241
213
 
242
- const clients = new Map<string, AiModelClient>(
243
- Object.entries(options.clients ?? {}),
244
- );
214
+ const clients = new Map<string, AiModelClient>(Object.entries(options.clients ?? {}));
245
215
  const denials: AgentDenial[] = [];
246
216
  const agentRuns: AgentRunRecord[] = [];
247
217
  const journal: AiJournalEntry[] = [];
@@ -297,9 +267,7 @@ export function createAiRuntime(
297
267
  }
298
268
  }
299
269
 
300
- const via =
301
- opts?.via ??
302
- (decl.model ? [decl.model] : [...models.keys()].slice(0, 1));
270
+ const via = opts?.via ?? (decl.model ? [decl.model] : [...models.keys()].slice(0, 1));
303
271
  const attempts: AiFallbackAttempt[] = [];
304
272
  let lastError: string | undefined;
305
273
  let lastSchema: AiSchemaMismatch | undefined;
@@ -314,10 +282,7 @@ export function createAiRuntime(
314
282
  messages: [
315
283
  {
316
284
  role: "user",
317
- content:
318
- typeof input === "string"
319
- ? input
320
- : JSON.stringify(input ?? {}),
285
+ content: typeof input === "string" ? input : JSON.stringify(input ?? {}),
321
286
  },
322
287
  ],
323
288
  responseFormat: decl.out,
@@ -325,8 +290,7 @@ export function createAiRuntime(
325
290
  const attemptCost = result.usage?.cost ?? 0;
326
291
  totalCost += attemptCost;
327
292
  const latencyMs = Math.max(0, now() - attemptStart);
328
- const raw =
329
- result.raw !== undefined ? result.raw : result.text;
293
+ const raw = result.raw !== undefined ? result.raw : result.text;
330
294
 
331
295
  try {
332
296
  const output = decl.out
@@ -409,9 +373,7 @@ export function createAiRuntime(
409
373
  at: now(),
410
374
  });
411
375
  }
412
- throw new Error(
413
- `ai: all models failed for prompt "${prompt}": ${lastError}`,
414
- );
376
+ throw new Error(`ai: all models failed for prompt "${prompt}": ${lastError}`);
415
377
  },
416
378
 
417
379
  async runAgent(agent, runOpts) {
@@ -63,9 +63,7 @@ export class AiSchemaValidationError extends Error {
63
63
  *
64
64
  * @param schema - Declared `out`
65
65
  */
66
- export function isObjectSchema(
67
- schema: unknown,
68
- ): schema is {
66
+ export function isObjectSchema(schema: unknown): schema is {
69
67
  readonly properties?: Record<string, unknown>;
70
68
  readonly required?: readonly string[];
71
69
  readonly type?: string;
@@ -114,15 +112,10 @@ export function matchOutSchema(
114
112
  if (!isObjectSchema(schema)) return null;
115
113
 
116
114
  const props = (schema.properties ?? {}) as Record<string, unknown>;
117
- const required = Array.isArray(schema.required)
118
- ? [...schema.required]
119
- : Object.keys(props);
115
+ const required = Array.isArray(schema.required) ? [...schema.required] : Object.keys(props);
120
116
  const keys = new Set(Object.keys(value));
121
117
  const missing = required.filter((k) => !keys.has(k));
122
- const extra =
123
- Object.keys(props).length > 0
124
- ? [...keys].filter((k) => !(k in props))
125
- : [];
118
+ const extra = Object.keys(props).length > 0 ? [...keys].filter((k) => !(k in props)) : [];
126
119
  const typeMismatches: string[] = [];
127
120
  for (const [key, propSchema] of Object.entries(props)) {
128
121
  if (!(key in value)) continue;
@@ -140,11 +133,7 @@ export function matchOutSchema(
140
133
  }
141
134
  }
142
135
 
143
- if (
144
- missing.length === 0 &&
145
- extra.length === 0 &&
146
- typeMismatches.length === 0
147
- ) {
136
+ if (missing.length === 0 && extra.length === 0 && typeMismatches.length === 0) {
148
137
  return null;
149
138
  }
150
139
  return { missing, extra, typeMismatches };
@@ -9,11 +9,7 @@
9
9
  */
10
10
 
11
11
  import { describe, expect, test } from "bun:test";
12
- import {
13
- createMockAiDriver,
14
- memoryIndexDriver,
15
- mockAiDriver,
16
- } from "../drivers/index.ts";
12
+ import { createMockAiDriver, memoryIndexDriver, mockAiDriver } from "../drivers/index.ts";
17
13
  import { createFx } from "../kernel/fx.ts";
18
14
  import {
19
15
  ai,
@@ -43,10 +39,7 @@ describe("ai declaration", () => {
43
39
  maxSteps: 6,
44
40
  model: smart,
45
41
  });
46
- expect(agent.tools).toEqual([
47
- "bookings.getBooking",
48
- "bookings.refundBooking",
49
- ]);
42
+ expect(agent.tools).toEqual(["bookings.getBooking", "bookings.refundBooking"]);
50
43
 
51
44
  const embed = ai.embed("docs", {
52
45
  model: smart,
@@ -70,8 +63,7 @@ describe("agent gate denial is recorded", () => {
70
63
  const runtime = createAiRuntime({
71
64
  agents: [refund],
72
65
  gates,
73
- gatesForFlow: (name) =>
74
- name === "bookings.refundBooking" ? ["member"] : [],
66
+ gatesForFlow: (name) => (name === "bookings.refundBooking" ? ["member"] : []),
75
67
  callFlow: async (name) => {
76
68
  called.push(name);
77
69
  return { ok: true };
@@ -95,9 +87,7 @@ describe("agent gate denial is recorded", () => {
95
87
  const member = gate.policy("member", ({ auth }) => !!auth.verified);
96
88
  const gates = createGateRuntime({ gates: [member] });
97
89
  const runtime = createAiRuntime({
98
- agents: [
99
- ai.agent("support", { tools: ["bookings.getBooking"], maxSteps: 1 }),
100
- ],
90
+ agents: [ai.agent("support", { tools: ["bookings.getBooking"], maxSteps: 1 })],
101
91
  gates,
102
92
  gatesForFlow: () => ["member"],
103
93
  callFlow: async () => ({ booking: "B1" }),
@@ -270,10 +260,7 @@ describe("embeddings into store.index", () => {
270
260
  indexes: { kb: index },
271
261
  });
272
262
  await runtime.embed("docs", "doc-1", "hello world");
273
- const hits = await index.search(
274
- (await client.embed!({ input: "hello world" })).vectors[0]!,
275
- 1,
276
- );
263
+ const hits = await index.search((await client.embed!({ input: "hello world" })).vectors[0]!, 1);
277
264
  expect(hits[0]?.id).toBe("doc-1");
278
265
  });
279
266
  });
@@ -300,9 +287,13 @@ describe("model fallback chain", () => {
300
287
  clients: { smart: failing, fast: ok },
301
288
  });
302
289
 
303
- const out = await runtime.ask("ticket-triage", { subject: "x" }, {
304
- via: ["smart", "fast"],
305
- });
290
+ const out = await runtime.ask(
291
+ "ticket-triage",
292
+ { subject: "x" },
293
+ {
294
+ via: ["smart", "fast"],
295
+ },
296
+ );
306
297
  expect(out.urgency).toBe("low");
307
298
  const entry = runtime.journal[0]!;
308
299
  expect(entry.attempts).toHaveLength(2);
@@ -343,9 +334,7 @@ describe("schema-validation is its own class", () => {
343
334
  }
344
335
  expect(thrown).toBeInstanceOf(AiSchemaValidationError);
345
336
  expect((thrown as AiSchemaValidationError).code).toBe("AiSchemaInvalid");
346
- expect((thrown as AiSchemaValidationError).mismatch.missing).toContain(
347
- "team",
348
- );
337
+ expect((thrown as AiSchemaValidationError).mismatch.missing).toContain("team");
349
338
  expect(runtime.journal[0]!.outcome).toBe("schema_invalid");
350
339
  expect(runtime.journal[0]!.outcome).not.toBe("provider_error");
351
340
  });
@@ -41,11 +41,7 @@ export type {
41
41
  CreateAiRuntimeOptions,
42
42
  } from "./ai/runtime.ts";
43
43
 
44
- export {
45
- assertAllowPiiForAsk,
46
- AiPiiBuildError,
47
- type PiiAskCheckInput,
48
- } from "./ai/pii.ts";
44
+ export { assertAllowPiiForAsk, AiPiiBuildError, type PiiAskCheckInput } from "./ai/pii.ts";
49
45
 
50
46
  export {
51
47
  runPromptEvals,
@@ -44,15 +44,8 @@ export interface ConsentStore {
44
44
  export function createConsentStore(): ConsentStore {
45
45
  const rows: OptOut[] = [];
46
46
 
47
- function matches(
48
- subject: string,
49
- medium: ChannelMedium,
50
- ): boolean {
51
- return rows.some(
52
- (r) =>
53
- r.subject === subject &&
54
- (r.medium === "all" || r.medium === medium),
55
- );
47
+ function matches(subject: string, medium: ChannelMedium): boolean {
48
+ return rows.some((r) => r.subject === subject && (r.medium === "all" || r.medium === medium));
56
49
  }
57
50
 
58
51
  return {
@@ -60,9 +53,7 @@ export function createConsentStore(): ConsentStore {
60
53
  return matches(subject, medium);
61
54
  },
62
55
  optOut(subject, medium) {
63
- if (
64
- !rows.some((r) => r.subject === subject && r.medium === medium)
65
- ) {
56
+ if (!rows.some((r) => r.subject === subject && r.medium === medium)) {
66
57
  rows.push({ subject, medium, at: Date.now() });
67
58
  }
68
59
  },
@@ -42,10 +42,7 @@ export interface FallbackWeeklyCostDelta {
42
42
  * @param medium - Channel medium
43
43
  * @param costs - Unit cost table
44
44
  */
45
- export function costOf(
46
- medium: string,
47
- costs: MediumCosts = DEFAULT_MEDIUM_COSTS,
48
- ): number {
45
+ export function costOf(medium: string, costs: MediumCosts = DEFAULT_MEDIUM_COSTS): number {
49
46
  return costs[medium as ChannelMedium] ?? costs.any ?? 0.005;
50
47
  }
51
48
 
@@ -69,9 +66,7 @@ export function fallbackWeeklyCostDelta(
69
66
  ): FallbackWeeklyCostDelta {
70
67
  const costs = options.costs ?? DEFAULT_MEDIUM_COSTS;
71
68
  const end = options.weekEndMs ?? options.now ?? Date.now();
72
- const inWeek = receipts.filter(
73
- (r) => r.at >= options.weekStartMs && r.at <= end,
74
- );
69
+ const inWeek = receipts.filter((r) => r.at >= options.weekStartMs && r.at <= end);
75
70
  const fallbacks = inWeek.filter((r) => r.status === "fallback");
76
71
 
77
72
  let weeklyDeltaUsd = 0;
@@ -80,8 +75,7 @@ export function fallbackWeeklyCostDelta(
80
75
 
81
76
  for (const r of fallbacks) {
82
77
  const first = r.attempts[0];
83
- const winner =
84
- [...r.attempts].reverse().find((a) => a.ok) ?? r.attempts.at(-1);
78
+ const winner = [...r.attempts].reverse().find((a) => a.ok) ?? r.attempts.at(-1);
85
79
  if (!first || !winner) continue;
86
80
  const primary = mediumFromDriver(first.driverId, r.medium);
87
81
  const fb = mediumFromDriver(winner.driverId, r.medium);
@@ -118,12 +112,7 @@ function mediumFromDriver(driverId: string, receiptMedium: string): string {
118
112
  if (id.includes("push") || id.includes("fcm") || id.includes("webpush")) {
119
113
  return "push";
120
114
  }
121
- if (
122
- id.includes("smtp") ||
123
- id.includes("resend") ||
124
- id.includes("ses") ||
125
- id.includes("email")
126
- ) {
115
+ if (id.includes("smtp") || id.includes("resend") || id.includes("ses") || id.includes("email")) {
127
116
  return "email";
128
117
  }
129
118
  return receiptMedium === "any" ? "email" : receiptMedium;
@@ -104,10 +104,7 @@ export const channel: ChannelNamespace = {
104
104
  * @param name - Template id
105
105
  * @param options - Medium / locales / schema
106
106
  */
107
- template(
108
- name: string,
109
- options: ChannelTemplateOptions = {},
110
- ): ChannelTemplateDecl {
107
+ template(name: string, options: ChannelTemplateOptions = {}): ChannelTemplateDecl {
111
108
  if (!name) throw new TypeError("channel.template: name is required");
112
109
  return {
113
110
  kind: "template",
@@ -73,10 +73,7 @@ export async function verifyEmailAuth(
73
73
  };
74
74
  }
75
75
 
76
- async function safeLookup(
77
- lookup: DnsTxtLookup,
78
- name: string,
79
- ): Promise<readonly string[]> {
76
+ async function safeLookup(lookup: DnsTxtLookup, name: string): Promise<readonly string[]> {
80
77
  try {
81
78
  return await lookup(name);
82
79
  } catch {
@@ -30,13 +30,7 @@ export interface ResolveLocaleOptions {
30
30
  */
31
31
  export function isRtlLocale(locale: string): boolean {
32
32
  const base = locale.toLowerCase().split("-")[0] ?? locale;
33
- return (
34
- base === "ar" ||
35
- base === "he" ||
36
- base === "fa" ||
37
- base === "ur" ||
38
- base === "yi"
39
- );
33
+ return base === "ar" || base === "he" || base === "fa" || base === "ur" || base === "yi";
40
34
  }
41
35
 
42
36
  /**
@@ -59,9 +53,7 @@ export function parseAcceptLanguage(header: string | undefined): string | undefi
59
53
  *
60
54
  * @param options - Resolution inputs
61
55
  */
62
- export function resolveLocale(
63
- options: ResolveLocaleOptions = {},
64
- ): LocaleResolution {
56
+ export function resolveLocale(options: ResolveLocaleOptions = {}): LocaleResolution {
65
57
  const defaultLocale = options.defaultLocale ?? "en";
66
58
  const chain: LocaleChainStep[] = [];
67
59
 
@@ -38,9 +38,7 @@ export function maskEmail(email: string): string {
38
38
  const name = parts[0] ?? domain;
39
39
  const tld = parts.length > 1 ? parts.slice(1).join(".") : "";
40
40
  const domainMask =
41
- name.length <= 1
42
- ? "*"
43
- : `${name[0]!}${"*".repeat(Math.min(3, name.length - 1))}`;
41
+ name.length <= 1 ? "*" : `${name[0]!}${"*".repeat(Math.min(3, name.length - 1))}`;
44
42
  return tld ? `${localMask}@${domainMask}.${tld}` : `${localMask}@${domainMask}`;
45
43
  }
46
44
 
@@ -6,18 +6,8 @@
6
6
  * transports; OKE does not re-implement it.
7
7
  */
8
8
 
9
- export type {
10
- Attachment,
11
- MailOptions,
12
- SendResult,
13
- Transport,
14
- RetryConfig,
15
- } from "sently";
9
+ export type { Attachment, MailOptions, SendResult, Transport, RetryConfig } from "sently";
16
10
 
17
11
  export { SentlyError } from "sently/errors";
18
12
  export { RetryTransport } from "sently/transports/retry";
19
- export {
20
- FallbackTransport,
21
- FallbackError,
22
- type FallbackAttempt,
23
- } from "sently/transports/fallback";
13
+ export { FallbackTransport, FallbackError, type FallbackAttempt } from "sently/transports/fallback";
@@ -3,11 +3,7 @@
3
3
  */
4
4
 
5
5
  import { describe, expect, test } from "bun:test";
6
- import {
7
- buildOutcomeRows,
8
- formatAttemptChain,
9
- VERDICT_BY_STATE,
10
- } from "./outcomes.ts";
6
+ import { buildOutcomeRows, formatAttemptChain, VERDICT_BY_STATE } from "./outcomes.ts";
11
7
 
12
8
  describe("delivery outcome taxonomy", () => {
13
9
  test("every state carries a verdict", () => {
@@ -18,9 +18,7 @@ export type DeliveryOutcomeState =
18
18
  export type DeliveryVerdict = "correct" | "retry" | "suppress" | "review";
19
19
 
20
20
  /** Verdict for each of the seven states. */
21
- export const VERDICT_BY_STATE: Readonly<
22
- Record<DeliveryOutcomeState, DeliveryVerdict>
23
- > = {
21
+ export const VERDICT_BY_STATE: Readonly<Record<DeliveryOutcomeState, DeliveryVerdict>> = {
24
22
  "suppressed/opted-out": "correct",
25
23
  "suppressed/prior-bounce": "correct",
26
24
  "blocked/invalid-address": "review",
@@ -34,9 +32,7 @@ export const VERDICT_BY_STATE: Readonly<
34
32
  * Consequence weight — higher is worse for sender reputation.
35
33
  * Complaints outrank many hard bounces.
36
34
  */
37
- export const CONSEQUENCE_WEIGHT: Readonly<
38
- Record<DeliveryOutcomeState, number>
39
- > = {
35
+ export const CONSEQUENCE_WEIGHT: Readonly<Record<DeliveryOutcomeState, number>> = {
40
36
  "suppressed/opted-out": 0,
41
37
  "suppressed/prior-bounce": 1,
42
38
  "blocked/invalid-address": 3,
@@ -70,9 +66,7 @@ export interface OutcomeRow {
70
66
  *
71
67
  * @param rows - Taxonomy rows with counts
72
68
  */
73
- export function rankByConsequence(
74
- rows: readonly OutcomeRow[],
75
- ): readonly OutcomeRow[] {
69
+ export function rankByConsequence(rows: readonly OutcomeRow[]): readonly OutcomeRow[] {
76
70
  return [...rows].sort((a, b) => {
77
71
  if (b.weight !== a.weight) return b.weight - a.weight;
78
72
  return b.count - a.count;
@@ -101,9 +95,7 @@ export function buildOutcomeRows(
101
95
  *
102
96
  * @param status - Receipt status
103
97
  */
104
- export function isDeliveryOutcomeState(
105
- status: string,
106
- ): status is DeliveryOutcomeState {
98
+ export function isDeliveryOutcomeState(status: string): status is DeliveryOutcomeState {
107
99
  return (DELIVERY_OUTCOME_STATES as readonly string[]).includes(status);
108
100
  }
109
101
 
@@ -120,7 +112,5 @@ export function formatAttemptChain(
120
112
  }[],
121
113
  ): string {
122
114
  if (attempts.length === 0) return "";
123
- return attempts
124
- .map((a) => `${a.driverId} ${a.ok ? "succeeded" : "failed"}`)
125
- .join(" → ");
115
+ return attempts.map((a) => `${a.driverId} ${a.ok ? "succeeded" : "failed"}`).join(" → ");
126
116
  }
@@ -13,10 +13,7 @@ export type DeliverySuccessStatus = "sent" | "fallback";
13
13
  export type DeliveryLegacyStatus = "failed" | "opted-out";
14
14
 
15
15
  /** Full receipt status — success paths + seven-state taxonomy. */
16
- export type DeliveryStatus =
17
- | DeliverySuccessStatus
18
- | DeliveryLegacyStatus
19
- | DeliveryOutcomeState;
16
+ export type DeliveryStatus = DeliverySuccessStatus | DeliveryLegacyStatus | DeliveryOutcomeState;
20
17
 
21
18
  /** Delivery receipt. */
22
19
  export interface DeliveryReceipt {
@@ -103,9 +100,7 @@ export function createReceiptLedger(): ReceiptLedger {
103
100
  return undefined;
104
101
  },
105
102
  updateStatus(messageId, patch) {
106
- const idx = rows.findIndex(
107
- (r) => r.messageId === messageId || r.id === messageId,
108
- );
103
+ const idx = rows.findIndex((r) => r.messageId === messageId || r.id === messageId);
109
104
  if (idx < 0) return undefined;
110
105
  const prev = rows[idx]!;
111
106
  const next: DeliveryReceipt = {