@kindgi/api 0.1.3 → 0.1.4-rc.1

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 (222) hide show
  1. package/dist/agent-binding.d.ts +26 -4
  2. package/dist/agent-binding.d.ts.map +1 -1
  3. package/dist/agent-pins.d.ts +48 -0
  4. package/dist/agent-pins.d.ts.map +1 -0
  5. package/dist/agent-pins.js +102 -0
  6. package/dist/agent-pins.js.map +1 -0
  7. package/dist/app.d.ts +22 -0
  8. package/dist/app.d.ts.map +1 -1
  9. package/dist/app.js +27 -3
  10. package/dist/app.js.map +1 -1
  11. package/dist/block-binding.d.ts +132 -0
  12. package/dist/block-binding.d.ts.map +1 -0
  13. package/dist/block-binding.js +4 -0
  14. package/dist/block-binding.js.map +1 -0
  15. package/dist/block-pins.d.ts +22 -0
  16. package/dist/block-pins.d.ts.map +1 -0
  17. package/dist/block-pins.js +112 -0
  18. package/dist/block-pins.js.map +1 -0
  19. package/dist/cost-binding.d.ts +20 -1
  20. package/dist/cost-binding.d.ts.map +1 -1
  21. package/dist/cost-binding.js +4 -0
  22. package/dist/cost-binding.js.map +1 -1
  23. package/dist/deploy-versions.d.ts +60 -0
  24. package/dist/deploy-versions.d.ts.map +1 -0
  25. package/dist/deploy-versions.js +91 -0
  26. package/dist/deploy-versions.js.map +1 -0
  27. package/dist/deployment-binding.d.ts +24 -3
  28. package/dist/deployment-binding.d.ts.map +1 -1
  29. package/dist/derive-agent-version.d.ts +77 -0
  30. package/dist/derive-agent-version.d.ts.map +1 -0
  31. package/dist/derive-agent-version.js +149 -0
  32. package/dist/derive-agent-version.js.map +1 -0
  33. package/dist/errors.d.ts.map +1 -1
  34. package/dist/errors.js +18 -0
  35. package/dist/errors.js.map +1 -1
  36. package/dist/eval-case-binding.d.ts +65 -0
  37. package/dist/eval-case-binding.d.ts.map +1 -0
  38. package/dist/eval-case-binding.js +4 -0
  39. package/dist/eval-case-binding.js.map +1 -0
  40. package/dist/eval-run-binding.d.ts +37 -0
  41. package/dist/eval-run-binding.d.ts.map +1 -1
  42. package/dist/eval-run-binding.js.map +1 -1
  43. package/dist/eval-run-dispatcher.d.ts +41 -3
  44. package/dist/eval-run-dispatcher.d.ts.map +1 -1
  45. package/dist/eval-run-dispatcher.js +21 -15
  46. package/dist/eval-run-dispatcher.js.map +1 -1
  47. package/dist/eval-suite-binding.d.ts +1 -1
  48. package/dist/eval-suite-binding.d.ts.map +1 -1
  49. package/dist/eval-suite-binding.js +2 -0
  50. package/dist/eval-suite-binding.js.map +1 -1
  51. package/dist/flow-binding.d.ts +18 -4
  52. package/dist/flow-binding.d.ts.map +1 -1
  53. package/dist/flow-pins.d.ts +36 -0
  54. package/dist/flow-pins.d.ts.map +1 -0
  55. package/dist/flow-pins.js +81 -0
  56. package/dist/flow-pins.js.map +1 -0
  57. package/dist/guardrail-binding.d.ts +8 -0
  58. package/dist/guardrail-binding.d.ts.map +1 -1
  59. package/dist/handler-binding.d.ts +3 -0
  60. package/dist/handler-binding.d.ts.map +1 -1
  61. package/dist/index.d.ts +18 -6
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +8 -2
  64. package/dist/index.js.map +1 -1
  65. package/dist/judged-dispatcher.d.ts +138 -0
  66. package/dist/judged-dispatcher.d.ts.map +1 -0
  67. package/dist/judged-dispatcher.js +308 -0
  68. package/dist/judged-dispatcher.js.map +1 -0
  69. package/dist/judged-items.d.ts +86 -0
  70. package/dist/judged-items.d.ts.map +1 -0
  71. package/dist/judged-items.js +184 -0
  72. package/dist/judged-items.js.map +1 -0
  73. package/dist/judgment-binding.d.ts +316 -0
  74. package/dist/judgment-binding.d.ts.map +1 -0
  75. package/dist/judgment-binding.js +19 -0
  76. package/dist/judgment-binding.js.map +1 -0
  77. package/dist/openapi/generate.d.ts.map +1 -1
  78. package/dist/openapi/generate.js +4 -1
  79. package/dist/openapi/generate.js.map +1 -1
  80. package/dist/openapi/operations.d.ts.map +1 -1
  81. package/dist/openapi/operations.js +482 -13
  82. package/dist/openapi/operations.js.map +1 -1
  83. package/dist/openapi/schemas.d.ts +46 -0
  84. package/dist/openapi/schemas.d.ts.map +1 -1
  85. package/dist/openapi/schemas.js +1350 -175
  86. package/dist/openapi/schemas.js.map +1 -1
  87. package/dist/provider-binding.d.ts +12 -7
  88. package/dist/provider-binding.d.ts.map +1 -1
  89. package/dist/registry-read-only.d.ts +32 -0
  90. package/dist/registry-read-only.d.ts.map +1 -0
  91. package/dist/registry-read-only.js +22 -0
  92. package/dist/registry-read-only.js.map +1 -0
  93. package/dist/routes/agents.d.ts +9 -1
  94. package/dist/routes/agents.d.ts.map +1 -1
  95. package/dist/routes/agents.js +181 -11
  96. package/dist/routes/agents.js.map +1 -1
  97. package/dist/routes/blocks.d.ts +19 -0
  98. package/dist/routes/blocks.d.ts.map +1 -0
  99. package/dist/routes/blocks.js +306 -0
  100. package/dist/routes/blocks.js.map +1 -0
  101. package/dist/routes/cost.d.ts.map +1 -1
  102. package/dist/routes/cost.js +47 -2
  103. package/dist/routes/cost.js.map +1 -1
  104. package/dist/routes/deployments.d.ts +3 -0
  105. package/dist/routes/deployments.d.ts.map +1 -1
  106. package/dist/routes/deployments.js +224 -55
  107. package/dist/routes/deployments.js.map +1 -1
  108. package/dist/routes/eval-comparison.d.ts +15 -0
  109. package/dist/routes/eval-comparison.d.ts.map +1 -0
  110. package/dist/routes/eval-comparison.js +123 -0
  111. package/dist/routes/eval-comparison.js.map +1 -0
  112. package/dist/routes/eval-runs.d.ts +7 -1
  113. package/dist/routes/eval-runs.d.ts.map +1 -1
  114. package/dist/routes/eval-runs.js +42 -3
  115. package/dist/routes/eval-runs.js.map +1 -1
  116. package/dist/routes/eval-versions.d.ts +25 -0
  117. package/dist/routes/eval-versions.d.ts.map +1 -0
  118. package/dist/routes/eval-versions.js +66 -0
  119. package/dist/routes/eval-versions.js.map +1 -0
  120. package/dist/routes/flows.d.ts +13 -1
  121. package/dist/routes/flows.d.ts.map +1 -1
  122. package/dist/routes/flows.js +48 -3
  123. package/dist/routes/flows.js.map +1 -1
  124. package/dist/routes/guardrails.d.ts.map +1 -1
  125. package/dist/routes/guardrails.js +4 -0
  126. package/dist/routes/guardrails.js.map +1 -1
  127. package/dist/routes/hierarchy-errors.d.ts +45 -0
  128. package/dist/routes/hierarchy-errors.d.ts.map +1 -0
  129. package/dist/routes/hierarchy-errors.js +47 -0
  130. package/dist/routes/hierarchy-errors.js.map +1 -0
  131. package/dist/routes/judged-suites.d.ts +20 -0
  132. package/dist/routes/judged-suites.d.ts.map +1 -0
  133. package/dist/routes/judged-suites.js +272 -0
  134. package/dist/routes/judged-suites.js.map +1 -0
  135. package/dist/routes/judgment-context.d.ts +22 -0
  136. package/dist/routes/judgment-context.d.ts.map +1 -0
  137. package/dist/routes/judgment-context.js +88 -0
  138. package/dist/routes/judgment-context.js.map +1 -0
  139. package/dist/routes/judgment-flow-context.d.ts +32 -0
  140. package/dist/routes/judgment-flow-context.d.ts.map +1 -0
  141. package/dist/routes/judgment-flow-context.js +195 -0
  142. package/dist/routes/judgment-flow-context.js.map +1 -0
  143. package/dist/routes/judgments.d.ts +41 -0
  144. package/dist/routes/judgments.d.ts.map +1 -0
  145. package/dist/routes/judgments.js +566 -0
  146. package/dist/routes/judgments.js.map +1 -0
  147. package/dist/routes/orgs.d.ts +5 -2
  148. package/dist/routes/orgs.d.ts.map +1 -1
  149. package/dist/routes/orgs.js +38 -22
  150. package/dist/routes/orgs.js.map +1 -1
  151. package/dist/routes/policies.d.ts.map +1 -1
  152. package/dist/routes/policies.js +12 -1
  153. package/dist/routes/policies.js.map +1 -1
  154. package/dist/routes/projects.d.ts +10 -2
  155. package/dist/routes/projects.d.ts.map +1 -1
  156. package/dist/routes/projects.js +94 -80
  157. package/dist/routes/projects.js.map +1 -1
  158. package/dist/routes/providers.d.ts.map +1 -1
  159. package/dist/routes/providers.js +6 -1
  160. package/dist/routes/providers.js.map +1 -1
  161. package/dist/routes/runs.js +25 -3
  162. package/dist/routes/runs.js.map +1 -1
  163. package/dist/routes/teams.d.ts +6 -2
  164. package/dist/routes/teams.d.ts.map +1 -1
  165. package/dist/routes/teams.js +83 -73
  166. package/dist/routes/teams.js.map +1 -1
  167. package/dist/routes/tools.d.ts.map +1 -1
  168. package/dist/routes/tools.js +4 -0
  169. package/dist/routes/tools.js.map +1 -1
  170. package/dist/tool-binding.d.ts +8 -0
  171. package/dist/tool-binding.d.ts.map +1 -1
  172. package/openapi.json +14253 -10099
  173. package/package.json +21 -21
  174. package/src/agent-binding.ts +28 -4
  175. package/src/agent-pins.ts +147 -0
  176. package/src/app.ts +81 -3
  177. package/src/block-binding.ts +137 -0
  178. package/src/block-pins.ts +148 -0
  179. package/src/cost-binding.ts +21 -1
  180. package/src/deploy-versions.ts +157 -0
  181. package/src/deployment-binding.ts +27 -3
  182. package/src/derive-agent-version.ts +217 -0
  183. package/src/errors.ts +18 -0
  184. package/src/eval-case-binding.ts +71 -0
  185. package/src/eval-run-binding.ts +40 -0
  186. package/src/eval-run-dispatcher.ts +60 -16
  187. package/src/eval-suite-binding.ts +2 -0
  188. package/src/flow-binding.ts +20 -4
  189. package/src/flow-pins.ts +113 -0
  190. package/src/guardrail-binding.ts +9 -0
  191. package/src/handler-binding.ts +3 -0
  192. package/src/index.ts +86 -2
  193. package/src/judged-dispatcher.ts +530 -0
  194. package/src/judged-items.ts +263 -0
  195. package/src/judgment-binding.ts +349 -0
  196. package/src/openapi/generate.ts +7 -1
  197. package/src/openapi/operations.ts +579 -13
  198. package/src/openapi/schemas.ts +1408 -128
  199. package/src/provider-binding.ts +12 -7
  200. package/src/registry-read-only.ts +43 -0
  201. package/src/routes/agents.ts +252 -19
  202. package/src/routes/blocks.ts +387 -0
  203. package/src/routes/cost.ts +55 -1
  204. package/src/routes/deployments.ts +291 -56
  205. package/src/routes/eval-comparison.ts +135 -0
  206. package/src/routes/eval-runs.ts +57 -3
  207. package/src/routes/eval-versions.ts +110 -0
  208. package/src/routes/flows.ts +70 -5
  209. package/src/routes/guardrails.ts +7 -0
  210. package/src/routes/hierarchy-errors.ts +60 -0
  211. package/src/routes/judged-suites.ts +363 -0
  212. package/src/routes/judgment-context.ts +128 -0
  213. package/src/routes/judgment-flow-context.ts +245 -0
  214. package/src/routes/judgments.ts +743 -0
  215. package/src/routes/orgs.ts +44 -27
  216. package/src/routes/policies.ts +19 -0
  217. package/src/routes/projects.ts +118 -96
  218. package/src/routes/providers.ts +5 -0
  219. package/src/routes/runs.ts +29 -3
  220. package/src/routes/teams.ts +104 -90
  221. package/src/routes/tools.ts +7 -0
  222. package/src/tool-binding.ts +9 -0
@@ -0,0 +1,88 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { RUN_RETRIEVALS_NODE, SESSION_GATE_RECORD, readGateDecision, } from '@kindgi/agents';
4
+ /** The most messages of conversation history a judged turn keeps. */
5
+ export const MAX_JUDGED_HISTORY = 200;
6
+ /** How many messages are read to find a turn's history. */
7
+ const HISTORY_READ_LIMIT = 1000;
8
+ function obj(value) {
9
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
10
+ ? value
11
+ : undefined;
12
+ }
13
+ /** The sequence of the first message the turn appended (its user message). */
14
+ function firstAppendedSequence(output) {
15
+ const appended = obj(output)?.appended;
16
+ if (!Array.isArray(appended))
17
+ return undefined;
18
+ const sequences = appended
19
+ .map((m) => obj(m)?.sequence)
20
+ .filter((s) => typeof s === 'number');
21
+ return sequences.length > 0 ? Math.min(...sequences) : undefined;
22
+ }
23
+ async function readHistory(conversations, tenantId, conversationId, before) {
24
+ const read = await conversations.readMessages({
25
+ tenantId,
26
+ conversationId: conversationId,
27
+ limit: HISTORY_READ_LIMIT,
28
+ });
29
+ if (read.kind === 'err')
30
+ return {};
31
+ const earlier = read.value.filter((m) => m.sequence < before);
32
+ const kept = earlier.slice(-MAX_JUDGED_HISTORY);
33
+ return {
34
+ history: kept,
35
+ ...(kept.length < earlier.length && { historyTruncated: true }),
36
+ };
37
+ }
38
+ /** What the turn's journal says it retrieved, and how its session approval was decided. */
39
+ async function readJournalParts(runBinding, tenantId, runId) {
40
+ const journal = await runBinding.readJournal(tenantId, runId);
41
+ if (journal.kind === 'err')
42
+ return {};
43
+ const entries = journal.value;
44
+ const step = entries.find((e) => e.kind === 'step.completed' &&
45
+ typeof e.nodeId === 'string' &&
46
+ (e.nodeId === RUN_RETRIEVALS_NODE || e.nodeId.endsWith(`/${RUN_RETRIEVALS_NODE}`)));
47
+ const retrieved = obj(obj(step?.payload)?.output)?.retrieved;
48
+ const sessionApproval = sessionApprovalOf(entries);
49
+ return {
50
+ ...(retrieved !== undefined && { retrieved }),
51
+ ...(sessionApproval !== undefined && { sessionApproval }),
52
+ };
53
+ }
54
+ /** The decision that resolved the turn's session approval gate, if it waited on one. */
55
+ function sessionApprovalOf(entries) {
56
+ const gate = entries.find((e) => e.kind === 'value.recorded' && obj(e.payload)?.key === SESSION_GATE_RECORD);
57
+ const tokenId = obj(obj(gate?.payload)?.value)?.waitTokenId;
58
+ if (typeof tokenId !== 'string')
59
+ return undefined;
60
+ const resumed = entries.find((e) => e.kind === 'wait.resumed' && obj(e.payload)?.tokenId === tokenId);
61
+ if (resumed === undefined)
62
+ return undefined;
63
+ const decision = readGateDecision(obj(resumed.payload)?.value);
64
+ return {
65
+ approved: decision.approved,
66
+ ...(!decision.approved &&
67
+ decision.rationale !== undefined && { rationale: decision.rationale }),
68
+ };
69
+ }
70
+ /**
71
+ * What a judged agent turn read besides its input, so it can be replayed
72
+ * faithfully later: the conversation before the turn, what its
73
+ * retrievals returned, and the decision at its session approval gate. Best effort and read-only: a part that can't be
74
+ * read is left out (the judgment never fails over it). `undefined` for
75
+ * a flow run, or when nothing could be read.
76
+ */
77
+ export async function captureTurnContext(input) {
78
+ const before = firstAppendedSequence(input.output);
79
+ const [history, journal] = await Promise.all([
80
+ input.conversations !== undefined && input.conversationId !== undefined && before !== undefined
81
+ ? readHistory(input.conversations, input.tenantId, input.conversationId, before).catch(() => ({}))
82
+ : Promise.resolve({}),
83
+ readJournalParts(input.runBinding, input.tenantId, input.runId).catch(() => ({})),
84
+ ]);
85
+ const context = { ...history, ...journal };
86
+ return Object.keys(context).length > 0 ? context : undefined;
87
+ }
88
+ //# sourceMappingURL=judgment-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgment-context.js","sourceRoot":"","sources":["../../src/routes/judgment-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { RunBinding } from '@kindgi/runtime';
2
+ import type { TenantId } from '@kindgi/types';
3
+ import type { FlowRegistryBinding } from '../flow-binding.js';
4
+ import type { JudgedRunContext } from '../judgment-binding.js';
5
+ /** The most tool calls a judged flow run keeps. */
6
+ export declare const MAX_JUDGED_FLOW_CALLS = 500;
7
+ /**
8
+ * The tool calls an agent turn made, with their results, from its
9
+ * output's `appended` messages: each agent message's `toolCalls`, paired
10
+ * with the `tool` message that answered it.
11
+ */
12
+ export declare function turnToolCalls(output: unknown): readonly {
13
+ readonly toolId: string;
14
+ readonly arguments: unknown;
15
+ readonly result: unknown;
16
+ }[];
17
+ /**
18
+ * What a judged flow run did (`context.flow`): its tool calls with their
19
+ * results, and its agent steps' turns. `undefined` when nothing could be
20
+ * read.
21
+ */
22
+ export declare function captureFlowContext(input: {
23
+ readonly tenantId: TenantId;
24
+ readonly run: {
25
+ readonly runId: string;
26
+ readonly flowId: string;
27
+ readonly flowVersion: string;
28
+ };
29
+ readonly runBinding: RunBinding;
30
+ readonly flows: FlowRegistryBinding | undefined;
31
+ }): Promise<JudgedRunContext | undefined>;
32
+ //# sourceMappingURL=judgment-flow-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgment-flow-context.d.ts","sourceRoot":"","sources":["../../src/routes/judgment-flow-context.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAmB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAGV,gBAAgB,EAEjB,MAAM,wBAAwB,CAAC;AAEhC,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AA4BzC;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,GACd,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAAE,CAuB/F;AAmID;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAChG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACjD,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAmBxC"}
@@ -0,0 +1,195 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { isFanoutNode, isLoopNode } from '@kindgi/flow';
4
+ /** The most tool calls a judged flow run keeps. */
5
+ export const MAX_JUDGED_FLOW_CALLS = 500;
6
+ /** How deep into sub-flows the capture goes. */
7
+ const MAX_FLOW_DEPTH = 3;
8
+ /** The most child runs read per run. */
9
+ const MAX_CHILDREN = 100;
10
+ function obj(value) {
11
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
12
+ ? value
13
+ : undefined;
14
+ }
15
+ /** The tool each tool node runs, by node id: in loop bodies and fanout branches too. */
16
+ function toolNodes(flow) {
17
+ const tools = new Map();
18
+ const walk = (nodes) => {
19
+ for (const node of nodes) {
20
+ if (node.kind === 'tool')
21
+ tools.set(node.id, node.ref);
22
+ else if (isLoopNode(node))
23
+ walk(node.body.nodes);
24
+ else if (isFanoutNode(node)) {
25
+ for (const b of node.branches)
26
+ tools.set(b.handler, b.handler);
27
+ }
28
+ }
29
+ };
30
+ if (flow !== null)
31
+ walk(flow.nodes);
32
+ return tools;
33
+ }
34
+ /**
35
+ * The tool calls an agent turn made, with their results, from its
36
+ * output's `appended` messages: each agent message's `toolCalls`, paired
37
+ * with the `tool` message that answered it.
38
+ */
39
+ export function turnToolCalls(output) {
40
+ const appended = obj(output)?.appended;
41
+ if (!Array.isArray(appended))
42
+ return [];
43
+ const args = new Map();
44
+ for (const m of appended) {
45
+ const calls = obj(obj(m)?.content)?.toolCalls;
46
+ if (obj(m)?.role !== 'agent' || !Array.isArray(calls))
47
+ continue;
48
+ for (const call of calls) {
49
+ const id = obj(call)?.id;
50
+ if (typeof id === 'string')
51
+ args.set(id, obj(call)?.arguments);
52
+ }
53
+ }
54
+ return appended.flatMap((m) => {
55
+ const toolCall = obj(obj(m)?.toolCall);
56
+ const toolId = toolCall?.toolId;
57
+ const invocationId = toolCall?.invocationId;
58
+ if (obj(m)?.role !== 'tool' || typeof toolId !== 'string' || typeof invocationId !== 'string') {
59
+ return [];
60
+ }
61
+ return args.has(invocationId)
62
+ ? [{ toolId, arguments: args.get(invocationId), result: obj(m)?.content }]
63
+ : [];
64
+ });
65
+ }
66
+ /** Where a step sits: its loop iteration, when it's in a loop body. */
67
+ function scopeOf(loopContext) {
68
+ return loopContext === undefined || loopContext === null
69
+ ? undefined
70
+ : JSON.stringify(loopContext);
71
+ }
72
+ class Collector {
73
+ calls = [];
74
+ steps = [];
75
+ truncated = false;
76
+ add(call) {
77
+ if (this.calls.length >= MAX_JUDGED_FLOW_CALLS) {
78
+ this.truncated = true;
79
+ return;
80
+ }
81
+ this.calls.push(call);
82
+ }
83
+ }
84
+ /** A flow run's tool nodes' calls: each `step.completed` of a tool node, with its `step.started` input. */
85
+ async function nodeCalls(r, c, run) {
86
+ const [flow, journal] = await Promise.all([
87
+ r.flows?.getVersion({
88
+ tenantId: r.tenantId,
89
+ flowId: run.flowId,
90
+ version: run.flowVersion,
91
+ }) ?? Promise.resolve(null),
92
+ r.runBinding.readJournal(r.tenantId, run.runId),
93
+ ]);
94
+ const tools = toolNodes(flow);
95
+ if (journal.kind === 'err' || tools.size === 0)
96
+ return;
97
+ const inputs = new Map();
98
+ for (const e of journal.value) {
99
+ if (typeof e.nodeId !== 'string' || !tools.has(e.nodeId))
100
+ continue;
101
+ const payload = obj(e.payload) ?? {};
102
+ const scope = scopeOf(payload.loopContext);
103
+ const key = `${e.nodeId}\u0000${scope ?? ''}`;
104
+ if (e.kind === 'step.started')
105
+ inputs.set(key, payload.input);
106
+ if (e.kind === 'step.completed') {
107
+ c.add({
108
+ runId: run.runId,
109
+ nodeId: e.nodeId,
110
+ ...(scope !== undefined && { scope }),
111
+ toolId: tools.get(e.nodeId),
112
+ arguments: inputs.get(key),
113
+ result: payload.output,
114
+ });
115
+ }
116
+ }
117
+ }
118
+ /** An agent step's turn: its calls, and what it retrieved. */
119
+ async function stepTurn(r, c, child) {
120
+ const agent = child.agent;
121
+ if (agent === undefined)
122
+ return;
123
+ const output = child.output ?? (await r.runBinding.getRun(r.tenantId, child.runId))?.output ?? undefined;
124
+ const nodeId = child.parentNodeId ?? undefined;
125
+ const scope = child.parentScope ?? undefined;
126
+ const retrieved = obj(output)?.retrieved;
127
+ c.steps.push({
128
+ runId: child.runId,
129
+ ...(nodeId !== undefined && { nodeId }),
130
+ ...(scope !== undefined && scope !== '' && { scope }),
131
+ agentId: agent.id,
132
+ agentVersion: agent.version,
133
+ ...(retrieved !== undefined && { retrieved }),
134
+ });
135
+ for (const call of turnToolCalls(output)) {
136
+ c.add({
137
+ runId: child.runId,
138
+ ...(nodeId !== undefined && { nodeId }),
139
+ ...(scope !== undefined && scope !== '' && { scope }),
140
+ ...call,
141
+ });
142
+ }
143
+ }
144
+ /** A run's child runs (agent steps' turns, sub-flows); none when they can't be read. */
145
+ async function childrenOf(r, runId) {
146
+ try {
147
+ const page = await r.runBinding.listRuns({
148
+ tenantId: r.tenantId,
149
+ parent: { runId: runId },
150
+ limit: MAX_CHILDREN,
151
+ });
152
+ return page.data;
153
+ }
154
+ catch {
155
+ return [];
156
+ }
157
+ }
158
+ async function collectRun(r, c, run, depth) {
159
+ await nodeCalls(r, c, run).catch(() => undefined);
160
+ for (const child of await childrenOf(r, run.runId)) {
161
+ if (child.agent !== undefined) {
162
+ await stepTurn(r, c, child).catch(() => undefined);
163
+ }
164
+ else if (depth < MAX_FLOW_DEPTH) {
165
+ await collectRun(r, c, {
166
+ runId: child.runId,
167
+ flowId: child.flowId,
168
+ flowVersion: child.flowVersion,
169
+ }, depth + 1);
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * What a judged flow run did (`context.flow`): its tool calls with their
175
+ * results, and its agent steps' turns. `undefined` when nothing could be
176
+ * read.
177
+ */
178
+ export async function captureFlowContext(input) {
179
+ const c = new Collector();
180
+ try {
181
+ await collectRun({ tenantId: input.tenantId, runBinding: input.runBinding, flows: input.flows }, c, input.run, 0);
182
+ }
183
+ catch {
184
+ // Best effort: keep what was read.
185
+ }
186
+ if (c.calls.length === 0 && c.steps.length === 0)
187
+ return undefined;
188
+ const flow = {
189
+ calls: c.calls,
190
+ steps: c.steps,
191
+ ...(c.truncated && { truncated: true }),
192
+ };
193
+ return { flow };
194
+ }
195
+ //# sourceMappingURL=judgment-flow-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgment-flow-context.js","sourceRoot":"","sources":["../../src/routes/judgment-flow-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Hono } from 'hono';
2
+ import type { ConversationBinding } from '@kindgi/agents';
3
+ import type { RunBinding } from '@kindgi/runtime';
4
+ import type { FlowRegistryBinding } from '../flow-binding.js';
5
+ import { type JudgmentRegistryBinding } from '../judgment-binding.js';
6
+ import type { Authorizer } from '../middleware/authorize.js';
7
+ import type { AppEnv } from '../types.js';
8
+ /**
9
+ * Judgments: yes or no, with an optional reason, about one item of a
10
+ * run's output, recorded under a judge class.
11
+ *
12
+ * - `POST /v1/judgments`: judge an item of a finished run.
13
+ * - `GET /v1/judgments`: live judgments, filtered by run, agent version,
14
+ * flow, verdict, class, participant or project scope.
15
+ * - `GET /v1/judgments/:id`: one judgment with the stored copies.
16
+ * - `POST /v1/judgments/:id/unregister`: remove a judgment (soft).
17
+ *
18
+ * Authorization: judging needs `write` on the run's project (a run
19
+ * inherits its permissions from its project). Reading and removing go by
20
+ * the judgment's project (`read` / `write`), since a judgment outlives
21
+ * its run.
22
+ */
23
+ export declare function judgmentsRouter(binding: JudgmentRegistryBinding, runBinding: RunBinding, authorizer?: Authorizer, conversations?: ConversationBinding, flows?: FlowRegistryBinding): Hono<AppEnv>;
24
+ /**
25
+ * Judge classes: the deployment's named classes of judges ("expert",
26
+ * "user", …), each with a weight, scoped to the tenant, a project, or an
27
+ * agent in a project.
28
+ *
29
+ * Managing a tenant-scoped class needs `admin` on the tenant; a project-
30
+ * or agent-scoped class needs `admin` on its project. Listing returns the
31
+ * classes the caller may read.
32
+ */
33
+ export declare function judgeClassesRouter(binding: JudgmentRegistryBinding, authorizer?: Authorizer): Hono<AppEnv>;
34
+ /** RFC 6901: the value at `pointer` in `doc`. "" is the whole document. */
35
+ export declare function resolvePointer(doc: unknown, pointer: string): {
36
+ readonly found: true;
37
+ readonly value: unknown;
38
+ } | {
39
+ readonly found: false;
40
+ };
41
+ //# sourceMappingURL=judgments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgments.d.ts","sourceRoot":"","sources":["../../src/routes/judgments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAQL,KAAK,uBAAuB,EAK7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM1C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,uBAAuB,EAChC,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,UAAU,EACvB,aAAa,CAAC,EAAE,mBAAmB,EACnC,KAAK,CAAC,EAAE,mBAAmB,GAC1B,IAAI,CAAC,MAAM,CAAC,CA8Jd;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,uBAAuB,EAChC,UAAU,CAAC,EAAE,UAAU,GACtB,IAAI,CAAC,MAAM,CAAC,CAoJd;AAkTD,2EAA2E;AAC3E,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,GACd;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAe/E"}