agent-inspect 6.31.33 → 6.31.35
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 +12 -0
- package/README.md +1 -1
- package/docs/LIMITATIONS.md +22 -0
- package/docs/SAFE-TRACE-SHARING.md +1 -1
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-AILSHDEF.mjs → chunk-RLFYFWIZ.mjs} +76 -22
- package/packages/cli/dist/chunk-RLFYFWIZ.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +136 -37
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +64 -19
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-SP36M4VB.mjs → src-S23RCPL2.mjs} +3 -3
- package/packages/cli/dist/{src-SP36M4VB.mjs.map → src-S23RCPL2.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +47 -7
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.mjs +9 -9
- package/packages/core/dist/checks.cjs +71 -18
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.mjs +3 -3
- package/packages/core/dist/{chunk-6S666BF4.mjs → chunk-2SKAI5ZN.mjs} +3 -3
- package/packages/core/dist/{chunk-6S666BF4.mjs.map → chunk-2SKAI5ZN.mjs.map} +1 -1
- package/packages/core/dist/{chunk-EMDJLFRK.mjs → chunk-3OMB34E6.mjs} +74 -21
- package/packages/core/dist/chunk-3OMB34E6.mjs.map +1 -0
- package/packages/core/dist/{chunk-FBPDF7HO.mjs → chunk-6F6KLGCR.mjs} +3 -3
- package/packages/core/dist/{chunk-FBPDF7HO.mjs.map → chunk-6F6KLGCR.mjs.map} +1 -1
- package/packages/core/dist/{chunk-RB6WANSW.mjs → chunk-PU3FF5AP.mjs} +5 -4
- package/packages/core/dist/chunk-PU3FF5AP.mjs.map +1 -0
- package/packages/core/dist/{chunk-VIEJJ5JB.mjs → chunk-X5RP2E2H.mjs} +4 -4
- package/packages/core/dist/{chunk-VIEJJ5JB.mjs.map → chunk-X5RP2E2H.mjs.map} +1 -1
- package/packages/core/dist/exporters.cjs +33 -9
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.mjs +33 -10
- package/packages/core/dist/exporters.mjs.map +1 -1
- package/packages/core/dist/index.cjs +3 -2
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.mjs +4 -4
- package/packages/core/dist/writers.cjs +3 -2
- package/packages/core/dist/writers.cjs.map +1 -1
- package/packages/core/dist/writers.mjs +1 -1
- package/packages/cli/dist/chunk-AILSHDEF.mjs.map +0 -1
- package/packages/core/dist/chunk-EMDJLFRK.mjs.map +0 -1
- package/packages/core/dist/chunk-RB6WANSW.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 6.31.35
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3cb8284: Bound and order tool-name diagnostics: cap codepoint annotations, skip pure non-Latin noise, keep bidi/control visible, and sort allowlist causes ahead of missing-tool consequences across rules (#522 follow-up). Add recipe-local refund ceiling/entity/approval (#527) and illustrative RETRIEVER→LLM OpenInference order examples via TraceCheckRule extension.
|
|
8
|
+
|
|
9
|
+
## 6.31.34
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- c0726d8: Detect underscore-adjacent Stripe keys across redact, credential-value, and verify-safe patterns (#528; thanks Frank). Align `gate --evidence-on` check-results `aggregateStatus` with residual artifact assessment while keeping gate pass/fail separate (#529; thanks Frank). Fail unfinished before-order occurrences even when a finished peer exists, and treat after-start without a terminal as order-relevant. Harden Gary/Nest saved verifiers, refuse ambiguous HTML lifecycle joins, and evaluate Roy UNPROVABLE positive controls.
|
|
14
|
+
|
|
3
15
|
## 6.31.33
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -213,7 +213,7 @@ The root package is enough for custom capture, the CLI, checks, and Evidence wor
|
|
|
213
213
|
|
|
214
214
|
## Status and documentation
|
|
215
215
|
|
|
216
|
-
**Current published baseline:** **6.31.
|
|
216
|
+
**Current published baseline:** **6.31.35** · persisted schema `1.0` · Node.js `>=20` · MIT.
|
|
217
217
|
|
|
218
218
|
Legacy v0.1 and v0.2 traces remain readable. Check the npm badge and [changelog](CHANGELOG.md) for the current published version.
|
|
219
219
|
|
package/docs/LIMITATIONS.md
CHANGED
|
@@ -98,4 +98,26 @@ Visual demos: [SCREENSHOTS.md](./SCREENSHOTS.md) · [CLI.md](./CLI.md)
|
|
|
98
98
|
|
|
99
99
|
- Designed for **developer machines** and **inner-loop debugging**, not petabyte log warehouses.
|
|
100
100
|
|
|
101
|
+
## Trust boundary (four independent questions)
|
|
102
|
+
|
|
103
|
+
AgentInspect answers local evidence questions. Treat these as **separate**:
|
|
104
|
+
|
|
105
|
+
1. **Capture / coverage** — What events were recorded under the declared instrumentation boundary? Missing spans, uninstrumented SDK calls, and effects outside that boundary are not inventable from silence.
|
|
106
|
+
2. **Trajectory contract** — Did a TraceContract / check preset pass on the selected run(s)? Pass/fail is rule evaluation over captured evidence, not proof of business correctness.
|
|
107
|
+
3. **Residual artifact safety** — Do written share/strict artifacts pass the residual safety policy (`verify-safe` / Evidence assessment)? This is best-effort local policy, not a compliance certification or whole-org DLP guarantee.
|
|
108
|
+
4. **Independent authorization / effect / origin** — Is there separate evidence of lawful authority, successful side effect, and trusted producer origin? AgentInspect does not supply those by default.
|
|
109
|
+
|
|
110
|
+
Implications:
|
|
111
|
+
|
|
112
|
+
- A recomputed **unsigned** Evidence manifest can verify **internal consistency** (listed files + hashes). It does **not** prove authenticity or producer identity.
|
|
113
|
+
- A **signature** (if supplied externally) can authenticate bytes to a trusted signer. It still does **not** prove completeness, lawful authority, successful business effect, or absence of an uninstrumented side effect.
|
|
114
|
+
- A recorded **approval-before-action** event is evidence that an approval was *recorded*. It is **not** proof that the approver had authority.
|
|
115
|
+
- Signed receipts or durable journals (parked designs) do **not** create exactly-once side effects.
|
|
116
|
+
|
|
117
|
+
Hypothetical approval evidence fields for a future recipe (not a shipped schema): distinct `decisionId`, `policyVersion`, `actorAuthorityRef`, `actionDigest`, `targetScope`, `decisionTime`, `executionId`, and a downstream `receiptId`. These are a proposed evidence set for discussion, not a banking integration.
|
|
118
|
+
|
|
119
|
+
Parked larger designs (coverage registry, cross-run linkage, durable intent journal, signing/sealing, general value comparisons, data-flow causal explanations) stay out of incidental patches — see [implementation/active/PARKED-DESIGNS.md](./implementation/active/PARKED-DESIGNS.md).
|
|
120
|
+
|
|
121
|
+
Related: [EVIDENCE-FORMAT.md](./EVIDENCE-FORMAT.md), [ADR-0012](./decisions/ADR-0012-evidence-contract-binding.md), [SAFE-TRACE-SHARING.md](./SAFE-TRACE-SHARING.md), [NETWORK-BEHAVIOR.md](./NETWORK-BEHAVIOR.md), [NO-EGRESS-POLICY.md](./NO-EGRESS-POLICY.md).
|
|
122
|
+
|
|
101
123
|
For roadmap intent, see [ROADMAP.md](../ROADMAP.md) (direction only — not a delivery guarantee).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
AgentInspect traces, log-ingest outputs, and exports are local files. They may still contain sensitive metadata that you attached manually, collected from logs, or included through optional preview settings. Use this checklist before sharing an artifact in a GitHub issue, Discussion, PR, support thread, or public post.
|
|
6
6
|
|
|
7
|
-
This guide is practical sharing guidance, not a guarantee that any artifact is safe to publish. Redaction profiles are **best-effort transformation**, not compliance-grade DLP or a safety certification. Always finish with `verify-safe` before sharing.
|
|
7
|
+
This guide is practical sharing guidance, not a guarantee that any artifact is safe to publish. Redaction profiles are **best-effort transformation**, not compliance-grade DLP or a safety certification. Always finish with `verify-safe` before sharing. Passing residual safety is still only one of the [four trust-boundary questions](./LIMITATIONS.md#trust-boundary-four-independent-questions) — it does not prove capture completeness, contract truth, or independent authorization.
|
|
8
8
|
|
|
9
9
|
Built-in profiles redact high-confidence credential forms (provider keys, JWTs, bearer tokens, and bounded `token=` / `api_key=` / `internal_token=` style key/value secrets). Broad or context-sensitive findings—such as private filesystem paths—may still appear under `verify-safe` and as residual status after `redact`. Org-specific patterns can use a local CLI `--policy` JSON file (`extraKeys` plus bounded literal/prefix patterns; no user regex) or programmatic custom detectors.
|
|
10
10
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-inspect",
|
|
3
|
-
"version": "6.31.
|
|
3
|
+
"version": "6.31.35",
|
|
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",
|
|
@@ -938,8 +938,9 @@ var HIGH_CONFIDENCE_CREDENTIAL_PATTERNS = [
|
|
|
938
938
|
/\beyJ[a-zA-Z0-9_-]{8,}\.[a-zA-Z0-9_-]{8,}\.[a-zA-Z0-9_-]{8,}\b/,
|
|
939
939
|
/\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\b/,
|
|
940
940
|
// Stripe secret / restricted keys use underscores (not sk-). Keep in sync with
|
|
941
|
-
// packages/redact/src/index.ts + packages/core/src/checks DEFAULT_SECRET_PATTERNS (#520).
|
|
942
|
-
|
|
941
|
+
// packages/redact/src/index.ts + packages/core/src/checks DEFAULT_SECRET_PATTERNS (#520/#528).
|
|
942
|
+
// Use non-alnum lookarounds so underscore-adjacent forms (acct_sk_live_…, …_eu) match.
|
|
943
|
+
/(?<![A-Za-z0-9])(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}(?![A-Za-z0-9])/,
|
|
943
944
|
/\bxox[abposr]-[A-Za-z0-9-]{10,}\b/,
|
|
944
945
|
/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\b/,
|
|
945
946
|
/\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/,
|
|
@@ -7832,10 +7833,11 @@ var SAFE_USAGE_LEAF_KEYS = /* @__PURE__ */ new Set([
|
|
|
7832
7833
|
var DEFAULT_SECRET_PATTERNS = [
|
|
7833
7834
|
{ id: "bearer-token", pattern: /Bearer\s+[A-Za-z0-9._~+/-]{12,}=*/ },
|
|
7834
7835
|
{ id: "openai-key", pattern: /sk-[A-Za-z0-9_-]{16,}/ },
|
|
7835
|
-
// Stripe + Slack: keep in sync with packages/redact + credential-value-patterns (#520).
|
|
7836
|
+
// Stripe + Slack: keep in sync with packages/redact + credential-value-patterns (#520/#528).
|
|
7837
|
+
// Non-alnum lookarounds so underscore-adjacent forms (acct_sk_live_…, …_eu) match.
|
|
7836
7838
|
{
|
|
7837
7839
|
id: "stripe-key",
|
|
7838
|
-
pattern:
|
|
7840
|
+
pattern: /(?<![A-Za-z0-9])(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}(?![A-Za-z0-9])/
|
|
7839
7841
|
},
|
|
7840
7842
|
{ id: "slack-token", pattern: /\bxox[abposr]-[A-Za-z0-9-]{10,}\b/ },
|
|
7841
7843
|
{ id: "aws-access-key", pattern: /AKIA[0-9A-Z]{16}/ },
|
|
@@ -8009,11 +8011,27 @@ function eventTimestamp(finding, eventById) {
|
|
|
8009
8011
|
const eventId = finding.evidence[0]?.eventId;
|
|
8010
8012
|
return eventId ? eventById.get(eventId)?.timestamp ?? "" : "";
|
|
8011
8013
|
}
|
|
8014
|
+
function isObservedToolPolicyFinding(finding) {
|
|
8015
|
+
return finding.ruleId === "tool.usage" && finding.evidence[0]?.eventId !== void 0;
|
|
8016
|
+
}
|
|
8017
|
+
function isMissingToolConsequenceFinding(finding) {
|
|
8018
|
+
if (finding.evidence[0]?.eventId !== void 0) return false;
|
|
8019
|
+
if (finding.ruleId === "tool.usage" && /did not appear/.test(finding.message)) {
|
|
8020
|
+
return true;
|
|
8021
|
+
}
|
|
8022
|
+
return finding.ruleId.startsWith("contract.tool.arguments") && /^No finished tool named /.test(finding.message);
|
|
8023
|
+
}
|
|
8012
8024
|
function compareFindings(eventById) {
|
|
8013
8025
|
return (a, b) => {
|
|
8014
8026
|
if (SEVERITY_RANK[a.severity] !== SEVERITY_RANK[b.severity]) {
|
|
8015
8027
|
return SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];
|
|
8016
8028
|
}
|
|
8029
|
+
const aPolicy = isObservedToolPolicyFinding(a);
|
|
8030
|
+
const bPolicy = isObservedToolPolicyFinding(b);
|
|
8031
|
+
const aMissing = isMissingToolConsequenceFinding(a);
|
|
8032
|
+
const bMissing = isMissingToolConsequenceFinding(b);
|
|
8033
|
+
if (aPolicy && bMissing) return -1;
|
|
8034
|
+
if (bPolicy && aMissing) return 1;
|
|
8017
8035
|
const byRule = a.ruleId.localeCompare(b.ruleId);
|
|
8018
8036
|
if (byRule !== 0) return byRule;
|
|
8019
8037
|
if (STATUS_RANK[a.status] !== STATUS_RANK[b.status]) {
|
|
@@ -8149,20 +8167,43 @@ function failFinding(ruleId, message, evidence, expected, actual, meta) {
|
|
|
8149
8167
|
function toolName(event) {
|
|
8150
8168
|
return resolveCanonicalToolName(event);
|
|
8151
8169
|
}
|
|
8170
|
+
var MAX_TOOL_NAME_CODEPOINT_DETAILS = 3;
|
|
8171
|
+
function isAsciiLetterCodePoint(codePoint) {
|
|
8172
|
+
return codePoint >= 65 && codePoint <= 90 || codePoint >= 97 && codePoint <= 122;
|
|
8173
|
+
}
|
|
8174
|
+
function isRiskyToolNameCodePoint(codePoint) {
|
|
8175
|
+
if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) return true;
|
|
8176
|
+
return codePoint === 1564 || codePoint === 8203 || codePoint === 8204 || codePoint === 8205 || codePoint === 8206 || codePoint === 8207 || codePoint >= 8234 && codePoint <= 8238 || codePoint >= 8294 && codePoint <= 8297 || codePoint === 65279;
|
|
8177
|
+
}
|
|
8178
|
+
function formatCodePointDetail(codePoint, index) {
|
|
8179
|
+
return `U+${codePoint.toString(16).toUpperCase().padStart(4, "0")} at index ${index}`;
|
|
8180
|
+
}
|
|
8152
8181
|
function formatToolNameForMessage(name) {
|
|
8182
|
+
let hasAsciiLetter = false;
|
|
8183
|
+
let hasNonAscii = false;
|
|
8184
|
+
let hasRisky = false;
|
|
8153
8185
|
const details = [];
|
|
8154
8186
|
for (let index = 0; index < name.length; ) {
|
|
8155
8187
|
const codePoint = name.codePointAt(index);
|
|
8156
8188
|
const width = codePoint > 65535 ? 2 : 1;
|
|
8189
|
+
if (isAsciiLetterCodePoint(codePoint)) hasAsciiLetter = true;
|
|
8190
|
+
const risky = isRiskyToolNameCodePoint(codePoint);
|
|
8191
|
+
if (risky) hasRisky = true;
|
|
8157
8192
|
if (codePoint > 127) {
|
|
8158
|
-
|
|
8159
|
-
|
|
8160
|
-
|
|
8193
|
+
hasNonAscii = true;
|
|
8194
|
+
details.push(formatCodePointDetail(codePoint, index));
|
|
8195
|
+
} else if (risky) {
|
|
8196
|
+
details.push(formatCodePointDetail(codePoint, index));
|
|
8161
8197
|
}
|
|
8162
8198
|
index += width;
|
|
8163
8199
|
}
|
|
8164
|
-
if (details.length === 0)
|
|
8165
|
-
|
|
8200
|
+
if (!hasRisky && !(hasAsciiLetter && hasNonAscii) || details.length === 0) {
|
|
8201
|
+
return name;
|
|
8202
|
+
}
|
|
8203
|
+
const shown = details.slice(0, MAX_TOOL_NAME_CODEPOINT_DETAILS);
|
|
8204
|
+
const remaining = details.length - shown.length;
|
|
8205
|
+
const detailText = remaining > 0 ? `${shown.join("; ")}; and ${remaining} more` : shown.join("; ");
|
|
8206
|
+
return `"${name}" (contains ${detailText})`;
|
|
8166
8207
|
}
|
|
8167
8208
|
function describeRunningEvent(event) {
|
|
8168
8209
|
if (event.kind === "TOOL") {
|
|
@@ -8786,7 +8827,12 @@ function createStepOrderingRule(options) {
|
|
|
8786
8827
|
const beforeRunning = semanticEvents(context).filter(
|
|
8787
8828
|
(event) => event.kind === options.before.kind && event.status === "running" && stepEndpointName(event, options.before.kind) === options.before.name
|
|
8788
8829
|
);
|
|
8789
|
-
|
|
8830
|
+
const afterRunning = semanticEvents(context).filter(
|
|
8831
|
+
(event) => event.kind === options.after.kind && event.status === "running" && stepEndpointName(event, options.after.kind) === options.after.name
|
|
8832
|
+
);
|
|
8833
|
+
const afterStarted = afterEvents.length > 0 || afterRunning.length > 0;
|
|
8834
|
+
const afterEvidenceEvent = afterEvents[0] ?? afterRunning[0];
|
|
8835
|
+
if (beforeRunning.length > 0 && afterStarted && afterEvidenceEvent !== void 0) {
|
|
8790
8836
|
const endpointExpected2 = bothTools ? { before: options.before.name, after: options.after.name } : { before: options.before, after: options.after };
|
|
8791
8837
|
return [
|
|
8792
8838
|
failFinding(
|
|
@@ -8794,18 +8840,20 @@ function createStepOrderingRule(options) {
|
|
|
8794
8840
|
`${subject} ${beforeLabel} started but never finished before ${afterLabel} ran.`,
|
|
8795
8841
|
[
|
|
8796
8842
|
...beforeRunning.map((event) => eventEvidence3(event)),
|
|
8797
|
-
eventEvidence3(
|
|
8843
|
+
eventEvidence3(afterEvidenceEvent)
|
|
8798
8844
|
],
|
|
8799
8845
|
{ ...endpointExpected2, mode },
|
|
8800
8846
|
{
|
|
8801
8847
|
code: bothTools ? "tool.order.interval-unresolved" : "step.order.interval-unresolved",
|
|
8802
8848
|
unfinishedBefore: true,
|
|
8803
|
-
beforeStatus: "running"
|
|
8849
|
+
beforeStatus: "running",
|
|
8850
|
+
...beforeEvents.length > 0 ? { finishedBeforeMasked: true } : {},
|
|
8851
|
+
...afterEvents.length === 0 ? { afterStatus: "running" } : {}
|
|
8804
8852
|
}
|
|
8805
8853
|
)
|
|
8806
8854
|
];
|
|
8807
8855
|
}
|
|
8808
|
-
if (beforeEvents.length === 0 ||
|
|
8856
|
+
if (beforeEvents.length === 0 || !afterStarted) {
|
|
8809
8857
|
if (!requireEndpoints) return [];
|
|
8810
8858
|
const findings = [];
|
|
8811
8859
|
if (beforeEvents.length === 0) {
|
|
@@ -8829,7 +8877,7 @@ function createStepOrderingRule(options) {
|
|
|
8829
8877
|
)
|
|
8830
8878
|
);
|
|
8831
8879
|
}
|
|
8832
|
-
if (
|
|
8880
|
+
if (!afterStarted) {
|
|
8833
8881
|
const otherKinds = otherKindsForStepName(
|
|
8834
8882
|
context,
|
|
8835
8883
|
options.after.kind,
|
|
@@ -8852,9 +8900,15 @@ function createStepOrderingRule(options) {
|
|
|
8852
8900
|
}
|
|
8853
8901
|
return findings;
|
|
8854
8902
|
}
|
|
8855
|
-
const
|
|
8856
|
-
|
|
8857
|
-
|
|
8903
|
+
const afterForOrder = afterEvents.length > 0 ? afterEvents : afterRunning;
|
|
8904
|
+
const encounter = [
|
|
8905
|
+
...finishedEvents(context).filter(
|
|
8906
|
+
(event) => event.kind === options.before.kind && stepEndpointName(event, options.before.kind) === options.before.name || event.kind === options.after.kind && stepEndpointName(event, options.after.kind) === options.after.name
|
|
8907
|
+
),
|
|
8908
|
+
...afterEvents.length === 0 ? afterRunning.filter(
|
|
8909
|
+
(event) => !finishedEvents(context).some((finished) => finished.eventId === event.eventId)
|
|
8910
|
+
) : []
|
|
8911
|
+
];
|
|
8858
8912
|
let beforeIndex;
|
|
8859
8913
|
let afterIndex;
|
|
8860
8914
|
for (const [position, event] of encounter.entries()) {
|
|
@@ -8885,7 +8939,7 @@ function createStepOrderingRule(options) {
|
|
|
8885
8939
|
];
|
|
8886
8940
|
}
|
|
8887
8941
|
const beforeEvent = beforeEvents[0];
|
|
8888
|
-
const afterEvent =
|
|
8942
|
+
const afterEvent = afterForOrder[0];
|
|
8889
8943
|
const beforeEnd = eventEndMs(beforeEvent);
|
|
8890
8944
|
const afterStart = eventStartMs(afterEvent);
|
|
8891
8945
|
const endpointExpected = bothTools ? { before: options.before.name, after: options.after.name } : { before: options.before, after: options.after };
|
|
@@ -8971,7 +9025,7 @@ function createStepOrderingRule(options) {
|
|
|
8971
9025
|
latestBefore = { event, end };
|
|
8972
9026
|
}
|
|
8973
9027
|
}
|
|
8974
|
-
for (const event of
|
|
9028
|
+
for (const event of afterForOrder) {
|
|
8975
9029
|
const start = eventStartMs(event);
|
|
8976
9030
|
if (start === void 0) {
|
|
8977
9031
|
missingAfterStarts += 1;
|
|
@@ -9000,7 +9054,7 @@ function createStepOrderingRule(options) {
|
|
|
9000
9054
|
const tie = tiedEnd === tiedStart ? recordedTieOrder(
|
|
9001
9055
|
context,
|
|
9002
9056
|
beforeEvents.filter((event) => eventEndMs(event) === tiedEnd),
|
|
9003
|
-
|
|
9057
|
+
afterForOrder.filter((event) => eventStartMs(event) === tiedStart)
|
|
9004
9058
|
) : void 0;
|
|
9005
9059
|
if (latestBefore.end > earliestAfter.start || tie !== void 0 && tie.inOrder !== true) {
|
|
9006
9060
|
return [
|
|
@@ -16171,5 +16225,5 @@ function renderGateReport(result, options = {}) {
|
|
|
16171
16225
|
}
|
|
16172
16226
|
|
|
16173
16227
|
export { ATTRIBUTION_CONFIDENCES, COHORT_METRIC_IDS, DEFAULT_REDACT_KEYS, DEFAULT_SUITE_ARTIFACTS_DIR, DELIVERY_CONFLICT_ATTR, DELIVERY_EVENT_BASE_ATTR, EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME, IDENTITY_CONFLICT_ATTR, 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, defineTraceContract, diffRuns, diffTraceEvents, enrichSessionRunRecord, escapeHtml, escapeMarkdown, evaluateTraceContract, extractMetadata, extractOutcomesFromTraceEvents, filterMetasBySessionScope, filterTraces, flattenTree, formatDuration2 as formatDuration, formatStepLabel, formatTimestamp, gateHasThresholds, getIndent, getTraceFilePath, inferEvidenceFileRole, isAgentInspectTrace, isAttributionConfidence, isCredentialSensitiveKey, isPersistedInspectEvent, loadSessionRunRecords, loadSuiteConfig, loadTraceMetadataList, manualTraceEventsToComparableRun, nanoid, normalizeBundleOutputPath, openTrace, parseCohortMetricList, parseDuration, parseDurationFilter, parseGateList, parseTraceJsonl, persistedInspectEventsToRunTrees, 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, stringContainsHighConfidenceCredential, summarizeObservedOutcomes, summarizeSemanticParity, traceEventToPersistedInspectEvent, truncateName, truncateStringForProfile, validateEvent, validateSuiteConfig, verifyEvidenceDirectory, zeroKinds };
|
|
16174
|
-
//# sourceMappingURL=chunk-
|
|
16175
|
-
//# sourceMappingURL=chunk-
|
|
16228
|
+
//# sourceMappingURL=chunk-RLFYFWIZ.mjs.map
|
|
16229
|
+
//# sourceMappingURL=chunk-RLFYFWIZ.mjs.map
|