@kindgi/agents 0.1.2 → 0.1.4-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks.d.ts +101 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +149 -0
- package/dist/blocks.js.map +1 -0
- package/dist/conversation-binding.d.ts +9 -1
- package/dist/conversation-binding.d.ts.map +1 -1
- package/dist/define.d.ts +17 -2
- package/dist/define.d.ts.map +1 -1
- package/dist/define.js +93 -6
- package/dist/define.js.map +1 -1
- package/dist/guardrails-gate.d.ts +7 -4
- package/dist/guardrails-gate.d.ts.map +1 -1
- package/dist/guardrails-gate.js +5 -2
- package/dist/guardrails-gate.js.map +1 -1
- package/dist/handlers/compose-result.d.ts.map +1 -1
- package/dist/handlers/compose-result.js +3 -0
- package/dist/handlers/compose-result.js.map +1 -1
- package/dist/handlers/context.d.ts +24 -0
- package/dist/handlers/context.d.ts.map +1 -1
- package/dist/handlers/dispatch-tools.d.ts.map +1 -1
- package/dist/handlers/dispatch-tools.js +69 -43
- package/dist/handlers/dispatch-tools.js.map +1 -1
- package/dist/handlers/errors.d.ts +12 -1
- package/dist/handlers/errors.d.ts.map +1 -1
- package/dist/handlers/errors.js.map +1 -1
- package/dist/handlers/evaluate-guardrails.d.ts.map +1 -1
- package/dist/handlers/evaluate-guardrails.js +36 -1
- package/dist/handlers/evaluate-guardrails.js.map +1 -1
- package/dist/handlers/gate-decision.d.ts +62 -0
- package/dist/handlers/gate-decision.d.ts.map +1 -0
- package/dist/handlers/gate-decision.js +55 -0
- package/dist/handlers/gate-decision.js.map +1 -0
- package/dist/handlers/model-call.d.ts +10 -0
- package/dist/handlers/model-call.d.ts.map +1 -1
- package/dist/handlers/model-call.js +120 -34
- package/dist/handlers/model-call.js.map +1 -1
- package/dist/handlers/persist-provenance.d.ts.map +1 -1
- package/dist/handlers/persist-provenance.js +3 -1
- package/dist/handlers/persist-provenance.js.map +1 -1
- package/dist/handlers/persist-user-message.d.ts.map +1 -1
- package/dist/handlers/persist-user-message.js +5 -16
- package/dist/handlers/persist-user-message.js.map +1 -1
- package/dist/handlers/public-types.d.ts +37 -3
- package/dist/handlers/public-types.d.ts.map +1 -1
- package/dist/handlers/rehydrate.d.ts.map +1 -1
- package/dist/handlers/rehydrate.js +91 -1
- package/dist/handlers/rehydrate.js.map +1 -1
- package/dist/handlers/render-prompt.d.ts.map +1 -1
- package/dist/handlers/render-prompt.js +4 -1
- package/dist/handlers/render-prompt.js.map +1 -1
- package/dist/handlers/replay.d.ts +143 -0
- package/dist/handlers/replay.d.ts.map +1 -0
- package/dist/handlers/replay.js +177 -0
- package/dist/handlers/replay.js.map +1 -0
- package/dist/handlers/resolve-blocks.d.ts +32 -0
- package/dist/handlers/resolve-blocks.d.ts.map +1 -0
- package/dist/handlers/resolve-blocks.js +129 -0
- package/dist/handlers/resolve-blocks.js.map +1 -0
- package/dist/handlers/resolve-tools.d.ts +6 -2
- package/dist/handlers/resolve-tools.d.ts.map +1 -1
- package/dist/handlers/resolve-tools.js +59 -27
- package/dist/handlers/resolve-tools.js.map +1 -1
- package/dist/handlers/result-shape.d.ts +7 -0
- package/dist/handlers/result-shape.d.ts.map +1 -1
- package/dist/handlers/result-shape.js.map +1 -1
- package/dist/handlers/run-retrievals.d.ts.map +1 -1
- package/dist/handlers/run-retrievals.js +35 -35
- package/dist/handlers/run-retrievals.js.map +1 -1
- package/dist/handlers/run-snapshot.d.ts.map +1 -1
- package/dist/handlers/run-snapshot.js +1 -0
- package/dist/handlers/run-snapshot.js.map +1 -1
- package/dist/handlers/setup.d.ts +2 -0
- package/dist/handlers/setup.d.ts.map +1 -1
- package/dist/handlers/setup.js +29 -12
- package/dist/handlers/setup.js.map +1 -1
- package/dist/handlers/tool-hitl.d.ts +5 -9
- package/dist/handlers/tool-hitl.d.ts.map +1 -1
- package/dist/handlers/tool-hitl.js +5 -0
- package/dist/handlers/tool-hitl.js.map +1 -1
- package/dist/handlers/turn-environment.d.ts +13 -2
- package/dist/handlers/turn-environment.d.ts.map +1 -1
- package/dist/handlers/turn-environment.js +12 -3
- package/dist/handlers/turn-environment.js.map +1 -1
- package/dist/handlers/turn-provenance.d.ts +67 -0
- package/dist/handlers/turn-provenance.d.ts.map +1 -0
- package/dist/handlers/turn-provenance.js +160 -0
- package/dist/handlers/turn-provenance.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/invoke.d.ts +14 -1
- package/dist/invoke.d.ts.map +1 -1
- package/dist/invoke.js +37 -19
- package/dist/invoke.js.map +1 -1
- package/dist/pins.d.ts +54 -0
- package/dist/pins.d.ts.map +1 -0
- package/dist/pins.js +51 -0
- package/dist/pins.js.map +1 -0
- package/dist/prompt.d.ts +12 -2
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +41 -4
- package/dist/prompt.js.map +1 -1
- package/dist/provenance-emit.d.ts +4 -2
- package/dist/provenance-emit.d.ts.map +1 -1
- package/dist/provenance-emit.js +4 -2
- package/dist/provenance-emit.js.map +1 -1
- package/dist/run-snapshot-binding.d.ts +5 -0
- package/dist/run-snapshot-binding.d.ts.map +1 -1
- package/dist/schema.d.ts +34 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +16 -0
- package/dist/schema.js.map +1 -1
- package/dist/streaming.d.ts +5 -0
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js.map +1 -1
- package/dist/types.d.ts +65 -2
- package/dist/types.d.ts.map +1 -1
- package/migrations/0003_hesitant_captain_cross.sql +2 -0
- package/migrations/0004_stormy_moondragon.sql +1 -0
- package/migrations/meta/0003_snapshot.json +321 -0
- package/migrations/meta/0004_snapshot.json +327 -0
- package/migrations/meta/_journal.json +14 -0
- package/package.json +15 -15
- package/src/blocks.ts +231 -0
- package/src/conversation-binding.ts +9 -1
- package/src/define.ts +104 -7
- package/src/guardrails-gate.ts +17 -3
- package/src/handlers/compose-result.ts +3 -0
- package/src/handlers/context.ts +24 -0
- package/src/handlers/dispatch-tools.ts +75 -44
- package/src/handlers/errors.ts +13 -0
- package/src/handlers/evaluate-guardrails.ts +41 -1
- package/src/handlers/gate-decision.ts +101 -0
- package/src/handlers/model-call.ts +163 -33
- package/src/handlers/persist-provenance.ts +3 -1
- package/src/handlers/persist-user-message.ts +3 -16
- package/src/handlers/public-types.ts +38 -3
- package/src/handlers/rehydrate.ts +141 -9
- package/src/handlers/render-prompt.ts +13 -7
- package/src/handlers/replay.ts +314 -0
- package/src/handlers/resolve-blocks.ts +188 -0
- package/src/handlers/resolve-tools.ts +76 -28
- package/src/handlers/result-shape.ts +8 -0
- package/src/handlers/run-retrievals.ts +45 -41
- package/src/handlers/run-snapshot.ts +1 -0
- package/src/handlers/setup.ts +30 -22
- package/src/handlers/tool-hitl.ts +6 -10
- package/src/handlers/turn-environment.ts +28 -3
- package/src/handlers/turn-provenance.ts +230 -0
- package/src/index.ts +44 -0
- package/src/invoke.ts +49 -20
- package/src/pins.ts +98 -0
- package/src/prompt.ts +52 -4
- package/src/provenance-emit.ts +4 -1
- package/src/run-snapshot-binding.ts +6 -0
- package/src/schema.ts +16 -0
- package/src/streaming.ts +5 -0
- package/src/types.ts +68 -2
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
import { pickVersion } from '@kindgi/tools';
|
|
4
|
+
import { MODEL_SETTINGS_SCHEMA, settingsSchemaIssues, } from '../blocks.js';
|
|
5
|
+
import { throwAgentTurnFailure } from './errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* Load the data blocks the agent references, each at one exact version:
|
|
8
|
+
* the resumed turn's own (`pinned`, from its `setup`), else the agent
|
|
9
|
+
* version's pin (`agent.pins`), else its range resolved now by
|
|
10
|
+
* `pickVersion` (an agent version published before pins). A pinned
|
|
11
|
+
* version that's unregistered still loads; one that's gone, a range
|
|
12
|
+
* nothing satisfies, or a runtime with no blocks fails the turn
|
|
13
|
+
* (`block-unresolvable`). `undefined` when the agent references none.
|
|
14
|
+
*/
|
|
15
|
+
export async function resolveTurnBlocks(ctx, pinned) {
|
|
16
|
+
const agent = ctx.input.agent;
|
|
17
|
+
const refs = blockRefs(ctx);
|
|
18
|
+
if (refs.length === 0)
|
|
19
|
+
return undefined;
|
|
20
|
+
const reader = ctx.bindings.blockReader;
|
|
21
|
+
if (reader === undefined) {
|
|
22
|
+
fail(refs[0], `agent "${agent.id}" references data blocks, but this runtime serves none`);
|
|
23
|
+
}
|
|
24
|
+
const versions = {
|
|
25
|
+
prompts: {},
|
|
26
|
+
settings: {},
|
|
27
|
+
};
|
|
28
|
+
const loaded = new Map();
|
|
29
|
+
for (const ref of refs) {
|
|
30
|
+
const version = pinned?.[ref.kind][ref.id] ??
|
|
31
|
+
agent.pins?.[ref.kind][ref.id] ??
|
|
32
|
+
(await resolveRange(ctx, ref));
|
|
33
|
+
const block = await reader.getVersion({
|
|
34
|
+
tenantId: ctx.input.tenantId,
|
|
35
|
+
blockId: ref.id,
|
|
36
|
+
version,
|
|
37
|
+
});
|
|
38
|
+
if (block === null) {
|
|
39
|
+
fail(ref, `${describe(ref)} runs version ${version}, which isn't published`);
|
|
40
|
+
}
|
|
41
|
+
if (block.kind !== (ref.role === 'prompt' ? 'prompt' : 'settings')) {
|
|
42
|
+
fail(ref, `${describe(ref)} is a ${block.kind} block`);
|
|
43
|
+
}
|
|
44
|
+
versions[ref.kind][ref.id] = version;
|
|
45
|
+
loaded.set(ref, block);
|
|
46
|
+
}
|
|
47
|
+
return turnBlocks(refs, loaded, versions);
|
|
48
|
+
}
|
|
49
|
+
function blockRefs(ctx) {
|
|
50
|
+
const agent = ctx.input.agent;
|
|
51
|
+
const refs = [];
|
|
52
|
+
if (typeof agent.instructions === 'object') {
|
|
53
|
+
refs.push({
|
|
54
|
+
kind: 'prompts',
|
|
55
|
+
id: agent.instructions.prompt,
|
|
56
|
+
range: agent.instructions.version,
|
|
57
|
+
role: 'prompt',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
for (const s of agent.settings ?? []) {
|
|
61
|
+
refs.push({ kind: 'settings', id: s.id, range: s.version, role: 'settings' });
|
|
62
|
+
}
|
|
63
|
+
if (agent.modelSettings !== undefined) {
|
|
64
|
+
refs.push({
|
|
65
|
+
kind: 'settings',
|
|
66
|
+
id: agent.modelSettings.id,
|
|
67
|
+
range: agent.modelSettings.version,
|
|
68
|
+
role: 'model-settings',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return refs;
|
|
72
|
+
}
|
|
73
|
+
/** An unpinned reference's range, resolved over the block's active versions. */
|
|
74
|
+
async function resolveRange(ctx, ref) {
|
|
75
|
+
const available = (await ctx.bindings.blockReader?.activeVersions({
|
|
76
|
+
tenantId: ctx.input.tenantId,
|
|
77
|
+
blockId: ref.id,
|
|
78
|
+
})) ?? [];
|
|
79
|
+
const pick = pickVersion(available, ref.range);
|
|
80
|
+
if (pick.kind === 'ok')
|
|
81
|
+
return pick.version;
|
|
82
|
+
return fail(ref, available.length === 0
|
|
83
|
+
? `${describe(ref)} has no published version`
|
|
84
|
+
: `${describe(ref)} has no published version in "${ref.range}" (published: ${available.join(', ')})`);
|
|
85
|
+
}
|
|
86
|
+
function turnBlocks(refs, loaded, versions) {
|
|
87
|
+
const settings = {};
|
|
88
|
+
let prompt;
|
|
89
|
+
let modelSettings;
|
|
90
|
+
for (const ref of refs) {
|
|
91
|
+
const block = loaded.get(ref);
|
|
92
|
+
if (block.kind === 'prompt') {
|
|
93
|
+
prompt = { id: block.id, version: block.version, content: block.content };
|
|
94
|
+
}
|
|
95
|
+
else if (ref.role === 'model-settings') {
|
|
96
|
+
const issues = settingsSchemaIssues(block.content.values, MODEL_SETTINGS_SCHEMA);
|
|
97
|
+
if (issues.length > 0) {
|
|
98
|
+
fail(ref, `${describe(ref)} version ${block.version} isn't model settings: ${issues.map((i) => `${i.path} ${i.message}`).join('; ')}`);
|
|
99
|
+
}
|
|
100
|
+
modelSettings = block.content.values;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
settings[block.id] = block.content.values;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
...(prompt !== undefined && { prompt }),
|
|
108
|
+
settings,
|
|
109
|
+
...(modelSettings !== undefined && { modelSettings }),
|
|
110
|
+
versions,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function describe(ref) {
|
|
114
|
+
const what = ref.role === 'prompt'
|
|
115
|
+
? 'prompt'
|
|
116
|
+
: ref.role === 'model-settings'
|
|
117
|
+
? 'model-settings'
|
|
118
|
+
: 'settings';
|
|
119
|
+
return `${what} block "${ref.id}"`;
|
|
120
|
+
}
|
|
121
|
+
function fail(ref, message) {
|
|
122
|
+
return throwAgentTurnFailure({
|
|
123
|
+
code: 'block-unresolvable',
|
|
124
|
+
message,
|
|
125
|
+
blockId: ref.id,
|
|
126
|
+
requestedRange: ref.range,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=resolve-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-blocks.js","sourceRoot":"","sources":["../../src/handlers/resolve-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,11 @@ import type { TurnContext } from './context.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Resolve the agent's tool references against one tenant's registry
|
|
6
6
|
* (`ToolRegistry.forTenant`). Throws the turn failure for an unknown
|
|
7
|
-
* tool or an unsatisfiable version range.
|
|
7
|
+
* tool or an unsatisfiable version range. A tool in `pinned` (a resumed
|
|
8
|
+
* turn's, from its `setup`) resolves to exactly that version, and so,
|
|
9
|
+
* otherwise, does one in the agent version's own pins (`agent.pins`, set
|
|
10
|
+
* when it was published): one that's gone fails the turn rather than
|
|
11
|
+
* running another. Without either, the tool's range resolves.
|
|
8
12
|
*/
|
|
9
|
-
export declare function resolveTurnTools(registry: ToolRegistry, agent: Agent): NonNullable<TurnContext['tools']>;
|
|
13
|
+
export declare function resolveTurnTools(registry: ToolRegistry, agent: Agent, pinned?: Readonly<Record<string, string>>): NonNullable<TurnContext['tools']>;
|
|
10
14
|
//# sourceMappingURL=resolve-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-tools.d.ts","sourceRoot":"","sources":["../../src/handlers/resolve-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"resolve-tools.d.ts","sourceRoot":"","sources":["../../src/handlers/resolve-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,YAAY,EAAkB,MAAM,eAAe,CAAC;AAGnF,OAAO,KAAK,EAAE,KAAK,EAAW,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAgCnC"}
|
|
@@ -4,9 +4,13 @@ import { throwAgentTurnFailure } from './errors.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Resolve the agent's tool references against one tenant's registry
|
|
6
6
|
* (`ToolRegistry.forTenant`). Throws the turn failure for an unknown
|
|
7
|
-
* tool or an unsatisfiable version range.
|
|
7
|
+
* tool or an unsatisfiable version range. A tool in `pinned` (a resumed
|
|
8
|
+
* turn's, from its `setup`) resolves to exactly that version, and so,
|
|
9
|
+
* otherwise, does one in the agent version's own pins (`agent.pins`, set
|
|
10
|
+
* when it was published): one that's gone fails the turn rather than
|
|
11
|
+
* running another. Without either, the tool's range resolves.
|
|
8
12
|
*/
|
|
9
|
-
export function resolveTurnTools(registry, agent) {
|
|
13
|
+
export function resolveTurnTools(registry, agent, pinned) {
|
|
10
14
|
const definitions = [];
|
|
11
15
|
const byName = new Map();
|
|
12
16
|
for (const ref of agent.tools) {
|
|
@@ -15,32 +19,15 @@ export function resolveTurnTools(registry, agent) {
|
|
|
15
19
|
// (npm-compatible semver, backed by `maxSatisfying`); capture `resolvedVersion` in
|
|
16
20
|
// the byName map so `dispatch-tools` can emit it in provenance +
|
|
17
21
|
// telemetry — a replay can then pin against the same version.
|
|
18
|
-
const
|
|
22
|
+
const turnPin = pinned?.[ref.id];
|
|
23
|
+
const pin = turnPin ?? agent.pins?.tools[ref.id];
|
|
24
|
+
// A pin names its exact version, which a retired (unregistered) one
|
|
25
|
+
// still serves; a range picks among the active versions only.
|
|
26
|
+
const resolved = pin !== undefined
|
|
27
|
+
? exactVersion(registry, ref.id, pin)
|
|
28
|
+
: registry.resolve(ref.id, ref.version);
|
|
19
29
|
if (resolved.kind === 'err') {
|
|
20
|
-
|
|
21
|
-
if (err.code === 'tool-not-found') {
|
|
22
|
-
throwAgentTurnFailure({
|
|
23
|
-
code: 'unresolved-tool',
|
|
24
|
-
message: `Tool "${ref.id}" declared by agent "${agent.id}" is not registered`,
|
|
25
|
-
toolId: ref.id,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
if (err.code === 'invalid-version-range' || err.code === 'tool-version-unresolvable') {
|
|
29
|
-
throwAgentTurnFailure({
|
|
30
|
-
code: 'tool-version-unresolvable',
|
|
31
|
-
message: err.message,
|
|
32
|
-
toolId: ref.id,
|
|
33
|
-
requestedRange: ref.version,
|
|
34
|
-
...(err.code === 'tool-version-unresolvable' && {
|
|
35
|
-
availableVersions: err.availableVersions,
|
|
36
|
-
}),
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
throwAgentTurnFailure({
|
|
40
|
-
code: 'unresolved-tool',
|
|
41
|
-
message: err.message,
|
|
42
|
-
toolId: ref.id,
|
|
43
|
-
});
|
|
30
|
+
throwUnresolved(agent, ref, resolved.error, pin, turnPin !== undefined ? 'turn' : 'agent');
|
|
44
31
|
}
|
|
45
32
|
const { tool, resolvedVersion } = resolved.value;
|
|
46
33
|
definitions.push({
|
|
@@ -52,4 +39,49 @@ export function resolveTurnTools(registry, agent) {
|
|
|
52
39
|
}
|
|
53
40
|
return { definitions, byName };
|
|
54
41
|
}
|
|
42
|
+
/** A pinned tool version, retired or not, as a resolution. */
|
|
43
|
+
function exactVersion(registry, id, version) {
|
|
44
|
+
const found = registry.getVersion(id, version);
|
|
45
|
+
return found.kind === 'ok'
|
|
46
|
+
? { kind: 'ok', value: { tool: found.value, resolvedVersion: version } }
|
|
47
|
+
: found;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fail the turn for a tool that didn't resolve. A pinned version that's
|
|
51
|
+
* gone names whose pin it was: the turn's own (it started with that
|
|
52
|
+
* version) or the agent version's (it was published with it).
|
|
53
|
+
*/
|
|
54
|
+
function throwUnresolved(agent, ref, err, pin, pinnedBy) {
|
|
55
|
+
const available = err.code === 'tool-version-unresolvable' && {
|
|
56
|
+
availableVersions: err.availableVersions,
|
|
57
|
+
};
|
|
58
|
+
if (pin !== undefined) {
|
|
59
|
+
throwAgentTurnFailure({
|
|
60
|
+
code: 'tool-version-unresolvable',
|
|
61
|
+
message: pinnedBy === 'turn'
|
|
62
|
+
? `Tool "${ref.id}": this turn started with version ${pin}, which is no longer registered; it doesn't run another version mid-turn. ${err.message}`
|
|
63
|
+
: `Tool "${ref.id}": agent "${agent.id}" version ${agent.version} runs version ${pin} (its pins), which isn't registered; it doesn't run another version. ${err.message}`,
|
|
64
|
+
toolId: ref.id,
|
|
65
|
+
requestedRange: ref.version,
|
|
66
|
+
...available,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (err.code === 'tool-not-found') {
|
|
70
|
+
throwAgentTurnFailure({
|
|
71
|
+
code: 'unresolved-tool',
|
|
72
|
+
message: `Tool "${ref.id}" declared by agent "${agent.id}" is not registered`,
|
|
73
|
+
toolId: ref.id,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (err.code === 'invalid-version-range' || err.code === 'tool-version-unresolvable') {
|
|
77
|
+
throwAgentTurnFailure({
|
|
78
|
+
code: 'tool-version-unresolvable',
|
|
79
|
+
message: err.message,
|
|
80
|
+
toolId: ref.id,
|
|
81
|
+
requestedRange: ref.version,
|
|
82
|
+
...available,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
throwAgentTurnFailure({ code: 'unresolved-tool', message: err.message, toolId: ref.id });
|
|
86
|
+
}
|
|
55
87
|
//# sourceMappingURL=resolve-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-tools.js","sourceRoot":"","sources":["../../src/handlers/resolve-tools.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"resolve-tools.js","sourceRoot":"","sources":["../../src/handlers/resolve-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { EvaluationResult } from '@kindgi/guardrails';
|
|
|
2
2
|
import type { Provenance } from '@kindgi/provenance';
|
|
3
3
|
import type { RunId } from '@kindgi/types';
|
|
4
4
|
import type { ConversationId, ConversationMessage, RetrievedFact } from '../types.js';
|
|
5
|
+
import type { ReplayTurnReport } from './replay.js';
|
|
5
6
|
/**
|
|
6
7
|
* Public shape returned by `invokeAgent` on success. Extracted from
|
|
7
8
|
* `invoke.ts` into this module so handler code can import the type
|
|
@@ -66,6 +67,12 @@ export interface AgentTurnResult {
|
|
|
66
67
|
* `response.content`.
|
|
67
68
|
*/
|
|
68
69
|
readonly status?: 'completed' | 'suspended';
|
|
70
|
+
/**
|
|
71
|
+
* A replay turn's report (`InvokeAgentInput.replay`): each tool call and
|
|
72
|
+
* whether it ran, used the past run's result, or was refused (what the
|
|
73
|
+
* turn would have done), and how the session approval gate went.
|
|
74
|
+
*/
|
|
75
|
+
readonly replay?: ReplayTurnReport;
|
|
69
76
|
}
|
|
70
77
|
/**
|
|
71
78
|
* What an agent step in a flow outputs — the authoring contract for the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-shape.d.ts","sourceRoot":"","sources":["../../src/handlers/result-shape.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"result-shape.d.ts","sourceRoot":"","sources":["../../src/handlers/result-shape.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,SAAS;QAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,EAAE,CAAC;CACL;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAcxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-shape.js","sourceRoot":"","sources":["../../src/handlers/result-shape.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"result-shape.js","sourceRoot":"","sources":["../../src/handlers/result-shape.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAwGjC,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACxC,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7D,IAAI,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACrE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,WAAW,EAAE,CAAC,CAAC,WAAgC;YAC/C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-retrievals.d.ts","sourceRoot":"","sources":["../../src/handlers/run-retrievals.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"run-retrievals.d.ts","sourceRoot":"","sources":["../../src/handlers/run-retrievals.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CA0BvE"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { runRetrievals } from '../retrieval.js';
|
|
4
4
|
import { emitTurnEvent } from '../streaming.js';
|
|
5
5
|
import { throwAgentTurnFailure } from './errors.js';
|
|
6
|
+
import { addRetrievalNodes } from './turn-provenance.js';
|
|
6
7
|
/**
|
|
7
8
|
* Execute the agent's declared retrieval intents. Populates
|
|
8
9
|
* `ctx.retrieved` for downstream prompt building + emits
|
|
@@ -10,7 +11,7 @@ import { throwAgentTurnFailure } from './errors.js';
|
|
|
10
11
|
* is wired.
|
|
11
12
|
*/
|
|
12
13
|
export function buildRunRetrievalsHandler(ctx) {
|
|
13
|
-
return async () => {
|
|
14
|
+
return async (_input, kctx) => {
|
|
14
15
|
if (ctx.conversation === undefined || ctx.userMessage === undefined) {
|
|
15
16
|
throwAgentTurnFailure({
|
|
16
17
|
code: 'model-invocation-failed',
|
|
@@ -18,47 +19,46 @@ export function buildRunRetrievalsHandler(ctx) {
|
|
|
18
19
|
cause: null,
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
...(ctx.bindings.embeddingRegistry !== undefined && {
|
|
24
|
-
embeddingRegistry: ctx.bindings.embeddingRegistry,
|
|
25
|
-
}),
|
|
26
|
-
...(ctx.bindings.embeddingModel !== undefined && {
|
|
27
|
-
embeddingModel: ctx.bindings.embeddingModel,
|
|
28
|
-
}),
|
|
29
|
-
});
|
|
30
|
-
if (retrieved.kind === 'err')
|
|
31
|
-
throwAgentTurnFailure(retrieved.error);
|
|
32
|
-
ctx.retrieved = retrieved.value;
|
|
22
|
+
const facts = (await recordedRetrievals(ctx, kctx)) ?? (await retrieveLive(ctx));
|
|
23
|
+
ctx.retrieved = facts;
|
|
33
24
|
await emitTurnEvent(ctx.bindings.onEvent, {
|
|
34
25
|
kind: 'retrieval.completed',
|
|
35
|
-
count:
|
|
36
|
-
factIds:
|
|
26
|
+
count: facts.length,
|
|
27
|
+
factIds: facts.map((r) => r.fact.id),
|
|
37
28
|
});
|
|
38
29
|
if (ctx.provenance !== undefined && ctx.userMessage !== undefined) {
|
|
39
|
-
|
|
40
|
-
ctx.provenance.addNode({
|
|
41
|
-
id: `retrieval:${r.fact.id}`,
|
|
42
|
-
kind: 'retrieval',
|
|
43
|
-
timestamp: ctx.userMessage.createdAt,
|
|
44
|
-
...(r.fact.contentHash !== undefined && { contentHash: r.fact.contentHash }),
|
|
45
|
-
attributes: {
|
|
46
|
-
factId: r.fact.id,
|
|
47
|
-
factType: r.fact.type,
|
|
48
|
-
intentScope: r.intent.scope,
|
|
49
|
-
...(r.score !== undefined && { score: r.score }),
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
ctx.provenance.addEdge({
|
|
53
|
-
from: `retrieval:${r.fact.id}`,
|
|
54
|
-
to: `input:${ctx.userMessage.sequence}`,
|
|
55
|
-
kind: 'influenced-by',
|
|
56
|
-
});
|
|
57
|
-
}
|
|
30
|
+
addRetrievalNodes(ctx.provenance, facts, ctx.userMessage);
|
|
58
31
|
}
|
|
59
32
|
// The facts go in the journal: a resumed turn restores them from it
|
|
60
33
|
// (`rehydrateTurnContext`) rather than retrieving again.
|
|
61
|
-
return { count:
|
|
34
|
+
return { count: facts.length, retrieved: facts };
|
|
62
35
|
};
|
|
63
36
|
}
|
|
37
|
+
/** A replay's retrievals: what the past run retrieved, when the replay binding has it. */
|
|
38
|
+
async function recordedRetrievals(ctx, kctx) {
|
|
39
|
+
const replay = ctx.input.replay;
|
|
40
|
+
if (replay === undefined || ctx.bindings.replay?.retrievals === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
return ctx.bindings.replay.retrievals({
|
|
43
|
+
tenantId: ctx.input.tenantId,
|
|
44
|
+
runId: kctx.runId,
|
|
45
|
+
replay,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async function retrieveLive(ctx) {
|
|
49
|
+
if (ctx.conversation === undefined)
|
|
50
|
+
return [];
|
|
51
|
+
const retrieved = await runRetrievals(ctx.input.agent, ctx.conversation, ctx.input.conversationId, ctx.input.userMessage, {
|
|
52
|
+
memory: ctx.bindings.memoryBinding,
|
|
53
|
+
...(ctx.bindings.embeddingRegistry !== undefined && {
|
|
54
|
+
embeddingRegistry: ctx.bindings.embeddingRegistry,
|
|
55
|
+
}),
|
|
56
|
+
...(ctx.bindings.embeddingModel !== undefined && {
|
|
57
|
+
embeddingModel: ctx.bindings.embeddingModel,
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
if (retrieved.kind === 'err')
|
|
61
|
+
throwAgentTurnFailure(retrieved.error);
|
|
62
|
+
return retrieved.value;
|
|
63
|
+
}
|
|
64
64
|
//# sourceMappingURL=run-retrievals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-retrievals.js","sourceRoot":"","sources":["../../src/handlers/run-retrievals.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAIjC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-retrievals.js","sourceRoot":"","sources":["../../src/handlers/run-retrievals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-snapshot.d.ts","sourceRoot":"","sources":["../../src/handlers/run-snapshot.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"run-snapshot.d.ts","sourceRoot":"","sources":["../../src/handlers/run-snapshot.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBzF"}
|
|
@@ -21,6 +21,7 @@ export async function writeRunSnapshot(ctx, kctx) {
|
|
|
21
21
|
...(ctx.input.dryRun === true && { dryRun: true }),
|
|
22
22
|
...(ctx.input.principal !== undefined && { principal: ctx.input.principal }),
|
|
23
23
|
...(ctx.input.authz !== undefined && { authz: ctx.input.authz }),
|
|
24
|
+
...(ctx.input.replay !== undefined && { replay: ctx.input.replay }),
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
//# sourceMappingURL=run-snapshot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-snapshot.js","sourceRoot":"","sources":["../../src/handlers/run-snapshot.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAoBjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAgB,EAAE,IAAiB;IACxE,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;QAC5B,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS;QAC9B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC3B,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;QACrC,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;QACxC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;QAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC/E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACxF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC5E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"run-snapshot.js","sourceRoot":"","sources":["../../src/handlers/run-snapshot.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAoBjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAgB,EAAE,IAAiB;IACxE,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;QAC5B,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS;QAC9B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC3B,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;QACrC,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc;QACxC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW;QAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC/E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACxF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC5E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KACpE,CAAC,CAAC;AACL,CAAC"}
|
package/dist/handlers/setup.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { NodeHandler } from '@kindgi/handler';
|
|
2
2
|
import type { TurnContext } from './context.js';
|
|
3
|
+
/** The `record` key of the session gate's decision. */
|
|
4
|
+
export declare const SESSION_GATE_RECORD = "session-hitl-gate";
|
|
3
5
|
/**
|
|
4
6
|
* The first node in the flow. Runs every precondition check in one
|
|
5
7
|
* gate so the run either commits to a full turn or fails fast before
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA4BhD,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAgBvD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAoO/D"}
|
package/dist/handlers/setup.js
CHANGED
|
@@ -5,8 +5,11 @@ import { WaitpointCancelledError } from '@kindgi/handler';
|
|
|
5
5
|
import { evaluateSessionGate } from '../guardrails-gate.js';
|
|
6
6
|
import { emitTurnEvent } from '../streaming.js';
|
|
7
7
|
import { throwAgentTurnFailure } from './errors.js';
|
|
8
|
+
import { SESSION_GATE_SUBJECT, readGateDecision } from './gate-decision.js';
|
|
9
|
+
import { followReplaySessionGate } from './replay.js';
|
|
8
10
|
import { writeRunSnapshot } from './run-snapshot.js';
|
|
9
11
|
import { loadTurnConversation, resolveTurnEnvironment, resolveTurnHitlPolicy, } from './turn-environment.js';
|
|
12
|
+
import { decisionOf } from './turn-provenance.js';
|
|
10
13
|
/**
|
|
11
14
|
* Deterministic waitpoint token — must produce the same value on every
|
|
12
15
|
* flow replay so the kernel's `waitForToken(tokenId)` resolves against
|
|
@@ -20,7 +23,7 @@ function computeSessionGateWaitToken(input) {
|
|
|
20
23
|
.slice(0, 40);
|
|
21
24
|
}
|
|
22
25
|
/** The `record` key of the session gate's decision. */
|
|
23
|
-
const SESSION_GATE_RECORD = 'session-hitl-gate';
|
|
26
|
+
export const SESSION_GATE_RECORD = 'session-hitl-gate';
|
|
24
27
|
/**
|
|
25
28
|
* The first node in the flow. Runs every precondition check in one
|
|
26
29
|
* gate so the run either commits to a full turn or fails fast before
|
|
@@ -103,14 +106,20 @@ export function buildSetupHandler(ctx) {
|
|
|
103
106
|
timeoutMs: effectiveHitl.timeoutMs,
|
|
104
107
|
};
|
|
105
108
|
});
|
|
106
|
-
if (gate !== undefined) {
|
|
109
|
+
if (gate !== undefined && ctx.input.replay !== undefined) {
|
|
110
|
+
// A replay follows the past run's decision at this gate, or skips it
|
|
111
|
+
// when none was recorded; it never waits for a reviewer.
|
|
112
|
+
await followReplaySessionGate(ctx, kctx);
|
|
113
|
+
}
|
|
114
|
+
else if (gate !== undefined) {
|
|
107
115
|
const { waitTokenId, timeoutMs } = gate;
|
|
108
116
|
const expiresAt = new Date(Date.now() + timeoutMs).toISOString();
|
|
109
117
|
if (ctx.bindings.hitl?.enqueue !== undefined) {
|
|
110
118
|
try {
|
|
111
119
|
await ctx.bindings.hitl.enqueue({
|
|
112
120
|
tenantId: ctx.input.tenantId,
|
|
113
|
-
|
|
121
|
+
projectId: ctx.input.projectId,
|
|
122
|
+
subjectKind: SESSION_GATE_SUBJECT,
|
|
114
123
|
subjectRef: {
|
|
115
124
|
conversationId: ctx.input.conversationId,
|
|
116
125
|
agentId: ctx.input.agent.id,
|
|
@@ -153,9 +162,9 @@ export function buildSetupHandler(ctx) {
|
|
|
153
162
|
});
|
|
154
163
|
}
|
|
155
164
|
try {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
});
|
|
165
|
+
// Fails closed: only an explicit approve lets the turn go on
|
|
166
|
+
// (`readGateDecision`).
|
|
167
|
+
const decision = readGateDecision(await kctx.waitForToken(waitTokenId, { timeoutMs }));
|
|
159
168
|
// Post-resume: emit the resume node + resumed-from edge. Only
|
|
160
169
|
// runs on the REPLAY path — the first execution throws
|
|
161
170
|
// SuspensionSignal inside waitForToken and never gets here.
|
|
@@ -164,11 +173,14 @@ export function buildSetupHandler(ctx) {
|
|
|
164
173
|
id: resumeNodeId,
|
|
165
174
|
kind: 'resume',
|
|
166
175
|
timestamp: new Date().toISOString(),
|
|
167
|
-
|
|
176
|
+
// Whoever decided; a decision recorded before it named them, the agent.
|
|
177
|
+
actor: decision.decidedBy ?? `agent:${ctx.input.agent.id}`,
|
|
168
178
|
attributes: {
|
|
169
179
|
gate: 'session-hitl',
|
|
170
|
-
decision: decision
|
|
171
|
-
...(decision.
|
|
180
|
+
decision: decisionOf(decision),
|
|
181
|
+
...(!decision.approved &&
|
|
182
|
+
decision.rationale !== undefined && { rationale: decision.rationale }),
|
|
183
|
+
...(decision.approvalId !== undefined && { approvalId: decision.approvalId }),
|
|
172
184
|
},
|
|
173
185
|
});
|
|
174
186
|
ctx.provenance.addEdge({
|
|
@@ -177,15 +189,14 @@ export function buildSetupHandler(ctx) {
|
|
|
177
189
|
kind: 'resumed-from',
|
|
178
190
|
});
|
|
179
191
|
}
|
|
180
|
-
if (decision.
|
|
192
|
+
if (!decision.approved) {
|
|
181
193
|
throwAgentTurnFailure({
|
|
182
194
|
code: 'hitl-rejected',
|
|
183
195
|
message: `Reviewer rejected the session-HITL gate${decision.rationale !== undefined ? `: ${decision.rationale}` : ''}`,
|
|
184
196
|
...(decision.rationale !== undefined && { rationale: decision.rationale }),
|
|
185
197
|
});
|
|
186
198
|
}
|
|
187
|
-
//
|
|
188
|
-
// normally through the rest of setup.
|
|
199
|
+
// Approved: the turn proceeds through the rest of setup.
|
|
189
200
|
}
|
|
190
201
|
catch (cause) {
|
|
191
202
|
if (cause instanceof WaitpointCancelledError) {
|
|
@@ -240,6 +251,12 @@ export function buildSetupHandler(ctx) {
|
|
|
240
251
|
providerId: environment.providerId,
|
|
241
252
|
providerModel: environment.model,
|
|
242
253
|
toolCount: environment.toolCount,
|
|
254
|
+
// The version each tool resolved to: a resumed turn runs these.
|
|
255
|
+
toolVersions: environment.toolVersions,
|
|
256
|
+
// And each data block's.
|
|
257
|
+
...(environment.blockVersions !== undefined && {
|
|
258
|
+
blockVersions: environment.blockVersions,
|
|
259
|
+
}),
|
|
243
260
|
};
|
|
244
261
|
};
|
|
245
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"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"}
|