agent-inspect 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - efb3fef: Release v2.2.0 with local test reporter artifacts and CI summaries.
8
+
9
+ Adds the public optional `@agent-inspect/vitest` and `@agent-inspect/jest` reporter packages, the shared experimental `agent-inspect/reporters` helpers, and the `agent-inspect ci-summary` workflow for deterministic local reporter manifests and CI artifacts.
10
+
11
+ ## Unreleased
12
+
13
+ ### Draft v2.2.0 Notes
14
+
15
+ - Prepared the v2.2 reporter and CI workflow release notes for local Vitest/Jest reporter artifacts, the shared `agent-inspect/reporters` manifest helpers, and `agent-inspect ci-summary`.
16
+ - Reporter artifacts remain local-only and metadata-bounded. `ci-summary` reads reporter manifest JSON only, validates relative artifact paths, and does not read trace contents, upload artifacts, call GitHub APIs, or mutate repository state.
17
+ - `@agent-inspect/vitest` and `@agent-inspect/jest` remain private/unpublished until maintainer first-publication setup is explicitly cleared before release prep.
18
+
19
+ ## 2.1.0
20
+
21
+ ### Minor Changes
22
+
23
+ - 1e5e889: Release v2.1.0 with deterministic local eval and redaction utilities.
24
+
25
+ Adds the public optional `@agent-inspect/redact` and `@agent-inspect/eval` packages, root CLI redaction and eval workflows, shared redaction profiles/findings, deterministic local eval checks, and adoption recipes for local eval, share-safe traces, and CI artifacts.
26
+
3
27
  ## 2.0.0
4
28
 
5
29
  ### Major Changes
package/README.md CHANGED
@@ -22,7 +22,7 @@ agent-inspect gives those runs **structure**: an **execution tree** you can read
22
22
 
23
23
  ## Install
24
24
 
25
- Current npm release line: **1.9.x** for the existing public packages. The v2 contract work on `main` is unreleased until the release-readiness gate completes. `@agent-inspect/openai-agents` v1.9 publication recovery is a separate maintainer npm setup item and is not retried by the v2 train.
25
+ Current npm release line: **2.1.x** for the existing public packages. v2.1.0 adds deterministic local eval and reusable redaction utilities on top of the stable v2 trace contract: small root API, schema 1.0 persisted writer path, v0.1/v0.2/v1.0 read compatibility, and explicit non-destructive migration workflow.
26
26
 
27
27
  ```bash
28
28
  npm install agent-inspect
@@ -235,9 +235,12 @@ AGENT_INSPECT=1 node eval-runner.mjs
235
235
  - **Use an isolated inspector** with `createInspector()` and explicit local writers for tests/adapters.
236
236
  - **Correlate runs** with optional `correlationId`, `requestId`, `decisionId`, and `groupId` on `run_started` metadata.
237
237
  - **Redact before disk** with default key-based redaction, or choose `redactionProfile`: `local`, `share`, or `strict`.
238
- - **Inspect from the CLI** — `list`, `view`, `clean`, `logs`, `tail`, `export`, `open`, `migrate`, `diff`, `timeline`, `stats`, `search`, `what`, `report`.
238
+ - **Inspect from the CLI** — `list`, `view`, `clean`, `logs`, `tail`, `export`, `open`, `migrate`, `eval`, `redact`, `diff`, `timeline`, `stats`, `search`, `what`, `report`.
239
+ - **Run local evals** with `agent-inspect eval` or `@agent-inspect/eval`; built-in checks are deterministic heuristics over local traces, not model judges.
240
+ - **Redact local files** with `agent-inspect redact` or `@agent-inspect/redact` before creating shareable copies.
239
241
  - **Migrate explicitly** with `agent-inspect migrate <trace.jsonl> --to 1.0 --dry-run` or `--output <file>`; originals are never overwritten by default.
240
242
  - **Export share-safe copies** — `export --redaction-profile share` (or `strict`) writes local Markdown/HTML/OpenInference/OTLP JSON only.
243
+ - **Create local CI artifacts** with `agent-inspect artifacts`, and summarize local test-reporter manifests with `agent-inspect ci-summary`.
241
244
  - **Parse structured logs** you already emit (JSON first-class; log4js best-effort).
242
245
  - **Optional LangChain adapter** — metadata-only by default; optional `persist: true` and `stream: true` streaming metadata (no full token capture by default).
243
246
  - **Optional AI SDK adapter** — experimental `@agent-inspect/ai-sdk` telemetry integration for AI SDK v6; metadata-only by default with `recordInputs: false` and `recordOutputs: false`.
@@ -296,6 +299,8 @@ More detail: [docs/LOGS.md](docs/LOGS.md) · [docs/LOG-TO-TREE-QUICKSTART.md](do
296
299
  | `export` | Write Markdown / HTML / OpenInference-compatible JSON / OTLP JSON **locally** |
297
300
  | `open` | Read AgentInspect JSONL, OpenInference JSON, or OTLP JSON locally |
298
301
  | `migrate` | Convert a local AgentInspect JSONL file to schema 1.0 with dry-run or explicit output |
302
+ | `eval` | Deterministic local evals over existing traces |
303
+ | `redact` | Redact a local JSON/JSONL file or trace copy |
299
304
  | `diff` | Compare two local runs (read-only) |
300
305
  | `timeline` | Chronological view of one run |
301
306
  | `stats` | Local aggregates over a trace directory |
@@ -304,6 +309,7 @@ More detail: [docs/LOGS.md](docs/LOGS.md) · [docs/LOG-TO-TREE-QUICKSTART.md](do
304
309
  | `report` | Markdown/HTML inspection report (what + timeline + tree) |
305
310
  | `check` / `scan` / `verify-safe` | Deterministic local trace checks and best-effort safety verification |
306
311
  | `artifacts` | Safe local CI artifact bundles and optional step-summary file output |
312
+ | `ci-summary` | Summarize local Vitest/Jest reporter artifact manifests for CI |
307
313
 
308
314
  ![Timeline with slow-step focus for one run](https://raw.githubusercontent.com/rajudandigam/agent-inspect/main/docs/assets/demos/timeline.gif)
309
315
 
@@ -316,6 +322,8 @@ Full flags and behavior: [docs/CLI.md](docs/CLI.md).
316
322
  - Debug a **failed tool call** or thrown error in a support or ops agent.
317
323
  - See **which step dominated latency** in a multi-step planner or RAG pipeline.
318
324
  - **Diff two runs** after a prompt, model, or routing change (see [diff examples](docs/DIFF.md)).
325
+ - Run **local eval checks** over a trace before sharing or creating CI artifacts.
326
+ - **Redact** a local trace/file before attaching it to a PR, issue, or support thread.
319
327
  - Point **`logs`** / **`tail`** at existing job or service logs to get a **local execution view** without shipping data upstream.
320
328
  - **Export** a run to Markdown for a PR, postmortem, or internal thread — use `--redaction-profile share` for share-safe copies, then review before sharing.
321
329
  - Keep traces **on disk** while still using enterprise observability elsewhere.
@@ -332,6 +340,12 @@ AgentInspect is the **local-first trace workbench** for TypeScript AI agents:
332
340
 
333
341
  Pass `enabled: false` to `inspectRun` for a no-trace passthrough. Use `maybeInspectRun` with `AGENT_INSPECT=1` to toggle tracing in eval or CI — see [docs/API.md](docs/API.md).
334
342
 
343
+ **Shipped in 2.1.0:** deterministic local eval and redaction utilities. Linked release aligns `agent-inspect`, `@agent-inspect/ai-sdk`, `@agent-inspect/langchain`, `@agent-inspect/tui`, `@agent-inspect/openai-agents`, `@agent-inspect/redact`, and `@agent-inspect/eval` at **2.1.0**.
344
+
345
+ **Shipped in 2.0.0:** stable root API contract, schema 1.0 persisted writer path, v0.1/v0.2/v1.0 read compatibility, and explicit trace migration workflow. Linked release aligns `agent-inspect`, `@agent-inspect/ai-sdk`, `@agent-inspect/langchain`, `@agent-inspect/tui`, and `@agent-inspect/openai-agents` at **2.0.0**.
346
+
347
+ **Shipped in 1.9.0:** private harness workspace foundation, explain dry-run/local analysis, promoted adapter adoption paths, and the v2 root API slimming plan.
348
+
335
349
  **Shipped in 1.8.0:** experimental deterministic checks (`agent-inspect/checks` and `agent-inspect check`), safe-sharing workflows (`scan`, `verify-safe`, safe artifacts), and first public `@agent-inspect/openai-agents` package. Linked release aligns `agent-inspect`, `@agent-inspect/ai-sdk`, `@agent-inspect/langchain`, `@agent-inspect/tui`, and `@agent-inspect/openai-agents` at **1.8.0**.
336
350
 
337
351
  **Shipped in 1.7.0:** experimental `@agent-inspect/ai-sdk` telemetry integration for AI SDK v6 with a local no-network [ai-sdk-local-telemetry recipe](examples/recipes/ai-sdk-local-telemetry/), adapter conformance fixtures, OpenAI Agents/LangGraph support decisions, and local-first adapter docs. Examples keep `recordInputs: false`, `recordOutputs: false`, metadata-only capture, and no upload behavior. Linked release aligns `agent-inspect`, `@agent-inspect/ai-sdk`, `@agent-inspect/langchain`, and `@agent-inspect/tui` at **1.7.0**.
@@ -340,7 +354,7 @@ Pass `enabled: false` to `inspectRun` for a no-trace passthrough. Use `maybeInsp
340
354
 
341
355
  **Shipped in 1.5.0:** non-breaking subpath exports; `what` and `report` CLI; dual-format read path (v0.1 + v0.2 JSONL); [what-report-inspect recipe](examples/recipes/what-report-inspect/). Linked release aligns all three npm packages at **1.5.0**.
342
356
 
343
- **Roadmap beyond current release work:** future work continues from the local runtime, universal ingestion, and optional adapter foundations. See [ROADMAP.md](ROADMAP.md).
357
+ **Roadmap beyond current release work:** v2.2 prepares test reporters and CI workflows, followed by adapter hardening, sessions/MCP telemetry, guardrails, optional viewer/IDE surfaces, and conditional v3 extensibility. See [ROADMAP.md](ROADMAP.md).
344
358
 
345
359
  **Shipped in 1.4.0:** CI artifact recipe ([docs/CI-ARTIFACTS.md](docs/CI-ARTIFACTS.md)); `timeline`, `stats`, and `search` CLI; core helpers `buildRunTimeline`, `buildTraceStats`, `searchTraces`. Linked release aligns all three npm packages at **1.4.0**.
346
360
 
@@ -395,6 +409,12 @@ npx agent-inspect view <run-id> --tui
395
409
 
396
410
  The TUI is available as a separate optional package; its programmatic API is experimental, while the CLI integration (`view --tui`) is the intended usage. Details: [docs/ADAPTERS.md](docs/ADAPTERS.md).
397
411
 
412
+ ### Test reporter artifacts (`@agent-inspect/vitest`, `@agent-inspect/jest`)
413
+
414
+ Optional Vitest/Jest reporter packages are implemented in the workspace for local failure artifacts, but remain private/unpublished until the maintainer clears first-publication setup for a v2.2 release. They write shared `schemaVersion: "0.1"` reporter manifests with safe relative artifact paths and bounded structural metadata. Use `agent-inspect ci-summary` to summarize those local manifests in CI without reading trace contents or calling GitHub APIs.
415
+
416
+ Reporter artifact behavior and API details are documented in [docs/API.md](docs/API.md) and [docs/CI-ARTIFACTS.md](docs/CI-ARTIFACTS.md).
417
+
398
418
  ## Examples and recipes
399
419
 
400
420
  | Example | Shows |
@@ -418,7 +438,10 @@ The TUI is available as a separate optional package; its programmatic API is exp
418
438
  | [examples/recipes/parallel-tools](examples/recipes/parallel-tools) | Parallel tools |
419
439
  | [examples/recipes/github-actions-artifact](examples/recipes/github-actions-artifact) | CI trace artifacts |
420
440
  | [examples/recipes/deterministic-ci-checks](examples/recipes/deterministic-ci-checks) | v1.8 checks, baseline, and safe CI artifacts |
421
- | [examples/recipes/test-reporter-artifacts](examples/recipes/test-reporter-artifacts) | v1.8 Vitest/Jest reporter artifact patterns |
441
+ | [examples/recipes/eval-local-checks](examples/recipes/eval-local-checks) | v2.1 deterministic local eval checks |
442
+ | [examples/recipes/redact-share-safe-file](examples/recipes/redact-share-safe-file) | v2.1 share-safe local redaction copy |
443
+ | [examples/recipes/eval-ci-artifacts](examples/recipes/eval-ci-artifacts) | v2.1 eval before safe CI artifacts |
444
+ | [examples/recipes/test-reporter-artifacts](examples/recipes/test-reporter-artifacts) | Vitest/Jest reporter artifact patterns |
422
445
  | [examples/recipes/what-report-inspect](examples/recipes/what-report-inspect/) | `what` + `report` inspection |
423
446
  | [examples/recipes/runtime-and-ingestion](examples/recipes/runtime-and-ingestion/) | v1.6 runtime writers + universal ingestion |
424
447
 
package/docs/ADAPTERS.md CHANGED
@@ -128,8 +128,12 @@ await agent.invoke(input, { callbacks: [callback] });
128
128
  npx agent-inspect list --dir ./.agent-inspect
129
129
  npx agent-inspect view <run-id> --dir ./.agent-inspect
130
130
  npx agent-inspect export <run-id> --format markdown --redaction-profile share
131
+ npx agent-inspect eval <run-id> --dir ./.agent-inspect --require-success --json
132
+ npx agent-inspect redact ./.agent-inspect/<trace-file>.jsonl --profile share --json
131
133
  ```
132
134
 
135
+ `eval` and `redact` read local adapter traces only. They do not call model providers, upload traces, or loosen the adapter metadata-only capture defaults.
136
+
133
137
  ![LangChain callback with persist true writing inspectable JSONL](../assets/demos/langchain-persistence.gif)
134
138
 
135
139
  *Synthetic demo — [examples/08-langchain-adapter](../../examples/08-langchain-adapter/README.md).*
package/docs/API.md CHANGED
@@ -222,9 +222,32 @@ No network writer, OpenTelemetry exporter, provider wrapper, or global monkey-pa
222
222
 
223
223
  Recipe: [examples/recipes/ai-sdk-local-telemetry](../examples/recipes/ai-sdk-local-telemetry/).
224
224
 
225
+ ## 11.1 Experimental `agent-inspect/reporters` APIs
226
+
227
+ `agent-inspect/reporters` contains shared, dependency-free helpers for local test reporter artifacts. The subpath does not import Vitest, Jest, GitHub SDKs, provider SDKs, or upload clients.
228
+
229
+ Import from `agent-inspect/reporters`:
230
+
231
+ ```ts
232
+ import {
233
+ TRACE_ARTIFACT_MANIFEST_SCHEMA_VERSION,
234
+ createReporterArtifactPath,
235
+ createTraceArtifactManifest,
236
+ validateReporterArtifactPath,
237
+ type TraceArtifactManifest,
238
+ } from "agent-inspect/reporters";
239
+ ```
240
+
241
+ - **`TRACE_ARTIFACT_MANIFEST_SCHEMA_VERSION`**: currently `"0.1"` for local reporter manifests.
242
+ - **`createTraceArtifactManifest(options)`**: clones, sorts, and deduplicates reporter results/artifacts into deterministic manifest JSON.
243
+ - **`createReporterArtifactPath(options)`**: creates a safe relative artifact path under a caller-provided output directory.
244
+ - **`validateReporterArtifactPath(options)`**: rejects empty, absolute, traversal, Windows-absolute, and symlink-escape style paths before reporters or `ci-summary` trust artifact links.
245
+
246
+ The manifest records framework, generation time, bounded test results, artifact descriptors, redaction profile, and diagnostics. It is an artifact index only; it should not contain raw trace contents, prompts, model outputs, request/response bodies, headers, API keys, secrets, or full tool payloads.
247
+
225
248
  ## 12. Experimental `@agent-inspect/vitest` APIs
226
249
 
227
- `@agent-inspect/vitest` is an optional experimental workspace package for local Vitest failure artifacts. It remains private/unpublished. It does not add a Vitest dependency to root/core, does not upload artifacts, and does not infer trace relationships by timestamp.
250
+ `@agent-inspect/vitest` is an optional experimental workspace package for local Vitest failure artifacts. It remains private/unpublished pending maintainer first-publication setup. It does not add a Vitest dependency to root/core, does not upload artifacts, and does not infer trace relationships by timestamp.
228
251
 
229
252
  Import from `@agent-inspect/vitest`:
230
253
 
@@ -237,6 +260,7 @@ import { createAgentInspectVitestReporter } from "@agent-inspect/vitest";
237
260
  - **`githubSummary`**: optional GitHub step-summary file path. The reporter appends bounded structural counts only and does not use the GitHub API.
238
261
  - **`retainSuccessful`**: `false`/undefined keeps no passing-test artifacts; `true` keeps up to `maxSuccessfulTraces`; a number keeps up to that many passing-test artifacts.
239
262
  - **`maxSuccessfulTraces`**: upper bound for passing-test artifacts, capped by the reporter.
263
+ - **`redactionProfile`**: manifest artifact profile, `local` (default), `share`, or `strict`.
240
264
  - **`resolveTrace(test)`**: optional explicit association resolver when task metadata is not convenient.
241
265
  - **`onDiagnostic(diagnostic)`**: observes non-fatal reporter/artifact failures.
242
266
  - **`getDiagnostics()`** and **`getArtifacts()`** expose reporter state for tests and custom harnesses.
@@ -252,11 +276,11 @@ ctx.task.meta.agentInspect = {
252
276
  };
253
277
  ```
254
278
 
255
- Artifacts are safe structural summaries. They include bounded test identity, status, trace run id, and trace filename, but they do not read or embed raw trace contents, prompts, generated outputs, request/response bodies, headers, API keys, secrets, or tool payloads. Reporter/artifact failures are diagnostics and do not replace original Vitest failures.
279
+ Artifacts are safe structural summaries. The reporter writes a shared `schemaVersion: "0.1"` manifest wrapper with package metadata, generated time, framework, test results, artifact descriptors, relative paths, and redaction profile. It includes bounded test identity, status, trace run id, and trace filename, but it does not read or embed raw trace contents, prompts, generated outputs, request/response bodies, headers, API keys, secrets, or tool payloads. Reporter/artifact failures are diagnostics and do not replace original Vitest failures.
256
280
 
257
281
  ## 13. Experimental `@agent-inspect/jest` APIs
258
282
 
259
- `@agent-inspect/jest` is an optional experimental workspace package for local Jest failure artifacts. It remains private/unpublished. It does not add a Jest dependency to root/core, does not upload artifacts, and does not infer trace relationships by timestamp.
283
+ `@agent-inspect/jest` is an optional experimental workspace package for local Jest failure artifacts. It remains private/unpublished pending maintainer first-publication setup. It does not add a Jest dependency to root/core, does not upload artifacts, and does not infer trace relationships by timestamp.
260
284
 
261
285
  Import from `@agent-inspect/jest`:
262
286
 
@@ -270,6 +294,7 @@ import { AgentInspectJestReporter, createAgentInspectJestReporter } from "@agent
270
294
  - **`githubSummary`**: optional GitHub step-summary file path. The reporter appends bounded structural counts only and does not use the GitHub API.
271
295
  - **`retainSuccessful`**: `false`/undefined keeps no passing-test artifacts; `true` keeps up to `maxSuccessfulTraces`; a number keeps up to that many passing-test artifacts.
272
296
  - **`maxSuccessfulTraces`**: upper bound for passing-test artifacts, capped by the reporter.
297
+ - **`redactionProfile`**: manifest artifact profile, `local` (default), `share`, or `strict`.
273
298
  - **`associations`**: explicit trace associations keyed by `file::fullName`, `basename::fullName`, or `fullName`.
274
299
  - **`resolveTrace(test)`**: optional explicit association resolver for normalized Jest assertion results.
275
300
  - **`onDiagnostic(diagnostic)`**: observes non-fatal reporter/artifact failures.
@@ -294,7 +319,7 @@ reporters: [
294
319
  ],
295
320
  ```
296
321
 
297
- Artifacts are safe structural summaries. They include bounded test identity, status, trace run id, and trace filename, but they do not read or embed raw trace contents, prompts, generated outputs, request/response bodies, headers, API keys, secrets, or tool payloads. Reporter/artifact failures are diagnostics and do not replace original Jest failures.
322
+ Artifacts are safe structural summaries. The reporter writes a shared `schemaVersion: "0.1"` manifest wrapper with package metadata, generated time, framework, test results, artifact descriptors, relative paths, and redaction profile. It includes bounded test identity, status, trace run id, and trace filename, but it does not read or embed raw trace contents, prompts, generated outputs, request/response bodies, headers, API keys, secrets, or tool payloads. Reporter/artifact failures are diagnostics and do not replace original Jest failures.
298
323
 
299
324
  ## 14. Experimental `@agent-inspect/openai-agents` APIs
300
325
 
@@ -497,7 +522,47 @@ The checks API is experimental in v1.x. The `agent-inspect check` CLI uses this
497
522
 
498
523
  Recipes: [deterministic-ci-checks](../examples/recipes/deterministic-ci-checks/README.md) for check/baseline/artifact workflows, and [test-reporter-artifacts](../examples/recipes/test-reporter-artifacts/README.md) for Vitest/Jest reporter configuration patterns.
499
524
 
500
- ## 22. Experimental local explain APIs (v1.9)
525
+ ## 22. Experimental `@agent-inspect/eval` APIs (v2.1)
526
+
527
+ `@agent-inspect/eval` is an optional package for deterministic local evals over existing traces. It consumes normalized reader output or local trace paths, returns stable JSON-compatible results, and does not call model providers, upload traces, replay agents, or create hosted datasets.
528
+
529
+ Import from `@agent-inspect/eval`:
530
+
531
+ ```ts
532
+ import { checks, evalRun, renderEvalMarkdown } from "@agent-inspect/eval";
533
+ ```
534
+
535
+ - **`evalRun(input, options?)`**: runs selected eval rules over a local trace path or `TraceReadResult`.
536
+ - **`checks`**: built-in deterministic rule factories for run status, tool usage, duration, depth, retries, token totals, failed steps, retrieval-before-generation, decision metadata, context overlap, quote overlap, citation presence, required source IDs, answer length bounds, and banned unsupported phrases.
537
+ - **`renderEvalMarkdown(result)`**: renders a deterministic Markdown summary suitable for local CI logs, PR text, or artifact files after review.
538
+ - Result types include **`EvalRunResult`**, **`EvalFinding`**, **`EvalDiagnostic`**, and **`EvalRule`**.
539
+
540
+ Findings are designed for CI output: they include rule IDs, expected/actual structural summaries, and evidence paths. They should not include raw prompt, answer, context, request/response, header, API key, secret, or full tool payload values.
541
+
542
+ CLI wrapper: `agent-inspect eval <trace-path-or-run-id> --require-success --json`.
543
+
544
+ Recipes: [eval-local-checks](../examples/recipes/eval-local-checks/README.md) and [eval-ci-artifacts](../examples/recipes/eval-ci-artifacts/README.md).
545
+
546
+ ## 23. Experimental `@agent-inspect/redact` APIs (v2.1)
547
+
548
+ `@agent-inspect/redact` is an optional package for reusable local redaction. It powers the root CLI `redact` workflow and shared trace-safety integrations. Redaction operates on local values/files and returns a redacted copy; it does not mutate the source object, upload content, or claim compliance-grade DLP.
549
+
550
+ Import from `@agent-inspect/redact`:
551
+
552
+ ```ts
553
+ import { createRedactor, redact } from "@agent-inspect/redact";
554
+ ```
555
+
556
+ - **`redact(value, options?)`**: returns `{ value, findings, redacted, profile }` for a redacted copy.
557
+ - **`createRedactor(options?)`**: creates a reusable redactor with profile, custom detectors, and custom rules.
558
+ - **Profiles**: `local`, `share`, and `strict`.
559
+ - **Findings**: detector id, path, action, severity, and bounded preview metadata where applicable.
560
+
561
+ CLI wrapper: `agent-inspect redact <trace-or-file> --profile share --json`.
562
+
563
+ Recipe: [redact-share-safe-file](../examples/recipes/redact-share-safe-file/README.md).
564
+
565
+ ## 24. Experimental local explain APIs (v1.9)
501
566
 
502
567
  `buildLocalExplanation()` creates a deterministic local explanation payload from a reader-selected `InspectRunTree`. It performs no network I/O, does not call model providers, and separates observed facts from deterministic inference labels.
503
568
 
@@ -522,7 +587,7 @@ Provider design gate:
522
587
  - Provider prompts must use redacted facts only, label inferred claims, and must not request raw chain-of-thought.
523
588
  - Provider packages or SDKs must not become root/core runtime dependencies.
524
589
 
525
- ## 23. Experimental `@agent-inspect/harness` APIs
590
+ ## 25. Experimental `@agent-inspect/harness` APIs
526
591
 
527
592
  `@agent-inspect/harness` is a private experimental workspace package during the v1.9 release train. It provides a no-framework fixture runner for local targets and recipes; first public package publication remains a manual maintainer gate.
528
593
 
@@ -548,23 +613,23 @@ The harness package does not add root/core dependencies, does not upload traces,
548
613
 
549
614
  Recipes: [harness-basic](../examples/recipes/harness-basic/README.md) and [harness-adapter-local](../examples/recipes/harness-adapter-local/README.md).
550
615
 
551
- ## 24. Deprecated APIs
616
+ ## 26. Deprecated APIs
552
617
 
553
618
  No deprecated APIs are declared as of 1.4.0.
554
619
 
555
- ## 25. Removal / deprecation policy
620
+ ## 27. Removal / deprecation policy
556
621
 
557
622
  - Stable APIs are not removed within the current major version.
558
623
  - If removal is necessary, the API should be **deprecated** first, documented, and kept for a reasonable window (target: at least one minor line) unless security requires faster action.
559
624
 
560
- ## 26. Backward compatibility policy
625
+ ## 28. Backward compatibility policy
561
626
 
562
627
  - Manual trace JSONL (`schemaVersion: "0.1"`) remains readable.
563
628
  - Additive schema changes are allowed in minor versions.
564
629
  - Breaking changes require a major version.
565
630
  - Unknown fields should be ignored where safe.
566
631
 
567
- ## 25. Examples
632
+ ## 29. Examples
568
633
 
569
634
  ### Minimal manual trace
570
635
 
package/docs/CLI.md CHANGED
@@ -28,9 +28,12 @@ Core commands:
28
28
  - `open` — read supported local trace files, directories, or stdin through the canonical reader pipeline
29
29
  - `migrate` — convert one local AgentInspect JSONL file to schema 1.0 with dry-run or explicit output
30
30
  - `check` — run deterministic local trace checks with stable JSON and exit codes
31
+ - `eval` — run deterministic local evals over existing traces
32
+ - `redact` — redact a local JSON/JSONL file or trace copy
31
33
  - `scan` — best-effort local safety scan for trace capture risks
32
34
  - `verify-safe` — best-effort local trace safety verification
33
35
  - `artifacts` — create safe local CI trace artifact bundles and optional step summaries
36
+ - `ci-summary` — summarize local reporter artifact manifests for CI
34
37
  - `diff` — compare two manual traces (local, read-only)
35
38
  - `timeline` — chronological view of one run (local JSONL)
36
39
  - `stats` — local aggregate stats over a trace directory
@@ -58,6 +61,12 @@ Exception: `check` uses CI-oriented semantic exit codes:
58
61
  - **3**: trace input could not be read
59
62
  - **4**: unsupported or ambiguous trace format
60
63
 
64
+ Exception: `eval` uses local eval semantic exit codes:
65
+
66
+ - **0**: all selected eval rules passed
67
+ - **1**: eval ran and at least one error-severity rule failed
68
+ - **2**: invalid arguments, invalid config, unreadable input, unsupported input, ambiguous input, or run-selection errors
69
+
61
70
  Exception: `scan` and `verify-safe` use local safety status exit codes:
62
71
 
63
72
  - **0**: status is SAFE or SAFE WITH WARNINGS
@@ -79,6 +88,8 @@ Many commands support `--json` for scripting. JSON output is intended to be:
79
88
  - Log-derived output includes **confidence** labels and avoids inventing parent-child relationships.
80
89
  - Redaction defaults are conservative (e.g. `authorization`, `cookie`, `token`, `apiKey`, `password`, `secret`, `email`).
81
90
  - Exported payloads are **redacted by default** unless explicitly configured otherwise.
91
+ - `eval` is deterministic and local-only. It does not replay agents, call model providers, upload traces, or create hosted datasets.
92
+ - `redact` writes or prints a redacted copy. It does not mutate source trace files.
82
93
  - `scan` and `verify-safe` are best-effort local checks, not compliance, privacy, security, or regulatory certifications.
83
94
  - `artifacts` renders structural summaries and check evidence only; it does not include raw prompt/output bodies, request/response bodies, headers, API keys, secrets, or full tool payloads.
84
95
 
@@ -322,7 +333,85 @@ npx agent-inspect check trace.jsonl --max-duration-ms 30000 --required-tool sear
322
333
 
323
334
  Recipe: [examples/recipes/deterministic-ci-checks](../examples/recipes/deterministic-ci-checks/README.md)
324
335
 
325
- ### 6.10 `scan` and `verify-safe`
336
+ ### 6.10 `eval`
337
+
338
+ Run deterministic local evals against an existing trace. This command reads through the same local reader pipeline as `open` and `check`; it does not rerun agents, call models, upload traces, mutate inputs, or create a hosted dataset.
339
+
340
+ ```bash
341
+ agent-inspect eval <trace-path-or-run-id> [options]
342
+ ```
343
+
344
+ Options:
345
+
346
+ - `--dir <path>`: trace directory for run-id lookup
347
+ - `--format <agent-inspect-jsonl|openinference-json|otlp-json>`: explicit trace input format
348
+ - `--run <run-id>`: select a run when input contains multiple runs
349
+ - `--config <path>`: eval config (`.json`, `.js`, `.mjs`, or `.cjs`); TypeScript configs are rejected until an explicit loader is approved
350
+ - `--json`: print deterministic JSON eval result
351
+ - `--markdown`: print deterministic Markdown eval summary
352
+ - `--require-success`: require the selected run to complete successfully
353
+ - `--required-tool <name>`: require a tool name (repeatable)
354
+ - `--forbid-tool <name>` / `--forbidden-tool <name>`: forbid a tool name (repeatable)
355
+ - `--max-duration-ms <number>`, `--max-depth <number>`, `--max-retries <number>`, `--max-total-tokens <number>`
356
+ - `--require-retrieval-before-generation`
357
+ - `--required-decision-metadata <key>`: require decision metadata (repeatable)
358
+ - `--context-overlap`, `--min-context-overlap <number>`, `--min-shared-terms <number>`
359
+ - `--quote-overlap`
360
+ - `--citation-presence`
361
+ - `--required-source-id <id>`: require a source id in context or citations (repeatable)
362
+ - `--min-answer-characters <number>`, `--max-answer-characters <number>`, `--min-answer-words <number>`, `--max-answer-words <number>`
363
+ - `--banned-phrase <text>`: ban unsupported-answer phrasing (repeatable)
364
+
365
+ Example config:
366
+
367
+ ```json
368
+ {
369
+ "eval": {
370
+ "requireSuccess": true,
371
+ "requiredTools": ["searchDocs"],
372
+ "forbiddenTools": ["deleteAccount"],
373
+ "citationPresence": true,
374
+ "contextOverlap": { "minOverlap": 0.2 },
375
+ "requiredSourceIds": ["policy-30-day"]
376
+ }
377
+ }
378
+ ```
379
+
380
+ Examples:
381
+
382
+ ```bash
383
+ npx agent-inspect eval fixtures/traces-v0.2/manual-basic.jsonl --require-success --json
384
+ npx agent-inspect eval trace.jsonl --forbid-tool deleteAccount --markdown
385
+ npx agent-inspect eval trace.jsonl --config agent-inspect.eval.json --json
386
+ ```
387
+
388
+ Recipes: [eval-local-checks](../examples/recipes/eval-local-checks/README.md) and [eval-ci-artifacts](../examples/recipes/eval-ci-artifacts/README.md).
389
+
390
+ ### 6.11 `redact`
391
+
392
+ Redact a local JSON or JSONL trace/file. The command prints or writes a redacted copy and reports bounded findings; it does not mutate the source file or upload content.
393
+
394
+ ```bash
395
+ agent-inspect redact <trace-or-file> [options]
396
+ ```
397
+
398
+ Options:
399
+
400
+ - `--dir <path>`: trace directory for run-id lookup
401
+ - `--profile <local|share|strict>`: redaction profile (default `share`)
402
+ - `-o, --output <path>`: write redacted content to a file
403
+ - `--json`: print deterministic JSON wrapper with findings
404
+
405
+ Examples:
406
+
407
+ ```bash
408
+ npx agent-inspect redact trace.jsonl --profile share --json
409
+ npx agent-inspect redact trace.jsonl --profile strict -o trace.share.jsonl
410
+ ```
411
+
412
+ Recipe: [redact-share-safe-file](../examples/recipes/redact-share-safe-file/README.md).
413
+
414
+ ### 6.12 `scan` and `verify-safe`
326
415
 
327
416
  Run best-effort local safety verification for supported trace inputs. These commands are local and read-only: they do not rerun agents, call models, upload traces, mutate input files, or certify compliance.
328
417
 
@@ -361,7 +450,7 @@ npx agent-inspect verify-safe minimal-success --dir fixtures/traces
361
450
  npx agent-inspect verify-safe trace.jsonl --max-string-length 8192 --json
362
451
  ```
363
452
 
364
- ### 6.11 `artifacts`
453
+ ### 6.13 `artifacts`
365
454
 
366
455
  Create deterministic local CI artifacts for supported trace inputs. This command is local and read-only for trace inputs: it does not rerun agents, call models, upload files, use GitHub APIs, or mutate repository state. It writes only to `--output-dir` and, when requested, a local step-summary file.
367
456
 
@@ -401,7 +490,33 @@ npx agent-inspect artifacts candidate.jsonl --baseline baseline.jsonl --output-d
401
490
 
402
491
  Recipe and sample workflow: [examples/recipes/deterministic-ci-checks](../examples/recipes/deterministic-ci-checks/README.md)
403
492
 
404
- ### 6.12 `diff`
493
+ ### 6.14 `ci-summary`
494
+
495
+ Summarize local Vitest/Jest reporter artifact manifests into deterministic Markdown or JSON. This command reads shared `schemaVersion: "0.1"` manifest JSON files only, including the reporter package wrapper emitted by the workspace reporters. It does not read trace contents, rerun tests, upload artifacts, call GitHub APIs, or mutate repository state. `--output` and `--github-summary` write local files.
496
+
497
+ ```bash
498
+ agent-inspect ci-summary <manifest...> [options]
499
+ ```
500
+
501
+ Options:
502
+
503
+ - `-o, --output <path>`: write the Markdown summary to a local file
504
+ - `--github-summary <path>`: append the Markdown summary to a local file, such as `$GITHUB_STEP_SUMMARY`
505
+ - `--json`: print deterministic JSON summary
506
+
507
+ Example:
508
+
509
+ ```bash
510
+ npx agent-inspect ci-summary .agent-inspect/jest-artifacts/tests/**/report.json \
511
+ --output ./artifacts/reporter-summary.md \
512
+ --github-summary "$GITHUB_STEP_SUMMARY"
513
+ ```
514
+
515
+ Reporter artifact paths in the summary are kept relative and validated conservatively. The summary includes bounded package/framework metadata, test identity, status counts, trace filenames, artifact paths, redaction profiles, and diagnostic counts only.
516
+
517
+ Recipe and sample workflow: [examples/recipes/github-actions-artifact](../examples/recipes/github-actions-artifact/README.md)
518
+
519
+ ### 6.15 `diff`
405
520
 
406
521
  Compare two manual trace runs. Diff is **local** and **read-only** (does not rerun agents).
407
522
 
@@ -465,7 +580,7 @@ Differences:
465
580
 
466
581
  More examples, including timing-only and structure-only diffs, are in `docs/DIFF.md`.
467
582
 
468
- ### 6.13 `timeline`
583
+ ### 6.16 `timeline`
469
584
 
470
585
  Chronological step list for one manual trace. Read-only; does not mutate JSONL files.
471
586
 
@@ -481,7 +596,7 @@ Options:
481
596
 
482
597
  ![Timeline with slow-step focus](../assets/demos/timeline.gif)
483
598
 
484
- ### 6.14 `stats`
599
+ ### 6.17 `stats`
485
600
 
486
601
  Local aggregate statistics over trace files in a directory. Read-only.
487
602
 
@@ -501,7 +616,7 @@ Options:
501
616
 
502
617
  Use `--correlation-id` or `--group-id` to filter runs by `run_started` metadata (see [API.md](./API.md)).
503
618
 
504
- ### 6.15 `search`
619
+ ### 6.18 `search`
505
620
 
506
621
  Deterministic search over local traces (substring / exact filters). No semantic search.
507
622
 
@@ -531,7 +646,7 @@ npx agent-inspect search --duration ">100ms" --json
531
646
 
532
647
  ![Search traces by status error](../assets/demos/search.gif)
533
648
 
534
- ### 6.16 `what`
649
+ ### 6.19 `what`
535
650
 
536
651
  Concise human-readable summary of one local trace run. Read-only; accepts v0.1 manual JSONL and v0.2 persisted-event JSONL through the shared dual-format normalization path. Vocabulary: [TRACE-VOCABULARY-V1.5.md](./proposals/TRACE-VOCABULARY-V1.5.md).
537
652
 
@@ -560,7 +675,7 @@ Outcome: Completed successfully.
560
675
  Slowest: plan (100ms, logic)
561
676
  ```
562
677
 
563
- ### 6.17 `report`
678
+ ### 6.20 `report`
564
679
 
565
680
  Generate a local inspection report combining **what happened**, **timeline**, and **execution tree** sections. The command reads local v0.1 manual JSONL and v0.2 persisted-event JSONL through the shared dual-format normalization path without mutating them. Distinct from `export` (which targets shareable tree snapshots and standards formats).
566
681
 
@@ -585,7 +700,7 @@ Example:
585
700
  npx agent-inspect report minimal-success --dir fixtures/traces --format html -o report.html
586
701
  ```
587
702
 
588
- ### 6.18 `explain`
703
+ ### 6.21 `explain`
589
704
 
590
705
  Explain a local trace using deterministic facts and local inference labels. This command reads through the same local reader pipeline as `open` / `check`; it does not call a model provider, upload traces, replay agents, or mutate input files.
591
706
 
package/docs/COMPARE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## Compare AgentInspect
2
2
 
3
- AgentInspect is a local-first execution-tree debugger for TypeScript AI agents. It’s designed for inner-loop debugging and quick inspection — not as a replacement for hosted observability, evaluation, or production monitoring platforms.
3
+ AgentInspect is a local-first execution-tree debugger for TypeScript AI agents. It’s designed for inner-loop debugging, deterministic local eval heuristics, redaction, and quick inspection — not as a replacement for hosted observability, dataset evaluation, or production monitoring platforms.
4
4
 
5
5
  ## AgentInspect vs console.log
6
6
 
@@ -16,7 +16,7 @@ LangSmith is a hosted/platform workflow for tracing, evaluation, and observabili
16
16
  AgentInspect is local-first CLI debugging:
17
17
 
18
18
  - Use AgentInspect to debug locally before/alongside LangSmith when iterating on agent logic.
19
- - AgentInspect does not provide hosted dashboards, dataset/eval workflows, or production tracing pipelines.
19
+ - AgentInspect does not provide hosted dashboards, dataset/eval management workflows, or production tracing pipelines.
20
20
 
21
21
  ## AgentInspect vs Langfuse
22
22
 
@@ -33,7 +33,7 @@ Braintrust is strong for evals, regressions, datasets, and production AI quality
33
33
 
34
34
  AgentInspect is lighter and local-first:
35
35
 
36
- - Use AgentInspect to understand a single run locally.
36
+ - Use AgentInspect to understand a single run locally and run deterministic trace checks/eval heuristics before sharing artifacts.
37
37
  - Use Braintrust when you want repeatable evals, comparisons at scale, and production quality workflows.
38
38
 
39
39
  ## AgentInspect vs Phoenix / OpenInference
@@ -61,9 +61,10 @@ AgentInspect avoids SDK/collector setup for local debugging:
61
61
  | --- | --- |
62
62
  | Local agent debugging | Strong fit |
63
63
  | No-account CLI tracing | Strong fit |
64
+ | Deterministic local eval heuristics | Good fit |
65
+ | Share-safe local redaction copy | Good fit |
64
66
  | Production dashboards | Not the goal |
65
67
  | Hosted eval datasets | Not the goal |
66
68
  | Prompt management | Not the goal |
67
69
  | Standards-aligned local export | Partial (compatibility-oriented) |
68
70
  | Full observability platform | Use a dedicated platform |
69
-
@@ -204,17 +204,34 @@ agent-inspect search --dir ./.agent-inspect --status error --limit 10
204
204
 
205
205
  For CI artifact workflows, see [CI-ARTIFACTS.md](./CI-ARTIFACTS.md) and [github-actions-artifact recipe](../examples/recipes/github-actions-artifact/).
206
206
 
207
- ## 10. Diff two runs
207
+ ## 10. Run local evals and redact share copies
208
+
209
+ After a trace exists, run deterministic eval checks without replaying the agent or calling a model provider:
210
+
211
+ ```bash
212
+ agent-inspect eval minimal-success --dir fixtures/traces --require-success --json
213
+ agent-inspect eval trace.jsonl --forbid-tool deleteAccount --citation-presence --json
214
+ ```
215
+
216
+ Before attaching a trace or JSON artifact to a PR, issue, or support thread, create a redacted local copy:
217
+
218
+ ```bash
219
+ agent-inspect redact trace.jsonl --profile share --json
220
+ ```
221
+
222
+ Recipes: [eval-local-checks](../examples/recipes/eval-local-checks/), [redact-share-safe-file](../examples/recipes/redact-share-safe-file/), and [eval-ci-artifacts](../examples/recipes/eval-ci-artifacts/).
223
+
224
+ ## 11. Diff two runs
208
225
 
209
226
  ```bash
210
227
  agent-inspect diff minimal-success minimal-error --dir fixtures/traces
211
228
  ```
212
229
 
213
- ## 11. Try recipes
230
+ ## 12. Try recipes
214
231
 
215
232
  See `examples/recipes/README.md`.
216
233
 
217
- ## 12. Optional framework adapters
234
+ ## 13. Optional framework adapters
218
235
 
219
236
  See [ADAPTERS.md](./ADAPTERS.md) for AI SDK local telemetry, OpenAI Agents local-only processing, and LangChain callbacks.
220
237
 
@@ -228,7 +245,7 @@ pnpm add @agent-inspect/langchain
228
245
 
229
246
  See [examples/08-langchain-adapter](../examples/08-langchain-adapter/README.md) and [docs/ADAPTERS.md](./ADAPTERS.md).
230
247
 
231
- ## 13. Optional TUI
248
+ ## 14. Optional TUI
232
249
 
233
250
  `@agent-inspect/tui` is optional and **experimental**. The CLI can invoke it with:
234
251
 
@@ -236,16 +253,17 @@ See [examples/08-langchain-adapter](../examples/08-langchain-adapter/README.md)
236
253
  agent-inspect view <runId> --tui
237
254
  ```
238
255
 
239
- ## 14. Safety notes
256
+ ## 15. Safety notes
240
257
 
241
258
  - Nothing uploads by default; core tracing, readers, checks, and exports are local-first.
259
+ - Eval and redaction commands read local inputs and do not call provider APIs or hosted services.
242
260
  - Redaction is on by default for log-derived attributes, **manual trace metadata (before disk)**, and exports. Pass `redact: false` to opt out of manual metadata redaction.
243
261
  - Export redaction shapes a local copy and does not mutate the source trace; review exported files before sharing.
244
262
  - Persisted events are size-bounded by default (see `docs/API.md`).
245
263
  - Confidence labels are required to keep attribution honest.
246
264
  - AgentInspect is for local debugging, not production monitoring.
247
265
 
248
- ## 15. Next docs
266
+ ## 16. Next docs
249
267
 
250
268
  - [docs/API.md](./API.md)
251
269
  - [docs/CLI.md](./CLI.md)
@@ -12,6 +12,12 @@ AgentInspect is **local-first** and **CLI-first**. These behaviors are intention
12
12
  - **OpenInference** and **OTLP JSON** exports are **compatibility-oriented** and **experimental**. Validate against your target collector or backend before relying on them.
13
13
  - Exports generate **strings/files locally** only—there is **no** automatic upload.
14
14
 
15
+ ## Eval and redaction
16
+
17
+ - **`agent-inspect eval` is deterministic local eval, not hosted evaluation.** Built-in rules are structural checks and grounding heuristics over existing traces. They do not call model providers, manage datasets, replay agents, or perform semantic LLM judging.
18
+ - **TypeScript eval configs are not loaded by default.** Use `.json`, `.js`, `.mjs`, or `.cjs` until an explicit loader path is approved.
19
+ - **`agent-inspect redact` creates a local redacted copy.** It does not mutate source traces, encrypt files, or guarantee compliance-grade detection. Review the exact output before sharing.
20
+
15
21
  ## Readers and `open`
16
22
 
17
23
  - **OpenInference** and **OTLP JSON** readers are **compatibility-oriented** and **experimental**. They normalize local JSON payloads into AgentInspect inspection trees and may warn on unsupported semantic fields.
@@ -103,6 +109,7 @@ pnpm compat:smoke
103
109
 
104
110
  - `agent-inspect artifacts --github-summary` writes a local step-summary file only. It does not call GitHub APIs, open PR comments, upload artifacts, or mutate repository state.
105
111
  - Baseline checks compare normalized structural facts from explicit candidate and baseline inputs. They are useful for CI regression evidence, not replay or semantic eval scoring.
112
+ - v2.1 eval/redact adoption recipes are local and deterministic: [eval-local-checks](../examples/recipes/eval-local-checks/), [redact-share-safe-file](../examples/recipes/redact-share-safe-file/), and [eval-ci-artifacts](../examples/recipes/eval-ci-artifacts/).
106
113
 
107
114
  ### What to include in a bug report
108
115