@kindgi/agents 0.1.1 → 0.1.3

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 (96) hide show
  1. package/dist/conversation-binding.d.ts +9 -1
  2. package/dist/conversation-binding.d.ts.map +1 -1
  3. package/dist/define.js +20 -0
  4. package/dist/define.js.map +1 -1
  5. package/dist/guardrails-gate.d.ts +7 -4
  6. package/dist/guardrails-gate.d.ts.map +1 -1
  7. package/dist/guardrails-gate.js +5 -2
  8. package/dist/guardrails-gate.js.map +1 -1
  9. package/dist/handlers/context.d.ts +14 -0
  10. package/dist/handlers/context.d.ts.map +1 -1
  11. package/dist/handlers/dispatch-tools.d.ts.map +1 -1
  12. package/dist/handlers/dispatch-tools.js +57 -60
  13. package/dist/handlers/dispatch-tools.js.map +1 -1
  14. package/dist/handlers/errors.d.ts +11 -1
  15. package/dist/handlers/errors.d.ts.map +1 -1
  16. package/dist/handlers/errors.js.map +1 -1
  17. package/dist/handlers/evaluate-guardrails.d.ts.map +1 -1
  18. package/dist/handlers/evaluate-guardrails.js +34 -1
  19. package/dist/handlers/evaluate-guardrails.js.map +1 -1
  20. package/dist/handlers/gate-decision.d.ts +62 -0
  21. package/dist/handlers/gate-decision.d.ts.map +1 -0
  22. package/dist/handlers/gate-decision.js +55 -0
  23. package/dist/handlers/gate-decision.js.map +1 -0
  24. package/dist/handlers/model-call.d.ts +10 -0
  25. package/dist/handlers/model-call.d.ts.map +1 -1
  26. package/dist/handlers/model-call.js +109 -34
  27. package/dist/handlers/model-call.js.map +1 -1
  28. package/dist/handlers/persist-provenance.d.ts.map +1 -1
  29. package/dist/handlers/persist-provenance.js +3 -1
  30. package/dist/handlers/persist-provenance.js.map +1 -1
  31. package/dist/handlers/persist-user-message.d.ts.map +1 -1
  32. package/dist/handlers/persist-user-message.js +5 -16
  33. package/dist/handlers/persist-user-message.js.map +1 -1
  34. package/dist/handlers/public-types.d.ts +16 -2
  35. package/dist/handlers/public-types.d.ts.map +1 -1
  36. package/dist/handlers/rehydrate.d.ts.map +1 -1
  37. package/dist/handlers/rehydrate.js +85 -0
  38. package/dist/handlers/rehydrate.js.map +1 -1
  39. package/dist/handlers/run-retrievals.d.ts.map +1 -1
  40. package/dist/handlers/run-retrievals.js +2 -19
  41. package/dist/handlers/run-retrievals.js.map +1 -1
  42. package/dist/handlers/setup.d.ts.map +1 -1
  43. package/dist/handlers/setup.js +44 -24
  44. package/dist/handlers/setup.js.map +1 -1
  45. package/dist/handlers/tool-hitl.d.ts +5 -9
  46. package/dist/handlers/tool-hitl.d.ts.map +1 -1
  47. package/dist/handlers/tool-hitl.js +5 -0
  48. package/dist/handlers/tool-hitl.js.map +1 -1
  49. package/dist/handlers/turn-provenance.d.ts +67 -0
  50. package/dist/handlers/turn-provenance.d.ts.map +1 -0
  51. package/dist/handlers/turn-provenance.js +160 -0
  52. package/dist/handlers/turn-provenance.js.map +1 -0
  53. package/dist/index.d.ts +3 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +1 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/invoke.d.ts +15 -2
  58. package/dist/invoke.d.ts.map +1 -1
  59. package/dist/invoke.js +38 -22
  60. package/dist/invoke.js.map +1 -1
  61. package/dist/provenance-emit.d.ts +4 -2
  62. package/dist/provenance-emit.d.ts.map +1 -1
  63. package/dist/provenance-emit.js +4 -2
  64. package/dist/provenance-emit.js.map +1 -1
  65. package/dist/schema.d.ts +17 -0
  66. package/dist/schema.d.ts.map +1 -1
  67. package/dist/schema.js +11 -0
  68. package/dist/schema.js.map +1 -1
  69. package/dist/types.d.ts +15 -1
  70. package/dist/types.d.ts.map +1 -1
  71. package/migrations/0003_hesitant_captain_cross.sql +2 -0
  72. package/migrations/meta/0003_snapshot.json +321 -0
  73. package/migrations/meta/_journal.json +7 -0
  74. package/package.json +19 -18
  75. package/src/conversation-binding.ts +9 -1
  76. package/src/define.ts +20 -0
  77. package/src/guardrails-gate.ts +17 -3
  78. package/src/handlers/context.ts +14 -0
  79. package/src/handlers/dispatch-tools.ts +76 -61
  80. package/src/handlers/errors.ts +13 -1
  81. package/src/handlers/evaluate-guardrails.ts +39 -1
  82. package/src/handlers/gate-decision.ts +101 -0
  83. package/src/handlers/model-call.ts +149 -33
  84. package/src/handlers/persist-provenance.ts +3 -1
  85. package/src/handlers/persist-user-message.ts +3 -16
  86. package/src/handlers/public-types.ts +16 -2
  87. package/src/handlers/rehydrate.ts +120 -3
  88. package/src/handlers/run-retrievals.ts +2 -19
  89. package/src/handlers/setup.ts +59 -33
  90. package/src/handlers/tool-hitl.ts +6 -10
  91. package/src/handlers/turn-provenance.ts +230 -0
  92. package/src/index.ts +8 -0
  93. package/src/invoke.ts +53 -25
  94. package/src/provenance-emit.ts +4 -1
  95. package/src/schema.ts +11 -0
  96. package/src/types.ts +15 -1
@@ -61,6 +61,7 @@ export function buildEvaluateGuardrailsHandler(ctx) {
61
61
  runId: kctx.runId,
62
62
  tenantId: ctx.input.tenantId,
63
63
  projectId: ctx.input.projectId,
64
+ ...(ctx.input.orgId !== undefined && { orgId: ctx.input.orgId }),
64
65
  conversationId: ctx.input.conversationId,
65
66
  turnNumber: (ctx.conversation?.turnCount ?? 0) + 1,
66
67
  agent: ctx.input.agent,
@@ -71,7 +72,8 @@ export function buildEvaluateGuardrailsHandler(ctx) {
71
72
  finalResponse: response,
72
73
  usage: finalUsage,
73
74
  });
74
- const outcomes = await evaluateGate(ctx.guardrails, trace, ctx.bindings, ctx.tenantPolicy, ctx.turnAbort.signal);
75
+ const outcomes = await evaluateGate(ctx.guardrails, trace, ctx.bindings, ctx.tenantPolicy, ctx.turnAbort.signal, judgeUsageSink(ctx, kctx));
76
+ throwIfJudgeCallsUnrecorded(outcomes);
75
77
  const categorized = categorizeOutcomes(outcomes);
76
78
  const allViolations = [...categorized.blocking, ...categorized.warnings, ...categorized.other];
77
79
  for (const v of allViolations) {
@@ -125,4 +127,35 @@ export function buildEvaluateGuardrailsHandler(ctx) {
125
127
  };
126
128
  };
127
129
  }
130
+ /**
131
+ * The turn's usage sink for its llm-judge calls, adding what only the
132
+ * turn knows: the step that made them and the agent's version.
133
+ */
134
+ function judgeUsageSink(ctx, kctx) {
135
+ const sink = ctx.bindings.usage;
136
+ if (sink === undefined)
137
+ return undefined;
138
+ return {
139
+ record: (call) => sink.record({
140
+ nodeId: kctx.nodeId,
141
+ agentVersion: ctx.input.agent.version,
142
+ ...call,
143
+ }),
144
+ };
145
+ }
146
+ /**
147
+ * A judge call that answered but couldn't be recorded fails the step, as
148
+ * the turn's own model calls do: no answered call is left unrecorded.
149
+ */
150
+ function throwIfJudgeCallsUnrecorded(outcomes) {
151
+ for (const outcome of outcomes) {
152
+ if (outcome.kind === 'err' && outcome.error.code === 'judge-usage-unrecorded') {
153
+ throwAgentTurnFailure({
154
+ code: 'persistence-error',
155
+ message: outcome.error.message,
156
+ cause: outcome.error,
157
+ });
158
+ }
159
+ }
160
+ }
128
161
  //# sourceMappingURL=evaluate-guardrails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-guardrails.js","sourceRoot":"","sources":["../../src/handlers/evaluate-guardrails.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluate-guardrails.js","sourceRoot":"","sources":["../../src/handlers/evaluate-guardrails.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The reviewer's answer at an agent turn's approval gates: the tool-call
3
+ * gate (`dispatch-tools`) and the session gate (`setup`). A gate parks the
4
+ * turn on a waitpoint; the approvals route resumes it with the decision
5
+ * (`GateDecisionValue`): approve or reject, the reviewer's rationale, and
6
+ * who decided which approval.
7
+ *
8
+ * A gate fails closed. Only an explicit approve lets the tool run (or the
9
+ * session go on). Anything else blocks: a reject, and also a resume value
10
+ * that isn't a decision at all (a `value` that replaced it, a malformed
11
+ * payload), so no answer can be read as consent by omission.
12
+ */
13
+ /** The approval subject an agent's tool-call gate parks on. */
14
+ export declare const TOOL_CALL_GATE_SUBJECT = "tool-call:pending";
15
+ /** The approval subject an agent's session gate (`afterTurns`) parks on. */
16
+ export declare const SESSION_GATE_SUBJECT = "agent-turn:session-hitl-gate";
17
+ /**
18
+ * The approval subjects an agent turn parks on. Their resume value is the
19
+ * reviewer's decision and nothing else, so the approvals route takes no
20
+ * `value` for them.
21
+ */
22
+ export declare const AGENT_GATE_SUBJECTS: ReadonlySet<string>;
23
+ /**
24
+ * A gate's resume value: the reviewer's decision, as the approvals route
25
+ * (and the runtime, delivering a decision whose delivery was lost) completes
26
+ * the gate's waitpoint with it. The run's journal keeps it as it came.
27
+ */
28
+ export interface GateDecisionValue {
29
+ readonly decided: 'approve' | 'reject';
30
+ readonly rationale?: string;
31
+ /**
32
+ * Who decided, as an actor: `user:<userId>`, the reviewer's user. Absent
33
+ * from values written before it was recorded.
34
+ */
35
+ readonly decidedBy?: string;
36
+ /** The approval decided. Absent from values written before it was recorded. */
37
+ readonly approvalId?: string;
38
+ }
39
+ /** Who decided a gate, and which approval, when its value says. */
40
+ interface GateDecider {
41
+ readonly decidedBy?: string;
42
+ readonly approvalId?: string;
43
+ }
44
+ /** What a gate's resume value decides. */
45
+ export type GateDecision = GateDecider & ({
46
+ readonly approved: true;
47
+ } | {
48
+ readonly approved: false;
49
+ /** `rejected`: the reviewer said no. `unreadable`: the answer wasn't a decision. */
50
+ readonly reason: 'rejected' | 'unreadable';
51
+ /** The reviewer's rationale, or why an unreadable answer blocks. */
52
+ readonly rationale: string | undefined;
53
+ });
54
+ /** Why a gate blocks on an answer that isn't a decision. */
55
+ export declare const UNREADABLE_DECISION = "the approval's answer wasn't a decision (approve or reject), so it counts as a rejection";
56
+ /**
57
+ * The decision in a gate's resume value. Fails closed: only
58
+ * `{ decided: 'approve' }` approves.
59
+ */
60
+ export declare function readGateDecision(value: unknown): GateDecision;
61
+ export {};
62
+ //# sourceMappingURL=gate-decision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-decision.d.ts","sourceRoot":"","sources":["../../src/handlers/gate-decision.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAGlD,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,mEAAmE;AACnE,UAAU,WAAW;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,0CAA0C;AAC1C,MAAM,MAAM,YAAY,GAAG,WAAW,GACpC,CACI;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAAC;IAC3C,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,CACJ,CAAC;AAEJ,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,6FAC4D,CAAC;AAE7F;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAwB7D"}
@@ -0,0 +1,55 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * The reviewer's answer at an agent turn's approval gates: the tool-call
5
+ * gate (`dispatch-tools`) and the session gate (`setup`). A gate parks the
6
+ * turn on a waitpoint; the approvals route resumes it with the decision
7
+ * (`GateDecisionValue`): approve or reject, the reviewer's rationale, and
8
+ * who decided which approval.
9
+ *
10
+ * A gate fails closed. Only an explicit approve lets the tool run (or the
11
+ * session go on). Anything else blocks: a reject, and also a resume value
12
+ * that isn't a decision at all (a `value` that replaced it, a malformed
13
+ * payload), so no answer can be read as consent by omission.
14
+ */
15
+ /** The approval subject an agent's tool-call gate parks on. */
16
+ export const TOOL_CALL_GATE_SUBJECT = 'tool-call:pending';
17
+ /** The approval subject an agent's session gate (`afterTurns`) parks on. */
18
+ export const SESSION_GATE_SUBJECT = 'agent-turn:session-hitl-gate';
19
+ /**
20
+ * The approval subjects an agent turn parks on. Their resume value is the
21
+ * reviewer's decision and nothing else, so the approvals route takes no
22
+ * `value` for them.
23
+ */
24
+ export const AGENT_GATE_SUBJECTS = new Set([
25
+ TOOL_CALL_GATE_SUBJECT,
26
+ SESSION_GATE_SUBJECT,
27
+ ]);
28
+ /** Why a gate blocks on an answer that isn't a decision. */
29
+ export const UNREADABLE_DECISION = "the approval's answer wasn't a decision (approve or reject), so it counts as a rejection";
30
+ /**
31
+ * The decision in a gate's resume value. Fails closed: only
32
+ * `{ decided: 'approve' }` approves.
33
+ */
34
+ export function readGateDecision(value) {
35
+ if (typeof value !== 'object' || value === null) {
36
+ return { approved: false, reason: 'unreadable', rationale: UNREADABLE_DECISION };
37
+ }
38
+ const { decided, rationale, decidedBy, approvalId } = value;
39
+ const decider = {
40
+ ...(typeof decidedBy === 'string' && { decidedBy }),
41
+ ...(typeof approvalId === 'string' && { approvalId }),
42
+ };
43
+ if (decided === 'approve')
44
+ return { approved: true, ...decider };
45
+ if (decided === 'reject') {
46
+ return {
47
+ approved: false,
48
+ reason: 'rejected',
49
+ rationale: typeof rationale === 'string' ? rationale : undefined,
50
+ ...decider,
51
+ };
52
+ }
53
+ return { approved: false, reason: 'unreadable', rationale: UNREADABLE_DECISION };
54
+ }
55
+ //# sourceMappingURL=gate-decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-decision.js","sourceRoot":"","sources":["../../src/handlers/gate-decision.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAE1D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,sBAAsB;IACtB,oBAAoB;CACrB,CAAC,CAAC;AAsCH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAC9B,0FAA0F,CAAC;AAE7F;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACnF,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAKrD,CAAC;IACF,MAAM,OAAO,GAAgB;QAC3B,GAAG,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,EAAE,SAAS,EAAE,CAAC;QACnD,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,EAAE,UAAU,EAAE,CAAC;KACtD,CAAC;IACF,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IACjE,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAChE,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;AACnF,CAAC"}
@@ -6,6 +6,16 @@ import type { TurnContext } from './context.js';
6
6
  * `model.call.completed`, records provenance for the model-call node,
7
7
  * and accumulates usage on `ctx.usage`.
8
8
  *
9
+ * Every call is recorded in the usage sink (`InvokeAgentBindings.usage`,
10
+ * the runtime's cost ledger) before the step goes on, a call that threw
11
+ * included. A sink that fails is tried again (a record is idempotent by
12
+ * call id); one that still fails fails the step when the call succeeded,
13
+ * so no answered call is left unrecorded. A call that failed keeps its
14
+ * own failure, which says it couldn't be recorded too. The call's id goes into
15
+ * the step's output and its provenance node, which keeps the call's
16
+ * identity (provider, model) while its usage lives in the ledger. A dry
17
+ * run spends nothing and records nothing.
18
+ *
9
19
  * Output is a partial `AgentTurnIterationOutput` — `dispatch-tools`
10
20
  * receives it and finishes composing the iteration output.
11
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"model-call.d.ts","sourceRoot":"","sources":["../../src/handlers/model-call.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAA4B,WAAW,EAAE,MAAM,cAAc,CAAC;AAG1E;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAwHnE"}
1
+ {"version":3,"file":"model-call.d.ts","sourceRoot":"","sources":["../../src/handlers/model-call.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKhE,OAAO,KAAK,EAA4B,WAAW,EAAE,MAAM,cAAc,CAAC;AAI1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAyGnE"}
@@ -1,13 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // Copyright (C) 2026 Kindgi Inc.
3
+ import { randomUUID } from 'node:crypto';
4
+ import { recordModelUsage, } from '@kindgi/capabilities';
5
+ import { attemptsOf } from '@kindgi/capabilities/attempts';
3
6
  import { emitTurnEvent } from '../streaming.js';
4
7
  import { throwAgentTurnFailure } from './errors.js';
8
+ import { addModelCallNode } from './turn-provenance.js';
5
9
  /**
6
10
  * Loop-body node #1. Invoke the model with the current
7
11
  * `nextMessages` accumulator. Emits `model.call.started` +
8
12
  * `model.call.completed`, records provenance for the model-call node,
9
13
  * and accumulates usage on `ctx.usage`.
10
14
  *
15
+ * Every call is recorded in the usage sink (`InvokeAgentBindings.usage`,
16
+ * the runtime's cost ledger) before the step goes on, a call that threw
17
+ * included. A sink that fails is tried again (a record is idempotent by
18
+ * call id); one that still fails fails the step when the call succeeded,
19
+ * so no answered call is left unrecorded. A call that failed keeps its
20
+ * own failure, which says it couldn't be recorded too. The call's id goes into
21
+ * the step's output and its provenance node, which keeps the call's
22
+ * identity (provider, model) while its usage lives in the ledger. A dry
23
+ * run spends nothing and records nothing.
24
+ *
11
25
  * Output is a partial `AgentTurnIterationOutput` — `dispatch-tools`
12
26
  * receives it and finishes composing the iteration output.
13
27
  */
@@ -23,6 +37,8 @@ export function buildModelCallHandler(ctx) {
23
37
  const shaped = input;
24
38
  const nextMessages = shaped?.nextMessages ?? [];
25
39
  ctx.usage.steps += 1;
40
+ const step = ctx.usage.steps;
41
+ const callId = randomUUID();
26
42
  await emitTurnEvent(ctx.bindings.onEvent, {
27
43
  kind: 'model.call.started',
28
44
  step: ctx.usage.steps,
@@ -53,26 +69,14 @@ export function buildModelCallHandler(ctx) {
53
69
  }),
54
70
  abortSignal: ctx.turnAbort.signal,
55
71
  };
72
+ const startedAt = Date.now();
56
73
  try {
57
74
  callResult = await ctx.provider.invoke(callInput);
58
75
  }
59
76
  catch (cause) {
60
- if (ctx.turnAbort.signal.aborted) {
61
- throwAgentTurnFailure({
62
- code: 'agent-turn-aborted',
63
- message: `Agent turn aborted: ${cause instanceof Error ? cause.message : String(cause)}`,
64
- reason: ctx.abortReason ?? 'timeout',
65
- });
66
- }
67
- // The provider's own words (a 401's "invalid x-api-key", a 429)
68
- // are what the caller needs; they're in `cause` too, but callers
69
- // show `message`.
70
- throwAgentTurnFailure({
71
- code: 'model-invocation-failed',
72
- message: `Model call to ${ctx.provider.metadata.id} (${ctx.model.name}) failed: ${describeCause(cause)}`,
73
- cause,
74
- });
77
+ return await failCall(ctx, kctx, { callId, step, cause, startedAt });
75
78
  }
79
+ await recordAnswer(ctx, kctx, callId, step, callResult);
76
80
  }
77
81
  ctx.usage.promptTokens += callResult.usage.promptTokens;
78
82
  ctx.usage.completionTokens += callResult.usage.completionTokens;
@@ -88,29 +92,18 @@ export function buildModelCallHandler(ctx) {
88
92
  durationMs: callResult.durationMs,
89
93
  });
90
94
  if (ctx.provenance !== undefined && ctx.userMessage !== undefined) {
91
- const modelCallNodeId = `model-call:${ctx.usage.steps}`;
92
- ctx.provenance.addNode({
93
- id: modelCallNodeId,
94
- kind: 'model-call',
95
- timestamp: new Date().toISOString(),
96
- modelVersion: `${callResult.provider.id}/${callResult.provider.model}`,
97
- attributes: {
98
- step: ctx.usage.steps,
99
- promptTokens: callResult.usage.promptTokens,
100
- completionTokens: callResult.usage.completionTokens,
101
- costUsd: callResult.costUsd,
102
- finishReason: callResult.finishReason,
103
- },
104
- });
105
- ctx.provenance.addEdge({
106
- from: modelCallNodeId,
107
- to: `input:${ctx.userMessage.sequence}`,
108
- kind: 'caused-by',
109
- });
95
+ addModelCallNode(ctx.provenance, {
96
+ step: ctx.usage.steps,
97
+ callId,
98
+ provider: callResult.provider,
99
+ finishReason: callResult.finishReason,
100
+ at: new Date().toISOString(),
101
+ }, ctx.userMessage.sequence, ctx.toolResultIds ?? []);
110
102
  }
111
103
  // Partial iteration output — `dispatch-tools` finishes it.
112
104
  const partial = {
113
105
  step: ctx.usage.steps,
106
+ callId,
114
107
  finishReason: callResult.finishReason,
115
108
  message: callResult.message,
116
109
  iterationUsage: {
@@ -124,6 +117,88 @@ export function buildModelCallHandler(ctx) {
124
117
  return partial;
125
118
  };
126
119
  }
120
+ /**
121
+ * A call that answered: record it before the step goes on. A sink that
122
+ * still fails after its retries fails the step: an answered call isn't
123
+ * left unrecorded.
124
+ */
125
+ async function recordAnswer(ctx, kctx, callId, step, answer) {
126
+ const { message: _answer, ...result } = answer;
127
+ const unrecorded = await recordCall(ctx, kctx, {
128
+ callId,
129
+ step,
130
+ status: 'ok',
131
+ result,
132
+ durationMs: answer.durationMs,
133
+ });
134
+ if (unrecorded !== undefined) {
135
+ throwAgentTurnFailure({
136
+ code: 'persistence-error',
137
+ message: `The model call couldn't be recorded: ${describeCause(unrecorded)}`,
138
+ cause: unrecorded,
139
+ });
140
+ }
141
+ }
142
+ /**
143
+ * A call that threw: record it, then fail the step with the call's own
144
+ * failure (aborted, or the provider's words). A record that failed too
145
+ * is said after it.
146
+ */
147
+ async function failCall(ctx, kctx, failed) {
148
+ const { cause } = failed;
149
+ const attempts = attemptsOf(cause);
150
+ const unrecorded = await recordCall(ctx, kctx, {
151
+ callId: failed.callId,
152
+ step: failed.step,
153
+ status: 'failed',
154
+ error: { message: describeCause(cause), ...(attempts !== undefined && { attempts }) },
155
+ durationMs: Date.now() - failed.startedAt,
156
+ });
157
+ const andUnrecorded = unrecorded === undefined
158
+ ? ''
159
+ : ` (and the failed call couldn't be recorded: ${describeCause(unrecorded)})`;
160
+ if (ctx.turnAbort.signal.aborted) {
161
+ throwAgentTurnFailure({
162
+ code: 'agent-turn-aborted',
163
+ message: `Agent turn aborted: ${cause instanceof Error ? cause.message : String(cause)}${andUnrecorded}`,
164
+ reason: ctx.abortReason ?? 'timeout',
165
+ });
166
+ }
167
+ // The provider's own words (a 401's "invalid x-api-key", a 429) are
168
+ // what the caller needs; they're in `cause` too, but callers show
169
+ // `message`.
170
+ throwAgentTurnFailure({
171
+ code: 'model-invocation-failed',
172
+ message: `Model call to ${ctx.provider?.metadata.id} (${ctx.model?.name}) failed: ${describeCause(cause)}${andUnrecorded}`,
173
+ cause,
174
+ });
175
+ }
176
+ /**
177
+ * Record a model call in the usage sink, when the turn has one, trying
178
+ * a failing sink again. Resolves with the sink's last failure when it
179
+ * couldn't record; the caller decides what that means for the step.
180
+ */
181
+ async function recordCall(ctx, kctx, call) {
182
+ const sink = ctx.bindings.usage;
183
+ if (sink === undefined || ctx.provider === undefined || ctx.model === undefined)
184
+ return;
185
+ const { input } = ctx;
186
+ const recorded = await recordModelUsage(sink, {
187
+ ...call,
188
+ tenantId: input.tenantId,
189
+ projectId: input.projectId,
190
+ runId: kctx.runId,
191
+ agentId: input.agent.id,
192
+ agentVersion: input.agent.version,
193
+ conversationId: input.conversationId,
194
+ nodeId: kctx.nodeId,
195
+ providerId: ctx.provider.metadata.id,
196
+ model: ctx.model.name,
197
+ ...(ctx.provider.metadata.fallback === true && { fallback: true }),
198
+ occurredAt: new Date().toISOString(),
199
+ });
200
+ return recorded.kind === 'err' ? (recorded.error ?? new Error('no detail')) : undefined;
201
+ }
127
202
  /** Longest cause text a failure message carries. */
128
203
  const MAX_CAUSE_CHARS = 500;
129
204
  /** A thrown value's message on one line, at most `MAX_CAUSE_CHARS` long. */
@@ -1 +1 @@
1
- {"version":3,"file":"model-call.js","sourceRoot":"","sources":["../../src/handlers/model-call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-call.js","sourceRoot":"","sources":["../../src/handlers/model-call.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"persist-provenance.d.ts","sourceRoot":"","sources":["../../src/handlers/persist-provenance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAqB3E"}
1
+ {"version":3,"file":"persist-provenance.d.ts","sourceRoot":"","sources":["../../src/handlers/persist-provenance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAuB3E"}
@@ -22,7 +22,9 @@ export function buildPersistProvenanceHandler(ctx) {
22
22
  // want).
23
23
  return { persisted: false };
24
24
  }
25
- const persisted = await persistProvenance(ctx.provenance, ctx.provenanceBindings);
25
+ const persisted = await persistProvenance(ctx.provenance, ctx.provenanceBindings, {
26
+ projectId: ctx.input.projectId,
27
+ });
26
28
  if (persisted.kind === 'ok') {
27
29
  ctx.persistedProvenance = persisted.value;
28
30
  return { persisted: true };
@@ -1 +1 @@
1
- {"version":3,"file":"persist-provenance.js","sourceRoot":"","sources":["../../src/handlers/persist-provenance.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAAC,GAAgB;IAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,wDAAwD;YACxD,0DAA0D;YAC1D,0DAA0D;YAC1D,iEAAiE;YACjE,SAAS;YACT,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClF,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC;YAC1C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,6DAA6D;QAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"persist-provenance.js","sourceRoot":"","sources":["../../src/handlers/persist-provenance.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAAC,GAAgB;IAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,wDAAwD;YACxD,0DAA0D;YAC1D,0DAA0D;YAC1D,iEAAiE;YACjE,SAAS;YACT,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,kBAAkB,EAAE;YAChF,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS;SAC/B,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC;YAC1C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,6DAA6D;QAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"persist-user-message.d.ts","sourceRoot":"","sources":["../../src/handlers/persist-user-message.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CA+C5E"}
1
+ {"version":3,"file":"persist-user-message.d.ts","sourceRoot":"","sources":["../../src/handlers/persist-user-message.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAiC5E"}
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // Copyright (C) 2026 Kindgi Inc.
3
3
  import { throwAgentTurnFailure } from './errors.js';
4
+ import { addInputNode } from './turn-provenance.js';
4
5
  /**
5
6
  * Persist the caller's user message BEFORE the model is called. A
6
7
  * crash mid-turn leaves the question intact for a later replay. Also
@@ -24,14 +25,8 @@ export function buildPersistUserMessageHandler(ctx) {
24
25
  };
25
26
  ctx.userMessage = synthetic;
26
27
  ctx.appended.push(synthetic);
27
- if (ctx.provenance !== undefined) {
28
- ctx.provenance.addNode({
29
- id: `input:${synthetic.sequence}`,
30
- kind: 'input',
31
- timestamp: synthetic.createdAt,
32
- ...(synthetic.actor !== undefined && { actor: synthetic.actor }),
33
- });
34
- }
28
+ if (ctx.provenance !== undefined)
29
+ addInputNode(ctx.provenance, synthetic);
35
30
  return { sequence: synthetic.sequence };
36
31
  }
37
32
  const persisted = await ctx.bindings.conversationBinding.appendMessage({
@@ -45,14 +40,8 @@ export function buildPersistUserMessageHandler(ctx) {
45
40
  throwAgentTurnFailure(persisted.error);
46
41
  ctx.userMessage = persisted.value;
47
42
  ctx.appended.push(persisted.value);
48
- if (ctx.provenance !== undefined) {
49
- ctx.provenance.addNode({
50
- id: `input:${persisted.value.sequence}`,
51
- kind: 'input',
52
- timestamp: persisted.value.createdAt,
53
- ...(persisted.value.actor !== undefined && { actor: persisted.value.actor }),
54
- });
55
- }
43
+ if (ctx.provenance !== undefined)
44
+ addInputNode(ctx.provenance, persisted.value);
56
45
  return { sequence: persisted.value.sequence };
57
46
  };
58
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persist-user-message.js","sourceRoot":"","sources":["../../src/handlers/persist-user-message.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAQjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,GAAgB;IAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,SAAS,GAAwB;gBACrC,QAAQ,EAAE,CAAC,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAe;gBAChD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;aACjF,CAAC;YACF,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE7B,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACjC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;oBACrB,EAAE,EAAE,SAAS,SAAS,CAAC,QAAQ,EAAE;oBACjC,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;iBACjE,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1C,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACrE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC5B,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;YACxC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;YAC9B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;SACjF,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;YAAE,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAErE,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACjC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;gBACrB,EAAE,EAAE,SAAS,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACvC,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS;gBACpC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;aAC7E,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"persist-user-message.js","sourceRoot":"","sources":["../../src/handlers/persist-user-message.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAQjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,GAAgB;IAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,SAAS,GAAwB;gBACrC,QAAQ,EAAE,CAAC,CAAC;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAe;gBAChD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;aACjF,CAAC;YACF,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE7B,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;gBAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1E,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1C,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACrE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC5B,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;YACxC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;YAC9B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;SACjF,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK;YAAE,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAErE,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAEhF,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import type { Principal } from '@kindgi/authz';
2
- import type { ProviderRegistry, TenantPolicy } from '@kindgi/capabilities';
2
+ import type { ProviderRegistry, TenantPolicy, UsageSink } from '@kindgi/capabilities';
3
3
  import type { EmbeddingProviderRegistry } from '@kindgi/embedding';
4
4
  import type { MemoryQueryBinding } from '@kindgi/memory';
5
5
  import type { PolicyRegistry } from '@kindgi/policy-contract';
6
6
  import type { ParentRunRef, RunBinding } from '@kindgi/runtime';
7
7
  import type { ToolRegistry, ToolSecretRef } from '@kindgi/tools';
8
- import type { ProjectId, ProvenanceId, RunId, TenantId, Timestamp } from '@kindgi/types';
8
+ import type { OrgId, ProjectId, ProvenanceId, RunId, TenantId, Timestamp } from '@kindgi/types';
9
9
  import type { ConversationBinding } from '../conversation-binding.js';
10
10
  import type { GuardrailsBindings } from '../guardrails-gate.js';
11
11
  import type { ProvenanceBindings } from '../provenance-emit.js';
@@ -27,6 +27,12 @@ export interface InvokeAgentInput {
27
27
  * at the caller layer.
28
28
  */
29
29
  readonly projectId: ProjectId;
30
+ /**
31
+ * The project's org, when it belongs to one: the runtime resolves it
32
+ * from the project, never from input. The turn's tools get it as
33
+ * `ToolContext.orgId`, its guardrails as `trace.orgId`.
34
+ */
35
+ readonly orgId?: OrgId;
30
36
  readonly agent: Agent;
31
37
  readonly conversationId: ConversationId;
32
38
  readonly userMessage: string;
@@ -147,6 +153,12 @@ export interface InvokeAgentBindings extends GuardrailsBindings {
147
153
  readonly onEvent?: OnTurnEvent;
148
154
  readonly provenance?: ProvenanceBindings;
149
155
  readonly hitl?: HitlBindings;
156
+ /**
157
+ * Where the turn records each model call (the runtime's cost ledger):
158
+ * its usage, provider, model, run, agent and step, before the step
159
+ * that made it goes on. Absent: calls aren't recorded.
160
+ */
161
+ readonly usage?: UsageSink;
150
162
  /**
151
163
  * Declarative HTTP tools: optional secret resolver populated
152
164
  * from the deployment's tenant-scoped `SecretBinding`. When present,
@@ -163,6 +175,8 @@ export interface HitlBindings {
163
175
  }
164
176
  export interface HitlEnqueueInput {
165
177
  readonly tenantId: TenantId;
178
+ /** The turn's project: approval lists filter by it. */
179
+ readonly projectId?: ProjectId;
166
180
  readonly subjectKind: string;
167
181
  readonly subjectRef: Readonly<Record<string, unknown>>;
168
182
  readonly requiredRole?: 'standard' | 'senior' | 'admin';
@@ -1 +1 @@
1
- {"version":3,"file":"public-types.d.ts","sourceRoot":"","sources":["../../src/handlers/public-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public-types.d.ts","sourceRoot":"","sources":["../../src/handlers/public-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rehydrate.d.ts","sourceRoot":"","sources":["../../src/handlers/rehydrate.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,iBAAiB,CAAC;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA0ChD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,OAAO,CAAC,OAAO,CAAC,CA6ClB"}
1
+ {"version":3,"file":"rehydrate.d.ts","sourceRoot":"","sources":["../../src/handlers/rehydrate.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,iBAAiB,CAAC;AAI5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsDhD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,OAAO,CAAC,OAAO,CAAC,CA+ClB"}