agent-inspect 6.31.12 → 6.31.13
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 +6 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-GBAGZVUX.mjs → chunk-ZAYVAHIH.mjs} +82 -13
- package/packages/cli/dist/chunk-ZAYVAHIH.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +286 -44
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +209 -36
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-F44EQY4S.mjs → src-KP4UIFK5.mjs} +3 -3
- package/packages/cli/dist/{src-F44EQY4S.mjs.map → src-KP4UIFK5.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +80 -11
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.mjs +27 -7
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/{chunk-OAUNS5CS.mjs → chunk-JE3TUFAQ.mjs} +3 -3
- package/packages/core/dist/{chunk-OAUNS5CS.mjs.map → chunk-JE3TUFAQ.mjs.map} +1 -1
- package/packages/core/dist/{chunk-QOC3PJO3.mjs → chunk-NJUSSJX3.mjs} +3 -3
- package/packages/core/dist/{chunk-QOC3PJO3.mjs.map → chunk-NJUSSJX3.mjs.map} +1 -1
- package/packages/core/dist/{chunk-AK5EN4U2.mjs → chunk-YU6XT5A2.mjs} +58 -9
- package/packages/core/dist/chunk-YU6XT5A2.mjs.map +1 -0
- package/packages/core/dist/exporters.cjs +205 -32
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.mjs +205 -32
- package/packages/core/dist/exporters.mjs.map +1 -1
- package/packages/core/dist/logs.cjs +56 -7
- package/packages/core/dist/logs.cjs.map +1 -1
- package/packages/core/dist/logs.mjs +2 -2
- package/packages/core/dist/persisted.cjs +56 -7
- package/packages/core/dist/persisted.cjs.map +1 -1
- package/packages/core/dist/persisted.mjs +3 -3
- package/packages/core/dist/readers.cjs +56 -7
- package/packages/core/dist/readers.cjs.map +1 -1
- package/packages/core/dist/readers.mjs +3 -3
- package/packages/cli/dist/chunk-GBAGZVUX.mjs.map +0 -1
- package/packages/core/dist/chunk-AK5EN4U2.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-ZAYVAHIH.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.13";
|
|
18
18
|
|
|
19
19
|
// packages/cli/src/trace-dir-scale.ts
|
|
20
20
|
var TRACE_COUNT_WARN = 1e3;
|
|
@@ -2752,7 +2752,14 @@ function exportOtlpJson(tree, options) {
|
|
|
2752
2752
|
|
|
2753
2753
|
// packages/core/src/exporters/validation.ts
|
|
2754
2754
|
var EXPERIMENTAL = "Experimental compatibility export \u2014 verify against your target tooling before relying on it.";
|
|
2755
|
+
var UINT64_MAX = 18446744073709551615n;
|
|
2756
|
+
var INT64_MIN = -9223372036854775808n;
|
|
2757
|
+
var INT64_MAX = 9223372036854775807n;
|
|
2758
|
+
var MAX_ANYVALUE_DEPTH = 8;
|
|
2759
|
+
var MAX_ANYVALUE_ELEMENTS = 256;
|
|
2760
|
+
var MAX_DIAGNOSTIC_ERRORS = 64;
|
|
2755
2761
|
function pushPath(errors, path30, message) {
|
|
2762
|
+
if (errors.length >= MAX_DIAGNOSTIC_ERRORS) return;
|
|
2756
2763
|
errors.push(`${path30}: ${message}`);
|
|
2757
2764
|
}
|
|
2758
2765
|
function isRecord5(value) {
|
|
@@ -2761,7 +2768,59 @@ function isRecord5(value) {
|
|
|
2761
2768
|
function isHexId(value, byteLen) {
|
|
2762
2769
|
return typeof value === "string" && new RegExp(`^[0-9a-fA-F]{${byteLen * 2}}$`).test(value);
|
|
2763
2770
|
}
|
|
2764
|
-
function
|
|
2771
|
+
function parseDecimalIntegerString(value) {
|
|
2772
|
+
if (typeof value !== "string" || !/^-?\d+$/.test(value)) {
|
|
2773
|
+
return { ok: false, reason: "must be a decimal integer string" };
|
|
2774
|
+
}
|
|
2775
|
+
try {
|
|
2776
|
+
return { ok: true, n: BigInt(value) };
|
|
2777
|
+
} catch {
|
|
2778
|
+
return { ok: false, reason: "out of integer range" };
|
|
2779
|
+
}
|
|
2780
|
+
}
|
|
2781
|
+
function validateUint64String(errors, path30, value, label) {
|
|
2782
|
+
const parsed = parseDecimalIntegerString(value);
|
|
2783
|
+
if (!parsed.ok) {
|
|
2784
|
+
pushPath(errors, path30, `${label} ${parsed.reason}`);
|
|
2785
|
+
return;
|
|
2786
|
+
}
|
|
2787
|
+
if (parsed.n < 0n || parsed.n > UINT64_MAX) {
|
|
2788
|
+
pushPath(
|
|
2789
|
+
errors,
|
|
2790
|
+
path30,
|
|
2791
|
+
`${label} must be an unsigned 64-bit integer (0..${UINT64_MAX.toString()})`
|
|
2792
|
+
);
|
|
2793
|
+
}
|
|
2794
|
+
}
|
|
2795
|
+
function validateInt64String(errors, path30, value) {
|
|
2796
|
+
const parsed = parseDecimalIntegerString(value);
|
|
2797
|
+
if (!parsed.ok) {
|
|
2798
|
+
pushPath(errors, path30, parsed.reason);
|
|
2799
|
+
return;
|
|
2800
|
+
}
|
|
2801
|
+
if (parsed.n < INT64_MIN || parsed.n > INT64_MAX) {
|
|
2802
|
+
pushPath(
|
|
2803
|
+
errors,
|
|
2804
|
+
path30,
|
|
2805
|
+
`must be a signed 64-bit integer (${INT64_MIN.toString()}..${INT64_MAX.toString()})`
|
|
2806
|
+
);
|
|
2807
|
+
}
|
|
2808
|
+
}
|
|
2809
|
+
function validateAnyValue(errors, path30, value, depth = 0, counters = { elements: 0 }) {
|
|
2810
|
+
if (errors.length >= MAX_DIAGNOSTIC_ERRORS) return;
|
|
2811
|
+
if (depth > MAX_ANYVALUE_DEPTH) {
|
|
2812
|
+
pushPath(errors, path30, `AnyValue nesting exceeds depth ${MAX_ANYVALUE_DEPTH}`);
|
|
2813
|
+
return;
|
|
2814
|
+
}
|
|
2815
|
+
counters.elements += 1;
|
|
2816
|
+
if (counters.elements > MAX_ANYVALUE_ELEMENTS) {
|
|
2817
|
+
pushPath(
|
|
2818
|
+
errors,
|
|
2819
|
+
path30,
|
|
2820
|
+
`AnyValue element count exceeds ${MAX_ANYVALUE_ELEMENTS}`
|
|
2821
|
+
);
|
|
2822
|
+
return;
|
|
2823
|
+
}
|
|
2765
2824
|
if (!isRecord5(value)) {
|
|
2766
2825
|
pushPath(errors, path30, "must be an AnyValue object");
|
|
2767
2826
|
return;
|
|
@@ -2781,13 +2840,99 @@ function validateAnyValue(errors, path30, value) {
|
|
|
2781
2840
|
path30,
|
|
2782
2841
|
`AnyValue must set exactly one variant (found ${variants.length}: ${variants.join(",")})`
|
|
2783
2842
|
);
|
|
2843
|
+
return;
|
|
2784
2844
|
}
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2845
|
+
const arm = variants[0];
|
|
2846
|
+
switch (arm) {
|
|
2847
|
+
case "stringValue":
|
|
2848
|
+
if (typeof value.stringValue !== "string") {
|
|
2849
|
+
pushPath(errors, `${path30}.stringValue`, "must be a string");
|
|
2850
|
+
}
|
|
2851
|
+
break;
|
|
2852
|
+
case "boolValue":
|
|
2853
|
+
if (typeof value.boolValue !== "boolean") {
|
|
2854
|
+
pushPath(errors, `${path30}.boolValue`, "must be a boolean");
|
|
2855
|
+
}
|
|
2856
|
+
break;
|
|
2857
|
+
case "intValue":
|
|
2858
|
+
validateInt64String(errors, `${path30}.intValue`, value.intValue);
|
|
2859
|
+
break;
|
|
2860
|
+
case "doubleValue":
|
|
2861
|
+
if (typeof value.doubleValue !== "number" || !Number.isFinite(value.doubleValue)) {
|
|
2862
|
+
pushPath(errors, `${path30}.doubleValue`, "must be a finite number");
|
|
2863
|
+
}
|
|
2864
|
+
break;
|
|
2865
|
+
case "bytesValue":
|
|
2866
|
+
if (typeof value.bytesValue !== "string") {
|
|
2867
|
+
pushPath(errors, `${path30}.bytesValue`, "must be a base64 string");
|
|
2868
|
+
}
|
|
2869
|
+
break;
|
|
2870
|
+
case "arrayValue": {
|
|
2871
|
+
if (!isRecord5(value.arrayValue)) {
|
|
2872
|
+
pushPath(errors, `${path30}.arrayValue`, "must be an object");
|
|
2873
|
+
break;
|
|
2874
|
+
}
|
|
2875
|
+
const values = value.arrayValue.values;
|
|
2876
|
+
if (values === void 0) break;
|
|
2877
|
+
if (!Array.isArray(values)) {
|
|
2878
|
+
pushPath(errors, `${path30}.arrayValue.values`, "must be an array");
|
|
2879
|
+
break;
|
|
2880
|
+
}
|
|
2881
|
+
values.forEach((item, i) => {
|
|
2882
|
+
validateAnyValue(
|
|
2883
|
+
errors,
|
|
2884
|
+
`${path30}.arrayValue.values[${i}]`,
|
|
2885
|
+
item,
|
|
2886
|
+
depth + 1,
|
|
2887
|
+
counters
|
|
2888
|
+
);
|
|
2889
|
+
});
|
|
2890
|
+
break;
|
|
2891
|
+
}
|
|
2892
|
+
case "kvlistValue": {
|
|
2893
|
+
if (!isRecord5(value.kvlistValue)) {
|
|
2894
|
+
pushPath(errors, `${path30}.kvlistValue`, "must be an object");
|
|
2895
|
+
break;
|
|
2896
|
+
}
|
|
2897
|
+
const values = value.kvlistValue.values;
|
|
2898
|
+
if (values === void 0) break;
|
|
2899
|
+
if (!Array.isArray(values)) {
|
|
2900
|
+
pushPath(errors, `${path30}.kvlistValue.values`, "must be an array");
|
|
2901
|
+
break;
|
|
2902
|
+
}
|
|
2903
|
+
values.forEach((item, i) => {
|
|
2904
|
+
const itemPath = `${path30}.kvlistValue.values[${i}]`;
|
|
2905
|
+
if (!isRecord5(item)) {
|
|
2906
|
+
pushPath(errors, itemPath, "must be a KeyValue object");
|
|
2907
|
+
return;
|
|
2908
|
+
}
|
|
2909
|
+
if (typeof item.key !== "string") {
|
|
2910
|
+
pushPath(errors, `${itemPath}.key`, "must be a string");
|
|
2911
|
+
}
|
|
2912
|
+
validateAnyValue(errors, `${itemPath}.value`, item.value, depth + 1, counters);
|
|
2913
|
+
});
|
|
2914
|
+
break;
|
|
2788
2915
|
}
|
|
2789
2916
|
}
|
|
2790
2917
|
}
|
|
2918
|
+
function validateKeyValueList(errors, path30, attrs) {
|
|
2919
|
+
if (attrs === void 0) return;
|
|
2920
|
+
if (!Array.isArray(attrs)) {
|
|
2921
|
+
pushPath(errors, path30, "must be an array");
|
|
2922
|
+
return;
|
|
2923
|
+
}
|
|
2924
|
+
attrs.forEach((attr, ai) => {
|
|
2925
|
+
const attrPath = `${path30}[${ai}]`;
|
|
2926
|
+
if (!isRecord5(attr)) {
|
|
2927
|
+
pushPath(errors, attrPath, "must be an object");
|
|
2928
|
+
return;
|
|
2929
|
+
}
|
|
2930
|
+
if (typeof attr.key !== "string") {
|
|
2931
|
+
pushPath(errors, `${attrPath}.key`, "must be a string");
|
|
2932
|
+
}
|
|
2933
|
+
validateAnyValue(errors, `${attrPath}.value`, attr.value);
|
|
2934
|
+
});
|
|
2935
|
+
}
|
|
2791
2936
|
function validateOtlpJson(content) {
|
|
2792
2937
|
const errors = [];
|
|
2793
2938
|
const warnings = [
|
|
@@ -2816,6 +2961,13 @@ function validateOtlpJson(content) {
|
|
|
2816
2961
|
pushPath(errors, rsPath, "must be an object");
|
|
2817
2962
|
return;
|
|
2818
2963
|
}
|
|
2964
|
+
if (isRecord5(resourceSpan.resource)) {
|
|
2965
|
+
validateKeyValueList(
|
|
2966
|
+
errors,
|
|
2967
|
+
`${rsPath}.resource.attributes`,
|
|
2968
|
+
resourceSpan.resource.attributes
|
|
2969
|
+
);
|
|
2970
|
+
}
|
|
2819
2971
|
if (!Array.isArray(resourceSpan.scopeSpans)) {
|
|
2820
2972
|
pushPath(errors, `${rsPath}.scopeSpans`, "must be an array");
|
|
2821
2973
|
return;
|
|
@@ -2826,6 +2978,13 @@ function validateOtlpJson(content) {
|
|
|
2826
2978
|
pushPath(errors, ssPath, "must be an object");
|
|
2827
2979
|
return;
|
|
2828
2980
|
}
|
|
2981
|
+
if (isRecord5(scopeSpan.scope)) {
|
|
2982
|
+
validateKeyValueList(
|
|
2983
|
+
errors,
|
|
2984
|
+
`${ssPath}.scope.attributes`,
|
|
2985
|
+
scopeSpan.scope.attributes
|
|
2986
|
+
);
|
|
2987
|
+
}
|
|
2829
2988
|
if (!Array.isArray(scopeSpan.spans)) {
|
|
2830
2989
|
pushPath(errors, `${ssPath}.spans`, "must be an array");
|
|
2831
2990
|
return;
|
|
@@ -2860,44 +3019,58 @@ function validateOtlpJson(content) {
|
|
|
2860
3019
|
if (typeof span.name !== "string") {
|
|
2861
3020
|
pushPath(errors, `${spanPath}.name`, "must be a string");
|
|
2862
3021
|
}
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
pushPath(
|
|
3022
|
+
validateUint64String(
|
|
3023
|
+
errors,
|
|
3024
|
+
`${spanPath}.startTimeUnixNano`,
|
|
3025
|
+
span.startTimeUnixNano,
|
|
3026
|
+
"startTimeUnixNano"
|
|
3027
|
+
);
|
|
3028
|
+
if (span.endTimeUnixNano !== void 0) {
|
|
3029
|
+
validateUint64String(
|
|
2872
3030
|
errors,
|
|
2873
3031
|
`${spanPath}.endTimeUnixNano`,
|
|
2874
|
-
|
|
3032
|
+
span.endTimeUnixNano,
|
|
3033
|
+
"endTimeUnixNano"
|
|
2875
3034
|
);
|
|
2876
3035
|
}
|
|
2877
|
-
if (typeof span.startTimeUnixNano === "string" &&
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
3036
|
+
if (typeof span.startTimeUnixNano === "string" && typeof span.endTimeUnixNano === "string") {
|
|
3037
|
+
const start = parseDecimalIntegerString(span.startTimeUnixNano);
|
|
3038
|
+
const end = parseDecimalIntegerString(span.endTimeUnixNano);
|
|
3039
|
+
if (start.ok && end.ok && end.n < start.n) {
|
|
3040
|
+
pushPath(
|
|
3041
|
+
errors,
|
|
3042
|
+
`${spanPath}.endTimeUnixNano`,
|
|
3043
|
+
"must be >= startTimeUnixNano"
|
|
3044
|
+
);
|
|
3045
|
+
}
|
|
3046
|
+
}
|
|
3047
|
+
validateKeyValueList(errors, `${spanPath}.attributes`, span.attributes);
|
|
3048
|
+
if (Array.isArray(span.events)) {
|
|
3049
|
+
span.events.forEach((event, ei) => {
|
|
3050
|
+
const eventPath = `${spanPath}.events[${ei}]`;
|
|
3051
|
+
if (!isRecord5(event)) {
|
|
3052
|
+
pushPath(errors, eventPath, "must be an object");
|
|
3053
|
+
return;
|
|
3054
|
+
}
|
|
3055
|
+
if (event.timeUnixNano !== void 0) {
|
|
3056
|
+
validateUint64String(
|
|
2881
3057
|
errors,
|
|
2882
|
-
`${
|
|
2883
|
-
|
|
3058
|
+
`${eventPath}.timeUnixNano`,
|
|
3059
|
+
event.timeUnixNano,
|
|
3060
|
+
"timeUnixNano"
|
|
2884
3061
|
);
|
|
2885
3062
|
}
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
}
|
|
3063
|
+
validateKeyValueList(errors, `${eventPath}.attributes`, event.attributes);
|
|
3064
|
+
});
|
|
2889
3065
|
}
|
|
2890
|
-
if (Array.isArray(span.
|
|
2891
|
-
span.
|
|
2892
|
-
const
|
|
2893
|
-
if (!isRecord5(
|
|
2894
|
-
pushPath(errors,
|
|
3066
|
+
if (Array.isArray(span.links)) {
|
|
3067
|
+
span.links.forEach((link, li) => {
|
|
3068
|
+
const linkPath = `${spanPath}.links[${li}]`;
|
|
3069
|
+
if (!isRecord5(link)) {
|
|
3070
|
+
pushPath(errors, linkPath, "must be an object");
|
|
2895
3071
|
return;
|
|
2896
3072
|
}
|
|
2897
|
-
|
|
2898
|
-
pushPath(errors, `${attrPath}.key`, "must be a string");
|
|
2899
|
-
}
|
|
2900
|
-
validateAnyValue(errors, `${attrPath}.value`, attr.value);
|
|
3073
|
+
validateKeyValueList(errors, `${linkPath}.attributes`, link.attributes);
|
|
2901
3074
|
});
|
|
2902
3075
|
}
|
|
2903
3076
|
if (typeof span.kind === "number") {
|
|
@@ -3815,7 +3988,7 @@ async function newestTraceMtimeMs(traceDir) {
|
|
|
3815
3988
|
}
|
|
3816
3989
|
async function loadSessionRuns(traceDir) {
|
|
3817
3990
|
try {
|
|
3818
|
-
const mod = await import('./src-
|
|
3991
|
+
const mod = await import('./src-KP4UIFK5.mjs');
|
|
3819
3992
|
const dbPath = mod.resolveIndexDbPath(traceDir);
|
|
3820
3993
|
const status = mod.indexStatus(dbPath);
|
|
3821
3994
|
if (!status.healthy) {
|
|
@@ -13794,7 +13967,7 @@ function isModuleNotFound4(e) {
|
|
|
13794
13967
|
}
|
|
13795
13968
|
async function loadIndexSqlite() {
|
|
13796
13969
|
try {
|
|
13797
|
-
return await import('./src-
|
|
13970
|
+
return await import('./src-KP4UIFK5.mjs');
|
|
13798
13971
|
} catch (e) {
|
|
13799
13972
|
if (isModuleNotFound4(e)) {
|
|
13800
13973
|
console.error(
|