@axiastudio/aioc 0.2.7 → 0.2.8

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.5`.
26
+ Current stable release: `0.2.8`.
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
 
@@ -40,6 +40,11 @@ AIOC `0.2.3` adds RFC-0010 policy composition helpers for exact-name tool and ha
40
40
  AIOC `0.2.4` adds experimental governance-event packages and an OpenTelemetry Logs exporter for reduced, operational observability events derived from `RunRecord` values.
41
41
  AIOC `0.2.5` makes replay history-faithful by recording the initial input scope in `RunRecord` and replaying from it by default.
42
42
  AIOC `0.2.6` adds descriptor-level conditional agent handoffs with boolean `where` gates that filter handoff tools before provider requests.
43
+ AIOC `0.2.7` adds run-regression suite utilities and the experimental
44
+ `@axiastudio/aioc-regression-judge` companion package for bounded LLM judge
45
+ inputs and structured judge results.
46
+ AIOC `0.2.8` fixes replay agent cloning so strict and hybrid replay preserve
47
+ conditional handoff rules and expose enabled `handoff_to_*` tools.
43
48
 
44
49
  ### Experimental Packages
45
50
 
@@ -53,8 +58,8 @@ mapper outside the core runtime package. It derives reduced, redacted,
53
58
  event-shaped records from `RunRecord` values.
54
59
 
55
60
  `@axiastudio/aioc-export-otel` maps those governance events to OpenTelemetry
56
- Logs. Both packages remain experimental while real exporter usage validates the
57
- schema and operational shape.
61
+ Logs. These packages remain experimental while real usage validates their
62
+ schemas and operational shape.
58
63
 
59
64
  - Release notes: `CHANGELOG.md`
60
65
  - Historical beta contract snapshot: `docs/BETA-CONTRACT.md`
@@ -157,9 +162,18 @@ The Agent Harness Descriptor is included in the supported `0.2.x` API surface as
157
162
  ## Policy Gate (Minimal)
158
163
 
159
164
  ```ts
160
- import { Agent, allow, deny, run, tool, type ToolPolicy } from "@axiastudio/aioc";
161
-
162
- const toolPolicy: ToolPolicy<{ actor: { groups: string[] } }> = ({ runContext }) => {
165
+ import {
166
+ Agent,
167
+ allow,
168
+ deny,
169
+ run,
170
+ tool,
171
+ type ToolPolicy,
172
+ } from "@axiastudio/aioc";
173
+
174
+ const toolPolicy: ToolPolicy<{ actor: { groups: string[] } }> = ({
175
+ runContext,
176
+ }) => {
163
177
  if (!runContext.context.actor.groups.includes("finance")) {
164
178
  return deny("deny_missing_finance_group", {
165
179
  resultMode: "tool_result",
@@ -221,7 +235,13 @@ console.log(calls[0]?.name, calls[0]?.argsHash, calls[0]?.hasOutput);
221
235
  import { compareRunRecords } from "@axiastudio/aioc";
222
236
 
223
237
  const comparison = compareRunRecords(runRecordA, runRecordB, {
224
- includeSections: ["response", "toolCalls", "policy", "guardrails", "metadata"],
238
+ includeSections: [
239
+ "response",
240
+ "toolCalls",
241
+ "policy",
242
+ "guardrails",
243
+ "metadata",
244
+ ],
225
245
  responseMatchMode: "exact",
226
246
  });
227
247
 
@@ -251,6 +271,9 @@ console.log(replay.replayStats);
251
271
  ```
252
272
 
253
273
  `replayFromRunRecord(...)` does not bypass policy enforcement: in `strict` and `hybrid`, provide `runOptions.policies` when tool/handoff execution must be authorized.
274
+ Strict and hybrid replay preserve conditional handoff rules from the source
275
+ agent, so enabled handoffs remain visible to the provider as `handoff_to_*`
276
+ tools during replay.
254
277
 
255
278
  ## Reference UI Example
256
279
 
@@ -274,23 +297,23 @@ tool-policy, and policy-composition. Use run-record and harness examples after
274
297
  the basics; `example:non-regression`, `example:run-regression`, and
275
298
  `example:run-regression-judge` are advanced workflows.
276
299
 
277
- | Command | Purpose | Needs API key |
278
- |---|---|---|
279
- | `npm run example:hello` | Minimal single-agent run | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
280
- | `npm run example:policy` | Minimal denied tool + policy flow | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
281
- | `npm run example:approval-required` | Minimal approval-required tool + policy flow | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
282
- | `npm run example:approval-evidence` | Approval evidence passed through context and reevaluated by policy | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
283
- | `npm run example:tool-policy` | Straight tool + policy flow with allowed execution | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
284
- | `npm run example:policy-composition` | Exact-name tool policy dispatch with fallback deny | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
285
- | `npm run example:harness-rerun` | Replay against a modified harness with a mocked new tool output | Yes (`OPENAI_API_KEY`) |
286
- | `npm run example:run-record` | Run-record persistence with redaction + audit | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
287
- | `npm run example:rru:01-extract` | Minimal `extractToolCalls(...)` | No |
288
- | `npm run example:rru:02-compare` | Minimal `compareRunRecords(...)` | No |
289
- | `npm run example:rru:03-replay-strict` | Minimal strict replay | No |
290
- | `npm run example:rru:04-replay-hybrid` | Minimal hybrid replay | No |
291
- | `npm run example:non-regression` | Advanced v1/v2 run-record diff | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
292
- | `npm run example:run-regression` | Local `runRegressionSuite(...)` over a modified harness | Yes (`OPENAI_API_KEY`) |
293
- | `npm run example:run-regression-judge` | Local `runRegressionSuite(...)` with an LLM judge | Yes (`OPENAI_API_KEY`) |
300
+ | Command | Purpose | Needs API key |
301
+ | -------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------- |
302
+ | `npm run example:hello` | Minimal single-agent run | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
303
+ | `npm run example:policy` | Minimal denied tool + policy flow | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
304
+ | `npm run example:approval-required` | Minimal approval-required tool + policy flow | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
305
+ | `npm run example:approval-evidence` | Approval evidence passed through context and reevaluated by policy | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
306
+ | `npm run example:tool-policy` | Straight tool + policy flow with allowed execution | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
307
+ | `npm run example:policy-composition` | Exact-name tool policy dispatch with fallback deny | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
308
+ | `npm run example:harness-rerun` | Replay against a modified harness with a mocked new tool output | Yes (`OPENAI_API_KEY`) |
309
+ | `npm run example:run-record` | Run-record persistence with redaction + audit | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
310
+ | `npm run example:rru:01-extract` | Minimal `extractToolCalls(...)` | No |
311
+ | `npm run example:rru:02-compare` | Minimal `compareRunRecords(...)` | No |
312
+ | `npm run example:rru:03-replay-strict` | Minimal strict replay | No |
313
+ | `npm run example:rru:04-replay-hybrid` | Minimal hybrid replay | No |
314
+ | `npm run example:non-regression` | Advanced v1/v2 run-record diff | Yes (`AIOC_EXAMPLE_PROVIDER` + matching provider API key) |
315
+ | `npm run example:run-regression` | Local `runRegressionSuite(...)` over a modified harness | Yes (`OPENAI_API_KEY`) |
316
+ | `npm run example:run-regression-judge` | Local `runRegressionSuite(...)` with an LLM judge | Yes (`OPENAI_API_KEY`) |
294
317
 
295
318
  Notes:
296
319
 
@@ -306,13 +329,16 @@ Optional LangChain interoperability examples live in `examples/langchain`.
306
329
  They use their own `package.json` so LangChain dependencies do not become
307
330
  dependencies of the core `@axiastudio/aioc` runtime package.
308
331
 
309
- They demonstrate two composition patterns:
332
+ They demonstrate three composition patterns:
310
333
 
311
334
  - **aioc-first, LangChain-extended**: aioc owns the governed agent run while
312
335
  LangChain provides OSS components behind aioc tools, such as retrieval.
313
336
  - **LangGraph-orchestrated, aioc-governed**: LangGraph owns workflow
314
337
  orchestration while selected graph nodes call aioc for policy-gated execution
315
338
  and portable audit evidence.
339
+ - **LangGraph-orchestrated, aioc-recorded**: LangGraph remains the primary
340
+ orchestrator while a local RFC-0013 prototype emits a graph-level
341
+ `RunRecord` around the compiled graph.
316
342
 
317
343
  ## Test Commands
318
344
 
@@ -345,6 +371,7 @@ AIOC adopts the following non-negotiable principles:
345
371
  - `docs/RFC-0009-governance-events-and-exporters.md` (`Experimental`)
346
372
  - `docs/RFC-0010-policy-composition-helpers.md` (`Accepted`)
347
373
  - `docs/RFC-0011-agent-harness-descriptor.md` (`Accepted`)
374
+ - `docs/RFC-0012-run-regression-suites-and-llm-judging.md` (`Accepted`)
348
375
  - `docs/PRIVACY-BASELINE.md`
349
376
 
350
377
  ## Historical Snapshots
@@ -1 +1 @@
1
- {"version":3,"file":"run-record-utils.d.ts","sourceRoot":"","sources":["../src/run-record-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-record-utils.d.ts","sourceRoot":"","sources":["../src/run-record-utils.ts"],"names":[],"mappings":"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"}
@@ -424,9 +424,21 @@ function cloneAgentWithReplayedTools(sourceAgent, mode, queues, replayStats, onM
424
424
  },
425
425
  };
426
426
  });
427
- const wrappedHandoffs = sourceAgent.handoffs.map((handoffAgent) => cloneAgentWithReplayedTools(handoffAgent, mode, queues, replayStats, onMissingToolCall, cache));
427
+ const wrappedHandoffRules = sourceAgent.handoffRules.map((handoffRule) => {
428
+ const clonedHandoffAgent = cloneAgentWithReplayedTools(handoffRule.agent, mode, queues, replayStats, onMissingToolCall, cache);
429
+ if (handoffRule.enabled) {
430
+ return {
431
+ agent: clonedHandoffAgent,
432
+ enabled: handoffRule.enabled,
433
+ };
434
+ }
435
+ return {
436
+ agent: clonedHandoffAgent,
437
+ };
438
+ });
428
439
  cloned.tools = wrappedTools;
429
- cloned.handoffs = wrappedHandoffs;
440
+ cloned.handoffRules = wrappedHandoffRules;
441
+ cloned.handoffs = wrappedHandoffRules.map((rule) => rule.agent);
430
442
  return cloned;
431
443
  }
432
444
  async function resolveReplayAgent(input) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiastudio/aioc",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -37,6 +37,7 @@
37
37
  "example:non-regression": "tsx examples/core/non-regression/v1-v2-runrecord-diff.ts",
38
38
  "example:run-regression": "tsx examples/core/run-regression/age-adapted-suite.ts",
39
39
  "example:run-regression-judge": "npm run regression-judge:build && tsx packages/aioc-regression-judge/examples/age-adapted-suite-with-judge.ts",
40
+ "example:self-harness": "npm run regression-judge:build && tsx examples/self-harness/phase-1.ts",
40
41
  "inspect:samples": "tsx scripts/generate-aioc-inspect-samples.ts",
41
42
  "docs:sync": "node scripts/sync-aioc-docs.mjs",
42
43
  "docs:dev": "npm run docs:sync && cd apps/aioc-docs && zsh -lc 'npm run dev'",