@kindgi/api 0.1.4-rc.0 → 0.1.4-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/dist/agent-binding.d.ts +20 -2
  2. package/dist/agent-binding.d.ts.map +1 -1
  3. package/dist/agent-pins.d.ts.map +1 -1
  4. package/dist/agent-pins.js +4 -1
  5. package/dist/agent-pins.js.map +1 -1
  6. package/dist/app.d.ts +8 -0
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +30 -5
  9. package/dist/app.js.map +1 -1
  10. package/dist/deploy-versions.d.ts +10 -5
  11. package/dist/deploy-versions.d.ts.map +1 -1
  12. package/dist/deploy-versions.js +4 -10
  13. package/dist/deploy-versions.js.map +1 -1
  14. package/dist/derive-agent-version.d.ts +9 -1
  15. package/dist/derive-agent-version.d.ts.map +1 -1
  16. package/dist/derive-agent-version.js +11 -1
  17. package/dist/derive-agent-version.js.map +1 -1
  18. package/dist/errors.d.ts.map +1 -1
  19. package/dist/errors.js +26 -0
  20. package/dist/errors.js.map +1 -1
  21. package/dist/eval-case-binding.d.ts +10 -0
  22. package/dist/eval-case-binding.d.ts.map +1 -1
  23. package/dist/eval-run-binding.d.ts +21 -3
  24. package/dist/eval-run-binding.d.ts.map +1 -1
  25. package/dist/eval-run-binding.js.map +1 -1
  26. package/dist/eval-run-dispatcher.d.ts +3 -0
  27. package/dist/eval-run-dispatcher.d.ts.map +1 -1
  28. package/dist/eval-run-dispatcher.js.map +1 -1
  29. package/dist/flow-binding.d.ts +8 -0
  30. package/dist/flow-binding.d.ts.map +1 -1
  31. package/dist/flow-pins.d.ts +20 -7
  32. package/dist/flow-pins.d.ts.map +1 -1
  33. package/dist/flow-pins.js +36 -11
  34. package/dist/flow-pins.js.map +1 -1
  35. package/dist/gate-policy-binding.d.ts +164 -0
  36. package/dist/gate-policy-binding.d.ts.map +1 -0
  37. package/dist/gate-policy-binding.js +12 -0
  38. package/dist/gate-policy-binding.js.map +1 -0
  39. package/dist/gate.d.ts +56 -0
  40. package/dist/gate.d.ts.map +1 -0
  41. package/dist/gate.js +359 -0
  42. package/dist/gate.js.map +1 -0
  43. package/dist/guardrail-binding.d.ts +8 -0
  44. package/dist/guardrail-binding.d.ts.map +1 -1
  45. package/dist/handler-binding.d.ts +17 -2
  46. package/dist/handler-binding.d.ts.map +1 -1
  47. package/dist/index.d.ts +11 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +3 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/judged-dispatcher.d.ts +20 -1
  52. package/dist/judged-dispatcher.d.ts.map +1 -1
  53. package/dist/judged-dispatcher.js +57 -7
  54. package/dist/judged-dispatcher.js.map +1 -1
  55. package/dist/judgment-binding.d.ts +38 -0
  56. package/dist/judgment-binding.d.ts.map +1 -1
  57. package/dist/judgment-binding.js +19 -0
  58. package/dist/judgment-binding.js.map +1 -1
  59. package/dist/live-version-binding.d.ts +206 -0
  60. package/dist/live-version-binding.d.ts.map +1 -0
  61. package/dist/live-version-binding.js +4 -0
  62. package/dist/live-version-binding.js.map +1 -0
  63. package/dist/middleware/authorize.d.ts.map +1 -1
  64. package/dist/middleware/authorize.js +13 -2
  65. package/dist/middleware/authorize.js.map +1 -1
  66. package/dist/middleware/project-ref.d.ts +25 -0
  67. package/dist/middleware/project-ref.d.ts.map +1 -0
  68. package/dist/middleware/project-ref.js +72 -0
  69. package/dist/middleware/project-ref.js.map +1 -0
  70. package/dist/openapi/generate.d.ts.map +1 -1
  71. package/dist/openapi/generate.js +4 -0
  72. package/dist/openapi/generate.js.map +1 -1
  73. package/dist/openapi/operations.d.ts +6 -0
  74. package/dist/openapi/operations.d.ts.map +1 -1
  75. package/dist/openapi/operations.js +524 -27
  76. package/dist/openapi/operations.js.map +1 -1
  77. package/dist/openapi/schemas.d.ts +43 -0
  78. package/dist/openapi/schemas.d.ts.map +1 -1
  79. package/dist/openapi/schemas.js +1050 -7
  80. package/dist/openapi/schemas.js.map +1 -1
  81. package/dist/publish-refused.d.ts +18 -0
  82. package/dist/publish-refused.d.ts.map +1 -0
  83. package/dist/publish-refused.js +22 -0
  84. package/dist/publish-refused.js.map +1 -0
  85. package/dist/registry-read-only.d.ts +32 -0
  86. package/dist/registry-read-only.d.ts.map +1 -0
  87. package/dist/registry-read-only.js +22 -0
  88. package/dist/registry-read-only.js.map +1 -0
  89. package/dist/retention-binding.d.ts +29 -0
  90. package/dist/retention-binding.d.ts.map +1 -1
  91. package/dist/routes/agent-releases.d.ts +40 -0
  92. package/dist/routes/agent-releases.d.ts.map +1 -0
  93. package/dist/routes/agent-releases.js +462 -0
  94. package/dist/routes/agent-releases.js.map +1 -0
  95. package/dist/routes/agents.d.ts +7 -1
  96. package/dist/routes/agents.d.ts.map +1 -1
  97. package/dist/routes/agents.js +38 -4
  98. package/dist/routes/agents.js.map +1 -1
  99. package/dist/routes/approvals.d.ts.map +1 -1
  100. package/dist/routes/approvals.js +27 -9
  101. package/dist/routes/approvals.js.map +1 -1
  102. package/dist/routes/audit.d.ts.map +1 -1
  103. package/dist/routes/audit.js +7 -0
  104. package/dist/routes/audit.js.map +1 -1
  105. package/dist/routes/auth.js +1 -1
  106. package/dist/routes/auth.js.map +1 -1
  107. package/dist/routes/blocks.d.ts.map +1 -1
  108. package/dist/routes/blocks.js +37 -12
  109. package/dist/routes/blocks.js.map +1 -1
  110. package/dist/routes/conversations.d.ts +0 -7
  111. package/dist/routes/conversations.d.ts.map +1 -1
  112. package/dist/routes/conversations.js +19 -3
  113. package/dist/routes/conversations.js.map +1 -1
  114. package/dist/routes/deployments.d.ts +6 -0
  115. package/dist/routes/deployments.d.ts.map +1 -1
  116. package/dist/routes/deployments.js +49 -5
  117. package/dist/routes/deployments.js.map +1 -1
  118. package/dist/routes/env.d.ts.map +1 -1
  119. package/dist/routes/env.js +1 -0
  120. package/dist/routes/env.js.map +1 -1
  121. package/dist/routes/eval-comparison.d.ts +4 -2
  122. package/dist/routes/eval-comparison.d.ts.map +1 -1
  123. package/dist/routes/eval-comparison.js +59 -10
  124. package/dist/routes/eval-comparison.js.map +1 -1
  125. package/dist/routes/eval-runs.d.ts +7 -1
  126. package/dist/routes/eval-runs.d.ts.map +1 -1
  127. package/dist/routes/eval-runs.js +34 -3
  128. package/dist/routes/eval-runs.js.map +1 -1
  129. package/dist/routes/eval-versions.d.ts +25 -0
  130. package/dist/routes/eval-versions.d.ts.map +1 -0
  131. package/dist/routes/eval-versions.js +66 -0
  132. package/dist/routes/eval-versions.js.map +1 -0
  133. package/dist/routes/flows.d.ts +14 -7
  134. package/dist/routes/flows.d.ts.map +1 -1
  135. package/dist/routes/flows.js +14 -8
  136. package/dist/routes/flows.js.map +1 -1
  137. package/dist/routes/gate-policies.d.ts +19 -0
  138. package/dist/routes/gate-policies.d.ts.map +1 -0
  139. package/dist/routes/gate-policies.js +191 -0
  140. package/dist/routes/gate-policies.js.map +1 -0
  141. package/dist/routes/gate-policy-spec.d.ts +17 -0
  142. package/dist/routes/gate-policy-spec.d.ts.map +1 -0
  143. package/dist/routes/gate-policy-spec.js +192 -0
  144. package/dist/routes/gate-policy-spec.js.map +1 -0
  145. package/dist/routes/gate-policy-wire.d.ts +3 -0
  146. package/dist/routes/gate-policy-wire.d.ts.map +1 -0
  147. package/dist/routes/gate-policy-wire.js +18 -0
  148. package/dist/routes/gate-policy-wire.js.map +1 -0
  149. package/dist/routes/guardrails.d.ts.map +1 -1
  150. package/dist/routes/guardrails.js +4 -0
  151. package/dist/routes/guardrails.js.map +1 -1
  152. package/dist/routes/hierarchy-errors.d.ts +21 -0
  153. package/dist/routes/hierarchy-errors.d.ts.map +1 -1
  154. package/dist/routes/hierarchy-errors.js +21 -0
  155. package/dist/routes/hierarchy-errors.js.map +1 -1
  156. package/dist/routes/judged-suites.js +7 -0
  157. package/dist/routes/judged-suites.js.map +1 -1
  158. package/dist/routes/judgments.d.ts +4 -1
  159. package/dist/routes/judgments.d.ts.map +1 -1
  160. package/dist/routes/judgments.js +92 -19
  161. package/dist/routes/judgments.js.map +1 -1
  162. package/dist/routes/live-scope-wire.d.ts +32 -0
  163. package/dist/routes/live-scope-wire.d.ts.map +1 -0
  164. package/dist/routes/live-scope-wire.js +71 -0
  165. package/dist/routes/live-scope-wire.js.map +1 -0
  166. package/dist/routes/policies.d.ts +6 -3
  167. package/dist/routes/policies.d.ts.map +1 -1
  168. package/dist/routes/policies.js +55 -3
  169. package/dist/routes/policies.js.map +1 -1
  170. package/dist/routes/projects.d.ts.map +1 -1
  171. package/dist/routes/projects.js +59 -9
  172. package/dist/routes/projects.js.map +1 -1
  173. package/dist/routes/retention.d.ts.map +1 -1
  174. package/dist/routes/retention.js +18 -2
  175. package/dist/routes/retention.js.map +1 -1
  176. package/dist/routes/reviewers.d.ts +8 -1
  177. package/dist/routes/reviewers.d.ts.map +1 -1
  178. package/dist/routes/reviewers.js +20 -3
  179. package/dist/routes/reviewers.js.map +1 -1
  180. package/dist/routes/runs.d.ts.map +1 -1
  181. package/dist/routes/runs.js +23 -13
  182. package/dist/routes/runs.js.map +1 -1
  183. package/dist/routes/secrets.d.ts.map +1 -1
  184. package/dist/routes/secrets.js +2 -0
  185. package/dist/routes/secrets.js.map +1 -1
  186. package/dist/routes/segments.d.ts +17 -0
  187. package/dist/routes/segments.d.ts.map +1 -0
  188. package/dist/routes/segments.js +68 -0
  189. package/dist/routes/segments.js.map +1 -0
  190. package/dist/routes/teams.d.ts.map +1 -1
  191. package/dist/routes/teams.js +53 -8
  192. package/dist/routes/teams.js.map +1 -1
  193. package/dist/routes/tools.d.ts.map +1 -1
  194. package/dist/routes/tools.js +4 -0
  195. package/dist/routes/tools.js.map +1 -1
  196. package/dist/routes/uuid-param.d.ts +11 -0
  197. package/dist/routes/uuid-param.d.ts.map +1 -0
  198. package/dist/routes/uuid-param.js +19 -0
  199. package/dist/routes/uuid-param.js.map +1 -0
  200. package/dist/tool-binding.d.ts +8 -0
  201. package/dist/tool-binding.d.ts.map +1 -1
  202. package/openapi.json +6484 -2402
  203. package/package.json +21 -21
  204. package/src/agent-binding.ts +21 -2
  205. package/src/agent-pins.ts +3 -1
  206. package/src/app.ts +47 -4
  207. package/src/deploy-versions.ts +12 -15
  208. package/src/derive-agent-version.ts +12 -1
  209. package/src/errors.ts +26 -0
  210. package/src/eval-case-binding.ts +7 -0
  211. package/src/eval-run-binding.ts +31 -3
  212. package/src/eval-run-dispatcher.ts +3 -0
  213. package/src/flow-binding.ts +9 -0
  214. package/src/flow-pins.ts +49 -9
  215. package/src/gate-policy-binding.ts +171 -0
  216. package/src/gate.ts +467 -0
  217. package/src/guardrail-binding.ts +9 -0
  218. package/src/handler-binding.ts +17 -2
  219. package/src/index.ts +47 -1
  220. package/src/judged-dispatcher.ts +100 -9
  221. package/src/judgment-binding.ts +62 -0
  222. package/src/live-version-binding.ts +237 -0
  223. package/src/middleware/authorize.ts +18 -2
  224. package/src/middleware/project-ref.ts +88 -0
  225. package/src/openapi/generate.ts +5 -0
  226. package/src/openapi/operations.ts +664 -27
  227. package/src/openapi/schemas.ts +1175 -33
  228. package/src/publish-refused.ts +31 -0
  229. package/src/registry-read-only.ts +43 -0
  230. package/src/retention-binding.ts +30 -0
  231. package/src/routes/agent-releases.ts +581 -0
  232. package/src/routes/agents.ts +53 -3
  233. package/src/routes/approvals.ts +36 -8
  234. package/src/routes/audit.ts +10 -0
  235. package/src/routes/auth.ts +1 -1
  236. package/src/routes/blocks.ts +39 -14
  237. package/src/routes/conversations.ts +31 -3
  238. package/src/routes/deployments.ts +75 -5
  239. package/src/routes/env.ts +1 -0
  240. package/src/routes/eval-comparison.ts +59 -11
  241. package/src/routes/eval-runs.ts +46 -3
  242. package/src/routes/eval-versions.ts +110 -0
  243. package/src/routes/flows.ts +34 -11
  244. package/src/routes/gate-policies.ts +226 -0
  245. package/src/routes/gate-policy-spec.ts +229 -0
  246. package/src/routes/gate-policy-wire.ts +20 -0
  247. package/src/routes/guardrails.ts +7 -0
  248. package/src/routes/hierarchy-errors.ts +23 -0
  249. package/src/routes/judged-suites.ts +5 -0
  250. package/src/routes/judgments.ts +107 -23
  251. package/src/routes/live-scope-wire.ts +90 -0
  252. package/src/routes/policies.ts +61 -3
  253. package/src/routes/projects.ts +72 -9
  254. package/src/routes/retention.ts +21 -2
  255. package/src/routes/reviewers.ts +23 -4
  256. package/src/routes/runs.ts +34 -20
  257. package/src/routes/secrets.ts +2 -0
  258. package/src/routes/segments.ts +75 -0
  259. package/src/routes/teams.ts +66 -8
  260. package/src/routes/tools.ts +7 -0
  261. package/src/routes/uuid-param.ts +28 -0
  262. package/src/tool-binding.ts +9 -0
@@ -0,0 +1,18 @@
1
+ import type { AgentRegistryBinding } from './agent-binding.js';
2
+ import type { FlowRegistryBinding } from './flow-binding.js';
3
+ import type { GuardrailRegistryBinding } from './guardrail-binding.js';
4
+ import type { ToolRegistryBinding } from './tool-binding.js';
5
+ /**
6
+ * A deploy's primitive came back from its registry with an outcome other
7
+ * than `ok` or `already-registered` (e.g. `project-not-found`): the deploy
8
+ * stops, what it published is rolled back, and the route answers with
9
+ * that outcome's own status and code (T205). Before, such an outcome was
10
+ * skipped, and the deployment was recorded without that primitive.
11
+ */
12
+ export declare class PublishRefused extends Error {
13
+ readonly primitive: 'tool' | 'guardrail' | 'agent' | 'flow';
14
+ readonly id: string;
15
+ readonly code: Exclude<Awaited<ReturnType<ToolRegistryBinding['publish']>>['kind'] | Awaited<ReturnType<GuardrailRegistryBinding['register']>>['kind'] | Awaited<ReturnType<AgentRegistryBinding['publish']>>['kind'] | Awaited<ReturnType<FlowRegistryBinding['publish']>>['kind'], 'ok' | 'already-registered'>;
16
+ constructor(primitive: 'tool' | 'guardrail' | 'agent' | 'flow', id: string, code: Exclude<Awaited<ReturnType<ToolRegistryBinding['publish']>>['kind'] | Awaited<ReturnType<GuardrailRegistryBinding['register']>>['kind'] | Awaited<ReturnType<AgentRegistryBinding['publish']>>['kind'] | Awaited<ReturnType<FlowRegistryBinding['publish']>>['kind'], 'ok' | 'already-registered'>);
17
+ }
18
+ //# sourceMappingURL=publish-refused.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-refused.d.ts","sourceRoot":"","sources":["../src/publish-refused.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAClB,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAC3D,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GACjE,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7D,IAAI,GAAG,oBAAoB,CAC5B;gBARQ,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,EAClD,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAClB,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAC3D,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GACjE,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAC5D,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC7D,IAAI,GAAG,oBAAoB,CAC5B;CAKJ"}
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * A deploy's primitive came back from its registry with an outcome other
5
+ * than `ok` or `already-registered` (e.g. `project-not-found`): the deploy
6
+ * stops, what it published is rolled back, and the route answers with
7
+ * that outcome's own status and code (T205). Before, such an outcome was
8
+ * skipped, and the deployment was recorded without that primitive.
9
+ */
10
+ export class PublishRefused extends Error {
11
+ primitive;
12
+ id;
13
+ code;
14
+ constructor(primitive, id, code) {
15
+ super(`The ${primitive} ${id} wasn't published: ${code}`);
16
+ this.primitive = primitive;
17
+ this.id = id;
18
+ this.code = code;
19
+ this.name = 'PublishRefused';
20
+ }
21
+ }
22
+ //# sourceMappingURL=publish-refused.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-refused.js","sourceRoot":"","sources":["../src/publish-refused.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAOjC;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IACA;IACA;IAHX,YACW,SAAkD,EAClD,EAAU,EACV,IAMR;QAED,KAAK,CAAC,OAAO,SAAS,IAAI,EAAE,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAVjD,cAAS,GAAT,SAAS,CAAyC;QAClD,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAMZ;QAGD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import type { Context, MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from './types.js';
3
+ /**
4
+ * A registry that takes no writes: it serves its definitions from
5
+ * somewhere else (under `kindgi dev`, the pack's files). A binding that
6
+ * sets it has every write refused before the binding is called:
7
+ * publish, unregister and reinstate (and, for agents, deriving a
8
+ * version), and a deploy that would publish into it. The refusal is
9
+ * `409 registry-read-only` with `reason` as its message.
10
+ */
11
+ export interface RegistryReadOnly {
12
+ /** Why, and what to do instead, in plain words: the refusal's message. */
13
+ readonly reason: string;
14
+ }
15
+ /** The refusal of a write to a read-only registry. */
16
+ export declare function refuseReadOnly(c: Context<AppEnv>, readOnly: RegistryReadOnly): Response & import("hono").TypedResponse<{
17
+ readonly error: {
18
+ readonly code: string;
19
+ readonly message: string;
20
+ readonly details?: {
21
+ readonly [x: string]: import("hono/utils/types").JSONValue;
22
+ } | undefined;
23
+ readonly requestId: string;
24
+ };
25
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">;
26
+ /**
27
+ * A router's writes (every method but GET and HEAD) are refused while
28
+ * its registry is read-only. Read at request time, so a binding can
29
+ * become writable without a restart.
30
+ */
31
+ export declare function refuseWritesWhenReadOnly(readOnly: () => RegistryReadOnly | undefined): MiddlewareHandler<AppEnv>;
32
+ //# sourceMappingURL=registry-read-only.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-read-only.d.ts","sourceRoot":"","sources":["../src/registry-read-only.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,gBAAgB;;;;;;;;;kEAK5E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,gBAAgB,GAAG,SAAS,GAC3C,iBAAiB,CAAC,MAAM,CAAC,CAM3B"}
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { statusFor, toWireError } from './errors.js';
4
+ /** The refusal of a write to a read-only registry. */
5
+ export function refuseReadOnly(c, readOnly) {
6
+ c.status(statusFor('registry-read-only'));
7
+ return c.json(toWireError({ code: 'registry-read-only', message: readOnly.reason }, c.get('requestId')));
8
+ }
9
+ /**
10
+ * A router's writes (every method but GET and HEAD) are refused while
11
+ * its registry is read-only. Read at request time, so a binding can
12
+ * become writable without a restart.
13
+ */
14
+ export function refuseWritesWhenReadOnly(readOnly) {
15
+ return async (c, next) => {
16
+ const marker = readOnly();
17
+ if (marker === undefined || c.req.method === 'GET' || c.req.method === 'HEAD')
18
+ return next();
19
+ return refuseReadOnly(c, marker);
20
+ };
21
+ }
22
+ //# sourceMappingURL=registry-read-only.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-read-only.js","sourceRoot":"","sources":["../src/registry-read-only.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgBrD,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,CAAkB,EAAE,QAA0B;IAC3E,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAU,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,IAAI,CACX,WAAW,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAC1F,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA4C;IAE5C,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1B,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,EAAE,CAAC;QAC7F,OAAO,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
@@ -29,9 +29,12 @@ export interface RetentionBinding {
29
29
  export interface RetentionScheduledInput {
30
30
  readonly tenantId: TenantId;
31
31
  readonly domain?: RetentionDomain;
32
+ /** Rows per domain at most: each domain is read up to `limit`. */
32
33
  readonly limit: number;
33
34
  readonly pastGraceOnly?: boolean;
34
35
  readonly now?: Date;
36
+ /** Where a previous page stopped (its `nextCursor`, the runtime's own encoding). */
37
+ readonly cursor?: string;
35
38
  }
36
39
  export interface RetentionScheduledItem {
37
40
  readonly domain: RetentionDomain;
@@ -49,6 +52,30 @@ export interface RetentionScheduledPage {
49
52
  readonly domainsMissingAdapter: readonly RetentionDomain[];
50
53
  /** Domains that have an adapter but no matching policy — tombstones sit forever. */
51
54
  readonly unpolicedDomains: readonly RetentionDomain[];
55
+ /** Domains more than one retention policy covers (see `RetentionPolicyConflict`). */
56
+ readonly conflicts?: readonly RetentionPolicyConflict[];
57
+ /**
58
+ * More rows are scheduled than this page holds: some domain stopped at
59
+ * `limit`. A runtime that doesn't say leaves it out, and the route then
60
+ * reports `true` when some domain's rows fill `limit` (there may be more).
61
+ */
62
+ readonly hasMore?: boolean;
63
+ /** Pass as `cursor` to continue where this page stopped. Absent: nothing more, or no way to continue. */
64
+ readonly nextCursor?: string;
65
+ }
66
+ /**
67
+ * A domain more than one retention policy covers. Publishing refuses a
68
+ * second policy for a domain (`409 policy-scope-taken`), so only policies
69
+ * stored before that rule can do this. The one whose latest version is
70
+ * highest applies, and on equal versions the lower policy id; unregister
71
+ * the others.
72
+ */
73
+ export interface RetentionPolicyConflict {
74
+ readonly domain: RetentionDomain;
75
+ /** Every policy id that covers the domain, sorted. */
76
+ readonly policyIds: readonly string[];
77
+ /** The one of them that applies. */
78
+ readonly appliedPolicyId: string;
52
79
  }
53
80
  export interface RetentionSweepInput {
54
81
  readonly tenantId: TenantId;
@@ -65,5 +92,7 @@ export interface RetentionSweepResult {
65
92
  readonly missingAdapter?: true;
66
93
  }[];
67
94
  readonly totalPurged: number;
95
+ /** Domains more than one retention policy covers (see `RetentionPolicyConflict`). */
96
+ readonly conflicts?: readonly RetentionPolicyConflict[];
68
97
  }
69
98
  //# sourceMappingURL=retention-binding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retention-binding.d.ts","sourceRoot":"","sources":["../src/retention-binding.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE3E;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACjD,wFAAwF;IACxF,QAAQ,CAAC,qBAAqB,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3D,oFAAoF;IACpF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS;QAC3B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;QACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;KAChC,EAAE,CAAC;IACJ,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
1
+ {"version":3,"file":"retention-binding.d.ts","sourceRoot":"","sources":["../src/retention-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { Hono } from 'hono';
2
+ import type { LiveScope } from '@kindgi/types';
3
+ import type { ProjectBinding } from '@kindgi/platform';
4
+ import type { AgentRegistryBinding } from '../agent-binding.js';
5
+ import type { EvalRunBinding } from '../eval-run-binding.js';
6
+ import type { AgentReleaseBindings, Promotion } from '../live-version-binding.js';
7
+ import type { AppEnv } from '../types.js';
8
+ /** The routes that change what's live: authorized as `promote` on the agent, not `admin`. */
9
+ export declare function isPromotionWrite(method: string, path: string): boolean;
10
+ /** `POST …/promotions/check` changes nothing: `read` on the agent. */
11
+ export declare function isPromotionCheck(method: string, path: string): boolean;
12
+ /** What the gate reads besides the releases: comparisons, and a project's org. */
13
+ export interface AgentReleaseGateDeps {
14
+ readonly evalRuns?: EvalRunBinding;
15
+ readonly projects?: ProjectBinding;
16
+ }
17
+ /**
18
+ * Live versions of an agent per scope, and the promotions that set them
19
+ * (evals step 4):
20
+ * GET /:agentId/live the version a run would use for a project and segment path
21
+ * GET /:agentId/live-versions every pin
22
+ * POST /:agentId/promotions make a version live for a scope, through its gate
23
+ * (201 promoted, 202 waiting for approval, 422 gate-failed)
24
+ * POST /:agentId/promotions/check what the gate would say, writing nothing
25
+ * GET /:agentId/gate-policy the gate policy that applies to a scope
26
+ * GET /:agentId/promotions[/:id] the history
27
+ * POST /:agentId/live/rollback back to the scope's previous live version
28
+ * POST /:agentId/live/unpin remove the scope's pin (it falls back to the scope above)
29
+ */
30
+ export declare function mountAgentReleaseRoutes(r: Hono<AppEnv>, registry: AgentRegistryBinding, releases: AgentReleaseBindings, deps?: AgentReleaseGateDeps): void;
31
+ /** `?scopeKind=tenant|org|project|segment&scopeId=…&segment=key:value` for the history filter. */
32
+ export declare function scopeFromQuery(query: (name: string) => string | undefined, segmentValues: readonly string[]): {
33
+ kind: 'ok';
34
+ scope?: LiveScope;
35
+ } | {
36
+ kind: 'err';
37
+ message: string;
38
+ };
39
+ export declare function serializePromotion(p: Promotion): Record<string, unknown>;
40
+ //# sourceMappingURL=agent-releases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-releases.d.ts","sourceRoot":"","sources":["../../src/routes/agent-releases.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,KAAK,EAAU,SAAS,EAA6C,MAAM,eAAe,CAAC;AAElG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAItE,OAAO,KAAK,EACV,oBAAoB,EAEpB,SAAS,EAEV,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ1C,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;CACpC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EACf,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,GAAE,oBAAyB,GAC9B,IAAI,CAkRN;AAgMD,kGAAkG;AAClG,wBAAgB,cAAc,CAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC3C,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BtE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBxE"}