okengine 0.1.4

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 (674) hide show
  1. package/AGENTS.md +91 -0
  2. package/README.md +327 -0
  3. package/docs/spec/complete-example.md +1188 -0
  4. package/docs/spec/console.md +739 -0
  5. package/docs/spec/four-applications.md +1188 -0
  6. package/docs/spec/unified-theory.md +489 -0
  7. package/package.json +152 -0
  8. package/spec/manifest.v1.schema.json +624 -0
  9. package/src/auth/api-keys.ts +168 -0
  10. package/src/auth/attenuation.ts +116 -0
  11. package/src/auth/auth.test.ts +273 -0
  12. package/src/auth/cross-plane.ts +98 -0
  13. package/src/auth/index.ts +112 -0
  14. package/src/auth/invites.ts +66 -0
  15. package/src/auth/invoke-as.ts +49 -0
  16. package/src/auth/operator.ts +178 -0
  17. package/src/auth/planes.ts +102 -0
  18. package/src/auth/plugin.ts +44 -0
  19. package/src/auth/roles.ts +84 -0
  20. package/src/auth/sessions.ts +418 -0
  21. package/src/auth/tables.ts +131 -0
  22. package/src/cli/args.ts +50 -0
  23. package/src/cli/branch.ts +75 -0
  24. package/src/cli/build.ts +86 -0
  25. package/src/cli/client-add.test.ts +140 -0
  26. package/src/cli/client-add.ts +164 -0
  27. package/src/cli/completion.test.ts +58 -0
  28. package/src/cli/completion.ts +296 -0
  29. package/src/cli/dev-app-runner.ts +77 -0
  30. package/src/cli/dev.test.ts +435 -0
  31. package/src/cli/dev.ts +594 -0
  32. package/src/cli/doc-drift.test.ts +146 -0
  33. package/src/cli/doc-drift.ts +397 -0
  34. package/src/cli/docker-cli.test.ts +221 -0
  35. package/src/cli/docker.ts +127 -0
  36. package/src/cli/doctor-diff-examples.ts +92 -0
  37. package/src/cli/doctor-diff.test.ts +91 -0
  38. package/src/cli/doctor-diff.ts +274 -0
  39. package/src/cli/doctor-pii.test.ts +98 -0
  40. package/src/cli/doctor-pii.ts +151 -0
  41. package/src/cli/doctor.test.ts +150 -0
  42. package/src/cli/doctor.ts +223 -0
  43. package/src/cli/eval.ts +122 -0
  44. package/src/cli/exit.ts +19 -0
  45. package/src/cli/gates-list.test.ts +47 -0
  46. package/src/cli/gates-list.ts +84 -0
  47. package/src/cli/images.ts +277 -0
  48. package/src/cli/index.ts +99 -0
  49. package/src/cli/json-out.test.ts +129 -0
  50. package/src/cli/load-config.ts +71 -0
  51. package/src/cli/mcp-from-console.ts +50 -0
  52. package/src/cli/privacy-erase.ts +73 -0
  53. package/src/cli/registry.ts +455 -0
  54. package/src/cli/safe-defaults.test.ts +92 -0
  55. package/src/cli/schema.ts +196 -0
  56. package/src/cli/stack.ts +82 -0
  57. package/src/cli/start.ts +106 -0
  58. package/src/cli/upgrade.ts +105 -0
  59. package/src/cli/vault-cmd.ts +140 -0
  60. package/src/client/budget-entry.ts +34 -0
  61. package/src/client/budget.test.ts +17 -0
  62. package/src/client/create.test.ts +159 -0
  63. package/src/client/create.ts +152 -0
  64. package/src/client/errors.ts +60 -0
  65. package/src/client/index.ts +35 -0
  66. package/src/client/notes-contract.test.ts +289 -0
  67. package/src/client/transport.test.ts +123 -0
  68. package/src/client/transport.ts +254 -0
  69. package/src/client/types.ts +282 -0
  70. package/src/compiler/aot.test.ts +248 -0
  71. package/src/compiler/aot.ts +182 -0
  72. package/src/compiler/differential.test.ts +241 -0
  73. package/src/compiler/dynamic.ts +54 -0
  74. package/src/compiler/effects-infer.ts +541 -0
  75. package/src/compiler/emit.ts +40 -0
  76. package/src/compiler/extract.test.ts +177 -0
  77. package/src/compiler/extract.ts +1368 -0
  78. package/src/compiler/fixtures/raw/raw-unannotated.ts +28 -0
  79. package/src/compiler/fixtures/skyport/oke.config.ts +24 -0
  80. package/src/compiler/fixtures/skyport/src/ai.ts +15 -0
  81. package/src/compiler/fixtures/skyport/src/app.ts +10 -0
  82. package/src/compiler/fixtures/skyport/src/channels.ts +6 -0
  83. package/src/compiler/fixtures/skyport/src/core.ts +3 -0
  84. package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +57 -0
  85. package/src/compiler/fixtures/skyport/src/flows/bookings/signals.ts +11 -0
  86. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +14 -0
  87. package/src/compiler/fixtures/skyport/src/flows/support/index.ts +20 -0
  88. package/src/compiler/fixtures/skyport/src/gates.ts +14 -0
  89. package/src/compiler/fixtures/skyport/src/journeys.ts +9 -0
  90. package/src/compiler/fixtures/skyport/src/schema.ts +3 -0
  91. package/src/compiler/fixtures/skyport/src/vault.ts +6 -0
  92. package/src/compiler/fixtures/skyport.expected.json +241 -0
  93. package/src/compiler/fixtures/triggers/five-triggers.ts +69 -0
  94. package/src/compiler/http-parse.ts +214 -0
  95. package/src/compiler/index.ts +67 -0
  96. package/src/compiler/response.ts +89 -0
  97. package/src/compiler/sucrose.ts +238 -0
  98. package/src/config/index.ts +167 -0
  99. package/src/console/budget.test.ts +73 -0
  100. package/src/console/index.ts +30 -0
  101. package/src/console/server/access.test.ts +370 -0
  102. package/src/console/server/access.ts +777 -0
  103. package/src/console/server/ai.test.ts +172 -0
  104. package/src/console/server/ai.ts +632 -0
  105. package/src/console/server/app.ts +294 -0
  106. package/src/console/server/auth-rate.test.ts +81 -0
  107. package/src/console/server/auth-rate.ts +72 -0
  108. package/src/console/server/bind.ts +25 -0
  109. package/src/console/server/channels.test.ts +179 -0
  110. package/src/console/server/channels.ts +469 -0
  111. package/src/console/server/claim.test.ts +66 -0
  112. package/src/console/server/claim.ts +134 -0
  113. package/src/console/server/clock.test.ts +239 -0
  114. package/src/console/server/clock.ts +390 -0
  115. package/src/console/server/console.test.ts +338 -0
  116. package/src/console/server/diff.test.ts +299 -0
  117. package/src/console/server/diff.ts +352 -0
  118. package/src/console/server/dry-run.audit.test.ts +118 -0
  119. package/src/console/server/flows-invoke.test.ts +148 -0
  120. package/src/console/server/flows.ts +3633 -0
  121. package/src/console/server/gates.test.ts +360 -0
  122. package/src/console/server/gates.ts +869 -0
  123. package/src/console/server/index.ts +141 -0
  124. package/src/console/server/live.test.ts +30 -0
  125. package/src/console/server/live.ts +109 -0
  126. package/src/console/server/plugin.ts +50 -0
  127. package/src/console/server/plugins.test.ts +131 -0
  128. package/src/console/server/plugins.ts +429 -0
  129. package/src/console/server/runs-pii.ts +98 -0
  130. package/src/console/server/security-headers.ts +97 -0
  131. package/src/console/server/security.gate.test.ts +286 -0
  132. package/src/console/server/serve.ts +319 -0
  133. package/src/console/server/signals.test.ts +88 -0
  134. package/src/console/server/signals.ts +282 -0
  135. package/src/console/server/state.ts +982 -0
  136. package/src/console/server/store.test.ts +233 -0
  137. package/src/console/server/store.ts +861 -0
  138. package/src/console/server/structural.ts +95 -0
  139. package/src/console/server/vault.test.ts +251 -0
  140. package/src/console/server/vault.ts +430 -0
  141. package/src/console/ui/access/AccessA11yView.tsx +237 -0
  142. package/src/console/ui/access/a11y.test.tsx +122 -0
  143. package/src/console/ui/access/acknowledgement.test.ts +13 -0
  144. package/src/console/ui/access/acknowledgement.ts +35 -0
  145. package/src/console/ui/access/blast-radius.test.ts +26 -0
  146. package/src/console/ui/access/blast-radius.ts +40 -0
  147. package/src/console/ui/access/confirmation.test.ts +38 -0
  148. package/src/console/ui/access/confirmation.ts +36 -0
  149. package/src/console/ui/access/fixture.ts +203 -0
  150. package/src/console/ui/access/grantable.test.ts +17 -0
  151. package/src/console/ui/access/grantable.ts +36 -0
  152. package/src/console/ui/access/hygiene.test.ts +12 -0
  153. package/src/console/ui/access/hygiene.ts +39 -0
  154. package/src/console/ui/access/index.ts +54 -0
  155. package/src/console/ui/access/provenance.test.ts +12 -0
  156. package/src/console/ui/access/provenance.ts +29 -0
  157. package/src/console/ui/access/search.test.ts +17 -0
  158. package/src/console/ui/access/search.ts +72 -0
  159. package/src/console/ui/access/types.ts +111 -0
  160. package/src/console/ui/ai/AiA11yView.tsx +265 -0
  161. package/src/console/ui/ai/a11y.test.tsx +99 -0
  162. package/src/console/ui/ai/findings.ts +41 -0
  163. package/src/console/ui/ai/fixture.ts +182 -0
  164. package/src/console/ui/ai/format.ts +90 -0
  165. package/src/console/ui/ai/group.test.ts +37 -0
  166. package/src/console/ui/ai/group.ts +88 -0
  167. package/src/console/ui/ai/index.ts +66 -0
  168. package/src/console/ui/ai/promotion.test.ts +77 -0
  169. package/src/console/ui/ai/promotion.ts +150 -0
  170. package/src/console/ui/ai/search.test.ts +40 -0
  171. package/src/console/ui/ai/search.ts +89 -0
  172. package/src/console/ui/ai/types.ts +139 -0
  173. package/src/console/ui/architecture/ArchitectureA11yView.tsx +163 -0
  174. package/src/console/ui/architecture/a11y.test.tsx +97 -0
  175. package/src/console/ui/architecture/boundary.ts +42 -0
  176. package/src/console/ui/architecture/declared.ts +165 -0
  177. package/src/console/ui/architecture/fixture.ts +74 -0
  178. package/src/console/ui/architecture/index.ts +84 -0
  179. package/src/console/ui/architecture/layers.ts +64 -0
  180. package/src/console/ui/architecture/layout.ts +68 -0
  181. package/src/console/ui/architecture/pathologies.ts +260 -0
  182. package/src/console/ui/architecture/search.ts +145 -0
  183. package/src/console/ui/architecture/traffic.ts +102 -0
  184. package/src/console/ui/architecture/types.ts +144 -0
  185. package/src/console/ui/architecture/view.test.ts +165 -0
  186. package/src/console/ui/architecture/view.ts +516 -0
  187. package/src/console/ui/channels/ChannelsA11yView.tsx +180 -0
  188. package/src/console/ui/channels/a11y.test.tsx +96 -0
  189. package/src/console/ui/channels/confirmation.test.ts +37 -0
  190. package/src/console/ui/channels/confirmation.ts +27 -0
  191. package/src/console/ui/channels/fallback.test.ts +15 -0
  192. package/src/console/ui/channels/fallback.ts +20 -0
  193. package/src/console/ui/channels/findings.ts +38 -0
  194. package/src/console/ui/channels/fixture.ts +134 -0
  195. package/src/console/ui/channels/group.ts +25 -0
  196. package/src/console/ui/channels/index.ts +57 -0
  197. package/src/console/ui/channels/locale.test.ts +17 -0
  198. package/src/console/ui/channels/locale.ts +31 -0
  199. package/src/console/ui/channels/mask.test.ts +14 -0
  200. package/src/console/ui/channels/mask.ts +12 -0
  201. package/src/console/ui/channels/search.ts +58 -0
  202. package/src/console/ui/channels/taxonomy.test.ts +17 -0
  203. package/src/console/ui/channels/taxonomy.ts +49 -0
  204. package/src/console/ui/channels/types.ts +117 -0
  205. package/src/console/ui/clock/ClockA11yView.tsx +182 -0
  206. package/src/console/ui/clock/a11y.test.tsx +99 -0
  207. package/src/console/ui/clock/confirmation.test.ts +32 -0
  208. package/src/console/ui/clock/confirmation.ts +34 -0
  209. package/src/console/ui/clock/findings.ts +40 -0
  210. package/src/console/ui/clock/fixture.ts +111 -0
  211. package/src/console/ui/clock/health.test.ts +25 -0
  212. package/src/console/ui/clock/health.ts +61 -0
  213. package/src/console/ui/clock/index.ts +49 -0
  214. package/src/console/ui/clock/search.test.ts +39 -0
  215. package/src/console/ui/clock/search.ts +76 -0
  216. package/src/console/ui/clock/timeline.test.ts +44 -0
  217. package/src/console/ui/clock/timeline.ts +41 -0
  218. package/src/console/ui/clock/types.ts +78 -0
  219. package/src/console/ui/clock/waiting-on.test.ts +34 -0
  220. package/src/console/ui/clock/waiting-on.ts +83 -0
  221. package/src/console/ui/confirmation.unify.test.ts +92 -0
  222. package/src/console/ui/diff/DiffA11yView.tsx +85 -0
  223. package/src/console/ui/diff/a11y.test.tsx +99 -0
  224. package/src/console/ui/diff/fixture.ts +85 -0
  225. package/src/console/ui/diff/group.test.ts +58 -0
  226. package/src/console/ui/diff/group.ts +97 -0
  227. package/src/console/ui/diff/index.ts +38 -0
  228. package/src/console/ui/diff/search.test.ts +32 -0
  229. package/src/console/ui/diff/search.ts +75 -0
  230. package/src/console/ui/diff/summary.ts +74 -0
  231. package/src/console/ui/diff/types.ts +48 -0
  232. package/src/console/ui/dist/assets/index-B71Yl_SS.js +10 -0
  233. package/src/console/ui/dist/assets/panel-access-Dd37LU2c.js +64 -0
  234. package/src/console/ui/dist/assets/panel-ai-CC7LR6-J.js +1 -0
  235. package/src/console/ui/dist/assets/panel-architecture-B5b3iKCz.js +1 -0
  236. package/src/console/ui/dist/assets/panel-channels-CeNjTKXp.js +1 -0
  237. package/src/console/ui/dist/assets/panel-clock-DgFTLoHV.js +1 -0
  238. package/src/console/ui/dist/assets/panel-diff-DxehccqB.js +1 -0
  239. package/src/console/ui/dist/assets/panel-flows-BtrVn-Eg.js +45 -0
  240. package/src/console/ui/dist/assets/panel-gates-Z9MKRGdH.js +1 -0
  241. package/src/console/ui/dist/assets/panel-overview-Bd48d9km.js +1 -0
  242. package/src/console/ui/dist/assets/panel-plugins-DWd0TowH.js +1 -0
  243. package/src/console/ui/dist/assets/panel-runs-BwsWqKeB.js +1 -0
  244. package/src/console/ui/dist/assets/panel-signals-9najbZY2.js +1 -0
  245. package/src/console/ui/dist/assets/panel-store-OHkP2pDp.js +1 -0
  246. package/src/console/ui/dist/assets/panel-traces-tn2JoY8U.js +1 -0
  247. package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +1 -0
  248. package/src/console/ui/dist/assets/rolldown-runtime-CNC7AqOf.js +1 -0
  249. package/src/console/ui/dist/assets/style-Cnl7WLya.css +3 -0
  250. package/src/console/ui/dist/index.html +14 -0
  251. package/src/console/ui/flows/FlowsA11yView.tsx +155 -0
  252. package/src/console/ui/flows/a11y.test.tsx +105 -0
  253. package/src/console/ui/flows/buffer.test.ts +91 -0
  254. package/src/console/ui/flows/buffer.ts +118 -0
  255. package/src/console/ui/flows/confirmation.ts +131 -0
  256. package/src/console/ui/flows/contract.test.ts +89 -0
  257. package/src/console/ui/flows/contract.ts +353 -0
  258. package/src/console/ui/flows/fixture.ts +81 -0
  259. package/src/console/ui/flows/graph.test.ts +101 -0
  260. package/src/console/ui/flows/graph.ts +549 -0
  261. package/src/console/ui/flows/index.ts +87 -0
  262. package/src/console/ui/flows/save-as-test.test.ts +47 -0
  263. package/src/console/ui/flows/save-as-test.ts +99 -0
  264. package/src/console/ui/flows/search.ts +255 -0
  265. package/src/console/ui/flows/tiers.ts +140 -0
  266. package/src/console/ui/gates/GatesA11yView.tsx +192 -0
  267. package/src/console/ui/gates/a11y.test.tsx +116 -0
  268. package/src/console/ui/gates/audit.test.ts +40 -0
  269. package/src/console/ui/gates/audit.ts +63 -0
  270. package/src/console/ui/gates/denial.test.ts +36 -0
  271. package/src/console/ui/gates/denial.ts +51 -0
  272. package/src/console/ui/gates/findings.ts +19 -0
  273. package/src/console/ui/gates/fixture.ts +189 -0
  274. package/src/console/ui/gates/group.test.ts +30 -0
  275. package/src/console/ui/gates/group.ts +102 -0
  276. package/src/console/ui/gates/index.ts +47 -0
  277. package/src/console/ui/gates/search.test.ts +49 -0
  278. package/src/console/ui/gates/search.ts +115 -0
  279. package/src/console/ui/gates/types.ts +121 -0
  280. package/src/console/ui/overview/OverviewA11yView.tsx +152 -0
  281. package/src/console/ui/overview/a11y.test.tsx +113 -0
  282. package/src/console/ui/overview/busiest.ts +26 -0
  283. package/src/console/ui/overview/compose.ts +133 -0
  284. package/src/console/ui/overview/cost.test.ts +39 -0
  285. package/src/console/ui/overview/cost.ts +138 -0
  286. package/src/console/ui/overview/fixture.ts +161 -0
  287. package/src/console/ui/overview/golden.ts +57 -0
  288. package/src/console/ui/overview/index.ts +59 -0
  289. package/src/console/ui/overview/rank.test.ts +136 -0
  290. package/src/console/ui/overview/rank.ts +210 -0
  291. package/src/console/ui/overview/slo.test.ts +73 -0
  292. package/src/console/ui/overview/slo.ts +229 -0
  293. package/src/console/ui/overview/types.ts +121 -0
  294. package/src/console/ui/overview/verdict.ts +131 -0
  295. package/src/console/ui/plugins/PluginsA11yView.tsx +227 -0
  296. package/src/console/ui/plugins/a11y.test.tsx +97 -0
  297. package/src/console/ui/plugins/command.test.ts +22 -0
  298. package/src/console/ui/plugins/command.ts +27 -0
  299. package/src/console/ui/plugins/findings.ts +39 -0
  300. package/src/console/ui/plugins/fixture.ts +233 -0
  301. package/src/console/ui/plugins/group.test.ts +38 -0
  302. package/src/console/ui/plugins/group.ts +67 -0
  303. package/src/console/ui/plugins/index.ts +40 -0
  304. package/src/console/ui/plugins/search.ts +67 -0
  305. package/src/console/ui/plugins/types.ts +115 -0
  306. package/src/console/ui/runs/RunsA11yView.tsx +267 -0
  307. package/src/console/ui/runs/a11y.test.tsx +99 -0
  308. package/src/console/ui/runs/explain.test.ts +23 -0
  309. package/src/console/ui/runs/explain.ts +32 -0
  310. package/src/console/ui/runs/fixture.ts +189 -0
  311. package/src/console/ui/runs/group.test.ts +24 -0
  312. package/src/console/ui/runs/group.ts +85 -0
  313. package/src/console/ui/runs/histogram.test.ts +31 -0
  314. package/src/console/ui/runs/histogram.ts +85 -0
  315. package/src/console/ui/runs/index.ts +75 -0
  316. package/src/console/ui/runs/project.ts +122 -0
  317. package/src/console/ui/runs/query.test.ts +50 -0
  318. package/src/console/ui/runs/query.ts +283 -0
  319. package/src/console/ui/runs/search.test.ts +45 -0
  320. package/src/console/ui/runs/search.ts +141 -0
  321. package/src/console/ui/runs/trace-link.test.ts +30 -0
  322. package/src/console/ui/runs/trace-link.ts +99 -0
  323. package/src/console/ui/runs/types.ts +137 -0
  324. package/src/console/ui/shell/App.tsx +56 -0
  325. package/src/console/ui/shell/client.ts +1715 -0
  326. package/src/console/ui/shell/components/ui.tsx +110 -0
  327. package/src/console/ui/shell/index.html +12 -0
  328. package/src/console/ui/shell/layout/Shell.tsx +95 -0
  329. package/src/console/ui/shell/main.tsx +281 -0
  330. package/src/console/ui/shell/panels/Access.tsx +5 -0
  331. package/src/console/ui/shell/panels/Ai.tsx +5 -0
  332. package/src/console/ui/shell/panels/Architecture.tsx +5 -0
  333. package/src/console/ui/shell/panels/Channels.tsx +5 -0
  334. package/src/console/ui/shell/panels/Clock.tsx +5 -0
  335. package/src/console/ui/shell/panels/Diff.tsx +5 -0
  336. package/src/console/ui/shell/panels/Flows.tsx +5 -0
  337. package/src/console/ui/shell/panels/Gates.tsx +5 -0
  338. package/src/console/ui/shell/panels/Overview.tsx +6 -0
  339. package/src/console/ui/shell/panels/Plugins.tsx +5 -0
  340. package/src/console/ui/shell/panels/Runs.tsx +5 -0
  341. package/src/console/ui/shell/panels/Signals.tsx +5 -0
  342. package/src/console/ui/shell/panels/Store.tsx +5 -0
  343. package/src/console/ui/shell/panels/Traces.tsx +5 -0
  344. package/src/console/ui/shell/panels/Vault.tsx +5 -0
  345. package/src/console/ui/shell/panels/access/AccessPanel.tsx +813 -0
  346. package/src/console/ui/shell/panels/ai/AiPanel.tsx +563 -0
  347. package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +377 -0
  348. package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +454 -0
  349. package/src/console/ui/shell/panels/clock/ClockPanel.tsx +479 -0
  350. package/src/console/ui/shell/panels/diff/DiffPanel.tsx +275 -0
  351. package/src/console/ui/shell/panels/flows/ContractEditor.tsx +301 -0
  352. package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +350 -0
  353. package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +502 -0
  354. package/src/console/ui/shell/panels/gates/GatesPanel.tsx +482 -0
  355. package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +428 -0
  356. package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +413 -0
  357. package/src/console/ui/shell/panels/runs/RunsPanel.tsx +649 -0
  358. package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +840 -0
  359. package/src/console/ui/shell/panels/store/StorePanel.tsx +787 -0
  360. package/src/console/ui/shell/panels/traces/TracesPanel.tsx +539 -0
  361. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +449 -0
  362. package/src/console/ui/shell/plugin/Sandbox.tsx +29 -0
  363. package/src/console/ui/shell/setup/Wizard.tsx +189 -0
  364. package/src/console/ui/shell/styles.css +75 -0
  365. package/src/console/ui/signals/SignalsA11yView.tsx +276 -0
  366. package/src/console/ui/signals/a11y.test.tsx +99 -0
  367. package/src/console/ui/signals/confirmation.test.ts +39 -0
  368. package/src/console/ui/signals/confirmation.ts +63 -0
  369. package/src/console/ui/signals/dry-run.test.ts +18 -0
  370. package/src/console/ui/signals/dry-run.ts +36 -0
  371. package/src/console/ui/signals/durable.test.ts +22 -0
  372. package/src/console/ui/signals/durable.ts +41 -0
  373. package/src/console/ui/signals/findings.ts +33 -0
  374. package/src/console/ui/signals/fixture.ts +242 -0
  375. package/src/console/ui/signals/group.test.ts +32 -0
  376. package/src/console/ui/signals/group.ts +49 -0
  377. package/src/console/ui/signals/index.ts +52 -0
  378. package/src/console/ui/signals/monitor.test.ts +30 -0
  379. package/src/console/ui/signals/monitor.ts +79 -0
  380. package/src/console/ui/signals/schema-form.test.ts +34 -0
  381. package/src/console/ui/signals/schema-form.ts +112 -0
  382. package/src/console/ui/signals/search.ts +102 -0
  383. package/src/console/ui/signals/types.ts +71 -0
  384. package/src/console/ui/store/StoreA11yView.tsx +199 -0
  385. package/src/console/ui/store/a11y.test.tsx +99 -0
  386. package/src/console/ui/store/cache-view.test.ts +13 -0
  387. package/src/console/ui/store/cache-view.ts +36 -0
  388. package/src/console/ui/store/confirmation.test.ts +38 -0
  389. package/src/console/ui/store/confirmation.ts +55 -0
  390. package/src/console/ui/store/dry-run.test.ts +15 -0
  391. package/src/console/ui/store/dry-run.ts +29 -0
  392. package/src/console/ui/store/fixture.ts +163 -0
  393. package/src/console/ui/store/group.test.ts +21 -0
  394. package/src/console/ui/store/group.ts +41 -0
  395. package/src/console/ui/store/index.ts +40 -0
  396. package/src/console/ui/store/search.ts +78 -0
  397. package/src/console/ui/store/types.ts +65 -0
  398. package/src/console/ui/store/will-not-fire.test.ts +19 -0
  399. package/src/console/ui/store/will-not-fire.ts +40 -0
  400. package/src/console/ui/traces/TracesA11yView.tsx +200 -0
  401. package/src/console/ui/traces/a11y.test.tsx +97 -0
  402. package/src/console/ui/traces/chain.test.ts +61 -0
  403. package/src/console/ui/traces/chain.ts +144 -0
  404. package/src/console/ui/traces/critical-path.test.ts +24 -0
  405. package/src/console/ui/traces/critical-path.ts +59 -0
  406. package/src/console/ui/traces/filter.test.ts +78 -0
  407. package/src/console/ui/traces/filter.ts +112 -0
  408. package/src/console/ui/traces/fixture.ts +126 -0
  409. package/src/console/ui/traces/fold.test.ts +67 -0
  410. package/src/console/ui/traces/fold.ts +170 -0
  411. package/src/console/ui/traces/index.ts +64 -0
  412. package/src/console/ui/traces/mini.ts +65 -0
  413. package/src/console/ui/traces/replay.test.ts +24 -0
  414. package/src/console/ui/traces/replay.ts +35 -0
  415. package/src/console/ui/traces/sampling.test.ts +26 -0
  416. package/src/console/ui/traces/sampling.ts +66 -0
  417. package/src/console/ui/traces/search.ts +148 -0
  418. package/src/console/ui/traces/tier.ts +72 -0
  419. package/src/console/ui/traces/types.ts +125 -0
  420. package/src/console/ui/tsconfig.json +20 -0
  421. package/src/console/ui/vault/VaultA11yView.tsx +177 -0
  422. package/src/console/ui/vault/a11y.test.tsx +97 -0
  423. package/src/console/ui/vault/blast-radius.test.ts +35 -0
  424. package/src/console/ui/vault/blast-radius.ts +55 -0
  425. package/src/console/ui/vault/confirmation.test.ts +41 -0
  426. package/src/console/ui/vault/confirmation.ts +39 -0
  427. package/src/console/ui/vault/dormant.test.ts +37 -0
  428. package/src/console/ui/vault/dormant.ts +28 -0
  429. package/src/console/ui/vault/export-safe.test.ts +30 -0
  430. package/src/console/ui/vault/export-safe.ts +65 -0
  431. package/src/console/ui/vault/fixture.ts +75 -0
  432. package/src/console/ui/vault/group.test.ts +25 -0
  433. package/src/console/ui/vault/group.ts +50 -0
  434. package/src/console/ui/vault/index.ts +45 -0
  435. package/src/console/ui/vault/search.ts +62 -0
  436. package/src/console/ui/vault/types.ts +57 -0
  437. package/src/console/ui/vite.config.ts +84 -0
  438. package/src/console/xss.gate.test.ts +118 -0
  439. package/src/docker/compose.ts +226 -0
  440. package/src/docker/credentials.ts +25 -0
  441. package/src/docker/derive.ts +83 -0
  442. package/src/docker/docker.test.ts +185 -0
  443. package/src/docker/dockerfile.integration.test.ts +170 -0
  444. package/src/docker/dockerfile.ts +39 -0
  445. package/src/docker/helpers.ts +103 -0
  446. package/src/docker/index.ts +52 -0
  447. package/src/docker/pin.ts +90 -0
  448. package/src/docker/recipes/index.ts +33 -0
  449. package/src/docker/recipes/postgres.ts +18 -0
  450. package/src/docker/recipes/redis.ts +18 -0
  451. package/src/docker/stack.integration.test.ts +140 -0
  452. package/src/docker/stack.ts +62 -0
  453. package/src/docker/types.ts +134 -0
  454. package/src/drivers/ai-anthropic.ts +128 -0
  455. package/src/drivers/ai-mock.ts +82 -0
  456. package/src/drivers/ai-openai-compatible.ts +139 -0
  457. package/src/drivers/ai-providers.test.ts +163 -0
  458. package/src/drivers/ai-types.ts +83 -0
  459. package/src/drivers/bun-native-completeness.test.ts +155 -0
  460. package/src/drivers/channel-console.ts +118 -0
  461. package/src/drivers/channel-fcm.ts +96 -0
  462. package/src/drivers/channel-resend.ts +27 -0
  463. package/src/drivers/channel-smtp.ts +33 -0
  464. package/src/drivers/channel-types.ts +160 -0
  465. package/src/drivers/channel-unifonic.ts +79 -0
  466. package/src/drivers/channel-wa-cloud.ts +84 -0
  467. package/src/drivers/channel-webpush.ts +317 -0
  468. package/src/drivers/conformance.test.ts +89 -0
  469. package/src/drivers/conformance.ts +162 -0
  470. package/src/drivers/fs.ts +73 -0
  471. package/src/drivers/index.ts +194 -0
  472. package/src/drivers/kv-lua.ts +222 -0
  473. package/src/drivers/memory.ts +472 -0
  474. package/src/drivers/pgvector.ts +130 -0
  475. package/src/drivers/postgres.ts +221 -0
  476. package/src/drivers/redis.ts +254 -0
  477. package/src/drivers/s3.ts +129 -0
  478. package/src/drivers/signal-engine.ts +690 -0
  479. package/src/drivers/signal-memory.ts +27 -0
  480. package/src/drivers/signal-nats.ts +131 -0
  481. package/src/drivers/signal-postgres.ts +1089 -0
  482. package/src/drivers/signal-redis.ts +275 -0
  483. package/src/drivers/signal-types.ts +328 -0
  484. package/src/drivers/sqlite.ts +53 -0
  485. package/src/drivers/types.ts +334 -0
  486. package/src/drivers/vault-dotenv-parse.ts +56 -0
  487. package/src/drivers/vault-env.ts +101 -0
  488. package/src/drivers/vault-infisical.ts +61 -0
  489. package/src/drivers/vault-managed.ts +42 -0
  490. package/src/drivers/vault-memory.ts +38 -0
  491. package/src/drivers/vault-openbao.ts +80 -0
  492. package/src/drivers/vault-sops.ts +252 -0
  493. package/src/drivers/vault-types.ts +84 -0
  494. package/src/elements/ai/declare.ts +206 -0
  495. package/src/elements/ai/eval.ts +113 -0
  496. package/src/elements/ai/pii.ts +108 -0
  497. package/src/elements/ai/runtime.ts +540 -0
  498. package/src/elements/ai/schema.ts +194 -0
  499. package/src/elements/ai.test.ts +393 -0
  500. package/src/elements/ai.ts +56 -0
  501. package/src/elements/channel/consent.ts +81 -0
  502. package/src/elements/channel/costs.test.ts +62 -0
  503. package/src/elements/channel/costs.ts +130 -0
  504. package/src/elements/channel/declare.ts +141 -0
  505. package/src/elements/channel/email-auth.test.ts +47 -0
  506. package/src/elements/channel/email-auth.ts +109 -0
  507. package/src/elements/channel/locale.ts +97 -0
  508. package/src/elements/channel/mask.test.ts +19 -0
  509. package/src/elements/channel/mask.ts +60 -0
  510. package/src/elements/channel/mime.ts +23 -0
  511. package/src/elements/channel/outcomes.test.ts +40 -0
  512. package/src/elements/channel/outcomes.ts +126 -0
  513. package/src/elements/channel/receipts.ts +121 -0
  514. package/src/elements/channel/runtime.ts +500 -0
  515. package/src/elements/channel/suppression.ts +136 -0
  516. package/src/elements/channel.test.ts +232 -0
  517. package/src/elements/channel.ts +109 -0
  518. package/src/elements/clock/actions.ts +170 -0
  519. package/src/elements/clock/declare.ts +58 -0
  520. package/src/elements/clock/dst.ts +197 -0
  521. package/src/elements/clock/durable.ts +140 -0
  522. package/src/elements/clock/duration.ts +29 -0
  523. package/src/elements/clock/health.test.ts +103 -0
  524. package/src/elements/clock/health.ts +112 -0
  525. package/src/elements/clock/leader.ts +127 -0
  526. package/src/elements/clock/reconcile.ts +241 -0
  527. package/src/elements/clock/runtime.ts +243 -0
  528. package/src/elements/clock/schedule.ts +262 -0
  529. package/src/elements/clock/time-travel.ts +53 -0
  530. package/src/elements/clock.test.ts +365 -0
  531. package/src/elements/clock.ts +80 -0
  532. package/src/elements/gate/declare.ts +134 -0
  533. package/src/elements/gate/permissions.ts +104 -0
  534. package/src/elements/gate/runtime.ts +177 -0
  535. package/src/elements/gate/strategies.ts +388 -0
  536. package/src/elements/gate.test.ts +145 -0
  537. package/src/elements/gate.ts +41 -0
  538. package/src/elements/index.ts +169 -0
  539. package/src/elements/signal/chaos-child.ts +47 -0
  540. package/src/elements/signal/declare.ts +77 -0
  541. package/src/elements/signal/dry-run-replay.test.ts +95 -0
  542. package/src/elements/signal/dry-run-write-isolation.test.ts +94 -0
  543. package/src/elements/signal/reconcile.test.ts +23 -0
  544. package/src/elements/signal/reconcile.ts +122 -0
  545. package/src/elements/signal/runtime.ts +94 -0
  546. package/src/elements/signal.test.ts +457 -0
  547. package/src/elements/signal.ts +26 -0
  548. package/src/elements/store/cache.ts +197 -0
  549. package/src/elements/store/classify.ts +125 -0
  550. package/src/elements/store/declare.ts +200 -0
  551. package/src/elements/store/files-policy.test.ts +31 -0
  552. package/src/elements/store/files-policy.ts +70 -0
  553. package/src/elements/store/replica.ts +68 -0
  554. package/src/elements/store/runtime.ts +393 -0
  555. package/src/elements/store/sql-condition.ts +205 -0
  556. package/src/elements/store/sql-session.ts +579 -0
  557. package/src/elements/store/table.ts +282 -0
  558. package/src/elements/store.test.ts +370 -0
  559. package/src/elements/store.ts +99 -0
  560. package/src/elements/vault/declare.ts +143 -0
  561. package/src/elements/vault/fingerprint.ts +30 -0
  562. package/src/elements/vault/redact.ts +52 -0
  563. package/src/elements/vault/runtime.ts +461 -0
  564. package/src/elements/vault.test.ts +296 -0
  565. package/src/elements/vault.ts +44 -0
  566. package/src/index.ts +183 -0
  567. package/src/kernel/adopt-routes.ts +194 -0
  568. package/src/kernel/app.ts +1068 -0
  569. package/src/kernel/auth-resolve.ts +93 -0
  570. package/src/kernel/boot.test.ts +173 -0
  571. package/src/kernel/boot.ts +439 -0
  572. package/src/kernel/budget-entry.ts +55 -0
  573. package/src/kernel/budget.test.ts +19 -0
  574. package/src/kernel/call.test.ts +83 -0
  575. package/src/kernel/capability.ts +113 -0
  576. package/src/kernel/dry-run.test.ts +64 -0
  577. package/src/kernel/dry-run.ts +171 -0
  578. package/src/kernel/effects.test.ts +89 -0
  579. package/src/kernel/effects.ts +140 -0
  580. package/src/kernel/errors.registry.test.ts +39 -0
  581. package/src/kernel/errors.ts +225 -0
  582. package/src/kernel/flow.test.ts +154 -0
  583. package/src/kernel/flow.ts +290 -0
  584. package/src/kernel/fx.test.ts +245 -0
  585. package/src/kernel/fx.ts +996 -0
  586. package/src/kernel/hook-timing.test.ts +72 -0
  587. package/src/kernel/hook-timing.ts +190 -0
  588. package/src/kernel/hooks.test.ts +181 -0
  589. package/src/kernel/hooks.ts +275 -0
  590. package/src/kernel/index.ts +278 -0
  591. package/src/kernel/journal.ts +405 -0
  592. package/src/kernel/journey.ts +75 -0
  593. package/src/kernel/on.ts +74 -0
  594. package/src/kernel/pipeline.test.ts +349 -0
  595. package/src/kernel/pipeline.ts +245 -0
  596. package/src/kernel/plug.ts +82 -0
  597. package/src/kernel/plugin/capabilities.test.ts +84 -0
  598. package/src/kernel/plugin/conflicts.test.ts +106 -0
  599. package/src/kernel/plugin/decorate.test.ts +111 -0
  600. package/src/kernel/plugin/scoping.test.ts +138 -0
  601. package/src/kernel/plugin.ts +485 -0
  602. package/src/kernel/rate-limit.ts +25 -0
  603. package/src/kernel/registry.ts +398 -0
  604. package/src/kernel/router.test.ts +114 -0
  605. package/src/kernel/router.ts +556 -0
  606. package/src/kernel/routing-budget.test.ts +19 -0
  607. package/src/kernel/run-telemetry.ts +70 -0
  608. package/src/kernel/triggers.ts +324 -0
  609. package/src/kernel/unit.ts +88 -0
  610. package/src/manifest/diff.test.ts +866 -0
  611. package/src/manifest/diff.ts +1670 -0
  612. package/src/manifest/fixtures/base.manifest.json +112 -0
  613. package/src/manifest/fixtures/skyport.excerpt.json +51 -0
  614. package/src/manifest/fixtures/skyport.manifest.json +153 -0
  615. package/src/manifest/index.ts +27 -0
  616. package/src/manifest/types.ts +358 -0
  617. package/src/manifest/undeclared.test.ts +82 -0
  618. package/src/manifest/undeclared.ts +65 -0
  619. package/src/manifest/validate.test.ts +105 -0
  620. package/src/manifest/validate.ts +174 -0
  621. package/src/mcp/authorization.ts +340 -0
  622. package/src/mcp/confirmation.ts +174 -0
  623. package/src/mcp/data.ts +90 -0
  624. package/src/mcp/index.ts +80 -0
  625. package/src/mcp/injection.gate.test.ts +176 -0
  626. package/src/mcp/mcp.test.ts +348 -0
  627. package/src/mcp/protocol.ts +172 -0
  628. package/src/mcp/server.ts +283 -0
  629. package/src/mcp/session.ts +139 -0
  630. package/src/mcp/tools.ts +391 -0
  631. package/src/plugins/catalogue.test.ts +48 -0
  632. package/src/plugins/catalogue.ts +113 -0
  633. package/src/plugins/node-import-scan.test.ts +28 -0
  634. package/src/plugins/node-import-scan.ts +98 -0
  635. package/src/plugins/supply-chain.test.ts +48 -0
  636. package/src/plugins/supply-chain.ts +460 -0
  637. package/src/release/index.ts +30 -0
  638. package/src/release/limits.ts +20 -0
  639. package/src/release/measure.ts +443 -0
  640. package/src/release/publish.ts +56 -0
  641. package/src/runs/bench.test.ts +93 -0
  642. package/src/runs/collect.ts +144 -0
  643. package/src/runs/drivers/clickhouse.ts +108 -0
  644. package/src/runs/drivers/files.ts +201 -0
  645. package/src/runs/drivers/memory.ts +94 -0
  646. package/src/runs/drivers/postgres.ts +110 -0
  647. package/src/runs/duckdb.ts +99 -0
  648. package/src/runs/index.ts +82 -0
  649. package/src/runs/outlier.ts +180 -0
  650. package/src/runs/parquet.ts +210 -0
  651. package/src/runs/privacy.ts +49 -0
  652. package/src/runs/runs.test.ts +324 -0
  653. package/src/runs/runtime.ts +229 -0
  654. package/src/runs/shred.ts +243 -0
  655. package/src/runs/telemetry.ts +10 -0
  656. package/src/runs/types.ts +179 -0
  657. package/src/runtime/bun.ts +140 -0
  658. package/src/runtime/cold-start.bench.ts +20 -0
  659. package/src/runtime/index.ts +46 -0
  660. package/src/runtime/primitives.ts +242 -0
  661. package/src/runtime/security.test.ts +170 -0
  662. package/src/runtime/security.ts +168 -0
  663. package/src/runtime/serve.test.ts +223 -0
  664. package/src/runtime/types.ts +217 -0
  665. package/src/runtime/web-standard.ts +77 -0
  666. package/src/test/create-test-app.test.ts +161 -0
  667. package/src/test/create-test-app.ts +533 -0
  668. package/src/test/index.ts +21 -0
  669. package/src/test/provisions.integration.test.ts +174 -0
  670. package/src/upgrade/codemods.test.ts +58 -0
  671. package/src/upgrade/codemods.ts +83 -0
  672. package/src/validation/index.ts +23 -0
  673. package/src/validation/standard-schema.test.ts +96 -0
  674. package/src/validation/standard-schema.ts +316 -0
@@ -0,0 +1,1715 @@
1
+ /**
2
+ * Console UI client — `createClient` against the ConsoleApp on :6533.
3
+ */
4
+
5
+ import { createClient } from "../../../client/create.ts";
6
+
7
+ /** Session tokens held in memory (cookies are HttpOnly / SameSite=Strict). */
8
+ let accessToken: string | null = null;
9
+
10
+ /**
11
+ * Store the operator access token after claim/login.
12
+ *
13
+ * @param token - Access token or null to clear
14
+ */
15
+ export function setAccessToken(token: string | null): void {
16
+ accessToken = token;
17
+ if (token) {
18
+ sessionStorage.setItem("oke_console_at", token);
19
+ } else {
20
+ sessionStorage.removeItem("oke_console_at");
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Restore token from sessionStorage (tab lifetime).
26
+ */
27
+ export function restoreAccessToken(): void {
28
+ accessToken = sessionStorage.getItem("oke_console_at");
29
+ }
30
+
31
+ /** Loose result shape from Console REST calls. */
32
+ type CallResult<T> = Promise<{
33
+ data: T | null;
34
+ error: { code: string } | null;
35
+ }>;
36
+
37
+ /** Access key row (client). */
38
+ type AccessKeyClient = {
39
+ id: string;
40
+ name: string;
41
+ plane: "user" | "operator";
42
+ scopes: string[];
43
+ createdAt: number;
44
+ lastUsedAt: number | null;
45
+ expiresAt: number | null;
46
+ revokedAt: number | null;
47
+ rateLimit: { max: number; per: string } | null;
48
+ ipAllowlist: string[];
49
+ unused90d: boolean;
50
+ };
51
+
52
+ /** Access operator row (client). */
53
+ type AccessOperatorClient = {
54
+ id: string;
55
+ email: string;
56
+ name: string;
57
+ status: "active" | "suspended" | "invited";
58
+ roles: string[];
59
+ scopes: string[];
60
+ lastSeenAt: number | null;
61
+ neverSignedIn: boolean;
62
+ };
63
+
64
+ /** Access invite row (client). */
65
+ type AccessInviteClient = {
66
+ id: string;
67
+ email: string;
68
+ invitedBy: string;
69
+ createdAt: number;
70
+ expiresAt: number;
71
+ expired: boolean;
72
+ };
73
+
74
+ /** Access plane section (client). */
75
+ type AccessPlaneClient = {
76
+ plane: "user" | "operator";
77
+ operators?: AccessOperatorClient[];
78
+ users?: Array<{
79
+ id: string;
80
+ email: string;
81
+ name: string;
82
+ status: "active" | "disabled";
83
+ roles: string[];
84
+ scopes: string[];
85
+ }>;
86
+ roles: Array<{
87
+ id: string;
88
+ name: string;
89
+ plane: "user" | "operator";
90
+ description: string;
91
+ scopes: string[];
92
+ memberCount: number;
93
+ }>;
94
+ keys: AccessKeyClient[];
95
+ invites?: AccessInviteClient[];
96
+ grantableScopes: string[];
97
+ };
98
+
99
+ /** Console client surface used by the shell (keeps UI free of App import). */
100
+ interface ConsoleClient {
101
+ readonly console: {
102
+ setupStatus: (input: Record<string, never>) => CallResult<{
103
+ setupClosed: boolean;
104
+ claimRequired: boolean;
105
+ }>;
106
+ setupClaim: (input: {
107
+ claimCode: string;
108
+ email: string;
109
+ name: string;
110
+ password: string;
111
+ }) => CallResult<{
112
+ accessToken: string;
113
+ refreshToken: string;
114
+ operatorId: string;
115
+ email: string;
116
+ name: string;
117
+ }>;
118
+ sessionLogin: (input: {
119
+ email: string;
120
+ password: string;
121
+ }) => CallResult<{
122
+ accessToken: string;
123
+ refreshToken: string;
124
+ operatorId: string;
125
+ email: string;
126
+ name: string;
127
+ }>;
128
+ sessionMe: (input: Record<string, never>) => CallResult<{
129
+ operatorId: string;
130
+ email: string;
131
+ name: string;
132
+ setupClosed: boolean;
133
+ }>;
134
+ sessionLogout: (input: Record<string, never>) => CallResult<{ ok: true }>;
135
+ manifestGet: (input: Record<string, never>) => CallResult<{
136
+ manifest: unknown;
137
+ }>;
138
+ runsList: (input: Record<string, never>) => CallResult<{
139
+ runs: Array<{
140
+ id: string;
141
+ parentId: string | null;
142
+ flow: string;
143
+ unit: string | null;
144
+ trigger: string;
145
+ plane: string;
146
+ tenant: string | null;
147
+ principal: string | null;
148
+ gates: string[];
149
+ cache: "hit" | "miss" | "none";
150
+ replica: "primary" | "replica" | null;
151
+ replicaLagMs: number | null;
152
+ cost: number | null;
153
+ promptVersion: number | null;
154
+ buildVersion: string | null;
155
+ startedAt: number;
156
+ endedAt: number;
157
+ durationMs: number;
158
+ error: string | null;
159
+ sampled: "full" | "error" | "sample" | "boost";
160
+ effects: Array<{
161
+ kind:
162
+ | "read"
163
+ | "write"
164
+ | "emit"
165
+ | "send"
166
+ | "ask"
167
+ | "secret"
168
+ | "call";
169
+ resource: string;
170
+ timestamp: number;
171
+ duration: number;
172
+ reversibility:
173
+ | "none"
174
+ | "reversible"
175
+ | "deferred"
176
+ | "irreversible"
177
+ | "capability"
178
+ | "portal";
179
+ }>;
180
+ logs: Array<{
181
+ level: "debug" | "info" | "warn" | "error";
182
+ message: string;
183
+ data?: Record<string, unknown>;
184
+ at: number;
185
+ }>;
186
+ dimensions: Record<string, string | number | boolean | null>;
187
+ }>;
188
+ }>;
189
+ actionPing: (input: { note?: string }) => CallResult<{
190
+ ok: true;
191
+ note?: string;
192
+ at: number;
193
+ }>;
194
+ flowsIdentities: (input: Record<string, never>) => CallResult<{
195
+ identities: Array<{
196
+ id: string;
197
+ email: string;
198
+ name: string;
199
+ status: string;
200
+ scopes: string[];
201
+ }>;
202
+ }>;
203
+ flowsInvoke: (input: {
204
+ flowId: string;
205
+ body: unknown;
206
+ asUserId: string;
207
+ confirmation?: string;
208
+ reason?: string;
209
+ }) => CallResult<{
210
+ ok: true;
211
+ flowId: string;
212
+ asUserId: string;
213
+ trigger: string;
214
+ response: unknown;
215
+ peakTier: string;
216
+ auditedAt: number;
217
+ }>;
218
+ tracesReplay: (input: {
219
+ rootId: string;
220
+ dryRun: boolean;
221
+ }) => CallResult<{
222
+ ok: true;
223
+ rootId: string;
224
+ dryRun: boolean;
225
+ at: number;
226
+ }>;
227
+ signalsList: (input: Record<string, never>) => CallResult<{
228
+ signals: Array<{
229
+ name: string;
230
+ delivery: "once" | "broadcast" | "live";
231
+ retries: number;
232
+ deadLetterEnabled: boolean;
233
+ orphaned: boolean;
234
+ pending: number;
235
+ inflight: number;
236
+ dead: number;
237
+ delivered: number;
238
+ outboxLagMs: number | null;
239
+ connections: number;
240
+ throughputPerSec: number;
241
+ schema?: unknown;
242
+ subscribers: Array<{
243
+ id: string;
244
+ lag: number;
245
+ errorCount: number;
246
+ }>;
247
+ recentLive: unknown[];
248
+ deadLetters: Array<{
249
+ id: string;
250
+ signal: string;
251
+ payload: unknown;
252
+ delivery: "once" | "broadcast" | "live";
253
+ attempts: number;
254
+ failures: Array<{
255
+ code: string;
256
+ message: string;
257
+ at: number;
258
+ attempt: number;
259
+ }>;
260
+ createdAt: number;
261
+ availableAt: number;
262
+ status: "dead";
263
+ causeRunId?: string;
264
+ causeFlow?: string;
265
+ }>;
266
+ producers: Array<{
267
+ flowId: string;
268
+ durable: boolean;
269
+ external: boolean;
270
+ peakTier: string;
271
+ }>;
272
+ consumers: Array<{
273
+ flowId: string;
274
+ durable: boolean;
275
+ external: boolean;
276
+ peakTier: string;
277
+ }>;
278
+ consumersDurable: boolean | null;
279
+ }>;
280
+ }>;
281
+ signalsReplay: (input: {
282
+ signal: string;
283
+ messageIds?: string[];
284
+ subscriberId?: string;
285
+ ratePerSec?: number;
286
+ dryRun: boolean;
287
+ payloads?: Record<string, unknown>;
288
+ confirmation?: string;
289
+ reason?: string;
290
+ }) => CallResult<{
291
+ ok: true;
292
+ attempted: number;
293
+ succeeded: number;
294
+ failed: number;
295
+ dryRun: boolean;
296
+ results: Array<{
297
+ id: string;
298
+ ok: boolean;
299
+ error?: { code: string; message: string };
300
+ }>;
301
+ wouldHaveFired: Array<{
302
+ kind: "send" | "ask";
303
+ resource: string;
304
+ messageId?: string;
305
+ }>;
306
+ at: number;
307
+ }>;
308
+ signalsDryRunReplay: (input: {
309
+ signal: string;
310
+ messageIds?: string[];
311
+ subscriberId?: string;
312
+ ratePerSec?: number;
313
+ payloads?: Record<string, unknown>;
314
+ }) => CallResult<{
315
+ ok: true;
316
+ attempted: number;
317
+ succeeded: number;
318
+ failed: number;
319
+ dryRun: boolean;
320
+ results: Array<{
321
+ id: string;
322
+ ok: boolean;
323
+ error?: { code: string; message: string };
324
+ }>;
325
+ wouldHaveFired: Array<{
326
+ kind: "send" | "ask";
327
+ resource: string;
328
+ messageId?: string;
329
+ }>;
330
+ at: number;
331
+ }>;
332
+ signalsDiscard: (input: {
333
+ signal: string;
334
+ messageIds: string[];
335
+ confirmation?: string;
336
+ reason?: string;
337
+ }) => CallResult<{
338
+ ok: true;
339
+ discarded: number;
340
+ at: number;
341
+ }>;
342
+ storeList: (input: Record<string, never>) => CallResult<{
343
+ tenancyDeclared: boolean;
344
+ tenants: string[];
345
+ stores: Array<{
346
+ ref: string;
347
+ facet: "sql" | "kv" | "files" | "index";
348
+ name: string;
349
+ children: Array<{
350
+ name: string;
351
+ effectRef: string;
352
+ writers: string[];
353
+ readers: string[];
354
+ cache: {
355
+ producedByRead: string;
356
+ invalidatedByWrites: string[];
357
+ invalidatingFlowIds: string[];
358
+ };
359
+ willNotFire: {
360
+ writerFlowIds: string[];
361
+ signals: string[];
362
+ channels: string[];
363
+ };
364
+ piiColumns: string[];
365
+ }>;
366
+ replicaLagMs: number | null;
367
+ migrationDrift: {
368
+ declared: string;
369
+ applied: string | null;
370
+ drifted: boolean;
371
+ } | null;
372
+ contentAddressed: boolean;
373
+ warnings: Array<{ code: string; message: string; key: string }>;
374
+ }>;
375
+ }>;
376
+ storeQuery: (input: {
377
+ ref: string;
378
+ child?: string;
379
+ tenant?: string;
380
+ prefix?: string;
381
+ limit?: number;
382
+ vector?: number[];
383
+ topK?: number;
384
+ }) => CallResult<{
385
+ facet: "sql" | "kv" | "files" | "index";
386
+ rows?: Array<Record<string, unknown>>;
387
+ keys?: Array<{
388
+ key: string;
389
+ value?: unknown;
390
+ warnings?: Array<{ code: string; message: string }>;
391
+ }>;
392
+ hits?: Array<{
393
+ id: string;
394
+ score: number;
395
+ meta?: Record<string, unknown>;
396
+ }>;
397
+ masked: boolean;
398
+ routedRole?: "primary" | "replica";
399
+ }>;
400
+ storeReveal: (input: {
401
+ ref: string;
402
+ child?: string;
403
+ tenant?: string;
404
+ id: string;
405
+ column: string;
406
+ }) => CallResult<{ ok: true; value: unknown; at: number }>;
407
+ storeEdit: (input: {
408
+ ref: string;
409
+ child?: string;
410
+ tenant?: string;
411
+ id?: string;
412
+ key?: string;
413
+ patch: Record<string, unknown>;
414
+ confirmation?: string;
415
+ reason?: string;
416
+ commit?: boolean;
417
+ }) => CallResult<{
418
+ ok: true;
419
+ dryRun: boolean;
420
+ applied: boolean;
421
+ willNotFire: {
422
+ writerFlowIds: string[];
423
+ signals: string[];
424
+ channels: string[];
425
+ };
426
+ wouldHaveFired: Array<{ kind: "send" | "ask"; resource: string }>;
427
+ at: number;
428
+ }>;
429
+ storeDelete: (input: {
430
+ ref: string;
431
+ child?: string;
432
+ tenant?: string;
433
+ ids?: string[];
434
+ keys?: string[];
435
+ confirmation?: string;
436
+ reason?: string;
437
+ }) => CallResult<{ ok: true; deleted: number; at: number }>;
438
+ storePurgeCache: (input: {
439
+ resource: string;
440
+ confirmation?: string;
441
+ reason?: string;
442
+ }) => CallResult<{ ok: true; keys: string[]; at: number }>;
443
+ storeSql: (input: {
444
+ ref: string;
445
+ sql: string;
446
+ tenant?: string;
447
+ allowWrite?: boolean;
448
+ }) => CallResult<{
449
+ rows: Array<Record<string, unknown>>;
450
+ masked: boolean;
451
+ routedRole: "primary" | "replica";
452
+ }>;
453
+ storePreview: (input: {
454
+ ref: string;
455
+ child?: string;
456
+ tenant?: string;
457
+ id?: string;
458
+ key?: string;
459
+ patch: Record<string, unknown>;
460
+ }) => CallResult<{
461
+ ok: true;
462
+ dryRun: true;
463
+ willNotFire: {
464
+ writerFlowIds: string[];
465
+ signals: string[];
466
+ channels: string[];
467
+ };
468
+ wouldHaveFired: Array<{ kind: "send" | "ask"; resource: string }>;
469
+ at: number;
470
+ }>;
471
+ vaultList: (input: Record<string, never>) => CallResult<{
472
+ secrets: Array<{
473
+ name: string;
474
+ kind: "secret" | "config";
475
+ sensitive: boolean;
476
+ description?: string;
477
+ rotate?: string;
478
+ fingerprints: Record<string, string>;
479
+ fingerprint: string | null;
480
+ cleartext: string | null;
481
+ winner:
482
+ | "process.env"
483
+ | ".env.local"
484
+ | ".env.stack"
485
+ | "driver"
486
+ | "dev-fallback"
487
+ | null;
488
+ resolution: Array<{
489
+ source:
490
+ | "process.env"
491
+ | ".env.local"
492
+ | ".env.stack"
493
+ | "driver"
494
+ | "dev-fallback";
495
+ present: boolean;
496
+ won: boolean;
497
+ }>;
498
+ readers: string[];
499
+ blastRadius: {
500
+ count: number;
501
+ longestWakeAt: number | null;
502
+ longestOutstandingMs: number | null;
503
+ runIds: string[];
504
+ };
505
+ lastReadAt: number | null;
506
+ sharedFingerprintEnvs: string[];
507
+ }>;
508
+ env: string;
509
+ }>;
510
+ vaultSet: (input: {
511
+ name: string;
512
+ value: string;
513
+ confirmation?: string;
514
+ reason?: string;
515
+ }) => CallResult<{
516
+ ok: true;
517
+ name: string;
518
+ fingerprint: string | null;
519
+ at: number;
520
+ }>;
521
+ vaultRotate: (input: {
522
+ name: string;
523
+ value: string;
524
+ confirmation?: string;
525
+ reason?: string;
526
+ }) => CallResult<{
527
+ ok: true;
528
+ name: string;
529
+ fingerprint: string | null;
530
+ at: number;
531
+ }>;
532
+ aiList: (input: Record<string, never>) => CallResult<{
533
+ prompts: Array<{
534
+ name: string;
535
+ version?: number;
536
+ model?: string;
537
+ evals?: string;
538
+ budgetMaxCostPerCall: number | null;
539
+ manifestDiffPath: string;
540
+ }>;
541
+ agents: Array<{
542
+ name: string;
543
+ tools: string[];
544
+ maxSteps?: number;
545
+ model?: string;
546
+ budgetMaxCostPerRun: number | null;
547
+ }>;
548
+ versions: Array<{
549
+ prompt: string;
550
+ version: number;
551
+ sampleCount: number;
552
+ cost: {
553
+ samples: number[];
554
+ mean: number;
555
+ p50: number;
556
+ p95: number;
557
+ buckets: Array<{ min: number; max: number; count: number }>;
558
+ };
559
+ latencyMs: {
560
+ samples: number[];
561
+ mean: number;
562
+ p50: number;
563
+ p95: number;
564
+ buckets: Array<{ min: number; max: number; count: number }>;
565
+ };
566
+ evalScore: {
567
+ samples: number[];
568
+ mean: number;
569
+ p50: number;
570
+ p95: number;
571
+ buckets: Array<{ min: number; max: number; count: number }>;
572
+ };
573
+ schemaInvalidRate: number;
574
+ providerErrorRate: number;
575
+ okRate: number;
576
+ overBudgetRate: number;
577
+ budgetMaxCostPerCall: number | null;
578
+ outcomeCounts: {
579
+ ok: number;
580
+ provider_error: number;
581
+ schema_invalid: number;
582
+ };
583
+ }>;
584
+ allowPii: Array<{
585
+ flowId: string;
586
+ asks: string[];
587
+ pii: "masked" | "allow" | "denied" | null;
588
+ allowPii: boolean;
589
+ source: string | null;
590
+ }>;
591
+ fallbackChains: Array<{
592
+ prompt: string;
593
+ version?: number;
594
+ attempts: Array<{
595
+ model: string;
596
+ ok: boolean;
597
+ error?: string;
598
+ cost?: number;
599
+ latencyMs?: number;
600
+ at: number;
601
+ }>;
602
+ actualCost: number;
603
+ primaryOnlyCost: number | null;
604
+ costConsequence: number | null;
605
+ at: number;
606
+ }>;
607
+ agentRuns: Array<{
608
+ id: string;
609
+ agent: string;
610
+ message: string;
611
+ ok: boolean;
612
+ steps: number;
613
+ cost: number;
614
+ at: number;
615
+ trail: Array<{
616
+ tool: string;
617
+ status: "ok" | "denied";
618
+ effects: Array<{
619
+ kind:
620
+ | "read"
621
+ | "write"
622
+ | "emit"
623
+ | "send"
624
+ | "ask"
625
+ | "secret"
626
+ | "call";
627
+ resource: string;
628
+ }>;
629
+ denial: {
630
+ agent: string;
631
+ tool: string;
632
+ gate: string;
633
+ reason: string;
634
+ at: number;
635
+ } | null;
636
+ at: number;
637
+ }>;
638
+ denials: Array<{
639
+ agent: string;
640
+ tool: string;
641
+ gate: string;
642
+ reason: string;
643
+ at: number;
644
+ }>;
645
+ }>;
646
+ denials: Array<{
647
+ agent: string;
648
+ tool: string;
649
+ gate: string;
650
+ reason: string;
651
+ at: number;
652
+ }>;
653
+ }>;
654
+ clockList: (input: Record<string, never>) => CallResult<{
655
+ now: number;
656
+ crons: Array<{
657
+ name: string;
658
+ status: "active" | "paused" | "orphaned";
659
+ timezone: string;
660
+ overridable: boolean;
661
+ declaredCron?: string;
662
+ declaredEvery?: string;
663
+ effectiveCron?: string;
664
+ effectiveEvery?: string;
665
+ lastRunAt?: number;
666
+ nextRunAt?: number;
667
+ health: {
668
+ driftMs: number | null;
669
+ overdue: boolean;
670
+ missedRuns: number;
671
+ catchUp: "one";
672
+ leaderInstanceId?: string;
673
+ leaderLeaseUntil?: number;
674
+ };
675
+ dstAmbiguity: {
676
+ kind: "gap" | "overlap";
677
+ reason: string;
678
+ on: string;
679
+ localTime: string;
680
+ } | null;
681
+ external: boolean;
682
+ flowIds: string[];
683
+ }>;
684
+ waitingOn: Array<{
685
+ runId: string;
686
+ flow: string;
687
+ label: string;
688
+ wakeAt: number;
689
+ wakeInMs: number;
690
+ step: string | null;
691
+ }>;
692
+ waitingOnCounts: Array<{ label: string; count: number }>;
693
+ timeline: Array<{
694
+ at: number;
695
+ kind: "cron" | "wake";
696
+ name: string;
697
+ meta?: string;
698
+ }>;
699
+ }>;
700
+ clockRunNow: (input: {
701
+ name: string;
702
+ confirmation?: string;
703
+ reason?: string;
704
+ }) => CallResult<{
705
+ ok: true;
706
+ name: string;
707
+ ran: boolean;
708
+ at: number;
709
+ }>;
710
+ clockPause: (input: { name: string }) => CallResult<{
711
+ ok: true;
712
+ name: string;
713
+ status: string;
714
+ at: number;
715
+ }>;
716
+ clockEditSchedule: (input: {
717
+ name: string;
718
+ cron?: string;
719
+ every?: string;
720
+ }) => CallResult<{
721
+ ok: true;
722
+ name: string;
723
+ effectiveCron?: string;
724
+ effectiveEvery?: string;
725
+ at: number;
726
+ }>;
727
+ clockWakeEarly: (input: { runId: string }) => CallResult<{
728
+ ok: true;
729
+ runId: string;
730
+ wakeAt: number;
731
+ resumed: boolean;
732
+ at: number;
733
+ }>;
734
+ channelsList: (input: Record<string, never>) => CallResult<{
735
+ face: "inbox" | "deliverability";
736
+ production: boolean;
737
+ templates: Array<{
738
+ name: string;
739
+ medium: string;
740
+ locales: string[];
741
+ from: string | null;
742
+ schema: unknown;
743
+ }>;
744
+ outcomes: Array<{
745
+ state:
746
+ | "suppressed/opted-out"
747
+ | "suppressed/prior-bounce"
748
+ | "blocked/invalid-address"
749
+ | "soft-bounce"
750
+ | "hard-bounce"
751
+ | "provider-error"
752
+ | "delivered-then-complained";
753
+ count: number;
754
+ verdict: "correct" | "retry" | "suppress" | "review";
755
+ weight: number;
756
+ }>;
757
+ fallback: {
758
+ template: string | null;
759
+ chainExample: string;
760
+ fallbackRate: number;
761
+ fallbackCount: number;
762
+ totalCount: number;
763
+ weeklyDeltaUsd: number;
764
+ primaryMedium: string;
765
+ fallbackMedium: string;
766
+ summary: string;
767
+ };
768
+ inbox: Array<{
769
+ id: string;
770
+ medium: string;
771
+ toMasked: string;
772
+ subject: string | null;
773
+ text: string | null;
774
+ html: string | null;
775
+ template: string | null;
776
+ locale: string | null;
777
+ at: number;
778
+ }>;
779
+ receipts: Array<{
780
+ id: string;
781
+ template: string;
782
+ toMasked: string;
783
+ medium: string;
784
+ locale: string | null;
785
+ localeChain: string[];
786
+ status: string;
787
+ chain: string;
788
+ messageId: string | null;
789
+ at: number;
790
+ error: string | null;
791
+ }>;
792
+ suppression: Array<{
793
+ subjectMasked: string;
794
+ medium: string;
795
+ reason: "opted-out" | "prior-bounce";
796
+ at: number;
797
+ }>;
798
+ }>;
799
+ channelPreview: (input: {
800
+ template: string;
801
+ locale?: string;
802
+ profileLocale?: string;
803
+ acceptLanguage?: string;
804
+ data?: Record<string, unknown>;
805
+ }) => CallResult<{
806
+ template: string;
807
+ locale: string;
808
+ localeChain: string[];
809
+ dir: "ltr" | "rtl";
810
+ subject: string | null;
811
+ text: string | null;
812
+ html: string | null;
813
+ }>;
814
+ channelVerifyAuth: (input: { from: string }) => CallResult<{
815
+ domain: string;
816
+ spf: "pass" | "fail" | "missing";
817
+ dkim: "pass" | "fail" | "missing";
818
+ dmarc: "pass" | "fail" | "missing";
819
+ checkedAt: number;
820
+ }>;
821
+ channelReveal: (input: { id: string }) => CallResult<{
822
+ ok: true;
823
+ id: string;
824
+ to: string;
825
+ at: number;
826
+ }>;
827
+ channelSendTest: (input: {
828
+ template: string;
829
+ to: string;
830
+ locale?: string;
831
+ data?: Record<string, unknown>;
832
+ confirmation?: string;
833
+ reason?: string;
834
+ }) => CallResult<{
835
+ ok: boolean;
836
+ messageId: string;
837
+ status: string;
838
+ chain: string;
839
+ at: number;
840
+ }>;
841
+ gatesList: (input: Record<string, never>) => CallResult<{
842
+ moduleActions: string[];
843
+ flows: Array<{
844
+ flowId: string;
845
+ plane: "user" | "operator";
846
+ gates: string[];
847
+ unguarded: boolean;
848
+ }>;
849
+ gates: Array<{
850
+ name: string;
851
+ kind: "policy" | "rate";
852
+ scopes: string[];
853
+ roles: string[];
854
+ strategy?: string;
855
+ max?: number;
856
+ per?: string;
857
+ keyBy?: string;
858
+ overridable: boolean;
859
+ attachedTo: string[];
860
+ }>;
861
+ principals: Array<{
862
+ kind: "role" | "key" | "user";
863
+ id: string;
864
+ name: string;
865
+ plane: "user" | "operator";
866
+ scopes: string[];
867
+ memberCount?: number;
868
+ email?: string;
869
+ }>;
870
+ violations: Array<{
871
+ kind: "operator-application-scope";
872
+ operatorId: string;
873
+ name: string;
874
+ email: string;
875
+ applicationScopes: string[];
876
+ }>;
877
+ audit: {
878
+ unguardedFlows: string[];
879
+ orphanPermissions: string[];
880
+ emptyRoles: string[];
881
+ unattachedGates: string[];
882
+ };
883
+ widenings: Array<{
884
+ path: string;
885
+ category: string;
886
+ kind: string;
887
+ summary: string;
888
+ before?: unknown;
889
+ after?: unknown;
890
+ }>;
891
+ }>;
892
+ gatesSimulate: (input: {
893
+ flowId: string;
894
+ principal: { kind: "role" | "key" | "user"; id: string };
895
+ meta?: { ip?: string };
896
+ }) => CallResult<{
897
+ flowId: string;
898
+ gates: string[];
899
+ evaluations: Array<{
900
+ name: string;
901
+ allowed: boolean;
902
+ kind: "policy" | "rate";
903
+ remaining?: number;
904
+ retryAfterMs?: number;
905
+ reason?: string;
906
+ }>;
907
+ deniedAt: string | null;
908
+ denial: {
909
+ code: "Unauthorized" | "Forbidden" | "RateLimited";
910
+ data: Record<string, unknown>;
911
+ status: 401 | 403 | 429;
912
+ } | null;
913
+ allowed: boolean;
914
+ }>;
915
+ gatesPowers: (input: {
916
+ kind: "role" | "key" | "user";
917
+ id: string;
918
+ }) => CallResult<{
919
+ scopes: string[];
920
+ allowedFlowIds: string[];
921
+ deniedFlowIds: string[];
922
+ }>;
923
+ accessList: (input: Record<string, never>) => CallResult<{
924
+ operatorPlane: AccessPlaneClient;
925
+ userPlane: AccessPlaneClient;
926
+ hygiene: {
927
+ unusedKeys: AccessKeyClient[];
928
+ neverSignedInOperators: AccessOperatorClient[];
929
+ expiredInvitations: AccessInviteClient[];
930
+ };
931
+ accessTtlMs: number;
932
+ catalog: string[];
933
+ }>;
934
+ accessEffective: (input: {
935
+ kind: "operator" | "user" | "role" | "key";
936
+ id: string;
937
+ }) => CallResult<{
938
+ kind: "operator" | "user" | "role" | "key";
939
+ id: string;
940
+ plane: "user" | "operator";
941
+ scopes: Array<{
942
+ scope: string;
943
+ sources: Array<{ kind: "role" | "direct"; id: string; name: string }>;
944
+ }>;
945
+ }>;
946
+ accessKeyBlast: (input: { keyId: string }) => CallResult<{
947
+ callVolume: number;
948
+ lastUsedAt: number | null;
949
+ sourceAddresses: string[];
950
+ accessTtlMs: number;
951
+ residualAccessNote: string;
952
+ }>;
953
+ accessCreateKey: (input: {
954
+ plane: "user" | "operator";
955
+ name: string;
956
+ scopes: string[];
957
+ expiresAt?: number | null;
958
+ rateLimit?: { max: number; per: string } | null;
959
+ ipAllowlist?: string[];
960
+ }) => CallResult<{
961
+ key: AccessKeyClient;
962
+ secret: string;
963
+ }>;
964
+ accessRevokeKey: (input: {
965
+ keyId: string;
966
+ confirmation?: string;
967
+ reason?: string;
968
+ }) => CallResult<{
969
+ key: AccessKeyClient;
970
+ blastRadius: {
971
+ callVolume: number;
972
+ lastUsedAt: number | null;
973
+ sourceAddresses: string[];
974
+ accessTtlMs: number;
975
+ residualAccessNote: string;
976
+ };
977
+ }>;
978
+ accessRotateKey: (input: {
979
+ keyId: string;
980
+ confirmation?: string;
981
+ reason?: string;
982
+ }) => CallResult<{
983
+ key: AccessKeyClient;
984
+ secret: string;
985
+ blastRadius: {
986
+ callVolume: number;
987
+ lastUsedAt: number | null;
988
+ sourceAddresses: string[];
989
+ accessTtlMs: number;
990
+ residualAccessNote: string;
991
+ };
992
+ }>;
993
+ accessSetRoleGrants: (input: {
994
+ roleId: string;
995
+ scopes: string[];
996
+ }) => CallResult<{ roleId: string; scopes: string[] }>;
997
+ diffList: (input: Record<string, never>) => CallResult<{
998
+ hasBaseline: boolean;
999
+ severity:
1000
+ | "contract-breaking"
1001
+ | "permission-widening"
1002
+ | "effect-widening"
1003
+ | "no-impact"
1004
+ | null;
1005
+ blockedCount: number;
1006
+ acknowledgedCount: number;
1007
+ changes: Array<{
1008
+ path: string;
1009
+ category:
1010
+ | "contract-breaking"
1011
+ | "permission-widening"
1012
+ | "effect-widening"
1013
+ | "no-impact";
1014
+ kind: "added" | "removed" | "changed";
1015
+ summary: string;
1016
+ before?: unknown;
1017
+ after?: unknown;
1018
+ flowName: string | null;
1019
+ runCountLastWeek: number;
1020
+ blastLine: string | null;
1021
+ weeklyDeltaUsd: number | null;
1022
+ weeklyBillLine: string | null;
1023
+ ciGate: "blocked" | "acknowledged" | null;
1024
+ }>;
1025
+ }>;
1026
+ pluginsList: (input: Record<string, never>) => CallResult<{
1027
+ stateDerivation: string;
1028
+ plugins: Array<{
1029
+ id: string;
1030
+ origin: "core" | "local" | "community";
1031
+ state: "on" | "off";
1032
+ version: string | null;
1033
+ summary: string | null;
1034
+ scopes: Array<{ kind: "app" | "unit" | "flow"; name?: string }>;
1035
+ declares: string[];
1036
+ intercepts: Array<{
1037
+ stage: string;
1038
+ meanMs: number | null;
1039
+ count: number;
1040
+ }>;
1041
+ hookCost: {
1042
+ count: number;
1043
+ meanMs: number;
1044
+ p50Ms: number;
1045
+ p95Ms: number;
1046
+ lastMs: number | null;
1047
+ } | null;
1048
+ supplyChain: {
1049
+ lifecycleScripts: {
1050
+ state: string;
1051
+ scripts: string[];
1052
+ detail: string;
1053
+ };
1054
+ releaseCooldown: {
1055
+ state: string;
1056
+ publishedAt: number | null;
1057
+ holdUntil: number | null;
1058
+ detail: string;
1059
+ };
1060
+ nodeImportScan: {
1061
+ state: string;
1062
+ findings: Array<{
1063
+ source: string;
1064
+ specifier: string;
1065
+ line: number | null;
1066
+ }>;
1067
+ detail: string;
1068
+ };
1069
+ npmProvenance: { state: string; detail: string };
1070
+ bootConflicts: {
1071
+ state: string;
1072
+ conflicts: string[];
1073
+ detail: string;
1074
+ };
1075
+ };
1076
+ capabilityDiff: Array<{
1077
+ path: string;
1078
+ category: string;
1079
+ kind: string;
1080
+ summary: string;
1081
+ }>;
1082
+ installCommand: string | null;
1083
+ enableHint: string | null;
1084
+ packageName: string | null;
1085
+ }>;
1086
+ }>;
1087
+ };
1088
+ }
1089
+
1090
+ /** Typed Console API (REST from `/_oke/client.json` at runtime). */
1091
+ export const consoleApi = createClient(
1092
+ typeof globalThis.location !== "undefined"
1093
+ ? globalThis.location.origin
1094
+ : "http://127.0.0.1:6533",
1095
+ {
1096
+ headers: () =>
1097
+ (accessToken
1098
+ ? { Authorization: `Bearer ${accessToken}` }
1099
+ : {}) as Record<string, string>,
1100
+ routes: {
1101
+ "console.setupStatus": { method: "GET", path: "/console/setup/status" },
1102
+ "console.setupClaim": { method: "POST", path: "/console/setup/claim" },
1103
+ "console.sessionLogin": { method: "POST", path: "/console/session/login" },
1104
+ "console.sessionMe": { method: "GET", path: "/console/session/me" },
1105
+ "console.sessionLogout": { method: "POST", path: "/console/session/logout" },
1106
+ "console.manifestGet": { method: "GET", path: "/console/manifest" },
1107
+ "console.runsList": { method: "GET", path: "/console/runs" },
1108
+ "console.actionPing": { method: "POST", path: "/console/action/ping" },
1109
+ "console.structuralPropose": {
1110
+ method: "POST",
1111
+ path: "/console/structural/propose",
1112
+ },
1113
+ "console.flowsIdentities": {
1114
+ method: "GET",
1115
+ path: "/console/flows/identities",
1116
+ },
1117
+ "console.flowsInvoke": {
1118
+ method: "POST",
1119
+ path: "/console/flows/invoke",
1120
+ },
1121
+ "console.tracesReplay": {
1122
+ method: "POST",
1123
+ path: "/console/traces/replay",
1124
+ },
1125
+ "console.signalsList": { method: "GET", path: "/console/signals" },
1126
+ "console.signalsReplay": {
1127
+ method: "POST",
1128
+ path: "/console/signals/replay",
1129
+ },
1130
+ "console.signalsDryRunReplay": {
1131
+ method: "POST",
1132
+ path: "/console/signals/dry-run-replay",
1133
+ },
1134
+ "console.signalsDiscard": {
1135
+ method: "POST",
1136
+ path: "/console/signals/discard",
1137
+ },
1138
+ "console.storeList": { method: "GET", path: "/console/store" },
1139
+ "console.storeQuery": { method: "POST", path: "/console/store/query" },
1140
+ "console.storeReveal": { method: "POST", path: "/console/store/reveal" },
1141
+ "console.storeEdit": { method: "POST", path: "/console/store/edit" },
1142
+ "console.storeDelete": { method: "POST", path: "/console/store/delete" },
1143
+ "console.storePurgeCache": {
1144
+ method: "POST",
1145
+ path: "/console/store/purge-cache",
1146
+ },
1147
+ "console.storeSql": { method: "POST", path: "/console/store/sql" },
1148
+ "console.storePreview": {
1149
+ method: "POST",
1150
+ path: "/console/store/preview",
1151
+ },
1152
+ "console.vaultList": { method: "GET", path: "/console/vault" },
1153
+ "console.vaultSet": { method: "POST", path: "/console/vault/set" },
1154
+ "console.vaultRotate": { method: "POST", path: "/console/vault/rotate" },
1155
+ "console.aiList": { method: "GET", path: "/console/ai" },
1156
+ "console.clockList": { method: "GET", path: "/console/clock" },
1157
+ "console.clockRunNow": {
1158
+ method: "POST",
1159
+ path: "/console/clock/run-now",
1160
+ },
1161
+ "console.clockPause": { method: "POST", path: "/console/clock/pause" },
1162
+ "console.clockEditSchedule": {
1163
+ method: "POST",
1164
+ path: "/console/clock/edit-schedule",
1165
+ },
1166
+ "console.clockWakeEarly": {
1167
+ method: "POST",
1168
+ path: "/console/clock/wake-early",
1169
+ },
1170
+ "console.channelsList": { method: "GET", path: "/console/channels" },
1171
+ "console.channelPreview": {
1172
+ method: "POST",
1173
+ path: "/console/channels/preview",
1174
+ },
1175
+ "console.channelVerifyAuth": {
1176
+ method: "POST",
1177
+ path: "/console/channels/verify-auth",
1178
+ },
1179
+ "console.channelReveal": {
1180
+ method: "POST",
1181
+ path: "/console/channels/reveal",
1182
+ },
1183
+ "console.channelSendTest": {
1184
+ method: "POST",
1185
+ path: "/console/channels/send-test",
1186
+ },
1187
+ "console.gatesList": { method: "GET", path: "/console/gates" },
1188
+ "console.gatesSimulate": {
1189
+ method: "POST",
1190
+ path: "/console/gates/simulate",
1191
+ },
1192
+ "console.gatesPowers": {
1193
+ method: "POST",
1194
+ path: "/console/gates/powers",
1195
+ },
1196
+ "console.accessList": { method: "GET", path: "/console/access" },
1197
+ "console.accessEffective": {
1198
+ method: "POST",
1199
+ path: "/console/access/effective",
1200
+ },
1201
+ "console.accessKeyBlast": {
1202
+ method: "POST",
1203
+ path: "/console/access/key-blast",
1204
+ },
1205
+ "console.accessCreateKey": {
1206
+ method: "POST",
1207
+ path: "/console/access/keys",
1208
+ },
1209
+ "console.accessRevokeKey": {
1210
+ method: "POST",
1211
+ path: "/console/access/keys/revoke",
1212
+ },
1213
+ "console.accessRotateKey": {
1214
+ method: "POST",
1215
+ path: "/console/access/keys/rotate",
1216
+ },
1217
+ "console.accessSetRoleGrants": {
1218
+ method: "POST",
1219
+ path: "/console/access/roles/grants",
1220
+ },
1221
+ "console.diffList": { method: "GET", path: "/console/diff" },
1222
+ "console.pluginsList": { method: "GET", path: "/console/plugins" },
1223
+ },
1224
+ },
1225
+ ) as unknown as ConsoleClient;
1226
+
1227
+ /** Loose call helpers used by the shell (keeps UI free of App type import). */
1228
+ export const consoleCalls = {
1229
+ /**
1230
+ * Setup wizard status.
1231
+ */
1232
+ async setupStatus() {
1233
+ return consoleApi.console.setupStatus({});
1234
+ },
1235
+ /**
1236
+ * Claim first admin.
1237
+ *
1238
+ * @param body - Claim payload
1239
+ */
1240
+ async setupClaim(body: {
1241
+ claimCode: string;
1242
+ email: string;
1243
+ name: string;
1244
+ password: string;
1245
+ }) {
1246
+ return consoleApi.console.setupClaim(body);
1247
+ },
1248
+ /**
1249
+ * Operator login.
1250
+ *
1251
+ * @param body - Credentials
1252
+ */
1253
+ async sessionLogin(body: { email: string; password: string }) {
1254
+ return consoleApi.console.sessionLogin(body);
1255
+ },
1256
+ /**
1257
+ * Current operator.
1258
+ */
1259
+ async sessionMe() {
1260
+ return consoleApi.console.sessionMe({});
1261
+ },
1262
+ /**
1263
+ * Audited ping action.
1264
+ *
1265
+ * @param note - Optional note
1266
+ */
1267
+ async actionPing(note?: string) {
1268
+ return consoleApi.console.actionPing({ note });
1269
+ },
1270
+ /**
1271
+ * List runs / traces.
1272
+ */
1273
+ async runsList() {
1274
+ return consoleApi.console.runsList({});
1275
+ },
1276
+ /**
1277
+ * Manifest snapshot for the causality view.
1278
+ */
1279
+ async manifestGet() {
1280
+ return consoleApi.console.manifestGet({});
1281
+ },
1282
+ /**
1283
+ * Identities for the invoke-as picker.
1284
+ */
1285
+ async flowsIdentities() {
1286
+ return consoleApi.console.flowsIdentities({});
1287
+ },
1288
+ /**
1289
+ * Invoke a flow as a user-plane identity.
1290
+ *
1291
+ * @param body - Invoke payload
1292
+ */
1293
+ async flowsInvoke(body: {
1294
+ flowId: string;
1295
+ body: unknown;
1296
+ asUserId: string;
1297
+ confirmation?: string;
1298
+ reason?: string;
1299
+ }) {
1300
+ return consoleApi.console.flowsInvoke(body);
1301
+ },
1302
+ /**
1303
+ * Replay a trace from the journal (dry-run when external effects present).
1304
+ *
1305
+ * @param body - Replay payload
1306
+ */
1307
+ async tracesReplay(body: { rootId: string; dryRun: boolean }) {
1308
+ return consoleApi.console.tracesReplay(body);
1309
+ },
1310
+ /**
1311
+ * List signals with live queue metrics.
1312
+ */
1313
+ async signalsList() {
1314
+ return consoleApi.console.signalsList({});
1315
+ },
1316
+ /**
1317
+ * Replay dead letters at a controlled rate.
1318
+ *
1319
+ * @param body - Replay payload
1320
+ */
1321
+ async signalsReplay(body: {
1322
+ signal: string;
1323
+ messageIds?: string[];
1324
+ subscriberId?: string;
1325
+ ratePerSec?: number;
1326
+ dryRun: boolean;
1327
+ payloads?: Record<string, unknown>;
1328
+ confirmation?: string;
1329
+ reason?: string;
1330
+ }) {
1331
+ return consoleApi.console.signalsReplay(body);
1332
+ },
1333
+ /**
1334
+ * Dry-run bulk repair — counts would-succeed / would-fail without mutating.
1335
+ *
1336
+ * @param body - Dry-run payload
1337
+ */
1338
+ async signalsDryRunReplay(body: {
1339
+ signal: string;
1340
+ messageIds?: string[];
1341
+ subscriberId?: string;
1342
+ ratePerSec?: number;
1343
+ payloads?: Record<string, unknown>;
1344
+ }) {
1345
+ return consoleApi.console.signalsDryRunReplay(body);
1346
+ },
1347
+ /**
1348
+ * Discard dead-letter messages.
1349
+ *
1350
+ * @param body - Discard payload
1351
+ */
1352
+ async signalsDiscard(body: {
1353
+ signal: string;
1354
+ messageIds: string[];
1355
+ confirmation?: string;
1356
+ reason?: string;
1357
+ }) {
1358
+ return consoleApi.console.signalsDiscard(body);
1359
+ },
1360
+ /**
1361
+ * List stores grouped by facet with cache / drift / warnings.
1362
+ */
1363
+ async storeList() {
1364
+ return consoleApi.console.storeList({});
1365
+ },
1366
+ /**
1367
+ * Browse a store facet.
1368
+ *
1369
+ * @param body - Query payload
1370
+ */
1371
+ async storeQuery(body: {
1372
+ ref: string;
1373
+ child?: string;
1374
+ tenant?: string;
1375
+ prefix?: string;
1376
+ limit?: number;
1377
+ vector?: number[];
1378
+ topK?: number;
1379
+ }) {
1380
+ return consoleApi.console.storeQuery(body);
1381
+ },
1382
+ /**
1383
+ * Audited PII reveal.
1384
+ *
1385
+ * @param body - Reveal payload
1386
+ */
1387
+ async storeReveal(body: {
1388
+ ref: string;
1389
+ child?: string;
1390
+ tenant?: string;
1391
+ id: string;
1392
+ column: string;
1393
+ }) {
1394
+ return consoleApi.console.storeReveal(body);
1395
+ },
1396
+ /**
1397
+ * Direct edit (not a flow execution).
1398
+ *
1399
+ * @param body - Edit payload
1400
+ */
1401
+ async storeEdit(body: {
1402
+ ref: string;
1403
+ child?: string;
1404
+ tenant?: string;
1405
+ id?: string;
1406
+ key?: string;
1407
+ patch: Record<string, unknown>;
1408
+ confirmation?: string;
1409
+ reason?: string;
1410
+ commit?: boolean;
1411
+ }) {
1412
+ return consoleApi.console.storeEdit(body);
1413
+ },
1414
+ /**
1415
+ * Delete rows/keys.
1416
+ *
1417
+ * @param body - Delete payload
1418
+ */
1419
+ async storeDelete(body: {
1420
+ ref: string;
1421
+ child?: string;
1422
+ tenant?: string;
1423
+ ids?: string[];
1424
+ keys?: string[];
1425
+ confirmation?: string;
1426
+ reason?: string;
1427
+ }) {
1428
+ return consoleApi.console.storeDelete(body);
1429
+ },
1430
+ /**
1431
+ * Purge cache namespace.
1432
+ *
1433
+ * @param body - Purge payload
1434
+ */
1435
+ async storePurgeCache(body: {
1436
+ resource: string;
1437
+ confirmation?: string;
1438
+ reason?: string;
1439
+ }) {
1440
+ return consoleApi.console.storePurgeCache(body);
1441
+ },
1442
+ /**
1443
+ * SQL console (read-only by default).
1444
+ *
1445
+ * @param body - SQL payload
1446
+ */
1447
+ async storeSql(body: {
1448
+ ref: string;
1449
+ sql: string;
1450
+ tenant?: string;
1451
+ allowWrite?: boolean;
1452
+ }) {
1453
+ return consoleApi.console.storeSql(body);
1454
+ },
1455
+ /**
1456
+ * Preview an edit via withDryRun isolation.
1457
+ *
1458
+ * @param body - Preview payload
1459
+ */
1460
+ async storePreview(body: {
1461
+ ref: string;
1462
+ child?: string;
1463
+ tenant?: string;
1464
+ id?: string;
1465
+ key?: string;
1466
+ patch: Record<string, unknown>;
1467
+ }) {
1468
+ return consoleApi.console.storePreview(body);
1469
+ },
1470
+ /**
1471
+ * List vault contracts — fingerprints only for secrets (console §9.8).
1472
+ */
1473
+ async vaultList() {
1474
+ return consoleApi.console.vaultList({});
1475
+ },
1476
+ /**
1477
+ * Set a vault value (write-only; never returns the value).
1478
+ *
1479
+ * @param body - Set payload
1480
+ */
1481
+ async vaultSet(body: {
1482
+ name: string;
1483
+ value: string;
1484
+ confirmation?: string;
1485
+ reason?: string;
1486
+ }) {
1487
+ return consoleApi.console.vaultSet(body);
1488
+ },
1489
+ /**
1490
+ * Rotate a vault value (write-only; typed confirm required).
1491
+ *
1492
+ * @param body - Rotate payload
1493
+ */
1494
+ async vaultRotate(body: {
1495
+ name: string;
1496
+ value: string;
1497
+ confirmation?: string;
1498
+ reason?: string;
1499
+ }) {
1500
+ return consoleApi.console.vaultRotate(body);
1501
+ },
1502
+ /**
1503
+ * AI panel projection — journal, denial ledger, distributions (console §9.10).
1504
+ */
1505
+ async aiList() {
1506
+ return consoleApi.console.aiList({});
1507
+ },
1508
+ /**
1509
+ * Clock panel — timeline, waiting-on, cron health (console §9.6).
1510
+ */
1511
+ async clockList() {
1512
+ return consoleApi.console.clockList({});
1513
+ },
1514
+ /**
1515
+ * Run a cron now (typed confirm when external in production).
1516
+ *
1517
+ * @param body - Run-now payload
1518
+ */
1519
+ async clockRunNow(body: {
1520
+ name: string;
1521
+ confirmation?: string;
1522
+ reason?: string;
1523
+ }) {
1524
+ return consoleApi.console.clockRunNow(body);
1525
+ },
1526
+ /**
1527
+ * Pause a cron.
1528
+ *
1529
+ * @param body - Pause payload
1530
+ */
1531
+ async clockPause(body: { name: string }) {
1532
+ return consoleApi.console.clockPause(body);
1533
+ },
1534
+ /**
1535
+ * Edit an overridable schedule.
1536
+ *
1537
+ * @param body - Edit payload
1538
+ */
1539
+ async clockEditSchedule(body: {
1540
+ name: string;
1541
+ cron?: string;
1542
+ every?: string;
1543
+ }) {
1544
+ return consoleApi.console.clockEditSchedule(body);
1545
+ },
1546
+ /**
1547
+ * Wake a sleeping durable run early.
1548
+ *
1549
+ * @param body - Wake-early payload
1550
+ */
1551
+ async clockWakeEarly(body: { runId: string }) {
1552
+ return consoleApi.console.clockWakeEarly(body);
1553
+ },
1554
+ /**
1555
+ * Channels panel — inbox / deliverability projection (console §9.9).
1556
+ */
1557
+ async channelsList() {
1558
+ return consoleApi.console.channelsList({});
1559
+ },
1560
+ /**
1561
+ * Locale-resolved template preview with RTL dir.
1562
+ *
1563
+ * @param body - Preview payload
1564
+ */
1565
+ async channelPreview(body: {
1566
+ template: string;
1567
+ locale?: string;
1568
+ profileLocale?: string;
1569
+ acceptLanguage?: string;
1570
+ data?: Record<string, unknown>;
1571
+ }) {
1572
+ return consoleApi.console.channelPreview(body);
1573
+ },
1574
+ /**
1575
+ * SPF / DKIM / DMARC verification for a From domain.
1576
+ *
1577
+ * @param body - From address or domain
1578
+ */
1579
+ async channelVerifyAuth(body: { from: string }) {
1580
+ return consoleApi.console.channelVerifyAuth(body);
1581
+ },
1582
+ /**
1583
+ * Audited recipient PII reveal.
1584
+ *
1585
+ * @param body - Receipt / inbox id
1586
+ */
1587
+ async channelReveal(body: { id: string }) {
1588
+ return consoleApi.console.channelReveal(body);
1589
+ },
1590
+ /**
1591
+ * Real send-test through the Channel runtime (never dry-run).
1592
+ *
1593
+ * @param body - Template + recipient + optional typed confirm
1594
+ */
1595
+ async channelSendTest(body: {
1596
+ template: string;
1597
+ to: string;
1598
+ locale?: string;
1599
+ data?: Record<string, unknown>;
1600
+ confirmation?: string;
1601
+ reason?: string;
1602
+ }) {
1603
+ return consoleApi.console.channelSendTest(body);
1604
+ },
1605
+ /**
1606
+ * Gates panel projection — principals, flows, audit, widenings.
1607
+ */
1608
+ async gatesList() {
1609
+ return consoleApi.console.gatesList({});
1610
+ },
1611
+ /**
1612
+ * Evaluate-only gate chain simulator (never runs the handler).
1613
+ *
1614
+ * @param body - Flow + principal
1615
+ */
1616
+ async gatesSimulate(body: {
1617
+ flowId: string;
1618
+ principal: { kind: "role" | "key" | "user"; id: string };
1619
+ meta?: { ip?: string };
1620
+ }) {
1621
+ return consoleApi.console.gatesSimulate(body);
1622
+ },
1623
+ /**
1624
+ * Principal powers — scopes + allowed/denied flows.
1625
+ *
1626
+ * @param body - Principal
1627
+ */
1628
+ async gatesPowers(body: { kind: "role" | "key" | "user"; id: string }) {
1629
+ return consoleApi.console.gatesPowers(body);
1630
+ },
1631
+ /**
1632
+ * Access panel projection — planes, grantable scopes, hygiene.
1633
+ */
1634
+ async accessList() {
1635
+ return consoleApi.console.accessList({});
1636
+ },
1637
+ /**
1638
+ * Effective permissions with provenance.
1639
+ *
1640
+ * @param body - Principal
1641
+ */
1642
+ async accessEffective(body: {
1643
+ kind: "operator" | "user" | "role" | "key";
1644
+ id: string;
1645
+ }) {
1646
+ return consoleApi.console.accessEffective(body);
1647
+ },
1648
+ /**
1649
+ * Key revocation blast radius from Runs.
1650
+ *
1651
+ * @param body - Key id
1652
+ */
1653
+ async accessKeyBlast(body: { keyId: string }) {
1654
+ return consoleApi.console.accessKeyBlast(body);
1655
+ },
1656
+ /**
1657
+ * Create an attenuated API key (secret shown once).
1658
+ *
1659
+ * @param body - Plane, name, scopes
1660
+ */
1661
+ async accessCreateKey(body: {
1662
+ plane: "user" | "operator";
1663
+ name: string;
1664
+ scopes: string[];
1665
+ expiresAt?: number | null;
1666
+ rateLimit?: { max: number; per: string } | null;
1667
+ ipAllowlist?: string[];
1668
+ }) {
1669
+ return consoleApi.console.accessCreateKey(body);
1670
+ },
1671
+ /**
1672
+ * Revoke an API key (typed confirm).
1673
+ *
1674
+ * @param body - Key id + confirmation
1675
+ */
1676
+ async accessRevokeKey(body: {
1677
+ keyId: string;
1678
+ confirmation?: string;
1679
+ reason?: string;
1680
+ }) {
1681
+ return consoleApi.console.accessRevokeKey(body);
1682
+ },
1683
+ /**
1684
+ * Rotate an API key secret (typed confirm; secret once).
1685
+ *
1686
+ * @param body - Key id + confirmation
1687
+ */
1688
+ async accessRotateKey(body: {
1689
+ keyId: string;
1690
+ confirmation?: string;
1691
+ reason?: string;
1692
+ }) {
1693
+ return consoleApi.console.accessRotateKey(body);
1694
+ },
1695
+ /**
1696
+ * Replace role grants (grantable scopes only).
1697
+ *
1698
+ * @param body - Role id + scopes
1699
+ */
1700
+ async accessSetRoleGrants(body: { roleId: string; scopes: string[] }) {
1701
+ return consoleApi.console.accessSetRoleGrants(body);
1702
+ },
1703
+ /**
1704
+ * Manifest Diff projection — classified changes × Runs traffic × weekly bill.
1705
+ */
1706
+ async diffList() {
1707
+ return consoleApi.console.diffList({});
1708
+ },
1709
+ /**
1710
+ * Plugins panel — origin × state, supply-chain, capability diff (read-only).
1711
+ */
1712
+ async pluginsList() {
1713
+ return consoleApi.console.pluginsList({});
1714
+ },
1715
+ };