@kindgi/agents 0.1.2 → 0.1.4-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/blocks.d.ts +101 -0
  2. package/dist/blocks.d.ts.map +1 -0
  3. package/dist/blocks.js +149 -0
  4. package/dist/blocks.js.map +1 -0
  5. package/dist/conversation-binding.d.ts +9 -1
  6. package/dist/conversation-binding.d.ts.map +1 -1
  7. package/dist/define.d.ts +17 -2
  8. package/dist/define.d.ts.map +1 -1
  9. package/dist/define.js +93 -6
  10. package/dist/define.js.map +1 -1
  11. package/dist/guardrails-gate.d.ts +7 -4
  12. package/dist/guardrails-gate.d.ts.map +1 -1
  13. package/dist/guardrails-gate.js +5 -2
  14. package/dist/guardrails-gate.js.map +1 -1
  15. package/dist/handlers/compose-result.d.ts.map +1 -1
  16. package/dist/handlers/compose-result.js +3 -0
  17. package/dist/handlers/compose-result.js.map +1 -1
  18. package/dist/handlers/context.d.ts +24 -0
  19. package/dist/handlers/context.d.ts.map +1 -1
  20. package/dist/handlers/dispatch-tools.d.ts.map +1 -1
  21. package/dist/handlers/dispatch-tools.js +69 -43
  22. package/dist/handlers/dispatch-tools.js.map +1 -1
  23. package/dist/handlers/errors.d.ts +12 -1
  24. package/dist/handlers/errors.d.ts.map +1 -1
  25. package/dist/handlers/errors.js.map +1 -1
  26. package/dist/handlers/evaluate-guardrails.d.ts.map +1 -1
  27. package/dist/handlers/evaluate-guardrails.js +36 -1
  28. package/dist/handlers/evaluate-guardrails.js.map +1 -1
  29. package/dist/handlers/gate-decision.d.ts +62 -0
  30. package/dist/handlers/gate-decision.d.ts.map +1 -0
  31. package/dist/handlers/gate-decision.js +55 -0
  32. package/dist/handlers/gate-decision.js.map +1 -0
  33. package/dist/handlers/model-call.d.ts +10 -0
  34. package/dist/handlers/model-call.d.ts.map +1 -1
  35. package/dist/handlers/model-call.js +120 -34
  36. package/dist/handlers/model-call.js.map +1 -1
  37. package/dist/handlers/persist-provenance.d.ts.map +1 -1
  38. package/dist/handlers/persist-provenance.js +3 -1
  39. package/dist/handlers/persist-provenance.js.map +1 -1
  40. package/dist/handlers/persist-user-message.d.ts.map +1 -1
  41. package/dist/handlers/persist-user-message.js +5 -16
  42. package/dist/handlers/persist-user-message.js.map +1 -1
  43. package/dist/handlers/public-types.d.ts +37 -3
  44. package/dist/handlers/public-types.d.ts.map +1 -1
  45. package/dist/handlers/rehydrate.d.ts.map +1 -1
  46. package/dist/handlers/rehydrate.js +91 -1
  47. package/dist/handlers/rehydrate.js.map +1 -1
  48. package/dist/handlers/render-prompt.d.ts.map +1 -1
  49. package/dist/handlers/render-prompt.js +4 -1
  50. package/dist/handlers/render-prompt.js.map +1 -1
  51. package/dist/handlers/replay.d.ts +143 -0
  52. package/dist/handlers/replay.d.ts.map +1 -0
  53. package/dist/handlers/replay.js +177 -0
  54. package/dist/handlers/replay.js.map +1 -0
  55. package/dist/handlers/resolve-blocks.d.ts +32 -0
  56. package/dist/handlers/resolve-blocks.d.ts.map +1 -0
  57. package/dist/handlers/resolve-blocks.js +129 -0
  58. package/dist/handlers/resolve-blocks.js.map +1 -0
  59. package/dist/handlers/resolve-tools.d.ts +6 -2
  60. package/dist/handlers/resolve-tools.d.ts.map +1 -1
  61. package/dist/handlers/resolve-tools.js +59 -27
  62. package/dist/handlers/resolve-tools.js.map +1 -1
  63. package/dist/handlers/result-shape.d.ts +7 -0
  64. package/dist/handlers/result-shape.d.ts.map +1 -1
  65. package/dist/handlers/result-shape.js.map +1 -1
  66. package/dist/handlers/run-retrievals.d.ts.map +1 -1
  67. package/dist/handlers/run-retrievals.js +35 -35
  68. package/dist/handlers/run-retrievals.js.map +1 -1
  69. package/dist/handlers/run-snapshot.d.ts.map +1 -1
  70. package/dist/handlers/run-snapshot.js +1 -0
  71. package/dist/handlers/run-snapshot.js.map +1 -1
  72. package/dist/handlers/setup.d.ts +2 -0
  73. package/dist/handlers/setup.d.ts.map +1 -1
  74. package/dist/handlers/setup.js +29 -12
  75. package/dist/handlers/setup.js.map +1 -1
  76. package/dist/handlers/tool-hitl.d.ts +5 -9
  77. package/dist/handlers/tool-hitl.d.ts.map +1 -1
  78. package/dist/handlers/tool-hitl.js +5 -0
  79. package/dist/handlers/tool-hitl.js.map +1 -1
  80. package/dist/handlers/turn-environment.d.ts +13 -2
  81. package/dist/handlers/turn-environment.d.ts.map +1 -1
  82. package/dist/handlers/turn-environment.js +12 -3
  83. package/dist/handlers/turn-environment.js.map +1 -1
  84. package/dist/handlers/turn-provenance.d.ts +67 -0
  85. package/dist/handlers/turn-provenance.d.ts.map +1 -0
  86. package/dist/handlers/turn-provenance.js +160 -0
  87. package/dist/handlers/turn-provenance.js.map +1 -0
  88. package/dist/index.d.ts +10 -1
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +5 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/invoke.d.ts +14 -1
  93. package/dist/invoke.d.ts.map +1 -1
  94. package/dist/invoke.js +37 -19
  95. package/dist/invoke.js.map +1 -1
  96. package/dist/pins.d.ts +54 -0
  97. package/dist/pins.d.ts.map +1 -0
  98. package/dist/pins.js +51 -0
  99. package/dist/pins.js.map +1 -0
  100. package/dist/prompt.d.ts +12 -2
  101. package/dist/prompt.d.ts.map +1 -1
  102. package/dist/prompt.js +41 -4
  103. package/dist/prompt.js.map +1 -1
  104. package/dist/provenance-emit.d.ts +4 -2
  105. package/dist/provenance-emit.d.ts.map +1 -1
  106. package/dist/provenance-emit.js +4 -2
  107. package/dist/provenance-emit.js.map +1 -1
  108. package/dist/run-snapshot-binding.d.ts +5 -0
  109. package/dist/run-snapshot-binding.d.ts.map +1 -1
  110. package/dist/schema.d.ts +34 -0
  111. package/dist/schema.d.ts.map +1 -1
  112. package/dist/schema.js +16 -0
  113. package/dist/schema.js.map +1 -1
  114. package/dist/streaming.d.ts +5 -0
  115. package/dist/streaming.d.ts.map +1 -1
  116. package/dist/streaming.js.map +1 -1
  117. package/dist/types.d.ts +65 -2
  118. package/dist/types.d.ts.map +1 -1
  119. package/migrations/0003_hesitant_captain_cross.sql +2 -0
  120. package/migrations/0004_stormy_moondragon.sql +1 -0
  121. package/migrations/meta/0003_snapshot.json +321 -0
  122. package/migrations/meta/0004_snapshot.json +327 -0
  123. package/migrations/meta/_journal.json +14 -0
  124. package/package.json +15 -15
  125. package/src/blocks.ts +231 -0
  126. package/src/conversation-binding.ts +9 -1
  127. package/src/define.ts +104 -7
  128. package/src/guardrails-gate.ts +17 -3
  129. package/src/handlers/compose-result.ts +3 -0
  130. package/src/handlers/context.ts +24 -0
  131. package/src/handlers/dispatch-tools.ts +75 -44
  132. package/src/handlers/errors.ts +13 -0
  133. package/src/handlers/evaluate-guardrails.ts +41 -1
  134. package/src/handlers/gate-decision.ts +101 -0
  135. package/src/handlers/model-call.ts +163 -33
  136. package/src/handlers/persist-provenance.ts +3 -1
  137. package/src/handlers/persist-user-message.ts +3 -16
  138. package/src/handlers/public-types.ts +38 -3
  139. package/src/handlers/rehydrate.ts +141 -9
  140. package/src/handlers/render-prompt.ts +13 -7
  141. package/src/handlers/replay.ts +314 -0
  142. package/src/handlers/resolve-blocks.ts +188 -0
  143. package/src/handlers/resolve-tools.ts +76 -28
  144. package/src/handlers/result-shape.ts +8 -0
  145. package/src/handlers/run-retrievals.ts +45 -41
  146. package/src/handlers/run-snapshot.ts +1 -0
  147. package/src/handlers/setup.ts +30 -22
  148. package/src/handlers/tool-hitl.ts +6 -10
  149. package/src/handlers/turn-environment.ts +28 -3
  150. package/src/handlers/turn-provenance.ts +230 -0
  151. package/src/index.ts +44 -0
  152. package/src/invoke.ts +49 -20
  153. package/src/pins.ts +98 -0
  154. package/src/prompt.ts +52 -4
  155. package/src/provenance-emit.ts +4 -1
  156. package/src/run-snapshot-binding.ts +6 -0
  157. package/src/schema.ts +16 -0
  158. package/src/streaming.ts +5 -0
  159. package/src/types.ts +68 -2
@@ -2,7 +2,11 @@
2
2
  // Copyright (C) 2026 Kindgi Inc.
3
3
  import { bodyStepKey } from '@kindgi/runtime';
4
4
  import { throwAgentTurnFailure } from './errors.js';
5
+ import { readGateDecision } from './gate-decision.js';
6
+ import { rehydrateReplay } from './replay.js';
7
+ import { TOOL_GATE_RECORD_PREFIX } from './tool-hitl.js';
5
8
  import { loadTurnConversation, resolveTurnEnvironment, resolveTurnHitlPolicy, } from './turn-environment.js';
9
+ import { addInputNode, addModelCallNode, addRetrievalNodes, addStepToolNodes, } from './turn-provenance.js';
6
10
  /** Each step's last completion — a step at one loop iteration counts once. */
7
11
  function completedSteps(journal) {
8
12
  const byStep = new Map();
@@ -18,6 +22,7 @@ function completedSteps(journal) {
18
22
  nodeId: e.nodeId,
19
23
  output: payload.output,
20
24
  inLoop: payload.loopContext !== undefined,
25
+ at: e.timestamp,
21
26
  });
22
27
  }
23
28
  return [...byStep.values()];
@@ -41,7 +46,10 @@ export async function rehydrateTurnContext(ctx, runId, journal) {
41
46
  }
42
47
  await loadTurnConversation(ctx);
43
48
  ctx.hitlPolicy = await resolveTurnHitlPolicy(ctx);
44
- await resolveTurnEnvironment(ctx, { providerId: setup.providerId, model: setup.providerModel });
49
+ // The route and the tool versions `setup` resolved: a resumed turn
50
+ // runs those, never a range resolved again (a journal from before
51
+ // `toolVersions` was recorded resolves the ranges, as it did).
52
+ await resolveTurnEnvironment(ctx, { providerId: setup.providerId, model: setup.providerModel }, setup.toolVersions, setup.blockVersions);
45
53
  const userMessage = outputOf(steps, 'persist-user-message');
46
54
  if (userMessage !== undefined) {
47
55
  await restoreAppended(ctx, userMessage.sequence);
@@ -59,8 +67,90 @@ export async function rehydrateTurnContext(ctx, runId, journal) {
59
67
  if (out.provider !== undefined)
60
68
  ctx.lastProvider = out.provider;
61
69
  }
70
+ ctx.toolApprovals = toolApprovalsOf(journal);
71
+ rebuildProvenance(ctx, steps, retrievals?.retrieved);
72
+ rehydrateReplay(ctx, journal);
62
73
  return true;
63
74
  }
75
+ /**
76
+ * The tool-call approvals the journal shows decided, by invocation id: the
77
+ * waitpoint each call's gate recorded (`dispatch-tools`), when the call
78
+ * parked on it (`wait.suspended`, the first), and the decision that
79
+ * resolved it (`wait.resumed`).
80
+ */
81
+ function toolApprovalsOf(journal) {
82
+ const callOf = new Map();
83
+ const parkedAt = new Map();
84
+ const resumed = new Map();
85
+ for (const e of journal) {
86
+ const gate = toolGateOf(e);
87
+ if (gate !== undefined)
88
+ callOf.set(gate.waitTokenId, gate.invocationId);
89
+ const p = (e.payload ?? {});
90
+ if (typeof p.tokenId !== 'string')
91
+ continue;
92
+ if (e.kind === 'wait.suspended' && !parkedAt.has(p.tokenId)) {
93
+ parkedAt.set(p.tokenId, e.timestamp);
94
+ }
95
+ if (e.kind === 'wait.resumed')
96
+ resumed.set(p.tokenId, { at: e.timestamp, value: p.value });
97
+ }
98
+ const approvals = new Map();
99
+ for (const [waitTokenId, decided] of resumed) {
100
+ const invocationId = callOf.get(waitTokenId);
101
+ if (invocationId === undefined)
102
+ continue;
103
+ approvals.set(invocationId, {
104
+ waitTokenId,
105
+ parkedAt: parkedAt.get(waitTokenId) ?? decided.at,
106
+ decidedAt: decided.at,
107
+ decision: readGateDecision(decided.value),
108
+ });
109
+ }
110
+ return approvals;
111
+ }
112
+ /** The waitpoint a tool call's gate recorded (`dispatch-tools`), if `e` is that record. */
113
+ function toolGateOf(e) {
114
+ if (e.kind !== 'value.recorded')
115
+ return undefined;
116
+ const p = (e.payload ?? {});
117
+ if (typeof p.key !== 'string' || !p.key.startsWith(TOOL_GATE_RECORD_PREFIX))
118
+ return undefined;
119
+ const waitTokenId = p.value?.waitTokenId;
120
+ return typeof waitTokenId === 'string'
121
+ ? { waitTokenId, invocationId: p.key.slice(TOOL_GATE_RECORD_PREFIX.length) }
122
+ : undefined;
123
+ }
124
+ /**
125
+ * The provenance of the steps that ran before the park, in the order
126
+ * they ran: the user message, the retrievals, then each model call with
127
+ * the tool calls its completed step stored.
128
+ */
129
+ function rebuildProvenance(ctx, steps, retrieved) {
130
+ const input = ctx.userMessage;
131
+ if (ctx.provenance === undefined || input === undefined)
132
+ return;
133
+ addInputNode(ctx.provenance, input);
134
+ if (retrieved !== undefined)
135
+ addRetrievalNodes(ctx.provenance, retrieved, input);
136
+ const storedByStep = new Map();
137
+ for (const s of steps.filter((s) => s.nodeId === 'dispatch-tools' && s.inLoop)) {
138
+ const out = s.output;
139
+ if (out.step !== undefined)
140
+ storedByStep.set(out.step, out.iterationAppended ?? []);
141
+ }
142
+ const calls = steps
143
+ .filter((s) => s.nodeId === 'model-call' && s.inLoop)
144
+ .map((s) => ({ at: s.at, out: s.output }))
145
+ .sort((a, b) => (a.out.step ?? 0) - (b.out.step ?? 0));
146
+ for (const { at, out } of calls) {
147
+ const { step, callId, provider, finishReason } = out;
148
+ if (step === undefined || callId === undefined || provider === undefined)
149
+ continue;
150
+ addModelCallNode(ctx.provenance, { step, callId, provider, finishReason: finishReason ?? 'stop', at }, input.sequence, [...(ctx.toolResultIds ?? [])]);
151
+ addStepToolNodes(ctx, step, storedByStep.get(step) ?? []);
152
+ }
153
+ }
64
154
  /**
65
155
  * The messages no completed step accounts for: those the step the turn
66
156
  * parked in stored before it parked.
@@ -1 +1 @@
1
- {"version":3,"file":"rehydrate.js","sourceRoot":"","sources":["../../src/handlers/rehydrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rehydrate.js","sourceRoot":"","sources":["../../src/handlers/rehydrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render-prompt.d.ts","sourceRoot":"","sources":["../../src/handlers/render-prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CA2BtE"}
1
+ {"version":3,"file":"render-prompt.d.ts","sourceRoot":"","sources":["../../src/handlers/render-prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAiCtE"}
@@ -26,7 +26,10 @@ export function buildRenderPromptHandler(ctx) {
26
26
  id: ctx.input.conversationId,
27
27
  turn: ctx.conversation.turnCount + 1,
28
28
  },
29
- });
29
+ ...(ctx.blocks !== undefined && { settings: ctx.blocks.settings }),
30
+ },
31
+ // The pinned prompt block, when the instructions come from one.
32
+ ctx.blocks?.prompt?.content);
30
33
  if (!rendered.ok) {
31
34
  throwAgentTurnFailure({
32
35
  code: 'model-invocation-failed',
@@ -1 +1 @@
1
- {"version":3,"file":"render-prompt.js","sourceRoot":"","sources":["../../src/handlers/render-prompt.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAgB;IACvD,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACnC,qBAAqB,CAAC;gBACpB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,8CAA8C;gBACvD,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;YACnD,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;YACtC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChE,YAAY,EAAE;gBACZ,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;gBAC5B,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC;aACrC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,qBAAqB,CAAC;gBACpB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,yBAAyB,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC1D,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAC;QACL,CAAC;QACD,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"render-prompt.js","sourceRoot":"","sources":["../../src/handlers/render-prompt.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAgB;IACvD,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACnC,qBAAqB,CAAC;gBACpB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,8CAA8C;gBACvD,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CACjC,GAAG,CAAC,KAAK,CAAC,KAAK,EACf;YACE,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;YACtC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChE,YAAY,EAAE;gBACZ,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;gBAC5B,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC;aACrC;YACD,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;SACnE;QACD,gEAAgE;QAChE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAC5B,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,qBAAqB,CAAC;gBACpB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,yBAAyB,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC1D,KAAK,EAAE,QAAQ,CAAC,KAAK;aACtB,CAAC,CAAC;QACL,CAAC;QACD,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Replay turns: an eval run re-running a past run (`InvokeAgentInput.replay`)
3
+ * on an agent version, without doing anything the past run didn't already
4
+ * do. Each tool call is decided by the deployment's `ReplayBinding`:
5
+ *
6
+ * - `live`: the tool runs. Only a tool declared read-only (see
7
+ * `isReadOnlyTool`) with no approval to wait for can; a `live`
8
+ * decision for any other is refused here, whatever the binding says;
9
+ * - `recorded`: the past run's result for the same call is used;
10
+ * - `refused`: the tool doesn't run, and the model gets the given result.
11
+ *
12
+ * A turn marked as a replay with no binding refuses every call. Each
13
+ * decision is journaled (`NodeContext.record`), so a resumed turn keeps
14
+ * the decisions it made, and the turn's result lists them
15
+ * (`AgentTurnResult.replay`).
16
+ */
17
+ import type { NodeContext } from '@kindgi/handler';
18
+ import type { RunReplayRef } from '@kindgi/runtime';
19
+ import type { JournalEntry } from '@kindgi/runtime';
20
+ import type { Tool } from '@kindgi/tools';
21
+ import type { RunId, TenantId } from '@kindgi/types';
22
+ import type { RetrievedFact } from '../types.js';
23
+ import type { TurnContext } from './context.js';
24
+ /** The replay turn a `ReplayBinding` is asked about. */
25
+ export interface ReplayTurnRef {
26
+ readonly tenantId: TenantId;
27
+ /** The replay turn's own run. */
28
+ readonly runId: RunId;
29
+ readonly replay: RunReplayRef;
30
+ }
31
+ export interface ReplayToolInput extends ReplayTurnRef {
32
+ readonly tool: {
33
+ readonly id: string;
34
+ readonly version: string;
35
+ /** As the tool declares it; absent means it changes things. */
36
+ readonly mutating?: boolean;
37
+ readonly effects?: readonly string[];
38
+ };
39
+ readonly arguments: unknown;
40
+ /** The model's id for the call. */
41
+ readonly callId: string;
42
+ /** `true` when the tool's approval rules would ask for a review before it runs. */
43
+ readonly gated: boolean;
44
+ }
45
+ export type ReplayToolDecision = {
46
+ readonly kind: 'live';
47
+ } | {
48
+ readonly kind: 'recorded';
49
+ readonly result: unknown;
50
+ } | {
51
+ readonly kind: 'refused';
52
+ readonly result: unknown;
53
+ readonly reason: string;
54
+ };
55
+ /** An approval decision the past run recorded. */
56
+ export interface ReplayApproval {
57
+ readonly approved: boolean;
58
+ readonly rationale?: string;
59
+ }
60
+ /**
61
+ * How a deployment replays turns. Consulted only for a turn marked as a
62
+ * replay (`InvokeAgentInput.replay`).
63
+ */
64
+ export interface ReplayBinding {
65
+ /** Decide one tool call. */
66
+ decideTool(input: ReplayToolInput): Promise<ReplayToolDecision>;
67
+ /**
68
+ * What the turn's retrievals return: the past run's, or `undefined` to
69
+ * retrieve live. Absent: retrieve live.
70
+ */
71
+ retrievals?(input: ReplayTurnRef): Promise<readonly RetrievedFact[] | undefined>;
72
+ /**
73
+ * The past run's decision at the session approval gate, when the replay
74
+ * reaches that gate: the replay follows it. `undefined` (or absent): the
75
+ * gate is skipped, and the result says so.
76
+ */
77
+ sessionApproval?(input: ReplayTurnRef): Promise<ReplayApproval | undefined>;
78
+ }
79
+ /** One tool call of a replay turn, and what happened to it. */
80
+ export interface ReplayToolTrace {
81
+ readonly step: number;
82
+ readonly callId: string;
83
+ readonly toolId: string;
84
+ readonly toolVersion: string;
85
+ readonly arguments: unknown;
86
+ readonly source: 'live' | 'recorded' | 'refused';
87
+ /** Why it was refused. A refused call is what the turn would have done. */
88
+ readonly reason?: string;
89
+ }
90
+ /** What a replay turn did differently from a live one (`AgentTurnResult.replay`). */
91
+ export interface ReplayTurnReport extends RunReplayRef {
92
+ readonly tools: readonly ReplayToolTrace[];
93
+ /**
94
+ * The session approval gate, when the replay reached it: `followed` the
95
+ * past run's recorded decision, or `skipped` (none was recorded).
96
+ */
97
+ readonly approval?: 'followed' | 'skipped';
98
+ }
99
+ /** The `record` key of a replay's tool decision, per call. */
100
+ export declare const REPLAY_TOOL_RECORD_PREFIX = "replay-tool:";
101
+ /** The `record` key of a replay's session approval. */
102
+ export declare const REPLAY_APPROVAL_RECORD = "replay-session-approval";
103
+ /** A tool that declares it changes nothing: `mutating: false`, and no changing effect. */
104
+ export declare function isReadOnlyTool(tool: {
105
+ readonly mutating?: boolean;
106
+ readonly effects?: readonly {
107
+ readonly kind: string;
108
+ }[] | readonly string[];
109
+ }): boolean;
110
+ /**
111
+ * Decide one tool call of a replay turn, once: the binding's decision,
112
+ * held to `isReadOnlyTool`, journaled, and added to the turn's trace.
113
+ */
114
+ export declare function decideReplayTool(ctx: TurnContext, kctx: NodeContext, call: {
115
+ readonly step: number;
116
+ readonly callId: string;
117
+ readonly tool: Tool;
118
+ readonly version: string;
119
+ readonly arguments: unknown;
120
+ readonly gated: boolean;
121
+ }): Promise<ReplayToolDecision>;
122
+ /** The session approval a replay follows, decided once: the past run's, or none. */
123
+ export declare function replaySessionApproval(ctx: TurnContext, kctx: NodeContext): Promise<ReplayApproval | undefined>;
124
+ /**
125
+ * A replay at the session approval gate: it goes on when the past run's
126
+ * reviewer approved (or none was recorded), and fails as the past run did
127
+ * (`hitl-rejected`) when they rejected.
128
+ */
129
+ export declare function followReplaySessionGate(ctx: TurnContext, kctx: NodeContext): Promise<void>;
130
+ /**
131
+ * A resumed replay turn's trace and approval, from the journal: every call
132
+ * decided before the park, and the session approval if `setup` reached it.
133
+ * The step the turn parked in decides its calls again, from the journal.
134
+ */
135
+ export declare function rehydrateReplay(ctx: TurnContext, journal: readonly JournalEntry[]): void;
136
+ /** The turn's replay report, for its result. */
137
+ export declare function replayReport(ctx: TurnContext): ReplayTurnReport | undefined;
138
+ /** A replay's tag on its usage records (`ModelUsageRecord.replay`). */
139
+ export declare function replayTag(replay: RunReplayRef): {
140
+ readonly of: string;
141
+ readonly evalRunId: string;
142
+ };
143
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/handlers/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { throwAgentTurnFailure } from './errors.js';
4
+ /** The `record` key of a replay's tool decision, per call. */
5
+ export const REPLAY_TOOL_RECORD_PREFIX = 'replay-tool:';
6
+ /** The `record` key of a replay's session approval. */
7
+ export const REPLAY_APPROVAL_RECORD = 'replay-session-approval';
8
+ /** Effects a read-only tool can't declare. */
9
+ const CHANGING_EFFECTS = new Set([
10
+ 'writes',
11
+ 'deletes',
12
+ 'spawns-run',
13
+ 'emits-event',
14
+ 'external-side-effect',
15
+ ]);
16
+ /** A tool that declares it changes nothing: `mutating: false`, and no changing effect. */
17
+ export function isReadOnlyTool(tool) {
18
+ if (tool.mutating !== false)
19
+ return false;
20
+ return !(tool.effects ?? []).some((e) => CHANGING_EFFECTS.has(typeof e === 'string' ? e : e.kind));
21
+ }
22
+ /** What the model gets for a call a replay refuses because nothing decided it. */
23
+ const NO_BINDING_REASON = 'replay: no replay binding is wired, so no tool runs';
24
+ const CHANGES_REASON = 'replay: this call changes things and has no recorded result';
25
+ const GATED_REASON = 'replay: this call needs an approval and has no recorded result';
26
+ function refusedResult(reason) {
27
+ return { status: 'not-executed', reason };
28
+ }
29
+ /**
30
+ * Decide one tool call of a replay turn, once: the binding's decision,
31
+ * held to `isReadOnlyTool`, journaled, and added to the turn's trace.
32
+ */
33
+ export async function decideReplayTool(ctx, kctx, call) {
34
+ const replay = ctx.input.replay;
35
+ if (replay === undefined)
36
+ return { kind: 'live' };
37
+ const base = {
38
+ step: call.step,
39
+ callId: call.callId,
40
+ toolId: call.tool.id,
41
+ toolVersion: call.version,
42
+ arguments: call.arguments,
43
+ };
44
+ const refuse = (reason) => ({
45
+ ...base,
46
+ source: 'refused',
47
+ reason,
48
+ result: refusedResult(reason),
49
+ });
50
+ const decided = await kctx.record(`${REPLAY_TOOL_RECORD_PREFIX}${call.callId}`, async () => {
51
+ const binding = ctx.bindings.replay;
52
+ if (binding === undefined)
53
+ return refuse(NO_BINDING_REASON);
54
+ const decision = await binding.decideTool({
55
+ tenantId: ctx.input.tenantId,
56
+ runId: kctx.runId,
57
+ replay,
58
+ tool: {
59
+ id: base.toolId,
60
+ version: call.version,
61
+ ...(call.tool.mutating !== undefined && { mutating: call.tool.mutating }),
62
+ ...(call.tool.effects !== undefined && {
63
+ effects: call.tool.effects.map((e) => e.kind),
64
+ }),
65
+ },
66
+ arguments: call.arguments,
67
+ callId: call.callId,
68
+ gated: call.gated,
69
+ });
70
+ if (decision.kind === 'recorded') {
71
+ return { ...base, source: 'recorded', result: decision.result };
72
+ }
73
+ if (decision.kind === 'refused') {
74
+ return { ...base, source: 'refused', reason: decision.reason, result: decision.result };
75
+ }
76
+ // `live` runs only a read-only tool, and never waits for an approval.
77
+ if (!isReadOnlyTool(call.tool))
78
+ return refuse(CHANGES_REASON);
79
+ if (call.gated)
80
+ return refuse(GATED_REASON);
81
+ return { ...base, source: 'live' };
82
+ });
83
+ addReplayTrace(ctx, traceOf(decided));
84
+ if (decided.source === 'live')
85
+ return { kind: 'live' };
86
+ if (decided.source === 'recorded')
87
+ return { kind: 'recorded', result: decided.result };
88
+ return { kind: 'refused', result: decided.result, reason: decided.reason ?? CHANGES_REASON };
89
+ }
90
+ /** A journaled decision's trace entry (without the result). */
91
+ function traceOf(decided) {
92
+ const { result: _result, ...trace } = decided;
93
+ return trace;
94
+ }
95
+ function addReplayTrace(ctx, entry) {
96
+ const trace = ctx.replayTrace ?? [];
97
+ ctx.replayTrace = trace;
98
+ // A step run again after a resume decides its calls again (from the journal).
99
+ if (trace.some((t) => t.callId === entry.callId))
100
+ return;
101
+ trace.push(entry);
102
+ }
103
+ /** The session approval a replay follows, decided once: the past run's, or none. */
104
+ export async function replaySessionApproval(ctx, kctx) {
105
+ const replay = ctx.input.replay;
106
+ if (replay === undefined)
107
+ return undefined;
108
+ const recorded = await kctx.record(REPLAY_APPROVAL_RECORD, async () => {
109
+ const approval = await ctx.bindings.replay?.sessionApproval?.({
110
+ tenantId: ctx.input.tenantId,
111
+ runId: kctx.runId,
112
+ replay,
113
+ });
114
+ return { approval: approval ?? null };
115
+ });
116
+ ctx.replayApproval = recorded.approval === null ? 'skipped' : 'followed';
117
+ return recorded.approval ?? undefined;
118
+ }
119
+ /**
120
+ * A replay at the session approval gate: it goes on when the past run's
121
+ * reviewer approved (or none was recorded), and fails as the past run did
122
+ * (`hitl-rejected`) when they rejected.
123
+ */
124
+ export async function followReplaySessionGate(ctx, kctx) {
125
+ const approval = await replaySessionApproval(ctx, kctx);
126
+ if (approval === undefined || approval.approved)
127
+ return;
128
+ throwAgentTurnFailure({
129
+ code: 'hitl-rejected',
130
+ message: `The replayed run's reviewer rejected the session-HITL gate${approval.rationale !== undefined ? `: ${approval.rationale}` : ''}`,
131
+ ...(approval.rationale !== undefined && { rationale: approval.rationale }),
132
+ });
133
+ }
134
+ /**
135
+ * A resumed replay turn's trace and approval, from the journal: every call
136
+ * decided before the park, and the session approval if `setup` reached it.
137
+ * The step the turn parked in decides its calls again, from the journal.
138
+ */
139
+ export function rehydrateReplay(ctx, journal) {
140
+ if (ctx.input.replay === undefined)
141
+ return;
142
+ for (const e of journal) {
143
+ if (e.kind !== 'value.recorded')
144
+ continue;
145
+ const p = (e.payload ?? {});
146
+ if (p.key === REPLAY_APPROVAL_RECORD) {
147
+ const approval = p.value?.approval;
148
+ ctx.replayApproval = approval == null ? 'skipped' : 'followed';
149
+ }
150
+ else if (p.key?.startsWith(REPLAY_TOOL_RECORD_PREFIX) === true) {
151
+ restoreDecision(ctx, p.value);
152
+ }
153
+ }
154
+ }
155
+ function restoreDecision(ctx, value) {
156
+ const decided = value;
157
+ if (decided?.source !== undefined && decided.callId !== undefined) {
158
+ addReplayTrace(ctx, traceOf(decided));
159
+ }
160
+ }
161
+ /** The turn's replay report, for its result. */
162
+ export function replayReport(ctx) {
163
+ const replay = ctx.input.replay;
164
+ if (replay === undefined)
165
+ return undefined;
166
+ return {
167
+ of: replay.of,
168
+ evalRunId: replay.evalRunId,
169
+ tools: [...(ctx.replayTrace ?? [])].sort((a, b) => a.step - b.step),
170
+ ...(ctx.replayApproval !== undefined && { approval: ctx.replayApproval }),
171
+ };
172
+ }
173
+ /** A replay's tag on its usage records (`ModelUsageRecord.replay`). */
174
+ export function replayTag(replay) {
175
+ return { of: replay.of, evalRunId: replay.evalRunId };
176
+ }
177
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/handlers/replay.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AA4BjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA8EpD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AACxD,uDAAuD;AACvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAEhE,8CAA8C;AAC9C,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IACpD,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,aAAa;IACb,sBAAsB;CACvB,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,IAG9B;IACC,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,iBAAiB,GAAG,qDAAqD,CAAC;AAChF,MAAM,cAAc,GAAG,6DAA6D,CAAC;AACrF,MAAM,YAAY,GAAG,gEAAgE,CAAC;AAEtF,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAgB,EAChB,IAAiB,EACjB,IAOC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAuB;QACzC,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAc,EAAoB,EAAE,CAAC,CAAC;QACpD,GAAG,IAAI;QACP,MAAM,EAAE,SAAS;QACjB,MAAM;QACN,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;KAC9B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAC/B,GAAG,yBAAyB,GAAG,IAAI,CAAC,MAAM,EAAE,EAC5C,KAAK,IAA+B,EAAE;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACxC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM;YACN,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,MAAM;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI;oBACrC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAC9C,CAAC;aACH;YACD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClE,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1F,CAAC;QACD,sEAAsE;QACtE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC,CACF,CAAC;IACF,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACvF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;AAC/F,CAAC;AAED,+DAA+D;AAC/D,SAAS,OAAO,CAAC,OAAyB;IACxC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAgB,EAAE,KAAsB;IAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IACpC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;IACxB,8EAA8E;IAC9E,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO;IACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAgB,EAChB,IAAiB;IAEjB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAChC,sBAAsB,EACtB,KAAK,IAA2D,EAAE;QAChE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YAC5D,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM;SACP,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC;IACxC,CAAC,CACF,CAAC;IACF,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,OAAO,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAgB,EAAE,IAAiB;IAC/E,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ;QAAE,OAAO;IACxD,qBAAqB,CAAC;QACpB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,6DACP,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EACjE,EAAE;QACF,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;KAClE,CAAC,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAgB,EAAE,OAAgC;IAChF,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO;IAC3C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB;YAAE,SAAS;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAkC,CAAC;QAC7D,IAAI,CAAC,CAAC,GAAG,KAAK,sBAAsB,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAI,CAAC,CAAC,KAAqD,EAAE,QAAQ,CAAC;YACpF,GAAG,CAAC,cAAc,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACjE,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,yBAAyB,CAAC,KAAK,IAAI,EAAE,CAAC;YACjE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAgB,EAAE,KAAc;IACvD,MAAM,OAAO,GAAG,KAAqC,CAAC;IACtD,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClE,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACnE,GAAG,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,MAAoB;IAI5C,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAuB,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type ModelSettings, type PromptBlockContent } from '../blocks.js';
2
+ import type { TurnContext } from './context.js';
3
+ /** The block versions a turn runs, by kind then id, as `setup` journals them. */
4
+ export interface PinnedBlockVersions {
5
+ readonly prompts: Readonly<Record<string, string>>;
6
+ readonly settings: Readonly<Record<string, string>>;
7
+ }
8
+ /** The data blocks a turn runs with, loaded at its version. */
9
+ export interface TurnBlocks {
10
+ /** The prompt block the instructions come from. */
11
+ readonly prompt?: {
12
+ readonly id: string;
13
+ readonly version: string;
14
+ readonly content: PromptBlockContent;
15
+ };
16
+ /** Each settings block's values, by block id (`ToolContext.settings`, `settings` in templates). */
17
+ readonly settings: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
18
+ /** The model-settings block's values, for the turn's model calls. */
19
+ readonly modelSettings?: ModelSettings;
20
+ readonly versions: PinnedBlockVersions;
21
+ }
22
+ /**
23
+ * Load the data blocks the agent references, each at one exact version:
24
+ * the resumed turn's own (`pinned`, from its `setup`), else the agent
25
+ * version's pin (`agent.pins`), else its range resolved now by
26
+ * `pickVersion` (an agent version published before pins). A pinned
27
+ * version that's unregistered still loads; one that's gone, a range
28
+ * nothing satisfies, or a runtime with no blocks fails the turn
29
+ * (`block-unresolvable`). `undefined` when the agent references none.
30
+ */
31
+ export declare function resolveTurnBlocks(ctx: TurnContext, pinned?: PinnedBlockVersions): Promise<TurnBlocks | undefined>;
32
+ //# sourceMappingURL=resolve-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-blocks.d.ts","sourceRoot":"","sources":["../../src/handlers/resolve-blocks.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;KACtC,CAAC;IACF,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,qEAAqE;IACrE,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACxC;AASD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAqCjC"}