@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.
- package/LICENSE +201 -0
- package/README.md +131 -2
- package/dist/agent-turn-flow.d.ts +57 -0
- package/dist/agent-turn-flow.d.ts.map +1 -0
- package/dist/agent-turn-flow.js +172 -0
- package/dist/agent-turn-flow.js.map +1 -0
- package/dist/conversation-binding.d.ts +111 -0
- package/dist/conversation-binding.d.ts.map +1 -0
- package/dist/conversation-binding.js +4 -0
- package/dist/conversation-binding.js.map +1 -0
- package/dist/define.d.ts +180 -0
- package/dist/define.d.ts.map +1 -0
- package/dist/define.js +361 -0
- package/dist/define.js.map +1 -0
- package/dist/errors.d.ts +62 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +4 -0
- package/dist/errors.js.map +1 -0
- package/dist/guardrails-gate.d.ts +169 -0
- package/dist/guardrails-gate.d.ts.map +1 -0
- package/dist/guardrails-gate.js +202 -0
- package/dist/guardrails-gate.js.map +1 -0
- package/dist/handlers/budget-check.d.ts +22 -0
- package/dist/handlers/budget-check.d.ts.map +1 -0
- package/dist/handlers/budget-check.js +109 -0
- package/dist/handlers/budget-check.js.map +1 -0
- package/dist/handlers/build-initial-messages.d.ts +17 -0
- package/dist/handlers/build-initial-messages.d.ts.map +1 -0
- package/dist/handlers/build-initial-messages.js +86 -0
- package/dist/handlers/build-initial-messages.js.map +1 -0
- package/dist/handlers/compose-result.d.ts +10 -0
- package/dist/handlers/compose-result.d.ts.map +1 -0
- package/dist/handlers/compose-result.js +79 -0
- package/dist/handlers/compose-result.js.map +1 -0
- package/dist/handlers/constants.d.ts +8 -0
- package/dist/handlers/constants.d.ts.map +1 -0
- package/dist/handlers/constants.js +10 -0
- package/dist/handlers/constants.js.map +1 -0
- package/dist/handlers/context.d.ts +210 -0
- package/dist/handlers/context.d.ts.map +1 -0
- package/dist/handlers/context.js +4 -0
- package/dist/handlers/context.js.map +1 -0
- package/dist/handlers/dispatch-tools.d.ts +15 -0
- package/dist/handlers/dispatch-tools.d.ts.map +1 -0
- package/dist/handlers/dispatch-tools.js +511 -0
- package/dist/handlers/dispatch-tools.js.map +1 -0
- package/dist/handlers/errors.d.ts +133 -0
- package/dist/handlers/errors.d.ts.map +1 -0
- package/dist/handlers/errors.js +134 -0
- package/dist/handlers/errors.js.map +1 -0
- package/dist/handlers/evaluate-guardrails.d.ts +14 -0
- package/dist/handlers/evaluate-guardrails.d.ts.map +1 -0
- package/dist/handlers/evaluate-guardrails.js +128 -0
- package/dist/handlers/evaluate-guardrails.js.map +1 -0
- package/dist/handlers/final-iteration.d.ts +7 -0
- package/dist/handlers/final-iteration.d.ts.map +1 -0
- package/dist/handlers/final-iteration.js +26 -0
- package/dist/handlers/final-iteration.js.map +1 -0
- package/dist/handlers/index.d.ts +5 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +41 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/model-call.d.ts +13 -0
- package/dist/handlers/model-call.d.ts.map +1 -0
- package/dist/handlers/model-call.js +136 -0
- package/dist/handlers/model-call.js.map +1 -0
- package/dist/handlers/persist-final-message.d.ts +14 -0
- package/dist/handlers/persist-final-message.d.ts.map +1 -0
- package/dist/handlers/persist-final-message.js +54 -0
- package/dist/handlers/persist-final-message.js.map +1 -0
- package/dist/handlers/persist-provenance.d.ts +12 -0
- package/dist/handlers/persist-provenance.d.ts.map +1 -0
- package/dist/handlers/persist-provenance.js +34 -0
- package/dist/handlers/persist-provenance.js.map +1 -0
- package/dist/handlers/persist-user-message.d.ts +15 -0
- package/dist/handlers/persist-user-message.d.ts.map +1 -0
- package/dist/handlers/persist-user-message.js +59 -0
- package/dist/handlers/persist-user-message.js.map +1 -0
- package/dist/handlers/public-types.d.ts +201 -0
- package/dist/handlers/public-types.d.ts.map +1 -0
- package/dist/handlers/public-types.js +4 -0
- package/dist/handlers/public-types.js.map +1 -0
- package/dist/handlers/rehydrate.d.ts +8 -0
- package/dist/handlers/rehydrate.d.ts.map +1 -0
- package/dist/handlers/rehydrate.js +94 -0
- package/dist/handlers/rehydrate.js.map +1 -0
- package/dist/handlers/render-prompt.d.ts +12 -0
- package/dist/handlers/render-prompt.d.ts.map +1 -0
- package/dist/handlers/render-prompt.js +41 -0
- package/dist/handlers/render-prompt.js.map +1 -0
- package/dist/handlers/resolve-tools.d.ts +10 -0
- package/dist/handlers/resolve-tools.d.ts.map +1 -0
- package/dist/handlers/resolve-tools.js +55 -0
- package/dist/handlers/resolve-tools.js.map +1 -0
- package/dist/handlers/result-shape.d.ts +94 -0
- package/dist/handlers/result-shape.d.ts.map +1 -0
- package/dist/handlers/result-shape.js +19 -0
- package/dist/handlers/result-shape.js.map +1 -0
- package/dist/handlers/run-retrievals.d.ts +10 -0
- package/dist/handlers/run-retrievals.d.ts.map +1 -0
- package/dist/handlers/run-retrievals.js +64 -0
- package/dist/handlers/run-retrievals.js.map +1 -0
- package/dist/handlers/run-snapshot.d.ts +4 -0
- package/dist/handlers/run-snapshot.d.ts.map +1 -0
- package/dist/handlers/run-snapshot.js +26 -0
- package/dist/handlers/run-snapshot.js.map +1 -0
- package/dist/handlers/setup.d.ts +25 -0
- package/dist/handlers/setup.d.ts.map +1 -0
- package/dist/handlers/setup.js +231 -0
- package/dist/handlers/setup.js.map +1 -0
- package/dist/handlers/structured-output.d.ts +38 -0
- package/dist/handlers/structured-output.d.ts.map +1 -0
- package/dist/handlers/structured-output.js +89 -0
- package/dist/handlers/structured-output.js.map +1 -0
- package/dist/handlers/tool-errors.d.ts +56 -0
- package/dist/handlers/tool-errors.d.ts.map +1 -0
- package/dist/handlers/tool-errors.js +73 -0
- package/dist/handlers/tool-errors.js.map +1 -0
- package/dist/handlers/tool-hitl.d.ts +45 -0
- package/dist/handlers/tool-hitl.d.ts.map +1 -0
- package/dist/handlers/tool-hitl.js +81 -0
- package/dist/handlers/tool-hitl.js.map +1 -0
- package/dist/handlers/turn-environment.d.ts +26 -0
- package/dist/handlers/turn-environment.d.ts.map +1 -0
- package/dist/handlers/turn-environment.js +154 -0
- package/dist/handlers/turn-environment.js.map +1 -0
- package/dist/hitl-policy.d.ts +45 -0
- package/dist/hitl-policy.d.ts.map +1 -0
- package/dist/hitl-policy.js +74 -0
- package/dist/hitl-policy.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/invoke.d.ts +36 -0
- package/dist/invoke.d.ts.map +1 -0
- package/dist/invoke.js +228 -0
- package/dist/invoke.js.map +1 -0
- package/dist/migrations-dir.d.ts +11 -0
- package/dist/migrations-dir.d.ts.map +1 -0
- package/dist/migrations-dir.js +14 -0
- package/dist/migrations-dir.js.map +1 -0
- package/dist/project-run-result.d.ts +23 -0
- package/dist/project-run-result.d.ts.map +1 -0
- package/dist/project-run-result.js +116 -0
- package/dist/project-run-result.js.map +1 -0
- package/dist/prompt.d.ts +83 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +119 -0
- package/dist/prompt.js.map +1 -0
- package/dist/provenance-emit.d.ts +44 -0
- package/dist/provenance-emit.d.ts.map +1 -0
- package/dist/provenance-emit.js +51 -0
- package/dist/provenance-emit.js.map +1 -0
- package/dist/registry.d.ts +38 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +125 -0
- package/dist/registry.js.map +1 -0
- package/dist/retrieval.d.ts +47 -0
- package/dist/retrieval.d.ts.map +1 -0
- package/dist/retrieval.js +155 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/run-snapshot-binding.d.ts +77 -0
- package/dist/run-snapshot-binding.d.ts.map +1 -0
- package/dist/run-snapshot-binding.js +4 -0
- package/dist/run-snapshot-binding.js.map +1 -0
- package/dist/schema.d.ts +497 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +133 -0
- package/dist/schema.js.map +1 -0
- package/dist/streaming.d.ts +118 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +17 -0
- package/dist/streaming.js.map +1 -0
- package/dist/tenant-policy.d.ts +16 -0
- package/dist/tenant-policy.d.ts.map +1 -0
- package/dist/tenant-policy.js +77 -0
- package/dist/tenant-policy.js.map +1 -0
- package/dist/types.d.ts +435 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/versioning.d.ts +29 -0
- package/dist/versioning.d.ts.map +1 -0
- package/dist/versioning.js +58 -0
- package/dist/versioning.js.map +1 -0
- package/migrations/0000_sparkling_talkback.sql +18 -0
- package/migrations/0001_tired_warhawk.sql +16 -0
- package/migrations/0002_violet_ezekiel.sql +2 -0
- package/migrations/meta/0000_snapshot.json +172 -0
- package/migrations/meta/0001_snapshot.json +275 -0
- package/migrations/meta/0002_snapshot.json +287 -0
- package/migrations/meta/_journal.json +27 -0
- package/package.json +76 -4
- package/src/agent-turn-flow.ts +183 -0
- package/src/conversation-binding.ts +147 -0
- package/src/define.ts +572 -0
- package/src/errors.ts +80 -0
- package/src/guardrails-gate.ts +342 -0
- package/src/handlers/budget-check.ts +143 -0
- package/src/handlers/build-initial-messages.ts +103 -0
- package/src/handlers/compose-result.ts +90 -0
- package/src/handlers/constants.ts +10 -0
- package/src/handlers/context.ts +226 -0
- package/src/handlers/dispatch-tools.ts +633 -0
- package/src/handlers/errors.ts +282 -0
- package/src/handlers/evaluate-guardrails.ts +153 -0
- package/src/handlers/final-iteration.ts +30 -0
- package/src/handlers/index.ts +63 -0
- package/src/handlers/model-call.ts +151 -0
- package/src/handlers/persist-final-message.ts +67 -0
- package/src/handlers/persist-provenance.ts +39 -0
- package/src/handlers/persist-user-message.ts +70 -0
- package/src/handlers/public-types.ts +209 -0
- package/src/handlers/rehydrate.ts +161 -0
- package/src/handlers/render-prompt.ts +46 -0
- package/src/handlers/resolve-tools.ts +68 -0
- package/src/handlers/result-shape.ts +113 -0
- package/src/handlers/run-retrievals.ts +77 -0
- package/src/handlers/run-snapshot.ts +44 -0
- package/src/handlers/setup.ts +269 -0
- package/src/handlers/structured-output.ts +117 -0
- package/src/handlers/tool-errors.ts +122 -0
- package/src/handlers/tool-hitl.ts +126 -0
- package/src/handlers/turn-environment.ts +191 -0
- package/src/hitl-policy.ts +128 -0
- package/src/index.ts +154 -0
- package/src/invoke.ts +299 -0
- package/src/migrations-dir.ts +17 -0
- package/src/project-run-result.ts +131 -0
- package/src/prompt.ts +185 -0
- package/src/provenance-emit.ts +100 -0
- package/src/registry.ts +164 -0
- package/src/retrieval.ts +219 -0
- package/src/run-snapshot-binding.ts +87 -0
- package/src/schema.ts +154 -0
- package/src/streaming.ts +153 -0
- package/src/tenant-policy.ts +78 -0
- package/src/types.ts +453 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/invoke.d.ts
ADDED
|
@@ -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":"AAAA,sCAAsC;AACtC,iCAAiC;AAMjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA6D,EAC7D,GAAgB;IAEhB,IAAI,YAAY,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,KAAK;YACX,KAAK,EAAE;gBACL,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,sBAAsB,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC3D,KAAK,EAAE,YAAY,CAAC,KAAK;aAC1B;SACF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC;IAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE;oBACL,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,oDAAoD;oBAC7D,KAAK,EAAE,IAAI;iBACZ;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;IACvE,CAAC;IAED,+DAA+D;IAC/D,0DAA0D;IAC1D,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,oEAAoE;IACpE,8DAA8D;IAC9D,oEAAoE;IACpE,WAAW;IACX,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;gBACxC,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE;oBACR,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,EAAE;iBACH;gBACV,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,EAAE;gBACd,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,YAAY,EAAE,CAAC;oBACf,gBAAgB,EAAE,CAAC;oBACnB,YAAY,EAAE,CAAC;oBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS;iBACvC;gBACD,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC/B,MAAM,EAAE,WAAW;aACpB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAqB;YAC5B,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,uBAAuB,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACnG,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,UAAU;SACtC,CAAC;QACF,MAAM,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;YACxC,IAAI,EAAE,aAAa;YACnB,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;YACxC,SAAS,EAAE,GAAG,CAAC,IAAI;YACnB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,SAAS;IACT,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,+DAA+D;QAC/D,mEAAmE;QACnE,QAAQ;QACR,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC1C,6DAA6D;QAC/D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IAED,oEAAoE;IACpE,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE;YACL,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,GAAG,CAAC,cAAc,IAAI,mBAAmB;YAClD,KAAK,EAAE,IAAI;SACZ;KACF,CAAC;AACJ,CAAC"}
|