@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 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.8`.
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;
@@ -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" || cursor === null || !(segment in cursor)) {
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.split(".").filter((segment) => segment.length > 0);
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[segment];
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
- const current = target[key];
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;
@@ -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":"AAEA,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"}
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"}
@@ -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, canonical_json_1.toCanonicalJson)(input.parsedArguments);
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;AA8SD,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"}
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"}
@@ -124,6 +124,7 @@ function toModelSettings(modelSettings) {
124
124
  "frequency_penalty",
125
125
  "seed",
126
126
  "parallel_tool_calls",
127
+ "response_format",
127
128
  ];
128
129
  const parsed = {};
129
130
  for (const key of allowed) {
@@ -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
  }
@@ -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":"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"}
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: context,
76
+ contextSnapshot: initialContextSnapshot,
64
77
  contextRedacted: false,
65
78
  };
66
79
  }
67
80
  try {
68
- return await options.contextRedactor(context);
81
+ return await options.contextRedactor(initialContextSnapshot);
69
82
  }
70
83
  catch {
71
84
  return {
72
- contextSnapshot: context,
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;AAsCnD,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;AAmxB3B,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"}
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
- return {
46
- __raw: rawArguments,
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, parsedArguments, runContext, turn, logEmitter, policies, onPolicyDecision, onSuspendedProposal) {
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 policyResult = await evaluateToolPolicy(agent, call, parsedArguments, runContext, turn, policies);
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
- parsedArguments,
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 validated = definition.parameters.parse(parsedArguments);
290
- const toolOutput = await definition.execute(validated, runContext);
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
- parsedArguments: unknown;
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;AAK7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,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,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,iBAAiB,CAyBpB;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"}
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
- parsedArguments: params.parsedArguments,
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.8",
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",