okengine 0.2.5 → 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 +46 -38
  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
@@ -3,11 +3,7 @@
3
3
  */
4
4
 
5
5
  import { describe, expect, test } from "bun:test";
6
- import {
7
- buildCausalChain,
8
- groupTraceRoots,
9
- initialFocusSpanId,
10
- } from "./chain.ts";
6
+ import { buildCausalChain, groupTraceRoots, initialFocusSpanId } from "./chain.ts";
11
7
  import { TRACES_FIXTURE } from "./fixture.ts";
12
8
 
13
9
  describe("buildCausalChain", () => {
@@ -17,10 +13,7 @@ describe("buildCausalChain", () => {
17
13
  expect(chain?.parents.map((p) => p.id)).toEqual(["run-create-ok"]);
18
14
  expect(chain?.current.id).toBe("run-fulfill");
19
15
  expect(chain?.children).toEqual([]);
20
- expect(chain?.connected.map((s) => s.id)).toEqual([
21
- "run-create-ok",
22
- "run-fulfill",
23
- ]);
16
+ expect(chain?.connected.map((s) => s.id)).toEqual(["run-create-ok", "run-fulfill"]);
24
17
  });
25
18
 
26
19
  test("parents above, children below from root", () => {
@@ -37,25 +30,18 @@ describe("groupTraceRoots", () => {
37
30
  expect(roots.map((r) => r.rootId)).toContain("run-create-fail");
38
31
  expect(roots.map((r) => r.rootId)).toContain("run-ask");
39
32
  const ok = roots.find((r) => r.rootId === "run-create-ok");
40
- expect(ok?.spans.map((s) => s.id)).toEqual([
41
- "run-create-ok",
42
- "run-fulfill",
43
- ]);
33
+ expect(ok?.spans.map((s) => s.id)).toEqual(["run-create-ok", "run-fulfill"]);
44
34
  });
45
35
  });
46
36
 
47
37
  describe("initialFocusSpanId", () => {
48
38
  test("opens on the failing span", () => {
49
- const failRoot = groupTraceRoots(TRACES_FIXTURE).find(
50
- (r) => r.rootId === "run-create-fail",
51
- );
39
+ const failRoot = groupTraceRoots(TRACES_FIXTURE).find((r) => r.rootId === "run-create-fail");
52
40
  expect(initialFocusSpanId(failRoot!.spans)).toBe("run-create-fail");
53
41
  });
54
42
 
55
43
  test("honours preferred id when present", () => {
56
- const ok = groupTraceRoots(TRACES_FIXTURE).find(
57
- (r) => r.rootId === "run-create-ok",
58
- );
44
+ const ok = groupTraceRoots(TRACES_FIXTURE).find((r) => r.rootId === "run-create-ok");
59
45
  expect(initialFocusSpanId(ok!.spans, "run-fulfill")).toBe("run-fulfill");
60
46
  });
61
47
  });
@@ -94,9 +94,7 @@ export function buildCausalChain(
94
94
  */
95
95
  export function groupTraceRoots(spans: readonly TraceSpan[]): TraceRoot[] {
96
96
  const { byId, childrenOf } = indexSpans(spans);
97
- const roots = spans.filter(
98
- (s) => !s.parentId || !byId.has(s.parentId),
99
- );
97
+ const roots = spans.filter((s) => !s.parentId || !byId.has(s.parentId));
100
98
  roots.sort((a, b) => b.startedAt - a.startedAt);
101
99
  return roots.map((root) => ({
102
100
  rootId: root.id,
@@ -8,9 +8,7 @@ import { TRACES_FIXTURE } from "./fixture.ts";
8
8
 
9
9
  describe("criticalPathSpanIds", () => {
10
10
  test("selects the longer root-to-leaf work path", () => {
11
- const chain = TRACES_FIXTURE.filter(
12
- (s) => s.id === "run-create-ok" || s.id === "run-fulfill",
13
- );
11
+ const chain = TRACES_FIXTURE.filter((s) => s.id === "run-create-ok" || s.id === "run-fulfill");
14
12
  const path = criticalPathSpanIds(chain);
15
13
  expect(path.has("run-create-ok")).toBe(true);
16
14
  expect(path.has("run-fulfill")).toBe(true);
@@ -13,14 +13,10 @@ import type { TraceSpan } from "./types.ts";
13
13
  *
14
14
  * @param spans - Connected spans (one trace)
15
15
  */
16
- export function criticalPathSpanIds(
17
- spans: readonly TraceSpan[],
18
- ): ReadonlySet<string> {
16
+ export function criticalPathSpanIds(spans: readonly TraceSpan[]): ReadonlySet<string> {
19
17
  if (spans.length === 0) return new Set();
20
18
  const { byId, childrenOf } = indexSpans(spans);
21
- const roots = spans.filter(
22
- (s) => !s.parentId || !byId.has(s.parentId),
23
- );
19
+ const roots = spans.filter((s) => !s.parentId || !byId.has(s.parentId));
24
20
  let best: string[] = [];
25
21
  let bestCost = -1;
26
22
 
@@ -68,11 +68,7 @@ describe("effect filter", () => {
68
68
  });
69
69
 
70
70
  test("trace-level match when any connected span matches", () => {
71
- const chain = TRACES_FIXTURE.filter(
72
- (s) => s.id === "run-create-ok" || s.id === "run-fulfill",
73
- );
74
- expect(
75
- traceMatchesEffectFilter(chain, { kind: "sent" }),
76
- ).toBe(true);
71
+ const chain = TRACES_FIXTURE.filter((s) => s.id === "run-create-ok" || s.id === "run-fulfill");
72
+ expect(traceMatchesEffectFilter(chain, { kind: "sent" })).toBe(true);
77
73
  });
78
74
  });
@@ -19,22 +19,18 @@ export function matchesEffectFilter(
19
19
  if (!filter) return true;
20
20
  switch (filter.kind) {
21
21
  case "wrote":
22
- return span.effects.some(
23
- (e) => e.kind === "write" && e.resource === filter.resource,
24
- );
22
+ return span.effects.some((e) => e.kind === "write" && e.resource === filter.resource);
25
23
  case "asked":
26
24
  return span.effects.some((e) => e.kind === "ask");
27
25
  case "sent":
28
26
  return span.effects.some(
29
27
  (e) =>
30
- e.kind === "send" &&
31
- (filter.resource === undefined || e.resource === filter.resource),
28
+ e.kind === "send" && (filter.resource === undefined || e.resource === filter.resource),
32
29
  );
33
30
  case "secret":
34
31
  return span.effects.some(
35
32
  (e) =>
36
- e.kind === "secret" &&
37
- (filter.resource === undefined || e.resource === filter.resource),
33
+ e.kind === "secret" && (filter.resource === undefined || e.resource === filter.resource),
38
34
  );
39
35
  case "cost":
40
36
  return (span.cost ?? 0) > filter.min;
@@ -63,9 +59,7 @@ export function traceMatchesEffectFilter(
63
59
  *
64
60
  * @param raw - URL value
65
61
  */
66
- export function parseEffectFilter(
67
- raw: string | undefined,
68
- ): EffectFilter | null {
62
+ export function parseEffectFilter(raw: string | undefined): EffectFilter | null {
69
63
  if (!raw?.trim()) return null;
70
64
  const value = raw.trim();
71
65
  if (value === "asked") return { kind: "asked" };
@@ -93,9 +87,7 @@ export function parseEffectFilter(
93
87
  *
94
88
  * @param filter - Filter
95
89
  */
96
- export function serializeEffectFilter(
97
- filter: EffectFilter | null | undefined,
98
- ): string | undefined {
90
+ export function serializeEffectFilter(filter: EffectFilter | null | undefined): string | undefined {
99
91
  if (!filter) return undefined;
100
92
  switch (filter.kind) {
101
93
  case "wrote":
@@ -13,9 +13,7 @@ import {
13
13
 
14
14
  describe("foldTimeline", () => {
15
15
  test("collapses multi-day idle into one labelled fold", () => {
16
- const chain = TRACES_FIXTURE.filter(
17
- (s) => s.id === "run-create-ok" || s.id === "run-fulfill",
18
- );
16
+ const chain = TRACES_FIXTURE.filter((s) => s.id === "run-create-ok" || s.id === "run-fulfill");
19
17
  const folded = foldTimeline(intervalsFromSpans(chain));
20
18
  const folds = folded.segments.filter((s) => s.kind === "fold");
21
19
  expect(folds.length).toBe(1);
@@ -29,9 +27,7 @@ describe("foldTimeline", () => {
29
27
  });
30
28
 
31
29
  test("expanded fold restores proportional display weight", () => {
32
- const chain = TRACES_FIXTURE.filter(
33
- (s) => s.id === "run-create-ok" || s.id === "run-fulfill",
34
- );
30
+ const chain = TRACES_FIXTURE.filter((s) => s.id === "run-create-ok" || s.id === "run-fulfill");
35
31
  const intervals = intervalsFromSpans(chain);
36
32
  const draft = foldTimeline(intervals);
37
33
  const foldId = draft.segments.find((s) => s.kind === "fold")?.id;
@@ -47,16 +43,12 @@ describe("foldTimeline", () => {
47
43
  });
48
44
 
49
45
  test("work stays proportional — display sum excludes collapsed dead time", () => {
50
- const chain = TRACES_FIXTURE.filter(
51
- (s) => s.id === "run-create-ok" || s.id === "run-fulfill",
52
- );
46
+ const chain = TRACES_FIXTURE.filter((s) => s.id === "run-create-ok" || s.id === "run-fulfill");
53
47
  const folded = foldTimeline(intervalsFromSpans(chain));
54
48
  const workDisplay = folded.segments
55
49
  .filter((s) => s.kind === "work")
56
50
  .reduce((s, seg) => s + seg.displayMs, 0);
57
- expect(folded.displayDurationMs).toBe(
58
- workDisplay + COLLAPSED_FOLD_DISPLAY_MS,
59
- );
51
+ expect(folded.displayDurationMs).toBe(workDisplay + COLLAPSED_FOLD_DISPLAY_MS);
60
52
  expect(folded.wallDurationMs).toBeGreaterThan(folded.displayDurationMs);
61
53
  });
62
54
 
@@ -144,9 +144,7 @@ export function intervalsFromSpans(spans: readonly TraceSpan[]): WorkInterval[]
144
144
  endMs: e.timestamp + Math.max(1, e.duration),
145
145
  tier: tierOfKind(e.kind),
146
146
  spanId: span.id,
147
- failed:
148
- span.errorCode != null &&
149
- e === span.effects[span.effects.length - 1],
147
+ failed: span.errorCode != null && e === span.effects[span.effects.length - 1],
150
148
  });
151
149
  }
152
150
  } else {
@@ -55,9 +55,7 @@ export function miniWaterfall(spans: readonly TraceSpan[]): MiniBar[] {
55
55
  *
56
56
  * @param spans - Connected spans
57
57
  */
58
- export function rootErrorCode(
59
- spans: readonly TraceSpan[],
60
- ): string | null {
58
+ export function rootErrorCode(spans: readonly TraceSpan[]): string | null {
61
59
  for (const s of spans) {
62
60
  if (s.errorCode) return s.errorCode;
63
61
  }
@@ -8,9 +8,7 @@ import { replayDecision } from "./replay.ts";
8
8
 
9
9
  describe("replayDecision", () => {
10
10
  test("offers dry-run when the trace has an external effect", () => {
11
- const chain = TRACES_FIXTURE.filter(
12
- (s) => s.id === "run-create-ok" || s.id === "run-fulfill",
13
- );
11
+ const chain = TRACES_FIXTURE.filter((s) => s.id === "run-create-ok" || s.id === "run-fulfill");
14
12
  const decision = replayDecision(chain);
15
13
  expect(decision.mode).toBe("dry-run");
16
14
  if (decision.mode !== "dry-run") return;
@@ -21,9 +21,7 @@ export type ReplayDecision =
21
21
  *
22
22
  * @param spans - Connected spans
23
23
  */
24
- export function replayDecision(
25
- spans: readonly TraceSpan[],
26
- ): ReplayDecision {
24
+ export function replayDecision(spans: readonly TraceSpan[]): ReplayDecision {
27
25
  if (traceHasExternal(spans)) {
28
26
  return {
29
27
  mode: "dry-run",
@@ -25,10 +25,7 @@ export interface FullTraceBoost {
25
25
  * @param boosts - Active boosts
26
26
  * @param now - Clock
27
27
  */
28
- export function samplingLabel(
29
- boosts: readonly FullTraceBoost[],
30
- now: number = Date.now(),
31
- ): string {
28
+ export function samplingLabel(boosts: readonly FullTraceBoost[], now: number = Date.now()): string {
32
29
  const live = boosts.filter((b) => b.until > now);
33
30
  if (live.length === 0) return DEFAULT_SAMPLING_LABEL;
34
31
  const flows = live.map((b) => b.flow).join(", ");
@@ -6,11 +6,7 @@
6
6
  */
7
7
 
8
8
  import { z } from "zod";
9
- import {
10
- parseEffectFilter,
11
- serializeEffectFilter,
12
- type EffectFilter,
13
- } from "./filter.ts";
9
+ import { parseEffectFilter, serializeEffectFilter, type EffectFilter } from "./filter.ts";
14
10
 
15
11
  /** Zod schema for Traces URL search params. */
16
12
  export const TracesSearchSchema = z.object({
@@ -47,9 +43,7 @@ export function parseTracesSearch(raw: unknown): TracesSearch {
47
43
  *
48
44
  * @param search - Typed search
49
45
  */
50
- export function serializeTracesSearch(
51
- search: TracesSearch,
52
- ): Record<string, string> {
46
+ export function serializeTracesSearch(search: TracesSearch): Record<string, string> {
53
47
  const out: Record<string, string> = {};
54
48
  if (search.trace) out.trace = search.trace;
55
49
  if (search.span) out.span = search.span;
@@ -91,11 +85,7 @@ export function expandedFoldsOf(search: TracesSearch): Set<string> {
91
85
  * @param rootId - Root span id
92
86
  * @param spanId - Optional focus span
93
87
  */
94
- export function openTrace(
95
- prev: TracesSearch,
96
- rootId: string,
97
- spanId?: string,
98
- ): TracesSearch {
88
+ export function openTrace(prev: TracesSearch, rootId: string, spanId?: string): TracesSearch {
99
89
  return {
100
90
  ...prev,
101
91
  trace: rootId,
@@ -137,10 +127,7 @@ export function toggleFold(prev: TracesSearch, foldId: string): TracesSearch {
137
127
  * @param prev - Current search
138
128
  * @param filter - Effect filter
139
129
  */
140
- export function setEffectFilter(
141
- prev: TracesSearch,
142
- filter: EffectFilter | null,
143
- ): TracesSearch {
130
+ export function setEffectFilter(prev: TracesSearch, filter: EffectFilter | null): TracesSearch {
144
131
  return {
145
132
  ...prev,
146
133
  effect: serializeEffectFilter(filter),
@@ -34,9 +34,7 @@ export function tierOfKind(kind: EffectKind): UiEffectTier {
34
34
  *
35
35
  * @param effects - Span effects
36
36
  */
37
- export function peakSpanTier(
38
- effects: readonly TraceEffect[],
39
- ): SpanTier {
37
+ export function peakSpanTier(effects: readonly TraceEffect[]): SpanTier {
40
38
  let peak: SpanTier = "none";
41
39
  for (const e of effects) {
42
40
  const t = tierOfKind(e.kind);
@@ -51,17 +51,10 @@ export function VaultA11yView(props: VaultA11yViewProps) {
51
51
  style={{ minHeight: 32, width: "100%" }}
52
52
  >
53
53
  <span>{s.name}</span>
54
- {s.sensitive && s.fingerprint ? (
55
- <span> {s.fingerprint}</span>
56
- ) : null}
57
- {!s.sensitive && s.cleartext ? (
58
- <span> {s.cleartext}</span>
59
- ) : null}
54
+ {s.sensitive && s.fingerprint ? <span> {s.fingerprint}</span> : null}
55
+ {!s.sensitive && s.cleartext ? <span> {s.cleartext}</span> : null}
60
56
  {s.blastRadius.count > 0 ? (
61
- <span role="status">
62
- {" "}
63
- blast {s.blastRadius.count}
64
- </span>
57
+ <span role="status"> blast {s.blastRadius.count}</span>
65
58
  ) : null}
66
59
  {s.sharedFingerprintEnvs.length > 0 ? (
67
60
  <span role="status"> shared fingerprint</span>
@@ -108,11 +101,7 @@ export function VaultA11yView(props: VaultA11yViewProps) {
108
101
  {open.resolution.map((step) => (
109
102
  <li key={step.source}>
110
103
  {step.source}
111
- {step.won
112
- ? " — won"
113
- : step.present
114
- ? " — present (lost)"
115
- : " — absent"}
104
+ {step.won ? " — won" : step.present ? " — present (lost)" : " — absent"}
116
105
  </li>
117
106
  ))}
118
107
  </ol>
@@ -122,8 +111,7 @@ export function VaultA11yView(props: VaultA11yViewProps) {
122
111
  <section aria-label="Readers">
123
112
  <h3>Readers</h3>
124
113
  <p>
125
- Flows that declare fx.vault({open.name}):{" "}
126
- {open.readers.join(", ") || "none"}
114
+ Flows that declare fx.vault({open.name}): {open.readers.join(", ") || "none"}
127
115
  </p>
128
116
  </section>
129
117
 
@@ -16,8 +16,7 @@ describe("Vault panel accessibility", () => {
16
16
  let container: HTMLElement;
17
17
 
18
18
  beforeEach(() => {
19
- (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT =
20
- true;
19
+ (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
21
20
  window = new Window({ url: "http://console.test/vault" });
22
21
  Object.defineProperty(globalThis, "window", {
23
22
  value: window,
@@ -25,9 +25,7 @@ export function formatBlastRadius(blast: VaultBlastRadius): BlastRadiusLine {
25
25
  };
26
26
  }
27
27
  const remaining =
28
- blast.longestOutstandingMs != null
29
- ? formatDuration(blast.longestOutstandingMs)
30
- : null;
28
+ blast.longestOutstandingMs != null ? formatDuration(blast.longestOutstandingMs) : null;
31
29
  return {
32
30
  summary: `${blast.count} in-flight durable run(s) will wake holding a new key`,
33
31
  detail: remaining
@@ -1,9 +1,5 @@
1
1
  import { describe, expect, test } from "bun:test";
2
- import {
3
- rotateConfirmation,
4
- setConfirmation,
5
- validateTypedConfirm,
6
- } from "./confirmation.ts";
2
+ import { rotateConfirmation, setConfirmation, validateTypedConfirm } from "./confirmation.ts";
7
3
 
8
4
  describe("vault confirmation", () => {
9
5
  test("set requires typed confirm in production", () => {
@@ -4,10 +4,7 @@
4
4
  * There is no preview affordance for Vault — set and rotate are real writes.
5
5
  */
6
6
 
7
- import {
8
- type ConfirmationPattern,
9
- validateTypedConfirm,
10
- } from "../flows/confirmation.ts";
7
+ import { type ConfirmationPattern, validateTypedConfirm } from "../flows/confirmation.ts";
11
8
 
12
9
  export { validateTypedConfirm };
13
10
  export type { ConfirmationPattern };
@@ -16,10 +16,7 @@ describe("dormantSecrets", () => {
16
16
  lastReadAt: null,
17
17
  readers: [],
18
18
  };
19
- const dormant = dormantSecrets(
20
- [...VAULT_FIXTURE, neverRead],
21
- now,
22
- );
19
+ const dormant = dormantSecrets([...VAULT_FIXTURE, neverRead], now);
23
20
  expect(dormant.some((s) => s.name === "LEGACY_WEBHOOK_SECRET")).toBe(true);
24
21
  expect(dormant.some((s) => s.kind === "config")).toBe(false);
25
22
  });
@@ -1,9 +1,5 @@
1
1
  import { describe, expect, test } from "bun:test";
2
- import {
3
- assertExportHasNoSecrets,
4
- exportSafeList,
5
- exportSafeRow,
6
- } from "./export-safe.ts";
2
+ import { assertExportHasNoSecrets, exportSafeList, exportSafeRow } from "./export-safe.ts";
7
3
  import { FIXTURE_SECRET_VALUE, VAULT_FIXTURE } from "./fixture.ts";
8
4
 
9
5
  describe("exportSafe", () => {
@@ -53,10 +53,7 @@ export function exportSafeList(rows: readonly VaultRecord[]): string {
53
53
  * @param payload - Serialized text
54
54
  * @param knownSecrets - Cleartext secrets that must not appear
55
55
  */
56
- export function assertExportHasNoSecrets(
57
- payload: string,
58
- knownSecrets: readonly string[],
59
- ): void {
56
+ export function assertExportHasNoSecrets(payload: string, knownSecrets: readonly string[]): void {
60
57
  for (const secret of knownSecrets) {
61
58
  if (secret.length > 0 && payload.includes(secret)) {
62
59
  throw new Error("vault export leaked a secret value");
@@ -26,7 +26,7 @@ export const VAULT_FIXTURE: readonly VaultRecord[] = [
26
26
  resolution: [
27
27
  { source: "process.env", present: false, won: false },
28
28
  { source: ".env.local", present: true, won: true },
29
- { source: ".env.stack", present: false, won: false },
29
+ { source: ".env.docker", present: false, won: false },
30
30
  { source: "driver", present: false, won: false },
31
31
  { source: "dev-fallback", present: false, won: false },
32
32
  ],
@@ -52,7 +52,7 @@ export const VAULT_FIXTURE: readonly VaultRecord[] = [
52
52
  resolution: [
53
53
  { source: "process.env", present: true, won: true },
54
54
  { source: ".env.local", present: false, won: false },
55
- { source: ".env.stack", present: false, won: false },
55
+ { source: ".env.docker", present: false, won: false },
56
56
  { source: "driver", present: false, won: false },
57
57
  { source: "dev-fallback", present: false, won: false },
58
58
  ],
@@ -71,5 +71,5 @@ export const VAULT_FIXTURE: readonly VaultRecord[] = [
71
71
  /** List response matching `console.vault.list`. */
72
72
  export const VAULT_LIST_FIXTURE: VaultListResponse = {
73
73
  secrets: VAULT_FIXTURE,
74
- env: "dev",
74
+ env: "local",
75
75
  };
@@ -18,8 +18,7 @@ export function groupByKind(
18
18
  const filtered = q
19
19
  ? secrets.filter(
20
20
  (s) =>
21
- s.name.toLowerCase().includes(q) ||
22
- (s.description?.toLowerCase().includes(q) ?? false),
21
+ s.name.toLowerCase().includes(q) || (s.description?.toLowerCase().includes(q) ?? false),
23
22
  )
24
23
  : secrets;
25
24
 
@@ -11,11 +11,7 @@ export type {
11
11
  VaultResolutionStep,
12
12
  } from "./types.ts";
13
13
 
14
- export {
15
- VAULT_FIXTURE,
16
- VAULT_LIST_FIXTURE,
17
- FIXTURE_SECRET_VALUE,
18
- } from "./fixture.ts";
14
+ export { VAULT_FIXTURE, VAULT_LIST_FIXTURE, FIXTURE_SECRET_VALUE } from "./fixture.ts";
19
15
 
20
16
  export {
21
17
  parseVaultSearch,
@@ -38,8 +34,4 @@ export { formatBlastRadius, formatDuration } from "./blast-radius.ts";
38
34
 
39
35
  export { dormantSecrets, DORMANT_MS } from "./dormant.ts";
40
36
 
41
- export {
42
- exportSafeRow,
43
- exportSafeList,
44
- assertExportHasNoSecrets,
45
- } from "./export-safe.ts";
37
+ export { exportSafeRow, exportSafeList, assertExportHasNoSecrets } from "./export-safe.ts";
@@ -19,9 +19,7 @@ export type VaultSearch = z.infer<typeof VaultSearchSchema>;
19
19
  *
20
20
  * @param search - Raw router search
21
21
  */
22
- export function parseVaultSearch(
23
- search: Record<string, unknown>,
24
- ): VaultSearch {
22
+ export function parseVaultSearch(search: Record<string, unknown>): VaultSearch {
25
23
  const parsed = VaultSearchSchema.safeParse(search);
26
24
  return parsed.success ? parsed.data : {};
27
25
  }
@@ -31,9 +29,7 @@ export function parseVaultSearch(
31
29
  *
32
30
  * @param search - Search state
33
31
  */
34
- export function serializeVaultSearch(
35
- search: VaultSearch,
36
- ): Record<string, string> {
32
+ export function serializeVaultSearch(search: VaultSearch): Record<string, string> {
37
33
  const out: Record<string, string> = {};
38
34
  if (search.q) out.q = search.q;
39
35
  if (search.name) out.name = search.name;
@@ -6,7 +6,7 @@
6
6
  export type VaultResolutionSource =
7
7
  | "process.env"
8
8
  | ".env.local"
9
- | ".env.stack"
9
+ | ".env.docker"
10
10
  | "driver"
11
11
  | "dev-fallback";
12
12
 
@@ -111,8 +111,6 @@ describe("console XSS gate", () => {
111
111
  test("gate fails a PR that introduces raw HTML", () => {
112
112
  const bad = `export function Evil() { return <div dangerouslySetInnerHTML={{ __html: x }} />; }`;
113
113
  expect(findXssViolations(bad).length).toBeGreaterThan(0);
114
- expect(findXssViolations(`el.innerHTML = payload`)).toContain(
115
- String(/\.innerHTML\s*=/),
116
- );
114
+ expect(findXssViolations(`el.innerHTML = payload`)).toContain(String(/\.innerHTML\s*=/));
117
115
  });
118
116
  });