@mastra/libsql 1.27.0 → 1.27.1-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/_types/@internal_core/dist/knowledge-compat/index.d.ts +48 -50
- package/dist/_types/@internal_core/dist/memory/index.d.ts +12 -15
- package/dist/docs/SKILL.md +2 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-agents-human-in-the-loop.md +27 -5
- package/dist/docs/references/docs-agents-networks.md +1 -1
- package/dist/docs/references/docs-memory-memory-processors.md +7 -7
- package/dist/docs/references/docs-memory-message-history.md +8 -5
- package/dist/docs/references/docs-memory-multi-user-threads.md +1 -1
- package/dist/docs/references/docs-memory-overview.md +6 -0
- package/dist/docs/references/docs-memory-semantic-recall.md +7 -3
- package/dist/docs/references/docs-memory-working-memory.md +2 -2
- package/dist/docs/references/docs-signals-overview.md +94 -0
- package/dist/docs/references/docs-storage.md +1 -1
- package/dist/docs/references/docs-studio-editor.md +39 -23
- package/dist/docs/references/integrations-channels-github.md +2 -2
- package/dist/docs/references/integrations-databases-dynamodb.md +4 -4
- package/dist/docs/references/reference-core-mastra-class.md +7 -5
- package/dist/docs/references/reference-memory-memory-class.md +5 -5
- package/dist/docs/references/reference-rag-retrieval.md +24 -13
- package/dist/docs/references/reference-storage-retention.md +1 -1
- package/dist/docs/references/reference-vectors-libsql.md +1 -1
- package/dist/index.cjs +137 -105
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +137 -105
- package/dist/index.js.map +1 -1
- package/dist/storage/db/index.d.ts +12 -0
- package/dist/storage/db/index.d.ts.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/index.d.ts +2 -1
- package/dist/storage/domains/observability/index.d.ts.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts +9 -3
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { coreFeatures } from "@mastra/core/features";
|
|
|
13
13
|
import { MessageList } from "@mastra/core/agent";
|
|
14
14
|
import { saveScorePayloadSchema } from "@mastra/core/evals";
|
|
15
15
|
import { skillSnapshotFieldValuesEqual } from "@mastra/core/storage/domains/skills";
|
|
16
|
-
|
|
16
|
+
// src/shared/file-transaction-gate.ts
|
|
17
17
|
/** Interactive transactions open in this process, per database file. */
|
|
18
18
|
const openTransactions = /* @__PURE__ */ new Map();
|
|
19
19
|
/** The database file a local `file:` url points at, or `undefined` for anything else. */
|
|
@@ -150,8 +150,7 @@ function gateIfLocalFile(client, url, options) {
|
|
|
150
150
|
const key = localDatabaseFileKey(url);
|
|
151
151
|
return key ? gateLocalFileClient(client, key, options) : client;
|
|
152
152
|
}
|
|
153
|
-
|
|
154
|
-
//#region src/shared/reset-after-busy-client.ts
|
|
153
|
+
// src/shared/reset-after-busy-client.ts
|
|
155
154
|
function isBusy(error) {
|
|
156
155
|
return error?.code === "SQLITE_BUSY";
|
|
157
156
|
}
|
|
@@ -354,8 +353,7 @@ function resetConnectionsAfterBusy(client, { afterReset, maxWaitMs = 5e3 } = {})
|
|
|
354
353
|
}
|
|
355
354
|
} });
|
|
356
355
|
}
|
|
357
|
-
|
|
358
|
-
//#region src/shared/single-connection-client.ts
|
|
356
|
+
// src/shared/single-connection-client.ts
|
|
359
357
|
/**
|
|
360
358
|
* Whether `@libsql/client` backs this database with exactly one connection.
|
|
361
359
|
*
|
|
@@ -433,8 +431,7 @@ function gateSingleConnectionClient(client) {
|
|
|
433
431
|
}
|
|
434
432
|
} });
|
|
435
433
|
}
|
|
436
|
-
|
|
437
|
-
//#region src/vector/filter.ts
|
|
434
|
+
// src/vector/filter.ts
|
|
438
435
|
/**
|
|
439
436
|
* Translates MongoDB-style filters to LibSQL compatible filters.
|
|
440
437
|
*
|
|
@@ -480,8 +477,7 @@ var LibSQLFilterTranslator = class extends BaseFilterTranslator {
|
|
|
480
477
|
return result;
|
|
481
478
|
}
|
|
482
479
|
};
|
|
483
|
-
|
|
484
|
-
//#region src/vector/sql-builder.ts
|
|
480
|
+
// src/vector/sql-builder.ts
|
|
485
481
|
const createBasicOperator = (symbol) => {
|
|
486
482
|
return (key, value) => {
|
|
487
483
|
const jsonPath = getJsonPath(key);
|
|
@@ -771,7 +767,7 @@ function handleLogicalOperator(key, value, parentPath) {
|
|
|
771
767
|
const values = [];
|
|
772
768
|
const joinOperator = key === "$or" || key === "$nor" ? "OR" : "AND";
|
|
773
769
|
const joined = (Array.isArray(value) ? value.flatMap((f) => {
|
|
774
|
-
const branch = (
|
|
770
|
+
const branch = (f ? Object.entries(f) : []).map(([k, v]) => buildCondition$1(k, v, key));
|
|
775
771
|
if (branch.length <= 1) return branch;
|
|
776
772
|
return [{
|
|
777
773
|
sql: `(${branch.map((c) => c.sql).join(" AND ")})`,
|
|
@@ -815,8 +811,7 @@ const processOperator = (key, operator, operatorValue) => {
|
|
|
815
811
|
values: Array.isArray(transformed) ? transformed : [transformed]
|
|
816
812
|
};
|
|
817
813
|
};
|
|
818
|
-
|
|
819
|
-
//#region src/vector/write-lock.ts
|
|
814
|
+
// src/vector/write-lock.ts
|
|
820
815
|
const databaseWriteChains = /* @__PURE__ */ new Map();
|
|
821
816
|
async function getLocalFileDatabaseKey({ url, syncUrl, cwd }) {
|
|
822
817
|
if (!url.startsWith("file:") || url.includes(":memory:") || syncUrl) return;
|
|
@@ -840,8 +835,7 @@ function withLocalFileDatabaseWriteLock(key, fn) {
|
|
|
840
835
|
});
|
|
841
836
|
return result;
|
|
842
837
|
}
|
|
843
|
-
|
|
844
|
-
//#region src/vector/index.ts
|
|
838
|
+
// src/vector/index.ts
|
|
845
839
|
var LibSQLVector = class extends MastraVector {
|
|
846
840
|
turso;
|
|
847
841
|
maxRetries;
|
|
@@ -1459,8 +1453,7 @@ var LibSQLVector = class extends MastraVector {
|
|
|
1459
1453
|
});
|
|
1460
1454
|
}
|
|
1461
1455
|
};
|
|
1462
|
-
|
|
1463
|
-
//#region src/storage/db/write-lock.ts
|
|
1456
|
+
// src/storage/db/write-lock.ts
|
|
1464
1457
|
/**
|
|
1465
1458
|
* Per-client write serialization.
|
|
1466
1459
|
*
|
|
@@ -1496,8 +1489,7 @@ function withClientWriteLock(client, fn) {
|
|
|
1496
1489
|
clientWriteChains.set(client, result.then(() => void 0, () => void 0));
|
|
1497
1490
|
return result;
|
|
1498
1491
|
}
|
|
1499
|
-
|
|
1500
|
-
//#region src/storage/db/run-fencing.ts
|
|
1492
|
+
// src/storage/db/run-fencing.ts
|
|
1501
1493
|
/**
|
|
1502
1494
|
* Epoch milliseconds on the database clock. `julianday('now')` rather than
|
|
1503
1495
|
* `unixepoch('subsec')`, which needs SQLite 3.42 on the server.
|
|
@@ -1564,8 +1556,7 @@ function withRunFence(client, check, write) {
|
|
|
1564
1556
|
});
|
|
1565
1557
|
});
|
|
1566
1558
|
}
|
|
1567
|
-
|
|
1568
|
-
//#region src/storage/db/utils.ts
|
|
1559
|
+
// src/storage/db/utils.ts
|
|
1569
1560
|
const MAX_DEPTH = 100;
|
|
1570
1561
|
/**
|
|
1571
1562
|
* Safely serializes a value to JSON string with pre-sanitization.
|
|
@@ -1838,8 +1829,7 @@ function transformFromSqlRow({ tableName, sqlRow }) {
|
|
|
1838
1829
|
}
|
|
1839
1830
|
return result;
|
|
1840
1831
|
}
|
|
1841
|
-
|
|
1842
|
-
//#region src/storage/db/index.ts
|
|
1832
|
+
// src/storage/db/index.ts
|
|
1843
1833
|
/**
|
|
1844
1834
|
* Default SQLite `busy_timeout` (ms) for local LibSQL connections. Chosen to
|
|
1845
1835
|
* comfortably exceed the write-retry backoff window so contended writes block
|
|
@@ -2068,6 +2058,41 @@ var LibSQLDB = class extends MastraBase {
|
|
|
2068
2058
|
});
|
|
2069
2059
|
}
|
|
2070
2060
|
/**
|
|
2061
|
+
* Updates multiple records in one write batch, with the same retry behavior as
|
|
2062
|
+
* {@link batchUpdate}. Returns, in input order, whether each update changed a row,
|
|
2063
|
+
* so callers can put extra conditions in `keys` (for example `{ endedAt: null }`).
|
|
2064
|
+
*/
|
|
2065
|
+
async batchUpdateReportingChanges({ tableName, updates }) {
|
|
2066
|
+
return this.executeWriteOperationWithRetry(async () => {
|
|
2067
|
+
const changed = updates.map(() => false);
|
|
2068
|
+
const statements = [];
|
|
2069
|
+
const statementIndexes = [];
|
|
2070
|
+
for (const [index, { keys, data }] of updates.entries()) {
|
|
2071
|
+
const filteredData = await this.filterRecordToKnownColumns(tableName, data);
|
|
2072
|
+
if (Object.keys(filteredData).length === 0) continue;
|
|
2073
|
+
statements.push(prepareUpdateStatement({
|
|
2074
|
+
tableName,
|
|
2075
|
+
updates: filteredData,
|
|
2076
|
+
keys
|
|
2077
|
+
}));
|
|
2078
|
+
statementIndexes.push(index);
|
|
2079
|
+
}
|
|
2080
|
+
if (statements.length === 0) return changed;
|
|
2081
|
+
(await withClientWriteLock(this.client, () => this.client.batch(statements, "write"))).forEach((result, i) => {
|
|
2082
|
+
const index = statementIndexes[i];
|
|
2083
|
+
if (index !== void 0) changed[index] = result.rowsAffected > 0;
|
|
2084
|
+
});
|
|
2085
|
+
return changed;
|
|
2086
|
+
}, `batch update in table ${tableName}`).catch((error) => {
|
|
2087
|
+
throw new MastraError({
|
|
2088
|
+
id: createStorageErrorId("LIBSQL", "BATCH_UPDATE_REPORTING_CHANGES", "FAILED"),
|
|
2089
|
+
domain: ErrorDomain.STORAGE,
|
|
2090
|
+
category: ErrorCategory.THIRD_PARTY,
|
|
2091
|
+
details: { tableName }
|
|
2092
|
+
}, error);
|
|
2093
|
+
});
|
|
2094
|
+
}
|
|
2095
|
+
/**
|
|
2071
2096
|
* Internal batch delete implementation without retry logic.
|
|
2072
2097
|
* Each record can be deleted based on single or composite keys.
|
|
2073
2098
|
*/
|
|
@@ -2200,7 +2225,7 @@ var LibSQLDB = class extends MastraBase {
|
|
|
2200
2225
|
* @returns The total count of matching records
|
|
2201
2226
|
*/
|
|
2202
2227
|
async selectTotalCount({ tableName, whereClause }) {
|
|
2203
|
-
const statement = `SELECT COUNT(*) as count FROM ${parseSqlIdentifier(tableName, "table name")} ${whereClause ?
|
|
2228
|
+
const statement = `SELECT COUNT(*) as count FROM ${parseSqlIdentifier(tableName, "table name")} ${whereClause ? whereClause.sql : ""}`;
|
|
2204
2229
|
const result = await this.client.execute({
|
|
2205
2230
|
sql: statement,
|
|
2206
2231
|
args: whereClause?.args ?? []
|
|
@@ -2572,8 +2597,7 @@ MIGRATION REQUIRED: Duplicate spans detected in ${TABLE_SPANS}\n================
|
|
|
2572
2597
|
await this.client.execute(`CREATE INDEX IF NOT EXISTS "${parsedIndex}" ON "${parsedTable}" ("${parsedColumn}")`);
|
|
2573
2598
|
}
|
|
2574
2599
|
};
|
|
2575
|
-
|
|
2576
|
-
//#region src/storage/domains/agents/index.ts
|
|
2600
|
+
// src/storage/domains/agents/index.ts
|
|
2577
2601
|
var AgentsLibSQL = class extends AgentsStorage {
|
|
2578
2602
|
#db;
|
|
2579
2603
|
#client;
|
|
@@ -3317,8 +3341,7 @@ var AgentsLibSQL = class extends AgentsStorage {
|
|
|
3317
3341
|
};
|
|
3318
3342
|
}
|
|
3319
3343
|
};
|
|
3320
|
-
|
|
3321
|
-
//#region src/storage/retention.ts
|
|
3344
|
+
// src/storage/retention.ts
|
|
3322
3345
|
async function ensureAnchorIndex(db, target, logger) {
|
|
3323
3346
|
if (!target.indexed) return;
|
|
3324
3347
|
try {
|
|
@@ -3358,8 +3381,7 @@ function resolveTargets({ policies, descriptor, order }) {
|
|
|
3358
3381
|
order
|
|
3359
3382
|
});
|
|
3360
3383
|
}
|
|
3361
|
-
|
|
3362
|
-
//#region src/storage/domains/background-tasks/index.ts
|
|
3384
|
+
// src/storage/domains/background-tasks/index.ts
|
|
3363
3385
|
function serializeJson(v) {
|
|
3364
3386
|
if (v === void 0) return null;
|
|
3365
3387
|
let serialized;
|
|
@@ -3684,8 +3706,7 @@ var BackgroundTasksLibSQL = class BackgroundTasksLibSQL extends BackgroundTasksS
|
|
|
3684
3706
|
return Number(result.rows[0]?.count ?? 0);
|
|
3685
3707
|
}
|
|
3686
3708
|
};
|
|
3687
|
-
|
|
3688
|
-
//#region src/storage/domains/blobs/index.ts
|
|
3709
|
+
// src/storage/domains/blobs/index.ts
|
|
3689
3710
|
var BlobsLibSQL = class extends BlobStore {
|
|
3690
3711
|
#db;
|
|
3691
3712
|
#client;
|
|
@@ -3783,8 +3804,7 @@ var BlobsLibSQL = class extends BlobStore {
|
|
|
3783
3804
|
};
|
|
3784
3805
|
}
|
|
3785
3806
|
};
|
|
3786
|
-
|
|
3787
|
-
//#region src/storage/domains/channels/index.ts
|
|
3807
|
+
// src/storage/domains/channels/index.ts
|
|
3788
3808
|
var ChannelsLibSQL = class extends ChannelsStorage {
|
|
3789
3809
|
#db;
|
|
3790
3810
|
#client;
|
|
@@ -3932,8 +3952,7 @@ var ChannelsLibSQL = class extends ChannelsStorage {
|
|
|
3932
3952
|
};
|
|
3933
3953
|
}
|
|
3934
3954
|
};
|
|
3935
|
-
|
|
3936
|
-
//#region src/storage/domains/utils.ts
|
|
3955
|
+
// src/storage/domains/utils.ts
|
|
3937
3956
|
/**
|
|
3938
3957
|
* Build additional `AND col = ?` conditions for a tenancy read-scope filter.
|
|
3939
3958
|
* Returned in the shape expected by libsql's parameterized SQL builders.
|
|
@@ -3974,8 +3993,7 @@ function buildScopedWhere(idColumn, idValue, filters) {
|
|
|
3974
3993
|
args: [idValue, ...params]
|
|
3975
3994
|
};
|
|
3976
3995
|
}
|
|
3977
|
-
|
|
3978
|
-
//#region src/storage/domains/datasets/index.ts
|
|
3996
|
+
// src/storage/domains/datasets/index.ts
|
|
3979
3997
|
/** Serialize a value for a jsonb column. Returns null for null/undefined. */
|
|
3980
3998
|
function jsonbArg(value) {
|
|
3981
3999
|
return value === void 0 || value === null ? null : JSON.stringify(value);
|
|
@@ -5243,8 +5261,7 @@ var DatasetsLibSQL = class extends DatasetsStorage {
|
|
|
5243
5261
|
}
|
|
5244
5262
|
}
|
|
5245
5263
|
};
|
|
5246
|
-
|
|
5247
|
-
//#region src/storage/domains/experiments/index.ts
|
|
5264
|
+
// src/storage/domains/experiments/index.ts
|
|
5248
5265
|
const DEFAULT_PRUNE_BATCH_SIZE = 1e3;
|
|
5249
5266
|
const TAGS_IS_JSON = `CASE typeof(tags) WHEN 'blob' THEN 1 WHEN 'text' THEN json_valid(tags) ELSE 0 END`;
|
|
5250
5267
|
var ExperimentsLibSQL = class extends ExperimentsStorage {
|
|
@@ -6098,8 +6115,7 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
|
|
|
6098
6115
|
}
|
|
6099
6116
|
}
|
|
6100
6117
|
};
|
|
6101
|
-
|
|
6102
|
-
//#region src/storage/domains/favorites/index.ts
|
|
6118
|
+
// src/storage/domains/favorites/index.ts
|
|
6103
6119
|
/**
|
|
6104
6120
|
* Maps a favorite entity type to its parent entity table.
|
|
6105
6121
|
*/
|
|
@@ -6352,8 +6368,7 @@ var FavoritesLibSQL = class extends FavoritesStorage {
|
|
|
6352
6368
|
}
|
|
6353
6369
|
}
|
|
6354
6370
|
};
|
|
6355
|
-
|
|
6356
|
-
//#region src/storage/domains/harness/index.ts
|
|
6371
|
+
// src/storage/domains/harness/index.ts
|
|
6357
6372
|
const toDate$1 = (value) => new Date(value);
|
|
6358
6373
|
const toOptionalDate = (value) => {
|
|
6359
6374
|
if (value == null) return void 0;
|
|
@@ -6497,8 +6512,7 @@ var HarnessLibSQL = class HarnessLibSQL extends HarnessStorage {
|
|
|
6497
6512
|
})).map(rowToSession);
|
|
6498
6513
|
}
|
|
6499
6514
|
};
|
|
6500
|
-
|
|
6501
|
-
//#region ../../packages/_internal-core/dist/knowledge-compat/index.js
|
|
6515
|
+
// ../../packages/_internal-core/dist/knowledge-compat/index.js
|
|
6502
6516
|
const KNOWLEDGE_V2_CORE_FEATURE = "knowledge-v2";
|
|
6503
6517
|
/** Hard cap on scope nodes returned by one `listScopeNodes` read. */
|
|
6504
6518
|
const MAX_KNOWLEDGE_SCOPE_NODES = 1e3;
|
|
@@ -7132,8 +7146,7 @@ function createKnowledgeV2CoreLoader(features, loadStorageModule) {
|
|
|
7132
7146
|
return knowledgeV2Core;
|
|
7133
7147
|
};
|
|
7134
7148
|
}
|
|
7135
|
-
|
|
7136
|
-
//#region src/storage/domains/knowledge/index.ts
|
|
7149
|
+
// src/storage/domains/knowledge/index.ts
|
|
7137
7150
|
const loadKnowledgeV2Core = createKnowledgeV2CoreLoader(coreFeatures, () => import("@mastra/core/storage"));
|
|
7138
7151
|
async function assertKnowledgeDescriptionWithinBoundCompat(description) {
|
|
7139
7152
|
const { assertKnowledgeDescriptionWithinBound } = await loadKnowledgeV2Core();
|
|
@@ -8468,8 +8481,7 @@ var KnowledgeLibSQL = class extends KnowledgeStorage {
|
|
|
8468
8481
|
});
|
|
8469
8482
|
}
|
|
8470
8483
|
};
|
|
8471
|
-
|
|
8472
|
-
//#region src/storage/domains/mcp-clients/index.ts
|
|
8484
|
+
// src/storage/domains/mcp-clients/index.ts
|
|
8473
8485
|
var MCPClientsLibSQL = class extends MCPClientsStorage {
|
|
8474
8486
|
#db;
|
|
8475
8487
|
#client;
|
|
@@ -8892,8 +8904,7 @@ var MCPClientsLibSQL = class extends MCPClientsStorage {
|
|
|
8892
8904
|
};
|
|
8893
8905
|
}
|
|
8894
8906
|
};
|
|
8895
|
-
|
|
8896
|
-
//#region src/storage/domains/mcp-servers/index.ts
|
|
8907
|
+
// src/storage/domains/mcp-servers/index.ts
|
|
8897
8908
|
var MCPServersLibSQL = class extends MCPServersStorage {
|
|
8898
8909
|
#db;
|
|
8899
8910
|
#client;
|
|
@@ -9323,8 +9334,7 @@ var MCPServersLibSQL = class extends MCPServersStorage {
|
|
|
9323
9334
|
};
|
|
9324
9335
|
}
|
|
9325
9336
|
};
|
|
9326
|
-
|
|
9327
|
-
//#region ../../packages/_internal-core/dist/memory/index.js
|
|
9337
|
+
// ../../packages/_internal-core/dist/memory/index.js
|
|
9328
9338
|
/**
|
|
9329
9339
|
* Shared rules for observational memory lifecycle writes. Every storage adapter applies
|
|
9330
9340
|
* these inside its own atomic section (lock, transaction, or conditional update), so the
|
|
@@ -9409,8 +9419,7 @@ function isAppendOnlySince(storedObservations, snapshotObservations) {
|
|
|
9409
9419
|
const snapshot = snapshotObservations ?? "";
|
|
9410
9420
|
return stored === snapshot || stored.startsWith(snapshot);
|
|
9411
9421
|
}
|
|
9412
|
-
|
|
9413
|
-
//#region src/storage/domains/memory/index.ts
|
|
9422
|
+
// src/storage/domains/memory/index.ts
|
|
9414
9423
|
/**
|
|
9415
9424
|
* Local constant for the observational memory table name.
|
|
9416
9425
|
* Defined locally to avoid a static import that crashes on older @mastra/core
|
|
@@ -11772,8 +11781,7 @@ var MemoryLibSQL = class MemoryLibSQL extends MemoryStorage {
|
|
|
11772
11781
|
}
|
|
11773
11782
|
}
|
|
11774
11783
|
};
|
|
11775
|
-
|
|
11776
|
-
//#region src/storage/domains/notifications/index.ts
|
|
11784
|
+
// src/storage/domains/notifications/index.ts
|
|
11777
11785
|
/** Ids per UPDATE statement — keeps bind parameters well under SQLite's per-statement limit. */
|
|
11778
11786
|
const BULK_ID_BATCH_SIZE = 500;
|
|
11779
11787
|
const statusTimestamp = (status, now) => {
|
|
@@ -12144,8 +12152,7 @@ var NotificationsLibSQL = class NotificationsLibSQL extends NotificationsStorage
|
|
|
12144
12152
|
return row ? rowToNotification(row) : void 0;
|
|
12145
12153
|
}
|
|
12146
12154
|
};
|
|
12147
|
-
|
|
12148
|
-
//#region src/storage/domains/observability/index.ts
|
|
12155
|
+
// src/storage/domains/observability/index.ts
|
|
12149
12156
|
var ObservabilityLibSQL = class ObservabilityLibSQL extends ObservabilityStorage {
|
|
12150
12157
|
/**
|
|
12151
12158
|
* Spans are the only physical table; traces are derived from them. Spans
|
|
@@ -12590,24 +12597,27 @@ var ObservabilityLibSQL = class ObservabilityLibSQL extends ObservabilityStorage
|
|
|
12590
12597
|
}, error);
|
|
12591
12598
|
}
|
|
12592
12599
|
}
|
|
12593
|
-
|
|
12600
|
+
#toSpanUpdates(records) {
|
|
12594
12601
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
12602
|
+
return records.map((record) => {
|
|
12603
|
+
const data = { ...record.updates };
|
|
12604
|
+
if (data.endedAt instanceof Date) data.endedAt = data.endedAt.toISOString();
|
|
12605
|
+
if (data.startedAt instanceof Date) data.startedAt = data.startedAt.toISOString();
|
|
12606
|
+
data.updatedAt = now;
|
|
12607
|
+
return {
|
|
12608
|
+
keys: {
|
|
12609
|
+
spanId: record.spanId,
|
|
12610
|
+
traceId: record.traceId
|
|
12611
|
+
},
|
|
12612
|
+
data
|
|
12613
|
+
};
|
|
12614
|
+
});
|
|
12615
|
+
}
|
|
12616
|
+
async batchUpdateSpans(args) {
|
|
12595
12617
|
try {
|
|
12596
12618
|
return this.#db.batchUpdate({
|
|
12597
12619
|
tableName: TABLE_SPANS,
|
|
12598
|
-
updates: args.records
|
|
12599
|
-
const data = { ...record.updates };
|
|
12600
|
-
if (data.endedAt instanceof Date) data.endedAt = data.endedAt.toISOString();
|
|
12601
|
-
if (data.startedAt instanceof Date) data.startedAt = data.startedAt.toISOString();
|
|
12602
|
-
data.updatedAt = now;
|
|
12603
|
-
return {
|
|
12604
|
-
keys: {
|
|
12605
|
-
spanId: record.spanId,
|
|
12606
|
-
traceId: record.traceId
|
|
12607
|
-
},
|
|
12608
|
-
data
|
|
12609
|
-
};
|
|
12610
|
-
})
|
|
12620
|
+
updates: this.#toSpanUpdates(args.records)
|
|
12611
12621
|
});
|
|
12612
12622
|
} catch (error) {
|
|
12613
12623
|
throw new MastraError({
|
|
@@ -12617,6 +12627,30 @@ var ObservabilityLibSQL = class ObservabilityLibSQL extends ObservabilityStorage
|
|
|
12617
12627
|
}, error);
|
|
12618
12628
|
}
|
|
12619
12629
|
}
|
|
12630
|
+
async batchUpdateUnendedSpans(args) {
|
|
12631
|
+
try {
|
|
12632
|
+
const changed = await this.#db.batchUpdateReportingChanges({
|
|
12633
|
+
tableName: TABLE_SPANS,
|
|
12634
|
+
updates: this.#toSpanUpdates(args.records).map((update) => ({
|
|
12635
|
+
...update,
|
|
12636
|
+
keys: {
|
|
12637
|
+
...update.keys,
|
|
12638
|
+
endedAt: null
|
|
12639
|
+
}
|
|
12640
|
+
}))
|
|
12641
|
+
});
|
|
12642
|
+
return { updated: args.records.filter((_, index) => changed[index]).map(({ traceId, spanId }) => ({
|
|
12643
|
+
traceId,
|
|
12644
|
+
spanId
|
|
12645
|
+
})) };
|
|
12646
|
+
} catch (error) {
|
|
12647
|
+
throw new MastraError({
|
|
12648
|
+
id: createStorageErrorId("LIBSQL", "BATCH_UPDATE_UNENDED_SPANS", "FAILED"),
|
|
12649
|
+
domain: ErrorDomain.STORAGE,
|
|
12650
|
+
category: ErrorCategory.USER
|
|
12651
|
+
}, error);
|
|
12652
|
+
}
|
|
12653
|
+
}
|
|
12620
12654
|
async batchDeleteTraces(args) {
|
|
12621
12655
|
this.assertUnscopedBatchDeleteTraces(args);
|
|
12622
12656
|
try {
|
|
@@ -12634,8 +12668,7 @@ var ObservabilityLibSQL = class ObservabilityLibSQL extends ObservabilityStorage
|
|
|
12634
12668
|
}
|
|
12635
12669
|
}
|
|
12636
12670
|
};
|
|
12637
|
-
|
|
12638
|
-
//#region src/storage/domains/prompt-blocks/index.ts
|
|
12671
|
+
// src/storage/domains/prompt-blocks/index.ts
|
|
12639
12672
|
var PromptBlocksLibSQL = class extends PromptBlocksStorage {
|
|
12640
12673
|
#db;
|
|
12641
12674
|
#client;
|
|
@@ -13061,8 +13094,7 @@ var PromptBlocksLibSQL = class extends PromptBlocksStorage {
|
|
|
13061
13094
|
};
|
|
13062
13095
|
}
|
|
13063
13096
|
};
|
|
13064
|
-
|
|
13065
|
-
//#region src/storage/domains/schedules/index.ts
|
|
13097
|
+
// src/storage/domains/schedules/index.ts
|
|
13066
13098
|
function parseJson$1(val) {
|
|
13067
13099
|
if (val == null) return void 0;
|
|
13068
13100
|
if (typeof val === "string") try {
|
|
@@ -13410,8 +13442,7 @@ var SchedulesLibSQL = class SchedulesLibSQL extends SchedulesStorage {
|
|
|
13410
13442
|
})).rows.map((r) => rowToTrigger(r));
|
|
13411
13443
|
}
|
|
13412
13444
|
};
|
|
13413
|
-
|
|
13414
|
-
//#region src/storage/domains/scorer-definitions/index.ts
|
|
13445
|
+
// src/storage/domains/scorer-definitions/index.ts
|
|
13415
13446
|
var ScorerDefinitionsLibSQL = class extends ScorerDefinitionsStorage {
|
|
13416
13447
|
#db;
|
|
13417
13448
|
#client;
|
|
@@ -13838,8 +13869,7 @@ var ScorerDefinitionsLibSQL = class extends ScorerDefinitionsStorage {
|
|
|
13838
13869
|
};
|
|
13839
13870
|
}
|
|
13840
13871
|
};
|
|
13841
|
-
|
|
13842
|
-
//#region src/storage/domains/scores/index.ts
|
|
13872
|
+
// src/storage/domains/scores/index.ts
|
|
13843
13873
|
/** Appends multi-tenant scope conditions (`?` placeholders). Mutates inputs. */
|
|
13844
13874
|
function appendTenancyConditions(conditions, args, filters) {
|
|
13845
13875
|
if (filters?.organizationId !== void 0) {
|
|
@@ -14175,8 +14205,7 @@ var ScoresLibSQL = class ScoresLibSQL extends ScoresStorage {
|
|
|
14175
14205
|
}
|
|
14176
14206
|
}
|
|
14177
14207
|
};
|
|
14178
|
-
|
|
14179
|
-
//#region src/storage/domains/skills/index.ts
|
|
14208
|
+
// src/storage/domains/skills/index.ts
|
|
14180
14209
|
/**
|
|
14181
14210
|
* Config fields that live on version rows (from StorageSkillSnapshotType).
|
|
14182
14211
|
*/
|
|
@@ -14742,8 +14771,7 @@ var SkillsLibSQL = class extends SkillsStorage {
|
|
|
14742
14771
|
};
|
|
14743
14772
|
}
|
|
14744
14773
|
};
|
|
14745
|
-
|
|
14746
|
-
//#region src/storage/domains/thread-state/index.ts
|
|
14774
|
+
// src/storage/domains/thread-state/index.ts
|
|
14747
14775
|
/**
|
|
14748
14776
|
* LibSQL implementation of {@link ThreadStateStorage}.
|
|
14749
14777
|
*
|
|
@@ -14875,8 +14903,7 @@ var ThreadStateLibSQL = class ThreadStateLibSQL extends ThreadStateStorage {
|
|
|
14875
14903
|
}
|
|
14876
14904
|
}
|
|
14877
14905
|
};
|
|
14878
|
-
|
|
14879
|
-
//#region src/storage/domains/tool-provider-connections/index.ts
|
|
14906
|
+
// src/storage/domains/tool-provider-connections/index.ts
|
|
14880
14907
|
function normaliseScope(raw) {
|
|
14881
14908
|
const value = raw == null ? "per-author" : String(raw);
|
|
14882
14909
|
if (value === "shared") return "shared";
|
|
@@ -15086,8 +15113,7 @@ var ToolProviderConnectionsLibSQL = class extends ToolProviderConnectionsStorage
|
|
|
15086
15113
|
}
|
|
15087
15114
|
}
|
|
15088
15115
|
};
|
|
15089
|
-
|
|
15090
|
-
//#region src/storage/domains/workflow-definitions/index.ts
|
|
15116
|
+
// src/storage/domains/workflow-definitions/index.ts
|
|
15091
15117
|
function parseJson(val, column, rowId) {
|
|
15092
15118
|
if (val == null) return void 0;
|
|
15093
15119
|
if (typeof val === "string") try {
|
|
@@ -15255,8 +15281,7 @@ var WorkflowDefinitionsLibSQL = class extends WorkflowDefinitionsStorage {
|
|
|
15255
15281
|
});
|
|
15256
15282
|
}
|
|
15257
15283
|
};
|
|
15258
|
-
|
|
15259
|
-
//#region src/storage/domains/workflows/index.ts
|
|
15284
|
+
// src/storage/domains/workflows/index.ts
|
|
15260
15285
|
const RUN_OWNER_COLUMNS = `generation, ownerId, leaseExpiresAt, ${DB_NOW_MS} AS nowMs`;
|
|
15261
15286
|
function toRunOwnershipRecord(runId, row) {
|
|
15262
15287
|
const leaseExpiresAt = row.leaseExpiresAt === null ? null : Number(row.leaseExpiresAt);
|
|
@@ -15314,6 +15339,9 @@ var WorkflowsLibSQL = class WorkflowsLibSQL extends WorkflowsStorage {
|
|
|
15314
15339
|
supportsConcurrentUpdates() {
|
|
15315
15340
|
return true;
|
|
15316
15341
|
}
|
|
15342
|
+
supportsGuardedSnapshotWrites() {
|
|
15343
|
+
return true;
|
|
15344
|
+
}
|
|
15317
15345
|
parseWorkflowRun(row) {
|
|
15318
15346
|
let parsedSnapshot = row.snapshot;
|
|
15319
15347
|
if (typeof parsedSnapshot === "string") try {
|
|
@@ -15587,7 +15615,7 @@ var WorkflowsLibSQL = class WorkflowsLibSQL extends WorkflowsStorage {
|
|
|
15587
15615
|
}
|
|
15588
15616
|
}), "updateWorkflowState");
|
|
15589
15617
|
}
|
|
15590
|
-
async persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot, createdAt, updatedAt, fence }) {
|
|
15618
|
+
async persistWorkflowSnapshot({ workflowName, runId, resourceId, snapshot, createdAt, updatedAt, fence, expectedStatus }) {
|
|
15591
15619
|
const now = /* @__PURE__ */ new Date();
|
|
15592
15620
|
const createdAtValue = (createdAt ?? now).toISOString();
|
|
15593
15621
|
const updatedAtValue = (updatedAt ?? now).toISOString();
|
|
@@ -15595,21 +15623,30 @@ var WorkflowsLibSQL = class WorkflowsLibSQL extends WorkflowsStorage {
|
|
|
15595
15623
|
workflowName,
|
|
15596
15624
|
runId
|
|
15597
15625
|
});
|
|
15626
|
+
const expected = expectedStatus === void 0 ? [] : Array.isArray(expectedStatus) ? expectedStatus : [expectedStatus];
|
|
15627
|
+
const guard = expectedStatus === void 0 ? "" : expected.length ? ` WHERE json_extract(${TABLE_WORKFLOW_SNAPSHOT}.snapshot, '$.status') IN (${expected.map(() => "?").join(", ")})` : " WHERE 0";
|
|
15598
15628
|
const check = this.#runFenceCheck(fence, runId, "persistWorkflowSnapshot");
|
|
15599
|
-
await this.executeWithRetry(() => withRunFence(this.#client, check, (writer) => writer.execute({
|
|
15629
|
+
return (await this.executeWithRetry(() => withRunFence(this.#client, check, (writer) => writer.execute({
|
|
15600
15630
|
sql: `INSERT INTO ${TABLE_WORKFLOW_SNAPSHOT} (workflow_name, run_id, resourceId, snapshot, createdAt, updatedAt)
|
|
15601
15631
|
VALUES (?, ?, ?, jsonb(?), ?, ?)
|
|
15602
15632
|
ON CONFLICT(workflow_name, run_id)
|
|
15603
|
-
DO UPDATE SET resourceId = COALESCE(excluded.resourceId, ${TABLE_WORKFLOW_SNAPSHOT}.resourceId), snapshot = excluded.snapshot, updatedAt = excluded.updatedAt`,
|
|
15633
|
+
DO UPDATE SET resourceId = COALESCE(excluded.resourceId, ${TABLE_WORKFLOW_SNAPSHOT}.resourceId), snapshot = excluded.snapshot, updatedAt = excluded.updatedAt${guard}`,
|
|
15604
15634
|
args: [
|
|
15605
15635
|
workflowName,
|
|
15606
15636
|
runId,
|
|
15607
15637
|
resourceId ?? null,
|
|
15608
15638
|
safeStringify(snapshot),
|
|
15609
15639
|
createdAtValue,
|
|
15610
|
-
updatedAtValue
|
|
15640
|
+
updatedAtValue,
|
|
15641
|
+
...expected
|
|
15611
15642
|
]
|
|
15612
|
-
})), "persistWorkflowSnapshot");
|
|
15643
|
+
})), "persistWorkflowSnapshot")).rowsAffected > 0;
|
|
15644
|
+
}
|
|
15645
|
+
async loadWorkflowRunStatus({ workflowName, runId }) {
|
|
15646
|
+
return (await this.#client.execute({
|
|
15647
|
+
sql: `SELECT json_extract(snapshot, '$.status') AS status FROM ${TABLE_WORKFLOW_SNAPSHOT} WHERE workflow_name = ? AND run_id = ?`,
|
|
15648
|
+
args: [workflowName, runId]
|
|
15649
|
+
})).rows?.[0]?.status ?? null;
|
|
15613
15650
|
}
|
|
15614
15651
|
async loadWorkflowSnapshot({ workflowName, runId }) {
|
|
15615
15652
|
this.logger.debug("Loading workflow snapshot", {
|
|
@@ -15737,8 +15774,7 @@ var WorkflowsLibSQL = class WorkflowsLibSQL extends WorkflowsStorage {
|
|
|
15737
15774
|
}
|
|
15738
15775
|
}
|
|
15739
15776
|
};
|
|
15740
|
-
|
|
15741
|
-
//#region src/storage/domains/workspaces/index.ts
|
|
15777
|
+
// src/storage/domains/workspaces/index.ts
|
|
15742
15778
|
/**
|
|
15743
15779
|
* Config fields that live on version rows (from StorageWorkspaceSnapshotType).
|
|
15744
15780
|
*/
|
|
@@ -16227,8 +16263,7 @@ var WorkspacesLibSQL = class extends WorkspacesStorage {
|
|
|
16227
16263
|
};
|
|
16228
16264
|
}
|
|
16229
16265
|
};
|
|
16230
|
-
|
|
16231
|
-
//#region src/storage/factory-storage.ts
|
|
16266
|
+
// src/storage/factory-storage.ts
|
|
16232
16267
|
const IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
16233
16268
|
const COLUMN_DDL = {
|
|
16234
16269
|
text: "TEXT",
|
|
@@ -16643,8 +16678,7 @@ var LibSQLFactoryStorage = class extends FactoryStorage {
|
|
|
16643
16678
|
}
|
|
16644
16679
|
}
|
|
16645
16680
|
};
|
|
16646
|
-
|
|
16647
|
-
//#region src/storage/index.ts
|
|
16681
|
+
// src/storage/index.ts
|
|
16648
16682
|
const REMOTE_INIT_CONCURRENCY = 5;
|
|
16649
16683
|
const REMOTE_INIT_MAX_ATTEMPTS = 3;
|
|
16650
16684
|
const DEFAULT_LOCAL_CACHE_SIZE = -16e3;
|
|
@@ -16861,8 +16895,7 @@ var LibSQLStore = class extends MastraCompositeStore {
|
|
|
16861
16895
|
if (!this.client.closed) await this.client.close();
|
|
16862
16896
|
}
|
|
16863
16897
|
};
|
|
16864
|
-
|
|
16865
|
-
//#region src/vector/prompt.ts
|
|
16898
|
+
// src/vector/prompt.ts
|
|
16866
16899
|
/**
|
|
16867
16900
|
* Vector store specific prompt that details supported operators and examples.
|
|
16868
16901
|
* This prompt helps users construct valid filters for LibSQL Vector.
|
|
@@ -16964,7 +16997,6 @@ Example Complex Query:
|
|
|
16964
16997
|
]}
|
|
16965
16998
|
]
|
|
16966
16999
|
}`;
|
|
16967
|
-
//#endregion
|
|
16968
17000
|
export { AgentsLibSQL, BackgroundTasksLibSQL, BlobsLibSQL, ChannelsLibSQL, DatasetsLibSQL, LibSQLStore as DefaultStorage, LibSQLStore, ExperimentsLibSQL, FavoritesLibSQL, HarnessLibSQL, KnowledgeLibSQL, LIBSQL_PROMPT, LibSQLFactoryStorage, LibSQLVector, MCPClientsLibSQL, MCPServersLibSQL, MemoryLibSQL, NotificationsLibSQL, ObservabilityLibSQL, PromptBlocksLibSQL, SchedulesLibSQL, ScorerDefinitionsLibSQL, ScoresLibSQL, SkillsLibSQL, ThreadStateLibSQL, ToolProviderConnectionsLibSQL, WorkflowDefinitionsLibSQL, WorkflowsLibSQL, WorkspacesLibSQL };
|
|
16969
17001
|
|
|
16970
17002
|
//# sourceMappingURL=index.js.map
|