agent-inspect 6.29.4 → 6.29.6

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.
Files changed (87) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +1 -1
  3. package/docs/CLI.md +1 -1
  4. package/docs/LIMITATIONS.md +1 -1
  5. package/docs/TRACE-CONTRACTS.md +11 -8
  6. package/package.json +1 -1
  7. package/packages/cli/dist/{chunk-FJRUJSST.mjs → chunk-DBRMI7TC.mjs} +74 -30
  8. package/packages/cli/dist/chunk-DBRMI7TC.mjs.map +1 -0
  9. package/packages/cli/dist/index.cjs +229 -73
  10. package/packages/cli/dist/index.cjs.map +1 -1
  11. package/packages/cli/dist/index.mjs +148 -45
  12. package/packages/cli/dist/index.mjs.map +1 -1
  13. package/packages/cli/dist/{src-GZQVDREP.mjs → src-6CET2GW2.mjs} +3 -3
  14. package/packages/cli/dist/{src-GZQVDREP.mjs.map → src-6CET2GW2.mjs.map} +1 -1
  15. package/packages/core/dist/advanced.cjs +39 -10
  16. package/packages/core/dist/advanced.cjs.map +1 -1
  17. package/packages/core/dist/advanced.d.cts +10 -10
  18. package/packages/core/dist/advanced.d.ts +10 -10
  19. package/packages/core/dist/advanced.mjs +15 -14
  20. package/packages/core/dist/advanced.mjs.map +1 -1
  21. package/packages/core/dist/checks.cjs +78 -32
  22. package/packages/core/dist/checks.cjs.map +1 -1
  23. package/packages/core/dist/checks.d.cts +7 -7
  24. package/packages/core/dist/checks.d.ts +7 -7
  25. package/packages/core/dist/checks.mjs +5 -5
  26. package/packages/core/dist/{chunk-7LSVGXCN.mjs → chunk-26YJSETN.mjs} +3 -3
  27. package/packages/core/dist/{chunk-7LSVGXCN.mjs.map → chunk-26YJSETN.mjs.map} +1 -1
  28. package/packages/core/dist/{chunk-5M4QUYFH.mjs → chunk-BGF5JDJN.mjs} +3 -3
  29. package/packages/core/dist/{chunk-5M4QUYFH.mjs.map → chunk-BGF5JDJN.mjs.map} +1 -1
  30. package/packages/core/dist/{chunk-3I6KX32E.mjs → chunk-EE5Z2GQ3.mjs} +20 -12
  31. package/packages/core/dist/chunk-EE5Z2GQ3.mjs.map +1 -0
  32. package/packages/core/dist/{chunk-FKVCTIP6.mjs → chunk-KWBO36PH.mjs} +4 -4
  33. package/packages/core/dist/{chunk-FKVCTIP6.mjs.map → chunk-KWBO36PH.mjs.map} +1 -1
  34. package/packages/core/dist/{chunk-XPDNO3KH.mjs → chunk-OOX25GTH.mjs} +62 -35
  35. package/packages/core/dist/chunk-OOX25GTH.mjs.map +1 -0
  36. package/packages/core/dist/{chunk-BMRK6XHO.mjs → chunk-PBNBQRXV.mjs} +4 -4
  37. package/packages/core/dist/{chunk-BMRK6XHO.mjs.map → chunk-PBNBQRXV.mjs.map} +1 -1
  38. package/packages/core/dist/{chunk-KNRY24RS.mjs → chunk-Q5SLKV2Y.mjs} +3 -3
  39. package/packages/core/dist/{chunk-KNRY24RS.mjs.map → chunk-Q5SLKV2Y.mjs.map} +1 -1
  40. package/packages/core/dist/{chunk-AT7TICCQ.mjs → chunk-WN5PT4GV.mjs} +4 -4
  41. package/packages/core/dist/{chunk-AT7TICCQ.mjs.map → chunk-WN5PT4GV.mjs.map} +1 -1
  42. package/packages/core/dist/{chunk-DZBNXCLA.mjs → chunk-ZFJ2ICTC.mjs} +5 -5
  43. package/packages/core/dist/{chunk-DZBNXCLA.mjs.map → chunk-ZFJ2ICTC.mjs.map} +1 -1
  44. package/packages/core/dist/{context-B8zzsmjX.d.ts → context-B7DqUmsJ.d.ts} +3 -3
  45. package/packages/core/dist/{context-BhaVHtOT.d.cts → context-rR_jW9TH.d.cts} +3 -3
  46. package/packages/core/dist/diff.d.cts +3 -3
  47. package/packages/core/dist/diff.d.ts +3 -3
  48. package/packages/core/dist/exporters.d.cts +3 -3
  49. package/packages/core/dist/exporters.d.ts +3 -3
  50. package/packages/core/dist/exporters.mjs +5 -5
  51. package/packages/core/dist/{index-CrnEOoRu.d.ts → index-7hG_qggp.d.ts} +9 -4
  52. package/packages/core/dist/{index-BaQ48jrq.d.cts → index-CQJUNPPe.d.cts} +9 -4
  53. package/packages/core/dist/{index-BT3KcO6-.d.cts → index-Cdww9h50.d.cts} +2 -2
  54. package/packages/core/dist/{index-reskZCVW.d.ts → index-xUbdpcrP.d.ts} +2 -2
  55. package/packages/core/dist/index.cjs +11 -9
  56. package/packages/core/dist/index.cjs.map +1 -1
  57. package/packages/core/dist/index.d.cts +6 -6
  58. package/packages/core/dist/index.d.ts +6 -6
  59. package/packages/core/dist/index.mjs +6 -6
  60. package/packages/core/dist/{inspect-event-CDqjcrG_.d.cts → inspect-event-ClM5Z8om.d.cts} +6 -1
  61. package/packages/core/dist/{inspect-event-CDqjcrG_.d.ts → inspect-event-ClM5Z8om.d.ts} +6 -1
  62. package/packages/core/dist/{log-config-DcjV8ZjF.d.cts → log-config-CyRGaaWd.d.cts} +1 -1
  63. package/packages/core/dist/{log-config-N_c5AE09.d.ts → log-config-DAV_sR9A.d.ts} +1 -1
  64. package/packages/core/dist/logs.d.cts +3 -3
  65. package/packages/core/dist/logs.d.ts +3 -3
  66. package/packages/core/dist/{persisted-inspect-event-BMwvGIB8.d.ts → persisted-inspect-event-DG02LhEP.d.ts} +1 -1
  67. package/packages/core/dist/{persisted-inspect-event-DPaCiars.d.cts → persisted-inspect-event-q2ViiBW6.d.cts} +1 -1
  68. package/packages/core/dist/persisted.cjs +11 -9
  69. package/packages/core/dist/persisted.cjs.map +1 -1
  70. package/packages/core/dist/persisted.d.cts +5 -5
  71. package/packages/core/dist/persisted.d.ts +5 -5
  72. package/packages/core/dist/persisted.mjs +3 -3
  73. package/packages/core/dist/readers.cjs +11 -9
  74. package/packages/core/dist/readers.cjs.map +1 -1
  75. package/packages/core/dist/readers.d.cts +3 -3
  76. package/packages/core/dist/readers.d.ts +3 -3
  77. package/packages/core/dist/readers.mjs +4 -4
  78. package/packages/core/dist/{types-C5Y8Idle.d.ts → types-BX1EPji1.d.ts} +1 -1
  79. package/packages/core/dist/{types-BSzhK7Z1.d.cts → types-bwL8cBv5.d.cts} +1 -1
  80. package/packages/core/dist/writers.cjs +11 -9
  81. package/packages/core/dist/writers.cjs.map +1 -1
  82. package/packages/core/dist/writers.d.cts +2 -2
  83. package/packages/core/dist/writers.d.ts +2 -2
  84. package/packages/core/dist/writers.mjs +3 -3
  85. package/packages/cli/dist/chunk-FJRUJSST.mjs.map +0 -1
  86. package/packages/core/dist/chunk-3I6KX32E.mjs.map +0 -1
  87. package/packages/core/dist/chunk-XPDNO3KH.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 6.29.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 129f45a: Safe sharing and integration clarity for 6.29.6:
8
+
9
+ - Treat fully redacted raw-content fields as share-safe while retaining other safety checks (N-8).
10
+ - Clarify trajectory vs outcome CI gates and TOOL-only `requiredOrder` diagnostics in CLI help/docs.
11
+ - Recipe corrections: pairwise measured stage commitments for comparable-cohort-runs; browser observed-outcome identity/precondition/postcondition matrix.
12
+ - Jest reporter association remains explicit (`associations` / `resolveTrace`); private hotel capture (N-9) stays unverified without application checkouts.
13
+
14
+ ## 6.29.5
15
+
16
+ ### Patch Changes
17
+
18
+ - 3e8750f: Trustworthy existing checks for 6.29.5:
19
+
20
+ - Validate `structure.minConfidence` against the canonical AttributionConfidence vocabulary (`unknown` | `heuristic` | `correlated` | `explicit`); reject obsolete values with exit 2.
21
+ - Fail closed on uncertain write completion: client idempotency keys / producer flags are not write-completion proof (ADR-0011).
22
+ - Circuit rules use logical-event projection, case-insensitive TOOL/LLM kind, and `--run` scoping so other runs cannot inflate counts.
23
+ - Selected `--circuit` / `--guardrails` rules appear in `ruleExecutions` / `rulesEvaluated`; unknown extension rule names fail closed instead of silent green.
24
+
3
25
  ## 6.29.4
4
26
 
5
27
  ### Patch Changes
package/README.md CHANGED
@@ -212,7 +212,7 @@ The root package is enough for custom capture, the CLI, checks, and Evidence wor
212
212
 
213
213
  ## Status and documentation
214
214
 
215
- **Current published baseline:** **6.29.4** · persisted schema `1.0` · Node.js `>=20` · MIT.
215
+ **Current published baseline:** **6.29.6** · persisted schema `1.0` · Node.js `>=20` · MIT.
216
216
 
217
217
  Legacy v0.1 and v0.2 traces remain readable. Check the npm badge and [changelog](CHANGELOG.md) for the current published version.
218
218
 
package/docs/CLI.md CHANGED
@@ -337,7 +337,7 @@ Options:
337
337
  - `--correlate-group`: when using `--session`, also match synthetic `group:` session keys
338
338
  - `--guardrails <rule>`: optional deterministic guardrail rules (`banned-phrase`, `pii-leak`, `prompt-injection`, …); repeatable
339
339
  - `--circuit <rule>`: optional circuit analyzers (`same-tool-repetition`, `max-retries`, …); repeatable
340
- - `--fail-on-observation <status>`: add `outcome.status` rule; repeatable (`failed`, `passed`, `unknown`, `skipped`; default when flag present without value: `failed`)
340
+ - `--fail-on-observation <status>`: **outcome gate** — adds `outcome.status` with `requireAny=true` (needs ≥1 OUTCOME event). Comma-separated statuses: `failed`, `passed`, `unknown`, `skipped`. Does **not** invent a passed outcome from tool/LLM/run success. For adapter structure without outcomes, use `--preset trajectory` (plus `--required-tool` etc.); a trajectory pass is not share safety (`verify-safe`).
341
341
  - `--preset <trajectory|safety|comprehensive|behavioral-session>`: additive check preset (does not change the default when omitted)
342
342
  - `behavioral-session` (6.26): require harness completion + score OUTCOME events (`--fail-on-observation failed` by default); does **not** treat every TOOL `error` as a failed run
343
343
  - `trajectory`: completion/structure/relationship focus; excludes share-safety findings
@@ -8,7 +8,7 @@ This document states what AgentInspect **does not** provide today. It complement
8
8
  - **No production APM replacement**: no sampling agents, no fleet-wide aggregation, no uptime SLAs.
9
9
  - **No vendor upload pipeline**: no built-in Langfuse/Braintrust/New Relic/Datadog direct exporters as live sinks.
10
10
  - **No automatic universal instrumentation** of every framework: integration is explicit (manual traces, log ingest, optional adapters).
11
- - **No retry execution engine:** TraceContract `retry` rules (including additive `retry.operations[]` recovery oracles in 6.27) evaluate attempt identity and evidence only. AgentInspect does not retry tools, remediates nothing, and does not treat a client `idempotencyKey` as proof of exactly-once writes. Write-tool timeout/unknown completion is unevaluable without authoritative idempotency evidence; write-retry is not safe by default.
11
+ - **No retry execution engine:** TraceContract `retry` rules (including additive `retry.operations[]` recovery oracles in 6.27) evaluate attempt identity and evidence only. AgentInspect does not retry tools, remediates nothing, and does not treat a client `idempotencyKey` as proof of exactly-once writes. Write-tool timeout/unknown/running completion is unevaluable for `retry.operations` write recovery (client keys and producer no-side-effect flags do not clear that finding); write-retry is not safe by default.
12
12
  - **Transport facts are source-boundary only:** HTTP status, server-advertised retry delay, selected delay, and their sources must be captured at the transport/fetch boundary. An MCP wrapper cannot recover facts already collapsed into an SDK error message.
13
13
  - **Run comparability is optional guidance:** Ordinary trajectory checks do not fail when cohort/prompt/tool commitments are absent. See [RUN-COMPARABILITY.md](./RUN-COMPARABILITY.md). A machine-readable comparable-run profile is not a default gate in this line.
14
14
  - **Omitted-payload digests** (`createOmittedPayloadCommitment`) are bounded (1 MiB preflight). Digests prove omitted bytes existed; they are not redaction or authorization.
@@ -25,6 +25,8 @@ Contracts compile to deterministic check rules for common cases:
25
25
 
26
26
  ## `tools.requiredOrder` semantics
27
27
 
28
+ `requiredOrder` / `orderRules` match **TOOL** events only (via canonical tool names). LLM / LOGIC / other kinds with the same display name do not satisfy the order and are not relabeled as tools. When a required name exists only under another kind, `tool.usage` reports that kind in the finding message.
29
+
28
30
  `requiredOrder` is expanded into **adjacent pair** ordering rules with unique ids:
29
31
 
30
32
  ```text
@@ -42,15 +44,16 @@ Contracts compile to deterministic check rules for common cases:
42
44
  - `all-occurrences` requires every `before` occurrence to finish before every `after` occurrence starts (`max(before.end) <= min(after.start)`);
43
45
  - causal modes fail when a required interval boundary cannot be resolved instead of falling back to encounter order.
44
46
 
45
- Examples for `requiredOrder: ["retrieve", "generate"]`:
47
+ Examples for `requiredOrder: ["retrieve_policy", "send_email"]` (both TOOL-typed):
46
48
 
47
49
  | Trajectory | Result |
48
50
  | --- | --- |
49
- | `retrieve → generate` | PASS |
50
- | `retrieve → rerank → generate` | PASS |
51
- | `retrieve → generate → retrieve` | PASS under omitted / `first-occurrence`; FAIL under `all-occurrences` |
52
- | `generate → retrieve` | FAIL (order) |
53
- | `cache_lookup → generate` | FAIL (missing `retrieve` via implied presence) |
51
+ | `retrieve_policy → send_email` | PASS |
52
+ | `retrieve_policy → rerank_docs → send_email` | PASS |
53
+ | `retrieve_policy → send_email → retrieve_policy` | PASS under omitted / `first-occurrence`; FAIL under `all-occurrences` |
54
+ | `send_email → retrieve_policy` | FAIL (order) |
55
+ | `cache_lookup → send_email` | FAIL (missing `retrieve_policy` via implied presence) |
56
+ | LLM named `generate` present, no TOOL `generate` | FAIL presence with non-TOOL kind diagnostic; not treated as a tool |
54
57
 
55
58
  Low-level `createToolOrderingRule({ before, after })` alone may still pass when an endpoint is missing (compositional). TraceContract `requiredOrder` does not.
56
59
 
@@ -111,7 +114,7 @@ defineTraceContract({
111
114
  {
112
115
  id: "retrieve",
113
116
  contract: {
114
- tools: { required: ["retrieve"], requiredOrder: ["retrieve", "generate"] },
117
+ tools: { required: ["retrieve_policy"], requiredOrder: ["retrieve_policy", "send_email"] },
115
118
  observations: { required: ["retrieval-context-valid"] },
116
119
  },
117
120
  },
@@ -225,7 +228,7 @@ defineTraceContract({
225
228
 
226
229
  **Retry classification (6.25.1):** a genuine retry is detected from explicit identity preference — `attemptNumber > 1`, valid `retryOf` (target exists and precedes), distinct later `attemptId` under the same `operationId`, or a later finished attempt in an explicitly grouped operation — **not** only from a prior `ok`. `error → success` without `idempotencyKey` / `noSideEffect` evidence fails when `requireIdempotencyEvidenceForRetry` is set. `fallbackOnlyAfterFailure` and `requireRecoveredFailureVisible` require chronological earlier failure in the related chain. A client `idempotencyKey` is evidence of intent, not proof of exactly-once mutation. AgentInspect evaluates traces; it does not execute retries.
227
230
 
228
- **Bounded recovery operations (6.27):** `retry.operations[]` adds per-tool oracles for safe **read** recovery first (`retrieve_policy` recipe). Same-arguments checks accept structured payloads or matching digests and fail closed when both are missing. Write `sideEffectClass` treats timeout/`unknown`/`running` completion as unevaluable unless authoritative idempotency evidence is present. Write-retry is not safe by default.
231
+ **Bounded recovery operations (6.27 / 6.29.5):** `retry.operations[]` adds per-tool oracles for safe **read** recovery first (`retrieve_policy` recipe). Same-arguments checks accept structured payloads or matching digests and fail closed when both are missing. Write `sideEffectClass` treats timeout/`unknown`/`running` completion as unevaluable → fail; a client `idempotencyKey` or producer `noSideEffect`/`sideEffect:false` flag does **not** clear that finding. Write-retry is not safe by default.
229
232
 
230
233
  Missing structured argument evidence fails closed (`AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE`). Findings never include full actual inputs.
231
234
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-inspect",
3
- "version": "6.29.4",
3
+ "version": "6.29.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Local evidence debugger and trajectory-test toolkit for TypeScript AI agents — execution trees, TraceContract checks, Evidence v2, and read-only MCP",
@@ -9,6 +9,23 @@ import { createReadStream } from 'fs';
9
9
  import { createInterface } from 'readline';
10
10
  import { pathToFileURL } from 'url';
11
11
 
12
+ // packages/core/src/types/inspect-event.ts
13
+ var ATTRIBUTION_CONFIDENCES = [
14
+ "unknown",
15
+ "heuristic",
16
+ "correlated",
17
+ "explicit"
18
+ ];
19
+ function isAttributionConfidence(value) {
20
+ return typeof value === "string" && ATTRIBUTION_CONFIDENCES.includes(value);
21
+ }
22
+ var ATTRIBUTION_CONFIDENCE_RANK = {
23
+ unknown: 0,
24
+ heuristic: 1,
25
+ correlated: 2,
26
+ explicit: 3
27
+ };
28
+
12
29
  // packages/core/src/types/persisted-inspect-event.ts
13
30
  var INSPECT_KINDS = [
14
31
  "RUN",
@@ -24,12 +41,6 @@ var INSPECT_KINDS = [
24
41
  "LOG",
25
42
  "OUTCOME"
26
43
  ];
27
- var ATTRIBUTION_CONFIDENCES = [
28
- "explicit",
29
- "correlated",
30
- "heuristic",
31
- "unknown"
32
- ];
33
44
  var PERSISTED_EVENT_SOURCE_TYPES = [
34
45
  "manual",
35
46
  "json-log",
@@ -65,9 +76,6 @@ function isOptionalNonNegativeNumber(value) {
65
76
  function isInspectKind(value) {
66
77
  return typeof value === "string" && INSPECT_KINDS.includes(value);
67
78
  }
68
- function isAttributionConfidence(value) {
69
- return typeof value === "string" && ATTRIBUTION_CONFIDENCES.includes(value);
70
- }
71
79
  function isPersistedEventSourceType(value) {
72
80
  return typeof value === "string" && PERSISTED_EVENT_SOURCE_TYPES.includes(value);
73
81
  }
@@ -5192,12 +5200,7 @@ var STATUS_RANK = {
5192
5200
  warning: 1,
5193
5201
  pass: 2
5194
5202
  };
5195
- var CONFIDENCE_RANK = {
5196
- unknown: 0,
5197
- heuristic: 1,
5198
- correlated: 2,
5199
- explicit: 3
5200
- };
5203
+ var CONFIDENCE_RANK = ATTRIBUTION_CONFIDENCE_RANK;
5201
5204
  var DEFAULT_SENSITIVE_KEYS = DEFAULT_CREDENTIAL_SENSITIVE_KEYS;
5202
5205
  var DEFAULT_RAW_CONTENT_KEYS = [
5203
5206
  "body",
@@ -5671,6 +5674,18 @@ function limitFindings(findings, maxFindings) {
5671
5674
  function hasRedactionMarker(value, markers) {
5672
5675
  return markers.some((marker) => value.includes(marker)) || /^\[HASH:[A-Za-z0-9_-]+\]$/.test(value);
5673
5676
  }
5677
+ function isFullyRedactedValue(value, markers = ["[REDACTED]", "[REDACTED:"]) {
5678
+ if (typeof value !== "string") return false;
5679
+ const trimmed = value.trim();
5680
+ if (trimmed.length === 0) return false;
5681
+ if (/^\[HASH:[A-Za-z0-9_-]+\]$/.test(trimmed)) return true;
5682
+ if (/^\[REDACTED:[^\]]*\]$/.test(trimmed)) return true;
5683
+ for (const marker of markers) {
5684
+ if (marker.endsWith(":")) continue;
5685
+ if (trimmed === marker) return true;
5686
+ }
5687
+ return false;
5688
+ }
5674
5689
  function isSensitiveKey(key, sensitiveKeys) {
5675
5690
  return isCredentialSensitiveKey(key, sensitiveKeys);
5676
5691
  }
@@ -5989,8 +6004,26 @@ function createToolUsageRule(options) {
5989
6004
  const findings = [];
5990
6005
  for (const required of options.required ?? []) {
5991
6006
  if (!nameSet.has(required)) {
6007
+ const otherKinds = [
6008
+ ...new Set(
6009
+ context.events.filter((event) => {
6010
+ const kind = typeof event.kind === "string" ? event.kind.toUpperCase() : "";
6011
+ if (kind === "TOOL") return false;
6012
+ return resolveCanonicalToolName(event) === required || event.name === required || event.name === `tool:${required}` || event.name.endsWith(`:${required}`);
6013
+ }).map(
6014
+ (event) => typeof event.kind === "string" ? event.kind.toUpperCase() : "UNKNOWN"
6015
+ )
6016
+ )
6017
+ ].sort();
6018
+ const hint = otherKinds.length > 0 ? ` Required name appears under non-TOOL kind(s): ${otherKinds.join(", ")}. tools.required / requiredOrder match TOOL events only.` : "";
5992
6019
  findings.push(
5993
- failFinding("tool.usage", `Required tool ${required} did not appear.`, runEvidence(context.selectedRun), required, names)
6020
+ failFinding(
6021
+ "tool.usage",
6022
+ `Required tool ${required} did not appear.${hint}`,
6023
+ runEvidence(context.selectedRun),
6024
+ required,
6025
+ names
6026
+ )
5994
6027
  );
5995
6028
  }
5996
6029
  }
@@ -6164,6 +6197,12 @@ function createStructureCycleRule() {
6164
6197
  };
6165
6198
  }
6166
6199
  function createStructureRelationshipRule(options = {}) {
6200
+ if (options.minConfidence !== void 0 && !isAttributionConfidence(options.minConfidence)) {
6201
+ throw new TypeError(
6202
+ `createStructureRelationshipRule: minConfidence must be one of: ${ATTRIBUTION_CONFIDENCES.join(", ")}.`
6203
+ );
6204
+ }
6205
+ const minConfidence = options.minConfidence;
6167
6206
  return {
6168
6207
  id: "structure.relationship",
6169
6208
  category: "structure",
@@ -6171,18 +6210,21 @@ function createStructureRelationshipRule(options = {}) {
6171
6210
  evaluate(context) {
6172
6211
  const byId = eventMap(semanticEvents(context));
6173
6212
  const findings = [];
6174
- const minConfidence = options.minConfidence;
6175
6213
  for (const event of semanticEvents(context)) {
6176
- if (minConfidence && CONFIDENCE_RANK[event.confidence] < CONFIDENCE_RANK[minConfidence]) {
6177
- findings.push(
6178
- failFinding(
6179
- "structure.relationship",
6180
- `Event confidence ${event.confidence} is below ${minConfidence}.`,
6181
- [eventEvidence(event, "confidence")],
6182
- { minConfidence },
6183
- event.confidence
6184
- )
6185
- );
6214
+ if (minConfidence) {
6215
+ const eventRank = CONFIDENCE_RANK[event.confidence] ?? CONFIDENCE_RANK.unknown;
6216
+ const minRank = CONFIDENCE_RANK[minConfidence];
6217
+ if (eventRank < minRank) {
6218
+ findings.push(
6219
+ failFinding(
6220
+ "structure.relationship",
6221
+ `Event confidence ${event.confidence} is below ${minConfidence}.`,
6222
+ [eventEvidence(event, "confidence")],
6223
+ { minConfidence },
6224
+ event.confidence
6225
+ )
6226
+ );
6227
+ }
6186
6228
  }
6187
6229
  if (!event.parentId) continue;
6188
6230
  if (event.parentId === event.eventId) {
@@ -6346,6 +6388,7 @@ function createSafetyRedactionRule(options = {}) {
6346
6388
  function createSafetyRawContentRule(options = {}) {
6347
6389
  const forbiddenKeys = options.forbiddenKeys ?? DEFAULT_RAW_CONTENT_KEYS;
6348
6390
  const safePathPrefixes = options.safePathPrefixes ?? DEFAULT_SAFE_RAW_CONTENT_PATH_PREFIXES;
6391
+ const markers = options.redactedMarkers ?? ["[REDACTED]", "[REDACTED:"];
6349
6392
  return {
6350
6393
  id: "safety.rawPrompt",
6351
6394
  category: "safety",
@@ -6356,6 +6399,7 @@ function createSafetyRawContentRule(options = {}) {
6356
6399
  for (const entry of eventValueEntries(event, { includeSummaries: options.includeSummaries })) {
6357
6400
  const key = entry.key ?? lastPathSegment(entry.path);
6358
6401
  if (!isRawContentPath(entry.path, key, forbiddenKeys, safePathPrefixes)) continue;
6402
+ if (isFullyRedactedValue(entry.value, markers)) continue;
6359
6403
  findings.push(
6360
6404
  failFinding(
6361
6405
  "safety.rawPrompt",
@@ -12488,6 +12532,6 @@ function renderGateReport(result, options = {}) {
12488
12532
  return renderGateSummaryMarkdown(result);
12489
12533
  }
12490
12534
 
12491
- export { COHORT_METRIC_IDS, DEFAULT_SUITE_ARTIFACTS_DIR, EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME, Redactor, TraceDirectory, TraceReadError, TreeBuilder, aggregateBundleSafeStatus, aggregateSessionCheckResults, analyzeCohort, applyProfileMetadataCaps, assertBundlePathContained, assertEvidenceRelativePath, buildActivitySummary, buildBundleMetadata, buildBundleSummaryMarkdown, buildEvidenceCausalFailureViewHtml, buildEvidenceCiPackage, buildEvidenceCircuitViewHtml, buildEvidenceContractsViewHtml, buildEvidenceDiffViewHtml, buildEvidenceHtmlShell, buildEvidenceManifest, buildEvidenceOutcomesViewHtml, buildEvidenceProvenanceViewHtml, buildEvidenceSafetyViewHtml, buildEvidenceTimelineViewHtml, buildEvidenceToolsLlmViewHtml, buildEvidenceTreeViewHtml, buildLocalExplanation, buildPlaceholderArtifact, buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildSessionIndex, buildTraceStats, buildZipArchive, bundleFailsOnSafety, bundleRunAssetRelativePath, collectTraceSchemaVersions, compactAttributes, createBaselineRegressionRule, createLlmUsageRule, createMaxStepDurationRule, createObservedOutcomeRule, createRequireCompletedRule, createRunDepthRule, createRunDurationRule, createRunStatusRule, createSafetyOversizedAttributeRule, createSafetyRawContentRule, createSafetyRedactionRule, createSafetySecretPatternRule, createStallDetectionRule, createStructureCycleRule, createStructureOrphanRule, createStructureParallelWidthRule, createStructureRelationshipRule, createToolUsageRule, defaultBundleOutputPath, defaultSuiteConfigTemplate, diffRuns, diffTraceEvents, enrichSessionRunRecord, escapeHtml, escapeMarkdown, extractMetadata, extractOutcomesFromTraceEvents, filterMetasBySessionScope, filterTraces, flattenTree, formatDuration2 as formatDuration, formatStepLabel, formatTimestamp, gateHasThresholds, getIndent, getTraceFilePath, inferEvidenceFileRole, isAgentInspectTrace, isPersistedInspectEvent, loadSessionRunRecords, loadSuiteConfig, loadTraceMetadataList, manualTraceEventsToComparableRun, nanoid, normalizeBundleOutputPath, openTrace, parseCohortMetricList, parseDuration, parseDurationFilter, parseGateList, parseTraceJsonl, persistedInspectEventsToTraceEvents, renderActivitySummaryHuman, renderCohortReport, renderErrorLine, renderGateReport, renderObservedOutcomesHtml, renderObservedOutcomesMarkdown, renderRunDiff, renderRunWhat, renderStepLine, renderSuiteReport, renderTimeline, renderTraceStats, resolveBundleRunIds, resolveRedactionProfile, resolveSuiteTemplate, resolveTraceDir, runGate, runSuite, runTraceChecks, safeString, sanitizeBundleRunId, searchTraces, serializeEvidenceManifest, sha256Hex, stableJson, summarizeObservedOutcomes, summarizeSemanticParity, traceEventToPersistedInspectEvent, truncateName, truncateStringForProfile, validateEvent, validateSuiteConfig, verifyEvidenceDirectory, zeroKinds };
12492
- //# sourceMappingURL=chunk-FJRUJSST.mjs.map
12493
- //# sourceMappingURL=chunk-FJRUJSST.mjs.map
12535
+ export { ATTRIBUTION_CONFIDENCES, COHORT_METRIC_IDS, DEFAULT_SUITE_ARTIFACTS_DIR, EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME, Redactor, TraceDirectory, TraceReadError, TreeBuilder, aggregateBundleSafeStatus, aggregateSessionCheckResults, analyzeCohort, applyProfileMetadataCaps, assertBundlePathContained, assertEvidenceRelativePath, buildActivitySummary, buildBundleMetadata, buildBundleSummaryMarkdown, buildEvidenceCausalFailureViewHtml, buildEvidenceCiPackage, buildEvidenceCircuitViewHtml, buildEvidenceContractsViewHtml, buildEvidenceDiffViewHtml, buildEvidenceHtmlShell, buildEvidenceManifest, buildEvidenceOutcomesViewHtml, buildEvidenceProvenanceViewHtml, buildEvidenceSafetyViewHtml, buildEvidenceTimelineViewHtml, buildEvidenceToolsLlmViewHtml, buildEvidenceTreeViewHtml, buildLocalExplanation, buildPlaceholderArtifact, buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildSessionIndex, buildTraceStats, buildZipArchive, bundleFailsOnSafety, bundleRunAssetRelativePath, collectTraceSchemaVersions, compactAttributes, createBaselineRegressionRule, createLlmUsageRule, createMaxStepDurationRule, createObservedOutcomeRule, createRequireCompletedRule, createRunDepthRule, createRunDurationRule, createRunStatusRule, createSafetyOversizedAttributeRule, createSafetyRawContentRule, createSafetyRedactionRule, createSafetySecretPatternRule, createStallDetectionRule, createStructureCycleRule, createStructureOrphanRule, createStructureParallelWidthRule, createStructureRelationshipRule, createToolUsageRule, defaultBundleOutputPath, defaultSuiteConfigTemplate, diffRuns, diffTraceEvents, enrichSessionRunRecord, escapeHtml, escapeMarkdown, extractMetadata, extractOutcomesFromTraceEvents, filterMetasBySessionScope, filterTraces, flattenTree, formatDuration2 as formatDuration, formatStepLabel, formatTimestamp, gateHasThresholds, getIndent, getTraceFilePath, inferEvidenceFileRole, isAgentInspectTrace, isAttributionConfidence, isPersistedInspectEvent, loadSessionRunRecords, loadSuiteConfig, loadTraceMetadataList, manualTraceEventsToComparableRun, nanoid, normalizeBundleOutputPath, openTrace, parseCohortMetricList, parseDuration, parseDurationFilter, parseGateList, parseTraceJsonl, persistedInspectEventsToTraceEvents, projectLogicalEvents, renderActivitySummaryHuman, renderCohortReport, renderErrorLine, renderGateReport, renderObservedOutcomesHtml, renderObservedOutcomesMarkdown, renderRunDiff, renderRunWhat, renderStepLine, renderSuiteReport, renderTimeline, renderTraceStats, resolveBundleRunIds, resolveRedactionProfile, resolveSuiteTemplate, resolveTraceDir, runGate, runSuite, runTraceChecks, safeString, sanitizeBundleRunId, searchTraces, serializeEvidenceManifest, sha256Hex, stableJson, summarizeObservedOutcomes, summarizeSemanticParity, traceEventToPersistedInspectEvent, truncateName, truncateStringForProfile, validateEvent, validateSuiteConfig, verifyEvidenceDirectory, zeroKinds };
12536
+ //# sourceMappingURL=chunk-DBRMI7TC.mjs.map
12537
+ //# sourceMappingURL=chunk-DBRMI7TC.mjs.map