@mastra/libsql 0.0.0-structured-output-issue-20260227214155 → 0.0.0-structured-output-errors-20260409185629
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +344 -3
- package/LICENSE.md +15 -0
- package/dist/docs/SKILL.md +15 -19
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-agents-agent-approval.md +136 -185
- package/dist/docs/references/docs-agents-networks.md +90 -207
- package/dist/docs/references/docs-memory-memory-processors.md +15 -15
- package/dist/docs/references/docs-memory-message-history.md +10 -8
- package/dist/docs/references/docs-memory-overview.md +219 -24
- package/dist/docs/references/docs-memory-semantic-recall.md +54 -29
- package/dist/docs/references/docs-memory-storage.md +14 -16
- package/dist/docs/references/docs-memory-working-memory.md +22 -22
- package/dist/docs/references/docs-rag-retrieval.md +16 -16
- package/dist/docs/references/docs-workflows-snapshots.md +1 -1
- package/dist/docs/references/guides-agent-frameworks-ai-sdk.md +3 -3
- package/dist/docs/references/reference-core-getMemory.md +4 -5
- package/dist/docs/references/reference-core-listMemory.md +3 -4
- package/dist/docs/references/reference-core-mastra-class.md +18 -18
- package/dist/docs/references/reference-memory-memory-class.md +16 -18
- package/dist/docs/references/reference-storage-composite.md +19 -11
- package/dist/docs/references/reference-storage-dynamodb.md +16 -16
- package/dist/docs/references/reference-storage-libsql.md +3 -3
- package/dist/docs/references/reference-vectors-libsql.md +47 -47
- package/dist/index.cjs +512 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +513 -83
- 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/datasets/index.d.ts.map +1 -1
- package/dist/storage/domains/experiments/index.d.ts +3 -1
- package/dist/storage/domains/experiments/index.d.ts.map +1 -1
- package/dist/storage/domains/memory/index.d.ts +5 -2
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/index.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/docs/references/docs-agents-agent-memory.md +0 -209
- package/dist/docs/references/docs-agents-network-approval.md +0 -275
- package/dist/docs/references/docs-observability-overview.md +0 -70
- package/dist/docs/references/docs-observability-tracing-exporters-default.md +0 -209
package/dist/index.cjs
CHANGED
|
@@ -1320,6 +1320,8 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1320
1320
|
maxRetries;
|
|
1321
1321
|
initialBackoffMs;
|
|
1322
1322
|
executeWriteOperationWithRetry;
|
|
1323
|
+
/** Cache of actual table columns: tableName -> Promise<Set<columnName>> (stores in-flight promise to coalesce concurrent calls) */
|
|
1324
|
+
tableColumnsCache = /* @__PURE__ */ new Map();
|
|
1323
1325
|
constructor({
|
|
1324
1326
|
client,
|
|
1325
1327
|
maxRetries,
|
|
@@ -1338,6 +1340,47 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1338
1340
|
initialBackoffMs: this.initialBackoffMs
|
|
1339
1341
|
});
|
|
1340
1342
|
}
|
|
1343
|
+
/**
|
|
1344
|
+
* Gets the set of column names that actually exist in the database table.
|
|
1345
|
+
* Results are cached; the cache is invalidated when alterTable() adds new columns.
|
|
1346
|
+
*/
|
|
1347
|
+
async getTableColumns(tableName) {
|
|
1348
|
+
const cached = this.tableColumnsCache.get(tableName);
|
|
1349
|
+
if (cached) return cached;
|
|
1350
|
+
const promise = (async () => {
|
|
1351
|
+
try {
|
|
1352
|
+
const sanitizedTable = utils.parseSqlIdentifier(tableName, "table name");
|
|
1353
|
+
const result = await this.client.execute({
|
|
1354
|
+
sql: `PRAGMA table_info("${sanitizedTable}")`
|
|
1355
|
+
});
|
|
1356
|
+
const columns = new Set((result.rows || []).map((row) => row.name));
|
|
1357
|
+
if (columns.size === 0) {
|
|
1358
|
+
this.tableColumnsCache.delete(tableName);
|
|
1359
|
+
}
|
|
1360
|
+
return columns;
|
|
1361
|
+
} catch (error) {
|
|
1362
|
+
this.tableColumnsCache.delete(tableName);
|
|
1363
|
+
throw error;
|
|
1364
|
+
}
|
|
1365
|
+
})();
|
|
1366
|
+
this.tableColumnsCache.set(tableName, promise);
|
|
1367
|
+
return promise;
|
|
1368
|
+
}
|
|
1369
|
+
/**
|
|
1370
|
+
* Filters a record to only include columns that exist in the actual database table.
|
|
1371
|
+
* Unknown columns are silently dropped to ensure forward compatibility.
|
|
1372
|
+
*/
|
|
1373
|
+
async filterRecordToKnownColumns(tableName, record) {
|
|
1374
|
+
const knownColumns = await this.getTableColumns(tableName);
|
|
1375
|
+
if (knownColumns.size === 0) return record;
|
|
1376
|
+
const filtered = {};
|
|
1377
|
+
for (const [key, value] of Object.entries(record)) {
|
|
1378
|
+
if (knownColumns.has(key)) {
|
|
1379
|
+
filtered[key] = value;
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
return filtered;
|
|
1383
|
+
}
|
|
1341
1384
|
/**
|
|
1342
1385
|
* Checks if a column exists in the specified table.
|
|
1343
1386
|
*
|
|
@@ -1359,10 +1402,12 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1359
1402
|
tableName,
|
|
1360
1403
|
record
|
|
1361
1404
|
}) {
|
|
1405
|
+
const filteredRecord = await this.filterRecordToKnownColumns(tableName, record);
|
|
1406
|
+
if (Object.keys(filteredRecord).length === 0) return;
|
|
1362
1407
|
await this.client.execute(
|
|
1363
1408
|
prepareStatement({
|
|
1364
1409
|
tableName,
|
|
1365
|
-
record
|
|
1410
|
+
record: filteredRecord
|
|
1366
1411
|
})
|
|
1367
1412
|
);
|
|
1368
1413
|
}
|
|
@@ -1384,7 +1429,9 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1384
1429
|
keys,
|
|
1385
1430
|
data
|
|
1386
1431
|
}) {
|
|
1387
|
-
await this.
|
|
1432
|
+
const filteredData = await this.filterRecordToKnownColumns(tableName, data);
|
|
1433
|
+
if (Object.keys(filteredData).length === 0) return;
|
|
1434
|
+
await this.client.execute(prepareUpdateStatement({ tableName, updates: filteredData, keys }));
|
|
1388
1435
|
}
|
|
1389
1436
|
/**
|
|
1390
1437
|
* Updates a record in the specified table with automatic retry on lock errors.
|
|
@@ -1405,7 +1452,10 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1405
1452
|
records
|
|
1406
1453
|
}) {
|
|
1407
1454
|
if (records.length === 0) return;
|
|
1408
|
-
const
|
|
1455
|
+
const filteredRecords = await Promise.all(records.map((r) => this.filterRecordToKnownColumns(tableName, r)));
|
|
1456
|
+
const nonEmptyRecords = filteredRecords.filter((r) => Object.keys(r).length > 0);
|
|
1457
|
+
if (nonEmptyRecords.length === 0) return;
|
|
1458
|
+
const batchStatements = nonEmptyRecords.map((r) => prepareStatement({ tableName, record: r }));
|
|
1409
1459
|
await this.client.batch(batchStatements, "write");
|
|
1410
1460
|
}
|
|
1411
1461
|
/**
|
|
@@ -1443,7 +1493,15 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1443
1493
|
updates
|
|
1444
1494
|
}) {
|
|
1445
1495
|
if (updates.length === 0) return;
|
|
1446
|
-
const
|
|
1496
|
+
const filteredUpdates = [];
|
|
1497
|
+
for (const { keys, data } of updates) {
|
|
1498
|
+
const filteredData = await this.filterRecordToKnownColumns(tableName, data);
|
|
1499
|
+
if (Object.keys(filteredData).length > 0) {
|
|
1500
|
+
filteredUpdates.push({ keys, data: filteredData });
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
if (filteredUpdates.length === 0) return;
|
|
1504
|
+
const batchStatements = filteredUpdates.map(
|
|
1447
1505
|
({ keys, data }) => prepareUpdateStatement({
|
|
1448
1506
|
tableName,
|
|
1449
1507
|
updates: data,
|
|
@@ -1753,6 +1811,8 @@ var LibSQLDB = class extends base.MastraBase {
|
|
|
1753
1811
|
},
|
|
1754
1812
|
error$1
|
|
1755
1813
|
);
|
|
1814
|
+
} finally {
|
|
1815
|
+
this.tableColumnsCache.delete(tableName);
|
|
1756
1816
|
}
|
|
1757
1817
|
}
|
|
1758
1818
|
/**
|
|
@@ -2032,6 +2092,8 @@ Note: This migration may take some time for large tables.
|
|
|
2032
2092
|
},
|
|
2033
2093
|
error$1
|
|
2034
2094
|
);
|
|
2095
|
+
} finally {
|
|
2096
|
+
this.tableColumnsCache.delete(tableName);
|
|
2035
2097
|
}
|
|
2036
2098
|
}
|
|
2037
2099
|
/**
|
|
@@ -2924,6 +2986,14 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
2924
2986
|
await this.#db.createTable({ tableName: storage.TABLE_DATASETS, schema: storage.DATASETS_SCHEMA });
|
|
2925
2987
|
await this.#db.createTable({ tableName: storage.TABLE_DATASET_ITEMS, schema: storage.DATASET_ITEMS_SCHEMA });
|
|
2926
2988
|
await this.#db.createTable({ tableName: storage.TABLE_DATASET_VERSIONS, schema: storage.DATASET_VERSIONS_SCHEMA });
|
|
2989
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASETS, "requestContextSchema", "TEXT");
|
|
2990
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASETS, "tags", "TEXT");
|
|
2991
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASETS, "targetType", "TEXT");
|
|
2992
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASETS, "targetIds", "TEXT");
|
|
2993
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASETS, "scorerIds", "TEXT");
|
|
2994
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "requestContext", "TEXT");
|
|
2995
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "source", "TEXT");
|
|
2996
|
+
await this.#addColumnIfNotExists(storage.TABLE_DATASET_ITEMS, "expectedTrajectory", "TEXT");
|
|
2927
2997
|
await this.#client.execute({
|
|
2928
2998
|
sql: `CREATE INDEX IF NOT EXISTS idx_dataset_items_dataset_validto ON "${storage.TABLE_DATASET_ITEMS}" ("datasetId", "validTo")`,
|
|
2929
2999
|
args: []
|
|
@@ -2945,6 +3015,12 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
2945
3015
|
args: []
|
|
2946
3016
|
});
|
|
2947
3017
|
}
|
|
3018
|
+
async #addColumnIfNotExists(table, column, sqlType) {
|
|
3019
|
+
const exists = await this.#db.hasColumn(table, column);
|
|
3020
|
+
if (!exists) {
|
|
3021
|
+
await this.#client.execute({ sql: `ALTER TABLE "${table}" ADD COLUMN "${column}" ${sqlType}`, args: [] });
|
|
3022
|
+
}
|
|
3023
|
+
}
|
|
2948
3024
|
async dangerouslyClearAll() {
|
|
2949
3025
|
await this.#db.deleteData({ tableName: storage.TABLE_DATASET_VERSIONS });
|
|
2950
3026
|
await this.#db.deleteData({ tableName: storage.TABLE_DATASET_ITEMS });
|
|
@@ -2959,6 +3035,11 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
2959
3035
|
metadata: row.metadata ? storage.safelyParseJSON(row.metadata) : void 0,
|
|
2960
3036
|
inputSchema: row.inputSchema ? storage.safelyParseJSON(row.inputSchema) : void 0,
|
|
2961
3037
|
groundTruthSchema: row.groundTruthSchema ? storage.safelyParseJSON(row.groundTruthSchema) : void 0,
|
|
3038
|
+
requestContextSchema: row.requestContextSchema ? storage.safelyParseJSON(row.requestContextSchema) : void 0,
|
|
3039
|
+
tags: row.tags ? storage.safelyParseJSON(row.tags) : void 0,
|
|
3040
|
+
targetType: row.targetType || void 0,
|
|
3041
|
+
targetIds: row.targetIds ? storage.safelyParseJSON(row.targetIds) : void 0,
|
|
3042
|
+
scorerIds: row.scorerIds ? storage.safelyParseJSON(row.scorerIds) : void 0,
|
|
2962
3043
|
version: row.version,
|
|
2963
3044
|
createdAt: storage.ensureDate(row.createdAt),
|
|
2964
3045
|
updatedAt: storage.ensureDate(row.updatedAt)
|
|
@@ -2971,7 +3052,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
2971
3052
|
datasetVersion: row.datasetVersion,
|
|
2972
3053
|
input: storage.safelyParseJSON(row.input),
|
|
2973
3054
|
groundTruth: row.groundTruth ? storage.safelyParseJSON(row.groundTruth) : void 0,
|
|
3055
|
+
expectedTrajectory: row.expectedTrajectory ? storage.safelyParseJSON(row.expectedTrajectory) : void 0,
|
|
3056
|
+
requestContext: row.requestContext ? storage.safelyParseJSON(row.requestContext) : void 0,
|
|
2974
3057
|
metadata: row.metadata ? storage.safelyParseJSON(row.metadata) : void 0,
|
|
3058
|
+
source: row.source ? storage.safelyParseJSON(row.source) : void 0,
|
|
2975
3059
|
createdAt: storage.ensureDate(row.createdAt),
|
|
2976
3060
|
updatedAt: storage.ensureDate(row.updatedAt)
|
|
2977
3061
|
};
|
|
@@ -2985,7 +3069,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
2985
3069
|
isDeleted: Boolean(row.isDeleted),
|
|
2986
3070
|
input: storage.safelyParseJSON(row.input),
|
|
2987
3071
|
groundTruth: row.groundTruth ? storage.safelyParseJSON(row.groundTruth) : void 0,
|
|
3072
|
+
expectedTrajectory: row.expectedTrajectory ? storage.safelyParseJSON(row.expectedTrajectory) : void 0,
|
|
3073
|
+
requestContext: row.requestContext ? storage.safelyParseJSON(row.requestContext) : void 0,
|
|
2988
3074
|
metadata: row.metadata ? storage.safelyParseJSON(row.metadata) : void 0,
|
|
3075
|
+
source: row.source ? storage.safelyParseJSON(row.source) : void 0,
|
|
2989
3076
|
createdAt: storage.ensureDate(row.createdAt),
|
|
2990
3077
|
updatedAt: storage.ensureDate(row.updatedAt)
|
|
2991
3078
|
};
|
|
@@ -3013,6 +3100,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3013
3100
|
metadata: input.metadata,
|
|
3014
3101
|
inputSchema: input.inputSchema ?? null,
|
|
3015
3102
|
groundTruthSchema: input.groundTruthSchema ?? null,
|
|
3103
|
+
requestContextSchema: input.requestContextSchema ?? null,
|
|
3104
|
+
targetType: input.targetType ?? null,
|
|
3105
|
+
targetIds: input.targetIds ? JSON.stringify(input.targetIds) : null,
|
|
3106
|
+
scorerIds: input.scorerIds ? JSON.stringify(input.scorerIds) : null,
|
|
3016
3107
|
version: 0,
|
|
3017
3108
|
createdAt: nowIso,
|
|
3018
3109
|
updatedAt: nowIso
|
|
@@ -3025,6 +3116,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3025
3116
|
metadata: input.metadata,
|
|
3026
3117
|
inputSchema: input.inputSchema ?? void 0,
|
|
3027
3118
|
groundTruthSchema: input.groundTruthSchema ?? void 0,
|
|
3119
|
+
requestContextSchema: input.requestContextSchema ?? void 0,
|
|
3120
|
+
targetType: input.targetType ?? void 0,
|
|
3121
|
+
targetIds: input.targetIds ?? void 0,
|
|
3122
|
+
scorerIds: input.scorerIds ?? void 0,
|
|
3028
3123
|
version: 0,
|
|
3029
3124
|
createdAt: now,
|
|
3030
3125
|
updatedAt: now
|
|
@@ -3092,6 +3187,26 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3092
3187
|
updates.push("groundTruthSchema = ?");
|
|
3093
3188
|
values.push(args.groundTruthSchema === null ? null : JSON.stringify(args.groundTruthSchema));
|
|
3094
3189
|
}
|
|
3190
|
+
if (args.requestContextSchema !== void 0) {
|
|
3191
|
+
updates.push("requestContextSchema = ?");
|
|
3192
|
+
values.push(args.requestContextSchema === null ? null : JSON.stringify(args.requestContextSchema));
|
|
3193
|
+
}
|
|
3194
|
+
if (args.tags !== void 0) {
|
|
3195
|
+
updates.push("tags = ?");
|
|
3196
|
+
values.push(args.tags === null ? null : JSON.stringify(args.tags));
|
|
3197
|
+
}
|
|
3198
|
+
if (args.targetType !== void 0) {
|
|
3199
|
+
updates.push("targetType = ?");
|
|
3200
|
+
values.push(args.targetType === null ? null : args.targetType);
|
|
3201
|
+
}
|
|
3202
|
+
if (args.targetIds !== void 0) {
|
|
3203
|
+
updates.push("targetIds = ?");
|
|
3204
|
+
values.push(args.targetIds === null ? null : JSON.stringify(args.targetIds));
|
|
3205
|
+
}
|
|
3206
|
+
if (args.scorerIds !== void 0) {
|
|
3207
|
+
updates.push("scorerIds = ?");
|
|
3208
|
+
values.push(args.scorerIds === null ? null : JSON.stringify(args.scorerIds));
|
|
3209
|
+
}
|
|
3095
3210
|
values.push(args.id);
|
|
3096
3211
|
await this.#client.execute({
|
|
3097
3212
|
sql: `UPDATE ${storage.TABLE_DATASETS} SET ${updates.join(", ")} WHERE id = ?`,
|
|
@@ -3104,6 +3219,11 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3104
3219
|
metadata: args.metadata ?? existing.metadata,
|
|
3105
3220
|
inputSchema: (args.inputSchema !== void 0 ? args.inputSchema : existing.inputSchema) ?? void 0,
|
|
3106
3221
|
groundTruthSchema: (args.groundTruthSchema !== void 0 ? args.groundTruthSchema : existing.groundTruthSchema) ?? void 0,
|
|
3222
|
+
requestContextSchema: (args.requestContextSchema !== void 0 ? args.requestContextSchema : existing.requestContextSchema) ?? void 0,
|
|
3223
|
+
tags: (args.tags !== void 0 ? args.tags : existing.tags) ?? void 0,
|
|
3224
|
+
targetType: (args.targetType !== void 0 ? args.targetType : existing.targetType) ?? void 0,
|
|
3225
|
+
targetIds: (args.targetIds !== void 0 ? args.targetIds : existing.targetIds) ?? void 0,
|
|
3226
|
+
scorerIds: (args.scorerIds !== void 0 ? args.scorerIds : existing.scorerIds) ?? void 0,
|
|
3107
3227
|
updatedAt: new Date(now)
|
|
3108
3228
|
};
|
|
3109
3229
|
} catch (error$1) {
|
|
@@ -3209,14 +3329,17 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3209
3329
|
args: [args.datasetId]
|
|
3210
3330
|
},
|
|
3211
3331
|
{
|
|
3212
|
-
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, metadata, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3332
|
+
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, expectedTrajectory, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3213
3333
|
args: [
|
|
3214
3334
|
id,
|
|
3215
3335
|
args.datasetId,
|
|
3216
3336
|
args.datasetId,
|
|
3217
3337
|
jsonbArg(args.input),
|
|
3218
3338
|
jsonbArg(args.groundTruth),
|
|
3339
|
+
jsonbArg(args.expectedTrajectory),
|
|
3340
|
+
jsonbArg(args.requestContext),
|
|
3219
3341
|
jsonbArg(args.metadata),
|
|
3342
|
+
jsonbArg(args.source),
|
|
3220
3343
|
nowIso,
|
|
3221
3344
|
nowIso
|
|
3222
3345
|
]
|
|
@@ -3235,7 +3358,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3235
3358
|
datasetVersion: newVersion,
|
|
3236
3359
|
input: args.input,
|
|
3237
3360
|
groundTruth: args.groundTruth,
|
|
3361
|
+
expectedTrajectory: args.expectedTrajectory,
|
|
3362
|
+
requestContext: args.requestContext,
|
|
3238
3363
|
metadata: args.metadata,
|
|
3364
|
+
source: args.source,
|
|
3239
3365
|
createdAt: now,
|
|
3240
3366
|
updatedAt: now
|
|
3241
3367
|
};
|
|
@@ -3273,9 +3399,12 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3273
3399
|
const versionId = crypto.randomUUID();
|
|
3274
3400
|
const now = /* @__PURE__ */ new Date();
|
|
3275
3401
|
const nowIso = now.toISOString();
|
|
3276
|
-
const mergedInput = args.input
|
|
3277
|
-
const mergedGroundTruth = args.groundTruth
|
|
3278
|
-
const
|
|
3402
|
+
const mergedInput = args.input !== void 0 ? args.input : existing.input;
|
|
3403
|
+
const mergedGroundTruth = args.groundTruth !== void 0 ? args.groundTruth : existing.groundTruth;
|
|
3404
|
+
const mergedExpectedTrajectory = args.expectedTrajectory !== void 0 ? args.expectedTrajectory : existing.expectedTrajectory;
|
|
3405
|
+
const mergedRequestContext = args.requestContext !== void 0 ? args.requestContext : existing.requestContext;
|
|
3406
|
+
const mergedMetadata = args.metadata !== void 0 ? args.metadata : existing.metadata;
|
|
3407
|
+
const mergedSource = args.source !== void 0 ? args.source : existing.source;
|
|
3279
3408
|
const results = await this.#client.batch(
|
|
3280
3409
|
[
|
|
3281
3410
|
{
|
|
@@ -3287,14 +3416,17 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3287
3416
|
args: [args.datasetId, args.id]
|
|
3288
3417
|
},
|
|
3289
3418
|
{
|
|
3290
|
-
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, metadata, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3419
|
+
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, expectedTrajectory, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3291
3420
|
args: [
|
|
3292
3421
|
args.id,
|
|
3293
3422
|
args.datasetId,
|
|
3294
3423
|
args.datasetId,
|
|
3295
3424
|
jsonbArg(mergedInput),
|
|
3296
3425
|
jsonbArg(mergedGroundTruth),
|
|
3426
|
+
jsonbArg(mergedExpectedTrajectory),
|
|
3427
|
+
jsonbArg(mergedRequestContext),
|
|
3297
3428
|
jsonbArg(mergedMetadata),
|
|
3429
|
+
jsonbArg(mergedSource),
|
|
3298
3430
|
existing.createdAt.toISOString(),
|
|
3299
3431
|
nowIso
|
|
3300
3432
|
]
|
|
@@ -3312,7 +3444,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3312
3444
|
datasetVersion: newVersion,
|
|
3313
3445
|
input: mergedInput,
|
|
3314
3446
|
groundTruth: mergedGroundTruth,
|
|
3447
|
+
expectedTrajectory: mergedExpectedTrajectory,
|
|
3448
|
+
requestContext: mergedRequestContext,
|
|
3315
3449
|
metadata: mergedMetadata,
|
|
3450
|
+
source: mergedSource,
|
|
3316
3451
|
updatedAt: now
|
|
3317
3452
|
};
|
|
3318
3453
|
} catch (error$1) {
|
|
@@ -3352,14 +3487,16 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3352
3487
|
args: [datasetId, id]
|
|
3353
3488
|
},
|
|
3354
3489
|
{
|
|
3355
|
-
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, metadata, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3490
|
+
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3356
3491
|
args: [
|
|
3357
3492
|
id,
|
|
3358
3493
|
datasetId,
|
|
3359
3494
|
datasetId,
|
|
3360
3495
|
jsonbArg(existing.input),
|
|
3361
3496
|
jsonbArg(existing.groundTruth),
|
|
3497
|
+
jsonbArg(existing.requestContext),
|
|
3362
3498
|
jsonbArg(existing.metadata),
|
|
3499
|
+
jsonbArg(existing.source),
|
|
3363
3500
|
existing.createdAt.toISOString(),
|
|
3364
3501
|
nowIso
|
|
3365
3502
|
]
|
|
@@ -3639,14 +3776,17 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3639
3776
|
const id = crypto.randomUUID();
|
|
3640
3777
|
items.push({ id, input: itemInput });
|
|
3641
3778
|
statements.push({
|
|
3642
|
-
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, metadata, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3779
|
+
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, expectedTrajectory, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3643
3780
|
args: [
|
|
3644
3781
|
id,
|
|
3645
3782
|
input.datasetId,
|
|
3646
3783
|
input.datasetId,
|
|
3647
3784
|
jsonbArg(itemInput.input),
|
|
3648
3785
|
jsonbArg(itemInput.groundTruth),
|
|
3786
|
+
jsonbArg(itemInput.expectedTrajectory),
|
|
3787
|
+
jsonbArg(itemInput.requestContext),
|
|
3649
3788
|
jsonbArg(itemInput.metadata),
|
|
3789
|
+
jsonbArg(itemInput.source),
|
|
3650
3790
|
nowIso,
|
|
3651
3791
|
nowIso
|
|
3652
3792
|
]
|
|
@@ -3664,7 +3804,10 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3664
3804
|
datasetVersion: newVersion,
|
|
3665
3805
|
input: itemInput.input,
|
|
3666
3806
|
groundTruth: itemInput.groundTruth,
|
|
3807
|
+
expectedTrajectory: itemInput.expectedTrajectory,
|
|
3808
|
+
requestContext: itemInput.requestContext,
|
|
3667
3809
|
metadata: itemInput.metadata,
|
|
3810
|
+
source: itemInput.source,
|
|
3668
3811
|
createdAt: now,
|
|
3669
3812
|
updatedAt: now
|
|
3670
3813
|
}));
|
|
@@ -3713,14 +3856,16 @@ var DatasetsLibSQL = class extends storage.DatasetsStorage {
|
|
|
3713
3856
|
args: [input.datasetId, item.id]
|
|
3714
3857
|
});
|
|
3715
3858
|
statements.push({
|
|
3716
|
-
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, metadata, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3859
|
+
sql: `INSERT INTO ${storage.TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${storage.TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
|
|
3717
3860
|
args: [
|
|
3718
3861
|
item.id,
|
|
3719
3862
|
input.datasetId,
|
|
3720
3863
|
input.datasetId,
|
|
3721
3864
|
jsonbArg(item.input),
|
|
3722
3865
|
jsonbArg(item.groundTruth),
|
|
3866
|
+
jsonbArg(item.requestContext),
|
|
3723
3867
|
jsonbArg(item.metadata),
|
|
3868
|
+
jsonbArg(item.source),
|
|
3724
3869
|
item.createdAt.toISOString(),
|
|
3725
3870
|
nowIso
|
|
3726
3871
|
]
|
|
@@ -3782,6 +3927,7 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
3782
3927
|
id: row.id,
|
|
3783
3928
|
datasetId: row.datasetId ?? null,
|
|
3784
3929
|
datasetVersion: row.datasetVersion != null ? row.datasetVersion : null,
|
|
3930
|
+
agentVersion: row.agentVersion ?? null,
|
|
3785
3931
|
targetType: row.targetType,
|
|
3786
3932
|
targetId: row.targetId,
|
|
3787
3933
|
name: row.name ?? void 0,
|
|
@@ -3813,6 +3959,8 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
3813
3959
|
completedAt: storage.ensureDate(row.completedAt),
|
|
3814
3960
|
retryCount: row.retryCount,
|
|
3815
3961
|
traceId: row.traceId ?? null,
|
|
3962
|
+
status: row.status ?? null,
|
|
3963
|
+
tags: row.tags ? storage.safelyParseJSON(row.tags) : null,
|
|
3816
3964
|
createdAt: storage.ensureDate(row.createdAt)
|
|
3817
3965
|
};
|
|
3818
3966
|
}
|
|
@@ -3828,6 +3976,7 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
3828
3976
|
id,
|
|
3829
3977
|
datasetId: input.datasetId ?? null,
|
|
3830
3978
|
datasetVersion: input.datasetVersion ?? null,
|
|
3979
|
+
agentVersion: input.agentVersion ?? null,
|
|
3831
3980
|
targetType: input.targetType,
|
|
3832
3981
|
targetId: input.targetId,
|
|
3833
3982
|
name: input.name ?? null,
|
|
@@ -3848,6 +3997,7 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
3848
3997
|
id,
|
|
3849
3998
|
datasetId: input.datasetId,
|
|
3850
3999
|
datasetVersion: input.datasetVersion,
|
|
4000
|
+
agentVersion: input.agentVersion ?? null,
|
|
3851
4001
|
targetType: input.targetType,
|
|
3852
4002
|
targetId: input.targetId,
|
|
3853
4003
|
name: input.name,
|
|
@@ -3900,6 +4050,10 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
3900
4050
|
updates.push("failedCount = ?");
|
|
3901
4051
|
values.push(input.failedCount);
|
|
3902
4052
|
}
|
|
4053
|
+
if (input.totalItems !== void 0) {
|
|
4054
|
+
updates.push("totalItems = ?");
|
|
4055
|
+
values.push(input.totalItems);
|
|
4056
|
+
}
|
|
3903
4057
|
if (input.startedAt !== void 0) {
|
|
3904
4058
|
updates.push("startedAt = ?");
|
|
3905
4059
|
values.push(input.startedAt?.toISOString() ?? null);
|
|
@@ -4052,6 +4206,8 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
4052
4206
|
completedAt: input.completedAt.toISOString(),
|
|
4053
4207
|
retryCount: input.retryCount,
|
|
4054
4208
|
traceId: input.traceId ?? null,
|
|
4209
|
+
status: input.status ?? null,
|
|
4210
|
+
tags: input.tags !== void 0 && input.tags !== null ? JSON.stringify(input.tags) : null,
|
|
4055
4211
|
createdAt: nowIso
|
|
4056
4212
|
}
|
|
4057
4213
|
});
|
|
@@ -4068,6 +4224,8 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
4068
4224
|
completedAt: input.completedAt,
|
|
4069
4225
|
retryCount: input.retryCount,
|
|
4070
4226
|
traceId: input.traceId ?? null,
|
|
4227
|
+
status: input.status ?? null,
|
|
4228
|
+
tags: input.tags ?? null,
|
|
4071
4229
|
createdAt: now
|
|
4072
4230
|
};
|
|
4073
4231
|
} catch (error$1) {
|
|
@@ -4081,6 +4239,70 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
4081
4239
|
);
|
|
4082
4240
|
}
|
|
4083
4241
|
}
|
|
4242
|
+
async updateExperimentResult(input) {
|
|
4243
|
+
try {
|
|
4244
|
+
const setClauses = [];
|
|
4245
|
+
const values = [];
|
|
4246
|
+
if (input.status !== void 0) {
|
|
4247
|
+
setClauses.push(`"status" = ?`);
|
|
4248
|
+
values.push(input.status);
|
|
4249
|
+
}
|
|
4250
|
+
if (input.tags !== void 0) {
|
|
4251
|
+
setClauses.push(`"tags" = ?`);
|
|
4252
|
+
values.push(JSON.stringify(input.tags));
|
|
4253
|
+
}
|
|
4254
|
+
if (setClauses.length === 0) {
|
|
4255
|
+
const existing = await this.getExperimentResultById({ id: input.id });
|
|
4256
|
+
if (!existing) {
|
|
4257
|
+
throw new error.MastraError({
|
|
4258
|
+
id: storage.createStorageErrorId("LIBSQL", "UPDATE_EXPERIMENT_RESULT", "NOT_FOUND"),
|
|
4259
|
+
domain: error.ErrorDomain.STORAGE,
|
|
4260
|
+
category: error.ErrorCategory.USER,
|
|
4261
|
+
details: { resultId: input.id }
|
|
4262
|
+
});
|
|
4263
|
+
}
|
|
4264
|
+
return existing;
|
|
4265
|
+
}
|
|
4266
|
+
values.push(input.id);
|
|
4267
|
+
let whereClause = `"id" = ?`;
|
|
4268
|
+
if (input.experimentId) {
|
|
4269
|
+
values.push(input.experimentId);
|
|
4270
|
+
whereClause += ` AND "experimentId" = ?`;
|
|
4271
|
+
}
|
|
4272
|
+
const updateResult = await this.#client.execute({
|
|
4273
|
+
sql: `UPDATE ${storage.TABLE_EXPERIMENT_RESULTS} SET ${setClauses.join(", ")} WHERE ${whereClause}`,
|
|
4274
|
+
args: values
|
|
4275
|
+
});
|
|
4276
|
+
if (updateResult.rowsAffected === 0) {
|
|
4277
|
+
throw new error.MastraError({
|
|
4278
|
+
id: storage.createStorageErrorId("LIBSQL", "UPDATE_EXPERIMENT_RESULT", "NOT_FOUND"),
|
|
4279
|
+
domain: error.ErrorDomain.STORAGE,
|
|
4280
|
+
category: error.ErrorCategory.USER,
|
|
4281
|
+
details: { resultId: input.id, ...input.experimentId ? { experimentId: input.experimentId } : {} }
|
|
4282
|
+
});
|
|
4283
|
+
}
|
|
4284
|
+
const result = await this.getExperimentResultById({ id: input.id });
|
|
4285
|
+
if (!result) {
|
|
4286
|
+
throw new error.MastraError({
|
|
4287
|
+
id: storage.createStorageErrorId("LIBSQL", "UPDATE_EXPERIMENT_RESULT", "NOT_FOUND"),
|
|
4288
|
+
domain: error.ErrorDomain.STORAGE,
|
|
4289
|
+
category: error.ErrorCategory.USER,
|
|
4290
|
+
details: { resultId: input.id }
|
|
4291
|
+
});
|
|
4292
|
+
}
|
|
4293
|
+
return result;
|
|
4294
|
+
} catch (error$1) {
|
|
4295
|
+
if (error$1 instanceof error.MastraError) throw error$1;
|
|
4296
|
+
throw new error.MastraError(
|
|
4297
|
+
{
|
|
4298
|
+
id: storage.createStorageErrorId("LIBSQL", "UPDATE_EXPERIMENT_RESULT", "FAILED"),
|
|
4299
|
+
domain: error.ErrorDomain.STORAGE,
|
|
4300
|
+
category: error.ErrorCategory.THIRD_PARTY
|
|
4301
|
+
},
|
|
4302
|
+
error$1
|
|
4303
|
+
);
|
|
4304
|
+
}
|
|
4305
|
+
}
|
|
4084
4306
|
async getExperimentResultById(args) {
|
|
4085
4307
|
try {
|
|
4086
4308
|
const result = await this.#client.execute({
|
|
@@ -4161,6 +4383,37 @@ var ExperimentsLibSQL = class extends storage.ExperimentsStorage {
|
|
|
4161
4383
|
);
|
|
4162
4384
|
}
|
|
4163
4385
|
}
|
|
4386
|
+
async getReviewSummary() {
|
|
4387
|
+
try {
|
|
4388
|
+
const result = await this.#client.execute({
|
|
4389
|
+
sql: `SELECT
|
|
4390
|
+
"experimentId",
|
|
4391
|
+
COUNT(*) as total,
|
|
4392
|
+
SUM(CASE WHEN status = 'needs-review' THEN 1 ELSE 0 END) as "needsReview",
|
|
4393
|
+
SUM(CASE WHEN status = 'reviewed' THEN 1 ELSE 0 END) as reviewed,
|
|
4394
|
+
SUM(CASE WHEN status = 'complete' THEN 1 ELSE 0 END) as complete
|
|
4395
|
+
FROM ${storage.TABLE_EXPERIMENT_RESULTS}
|
|
4396
|
+
GROUP BY "experimentId"`,
|
|
4397
|
+
args: []
|
|
4398
|
+
});
|
|
4399
|
+
return (result.rows ?? []).map((row) => ({
|
|
4400
|
+
experimentId: row.experimentId,
|
|
4401
|
+
total: Number(row.total ?? 0),
|
|
4402
|
+
needsReview: Number(row.needsReview ?? 0),
|
|
4403
|
+
reviewed: Number(row.reviewed ?? 0),
|
|
4404
|
+
complete: Number(row.complete ?? 0)
|
|
4405
|
+
}));
|
|
4406
|
+
} catch (error$1) {
|
|
4407
|
+
throw new error.MastraError(
|
|
4408
|
+
{
|
|
4409
|
+
id: storage.createStorageErrorId("LIBSQL", "GET_REVIEW_SUMMARY", "FAILED"),
|
|
4410
|
+
domain: error.ErrorDomain.STORAGE,
|
|
4411
|
+
category: error.ErrorCategory.THIRD_PARTY
|
|
4412
|
+
},
|
|
4413
|
+
error$1
|
|
4414
|
+
);
|
|
4415
|
+
}
|
|
4416
|
+
}
|
|
4164
4417
|
};
|
|
4165
4418
|
var MCPClientsLibSQL = class extends storage.MCPClientsStorage {
|
|
4166
4419
|
#db;
|
|
@@ -5168,7 +5421,8 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
5168
5421
|
"isBufferingObservation",
|
|
5169
5422
|
"isBufferingReflection",
|
|
5170
5423
|
"lastBufferedAtTokens",
|
|
5171
|
-
"lastBufferedAtTime"
|
|
5424
|
+
"lastBufferedAtTime",
|
|
5425
|
+
"metadata"
|
|
5172
5426
|
]
|
|
5173
5427
|
});
|
|
5174
5428
|
}
|
|
@@ -5209,41 +5463,64 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
5209
5463
|
if (row.type && row.type !== `v2`) result.type = row.type;
|
|
5210
5464
|
return result;
|
|
5211
5465
|
}
|
|
5466
|
+
_sortMessages(messages, field, direction) {
|
|
5467
|
+
return messages.sort((a, b) => {
|
|
5468
|
+
const isDateField = field === "createdAt" || field === "updatedAt";
|
|
5469
|
+
const aValue = isDateField ? new Date(a[field]).getTime() : a[field];
|
|
5470
|
+
const bValue = isDateField ? new Date(b[field]).getTime() : b[field];
|
|
5471
|
+
if (typeof aValue === "number" && typeof bValue === "number") {
|
|
5472
|
+
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
5473
|
+
}
|
|
5474
|
+
return direction === "ASC" ? String(aValue).localeCompare(String(bValue)) : String(bValue).localeCompare(String(aValue));
|
|
5475
|
+
});
|
|
5476
|
+
}
|
|
5212
5477
|
async _getIncludedMessages({ include }) {
|
|
5213
5478
|
if (!include || include.length === 0) return null;
|
|
5479
|
+
const targetIds = include.map((inc) => inc.id).filter(Boolean);
|
|
5480
|
+
if (targetIds.length === 0) return null;
|
|
5481
|
+
const idPlaceholders = targetIds.map(() => "?").join(", ");
|
|
5482
|
+
const targetResult = await this.#client.execute({
|
|
5483
|
+
sql: `SELECT id, thread_id, "createdAt" FROM "${storage.TABLE_MESSAGES}" WHERE id IN (${idPlaceholders})`,
|
|
5484
|
+
args: targetIds
|
|
5485
|
+
});
|
|
5486
|
+
if (!targetResult.rows || targetResult.rows.length === 0) return null;
|
|
5487
|
+
const targetMap = new Map(
|
|
5488
|
+
targetResult.rows.map((r) => [r.id, { threadId: r.thread_id, createdAt: r.createdAt }])
|
|
5489
|
+
);
|
|
5214
5490
|
const unionQueries = [];
|
|
5215
5491
|
const params = [];
|
|
5216
5492
|
for (const inc of include) {
|
|
5217
5493
|
const { id, withPreviousMessages = 0, withNextMessages = 0 } = inc;
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
5244
|
-
|
|
5245
|
-
}
|
|
5246
|
-
|
|
5494
|
+
const target = targetMap.get(id);
|
|
5495
|
+
if (!target) continue;
|
|
5496
|
+
unionQueries.push(`SELECT * FROM (
|
|
5497
|
+
SELECT id, content, role, type, "createdAt", thread_id, "resourceId"
|
|
5498
|
+
FROM "${storage.TABLE_MESSAGES}"
|
|
5499
|
+
WHERE thread_id = ?
|
|
5500
|
+
AND "createdAt" <= ?
|
|
5501
|
+
ORDER BY "createdAt" DESC, id DESC
|
|
5502
|
+
LIMIT ?
|
|
5503
|
+
)`);
|
|
5504
|
+
params.push(target.threadId, target.createdAt, withPreviousMessages + 1);
|
|
5505
|
+
if (withNextMessages > 0) {
|
|
5506
|
+
unionQueries.push(`SELECT * FROM (
|
|
5507
|
+
SELECT id, content, role, type, "createdAt", thread_id, "resourceId"
|
|
5508
|
+
FROM "${storage.TABLE_MESSAGES}"
|
|
5509
|
+
WHERE thread_id = ?
|
|
5510
|
+
AND "createdAt" > ?
|
|
5511
|
+
ORDER BY "createdAt" ASC, id ASC
|
|
5512
|
+
LIMIT ?
|
|
5513
|
+
)`);
|
|
5514
|
+
params.push(target.threadId, target.createdAt, withNextMessages);
|
|
5515
|
+
}
|
|
5516
|
+
}
|
|
5517
|
+
if (unionQueries.length === 0) return null;
|
|
5518
|
+
let finalQuery;
|
|
5519
|
+
if (unionQueries.length === 1) {
|
|
5520
|
+
finalQuery = unionQueries[0];
|
|
5521
|
+
} else {
|
|
5522
|
+
finalQuery = `${unionQueries.join(" UNION ALL ")} ORDER BY "createdAt" ASC, id ASC`;
|
|
5523
|
+
}
|
|
5247
5524
|
const includedResult = await this.#client.execute({ sql: finalQuery, args: params });
|
|
5248
5525
|
const includedRows = includedResult.rows?.map((row) => this.parseRow(row));
|
|
5249
5526
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -5338,6 +5615,23 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
5338
5615
|
);
|
|
5339
5616
|
}
|
|
5340
5617
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
5618
|
+
if (perPage === 0 && (!include || include.length === 0)) {
|
|
5619
|
+
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
5620
|
+
}
|
|
5621
|
+
if (perPage === 0 && include && include.length > 0) {
|
|
5622
|
+
const includeMessages = await this._getIncludedMessages({ include });
|
|
5623
|
+
if (!includeMessages || includeMessages.length === 0) {
|
|
5624
|
+
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
5625
|
+
}
|
|
5626
|
+
const list2 = new agent.MessageList().add(includeMessages, "memory");
|
|
5627
|
+
return {
|
|
5628
|
+
messages: this._sortMessages(list2.get.all.db(), field, direction),
|
|
5629
|
+
total: 0,
|
|
5630
|
+
page,
|
|
5631
|
+
perPage: perPageForResponse,
|
|
5632
|
+
hasMore: false
|
|
5633
|
+
};
|
|
5634
|
+
}
|
|
5341
5635
|
const countResult = await this.#client.execute({
|
|
5342
5636
|
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_MESSAGES} ${whereClause}`,
|
|
5343
5637
|
args: queryParams
|
|
@@ -5371,16 +5665,7 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
5371
5665
|
}
|
|
5372
5666
|
}
|
|
5373
5667
|
const list = new agent.MessageList().add(messages, "memory");
|
|
5374
|
-
|
|
5375
|
-
finalMessages = finalMessages.sort((a, b) => {
|
|
5376
|
-
const isDateField = field === "createdAt" || field === "updatedAt";
|
|
5377
|
-
const aValue = isDateField ? new Date(a[field]).getTime() : a[field];
|
|
5378
|
-
const bValue = isDateField ? new Date(b[field]).getTime() : b[field];
|
|
5379
|
-
if (typeof aValue === "number" && typeof bValue === "number") {
|
|
5380
|
-
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
5381
|
-
}
|
|
5382
|
-
return direction === "ASC" ? String(aValue).localeCompare(String(bValue)) : String(bValue).localeCompare(String(aValue));
|
|
5383
|
-
});
|
|
5668
|
+
const finalMessages = this._sortMessages(list.get.all.db(), field, direction);
|
|
5384
5669
|
const threadIdSet = new Set(threadIds);
|
|
5385
5670
|
const returnedThreadMessageIds = new Set(
|
|
5386
5671
|
finalMessages.filter((m) => m.threadId && threadIdSet.has(m.threadId)).map((m) => m.id)
|
|
@@ -5466,6 +5751,23 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
5466
5751
|
);
|
|
5467
5752
|
}
|
|
5468
5753
|
const whereClause = `WHERE ${conditions.join(" AND ")}`;
|
|
5754
|
+
if (perPage === 0 && (!include || include.length === 0)) {
|
|
5755
|
+
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
5756
|
+
}
|
|
5757
|
+
if (perPage === 0 && include && include.length > 0) {
|
|
5758
|
+
const includeMessages = await this._getIncludedMessages({ include });
|
|
5759
|
+
if (!includeMessages || includeMessages.length === 0) {
|
|
5760
|
+
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
5761
|
+
}
|
|
5762
|
+
const list2 = new agent.MessageList().add(includeMessages, "memory");
|
|
5763
|
+
return {
|
|
5764
|
+
messages: this._sortMessages(list2.get.all.db(), field, direction),
|
|
5765
|
+
total: 0,
|
|
5766
|
+
page,
|
|
5767
|
+
perPage: perPageForResponse,
|
|
5768
|
+
hasMore: false
|
|
5769
|
+
};
|
|
5770
|
+
}
|
|
5469
5771
|
const countResult = await this.#client.execute({
|
|
5470
5772
|
sql: `SELECT COUNT(*) as count FROM ${storage.TABLE_MESSAGES} ${whereClause}`,
|
|
5471
5773
|
args: queryParams
|
|
@@ -5499,16 +5801,7 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
5499
5801
|
}
|
|
5500
5802
|
}
|
|
5501
5803
|
const list = new agent.MessageList().add(messages, "memory");
|
|
5502
|
-
|
|
5503
|
-
finalMessages = finalMessages.sort((a, b) => {
|
|
5504
|
-
const isDateField = field === "createdAt" || field === "updatedAt";
|
|
5505
|
-
const aValue = isDateField ? new Date(a[field]).getTime() : a[field];
|
|
5506
|
-
const bValue = isDateField ? new Date(b[field]).getTime() : b[field];
|
|
5507
|
-
if (typeof aValue === "number" && typeof bValue === "number") {
|
|
5508
|
-
return direction === "ASC" ? aValue - bValue : bValue - aValue;
|
|
5509
|
-
}
|
|
5510
|
-
return direction === "ASC" ? String(aValue).localeCompare(String(bValue)) : String(bValue).localeCompare(String(aValue));
|
|
5511
|
-
});
|
|
5804
|
+
const finalMessages = this._sortMessages(list.get.all.db(), field, direction);
|
|
5512
5805
|
const hasMore = perPageInput !== false && offset + perPage < total;
|
|
5513
5806
|
return {
|
|
5514
5807
|
messages: finalMessages,
|
|
@@ -6138,9 +6431,11 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6138
6431
|
]
|
|
6139
6432
|
});
|
|
6140
6433
|
const clonedMessages = [];
|
|
6434
|
+
const messageIdMap = {};
|
|
6141
6435
|
const targetResourceId = resourceId || sourceThread.resourceId;
|
|
6142
6436
|
for (const sourceMsg of sourceMessages) {
|
|
6143
6437
|
const newMessageId = crypto.randomUUID();
|
|
6438
|
+
messageIdMap[sourceMsg.id] = newMessageId;
|
|
6144
6439
|
const contentStr = sourceMsg.content;
|
|
6145
6440
|
let parsedContent;
|
|
6146
6441
|
try {
|
|
@@ -6174,7 +6469,8 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6174
6469
|
await tx.commit();
|
|
6175
6470
|
return {
|
|
6176
6471
|
thread: newThread,
|
|
6177
|
-
clonedMessages
|
|
6472
|
+
clonedMessages,
|
|
6473
|
+
messageIdMap
|
|
6178
6474
|
};
|
|
6179
6475
|
} catch (error) {
|
|
6180
6476
|
await tx.rollback();
|
|
@@ -6261,14 +6557,26 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6261
6557
|
);
|
|
6262
6558
|
}
|
|
6263
6559
|
}
|
|
6264
|
-
async getObservationalMemoryHistory(threadId, resourceId, limit = 10) {
|
|
6560
|
+
async getObservationalMemoryHistory(threadId, resourceId, limit = 10, options) {
|
|
6265
6561
|
try {
|
|
6266
6562
|
const lookupKey = this.getOMKey(threadId, resourceId);
|
|
6267
|
-
const
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
|
|
6271
|
-
|
|
6563
|
+
const conditions = [`"lookupKey" = ?`];
|
|
6564
|
+
const args = [lookupKey];
|
|
6565
|
+
if (options?.from) {
|
|
6566
|
+
conditions.push(`"createdAt" >= ?`);
|
|
6567
|
+
args.push(options.from.toISOString());
|
|
6568
|
+
}
|
|
6569
|
+
if (options?.to) {
|
|
6570
|
+
conditions.push(`"createdAt" <= ?`);
|
|
6571
|
+
args.push(options.to.toISOString());
|
|
6572
|
+
}
|
|
6573
|
+
args.push(limit);
|
|
6574
|
+
let sql = `SELECT * FROM "${OM_TABLE}" WHERE ${conditions.join(" AND ")} ORDER BY "generationCount" DESC LIMIT ?`;
|
|
6575
|
+
if (options?.offset != null) {
|
|
6576
|
+
args.push(options.offset);
|
|
6577
|
+
sql += ` OFFSET ?`;
|
|
6578
|
+
}
|
|
6579
|
+
const result = await this.#client.execute({ sql, args });
|
|
6272
6580
|
if (!result.rows) return [];
|
|
6273
6581
|
return result.rows.map((row) => this.parseOMRow(row));
|
|
6274
6582
|
} catch (error$1) {
|
|
@@ -6364,6 +6672,68 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6364
6672
|
);
|
|
6365
6673
|
}
|
|
6366
6674
|
}
|
|
6675
|
+
async insertObservationalMemoryRecord(record) {
|
|
6676
|
+
try {
|
|
6677
|
+
const lookupKey = this.getOMKey(record.threadId, record.resourceId);
|
|
6678
|
+
await this.#client.execute({
|
|
6679
|
+
sql: `INSERT INTO "${OM_TABLE}" (
|
|
6680
|
+
id, "lookupKey", scope, "resourceId", "threadId",
|
|
6681
|
+
"activeObservations", "activeObservationsPendingUpdate",
|
|
6682
|
+
"originType", config, "generationCount", "lastObservedAt", "lastReflectionAt",
|
|
6683
|
+
"pendingMessageTokens", "totalTokensObserved", "observationTokenCount",
|
|
6684
|
+
"observedMessageIds", "bufferedObservationChunks",
|
|
6685
|
+
"bufferedReflection", "bufferedReflectionTokens", "bufferedReflectionInputTokens",
|
|
6686
|
+
"reflectedObservationLineCount",
|
|
6687
|
+
"isObserving", "isReflecting", "isBufferingObservation", "isBufferingReflection",
|
|
6688
|
+
"lastBufferedAtTokens", "lastBufferedAtTime",
|
|
6689
|
+
"observedTimezone", metadata, "createdAt", "updatedAt"
|
|
6690
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
6691
|
+
args: [
|
|
6692
|
+
record.id,
|
|
6693
|
+
lookupKey,
|
|
6694
|
+
record.scope,
|
|
6695
|
+
record.resourceId,
|
|
6696
|
+
record.threadId || null,
|
|
6697
|
+
record.activeObservations || "",
|
|
6698
|
+
null,
|
|
6699
|
+
record.originType || "initial",
|
|
6700
|
+
record.config ? JSON.stringify(record.config) : null,
|
|
6701
|
+
record.generationCount || 0,
|
|
6702
|
+
record.lastObservedAt ? record.lastObservedAt.toISOString() : null,
|
|
6703
|
+
null,
|
|
6704
|
+
record.pendingMessageTokens || 0,
|
|
6705
|
+
record.totalTokensObserved || 0,
|
|
6706
|
+
record.observationTokenCount || 0,
|
|
6707
|
+
record.observedMessageIds ? JSON.stringify(record.observedMessageIds) : null,
|
|
6708
|
+
record.bufferedObservationChunks ? JSON.stringify(record.bufferedObservationChunks) : null,
|
|
6709
|
+
record.bufferedReflection || null,
|
|
6710
|
+
record.bufferedReflectionTokens ?? null,
|
|
6711
|
+
record.bufferedReflectionInputTokens ?? null,
|
|
6712
|
+
record.reflectedObservationLineCount ?? null,
|
|
6713
|
+
record.isObserving || false,
|
|
6714
|
+
record.isReflecting || false,
|
|
6715
|
+
record.isBufferingObservation || false,
|
|
6716
|
+
record.isBufferingReflection || false,
|
|
6717
|
+
record.lastBufferedAtTokens || 0,
|
|
6718
|
+
record.lastBufferedAtTime ? record.lastBufferedAtTime.toISOString() : null,
|
|
6719
|
+
record.observedTimezone || null,
|
|
6720
|
+
record.metadata ? JSON.stringify(record.metadata) : null,
|
|
6721
|
+
record.createdAt.toISOString(),
|
|
6722
|
+
record.updatedAt.toISOString()
|
|
6723
|
+
]
|
|
6724
|
+
});
|
|
6725
|
+
} catch (error$1) {
|
|
6726
|
+
throw new error.MastraError(
|
|
6727
|
+
{
|
|
6728
|
+
id: storage.createStorageErrorId("LIBSQL", "INSERT_OBSERVATIONAL_MEMORY_RECORD", "FAILED"),
|
|
6729
|
+
domain: error.ErrorDomain.STORAGE,
|
|
6730
|
+
category: error.ErrorCategory.THIRD_PARTY,
|
|
6731
|
+
details: { id: record.id, threadId: record.threadId, resourceId: record.resourceId }
|
|
6732
|
+
},
|
|
6733
|
+
error$1
|
|
6734
|
+
);
|
|
6735
|
+
}
|
|
6736
|
+
}
|
|
6367
6737
|
async updateActiveObservations(input) {
|
|
6368
6738
|
try {
|
|
6369
6739
|
const now = /* @__PURE__ */ new Date();
|
|
@@ -6448,8 +6818,8 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6448
6818
|
"originType", config, "generationCount", "lastObservedAt", "lastReflectionAt",
|
|
6449
6819
|
"pendingMessageTokens", "totalTokensObserved", "observationTokenCount",
|
|
6450
6820
|
"isObserving", "isReflecting", "isBufferingObservation", "isBufferingReflection", "lastBufferedAtTokens", "lastBufferedAtTime",
|
|
6451
|
-
"observedTimezone", "createdAt", "updatedAt"
|
|
6452
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
6821
|
+
"observedTimezone", metadata, "createdAt", "updatedAt"
|
|
6822
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
6453
6823
|
args: [
|
|
6454
6824
|
id,
|
|
6455
6825
|
lookupKey,
|
|
@@ -6479,6 +6849,7 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6479
6849
|
null,
|
|
6480
6850
|
// lastBufferedAtTime
|
|
6481
6851
|
record.observedTimezone || null,
|
|
6852
|
+
record.metadata ? JSON.stringify(record.metadata) : null,
|
|
6482
6853
|
now.toISOString(),
|
|
6483
6854
|
now.toISOString()
|
|
6484
6855
|
]
|
|
@@ -6675,6 +7046,43 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6675
7046
|
);
|
|
6676
7047
|
}
|
|
6677
7048
|
}
|
|
7049
|
+
async updateObservationalMemoryConfig(input) {
|
|
7050
|
+
try {
|
|
7051
|
+
const selectResult = await this.#client.execute({
|
|
7052
|
+
sql: `SELECT config FROM "${OM_TABLE}" WHERE id = ?`,
|
|
7053
|
+
args: [input.id]
|
|
7054
|
+
});
|
|
7055
|
+
if (selectResult.rows.length === 0) {
|
|
7056
|
+
throw new error.MastraError({
|
|
7057
|
+
id: storage.createStorageErrorId("LIBSQL", "UPDATE_OM_CONFIG", "NOT_FOUND"),
|
|
7058
|
+
text: `Observational memory record not found: ${input.id}`,
|
|
7059
|
+
domain: error.ErrorDomain.STORAGE,
|
|
7060
|
+
category: error.ErrorCategory.THIRD_PARTY,
|
|
7061
|
+
details: { id: input.id }
|
|
7062
|
+
});
|
|
7063
|
+
}
|
|
7064
|
+
const row = selectResult.rows[0];
|
|
7065
|
+
const existing = row.config ? JSON.parse(row.config) : {};
|
|
7066
|
+
const merged = this.deepMergeConfig(existing, input.config);
|
|
7067
|
+
await this.#client.execute({
|
|
7068
|
+
sql: `UPDATE "${OM_TABLE}" SET config = ?, "updatedAt" = ? WHERE id = ?`,
|
|
7069
|
+
args: [JSON.stringify(merged), (/* @__PURE__ */ new Date()).toISOString(), input.id]
|
|
7070
|
+
});
|
|
7071
|
+
} catch (error$1) {
|
|
7072
|
+
if (error$1 instanceof error.MastraError) {
|
|
7073
|
+
throw error$1;
|
|
7074
|
+
}
|
|
7075
|
+
throw new error.MastraError(
|
|
7076
|
+
{
|
|
7077
|
+
id: storage.createStorageErrorId("LIBSQL", "UPDATE_OM_CONFIG", "FAILED"),
|
|
7078
|
+
domain: error.ErrorDomain.STORAGE,
|
|
7079
|
+
category: error.ErrorCategory.THIRD_PARTY,
|
|
7080
|
+
details: { id: input.id }
|
|
7081
|
+
},
|
|
7082
|
+
error$1
|
|
7083
|
+
);
|
|
7084
|
+
}
|
|
7085
|
+
}
|
|
6678
7086
|
// ============================================
|
|
6679
7087
|
// Async Buffering Methods
|
|
6680
7088
|
// ============================================
|
|
@@ -6714,7 +7122,8 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6714
7122
|
lastObservedAt: input.chunk.lastObservedAt,
|
|
6715
7123
|
createdAt: /* @__PURE__ */ new Date(),
|
|
6716
7124
|
suggestedContinuation: input.chunk.suggestedContinuation,
|
|
6717
|
-
currentTask: input.chunk.currentTask
|
|
7125
|
+
currentTask: input.chunk.currentTask,
|
|
7126
|
+
threadTitle: input.chunk.threadTitle
|
|
6718
7127
|
};
|
|
6719
7128
|
const newChunks = [...existingChunks, newChunk];
|
|
6720
7129
|
const lastBufferedAtTime = input.lastBufferedAtTime ? input.lastBufferedAtTime.toISOString() : null;
|
|
@@ -6795,15 +7204,15 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6795
7204
|
let bestUnderTokens = 0;
|
|
6796
7205
|
for (let i = 0; i < chunks.length; i++) {
|
|
6797
7206
|
cumulativeMessageTokens += chunks[i].messageTokens ?? 0;
|
|
6798
|
-
const
|
|
7207
|
+
const boundary2 = i + 1;
|
|
6799
7208
|
if (cumulativeMessageTokens >= targetMessageTokens) {
|
|
6800
7209
|
if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {
|
|
6801
|
-
bestOverBoundary =
|
|
7210
|
+
bestOverBoundary = boundary2;
|
|
6802
7211
|
bestOverTokens = cumulativeMessageTokens;
|
|
6803
7212
|
}
|
|
6804
7213
|
} else {
|
|
6805
7214
|
if (cumulativeMessageTokens > bestUnderTokens) {
|
|
6806
|
-
bestUnderBoundary =
|
|
7215
|
+
bestUnderBoundary = boundary2;
|
|
6807
7216
|
bestUnderTokens = cumulativeMessageTokens;
|
|
6808
7217
|
}
|
|
6809
7218
|
}
|
|
@@ -6838,13 +7247,16 @@ var MemoryLibSQL = class extends storage.MemoryStorage {
|
|
|
6838
7247
|
const lastObservedAtStr = lastObservedAt.toISOString();
|
|
6839
7248
|
const existingActive = row.activeObservations || "";
|
|
6840
7249
|
const existingTokenCount = Number(row.observationTokenCount || 0);
|
|
6841
|
-
const
|
|
7250
|
+
const boundary = `
|
|
7251
|
+
|
|
7252
|
+
--- message boundary (${lastObservedAt.toISOString()}) ---
|
|
6842
7253
|
|
|
6843
|
-
|
|
7254
|
+
`;
|
|
7255
|
+
const newActive = existingActive ? `${existingActive}${boundary}${activatedContent}` : activatedContent;
|
|
6844
7256
|
const newTokenCount = existingTokenCount + activatedTokens;
|
|
6845
7257
|
const existingPending = Number(row.pendingMessageTokens || 0);
|
|
6846
7258
|
const newPending = Math.max(0, existingPending - activatedMessageTokens);
|
|
6847
|
-
await this.#client.execute({
|
|
7259
|
+
const updateResult = await this.#client.execute({
|
|
6848
7260
|
sql: `UPDATE "${OM_TABLE}" SET
|
|
6849
7261
|
"activeObservations" = ?,
|
|
6850
7262
|
"observationTokenCount" = ?,
|
|
@@ -6852,7 +7264,9 @@ ${activatedContent}` : activatedContent;
|
|
|
6852
7264
|
"bufferedObservationChunks" = ?,
|
|
6853
7265
|
"lastObservedAt" = ?,
|
|
6854
7266
|
"updatedAt" = ?
|
|
6855
|
-
WHERE id =
|
|
7267
|
+
WHERE id = ?
|
|
7268
|
+
AND "bufferedObservationChunks" IS NOT NULL
|
|
7269
|
+
AND "bufferedObservationChunks" != '[]'`,
|
|
6856
7270
|
args: [
|
|
6857
7271
|
newActive,
|
|
6858
7272
|
newTokenCount,
|
|
@@ -6863,6 +7277,16 @@ ${activatedContent}` : activatedContent;
|
|
|
6863
7277
|
input.id
|
|
6864
7278
|
]
|
|
6865
7279
|
});
|
|
7280
|
+
if (updateResult.rowsAffected === 0) {
|
|
7281
|
+
return {
|
|
7282
|
+
chunksActivated: 0,
|
|
7283
|
+
messageTokensActivated: 0,
|
|
7284
|
+
observationTokensActivated: 0,
|
|
7285
|
+
messagesActivated: 0,
|
|
7286
|
+
activatedCycleIds: [],
|
|
7287
|
+
activatedMessageIds: []
|
|
7288
|
+
};
|
|
7289
|
+
}
|
|
6866
7290
|
const latestChunkHints = activatedChunks[activatedChunks.length - 1];
|
|
6867
7291
|
return {
|
|
6868
7292
|
chunksActivated: activatedChunks.length,
|
|
@@ -7022,6 +7446,11 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
7022
7446
|
}
|
|
7023
7447
|
async init() {
|
|
7024
7448
|
await this.#db.createTable({ tableName: storage.TABLE_SPANS, schema: storage.SPAN_SCHEMA });
|
|
7449
|
+
await this.#db.alterTable({
|
|
7450
|
+
tableName: storage.TABLE_SPANS,
|
|
7451
|
+
schema: storage.SPAN_SCHEMA,
|
|
7452
|
+
ifNotExists: ["requestContext"]
|
|
7453
|
+
});
|
|
7025
7454
|
}
|
|
7026
7455
|
async dangerouslyClearAll() {
|
|
7027
7456
|
await this.#db.deleteData({ tableName: storage.TABLE_SPANS });
|
|
@@ -7193,7 +7622,8 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
7193
7622
|
}
|
|
7194
7623
|
async listTraces(args) {
|
|
7195
7624
|
const { filters, pagination, orderBy } = storage.listTracesArgsSchema.parse(args);
|
|
7196
|
-
const
|
|
7625
|
+
const page = pagination?.page ?? 0;
|
|
7626
|
+
const perPage = pagination?.perPage ?? 10;
|
|
7197
7627
|
const tableName = utils.parseSqlIdentifier(storage.TABLE_SPANS, "table name");
|
|
7198
7628
|
try {
|
|
7199
7629
|
const conditions = ["parentSpanId IS NULL"];
|
|
@@ -7333,8 +7763,8 @@ var ObservabilityLibSQL = class extends storage.ObservabilityStorage {
|
|
|
7333
7763
|
}
|
|
7334
7764
|
}
|
|
7335
7765
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
7336
|
-
const sortField = orderBy
|
|
7337
|
-
const sortDirection = orderBy
|
|
7766
|
+
const sortField = orderBy?.field ?? "startedAt";
|
|
7767
|
+
const sortDirection = orderBy?.direction ?? "DESC";
|
|
7338
7768
|
let orderByClause;
|
|
7339
7769
|
if (sortField === "endedAt") {
|
|
7340
7770
|
orderByClause = sortDirection === "DESC" ? `CASE WHEN ${sortField} IS NULL THEN 0 ELSE 1 END, ${sortField} DESC` : `CASE WHEN ${sortField} IS NULL THEN 1 ELSE 0 END, ${sortField} ASC`;
|