@zarel-ai/sdk 0.6.0

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 (375) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +412 -0
  3. package/dist/_internal/auth-headers.d.ts +19 -0
  4. package/dist/_internal/auth-headers.d.ts.map +1 -0
  5. package/dist/_internal/auth-headers.js +30 -0
  6. package/dist/_internal/auth-headers.js.map +1 -0
  7. package/dist/_internal/confirmation.d.ts +24 -0
  8. package/dist/_internal/confirmation.d.ts.map +1 -0
  9. package/dist/_internal/confirmation.js +54 -0
  10. package/dist/_internal/confirmation.js.map +1 -0
  11. package/dist/_internal/event-iterator.d.ts +18 -0
  12. package/dist/_internal/event-iterator.d.ts.map +1 -0
  13. package/dist/_internal/event-iterator.js +151 -0
  14. package/dist/_internal/event-iterator.js.map +1 -0
  15. package/dist/_internal/fetch-client.d.ts +141 -0
  16. package/dist/_internal/fetch-client.d.ts.map +1 -0
  17. package/dist/_internal/fetch-client.js +471 -0
  18. package/dist/_internal/fetch-client.js.map +1 -0
  19. package/dist/_internal/interceptors.d.ts +40 -0
  20. package/dist/_internal/interceptors.d.ts.map +1 -0
  21. package/dist/_internal/interceptors.js +28 -0
  22. package/dist/_internal/interceptors.js.map +1 -0
  23. package/dist/_internal/mcp.d.ts +11 -0
  24. package/dist/_internal/mcp.d.ts.map +1 -0
  25. package/dist/_internal/mcp.js +79 -0
  26. package/dist/_internal/mcp.js.map +1 -0
  27. package/dist/_internal/pagination.d.ts +71 -0
  28. package/dist/_internal/pagination.d.ts.map +1 -0
  29. package/dist/_internal/pagination.js +130 -0
  30. package/dist/_internal/pagination.js.map +1 -0
  31. package/dist/_internal/require-token.d.ts +17 -0
  32. package/dist/_internal/require-token.d.ts.map +1 -0
  33. package/dist/_internal/require-token.js +25 -0
  34. package/dist/_internal/require-token.js.map +1 -0
  35. package/dist/_internal/retry-after.d.ts +2 -0
  36. package/dist/_internal/retry-after.d.ts.map +1 -0
  37. package/dist/_internal/retry-after.js +34 -0
  38. package/dist/_internal/retry-after.js.map +1 -0
  39. package/dist/_internal/sse-client.d.ts +43 -0
  40. package/dist/_internal/sse-client.d.ts.map +1 -0
  41. package/dist/_internal/sse-client.js +250 -0
  42. package/dist/_internal/sse-client.js.map +1 -0
  43. package/dist/_internal/version.d.ts +5 -0
  44. package/dist/_internal/version.d.ts.map +1 -0
  45. package/dist/_internal/version.js +12 -0
  46. package/dist/_internal/version.js.map +1 -0
  47. package/dist/client.d.ts +74 -0
  48. package/dist/client.d.ts.map +1 -0
  49. package/dist/client.js +86 -0
  50. package/dist/client.js.map +1 -0
  51. package/dist/contract/_singleton.d.ts +18 -0
  52. package/dist/contract/_singleton.d.ts.map +1 -0
  53. package/dist/contract/_singleton.js +27 -0
  54. package/dist/contract/_singleton.js.map +1 -0
  55. package/dist/contract/actions.d.ts +18 -0
  56. package/dist/contract/actions.d.ts.map +1 -0
  57. package/dist/contract/actions.js +36 -0
  58. package/dist/contract/actions.js.map +1 -0
  59. package/dist/contract/assistant.d.ts +65 -0
  60. package/dist/contract/assistant.d.ts.map +1 -0
  61. package/dist/contract/assistant.js +44 -0
  62. package/dist/contract/assistant.js.map +1 -0
  63. package/dist/contract/batch.d.ts +27 -0
  64. package/dist/contract/batch.d.ts.map +1 -0
  65. package/dist/contract/batch.js +20 -0
  66. package/dist/contract/batch.js.map +1 -0
  67. package/dist/contract/capabilities.d.ts +21 -0
  68. package/dist/contract/capabilities.d.ts.map +1 -0
  69. package/dist/contract/capabilities.js +31 -0
  70. package/dist/contract/capabilities.js.map +1 -0
  71. package/dist/contract/constraints.d.ts +21 -0
  72. package/dist/contract/constraints.d.ts.map +1 -0
  73. package/dist/contract/constraints.js +31 -0
  74. package/dist/contract/constraints.js.map +1 -0
  75. package/dist/contract/events.d.ts +33 -0
  76. package/dist/contract/events.d.ts.map +1 -0
  77. package/dist/contract/events.js +56 -0
  78. package/dist/contract/events.js.map +1 -0
  79. package/dist/contract/flows.d.ts +44 -0
  80. package/dist/contract/flows.d.ts.map +1 -0
  81. package/dist/contract/flows.js +109 -0
  82. package/dist/contract/flows.js.map +1 -0
  83. package/dist/contract/governance.d.ts +6 -0
  84. package/dist/contract/governance.d.ts.map +1 -0
  85. package/dist/contract/governance.js +17 -0
  86. package/dist/contract/governance.js.map +1 -0
  87. package/dist/contract/index.d.ts +137 -0
  88. package/dist/contract/index.d.ts.map +1 -0
  89. package/dist/contract/index.js +177 -0
  90. package/dist/contract/index.js.map +1 -0
  91. package/dist/contract/metadata.d.ts +26 -0
  92. package/dist/contract/metadata.d.ts.map +1 -0
  93. package/dist/contract/metadata.js +25 -0
  94. package/dist/contract/metadata.js.map +1 -0
  95. package/dist/contract/process-model.d.ts +31 -0
  96. package/dist/contract/process-model.d.ts.map +1 -0
  97. package/dist/contract/process-model.js +51 -0
  98. package/dist/contract/process-model.js.map +1 -0
  99. package/dist/contract/roots/channels.d.ts +27 -0
  100. package/dist/contract/roots/channels.d.ts.map +1 -0
  101. package/dist/contract/roots/channels.js +53 -0
  102. package/dist/contract/roots/channels.js.map +1 -0
  103. package/dist/contract/roots/events.d.ts +7 -0
  104. package/dist/contract/roots/events.d.ts.map +1 -0
  105. package/dist/contract/roots/events.js +19 -0
  106. package/dist/contract/roots/events.js.map +1 -0
  107. package/dist/contract/roots/index.d.ts +15 -0
  108. package/dist/contract/roots/index.d.ts.map +1 -0
  109. package/dist/contract/roots/index.js +38 -0
  110. package/dist/contract/roots/index.js.map +1 -0
  111. package/dist/contract/roots/mcp-servers.d.ts +46 -0
  112. package/dist/contract/roots/mcp-servers.d.ts.map +1 -0
  113. package/dist/contract/roots/mcp-servers.js +68 -0
  114. package/dist/contract/roots/mcp-servers.js.map +1 -0
  115. package/dist/contract/roots/profiles.d.ts +18 -0
  116. package/dist/contract/roots/profiles.d.ts.map +1 -0
  117. package/dist/contract/roots/profiles.js +31 -0
  118. package/dist/contract/roots/profiles.js.map +1 -0
  119. package/dist/contract/roots/timezone.d.ts +10 -0
  120. package/dist/contract/roots/timezone.d.ts.map +1 -0
  121. package/dist/contract/roots/timezone.js +19 -0
  122. package/dist/contract/roots/timezone.js.map +1 -0
  123. package/dist/contract/roots/treatment.d.ts +11 -0
  124. package/dist/contract/roots/treatment.d.ts.map +1 -0
  125. package/dist/contract/roots/treatment.js +37 -0
  126. package/dist/contract/roots/treatment.js.map +1 -0
  127. package/dist/contract/roots/vocabulary.d.ts +18 -0
  128. package/dist/contract/roots/vocabulary.d.ts.map +1 -0
  129. package/dist/contract/roots/vocabulary.js +31 -0
  130. package/dist/contract/roots/vocabulary.js.map +1 -0
  131. package/dist/contract/schemas.d.ts +18 -0
  132. package/dist/contract/schemas.d.ts.map +1 -0
  133. package/dist/contract/schemas.js +31 -0
  134. package/dist/contract/schemas.js.map +1 -0
  135. package/dist/contract/skills.d.ts +20 -0
  136. package/dist/contract/skills.d.ts.map +1 -0
  137. package/dist/contract/skills.js +36 -0
  138. package/dist/contract/skills.js.map +1 -0
  139. package/dist/errors.d.ts +65 -0
  140. package/dist/errors.d.ts.map +1 -0
  141. package/dist/errors.js +80 -0
  142. package/dist/errors.js.map +1 -0
  143. package/dist/generated/contract.d.ts +7688 -0
  144. package/dist/generated/contract.d.ts.map +1 -0
  145. package/dist/generated/contract.js +7 -0
  146. package/dist/generated/contract.js.map +1 -0
  147. package/dist/generated/index.d.ts +41 -0
  148. package/dist/generated/index.d.ts.map +1 -0
  149. package/dist/generated/index.js +3 -0
  150. package/dist/generated/index.js.map +1 -0
  151. package/dist/generated/runtime.d.ts +4020 -0
  152. package/dist/generated/runtime.d.ts.map +1 -0
  153. package/dist/generated/runtime.js +7 -0
  154. package/dist/generated/runtime.js.map +1 -0
  155. package/dist/generated/unwrap-map.d.ts +989 -0
  156. package/dist/generated/unwrap-map.d.ts.map +1 -0
  157. package/dist/generated/unwrap-map.js +344 -0
  158. package/dist/generated/unwrap-map.js.map +1 -0
  159. package/dist/index.d.ts +38 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +27 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/resources/actions.d.ts +33 -0
  164. package/dist/resources/actions.d.ts.map +1 -0
  165. package/dist/resources/actions.js +52 -0
  166. package/dist/resources/actions.js.map +1 -0
  167. package/dist/resources/audit.d.ts +52 -0
  168. package/dist/resources/audit.d.ts.map +1 -0
  169. package/dist/resources/audit.js +86 -0
  170. package/dist/resources/audit.js.map +1 -0
  171. package/dist/resources/authorization-ceiling.d.ts +25 -0
  172. package/dist/resources/authorization-ceiling.d.ts.map +1 -0
  173. package/dist/resources/authorization-ceiling.js +26 -0
  174. package/dist/resources/authorization-ceiling.js.map +1 -0
  175. package/dist/resources/authorization-operation-ids.d.ts +15 -0
  176. package/dist/resources/authorization-operation-ids.d.ts.map +1 -0
  177. package/dist/resources/authorization-operation-ids.js +31 -0
  178. package/dist/resources/authorization-operation-ids.js.map +1 -0
  179. package/dist/resources/authorization.d.ts +60 -0
  180. package/dist/resources/authorization.d.ts.map +1 -0
  181. package/dist/resources/authorization.js +51 -0
  182. package/dist/resources/authorization.js.map +1 -0
  183. package/dist/resources/authorizations.d.ts +38 -0
  184. package/dist/resources/authorizations.d.ts.map +1 -0
  185. package/dist/resources/authorizations.js +19 -0
  186. package/dist/resources/authorizations.js.map +1 -0
  187. package/dist/resources/channels.d.ts +36 -0
  188. package/dist/resources/channels.d.ts.map +1 -0
  189. package/dist/resources/channels.js +61 -0
  190. package/dist/resources/channels.js.map +1 -0
  191. package/dist/resources/contracts.d.ts +46 -0
  192. package/dist/resources/contracts.d.ts.map +1 -0
  193. package/dist/resources/contracts.js +86 -0
  194. package/dist/resources/contracts.js.map +1 -0
  195. package/dist/resources/conversation-sessions.d.ts +62 -0
  196. package/dist/resources/conversation-sessions.d.ts.map +1 -0
  197. package/dist/resources/conversation-sessions.js +48 -0
  198. package/dist/resources/conversation-sessions.js.map +1 -0
  199. package/dist/resources/conversation.d.ts +48 -0
  200. package/dist/resources/conversation.d.ts.map +1 -0
  201. package/dist/resources/conversation.js +104 -0
  202. package/dist/resources/conversation.js.map +1 -0
  203. package/dist/resources/embedding-credentials.d.ts +60 -0
  204. package/dist/resources/embedding-credentials.d.ts.map +1 -0
  205. package/dist/resources/embedding-credentials.js +53 -0
  206. package/dist/resources/embedding-credentials.js.map +1 -0
  207. package/dist/resources/entities.d.ts +66 -0
  208. package/dist/resources/entities.d.ts.map +1 -0
  209. package/dist/resources/entities.js +106 -0
  210. package/dist/resources/entities.js.map +1 -0
  211. package/dist/resources/events.d.ts +45 -0
  212. package/dist/resources/events.d.ts.map +1 -0
  213. package/dist/resources/events.js +71 -0
  214. package/dist/resources/events.js.map +1 -0
  215. package/dist/resources/flows.d.ts +45 -0
  216. package/dist/resources/flows.d.ts.map +1 -0
  217. package/dist/resources/flows.js +82 -0
  218. package/dist/resources/flows.js.map +1 -0
  219. package/dist/resources/imports.d.ts +8 -0
  220. package/dist/resources/imports.d.ts.map +1 -0
  221. package/dist/resources/imports.js +14 -0
  222. package/dist/resources/imports.js.map +1 -0
  223. package/dist/resources/index.d.ts +24 -0
  224. package/dist/resources/index.d.ts.map +1 -0
  225. package/dist/resources/index.js +41 -0
  226. package/dist/resources/index.js.map +1 -0
  227. package/dist/resources/llm-credentials.d.ts +47 -0
  228. package/dist/resources/llm-credentials.d.ts.map +1 -0
  229. package/dist/resources/llm-credentials.js +46 -0
  230. package/dist/resources/llm-credentials.js.map +1 -0
  231. package/dist/resources/llm-services.d.ts +46 -0
  232. package/dist/resources/llm-services.d.ts.map +1 -0
  233. package/dist/resources/llm-services.js +41 -0
  234. package/dist/resources/llm-services.js.map +1 -0
  235. package/dist/resources/mcp.d.ts +8 -0
  236. package/dist/resources/mcp.d.ts.map +1 -0
  237. package/dist/resources/mcp.js +25 -0
  238. package/dist/resources/mcp.js.map +1 -0
  239. package/dist/resources/receipts.d.ts +25 -0
  240. package/dist/resources/receipts.d.ts.map +1 -0
  241. package/dist/resources/receipts.js +54 -0
  242. package/dist/resources/receipts.js.map +1 -0
  243. package/dist/resources/records.d.ts +51 -0
  244. package/dist/resources/records.d.ts.map +1 -0
  245. package/dist/resources/records.js +103 -0
  246. package/dist/resources/records.js.map +1 -0
  247. package/dist/resources/role-assignments.d.ts +27 -0
  248. package/dist/resources/role-assignments.d.ts.map +1 -0
  249. package/dist/resources/role-assignments.js +40 -0
  250. package/dist/resources/role-assignments.js.map +1 -0
  251. package/dist/resources/roles.d.ts +39 -0
  252. package/dist/resources/roles.d.ts.map +1 -0
  253. package/dist/resources/roles.js +42 -0
  254. package/dist/resources/roles.js.map +1 -0
  255. package/dist/resources/runtime-entities.d.ts +23 -0
  256. package/dist/resources/runtime-entities.d.ts.map +1 -0
  257. package/dist/resources/runtime-entities.js +29 -0
  258. package/dist/resources/runtime-entities.js.map +1 -0
  259. package/dist/resources/state-machine.d.ts +45 -0
  260. package/dist/resources/state-machine.d.ts.map +1 -0
  261. package/dist/resources/state-machine.js +86 -0
  262. package/dist/resources/state-machine.js.map +1 -0
  263. package/dist/resources/system.d.ts +12 -0
  264. package/dist/resources/system.d.ts.map +1 -0
  265. package/dist/resources/system.js +26 -0
  266. package/dist/resources/system.js.map +1 -0
  267. package/dist/resources/tools.d.ts +22 -0
  268. package/dist/resources/tools.d.ts.map +1 -0
  269. package/dist/resources/tools.js +33 -0
  270. package/dist/resources/tools.js.map +1 -0
  271. package/dist/resources/traces.d.ts +65 -0
  272. package/dist/resources/traces.d.ts.map +1 -0
  273. package/dist/resources/traces.js +97 -0
  274. package/dist/resources/traces.js.map +1 -0
  275. package/dist/runtime/index.d.ts +128 -0
  276. package/dist/runtime/index.d.ts.map +1 -0
  277. package/dist/runtime/index.js +210 -0
  278. package/dist/runtime/index.js.map +1 -0
  279. package/dist/types/actions.d.ts +32 -0
  280. package/dist/types/actions.d.ts.map +1 -0
  281. package/dist/types/actions.js +9 -0
  282. package/dist/types/actions.js.map +1 -0
  283. package/dist/types/audit.d.ts +65 -0
  284. package/dist/types/audit.d.ts.map +1 -0
  285. package/dist/types/audit.js +14 -0
  286. package/dist/types/audit.js.map +1 -0
  287. package/dist/types/channels.d.ts +37 -0
  288. package/dist/types/channels.d.ts.map +1 -0
  289. package/dist/types/channels.js +6 -0
  290. package/dist/types/channels.js.map +1 -0
  291. package/dist/types/confirmation.d.ts +53 -0
  292. package/dist/types/confirmation.d.ts.map +1 -0
  293. package/dist/types/confirmation.js +17 -0
  294. package/dist/types/confirmation.js.map +1 -0
  295. package/dist/types/contracts.d.ts +194 -0
  296. package/dist/types/contracts.d.ts.map +1 -0
  297. package/dist/types/contracts.js +10 -0
  298. package/dist/types/contracts.js.map +1 -0
  299. package/dist/types/conversation-sessions.d.ts +58 -0
  300. package/dist/types/conversation-sessions.d.ts.map +1 -0
  301. package/dist/types/conversation-sessions.js +6 -0
  302. package/dist/types/conversation-sessions.js.map +1 -0
  303. package/dist/types/conversation.d.ts +96 -0
  304. package/dist/types/conversation.d.ts.map +1 -0
  305. package/dist/types/conversation.js +3 -0
  306. package/dist/types/conversation.js.map +1 -0
  307. package/dist/types/entities.d.ts +22 -0
  308. package/dist/types/entities.d.ts.map +1 -0
  309. package/dist/types/entities.js +4 -0
  310. package/dist/types/entities.js.map +1 -0
  311. package/dist/types/events-stream.d.ts +82 -0
  312. package/dist/types/events-stream.d.ts.map +1 -0
  313. package/dist/types/events-stream.js +65 -0
  314. package/dist/types/events-stream.js.map +1 -0
  315. package/dist/types/flows-contract.d.ts +8 -0
  316. package/dist/types/flows-contract.d.ts.map +1 -0
  317. package/dist/types/flows-contract.js +7 -0
  318. package/dist/types/flows-contract.js.map +1 -0
  319. package/dist/types/flows.d.ts +66 -0
  320. package/dist/types/flows.d.ts.map +1 -0
  321. package/dist/types/flows.js +25 -0
  322. package/dist/types/flows.js.map +1 -0
  323. package/dist/types/imports.d.ts +57 -0
  324. package/dist/types/imports.d.ts.map +1 -0
  325. package/dist/types/imports.js +3 -0
  326. package/dist/types/imports.js.map +1 -0
  327. package/dist/types/index.d.ts +17 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/index.js +3 -0
  330. package/dist/types/index.js.map +1 -0
  331. package/dist/types/locale.d.ts +24 -0
  332. package/dist/types/locale.d.ts.map +1 -0
  333. package/dist/types/locale.js +17 -0
  334. package/dist/types/locale.js.map +1 -0
  335. package/dist/types/mcp.d.ts +28 -0
  336. package/dist/types/mcp.d.ts.map +1 -0
  337. package/dist/types/mcp.js +12 -0
  338. package/dist/types/mcp.js.map +1 -0
  339. package/dist/types/platform.d.ts +51 -0
  340. package/dist/types/platform.d.ts.map +1 -0
  341. package/dist/types/platform.js +4 -0
  342. package/dist/types/platform.js.map +1 -0
  343. package/dist/types/receipt.d.ts +79 -0
  344. package/dist/types/receipt.d.ts.map +1 -0
  345. package/dist/types/receipt.js +15 -0
  346. package/dist/types/receipt.js.map +1 -0
  347. package/dist/types/records.d.ts +45 -0
  348. package/dist/types/records.d.ts.map +1 -0
  349. package/dist/types/records.js +4 -0
  350. package/dist/types/records.js.map +1 -0
  351. package/dist/types/spec.d.ts +6 -0
  352. package/dist/types/spec.d.ts.map +1 -0
  353. package/dist/types/spec.js +3 -0
  354. package/dist/types/spec.js.map +1 -0
  355. package/dist/types/state-machine.d.ts +100 -0
  356. package/dist/types/state-machine.d.ts.map +1 -0
  357. package/dist/types/state-machine.js +9 -0
  358. package/dist/types/state-machine.js.map +1 -0
  359. package/dist/types/system.d.ts +28 -0
  360. package/dist/types/system.d.ts.map +1 -0
  361. package/dist/types/system.js +3 -0
  362. package/dist/types/system.js.map +1 -0
  363. package/dist/types/tools.d.ts +188 -0
  364. package/dist/types/tools.d.ts.map +1 -0
  365. package/dist/types/tools.js +22 -0
  366. package/dist/types/tools.js.map +1 -0
  367. package/dist/types/traces.d.ts +77 -0
  368. package/dist/types/traces.d.ts.map +1 -0
  369. package/dist/types/traces.js +11 -0
  370. package/dist/types/traces.js.map +1 -0
  371. package/dist/types/workflows.d.ts +42 -0
  372. package/dist/types/workflows.d.ts.map +1 -0
  373. package/dist/types/workflows.js +11 -0
  374. package/dist/types/workflows.js.map +1 -0
  375. package/package.json +103 -0
@@ -0,0 +1,4020 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export interface paths {
6
+ "/runtime/llm/services": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /**
14
+ * List the LLM services the actor is authorized to use in `?scope=`
15
+ * @description FR-B02 no-leak: returns ONLY services for which the actor has a
16
+ * `use` policy in the requested scope. There is no separate
17
+ * "all services" endpoint — operators see everything because their
18
+ * contract policies grant them `use` on every service.
19
+ */
20
+ get: operations["listLlmServices"];
21
+ put?: never;
22
+ post?: never;
23
+ delete?: never;
24
+ options?: never;
25
+ head?: never;
26
+ patch?: never;
27
+ trace?: never;
28
+ };
29
+ "/runtime/llm/services/{name}": {
30
+ parameters: {
31
+ query?: never;
32
+ header?: never;
33
+ path: {
34
+ name: string;
35
+ };
36
+ cookie?: never;
37
+ };
38
+ /**
39
+ * Get one LLM service by name (only if authorized in `?scope=`)
40
+ * @description FR-B02 no-leak: a service the actor cannot use in `?scope=` returns
41
+ * 404 indistinguishable from "doesn't exist". The response body never
42
+ * reveals whether the row exists for unauthorized actors.
43
+ */
44
+ get: operations["getLlmService"];
45
+ put?: never;
46
+ post?: never;
47
+ delete?: never;
48
+ options?: never;
49
+ head?: never;
50
+ patch?: never;
51
+ trace?: never;
52
+ };
53
+ "/runtime/llm/credentials": {
54
+ parameters: {
55
+ query?: never;
56
+ header?: never;
57
+ path?: never;
58
+ cookie?: never;
59
+ };
60
+ /** List masked metadata for credentials the actor can manage */
61
+ get: operations["listLlmCredentials"];
62
+ put?: never;
63
+ post?: never;
64
+ delete?: never;
65
+ options?: never;
66
+ head?: never;
67
+ patch?: never;
68
+ trace?: never;
69
+ };
70
+ "/runtime/llm/credentials/{service_name}": {
71
+ parameters: {
72
+ query?: never;
73
+ header?: never;
74
+ path: {
75
+ service_name: string;
76
+ };
77
+ cookie?: never;
78
+ };
79
+ /**
80
+ * Get masked metadata for one credential
81
+ * @description Plaintext is NEVER returned. Returns 404 indistinguishable from "doesn't exist" when not authorized (FR-B02).
82
+ */
83
+ get: operations["getLlmCredential"];
84
+ /**
85
+ * Set / replace a credential (write-only on `api_key`)
86
+ * @description Body: `{ api_key, base_url? }`. Server encrypts with the per-tenant
87
+ * DEK, computes a 4-char fingerprint, and writes a sanitised audit row
88
+ * (no ciphertext / IV / fingerprint, FR-I06). The plaintext is consumed
89
+ * and discarded — no read endpoint can retrieve it (FR-I04).
90
+ *
91
+ * Possible 4xx codes:
92
+ * - `INVALID_API_KEY` (400): empty / too long / non-printable.
93
+ * - `UNKNOWN_LLM_SERVICE` (404): service does not exist in catalog
94
+ * (only returned to authorized callers).
95
+ * - `PROVIDER_NOT_ALLOWED` (403, ADR-0102 S5b-a): the service's
96
+ * provider is outside the tenant's allowed providers (the bounds on
97
+ * the `manage_credentials` grant). Only reachable by holders of the
98
+ * grant — the no-leak 404 below still applies first.
99
+ * - 404 indistinguishable from "doesn't exist" when the actor lacks
100
+ * `manage_credentials` (FR-B02 / SEC.V12 — never 403).
101
+ */
102
+ put: operations["setLlmCredential"];
103
+ post?: never;
104
+ /**
105
+ * Remove a credential (FR-I07 safeguard)
106
+ * @description Returns 409 `CREDENTIAL_IN_USE` when any active session is pinned to
107
+ * the service. Operators must close the pinned sessions first. Returns
108
+ * 404 indistinguishable from "doesn't exist" when the actor lacks
109
+ * `manage_credentials` (FR-B02).
110
+ */
111
+ delete: operations["deleteLlmCredential"];
112
+ options?: never;
113
+ head?: never;
114
+ patch?: never;
115
+ trace?: never;
116
+ };
117
+ "/runtime/embedding-credentials": {
118
+ parameters: {
119
+ query?: never;
120
+ header?: never;
121
+ path?: never;
122
+ cookie?: never;
123
+ };
124
+ /**
125
+ * List masked metadata for the tenant's embedding credentials (per declared service)
126
+ * @description Returns one masked-metadata row per stored (tenant, embedding service).
127
+ * Plaintext is NEVER returned. Authorization: tenant-level superuser;
128
+ * unauthorized callers receive an empty list (SEC.V12 no-leak, never 403).
129
+ */
130
+ get: operations["listEmbeddingCredentials"];
131
+ put?: never;
132
+ post?: never;
133
+ delete?: never;
134
+ options?: never;
135
+ head?: never;
136
+ patch?: never;
137
+ trace?: never;
138
+ };
139
+ "/runtime/embedding-credentials/{service_name}": {
140
+ parameters: {
141
+ query?: never;
142
+ header?: never;
143
+ path: {
144
+ /**
145
+ * @description The DECLARED embedding-service name from `embeddings.services[]`
146
+ * (FR-023) — not the provider. A provider is not an identity: two
147
+ * services may share one, and the credential keys to a declaration that
148
+ * exists. The provider is resolved from that declaration server-side.
149
+ */
150
+ service_name: string;
151
+ };
152
+ cookie?: never;
153
+ };
154
+ /**
155
+ * Get masked metadata for one embedding service's credential
156
+ * @description Plaintext is NEVER returned. 404 indistinguishable from "not configured" when not authorized (SEC.V12).
157
+ */
158
+ get: operations["getEmbeddingCredential"];
159
+ /**
160
+ * Set / replace an embedding service's credential (write-only on the secret)
161
+ * @description Body is the credential blob for the provider the DECLARED service names —
162
+ * `{ apiKey, base_url? }` for apiKey providers (gemini, openai,
163
+ * anthropic-via-Voyage) or `{ accessKeyId, secretAccessKey, region,
164
+ * sessionToken? }` for bedrock. The server resolves the provider from
165
+ * `embeddings.services[]`, validates against that provider's registry
166
+ * credential schema, encrypts with the per-tenant DEK, computes a
167
+ * fingerprint, and writes a sanitised audit row. The secret is consumed and
168
+ * never retrievable.
169
+ *
170
+ * Possible 4xx codes:
171
+ * - `INVALID_CREDENTIAL` (400): blob fails the resolved provider's schema.
172
+ * - `UNKNOWN_EMBEDDING_SERVICE` (404): no live `embeddings.services[]`
173
+ * entry of that name — a secret must key to a declaration that exists
174
+ * (FR-022). Only reachable by authorized callers.
175
+ * - `PROVIDER_NOT_ALLOWED` (403, ADR-0102 S5b-a): the declared service's
176
+ * provider is outside the tenant's allowed embedding providers (the
177
+ * bounds on the `manage_credentials` grant). Only reachable by grant holders.
178
+ * - 404 indistinguishable from "not configured" when not authorized (SEC.V12 — never 403).
179
+ */
180
+ put: operations["setEmbeddingCredential"];
181
+ post?: never;
182
+ /**
183
+ * Remove an embedding service's credential (soft-delete + sensitive wipe)
184
+ * @description Soft-deletes the row and wipes the sensitive columns; the
185
+ * embedding_similarity gate falls through on subsequent turns for that
186
+ * service. 404 indistinguishable from "not configured" when not authorized.
187
+ */
188
+ delete: operations["deleteEmbeddingCredential"];
189
+ options?: never;
190
+ head?: never;
191
+ patch?: never;
192
+ trace?: never;
193
+ };
194
+ "/runtime/records/{entity_name}": {
195
+ parameters: {
196
+ query?: never;
197
+ header?: never;
198
+ path: {
199
+ entity_name: components["parameters"]["EntityNamePath"];
200
+ };
201
+ cookie?: never;
202
+ };
203
+ /** List records for an entity (filterable, sortable, paginated) */
204
+ get: operations["listRuntimeRecords"];
205
+ put?: never;
206
+ /**
207
+ * Create a record
208
+ * @description ADR-0127 (Option B strict) — this bare surface serves ONLY verbs with no
209
+ * named action. A governed verb is rejected `400 action_required`; dispatch
210
+ * it via `POST /runtime/actions/{name}` instead.
211
+ */
212
+ post: operations["createRuntimeRecord"];
213
+ delete?: never;
214
+ options?: never;
215
+ head?: never;
216
+ patch?: never;
217
+ trace?: never;
218
+ };
219
+ "/runtime/records/{entity_name}/{id}": {
220
+ parameters: {
221
+ query?: never;
222
+ header?: never;
223
+ path: {
224
+ entity_name: components["parameters"]["EntityNamePath"];
225
+ id: string;
226
+ };
227
+ cookie?: never;
228
+ };
229
+ /** Get a record */
230
+ get: operations["getRuntimeRecord"];
231
+ put?: never;
232
+ post?: never;
233
+ /**
234
+ * Delete a record
235
+ * @description ADR-0127 (Option B strict) — a governed verb is rejected `400
236
+ * action_required`; dispatch it via `POST /runtime/actions/{name}`.
237
+ */
238
+ delete: operations["deleteRuntimeRecord"];
239
+ options?: never;
240
+ head?: never;
241
+ /**
242
+ * Merge-patch a record
243
+ * @description ADR-0127 (Option B strict) — a governed verb is rejected `400
244
+ * action_required`; dispatch it via `POST /runtime/actions/{name}`.
245
+ */
246
+ patch: operations["patchRuntimeRecord"];
247
+ trace?: never;
248
+ };
249
+ "/runtime/records/counter/{entity_name}": {
250
+ parameters: {
251
+ query?: never;
252
+ header?: never;
253
+ path: {
254
+ entity_name: components["parameters"]["EntityNamePath"];
255
+ };
256
+ cookie?: never;
257
+ };
258
+ /** Read the record counter for an entity (runtime-readonly) */
259
+ get: operations["getRuntimeRecordsCounter"];
260
+ put?: never;
261
+ post?: never;
262
+ delete?: never;
263
+ options?: never;
264
+ head?: never;
265
+ patch?: never;
266
+ trace?: never;
267
+ };
268
+ "/runtime/state-machine/instances": {
269
+ parameters: {
270
+ query?: never;
271
+ header?: never;
272
+ path?: never;
273
+ cookie?: never;
274
+ };
275
+ /** List state-machine instances (readonly) */
276
+ get: operations["listStateMachineInstances"];
277
+ put?: never;
278
+ post?: never;
279
+ delete?: never;
280
+ options?: never;
281
+ head?: never;
282
+ patch?: never;
283
+ trace?: never;
284
+ };
285
+ "/runtime/state-machine/instances/{id}": {
286
+ parameters: {
287
+ query?: never;
288
+ header?: never;
289
+ path: {
290
+ id: string;
291
+ };
292
+ cookie?: never;
293
+ };
294
+ /** Get a state-machine instance */
295
+ get: operations["getStateMachineInstance"];
296
+ put?: never;
297
+ post?: never;
298
+ delete?: never;
299
+ options?: never;
300
+ head?: never;
301
+ patch?: never;
302
+ trace?: never;
303
+ };
304
+ "/runtime/state-machine/events": {
305
+ parameters: {
306
+ query?: never;
307
+ header?: never;
308
+ path?: never;
309
+ cookie?: never;
310
+ };
311
+ /** List state-machine events (readonly; filter by entity_name / instance_id) */
312
+ get: operations["listStateMachineEvents"];
313
+ put?: never;
314
+ post?: never;
315
+ delete?: never;
316
+ options?: never;
317
+ head?: never;
318
+ patch?: never;
319
+ trace?: never;
320
+ };
321
+ "/runtime/state-machine/events/{id}": {
322
+ parameters: {
323
+ query?: never;
324
+ header?: never;
325
+ path: {
326
+ id: string;
327
+ };
328
+ cookie?: never;
329
+ };
330
+ /** Get a state-machine event */
331
+ get: operations["getStateMachineEvent"];
332
+ put?: never;
333
+ post?: never;
334
+ delete?: never;
335
+ options?: never;
336
+ head?: never;
337
+ patch?: never;
338
+ trace?: never;
339
+ };
340
+ "/runtime/state-machine/transition-requests": {
341
+ parameters: {
342
+ query?: never;
343
+ header?: never;
344
+ path?: never;
345
+ cookie?: never;
346
+ };
347
+ /** List transition requests (filter by status / role) */
348
+ get: operations["listTransitionRequests"];
349
+ put?: never;
350
+ /** Create a transition request */
351
+ post: operations["createTransitionRequest"];
352
+ delete?: never;
353
+ options?: never;
354
+ head?: never;
355
+ patch?: never;
356
+ trace?: never;
357
+ };
358
+ "/runtime/state-machine/transition-requests/{id}": {
359
+ parameters: {
360
+ query?: never;
361
+ header?: never;
362
+ path: {
363
+ id: string;
364
+ };
365
+ cookie?: never;
366
+ };
367
+ /** Get a transition request */
368
+ get: operations["getTransitionRequest"];
369
+ put?: never;
370
+ post?: never;
371
+ delete?: never;
372
+ options?: never;
373
+ head?: never;
374
+ /** Resolve a pending transition request (approve/reject) */
375
+ patch: operations["resolveTransitionRequest"];
376
+ trace?: never;
377
+ };
378
+ "/runtime/actions/{name}": {
379
+ parameters: {
380
+ query?: never;
381
+ header?: never;
382
+ path: {
383
+ /** @description Action name from the tenant contract `actions[]` block. */
384
+ name: string;
385
+ };
386
+ cookie?: never;
387
+ };
388
+ get?: never;
389
+ put?: never;
390
+ /**
391
+ * Dispatch a YAML-declared action
392
+ * @description Resolves `name` against the tenant's `actions[]`, derives the
393
+ * underlying `(entity, verb)` pair, and dispatches through the existing
394
+ * `RecordCrudService`. Returns the dispatched record (or `null` for
395
+ * `delete` verbs) plus a `resolved_via_action` telemetry tag.
396
+ *
397
+ * ADR-0127 — this is the governed dispatch surface: the resolved action's
398
+ * identity is carried to the deterministic write floor, which evaluates
399
+ * capability / phase / precondition / confirmation before persistence. A
400
+ * blocked write returns a typed outcome (`422 phase_not_allowed` /
401
+ * `422 precondition_failed`); a write a `confirm` guard pauses returns
402
+ * `409 confirmation_required` (see the confirmation round-trip below).
403
+ */
404
+ post: operations["dispatchAction"];
405
+ delete?: never;
406
+ options?: never;
407
+ head?: never;
408
+ patch?: never;
409
+ trace?: never;
410
+ };
411
+ "/runtime/flows/instances": {
412
+ parameters: {
413
+ query?: never;
414
+ header?: never;
415
+ path?: never;
416
+ cookie?: never;
417
+ };
418
+ /**
419
+ * List flow instances (readonly)
420
+ * @description Owner-scoped to the calling actor unless the caller holds the `view_flows`
421
+ * runtime system action. `flow` NARROWS the listing; it never widens it —
422
+ * the owner scope is applied independently of any filter.
423
+ */
424
+ get: operations["listFlowInstances"];
425
+ put?: never;
426
+ post?: never;
427
+ delete?: never;
428
+ options?: never;
429
+ head?: never;
430
+ patch?: never;
431
+ trace?: never;
432
+ };
433
+ "/runtime/flows/instances/{id}": {
434
+ parameters: {
435
+ query?: never;
436
+ header?: never;
437
+ path: {
438
+ id: string;
439
+ };
440
+ cookie?: never;
441
+ };
442
+ /** Get a flow instance */
443
+ get: operations["getFlowInstance"];
444
+ put?: never;
445
+ post?: never;
446
+ delete?: never;
447
+ options?: never;
448
+ head?: never;
449
+ patch?: never;
450
+ trace?: never;
451
+ };
452
+ "/runtime/flows/events": {
453
+ parameters: {
454
+ query?: never;
455
+ header?: never;
456
+ path?: never;
457
+ cookie?: never;
458
+ };
459
+ /**
460
+ * List flow events (readonly)
461
+ * @description The appended flow lifecycle log — where per-step history lives (a run row
462
+ * carries none). Ordered by the hash chain's `seq`, which is the only total
463
+ * order the log has. Same visibility rule as `/runtime/flows/instances`:
464
+ * owner-scoped unless the caller holds `view_flows`, applied independently
465
+ * of any filter. Pass `instance_id` for one run's trace.
466
+ */
467
+ get: operations["listFlowEvents"];
468
+ put?: never;
469
+ post?: never;
470
+ delete?: never;
471
+ options?: never;
472
+ head?: never;
473
+ patch?: never;
474
+ trace?: never;
475
+ };
476
+ "/runtime/flows/events/{id}": {
477
+ parameters: {
478
+ query?: never;
479
+ header?: never;
480
+ path: {
481
+ id: string;
482
+ };
483
+ cookie?: never;
484
+ };
485
+ /** Get a flow event */
486
+ get: operations["getFlowEvent"];
487
+ put?: never;
488
+ post?: never;
489
+ delete?: never;
490
+ options?: never;
491
+ head?: never;
492
+ patch?: never;
493
+ trace?: never;
494
+ };
495
+ "/runtime/flows/callbacks": {
496
+ parameters: {
497
+ query?: never;
498
+ header?: never;
499
+ path?: never;
500
+ cookie?: never;
501
+ };
502
+ /** List pending flow callbacks (authenticated) */
503
+ get: operations["listFlowCallbacks"];
504
+ put?: never;
505
+ post?: never;
506
+ delete?: never;
507
+ options?: never;
508
+ head?: never;
509
+ patch?: never;
510
+ trace?: never;
511
+ };
512
+ "/runtime/flows/callbacks/{id}": {
513
+ parameters: {
514
+ query?: never;
515
+ header?: never;
516
+ path: {
517
+ id: string;
518
+ };
519
+ cookie?: never;
520
+ };
521
+ /** Get a flow callback (authenticated) */
522
+ get: operations["getFlowCallback"];
523
+ put?: never;
524
+ post?: never;
525
+ delete?: never;
526
+ options?: never;
527
+ head?: never;
528
+ /**
529
+ * Resolve a flow callback
530
+ * @description **Public endpoint.** The `id` is the opaque capability token supplied
531
+ * to the external system at flow registration; no JWT is required.
532
+ *
533
+ * Returns a **flat** `{success, message?}` ack (no `data`, NOT
534
+ * envelope-wrapped) — the SDK returns it whole (codegen-unwrap: no-unwrap).
535
+ */
536
+ patch: operations["resolveFlowCallback"];
537
+ trace?: never;
538
+ };
539
+ "/runtime/events/subscriptions": {
540
+ parameters: {
541
+ query?: never;
542
+ header?: never;
543
+ path?: never;
544
+ cookie?: never;
545
+ };
546
+ /** List webhook subscriptions */
547
+ get: operations["listEventSubscriptions"];
548
+ put?: never;
549
+ /** Create a webhook subscription */
550
+ post: operations["createEventSubscription"];
551
+ delete?: never;
552
+ options?: never;
553
+ head?: never;
554
+ patch?: never;
555
+ trace?: never;
556
+ };
557
+ "/runtime/events/subscriptions/{subscription_id}": {
558
+ parameters: {
559
+ query?: never;
560
+ header?: never;
561
+ path: {
562
+ subscription_id: number;
563
+ };
564
+ cookie?: never;
565
+ };
566
+ /** Get a subscription */
567
+ get: operations["getEventSubscription"];
568
+ put?: never;
569
+ post?: never;
570
+ /** Deactivate a subscription */
571
+ delete: operations["deactivateEventSubscription"];
572
+ options?: never;
573
+ head?: never;
574
+ /** Merge-patch a subscription */
575
+ patch: operations["patchEventSubscription"];
576
+ trace?: never;
577
+ };
578
+ "/runtime/events/delivery": {
579
+ parameters: {
580
+ query?: never;
581
+ header?: never;
582
+ path?: never;
583
+ cookie?: never;
584
+ };
585
+ /** List event deliveries (runtime log) */
586
+ get: operations["listEventDeliveries"];
587
+ put?: never;
588
+ post?: never;
589
+ delete?: never;
590
+ options?: never;
591
+ head?: never;
592
+ patch?: never;
593
+ trace?: never;
594
+ };
595
+ "/runtime/events/delivery/{id}": {
596
+ parameters: {
597
+ query?: never;
598
+ header?: never;
599
+ path: {
600
+ id: string;
601
+ };
602
+ cookie?: never;
603
+ };
604
+ /** Get an event delivery */
605
+ get: operations["getEventDelivery"];
606
+ put?: never;
607
+ post?: never;
608
+ delete?: never;
609
+ options?: never;
610
+ head?: never;
611
+ patch?: never;
612
+ trace?: never;
613
+ };
614
+ "/runtime/conversation/sessions": {
615
+ parameters: {
616
+ query?: never;
617
+ header?: never;
618
+ path?: never;
619
+ cookie?: never;
620
+ };
621
+ /** List conversation sessions for the authenticated user */
622
+ get: operations["listConversationSessions"];
623
+ put?: never;
624
+ /**
625
+ * Create a conversation session (no lazy creation per FR-C07)
626
+ * @description Body: `{ channel_name, roles_snapshot[], scope, llm_service?, user_name?, metadata? }`.
627
+ *
628
+ * The SERVER assigns `session_key` and returns it on the response. A body
629
+ * that CARRIES one is refused `400` — a client-chosen key was guessable,
630
+ * squattable by another tenant user, and an existence oracle. This block
631
+ * documented `session_key` as a request field, so an integrator following
632
+ * it wrote a client that was 400'd on every call; the SDK did exactly that
633
+ * until the two halves were reconciled.
634
+ *
635
+ * Precondition enforced (FR-C09, operations gate relaxed by ADR-0112):
636
+ * the actor must have ≥1 authorized `use` policy on some service in
637
+ * `scope` — governed conversation is itself the value, so no entity/flow
638
+ * operation is required. Possible 4xx codes: `INVALID_SCOPE` (400 — also
639
+ * returned for any other malformed body, including one carrying
640
+ * `session_key`), `SESSION_USER_MISMATCH` (403),
641
+ * `SESSION_CHANNEL_MISMATCH` (403), `LLM_SERVICE_UNAUTHORIZED` (403),
642
+ * `NO_AUTHORIZED_LLM_SERVICE_FOR_SCOPE` (403), `UNKNOWN_LLM_SERVICE`
643
+ * (404). `SESSION_KEY_CONFLICT` (409) is retained but unreachable short of
644
+ * a UUID collision, since the caller no longer chooses the key.
645
+ */
646
+ post: operations["createConversationSession"];
647
+ delete?: never;
648
+ options?: never;
649
+ head?: never;
650
+ patch?: never;
651
+ trace?: never;
652
+ };
653
+ "/runtime/conversation/sessions/{session_key}": {
654
+ parameters: {
655
+ query?: never;
656
+ header?: never;
657
+ path: {
658
+ session_key: string;
659
+ };
660
+ cookie?: never;
661
+ };
662
+ /** Get a conversation session with turns */
663
+ get: operations["getConversationSession"];
664
+ put?: never;
665
+ post?: never;
666
+ /** Soft-delete a conversation session (marks status='cleared') */
667
+ delete: operations["clearConversationSession"];
668
+ options?: never;
669
+ head?: never;
670
+ patch?: never;
671
+ trace?: never;
672
+ };
673
+ "/runtime/conversation/sessions/{session_key}/turns": {
674
+ parameters: {
675
+ query?: never;
676
+ header?: never;
677
+ path: {
678
+ session_key: string;
679
+ };
680
+ cookie?: never;
681
+ };
682
+ /** List turns for a session */
683
+ get: operations["listConversationTurns"];
684
+ put?: never;
685
+ post?: never;
686
+ delete?: never;
687
+ options?: never;
688
+ head?: never;
689
+ patch?: never;
690
+ trace?: never;
691
+ };
692
+ "/runtime/conversation/sessions/{session_key}/turns/{turn_number}": {
693
+ parameters: {
694
+ query?: never;
695
+ header?: never;
696
+ path: {
697
+ session_key: string;
698
+ turn_number: number;
699
+ };
700
+ cookie?: never;
701
+ };
702
+ /** Get a specific turn */
703
+ get: operations["getConversationTurn"];
704
+ put?: never;
705
+ post?: never;
706
+ delete?: never;
707
+ options?: never;
708
+ head?: never;
709
+ patch?: never;
710
+ trace?: never;
711
+ };
712
+ "/runtime/conversation/sessions/{session_key}/actions": {
713
+ parameters: {
714
+ query?: never;
715
+ header?: never;
716
+ path: {
717
+ session_key: string;
718
+ };
719
+ cookie?: never;
720
+ };
721
+ /** List actions triggered by a session */
722
+ get: operations["listConversationActions"];
723
+ put?: never;
724
+ post?: never;
725
+ delete?: never;
726
+ options?: never;
727
+ head?: never;
728
+ patch?: never;
729
+ trace?: never;
730
+ };
731
+ "/runtime/conversation/sessions/{session_key}/actions/{id}": {
732
+ parameters: {
733
+ query?: never;
734
+ header?: never;
735
+ path: {
736
+ session_key: string;
737
+ id: string;
738
+ };
739
+ cookie?: never;
740
+ };
741
+ /** Get an action record */
742
+ get: operations["getConversationAction"];
743
+ put?: never;
744
+ post?: never;
745
+ delete?: never;
746
+ options?: never;
747
+ head?: never;
748
+ patch?: never;
749
+ trace?: never;
750
+ };
751
+ "/runtime/entities/{entity_name}/recompute": {
752
+ parameters: {
753
+ query?: never;
754
+ header?: never;
755
+ path: {
756
+ entity_name: components["parameters"]["EntityNamePath"];
757
+ };
758
+ cookie?: never;
759
+ };
760
+ get?: never;
761
+ put?: never;
762
+ /**
763
+ * Recompute derived fields for every record of an entity
764
+ * @description Rewrites the computed fields of every `runtime.records` row of the
765
+ * entity. ADR-0098 D9: this operates on RUNTIME state, so it lives on the
766
+ * runtime plane alongside the MCP `recompute_entity` tool, which shares its
767
+ * implementation and its authority (the `entities` contract section).
768
+ */
769
+ post: operations["recomputeEntity"];
770
+ delete?: never;
771
+ options?: never;
772
+ head?: never;
773
+ patch?: never;
774
+ trace?: never;
775
+ };
776
+ "/runtime/channel-bindings/{id}/verify": {
777
+ parameters: {
778
+ query?: never;
779
+ header?: never;
780
+ path?: never;
781
+ cookie?: never;
782
+ };
783
+ get?: never;
784
+ put?: never;
785
+ /**
786
+ * Verify a channel binding
787
+ * @description ADR-0141 FR-031. Flips a channel binding from `unverified` to `verified` —
788
+ * the elevation signal channel-binding resolution reads.
789
+ *
790
+ * Authorized by the `verify_channel_binding` runtime SYSTEM ACTION, and by
791
+ * nothing else: the caller needs no `update` grant on
792
+ * `records/channel_identities`. That is the point of the operation. The
793
+ * binding entity is the product's declaration, so the tenant cannot extend it
794
+ * with the role-gated transition it used to supply; verification was
795
+ * previously a PATCH authorized by the generic entity `update` grant — the
796
+ * same grant that reaches `user_name`, the field that decides who someone is.
797
+ *
798
+ * Only the three verification fields are written. The request body may carry
799
+ * `verification_method` (a free-form string recording HOW the binding was
800
+ * verified); `verification_status` and `verified_at` are set by the server.
801
+ */
802
+ post: operations["verifyChannelBinding"];
803
+ delete?: never;
804
+ options?: never;
805
+ head?: never;
806
+ patch?: never;
807
+ trace?: never;
808
+ };
809
+ "/runtime/roles/assignments": {
810
+ parameters: {
811
+ query?: never;
812
+ header?: never;
813
+ path?: never;
814
+ cookie?: never;
815
+ };
816
+ /** List role assignments */
817
+ get: operations["listRoleAssignments"];
818
+ put?: never;
819
+ /**
820
+ * Assign a role to a user
821
+ * @description ADR-0102 S4 (FR-016): owner-marked roles (the plan envelope) are
822
+ * platform-managed — assigning a user to one is rejected. The assigned
823
+ * user must exist as a live `users` record (DB user-existence trigger).
824
+ */
825
+ post: operations["createRoleAssignment"];
826
+ delete?: never;
827
+ options?: never;
828
+ head?: never;
829
+ patch?: never;
830
+ trace?: never;
831
+ };
832
+ "/runtime/roles/assignments/{user_name}/{role_name}": {
833
+ parameters: {
834
+ query?: never;
835
+ header?: never;
836
+ path: {
837
+ user_name: string;
838
+ role_name: string;
839
+ };
840
+ cookie?: never;
841
+ };
842
+ get?: never;
843
+ put?: never;
844
+ post?: never;
845
+ /**
846
+ * Revoke a role from a user
847
+ * @description ADR-0102 S4 (FR-016): revoking an owner-marked assignment would
848
+ * destroy the tenant's envelope anchor — rejected.
849
+ */
850
+ delete: operations["deleteRoleAssignment"];
851
+ options?: never;
852
+ head?: never;
853
+ patch?: never;
854
+ trace?: never;
855
+ };
856
+ "/runtime/conversation/send": {
857
+ parameters: {
858
+ query?: never;
859
+ header?: never;
860
+ path?: never;
861
+ cookie?: never;
862
+ };
863
+ get?: never;
864
+ put?: never;
865
+ /**
866
+ * Send a natural-language message to the cognitive agent
867
+ * @description Service endpoint — not CRUD-derivable. The LLM orchestrator compiles
868
+ * an intent, validates it against the tenant contract, and executes it
869
+ * via MCP tools.
870
+ *
871
+ * SpecKit 010 / ADR-0087:
872
+ * - Sessions are no longer lazily created — `session_key` MUST refer
873
+ * to a session previously created via `POST /runtime/conversation/sessions`
874
+ * (FR-C07). Unknown keys return `SESSION_NOT_FOUND` (404).
875
+ * - Optional `llm_service` overrides the session's pinned service for
876
+ * this turn (FR-C04). Must be authorized for the actor in the
877
+ * session's scope.
878
+ * - Possible error codes:
879
+ * - `SESSION_NOT_FOUND` (404): unknown `session_key`.
880
+ * - `LLM_SERVICE_UNAUTHORIZED` (403): actor lacks `use` on the
881
+ * requested service in the session's scope.
882
+ * - `INTENT_OUT_OF_SCOPE` (422): the LLM emitted an intent
883
+ * outside the session's scope partition (FR-H06 backstop).
884
+ * - `NO_CREDENTIAL_CONFIGURED` (412): the resolved service has
885
+ * no credential configured.
886
+ */
887
+ post: operations["runtimeConversationSend"];
888
+ delete?: never;
889
+ options?: never;
890
+ head?: never;
891
+ patch?: never;
892
+ trace?: never;
893
+ };
894
+ "/runtime/channels/mint": {
895
+ parameters: {
896
+ query?: never;
897
+ header?: never;
898
+ path?: never;
899
+ cookie?: never;
900
+ };
901
+ get?: never;
902
+ put?: never;
903
+ /**
904
+ * Mint a short-TTL anonymous party token (channel-ops)
905
+ * @description Service endpoint (ADR-0133 §B.4 / decision 5). One of the FOUR
906
+ * channel-ops routes, and the ONLY routes that accept a `channel`-class
907
+ * ingress credential (`token_class='channel'`). The asymmetry is
908
+ * enforced by the class-aware pipeline: a tenant token is rejected here,
909
+ * and a channel credential is rejected on every other runtime route.
910
+ *
911
+ * The channel is taken from the CREDENTIAL, never from the body — a
912
+ * gateway can only ever mint into its own channel. The body is strict:
913
+ * `{ party_ref }` and nothing else. Any role/privilege claim alongside
914
+ * `party_ref` fails validation before the mint and returns 422
915
+ * `MINT_CLAIM_REJECTED` (QI-003) — a channel names a party, it never
916
+ * grants that party authority.
917
+ *
918
+ * The response is a **bare** body (no `{success,data}` envelope); the
919
+ * SDK returns it whole (codegen-unwrap: no-unwrap).
920
+ */
921
+ post: operations["runtimeChannelsMint"];
922
+ delete?: never;
923
+ options?: never;
924
+ head?: never;
925
+ patch?: never;
926
+ trace?: never;
927
+ };
928
+ "/runtime/channels/directives/stream": {
929
+ parameters: {
930
+ query?: never;
931
+ header?: never;
932
+ path?: never;
933
+ cookie?: never;
934
+ };
935
+ /**
936
+ * SSE liveness stream of new egress directives (channel-ops)
937
+ * @description Service endpoint (ADR-0133 §B.4 / decision 5) — the `subscribe`
938
+ * capability. Channel-ops route: `channel`-class credential only.
939
+ *
940
+ * The stream is server-side filtered to the credential's OWN
941
+ * `(tenant, channel)`: a subscriber never observes another channel's
942
+ * directive metadata (QI-006). Notification transport ONLY — durability
943
+ * is the outbox + sweep, so a missed frame is never a lost directive.
944
+ *
945
+ * The wire is a `text/event-stream` carrying `channel.directive_created`
946
+ * frames whose `data` is `{directive_id}` — an id, never content. The
947
+ * body itself is fetched separately via
948
+ * `GET /runtime/channels/directives/{id}/content` (notify-then-fetch).
949
+ * A `:heartbeat` comment is emitted every 30 seconds to keep the
950
+ * connection alive.
951
+ */
952
+ get: operations["runtimeChannelsSubscribe"];
953
+ put?: never;
954
+ post?: never;
955
+ delete?: never;
956
+ options?: never;
957
+ head?: never;
958
+ patch?: never;
959
+ trace?: never;
960
+ };
961
+ "/runtime/channels/directives/{id}/content": {
962
+ parameters: {
963
+ query?: never;
964
+ header?: never;
965
+ path: {
966
+ /** @description Egress directive id (ADR-0133 §B.4) */
967
+ id: components["parameters"]["ChannelDirectiveIdPath"];
968
+ };
969
+ cookie?: never;
970
+ };
971
+ /**
972
+ * Fetch (= claim) an egress directive and its content (channel-ops)
973
+ * @description Service endpoint (ADR-0133 §B.4 / decision 5) — the `fetch` capability.
974
+ * Channel-ops route: `channel`-class credential only.
975
+ *
976
+ * **fetch = claim**: this single call takes the delivery lease AND
977
+ * returns the turn body. Notify-then-fetch forces every send through
978
+ * here, which is what keeps the capability set closed at four (there is
979
+ * no separate `claim` op). The lease is keyed by the credential's `jti`
980
+ * (its stable lease identity) and expires after a bounded TTL, so a dead
981
+ * adapter cannot strand a directive.
982
+ *
983
+ * A directive addressed to another channel is 403 — never readable
984
+ * (QI-006). The response is a **bare** body (no `{success,data}`
985
+ * envelope); the SDK returns it whole (codegen-unwrap: no-unwrap).
986
+ */
987
+ get: operations["runtimeChannelsFetch"];
988
+ put?: never;
989
+ post?: never;
990
+ delete?: never;
991
+ options?: never;
992
+ head?: never;
993
+ patch?: never;
994
+ trace?: never;
995
+ };
996
+ "/runtime/channels/directives/{id}/send-result": {
997
+ parameters: {
998
+ query?: never;
999
+ header?: never;
1000
+ path: {
1001
+ /** @description Egress directive id (ADR-0133 §B.4) */
1002
+ id: components["parameters"]["ChannelDirectiveIdPath"];
1003
+ };
1004
+ cookie?: never;
1005
+ };
1006
+ get?: never;
1007
+ put?: never;
1008
+ /**
1009
+ * Report (= ack) the terminal send result of a directive (channel-ops)
1010
+ * @description Service endpoint (ADR-0133 §B.4 / decision 5) — the `report`
1011
+ * capability. Channel-ops route: `channel`-class credential only.
1012
+ *
1013
+ * **report = ack**: the terminal transition plus the lease release.
1014
+ * Idempotent under redelivery — re-reporting an already-terminal
1015
+ * directive returns its existing status unchanged (QI-005b).
1016
+ *
1017
+ * A terminal report also appends the `channel.egress` boundary row to
1018
+ * the `channels` hash chain (ADR-0133 §B.7 / FR-E01), metadata-only.
1019
+ * `provider_message_id` MUST already be hashed by the adapter
1020
+ * (FR-E03): an address-shaped value is refused by the audit schema
1021
+ * (QI-001) and the row is skipped rather than leaking an address.
1022
+ *
1023
+ * A directive belonging to another channel is 403 (QI-006); a lost lease
1024
+ * is 409, so the adapter aborts rather than assuming success. The
1025
+ * response is a **bare** body (no `{success,data}` envelope); the SDK
1026
+ * returns it whole (codegen-unwrap: no-unwrap).
1027
+ */
1028
+ post: operations["runtimeChannelsReport"];
1029
+ delete?: never;
1030
+ options?: never;
1031
+ head?: never;
1032
+ patch?: never;
1033
+ trace?: never;
1034
+ };
1035
+ "/runtime/tools": {
1036
+ parameters: {
1037
+ query?: never;
1038
+ header?: never;
1039
+ path?: never;
1040
+ cookie?: never;
1041
+ };
1042
+ /**
1043
+ * List tools available to the authenticated user
1044
+ * @description Returns a `UserToolCatalog` filtered to the calling user's roles.
1045
+ * Includes entity-CRUD tools (list_*, create_*, get_*, update_*, delete_*)
1046
+ * and — for every (entity, field) whose contract declares a non-empty
1047
+ * `transitions[]` block and for which the user's roles intersect
1048
+ * `R(entity, field)` — the dynamic state-machine trio:
1049
+ * - request_{entity}_{field}_transition
1050
+ * - resolve_{entity}_{field}_transition_request
1051
+ * - list_{entity}_{field}_pending_transition_requests
1052
+ * Structured per-trio metadata lives in `UserToolCatalog.transitions`.
1053
+ * See ADR-0081.
1054
+ */
1055
+ get: operations["runtimeToolsList"];
1056
+ put?: never;
1057
+ post?: never;
1058
+ delete?: never;
1059
+ options?: never;
1060
+ head?: never;
1061
+ patch?: never;
1062
+ trace?: never;
1063
+ };
1064
+ "/runtime/authorizations/effective": {
1065
+ parameters: {
1066
+ query?: never;
1067
+ header?: never;
1068
+ path?: never;
1069
+ cookie?: never;
1070
+ };
1071
+ /**
1072
+ * Effective authorizations of the authenticated actor (ADR-0102 §6, S3b)
1073
+ * @description Self-scoped introspection: returns what the authorization engine
1074
+ * actually decides for the CALLING actor — assigned roles (+ implicit
1075
+ * `self`), the contract sections they can manage (`update` policies),
1076
+ * the runtime system actions they hold (e.g. `view_traces`,
1077
+ * `manage_role_assignments`), and per-entity record permissions (actions +
1078
+ * per-action field restrictions; `null` = all fields). Derived by the
1079
+ * same canonical resolvers the enforcement paths use, so the response
1080
+ * can never drift from enforcement. There is NO actor parameter —
1081
+ * identity comes exclusively from the verified token.
1082
+ */
1083
+ get: operations["runtimeEffectiveAuthorizations"];
1084
+ put?: never;
1085
+ post?: never;
1086
+ delete?: never;
1087
+ options?: never;
1088
+ head?: never;
1089
+ patch?: never;
1090
+ trace?: never;
1091
+ };
1092
+ "/runtime/mcp": {
1093
+ parameters: {
1094
+ query?: never;
1095
+ header?: never;
1096
+ path?: never;
1097
+ cookie?: never;
1098
+ };
1099
+ get?: never;
1100
+ put?: never;
1101
+ /**
1102
+ * MCP streamable-HTTP transport endpoint (stateless JSON-RPC)
1103
+ * @description Stateless MCP "Streamable HTTP" transport. Each POST carries one MCP
1104
+ * JSON-RPC message; the server replies either application/json or a
1105
+ * text/event-stream (its choice per request). Authenticated by the same
1106
+ * runtime tenant JWT as the REST API (aud='runtime-api',
1107
+ * token_class='tenant'), bound to the {tenant}.zarel.local subdomain
1108
+ * (canon §10.4 / ADR-0041). Spec-1 (mcp runtime-plane exposure) replaced
1109
+ * the fictional GET /runtime/mcp/stream SSE path with this POST transport
1110
+ * served by mcp-server-http.
1111
+ */
1112
+ post: operations["runtimeMcp"];
1113
+ delete?: never;
1114
+ options?: never;
1115
+ head?: never;
1116
+ patch?: never;
1117
+ trace?: never;
1118
+ };
1119
+ "/runtime/tools/mcp/list": {
1120
+ parameters: {
1121
+ query?: never;
1122
+ header?: never;
1123
+ path?: never;
1124
+ cookie?: never;
1125
+ };
1126
+ /**
1127
+ * List MCP tools accessible to the authenticated tenant
1128
+ * @description Returns the MCP-layer `McpToolDefinition` list filtered to the tools
1129
+ * the user can see. Dynamic state-machine trio entries appear as
1130
+ * first-class peers to entity-CRUD tools (ADR-0081). Transition tools
1131
+ * are emitted dynamically from the contract per-(entity, field); the
1132
+ * legacy closed set of three generic transition tools is removed (see
1133
+ * CHANGELOG for the transition).
1134
+ */
1135
+ get: operations["runtimeToolsMcpList"];
1136
+ put?: never;
1137
+ post?: never;
1138
+ delete?: never;
1139
+ options?: never;
1140
+ head?: never;
1141
+ patch?: never;
1142
+ trace?: never;
1143
+ };
1144
+ "/runtime/tools/call": {
1145
+ parameters: {
1146
+ query?: never;
1147
+ header?: never;
1148
+ path?: never;
1149
+ cookie?: never;
1150
+ };
1151
+ get?: never;
1152
+ put?: never;
1153
+ /** Invoke a tool directly by name */
1154
+ post: operations["runtimeToolsCall"];
1155
+ delete?: never;
1156
+ options?: never;
1157
+ head?: never;
1158
+ patch?: never;
1159
+ trace?: never;
1160
+ };
1161
+ "/health": {
1162
+ parameters: {
1163
+ query?: never;
1164
+ header?: never;
1165
+ path?: never;
1166
+ cookie?: never;
1167
+ };
1168
+ /** Liveness / readiness check */
1169
+ get: operations["getHealth"];
1170
+ put?: never;
1171
+ post?: never;
1172
+ delete?: never;
1173
+ options?: never;
1174
+ head?: never;
1175
+ patch?: never;
1176
+ trace?: never;
1177
+ };
1178
+ "/metrics": {
1179
+ parameters: {
1180
+ query?: never;
1181
+ header?: never;
1182
+ path?: never;
1183
+ cookie?: never;
1184
+ };
1185
+ /** Operational metrics snapshot */
1186
+ get: operations["getMetrics"];
1187
+ put?: never;
1188
+ post?: never;
1189
+ delete?: never;
1190
+ options?: never;
1191
+ head?: never;
1192
+ patch?: never;
1193
+ trace?: never;
1194
+ };
1195
+ "/api-keys": {
1196
+ parameters: {
1197
+ query?: never;
1198
+ header?: never;
1199
+ path?: never;
1200
+ cookie?: never;
1201
+ };
1202
+ /**
1203
+ * List API keys (masked metadata)
1204
+ * @description Bounded fidelity declaration (see `createApiKey`). Returns a **bare**
1205
+ * array of masked key metadata — the SDK returns it whole (no-unwrap).
1206
+ */
1207
+ get: operations["listApiKeys"];
1208
+ put?: never;
1209
+ /**
1210
+ * Create an API key
1211
+ * @description Bounded fidelity declaration for the three `/api-keys` endpoints the SDK
1212
+ * already calls (ADR-0109 codegen-unwrap follow-up) — NOT the broader
1213
+ * ADR-0072 `/api-keys` redesign. The response is a **bare** body carrying
1214
+ * the one-time plaintext `key`; the SDK returns it whole (no-unwrap).
1215
+ */
1216
+ post: operations["createApiKey"];
1217
+ delete?: never;
1218
+ options?: never;
1219
+ head?: never;
1220
+ patch?: never;
1221
+ trace?: never;
1222
+ };
1223
+ "/api-keys/{key_id}": {
1224
+ parameters: {
1225
+ query?: never;
1226
+ header?: never;
1227
+ path: {
1228
+ key_id: string;
1229
+ };
1230
+ cookie?: never;
1231
+ };
1232
+ get?: never;
1233
+ put?: never;
1234
+ post?: never;
1235
+ /**
1236
+ * Revoke an API key
1237
+ * @description Bounded fidelity declaration (see `createApiKey`). Returns a **flat**
1238
+ * `{success:true}` ack (no `data`, not envelope-wrapped) — the SDK returns
1239
+ * it whole (no-unwrap).
1240
+ */
1241
+ delete: operations["deleteApiKey"];
1242
+ options?: never;
1243
+ head?: never;
1244
+ patch?: never;
1245
+ trace?: never;
1246
+ };
1247
+ "/runtime/state-machine/replay": {
1248
+ parameters: {
1249
+ query?: never;
1250
+ header?: never;
1251
+ path?: never;
1252
+ cookie?: never;
1253
+ };
1254
+ get?: never;
1255
+ put?: never;
1256
+ /**
1257
+ * Replay a state-machine instance against a new configuration
1258
+ * @description Service endpoint (spec-051 US4 — moved from the legacy
1259
+ * `/workflows/replay`). The handler delegates to the MCP
1260
+ * `replay_workflow` tool and unwraps its JSON envelope.
1261
+ */
1262
+ post: operations["runtimeStateMachineReplay"];
1263
+ delete?: never;
1264
+ options?: never;
1265
+ head?: never;
1266
+ patch?: never;
1267
+ trace?: never;
1268
+ };
1269
+ "/runtime/events/stream": {
1270
+ parameters: {
1271
+ query?: never;
1272
+ header?: never;
1273
+ path?: never;
1274
+ cookie?: never;
1275
+ };
1276
+ /**
1277
+ * Server-sent events stream for real-time tenant events
1278
+ * @description Service endpoint. Supports `Last-Event-ID` for reconnection; sends a
1279
+ * heartbeat comment every 30 seconds to keep the connection alive.
1280
+ *
1281
+ * The wire is a `text/event-stream` of named SSE frames; each frame's
1282
+ * `data` is a JSON envelope `{entity, record_id, payload, timestamp}`. The
1283
+ * only event with a fixed payload is `conversation.turn_created`, typed by
1284
+ * `RuntimeSseConversationTurnCreatedData` (envelope) /
1285
+ * `RuntimeSseConversationTurnCreatedPayload` (payload) under `components.schemas`;
1286
+ * all other events carry tenant-defined payloads.
1287
+ */
1288
+ get: operations["streamEvents"];
1289
+ put?: never;
1290
+ post?: never;
1291
+ delete?: never;
1292
+ options?: never;
1293
+ head?: never;
1294
+ patch?: never;
1295
+ trace?: never;
1296
+ };
1297
+ "/runtime/traces/{trace_id}": {
1298
+ parameters: {
1299
+ query?: never;
1300
+ header?: never;
1301
+ path: {
1302
+ trace_id: string;
1303
+ };
1304
+ cookie?: never;
1305
+ };
1306
+ /**
1307
+ * Full chronology of one agent dispatch (Spec-020 US1)
1308
+ * @description Returns the trace header (tenant, session, deployed spec version +
1309
+ * hash, actor, flow, started_at, duration, outcome) plus the ordered
1310
+ * `events[]` covering the eight pipeline stages: `topic_gate`,
1311
+ * `intent_scoring`, `envelope`, `gatekeeper`, `preconditions`,
1312
+ * `hitl`, `execution`, `audit`.
1313
+ *
1314
+ * ADR-0127 (US4) — the `gatekeeper` and `preconditions` events are emitted
1315
+ * from the deterministic write floor's REAL recorded verdict (`allowed` /
1316
+ * `denied` / `requires_confirmation`, with the typed reason and any failed
1317
+ * preconditions), not inferred from the terminal outcome.
1318
+ *
1319
+ * Authorization (FR-006, originator gate): a trace is visible to its
1320
+ * originator and to superusers; everyone else gets `404
1321
+ * trace_not_found` indistinguishable from a genuine miss.
1322
+ *
1323
+ * Pre-feature traces (FR-007): sessions originated before spec-020
1324
+ * deployment have no `trace_id` and return `404
1325
+ * legacy_trace_not_available`. There is no retroactive backfill.
1326
+ */
1327
+ get: operations["getTrace"];
1328
+ put?: never;
1329
+ post?: never;
1330
+ delete?: never;
1331
+ options?: never;
1332
+ head?: never;
1333
+ patch?: never;
1334
+ trace?: never;
1335
+ };
1336
+ "/runtime/traces": {
1337
+ parameters: {
1338
+ query?: never;
1339
+ header?: never;
1340
+ path?: never;
1341
+ cookie?: never;
1342
+ };
1343
+ /**
1344
+ * Paginated trace summary list (Spec-020 US1)
1345
+ * @description Filters: `flow`, `user`, `from`, `to`, `outcome`, `limit` (default
1346
+ * 50, max 500), `cursor`. Returns `{ traces: TraceSummary[],
1347
+ * next_cursor: string | null }`.
1348
+ *
1349
+ * Visibility is applied where the page is CHOSEN, not after it: the
1350
+ * originator restriction runs in the query, before `LIMIT`, so every
1351
+ * row of a page is a row the caller may see and `next_cursor` — which
1352
+ * anchors on the last row — has nothing to disclose. (This
1353
+ * description previously said the cursor anchors at the last DB row
1354
+ * "visible or not". That was accurate about the old behaviour and
1355
+ * the old behaviour handed one caller another caller's `trace_id`
1356
+ * and `started_at` in cleartext.)
1357
+ *
1358
+ * `duration_basis` says WHICH WINDOW each timing field was measured
1359
+ * over, because this endpoint and `GET /runtime/traces/{trace_id}`
1360
+ * answer different questions about the same trace:
1361
+ *
1362
+ * * `anchor_evidence` (this endpoint) — the span of the trace's
1363
+ * anchoring evidence: its conversation turns, or for a REST-only
1364
+ * governed write its gatekeeper verdicts. "How long did the
1365
+ * caller wait." A late webhook retry cannot make a fast
1366
+ * conversation look slow in a page you scan for slow ones.
1367
+ * * `all_evidence` (the single-trace read) — the span of every
1368
+ * recorded event, deliveries and record writes included. "How
1369
+ * long until everything this request caused had settled."
1370
+ *
1371
+ * A conversation answered in 6 s whose delivery settles at 40 s
1372
+ * reports 6 s here and 40 s there. Both are true; the field is how
1373
+ * you tell which you are reading.
1374
+ */
1375
+ get: operations["queryTraces"];
1376
+ put?: never;
1377
+ post?: never;
1378
+ delete?: never;
1379
+ options?: never;
1380
+ head?: never;
1381
+ patch?: never;
1382
+ trace?: never;
1383
+ };
1384
+ "/runtime/traces/{trace_id}/replay": {
1385
+ parameters: {
1386
+ query?: never;
1387
+ header?: never;
1388
+ path: {
1389
+ trace_id: string;
1390
+ };
1391
+ cookie?: never;
1392
+ };
1393
+ get?: never;
1394
+ put?: never;
1395
+ /**
1396
+ * Re-run deterministic governance stages against the proposed spec
1397
+ * @description Body: `{ against_current_spec?: boolean }`. Returns side-by-side
1398
+ * comparison of original vs replayed stages with `deterministic_match`
1399
+ * boolean and `stages_diverged[]`. The originator gate (FR-006)
1400
+ * applies — replay leaks the trace's content, so the same
1401
+ * visibility rule that governs the trace fetch route applies here.
1402
+ */
1403
+ post: operations["replayTrace"];
1404
+ delete?: never;
1405
+ options?: never;
1406
+ head?: never;
1407
+ patch?: never;
1408
+ trace?: never;
1409
+ };
1410
+ "/runtime/traces/{trace_id}/bundle": {
1411
+ parameters: {
1412
+ query?: never;
1413
+ header?: never;
1414
+ path: {
1415
+ trace_id: string;
1416
+ };
1417
+ cookie?: never;
1418
+ };
1419
+ /**
1420
+ * Download a signed evidence bundle (.tar.gz)
1421
+ * @description Streams the bundle as `application/gzip` with attachment
1422
+ * `Content-Disposition`. Contents per ADR-0090: `README.md`,
1423
+ * `trace.json`, `trace.pdf`, `spec/{deployed_at_execution.yaml,.hash}`,
1424
+ * `entities_snapshot.json`, `replay_attestation.json`, `manifest.sig`
1425
+ * (Ed25519 over the canonical JSON of `manifest.json` per RFC 8785).
1426
+ *
1427
+ * Soft cap 50 MB / hard cap 200 MB after compression. Past the hard
1428
+ * cap returns `error.code = bundle_too_large` (FR-035a). Originator
1429
+ * gate enforced same as trace fetch.
1430
+ */
1431
+ get: operations["getTraceBundle"];
1432
+ put?: never;
1433
+ post?: never;
1434
+ delete?: never;
1435
+ options?: never;
1436
+ head?: never;
1437
+ patch?: never;
1438
+ trace?: never;
1439
+ };
1440
+ "/runtime/audit/{log}/evidence": {
1441
+ parameters: {
1442
+ query?: never;
1443
+ header?: never;
1444
+ path: {
1445
+ /** @description The event log whose hash-chain to export. */
1446
+ log: "state_machine" | "flows";
1447
+ };
1448
+ cookie?: never;
1449
+ };
1450
+ /**
1451
+ * Download a signed audit tamper-evidence bundle (.tar.gz)
1452
+ * @description ADR-0108. Streams a self-contained, offline-verifiable evidence bundle
1453
+ * for the tenant's `{log}` cryptographic hash-chain as `application/gzip`
1454
+ * with attachment `Content-Disposition`. Contents: `events.json` (the RAW
1455
+ * event content + chain columns `seq`/`prev_hash`/`event_hash`, so the
1456
+ * verifier recomputes the canonical bytes itself), `checkpoints.json` (the
1457
+ * covering Ed25519-signed checkpoints), `anchors.json` (ADR-0115: external
1458
+ * RFC 3161 TSA anchors over the checkpoints' Merkle roots + this tenant's
1459
+ * inclusion paths — present only for already-anchored windows; absent
1460
+ * windows verify as the un-anchored tail), `README.md`, `manifest.json` +
1461
+ * `manifest.sig` (Ed25519 over the canonical JSON of the manifest, which
1462
+ * hashes every file incl. `anchors.json`, ADR-0090). Verify offline with
1463
+ * `zarel verify <bundle> --keys <trust-keys.json>` (add `--tsa-roots
1464
+ * <pinned.pem>` to also verify external anchoring, ADR-0115).
1465
+ *
1466
+ * Authorization: gated by the `view_traces` runtime-system action (an
1467
+ * evidence bundle exposes the full event content for the tenant, same as
1468
+ * the trace bundle). An unauthorized actor receives an opaque 404. Tenant
1469
+ * is taken from the verified JWT, never the path.
1470
+ *
1471
+ * Bounded read (ADR-0108 follow-up): the optional `from`/`to` query
1472
+ * parameters restrict the export to an inclusive `seq` range. A request
1473
+ * whose selected range exceeds the per-bundle event cap is refused with
1474
+ * `413` — narrow it via `from`/`to`. For a partial range, only checkpoints
1475
+ * anchored within the slice are included so the slice verifies cleanly.
1476
+ */
1477
+ get: operations["getAuditEvidenceBundle"];
1478
+ put?: never;
1479
+ post?: never;
1480
+ delete?: never;
1481
+ options?: never;
1482
+ head?: never;
1483
+ patch?: never;
1484
+ trace?: never;
1485
+ };
1486
+ "/runtime/audit/{log}": {
1487
+ parameters: {
1488
+ query?: never;
1489
+ header?: never;
1490
+ path: {
1491
+ /** @description The audit row-table to list. */
1492
+ log: "binding_violations" | "topic_refusals";
1493
+ };
1494
+ cookie?: never;
1495
+ };
1496
+ /**
1497
+ * Paginated, filterable listing of a privacy-preserving audit row-table (GTM M1)
1498
+ * @description Lists rows of the tenant's `{log}` audit table — `binding_violations`
1499
+ * (ADR-0106 Amendment A1, blocked field-binding parameter-injection
1500
+ * attempts) or `topic_refusals` (ADR-0107, blocked regulatory-boundary
1501
+ * refusals). Each row exposes only a non-reversible SHA-256 hash + a
1502
+ * deterministic PII-mask of the offending value — NEVER the raw value (it
1503
+ * is never stored). Newest-first, cursor-paginated. Response body (inside
1504
+ * the success envelope): `{ items: <row>[], next_cursor: string | null }`
1505
+ * where `<row>` is `BindingViolationAuditRow` or `TopicRefusalAuditRow`.
1506
+ *
1507
+ * Authorization: gated by the `view_traces` runtime-system action (the same
1508
+ * gate as `/runtime/traces` and `/runtime/audit/{log}/evidence`).
1509
+ * Authorization + known-log are checked BEFORE filter validation, so an
1510
+ * unauthorized actor OR an unknown log receives an opaque `404` — even with
1511
+ * a malformed filter — and cannot probe filter validity. There is no
1512
+ * per-row originator gate: any holder of `view_traces` sees all tenant
1513
+ * rows. Tenant is taken from the verified JWT, never the path. Distinct
1514
+ * from `/runtime/audit/{log}/evidence` (ADR-0108), whose `{log}` is the
1515
+ * event hash-chains `state_machine | flows`.
1516
+ */
1517
+ get: operations["listAuditLog"];
1518
+ put?: never;
1519
+ post?: never;
1520
+ delete?: never;
1521
+ options?: never;
1522
+ head?: never;
1523
+ patch?: never;
1524
+ trace?: never;
1525
+ };
1526
+ "/.well-known/zarel-trust-keys.json": {
1527
+ parameters: {
1528
+ query?: never;
1529
+ header?: never;
1530
+ path?: never;
1531
+ cookie?: never;
1532
+ };
1533
+ /**
1534
+ * Public Ed25519 trust-keys manifest (ADR-0090)
1535
+ * @description Public, unauthenticated endpoint listing every bundle-signing
1536
+ * public key (current + archived) keyed by `kid`. Standalone
1537
+ * verifiers (`zarel verify <bundle>`) resolve the bundle's `kid` →
1538
+ * public key via this file with no online runtime access.
1539
+ *
1540
+ * Rotation is by append: new entry with new `kid`, previous entry's
1541
+ * `valid_until` set to rotation timestamp. Archived entries are
1542
+ * never deleted so older bundles continue to verify.
1543
+ */
1544
+ get: operations["getTrustKeysManifest"];
1545
+ put?: never;
1546
+ post?: never;
1547
+ delete?: never;
1548
+ options?: never;
1549
+ head?: never;
1550
+ patch?: never;
1551
+ trace?: never;
1552
+ };
1553
+ "/runtime/imports/snapshot": {
1554
+ parameters: {
1555
+ query?: never;
1556
+ header?: never;
1557
+ path?: never;
1558
+ cookie?: never;
1559
+ };
1560
+ get?: never;
1561
+ put?: never;
1562
+ /** Bulk-import tenant data from a structured payload */
1563
+ post: operations["runtimeImportsSnapshot"];
1564
+ delete?: never;
1565
+ options?: never;
1566
+ head?: never;
1567
+ patch?: never;
1568
+ trace?: never;
1569
+ };
1570
+ "/runtime/records/{entity_name}/bulk": {
1571
+ parameters: {
1572
+ query?: never;
1573
+ header?: never;
1574
+ path: {
1575
+ entity_name: components["parameters"]["EntityNamePath"];
1576
+ };
1577
+ cookie?: never;
1578
+ };
1579
+ get?: never;
1580
+ put?: never;
1581
+ /** Bulk-create records for an entity */
1582
+ post: operations["bulkImportRuntimeRecords"];
1583
+ delete?: never;
1584
+ options?: never;
1585
+ head?: never;
1586
+ patch?: never;
1587
+ trace?: never;
1588
+ };
1589
+ "/runtime/receipts": {
1590
+ parameters: {
1591
+ query?: never;
1592
+ header?: never;
1593
+ path?: never;
1594
+ cookie?: never;
1595
+ };
1596
+ /**
1597
+ * List the authenticated end-user's own governance receipts (Desk Spec 3)
1598
+ * @description Lists the CALLER'S OWN governance receipts — normalized over the three
1599
+ * audit signals: topic refusals (ADR-0107), binding violations (ADR-0106
1600
+ * A1), and validation violations (ADR-0111). Each receipt is a discriminated
1601
+ * union by `signal` carrying a composite id (`<signal>:<uuid>`), the request
1602
+ * correlation `trace_id`, a non-reversible `proof` (hash + masked value +
1603
+ * contract version, per signal), and a per-signal `detail`. NEVER the raw
1604
+ * value (it is never stored) and NEVER `tenant_name`.
1605
+ *
1606
+ * ALWAYS scoped server-side to `created_by = the token actor` — never a
1607
+ * client parameter. Unlike the operator `/runtime/audit/{log}` (tenant-wide,
1608
+ * `view_traces`-gated), this surface is the caller's own data and requires
1609
+ * NO `view_traces`: any authenticated tenant end-user may read their own
1610
+ * receipts. Newest-first across all signals, keyset cursor-paginated.
1611
+ */
1612
+ get: operations["listReceipts"];
1613
+ put?: never;
1614
+ post?: never;
1615
+ delete?: never;
1616
+ options?: never;
1617
+ head?: never;
1618
+ patch?: never;
1619
+ trace?: never;
1620
+ };
1621
+ }
1622
+ export type webhooks = Record<string, never>;
1623
+ export interface components {
1624
+ schemas: {
1625
+ /**
1626
+ * @description One blocked field-binding parameter-injection attempt (ADR-0106 A1).
1627
+ * Privacy-preserving: only the SHA-256 hash + PII-mask of the offending
1628
+ * value are present — never the raw value.
1629
+ */
1630
+ BindingViolationAuditRow: {
1631
+ /** Format: uuid */
1632
+ id: string;
1633
+ entity: string;
1634
+ field: string;
1635
+ /** @enum {string} */
1636
+ binding_mode: "bind" | "assert" | "immutable";
1637
+ reason: string;
1638
+ input_sha256: string;
1639
+ input_masked: string;
1640
+ path_context: string | null;
1641
+ trace_id: string;
1642
+ created_by: string;
1643
+ /** Format: date-time */
1644
+ created_at: string;
1645
+ };
1646
+ /**
1647
+ * @description One blocked regulatory-boundary hard refusal (ADR-0107).
1648
+ * Privacy-preserving: only the SHA-256 hash + PII-mask of the input are
1649
+ * present — never the raw input.
1650
+ */
1651
+ TopicRefusalAuditRow: {
1652
+ /** Format: uuid */
1653
+ id: string;
1654
+ channel_name: string | null;
1655
+ verdict: string;
1656
+ category: string;
1657
+ /** @enum {string} */
1658
+ reason: "matched" | "no_verdict" | "unscored";
1659
+ confidence: number | null;
1660
+ strategy: string | null;
1661
+ fallback_used: boolean;
1662
+ contract_version: number;
1663
+ input_sha256: string;
1664
+ input_masked: string;
1665
+ latency_ms: number | null;
1666
+ trace_id: string;
1667
+ created_by: string;
1668
+ /** Format: date-time */
1669
+ created_at: string;
1670
+ };
1671
+ /**
1672
+ * @description The canonical response envelope. `data` holds the payload (shape
1673
+ * depends on the operation — consult the DDL + `schema.json` for the
1674
+ * exact per-resource shape) and `message` is an optional human
1675
+ * summary.
1676
+ */
1677
+ SuccessEnvelope: {
1678
+ success: boolean;
1679
+ data?: unknown;
1680
+ message?: string;
1681
+ };
1682
+ ErrorResponse: {
1683
+ error: {
1684
+ /** @enum {string} */
1685
+ type: "invalid_request" | "authentication_error" | "authorization_error" | "not_found" | "conflict" | "rate_limit_exceeded" | "internal_error" | "precondition_failed" | "not_implemented" | "payload_too_large";
1686
+ code: string;
1687
+ message: string;
1688
+ request_id?: string;
1689
+ };
1690
+ };
1691
+ /**
1692
+ * @description Tenant-class JWT payload. Spec-019 FR-A06 removed the `roles` claim;
1693
+ * authorization is DB-resolved fresh per request via
1694
+ * `permissionService.getUserRoles`, never derived from JWT claims.
1695
+ * See `runtime/packages/runtime-api/src/domain/auth/credential-claims.ts`
1696
+ * for the canonical schema.
1697
+ */
1698
+ JwtPayload: {
1699
+ sub: string;
1700
+ tenant_name: string;
1701
+ user_name: string;
1702
+ iat: number;
1703
+ exp: number;
1704
+ jti: string;
1705
+ /** @enum {string} */
1706
+ token_class?: "tenant";
1707
+ /** @enum {string} */
1708
+ iss?: "platform-api";
1709
+ /** @enum {string} */
1710
+ aud?: "runtime-api";
1711
+ };
1712
+ LlmCredentialMetadata: {
1713
+ /** @description LLM service name (FK into `llm.services[]`). */
1714
+ service_name: string;
1715
+ /**
1716
+ * @description "••••" + last 4 chars of the fingerprint. The plaintext key is NEVER returned (FR-I04).
1717
+ * @example ••••WXYZ
1718
+ */
1719
+ api_key_masked: string;
1720
+ /** @description Whether a base_url override is configured for this credential. */
1721
+ has_base_url: boolean;
1722
+ created_by: string;
1723
+ updated_by: string;
1724
+ /** Format: date-time */
1725
+ created_at: string;
1726
+ /** Format: date-time */
1727
+ updated_at: string;
1728
+ };
1729
+ EmbeddingCredentialMetadata: {
1730
+ tenant_name: string;
1731
+ /**
1732
+ * @description The declared `embeddings.services[].name` this credential keys to
1733
+ * (FR-023). Deliberately NOT a provider enum: the credential keys to a
1734
+ * declaration, and reporting the provider here was the response half of
1735
+ * the conflation that made the write unstorable. The provider is a
1736
+ * property of the declaration, readable from the embeddings catalog.
1737
+ */
1738
+ service_name: string;
1739
+ /**
1740
+ * @description "••••" + the credential fingerprint. The secret is NEVER returned.
1741
+ * @example ••••WXYZ
1742
+ */
1743
+ credential_masked: string;
1744
+ created_by: string;
1745
+ updated_by: string;
1746
+ /** Format: date-time */
1747
+ created_at: string;
1748
+ /** Format: date-time */
1749
+ updated_at: string;
1750
+ };
1751
+ LlmService: {
1752
+ /** @description Stable id (slug). Unique per tenant. */
1753
+ name: string;
1754
+ /** @enum {string} */
1755
+ provider: "anthropic" | "bedrock" | "gemini" | "openai";
1756
+ /** @description Provider-specific model id (e.g., `gemini-2.0-flash`). */
1757
+ model: string;
1758
+ /** @description Lower wins. Tie-breaker is YAML declaration order (`position` ASC). */
1759
+ priority: number;
1760
+ /** @description YAML declaration index. Used as priority tie-breaker. */
1761
+ position: number;
1762
+ /** @description Per-service override; absent when null (FR-A06). */
1763
+ temperature?: number;
1764
+ /** @description Per-service override; absent when null (FR-A06). */
1765
+ max_tokens?: number;
1766
+ /** @description Per-service override of the intent-confidence floor; absent when null (FR-A06). Resolution order is flow → this → the tenant's `llm.confidence_threshold` → the single named code default. */
1767
+ confidence_threshold?: number;
1768
+ };
1769
+ UserVisibleAction: {
1770
+ /** @enum {string} */
1771
+ action: "create" | "read" | "update" | "delete" | "list" | "import" | "export";
1772
+ owned_only: boolean;
1773
+ };
1774
+ UserVisibleEntityTool: {
1775
+ entity_name: string;
1776
+ entity_label: string;
1777
+ description?: string;
1778
+ actions: components["schemas"]["UserVisibleAction"][];
1779
+ /** @description FieldToolDefinition shape; see contract tool-catalog types. */
1780
+ fields: Record<string, never>[];
1781
+ /**
1782
+ * @description MCP tool names exposed to this user for this entity. Includes
1783
+ * entity-CRUD tools (list_*, create_*, get_*, update_*, delete_*)
1784
+ * and, for every field of the entity whose contract declares a
1785
+ * non-empty transitions[] block and for which the user's roles
1786
+ * intersect R(entity, field), the dynamic state-machine trio:
1787
+ * - request_{entity}_{field}_transition
1788
+ * - resolve_{entity}_{field}_transition_request
1789
+ * - list_{entity}_{field}_pending_transition_requests
1790
+ * See ADR-0081 for the generation rules; structured per-trio
1791
+ * metadata lives in UserToolCatalog.transitions.
1792
+ */
1793
+ tool_names: string[];
1794
+ };
1795
+ TransitionEdge: {
1796
+ from: string;
1797
+ to: string;
1798
+ /**
1799
+ * @description Spec 015 / M4. When true, the trigger UI MUST require a reason
1800
+ * textarea before dispatch. Omitted when false/absent in YAML.
1801
+ */
1802
+ requires_reason?: boolean;
1803
+ };
1804
+ UserVisibleTransitionTool: {
1805
+ /** @description Entity whose field carries the state machine. */
1806
+ entity_name: string;
1807
+ /** @description Field declaring the transitions[] block. */
1808
+ field_name: string;
1809
+ /** @example request_limit_requests_status_transition */
1810
+ request_tool_name: string;
1811
+ /** @example resolve_limit_requests_status_transition_request */
1812
+ resolve_tool_name: string;
1813
+ /** @example list_limit_requests_status_pending_transition_requests */
1814
+ list_pending_tool_name: string;
1815
+ /**
1816
+ * @description Distinct `to` states declared reachable across all transitions of
1817
+ * the field, in declaration order. The LLM sees this set at schema
1818
+ * time; the dispatch service enforces the (from, to) legality per
1819
+ * record.
1820
+ */
1821
+ target_states: string[];
1822
+ /**
1823
+ * @description Per-edge projection (spec 015 / M4). Parallel to `target_states`
1824
+ * and carries `requires_reason` so trigger UIs can mark the reason
1825
+ * textarea required for the matching (from, to) edge. Order mirrors
1826
+ * YAML declaration; not deduplicated.
1827
+ */
1828
+ transitions: components["schemas"]["TransitionEdge"][];
1829
+ /** @description Optional display label for the field; used by the prompt builder. */
1830
+ field_label?: string;
1831
+ /** @description Optional description of the field; used by the prompt builder. */
1832
+ field_description?: string;
1833
+ /**
1834
+ * @description Forward-compatibility hook for a future introspect capability. V1
1835
+ * always emits `false`. No enforcement is attached to this field in
1836
+ * V1.
1837
+ */
1838
+ inspect: boolean;
1839
+ };
1840
+ /**
1841
+ * @description Spec 016 / M5 / ADR-0085 amendment. Per-user projection of a single
1842
+ * YAML-declared `action` the caller is authorized to dispatch.
1843
+ */
1844
+ UserVisibleActionTool: {
1845
+ /** @description Action name from YAML; unique within tenant. */
1846
+ name: string;
1847
+ entity: string;
1848
+ /** @enum {string} */
1849
+ verb: "create" | "read" | "update" | "delete" | "list";
1850
+ /** @description From YAML `action.description`. Optional. */
1851
+ description?: string;
1852
+ /** @description Dispatcher-recognised intent string — `action.<name>` for native, `external.<ns>.<tool>` for external (ADR-0076). */
1853
+ intent_type: string;
1854
+ /** @enum {string} */
1855
+ provenance: "native" | "external";
1856
+ };
1857
+ /**
1858
+ * @description Spec-042 — per-tenant role declaration. Read-only metadata always
1859
+ * projected for every caller; editing is gated separately by the
1860
+ * `roles` contract-section policy (W3: surfaced via `admin_sections`).
1861
+ */
1862
+ UserVisibleRole: {
1863
+ name: string;
1864
+ label?: string;
1865
+ description?: string;
1866
+ };
1867
+ /**
1868
+ * @description Spec-042 — per-tenant flow declaration projected for users with
1869
+ * `inspect` policy on the flow (open-by-default per ADR-0065).
1870
+ */
1871
+ UserVisibleFlow: {
1872
+ name: string;
1873
+ description?: string;
1874
+ };
1875
+ /**
1876
+ * @description Spec-042 — per-tenant skill declaration projected for users whose
1877
+ * role set satisfies the skill's YAML `constraints[]`.
1878
+ */
1879
+ UserVisibleSkill: {
1880
+ name: string;
1881
+ label?: string;
1882
+ description?: string;
1883
+ };
1884
+ /**
1885
+ * @description W3 — a contract section name. `UserToolCatalog.admin_sections` is the
1886
+ * subset the caller's roles can `update` (drives admin mutation pages).
1887
+ * @enum {string}
1888
+ */
1889
+ ContractSectionName: "metadata" | "entities" | "roles" | "skills" | "actions" | "schemas" | "capabilities" | "flows" | "constraints" | "events" | "llm" | "embeddings" | "treatment" | "channels" | "channels/credentials" | "mcp_servers" | "quotas" | "timezone" | "process_model" | "authorization";
1890
+ UserToolCatalog: {
1891
+ tenant_name: string;
1892
+ user_name: string;
1893
+ user_roles: string[];
1894
+ entities: components["schemas"]["UserVisibleEntityTool"][];
1895
+ /**
1896
+ * @description Structured metadata for every state-machine transition trio
1897
+ * visible to this user. One entry per (entity, field) with
1898
+ * non-empty transitions[] for which user_roles ∩ R(entity, field)
1899
+ * ≠ ∅. See ADR-0081.
1900
+ */
1901
+ transitions: components["schemas"]["UserVisibleTransitionTool"][];
1902
+ /**
1903
+ * @description Spec 016 / M5 / ADR-0085 amendment. Per-user projection of
1904
+ * YAML-declared `actions[]` the caller is authorized to dispatch.
1905
+ * One entry per action whose `(entity, verb)` resolves to
1906
+ * `kind: 'action'` under the action-surface-resolver decision
1907
+ * logic for the caller's capabilities. Hidden/entity-fallback
1908
+ * decisions are NOT projected. Optional — omitted entirely when
1909
+ * zero entries.
1910
+ */
1911
+ actions?: components["schemas"]["UserVisibleActionTool"][];
1912
+ /**
1913
+ * @description Spec-042 — declared roles in the tenant contract (read-only
1914
+ * metadata always emitted, even when empty).
1915
+ */
1916
+ roles: components["schemas"]["UserVisibleRole"][];
1917
+ /**
1918
+ * @description Spec-042 — flows the user can `inspect` (ADR-0065
1919
+ * open-by-default).
1920
+ */
1921
+ flows: components["schemas"]["UserVisibleFlow"][];
1922
+ /**
1923
+ * @description Spec-042 — skills whose YAML `constraints[]` evaluate true for
1924
+ * the user.
1925
+ */
1926
+ skills: components["schemas"]["UserVisibleSkill"][];
1927
+ /**
1928
+ * @description W3 (ADR-0102 §3 closure) — contract sections the user can `update`,
1929
+ * derived from `authorization.spec.{section}` policies. The dashboard
1930
+ * derives admin mutation pages (roles/skills/flows/authorization+
1931
+ * policies/state-machines/settings) and the admin-tier pages
1932
+ * (imports, api-keys) from this. Sorted; may be empty.
1933
+ */
1934
+ admin_sections: components["schemas"]["ContractSectionName"][];
1935
+ };
1936
+ RoleAssignment: {
1937
+ user_name: string;
1938
+ role_name: string;
1939
+ } & {
1940
+ [key: string]: unknown;
1941
+ };
1942
+ /**
1943
+ * @description Opaque 64-hex digest of a party's address within its channel's address
1944
+ * namespace (QI-001). NOT an address — the runtime never names a phone
1945
+ * number, an email or a handle.
1946
+ */
1947
+ ChannelPartyRef: string;
1948
+ /** @description Content digest — metadata-only handle, never the body (R12). */
1949
+ ChannelContentRef: string;
1950
+ /** @description Tenant-declared channel name (the `channels:` contract section). */
1951
+ ChannelName: string;
1952
+ /** @enum {string} */
1953
+ ChannelDeliveryMode: "freeform" | "template" | "deferred";
1954
+ /**
1955
+ * @description Who attests the send outcome — the runtime itself, or the channel
1956
+ * provider (the transport descriptor declares which is admissible).
1957
+ * @enum {string}
1958
+ */
1959
+ ChannelAttestedBy: "runtime" | "channel_provider";
1960
+ /**
1961
+ * @description Strict by construction: `party_ref` is the ONLY accepted key. The
1962
+ * strictness IS the QI-003 claim rejection — any role/privilege key
1963
+ * alongside it fails validation (422 `MINT_CLAIM_REJECTED`) before the
1964
+ * mint. The channel comes from the credential, never from here.
1965
+ */
1966
+ ChannelMintRequest: {
1967
+ party_ref: components["schemas"]["ChannelPartyRef"];
1968
+ };
1969
+ ChannelPartyToken: {
1970
+ /**
1971
+ * @description Short-TTL anonymous party token (`token_class: party`) bound to
1972
+ * `(channel, party_ref)`. Carries no role and grants no authority.
1973
+ */
1974
+ token: string;
1975
+ /** Format: date-time */
1976
+ expires_at: string;
1977
+ };
1978
+ ChannelDirectiveTemplateRef: {
1979
+ id: string;
1980
+ version: number;
1981
+ };
1982
+ ChannelDirectiveCorrelation: {
1983
+ session_key: string;
1984
+ turn_seq: number;
1985
+ };
1986
+ /**
1987
+ * @description The claimed directive plus its resolved content. `fetch = claim`, so
1988
+ * receiving this body means the lease is now held by the caller's `jti`.
1989
+ */
1990
+ ChannelDirectiveContent: {
1991
+ /** Format: uuid */
1992
+ id: string;
1993
+ channel_name: components["schemas"]["ChannelName"];
1994
+ recipient_ref: components["schemas"]["ChannelPartyRef"];
1995
+ content_ref: components["schemas"]["ChannelContentRef"];
1996
+ delivery_mode: components["schemas"]["ChannelDeliveryMode"];
1997
+ template?: components["schemas"]["ChannelDirectiveTemplateRef"];
1998
+ correlation: components["schemas"]["ChannelDirectiveCorrelation"];
1999
+ /** Format: date-time */
2000
+ deadline_at?: string;
2001
+ /**
2002
+ * @description The resolved turn body, returned ONLY here — the directive itself
2003
+ * (and every audit row) carries `content_ref` and never the content
2004
+ * (R12 / QI-004). Resolved by the directive's turn correlation as an
2005
+ * authorized, audited read.
2006
+ */
2007
+ content: unknown;
2008
+ };
2009
+ ChannelSendResult: {
2010
+ /** @enum {string} */
2011
+ status: "accepted" | "failed" | "deferred";
2012
+ /**
2013
+ * @description Provider-supplied opaque id. MUST already be hashed by the adapter
2014
+ * (FR-E03) — an E.164- or email-shaped value is refused (QI-001).
2015
+ */
2016
+ provider_message_id?: string;
2017
+ attested_by: components["schemas"]["ChannelAttestedBy"];
2018
+ };
2019
+ ChannelSendResultAck: {
2020
+ /**
2021
+ * @description The directive's resulting lifecycle status.
2022
+ * @enum {string}
2023
+ */
2024
+ status: "pending" | "claimed" | "deferred" | "sent" | "failed" | "dead" | "expired";
2025
+ /**
2026
+ * @description The reported send outcome; `null` until a terminal report.
2027
+ * @enum {string|null}
2028
+ */
2029
+ send_status: "accepted" | "failed" | "deferred" | null;
2030
+ };
2031
+ RuntimeSseConversationTurnCreatedPayload: {
2032
+ session_key: string;
2033
+ turn_number: number;
2034
+ role: string;
2035
+ intent_type?: string;
2036
+ flow?: {
2037
+ [key: string]: unknown;
2038
+ };
2039
+ };
2040
+ RuntimeSseConversationTurnCreatedData: {
2041
+ entity: string;
2042
+ record_id: string;
2043
+ timestamp: string;
2044
+ payload: components["schemas"]["RuntimeSseConversationTurnCreatedPayload"];
2045
+ };
2046
+ };
2047
+ responses: {
2048
+ /** @description Standard success envelope */
2049
+ OkEnvelope: {
2050
+ headers: {
2051
+ [name: string]: unknown;
2052
+ };
2053
+ content: {
2054
+ "application/json": components["schemas"]["SuccessEnvelope"];
2055
+ };
2056
+ };
2057
+ /** @description Invalid request */
2058
+ BadRequest: {
2059
+ headers: {
2060
+ [name: string]: unknown;
2061
+ };
2062
+ content: {
2063
+ "application/json": components["schemas"]["ErrorResponse"];
2064
+ };
2065
+ };
2066
+ /** @description Missing or invalid authentication token */
2067
+ Unauthorized: {
2068
+ headers: {
2069
+ [name: string]: unknown;
2070
+ };
2071
+ content: {
2072
+ "application/json": components["schemas"]["ErrorResponse"];
2073
+ };
2074
+ };
2075
+ /** @description Insufficient permissions */
2076
+ Forbidden: {
2077
+ headers: {
2078
+ [name: string]: unknown;
2079
+ };
2080
+ content: {
2081
+ "application/json": components["schemas"]["ErrorResponse"];
2082
+ };
2083
+ };
2084
+ /** @description Resource not found */
2085
+ NotFound: {
2086
+ headers: {
2087
+ [name: string]: unknown;
2088
+ };
2089
+ content: {
2090
+ "application/json": components["schemas"]["ErrorResponse"];
2091
+ };
2092
+ };
2093
+ /** @description Resource state conflict */
2094
+ Conflict: {
2095
+ headers: {
2096
+ [name: string]: unknown;
2097
+ };
2098
+ content: {
2099
+ "application/json": components["schemas"]["ErrorResponse"];
2100
+ };
2101
+ };
2102
+ /**
2103
+ * @description ADR-0127 US2 — the verb is governed by ≥1 named action and must be
2104
+ * dispatched via `POST /runtime/actions/{name}`; the bare records surface
2105
+ * rejects it. `error.code='action_required'`; `error.candidate_actions[]`
2106
+ * lists the eligible action names.
2107
+ */
2108
+ ActionRequired: {
2109
+ headers: {
2110
+ [name: string]: unknown;
2111
+ };
2112
+ content: {
2113
+ "application/json": components["schemas"]["ErrorResponse"] & {
2114
+ error?: {
2115
+ candidate_actions?: string[];
2116
+ };
2117
+ };
2118
+ };
2119
+ };
2120
+ /**
2121
+ * @description ADR-0127 — the write floor blocked the mutation: `error.code` is
2122
+ * `phase_not_allowed` (action not allowed in the record's current process
2123
+ * phase) or `precondition_failed` (a declared precondition evaluated false
2124
+ * against the real record set).
2125
+ */
2126
+ GovernanceUnprocessable: {
2127
+ headers: {
2128
+ [name: string]: unknown;
2129
+ };
2130
+ content: {
2131
+ "application/json": components["schemas"]["ErrorResponse"];
2132
+ };
2133
+ };
2134
+ /**
2135
+ * @description ADR-0127 US3 — a `confirm` guard (an entity check or a transition edge)
2136
+ * paused this write pending human consent; the write is not performed.
2137
+ * Re-submit the IDENTICAL write with the returned token in the
2138
+ * `X-Zarel-Confirmation-Token` header before `expires_at`.
2139
+ */
2140
+ ConfirmationRequired: {
2141
+ headers: {
2142
+ [name: string]: unknown;
2143
+ };
2144
+ content: {
2145
+ "application/json": components["schemas"]["ErrorResponse"] & {
2146
+ error?: {
2147
+ confirmation?: {
2148
+ /**
2149
+ * @description Every `confirm` guard that fired on this write. One
2150
+ * write can fire several at once, and the token below
2151
+ * is bound to the WHOLE set — so a client must render
2152
+ * every prompt before retrying. Showing one of them
2153
+ * would collect consent for conditions the operator
2154
+ * never saw.
2155
+ */
2156
+ guards: {
2157
+ /**
2158
+ * @description The guard's own name — an entity check's `name`,
2159
+ * or `<field>__<from>__<to>` for a state-machine
2160
+ * edge. Never a governed action name.
2161
+ */
2162
+ name: string;
2163
+ prompt: string;
2164
+ }[];
2165
+ /** @description The `zct1.…` confirmation token to echo in the retry header. */
2166
+ token?: string;
2167
+ /** Format: date-time */
2168
+ expires_at: string;
2169
+ };
2170
+ };
2171
+ };
2172
+ };
2173
+ };
2174
+ /** @description Unexpected server error */
2175
+ InternalError: {
2176
+ headers: {
2177
+ [name: string]: unknown;
2178
+ };
2179
+ content: {
2180
+ "application/json": components["schemas"]["ErrorResponse"];
2181
+ };
2182
+ };
2183
+ /**
2184
+ * @description The `?locale=` query parameter was supplied with a value not in
2185
+ * the supported set. The body is the standard `ErrorResponse` envelope,
2186
+ * extended with the supported set so clients can pick a valid one.
2187
+ */
2188
+ UnsupportedLocaleError: {
2189
+ headers: {
2190
+ [name: string]: unknown;
2191
+ };
2192
+ content: {
2193
+ "application/json": components["schemas"]["ErrorResponse"] & {
2194
+ error: {
2195
+ /**
2196
+ * @example [
2197
+ * "en",
2198
+ * "es"
2199
+ * ]
2200
+ */
2201
+ supported: string[];
2202
+ };
2203
+ };
2204
+ };
2205
+ };
2206
+ };
2207
+ parameters: {
2208
+ /** @description Canonical natural-key identifier (ADR-0077 P4) */
2209
+ NamePath: string;
2210
+ EntityNamePath: string;
2211
+ /** @description Egress directive id (ADR-0133 §B.4) */
2212
+ ChannelDirectiveIdPath: string;
2213
+ RequestId: string;
2214
+ /**
2215
+ * @description ADR-0127 US3 — the self-confirmation retry token from a prior `409
2216
+ * confirmation_required` response. Re-submit the IDENTICAL write carrying
2217
+ * this header to proceed. The token is bound to the exact write
2218
+ * (tenant/actor/contract-version/action/entity/verb/record/params) and
2219
+ * expires; it is read only from this header, never the body.
2220
+ */
2221
+ ConfirmationToken: string;
2222
+ /**
2223
+ * @description Locale for semantic content (labels, descriptions) in the response.
2224
+ *
2225
+ * Resolution order:
2226
+ * 1. This query parameter (if present and supported).
2227
+ * 2. The actor's session-stored preference (JWT claim `preferences.language`).
2228
+ * 3. The canonical locale (`en`).
2229
+ *
2230
+ * Unsupported values produce a 400 response.
2231
+ */
2232
+ Locale: "en" | "es";
2233
+ };
2234
+ requestBodies: {
2235
+ JsonObject: {
2236
+ content: {
2237
+ "application/json": Record<string, never>;
2238
+ };
2239
+ };
2240
+ };
2241
+ headers: never;
2242
+ pathItems: never;
2243
+ }
2244
+ export type $defs = Record<string, never>;
2245
+ export interface operations {
2246
+ listLlmServices: {
2247
+ parameters: {
2248
+ query: {
2249
+ scope: "runtime" | "contract";
2250
+ /**
2251
+ * @description Locale for semantic content (labels, descriptions) in the response.
2252
+ *
2253
+ * Resolution order:
2254
+ * 1. This query parameter (if present and supported).
2255
+ * 2. The actor's session-stored preference (JWT claim `preferences.language`).
2256
+ * 3. The canonical locale (`en`).
2257
+ *
2258
+ * Unsupported values produce a 400 response.
2259
+ */
2260
+ locale?: components["parameters"]["Locale"];
2261
+ };
2262
+ header?: never;
2263
+ path?: never;
2264
+ cookie?: never;
2265
+ };
2266
+ requestBody?: never;
2267
+ responses: {
2268
+ 200: components["responses"]["OkEnvelope"];
2269
+ 400: components["responses"]["UnsupportedLocaleError"];
2270
+ };
2271
+ };
2272
+ getLlmService: {
2273
+ parameters: {
2274
+ query: {
2275
+ scope: "runtime" | "contract";
2276
+ /**
2277
+ * @description Locale for semantic content (labels, descriptions) in the response.
2278
+ *
2279
+ * Resolution order:
2280
+ * 1. This query parameter (if present and supported).
2281
+ * 2. The actor's session-stored preference (JWT claim `preferences.language`).
2282
+ * 3. The canonical locale (`en`).
2283
+ *
2284
+ * Unsupported values produce a 400 response.
2285
+ */
2286
+ locale?: components["parameters"]["Locale"];
2287
+ };
2288
+ header?: never;
2289
+ path: {
2290
+ name: string;
2291
+ };
2292
+ cookie?: never;
2293
+ };
2294
+ requestBody?: never;
2295
+ responses: {
2296
+ 200: components["responses"]["OkEnvelope"];
2297
+ 400: components["responses"]["UnsupportedLocaleError"];
2298
+ 404: components["responses"]["NotFound"];
2299
+ };
2300
+ };
2301
+ listLlmCredentials: {
2302
+ parameters: {
2303
+ query?: {
2304
+ /**
2305
+ * @description Locale for semantic content (labels, descriptions) in the response.
2306
+ *
2307
+ * Resolution order:
2308
+ * 1. This query parameter (if present and supported).
2309
+ * 2. The actor's session-stored preference (JWT claim `preferences.language`).
2310
+ * 3. The canonical locale (`en`).
2311
+ *
2312
+ * Unsupported values produce a 400 response.
2313
+ */
2314
+ locale?: components["parameters"]["Locale"];
2315
+ };
2316
+ header?: never;
2317
+ path?: never;
2318
+ cookie?: never;
2319
+ };
2320
+ requestBody?: never;
2321
+ responses: {
2322
+ 200: components["responses"]["OkEnvelope"];
2323
+ 400: components["responses"]["UnsupportedLocaleError"];
2324
+ };
2325
+ };
2326
+ getLlmCredential: {
2327
+ parameters: {
2328
+ query?: {
2329
+ /**
2330
+ * @description Locale for semantic content (labels, descriptions) in the response.
2331
+ *
2332
+ * Resolution order:
2333
+ * 1. This query parameter (if present and supported).
2334
+ * 2. The actor's session-stored preference (JWT claim `preferences.language`).
2335
+ * 3. The canonical locale (`en`).
2336
+ *
2337
+ * Unsupported values produce a 400 response.
2338
+ */
2339
+ locale?: components["parameters"]["Locale"];
2340
+ };
2341
+ header?: never;
2342
+ path: {
2343
+ service_name: string;
2344
+ };
2345
+ cookie?: never;
2346
+ };
2347
+ requestBody?: never;
2348
+ responses: {
2349
+ 200: components["responses"]["OkEnvelope"];
2350
+ 400: components["responses"]["UnsupportedLocaleError"];
2351
+ 404: components["responses"]["NotFound"];
2352
+ };
2353
+ };
2354
+ setLlmCredential: {
2355
+ parameters: {
2356
+ query?: never;
2357
+ header?: never;
2358
+ path: {
2359
+ service_name: string;
2360
+ };
2361
+ cookie?: never;
2362
+ };
2363
+ requestBody: components["requestBodies"]["JsonObject"];
2364
+ responses: {
2365
+ 200: components["responses"]["OkEnvelope"];
2366
+ 400: components["responses"]["BadRequest"];
2367
+ 404: components["responses"]["NotFound"];
2368
+ };
2369
+ };
2370
+ deleteLlmCredential: {
2371
+ parameters: {
2372
+ query?: never;
2373
+ header?: never;
2374
+ path: {
2375
+ service_name: string;
2376
+ };
2377
+ cookie?: never;
2378
+ };
2379
+ requestBody?: never;
2380
+ responses: {
2381
+ /** @description No Content */
2382
+ 204: {
2383
+ headers: {
2384
+ [name: string]: unknown;
2385
+ };
2386
+ content?: never;
2387
+ };
2388
+ 404: components["responses"]["NotFound"];
2389
+ 409: components["responses"]["Conflict"];
2390
+ };
2391
+ };
2392
+ listEmbeddingCredentials: {
2393
+ parameters: {
2394
+ query?: never;
2395
+ header?: never;
2396
+ path?: never;
2397
+ cookie?: never;
2398
+ };
2399
+ requestBody?: never;
2400
+ responses: {
2401
+ 200: components["responses"]["OkEnvelope"];
2402
+ };
2403
+ };
2404
+ getEmbeddingCredential: {
2405
+ parameters: {
2406
+ query?: never;
2407
+ header?: never;
2408
+ path: {
2409
+ /**
2410
+ * @description The DECLARED embedding-service name from `embeddings.services[]`
2411
+ * (FR-023) — not the provider. A provider is not an identity: two
2412
+ * services may share one, and the credential keys to a declaration that
2413
+ * exists. The provider is resolved from that declaration server-side.
2414
+ */
2415
+ service_name: string;
2416
+ };
2417
+ cookie?: never;
2418
+ };
2419
+ requestBody?: never;
2420
+ responses: {
2421
+ 200: components["responses"]["OkEnvelope"];
2422
+ 404: components["responses"]["NotFound"];
2423
+ };
2424
+ };
2425
+ setEmbeddingCredential: {
2426
+ parameters: {
2427
+ query?: never;
2428
+ header?: never;
2429
+ path: {
2430
+ /**
2431
+ * @description The DECLARED embedding-service name from `embeddings.services[]`
2432
+ * (FR-023) — not the provider. A provider is not an identity: two
2433
+ * services may share one, and the credential keys to a declaration that
2434
+ * exists. The provider is resolved from that declaration server-side.
2435
+ */
2436
+ service_name: string;
2437
+ };
2438
+ cookie?: never;
2439
+ };
2440
+ requestBody: components["requestBodies"]["JsonObject"];
2441
+ responses: {
2442
+ 200: components["responses"]["OkEnvelope"];
2443
+ 400: components["responses"]["BadRequest"];
2444
+ 404: components["responses"]["NotFound"];
2445
+ };
2446
+ };
2447
+ deleteEmbeddingCredential: {
2448
+ parameters: {
2449
+ query?: never;
2450
+ header?: never;
2451
+ path: {
2452
+ /**
2453
+ * @description The DECLARED embedding-service name from `embeddings.services[]`
2454
+ * (FR-023) — not the provider. A provider is not an identity: two
2455
+ * services may share one, and the credential keys to a declaration that
2456
+ * exists. The provider is resolved from that declaration server-side.
2457
+ */
2458
+ service_name: string;
2459
+ };
2460
+ cookie?: never;
2461
+ };
2462
+ requestBody?: never;
2463
+ responses: {
2464
+ /** @description No Content */
2465
+ 204: {
2466
+ headers: {
2467
+ [name: string]: unknown;
2468
+ };
2469
+ content?: never;
2470
+ };
2471
+ 404: components["responses"]["NotFound"];
2472
+ };
2473
+ };
2474
+ listRuntimeRecords: {
2475
+ parameters: {
2476
+ query?: {
2477
+ limit?: number;
2478
+ offset?: number;
2479
+ sort_by?: string;
2480
+ sort_dir?: "asc" | "desc";
2481
+ };
2482
+ header?: never;
2483
+ path: {
2484
+ entity_name: components["parameters"]["EntityNamePath"];
2485
+ };
2486
+ cookie?: never;
2487
+ };
2488
+ requestBody?: never;
2489
+ responses: {
2490
+ 200: components["responses"]["OkEnvelope"];
2491
+ };
2492
+ };
2493
+ createRuntimeRecord: {
2494
+ parameters: {
2495
+ query?: never;
2496
+ header?: {
2497
+ /**
2498
+ * @description ADR-0127 US3 — the self-confirmation retry token from a prior `409
2499
+ * confirmation_required` response. Re-submit the IDENTICAL write carrying
2500
+ * this header to proceed. The token is bound to the exact write
2501
+ * (tenant/actor/contract-version/action/entity/verb/record/params) and
2502
+ * expires; it is read only from this header, never the body.
2503
+ */
2504
+ "X-Zarel-Confirmation-Token"?: components["parameters"]["ConfirmationToken"];
2505
+ };
2506
+ path: {
2507
+ entity_name: components["parameters"]["EntityNamePath"];
2508
+ };
2509
+ cookie?: never;
2510
+ };
2511
+ requestBody: components["requestBodies"]["JsonObject"];
2512
+ responses: {
2513
+ 201: components["responses"]["OkEnvelope"];
2514
+ 400: components["responses"]["ActionRequired"];
2515
+ 409: components["responses"]["ConfirmationRequired"];
2516
+ 422: components["responses"]["GovernanceUnprocessable"];
2517
+ };
2518
+ };
2519
+ getRuntimeRecord: {
2520
+ parameters: {
2521
+ query?: never;
2522
+ header?: never;
2523
+ path: {
2524
+ entity_name: components["parameters"]["EntityNamePath"];
2525
+ id: string;
2526
+ };
2527
+ cookie?: never;
2528
+ };
2529
+ requestBody?: never;
2530
+ responses: {
2531
+ 200: components["responses"]["OkEnvelope"];
2532
+ 404: components["responses"]["NotFound"];
2533
+ };
2534
+ };
2535
+ deleteRuntimeRecord: {
2536
+ parameters: {
2537
+ query?: never;
2538
+ header?: {
2539
+ /**
2540
+ * @description ADR-0127 US3 — the self-confirmation retry token from a prior `409
2541
+ * confirmation_required` response. Re-submit the IDENTICAL write carrying
2542
+ * this header to proceed. The token is bound to the exact write
2543
+ * (tenant/actor/contract-version/action/entity/verb/record/params) and
2544
+ * expires; it is read only from this header, never the body.
2545
+ */
2546
+ "X-Zarel-Confirmation-Token"?: components["parameters"]["ConfirmationToken"];
2547
+ };
2548
+ path: {
2549
+ entity_name: components["parameters"]["EntityNamePath"];
2550
+ id: string;
2551
+ };
2552
+ cookie?: never;
2553
+ };
2554
+ requestBody?: never;
2555
+ responses: {
2556
+ 200: components["responses"]["OkEnvelope"];
2557
+ 400: components["responses"]["ActionRequired"];
2558
+ 409: components["responses"]["ConfirmationRequired"];
2559
+ 422: components["responses"]["GovernanceUnprocessable"];
2560
+ };
2561
+ };
2562
+ patchRuntimeRecord: {
2563
+ parameters: {
2564
+ query?: never;
2565
+ header?: {
2566
+ /**
2567
+ * @description ADR-0127 US3 — the self-confirmation retry token from a prior `409
2568
+ * confirmation_required` response. Re-submit the IDENTICAL write carrying
2569
+ * this header to proceed. The token is bound to the exact write
2570
+ * (tenant/actor/contract-version/action/entity/verb/record/params) and
2571
+ * expires; it is read only from this header, never the body.
2572
+ */
2573
+ "X-Zarel-Confirmation-Token"?: components["parameters"]["ConfirmationToken"];
2574
+ };
2575
+ path: {
2576
+ entity_name: components["parameters"]["EntityNamePath"];
2577
+ id: string;
2578
+ };
2579
+ cookie?: never;
2580
+ };
2581
+ requestBody: components["requestBodies"]["JsonObject"];
2582
+ responses: {
2583
+ 200: components["responses"]["OkEnvelope"];
2584
+ 400: components["responses"]["ActionRequired"];
2585
+ 409: components["responses"]["ConfirmationRequired"];
2586
+ 422: components["responses"]["GovernanceUnprocessable"];
2587
+ };
2588
+ };
2589
+ getRuntimeRecordsCounter: {
2590
+ parameters: {
2591
+ query?: never;
2592
+ header?: never;
2593
+ path: {
2594
+ entity_name: components["parameters"]["EntityNamePath"];
2595
+ };
2596
+ cookie?: never;
2597
+ };
2598
+ requestBody?: never;
2599
+ responses: {
2600
+ 200: components["responses"]["OkEnvelope"];
2601
+ 404: components["responses"]["NotFound"];
2602
+ };
2603
+ };
2604
+ listStateMachineInstances: {
2605
+ parameters: {
2606
+ query?: never;
2607
+ header?: never;
2608
+ path?: never;
2609
+ cookie?: never;
2610
+ };
2611
+ requestBody?: never;
2612
+ responses: {
2613
+ 200: components["responses"]["OkEnvelope"];
2614
+ };
2615
+ };
2616
+ getStateMachineInstance: {
2617
+ parameters: {
2618
+ query?: never;
2619
+ header?: never;
2620
+ path: {
2621
+ id: string;
2622
+ };
2623
+ cookie?: never;
2624
+ };
2625
+ requestBody?: never;
2626
+ responses: {
2627
+ 200: components["responses"]["OkEnvelope"];
2628
+ 404: components["responses"]["NotFound"];
2629
+ };
2630
+ };
2631
+ listStateMachineEvents: {
2632
+ parameters: {
2633
+ query?: {
2634
+ entity_name?: string;
2635
+ instance_id?: string;
2636
+ };
2637
+ header?: never;
2638
+ path?: never;
2639
+ cookie?: never;
2640
+ };
2641
+ requestBody?: never;
2642
+ responses: {
2643
+ 200: components["responses"]["OkEnvelope"];
2644
+ };
2645
+ };
2646
+ getStateMachineEvent: {
2647
+ parameters: {
2648
+ query?: never;
2649
+ header?: never;
2650
+ path: {
2651
+ id: string;
2652
+ };
2653
+ cookie?: never;
2654
+ };
2655
+ requestBody?: never;
2656
+ responses: {
2657
+ 200: components["responses"]["OkEnvelope"];
2658
+ 404: components["responses"]["NotFound"];
2659
+ };
2660
+ };
2661
+ listTransitionRequests: {
2662
+ parameters: {
2663
+ query?: {
2664
+ status?: "pending" | "approved" | "rejected";
2665
+ role?: string;
2666
+ };
2667
+ header?: never;
2668
+ path?: never;
2669
+ cookie?: never;
2670
+ };
2671
+ requestBody?: never;
2672
+ responses: {
2673
+ 200: components["responses"]["OkEnvelope"];
2674
+ };
2675
+ };
2676
+ createTransitionRequest: {
2677
+ parameters: {
2678
+ query?: never;
2679
+ header?: never;
2680
+ path?: never;
2681
+ cookie?: never;
2682
+ };
2683
+ requestBody: components["requestBodies"]["JsonObject"];
2684
+ responses: {
2685
+ 201: components["responses"]["OkEnvelope"];
2686
+ };
2687
+ };
2688
+ getTransitionRequest: {
2689
+ parameters: {
2690
+ query?: never;
2691
+ header?: never;
2692
+ path: {
2693
+ id: string;
2694
+ };
2695
+ cookie?: never;
2696
+ };
2697
+ requestBody?: never;
2698
+ responses: {
2699
+ 200: components["responses"]["OkEnvelope"];
2700
+ 404: components["responses"]["NotFound"];
2701
+ };
2702
+ };
2703
+ resolveTransitionRequest: {
2704
+ parameters: {
2705
+ query?: never;
2706
+ header?: never;
2707
+ path: {
2708
+ id: string;
2709
+ };
2710
+ cookie?: never;
2711
+ };
2712
+ requestBody: components["requestBodies"]["JsonObject"];
2713
+ responses: {
2714
+ 200: components["responses"]["OkEnvelope"];
2715
+ };
2716
+ };
2717
+ dispatchAction: {
2718
+ parameters: {
2719
+ query?: never;
2720
+ header?: {
2721
+ /**
2722
+ * @description ADR-0127 US3 — the self-confirmation retry token from a prior `409
2723
+ * confirmation_required` response. Re-submit the IDENTICAL write carrying
2724
+ * this header to proceed. The token is bound to the exact write
2725
+ * (tenant/actor/contract-version/action/entity/verb/record/params) and
2726
+ * expires; it is read only from this header, never the body.
2727
+ */
2728
+ "X-Zarel-Confirmation-Token"?: components["parameters"]["ConfirmationToken"];
2729
+ };
2730
+ path: {
2731
+ /** @description Action name from the tenant contract `actions[]` block. */
2732
+ name: string;
2733
+ };
2734
+ cookie?: never;
2735
+ };
2736
+ requestBody?: {
2737
+ content: {
2738
+ "application/json": {
2739
+ /** @description Required for read/update/delete verbs; null/omitted for create/list (entity-level). */
2740
+ record_id?: number | string | null;
2741
+ /** @description Forwarded to the underlying entity intent. */
2742
+ payload?: {
2743
+ [key: string]: unknown;
2744
+ };
2745
+ /** @description V1 wire-format pass-through; server-side dedup deferred. */
2746
+ idempotency_key?: string;
2747
+ };
2748
+ };
2749
+ };
2750
+ responses: {
2751
+ /** @description Dispatch succeeded */
2752
+ 200: {
2753
+ headers: {
2754
+ [name: string]: unknown;
2755
+ };
2756
+ content: {
2757
+ "application/json": {
2758
+ /** @enum {boolean} */
2759
+ success: true;
2760
+ data: {
2761
+ [key: string]: unknown;
2762
+ } | null;
2763
+ /** @description ADR-0085 telemetry tag — action name as resolved. */
2764
+ resolved_via_action: string;
2765
+ };
2766
+ };
2767
+ };
2768
+ /** @description Bad request (validation_error / record_id_required / invalid_action_type / action_required / reason_required) */
2769
+ 400: {
2770
+ headers: {
2771
+ [name: string]: unknown;
2772
+ };
2773
+ content: {
2774
+ "application/json": components["schemas"]["ErrorResponse"];
2775
+ };
2776
+ };
2777
+ /** @description Caller lacks the underlying (entity, verb) capability — `error.code='action_unauthorized'` */
2778
+ 403: {
2779
+ headers: {
2780
+ [name: string]: unknown;
2781
+ };
2782
+ content: {
2783
+ "application/json": components["schemas"]["ErrorResponse"];
2784
+ };
2785
+ };
2786
+ /** @description Action name not found in tenant contract — `error.code='unknown_action'` */
2787
+ 404: {
2788
+ headers: {
2789
+ [name: string]: unknown;
2790
+ };
2791
+ content: {
2792
+ "application/json": components["schemas"]["ErrorResponse"];
2793
+ };
2794
+ };
2795
+ 409: components["responses"]["ConfirmationRequired"];
2796
+ 422: components["responses"]["GovernanceUnprocessable"];
2797
+ };
2798
+ };
2799
+ listFlowInstances: {
2800
+ parameters: {
2801
+ query?: {
2802
+ /** @description Only runs of this flow definition. */
2803
+ flow?: string;
2804
+ };
2805
+ header?: never;
2806
+ path?: never;
2807
+ cookie?: never;
2808
+ };
2809
+ requestBody?: never;
2810
+ responses: {
2811
+ 200: components["responses"]["OkEnvelope"];
2812
+ };
2813
+ };
2814
+ getFlowInstance: {
2815
+ parameters: {
2816
+ query?: never;
2817
+ header?: never;
2818
+ path: {
2819
+ id: string;
2820
+ };
2821
+ cookie?: never;
2822
+ };
2823
+ requestBody?: never;
2824
+ responses: {
2825
+ 200: components["responses"]["OkEnvelope"];
2826
+ 404: components["responses"]["NotFound"];
2827
+ };
2828
+ };
2829
+ listFlowEvents: {
2830
+ parameters: {
2831
+ query?: {
2832
+ /** @description Only events belonging to this flow instance. */
2833
+ instance_id?: string;
2834
+ /** @description Only events of this kind. An unrecognised kind is refused `400` rather than silently matching nothing. */
2835
+ event_type?: "FlowStarted" | "FlowStepCompleted" | "FlowStepFailed" | "FlowStepSkipped" | "FlowStepAlreadyCompleted" | "FlowPaused" | "FlowResumed" | "FlowCompleted" | "FlowFailed" | "FlowConstraintViolated" | "FlowConstraintUnverifiable";
2836
+ };
2837
+ header?: never;
2838
+ path?: never;
2839
+ cookie?: never;
2840
+ };
2841
+ requestBody?: never;
2842
+ responses: {
2843
+ 200: components["responses"]["OkEnvelope"];
2844
+ 400: components["responses"]["BadRequest"];
2845
+ };
2846
+ };
2847
+ getFlowEvent: {
2848
+ parameters: {
2849
+ query?: never;
2850
+ header?: never;
2851
+ path: {
2852
+ id: string;
2853
+ };
2854
+ cookie?: never;
2855
+ };
2856
+ requestBody?: never;
2857
+ responses: {
2858
+ 200: components["responses"]["OkEnvelope"];
2859
+ 404: components["responses"]["NotFound"];
2860
+ };
2861
+ };
2862
+ listFlowCallbacks: {
2863
+ parameters: {
2864
+ query?: never;
2865
+ header?: never;
2866
+ path?: never;
2867
+ cookie?: never;
2868
+ };
2869
+ requestBody?: never;
2870
+ responses: {
2871
+ 200: components["responses"]["OkEnvelope"];
2872
+ };
2873
+ };
2874
+ getFlowCallback: {
2875
+ parameters: {
2876
+ query?: never;
2877
+ header?: never;
2878
+ path: {
2879
+ id: string;
2880
+ };
2881
+ cookie?: never;
2882
+ };
2883
+ requestBody?: never;
2884
+ responses: {
2885
+ 200: components["responses"]["OkEnvelope"];
2886
+ 404: components["responses"]["NotFound"];
2887
+ };
2888
+ };
2889
+ resolveFlowCallback: {
2890
+ parameters: {
2891
+ query?: never;
2892
+ header?: never;
2893
+ path: {
2894
+ id: string;
2895
+ };
2896
+ cookie?: never;
2897
+ };
2898
+ requestBody: components["requestBodies"]["JsonObject"];
2899
+ responses: {
2900
+ /** @description Flat callback-resolution ack (success + optional message). */
2901
+ 200: {
2902
+ headers: {
2903
+ [name: string]: unknown;
2904
+ };
2905
+ content: {
2906
+ "application/json": {
2907
+ success: boolean;
2908
+ message?: string;
2909
+ };
2910
+ };
2911
+ };
2912
+ };
2913
+ };
2914
+ listEventSubscriptions: {
2915
+ parameters: {
2916
+ query?: never;
2917
+ header?: never;
2918
+ path?: never;
2919
+ cookie?: never;
2920
+ };
2921
+ requestBody?: never;
2922
+ responses: {
2923
+ 200: components["responses"]["OkEnvelope"];
2924
+ };
2925
+ };
2926
+ createEventSubscription: {
2927
+ parameters: {
2928
+ query?: never;
2929
+ header?: never;
2930
+ path?: never;
2931
+ cookie?: never;
2932
+ };
2933
+ requestBody: components["requestBodies"]["JsonObject"];
2934
+ responses: {
2935
+ 201: components["responses"]["OkEnvelope"];
2936
+ };
2937
+ };
2938
+ getEventSubscription: {
2939
+ parameters: {
2940
+ query?: never;
2941
+ header?: never;
2942
+ path: {
2943
+ subscription_id: number;
2944
+ };
2945
+ cookie?: never;
2946
+ };
2947
+ requestBody?: never;
2948
+ responses: {
2949
+ 200: components["responses"]["OkEnvelope"];
2950
+ 404: components["responses"]["NotFound"];
2951
+ };
2952
+ };
2953
+ deactivateEventSubscription: {
2954
+ parameters: {
2955
+ query?: never;
2956
+ header?: never;
2957
+ path: {
2958
+ subscription_id: number;
2959
+ };
2960
+ cookie?: never;
2961
+ };
2962
+ requestBody?: never;
2963
+ responses: {
2964
+ 200: components["responses"]["OkEnvelope"];
2965
+ };
2966
+ };
2967
+ patchEventSubscription: {
2968
+ parameters: {
2969
+ query?: never;
2970
+ header?: never;
2971
+ path: {
2972
+ subscription_id: number;
2973
+ };
2974
+ cookie?: never;
2975
+ };
2976
+ requestBody: components["requestBodies"]["JsonObject"];
2977
+ responses: {
2978
+ 200: components["responses"]["OkEnvelope"];
2979
+ };
2980
+ };
2981
+ listEventDeliveries: {
2982
+ parameters: {
2983
+ query?: never;
2984
+ header?: never;
2985
+ path?: never;
2986
+ cookie?: never;
2987
+ };
2988
+ requestBody?: never;
2989
+ responses: {
2990
+ 200: components["responses"]["OkEnvelope"];
2991
+ };
2992
+ };
2993
+ getEventDelivery: {
2994
+ parameters: {
2995
+ query?: never;
2996
+ header?: never;
2997
+ path: {
2998
+ id: string;
2999
+ };
3000
+ cookie?: never;
3001
+ };
3002
+ requestBody?: never;
3003
+ responses: {
3004
+ 200: components["responses"]["OkEnvelope"];
3005
+ 404: components["responses"]["NotFound"];
3006
+ };
3007
+ };
3008
+ listConversationSessions: {
3009
+ parameters: {
3010
+ query?: {
3011
+ /** @description Declared channel name (tenant `channels:` section, ADR-0133) */
3012
+ channel_name?: string;
3013
+ status?: "active" | "expired" | "cleared";
3014
+ from?: string;
3015
+ to?: string;
3016
+ limit?: number;
3017
+ offset?: number;
3018
+ };
3019
+ header?: never;
3020
+ path?: never;
3021
+ cookie?: never;
3022
+ };
3023
+ requestBody?: never;
3024
+ responses: {
3025
+ 200: components["responses"]["OkEnvelope"];
3026
+ };
3027
+ };
3028
+ createConversationSession: {
3029
+ parameters: {
3030
+ query?: never;
3031
+ header?: never;
3032
+ path?: never;
3033
+ cookie?: never;
3034
+ };
3035
+ requestBody: components["requestBodies"]["JsonObject"];
3036
+ responses: {
3037
+ 201: components["responses"]["OkEnvelope"];
3038
+ 400: components["responses"]["BadRequest"];
3039
+ 404: components["responses"]["NotFound"];
3040
+ 409: components["responses"]["Conflict"];
3041
+ };
3042
+ };
3043
+ getConversationSession: {
3044
+ parameters: {
3045
+ query?: never;
3046
+ header?: never;
3047
+ path: {
3048
+ session_key: string;
3049
+ };
3050
+ cookie?: never;
3051
+ };
3052
+ requestBody?: never;
3053
+ responses: {
3054
+ 200: components["responses"]["OkEnvelope"];
3055
+ 404: components["responses"]["NotFound"];
3056
+ };
3057
+ };
3058
+ clearConversationSession: {
3059
+ parameters: {
3060
+ query?: never;
3061
+ header?: never;
3062
+ path: {
3063
+ session_key: string;
3064
+ };
3065
+ cookie?: never;
3066
+ };
3067
+ requestBody?: never;
3068
+ responses: {
3069
+ 200: components["responses"]["OkEnvelope"];
3070
+ };
3071
+ };
3072
+ listConversationTurns: {
3073
+ parameters: {
3074
+ query?: never;
3075
+ header?: never;
3076
+ path: {
3077
+ session_key: string;
3078
+ };
3079
+ cookie?: never;
3080
+ };
3081
+ requestBody?: never;
3082
+ responses: {
3083
+ 200: components["responses"]["OkEnvelope"];
3084
+ };
3085
+ };
3086
+ getConversationTurn: {
3087
+ parameters: {
3088
+ query?: never;
3089
+ header?: never;
3090
+ path: {
3091
+ session_key: string;
3092
+ turn_number: number;
3093
+ };
3094
+ cookie?: never;
3095
+ };
3096
+ requestBody?: never;
3097
+ responses: {
3098
+ 200: components["responses"]["OkEnvelope"];
3099
+ 404: components["responses"]["NotFound"];
3100
+ };
3101
+ };
3102
+ listConversationActions: {
3103
+ parameters: {
3104
+ query?: never;
3105
+ header?: never;
3106
+ path: {
3107
+ session_key: string;
3108
+ };
3109
+ cookie?: never;
3110
+ };
3111
+ requestBody?: never;
3112
+ responses: {
3113
+ 200: components["responses"]["OkEnvelope"];
3114
+ };
3115
+ };
3116
+ getConversationAction: {
3117
+ parameters: {
3118
+ query?: never;
3119
+ header?: never;
3120
+ path: {
3121
+ session_key: string;
3122
+ id: string;
3123
+ };
3124
+ cookie?: never;
3125
+ };
3126
+ requestBody?: never;
3127
+ responses: {
3128
+ 200: components["responses"]["OkEnvelope"];
3129
+ 404: components["responses"]["NotFound"];
3130
+ };
3131
+ };
3132
+ recomputeEntity: {
3133
+ parameters: {
3134
+ query?: never;
3135
+ header?: never;
3136
+ path: {
3137
+ entity_name: components["parameters"]["EntityNamePath"];
3138
+ };
3139
+ cookie?: never;
3140
+ };
3141
+ requestBody?: never;
3142
+ responses: {
3143
+ 200: components["responses"]["OkEnvelope"];
3144
+ };
3145
+ };
3146
+ verifyChannelBinding: {
3147
+ parameters: {
3148
+ query?: never;
3149
+ header?: never;
3150
+ path: {
3151
+ id: number;
3152
+ };
3153
+ cookie?: never;
3154
+ };
3155
+ requestBody: components["requestBodies"]["JsonObject"];
3156
+ responses: {
3157
+ 200: components["responses"]["OkEnvelope"];
3158
+ /** @description Missing the system action — `error.code='verify_channel_binding_required'` */
3159
+ 403: {
3160
+ headers: {
3161
+ [name: string]: unknown;
3162
+ };
3163
+ content: {
3164
+ "application/json": components["schemas"]["ErrorResponse"];
3165
+ };
3166
+ };
3167
+ };
3168
+ };
3169
+ listRoleAssignments: {
3170
+ parameters: {
3171
+ query?: never;
3172
+ header?: never;
3173
+ path?: never;
3174
+ cookie?: never;
3175
+ };
3176
+ requestBody?: never;
3177
+ responses: {
3178
+ 200: components["responses"]["OkEnvelope"];
3179
+ };
3180
+ };
3181
+ createRoleAssignment: {
3182
+ parameters: {
3183
+ query?: never;
3184
+ header?: never;
3185
+ path?: never;
3186
+ cookie?: never;
3187
+ };
3188
+ requestBody: components["requestBodies"]["JsonObject"];
3189
+ responses: {
3190
+ 201: components["responses"]["OkEnvelope"];
3191
+ /** @description Owner-marked role — `error.code='owner_role_protected'` (ADR-0102 S4) */
3192
+ 403: {
3193
+ headers: {
3194
+ [name: string]: unknown;
3195
+ };
3196
+ content: {
3197
+ "application/json": components["schemas"]["ErrorResponse"];
3198
+ };
3199
+ };
3200
+ /** @description Assigned user has no live `users` record — `error.code='assignment_user_not_found'` */
3201
+ 422: {
3202
+ headers: {
3203
+ [name: string]: unknown;
3204
+ };
3205
+ content: {
3206
+ "application/json": components["schemas"]["ErrorResponse"];
3207
+ };
3208
+ };
3209
+ };
3210
+ };
3211
+ deleteRoleAssignment: {
3212
+ parameters: {
3213
+ query?: never;
3214
+ header?: never;
3215
+ path: {
3216
+ user_name: string;
3217
+ role_name: string;
3218
+ };
3219
+ cookie?: never;
3220
+ };
3221
+ requestBody?: never;
3222
+ responses: {
3223
+ 200: components["responses"]["OkEnvelope"];
3224
+ /** @description Owner-marked role — `error.code='owner_role_protected'` (ADR-0102 S4) */
3225
+ 403: {
3226
+ headers: {
3227
+ [name: string]: unknown;
3228
+ };
3229
+ content: {
3230
+ "application/json": components["schemas"]["ErrorResponse"];
3231
+ };
3232
+ };
3233
+ };
3234
+ };
3235
+ runtimeConversationSend: {
3236
+ parameters: {
3237
+ query?: never;
3238
+ header?: never;
3239
+ path?: never;
3240
+ cookie?: never;
3241
+ };
3242
+ requestBody: components["requestBodies"]["JsonObject"];
3243
+ responses: {
3244
+ /**
3245
+ * @description Cognitive-agent reply — a **flat** body (`success` + `message` +
3246
+ * optional intent/clarification fields), NOT envelope-wrapped. The SDK
3247
+ * returns it whole (codegen-unwrap: no-unwrap).
3248
+ */
3249
+ 200: {
3250
+ headers: {
3251
+ [name: string]: unknown;
3252
+ };
3253
+ content: {
3254
+ "application/json": {
3255
+ success: boolean;
3256
+ message: string;
3257
+ intent_type?: string;
3258
+ intent_id?: string;
3259
+ data?: unknown;
3260
+ clarification_needed?: boolean;
3261
+ options?: string[];
3262
+ suggestions?: string[];
3263
+ error?: string;
3264
+ };
3265
+ };
3266
+ };
3267
+ 404: components["responses"]["NotFound"];
3268
+ };
3269
+ };
3270
+ runtimeChannelsMint: {
3271
+ parameters: {
3272
+ query?: never;
3273
+ header?: never;
3274
+ path?: never;
3275
+ cookie?: never;
3276
+ };
3277
+ requestBody: {
3278
+ content: {
3279
+ "application/json": components["schemas"]["ChannelMintRequest"];
3280
+ };
3281
+ };
3282
+ responses: {
3283
+ /** @description The minted party token — a bare body, NOT envelope-wrapped. */
3284
+ 200: {
3285
+ headers: {
3286
+ [name: string]: unknown;
3287
+ };
3288
+ content: {
3289
+ "application/json": components["schemas"]["ChannelPartyToken"];
3290
+ };
3291
+ };
3292
+ /**
3293
+ * @description `MINT_CLAIM_REJECTED` — the body carried a role/privilege claim, or
3294
+ * any key other than `party_ref`. Refused before the mint (QI-003).
3295
+ */
3296
+ 422: {
3297
+ headers: {
3298
+ [name: string]: unknown;
3299
+ };
3300
+ content: {
3301
+ "application/json": components["schemas"]["ErrorResponse"];
3302
+ };
3303
+ };
3304
+ };
3305
+ };
3306
+ runtimeChannelsSubscribe: {
3307
+ parameters: {
3308
+ query?: never;
3309
+ header?: never;
3310
+ path?: never;
3311
+ cookie?: never;
3312
+ };
3313
+ requestBody?: never;
3314
+ responses: {
3315
+ /** @description text/event-stream */
3316
+ 200: {
3317
+ headers: {
3318
+ [name: string]: unknown;
3319
+ };
3320
+ content: {
3321
+ "text/event-stream": string;
3322
+ };
3323
+ };
3324
+ /**
3325
+ * @description `STREAM_UNAVAILABLE` — the directive stream is not configured on
3326
+ * this instance.
3327
+ */
3328
+ 503: {
3329
+ headers: {
3330
+ [name: string]: unknown;
3331
+ };
3332
+ content: {
3333
+ "application/json": components["schemas"]["ErrorResponse"];
3334
+ };
3335
+ };
3336
+ };
3337
+ };
3338
+ runtimeChannelsFetch: {
3339
+ parameters: {
3340
+ query?: never;
3341
+ header?: never;
3342
+ path: {
3343
+ /** @description Egress directive id (ADR-0133 §B.4) */
3344
+ id: components["parameters"]["ChannelDirectiveIdPath"];
3345
+ };
3346
+ cookie?: never;
3347
+ };
3348
+ requestBody?: never;
3349
+ responses: {
3350
+ /**
3351
+ * @description The claimed directive plus its resolved content — a bare body, NOT
3352
+ * envelope-wrapped.
3353
+ */
3354
+ 200: {
3355
+ headers: {
3356
+ [name: string]: unknown;
3357
+ };
3358
+ content: {
3359
+ "application/json": components["schemas"]["ChannelDirectiveContent"];
3360
+ };
3361
+ };
3362
+ /**
3363
+ * @description The directive belongs to another channel — refused, never readable
3364
+ * (QI-006).
3365
+ */
3366
+ 403: {
3367
+ headers: {
3368
+ [name: string]: unknown;
3369
+ };
3370
+ content: {
3371
+ "application/json": components["schemas"]["ErrorResponse"];
3372
+ };
3373
+ };
3374
+ 404: components["responses"]["NotFound"];
3375
+ /**
3376
+ * @description A live FOREIGN lease — another holder is mid-delivery. The caller
3377
+ * must not deliver.
3378
+ */
3379
+ 409: {
3380
+ headers: {
3381
+ [name: string]: unknown;
3382
+ };
3383
+ content: {
3384
+ "application/json": components["schemas"]["ErrorResponse"];
3385
+ };
3386
+ };
3387
+ };
3388
+ };
3389
+ runtimeChannelsReport: {
3390
+ parameters: {
3391
+ query?: never;
3392
+ header?: never;
3393
+ path: {
3394
+ /** @description Egress directive id (ADR-0133 §B.4) */
3395
+ id: components["parameters"]["ChannelDirectiveIdPath"];
3396
+ };
3397
+ cookie?: never;
3398
+ };
3399
+ requestBody: {
3400
+ content: {
3401
+ "application/json": components["schemas"]["ChannelSendResult"];
3402
+ };
3403
+ };
3404
+ responses: {
3405
+ /**
3406
+ * @description The directive's resulting terminal status — a bare body, NOT
3407
+ * envelope-wrapped.
3408
+ */
3409
+ 200: {
3410
+ headers: {
3411
+ [name: string]: unknown;
3412
+ };
3413
+ content: {
3414
+ "application/json": components["schemas"]["ChannelSendResultAck"];
3415
+ };
3416
+ };
3417
+ 400: components["responses"]["BadRequest"];
3418
+ /** @description The directive belongs to another channel — refused (QI-006). */
3419
+ 403: {
3420
+ headers: {
3421
+ [name: string]: unknown;
3422
+ };
3423
+ content: {
3424
+ "application/json": components["schemas"]["ErrorResponse"];
3425
+ };
3426
+ };
3427
+ 404: components["responses"]["NotFound"];
3428
+ /**
3429
+ * @description The lease was lost (claimed by another holder) — the adapter must
3430
+ * abort rather than assume the send succeeded.
3431
+ */
3432
+ 409: {
3433
+ headers: {
3434
+ [name: string]: unknown;
3435
+ };
3436
+ content: {
3437
+ "application/json": components["schemas"]["ErrorResponse"];
3438
+ };
3439
+ };
3440
+ };
3441
+ };
3442
+ runtimeToolsList: {
3443
+ parameters: {
3444
+ query?: never;
3445
+ header?: never;
3446
+ path?: never;
3447
+ cookie?: never;
3448
+ };
3449
+ requestBody?: never;
3450
+ responses: {
3451
+ /** @description User-filtered tool catalog */
3452
+ 200: {
3453
+ headers: {
3454
+ [name: string]: unknown;
3455
+ };
3456
+ content: {
3457
+ "application/json": {
3458
+ success: boolean;
3459
+ catalog: components["schemas"]["UserToolCatalog"];
3460
+ };
3461
+ };
3462
+ };
3463
+ };
3464
+ };
3465
+ runtimeEffectiveAuthorizations: {
3466
+ parameters: {
3467
+ query?: never;
3468
+ header?: never;
3469
+ path?: never;
3470
+ cookie?: never;
3471
+ };
3472
+ requestBody?: never;
3473
+ responses: {
3474
+ /** @description Effective authorizations of the calling actor */
3475
+ 200: {
3476
+ headers: {
3477
+ [name: string]: unknown;
3478
+ };
3479
+ content: {
3480
+ "application/json": {
3481
+ tenant_name: string;
3482
+ user_name: string;
3483
+ user_roles: string[];
3484
+ admin_sections: string[];
3485
+ system_actions: string[];
3486
+ /**
3487
+ * @description ADR-0102 S5b-a (FR-012): bounds carried by the actor's
3488
+ * matched CONDITIONED system grants (e.g. the Cat-2
3489
+ * provider allow-lists on `manage_credentials`). Present
3490
+ * only when at least one matched grant is bounded.
3491
+ */
3492
+ system_action_bounds?: {
3493
+ [key: string]: Record<string, never>;
3494
+ };
3495
+ entity_permissions: {
3496
+ entity: string;
3497
+ actions: string[];
3498
+ /**
3499
+ * @description The scope the write floor will enforce for each reported action.
3500
+ * `full` reaches every row; `owner` reaches only rows the caller
3501
+ * owns, so an affordance rendered from an `owner` action must be
3502
+ * gated on the row's owner or it will meet a 403.
3503
+ */
3504
+ scope_by_action: {
3505
+ [key: string]: "full" | "owner";
3506
+ };
3507
+ /**
3508
+ * @description The fields each action opens, ON A ROW THE CALLER OWNS — the widest
3509
+ * set any single row admits, since ownership is a property of a row
3510
+ * and this endpoint is asked about an entity. ABSENT means all
3511
+ * fields; it never means none. An EMPTY list means exactly none, and
3512
+ * is emitted rather than dropped: a policy may grant the scope while
3513
+ * opening no field (`fields: []`), and the write floor then refuses
3514
+ * every field. Absence and `[]` are opposite answers and both are
3515
+ * reachable. Read together with `scope_by_action`: where an `owner`
3516
+ * grant contributed, that part of the list applies only to the
3517
+ * caller's own rows.
3518
+ */
3519
+ fields_by_action: {
3520
+ [key: string]: string[] | null;
3521
+ };
3522
+ }[];
3523
+ };
3524
+ };
3525
+ };
3526
+ };
3527
+ };
3528
+ runtimeMcp: {
3529
+ parameters: {
3530
+ query?: never;
3531
+ header?: never;
3532
+ path?: never;
3533
+ cookie?: never;
3534
+ };
3535
+ requestBody: {
3536
+ content: {
3537
+ "application/json": {
3538
+ [key: string]: unknown;
3539
+ };
3540
+ };
3541
+ };
3542
+ responses: {
3543
+ /**
3544
+ * @description MCP JSON-RPC response (single object) or an SSE stream of MCP
3545
+ * messages — the server selects the content type per request.
3546
+ */
3547
+ 200: {
3548
+ headers: {
3549
+ [name: string]: unknown;
3550
+ };
3551
+ content: {
3552
+ "application/json": {
3553
+ [key: string]: unknown;
3554
+ };
3555
+ "text/event-stream": string;
3556
+ };
3557
+ };
3558
+ /**
3559
+ * @description Method not allowed. GET on the stateless transport returns 405
3560
+ * (no server-initiated SSE); DELETE is a 200 no-op.
3561
+ */
3562
+ 405: {
3563
+ headers: {
3564
+ [name: string]: unknown;
3565
+ };
3566
+ content?: never;
3567
+ };
3568
+ };
3569
+ };
3570
+ runtimeToolsMcpList: {
3571
+ parameters: {
3572
+ query?: never;
3573
+ header?: never;
3574
+ path?: never;
3575
+ cookie?: never;
3576
+ };
3577
+ requestBody?: never;
3578
+ responses: {
3579
+ 200: components["responses"]["OkEnvelope"];
3580
+ };
3581
+ };
3582
+ runtimeToolsCall: {
3583
+ parameters: {
3584
+ query?: never;
3585
+ header?: never;
3586
+ path?: never;
3587
+ cookie?: never;
3588
+ };
3589
+ requestBody: components["requestBodies"]["JsonObject"];
3590
+ responses: {
3591
+ 200: components["responses"]["OkEnvelope"];
3592
+ };
3593
+ };
3594
+ getHealth: {
3595
+ parameters: {
3596
+ query?: never;
3597
+ header?: never;
3598
+ path?: never;
3599
+ cookie?: never;
3600
+ };
3601
+ requestBody?: never;
3602
+ responses: {
3603
+ 200: components["responses"]["OkEnvelope"];
3604
+ };
3605
+ };
3606
+ getMetrics: {
3607
+ parameters: {
3608
+ query?: never;
3609
+ header?: never;
3610
+ path?: never;
3611
+ cookie?: never;
3612
+ };
3613
+ requestBody?: never;
3614
+ responses: {
3615
+ 200: components["responses"]["OkEnvelope"];
3616
+ };
3617
+ };
3618
+ listApiKeys: {
3619
+ parameters: {
3620
+ query?: never;
3621
+ header?: never;
3622
+ path?: never;
3623
+ cookie?: never;
3624
+ };
3625
+ requestBody?: never;
3626
+ responses: {
3627
+ /** @description Bare array of masked API-key metadata. */
3628
+ 200: {
3629
+ headers: {
3630
+ [name: string]: unknown;
3631
+ };
3632
+ content: {
3633
+ "application/json": {
3634
+ id: string;
3635
+ name: string;
3636
+ key_prefix: string;
3637
+ scopes?: string[];
3638
+ created_at?: string;
3639
+ }[];
3640
+ };
3641
+ };
3642
+ };
3643
+ };
3644
+ createApiKey: {
3645
+ parameters: {
3646
+ query?: never;
3647
+ header?: never;
3648
+ path?: never;
3649
+ cookie?: never;
3650
+ };
3651
+ requestBody: {
3652
+ content: {
3653
+ "application/json": {
3654
+ name: string;
3655
+ scopes?: string[];
3656
+ };
3657
+ };
3658
+ };
3659
+ responses: {
3660
+ /** @description Created API key (bare body — includes one-time plaintext `key`). */
3661
+ 201: {
3662
+ headers: {
3663
+ [name: string]: unknown;
3664
+ };
3665
+ content: {
3666
+ "application/json": {
3667
+ id: string;
3668
+ name: string;
3669
+ key: string;
3670
+ scopes?: string[];
3671
+ created_at?: string;
3672
+ };
3673
+ };
3674
+ };
3675
+ };
3676
+ };
3677
+ deleteApiKey: {
3678
+ parameters: {
3679
+ query?: never;
3680
+ header?: never;
3681
+ path: {
3682
+ key_id: string;
3683
+ };
3684
+ cookie?: never;
3685
+ };
3686
+ requestBody?: never;
3687
+ responses: {
3688
+ /** @description Flat revoke ack. */
3689
+ 200: {
3690
+ headers: {
3691
+ [name: string]: unknown;
3692
+ };
3693
+ content: {
3694
+ "application/json": {
3695
+ success: boolean;
3696
+ };
3697
+ };
3698
+ };
3699
+ };
3700
+ };
3701
+ runtimeStateMachineReplay: {
3702
+ parameters: {
3703
+ query?: never;
3704
+ header?: never;
3705
+ path?: never;
3706
+ cookie?: never;
3707
+ };
3708
+ requestBody: components["requestBodies"]["JsonObject"];
3709
+ responses: {
3710
+ 200: components["responses"]["OkEnvelope"];
3711
+ };
3712
+ };
3713
+ streamEvents: {
3714
+ parameters: {
3715
+ query?: never;
3716
+ header?: never;
3717
+ path?: never;
3718
+ cookie?: never;
3719
+ };
3720
+ requestBody?: never;
3721
+ responses: {
3722
+ /** @description text/event-stream */
3723
+ 200: {
3724
+ headers: {
3725
+ [name: string]: unknown;
3726
+ };
3727
+ content: {
3728
+ "text/event-stream": string;
3729
+ };
3730
+ };
3731
+ };
3732
+ };
3733
+ getTrace: {
3734
+ parameters: {
3735
+ query?: never;
3736
+ header?: never;
3737
+ path: {
3738
+ trace_id: string;
3739
+ };
3740
+ cookie?: never;
3741
+ };
3742
+ requestBody?: never;
3743
+ responses: {
3744
+ 200: components["responses"]["OkEnvelope"];
3745
+ /** @description trace_not_found / legacy_trace_not_available */
3746
+ 404: {
3747
+ headers: {
3748
+ [name: string]: unknown;
3749
+ };
3750
+ content?: never;
3751
+ };
3752
+ };
3753
+ };
3754
+ queryTraces: {
3755
+ parameters: {
3756
+ query?: {
3757
+ flow?: string;
3758
+ user?: string;
3759
+ from?: string;
3760
+ to?: string;
3761
+ outcome?: "executed" | "refused" | "awaiting_human_decision" | "failed";
3762
+ limit?: number;
3763
+ cursor?: string;
3764
+ };
3765
+ header?: never;
3766
+ path?: never;
3767
+ cookie?: never;
3768
+ };
3769
+ requestBody?: never;
3770
+ responses: {
3771
+ 200: components["responses"]["OkEnvelope"];
3772
+ /** @description invalid_query */
3773
+ 400: {
3774
+ headers: {
3775
+ [name: string]: unknown;
3776
+ };
3777
+ content?: never;
3778
+ };
3779
+ };
3780
+ };
3781
+ replayTrace: {
3782
+ parameters: {
3783
+ query?: never;
3784
+ header?: never;
3785
+ path: {
3786
+ trace_id: string;
3787
+ };
3788
+ cookie?: never;
3789
+ };
3790
+ requestBody: components["requestBodies"]["JsonObject"];
3791
+ responses: {
3792
+ 200: components["responses"]["OkEnvelope"];
3793
+ /** @description trace_not_found / legacy_trace_not_available */
3794
+ 404: {
3795
+ headers: {
3796
+ [name: string]: unknown;
3797
+ };
3798
+ content?: never;
3799
+ };
3800
+ /** @description trace_in_flight (no terminal outcome recorded yet) */
3801
+ 409: {
3802
+ headers: {
3803
+ [name: string]: unknown;
3804
+ };
3805
+ content?: never;
3806
+ };
3807
+ };
3808
+ };
3809
+ getTraceBundle: {
3810
+ parameters: {
3811
+ query?: never;
3812
+ header?: never;
3813
+ path: {
3814
+ trace_id: string;
3815
+ };
3816
+ cookie?: never;
3817
+ };
3818
+ requestBody?: never;
3819
+ responses: {
3820
+ /** @description application/gzip bundle */
3821
+ 200: {
3822
+ headers: {
3823
+ [name: string]: unknown;
3824
+ };
3825
+ content: {
3826
+ "application/gzip": string;
3827
+ };
3828
+ };
3829
+ /** @description trace_not_found / legacy_trace_not_available */
3830
+ 404: {
3831
+ headers: {
3832
+ [name: string]: unknown;
3833
+ };
3834
+ content?: never;
3835
+ };
3836
+ /** @description trace_in_flight (no terminal outcome) */
3837
+ 409: {
3838
+ headers: {
3839
+ [name: string]: unknown;
3840
+ };
3841
+ content?: never;
3842
+ };
3843
+ /** @description bundle_too_large (>200 MB after compression) */
3844
+ 422: {
3845
+ headers: {
3846
+ [name: string]: unknown;
3847
+ };
3848
+ content?: never;
3849
+ };
3850
+ };
3851
+ };
3852
+ getAuditEvidenceBundle: {
3853
+ parameters: {
3854
+ query?: {
3855
+ /** @description Inclusive lower `seq` bound (non-negative integer). */
3856
+ from?: number;
3857
+ /** @description Inclusive upper `seq` bound (non-negative integer; must be >= `from`). */
3858
+ to?: number;
3859
+ };
3860
+ header?: never;
3861
+ path: {
3862
+ /** @description The event log whose hash-chain to export. */
3863
+ log: "state_machine" | "flows";
3864
+ };
3865
+ cookie?: never;
3866
+ };
3867
+ requestBody?: never;
3868
+ responses: {
3869
+ /** @description application/gzip bundle */
3870
+ 200: {
3871
+ headers: {
3872
+ [name: string]: unknown;
3873
+ };
3874
+ content: {
3875
+ "application/gzip": string;
3876
+ };
3877
+ };
3878
+ /** @description invalid_range — `from`/`to` not non-negative integers, or `from > to` */
3879
+ 400: {
3880
+ headers: {
3881
+ [name: string]: unknown;
3882
+ };
3883
+ content?: never;
3884
+ };
3885
+ /** @description unknown_log (unsupported `{log}`) / evidence_not_found (unauthorized) */
3886
+ 404: {
3887
+ headers: {
3888
+ [name: string]: unknown;
3889
+ };
3890
+ content?: never;
3891
+ };
3892
+ /** @description payload_too_large — selected range exceeds the per-bundle event cap; narrow via `from`/`to` */
3893
+ 413: {
3894
+ headers: {
3895
+ [name: string]: unknown;
3896
+ };
3897
+ content?: never;
3898
+ };
3899
+ };
3900
+ };
3901
+ listAuditLog: {
3902
+ parameters: {
3903
+ query?: {
3904
+ /** @description Inclusive lower bound on `created_at` (ISO date-time). */
3905
+ from?: string;
3906
+ /** @description Inclusive upper bound on `created_at` (ISO date-time; must be >= `from`). */
3907
+ to?: string;
3908
+ limit?: number;
3909
+ /** @description Opaque pagination cursor from a prior response's `next_cursor`. */
3910
+ cursor?: string;
3911
+ /** @description `binding_violations` only — filter by entity name. */
3912
+ entity?: string;
3913
+ /** @description `binding_violations` only — filter by field name. */
3914
+ field?: string;
3915
+ /** @description `binding_violations` only — filter by binding mode. */
3916
+ binding_mode?: "bind" | "assert" | "immutable";
3917
+ /** @description `topic_refusals` only — filter by refusal category slug. */
3918
+ category?: string;
3919
+ /** @description `topic_refusals` only — filter by decision reason. */
3920
+ reason?: "matched" | "no_verdict" | "unscored";
3921
+ /** @description `topic_refusals` only — filter by verdict (currently always `hard_refusal`). */
3922
+ verdict?: string;
3923
+ };
3924
+ header?: never;
3925
+ path: {
3926
+ /** @description The audit row-table to list. */
3927
+ log: "binding_violations" | "topic_refusals";
3928
+ };
3929
+ cookie?: never;
3930
+ };
3931
+ requestBody?: never;
3932
+ responses: {
3933
+ 200: components["responses"]["OkEnvelope"];
3934
+ /** @description invalid_query (malformed filter/cursor) / invalid_range (`from > to`) */
3935
+ 400: {
3936
+ headers: {
3937
+ [name: string]: unknown;
3938
+ };
3939
+ content?: never;
3940
+ };
3941
+ /** @description audit_log_not_found — unknown `{log}` OR unauthorized (opaque, indistinguishable) */
3942
+ 404: {
3943
+ headers: {
3944
+ [name: string]: unknown;
3945
+ };
3946
+ content?: never;
3947
+ };
3948
+ };
3949
+ };
3950
+ getTrustKeysManifest: {
3951
+ parameters: {
3952
+ query?: never;
3953
+ header?: never;
3954
+ path?: never;
3955
+ cookie?: never;
3956
+ };
3957
+ requestBody?: never;
3958
+ responses: {
3959
+ 200: components["responses"]["OkEnvelope"];
3960
+ };
3961
+ };
3962
+ runtimeImportsSnapshot: {
3963
+ parameters: {
3964
+ query?: never;
3965
+ header?: never;
3966
+ path?: never;
3967
+ cookie?: never;
3968
+ };
3969
+ requestBody: components["requestBodies"]["JsonObject"];
3970
+ responses: {
3971
+ 200: components["responses"]["OkEnvelope"];
3972
+ };
3973
+ };
3974
+ bulkImportRuntimeRecords: {
3975
+ parameters: {
3976
+ query?: never;
3977
+ header?: never;
3978
+ path: {
3979
+ entity_name: components["parameters"]["EntityNamePath"];
3980
+ };
3981
+ cookie?: never;
3982
+ };
3983
+ requestBody: components["requestBodies"]["JsonObject"];
3984
+ responses: {
3985
+ 200: components["responses"]["OkEnvelope"];
3986
+ };
3987
+ };
3988
+ listReceipts: {
3989
+ parameters: {
3990
+ query?: {
3991
+ /** @description Filter to one signal; omitted = all three. */
3992
+ signal?: "refusal" | "binding_violation" | "validation_violation";
3993
+ /** @description Filter by conversation/request correlation id. */
3994
+ trace_id?: string;
3995
+ /** @description Inclusive lower bound on `created_at` (ISO date-time). */
3996
+ from?: string;
3997
+ /** @description Inclusive upper bound on `created_at` (ISO date-time; must be >= `from`). */
3998
+ to?: string;
3999
+ limit?: number;
4000
+ /** @description Opaque pagination cursor from a prior response's `next_cursor`. */
4001
+ cursor?: string;
4002
+ };
4003
+ header?: never;
4004
+ path?: never;
4005
+ cookie?: never;
4006
+ };
4007
+ requestBody?: never;
4008
+ responses: {
4009
+ 200: components["responses"]["OkEnvelope"];
4010
+ /** @description invalid_query (unknown signal / malformed cursor / bad limit) / invalid_range (`from > to`) */
4011
+ 400: {
4012
+ headers: {
4013
+ [name: string]: unknown;
4014
+ };
4015
+ content?: never;
4016
+ };
4017
+ };
4018
+ };
4019
+ }
4020
+ //# sourceMappingURL=runtime.d.ts.map