@mastra/duckdb 1.7.0 → 1.8.0-alpha.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/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{observability-Bt92lKRG.js → observability-CgtrnaKz.js} +171 -24
- package/dist/observability-CgtrnaKz.js.map +1 -0
- package/dist/{observability-yLoG0tl3.cjs → observability-VHURnMMH.cjs} +171 -24
- package/dist/observability-VHURnMMH.cjs.map +1 -0
- package/dist/storage/domains/observability/ddl.d.ts +1 -1
- package/dist/storage/domains/observability/ddl.d.ts.map +1 -1
- package/dist/storage/domains/observability/trace-query.d.ts.map +1 -1
- package/dist/storage/domains/observability/tracing.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/observability-Bt92lKRG.js.map +0 -1
- package/dist/observability-yLoG0tl3.cjs.map +0 -1
package/dist/docs/SKILL.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -528,7 +528,7 @@ var ObservabilityStorageDuckDB = class extends _mastra_core_storage.Observabilit
|
|
|
528
528
|
async loadDelegate() {
|
|
529
529
|
if (this.delegate) return this.delegate;
|
|
530
530
|
if (this.unavailableError) return null;
|
|
531
|
-
if (!this.loadPromise) this.loadPromise = Promise.resolve().then(() => require("./observability-
|
|
531
|
+
if (!this.loadPromise) this.loadPromise = Promise.resolve().then(() => require("./observability-VHURnMMH.cjs")).then(({ ObservabilityStorageDuckDB }) => {
|
|
532
532
|
const delegate = new ObservabilityStorageDuckDB({ db: this.db });
|
|
533
533
|
this.delegate = delegate;
|
|
534
534
|
return delegate;
|
package/dist/index.js
CHANGED
|
@@ -527,7 +527,7 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
|
|
|
527
527
|
async loadDelegate() {
|
|
528
528
|
if (this.delegate) return this.delegate;
|
|
529
529
|
if (this.unavailableError) return null;
|
|
530
|
-
if (!this.loadPromise) this.loadPromise = import("./observability-
|
|
530
|
+
if (!this.loadPromise) this.loadPromise = import("./observability-CgtrnaKz.js").then(({ ObservabilityStorageDuckDB }) => {
|
|
531
531
|
const delegate = new ObservabilityStorageDuckDB({ db: this.db });
|
|
532
532
|
this.delegate = delegate;
|
|
533
533
|
return delegate;
|
|
@@ -52,6 +52,8 @@ CREATE TABLE IF NOT EXISTS span_events (
|
|
|
52
52
|
entityId VARCHAR,
|
|
53
53
|
entityName VARCHAR,
|
|
54
54
|
entityVersionId VARCHAR,
|
|
55
|
+
parentEntityVersionId VARCHAR,
|
|
56
|
+
rootEntityVersionId VARCHAR,
|
|
55
57
|
|
|
56
58
|
-- Context
|
|
57
59
|
userId VARCHAR,
|
|
@@ -317,6 +319,8 @@ const ALL_MIGRATIONS = [
|
|
|
317
319
|
`CREATE SEQUENCE IF NOT EXISTS feedback_events_cursor_id_seq START 1`,
|
|
318
320
|
`ALTER TABLE span_events ADD COLUMN IF NOT EXISTS cursorId BIGINT`,
|
|
319
321
|
`ALTER TABLE span_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,
|
|
322
|
+
`ALTER TABLE span_events ADD COLUMN IF NOT EXISTS parentEntityVersionId VARCHAR`,
|
|
323
|
+
`ALTER TABLE span_events ADD COLUMN IF NOT EXISTS rootEntityVersionId VARCHAR`,
|
|
320
324
|
`ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS cursorId BIGINT`,
|
|
321
325
|
`ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS entityVersionId VARCHAR`,
|
|
322
326
|
`ALTER TABLE metric_events ADD COLUMN IF NOT EXISTS parentEntityVersionId VARCHAR`,
|
|
@@ -2598,13 +2602,65 @@ const TRACE_FIELDS = {
|
|
|
2598
2602
|
}
|
|
2599
2603
|
};
|
|
2600
2604
|
const SPAN_FIELDS = {
|
|
2605
|
+
name: {
|
|
2606
|
+
sql: "s.name",
|
|
2607
|
+
parameterType: "scalar"
|
|
2608
|
+
},
|
|
2601
2609
|
spanType: {
|
|
2602
2610
|
sql: "s.spanType",
|
|
2603
2611
|
parameterType: "scalar"
|
|
2604
2612
|
},
|
|
2613
|
+
model: {
|
|
2614
|
+
sql: "s.model",
|
|
2615
|
+
parameterType: "scalar"
|
|
2616
|
+
},
|
|
2617
|
+
provider: {
|
|
2618
|
+
sql: "s.provider",
|
|
2619
|
+
parameterType: "scalar"
|
|
2620
|
+
},
|
|
2621
|
+
startedAt: {
|
|
2622
|
+
sql: "s.startedAt",
|
|
2623
|
+
parameterType: "timestamp"
|
|
2624
|
+
},
|
|
2625
|
+
endedAt: {
|
|
2626
|
+
sql: "s.endedAt",
|
|
2627
|
+
parameterType: "timestamp"
|
|
2628
|
+
},
|
|
2629
|
+
durationMs: {
|
|
2630
|
+
sql: "s.durationMs",
|
|
2631
|
+
parameterType: "scalar"
|
|
2632
|
+
},
|
|
2633
|
+
status: {
|
|
2634
|
+
sql: "s.status",
|
|
2635
|
+
parameterType: "scalar"
|
|
2636
|
+
},
|
|
2605
2637
|
error: {
|
|
2606
2638
|
sql: "s.error",
|
|
2607
2639
|
parameterType: "scalar"
|
|
2640
|
+
},
|
|
2641
|
+
entityType: {
|
|
2642
|
+
sql: "s.entityType",
|
|
2643
|
+
parameterType: "scalar"
|
|
2644
|
+
},
|
|
2645
|
+
entityId: {
|
|
2646
|
+
sql: "s.entityId",
|
|
2647
|
+
parameterType: "scalar"
|
|
2648
|
+
},
|
|
2649
|
+
entityName: {
|
|
2650
|
+
sql: "s.entityName",
|
|
2651
|
+
parameterType: "scalar"
|
|
2652
|
+
},
|
|
2653
|
+
entityVersionId: {
|
|
2654
|
+
sql: "s.entityVersionId",
|
|
2655
|
+
parameterType: "scalar"
|
|
2656
|
+
},
|
|
2657
|
+
parentEntityVersionId: {
|
|
2658
|
+
sql: "s.parentEntityVersionId",
|
|
2659
|
+
parameterType: "scalar"
|
|
2660
|
+
},
|
|
2661
|
+
rootEntityVersionId: {
|
|
2662
|
+
sql: "s.rootEntityVersionId",
|
|
2663
|
+
parameterType: "scalar"
|
|
2608
2664
|
}
|
|
2609
2665
|
};
|
|
2610
2666
|
const SCORE_FIELDS = {
|
|
@@ -2612,9 +2668,37 @@ const SCORE_FIELDS = {
|
|
|
2612
2668
|
sql: "s.scorerId",
|
|
2613
2669
|
parameterType: "scalar"
|
|
2614
2670
|
},
|
|
2671
|
+
scorerVersion: {
|
|
2672
|
+
sql: "s.scorerVersion",
|
|
2673
|
+
parameterType: "scalar"
|
|
2674
|
+
},
|
|
2675
|
+
scoreSource: {
|
|
2676
|
+
sql: "s.scoreSource",
|
|
2677
|
+
parameterType: "scalar"
|
|
2678
|
+
},
|
|
2615
2679
|
score: {
|
|
2616
2680
|
sql: "s.score",
|
|
2617
2681
|
parameterType: "scalar"
|
|
2682
|
+
},
|
|
2683
|
+
timestamp: {
|
|
2684
|
+
sql: "s.timestamp",
|
|
2685
|
+
parameterType: "timestamp"
|
|
2686
|
+
},
|
|
2687
|
+
spanId: {
|
|
2688
|
+
sql: "s.spanId",
|
|
2689
|
+
parameterType: "scalar"
|
|
2690
|
+
},
|
|
2691
|
+
entityVersionId: {
|
|
2692
|
+
sql: "s.entityVersionId",
|
|
2693
|
+
parameterType: "scalar"
|
|
2694
|
+
},
|
|
2695
|
+
parentEntityVersionId: {
|
|
2696
|
+
sql: "s.parentEntityVersionId",
|
|
2697
|
+
parameterType: "scalar"
|
|
2698
|
+
},
|
|
2699
|
+
rootEntityVersionId: {
|
|
2700
|
+
sql: "s.rootEntityVersionId",
|
|
2701
|
+
parameterType: "scalar"
|
|
2618
2702
|
}
|
|
2619
2703
|
};
|
|
2620
2704
|
const TRACE_SELECT = `
|
|
@@ -2636,12 +2720,15 @@ function fieldDefinition(registry, field) {
|
|
|
2636
2720
|
function parameterSql(type) {
|
|
2637
2721
|
return type === "timestamp" ? "CAST(? AS TIMESTAMP)" : "?";
|
|
2638
2722
|
}
|
|
2639
|
-
function
|
|
2723
|
+
function isMetadataField(field) {
|
|
2724
|
+
return field.startsWith("metadata.");
|
|
2725
|
+
}
|
|
2726
|
+
function compileScalarPredicate(predicate, registry, allowMetadata = false) {
|
|
2640
2727
|
if (predicate.type === "boolean") {
|
|
2641
2728
|
const values = [];
|
|
2642
2729
|
return {
|
|
2643
2730
|
sql: predicate.args.map((arg) => {
|
|
2644
|
-
const compiled = compileScalarPredicate(arg, registry);
|
|
2731
|
+
const compiled = compileScalarPredicate(arg, registry, allowMetadata);
|
|
2645
2732
|
values.push(...compiled.values);
|
|
2646
2733
|
return `(${compiled.sql})`;
|
|
2647
2734
|
}).join(predicate.operator === "and" ? " AND " : " OR "),
|
|
@@ -2649,26 +2736,45 @@ function compileScalarPredicate(predicate, registry) {
|
|
|
2649
2736
|
};
|
|
2650
2737
|
}
|
|
2651
2738
|
if (predicate.type === "not") {
|
|
2652
|
-
const compiled = compileScalarPredicate(predicate.arg, registry);
|
|
2739
|
+
const compiled = compileScalarPredicate(predicate.arg, registry, allowMetadata);
|
|
2653
2740
|
return {
|
|
2654
2741
|
sql: `NOT (${compiled.sql})`,
|
|
2655
2742
|
values: compiled.values
|
|
2656
2743
|
};
|
|
2657
2744
|
}
|
|
2658
|
-
|
|
2745
|
+
let field;
|
|
2746
|
+
let fieldValues = [];
|
|
2747
|
+
if (isMetadataField(predicate.field)) {
|
|
2748
|
+
if (!allowMetadata) throw new Error(`Unsupported trusted trace-query field: ${predicate.field}`);
|
|
2749
|
+
const key = predicate.field.slice(9);
|
|
2750
|
+
const path = `$.${JSON.stringify(key)}`;
|
|
2751
|
+
field = {
|
|
2752
|
+
sql: `NULLIF(trim(CASE WHEN json_type(r.metadata, ?) = 'VARCHAR' THEN json_extract_string(r.metadata, ?) END), '')`,
|
|
2753
|
+
parameterType: "scalar"
|
|
2754
|
+
};
|
|
2755
|
+
fieldValues = [path, path];
|
|
2756
|
+
} else field = fieldDefinition(registry, predicate.field);
|
|
2659
2757
|
if (predicate.type === "presence") return {
|
|
2660
2758
|
sql: `${field.sql} IS ${predicate.operator === "exists" ? "NOT " : ""}NULL`,
|
|
2661
|
-
values:
|
|
2759
|
+
values: fieldValues
|
|
2662
2760
|
};
|
|
2663
2761
|
if (predicate.type === "membership") {
|
|
2664
2762
|
const list = predicate.values.map(() => parameterSql(field.parameterType)).join(", ");
|
|
2665
2763
|
if (predicate.operator === "in") return {
|
|
2666
2764
|
sql: `${field.sql} IS NOT NULL AND ${field.sql} IN (${list})`,
|
|
2667
|
-
values:
|
|
2765
|
+
values: [
|
|
2766
|
+
...fieldValues,
|
|
2767
|
+
...fieldValues,
|
|
2768
|
+
...predicate.values
|
|
2769
|
+
]
|
|
2668
2770
|
};
|
|
2669
2771
|
return {
|
|
2670
2772
|
sql: `${field.sql} IS NULL OR ${field.sql} NOT IN (${list})`,
|
|
2671
|
-
values:
|
|
2773
|
+
values: [
|
|
2774
|
+
...fieldValues,
|
|
2775
|
+
...fieldValues,
|
|
2776
|
+
...predicate.values
|
|
2777
|
+
]
|
|
2672
2778
|
};
|
|
2673
2779
|
}
|
|
2674
2780
|
const parameter = parameterSql(field.parameterType);
|
|
@@ -2680,17 +2786,21 @@ function compileScalarPredicate(predicate, registry) {
|
|
|
2680
2786
|
};
|
|
2681
2787
|
if (predicate.operator === "eq") return {
|
|
2682
2788
|
sql: `${field.sql} IS NOT DISTINCT FROM ${parameter}`,
|
|
2683
|
-
values: [predicate.value]
|
|
2789
|
+
values: [...fieldValues, predicate.value]
|
|
2684
2790
|
};
|
|
2685
2791
|
if (predicate.operator === "ne") return {
|
|
2686
2792
|
sql: `${field.sql} IS DISTINCT FROM ${parameter}`,
|
|
2687
|
-
values: [predicate.value]
|
|
2793
|
+
values: [...fieldValues, predicate.value]
|
|
2688
2794
|
};
|
|
2689
2795
|
const operator = operators[predicate.operator];
|
|
2690
2796
|
if (operator === void 0) throw new Error(`Unsupported trusted trace-query operator: ${predicate.operator}`);
|
|
2691
2797
|
return {
|
|
2692
2798
|
sql: `${field.sql} IS NOT NULL AND ${field.sql} ${operator} ${parameter}`,
|
|
2693
|
-
values: [
|
|
2799
|
+
values: [
|
|
2800
|
+
...fieldValues,
|
|
2801
|
+
...fieldValues,
|
|
2802
|
+
predicate.value
|
|
2803
|
+
]
|
|
2694
2804
|
};
|
|
2695
2805
|
}
|
|
2696
2806
|
function compilePredicate(predicate) {
|
|
@@ -2726,7 +2836,7 @@ function compilePredicate(predicate) {
|
|
|
2726
2836
|
values: compiled.values
|
|
2727
2837
|
};
|
|
2728
2838
|
}
|
|
2729
|
-
return compileScalarPredicate(predicate, TRACE_FIELDS);
|
|
2839
|
+
return compileScalarPredicate(predicate, TRACE_FIELDS, true);
|
|
2730
2840
|
}
|
|
2731
2841
|
function collectRelatedCollections(predicate, collections = /* @__PURE__ */ new Set()) {
|
|
2732
2842
|
if (!predicate) return collections;
|
|
@@ -2775,18 +2885,43 @@ function compileDuckDBTraceQuery(plan) {
|
|
|
2775
2885
|
AND r.startedAt < CAST(? AS TIMESTAMP)
|
|
2776
2886
|
)`
|
|
2777
2887
|
];
|
|
2778
|
-
if (relatedCollections.has("spans")) ctes.push(`
|
|
2779
|
-
SELECT
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
e
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2888
|
+
if (relatedCollections.has("spans")) ctes.push(`current_span_rows AS (
|
|
2889
|
+
SELECT
|
|
2890
|
+
e.*,
|
|
2891
|
+
coalesce(
|
|
2892
|
+
min(e.timestamp) FILTER (WHERE e.eventType = 'start') OVER (PARTITION BY e.traceId, e.spanId),
|
|
2893
|
+
min(e.timestamp) OVER (PARTITION BY e.traceId, e.spanId)
|
|
2894
|
+
) AS startedAt,
|
|
2895
|
+
row_number() OVER (
|
|
2896
|
+
PARTITION BY e.traceId, e.spanId
|
|
2897
|
+
ORDER BY CASE WHEN e.endedAt IS NULL THEN 1 ELSE 0 END ASC, e.cursorId DESC
|
|
2898
|
+
) AS currentRank
|
|
2899
|
+
FROM span_events e
|
|
2900
|
+
INNER JOIN root_scope roots ON roots.traceId = e.traceId
|
|
2901
|
+
),
|
|
2902
|
+
current_spans AS (
|
|
2903
|
+
SELECT
|
|
2904
|
+
traceId,
|
|
2905
|
+
name,
|
|
2906
|
+
spanType,
|
|
2907
|
+
CASE
|
|
2908
|
+
WHEN json_type(attributes, '$.model') = 'VARCHAR' THEN json_extract_string(attributes, '$.model')
|
|
2909
|
+
END AS model,
|
|
2910
|
+
CASE
|
|
2911
|
+
WHEN json_type(attributes, '$.provider') = 'VARCHAR' THEN json_extract_string(attributes, '$.provider')
|
|
2912
|
+
END AS provider,
|
|
2913
|
+
startedAt,
|
|
2914
|
+
endedAt,
|
|
2915
|
+
date_diff('millisecond', startedAt, endedAt) AS durationMs,
|
|
2916
|
+
CASE WHEN error IS NOT NULL THEN 'error' ELSE 'success' END AS status,
|
|
2917
|
+
error,
|
|
2918
|
+
entityType,
|
|
2919
|
+
entityId,
|
|
2920
|
+
entityName,
|
|
2921
|
+
entityVersionId,
|
|
2922
|
+
parentEntityVersionId,
|
|
2923
|
+
rootEntityVersionId
|
|
2924
|
+
FROM current_span_rows
|
|
2790
2925
|
WHERE currentRank = 1
|
|
2791
2926
|
)`);
|
|
2792
2927
|
if (relatedCollections.has("scores")) ctes.push(`current_scores AS (
|
|
@@ -2891,6 +3026,8 @@ const COLUMNS_SQL = [
|
|
|
2891
3026
|
"entityId",
|
|
2892
3027
|
"entityName",
|
|
2893
3028
|
"entityVersionId",
|
|
3029
|
+
"parentEntityVersionId",
|
|
3030
|
+
"rootEntityVersionId",
|
|
2894
3031
|
"userId",
|
|
2895
3032
|
"organizationId",
|
|
2896
3033
|
"resourceId",
|
|
@@ -2933,6 +3070,8 @@ const SPAN_RECONSTRUCT_SELECT = `
|
|
|
2933
3070
|
${argMaxNonNull("entityId")},
|
|
2934
3071
|
${argMaxNonNull("entityName")},
|
|
2935
3072
|
${argMaxNonNull("entityVersionId")},
|
|
3073
|
+
${argMaxNonNull("parentEntityVersionId")},
|
|
3074
|
+
${argMaxNonNull("rootEntityVersionId")},
|
|
2936
3075
|
${argMaxNonNull("userId")},
|
|
2937
3076
|
${argMaxNonNull("organizationId")},
|
|
2938
3077
|
${argMaxNonNull("resourceId")},
|
|
@@ -3100,6 +3239,8 @@ function rowToSpanRecord(row) {
|
|
|
3100
3239
|
entityId: row.entityId ?? null,
|
|
3101
3240
|
entityName: row.entityName ?? null,
|
|
3102
3241
|
entityVersionId: row.entityVersionId ?? null,
|
|
3242
|
+
parentEntityVersionId: row.parentEntityVersionId ?? null,
|
|
3243
|
+
rootEntityVersionId: row.rootEntityVersionId ?? null,
|
|
3103
3244
|
userId: row.userId ?? null,
|
|
3104
3245
|
organizationId: row.organizationId ?? null,
|
|
3105
3246
|
resourceId: row.resourceId ?? null,
|
|
@@ -3255,6 +3396,8 @@ function toValuesTuple(row) {
|
|
|
3255
3396
|
v(row.entityId),
|
|
3256
3397
|
v(row.entityName),
|
|
3257
3398
|
v(row.entityVersionId),
|
|
3399
|
+
v(row.parentEntityVersionId),
|
|
3400
|
+
v(row.rootEntityVersionId),
|
|
3258
3401
|
v(row.userId),
|
|
3259
3402
|
v(row.organizationId),
|
|
3260
3403
|
v(row.resourceId),
|
|
@@ -3297,6 +3440,8 @@ function createStartSpanRow(s) {
|
|
|
3297
3440
|
entityId: s.entityId ?? null,
|
|
3298
3441
|
entityName: s.entityName ?? null,
|
|
3299
3442
|
entityVersionId: s.entityVersionId ?? null,
|
|
3443
|
+
parentEntityVersionId: s.parentEntityVersionId ?? null,
|
|
3444
|
+
rootEntityVersionId: s.rootEntityVersionId ?? null,
|
|
3300
3445
|
userId: s.userId ?? null,
|
|
3301
3446
|
organizationId: s.organizationId ?? null,
|
|
3302
3447
|
resourceId: s.resourceId ?? null,
|
|
@@ -3334,6 +3479,8 @@ function createEndSpanRow(s) {
|
|
|
3334
3479
|
entityId: s.entityId ?? null,
|
|
3335
3480
|
entityName: s.entityName ?? null,
|
|
3336
3481
|
entityVersionId: s.entityVersionId ?? null,
|
|
3482
|
+
parentEntityVersionId: s.parentEntityVersionId ?? null,
|
|
3483
|
+
rootEntityVersionId: s.rootEntityVersionId ?? null,
|
|
3337
3484
|
userId: s.userId ?? null,
|
|
3338
3485
|
organizationId: s.organizationId ?? null,
|
|
3339
3486
|
resourceId: s.resourceId ?? null,
|
|
@@ -4246,4 +4393,4 @@ var ObservabilityStorageDuckDB = class extends ObservabilityStorage {
|
|
|
4246
4393
|
//#endregion
|
|
4247
4394
|
export { ObservabilityStorageDuckDB };
|
|
4248
4395
|
|
|
4249
|
-
//# sourceMappingURL=observability-
|
|
4396
|
+
//# sourceMappingURL=observability-CgtrnaKz.js.map
|