@mastra/duckdb 1.12.1 → 1.13.0-alpha.1
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/{db-zp2htaur.cjs → features-BzhPmFg2.cjs} +63 -2
- package/dist/features-BzhPmFg2.cjs.map +1 -0
- package/dist/{db-BWgrbB_u.js → features-D3sUOsCL.js} +23 -3
- package/dist/features-D3sUOsCL.js.map +1 -0
- package/dist/index.cjs +16 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/{observability-BmLO_YTO.js → observability-Bk_y3hof.js} +460 -43
- package/dist/observability-Bk_y3hof.js.map +1 -0
- package/dist/{observability-DlmDRPW3.cjs → observability-DNuNWZFX.cjs} +463 -68
- package/dist/observability-DNuNWZFX.cjs.map +1 -0
- package/dist/storage/db/index.d.ts +5 -1
- package/dist/storage/db/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/index.d.ts +4 -2
- package/dist/storage/domains/observability/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/span-query.d.ts +43 -0
- package/dist/storage/domains/observability/span-query.d.ts.map +1 -0
- package/dist/storage/domains/observability/trace-aggregate.d.ts +17 -0
- package/dist/storage/domains/observability/trace-aggregate.d.ts.map +1 -0
- package/dist/storage/domains/observability/trace-query.d.ts +26 -1
- package/dist/storage/domains/observability/trace-query.d.ts.map +1 -1
- package/dist/storage/features.d.ts +2 -0
- package/dist/storage/features.d.ts.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/db-BWgrbB_u.js.map +0 -1
- package/dist/db-zp2htaur.cjs.map +0 -1
- package/dist/observability-BmLO_YTO.js.map +0 -1
- package/dist/observability-DlmDRPW3.cjs.map +0 -1
|
@@ -6,6 +6,10 @@ import { MastraBase } from '@mastra/core/base';
|
|
|
6
6
|
* DuckDB cannot infer parameter types from SQL context (e.g. json_extract_string).
|
|
7
7
|
*/
|
|
8
8
|
export declare function bindParam(stmt: DuckDBPreparedStatement, index: number, value: unknown): void;
|
|
9
|
+
/** A query interrupted at its caller-supplied deadline. */
|
|
10
|
+
export declare class DuckDBQueryTimeoutError extends Error {
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
9
13
|
/** Configuration for the DuckDB database connection. */
|
|
10
14
|
export interface DuckDBStorageConfig {
|
|
11
15
|
/** Path to the DuckDB file. Defaults to 'mastra.duckdb'. Use ':memory:' for ephemeral. */
|
|
@@ -46,7 +50,7 @@ export declare class DuckDBConnection extends MastraBase {
|
|
|
46
50
|
/**
|
|
47
51
|
* Execute a SQL query and return results as objects.
|
|
48
52
|
*/
|
|
49
|
-
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
53
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[], timeoutMs?: number): Promise<T[]>;
|
|
50
54
|
/**
|
|
51
55
|
* Execute a SQL statement without returning results.
|
|
52
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/db/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAyB5F;AAgBD,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,eAAe,CAAyB;IAEhD,YAAY,MAAM,GAAE,mBAAwB,EAO3C;YAEa,UAAU;IAyBxB,8EAA8E;IACxE,aAAa,yDAMlB;IAED,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/db/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAyB5F;AAgBD,2DAA2D;AAC3D,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,cAGC;CACF;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,eAAe,CAAyB;IAEhD,YAAY,MAAM,GAAE,mBAAwB,EAO3C;YAEa,UAAU;IAyBxB,8EAA8E;IACxE,aAAa,yDAMlB;IAED,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CA+C9G;IAED;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhE;IAED,gFAAgF;IAC1E,UAAU,CAAC,EACf,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,GACN,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,IAAI,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB;IAED,oFAAoF;IAC9E,kBAAkB,CAAC,UAAU,EAAE,SAAS;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3G;IAED;;;;;;;;OAQG;IACG,YAAY,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlE;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWtC;IAED,gEAAgE;IAC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3B;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObservabilityStorage } from '@mastra/core/storage';
|
|
2
|
-
import type { CreateSpanArgs, GetSpanArgs, GetSpanResponse, GetSpansArgs, GetSpansResponse, GetRootSpanArgs, GetRootSpanResponse, GetTraceArgs, GetTraceResponse, GetTraceLightResponse, ListBranchesArgs, ListBranchesResponse, ListTracesArgs, ListTracesLightResponse, ListTracesResponse, BatchCreateSpansArgs, BatchDeleteTracesArgs, BatchCreateLogsArgs, ListLogsArgs, ListLogsResponse, BatchCreateMetricsArgs, ListMetricsArgs, ListMetricsResponse, CreateScoreArgs, DeleteScoresArgs, BatchCreateScoresArgs, ListScoresArgs, ListScoresResponse, ScoreRecord, GetScoreAggregateArgs, GetScoreAggregateResponse, GetScoreBreakdownArgs, GetScoreBreakdownResponse, GetScoreTimeSeriesArgs, GetScoreTimeSeriesResponse, GetScorePercentilesArgs, GetScorePercentilesResponse, CreateFeedbackArgs, DeleteFeedbackArgs, BatchCreateFeedbackArgs, ListFeedbackArgs, ListFeedbackResponse, FeedbackRecord, UpdateFeedbackReviewStatusArgs, GetFeedbackAggregateArgs, GetFeedbackAggregateResponse, GetFeedbackBreakdownArgs, GetFeedbackBreakdownResponse, GetFeedbackTimeSeriesArgs, GetFeedbackTimeSeriesResponse, GetFeedbackPercentilesArgs, GetFeedbackPercentilesResponse, GetMetricAggregateArgs, GetMetricAggregateResponse, GetMetricBreakdownArgs, GetMetricBreakdownResponse, GetMetricTimeSeriesArgs, GetMetricTimeSeriesResponse, GetMetricPercentilesArgs, GetMetricPercentilesResponse, GetMetricNamesArgs, GetMetricNamesResponse, GetMetricLabelKeysArgs, GetMetricLabelKeysResponse, GetMetricLabelValuesArgs, GetMetricLabelValuesResponse, GetEntityTypesArgs, GetEntityTypesResponse, GetEntityNamesArgs, GetEntityNamesResponse, GetServiceNamesArgs, GetServiceNamesResponse, GetEnvironmentsArgs, GetEnvironmentsResponse, GetTagsArgs, GetTagsResponse, GetTraceQueryValuesResponse, ObservabilityStorageStrategy, PruneOptions, PruneResult, QueryThreadsResult, RetentionTablesDescriptor, TableRetentionPolicy, TraceQueryObservedFieldsResult, TraceQueryResponse, TrustedThreadQueryPlan, TrustedTraceQueryObservedFieldsPlan, TrustedTraceQueryPlan, TrustedTraceQueryValuesPlan } from '@mastra/core/storage';
|
|
2
|
+
import type { SpanQueryResponse, TrustedSpanQueryPlan, CreateSpanArgs, GetSpanArgs, GetSpanResponse, GetSpansArgs, GetSpansResponse, GetRootSpanArgs, GetRootSpanResponse, GetTraceArgs, GetTraceResponse, GetTraceLightResponse, ListBranchesArgs, ListBranchesResponse, ListTracesArgs, ListTracesLightResponse, ListTracesResponse, BatchCreateSpansArgs, BatchDeleteTracesArgs, BatchCreateLogsArgs, ListLogsArgs, ListLogsResponse, BatchCreateMetricsArgs, ListMetricsArgs, ListMetricsResponse, CreateScoreArgs, DeleteScoresArgs, BatchCreateScoresArgs, ListScoresArgs, ListScoresResponse, ScoreRecord, GetScoreAggregateArgs, GetScoreAggregateResponse, GetScoreBreakdownArgs, GetScoreBreakdownResponse, GetScoreTimeSeriesArgs, GetScoreTimeSeriesResponse, GetScorePercentilesArgs, GetScorePercentilesResponse, CreateFeedbackArgs, DeleteFeedbackArgs, BatchCreateFeedbackArgs, ListFeedbackArgs, ListFeedbackResponse, FeedbackRecord, UpdateFeedbackReviewStatusArgs, GetFeedbackAggregateArgs, GetFeedbackAggregateResponse, GetFeedbackBreakdownArgs, GetFeedbackBreakdownResponse, GetFeedbackTimeSeriesArgs, GetFeedbackTimeSeriesResponse, GetFeedbackPercentilesArgs, GetFeedbackPercentilesResponse, GetMetricAggregateArgs, GetMetricAggregateResponse, GetMetricBreakdownArgs, GetMetricBreakdownResponse, GetMetricTimeSeriesArgs, GetMetricTimeSeriesResponse, GetMetricPercentilesArgs, GetMetricPercentilesResponse, GetMetricNamesArgs, GetMetricNamesResponse, GetMetricLabelKeysArgs, GetMetricLabelKeysResponse, GetMetricLabelValuesArgs, GetMetricLabelValuesResponse, GetEntityTypesArgs, GetEntityTypesResponse, GetEntityNamesArgs, GetEntityNamesResponse, GetServiceNamesArgs, GetServiceNamesResponse, GetEnvironmentsArgs, GetEnvironmentsResponse, GetTagsArgs, GetTagsResponse, GetTraceQueryValuesResponse, ObservabilityStorageStrategy, PruneOptions, PruneResult, QueryThreadsResult, RetentionTablesDescriptor, TableRetentionPolicy, TraceAggregateResponse, TraceQueryObservedFieldsResult, TraceQueryResponse, TrustedThreadQueryPlan, TrustedTraceAggregatePlan, TrustedTraceQueryObservedFieldsPlan, TrustedTraceQueryPlan, TrustedTraceQueryValuesPlan } from '@mastra/core/storage';
|
|
3
3
|
import type { DuckDBConnection } from '../../db/index.js';
|
|
4
4
|
/** Configuration for the DuckDB observability storage domain. */
|
|
5
5
|
export interface ObservabilityDuckDBConfig {
|
|
@@ -35,7 +35,7 @@ export declare class ObservabilityStorageDuckDB extends ObservabilityStorage {
|
|
|
35
35
|
preferred: ObservabilityStorageStrategy;
|
|
36
36
|
supported: ObservabilityStorageStrategy[];
|
|
37
37
|
};
|
|
38
|
-
getFeatures(): readonly ["metrics", "logs", "entity-type-discovery", "entity-name-discovery", "service-name-discovery", "environment-discovery", "tag-discovery", "metric-discovery", "trace-query", "trace-query-root-duration", "trace-query-discovery", "thread-query", "trace-query-tenant-scope", "feedback", "trace-query-context-ids"] | readonly ["metrics", "logs", "entity-type-discovery", "entity-name-discovery", "service-name-discovery", "environment-discovery", "tag-discovery", "metric-discovery", "delta-polling", "trace-query", "trace-query-root-duration", "trace-query-discovery", "thread-query", "trace-query-tenant-scope", "feedback", "trace-query-context-ids"];
|
|
38
|
+
getFeatures(): readonly ["metrics", "logs", "entity-type-discovery", "entity-name-discovery", "service-name-discovery", "environment-discovery", "tag-discovery", "metric-discovery", "trace-query", "trace-aggregate", "trace-query-root-duration", "trace-query-discovery", "thread-query", "trace-query-tenant-scope", "feedback", "trace-query-context-ids"] | readonly ["metrics", "logs", "entity-type-discovery", "entity-name-discovery", "service-name-discovery", "environment-discovery", "tag-discovery", "metric-discovery", "delta-polling", "trace-query", "trace-aggregate", "trace-query-root-duration", "trace-query-discovery", "thread-query", "trace-query-tenant-scope", "feedback", "trace-query-context-ids"] | readonly ["metrics", "logs", "entity-type-discovery", "entity-name-discovery", "service-name-discovery", "environment-discovery", "tag-discovery", "metric-discovery", "trace-query", "trace-aggregate", "span-query", "trace-query-root-duration", "trace-query-discovery", "thread-query", "trace-query-tenant-scope", "feedback", "trace-query-context-ids"] | readonly ["metrics", "logs", "entity-type-discovery", "entity-name-discovery", "service-name-discovery", "environment-discovery", "tag-discovery", "metric-discovery", "delta-polling", "trace-query", "trace-aggregate", "span-query", "trace-query-root-duration", "trace-query-discovery", "thread-query", "trace-query-tenant-scope", "feedback", "trace-query-context-ids"];
|
|
39
39
|
createSpan(args: CreateSpanArgs): Promise<void>;
|
|
40
40
|
batchCreateSpans(args: BatchCreateSpansArgs): Promise<void>;
|
|
41
41
|
batchDeleteTraces(args: BatchDeleteTracesArgs): Promise<void>;
|
|
@@ -45,7 +45,9 @@ export declare class ObservabilityStorageDuckDB extends ObservabilityStorage {
|
|
|
45
45
|
getTrace(args: GetTraceArgs): Promise<GetTraceResponse | null>;
|
|
46
46
|
getTraceLight(args: GetTraceArgs): Promise<GetTraceLightResponse | null>;
|
|
47
47
|
listTraces(args: ListTracesArgs): Promise<ListTracesResponse>;
|
|
48
|
+
querySpans(plan: TrustedSpanQueryPlan): Promise<SpanQueryResponse>;
|
|
48
49
|
queryTraces(plan: TrustedTraceQueryPlan): Promise<TraceQueryResponse>;
|
|
50
|
+
aggregateTraces(plan: TrustedTraceAggregatePlan): Promise<TraceAggregateResponse>;
|
|
49
51
|
getTraceQueryObservedFields(plan: TrustedTraceQueryObservedFieldsPlan): Promise<TraceQueryObservedFieldsResult>;
|
|
50
52
|
getTraceQueryValues(plan: TrustedTraceQueryValuesPlan): Promise<GetTraceQueryValuesResponse>;
|
|
51
53
|
queryThreads(plan: TrustedThreadQueryPlan): Promise<QueryThreadsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/observability/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,EAC9B,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,2BAA2B,EAC3B,4BAA4B,EAC5B,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,sBAAsB,EACtB,mCAAmC,EACnC,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/observability/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { TrustedSpanQueryPlan } from '@mastra/core/storage';
|
|
2
|
+
import type { DuckDBConnection } from '../../db/index.js';
|
|
3
|
+
export declare function compileDuckDBSpanQuery(plan: TrustedSpanQueryPlan): {
|
|
4
|
+
sql: string;
|
|
5
|
+
values: unknown[];
|
|
6
|
+
};
|
|
7
|
+
export declare function querySpans(db: DuckDBConnection, plan: TrustedSpanQueryPlan): Promise<{
|
|
8
|
+
spans: {
|
|
9
|
+
organizationId: string | null;
|
|
10
|
+
resourceId: string | null;
|
|
11
|
+
traceId: string;
|
|
12
|
+
spanId: string;
|
|
13
|
+
parentSpanId: string | null;
|
|
14
|
+
name: string;
|
|
15
|
+
spanType: string;
|
|
16
|
+
status: "error" | "success";
|
|
17
|
+
startedAt: string;
|
|
18
|
+
endedAt: string;
|
|
19
|
+
durationMs: number;
|
|
20
|
+
entityType: string | null;
|
|
21
|
+
entityId: string | null;
|
|
22
|
+
entityName: string | null;
|
|
23
|
+
model: string | null;
|
|
24
|
+
provider: string | null;
|
|
25
|
+
inputPreview: string | null;
|
|
26
|
+
inputTruncated: boolean;
|
|
27
|
+
outputPreview: string | null;
|
|
28
|
+
outputTruncated: boolean;
|
|
29
|
+
cost: {
|
|
30
|
+
state: "available";
|
|
31
|
+
amount: number;
|
|
32
|
+
currency: string;
|
|
33
|
+
} | {
|
|
34
|
+
state: "missing";
|
|
35
|
+
} | {
|
|
36
|
+
state: "unavailable";
|
|
37
|
+
};
|
|
38
|
+
}[];
|
|
39
|
+
page: {
|
|
40
|
+
next: string | null;
|
|
41
|
+
};
|
|
42
|
+
}>;
|
|
43
|
+
//# sourceMappingURL=span-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-query.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/observability/span-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAuDjD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB;;;EAsChE;AAQD,wBAAsB,UAAU,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDhF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TraceAggregateResponse, TrustedTraceAggregatePlan } from '@mastra/core/storage';
|
|
2
|
+
import type { DuckDBConnection } from '../../db/index.js';
|
|
3
|
+
import type { CompiledDuckDBTraceQuery } from './trace-query.js';
|
|
4
|
+
/**
|
|
5
|
+
* Compiles a trusted aggregate plan. The plan's caps are enforced by the planner and trusted here.
|
|
6
|
+
*
|
|
7
|
+
* Every candidate root is first reduced to a `facts` row (dimension values, duration, error flag,
|
|
8
|
+
* countDistinct inputs, bucket) so grouping, measures, and joins only reference plain columns.
|
|
9
|
+
* Without `interval`, groups are filtered, ordered, and limited in one grouped select. With
|
|
10
|
+
* `interval`, a `ranked` CTE ranks groups on whole-window measures, then only the top `limit`
|
|
11
|
+
* groups are expanded into per-bucket rows.
|
|
12
|
+
*
|
|
13
|
+
* Parameters are positional, so `values` is appended in the order placeholders appear in the text.
|
|
14
|
+
*/
|
|
15
|
+
export declare function compileDuckDBTraceAggregate(plan: TrustedTraceAggregatePlan): CompiledDuckDBTraceQuery;
|
|
16
|
+
export declare function aggregateTraces(db: DuckDBConnection, plan: TrustedTraceAggregatePlan): Promise<TraceAggregateResponse>;
|
|
17
|
+
//# sourceMappingURL=trace-aggregate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-aggregate.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/observability/trace-aggregate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,sBAAsB,EAKtB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAUvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AA2B9D;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,yBAAyB,GAAG,wBAAwB,CAmJrG;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAuCjC"}
|
|
@@ -1,15 +1,40 @@
|
|
|
1
|
-
import type { GetTraceQueryValuesResponse, QueryThreadsResult, TraceQueryObservedFieldsResult, TraceQueryResponse, TrustedThreadQueryPlan, TrustedTraceQueryObservedFieldsPlan, TrustedTraceQueryPlan, TrustedTraceQueryValuesPlan } from '@mastra/core/storage';
|
|
1
|
+
import type { GetTraceQueryValuesResponse, QueryThreadsResult, TraceQueryObservedFieldsResult, TraceQueryResponse, TrustedThreadQueryPlan, TrustedTraceQueryObservedFieldsPlan, TrustedTraceQueryPlan, TrustedTraceQueryValuesPlan, TrustedTraceQueryScalarPredicate } from '@mastra/core/storage';
|
|
2
2
|
import type { DuckDBConnection } from '../../db/index.js';
|
|
3
|
+
type SqlFragment = {
|
|
4
|
+
sql: string;
|
|
5
|
+
values: unknown[];
|
|
6
|
+
};
|
|
7
|
+
export declare const TRACE_STATUS_SQL = "CASE WHEN r.error IS NOT NULL THEN 'error' ELSE 'success' END";
|
|
8
|
+
export declare function durationMsSql(startedAt: string, endedAt: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Top-level string metadata value of the trace root (alias `r`). The SQL binds the JSON path
|
|
11
|
+
* twice; use `traceMetadataPathValues` for the matching parameters.
|
|
12
|
+
*/
|
|
13
|
+
export declare const TRACE_METADATA_VALUE_SQL = "NULLIF(trim(CASE WHEN json_type(r.metadata, ?) = 'VARCHAR' THEN json_extract_string(r.metadata, ?) END), '')";
|
|
14
|
+
export declare function traceMetadataPathValues(key: string): [string, string];
|
|
3
15
|
export interface CompiledDuckDBTraceQuery {
|
|
4
16
|
sql: string;
|
|
5
17
|
values: unknown[];
|
|
6
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Builds the trace selection stages shared by trace queries and trace aggregates: root scope,
|
|
21
|
+
* related-collection scopes, and a `candidates` CTE projecting `columns` from matching roots.
|
|
22
|
+
*/
|
|
23
|
+
export declare function compileDuckDBTraceCandidates(plan: Pick<TrustedTraceQueryPlan, 'timeRange' | 'where' | 'scope'>, columns: string): {
|
|
24
|
+
ctes: string[];
|
|
25
|
+
values: unknown[];
|
|
26
|
+
};
|
|
7
27
|
export declare function compileDuckDBTraceQuery(plan: TrustedTraceQueryPlan): CompiledDuckDBTraceQuery;
|
|
8
28
|
export declare function compileDuckDBThreadQuery(plan: TrustedThreadQueryPlan): CompiledDuckDBTraceQuery;
|
|
9
29
|
export declare function compileDuckDBTraceQueryObservedFields(plan: TrustedTraceQueryObservedFieldsPlan): CompiledDuckDBTraceQuery;
|
|
10
30
|
export declare function compileDuckDBTraceQueryValues(plan: TrustedTraceQueryValuesPlan): CompiledDuckDBTraceQuery;
|
|
31
|
+
export declare function isDuckDBResourceLimit(error: unknown): boolean;
|
|
11
32
|
export declare function getTraceQueryObservedFields(db: DuckDBConnection, plan: TrustedTraceQueryObservedFieldsPlan): Promise<TraceQueryObservedFieldsResult>;
|
|
12
33
|
export declare function getTraceQueryValues(db: DuckDBConnection, plan: TrustedTraceQueryValuesPlan): Promise<GetTraceQueryValuesResponse>;
|
|
34
|
+
export declare function asIsoTimestamp(value: unknown): string;
|
|
13
35
|
export declare function queryTraces(db: DuckDBConnection, plan: TrustedTraceQueryPlan): Promise<TraceQueryResponse>;
|
|
14
36
|
export declare function queryThreads(db: DuckDBConnection, plan: TrustedThreadQueryPlan): Promise<QueryThreadsResult>;
|
|
37
|
+
/** Compile a span-row filter with exactly the same rules as trace span predicates. */
|
|
38
|
+
export declare function compileSpanQueryPredicate(predicate: TrustedTraceQueryScalarPredicate): SqlFragment;
|
|
39
|
+
export {};
|
|
15
40
|
//# sourceMappingURL=trace-query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-query.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/observability/trace-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAElB,8BAA8B,EAI9B,kBAAkB,EAKlB,sBAAsB,EACtB,mCAAmC,EACnC,qBAAqB,EACrB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"trace-query.d.ts","sourceRoot":"","sources":["../../../../src/storage/domains/observability/trace-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAElB,8BAA8B,EAI9B,kBAAkB,EAKlB,sBAAsB,EACtB,mCAAmC,EACnC,qBAAqB,EACrB,2BAA2B,EAE3B,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,KAAK,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAGtD,eAAO,MAAM,gBAAgB,kEAAkE,CAAC;AAEhG,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,iHAAiH,CAAC;AAEvJ,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGrE;AAiTD,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAiLD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC,EAClE,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAsBvC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,wBAAwB,CAwF7F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,wBAAwB,CA+C/F;AAoBD,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,mCAAmC,GACxC,wBAAwB,CAqB1B;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,2BAA2B,GAAG,wBAAwB,CAoCzG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7D;AAcD,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,mCAAmC,GACxC,OAAO,CAAC,8BAA8B,CAAC,CAUzC;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,gBAAgB,EACpB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CAOtC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0GhH;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAclH;AAED,sFAAsF;AACtF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,gCAAgC,GAAG,WAAW,CAElG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/storage/features.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,uCAC+D,CAAC"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export declare class ObservabilityStorageDuckDB extends CoreObservabilityStorage
|
|
|
37
37
|
getTraceLight(...args: Parameters<ObservabilityStoreImpl['getTraceLight']>): ReturnType<ObservabilityStoreImpl['getTraceLight']>;
|
|
38
38
|
listTraces(...args: Parameters<ObservabilityStoreImpl['listTraces']>): ReturnType<ObservabilityStoreImpl['listTraces']>;
|
|
39
39
|
queryTraces(...args: Parameters<ObservabilityStoreImpl['queryTraces']>): ReturnType<ObservabilityStoreImpl['queryTraces']>;
|
|
40
|
+
aggregateTraces(...args: Parameters<ObservabilityStoreImpl['aggregateTraces']>): ReturnType<ObservabilityStoreImpl['aggregateTraces']>;
|
|
41
|
+
querySpans(...args: Parameters<ObservabilityStoreImpl['querySpans']>): ReturnType<ObservabilityStoreImpl['querySpans']>;
|
|
40
42
|
getTraceQueryObservedFields(...args: Parameters<ObservabilityStoreImpl['getTraceQueryObservedFields']>): ReturnType<ObservabilityStoreImpl['getTraceQueryObservedFields']>;
|
|
41
43
|
getTraceQueryValues(...args: Parameters<ObservabilityStoreImpl['getTraceQueryValues']>): ReturnType<ObservabilityStoreImpl['getTraceQueryValues']>;
|
|
42
44
|
queryThreads(...args: Parameters<ObservabilityStoreImpl['queryThreads']>): ReturnType<ObservabilityStoreImpl['queryThreads']>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,IAAI,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAE9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,IAAI,8BAA8B,EAC7D,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/duckdb",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0-alpha.1",
|
|
4
4
|
"description": "DuckDB vector store provider for Mastra - embedded high-performance vector storage with HNSW indexing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"tsx": "^4.23.1",
|
|
33
33
|
"typescript": "^7.0.2",
|
|
34
34
|
"vitest": "4.1.11",
|
|
35
|
-
"@internal/lint": "0.0.
|
|
36
|
-
"@internal/storage-test-utils": "0.0.
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
35
|
+
"@internal/lint": "0.0.140",
|
|
36
|
+
"@internal/storage-test-utils": "0.0.136",
|
|
37
|
+
"@mastra/core": "1.75.0-alpha.3",
|
|
38
|
+
"@internal/types-builder": "0.0.115"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@mastra/core": ">=1.68.0-0 <2.0.0-0"
|
package/dist/db-BWgrbB_u.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db-BWgrbB_u.js","names":[],"sources":["../src/storage/db/index.ts"],"sourcesContent":["import { DuckDBInstance, DuckDBTimestampValue, DuckDBTimestampTZValue } from '@duckdb/node-api';\nimport type { DuckDBPreparedStatement } from '@duckdb/node-api';\nimport { MastraBase } from '@mastra/core/base';\n\n/**\n * Bind a single parameter to a prepared statement using explicit typed methods.\n * This avoids the \"Cannot create values of type ANY\" error that occurs when\n * DuckDB cannot infer parameter types from SQL context (e.g. json_extract_string).\n */\nexport function bindParam(stmt: DuckDBPreparedStatement, index: number, value: unknown): void {\n if (value === null || value === undefined) {\n stmt.bindNull(index);\n } else if (typeof value === 'string') {\n stmt.bindVarchar(index, value);\n } else if (typeof value === 'number') {\n if (Number.isInteger(value) && value >= -2147483648 && value <= 2147483647) {\n stmt.bindInteger(index, value);\n } else {\n stmt.bindDouble(index, value);\n }\n } else if (typeof value === 'boolean') {\n stmt.bindBoolean(index, value);\n } else if (typeof value === 'bigint') {\n stmt.bindBigInt(index, value);\n } else if (value instanceof Date) {\n stmt.bindTimestamp(index, new DuckDBTimestampValue(BigInt(value.getTime()) * 1000n));\n } else if (value instanceof DuckDBTimestampValue) {\n stmt.bindTimestamp(index, value);\n } else if (value instanceof DuckDBTimestampTZValue) {\n stmt.bindTimestampTZ(index, value);\n } else {\n // Fallback: serialize to JSON string\n stmt.bindVarchar(index, JSON.stringify(value));\n }\n}\n\n/** Convert DuckDB-specific return types to plain JS types */\nfunction toJsValue(val: unknown): unknown {\n if (val === null || val === undefined) return val;\n // DuckDBTimestampValue → Date (micros since epoch)\n if (val instanceof DuckDBTimestampValue) {\n return new Date(Number(val.micros / 1000n));\n }\n // BigInt → Number (safe for values we care about)\n if (typeof val === 'bigint') {\n return Number(val);\n }\n return val;\n}\n\n/** Configuration for the DuckDB database connection. */\nexport interface DuckDBStorageConfig {\n /** Path to the DuckDB file. Defaults to 'mastra.duckdb'. Use ':memory:' for ephemeral. */\n path?: string;\n /**\n * Maximum memory DuckDB may use (e.g. '2GB', '512MB').\n * @default '2GB'\n * DuckDB's own default is 80% of system RAM, which is far too aggressive for\n * a store embedded in an application server — a single query against a large\n * database can balloon the process by several GB and push the host into\n * swap. Larger-than-memory operations spill to disk for file-backed\n * databases. Raise this for dedicated analytical workloads.\n */\n memoryLimit?: string;\n /**\n * Number of threads DuckDB may use. Defaults to DuckDB's default (one per\n * CPU core). Lower this to keep queries from monopolizing all cores of a\n * shared application server.\n */\n threads?: number;\n}\n\nconst DEFAULT_MEMORY_LIMIT = '2GB';\n\n/**\n * Shared DuckDB connection management for Mastra storage.\n * Defaults to a local file (`mastra.duckdb`) when no path is provided.\n * Pass `path: ':memory:'` for an ephemeral in-memory database.\n */\nexport class DuckDBConnection extends MastraBase {\n private instance: DuckDBInstance | null = null;\n private initialized = false;\n private initPromise: Promise<void> | null = null;\n private path: string;\n private instanceOptions: Record<string, string>;\n\n constructor(config: DuckDBStorageConfig = {}) {\n super({ component: 'STORAGE', name: 'DUCKDB' });\n this.path = config.path ?? 'mastra.duckdb';\n this.instanceOptions = {\n max_memory: config.memoryLimit ?? DEFAULT_MEMORY_LIMIT,\n ...(config.threads !== undefined ? { threads: String(config.threads) } : {}),\n };\n }\n\n private async initialize(): Promise<void> {\n if (this.initialized && this.instance) return;\n\n if (this.initPromise) {\n await this.initPromise;\n if (this.instance) return;\n this.initPromise = null;\n this.initialized = false;\n }\n\n this.initPromise = (async () => {\n try {\n this.instance = await DuckDBInstance.create(this.path, this.instanceOptions);\n this.initialized = true;\n } catch (error) {\n this.instance = null;\n this.initialized = false;\n this.initPromise = null;\n throw error;\n }\n })();\n\n return this.initPromise;\n }\n\n /** Create a new connection to the DuckDB instance, initializing if needed. */\n async getConnection() {\n await this.initialize();\n if (!this.instance) {\n throw new Error('DuckDB instance not initialized');\n }\n return this.instance.connect();\n }\n\n private closeConnection(connection: unknown): void {\n const conn = connection as {\n closeSync?: () => void;\n disconnectSync?: () => void;\n close?: () => void;\n disconnect?: () => void;\n };\n try {\n if (typeof conn?.closeSync === 'function') {\n conn.closeSync();\n return;\n }\n if (typeof conn?.disconnectSync === 'function') {\n conn.disconnectSync();\n return;\n }\n if (typeof conn?.close === 'function') {\n conn.close();\n return;\n }\n if (typeof conn?.disconnect === 'function') {\n conn.disconnect();\n }\n } catch {\n // Ignore close failures to avoid masking query/execute errors.\n }\n }\n\n /**\n * Execute a SQL query and return results as objects.\n */\n async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const connection = await this.getConnection();\n try {\n if (params.length === 0) {\n const result = await connection.run(sql);\n const rows = await result.getRows();\n const columns = result.columnNames();\n return rows.map(row => {\n const obj: Record<string, unknown> = {};\n columns.forEach((col, i) => {\n obj[col] = toJsValue(row[i]);\n });\n return obj as T;\n });\n }\n\n let paramIndex = 0;\n const preparedSql = sql.replace(/\\?/g, () => `$${++paramIndex}`);\n const stmt = await connection.prepare(preparedSql);\n for (let i = 0; i < params.length; i++) {\n bindParam(stmt, i + 1, params[i]);\n }\n const result = await stmt.run();\n const rows = await result.getRows();\n const columns = result.columnNames();\n return rows.map(row => {\n const obj: Record<string, unknown> = {};\n columns.forEach((col, i) => {\n obj[col] = toJsValue(row[i]);\n });\n return obj as T;\n });\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /**\n * Execute a SQL statement without returning results.\n */\n async execute(sql: string, params: unknown[] = []): Promise<void> {\n const connection = await this.getConnection();\n try {\n if (params.length === 0) {\n await connection.run(sql);\n return;\n }\n let paramIndex = 0;\n const preparedSql = sql.replace(/\\?/g, () => `$${++paramIndex}`);\n const stmt = await connection.prepare(preparedSql);\n for (let i = 0; i < params.length; i++) {\n bindParam(stmt, i + 1, params[i]);\n }\n await stmt.run();\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /** Delete one bounded retention batch and return the number of rows removed. */\n async pruneBatch({\n tableName,\n column,\n cutoff,\n limit,\n }: {\n tableName: string;\n column: string;\n cutoff: Date;\n limit: number;\n }): Promise<number> {\n const identifier = /^[A-Za-z_][A-Za-z0-9_]*$/;\n if (!identifier.test(tableName) || !identifier.test(column)) {\n throw new Error(`Invalid retention identifier: ${tableName}.${column}`);\n }\n\n const rows = await this.query(\n `DELETE FROM ${tableName}\n WHERE rowid IN (\n SELECT rowid FROM ${tableName}\n WHERE ${column} < ?\n ORDER BY ${column}\n LIMIT ?\n )\n RETURNING 1 AS deleted`,\n [cutoff, limit],\n );\n return rows.length;\n }\n\n /** Execute parameterized statements atomically using a single DuckDB connection. */\n async executeTransaction(statements: readonly { sql: string; params?: readonly unknown[] }[]): Promise<void> {\n if (statements.length === 0) return;\n\n const connection = await this.getConnection();\n try {\n await connection.run('BEGIN TRANSACTION');\n for (const statement of statements) {\n const params = statement.params ?? [];\n if (params.length === 0) {\n await connection.run(statement.sql);\n continue;\n }\n let paramIndex = 0;\n const preparedSql = statement.sql.replace(/\\?/g, () => `$${++paramIndex}`);\n const prepared = await connection.prepare(preparedSql);\n for (let i = 0; i < params.length; i++) {\n bindParam(prepared, i + 1, params[i]);\n }\n await prepared.run();\n }\n await connection.run('COMMIT');\n } catch (error) {\n await connection.run('ROLLBACK').catch(() => undefined);\n throw error;\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /**\n * Execute multiple SQL statements in order using a single DuckDB connection.\n *\n * This is intended for schema setup/migrations where statements have no\n * parameters and must remain ordered, but opening a connection per statement\n * would dominate initialization cost. Blank statements are skipped. Like\n * calling execute() repeatedly, this does not wrap statements in a transaction,\n * so prior statements can remain applied if a later statement fails.\n */\n async executeBatch(sqlStatements: readonly string[]): Promise<void> {\n const statements = sqlStatements.map(statement => statement.trim()).filter(Boolean);\n if (statements.length === 0) return;\n\n const connection = await this.getConnection();\n try {\n const sql =\n statements.map((statement, i) => `-- executeBatch statement ${i + 1}\\n${statement}`).join('\\n;\\n') + '\\n;';\n await connection.run(sql);\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /**\n * Escape a value for safe inline SQL use.\n * DuckDB prepared statements can't handle NULL for parameters typed as ANY,\n * so for complex INSERT/UPDATE operations we inline values safely.\n */\n static sqlValue(value: unknown): string {\n if (value === null || value === undefined) return 'NULL';\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) return 'NULL';\n return String(value);\n }\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE';\n if (value instanceof Date) return `'${value.toISOString()}'::TIMESTAMP`;\n if (typeof value === 'string') return `'${value.replace(/'/g, \"''\")}'`;\n // Objects/arrays → JSON string\n return `'${JSON.stringify(value).replace(/'/g, \"''\")}'`;\n }\n\n /** Release the DuckDB instance, allowing garbage collection. */\n async close(): Promise<void> {\n if (this.instance) {\n try {\n const instance = this.instance as unknown as { closeSync?: () => void; close?: () => void };\n if (typeof instance.closeSync === 'function') {\n instance.closeSync();\n } else if (typeof instance.close === 'function') {\n instance.close();\n }\n } catch {\n // Ignore close failures to allow cleanup of references.\n }\n this.instance = null;\n this.initialized = false;\n this.initPromise = null;\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/db-zp2htaur.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db-zp2htaur.cjs","names":["DuckDBTimestampValue","DuckDBTimestampTZValue","MastraBase","DuckDBInstance"],"sources":["../src/storage/db/index.ts"],"sourcesContent":["import { DuckDBInstance, DuckDBTimestampValue, DuckDBTimestampTZValue } from '@duckdb/node-api';\nimport type { DuckDBPreparedStatement } from '@duckdb/node-api';\nimport { MastraBase } from '@mastra/core/base';\n\n/**\n * Bind a single parameter to a prepared statement using explicit typed methods.\n * This avoids the \"Cannot create values of type ANY\" error that occurs when\n * DuckDB cannot infer parameter types from SQL context (e.g. json_extract_string).\n */\nexport function bindParam(stmt: DuckDBPreparedStatement, index: number, value: unknown): void {\n if (value === null || value === undefined) {\n stmt.bindNull(index);\n } else if (typeof value === 'string') {\n stmt.bindVarchar(index, value);\n } else if (typeof value === 'number') {\n if (Number.isInteger(value) && value >= -2147483648 && value <= 2147483647) {\n stmt.bindInteger(index, value);\n } else {\n stmt.bindDouble(index, value);\n }\n } else if (typeof value === 'boolean') {\n stmt.bindBoolean(index, value);\n } else if (typeof value === 'bigint') {\n stmt.bindBigInt(index, value);\n } else if (value instanceof Date) {\n stmt.bindTimestamp(index, new DuckDBTimestampValue(BigInt(value.getTime()) * 1000n));\n } else if (value instanceof DuckDBTimestampValue) {\n stmt.bindTimestamp(index, value);\n } else if (value instanceof DuckDBTimestampTZValue) {\n stmt.bindTimestampTZ(index, value);\n } else {\n // Fallback: serialize to JSON string\n stmt.bindVarchar(index, JSON.stringify(value));\n }\n}\n\n/** Convert DuckDB-specific return types to plain JS types */\nfunction toJsValue(val: unknown): unknown {\n if (val === null || val === undefined) return val;\n // DuckDBTimestampValue → Date (micros since epoch)\n if (val instanceof DuckDBTimestampValue) {\n return new Date(Number(val.micros / 1000n));\n }\n // BigInt → Number (safe for values we care about)\n if (typeof val === 'bigint') {\n return Number(val);\n }\n return val;\n}\n\n/** Configuration for the DuckDB database connection. */\nexport interface DuckDBStorageConfig {\n /** Path to the DuckDB file. Defaults to 'mastra.duckdb'. Use ':memory:' for ephemeral. */\n path?: string;\n /**\n * Maximum memory DuckDB may use (e.g. '2GB', '512MB').\n * @default '2GB'\n * DuckDB's own default is 80% of system RAM, which is far too aggressive for\n * a store embedded in an application server — a single query against a large\n * database can balloon the process by several GB and push the host into\n * swap. Larger-than-memory operations spill to disk for file-backed\n * databases. Raise this for dedicated analytical workloads.\n */\n memoryLimit?: string;\n /**\n * Number of threads DuckDB may use. Defaults to DuckDB's default (one per\n * CPU core). Lower this to keep queries from monopolizing all cores of a\n * shared application server.\n */\n threads?: number;\n}\n\nconst DEFAULT_MEMORY_LIMIT = '2GB';\n\n/**\n * Shared DuckDB connection management for Mastra storage.\n * Defaults to a local file (`mastra.duckdb`) when no path is provided.\n * Pass `path: ':memory:'` for an ephemeral in-memory database.\n */\nexport class DuckDBConnection extends MastraBase {\n private instance: DuckDBInstance | null = null;\n private initialized = false;\n private initPromise: Promise<void> | null = null;\n private path: string;\n private instanceOptions: Record<string, string>;\n\n constructor(config: DuckDBStorageConfig = {}) {\n super({ component: 'STORAGE', name: 'DUCKDB' });\n this.path = config.path ?? 'mastra.duckdb';\n this.instanceOptions = {\n max_memory: config.memoryLimit ?? DEFAULT_MEMORY_LIMIT,\n ...(config.threads !== undefined ? { threads: String(config.threads) } : {}),\n };\n }\n\n private async initialize(): Promise<void> {\n if (this.initialized && this.instance) return;\n\n if (this.initPromise) {\n await this.initPromise;\n if (this.instance) return;\n this.initPromise = null;\n this.initialized = false;\n }\n\n this.initPromise = (async () => {\n try {\n this.instance = await DuckDBInstance.create(this.path, this.instanceOptions);\n this.initialized = true;\n } catch (error) {\n this.instance = null;\n this.initialized = false;\n this.initPromise = null;\n throw error;\n }\n })();\n\n return this.initPromise;\n }\n\n /** Create a new connection to the DuckDB instance, initializing if needed. */\n async getConnection() {\n await this.initialize();\n if (!this.instance) {\n throw new Error('DuckDB instance not initialized');\n }\n return this.instance.connect();\n }\n\n private closeConnection(connection: unknown): void {\n const conn = connection as {\n closeSync?: () => void;\n disconnectSync?: () => void;\n close?: () => void;\n disconnect?: () => void;\n };\n try {\n if (typeof conn?.closeSync === 'function') {\n conn.closeSync();\n return;\n }\n if (typeof conn?.disconnectSync === 'function') {\n conn.disconnectSync();\n return;\n }\n if (typeof conn?.close === 'function') {\n conn.close();\n return;\n }\n if (typeof conn?.disconnect === 'function') {\n conn.disconnect();\n }\n } catch {\n // Ignore close failures to avoid masking query/execute errors.\n }\n }\n\n /**\n * Execute a SQL query and return results as objects.\n */\n async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const connection = await this.getConnection();\n try {\n if (params.length === 0) {\n const result = await connection.run(sql);\n const rows = await result.getRows();\n const columns = result.columnNames();\n return rows.map(row => {\n const obj: Record<string, unknown> = {};\n columns.forEach((col, i) => {\n obj[col] = toJsValue(row[i]);\n });\n return obj as T;\n });\n }\n\n let paramIndex = 0;\n const preparedSql = sql.replace(/\\?/g, () => `$${++paramIndex}`);\n const stmt = await connection.prepare(preparedSql);\n for (let i = 0; i < params.length; i++) {\n bindParam(stmt, i + 1, params[i]);\n }\n const result = await stmt.run();\n const rows = await result.getRows();\n const columns = result.columnNames();\n return rows.map(row => {\n const obj: Record<string, unknown> = {};\n columns.forEach((col, i) => {\n obj[col] = toJsValue(row[i]);\n });\n return obj as T;\n });\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /**\n * Execute a SQL statement without returning results.\n */\n async execute(sql: string, params: unknown[] = []): Promise<void> {\n const connection = await this.getConnection();\n try {\n if (params.length === 0) {\n await connection.run(sql);\n return;\n }\n let paramIndex = 0;\n const preparedSql = sql.replace(/\\?/g, () => `$${++paramIndex}`);\n const stmt = await connection.prepare(preparedSql);\n for (let i = 0; i < params.length; i++) {\n bindParam(stmt, i + 1, params[i]);\n }\n await stmt.run();\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /** Delete one bounded retention batch and return the number of rows removed. */\n async pruneBatch({\n tableName,\n column,\n cutoff,\n limit,\n }: {\n tableName: string;\n column: string;\n cutoff: Date;\n limit: number;\n }): Promise<number> {\n const identifier = /^[A-Za-z_][A-Za-z0-9_]*$/;\n if (!identifier.test(tableName) || !identifier.test(column)) {\n throw new Error(`Invalid retention identifier: ${tableName}.${column}`);\n }\n\n const rows = await this.query(\n `DELETE FROM ${tableName}\n WHERE rowid IN (\n SELECT rowid FROM ${tableName}\n WHERE ${column} < ?\n ORDER BY ${column}\n LIMIT ?\n )\n RETURNING 1 AS deleted`,\n [cutoff, limit],\n );\n return rows.length;\n }\n\n /** Execute parameterized statements atomically using a single DuckDB connection. */\n async executeTransaction(statements: readonly { sql: string; params?: readonly unknown[] }[]): Promise<void> {\n if (statements.length === 0) return;\n\n const connection = await this.getConnection();\n try {\n await connection.run('BEGIN TRANSACTION');\n for (const statement of statements) {\n const params = statement.params ?? [];\n if (params.length === 0) {\n await connection.run(statement.sql);\n continue;\n }\n let paramIndex = 0;\n const preparedSql = statement.sql.replace(/\\?/g, () => `$${++paramIndex}`);\n const prepared = await connection.prepare(preparedSql);\n for (let i = 0; i < params.length; i++) {\n bindParam(prepared, i + 1, params[i]);\n }\n await prepared.run();\n }\n await connection.run('COMMIT');\n } catch (error) {\n await connection.run('ROLLBACK').catch(() => undefined);\n throw error;\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /**\n * Execute multiple SQL statements in order using a single DuckDB connection.\n *\n * This is intended for schema setup/migrations where statements have no\n * parameters and must remain ordered, but opening a connection per statement\n * would dominate initialization cost. Blank statements are skipped. Like\n * calling execute() repeatedly, this does not wrap statements in a transaction,\n * so prior statements can remain applied if a later statement fails.\n */\n async executeBatch(sqlStatements: readonly string[]): Promise<void> {\n const statements = sqlStatements.map(statement => statement.trim()).filter(Boolean);\n if (statements.length === 0) return;\n\n const connection = await this.getConnection();\n try {\n const sql =\n statements.map((statement, i) => `-- executeBatch statement ${i + 1}\\n${statement}`).join('\\n;\\n') + '\\n;';\n await connection.run(sql);\n } finally {\n this.closeConnection(connection);\n }\n }\n\n /**\n * Escape a value for safe inline SQL use.\n * DuckDB prepared statements can't handle NULL for parameters typed as ANY,\n * so for complex INSERT/UPDATE operations we inline values safely.\n */\n static sqlValue(value: unknown): string {\n if (value === null || value === undefined) return 'NULL';\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) return 'NULL';\n return String(value);\n }\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE';\n if (value instanceof Date) return `'${value.toISOString()}'::TIMESTAMP`;\n if (typeof value === 'string') return `'${value.replace(/'/g, \"''\")}'`;\n // Objects/arrays → JSON string\n return `'${JSON.stringify(value).replace(/'/g, \"''\")}'`;\n }\n\n /** Release the DuckDB instance, allowing garbage collection. */\n async close(): Promise<void> {\n if (this.instance) {\n try {\n const instance = this.instance as unknown as { closeSync?: () => void; close?: () => void };\n if (typeof instance.closeSync === 'function') {\n instance.closeSync();\n } else if (typeof instance.close === 'function') {\n instance.close();\n }\n } catch {\n // Ignore close failures to allow cleanup of references.\n }\n this.instance = null;\n this.initialized = false;\n this.initPromise = null;\n }\n }\n}\n"],"mappings":"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"}
|