agent-inspect 6.19.0 → 6.20.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 +3 -1
- package/SECURITY.md +2 -0
- package/docs/ARCHITECTURE.md +28 -16
- package/docs/KNOWN-ISSUES.md +3 -3
- package/docs/LIMITATIONS.md +5 -4
- package/docs/PERFORMANCE.md +1 -1
- package/docs/SUPPORT-LEVELS.md +2 -1
- package/docs/TRACE-CONTRACTS.md +64 -52
- package/package.json +3 -2
- package/packages/cli/dist/{chunk-R7Y5SGH5.mjs → chunk-QPRJUVLH.mjs} +57 -17
- package/packages/cli/dist/chunk-QPRJUVLH.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +69 -18
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +9 -6
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-T4EZERCX.mjs → src-6W5ZR3I7.mjs} +3 -3
- package/packages/cli/dist/{src-T4EZERCX.mjs.map → src-6W5ZR3I7.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +118 -18
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +2 -2
- package/packages/core/dist/advanced.d.ts +2 -2
- package/packages/core/dist/advanced.mjs +8 -8
- package/packages/core/dist/checks.cjs +443 -9
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +78 -16
- package/packages/core/dist/checks.d.ts +78 -16
- package/packages/core/dist/checks.mjs +3 -3
- package/packages/core/dist/{chunk-VFO76UH3.mjs → chunk-3XS5O4JI.mjs} +3 -3
- package/packages/core/dist/{chunk-VFO76UH3.mjs.map → chunk-3XS5O4JI.mjs.map} +1 -1
- package/packages/core/dist/{chunk-ZWA5RWMV.mjs → chunk-5YFJJFXU.mjs} +4 -4
- package/packages/core/dist/{chunk-ZWA5RWMV.mjs.map → chunk-5YFJJFXU.mjs.map} +1 -1
- package/packages/core/dist/{chunk-NABMW5DX.mjs → chunk-G47KQB42.mjs} +445 -13
- package/packages/core/dist/chunk-G47KQB42.mjs.map +1 -0
- package/packages/core/dist/{chunk-SGL4JGCD.mjs → chunk-JBNRJLIV.mjs} +58 -18
- package/packages/core/dist/chunk-JBNRJLIV.mjs.map +1 -0
- package/packages/core/dist/{chunk-ULCGIRTC.mjs → chunk-U25RHRSU.mjs} +65 -5
- package/packages/core/dist/chunk-U25RHRSU.mjs.map +1 -0
- package/packages/core/dist/{context-Ca5yK8Cs.d.cts → context-C5ye_xcS.d.cts} +0 -4
- package/packages/core/dist/{context-D6cS4XIL.d.ts → context-CNsNSgE2.d.ts} +0 -4
- package/packages/core/dist/exporters.cjs +55 -15
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.mjs +3 -3
- package/packages/core/dist/{index-DKwuGSe-.d.ts → index-Bg9ZdsdS.d.ts} +10 -0
- package/packages/core/dist/{index-DCR816Yt.d.cts → index-rVpX5PPh.d.cts} +10 -0
- package/packages/core/dist/index.cjs +63 -3
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.d.cts +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.mjs +4 -4
- package/packages/core/dist/writers.cjs +33 -2
- package/packages/core/dist/writers.cjs.map +1 -1
- package/packages/core/dist/writers.mjs +1 -1
- package/packages/cli/dist/chunk-R7Y5SGH5.mjs.map +0 -1
- package/packages/core/dist/chunk-NABMW5DX.mjs.map +0 -1
- package/packages/core/dist/chunk-SGL4JGCD.mjs.map +0 -1
- package/packages/core/dist/chunk-ULCGIRTC.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { L as LogicalTraceEvent, a as LogicalProjectionDiagnostic, T as TraceCheckInput, b as TraceCheckResult } from './index-
|
|
2
|
-
export { B as BaselineRegressionRuleOptions, D as DecisionRuleOptions, G as GuardrailRuleOptions, c as LlmUsageRuleOptions, M as MaxStepDurationRuleOptions, O as ObservedOutcomeRuleOptions, R as RetrievalRuleOptions, d as RunDepthRuleOptions, e as RunDurationRuleOptions, f as RunEventCountRuleOptions, g as RunStatusRuleOptions, h as RunTraceChecksOptions, S as SafetyFindingCategory, i as SafetyFindingConfidence, j as SafetyOversizedAttributeRuleOptions, k as SafetyRawContentRuleOptions, l as SafetyRedactionRuleOptions, m as SafetySecretPattern, n as SafetySecretPatternRuleOptions, o as StallDetectionRuleOptions, p as StructureIncompleteRuleOptions, q as StructureOrphanRuleOptions, r as StructureParallelWidthRuleOptions, s as StructureRelationshipRuleOptions, t as ToolFailureRuleOptions, u as ToolOrderingRuleOptions, v as ToolUsageRuleOptions, w as TraceCheckContext, x as TraceCheckDiagnostic, y as TraceCheckDiagnosticCode, z as TraceCheckEvidence, A as TraceCheckFacts, C as TraceCheckFinding, E as TraceCheckFindingStatus, F as TraceCheckRule, H as TraceCheckRuleCategory, I as TraceCheckRuleExecution, J as TraceCheckRuleExecutionStatus, K as TraceCheckSeverity, N as TraceCheckStatus, P as TraceCheckSummary, Q as TraceSignalRuleOptions, U as createBaselineRegressionRule, V as createDecisionRule, W as createGuardrailRule, X as createLlmUsageRule, Y as createMaxStepDurationRule, Z as createObservedOutcomeRule, _ as createRequireCompletedRule, $ as createRetrievalRule, a0 as createRunDepthRule, a1 as createRunDurationRule, a2 as createRunEventCountRule, a3 as createRunStatusRule, a4 as createSafetyOversizedAttributeRule, a5 as createSafetyRawContentRule, a6 as createSafetyRedactionRule, a7 as createSafetySecretPatternRule, a8 as createStallDetectionRule, a9 as createStructureCycleRule, aa as createStructureIncompleteRule, ab as createStructureOrphanRule, ac as createStructureParallelWidthRule, ad as createStructureRelationshipRule, ae as createToolFailureRule, af as createToolOrderingRule, ag as createToolUsageRule, ah as projectLogicalEvents, ai as resolveCanonicalToolName, aj as runTraceChecks } from './index-
|
|
1
|
+
import { L as LogicalTraceEvent, a as LogicalProjectionDiagnostic, T as TraceCheckInput, b as TraceCheckResult } from './index-rVpX5PPh.cjs';
|
|
2
|
+
export { B as BaselineRegressionRuleOptions, D as DecisionRuleOptions, G as GuardrailRuleOptions, c as LlmUsageRuleOptions, M as MaxStepDurationRuleOptions, O as ObservedOutcomeRuleOptions, R as RetrievalRuleOptions, d as RunDepthRuleOptions, e as RunDurationRuleOptions, f as RunEventCountRuleOptions, g as RunStatusRuleOptions, h as RunTraceChecksOptions, S as SafetyFindingCategory, i as SafetyFindingConfidence, j as SafetyOversizedAttributeRuleOptions, k as SafetyRawContentRuleOptions, l as SafetyRedactionRuleOptions, m as SafetySecretPattern, n as SafetySecretPatternRuleOptions, o as StallDetectionRuleOptions, p as StructureIncompleteRuleOptions, q as StructureOrphanRuleOptions, r as StructureParallelWidthRuleOptions, s as StructureRelationshipRuleOptions, t as ToolFailureRuleOptions, u as ToolOrderingRuleOptions, v as ToolUsageRuleOptions, w as TraceCheckContext, x as TraceCheckDiagnostic, y as TraceCheckDiagnosticCode, z as TraceCheckEvidence, A as TraceCheckFacts, C as TraceCheckFinding, E as TraceCheckFindingStatus, F as TraceCheckRule, H as TraceCheckRuleCategory, I as TraceCheckRuleExecution, J as TraceCheckRuleExecutionStatus, K as TraceCheckSeverity, N as TraceCheckStatus, P as TraceCheckSummary, Q as TraceSignalRuleOptions, U as createBaselineRegressionRule, V as createDecisionRule, W as createGuardrailRule, X as createLlmUsageRule, Y as createMaxStepDurationRule, Z as createObservedOutcomeRule, _ as createRequireCompletedRule, $ as createRetrievalRule, a0 as createRunDepthRule, a1 as createRunDurationRule, a2 as createRunEventCountRule, a3 as createRunStatusRule, a4 as createSafetyOversizedAttributeRule, a5 as createSafetyRawContentRule, a6 as createSafetyRedactionRule, a7 as createSafetySecretPatternRule, a8 as createStallDetectionRule, a9 as createStructureCycleRule, aa as createStructureIncompleteRule, ab as createStructureOrphanRule, ac as createStructureParallelWidthRule, ad as createStructureRelationshipRule, ae as createToolFailureRule, af as createToolOrderingRule, ag as createToolUsageRule, ah as projectLogicalEvents, ai as resolveCanonicalToolName, aj as runTraceChecks } from './index-rVpX5PPh.cjs';
|
|
3
3
|
export { PROGRAMMATIC_DIAGNOSTIC_SPECS, ProgrammaticDiagnosticCode, ProgrammaticDiagnosticSpec, formatProgrammaticDiagnostic } from './readers.cjs';
|
|
4
4
|
import { a as TraceReadResult } from './index-vqr-g6ev.cjs';
|
|
5
5
|
import { P as PersistedInspectEvent } from './persisted-inspect-event-CVZWZldL.cjs';
|
|
@@ -146,7 +146,8 @@ interface TraceContractToolRules {
|
|
|
146
146
|
/**
|
|
147
147
|
* Unconditional tool presence invariant. Every named tool must appear at least
|
|
148
148
|
* once. Do not use for cache-hit or alternate-path shortcuts — prefer
|
|
149
|
-
* `
|
|
149
|
+
* `alternatives.anyOf` or `observations.required` when a legitimate path may
|
|
150
|
+
* skip the tool.
|
|
150
151
|
*
|
|
151
152
|
* @see docs/TRACE-CONTRACTS.md
|
|
152
153
|
*/
|
|
@@ -159,25 +160,34 @@ interface TraceContractToolRules {
|
|
|
159
160
|
allowed?: string[];
|
|
160
161
|
maxCalls?: number;
|
|
161
162
|
/**
|
|
162
|
-
* Required tool order
|
|
163
|
+
* Required tool order expanded into adjacent pairs.
|
|
163
164
|
*
|
|
164
165
|
* `[A, B, C]` expands to “A before B” and “B before C”, each comparing the
|
|
165
|
-
*
|
|
166
|
-
* allowed.
|
|
166
|
+
* selected `requiredOrderMode` to every pair. Unlisted intermediate tools
|
|
167
|
+
* are allowed.
|
|
167
168
|
*
|
|
168
169
|
* TraceContract `requiredOrder` **implies presence**: every listed name is
|
|
169
170
|
* added to the effective required-tool set. Low-level `createToolOrderingRule`
|
|
170
171
|
* alone may still pass vacuously when an endpoint is missing.
|
|
171
172
|
*
|
|
172
|
-
*
|
|
173
|
-
* non-failing
|
|
174
|
-
*
|
|
173
|
+
* The default `first-occurrence` mode preserves first-occurrence encounter
|
|
174
|
+
* ordering; overlapping intervals emit a non-failing warning. `happens-before`
|
|
175
|
+
* requires the first before event to finish before the first after event starts.
|
|
176
|
+
* `all-occurrences` applies that causal boundary to every occurrence.
|
|
175
177
|
*
|
|
176
178
|
* @see docs/TRACE-CONTRACTS.md
|
|
177
179
|
* @beta Available through `agent-inspect/checks`. Additive changes may ship
|
|
178
180
|
* in minor releases; breaking changes require a future major.
|
|
179
181
|
*/
|
|
180
182
|
requiredOrder?: string[];
|
|
183
|
+
/**
|
|
184
|
+
* Ordering semantics applied to every adjacent pair in `requiredOrder`.
|
|
185
|
+
* Causal modes fail closed when a required interval boundary is unavailable.
|
|
186
|
+
*
|
|
187
|
+
* @defaultValue `"first-occurrence"`
|
|
188
|
+
* @beta Available through `agent-inspect/checks`.
|
|
189
|
+
*/
|
|
190
|
+
requiredOrderMode?: "first-occurrence" | "happens-before" | "all-occurrences";
|
|
181
191
|
}
|
|
182
192
|
interface TraceContractLlmRules {
|
|
183
193
|
maxCalls?: number;
|
|
@@ -188,17 +198,54 @@ interface TraceContractObservationRules {
|
|
|
188
198
|
required?: string[];
|
|
189
199
|
failOn?: Array<"failed" | "unknown" | "skipped">;
|
|
190
200
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
/**
|
|
202
|
+
* One deterministic alternate path. Branch contracts are one level only —
|
|
203
|
+
* nested `alternatives` are rejected.
|
|
204
|
+
*
|
|
205
|
+
* @experimental
|
|
206
|
+
*/
|
|
207
|
+
interface TraceContractAlternativeBranch {
|
|
208
|
+
/** Unique branch id within `alternatives.anyOf`. */
|
|
209
|
+
id: string;
|
|
210
|
+
description?: string;
|
|
211
|
+
/** Branch body: run/tools/llm/observations only (no nested alternatives). */
|
|
212
|
+
contract: TraceContractBody;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Bounded alternative valid paths for legitimate shortcuts (GitHub #309).
|
|
216
|
+
*
|
|
217
|
+
* @experimental
|
|
218
|
+
*/
|
|
219
|
+
interface TraceContractAlternatives {
|
|
220
|
+
/**
|
|
221
|
+
* One level of named branches. The overall contract passes when the base
|
|
222
|
+
* rules pass and **at least one** complete branch passes.
|
|
223
|
+
*/
|
|
224
|
+
anyOf: TraceContractAlternativeBranch[];
|
|
196
225
|
}
|
|
197
|
-
|
|
226
|
+
/** Contract body without alternatives (base or branch). */
|
|
227
|
+
type TraceContractBody = {
|
|
198
228
|
run?: TraceContractRunRules;
|
|
199
229
|
tools?: TraceContractToolRules;
|
|
200
230
|
llm?: TraceContractLlmRules;
|
|
201
231
|
observations?: TraceContractObservationRules;
|
|
232
|
+
};
|
|
233
|
+
interface TraceContractInput extends TraceContractBody {
|
|
234
|
+
alternatives?: TraceContractAlternatives;
|
|
235
|
+
}
|
|
236
|
+
interface TraceContract extends TraceContractBody {
|
|
237
|
+
alternatives?: TraceContractAlternatives;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Lint diagnostic for brittle or invalid TraceContract shapes.
|
|
241
|
+
*
|
|
242
|
+
* @experimental
|
|
243
|
+
*/
|
|
244
|
+
interface TraceContractLintDiagnostic {
|
|
245
|
+
code: string;
|
|
246
|
+
severity: "error" | "warning" | "info";
|
|
247
|
+
message: string;
|
|
248
|
+
path?: string;
|
|
202
249
|
}
|
|
203
250
|
/**
|
|
204
251
|
* Define a normalized trace contract object.
|
|
@@ -209,6 +256,9 @@ declare function defineTraceContract(input: TraceContractInput): TraceContract;
|
|
|
209
256
|
/**
|
|
210
257
|
* Evaluate a trace contract against an opened trace read result.
|
|
211
258
|
*
|
|
259
|
+
* Base rules always apply. When `alternatives.anyOf` is present, at least one
|
|
260
|
+
* complete branch must also pass.
|
|
261
|
+
*
|
|
212
262
|
* @experimental
|
|
213
263
|
*/
|
|
214
264
|
declare function evaluateTraceContract(input: TraceCheckInput, contract: TraceContract, options?: {
|
|
@@ -222,5 +272,17 @@ declare function evaluateTraceContract(input: TraceCheckInput, contract: TraceCo
|
|
|
222
272
|
declare function evaluateTraceContractRead(read: TraceReadResult, contract: TraceContract, options?: {
|
|
223
273
|
runId?: string;
|
|
224
274
|
}): TraceCheckResult;
|
|
275
|
+
/**
|
|
276
|
+
* Lint a TraceContract for invalid or brittle shapes (does not evaluate a trace).
|
|
277
|
+
*
|
|
278
|
+
* @experimental
|
|
279
|
+
*/
|
|
280
|
+
declare function lintTraceContract(contract: TraceContract): TraceContractLintDiagnostic[];
|
|
281
|
+
/**
|
|
282
|
+
* Explain a TraceContract as short human-readable lines (does not evaluate a trace).
|
|
283
|
+
*
|
|
284
|
+
* @experimental
|
|
285
|
+
*/
|
|
286
|
+
declare function explainTraceContract(contract: TraceContract): string[];
|
|
225
287
|
|
|
226
|
-
export { type DerivedFailureConfidence, type DerivedFailureFact, type DerivedFailureRole, type FailureRoleCounts, LogicalProjectionDiagnostic, LogicalTraceEvent, type SemanticParitySummary, TraceCheckInput, TraceCheckResult, type TraceContract, type TraceContractInput, type TraceContractLlmRules, type TraceContractObservationRules, type TraceContractRunRules, type TraceContractToolRules, type TraceFacts, buildTraceFacts, defineTraceContract, deriveFailureFacts, evaluateTraceContract, evaluateTraceContractRead, summarizeSemanticParity };
|
|
288
|
+
export { type DerivedFailureConfidence, type DerivedFailureFact, type DerivedFailureRole, type FailureRoleCounts, LogicalProjectionDiagnostic, LogicalTraceEvent, type SemanticParitySummary, TraceCheckInput, TraceCheckResult, type TraceContract, type TraceContractAlternativeBranch, type TraceContractAlternatives, type TraceContractBody, type TraceContractInput, type TraceContractLintDiagnostic, type TraceContractLlmRules, type TraceContractObservationRules, type TraceContractRunRules, type TraceContractToolRules, type TraceFacts, buildTraceFacts, defineTraceContract, deriveFailureFacts, evaluateTraceContract, evaluateTraceContractRead, explainTraceContract, lintTraceContract, summarizeSemanticParity };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { L as LogicalTraceEvent, a as LogicalProjectionDiagnostic, T as TraceCheckInput, b as TraceCheckResult } from './index-
|
|
2
|
-
export { B as BaselineRegressionRuleOptions, D as DecisionRuleOptions, G as GuardrailRuleOptions, c as LlmUsageRuleOptions, M as MaxStepDurationRuleOptions, O as ObservedOutcomeRuleOptions, R as RetrievalRuleOptions, d as RunDepthRuleOptions, e as RunDurationRuleOptions, f as RunEventCountRuleOptions, g as RunStatusRuleOptions, h as RunTraceChecksOptions, S as SafetyFindingCategory, i as SafetyFindingConfidence, j as SafetyOversizedAttributeRuleOptions, k as SafetyRawContentRuleOptions, l as SafetyRedactionRuleOptions, m as SafetySecretPattern, n as SafetySecretPatternRuleOptions, o as StallDetectionRuleOptions, p as StructureIncompleteRuleOptions, q as StructureOrphanRuleOptions, r as StructureParallelWidthRuleOptions, s as StructureRelationshipRuleOptions, t as ToolFailureRuleOptions, u as ToolOrderingRuleOptions, v as ToolUsageRuleOptions, w as TraceCheckContext, x as TraceCheckDiagnostic, y as TraceCheckDiagnosticCode, z as TraceCheckEvidence, A as TraceCheckFacts, C as TraceCheckFinding, E as TraceCheckFindingStatus, F as TraceCheckRule, H as TraceCheckRuleCategory, I as TraceCheckRuleExecution, J as TraceCheckRuleExecutionStatus, K as TraceCheckSeverity, N as TraceCheckStatus, P as TraceCheckSummary, Q as TraceSignalRuleOptions, U as createBaselineRegressionRule, V as createDecisionRule, W as createGuardrailRule, X as createLlmUsageRule, Y as createMaxStepDurationRule, Z as createObservedOutcomeRule, _ as createRequireCompletedRule, $ as createRetrievalRule, a0 as createRunDepthRule, a1 as createRunDurationRule, a2 as createRunEventCountRule, a3 as createRunStatusRule, a4 as createSafetyOversizedAttributeRule, a5 as createSafetyRawContentRule, a6 as createSafetyRedactionRule, a7 as createSafetySecretPatternRule, a8 as createStallDetectionRule, a9 as createStructureCycleRule, aa as createStructureIncompleteRule, ab as createStructureOrphanRule, ac as createStructureParallelWidthRule, ad as createStructureRelationshipRule, ae as createToolFailureRule, af as createToolOrderingRule, ag as createToolUsageRule, ah as projectLogicalEvents, ai as resolveCanonicalToolName, aj as runTraceChecks } from './index-
|
|
1
|
+
import { L as LogicalTraceEvent, a as LogicalProjectionDiagnostic, T as TraceCheckInput, b as TraceCheckResult } from './index-Bg9ZdsdS.js';
|
|
2
|
+
export { B as BaselineRegressionRuleOptions, D as DecisionRuleOptions, G as GuardrailRuleOptions, c as LlmUsageRuleOptions, M as MaxStepDurationRuleOptions, O as ObservedOutcomeRuleOptions, R as RetrievalRuleOptions, d as RunDepthRuleOptions, e as RunDurationRuleOptions, f as RunEventCountRuleOptions, g as RunStatusRuleOptions, h as RunTraceChecksOptions, S as SafetyFindingCategory, i as SafetyFindingConfidence, j as SafetyOversizedAttributeRuleOptions, k as SafetyRawContentRuleOptions, l as SafetyRedactionRuleOptions, m as SafetySecretPattern, n as SafetySecretPatternRuleOptions, o as StallDetectionRuleOptions, p as StructureIncompleteRuleOptions, q as StructureOrphanRuleOptions, r as StructureParallelWidthRuleOptions, s as StructureRelationshipRuleOptions, t as ToolFailureRuleOptions, u as ToolOrderingRuleOptions, v as ToolUsageRuleOptions, w as TraceCheckContext, x as TraceCheckDiagnostic, y as TraceCheckDiagnosticCode, z as TraceCheckEvidence, A as TraceCheckFacts, C as TraceCheckFinding, E as TraceCheckFindingStatus, F as TraceCheckRule, H as TraceCheckRuleCategory, I as TraceCheckRuleExecution, J as TraceCheckRuleExecutionStatus, K as TraceCheckSeverity, N as TraceCheckStatus, P as TraceCheckSummary, Q as TraceSignalRuleOptions, U as createBaselineRegressionRule, V as createDecisionRule, W as createGuardrailRule, X as createLlmUsageRule, Y as createMaxStepDurationRule, Z as createObservedOutcomeRule, _ as createRequireCompletedRule, $ as createRetrievalRule, a0 as createRunDepthRule, a1 as createRunDurationRule, a2 as createRunEventCountRule, a3 as createRunStatusRule, a4 as createSafetyOversizedAttributeRule, a5 as createSafetyRawContentRule, a6 as createSafetyRedactionRule, a7 as createSafetySecretPatternRule, a8 as createStallDetectionRule, a9 as createStructureCycleRule, aa as createStructureIncompleteRule, ab as createStructureOrphanRule, ac as createStructureParallelWidthRule, ad as createStructureRelationshipRule, ae as createToolFailureRule, af as createToolOrderingRule, ag as createToolUsageRule, ah as projectLogicalEvents, ai as resolveCanonicalToolName, aj as runTraceChecks } from './index-Bg9ZdsdS.js';
|
|
3
3
|
export { PROGRAMMATIC_DIAGNOSTIC_SPECS, ProgrammaticDiagnosticCode, ProgrammaticDiagnosticSpec, formatProgrammaticDiagnostic } from './readers.js';
|
|
4
4
|
import { a as TraceReadResult } from './index-AMAGuO_i.js';
|
|
5
5
|
import { P as PersistedInspectEvent } from './persisted-inspect-event-BVucFVrP.js';
|
|
@@ -146,7 +146,8 @@ interface TraceContractToolRules {
|
|
|
146
146
|
/**
|
|
147
147
|
* Unconditional tool presence invariant. Every named tool must appear at least
|
|
148
148
|
* once. Do not use for cache-hit or alternate-path shortcuts — prefer
|
|
149
|
-
* `
|
|
149
|
+
* `alternatives.anyOf` or `observations.required` when a legitimate path may
|
|
150
|
+
* skip the tool.
|
|
150
151
|
*
|
|
151
152
|
* @see docs/TRACE-CONTRACTS.md
|
|
152
153
|
*/
|
|
@@ -159,25 +160,34 @@ interface TraceContractToolRules {
|
|
|
159
160
|
allowed?: string[];
|
|
160
161
|
maxCalls?: number;
|
|
161
162
|
/**
|
|
162
|
-
* Required tool order
|
|
163
|
+
* Required tool order expanded into adjacent pairs.
|
|
163
164
|
*
|
|
164
165
|
* `[A, B, C]` expands to “A before B” and “B before C”, each comparing the
|
|
165
|
-
*
|
|
166
|
-
* allowed.
|
|
166
|
+
* selected `requiredOrderMode` to every pair. Unlisted intermediate tools
|
|
167
|
+
* are allowed.
|
|
167
168
|
*
|
|
168
169
|
* TraceContract `requiredOrder` **implies presence**: every listed name is
|
|
169
170
|
* added to the effective required-tool set. Low-level `createToolOrderingRule`
|
|
170
171
|
* alone may still pass vacuously when an endpoint is missing.
|
|
171
172
|
*
|
|
172
|
-
*
|
|
173
|
-
* non-failing
|
|
174
|
-
*
|
|
173
|
+
* The default `first-occurrence` mode preserves first-occurrence encounter
|
|
174
|
+
* ordering; overlapping intervals emit a non-failing warning. `happens-before`
|
|
175
|
+
* requires the first before event to finish before the first after event starts.
|
|
176
|
+
* `all-occurrences` applies that causal boundary to every occurrence.
|
|
175
177
|
*
|
|
176
178
|
* @see docs/TRACE-CONTRACTS.md
|
|
177
179
|
* @beta Available through `agent-inspect/checks`. Additive changes may ship
|
|
178
180
|
* in minor releases; breaking changes require a future major.
|
|
179
181
|
*/
|
|
180
182
|
requiredOrder?: string[];
|
|
183
|
+
/**
|
|
184
|
+
* Ordering semantics applied to every adjacent pair in `requiredOrder`.
|
|
185
|
+
* Causal modes fail closed when a required interval boundary is unavailable.
|
|
186
|
+
*
|
|
187
|
+
* @defaultValue `"first-occurrence"`
|
|
188
|
+
* @beta Available through `agent-inspect/checks`.
|
|
189
|
+
*/
|
|
190
|
+
requiredOrderMode?: "first-occurrence" | "happens-before" | "all-occurrences";
|
|
181
191
|
}
|
|
182
192
|
interface TraceContractLlmRules {
|
|
183
193
|
maxCalls?: number;
|
|
@@ -188,17 +198,54 @@ interface TraceContractObservationRules {
|
|
|
188
198
|
required?: string[];
|
|
189
199
|
failOn?: Array<"failed" | "unknown" | "skipped">;
|
|
190
200
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
/**
|
|
202
|
+
* One deterministic alternate path. Branch contracts are one level only —
|
|
203
|
+
* nested `alternatives` are rejected.
|
|
204
|
+
*
|
|
205
|
+
* @experimental
|
|
206
|
+
*/
|
|
207
|
+
interface TraceContractAlternativeBranch {
|
|
208
|
+
/** Unique branch id within `alternatives.anyOf`. */
|
|
209
|
+
id: string;
|
|
210
|
+
description?: string;
|
|
211
|
+
/** Branch body: run/tools/llm/observations only (no nested alternatives). */
|
|
212
|
+
contract: TraceContractBody;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Bounded alternative valid paths for legitimate shortcuts (GitHub #309).
|
|
216
|
+
*
|
|
217
|
+
* @experimental
|
|
218
|
+
*/
|
|
219
|
+
interface TraceContractAlternatives {
|
|
220
|
+
/**
|
|
221
|
+
* One level of named branches. The overall contract passes when the base
|
|
222
|
+
* rules pass and **at least one** complete branch passes.
|
|
223
|
+
*/
|
|
224
|
+
anyOf: TraceContractAlternativeBranch[];
|
|
196
225
|
}
|
|
197
|
-
|
|
226
|
+
/** Contract body without alternatives (base or branch). */
|
|
227
|
+
type TraceContractBody = {
|
|
198
228
|
run?: TraceContractRunRules;
|
|
199
229
|
tools?: TraceContractToolRules;
|
|
200
230
|
llm?: TraceContractLlmRules;
|
|
201
231
|
observations?: TraceContractObservationRules;
|
|
232
|
+
};
|
|
233
|
+
interface TraceContractInput extends TraceContractBody {
|
|
234
|
+
alternatives?: TraceContractAlternatives;
|
|
235
|
+
}
|
|
236
|
+
interface TraceContract extends TraceContractBody {
|
|
237
|
+
alternatives?: TraceContractAlternatives;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Lint diagnostic for brittle or invalid TraceContract shapes.
|
|
241
|
+
*
|
|
242
|
+
* @experimental
|
|
243
|
+
*/
|
|
244
|
+
interface TraceContractLintDiagnostic {
|
|
245
|
+
code: string;
|
|
246
|
+
severity: "error" | "warning" | "info";
|
|
247
|
+
message: string;
|
|
248
|
+
path?: string;
|
|
202
249
|
}
|
|
203
250
|
/**
|
|
204
251
|
* Define a normalized trace contract object.
|
|
@@ -209,6 +256,9 @@ declare function defineTraceContract(input: TraceContractInput): TraceContract;
|
|
|
209
256
|
/**
|
|
210
257
|
* Evaluate a trace contract against an opened trace read result.
|
|
211
258
|
*
|
|
259
|
+
* Base rules always apply. When `alternatives.anyOf` is present, at least one
|
|
260
|
+
* complete branch must also pass.
|
|
261
|
+
*
|
|
212
262
|
* @experimental
|
|
213
263
|
*/
|
|
214
264
|
declare function evaluateTraceContract(input: TraceCheckInput, contract: TraceContract, options?: {
|
|
@@ -222,5 +272,17 @@ declare function evaluateTraceContract(input: TraceCheckInput, contract: TraceCo
|
|
|
222
272
|
declare function evaluateTraceContractRead(read: TraceReadResult, contract: TraceContract, options?: {
|
|
223
273
|
runId?: string;
|
|
224
274
|
}): TraceCheckResult;
|
|
275
|
+
/**
|
|
276
|
+
* Lint a TraceContract for invalid or brittle shapes (does not evaluate a trace).
|
|
277
|
+
*
|
|
278
|
+
* @experimental
|
|
279
|
+
*/
|
|
280
|
+
declare function lintTraceContract(contract: TraceContract): TraceContractLintDiagnostic[];
|
|
281
|
+
/**
|
|
282
|
+
* Explain a TraceContract as short human-readable lines (does not evaluate a trace).
|
|
283
|
+
*
|
|
284
|
+
* @experimental
|
|
285
|
+
*/
|
|
286
|
+
declare function explainTraceContract(contract: TraceContract): string[];
|
|
225
287
|
|
|
226
|
-
export { type DerivedFailureConfidence, type DerivedFailureFact, type DerivedFailureRole, type FailureRoleCounts, LogicalProjectionDiagnostic, LogicalTraceEvent, type SemanticParitySummary, TraceCheckInput, TraceCheckResult, type TraceContract, type TraceContractInput, type TraceContractLlmRules, type TraceContractObservationRules, type TraceContractRunRules, type TraceContractToolRules, type TraceFacts, buildTraceFacts, defineTraceContract, deriveFailureFacts, evaluateTraceContract, evaluateTraceContractRead, summarizeSemanticParity };
|
|
288
|
+
export { type DerivedFailureConfidence, type DerivedFailureFact, type DerivedFailureRole, type FailureRoleCounts, LogicalProjectionDiagnostic, LogicalTraceEvent, type SemanticParitySummary, TraceCheckInput, TraceCheckResult, type TraceContract, type TraceContractAlternativeBranch, type TraceContractAlternatives, type TraceContractBody, type TraceContractInput, type TraceContractLintDiagnostic, type TraceContractLlmRules, type TraceContractObservationRules, type TraceContractRunRules, type TraceContractToolRules, type TraceFacts, buildTraceFacts, defineTraceContract, deriveFailureFacts, evaluateTraceContract, evaluateTraceContractRead, explainTraceContract, lintTraceContract, summarizeSemanticParity };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { buildTraceFacts, createBaselineRegressionRule, createDecisionRule, createGuardrailRule, createLlmUsageRule, createMaxStepDurationRule, createObservedOutcomeRule, createRequireCompletedRule, createRetrievalRule, createRunDepthRule, createRunDurationRule, createRunEventCountRule, createRunStatusRule, createSafetyOversizedAttributeRule, createSafetyRawContentRule, createSafetyRedactionRule, createSafetySecretPatternRule, createStallDetectionRule, createStructureCycleRule, createStructureIncompleteRule, createStructureOrphanRule, createStructureParallelWidthRule, createStructureRelationshipRule, createToolFailureRule, createToolOrderingRule, createToolUsageRule, defineTraceContract, deriveFailureFacts, evaluateTraceContract, evaluateTraceContractRead, projectLogicalEvents, resolveCanonicalToolName, runTraceChecks, summarizeSemanticParity } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
export { buildTraceFacts, createBaselineRegressionRule, createDecisionRule, createGuardrailRule, createLlmUsageRule, createMaxStepDurationRule, createObservedOutcomeRule, createRequireCompletedRule, createRetrievalRule, createRunDepthRule, createRunDurationRule, createRunEventCountRule, createRunStatusRule, createSafetyOversizedAttributeRule, createSafetyRawContentRule, createSafetyRedactionRule, createSafetySecretPatternRule, createStallDetectionRule, createStructureCycleRule, createStructureIncompleteRule, createStructureOrphanRule, createStructureParallelWidthRule, createStructureRelationshipRule, createToolFailureRule, createToolOrderingRule, createToolUsageRule, defineTraceContract, deriveFailureFacts, evaluateTraceContract, evaluateTraceContractRead, explainTraceContract, lintTraceContract, projectLogicalEvents, resolveCanonicalToolName, runTraceChecks, summarizeSemanticParity } from './chunk-G47KQB42.mjs';
|
|
2
|
+
import './chunk-3XS5O4JI.mjs';
|
|
3
|
+
import './chunk-U25RHRSU.mjs';
|
|
4
4
|
import './chunk-VU6O5QAH.mjs';
|
|
5
5
|
export { PROGRAMMATIC_DIAGNOSTIC_SPECS, formatProgrammaticDiagnostic } from './chunk-FWK3Q3OJ.mjs';
|
|
6
6
|
import './chunk-WRE4CNPF.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { prepareMetadataForDisk } from './chunk-
|
|
1
|
+
import { prepareMetadataForDisk } from './chunk-U25RHRSU.mjs';
|
|
2
2
|
|
|
3
3
|
// packages/core/src/outcomes/types.ts
|
|
4
4
|
var OBSERVED_OUTCOME_STATUSES = [
|
|
@@ -224,5 +224,5 @@ function renderObservedOutcomesHtml(summary) {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
export { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents, normalizeObserveOutcomeInput, outcomesMatchingStatus, parseObservationFilter, prepareOutcomeEventForDisk, renderObservedOutcomesHtml, renderObservedOutcomesMarkdown, summarizeObservedOutcomes };
|
|
227
|
-
//# sourceMappingURL=chunk-
|
|
228
|
-
//# sourceMappingURL=chunk-
|
|
227
|
+
//# sourceMappingURL=chunk-3XS5O4JI.mjs.map
|
|
228
|
+
//# sourceMappingURL=chunk-3XS5O4JI.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/outcomes/types.ts","../src/outcomes/validate.ts","../src/outcomes/extract.ts","../src/outcomes/render.ts"],"names":["parseMethod"],"mappings":"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","file":"chunk-VFO76UH3.mjs","sourcesContent":["export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n\nexport interface ObservedOutcome {\n outcomeId: string;\n runId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n total: number;\n passed: number;\n failed: number;\n unknown: number;\n skipped: number;\n outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n \"passed\",\n \"failed\",\n \"unknown\",\n \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n \"dom\",\n \"accessibility\",\n \"snapshot\",\n \"network\",\n \"storage\",\n \"filesystem\",\n \"database\",\n \"queue\",\n \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n OBSERVED_OUTCOME_STATUSES,\n type ObserveOutcomeOptions,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty name.\");\n }\n return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty expectation.\");\n }\n return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeStatus;\n }\n throw new Error(\n `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeMethod;\n }\n throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n name: string,\n options: ObserveOutcomeOptions,\n nowMs: number = Date.now(),\n): {\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n} {\n return {\n name: normalizeName(name),\n expectation: normalizeExpectation(options.expectation),\n status: options.status,\n ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n ...(options.actual !== undefined ? { actual: options.actual } : {}),\n ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n observedAt: parseObservedAt(options.observedAt, nowMs),\n };\n}\n\nfunction boundPayload(\n value: unknown,\n opts: TraceSafetyOptions,\n): unknown {\n if (value === undefined) return undefined;\n if (!isRecord(value) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return value.length > opts.maxMetadataValueLength\n ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n : value;\n }\n return value;\n }\n return prepareMetadataForDisk(\n isRecord(value) ? value : { items: value },\n opts,\n );\n}\n\nexport function prepareOutcomeEventForDisk(\n event: OutcomeObservedEvent,\n opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n const actual = boundPayload(event.actual, opts);\n const evidence = boundPayload(event.evidence, opts);\n const next: OutcomeObservedEvent = {\n ...event,\n ...(actual !== undefined ? { actual } : {}),\n ...(evidence !== undefined ? { evidence } : {}),\n };\n if (\"actual\" in event && actual === undefined) {\n const { actual: _a, ...rest } = next;\n return rest;\n }\n if (\"evidence\" in event && evidence === undefined) {\n const { evidence: _e, ...rest } = next;\n return rest;\n }\n return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n OUTCOME_ATTRIBUTE_METHOD_KEY,\n OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n OUTCOME_ATTRIBUTE_STATUS_KEY,\n OUTCOME_LEGACY_EVENT,\n type ObservedOutcome,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"unknown\" ||\n value === \"skipped\"\n );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n return {\n outcomeId: event.outcomeId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation: event.expectation,\n status: event.status,\n ...(event.method !== undefined ? { method: event.method } : {}),\n ...(event.actual !== undefined ? { actual: event.actual } : {}),\n ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n observedAt: event.observedAt,\n };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n if (event.kind !== \"OUTCOME\") return undefined;\n const attrs = event.attributes ?? {};\n const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n if (!isOutcomeStatus(statusRaw)) return undefined;\n const expectation =\n typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n : event.name;\n const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : Date.parse(event.timestamp);\n return {\n outcomeId: event.eventId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation,\n status: statusRaw,\n ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n : {}),\n ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n if (event.event === OUTCOME_LEGACY_EVENT) {\n out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n }\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n const outcome = fromPersistedOutcome(event);\n if (outcome) out.push(outcome);\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n const summary: ObservedOutcomeSummary = {\n total: outcomes.length,\n passed: 0,\n failed: 0,\n unknown: 0,\n skipped: 0,\n outcomes: [...outcomes],\n };\n for (const outcome of outcomes) {\n summary[outcome.status] += 1;\n }\n return summary;\n}\n\nexport function outcomesMatchingStatus(\n outcomes: readonly ObservedOutcome[],\n statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n const set = new Set(statuses);\n return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n \"\",\n \"| Name | Status | Expectation | Method |\",\n \"| --- | --- | --- | --- |\",\n ];\n for (const outcome of summary.outcomes) {\n lines.push(\n `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n ];\n for (const outcome of summary.outcomes) {\n const evidence = formatPayload(outcome.evidence);\n const suffix = evidence ? ` evidence=${evidence}` : \"\";\n lines.push(\n `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"<p>No observed outcomes recorded for this run.</p>\";\n }\n const rows = summary.outcomes\n .map((outcome: ObservedOutcome) => {\n const esc = (v: string) =>\n v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n })\n .join(\"\");\n return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/outcomes/types.ts","../src/outcomes/validate.ts","../src/outcomes/extract.ts","../src/outcomes/render.ts"],"names":["parseMethod"],"mappings":"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","file":"chunk-3XS5O4JI.mjs","sourcesContent":["export type ObservedOutcomeStatus = \"passed\" | \"failed\" | \"unknown\" | \"skipped\";\n\nexport type ObservedOutcomeMethod =\n | \"dom\"\n | \"accessibility\"\n | \"snapshot\"\n | \"network\"\n | \"storage\"\n | \"filesystem\"\n | \"database\"\n | \"queue\"\n | \"custom\";\n\nexport interface ObservedOutcome {\n outcomeId: string;\n runId: string;\n parentId?: string;\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n}\n\nexport interface ObserveOutcomeOptions {\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt?: number | string;\n}\n\nexport interface ObservedOutcomeSummary {\n total: number;\n passed: number;\n failed: number;\n unknown: number;\n skipped: number;\n outcomes: ObservedOutcome[];\n}\n\nexport const OBSERVED_OUTCOME_STATUSES: readonly ObservedOutcomeStatus[] = [\n \"passed\",\n \"failed\",\n \"unknown\",\n \"skipped\",\n];\n\nexport const OBSERVED_OUTCOME_METHODS: readonly ObservedOutcomeMethod[] = [\n \"dom\",\n \"accessibility\",\n \"snapshot\",\n \"network\",\n \"storage\",\n \"filesystem\",\n \"database\",\n \"queue\",\n \"custom\",\n];\n\nexport const OUTCOME_ATTRIBUTE_STATUS_KEY = \"outcomeStatus\";\nexport const OUTCOME_ATTRIBUTE_EXPECTATION_KEY = \"expectation\";\nexport const OUTCOME_ATTRIBUTE_METHOD_KEY = \"method\";\nexport const OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY = \"observedAt\";\nexport const OUTCOME_LEGACY_EVENT = \"outcome_observed\";\n","import type { TraceSafetyOptions } from \"../trace-event-safety.js\";\nimport { prepareMetadataForDisk } from \"../trace-event-safety.js\";\nimport type { OutcomeObservedEvent } from \"../types.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n OBSERVED_OUTCOME_STATUSES,\n type ObserveOutcomeOptions,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n} from \"./types.js\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeName(name: string): string {\n const trimmed = name.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty name.\");\n }\n return trimmed.slice(0, 100);\n}\n\nfunction normalizeExpectation(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\") {\n throw new Error(\"observeOutcome requires a non-empty expectation.\");\n }\n return trimmed.slice(0, 500);\n}\n\nexport function parseObservedOutcomeStatus(value: string): ObservedOutcomeStatus {\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_STATUSES as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeStatus;\n }\n throw new Error(\n `Unsupported observation status \"${value}\". Use passed, failed, unknown, or skipped.`,\n );\n}\n\nfunction parseMethod(value: string | undefined): ObservedOutcomeMethod | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n const trimmed = value.trim().toLowerCase();\n if ((OBSERVED_OUTCOME_METHODS as readonly string[]).includes(trimmed)) {\n return trimmed as ObservedOutcomeMethod;\n }\n throw new Error(`Unsupported observation method \"${value}\".`);\n}\n\nfunction parseObservedAt(value: number | string | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n return fallback;\n}\n\nexport function normalizeObserveOutcomeInput(\n name: string,\n options: ObserveOutcomeOptions,\n nowMs: number = Date.now(),\n): {\n name: string;\n expectation: string;\n status: ObservedOutcomeStatus;\n method?: ObservedOutcomeMethod;\n actual?: unknown;\n evidence?: unknown;\n observedAt: number;\n} {\n return {\n name: normalizeName(name),\n expectation: normalizeExpectation(options.expectation),\n status: options.status,\n ...(options.method !== undefined ? { method: parseMethod(options.method) } : {}),\n ...(options.actual !== undefined ? { actual: options.actual } : {}),\n ...(options.evidence !== undefined ? { evidence: options.evidence } : {}),\n observedAt: parseObservedAt(options.observedAt, nowMs),\n };\n}\n\nfunction boundPayload(\n value: unknown,\n opts: TraceSafetyOptions,\n): unknown {\n if (value === undefined) return undefined;\n if (!isRecord(value) && !Array.isArray(value)) {\n if (typeof value === \"string\") {\n return value.length > opts.maxMetadataValueLength\n ? `${value.slice(0, opts.maxMetadataValueLength)}…`\n : value;\n }\n return value;\n }\n return prepareMetadataForDisk(\n isRecord(value) ? value : { items: value },\n opts,\n );\n}\n\nexport function prepareOutcomeEventForDisk(\n event: OutcomeObservedEvent,\n opts: TraceSafetyOptions,\n): OutcomeObservedEvent {\n const actual = boundPayload(event.actual, opts);\n const evidence = boundPayload(event.evidence, opts);\n const next: OutcomeObservedEvent = {\n ...event,\n ...(actual !== undefined ? { actual } : {}),\n ...(evidence !== undefined ? { evidence } : {}),\n };\n if (\"actual\" in event && actual === undefined) {\n const { actual: _a, ...rest } = next;\n return rest;\n }\n if (\"evidence\" in event && evidence === undefined) {\n const { evidence: _e, ...rest } = next;\n return rest;\n }\n return next;\n}\n","import type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport {\n OUTCOME_ATTRIBUTE_EXPECTATION_KEY,\n OUTCOME_ATTRIBUTE_METHOD_KEY,\n OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY,\n OUTCOME_ATTRIBUTE_STATUS_KEY,\n OUTCOME_LEGACY_EVENT,\n type ObservedOutcome,\n type ObservedOutcomeMethod,\n type ObservedOutcomeStatus,\n type ObservedOutcomeSummary,\n} from \"./types.js\";\nimport { parseObservedOutcomeStatus } from \"./validate.js\";\n\nfunction isOutcomeStatus(value: unknown): value is ObservedOutcomeStatus {\n return (\n value === \"passed\" ||\n value === \"failed\" ||\n value === \"unknown\" ||\n value === \"skipped\"\n );\n}\n\nfunction parseMethod(value: unknown): ObservedOutcomeMethod | undefined {\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n return value as ObservedOutcomeMethod;\n}\n\nfunction fromOutcomeObservedEvent(event: Extract<TraceEvent, { event: \"outcome_observed\" }>): ObservedOutcome {\n return {\n outcomeId: event.outcomeId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation: event.expectation,\n status: event.status,\n ...(event.method !== undefined ? { method: event.method } : {}),\n ...(event.actual !== undefined ? { actual: event.actual } : {}),\n ...(event.evidence !== undefined ? { evidence: event.evidence } : {}),\n observedAt: event.observedAt,\n };\n}\n\nfunction fromPersistedOutcome(event: PersistedInspectEvent): ObservedOutcome | undefined {\n if (event.kind !== \"OUTCOME\") return undefined;\n const attrs = event.attributes ?? {};\n const statusRaw = attrs[OUTCOME_ATTRIBUTE_STATUS_KEY];\n if (!isOutcomeStatus(statusRaw)) return undefined;\n const expectation =\n typeof attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY] === \"string\"\n ? attrs[OUTCOME_ATTRIBUTE_EXPECTATION_KEY]\n : event.name;\n const observedAtRaw = attrs[OUTCOME_ATTRIBUTE_OBSERVED_AT_KEY];\n const observedAt =\n typeof observedAtRaw === \"string\"\n ? Date.parse(observedAtRaw)\n : typeof observedAtRaw === \"number\" && Number.isFinite(observedAtRaw)\n ? observedAtRaw\n : Date.parse(event.timestamp);\n return {\n outcomeId: event.eventId,\n runId: event.runId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n name: event.name,\n expectation,\n status: statusRaw,\n ...(parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) !== undefined\n ? { method: parseMethod(attrs[OUTCOME_ATTRIBUTE_METHOD_KEY]) }\n : {}),\n ...(event.outputSummary !== undefined ? { actual: event.outputSummary } : {}),\n ...(attrs.evidence !== undefined ? { evidence: attrs.evidence } : {}),\n observedAt: Number.isFinite(observedAt) ? observedAt : Date.parse(event.timestamp),\n };\n}\n\nexport function extractOutcomesFromTraceEvents(events: readonly TraceEvent[]): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n if (event.event === OUTCOME_LEGACY_EVENT) {\n out.push(fromOutcomeObservedEvent(event as Extract<TraceEvent, { event: \"outcome_observed\" }>));\n }\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function extractOutcomesFromPersistedEvents(\n events: readonly PersistedInspectEvent[],\n): ObservedOutcome[] {\n const out: ObservedOutcome[] = [];\n for (const event of events) {\n const outcome = fromPersistedOutcome(event);\n if (outcome) out.push(outcome);\n }\n return out.sort((a, b) => a.observedAt - b.observedAt || a.name.localeCompare(b.name));\n}\n\nexport function summarizeObservedOutcomes(outcomes: readonly ObservedOutcome[]): ObservedOutcomeSummary {\n const summary: ObservedOutcomeSummary = {\n total: outcomes.length,\n passed: 0,\n failed: 0,\n unknown: 0,\n skipped: 0,\n outcomes: [...outcomes],\n };\n for (const outcome of outcomes) {\n summary[outcome.status] += 1;\n }\n return summary;\n}\n\nexport function outcomesMatchingStatus(\n outcomes: readonly ObservedOutcome[],\n statuses: readonly ObservedOutcomeStatus[],\n): ObservedOutcome[] {\n const set = new Set(statuses);\n return outcomes.filter((outcome) => set.has(outcome.status));\n}\n\nexport function parseObservationFilter(value: string | undefined): ObservedOutcomeStatus | undefined {\n if (value === undefined || value.trim() === \"\") return undefined;\n return parseObservedOutcomeStatus(value);\n}\n","import type { ObservedOutcome, ObservedOutcomeSummary } from \"./types.js\";\n\nfunction formatPayload(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function renderObservedOutcomesMarkdown(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n \"\",\n \"| Name | Status | Expectation | Method |\",\n \"| --- | --- | --- | --- |\",\n ];\n for (const outcome of summary.outcomes) {\n lines.push(\n `| ${outcome.name} | ${outcome.status} | ${outcome.expectation.replace(/\\|/g, \"\\\\|\")} | ${outcome.method ?? \"-\"} |`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesText(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"No observed outcomes recorded for this run.\";\n }\n const lines = [\n `Observed outcomes: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})`,\n ];\n for (const outcome of summary.outcomes) {\n const evidence = formatPayload(outcome.evidence);\n const suffix = evidence ? ` evidence=${evidence}` : \"\";\n lines.push(\n `- ${outcome.name} [${outcome.status}] ${outcome.expectation}${suffix}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderObservedOutcomesHtml(summary: ObservedOutcomeSummary): string {\n if (summary.total === 0) {\n return \"<p>No observed outcomes recorded for this run.</p>\";\n }\n const rows = summary.outcomes\n .map((outcome: ObservedOutcome) => {\n const esc = (v: string) =>\n v.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n return `<tr><td>${esc(outcome.name)}</td><td>${esc(outcome.status)}</td><td>${esc(outcome.expectation)}</td><td>${esc(outcome.method ?? \"-\")}</td></tr>`;\n })\n .join(\"\");\n return `<p>Total: ${summary.total} (passed ${summary.passed}, failed ${summary.failed}, unknown ${summary.unknown}, skipped ${summary.skipped})</p><table><thead><tr><th>Name</th><th>Status</th><th>Expectation</th><th>Method</th></tr></thead><tbody>${rows}</tbody></table>`;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { normalizeObserveOutcomeInput } from './chunk-
|
|
1
|
+
import { normalizeObserveOutcomeInput } from './chunk-3XS5O4JI.mjs';
|
|
2
2
|
import { source_default } from './chunk-BT7CATSD.mjs';
|
|
3
|
-
import { resolveTraceSafetyOptions, preparePersistedInspectEventForWrite, initializeTraceFile, writeTraceEvent, prepareTraceEventForDisk } from './chunk-
|
|
3
|
+
import { resolveTraceSafetyOptions, preparePersistedInspectEventForWrite, initializeTraceFile, writeTraceEvent, prepareTraceEventForDisk } from './chunk-U25RHRSU.mjs';
|
|
4
4
|
import { extractCorrelationMetadata, buildRunStartedMetadata } from './chunk-S4YWKV4G.mjs';
|
|
5
5
|
import { truncateName, formatDuration, getDefaultTraceDir, createRunId, formatError, getTraceFilePath, createStepId, warn } from './chunk-WRE4CNPF.mjs';
|
|
6
6
|
import { AsyncLocalStorage } from 'async_hooks';
|
|
@@ -941,5 +941,5 @@ async function maybeInspectRun(name, fn, options) {
|
|
|
941
941
|
}
|
|
942
942
|
|
|
943
943
|
export { MAX_TERMINAL_DEPTH, MAX_TERMINAL_NAME_LENGTH, TERMINAL_INDENT, TraceDirectory, createInspector, createInspectorRuntime, formatTerminalName, getCurrentContext, getCurrentCorrelationMetadata, getCurrentDepth, getCurrentRunId, getCurrentRunName, getCurrentStepId, getIndent, getParentStepId, getTraceDirFromContext, getTraceSafetyFromContext, hasActiveContext, inspectRun, isAgentInspectEnabled, isSilentContext, maybeInspectRun, printError, printFailedAt, printRunComplete, printRunStart, printStepComplete, printStepStart, renderErrorLine, renderRunSummary, renderStepLine, resolveTraceDir, runWithContext, runWithStepContext };
|
|
944
|
-
//# sourceMappingURL=chunk-
|
|
945
|
-
//# sourceMappingURL=chunk-
|
|
944
|
+
//# sourceMappingURL=chunk-5YFJJFXU.mjs.map
|
|
945
|
+
//# sourceMappingURL=chunk-5YFJJFXU.mjs.map
|