@kindgi/agents 0.0.0-bootstrap.0 → 0.1.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 (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,74 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ //
4
+ // Effective HITL policy resolver — computes the runtime policy that
5
+ // gates + timeouts consult, merging in this order:
6
+ //
7
+ // 1. Framework defaults (session gate off, no tool gates, 24h timeout,
8
+ // standard reviewer, `escalate` on timeout).
9
+ // 2. Agent's `conversationPolicy.hitl` (and `hitlAfterTurns`).
10
+ // 3. The tenant's `hitl` policy (`HitlSpec`) — only stricter: it can
11
+ // shorten the timeout, raise the reviewer role, and set a floor
12
+ // under a tool's gate, never loosen.
13
+ //
14
+ // The agent turn resolves it once, at the start (see
15
+ // `resolveTurnHitlPolicy`), instead of reading
16
+ // `agent.conversationPolicy.hitl` directly.
17
+ //
18
+ import { higherRole, toolHitlRule } from '@kindgi/policy-contract';
19
+ /**
20
+ * Framework defaults. Every field non-optional so the resolver's
21
+ * return type is fully-populated regardless of caller policy state.
22
+ */
23
+ const FRAMEWORK_DEFAULTS = {
24
+ defaultReviewerRole: 'standard',
25
+ timeoutMs: 24 * 60 * 60 * 1000,
26
+ onTimeout: 'escalate',
27
+ };
28
+ /**
29
+ * Compute the effective HITL policy for a given (tenant, agent) pair:
30
+ * framework defaults overlaid with the agent's policy, then held to the
31
+ * tenant's `hitl` policy (only stricter). `tenant: undefined` — the
32
+ * tenant has none.
33
+ */
34
+ export function resolveEffectiveHitlPolicy(input) {
35
+ const agentHitl = input.agent.conversationPolicy?.hitl;
36
+ const legacyAfterTurns = input.agent.conversationPolicy?.hitlAfterTurns;
37
+ const agentAfterTurns = agentHitl?.afterTurns ?? legacyAfterTurns;
38
+ const merged = {
39
+ defaultReviewerRole: agentHitl?.defaultReviewerRole ?? FRAMEWORK_DEFAULTS.defaultReviewerRole,
40
+ timeoutMs: agentHitl?.timeoutMs ?? FRAMEWORK_DEFAULTS.timeoutMs,
41
+ onTimeout: FRAMEWORK_DEFAULTS.onTimeout,
42
+ };
43
+ if (agentAfterTurns !== undefined) {
44
+ merged.turn = { afterTurns: agentAfterTurns };
45
+ }
46
+ const agentToolsPolicy = agentHitl?.tools;
47
+ if (agentToolsPolicy !== undefined) {
48
+ const overrides = new Map();
49
+ if (agentToolsPolicy.overrides !== undefined) {
50
+ for (const [k, v] of Object.entries(agentToolsPolicy.overrides)) {
51
+ overrides.set(k, typeof v === 'string' ? { mode: v } : v);
52
+ }
53
+ }
54
+ merged.tools = {
55
+ ...(agentToolsPolicy.default !== undefined && { default: agentToolsPolicy.default }),
56
+ overrides,
57
+ };
58
+ }
59
+ // The tenant's policy — only stricter.
60
+ const tenant = input.tenant;
61
+ if (tenant !== undefined) {
62
+ if (tenant.maxTimeoutMs !== undefined && merged.timeoutMs > tenant.maxTimeoutMs) {
63
+ merged.timeoutMs = tenant.maxTimeoutMs;
64
+ }
65
+ merged.defaultReviewerRole =
66
+ higherRole(merged.defaultReviewerRole, tenant.minReviewerRole) ?? merged.defaultReviewerRole;
67
+ const floors = Object.entries(tenant.tools ?? {});
68
+ if (floors.length > 0) {
69
+ merged.toolFloors = new Map(floors.map(([toolId, value]) => [toolId, toolHitlRule(value)]));
70
+ }
71
+ }
72
+ return merged;
73
+ }
74
+ //# sourceMappingURL=hitl-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hitl-policy.js","sourceRoot":"","sources":["../src/hitl-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type { AppendMessageInput, ConversationBinding, ConversationPage, ConversationPageCursor, ListConversationsInput, ListConversationsPageInput, OpenConversationInput, ReadMessagesInput, } from './conversation-binding.js';
2
+ export type { RunSnapshotBinding, RunSnapshotRecord, RunSnapshotWriteInput, } from './run-snapshot-binding.js';
3
+ export { defineAgent } from './define.js';
4
+ export type { DefineAgentSpec } from './define.js';
5
+ export { resolveEffectiveHitlPolicy } from './hitl-policy.js';
6
+ export type { EffectiveHitlPolicy } from './hitl-policy.js';
7
+ export { agentStepOutput, invokeAgent, resumeAgentTurn } from './invoke.js';
8
+ export type { AgentStepOutput, AgentTurnAbortedError, AgentTurnResult, AgentTurnUsage, AgentTurnWarning, BudgetExceededError, CapabilityRoutingError, InvokeAgentBindings, InvokeAgentError, InvokeAgentInput, ModelInvocationError, OutputSchemaViolationError, ResumeAgentTurnInput, ToolInvocationError, UnresolvedToolError, } from './invoke.js';
9
+ export { buildRunTrace, categorizeOutcomes, evaluateGate, evaluateSessionGate, resolveGuardrails, } from './guardrails-gate.js';
10
+ export type { HitlRequiredError, GuardrailViolationError, GuardrailsBindings, SessionGateResult, UnresolvedGuardrailError, } from './guardrails-gate.js';
11
+ export { persistProvenance } from './provenance-emit.js';
12
+ export type { ProvenanceBindings } from './provenance-emit.js';
13
+ export type { AgentMessageEvent, GuardrailViolatedEvent, ModelCallCompletedEvent, ModelCallStartedEvent, OnTurnEvent, RetrievalCompletedEvent, ToolCompletedEvent, ToolFailedEvent, ToolStartedEvent, TurnCompletedEvent, TurnEvent, TurnFailedEvent, TurnStartedEvent, } from './streaming.js';
14
+ export { AUTO_INJECTED_VARS, renderInstructions } from './prompt.js';
15
+ export { formatRetrievedForPrompt, runRetrievals } from './retrieval.js';
16
+ export type { RetrievalBindings } from './retrieval.js';
17
+ export type { MissingParameterError, PromptRenderError, RenderContext, RenderFailureError, RenderResult, } from './prompt.js';
18
+ export { createAgentRegistry } from './registry.js';
19
+ export type { AgentRegistry } from './registry.js';
20
+ export { AGENTS_TENANT_SCOPED_TABLES, agentConversations, agentRunSnapshots, } from './schema.js';
21
+ export type { AgentConversationRow, AgentRunSnapshotRow, NewAgentConversationRow, NewAgentRunSnapshotRow, } from './schema.js';
22
+ export type { Agent, AgentBindings, AgentId, AgentOutputSpec, Conversation, ConversationId, ConversationMessage, ConversationPolicy, MessageRole, PromptParameter, RetrievalIntent, RetrievedFact, ToolRef, TurnBudget, } from './types.js';
23
+ export { DEFAULT_TOOL_ERRORS, effectiveToolErrorPolicy } from './handlers/tool-errors.js';
24
+ export type { ToolErrorPolicy, ToolErrorResult } from './handlers/tool-errors.js';
25
+ export type { ToolErrorKind, ToolErrorsSpec } from '@kindgi/policy-contract';
26
+ export type { AgentAlreadyRegisteredError, AgentError, AgentNotFoundError, AgentVersionMismatchError, ConversationClosedError, ConversationNotFoundError, InvalidAgentError, InvalidMessageError, PersistenceError, } from './errors.js';
27
+ export { CURRENT_AGENTS_PAYLOAD_VERSION, unwrap, unwrapOrThrow, wrap } from './versioning.js';
28
+ export type { EnvelopeError, MalformedEnvelopeError, UnsupportedPayloadVersionError, } from './versioning.js';
29
+ export { AGENTS_MIGRATIONS_DIR } from './migrations-dir.js';
30
+ export { AGENT_LOOP_NODE, AGENT_TURN_FLOW, AGENT_TURN_FLOW_ID, AGENT_TURN_FLOW_VERSION, AGENT_TURN_LOOP_MAX_ITERATIONS, BUDGET_CHECK_NODE, BUILD_INITIAL_MESSAGES_NODE, COMPOSE_RESULT_NODE, DISPATCH_TOOLS_NODE, EVALUATE_GUARDRAILS_NODE, MODEL_CALL_NODE, PERSIST_FINAL_MESSAGE_NODE, PERSIST_PROVENANCE_NODE, PERSIST_USER_MESSAGE_NODE, RENDER_PROMPT_NODE, RUN_RETRIEVALS_NODE, SETUP_NODE, } from './agent-turn-flow.js';
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ export { defineAgent } from './define.js';
4
+ export { resolveEffectiveHitlPolicy } from './hitl-policy.js';
5
+ export { agentStepOutput, invokeAgent, resumeAgentTurn } from './invoke.js';
6
+ export { buildRunTrace, categorizeOutcomes, evaluateGate, evaluateSessionGate, resolveGuardrails, } from './guardrails-gate.js';
7
+ export { persistProvenance } from './provenance-emit.js';
8
+ export { AUTO_INJECTED_VARS, renderInstructions } from './prompt.js';
9
+ export { formatRetrievedForPrompt, runRetrievals } from './retrieval.js';
10
+ export { createAgentRegistry } from './registry.js';
11
+ export { AGENTS_TENANT_SCOPED_TABLES, agentConversations, agentRunSnapshots, } from './schema.js';
12
+ export { DEFAULT_TOOL_ERRORS, effectiveToolErrorPolicy } from './handlers/tool-errors.js';
13
+ export { CURRENT_AGENTS_PAYLOAD_VERSION, unwrap, unwrapOrThrow, wrap } from './versioning.js';
14
+ export { AGENTS_MIGRATIONS_DIR } from './migrations-dir.js';
15
+ // ============ Built-in agent-turn flow ============
16
+ // The flow every agent turn runs on, plus its node IDs — the same IDs
17
+ // that appear in run journals, exported so consumers can match on them.
18
+ export { AGENT_LOOP_NODE, AGENT_TURN_FLOW, AGENT_TURN_FLOW_ID, AGENT_TURN_FLOW_VERSION, AGENT_TURN_LOOP_MAX_ITERATIONS, BUDGET_CHECK_NODE, BUILD_INITIAL_MESSAGES_NODE, COMPOSE_RESULT_NODE, DISPATCH_TOOLS_NODE, EVALUATE_GUARDRAILS_NODE, MODEL_CALL_NODE, PERSIST_FINAL_MESSAGE_NODE, PERSIST_PROVENANCE_NODE, PERSIST_USER_MESSAGE_NODE, RENDER_PROMPT_NODE, RUN_RETRIEVALS_NODE, SETUP_NODE, } from './agent-turn-flow.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAiBjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkB5E,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAiBzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAuBrB,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAc1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qDAAqD;AACrD,sEAAsE;AACtE,wEAAwE;AACxE,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,EAC9B,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,GACX,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { Result, RunId, TenantId } from '@kindgi/types';
2
+ import { type InvokeAgentError } from './handlers/errors.js';
3
+ import type { InvokeAgentBindings, InvokeAgentInput } from './handlers/public-types.js';
4
+ import type { AgentTurnResult } from './handlers/result-shape.js';
5
+ import type { Agent } from './types.js';
6
+ /**
7
+ * Execute one agent turn end-to-end as a flow run: one `runGraph`
8
+ * invocation (through `bindings.runBinding`) against
9
+ * `AGENT_TURN_FLOW`; handler modules under `./handlers/` implement
10
+ * each node. The run's outcome is projected back to an
11
+ * `AgentTurnResult` or an `InvokeAgentError`.
12
+ *
13
+ * Budgets enforced (all optional, all take agent-declared defaults):
14
+ * - `agent.budget.maxSteps` — cap on model↔tool iterations (default 8).
15
+ * - `agent.budget.maxCostUsd` — cumulative USD across model calls.
16
+ * - `agent.budget.maxWallMs` — wall-clock cap; combined with abortSignal.
17
+ */
18
+ export declare function invokeAgent(input: InvokeAgentInput, bindings: InvokeAgentBindings): Promise<Result<AgentTurnResult, InvokeAgentError>>;
19
+ export interface ResumeAgentTurnInput {
20
+ readonly tenantId: TenantId;
21
+ readonly runId: RunId;
22
+ /**
23
+ * The agent spec resolved at the target version. Callers of
24
+ * `resumeAgentTurn` are responsible for resolving `agentId +
25
+ * agentVersion` from the run snapshot against their agent registry
26
+ * (replay must match the version the run started on — see the setup
27
+ * handler's agent-version-mismatch guard).
28
+ */
29
+ readonly agent: Agent;
30
+ }
31
+ export declare function resumeAgentTurn(input: ResumeAgentTurnInput, bindings: InvokeAgentBindings): Promise<Result<AgentTurnResult, InvokeAgentError>>;
32
+ export type { AgentStepOutput, AgentTurnResult, AgentTurnUsage, AgentTurnWarning, } from './handlers/result-shape.js';
33
+ export { agentStepOutput } from './handlers/result-shape.js';
34
+ export type { AgentTurnAbortedError, BudgetExceededError, CapabilityRoutingError, InvokeAgentError, ModelInvocationError, OutputSchemaViolationError, ToolInvocationError, UnresolvedToolError, } from './handlers/errors.js';
35
+ export type { HitlBindings, HitlEnqueueInput, HitlEnqueueResult, InvokeAgentBindings, InvokeAgentInput, } from './handlers/public-types.js';
36
+ //# sourceMappingURL=invoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../src/invoke.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK7D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CA8DpD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAmDD,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CA2GpD;AAMD,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC"}
package/dist/invoke.js ADDED
@@ -0,0 +1,228 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { AGENT_TURN_FLOW } from './agent-turn-flow.js';
4
+ import { DEFAULT_MAX_WALL_MS } from './handlers/constants.js';
5
+ import { AgentTurnFailure } from './handlers/errors.js';
6
+ import { buildHandlers } from './handlers/index.js';
7
+ import { rehydrateTurnContext } from './handlers/rehydrate.js';
8
+ import { projectRunResult } from './project-run-result.js';
9
+ /**
10
+ * Execute one agent turn end-to-end as a flow run: one `runGraph`
11
+ * invocation (through `bindings.runBinding`) against
12
+ * `AGENT_TURN_FLOW`; handler modules under `./handlers/` implement
13
+ * each node. The run's outcome is projected back to an
14
+ * `AgentTurnResult` or an `InvokeAgentError`.
15
+ *
16
+ * Budgets enforced (all optional, all take agent-declared defaults):
17
+ * - `agent.budget.maxSteps` — cap on model↔tool iterations (default 8).
18
+ * - `agent.budget.maxCostUsd` — cumulative USD across model calls.
19
+ * - `agent.budget.maxWallMs` — wall-clock cap; combined with abortSignal.
20
+ */
21
+ export async function invokeAgent(input, bindings) {
22
+ const started = Date.now();
23
+ const maxWallMs = input.agent.budget?.maxWallMs ?? DEFAULT_MAX_WALL_MS;
24
+ const controller = new AbortController();
25
+ const ctx = {
26
+ input,
27
+ bindings,
28
+ turnAbort: controller,
29
+ startedAt: started,
30
+ appended: [],
31
+ usage: {
32
+ steps: 0,
33
+ promptTokens: 0,
34
+ completionTokens: 0,
35
+ totalCostUsd: 0,
36
+ },
37
+ abortReason: undefined,
38
+ };
39
+ const timer = setTimeout(() => {
40
+ ctx.abortReason = 'timeout';
41
+ controller.abort(new Error('wall-clock budget exhausted'));
42
+ }, maxWallMs);
43
+ if (input.abortSignal !== undefined) {
44
+ const external = input.abortSignal;
45
+ if (external.aborted) {
46
+ ctx.abortReason = 'external';
47
+ controller.abort(external.reason);
48
+ }
49
+ else {
50
+ external.addEventListener('abort', () => {
51
+ ctx.abortReason = 'external';
52
+ controller.abort(external.reason);
53
+ });
54
+ }
55
+ }
56
+ try {
57
+ const handlers = buildHandlers(ctx);
58
+ if (bindings.runBinding === undefined) {
59
+ throw new Error('invokeAgent: bindings.runBinding is required — pass the RunBinding (from @kindgi/runtime) of the runtime that executes the turn.');
60
+ }
61
+ const runResult = await bindings.runBinding.runGraph({
62
+ tenantId: input.tenantId,
63
+ projectId: input.projectId,
64
+ flow: AGENT_TURN_FLOW,
65
+ handlers,
66
+ input: input.userMessage,
67
+ ...(input.parent !== undefined && { parent: input.parent }),
68
+ ...(input.dryRun === true && { options: { dryRun: true } }),
69
+ // Authorization — carry principal + authz into the run so every
70
+ // tool invocation inside the agent's turn is checked.
71
+ ...(input.principal !== undefined && { principal: input.principal }),
72
+ ...(input.authz !== undefined && { authz: input.authz }),
73
+ });
74
+ return await projectRunResult(runResult, ctx);
75
+ }
76
+ finally {
77
+ clearTimeout(timer);
78
+ }
79
+ }
80
+ /**
81
+ * Resume a suspended agent turn — invoked after a kernel waitpoint
82
+ * resolves (e.g. a HITL approval completes). Loads the reconstruction
83
+ * snapshot written by the setup handler, rebuilds an equivalent
84
+ * `InvokeAgentInput` + `TurnContext`, then calls
85
+ * `bindings.runBinding.resumeRun`, which replays the flow from the
86
+ * journal.
87
+ *
88
+ * Same runId, same conversationId, same provenance record across the
89
+ * park-and-resume cycle. Any handler that was mid-execution when the
90
+ * wait suspended runs again from the top; `ctx.waitForToken` returns
91
+ * the resolved value from derived state instead of throwing another
92
+ * SuspensionSignal.
93
+ *
94
+ * Fails with `run-snapshot-missing` when no snapshot exists for the
95
+ * runId — this happens when the setup handler's snapshot write failed
96
+ * (the write is best-effort). Recovery: cancel the run explicitly;
97
+ * there is no way to reconstruct the InvokeAgentInput without the
98
+ * snapshot.
99
+ */
100
+ /**
101
+ * Rebuild a resumed turn's context from its journal (see
102
+ * `rehydrateTurnContext`). Returns the turn's error when it can't be
103
+ * rebuilt; `undefined` to go on and resume.
104
+ */
105
+ async function rehydrateFromJournal(ctx, runId, runBinding) {
106
+ const journal = await runBinding.readJournal(ctx.input.tenantId, runId);
107
+ if (journal.kind === 'err') {
108
+ return {
109
+ kind: 'err',
110
+ error: {
111
+ code: 'run-journal-unavailable',
112
+ message: `Failed to read the journal of run ${runId}: ${journal.error.message}`,
113
+ },
114
+ };
115
+ }
116
+ try {
117
+ await rehydrateTurnContext(ctx, runId, journal.value);
118
+ return undefined;
119
+ }
120
+ catch (cause) {
121
+ if (cause instanceof AgentTurnFailure)
122
+ return { kind: 'err', error: cause.payload };
123
+ throw cause;
124
+ }
125
+ }
126
+ export async function resumeAgentTurn(input, bindings) {
127
+ // 1. Load the snapshot via the run-snapshot binding.
128
+ const snapshotResult = await bindings.runSnapshotBinding.read(input.tenantId, input.runId);
129
+ if (snapshotResult.kind === 'err') {
130
+ return {
131
+ kind: 'err',
132
+ error: {
133
+ code: 'run-snapshot-missing',
134
+ message: `Failed to load run snapshot for run ${input.runId}: ${snapshotResult.error.message}`,
135
+ },
136
+ };
137
+ }
138
+ const snapshot = snapshotResult.value;
139
+ if (snapshot === null) {
140
+ return {
141
+ kind: 'err',
142
+ error: {
143
+ code: 'run-snapshot-missing',
144
+ message: `No run snapshot for run ${input.runId} — resume-context unavailable.`,
145
+ },
146
+ };
147
+ }
148
+ // 2. Agent-version sanity check — the caller passes the Agent spec they
149
+ // resolved via the registry; we refuse if it doesn't match the pinned
150
+ // version in the snapshot. Mirrors the setup handler's guard.
151
+ if (snapshot.agentId !== input.agent.id ||
152
+ snapshot.agentVersion !== input.agent.version) {
153
+ return {
154
+ kind: 'err',
155
+ error: {
156
+ code: 'agent-version-mismatch',
157
+ message: `Snapshot pinned to ${snapshot.agentId}@${snapshot.agentVersion}; resume called with ${input.agent.id}@${input.agent.version}`,
158
+ expectedVersion: snapshot.agentVersion,
159
+ actualVersion: input.agent.version,
160
+ },
161
+ };
162
+ }
163
+ // 3. Reconstruct the InvokeAgentInput envelope from the snapshot.
164
+ const reconstructedInput = {
165
+ tenantId: snapshot.tenantId,
166
+ projectId: snapshot.projectId,
167
+ agent: input.agent,
168
+ conversationId: snapshot.conversationId,
169
+ userMessage: snapshot.userMessage,
170
+ ...(snapshot.parameters !== undefined && { parameters: snapshot.parameters }),
171
+ ...(snapshot.input !== undefined && { input: snapshot.input }),
172
+ ...(snapshot.participantId !== undefined && { participantId: snapshot.participantId }),
173
+ ...(snapshot.dryRun && { dryRun: true }),
174
+ ...(snapshot.principal !== undefined &&
175
+ snapshot.principal !== null && {
176
+ principal: snapshot.principal,
177
+ }),
178
+ ...(snapshot.authz !== undefined &&
179
+ snapshot.authz !== null && {
180
+ authz: snapshot.authz,
181
+ }),
182
+ };
183
+ // 4. Build the same TurnContext + handlers as invokeAgent().
184
+ const started = Date.now();
185
+ const maxWallMs = input.agent.budget?.maxWallMs ?? DEFAULT_MAX_WALL_MS;
186
+ const controller = new AbortController();
187
+ const ctx = {
188
+ input: reconstructedInput,
189
+ bindings,
190
+ turnAbort: controller,
191
+ startedAt: started,
192
+ appended: [],
193
+ usage: {
194
+ steps: 0,
195
+ promptTokens: 0,
196
+ completionTokens: 0,
197
+ totalCostUsd: 0,
198
+ },
199
+ abortReason: undefined,
200
+ };
201
+ const timer = setTimeout(() => {
202
+ ctx.abortReason = 'timeout';
203
+ controller.abort(new Error('wall-clock budget exhausted'));
204
+ }, maxWallMs);
205
+ try {
206
+ const handlers = buildHandlers(ctx);
207
+ if (bindings.runBinding === undefined) {
208
+ throw new Error('resumeAgentTurn: bindings.runBinding is required.');
209
+ }
210
+ // The kernel won't re-run the steps that completed before the park,
211
+ // and they kept their state on the in-memory context: rebuild it.
212
+ const rehydrated = await rehydrateFromJournal(ctx, input.runId, bindings.runBinding);
213
+ if (rehydrated !== undefined)
214
+ return rehydrated;
215
+ const runResult = await bindings.runBinding.resumeRun({
216
+ tenantId: reconstructedInput.tenantId,
217
+ runId: input.runId,
218
+ flow: AGENT_TURN_FLOW,
219
+ handlers,
220
+ });
221
+ return await projectRunResult(runResult, ctx);
222
+ }
223
+ finally {
224
+ clearTimeout(timer);
225
+ }
226
+ }
227
+ export { agentStepOutput } from './handlers/result-shape.js';
228
+ //# sourceMappingURL=invoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke.js","sourceRoot":"","sources":["../src/invoke.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Absolute path to the SQL migrations shipped with `@kindgi/agents`.
3
+ *
4
+ * Resolved from this module's own URL, so it is correct in every layout
5
+ * the package can be installed in (workspace checkout, a workspace in
6
+ * another repository, `node_modules`, `pnpm deploy` output) — from both
7
+ * `src/` and `dist/`. Migration runners use this instead of computing
8
+ * package-relative paths themselves.
9
+ */
10
+ export declare const AGENTS_MIGRATIONS_DIR: string;
11
+ //# sourceMappingURL=migrations-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-dir.d.ts","sourceRoot":"","sources":["../src/migrations-dir.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAEnC,CAAC"}
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { fileURLToPath } from 'node:url';
4
+ /**
5
+ * Absolute path to the SQL migrations shipped with `@kindgi/agents`.
6
+ *
7
+ * Resolved from this module's own URL, so it is correct in every layout
8
+ * the package can be installed in (workspace checkout, a workspace in
9
+ * another repository, `node_modules`, `pnpm deploy` output) — from both
10
+ * `src/` and `dist/`. Migration runners use this instead of computing
11
+ * package-relative paths themselves.
12
+ */
13
+ export const AGENTS_MIGRATIONS_DIR = fileURLToPath(new URL('../migrations/', import.meta.url));
14
+ //# sourceMappingURL=migrations-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations-dir.js","sourceRoot":"","sources":["../src/migrations-dir.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAW,aAAa,CACxD,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { KernelError, RunResult } from '@kindgi/runtime';
2
+ import type { Result } from '@kindgi/types';
3
+ import type { TurnContext } from './handlers/context.js';
4
+ import type { InvokeAgentError } from './handlers/errors.js';
5
+ import type { AgentTurnResult } from './handlers/result-shape.js';
6
+ /**
7
+ * Translate a kernel `Result<RunResult, KernelError>` into the
8
+ * caller-facing `Result<AgentTurnResult, InvokeAgentError>`. Rules:
9
+ *
10
+ * - Kernel-level errors (`handler-missing`, `flow-mismatch`,
11
+ * `journal-error`, `stuck`, `run-not-found`, etc.) map to
12
+ * `model-invocation-failed` with the KernelError as cause.
13
+ * - Run status `completed` — output is the `AgentTurnResult`
14
+ * composed by `compose-result`; unwrap and return `Result.ok`.
15
+ * - Run status `failed` — `failureMessage` was serialized by
16
+ * `AgentTurnFailure` on the throwing handler; parse back into
17
+ * structured `InvokeAgentError`. Fall back to
18
+ * `model-invocation-failed` if the message isn't ours.
19
+ * - Run status `cancelled` — external abort. Use `ctx.abortReason`
20
+ * to distinguish external vs timeout.
21
+ */
22
+ export declare function projectRunResult(kernelResult: Result<RunResult<AgentTurnResult>, KernelError>, ctx: TurnContext): Promise<Result<AgentTurnResult, InvokeAgentError>>;
23
+ //# sourceMappingURL=project-run-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-run-result.d.ts","sourceRoot":"","sources":["../src/project-run-result.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,EAC7D,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAmGpD"}
@@ -0,0 +1,116 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ import { parseFailureMessage } from './handlers/errors.js';
4
+ import { emitTurnEvent } from './streaming.js';
5
+ /**
6
+ * Translate a kernel `Result<RunResult, KernelError>` into the
7
+ * caller-facing `Result<AgentTurnResult, InvokeAgentError>`. Rules:
8
+ *
9
+ * - Kernel-level errors (`handler-missing`, `flow-mismatch`,
10
+ * `journal-error`, `stuck`, `run-not-found`, etc.) map to
11
+ * `model-invocation-failed` with the KernelError as cause.
12
+ * - Run status `completed` — output is the `AgentTurnResult`
13
+ * composed by `compose-result`; unwrap and return `Result.ok`.
14
+ * - Run status `failed` — `failureMessage` was serialized by
15
+ * `AgentTurnFailure` on the throwing handler; parse back into
16
+ * structured `InvokeAgentError`. Fall back to
17
+ * `model-invocation-failed` if the message isn't ours.
18
+ * - Run status `cancelled` — external abort. Use `ctx.abortReason`
19
+ * to distinguish external vs timeout.
20
+ */
21
+ export async function projectRunResult(kernelResult, ctx) {
22
+ if (kernelResult.kind === 'err') {
23
+ return {
24
+ kind: 'err',
25
+ error: {
26
+ code: 'model-invocation-failed',
27
+ message: `Kernel run failed: ${kernelResult.error.message}`,
28
+ cause: kernelResult.error,
29
+ },
30
+ };
31
+ }
32
+ const run = kernelResult.value;
33
+ if (run.status === 'completed') {
34
+ if (run.output === undefined) {
35
+ return {
36
+ kind: 'err',
37
+ error: {
38
+ code: 'model-invocation-failed',
39
+ message: 'Agent-turn run completed without emitting a result',
40
+ cause: null,
41
+ },
42
+ };
43
+ }
44
+ return { kind: 'ok', value: { ...run.output, status: 'completed' } };
45
+ }
46
+ // Park-and-resume: the run suspended on a waitpoint (the setup
47
+ // handler's session-HITL gate or a tool-level gate in the
48
+ // dispatch-tools handler). Turn hasn't produced a response yet — the
49
+ // reviewer's decision will resume the flow, and the resumed run's
50
+ // completion produces the final AgentTurnResult in a follow-up call
51
+ // (via resumeAgentTurn). An HTTP caller surfaces status='suspended'
52
+ // to its client. Return a minimally-shaped AgentTurnResult so
53
+ // kind='ok' is honest — the parked run is a successful start, not a
54
+ // failure.
55
+ if (run.status === 'suspended') {
56
+ return {
57
+ kind: 'ok',
58
+ value: {
59
+ runId: run.runId,
60
+ conversationId: ctx.input.conversationId,
61
+ turnNumber: 0,
62
+ appended: [],
63
+ response: {
64
+ role: 'assistant',
65
+ content: '',
66
+ },
67
+ retrieved: [],
68
+ violations: [],
69
+ usage: {
70
+ steps: 0,
71
+ promptTokens: 0,
72
+ completionTokens: 0,
73
+ totalCostUsd: 0,
74
+ durationMs: Date.now() - ctx.startedAt,
75
+ },
76
+ provider: { id: '', model: '' },
77
+ status: 'suspended',
78
+ },
79
+ };
80
+ }
81
+ if (run.status === 'cancelled') {
82
+ const err = {
83
+ code: 'agent-turn-aborted',
84
+ message: `Agent turn cancelled${run.failureMessage !== undefined ? `: ${run.failureMessage}` : ''}`,
85
+ reason: ctx.abortReason ?? 'external',
86
+ };
87
+ await emitTurnEvent(ctx.bindings.onEvent, {
88
+ kind: 'turn.failed',
89
+ conversationId: ctx.input.conversationId,
90
+ errorCode: err.code,
91
+ message: err.message,
92
+ });
93
+ return { kind: 'err', error: err };
94
+ }
95
+ // Failed
96
+ const parsed = parseFailureMessage(run.failureMessage);
97
+ if (parsed !== undefined) {
98
+ // For failed runs, `turn.failed` is emitted only for guardrail
99
+ // violations, by the evaluate-guardrails handler — nothing to emit
100
+ // here.
101
+ if (parsed.code === 'guardrail-violation') {
102
+ // Already emitted by the evaluate-guardrails handler — skip.
103
+ }
104
+ return { kind: 'err', error: parsed };
105
+ }
106
+ // Unstructured failure — a bare exception the handlers didn't wrap.
107
+ return {
108
+ kind: 'err',
109
+ error: {
110
+ code: 'model-invocation-failed',
111
+ message: run.failureMessage ?? 'Agent turn failed',
112
+ cause: null,
113
+ },
114
+ };
115
+ }
116
+ //# sourceMappingURL=project-run-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-run-result.js","sourceRoot":"","sources":["../src/project-run-result.ts"],"names":[],"mappings":"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"}