agent-inspect 6.31.16 → 6.31.18
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/SECURITY.md +1 -0
- package/docs/COMPARE.md +11 -0
- package/package.json +2 -2
- package/packages/cli/dist/{chunk-ZAYVAHIH.mjs → chunk-AHARYDFO.mjs} +62 -28
- package/packages/cli/dist/chunk-AHARYDFO.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +122 -32
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +64 -9
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-KP4UIFK5.mjs → src-YNZZ2KYR.mjs} +3 -3
- package/packages/cli/dist/{src-KP4UIFK5.mjs.map → src-YNZZ2KYR.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +1 -1
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.mjs +9 -9
- package/packages/core/dist/checks.cjs +59 -25
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.mjs +3 -3
- package/packages/core/dist/{chunk-SSG3ICI4.mjs → chunk-6C244CAV.mjs} +4 -4
- package/packages/core/dist/{chunk-SSG3ICI4.mjs.map → chunk-6C244CAV.mjs.map} +1 -1
- package/packages/core/dist/{chunk-N5PZAI6Q.mjs → chunk-77UZIMMD.mjs} +3 -3
- package/packages/core/dist/{chunk-N5PZAI6Q.mjs.map → chunk-77UZIMMD.mjs.map} +1 -1
- package/packages/core/dist/{chunk-DK3OW6UI.mjs → chunk-EOXUEQB6.mjs} +3 -3
- package/packages/core/dist/chunk-EOXUEQB6.mjs.map +1 -0
- package/packages/core/dist/{chunk-CCYKNAOD.mjs → chunk-FRBBZUEP.mjs} +62 -28
- package/packages/core/dist/chunk-FRBBZUEP.mjs.map +1 -0
- package/packages/core/dist/{chunk-M3RJD3BP.mjs → chunk-NX25C7JZ.mjs} +3 -3
- package/packages/core/dist/{chunk-M3RJD3BP.mjs.map → chunk-NX25C7JZ.mjs.map} +1 -1
- package/packages/core/dist/exporters.cjs +55 -3
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.mjs +57 -5
- package/packages/core/dist/exporters.mjs.map +1 -1
- package/packages/core/dist/index.cjs +1 -1
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.mjs +4 -4
- package/packages/core/dist/writers.cjs +1 -1
- package/packages/core/dist/writers.cjs.map +1 -1
- package/packages/core/dist/writers.mjs +1 -1
- package/packages/cli/dist/chunk-ZAYVAHIH.mjs.map +0 -1
- package/packages/core/dist/chunk-CCYKNAOD.mjs.map +0 -1
- package/packages/core/dist/chunk-DK3OW6UI.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { ATTRIBUTION_CONFIDENCES, createSafetyRawContentRule, createSafetyRedactionRule, createSafetySecretPatternRule, createSafetyOversizedAttributeRule, resolveTraceDir, parseDuration, buildSessionIndex, resolveBundleRunIds, getTraceFilePath, openTrace, sha256Hex, collectTraceSchemaVersions, aggregateBundleSafeStatus, bundleFailsOnSafety, bundleRunAssetRelativePath, buildPlaceholderArtifact, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME, buildBundleMetadata, buildBundleSummaryMarkdown, buildEvidenceHtmlShell, buildEvidenceProvenanceViewHtml, EVIDENCE_FORMAT_VERSION, inferEvidenceFileRole, buildEvidenceSafetyViewHtml, buildEvidenceDiffViewHtml, buildEvidenceCircuitViewHtml, buildEvidenceOutcomesViewHtml, buildEvidenceContractsViewHtml, buildEvidenceToolsLlmViewHtml, buildEvidenceCausalFailureViewHtml, buildEvidenceTimelineViewHtml, buildEvidenceTreeViewHtml, buildEvidenceManifest, serializeEvidenceManifest, buildZipArchive, assertBundlePathContained, enrichSessionRunRecord, normalizeBundleOutputPath, sanitizeBundleRunId, defaultBundleOutputPath, runTraceChecks, assertEvidenceRelativePath, TraceDirectory, loadTraceMetadataList, loadSessionRunRecords, TraceReadError, resolveRedactionProfile, applyProfileMetadataCaps, Redactor, flattenTree, escapeHtml, safeString, compactAttributes, stableJson, escapeMarkdown, DEFAULT_REDACT_KEYS, truncateStringForProfile, stringContainsHighConfidenceCredential, isCredentialSensitiveKey, extractMetadata, filterTraces, truncateName, buildRunSummary, formatDuration, formatTimestamp, renderErrorLine, isAgentInspectTrace, persistedInspectEventsToRunTrees, defineTraceContract, filterMetasBySessionScope, evaluateTraceContract, aggregateSessionCheckResults, createBaselineRegressionRule, summarizeSemanticParity, buildEvidenceCiPackage, verifyEvidenceDirectory, diffTraceEvents, renderRunDiff, buildRunTimeline, renderTimeline, buildTraceStats, renderTraceStats, parseDurationFilter, searchTraces, formatStepLabel, buildActivitySummary, renderActivitySummaryHuman, buildRunWhatSummary, renderRunWhat, buildLocalExplanation, resolveSuiteTemplate, defaultSuiteConfigTemplate, loadSuiteConfig, validateSuiteConfig, runSuite, renderSuiteReport, analyzeCohort, renderCohortReport, gateHasThresholds, runGate, renderGateReport, persistedInspectEventsToTraceEvents, renderStepLine, getIndent, TreeBuilder, validateEvent, traceEventToPersistedInspectEvent, isPersistedInspectEvent, createRunStatusRule, createStructureOrphanRule, createStructureCycleRule, createRunDurationRule, createMaxStepDurationRule, createRequireCompletedRule, createStallDetectionRule, createObservedOutcomeRule, createRunDepthRule, createToolUsageRule, createLlmUsageRule, createStructureRelationshipRule, createStructureParallelWidthRule, projectLogicalEvents, summarizeObservedOutcomes, extractOutcomesFromTraceEvents, renderObservedOutcomesMarkdown, renderObservedOutcomesHtml, DEFAULT_SUITE_ARTIFACTS_DIR, parseCohortMetricList, COHORT_METRIC_IDS, parseGateList, nanoid, isAttributionConfidence, zeroKinds, diffRuns, manualTraceEventsToComparableRun } from './chunk-
|
|
2
|
+
import { ATTRIBUTION_CONFIDENCES, createSafetyRawContentRule, createSafetyRedactionRule, createSafetySecretPatternRule, createSafetyOversizedAttributeRule, resolveTraceDir, parseDuration, buildSessionIndex, resolveBundleRunIds, getTraceFilePath, openTrace, sha256Hex, collectTraceSchemaVersions, aggregateBundleSafeStatus, bundleFailsOnSafety, bundleRunAssetRelativePath, buildPlaceholderArtifact, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME, buildBundleMetadata, buildBundleSummaryMarkdown, buildEvidenceHtmlShell, buildEvidenceProvenanceViewHtml, EVIDENCE_FORMAT_VERSION, inferEvidenceFileRole, buildEvidenceSafetyViewHtml, buildEvidenceDiffViewHtml, buildEvidenceCircuitViewHtml, buildEvidenceOutcomesViewHtml, buildEvidenceContractsViewHtml, buildEvidenceToolsLlmViewHtml, buildEvidenceCausalFailureViewHtml, buildEvidenceTimelineViewHtml, buildEvidenceTreeViewHtml, buildEvidenceManifest, serializeEvidenceManifest, buildZipArchive, assertBundlePathContained, enrichSessionRunRecord, normalizeBundleOutputPath, sanitizeBundleRunId, defaultBundleOutputPath, runTraceChecks, assertEvidenceRelativePath, TraceDirectory, loadTraceMetadataList, loadSessionRunRecords, TraceReadError, resolveRedactionProfile, applyProfileMetadataCaps, Redactor, flattenTree, escapeHtml, safeString, compactAttributes, stableJson, escapeMarkdown, DEFAULT_REDACT_KEYS, truncateStringForProfile, stringContainsHighConfidenceCredential, isCredentialSensitiveKey, extractMetadata, filterTraces, truncateName, buildRunSummary, formatDuration, formatTimestamp, renderErrorLine, isAgentInspectTrace, persistedInspectEventsToRunTrees, defineTraceContract, filterMetasBySessionScope, evaluateTraceContract, aggregateSessionCheckResults, createBaselineRegressionRule, summarizeSemanticParity, buildEvidenceCiPackage, verifyEvidenceDirectory, diffTraceEvents, renderRunDiff, buildRunTimeline, renderTimeline, buildTraceStats, renderTraceStats, parseDurationFilter, searchTraces, formatStepLabel, buildActivitySummary, renderActivitySummaryHuman, buildRunWhatSummary, renderRunWhat, buildLocalExplanation, resolveSuiteTemplate, defaultSuiteConfigTemplate, loadSuiteConfig, validateSuiteConfig, runSuite, renderSuiteReport, analyzeCohort, renderCohortReport, gateHasThresholds, runGate, renderGateReport, persistedInspectEventsToTraceEvents, renderStepLine, getIndent, TreeBuilder, validateEvent, traceEventToPersistedInspectEvent, isPersistedInspectEvent, createRunStatusRule, createStructureOrphanRule, createStructureCycleRule, createRunDurationRule, createMaxStepDurationRule, createRequireCompletedRule, createStallDetectionRule, createObservedOutcomeRule, createRunDepthRule, createToolUsageRule, createLlmUsageRule, createStructureRelationshipRule, createStructureParallelWidthRule, projectLogicalEvents, summarizeObservedOutcomes, extractOutcomesFromTraceEvents, renderObservedOutcomesMarkdown, renderObservedOutcomesHtml, DEFAULT_SUITE_ARTIFACTS_DIR, parseCohortMetricList, COHORT_METRIC_IDS, parseGateList, nanoid, isAttributionConfidence, zeroKinds, diffRuns, manualTraceEventsToComparableRun } from './chunk-AHARYDFO.mjs';
|
|
3
3
|
import { realpathSync, constants as constants$1, existsSync, readFileSync } from 'fs';
|
|
4
4
|
import path19 from 'path';
|
|
5
5
|
import { fileURLToPath, pathToFileURL } from 'url';
|
|
@@ -14,7 +14,7 @@ import { createServer } from 'http';
|
|
|
14
14
|
import { createRequire } from 'module';
|
|
15
15
|
|
|
16
16
|
// package.json
|
|
17
|
-
var version = "6.31.
|
|
17
|
+
var version = "6.31.18";
|
|
18
18
|
|
|
19
19
|
// packages/cli/src/trace-dir-scale.ts
|
|
20
20
|
var TRACE_COUNT_WARN = 1e3;
|
|
@@ -2609,6 +2609,51 @@ function genAiOperationName(kind) {
|
|
|
2609
2609
|
return void 0;
|
|
2610
2610
|
}
|
|
2611
2611
|
}
|
|
2612
|
+
var STRUCTURAL_IDENTITY_KEYS = [
|
|
2613
|
+
"operationId",
|
|
2614
|
+
"attemptId",
|
|
2615
|
+
"retryOf",
|
|
2616
|
+
"attemptNumber",
|
|
2617
|
+
"attempt"
|
|
2618
|
+
];
|
|
2619
|
+
function pickBoundedIdentityString(bag, key, maxLen) {
|
|
2620
|
+
if (!bag || typeof bag !== "object") return void 0;
|
|
2621
|
+
const direct = bag[key];
|
|
2622
|
+
if (typeof direct === "string" && direct.trim() !== "") {
|
|
2623
|
+
return direct.trim().slice(0, maxLen);
|
|
2624
|
+
}
|
|
2625
|
+
const nested = bag.metadata && typeof bag.metadata === "object" ? bag.metadata[key] : void 0;
|
|
2626
|
+
if (typeof nested === "string" && nested.trim() !== "") {
|
|
2627
|
+
return nested.trim().slice(0, maxLen);
|
|
2628
|
+
}
|
|
2629
|
+
return void 0;
|
|
2630
|
+
}
|
|
2631
|
+
function pickBoundedIdentityNumber(bag, key) {
|
|
2632
|
+
if (!bag || typeof bag !== "object") return void 0;
|
|
2633
|
+
const direct = bag[key];
|
|
2634
|
+
if (typeof direct === "number" && Number.isFinite(direct)) return direct;
|
|
2635
|
+
const nested = bag.metadata && typeof bag.metadata === "object" ? bag.metadata[key] : void 0;
|
|
2636
|
+
if (typeof nested === "number" && Number.isFinite(nested)) return nested;
|
|
2637
|
+
return void 0;
|
|
2638
|
+
}
|
|
2639
|
+
function appendStructuralIdentityAttrs(attrs, meta, maxLen) {
|
|
2640
|
+
const operationId = pickBoundedIdentityString(meta, "operationId", maxLen);
|
|
2641
|
+
if (operationId !== void 0) {
|
|
2642
|
+
attrs.push(stringAttr("agent_inspect.operation_id", operationId));
|
|
2643
|
+
}
|
|
2644
|
+
const attemptId = pickBoundedIdentityString(meta, "attemptId", maxLen);
|
|
2645
|
+
if (attemptId !== void 0) {
|
|
2646
|
+
attrs.push(stringAttr("agent_inspect.attempt_id", attemptId));
|
|
2647
|
+
}
|
|
2648
|
+
const retryOf = pickBoundedIdentityString(meta, "retryOf", maxLen);
|
|
2649
|
+
if (retryOf !== void 0) {
|
|
2650
|
+
attrs.push(stringAttr("agent_inspect.retry_of", retryOf));
|
|
2651
|
+
}
|
|
2652
|
+
const attemptNumber2 = pickBoundedIdentityNumber(meta, "attemptNumber") ?? pickBoundedIdentityNumber(meta, "attempt");
|
|
2653
|
+
if (attemptNumber2 !== void 0) {
|
|
2654
|
+
attrs.push(intAttr("agent_inspect.attempt_number", attemptNumber2));
|
|
2655
|
+
}
|
|
2656
|
+
}
|
|
2612
2657
|
function resolveSpanTimes(ev) {
|
|
2613
2658
|
const startedAtMs = typeof ev.attributes?.startedAtMs === "number" && Number.isFinite(ev.attributes.startedAtMs) ? ev.attributes.startedAtMs : void 0;
|
|
2614
2659
|
const endedAtMs = typeof ev.attributes?.endedAtMs === "number" && Number.isFinite(ev.attributes.endedAtMs) ? ev.attributes.endedAtMs : void 0;
|
|
@@ -2629,7 +2674,8 @@ function exportOtlpJson(tree, options) {
|
|
|
2629
2674
|
const warnings = [
|
|
2630
2675
|
"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.",
|
|
2631
2676
|
"Not OTLP gRPC/protobuf \u2014 JSON mapping only. Generated locally; no network upload.",
|
|
2632
|
-
"Status and span kind use OTLP numeric enums (StatusCode 0/1/2, SpanKind INTERNAL=1)."
|
|
2677
|
+
"Status and span kind use OTLP numeric enums (StatusCode 0/1/2, SpanKind INTERNAL=1).",
|
|
2678
|
+
"When present on source events, operationId/attemptId/retryOf/attemptNumber are emitted as bounded agent_inspect.* identity attributes (not a broad attribute dump)."
|
|
2633
2679
|
];
|
|
2634
2680
|
const traceId = hexFrom2(`trace:${tree.runId}`, 16);
|
|
2635
2681
|
const includeAttributes = options?.includeAttributes ?? false;
|
|
@@ -2677,6 +2723,11 @@ function exportOtlpJson(tree, options) {
|
|
|
2677
2723
|
if (typeof inp === "number") attrs.push(intAttr("gen_ai.usage.input_tokens", inp));
|
|
2678
2724
|
if (typeof outp === "number") attrs.push(intAttr("gen_ai.usage.output_tokens", outp));
|
|
2679
2725
|
}
|
|
2726
|
+
appendStructuralIdentityAttrs(
|
|
2727
|
+
attrs,
|
|
2728
|
+
meta && typeof meta === "object" ? meta : void 0,
|
|
2729
|
+
maxLen
|
|
2730
|
+
);
|
|
2680
2731
|
if (includeAttributes && meta && typeof meta === "object") {
|
|
2681
2732
|
const skipKeys = /* @__PURE__ */ new Set([
|
|
2682
2733
|
"tokens",
|
|
@@ -2685,7 +2736,8 @@ function exportOtlpJson(tree, options) {
|
|
|
2685
2736
|
"responseModel",
|
|
2686
2737
|
"responseModelId",
|
|
2687
2738
|
"provider",
|
|
2688
|
-
"originalSourceType"
|
|
2739
|
+
"originalSourceType",
|
|
2740
|
+
...STRUCTURAL_IDENTITY_KEYS
|
|
2689
2741
|
]);
|
|
2690
2742
|
for (const [k, v] of Object.entries(meta)) {
|
|
2691
2743
|
if (skipKeys.has(k)) continue;
|
|
@@ -3988,7 +4040,7 @@ async function newestTraceMtimeMs(traceDir) {
|
|
|
3988
4040
|
}
|
|
3989
4041
|
async function loadSessionRuns(traceDir) {
|
|
3990
4042
|
try {
|
|
3991
|
-
const mod = await import('./src-
|
|
4043
|
+
const mod = await import('./src-YNZZ2KYR.mjs');
|
|
3992
4044
|
const dbPath = mod.resolveIndexDbPath(traceDir);
|
|
3993
4045
|
const status = mod.indexStatus(dbPath);
|
|
3994
4046
|
if (!status.healthy) {
|
|
@@ -4511,7 +4563,7 @@ function isCredentialSensitiveKey2(key, sensitiveKeys) {
|
|
|
4511
4563
|
}
|
|
4512
4564
|
|
|
4513
4565
|
// packages/redact/src/key-value-secret.ts
|
|
4514
|
-
var KEY_VALUE_SECRET_PATTERN_SOURCE = String.raw`\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED
|
|
4566
|
+
var KEY_VALUE_SECRET_PATTERN_SOURCE = String.raw`\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED|HASH:(?:[0-9a-f]{8}|unknown))\](?![^\s"'\\&#?]))([^\s"'\\]{8,})`;
|
|
4515
4567
|
var KEY_VALUE_SECRET_PATTERN = new RegExp(
|
|
4516
4568
|
KEY_VALUE_SECRET_PATTERN_SOURCE,
|
|
4517
4569
|
"i"
|
|
@@ -4968,8 +5020,8 @@ function isCompleteRedactionMarker(value, replacement = "[REDACTED]") {
|
|
|
4968
5020
|
const trimmed = value.trim();
|
|
4969
5021
|
if (trimmed.length === 0) return false;
|
|
4970
5022
|
if (trimmed === replacement) return true;
|
|
4971
|
-
if (
|
|
4972
|
-
if (/^\[
|
|
5023
|
+
if (trimmed === "[HASH:unknown]") return true;
|
|
5024
|
+
if (/^\[HASH:[0-9a-f]{8}\]$/.test(trimmed)) return true;
|
|
4973
5025
|
return false;
|
|
4974
5026
|
}
|
|
4975
5027
|
function applyRule(rule, value, replacement) {
|
|
@@ -5202,6 +5254,9 @@ function isRecord7(value) {
|
|
|
5202
5254
|
}
|
|
5203
5255
|
function rejectRemotePolicyPath(policyPath) {
|
|
5204
5256
|
const trimmed = policyPath.trim();
|
|
5257
|
+
if (/^[a-z]:[\\/]/i.test(trimmed)) {
|
|
5258
|
+
return;
|
|
5259
|
+
}
|
|
5205
5260
|
if (/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) {
|
|
5206
5261
|
throw new Error(
|
|
5207
5262
|
`--policy must be a local JSON file path (got a URL-like value). Remote policy fetch is not supported.`
|
|
@@ -13967,7 +14022,7 @@ function isModuleNotFound4(e) {
|
|
|
13967
14022
|
}
|
|
13968
14023
|
async function loadIndexSqlite() {
|
|
13969
14024
|
try {
|
|
13970
|
-
return await import('./src-
|
|
14025
|
+
return await import('./src-YNZZ2KYR.mjs');
|
|
13971
14026
|
} catch (e) {
|
|
13972
14027
|
if (isModuleNotFound4(e)) {
|
|
13973
14028
|
console.error(
|