agent-inspect 6.19.1 → 6.21.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 +12 -0
- package/README.md +1 -1
- package/docs/TRACE-CONTRACTS.md +94 -43
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-QDYVK4MF.mjs → chunk-CRUHIL5J.mjs} +16 -2
- package/packages/cli/dist/chunk-CRUHIL5J.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +22 -3
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +4 -4
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-CIC27TS2.mjs → src-MNJFYW3W.mjs} +3 -3
- package/packages/cli/dist/{src-CIC27TS2.mjs.map → src-MNJFYW3W.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +3 -0
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +6 -156
- package/packages/core/dist/advanced.d.ts +6 -156
- package/packages/core/dist/advanced.mjs +6 -60
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +988 -21
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +156 -16
- package/packages/core/dist/checks.d.ts +156 -16
- package/packages/core/dist/checks.mjs +2 -2
- package/packages/core/dist/{chunk-6LP2J5CA.mjs → chunk-43SHIPZM.mjs} +984 -25
- package/packages/core/dist/chunk-43SHIPZM.mjs.map +1 -0
- package/packages/core/dist/{chunk-3XS5O4JI.mjs → chunk-R4SSYU6D.mjs} +3 -3
- package/packages/core/dist/chunk-R4SSYU6D.mjs.map +1 -0
- package/packages/core/dist/{chunk-5YFJJFXU.mjs → chunk-WGDSM37E.mjs} +3 -3
- package/packages/core/dist/{chunk-5YFJJFXU.mjs.map → chunk-WGDSM37E.mjs.map} +1 -1
- package/packages/core/dist/{context-C5ye_xcS.d.cts → context-DOOT9GZ-.d.cts} +1 -1
- package/packages/core/dist/{context-CNsNSgE2.d.ts → context-DOX2-RjH.d.ts} +1 -1
- package/packages/core/dist/diff.d.cts +1 -1
- package/packages/core/dist/diff.d.ts +1 -1
- package/packages/core/dist/exporters.d.cts +1 -1
- package/packages/core/dist/exporters.d.ts +1 -1
- package/packages/core/dist/exporters.mjs +1 -1
- package/packages/core/dist/{index-DCR816Yt.d.cts → index-BG-ZBESI.d.cts} +163 -1
- package/packages/core/dist/{index-DKwuGSe-.d.ts → index-xevIlqdd.d.ts} +163 -1
- package/packages/core/dist/index.d.cts +3 -3
- package/packages/core/dist/index.d.ts +3 -3
- package/packages/core/dist/index.mjs +3 -3
- package/packages/core/dist/persisted.d.cts +1 -1
- package/packages/core/dist/persisted.d.ts +1 -1
- package/packages/core/dist/{types--ainI31J.d.ts → types-Bx3mEZ04.d.ts} +1 -1
- package/packages/core/dist/{types-UnrNaTo2.d.cts → types-VzKihKQo.d.cts} +1 -1
- package/packages/cli/dist/chunk-QDYVK4MF.mjs.map +0 -1
- package/packages/core/dist/chunk-3XS5O4JI.mjs.map +0 -1
- package/packages/core/dist/chunk-6LP2J5CA.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 6.21.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9d6a24f: Actor-scoped TraceContracts (`scope` selectors) and structural observation provenance (`observations.requireProvenance`) for multi-agent precision (#320/#321). Includes planner/verifier recipe.
|
|
8
|
+
|
|
9
|
+
## 6.20.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 43a4481: Flexible deterministic contracts: selectable `requiredOrderMode` (`first-occurrence` | `happens-before` | `all-occurrences`), one-level `alternatives.anyOf`, and `lintTraceContract` / `explainTraceContract` helpers. Includes MCP expected-rejection and local Promptfoo use-together recipes.
|
|
14
|
+
|
|
3
15
|
## 6.19.1
|
|
4
16
|
|
|
5
17
|
### 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.
|
|
215
|
+
**Current published baseline:** **6.21.0** · 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/TRACE-CONTRACTS.md
CHANGED
|
@@ -10,6 +10,11 @@ Contracts compile to deterministic check rules for common cases:
|
|
|
10
10
|
|
|
11
11
|
- run status / completion / max duration
|
|
12
12
|
- tool required / forbidden / allowed / maxCalls / order (`requiredTools` / `forbiddenTools` aliases)
|
|
13
|
+
- selectable `requiredOrderMode` (`first-occurrence` | `happens-before` | `all-occurrences`)
|
|
14
|
+
- `alternatives.anyOf` for one level of legitimate alternate paths
|
|
15
|
+
- actor `scope` selectors (`runId`, `subAgentId`, `groupId`, `workflowStep`, `rootEventId`)
|
|
16
|
+
- observation `requireProvenance` (structural method / evidence / same-run event references)
|
|
17
|
+
- `lintTraceContract` / `explainTraceContract` for brittle-contract diagnostics
|
|
13
18
|
- LLM maxCalls / maxTotalTokens / allowedModels
|
|
14
19
|
- evidence-bearing findings on failures
|
|
15
20
|
- evaluation over **logical** TraceFacts (raw events remain available)
|
|
@@ -24,13 +29,14 @@ Contracts compile to deterministic check rules for common cases:
|
|
|
24
29
|
→ contract.tool.order.1: B before C
|
|
25
30
|
```
|
|
26
31
|
|
|
27
|
-
|
|
32
|
+
`requiredOrderMode` selects one ordering relation for every generated pair:
|
|
28
33
|
|
|
29
34
|
- unlisted intermediate tools are allowed;
|
|
30
|
-
- later repetitions do not invalidate an earlier valid first-occurrence order;
|
|
31
35
|
- TraceContract `requiredOrder` **implies presence** — every listed name is added to the effective required-tool set;
|
|
32
|
-
-
|
|
33
|
-
-
|
|
36
|
+
- `first-occurrence` (default when omitted) compares first occurrences in start/encounter order; later repetitions do not invalidate an earlier valid order, and interval overlap emits a non-failing `tool.order.overlap` warning;
|
|
37
|
+
- `happens-before` requires the first `before` occurrence to finish before the first `after` occurrence starts;
|
|
38
|
+
- `all-occurrences` requires every `before` occurrence to finish before every `after` occurrence starts (`max(before.end) <= min(after.start)`);
|
|
39
|
+
- causal modes fail when a required interval boundary cannot be resolved instead of falling back to encounter order.
|
|
34
40
|
|
|
35
41
|
Examples for `requiredOrder: ["retrieve", "generate"]`:
|
|
36
42
|
|
|
@@ -38,12 +44,16 @@ Examples for `requiredOrder: ["retrieve", "generate"]`:
|
|
|
38
44
|
| --- | --- |
|
|
39
45
|
| `retrieve → generate` | PASS |
|
|
40
46
|
| `retrieve → rerank → generate` | PASS |
|
|
41
|
-
| `retrieve → generate → retrieve` | PASS
|
|
47
|
+
| `retrieve → generate → retrieve` | PASS under omitted / `first-occurrence`; FAIL under `all-occurrences` |
|
|
42
48
|
| `generate → retrieve` | FAIL (order) |
|
|
43
49
|
| `cache_lookup → generate` | FAIL (missing `retrieve` via implied presence) |
|
|
44
50
|
|
|
45
51
|
Low-level `createToolOrderingRule({ before, after })` alone may still pass when an endpoint is missing (compositional). TraceContract `requiredOrder` does not.
|
|
46
52
|
|
|
53
|
+
For overlapping first calls, omitted / `first-occurrence` warns while `happens-before` fails.
|
|
54
|
+
|
|
55
|
+
Immediate or positional `all-pairs` matching is not implemented.
|
|
56
|
+
|
|
47
57
|
### Experimental Vitest / Jest matchers (shipped)
|
|
48
58
|
|
|
49
59
|
| Package | Export | Matchers |
|
|
@@ -55,7 +65,7 @@ These are **Experimental** — API names may evolve. There is no `expectTrace(..
|
|
|
55
65
|
|
|
56
66
|
See [API.md](./API.md), [TRACE-FACTS.md](./TRACE-FACTS.md), and `packages/core/src/checks/contract.ts`.
|
|
57
67
|
|
|
58
|
-
## Rule kinds
|
|
68
|
+
## Rule kinds
|
|
59
69
|
|
|
60
70
|
TraceContract rules fall into distinct categories. Mixing them incorrectly is a common source of false failures (see GitHub #308 and #309).
|
|
61
71
|
|
|
@@ -65,64 +75,104 @@ Unconditional path invariant: every named tool must appear **at least once** in
|
|
|
65
75
|
|
|
66
76
|
- Use when the tool is always part of a valid execution path.
|
|
67
77
|
- **Do not** use for steps that legitimate shortcuts may skip (for example cache hits that bypass `retrieve`).
|
|
68
|
-
-
|
|
78
|
+
- Prefer `alternatives.anyOf` or `observations.required` when a shortcut is valid.
|
|
69
79
|
|
|
70
|
-
### `tools.requiredOrder` (shipped —
|
|
80
|
+
### `tools.requiredOrder` (shipped — selectable ordering modes)
|
|
71
81
|
|
|
72
|
-
|
|
82
|
+
The evaluator expands each list into adjacent pairs and applies one `requiredOrderMode` to every pair.
|
|
73
83
|
|
|
74
84
|
- TraceContract `requiredOrder` **implies presence** of every listed tool (unioned into `tools.required`).
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
- `requiredOrderMode: "first-occurrence"` is the default first-occurrence start/encounter relation; overlapping intervals emit a non-failing warning.
|
|
86
|
+
- `requiredOrderMode: "happens-before"` requires the first before to **end** before the first after **starts**; overlap fails.
|
|
87
|
+
- `requiredOrderMode: "all-occurrences"` requires every before to end before every after starts; any cross-boundary overlap or later before fails.
|
|
88
|
+
- Missing interval boundaries fail closed in the two causal modes.
|
|
89
|
+
|
|
90
|
+
### `alternatives.anyOf` (shipped)
|
|
91
|
+
|
|
92
|
+
One level of named deterministic branches. Base rules always apply. At least one complete branch must pass.
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
defineTraceContract({
|
|
96
|
+
run: { requireCompleted: true },
|
|
97
|
+
tools: { required: ["generate"] },
|
|
98
|
+
alternatives: {
|
|
99
|
+
anyOf: [
|
|
100
|
+
{
|
|
101
|
+
id: "cache-hit",
|
|
102
|
+
contract: {
|
|
103
|
+
tools: { required: ["cache_lookup"], forbidden: ["retrieve"] },
|
|
104
|
+
observations: { required: ["cache-hit-valid"] },
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "retrieve",
|
|
109
|
+
contract: {
|
|
110
|
+
tools: { required: ["retrieve"], requiredOrder: ["retrieve", "generate"] },
|
|
111
|
+
observations: { required: ["retrieval-context-valid"] },
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Constraints:
|
|
120
|
+
|
|
121
|
+
- unique branch ids
|
|
122
|
+
- no nested `alternatives`
|
|
123
|
+
- no predicates / runtime DSL
|
|
124
|
+
- unused failed branches do not fail the contract when another branch passes
|
|
125
|
+
- if none pass → `contract.alternatives.none-satisfied`
|
|
80
126
|
|
|
81
127
|
### `observations.required` (shipped)
|
|
82
128
|
|
|
83
129
|
Requires externally observed or effect evidence (for example HTTP status, file write, cache key) rather than a specific tool call. Prefer this when the invariant is about **outcome** rather than **which tool ran**.
|
|
84
130
|
|
|
85
|
-
###
|
|
86
|
-
|
|
87
|
-
Document only; **do not** use these fields in contracts today:
|
|
131
|
+
### `scope` (shipped — experimental)
|
|
88
132
|
|
|
89
|
-
|
|
90
|
-
|---------------|---------|--------|
|
|
91
|
-
| `alternatives.anyOf` | One of several deterministic valid paths (one level, no nested groups, no predicates) | #309 |
|
|
92
|
-
| `requiredOrderMode: "happens-before"` | Causal completion-before-start ordering | #308 |
|
|
93
|
-
| `requiredOrderMode: "all-occurrences"` | Strict ordering across all tool occurrences | #308 |
|
|
133
|
+
Select one actor before evaluation using **explicit** metadata only:
|
|
94
134
|
|
|
95
|
-
|
|
135
|
+
```ts
|
|
136
|
+
defineTraceContract({
|
|
137
|
+
scope: { subAgentId: "verifier-agent" },
|
|
138
|
+
tools: { required: ["run_tests"] },
|
|
139
|
+
});
|
|
140
|
+
```
|
|
96
141
|
|
|
97
|
-
|
|
142
|
+
Supported selectors: `runId`, `subAgentId`, `groupId`, `workflowStep`, `rootEventId` (subtree projection).
|
|
98
143
|
|
|
99
|
-
|
|
144
|
+
- zero matches → error (no whole-session fallback)
|
|
145
|
+
- singular selector matching multiple runs → error
|
|
146
|
+
- no timestamp, prose, or display-name inference
|
|
147
|
+
- successful selection reports the actor and evidence event count
|
|
100
148
|
|
|
101
|
-
|
|
102
|
-
2. **Express** the verified outcome via `observations.required` when possible.
|
|
103
|
-
3. **Document** the cache-hit or alternate path in contract comments for reviewers.
|
|
149
|
+
### `observations.requireProvenance` (shipped — experimental)
|
|
104
150
|
|
|
105
|
-
|
|
151
|
+
Structural provenance for named outcomes. These checks prove method/evidence linkage was recorded; they do **not** prove the claim is semantically true, authorized, complete, or externally trusted.
|
|
106
152
|
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
required: [
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
153
|
+
```ts
|
|
154
|
+
defineTraceContract({
|
|
155
|
+
observations: {
|
|
156
|
+
required: ["refund-confirmed"],
|
|
157
|
+
requireProvenance: {
|
|
158
|
+
method: true,
|
|
159
|
+
evidence: true,
|
|
160
|
+
sameRunEventReference: true,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
});
|
|
114
164
|
```
|
|
115
165
|
|
|
116
|
-
|
|
166
|
+
Bounded evidence shapes: string event id, `{ eventId }`, or `{ eventIds }` (max 16). Method must be in the `ObservedOutcomeMethod` vocabulary. Omitting `requireProvenance` leaves prior observation behavior unchanged.
|
|
117
167
|
|
|
118
|
-
|
|
168
|
+
### Lint and explain (shipped)
|
|
119
169
|
|
|
120
|
-
|
|
170
|
+
```ts
|
|
171
|
+
import { lintTraceContract, explainTraceContract } from "agent-inspect/checks";
|
|
121
172
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
- Every structure rule (orphan/cycle/depth) exposed on the contract API (many exist as standalone check rules)
|
|
173
|
+
lintTraceContract(contract); // brittle / invalid shape diagnostics
|
|
174
|
+
explainTraceContract(contract); // human-readable intent lines
|
|
175
|
+
```
|
|
126
176
|
|
|
127
177
|
## CLI relationship
|
|
128
178
|
|
|
@@ -137,3 +187,4 @@ Suites and gates can consume check results; see [SUITES-COHORTS-GATES.md](./SUIT
|
|
|
137
187
|
- Experimental/Beta API — may evolve in minors
|
|
138
188
|
- Contract tests are smoke-level; prefer check-engine tests for deep rule coverage
|
|
139
189
|
- Always review findings before treating a green check as product proof
|
|
190
|
+
- No nested alternatives, all-pairs matching, or general temporal DSL
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-inspect",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.21.0",
|
|
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",
|
|
@@ -2579,6 +2579,17 @@ var OBSERVED_OUTCOME_STATUSES = [
|
|
|
2579
2579
|
"unknown",
|
|
2580
2580
|
"skipped"
|
|
2581
2581
|
];
|
|
2582
|
+
var OBSERVED_OUTCOME_METHODS = [
|
|
2583
|
+
"dom",
|
|
2584
|
+
"accessibility",
|
|
2585
|
+
"snapshot",
|
|
2586
|
+
"network",
|
|
2587
|
+
"storage",
|
|
2588
|
+
"filesystem",
|
|
2589
|
+
"database",
|
|
2590
|
+
"queue",
|
|
2591
|
+
"custom"
|
|
2592
|
+
];
|
|
2582
2593
|
var OUTCOME_ATTRIBUTE_STATUS_KEY = "outcomeStatus";
|
|
2583
2594
|
var OUTCOME_ATTRIBUTE_EXPECTATION_KEY = "expectation";
|
|
2584
2595
|
var OUTCOME_ATTRIBUTE_METHOD_KEY = "method";
|
|
@@ -6681,6 +6692,9 @@ function isCredentialSensitiveKey(key, sensitiveKeys = DEFAULT_CREDENTIAL_SENSIT
|
|
|
6681
6692
|
return false;
|
|
6682
6693
|
}
|
|
6683
6694
|
|
|
6695
|
+
// packages/core/src/checks/contract.ts
|
|
6696
|
+
new Set(OBSERVED_OUTCOME_METHODS);
|
|
6697
|
+
|
|
6684
6698
|
// packages/core/src/checks/index.ts
|
|
6685
6699
|
var SEVERITY_RANK = {
|
|
6686
6700
|
error: 0,
|
|
@@ -11781,5 +11795,5 @@ function renderGateReport(result, options = {}) {
|
|
|
11781
11795
|
}
|
|
11782
11796
|
|
|
11783
11797
|
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 };
|
|
11784
|
-
//# sourceMappingURL=chunk-
|
|
11785
|
-
//# sourceMappingURL=chunk-
|
|
11798
|
+
//# sourceMappingURL=chunk-CRUHIL5J.mjs.map
|
|
11799
|
+
//# sourceMappingURL=chunk-CRUHIL5J.mjs.map
|