@kindgi/agents 0.0.0-bootstrap.0 → 0.1.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 (240) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +131 -2
  3. package/dist/agent-turn-flow.d.ts +57 -0
  4. package/dist/agent-turn-flow.d.ts.map +1 -0
  5. package/dist/agent-turn-flow.js +172 -0
  6. package/dist/agent-turn-flow.js.map +1 -0
  7. package/dist/conversation-binding.d.ts +111 -0
  8. package/dist/conversation-binding.d.ts.map +1 -0
  9. package/dist/conversation-binding.js +4 -0
  10. package/dist/conversation-binding.js.map +1 -0
  11. package/dist/define.d.ts +180 -0
  12. package/dist/define.d.ts.map +1 -0
  13. package/dist/define.js +361 -0
  14. package/dist/define.js.map +1 -0
  15. package/dist/errors.d.ts +62 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +4 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/guardrails-gate.d.ts +169 -0
  20. package/dist/guardrails-gate.d.ts.map +1 -0
  21. package/dist/guardrails-gate.js +202 -0
  22. package/dist/guardrails-gate.js.map +1 -0
  23. package/dist/handlers/budget-check.d.ts +22 -0
  24. package/dist/handlers/budget-check.d.ts.map +1 -0
  25. package/dist/handlers/budget-check.js +109 -0
  26. package/dist/handlers/budget-check.js.map +1 -0
  27. package/dist/handlers/build-initial-messages.d.ts +17 -0
  28. package/dist/handlers/build-initial-messages.d.ts.map +1 -0
  29. package/dist/handlers/build-initial-messages.js +86 -0
  30. package/dist/handlers/build-initial-messages.js.map +1 -0
  31. package/dist/handlers/compose-result.d.ts +10 -0
  32. package/dist/handlers/compose-result.d.ts.map +1 -0
  33. package/dist/handlers/compose-result.js +79 -0
  34. package/dist/handlers/compose-result.js.map +1 -0
  35. package/dist/handlers/constants.d.ts +8 -0
  36. package/dist/handlers/constants.d.ts.map +1 -0
  37. package/dist/handlers/constants.js +10 -0
  38. package/dist/handlers/constants.js.map +1 -0
  39. package/dist/handlers/context.d.ts +210 -0
  40. package/dist/handlers/context.d.ts.map +1 -0
  41. package/dist/handlers/context.js +4 -0
  42. package/dist/handlers/context.js.map +1 -0
  43. package/dist/handlers/dispatch-tools.d.ts +15 -0
  44. package/dist/handlers/dispatch-tools.d.ts.map +1 -0
  45. package/dist/handlers/dispatch-tools.js +511 -0
  46. package/dist/handlers/dispatch-tools.js.map +1 -0
  47. package/dist/handlers/errors.d.ts +133 -0
  48. package/dist/handlers/errors.d.ts.map +1 -0
  49. package/dist/handlers/errors.js +134 -0
  50. package/dist/handlers/errors.js.map +1 -0
  51. package/dist/handlers/evaluate-guardrails.d.ts +14 -0
  52. package/dist/handlers/evaluate-guardrails.d.ts.map +1 -0
  53. package/dist/handlers/evaluate-guardrails.js +128 -0
  54. package/dist/handlers/evaluate-guardrails.js.map +1 -0
  55. package/dist/handlers/final-iteration.d.ts +7 -0
  56. package/dist/handlers/final-iteration.d.ts.map +1 -0
  57. package/dist/handlers/final-iteration.js +26 -0
  58. package/dist/handlers/final-iteration.js.map +1 -0
  59. package/dist/handlers/index.d.ts +5 -0
  60. package/dist/handlers/index.d.ts.map +1 -0
  61. package/dist/handlers/index.js +41 -0
  62. package/dist/handlers/index.js.map +1 -0
  63. package/dist/handlers/model-call.d.ts +13 -0
  64. package/dist/handlers/model-call.d.ts.map +1 -0
  65. package/dist/handlers/model-call.js +136 -0
  66. package/dist/handlers/model-call.js.map +1 -0
  67. package/dist/handlers/persist-final-message.d.ts +14 -0
  68. package/dist/handlers/persist-final-message.d.ts.map +1 -0
  69. package/dist/handlers/persist-final-message.js +54 -0
  70. package/dist/handlers/persist-final-message.js.map +1 -0
  71. package/dist/handlers/persist-provenance.d.ts +12 -0
  72. package/dist/handlers/persist-provenance.d.ts.map +1 -0
  73. package/dist/handlers/persist-provenance.js +34 -0
  74. package/dist/handlers/persist-provenance.js.map +1 -0
  75. package/dist/handlers/persist-user-message.d.ts +15 -0
  76. package/dist/handlers/persist-user-message.d.ts.map +1 -0
  77. package/dist/handlers/persist-user-message.js +59 -0
  78. package/dist/handlers/persist-user-message.js.map +1 -0
  79. package/dist/handlers/public-types.d.ts +201 -0
  80. package/dist/handlers/public-types.d.ts.map +1 -0
  81. package/dist/handlers/public-types.js +4 -0
  82. package/dist/handlers/public-types.js.map +1 -0
  83. package/dist/handlers/rehydrate.d.ts +8 -0
  84. package/dist/handlers/rehydrate.d.ts.map +1 -0
  85. package/dist/handlers/rehydrate.js +94 -0
  86. package/dist/handlers/rehydrate.js.map +1 -0
  87. package/dist/handlers/render-prompt.d.ts +12 -0
  88. package/dist/handlers/render-prompt.d.ts.map +1 -0
  89. package/dist/handlers/render-prompt.js +41 -0
  90. package/dist/handlers/render-prompt.js.map +1 -0
  91. package/dist/handlers/resolve-tools.d.ts +10 -0
  92. package/dist/handlers/resolve-tools.d.ts.map +1 -0
  93. package/dist/handlers/resolve-tools.js +55 -0
  94. package/dist/handlers/resolve-tools.js.map +1 -0
  95. package/dist/handlers/result-shape.d.ts +94 -0
  96. package/dist/handlers/result-shape.d.ts.map +1 -0
  97. package/dist/handlers/result-shape.js +19 -0
  98. package/dist/handlers/result-shape.js.map +1 -0
  99. package/dist/handlers/run-retrievals.d.ts +10 -0
  100. package/dist/handlers/run-retrievals.d.ts.map +1 -0
  101. package/dist/handlers/run-retrievals.js +64 -0
  102. package/dist/handlers/run-retrievals.js.map +1 -0
  103. package/dist/handlers/run-snapshot.d.ts +4 -0
  104. package/dist/handlers/run-snapshot.d.ts.map +1 -0
  105. package/dist/handlers/run-snapshot.js +26 -0
  106. package/dist/handlers/run-snapshot.js.map +1 -0
  107. package/dist/handlers/setup.d.ts +25 -0
  108. package/dist/handlers/setup.d.ts.map +1 -0
  109. package/dist/handlers/setup.js +231 -0
  110. package/dist/handlers/setup.js.map +1 -0
  111. package/dist/handlers/structured-output.d.ts +38 -0
  112. package/dist/handlers/structured-output.d.ts.map +1 -0
  113. package/dist/handlers/structured-output.js +89 -0
  114. package/dist/handlers/structured-output.js.map +1 -0
  115. package/dist/handlers/tool-errors.d.ts +56 -0
  116. package/dist/handlers/tool-errors.d.ts.map +1 -0
  117. package/dist/handlers/tool-errors.js +73 -0
  118. package/dist/handlers/tool-errors.js.map +1 -0
  119. package/dist/handlers/tool-hitl.d.ts +45 -0
  120. package/dist/handlers/tool-hitl.d.ts.map +1 -0
  121. package/dist/handlers/tool-hitl.js +81 -0
  122. package/dist/handlers/tool-hitl.js.map +1 -0
  123. package/dist/handlers/turn-environment.d.ts +26 -0
  124. package/dist/handlers/turn-environment.d.ts.map +1 -0
  125. package/dist/handlers/turn-environment.js +154 -0
  126. package/dist/handlers/turn-environment.js.map +1 -0
  127. package/dist/hitl-policy.d.ts +45 -0
  128. package/dist/hitl-policy.d.ts.map +1 -0
  129. package/dist/hitl-policy.js +74 -0
  130. package/dist/hitl-policy.js.map +1 -0
  131. package/dist/index.d.ts +31 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +19 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/invoke.d.ts +36 -0
  136. package/dist/invoke.d.ts.map +1 -0
  137. package/dist/invoke.js +228 -0
  138. package/dist/invoke.js.map +1 -0
  139. package/dist/migrations-dir.d.ts +11 -0
  140. package/dist/migrations-dir.d.ts.map +1 -0
  141. package/dist/migrations-dir.js +14 -0
  142. package/dist/migrations-dir.js.map +1 -0
  143. package/dist/project-run-result.d.ts +23 -0
  144. package/dist/project-run-result.d.ts.map +1 -0
  145. package/dist/project-run-result.js +116 -0
  146. package/dist/project-run-result.js.map +1 -0
  147. package/dist/prompt.d.ts +83 -0
  148. package/dist/prompt.d.ts.map +1 -0
  149. package/dist/prompt.js +119 -0
  150. package/dist/prompt.js.map +1 -0
  151. package/dist/provenance-emit.d.ts +44 -0
  152. package/dist/provenance-emit.d.ts.map +1 -0
  153. package/dist/provenance-emit.js +51 -0
  154. package/dist/provenance-emit.js.map +1 -0
  155. package/dist/registry.d.ts +38 -0
  156. package/dist/registry.d.ts.map +1 -0
  157. package/dist/registry.js +125 -0
  158. package/dist/registry.js.map +1 -0
  159. package/dist/retrieval.d.ts +47 -0
  160. package/dist/retrieval.d.ts.map +1 -0
  161. package/dist/retrieval.js +155 -0
  162. package/dist/retrieval.js.map +1 -0
  163. package/dist/run-snapshot-binding.d.ts +77 -0
  164. package/dist/run-snapshot-binding.d.ts.map +1 -0
  165. package/dist/run-snapshot-binding.js +4 -0
  166. package/dist/run-snapshot-binding.js.map +1 -0
  167. package/dist/schema.d.ts +497 -0
  168. package/dist/schema.d.ts.map +1 -0
  169. package/dist/schema.js +133 -0
  170. package/dist/schema.js.map +1 -0
  171. package/dist/streaming.d.ts +118 -0
  172. package/dist/streaming.d.ts.map +1 -0
  173. package/dist/streaming.js +17 -0
  174. package/dist/streaming.js.map +1 -0
  175. package/dist/tenant-policy.d.ts +16 -0
  176. package/dist/tenant-policy.d.ts.map +1 -0
  177. package/dist/tenant-policy.js +77 -0
  178. package/dist/tenant-policy.js.map +1 -0
  179. package/dist/types.d.ts +435 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +4 -0
  182. package/dist/types.js.map +1 -0
  183. package/dist/versioning.d.ts +29 -0
  184. package/dist/versioning.d.ts.map +1 -0
  185. package/dist/versioning.js +58 -0
  186. package/dist/versioning.js.map +1 -0
  187. package/migrations/0000_sparkling_talkback.sql +18 -0
  188. package/migrations/0001_tired_warhawk.sql +16 -0
  189. package/migrations/0002_violet_ezekiel.sql +2 -0
  190. package/migrations/meta/0000_snapshot.json +172 -0
  191. package/migrations/meta/0001_snapshot.json +275 -0
  192. package/migrations/meta/0002_snapshot.json +287 -0
  193. package/migrations/meta/_journal.json +27 -0
  194. package/package.json +76 -4
  195. package/src/agent-turn-flow.ts +183 -0
  196. package/src/conversation-binding.ts +147 -0
  197. package/src/define.ts +572 -0
  198. package/src/errors.ts +80 -0
  199. package/src/guardrails-gate.ts +342 -0
  200. package/src/handlers/budget-check.ts +143 -0
  201. package/src/handlers/build-initial-messages.ts +103 -0
  202. package/src/handlers/compose-result.ts +90 -0
  203. package/src/handlers/constants.ts +10 -0
  204. package/src/handlers/context.ts +226 -0
  205. package/src/handlers/dispatch-tools.ts +633 -0
  206. package/src/handlers/errors.ts +282 -0
  207. package/src/handlers/evaluate-guardrails.ts +153 -0
  208. package/src/handlers/final-iteration.ts +30 -0
  209. package/src/handlers/index.ts +63 -0
  210. package/src/handlers/model-call.ts +151 -0
  211. package/src/handlers/persist-final-message.ts +67 -0
  212. package/src/handlers/persist-provenance.ts +39 -0
  213. package/src/handlers/persist-user-message.ts +70 -0
  214. package/src/handlers/public-types.ts +209 -0
  215. package/src/handlers/rehydrate.ts +161 -0
  216. package/src/handlers/render-prompt.ts +46 -0
  217. package/src/handlers/resolve-tools.ts +68 -0
  218. package/src/handlers/result-shape.ts +113 -0
  219. package/src/handlers/run-retrievals.ts +77 -0
  220. package/src/handlers/run-snapshot.ts +44 -0
  221. package/src/handlers/setup.ts +269 -0
  222. package/src/handlers/structured-output.ts +117 -0
  223. package/src/handlers/tool-errors.ts +122 -0
  224. package/src/handlers/tool-hitl.ts +126 -0
  225. package/src/handlers/turn-environment.ts +191 -0
  226. package/src/hitl-policy.ts +128 -0
  227. package/src/index.ts +154 -0
  228. package/src/invoke.ts +299 -0
  229. package/src/migrations-dir.ts +17 -0
  230. package/src/project-run-result.ts +131 -0
  231. package/src/prompt.ts +185 -0
  232. package/src/provenance-emit.ts +100 -0
  233. package/src/registry.ts +164 -0
  234. package/src/retrieval.ts +219 -0
  235. package/src/run-snapshot-binding.ts +87 -0
  236. package/src/schema.ts +154 -0
  237. package/src/streaming.ts +153 -0
  238. package/src/tenant-policy.ts +78 -0
  239. package/src/types.ts +453 -0
  240. package/src/versioning.ts +77 -0
@@ -0,0 +1,511 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { WaitpointCancelledError } from '@kindgi/handler';
4
+ import { stricterToolHitlRule } from '@kindgi/policy-contract';
5
+ import { invokeTool } from '@kindgi/tools';
6
+ import { emitTurnEvent } from '../streaming.js';
7
+ import { throwAgentTurnFailure, } from './errors.js';
8
+ import { effectiveToolErrorPolicy, toolErrorKindOf, toolErrorResult, toolRetriesSoFar, } from './tool-errors.js';
9
+ import { computeToolCallWaitToken, hashToolArgs } from './tool-hitl.js';
10
+ /**
11
+ * Resolves the effective HITL mode + reviewer role for a specific
12
+ * tool from the pre-resolved effective policy. Mirrors the standalone
13
+ * `resolveToolHitl(agent, tool)` in tool-hitl.ts but consumes the
14
+ * resolver's output.
15
+ */
16
+ function resolveEffectiveToolHitl(effective, tool) {
17
+ const gate = agentToolHitl(effective, tool);
18
+ // The tenant's floor for this tool, when it names one: the stricter wins.
19
+ const floor = effective.toolFloors?.get(tool.id);
20
+ if (floor === undefined)
21
+ return gate;
22
+ const stricter = stricterToolHitlRule(gate, floor);
23
+ return { mode: stricter.mode, requiredRole: stricter.requiredRole ?? gate.requiredRole };
24
+ }
25
+ /** The agent's own gate for `tool`. */
26
+ function agentToolHitl(effective, tool) {
27
+ const toolsPolicy = effective.tools;
28
+ const defaultRole = effective.defaultReviewerRole;
29
+ // Opt-in: no `hitl.tools` block → never gate.
30
+ if (toolsPolicy === undefined) {
31
+ return { mode: 'never_ask', requiredRole: defaultRole };
32
+ }
33
+ const rawOverride = toolsPolicy.overrides.get(tool.id);
34
+ if (rawOverride !== undefined) {
35
+ const rule = typeof rawOverride === 'string'
36
+ ? { mode: rawOverride }
37
+ : rawOverride;
38
+ return {
39
+ mode: rule.mode,
40
+ requiredRole: rule.requiredRole ?? defaultRole,
41
+ };
42
+ }
43
+ if (toolsPolicy.default !== undefined) {
44
+ return { mode: toolsPolicy.default, requiredRole: defaultRole };
45
+ }
46
+ // Per-tool default from Tool.mutating (opt-in scope only).
47
+ const mode = tool.mutating === false ? 'never_ask' : 'ask_on_first_use';
48
+ return { mode, requiredRole: defaultRole };
49
+ }
50
+ /**
51
+ * Loop-body node #2. If the model returned `finishReason='tool-use'`
52
+ * with a non-empty tool-call list, persist the assistant tool-call
53
+ * message + dispatch every tool + persist every tool result. Update
54
+ * `nextMessages` so the next iteration's model call sees the tool
55
+ * outputs.
56
+ *
57
+ * When the model returned a terminal `finishReason` (or `tool-use`
58
+ * with no calls), pass through unchanged so
59
+ * `budget-check` marks the iteration finished.
60
+ */
61
+ export function buildDispatchToolsHandler(ctx) {
62
+ return async (input, kctx) => {
63
+ if (ctx.tools === undefined) {
64
+ throwAgentTurnFailure({
65
+ code: 'model-invocation-failed',
66
+ message: 'dispatch-tools invoked before setup completed',
67
+ cause: null,
68
+ });
69
+ }
70
+ const partial = input;
71
+ const assistantMsg = partial.message;
72
+ const hasToolCalls = partial.finishReason === 'tool-use' &&
73
+ assistantMsg.toolCalls !== undefined &&
74
+ assistantMsg.toolCalls.length > 0;
75
+ if (!hasToolCalls) {
76
+ // No tool calls this iteration — pass through. `budget-check`
77
+ // will finalize with `finishedTurn=true` and the loop exits.
78
+ const forwarded = {
79
+ step: partial.step,
80
+ finishReason: partial.finishReason,
81
+ message: assistantMsg,
82
+ iterationAppended: [],
83
+ iterationUsage: partial.iterationUsage,
84
+ provider: partial.provider,
85
+ nextMessages: partial.nextMessages,
86
+ hasToolCalls: false,
87
+ };
88
+ return forwarded;
89
+ }
90
+ const iterationAppended = [
91
+ await persistToolCallMessage(ctx, assistantMsg, partial.step),
92
+ ];
93
+ let nextMessages = [...partial.nextMessages, assistantMsg];
94
+ for (const call of assistantMsg.toolCalls ?? []) {
95
+ // Resumed after an approval further down this list: a call that
96
+ // already ran keeps the result it stored.
97
+ const stored = takeStoredBeforePark(ctx, (m) => m.role === 'tool' && m.toolCall?.invocationId === call.id);
98
+ if (stored !== undefined) {
99
+ iterationAppended.push(stored);
100
+ nextMessages = [...nextMessages, toolMessageOf(stored, call.id)];
101
+ continue;
102
+ }
103
+ // Look up the resolved binding before emitting `tool.started` so
104
+ // the event can carry `toolVersion` + `toolVersionRange` alongside
105
+ // the id. Model-requested tools the
106
+ // agent didn't declare emit a bare `tool.failed` with no version.
107
+ const binding = ctx.tools.byName.get(call.name);
108
+ if (binding === undefined) {
109
+ const unresolved = {
110
+ code: 'unresolved-tool',
111
+ message: `Model requested tool "${call.name}" not registered for agent "${ctx.input.agent.id}"`,
112
+ toolId: call.name,
113
+ };
114
+ await emitTurnEvent(ctx.bindings.onEvent, {
115
+ kind: 'tool.failed',
116
+ step: partial.step,
117
+ toolId: call.name,
118
+ invocationId: call.id,
119
+ error: { code: unresolved.code, message: unresolved.message },
120
+ });
121
+ nextMessages = await retryOrFail(ctx, call, unresolved, undefined, {
122
+ toolId: call.name,
123
+ nextMessages,
124
+ iterationAppended,
125
+ });
126
+ continue;
127
+ }
128
+ const { tool, resolvedVersion, requestedRange } = binding;
129
+ // Tool-level HITL gate. Resolves the effective mode
130
+ // for this (agent, tool) pair via the effective-policy
131
+ // resolver (framework defaults → agent → tenant cap), then parks +
132
+ // enqueues an approval when required BEFORE dispatch. On reject,
133
+ // returns a synthetic negative tool result so the LLM can adapt
134
+ // without terminating the run. Same run, same conversation, same
135
+ // provenance record across the park-and-resume — the same
136
+ // framework guarantee as the session-level gate.
137
+ //
138
+ // Kernel replay: within one run, waitForToken with the same
139
+ // deterministic tokenId returns the resolved decision from the
140
+ // journal — no re-park. Cross-turn `ask_on_first_use` caching
141
+ // (via conversation metadata) is not implemented.
142
+ const effectiveHitl = ctx.hitlPolicy;
143
+ if (effectiveHitl === undefined) {
144
+ throwAgentTurnFailure({
145
+ code: 'model-invocation-failed',
146
+ message: 'dispatch-tools invoked before the turn resolved its approval rules',
147
+ cause: null,
148
+ });
149
+ }
150
+ const resolvedHitl = resolveEffectiveToolHitl(effectiveHitl, tool);
151
+ let toolRejectionPayload = null;
152
+ if (resolvedHitl.mode !== 'never_ask') {
153
+ const argsHash = hashToolArgs(call.arguments);
154
+ const waitTokenId = computeToolCallWaitToken({
155
+ runId: kctx.runId,
156
+ callId: call.id,
157
+ argsHash,
158
+ });
159
+ const timeoutMs = effectiveHitl.timeoutMs;
160
+ const expiresAt = new Date(Date.now() + timeoutMs).toISOString();
161
+ if (ctx.bindings.hitl?.enqueue !== undefined) {
162
+ try {
163
+ await ctx.bindings.hitl.enqueue({
164
+ tenantId: ctx.input.tenantId,
165
+ subjectKind: 'tool-call:pending',
166
+ subjectRef: {
167
+ conversationId: ctx.input.conversationId,
168
+ agentId: ctx.input.agent.id,
169
+ agentVersion: ctx.input.agent.version,
170
+ toolId: tool.id,
171
+ toolVersion: resolvedVersion,
172
+ callId: call.id,
173
+ argsHash,
174
+ arguments: call.arguments,
175
+ },
176
+ requiredRole: resolvedHitl.requiredRole,
177
+ title: `HITL review: ${call.name}`,
178
+ description: `Tool call ${call.name} awaiting reviewer approval before dispatch.`,
179
+ waitTokenId,
180
+ provenanceRef: { runId: kctx.runId },
181
+ expiresAt: expiresAt,
182
+ });
183
+ }
184
+ catch {
185
+ // Enqueue failure is soft — waitForToken parks either way.
186
+ }
187
+ }
188
+ try {
189
+ const decision = await kctx.waitForToken(waitTokenId, {
190
+ timeoutMs,
191
+ });
192
+ if (decision.decided === 'reject') {
193
+ toolRejectionPayload =
194
+ decision.rationale !== undefined ? { rationale: decision.rationale } : {};
195
+ }
196
+ // approve → fall through to dispatch
197
+ }
198
+ catch (cause) {
199
+ if (cause instanceof WaitpointCancelledError) {
200
+ throwAgentTurnFailure({
201
+ code: 'hitl-cancelled',
202
+ message: `Tool-call HITL cancelled for ${call.name}: ${cause.reason}`,
203
+ reason: cause.reason,
204
+ });
205
+ }
206
+ throw cause;
207
+ }
208
+ }
209
+ const toolStarted = Date.now();
210
+ await emitTurnEvent(ctx.bindings.onEvent, {
211
+ kind: 'tool.started',
212
+ step: partial.step,
213
+ toolId: call.name,
214
+ toolVersion: resolvedVersion,
215
+ toolVersionRange: requestedRange,
216
+ invocationId: call.id,
217
+ arguments: call.arguments,
218
+ });
219
+ // If the reviewer rejected, synthesize a tool-result message
220
+ // carrying the rationale — the LLM reads it in the next
221
+ // iteration and can adapt (retry with different args, ask the
222
+ // user, apologize). NOT a run failure — reject is feedback, not
223
+ // termination.
224
+ if (toolRejectionPayload !== null) {
225
+ const rejectResult = {
226
+ status: 'rejected',
227
+ ...(toolRejectionPayload.rationale !== undefined && {
228
+ rationale: toolRejectionPayload.rationale,
229
+ }),
230
+ };
231
+ nextMessages = await appendToolResult(ctx, call, rejectResult, {
232
+ toolId: tool.id,
233
+ nextMessages,
234
+ iterationAppended,
235
+ });
236
+ await emitTurnEvent(ctx.bindings.onEvent, {
237
+ kind: 'tool.completed',
238
+ step: partial.step,
239
+ toolId: call.name,
240
+ toolVersion: resolvedVersion,
241
+ toolVersionRange: requestedRange,
242
+ invocationId: call.id,
243
+ output: rejectResult,
244
+ durationMs: Date.now() - toolStarted,
245
+ });
246
+ continue;
247
+ }
248
+ const dispatched = await dispatchOne(ctx, tool, call, kctx.runId);
249
+ if (dispatched.kind === 'err') {
250
+ await emitTurnEvent(ctx.bindings.onEvent, {
251
+ kind: 'tool.failed',
252
+ step: partial.step,
253
+ toolId: call.name,
254
+ invocationId: call.id,
255
+ error: {
256
+ code: dispatched.error.code,
257
+ message: dispatched.error.message,
258
+ },
259
+ });
260
+ nextMessages = await retryOrFail(ctx, call, dispatched.error, dispatched.error.validationIssues, { toolId: tool.id, nextMessages, iterationAppended });
261
+ continue;
262
+ }
263
+ ctx.appended.push(dispatched.value.persisted);
264
+ iterationAppended.push(dispatched.value.persisted);
265
+ nextMessages = [...nextMessages, dispatched.value.toolMessage];
266
+ await emitTurnEvent(ctx.bindings.onEvent, {
267
+ kind: 'tool.completed',
268
+ step: partial.step,
269
+ toolId: call.name,
270
+ toolVersion: resolvedVersion,
271
+ toolVersionRange: requestedRange,
272
+ invocationId: call.id,
273
+ output: dispatched.value.persisted.content,
274
+ durationMs: Date.now() - toolStarted,
275
+ });
276
+ if (ctx.provenance !== undefined) {
277
+ const modelCallNodeId = `model-call:${partial.step}`;
278
+ const toolCallNodeId = `tool-call:${call.id}`;
279
+ const toolResultNodeId = `tool-result:${call.id}`;
280
+ ctx.provenance.addNode({
281
+ id: toolCallNodeId,
282
+ kind: 'tool-call',
283
+ timestamp: dispatched.value.persisted.createdAt,
284
+ attributes: {
285
+ toolId: call.name,
286
+ invocationId: call.id,
287
+ // Capture the exact version the
288
+ // registry picked at run start + the range the agent asked
289
+ // for, so a replay can pin against the same version.
290
+ toolVersion: resolvedVersion,
291
+ toolVersionRange: requestedRange,
292
+ },
293
+ });
294
+ ctx.provenance.addNode({
295
+ id: toolResultNodeId,
296
+ kind: 'tool-result',
297
+ timestamp: dispatched.value.persisted.createdAt,
298
+ });
299
+ ctx.provenance.addEdge({
300
+ from: toolCallNodeId,
301
+ to: modelCallNodeId,
302
+ kind: 'invoked',
303
+ });
304
+ ctx.provenance.addEdge({
305
+ from: toolResultNodeId,
306
+ to: toolCallNodeId,
307
+ kind: 'produced',
308
+ });
309
+ }
310
+ }
311
+ const forwarded = {
312
+ step: partial.step,
313
+ finishReason: partial.finishReason,
314
+ message: assistantMsg,
315
+ iterationAppended,
316
+ iterationUsage: partial.iterationUsage,
317
+ provider: partial.provider,
318
+ nextMessages,
319
+ hasToolCalls: true,
320
+ };
321
+ return forwarded;
322
+ };
323
+ }
324
+ /**
325
+ * Store the assistant message that makes the calls — or, resumed after a
326
+ * park in this step, take the one stored before the park.
327
+ */
328
+ async function persistToolCallMessage(ctx, assistantMsg, step) {
329
+ const callIds = (assistantMsg.toolCalls ?? []).map((tc) => tc.id);
330
+ const stored = takeStoredBeforePark(ctx, (m) => m.role === 'agent' && sameCalls(m, callIds));
331
+ if (stored !== undefined)
332
+ return stored;
333
+ const persisted = await ctx.bindings.conversationBinding.appendMessage({
334
+ tenantId: ctx.input.tenantId,
335
+ conversationId: ctx.input.conversationId,
336
+ role: 'agent',
337
+ content: {
338
+ text: assistantMsg.content,
339
+ toolCalls: (assistantMsg.toolCalls ?? []).map((tc) => ({ ...tc })),
340
+ },
341
+ actor: ctx.input.agent.id,
342
+ isIntermediate: true,
343
+ });
344
+ if (persisted.kind === 'err')
345
+ throwAgentTurnFailure(persisted.error);
346
+ ctx.appended.push(persisted.value);
347
+ await emitTurnEvent(ctx.bindings.onEvent, {
348
+ kind: 'agent.message',
349
+ step,
350
+ isFinal: false,
351
+ message: persisted.value,
352
+ });
353
+ return persisted.value;
354
+ }
355
+ /** Take the first message stored before the park that matches. */
356
+ function takeStoredBeforePark(ctx, matches) {
357
+ const index = ctx.storedBeforePark?.findIndex(matches) ?? -1;
358
+ if (index < 0)
359
+ return undefined;
360
+ return ctx.storedBeforePark?.splice(index, 1)[0];
361
+ }
362
+ function sameCalls(m, callIds) {
363
+ const calls = m.content
364
+ .toolCalls;
365
+ return (Array.isArray(calls) &&
366
+ calls.length === callIds.length &&
367
+ calls.every((c, i) => c.id === callIds[i]));
368
+ }
369
+ /** A stored tool result, as the model sees it. */
370
+ function toolMessageOf(stored, callId) {
371
+ return {
372
+ role: 'tool',
373
+ content: typeof stored.content === 'string' ? stored.content : JSON.stringify(stored.content),
374
+ toolCallId: callId,
375
+ };
376
+ }
377
+ /**
378
+ * Record a result the framework writes for a call (a rejection, a failed
379
+ * call sent back to the model) the way a tool's own result is recorded:
380
+ * persisted to the conversation with the call it answers, and added to
381
+ * the messages the next model call sees.
382
+ */
383
+ async function appendToolResult(ctx, call, output, target) {
384
+ const persisted = await ctx.bindings.conversationBinding.appendMessage({
385
+ tenantId: ctx.input.tenantId,
386
+ conversationId: ctx.input.conversationId,
387
+ role: 'tool',
388
+ content: output,
389
+ toolCall: { toolId: target.toolId, invocationId: call.id },
390
+ });
391
+ if (persisted.kind === 'err')
392
+ throwAgentTurnFailure(persisted.error);
393
+ ctx.appended.push(persisted.value);
394
+ target.iterationAppended.push(persisted.value);
395
+ return [
396
+ ...target.nextMessages,
397
+ { role: 'tool', content: JSON.stringify(output), toolCallId: call.id },
398
+ ];
399
+ }
400
+ /**
401
+ * A failed call the turn's policy retries goes back to the model as its
402
+ * result, while retries are left; anything else fails the turn, with the
403
+ * retries it took when the kind is one the policy retries.
404
+ */
405
+ async function retryOrFail(ctx, call, error, issues, target) {
406
+ const policy = ctx.toolErrorPolicy ?? effectiveToolErrorPolicy(ctx.input.agent.toolErrors, undefined);
407
+ const kind = toolErrorKindOf(error);
408
+ const used = toolRetriesSoFar(target.nextMessages);
409
+ if (!policy.retryOn.has(kind))
410
+ throwAgentTurnFailure(error);
411
+ if (used >= policy.maxRetries)
412
+ throwAgentTurnFailure({ ...error, toolRetries: used });
413
+ return appendToolResult(ctx, call, toolErrorResult(kind, error.message, issues), target);
414
+ }
415
+ async function dispatchOne(ctx, tool, call, runId) {
416
+ const toolCtx = {
417
+ tenantId: ctx.input.tenantId,
418
+ runId,
419
+ requestId: call.id,
420
+ abortSignal: ctx.turnAbort.signal,
421
+ // HTTP tools built via defineTool({spec: {kind: 'http'}}) resolve declared
422
+ // secret_refs at invoke time. Present iff the caller wired
423
+ // `bindings.resolveSecret` from a tenant-scoped `SecretBinding`.
424
+ ...(ctx.bindings.resolveSecret !== undefined && { resolveSecret: ctx.bindings.resolveSecret }),
425
+ };
426
+ const result = await invokeTool(tool, call.arguments, toolCtx);
427
+ if (result.kind === 'err') {
428
+ // Hoist AJV validation detail from the inner error so it survives
429
+ // `toWireError` (which filters `cause` to avoid Error-instance /
430
+ // cycle hazards). Two validation paths emit different field names
431
+ // for the AJV array:
432
+ // - `packages/handler-runtime/src/handler-runner.ts` (pack code,
433
+ // run by the pack service) → `issues`
434
+ // - `packages/tools/src/invoke.ts` (in-process dispatch) → `errors`
435
+ // Accept either. If neither shape is present, no hoisting —
436
+ // the outer `tool-invocation-failed` stays minimal.
437
+ const inner = result.error;
438
+ const rawIssues = Array.isArray(inner.issues)
439
+ ? inner.issues
440
+ : Array.isArray(inner.errors)
441
+ ? inner.errors
442
+ : undefined;
443
+ const isValidationFailure = inner.code === 'input-validation-failed' && rawIssues !== undefined;
444
+ return {
445
+ kind: 'err',
446
+ error: {
447
+ code: 'tool-invocation-failed',
448
+ message: result.error.message,
449
+ toolId: call.name,
450
+ cause: result.error,
451
+ ...(isValidationFailure && {
452
+ validationIssues: rawIssues,
453
+ receivedInput: truncateForWire(call.arguments),
454
+ }),
455
+ },
456
+ };
457
+ }
458
+ const persist = await ctx.bindings.conversationBinding.appendMessage({
459
+ tenantId: ctx.input.tenantId,
460
+ conversationId: ctx.input.conversationId,
461
+ role: 'tool',
462
+ content: result.value ?? '',
463
+ toolCall: { toolId: tool.id, invocationId: call.id },
464
+ });
465
+ if (persist.kind === 'err') {
466
+ // A DB failure persisting the tool result surfaces as the more
467
+ // generic invocation-failed to keep the caller's error shape stable.
468
+ return {
469
+ kind: 'err',
470
+ error: {
471
+ code: 'tool-invocation-failed',
472
+ message: persist.error.message,
473
+ toolId: tool.id,
474
+ cause: persist.error,
475
+ },
476
+ };
477
+ }
478
+ return {
479
+ kind: 'ok',
480
+ value: {
481
+ persisted: persist.value,
482
+ toolMessage: {
483
+ role: 'tool',
484
+ content: typeof result.value === 'string' ? result.value : JSON.stringify(result.value),
485
+ toolCallId: call.id,
486
+ },
487
+ },
488
+ };
489
+ }
490
+ /**
491
+ * Cap `receivedInput` on validation errors so a huge tool-arg blob
492
+ * doesn't bloat the wire response body. 4 KiB stringified is
493
+ * comfortably larger than a typical LLM tool-call payload
494
+ * (place-name, query, message) but small enough that a
495
+ * pathological array/document truncates rather than round-trips
496
+ * megabytes. Truncated payloads land as a string with a trailing
497
+ * marker so callers can tell the value was elided.
498
+ */
499
+ function truncateForWire(input, maxBytes = 4096) {
500
+ let serialized;
501
+ try {
502
+ serialized = JSON.stringify(input);
503
+ }
504
+ catch {
505
+ return '<unserializable input>';
506
+ }
507
+ if (Buffer.byteLength(serialized, 'utf8') <= maxBytes)
508
+ return input;
509
+ return `${serialized.slice(0, maxBytes)}… (truncated at ${maxBytes} bytes)`;
510
+ }
511
+ //# sourceMappingURL=dispatch-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-tools.js","sourceRoot":"","sources":["../../src/handlers/dispatch-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import type { EvaluationResult } from '@kindgi/guardrails';
2
+ import type { PolicyKind } from '@kindgi/policy-contract';
3
+ import type { AgentError } from '../errors.js';
4
+ import type { GuardrailViolationError, HitlRequiredError, UnresolvedGuardrailError } from '../guardrails-gate.js';
5
+ /** Structured error returned to the caller when an agent turn fails. */
6
+ export type InvokeAgentError = AgentError | UnresolvedToolError | ToolVersionUnresolvableError | CapabilityRoutingError | ModelInvocationError | ToolInvocationError | BudgetExceededError | AgentTurnAbortedError | HitlRequiredError | GuardrailViolationError | UnresolvedGuardrailError | OutputSchemaViolationError | TenantPolicyUnavailableError;
7
+ /**
8
+ * A tenant policy the turn must apply couldn't be: its spec doesn't
9
+ * validate, or the policy registry failed. The turn doesn't run without
10
+ * it — skipping a tenant's `hitl` policy would skip its approvals.
11
+ */
12
+ export interface TenantPolicyUnavailableError {
13
+ readonly code: 'tenant-policy-unavailable';
14
+ readonly message: string;
15
+ readonly policyKind: PolicyKind;
16
+ }
17
+ export interface UnresolvedToolError {
18
+ readonly code: 'unresolved-tool';
19
+ readonly message: string;
20
+ readonly toolId: string;
21
+ /**
22
+ * Failed tool calls sent back to the model this turn before this one
23
+ * ended it (see `Agent.toolErrors`). Present when the failure is a
24
+ * kind the turn retries and its retries ran out.
25
+ */
26
+ readonly toolRetries?: number;
27
+ }
28
+ /**
29
+ * The agent references a tool that is registered but whose semver range
30
+ * does not match any registered version, or whose range is grammatically
31
+ * broken. Distinct from `unresolved-tool` (no id registered).
32
+ */
33
+ export interface ToolVersionUnresolvableError {
34
+ readonly code: 'tool-version-unresolvable';
35
+ readonly message: string;
36
+ readonly toolId: string;
37
+ readonly requestedRange: string;
38
+ readonly availableVersions?: readonly string[];
39
+ }
40
+ export interface CapabilityRoutingError {
41
+ readonly code: 'capability-routing-failed';
42
+ readonly message: string;
43
+ readonly cause: unknown;
44
+ }
45
+ export interface ModelInvocationError {
46
+ readonly code: 'model-invocation-failed';
47
+ readonly message: string;
48
+ readonly cause: unknown;
49
+ }
50
+ export interface ToolInvocationError {
51
+ readonly code: 'tool-invocation-failed';
52
+ readonly message: string;
53
+ readonly toolId: string;
54
+ readonly cause: unknown;
55
+ /**
56
+ * When the inner failure was an AJV input-schema validation, the
57
+ * validator's `errors[]` array. Hoisted from `cause` to the top
58
+ * level so it survives `toWireError` (which filters `cause` to
59
+ * avoid Error-instance / cycle serialization hazards). Consumers
60
+ * inspecting *which* field failed *how* read this; `fromWire` in
61
+ * `@kindgi/client` projects it back onto the client-side error.
62
+ */
63
+ readonly validationIssues?: readonly Readonly<Record<string, unknown>>[];
64
+ /**
65
+ * The exact payload the model produced that failed validation.
66
+ * Included so authors debugging LLM-tool-arg drift can see whether
67
+ * the model sent `{}`, `{ location: "" }`, `{ city: "…" }`
68
+ * (wrong field name), etc. without instrumenting their handler.
69
+ * Size-capped at ~4KiB stringified — larger payloads truncate
70
+ * with a trailing `…`; sensitive tools should sanitize inputs
71
+ * upstream.
72
+ */
73
+ readonly receivedInput?: unknown;
74
+ /**
75
+ * Failed tool calls sent back to the model this turn before this one
76
+ * ended it (see `Agent.toolErrors`). Present when the failure is a
77
+ * kind the turn retries and its retries ran out.
78
+ */
79
+ readonly toolRetries?: number;
80
+ }
81
+ export interface BudgetExceededError {
82
+ readonly code: 'budget-exceeded';
83
+ readonly message: string;
84
+ readonly kind: 'steps' | 'cost' | 'wall-time';
85
+ readonly limit: number;
86
+ readonly observed: number;
87
+ }
88
+ /**
89
+ * The agent declares an `output` schema and its final answer still
90
+ * didn't fit after the allowed repairs. `errors` lists the last
91
+ * attempt's problems; `attempts` counts the answers checked.
92
+ */
93
+ export interface OutputSchemaViolationError {
94
+ readonly code: 'output-schema-violation';
95
+ readonly message: string;
96
+ readonly errors: readonly string[];
97
+ readonly attempts: number;
98
+ }
99
+ export interface AgentTurnAbortedError {
100
+ readonly code: 'agent-turn-aborted';
101
+ readonly message: string;
102
+ readonly reason: 'external' | 'timeout';
103
+ }
104
+ /**
105
+ * Thrown by a node handler when a precondition fails or a runtime step
106
+ * short-circuits with a structured error. The kernel captures
107
+ * `Error.message` into `step.failed.payload.message`; we serialize the
108
+ * full structured error as JSON so `projectRunResult` can recover the
109
+ * discriminated union shape on the way out.
110
+ *
111
+ * Deliberately narrowed to `Error` subclass so `cause` becomes a plain
112
+ * property (JSON-round-trippable) instead of the native ErrorOptions
113
+ * behavior.
114
+ */
115
+ export declare class AgentTurnFailure extends Error {
116
+ readonly payload: InvokeAgentError;
117
+ constructor(payload: InvokeAgentError);
118
+ }
119
+ /**
120
+ * Attempt to reconstruct a structured `InvokeAgentError` from a run's
121
+ * `failureMessage`. Returns `undefined` when the message is not one of
122
+ * ours (e.g. a raw kernel-level exception message).
123
+ */
124
+ export declare function parseFailureMessage(raw: string | undefined): InvokeAgentError | undefined;
125
+ /** Helper for handlers to short-circuit with a structured error. */
126
+ export declare function throwAgentTurnFailure(error: InvokeAgentError): never;
127
+ /**
128
+ * Placeholder to satisfy TS-strict "declared but unused" on
129
+ * `EvaluationResult` in ambient imports elsewhere; the type is used
130
+ * transitively via `GuardrailViolationError`.
131
+ */
132
+ export type _EvaluationResultAlias = EvaluationResult;
133
+ //# sourceMappingURL=errors.d.ts.map