@axiastudio/aioc 0.2.8 → 0.2.10
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/README.md +17 -1
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -1
- package/dist/harness-descriptor.d.ts.map +1 -1
- package/dist/harness-descriptor.js +41 -8
- package/dist/policy.d.ts +3 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/proposal-hashing.d.ts.map +1 -1
- package/dist/proposal-hashing.js +2 -1
- package/dist/providers/chat-completions.d.ts.map +1 -1
- package/dist/providers/chat-completions.js +1 -0
- package/dist/run-record.d.ts +3 -0
- package/dist/run-record.d.ts.map +1 -1
- package/dist/run-recorder-runtime.d.ts.map +1 -1
- package/dist/run-recorder-runtime.js +16 -3
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +55 -16
- package/dist/suspended-proposals.d.ts +3 -1
- package/dist/suspended-proposals.d.ts.map +1 -1
- package/dist/suspended-proposals.js +5 -8
- package/dist/tool-argument-snapshot.d.ts +6 -0
- package/dist/tool-argument-snapshot.d.ts.map +1 -0
- package/dist/tool-argument-snapshot.js +152 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Its core job is to make agent execution boundaries explicit, testable, auditable
|
|
|
23
23
|
|
|
24
24
|
## Release Status
|
|
25
25
|
|
|
26
|
-
Current stable release: `0.2.
|
|
26
|
+
Current stable release: `0.2.10`.
|
|
27
27
|
The stable line started with `0.1.0`.
|
|
28
28
|
The core runtime surface is compatibility-managed. Breaking changes to the stable surface should ship only with explicit migration guidance and release notes.
|
|
29
29
|
|
|
@@ -45,6 +45,11 @@ AIOC `0.2.7` adds run-regression suite utilities and the experimental
|
|
|
45
45
|
inputs and structured judge results.
|
|
46
46
|
AIOC `0.2.8` fixes replay agent cloning so strict and hybrid replay preserve
|
|
47
47
|
conditional handoff rules and expose enabled `handoff_to_*` tools.
|
|
48
|
+
AIOC `0.2.9` captures `RunRecord.contextSnapshot` as a cloned initial run
|
|
49
|
+
context, so replay starts from the state that entered the run while apps keep
|
|
50
|
+
owning final mutable state persistence.
|
|
51
|
+
AIOC `0.2.10` hardens tool authorization around schema-normalized RFC 8785 JSON
|
|
52
|
+
snapshots and adds opt-in Chat Completions `response_format` forwarding.
|
|
48
53
|
|
|
49
54
|
### Experimental Packages
|
|
50
55
|
|
|
@@ -53,6 +58,11 @@ helpers outside the core runtime package. It builds bounded judge inputs for
|
|
|
53
58
|
run-regression suites and parses structured `RunJudgeResult` outputs while the
|
|
54
59
|
host application owns the model invocation.
|
|
55
60
|
|
|
61
|
+
`@axiastudio/aioc-regression-cli` implements the RFC-0012 companion CLI for
|
|
62
|
+
running stored `RunRecord` regression suites from filesystem artifacts. It uses
|
|
63
|
+
application-owned ESM adapters for tools, policies, provider setup, and optional
|
|
64
|
+
judges.
|
|
65
|
+
|
|
56
66
|
`@axiastudio/aioc-governance-events` implements the RFC-0009 governance-event
|
|
57
67
|
mapper outside the core runtime package. It derives reduced, redacted,
|
|
58
68
|
event-shaped records from `RunRecord` values.
|
|
@@ -216,6 +226,7 @@ Privacy notes:
|
|
|
216
226
|
|
|
217
227
|
- `record.includePromptText` defaults to `false`; keep it disabled unless needed.
|
|
218
228
|
- `record.contextRedactor` should be considered mandatory for production persistence.
|
|
229
|
+
- `contextSnapshot` captures the initial run context, not final mutable app state.
|
|
219
230
|
- sink adapters should implement encryption, access controls, retention, and deletion.
|
|
220
231
|
|
|
221
232
|
## RunRecord Utilities (Minimal)
|
|
@@ -321,6 +332,7 @@ Notes:
|
|
|
321
332
|
- `example:harness-rerun`, `example:run-regression`, and `example:run-regression-judge` configure OpenAI directly from `OPENAI_API_KEY`; harness models are declared in YAML descriptors
|
|
322
333
|
- run-record utility examples are deterministic and do not need a provider
|
|
323
334
|
- `example:non-regression` is educational and can be non-deterministic because it uses a live provider.
|
|
335
|
+
- the regression CLI artifact example lives in `packages/aioc-regression-cli/examples/age-adapted/`
|
|
324
336
|
- canonical examples guide: `docs/CANONICAL-EXAMPLES.md`.
|
|
325
337
|
|
|
326
338
|
### Optional LangChain Examples
|
|
@@ -372,6 +384,10 @@ AIOC adopts the following non-negotiable principles:
|
|
|
372
384
|
- `docs/RFC-0010-policy-composition-helpers.md` (`Accepted`)
|
|
373
385
|
- `docs/RFC-0011-agent-harness-descriptor.md` (`Accepted`)
|
|
374
386
|
- `docs/RFC-0012-run-regression-suites-and-llm-judging.md` (`Accepted`)
|
|
387
|
+
- `docs/RFC-0013-aioc-langgraph-companion-package.md` (`Experimental`)
|
|
388
|
+
- `docs/RFC-0014-compliance-evidence-pack.md` (`Draft`)
|
|
389
|
+
- `docs/RFC-0015-effective-tool-argument-authorization.md` (`Accepted`)
|
|
390
|
+
- `docs/RFC-0016-authorized-tool-argument-snapshots.md` (`Accepted`)
|
|
375
391
|
- `docs/PRIVACY-BASELINE.md`
|
|
376
392
|
|
|
377
393
|
## Historical Snapshots
|
package/dist/errors.d.ts
CHANGED
|
@@ -18,6 +18,15 @@ export declare class OutputGuardrailTripwireTriggered extends AIOCError {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class ToolCallError extends AIOCError {
|
|
20
20
|
}
|
|
21
|
+
export type ToolArgumentsValidationStage = "json" | "schema" | "snapshot";
|
|
22
|
+
export interface ToolArgumentsValidationResult {
|
|
23
|
+
toolName: string;
|
|
24
|
+
stage: ToolArgumentsValidationStage;
|
|
25
|
+
}
|
|
26
|
+
export declare class ToolArgumentsValidationError extends ToolCallError {
|
|
27
|
+
result: ToolArgumentsValidationResult;
|
|
28
|
+
constructor(result: ToolArgumentsValidationResult);
|
|
29
|
+
}
|
|
21
30
|
export interface ToolCallPolicyDeniedResult {
|
|
22
31
|
toolName: string;
|
|
23
32
|
policyResult: PolicyResult;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,SAAS;gBACtC,QAAQ,EAAE,MAAM;CAG7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gCAAiC,SAAQ,SAAS;IAC7D,MAAM,EAAE,6BAA6B,CAAC;gBAE1B,MAAM,EAAE,6BAA6B;CAOlD;AAED,qBAAa,aAAc,SAAQ,SAAS;CAAG;AAE/C,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,MAAM,EAAE,0BAA0B,CAAC;gBAEvB,MAAM,EAAE,0BAA0B;CAM/C;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,qBAAa,6BAA8B,SAAQ,aAAa;IAC9D,MAAM,EAAE,8BAA8B,CAAC;gBAE3B,MAAM,EAAE,8BAA8B;CAMnD;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,MAAM,EAAE,yBAAyB,CAAC;gBAEtB,MAAM,EAAE,yBAAyB;CAM9C;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,qBAAa,4BAA6B,SAAQ,SAAS;IACzD,MAAM,EAAE,6BAA6B,CAAC;gBAE1B,MAAM,EAAE,6BAA6B;CAMlD"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,SAAS;gBACtC,QAAQ,EAAE,MAAM;CAG7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gCAAiC,SAAQ,SAAS;IAC7D,MAAM,EAAE,6BAA6B,CAAC;gBAE1B,MAAM,EAAE,6BAA6B;CAOlD;AAED,qBAAa,aAAc,SAAQ,SAAS;CAAG;AAE/C,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE1E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,4BAA4B,CAAC;CACrC;AAED,qBAAa,4BAA6B,SAAQ,aAAa;IAC7D,MAAM,EAAE,6BAA6B,CAAC;gBAE1B,MAAM,EAAE,6BAA6B;CASlD;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,MAAM,EAAE,0BAA0B,CAAC;gBAEvB,MAAM,EAAE,0BAA0B;CAM/C;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,qBAAa,6BAA8B,SAAQ,aAAa;IAC9D,MAAM,EAAE,8BAA8B,CAAC;gBAE3B,MAAM,EAAE,8BAA8B;CAMnD;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,MAAM,EAAE,yBAAyB,CAAC;gBAEtB,MAAM,EAAE,yBAAyB;CAM9C;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,qBAAa,4BAA6B,SAAQ,SAAS;IACzD,MAAM,EAAE,6BAA6B,CAAC;gBAE1B,MAAM,EAAE,6BAA6B;CAMlD"}
|
package/dist/errors.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HandoffApprovalRequiredError = exports.HandoffPolicyDeniedError = exports.ToolCallApprovalRequiredError = exports.ToolCallPolicyDeniedError = exports.ToolCallError = exports.OutputGuardrailTripwireTriggered = exports.MaxTurnsExceededError = exports.AIOCError = void 0;
|
|
3
|
+
exports.HandoffApprovalRequiredError = exports.HandoffPolicyDeniedError = exports.ToolCallApprovalRequiredError = exports.ToolCallPolicyDeniedError = exports.ToolArgumentsValidationError = exports.ToolCallError = exports.OutputGuardrailTripwireTriggered = exports.MaxTurnsExceededError = exports.AIOCError = void 0;
|
|
4
4
|
class AIOCError extends Error {
|
|
5
5
|
constructor(message) {
|
|
6
6
|
super(message);
|
|
@@ -28,6 +28,19 @@ exports.OutputGuardrailTripwireTriggered = OutputGuardrailTripwireTriggered;
|
|
|
28
28
|
class ToolCallError extends AIOCError {
|
|
29
29
|
}
|
|
30
30
|
exports.ToolCallError = ToolCallError;
|
|
31
|
+
class ToolArgumentsValidationError extends ToolCallError {
|
|
32
|
+
result;
|
|
33
|
+
constructor(result) {
|
|
34
|
+
const validation = {
|
|
35
|
+
json: "JSON decoding",
|
|
36
|
+
schema: "schema validation",
|
|
37
|
+
snapshot: "authorization snapshot validation",
|
|
38
|
+
}[result.stage];
|
|
39
|
+
super(`Tool "${result.toolName}" arguments failed ${validation}.`);
|
|
40
|
+
this.result = result;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.ToolArgumentsValidationError = ToolArgumentsValidationError;
|
|
31
44
|
class ToolCallPolicyDeniedError extends ToolCallError {
|
|
32
45
|
result;
|
|
33
46
|
constructor(result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-descriptor.d.ts","sourceRoot":"","sources":["../src/harness-descriptor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"harness-descriptor.d.ts","sourceRoot":"","sources":["../src/harness-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,32 @@ exports.buildAgentHarness = buildAgentHarness;
|
|
|
5
5
|
const agent_1 = require("./agent");
|
|
6
6
|
const canonical_json_1 = require("./canonical-json");
|
|
7
7
|
const CONTEXT_PROMPT_PLACEHOLDER = /\{\{\s*context\.([^}]+?)\s*\}\}/g;
|
|
8
|
+
const UNSAFE_CONTEXT_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
9
|
+
function assertSafeContextKey(key, label) {
|
|
10
|
+
if (UNSAFE_CONTEXT_KEYS.has(key)) {
|
|
11
|
+
throw new Error(`${label} contains unsafe segment "${key}".`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function readContextFieldPath(path) {
|
|
15
|
+
const segments = path.split(".").filter((segment) => segment.length > 0);
|
|
16
|
+
if (segments.length === 0) {
|
|
17
|
+
throw new Error("Context field path cannot be empty.");
|
|
18
|
+
}
|
|
19
|
+
for (const segment of segments) {
|
|
20
|
+
assertSafeContextKey(segment, `Context field path "${path}"`);
|
|
21
|
+
}
|
|
22
|
+
return segments;
|
|
23
|
+
}
|
|
24
|
+
function assertSafeObjectKeys(value, label, visited = new WeakSet()) {
|
|
25
|
+
if (typeof value !== "object" || value === null || visited.has(value)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
visited.add(value);
|
|
29
|
+
for (const [key, child] of Object.entries(value)) {
|
|
30
|
+
assertSafeContextKey(key, label);
|
|
31
|
+
assertSafeObjectKeys(child, `${label}.${key}`, visited);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
8
34
|
function cloneJsonValue(value) {
|
|
9
35
|
if (typeof value === "undefined") {
|
|
10
36
|
return undefined;
|
|
@@ -67,6 +93,9 @@ function validateDescriptorShape(descriptor) {
|
|
|
67
93
|
assertOptionalPlainObject(descriptor.context, "Harness descriptor context");
|
|
68
94
|
assertOptionalPlainObject(descriptor.context?.fields, "Harness descriptor context.fields");
|
|
69
95
|
assertOptionalPlainObject(descriptor.context?.references, "Harness descriptor context.references");
|
|
96
|
+
for (const path of Object.keys(descriptor.context?.fields ?? {})) {
|
|
97
|
+
readContextFieldPath(path);
|
|
98
|
+
}
|
|
70
99
|
assertNoUnresolvedInstructionFile(descriptor.agent_defaults, "Harness descriptor agent_defaults");
|
|
71
100
|
for (const [agentId, agentDescriptor] of Object.entries(descriptor.agents)) {
|
|
72
101
|
assertPlainObject(agentDescriptor, `Harness descriptor agent "${agentId}"`);
|
|
@@ -99,16 +128,17 @@ function normalizePromptPath(path, label) {
|
|
|
99
128
|
if (!/^[A-Za-z0-9_-]+$/.test(segment)) {
|
|
100
129
|
throw new Error(`${label} contains invalid segment "${segment}".`);
|
|
101
130
|
}
|
|
131
|
+
assertSafeContextKey(segment, label);
|
|
102
132
|
}
|
|
103
133
|
return segments.join(".");
|
|
104
134
|
}
|
|
105
135
|
function createPromptReferenceRules(descriptor) {
|
|
106
136
|
const rules = new Map();
|
|
107
137
|
for (const [path, reference] of Object.entries(descriptor.context?.references ?? {})) {
|
|
138
|
+
const normalizedPath = normalizePromptPath(path, "Context reference path");
|
|
108
139
|
if (reference === false) {
|
|
109
140
|
continue;
|
|
110
141
|
}
|
|
111
|
-
const normalizedPath = normalizePromptPath(path, "Context reference path");
|
|
112
142
|
if (reference === true) {
|
|
113
143
|
rules.set(normalizedPath, { optional: false });
|
|
114
144
|
continue;
|
|
@@ -137,7 +167,9 @@ function collectContextPromptPaths(template) {
|
|
|
137
167
|
function readPromptPath(context, path) {
|
|
138
168
|
let cursor = context;
|
|
139
169
|
for (const segment of normalizePromptPath(path, "Context prompt path").split(".")) {
|
|
140
|
-
if (typeof cursor !== "object" ||
|
|
170
|
+
if (typeof cursor !== "object" ||
|
|
171
|
+
cursor === null ||
|
|
172
|
+
!Object.hasOwn(cursor, segment)) {
|
|
141
173
|
return { exists: false, value: undefined };
|
|
142
174
|
}
|
|
143
175
|
cursor = cursor[segment];
|
|
@@ -284,13 +316,12 @@ function compileAgentInstructions(agentId, instructions, promptAccessRules) {
|
|
|
284
316
|
return (runContext) => renderInstructionTemplate(instructions, runContext.context, promptAccessRules);
|
|
285
317
|
}
|
|
286
318
|
function setPath(target, path, value) {
|
|
287
|
-
const segments = path
|
|
288
|
-
if (segments.length === 0) {
|
|
289
|
-
throw new Error("Context field path cannot be empty.");
|
|
290
|
-
}
|
|
319
|
+
const segments = readContextFieldPath(path);
|
|
291
320
|
let cursor = target;
|
|
292
321
|
for (const segment of segments.slice(0, -1)) {
|
|
293
|
-
const existing = cursor
|
|
322
|
+
const existing = Object.hasOwn(cursor, segment)
|
|
323
|
+
? cursor[segment]
|
|
324
|
+
: undefined;
|
|
294
325
|
if (typeof existing !== "object" || existing === null) {
|
|
295
326
|
const next = {};
|
|
296
327
|
cursor[segment] = next;
|
|
@@ -303,7 +334,8 @@ function setPath(target, path, value) {
|
|
|
303
334
|
}
|
|
304
335
|
function mergeObject(target, source) {
|
|
305
336
|
for (const [key, value] of Object.entries(source)) {
|
|
306
|
-
|
|
337
|
+
assertSafeContextKey(key, "Context overrides");
|
|
338
|
+
const current = Object.hasOwn(target, key) ? target[key] : undefined;
|
|
307
339
|
if (current &&
|
|
308
340
|
typeof current === "object" &&
|
|
309
341
|
!Array.isArray(current) &&
|
|
@@ -337,6 +369,7 @@ function createContextFromDescriptor(descriptor, input = {}) {
|
|
|
337
369
|
if (input.overrides &&
|
|
338
370
|
typeof input.overrides === "object" &&
|
|
339
371
|
!Array.isArray(input.overrides)) {
|
|
372
|
+
assertSafeObjectKeys(input.overrides, "Context overrides");
|
|
340
373
|
mergeObject(context, input.overrides);
|
|
341
374
|
}
|
|
342
375
|
return context;
|
package/dist/policy.d.ts
CHANGED
|
@@ -24,6 +24,9 @@ export interface ToolPolicyInput<TContext = unknown> {
|
|
|
24
24
|
agentName: string;
|
|
25
25
|
toolName: string;
|
|
26
26
|
rawArguments: string;
|
|
27
|
+
/** JSON-decoded arguments before tool schema validation and normalization. */
|
|
28
|
+
requestedArguments?: unknown;
|
|
29
|
+
/** Isolated decoded view of the canonical authorized argument snapshot. */
|
|
27
30
|
parsedArguments: unknown;
|
|
28
31
|
proposalHash: string;
|
|
29
32
|
argsCanonicalJson: string;
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,kBAAkB,CAAC;AACnE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAkBD,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd;AAED,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,OAAO;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB,CAAC,QAAQ,GAAG,OAAO;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,GAAG,OAAO,IAAI,CAC3C,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,KAC7B,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,MAAM,MAAM,aAAa,CAAC,QAAQ,GAAG,OAAO,IAAI,CAC9C,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAChC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,MAAM,WAAW,mBAAmB,CAAC,QAAQ,GAAG,OAAO;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CACzC"}
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,kBAAkB,CAAC;AACnE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAkBD,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd;AAED,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAEd;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,OAAO;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2EAA2E;IAC3E,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB,CAAC,QAAQ,GAAG,OAAO;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,GAAG,OAAO,IAAI,CAC3C,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,KAC7B,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,MAAM,MAAM,aAAa,CAAC,QAAQ,GAAG,OAAO,IAAI,CAC9C,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAChC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAE1C,MAAM,WAAW,mBAAmB,CAAC,QAAQ,GAAG,OAAO;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;CACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal-hashing.d.ts","sourceRoot":"","sources":["../src/proposal-hashing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proposal-hashing.d.ts","sourceRoot":"","sources":["../src/proposal-hashing.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,4BAA4B,GAClC,uBAAuB,CAezB;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,+BAA+B,GACrC,0BAA0B,CAe5B"}
|
package/dist/proposal-hashing.js
CHANGED
|
@@ -3,8 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createToolProposalFingerprint = createToolProposalFingerprint;
|
|
4
4
|
exports.createHandoffProposalFingerprint = createHandoffProposalFingerprint;
|
|
5
5
|
const canonical_json_1 = require("./canonical-json");
|
|
6
|
+
const tool_argument_snapshot_1 = require("./tool-argument-snapshot");
|
|
6
7
|
function createToolProposalFingerprint(input) {
|
|
7
|
-
const argsCanonicalJson = (0,
|
|
8
|
+
const argsCanonicalJson = (0, tool_argument_snapshot_1.toToolArgumentSnapshotJson)(input.parsedArguments);
|
|
8
9
|
const proposalHash = (0, canonical_json_1.hashCanonicalJson)((0, canonical_json_1.toCanonicalJson)({
|
|
9
10
|
kind: "tool",
|
|
10
11
|
agentName: input.agentName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-completions.d.ts","sourceRoot":"","sources":["../../src/providers/chat-completions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEvE,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"chat-completions.d.ts","sourceRoot":"","sources":["../../src/providers/chat-completions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEvE,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AA+SD,qBAAa,uBAAwB,YAAW,aAAa;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,EAAE,8BAA8B;IAKnD,SAAS,CAAC,kBAAkB,IAAI,QAAQ,GAAG,WAAW;IAI/C,MAAM,CAAC,QAAQ,GAAG,OAAO,EAC9B,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,GACjC,aAAa,CAAC,aAAa,CAAC;CAwHhC"}
|
package/dist/run-record.d.ts
CHANGED
|
@@ -69,6 +69,9 @@ export interface SuspendedToolProposal extends SuspendedProposalBase {
|
|
|
69
69
|
kind: "tool";
|
|
70
70
|
toolName: string;
|
|
71
71
|
rawArguments: string;
|
|
72
|
+
/** JSON-decoded arguments before tool schema validation and normalization. */
|
|
73
|
+
requestedArguments?: unknown;
|
|
74
|
+
/** Decoded convenience view of argsCanonicalJson. */
|
|
72
75
|
parsedArguments: unknown;
|
|
73
76
|
argsCanonicalJson: string;
|
|
74
77
|
}
|
package/dist/run-record.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-recorder-runtime.d.ts","sourceRoot":"","sources":["../src/run-recorder-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-recorder-runtime.d.ts","sourceRoot":"","sources":["../src/run-recorder-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
5
5
|
const node_fs_1 = require("node:fs");
|
|
6
6
|
const node_path_1 = require("node:path");
|
|
7
7
|
const canonical_json_1 = require("./canonical-json");
|
|
8
|
+
const json_1 = require("./json");
|
|
8
9
|
const REQUEST_FINGERPRINT_SCHEMA_VERSION = "request-fingerprint.v1";
|
|
9
10
|
function resolveRuntimeVersion() {
|
|
10
11
|
const envVersion = process.env.AIOC_RUNTIME_VERSION?.trim() ??
|
|
@@ -57,19 +58,31 @@ function resolveRunRecordWriter(options) {
|
|
|
57
58
|
}
|
|
58
59
|
return sink.write;
|
|
59
60
|
}
|
|
61
|
+
function cloneContextSnapshot(context) {
|
|
62
|
+
if (context === null || typeof context !== "object") {
|
|
63
|
+
return context;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
return structuredClone(context);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return (0, json_1.toJsonValue)(context);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
60
72
|
async function resolveContextSnapshot(context, options) {
|
|
73
|
+
const initialContextSnapshot = cloneContextSnapshot(context);
|
|
61
74
|
if (!options?.contextRedactor) {
|
|
62
75
|
return {
|
|
63
|
-
contextSnapshot:
|
|
76
|
+
contextSnapshot: initialContextSnapshot,
|
|
64
77
|
contextRedacted: false,
|
|
65
78
|
};
|
|
66
79
|
}
|
|
67
80
|
try {
|
|
68
|
-
return await options.contextRedactor(
|
|
81
|
+
return await options.contextRedactor(initialContextSnapshot);
|
|
69
82
|
}
|
|
70
83
|
catch {
|
|
71
84
|
return {
|
|
72
|
-
contextSnapshot:
|
|
85
|
+
contextSnapshot: initialContextSnapshot,
|
|
73
86
|
contextRedacted: false,
|
|
74
87
|
};
|
|
75
88
|
}
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AA4CnD,OAAO,EACL,cAAc,EAEd,mBAAmB,EAGnB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAUjB,KAAK,eAAe,CAAC,QAAQ,IAAI;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC5B,CAAC;AAGF,YAAY,EACV,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAi0B3B,qBAAa,iBAAiB,CAAC,QAAQ,GAAG,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,KAAK,CAA4B;gBAGvC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAC/C,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC;IAMlC,QAAQ,IAAI,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAQnD,IAAI,OAAO,IAAI,cAAc,EAAE,CAE9B;IAED,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,CAE/B;CACF;AAED,wBAAsB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAC1C,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC9B,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,EAChC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAClC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAExC,wBAAsB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAC1C,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC9B,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,EAChC,OAAO,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GACtC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC"}
|
package/dist/run.js
CHANGED
|
@@ -11,6 +11,7 @@ const run_log_emitter_1 = require("./run-log-emitter");
|
|
|
11
11
|
const run_recorder_runtime_1 = require("./run-recorder-runtime");
|
|
12
12
|
const run_context_1 = require("./run-context");
|
|
13
13
|
const suspended_proposals_1 = require("./suspended-proposals");
|
|
14
|
+
const tool_argument_snapshot_1 = require("./tool-argument-snapshot");
|
|
14
15
|
const zod_1 = require("zod");
|
|
15
16
|
const zod_to_json_schema_1 = require("zod-to-json-schema");
|
|
16
17
|
function toToolParameterSchema(schema) {
|
|
@@ -33,7 +34,7 @@ function normalizeInput(input) {
|
|
|
33
34
|
}
|
|
34
35
|
return [...input];
|
|
35
36
|
}
|
|
36
|
-
function parseArguments(rawArguments) {
|
|
37
|
+
function parseArguments(rawArguments, toolName) {
|
|
37
38
|
const trimmed = rawArguments.trim();
|
|
38
39
|
if (!trimmed) {
|
|
39
40
|
return {};
|
|
@@ -42,9 +43,10 @@ function parseArguments(rawArguments) {
|
|
|
42
43
|
return JSON.parse(trimmed);
|
|
43
44
|
}
|
|
44
45
|
catch {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
throw new errors_1.ToolArgumentsValidationError({
|
|
47
|
+
toolName,
|
|
48
|
+
stage: "json",
|
|
49
|
+
});
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
function resolveAgentModel(agent) {
|
|
@@ -180,22 +182,18 @@ async function emitPolicyDecision(params) {
|
|
|
180
182
|
metadata: policyResult.metadata,
|
|
181
183
|
});
|
|
182
184
|
}
|
|
183
|
-
async function evaluateToolPolicy(agent, call, parsedArguments, runContext, turn, policies) {
|
|
185
|
+
async function evaluateToolPolicy(agent, call, requestedArguments, parsedArguments, proposalHash, argsCanonicalJson, runContext, turn, policies) {
|
|
184
186
|
const policy = policies?.toolPolicy;
|
|
185
187
|
if (!policy) {
|
|
186
188
|
return (0, policy_outcomes_1.createDeniedPolicyResult)("policy_not_configured");
|
|
187
189
|
}
|
|
188
|
-
const { proposalHash, argsCanonicalJson } = (0, proposal_hashing_1.createToolProposalFingerprint)({
|
|
189
|
-
agentName: agent.name,
|
|
190
|
-
toolName: call.name,
|
|
191
|
-
parsedArguments,
|
|
192
|
-
});
|
|
193
190
|
let rawResult;
|
|
194
191
|
try {
|
|
195
192
|
rawResult = await policy({
|
|
196
193
|
agentName: agent.name,
|
|
197
194
|
toolName: call.name,
|
|
198
195
|
rawArguments: call.arguments,
|
|
196
|
+
requestedArguments: (0, tool_argument_snapshot_1.cloneDecodedJsonValue)(requestedArguments),
|
|
199
197
|
parsedArguments,
|
|
200
198
|
proposalHash,
|
|
201
199
|
argsCanonicalJson,
|
|
@@ -206,6 +204,16 @@ async function evaluateToolPolicy(agent, call, parsedArguments, runContext, turn
|
|
|
206
204
|
catch (error) {
|
|
207
205
|
return (0, policy_outcomes_1.createDeniedPolicyResult)("policy_error", toErrorMetadata(error));
|
|
208
206
|
}
|
|
207
|
+
let evaluatedArgsCanonicalJson;
|
|
208
|
+
try {
|
|
209
|
+
evaluatedArgsCanonicalJson = (0, tool_argument_snapshot_1.toToolArgumentSnapshotJson)(parsedArguments);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return (0, policy_outcomes_1.createDeniedPolicyResult)("policy_mutated_arguments");
|
|
213
|
+
}
|
|
214
|
+
if (evaluatedArgsCanonicalJson !== argsCanonicalJson) {
|
|
215
|
+
return (0, policy_outcomes_1.createDeniedPolicyResult)("policy_mutated_arguments");
|
|
216
|
+
}
|
|
209
217
|
if (hasDeprecatedDenyMode(rawResult)) {
|
|
210
218
|
return createDeprecatedDenyModeResult(rawResult.denyMode);
|
|
211
219
|
}
|
|
@@ -247,12 +255,41 @@ async function evaluateHandoffPolicy(fromAgent, toAgent, call, handoffPayload, r
|
|
|
247
255
|
}
|
|
248
256
|
return (0, policy_outcomes_1.materializePolicyResult)(rawResult);
|
|
249
257
|
}
|
|
250
|
-
async function executeToolCall(agent, runId, call,
|
|
258
|
+
async function executeToolCall(agent, runId, call, requestedArguments, runContext, turn, logEmitter, policies, onPolicyDecision, onSuspendedProposal) {
|
|
251
259
|
const definition = agent.tools.find((tool) => tool.name === call.name);
|
|
252
260
|
if (!definition) {
|
|
253
261
|
throw new errors_1.ToolCallError(`Tool "${call.name}" is not registered.`);
|
|
254
262
|
}
|
|
255
|
-
const
|
|
263
|
+
const requestedArgumentsSnapshot = (0, tool_argument_snapshot_1.cloneDecodedJsonValue)(requestedArguments);
|
|
264
|
+
let schemaOutput;
|
|
265
|
+
try {
|
|
266
|
+
schemaOutput = definition.parameters.parse((0, tool_argument_snapshot_1.cloneDecodedJsonValue)(requestedArgumentsSnapshot));
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
throw new errors_1.ToolArgumentsValidationError({
|
|
270
|
+
toolName: call.name,
|
|
271
|
+
stage: "schema",
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
let proposalHash;
|
|
275
|
+
let argsCanonicalJson;
|
|
276
|
+
try {
|
|
277
|
+
const fingerprint = (0, proposal_hashing_1.createToolProposalFingerprint)({
|
|
278
|
+
agentName: agent.name,
|
|
279
|
+
toolName: call.name,
|
|
280
|
+
parsedArguments: schemaOutput,
|
|
281
|
+
});
|
|
282
|
+
proposalHash = fingerprint.proposalHash;
|
|
283
|
+
argsCanonicalJson = fingerprint.argsCanonicalJson;
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
throw new errors_1.ToolArgumentsValidationError({
|
|
287
|
+
toolName: call.name,
|
|
288
|
+
stage: "snapshot",
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
const policyArguments = (0, tool_argument_snapshot_1.fromToolArgumentSnapshotJson)(argsCanonicalJson);
|
|
292
|
+
const policyResult = await evaluateToolPolicy(agent, call, requestedArgumentsSnapshot, policyArguments, proposalHash, argsCanonicalJson, runContext, turn, policies);
|
|
256
293
|
await emitPolicyDecision({
|
|
257
294
|
kind: "tool",
|
|
258
295
|
agentName: agent.name,
|
|
@@ -272,7 +309,9 @@ async function executeToolCall(agent, runId, call, parsedArguments, runContext,
|
|
|
272
309
|
callId: call.callId,
|
|
273
310
|
toolName: call.name,
|
|
274
311
|
rawArguments: call.arguments,
|
|
275
|
-
|
|
312
|
+
requestedArguments: requestedArgumentsSnapshot,
|
|
313
|
+
proposalHash,
|
|
314
|
+
argsCanonicalJson,
|
|
276
315
|
policyResult,
|
|
277
316
|
})
|
|
278
317
|
: undefined;
|
|
@@ -286,8 +325,8 @@ async function executeToolCall(agent, runId, call, parsedArguments, runContext,
|
|
|
286
325
|
suspendedProposal,
|
|
287
326
|
});
|
|
288
327
|
}
|
|
289
|
-
const
|
|
290
|
-
const toolOutput = await definition.execute(
|
|
328
|
+
const executionArguments = (0, tool_argument_snapshot_1.fromToolArgumentSnapshotJson)(argsCanonicalJson);
|
|
329
|
+
const toolOutput = await definition.execute(executionArguments, runContext);
|
|
291
330
|
return (0, policy_outcomes_1.toAllowedToolResultEnvelope)(toolOutput);
|
|
292
331
|
}
|
|
293
332
|
async function evaluateOutputGuardrails(agent, runContext, history, outputText, logEmitter, turn, onGuardrailDecision) {
|
|
@@ -410,7 +449,7 @@ async function* runLoop(state, runId, provider, runContext, maxTurns, logger, po
|
|
|
410
449
|
}
|
|
411
450
|
if (pendingToolCalls.length > 0) {
|
|
412
451
|
for (const call of pendingToolCalls) {
|
|
413
|
-
const callItemArguments = parseArguments(call.arguments);
|
|
452
|
+
const callItemArguments = parseArguments(call.arguments, call.name);
|
|
414
453
|
const callItem = {
|
|
415
454
|
type: "tool_call_item",
|
|
416
455
|
callId: call.callId,
|
|
@@ -7,7 +7,9 @@ export declare function buildSuspendedToolProposal(params: {
|
|
|
7
7
|
callId: string;
|
|
8
8
|
toolName: string;
|
|
9
9
|
rawArguments: string;
|
|
10
|
-
|
|
10
|
+
requestedArguments: unknown;
|
|
11
|
+
proposalHash: string;
|
|
12
|
+
argsCanonicalJson: string;
|
|
11
13
|
policyResult: PolicyResult;
|
|
12
14
|
}): SuspendedProposal;
|
|
13
15
|
export declare function buildSuspendedHandoffProposal(params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suspended-proposals.d.ts","sourceRoot":"","sources":["../src/suspended-proposals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"suspended-proposals.d.ts","sourceRoot":"","sources":["../src/suspended-proposals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,iBAAiB,CAoBpB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,iBAAiB,CA0BpB"}
|
|
@@ -3,12 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.buildSuspendedToolProposal = buildSuspendedToolProposal;
|
|
4
4
|
exports.buildSuspendedHandoffProposal = buildSuspendedHandoffProposal;
|
|
5
5
|
const proposal_hashing_1 = require("./proposal-hashing");
|
|
6
|
+
const tool_argument_snapshot_1 = require("./tool-argument-snapshot");
|
|
6
7
|
function buildSuspendedToolProposal(params) {
|
|
7
|
-
const { argsCanonicalJson, proposalHash } = (0, proposal_hashing_1.createToolProposalFingerprint)({
|
|
8
|
-
agentName: params.agentName,
|
|
9
|
-
toolName: params.toolName,
|
|
10
|
-
parsedArguments: params.parsedArguments,
|
|
11
|
-
});
|
|
12
8
|
return {
|
|
13
9
|
timestamp: new Date().toISOString(),
|
|
14
10
|
kind: "tool",
|
|
@@ -16,7 +12,7 @@ function buildSuspendedToolProposal(params) {
|
|
|
16
12
|
turn: params.turn,
|
|
17
13
|
callId: params.callId,
|
|
18
14
|
agentName: params.agentName,
|
|
19
|
-
proposalHash,
|
|
15
|
+
proposalHash: params.proposalHash,
|
|
20
16
|
reason: params.policyResult.reason,
|
|
21
17
|
publicReason: params.policyResult.publicReason,
|
|
22
18
|
policyVersion: params.policyResult.policyVersion,
|
|
@@ -24,8 +20,9 @@ function buildSuspendedToolProposal(params) {
|
|
|
24
20
|
metadata: params.policyResult.metadata,
|
|
25
21
|
toolName: params.toolName,
|
|
26
22
|
rawArguments: params.rawArguments,
|
|
27
|
-
|
|
28
|
-
argsCanonicalJson,
|
|
23
|
+
requestedArguments: params.requestedArguments,
|
|
24
|
+
parsedArguments: (0, tool_argument_snapshot_1.fromToolArgumentSnapshotJson)(params.argsCanonicalJson),
|
|
25
|
+
argsCanonicalJson: params.argsCanonicalJson,
|
|
29
26
|
};
|
|
30
27
|
}
|
|
31
28
|
function buildSuspendedHandoffProposal(params) {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CanonicalJsonValue } from "./canonical-json";
|
|
2
|
+
export type ToolArgumentSnapshotValue = CanonicalJsonValue;
|
|
3
|
+
export declare function cloneDecodedJsonValue(value: unknown): unknown;
|
|
4
|
+
export declare function toToolArgumentSnapshotJson(value: unknown): string;
|
|
5
|
+
export declare function fromToolArgumentSnapshotJson(canonicalJson: string): ToolArgumentSnapshotValue;
|
|
6
|
+
//# sourceMappingURL=tool-argument-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-argument-snapshot.d.ts","sourceRoot":"","sources":["../src/tool-argument-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB7D;AA6JD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjE;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,GACpB,yBAAyB,CAE3B"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cloneDecodedJsonValue = cloneDecodedJsonValue;
|
|
4
|
+
exports.toToolArgumentSnapshotJson = toToolArgumentSnapshotJson;
|
|
5
|
+
exports.fromToolArgumentSnapshotJson = fromToolArgumentSnapshotJson;
|
|
6
|
+
function cloneDecodedJsonValue(value) {
|
|
7
|
+
if (value === null || typeof value !== "object") {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
return value.map((entry) => cloneDecodedJsonValue(entry));
|
|
12
|
+
}
|
|
13
|
+
const cloned = {};
|
|
14
|
+
for (const key of Object.keys(value)) {
|
|
15
|
+
Object.defineProperty(cloned, key, {
|
|
16
|
+
configurable: true,
|
|
17
|
+
enumerable: true,
|
|
18
|
+
value: cloneDecodedJsonValue(value[key]),
|
|
19
|
+
writable: true,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return cloned;
|
|
23
|
+
}
|
|
24
|
+
function invalidSnapshot(reason) {
|
|
25
|
+
throw new TypeError(`Tool arguments cannot be represented as a canonical snapshot: ${reason}.`);
|
|
26
|
+
}
|
|
27
|
+
function assertValidUnicode(value) {
|
|
28
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
29
|
+
const codeUnit = value.charCodeAt(index);
|
|
30
|
+
if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {
|
|
31
|
+
const nextCodeUnit = value.charCodeAt(index + 1);
|
|
32
|
+
if (index + 1 >= value.length ||
|
|
33
|
+
nextCodeUnit < 0xdc00 ||
|
|
34
|
+
nextCodeUnit > 0xdfff) {
|
|
35
|
+
invalidSnapshot("strings must not contain lone surrogate code units");
|
|
36
|
+
}
|
|
37
|
+
index += 1;
|
|
38
|
+
}
|
|
39
|
+
else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {
|
|
40
|
+
invalidSnapshot("strings must not contain lone surrogate code units");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function normalizeArray(value, seen) {
|
|
45
|
+
if (Object.getPrototypeOf(value) !== Array.prototype) {
|
|
46
|
+
invalidSnapshot("array subclasses are not supported");
|
|
47
|
+
}
|
|
48
|
+
if (seen.has(value)) {
|
|
49
|
+
invalidSnapshot("object references must form a tree");
|
|
50
|
+
}
|
|
51
|
+
seen.add(value);
|
|
52
|
+
const ownKeys = Reflect.ownKeys(value);
|
|
53
|
+
if (ownKeys.length !== value.length + 1) {
|
|
54
|
+
invalidSnapshot("arrays must be dense and contain no extra properties");
|
|
55
|
+
}
|
|
56
|
+
for (const key of ownKeys) {
|
|
57
|
+
if (key === "length") {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (typeof key !== "string") {
|
|
61
|
+
invalidSnapshot("symbol keys are not supported");
|
|
62
|
+
}
|
|
63
|
+
const index = Number(key);
|
|
64
|
+
if (!Number.isInteger(index) ||
|
|
65
|
+
index < 0 ||
|
|
66
|
+
index >= value.length ||
|
|
67
|
+
String(index) !== key) {
|
|
68
|
+
invalidSnapshot("arrays must contain only indexed elements");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const normalized = [];
|
|
72
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
73
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
74
|
+
if (!descriptor || !descriptor.enumerable || !("value" in descriptor)) {
|
|
75
|
+
invalidSnapshot("array elements must be enumerable data properties");
|
|
76
|
+
}
|
|
77
|
+
normalized.push(normalizeSnapshotValue(descriptor.value, seen));
|
|
78
|
+
}
|
|
79
|
+
return normalized;
|
|
80
|
+
}
|
|
81
|
+
function normalizeObject(value, seen) {
|
|
82
|
+
const prototype = Object.getPrototypeOf(value);
|
|
83
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
84
|
+
invalidSnapshot("only plain objects are supported");
|
|
85
|
+
}
|
|
86
|
+
if (seen.has(value)) {
|
|
87
|
+
invalidSnapshot("object references must form a tree");
|
|
88
|
+
}
|
|
89
|
+
seen.add(value);
|
|
90
|
+
const normalized = Object.create(null);
|
|
91
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
92
|
+
if (typeof key !== "string") {
|
|
93
|
+
invalidSnapshot("symbol keys are not supported");
|
|
94
|
+
}
|
|
95
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
96
|
+
if (!descriptor?.enumerable || !("value" in descriptor)) {
|
|
97
|
+
invalidSnapshot("object fields must be enumerable data properties");
|
|
98
|
+
}
|
|
99
|
+
assertValidUnicode(key);
|
|
100
|
+
normalized[key] = normalizeSnapshotValue(descriptor.value, seen);
|
|
101
|
+
}
|
|
102
|
+
return normalized;
|
|
103
|
+
}
|
|
104
|
+
function normalizeSnapshotValue(value, seen) {
|
|
105
|
+
if (value === null || typeof value === "boolean") {
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
if (typeof value === "string") {
|
|
109
|
+
assertValidUnicode(value);
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
if (typeof value === "number") {
|
|
113
|
+
if (!Number.isFinite(value) || Object.is(value, -0)) {
|
|
114
|
+
invalidSnapshot("numbers must be finite and must not be negative zero");
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
if (Array.isArray(value)) {
|
|
119
|
+
return normalizeArray(value, seen);
|
|
120
|
+
}
|
|
121
|
+
if (typeof value === "object") {
|
|
122
|
+
return normalizeObject(value, seen);
|
|
123
|
+
}
|
|
124
|
+
invalidSnapshot(`values of type ${typeof value} are not supported`);
|
|
125
|
+
}
|
|
126
|
+
function serializePrimitive(value) {
|
|
127
|
+
const serialized = JSON.stringify(value);
|
|
128
|
+
if (serialized === undefined) {
|
|
129
|
+
invalidSnapshot("snapshot primitive serialization failed");
|
|
130
|
+
}
|
|
131
|
+
return serialized;
|
|
132
|
+
}
|
|
133
|
+
// RFC 8785 section 3.2: emit sorted members directly so index-like keys keep
|
|
134
|
+
// JCS order instead of JavaScript object enumeration order.
|
|
135
|
+
function serializeJcs(value) {
|
|
136
|
+
if (value === null || typeof value !== "object") {
|
|
137
|
+
return serializePrimitive(value);
|
|
138
|
+
}
|
|
139
|
+
if (Array.isArray(value)) {
|
|
140
|
+
return `[${value.map(serializeJcs).join(",")}]`;
|
|
141
|
+
}
|
|
142
|
+
const properties = Object.keys(value)
|
|
143
|
+
.sort()
|
|
144
|
+
.map((key) => `${serializePrimitive(key)}:${serializeJcs(value[key])}`);
|
|
145
|
+
return `{${properties.join(",")}}`;
|
|
146
|
+
}
|
|
147
|
+
function toToolArgumentSnapshotJson(value) {
|
|
148
|
+
return serializeJcs(normalizeSnapshotValue(value, new WeakSet()));
|
|
149
|
+
}
|
|
150
|
+
function fromToolArgumentSnapshotJson(canonicalJson) {
|
|
151
|
+
return JSON.parse(canonicalJson);
|
|
152
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axiastudio/aioc",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -43,12 +43,14 @@
|
|
|
43
43
|
"docs:dev": "npm run docs:sync && cd apps/aioc-docs && zsh -lc 'npm run dev'",
|
|
44
44
|
"docs:build": "npm run docs:sync && cd apps/aioc-docs && zsh -lc 'npm run build'",
|
|
45
45
|
"docs:preview": "cd apps/aioc-docs && zsh -lc 'npm run preview'",
|
|
46
|
-
"packages:build": "npm run governance-events:build && npm run regression-judge:build && npm run build -w @axiastudio/aioc-export-otel && npm run build -w @axiastudio/aioc-inspect-ui",
|
|
47
|
-
"packages:test": "npm run governance-events:test && npm run export-otel:test && npm run regression-judge:test",
|
|
46
|
+
"packages:build": "npm run governance-events:build && npm run regression-judge:build && npm run regression-cli:build && npm run build -w @axiastudio/aioc-export-otel && npm run build -w @axiastudio/aioc-inspect-ui",
|
|
47
|
+
"packages:test": "npm run governance-events:test && npm run export-otel:test && npm run regression-judge:test && npm run regression-cli:test",
|
|
48
48
|
"governance-events:build": "npm run build && npm run build -w @axiastudio/aioc-governance-events",
|
|
49
49
|
"governance-events:test": "npm run build && npm test -w @axiastudio/aioc-governance-events",
|
|
50
50
|
"regression-judge:build": "npm run build && npm run build -w @axiastudio/aioc-regression-judge",
|
|
51
51
|
"regression-judge:test": "npm run build && npm test -w @axiastudio/aioc-regression-judge",
|
|
52
|
+
"regression-cli:build": "npm run build && npm run build -w @axiastudio/aioc-regression-cli",
|
|
53
|
+
"regression-cli:test": "npm run build && npm test -w @axiastudio/aioc-regression-cli",
|
|
52
54
|
"export-otel:build": "npm run governance-events:build && npm run build -w @axiastudio/aioc-export-otel",
|
|
53
55
|
"export-otel:test": "npm run governance-events:build && npm test -w @axiastudio/aioc-export-otel",
|
|
54
56
|
"export-otel:console": "npm run governance-events:build && npm run console -w @axiastudio/aioc-export-otel",
|