@mastra/pg 1.27.0-alpha.1 → 1.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +234 -195
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +234 -195
- package/dist/index.js.map +1 -1
- package/dist/storage/db/index.d.ts.map +1 -1
- package/dist/storage/db/sanitize-json.d.ts +2 -10
- package/dist/storage/db/sanitize-json.d.ts.map +1 -1
- package/dist/storage/domains/agents/index.d.ts.map +1 -1
- package/dist/storage/domains/background-tasks/index.d.ts.map +1 -1
- package/dist/storage/domains/channels/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.map +1 -1
- package/dist/storage/domains/knowledge/index.d.ts.map +1 -1
- package/dist/storage/domains/mcp-clients/index.d.ts.map +1 -1
- package/dist/storage/domains/mcp-servers/index.d.ts.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/notifications/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/discovery.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/index.d.ts +1 -1
- package/dist/storage/domains/observability/v-next/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/metrics.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/scores.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/trace-query.d.ts.map +1 -1
- package/dist/storage/domains/observability/v-next/traces.d.ts.map +1 -1
- package/dist/storage/domains/prompt-blocks/index.d.ts.map +1 -1
- package/dist/storage/domains/schedules/index.d.ts.map +1 -1
- package/dist/storage/domains/scorer-definitions/index.d.ts.map +1 -1
- package/dist/storage/domains/scores/index.d.ts.map +1 -1
- package/dist/storage/domains/skills/index.d.ts.map +1 -1
- package/dist/storage/domains/thread-state/index.d.ts.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts +0 -2
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/dist/storage/domains/workspaces/index.d.ts.map +1 -1
- package/dist/storage/factory-storage.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { MessageList } from "@mastra/core/agent";
|
|
|
15
15
|
import { coreFeatures } from "@mastra/core/features";
|
|
16
16
|
import { saveScorePayloadSchema } from "@mastra/core/evals";
|
|
17
17
|
import { skillSnapshotFieldValuesEqual } from "@mastra/core/storage/domains/skills";
|
|
18
|
+
import { isDeepStrictEqual } from "util";
|
|
18
19
|
//#region src/shared/config.ts
|
|
19
20
|
/**
|
|
20
21
|
* Type guard for pre-configured pg.Pool config
|
|
@@ -2408,6 +2409,29 @@ function isDuplicateSchemaError(error) {
|
|
|
2408
2409
|
return /schema .* already exists/i.test(message);
|
|
2409
2410
|
}
|
|
2410
2411
|
//#endregion
|
|
2412
|
+
//#region src/storage/db/sanitize-json.ts
|
|
2413
|
+
const repair = (value) => value.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g, "�").replaceAll("\0", "");
|
|
2414
|
+
function repairJson(value) {
|
|
2415
|
+
if (typeof value === "string") return repair(value);
|
|
2416
|
+
if (Array.isArray(value)) return value.map(repairJson);
|
|
2417
|
+
if (value && typeof value === "object") {
|
|
2418
|
+
const repaired = Object.create(null);
|
|
2419
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
2420
|
+
const repairedKey = repair(key);
|
|
2421
|
+
if (Object.hasOwn(repaired, repairedKey)) throw new Error(`JSON keys collide after PostgreSQL normalization: ${repairedKey}`);
|
|
2422
|
+
repaired[repairedKey] = repairJson(entry);
|
|
2423
|
+
}
|
|
2424
|
+
return repaired;
|
|
2425
|
+
}
|
|
2426
|
+
return value;
|
|
2427
|
+
}
|
|
2428
|
+
/** Serialize JSON values without emitting Unicode sequences PostgreSQL rejects. */
|
|
2429
|
+
function toPgJson(value) {
|
|
2430
|
+
const json = JSON.stringify(value);
|
|
2431
|
+
if (json === void 0 || !/\\u(?:0000|[dD][89a-fA-F][0-9a-fA-F]{2})/.test(json)) return json;
|
|
2432
|
+
return JSON.stringify(repairJson(JSON.parse(json)));
|
|
2433
|
+
}
|
|
2434
|
+
//#endregion
|
|
2411
2435
|
//#region src/storage/db/schema-snapshot.ts
|
|
2412
2436
|
/**
|
|
2413
2437
|
* Returns the snapshot currently installed on `client`, but only when it was
|
|
@@ -2932,7 +2956,7 @@ var PgDB = class extends MastraBase {
|
|
|
2932
2956
|
*/
|
|
2933
2957
|
prepareValuesForInsert(record, tableName) {
|
|
2934
2958
|
return Object.entries(record).map(([key, value]) => {
|
|
2935
|
-
if ((TABLE_SCHEMAS[tableName]?.[key])?.type === "jsonb" && value !== null && value !== void 0) return
|
|
2959
|
+
if ((TABLE_SCHEMAS[tableName]?.[key])?.type === "jsonb" && value !== null && value !== void 0) return toPgJson(value);
|
|
2936
2960
|
return value;
|
|
2937
2961
|
});
|
|
2938
2962
|
}
|
|
@@ -2950,8 +2974,8 @@ var PgDB = class extends MastraBase {
|
|
|
2950
2974
|
prepareValue(value, columnName, tableName) {
|
|
2951
2975
|
if (value === null || value === void 0) return value;
|
|
2952
2976
|
if (value instanceof Date) return value.toISOString();
|
|
2953
|
-
if ((TABLE_SCHEMAS[tableName]?.[columnName])?.type === "jsonb") return
|
|
2954
|
-
if (typeof value === "object") return
|
|
2977
|
+
if ((TABLE_SCHEMAS[tableName]?.[columnName])?.type === "jsonb") return toPgJson(value);
|
|
2978
|
+
if (typeof value === "object") return toPgJson(value);
|
|
2955
2979
|
return value;
|
|
2956
2980
|
}
|
|
2957
2981
|
async setupSchema() {
|
|
@@ -4205,7 +4229,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4205
4229
|
"published",
|
|
4206
4230
|
versionId,
|
|
4207
4231
|
row.ownerId ?? row.authorId ?? null,
|
|
4208
|
-
row.metadata ?
|
|
4232
|
+
row.metadata ? toPgJson(row.metadata) : null,
|
|
4209
4233
|
row.createdAt ?? now,
|
|
4210
4234
|
row.updatedAt ?? now
|
|
4211
4235
|
]);
|
|
@@ -4221,17 +4245,17 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4221
4245
|
row.name ?? agentId,
|
|
4222
4246
|
row.description ?? null,
|
|
4223
4247
|
this.serializeInstructions(row.instructions ?? ""),
|
|
4224
|
-
row.model ?
|
|
4225
|
-
row.tools ?
|
|
4226
|
-
row.defaultOptions ?
|
|
4227
|
-
row.workflows ?
|
|
4228
|
-
row.agents ?
|
|
4229
|
-
row.integrationTools ?
|
|
4230
|
-
row.toolProviders ?
|
|
4231
|
-
row.inputProcessors ?
|
|
4232
|
-
row.outputProcessors ?
|
|
4233
|
-
row.memory ?
|
|
4234
|
-
row.scorers ?
|
|
4248
|
+
row.model ? toPgJson(row.model) : "{}",
|
|
4249
|
+
row.tools ? toPgJson(row.tools) : null,
|
|
4250
|
+
row.defaultOptions ? toPgJson(row.defaultOptions) : null,
|
|
4251
|
+
row.workflows ? toPgJson(row.workflows) : null,
|
|
4252
|
+
row.agents ? toPgJson(row.agents) : null,
|
|
4253
|
+
row.integrationTools ? toPgJson(row.integrationTools) : null,
|
|
4254
|
+
row.toolProviders ? toPgJson(row.toolProviders) : null,
|
|
4255
|
+
row.inputProcessors ? toPgJson(row.inputProcessors) : null,
|
|
4256
|
+
row.outputProcessors ? toPgJson(row.outputProcessors) : null,
|
|
4257
|
+
row.memory ? toPgJson(row.memory) : null,
|
|
4258
|
+
row.scorers ? toPgJson(row.scorers) : null,
|
|
4235
4259
|
null,
|
|
4236
4260
|
"Migrated from legacy schema",
|
|
4237
4261
|
row.createdAt ?? now
|
|
@@ -4281,7 +4305,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4281
4305
|
for (const toolKey of toolsArray) toolsObject[toolKey] = {};
|
|
4282
4306
|
await this.#db.client.none(`UPDATE ${fullVersionsTableName}
|
|
4283
4307
|
SET tools = $1::jsonb
|
|
4284
|
-
WHERE id = $2`, [
|
|
4308
|
+
WHERE id = $2`, [toPgJson(toolsObject), record.id]);
|
|
4285
4309
|
}
|
|
4286
4310
|
this.logger?.info?.(`Migrated ${recordsWithArrayTools.length} agent version(s) tools from array to object format`);
|
|
4287
4311
|
} catch (error) {
|
|
@@ -4378,6 +4402,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4378
4402
|
const now = /* @__PURE__ */ new Date();
|
|
4379
4403
|
const nowIso = now.toISOString();
|
|
4380
4404
|
const visibility = agent.visibility ?? (agent.authorId ? "private" : null);
|
|
4405
|
+
const metadataJson = agent.metadata ? toPgJson(agent.metadata) : null;
|
|
4381
4406
|
await this.#db.client.none(`INSERT INTO ${agentsTable} (
|
|
4382
4407
|
id, status, "authorId", visibility, metadata, "favoriteCount",
|
|
4383
4408
|
"activeVersionId",
|
|
@@ -4387,7 +4412,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4387
4412
|
"draft",
|
|
4388
4413
|
agent.authorId ?? null,
|
|
4389
4414
|
visibility,
|
|
4390
|
-
|
|
4415
|
+
metadataJson,
|
|
4391
4416
|
0,
|
|
4392
4417
|
null,
|
|
4393
4418
|
nowIso,
|
|
@@ -4411,7 +4436,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4411
4436
|
activeVersionId: void 0,
|
|
4412
4437
|
authorId: agent.authorId,
|
|
4413
4438
|
visibility: visibility ?? void 0,
|
|
4414
|
-
metadata: agent.metadata,
|
|
4439
|
+
metadata: metadataJson ? JSON.parse(metadataJson) : agent.metadata,
|
|
4415
4440
|
favoriteCount: 0,
|
|
4416
4441
|
createdAt: now,
|
|
4417
4442
|
updatedAt: now
|
|
@@ -4469,7 +4494,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4469
4494
|
}
|
|
4470
4495
|
if (metadata !== void 0) {
|
|
4471
4496
|
setClauses.push(`metadata = $${paramIndex++}`);
|
|
4472
|
-
values.push(
|
|
4497
|
+
values.push(toPgJson(metadata));
|
|
4473
4498
|
}
|
|
4474
4499
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
4475
4500
|
setClauses.push(`"updatedAt" = $${paramIndex++}`);
|
|
@@ -4563,7 +4588,7 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4563
4588
|
}
|
|
4564
4589
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
4565
4590
|
conditions.push(`a.metadata @> $${paramIdx++}::jsonb`);
|
|
4566
|
-
queryParams.push(
|
|
4591
|
+
queryParams.push(toPgJson(metadata));
|
|
4567
4592
|
}
|
|
4568
4593
|
if (entityIds && entityIds.length > 0) {
|
|
4569
4594
|
const placeholders = entityIds.map(() => `$${paramIdx++}`).join(", ");
|
|
@@ -4629,9 +4654,8 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4629
4654
|
indexName: TABLE_AGENT_VERSIONS,
|
|
4630
4655
|
schemaName: getSchemaName$5(this.#schema)
|
|
4631
4656
|
});
|
|
4632
|
-
const
|
|
4633
|
-
const
|
|
4634
|
-
await this.#db.client.none(`INSERT INTO ${tableName} (
|
|
4657
|
+
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
4658
|
+
const row = await this.#db.client.one(`INSERT INTO ${tableName} (
|
|
4635
4659
|
id, "agentId", "versionNumber",
|
|
4636
4660
|
name, description, instructions, model, tools,
|
|
4637
4661
|
"defaultOptions", workflows, agents, "integrationTools", "toolProviders",
|
|
@@ -4640,40 +4664,37 @@ var AgentsPG = class AgentsPG extends AgentsStorage {
|
|
|
4640
4664
|
durable, browser,
|
|
4641
4665
|
"changedFields", "changeMessage",
|
|
4642
4666
|
"createdAt", "createdAtZ"
|
|
4643
|
-
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28)
|
|
4667
|
+
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28) RETURNING *`, [
|
|
4644
4668
|
input.id,
|
|
4645
4669
|
input.agentId,
|
|
4646
4670
|
input.versionNumber,
|
|
4647
4671
|
input.name,
|
|
4648
4672
|
input.description ?? null,
|
|
4649
4673
|
this.serializeInstructions(input.instructions),
|
|
4650
|
-
|
|
4651
|
-
input.tools ?
|
|
4652
|
-
input.defaultOptions ?
|
|
4653
|
-
input.workflows ?
|
|
4654
|
-
input.agents ?
|
|
4655
|
-
input.integrationTools ?
|
|
4656
|
-
input.toolProviders ?
|
|
4657
|
-
input.inputProcessors ?
|
|
4658
|
-
input.outputProcessors ?
|
|
4659
|
-
input.memory ?
|
|
4660
|
-
input.scorers ?
|
|
4661
|
-
input.mcpClients ?
|
|
4662
|
-
input.requestContextSchema ?
|
|
4663
|
-
input.workspace ?
|
|
4664
|
-
input.skills ?
|
|
4674
|
+
toPgJson(input.model),
|
|
4675
|
+
input.tools ? toPgJson(input.tools) : null,
|
|
4676
|
+
input.defaultOptions ? toPgJson(input.defaultOptions) : null,
|
|
4677
|
+
input.workflows ? toPgJson(input.workflows) : null,
|
|
4678
|
+
input.agents ? toPgJson(input.agents) : null,
|
|
4679
|
+
input.integrationTools ? toPgJson(input.integrationTools) : null,
|
|
4680
|
+
input.toolProviders ? toPgJson(input.toolProviders) : null,
|
|
4681
|
+
input.inputProcessors ? toPgJson(input.inputProcessors) : null,
|
|
4682
|
+
input.outputProcessors ? toPgJson(input.outputProcessors) : null,
|
|
4683
|
+
input.memory ? toPgJson(input.memory) : null,
|
|
4684
|
+
input.scorers ? toPgJson(input.scorers) : null,
|
|
4685
|
+
input.mcpClients ? toPgJson(input.mcpClients) : null,
|
|
4686
|
+
input.requestContextSchema ? toPgJson(input.requestContextSchema) : null,
|
|
4687
|
+
input.workspace ? toPgJson(input.workspace) : null,
|
|
4688
|
+
input.skills ? toPgJson(input.skills) : null,
|
|
4665
4689
|
input.skillsFormat ?? null,
|
|
4666
|
-
input.durable !== void 0 ?
|
|
4667
|
-
input.browser ?
|
|
4668
|
-
input.changedFields ?
|
|
4690
|
+
input.durable !== void 0 ? toPgJson(input.durable) : null,
|
|
4691
|
+
input.browser ? toPgJson(input.browser) : null,
|
|
4692
|
+
input.changedFields ? toPgJson(input.changedFields) : null,
|
|
4669
4693
|
input.changeMessage ?? null,
|
|
4670
4694
|
nowIso,
|
|
4671
4695
|
nowIso
|
|
4672
4696
|
]);
|
|
4673
|
-
return
|
|
4674
|
-
...input,
|
|
4675
|
-
createdAt: now
|
|
4676
|
-
};
|
|
4697
|
+
return this.parseVersionRow(row);
|
|
4677
4698
|
} catch (error) {
|
|
4678
4699
|
if (error instanceof MastraError) throw error;
|
|
4679
4700
|
throw new MastraError({
|
|
@@ -4957,7 +4978,7 @@ function getTableName$4(schemaName) {
|
|
|
4957
4978
|
return schemaName ? `${schemaName}.${quoted}` : quoted;
|
|
4958
4979
|
}
|
|
4959
4980
|
function serializeJson(v) {
|
|
4960
|
-
if (typeof v === "object" && v != null) return
|
|
4981
|
+
if (typeof v === "object" && v != null) return toPgJson(v);
|
|
4961
4982
|
return v ?? null;
|
|
4962
4983
|
}
|
|
4963
4984
|
function parseJson$2(v) {
|
|
@@ -5536,7 +5557,7 @@ var ChannelsPG = class ChannelsPG extends ChannelsStorage {
|
|
|
5536
5557
|
installation.agentId,
|
|
5537
5558
|
installation.status,
|
|
5538
5559
|
installation.webhookId ?? null,
|
|
5539
|
-
|
|
5560
|
+
toPgJson(installation.data),
|
|
5540
5561
|
installation.configHash ?? null,
|
|
5541
5562
|
installation.error ?? null,
|
|
5542
5563
|
createdAt,
|
|
@@ -5596,7 +5617,7 @@ var ChannelsPG = class ChannelsPG extends ChannelsStorage {
|
|
|
5596
5617
|
"updatedAt" = EXCLUDED."updatedAt",
|
|
5597
5618
|
"updatedAtZ" = EXCLUDED."updatedAtZ"`, [
|
|
5598
5619
|
config.platform,
|
|
5599
|
-
|
|
5620
|
+
toPgJson(config.data),
|
|
5600
5621
|
now,
|
|
5601
5622
|
now
|
|
5602
5623
|
]);
|
|
@@ -5640,7 +5661,7 @@ var ChannelsPG = class ChannelsPG extends ChannelsStorage {
|
|
|
5640
5661
|
//#region src/storage/domains/datasets/index.ts
|
|
5641
5662
|
/** Serialize a value for a jsonb column. Returns null for null/undefined. */
|
|
5642
5663
|
function jsonbArg(value) {
|
|
5643
|
-
return value === void 0 || value === null ? null :
|
|
5664
|
+
return value === void 0 || value === null ? null : toPgJson(value);
|
|
5644
5665
|
}
|
|
5645
5666
|
/** Preserve JSON null as data, rather than converting it to an absent SQL value. */
|
|
5646
5667
|
function jsonDataArg(value) {
|
|
@@ -6021,23 +6042,23 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6021
6042
|
}
|
|
6022
6043
|
if (args.metadata !== void 0) {
|
|
6023
6044
|
setClauses.push(`"metadata" = $${paramIndex++}`);
|
|
6024
|
-
values.push(
|
|
6045
|
+
values.push(toPgJson(args.metadata));
|
|
6025
6046
|
}
|
|
6026
6047
|
if (args.inputSchema !== void 0) {
|
|
6027
6048
|
setClauses.push(`"inputSchema" = $${paramIndex++}`);
|
|
6028
|
-
values.push(args.inputSchema === null ? null :
|
|
6049
|
+
values.push(args.inputSchema === null ? null : toPgJson(args.inputSchema));
|
|
6029
6050
|
}
|
|
6030
6051
|
if (args.groundTruthSchema !== void 0) {
|
|
6031
6052
|
setClauses.push(`"groundTruthSchema" = $${paramIndex++}`);
|
|
6032
|
-
values.push(args.groundTruthSchema === null ? null :
|
|
6053
|
+
values.push(args.groundTruthSchema === null ? null : toPgJson(args.groundTruthSchema));
|
|
6033
6054
|
}
|
|
6034
6055
|
if (args.requestContextSchema !== void 0) {
|
|
6035
6056
|
setClauses.push(`"requestContextSchema" = $${paramIndex++}`);
|
|
6036
|
-
values.push(args.requestContextSchema === null ? null :
|
|
6057
|
+
values.push(args.requestContextSchema === null ? null : toPgJson(args.requestContextSchema));
|
|
6037
6058
|
}
|
|
6038
6059
|
if (args.tags !== void 0) {
|
|
6039
6060
|
setClauses.push(`"tags" = $${paramIndex++}`);
|
|
6040
|
-
values.push(args.tags === null ? null :
|
|
6061
|
+
values.push(args.tags === null ? null : toPgJson(args.tags));
|
|
6041
6062
|
}
|
|
6042
6063
|
if (args.targetType !== void 0) {
|
|
6043
6064
|
setClauses.push(`"targetType" = $${paramIndex++}`);
|
|
@@ -6045,11 +6066,11 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6045
6066
|
}
|
|
6046
6067
|
if (args.targetIds !== void 0) {
|
|
6047
6068
|
setClauses.push(`"targetIds" = $${paramIndex++}`);
|
|
6048
|
-
values.push(args.targetIds === null ? null :
|
|
6069
|
+
values.push(args.targetIds === null ? null : toPgJson(args.targetIds));
|
|
6049
6070
|
}
|
|
6050
6071
|
if (args.scorerIds !== void 0) {
|
|
6051
6072
|
setClauses.push(`"scorerIds" = $${paramIndex++}`);
|
|
6052
|
-
values.push(args.scorerIds === null ? null :
|
|
6073
|
+
values.push(args.scorerIds === null ? null : toPgJson(args.scorerIds));
|
|
6053
6074
|
}
|
|
6054
6075
|
values.push(args.id);
|
|
6055
6076
|
await this.#db.client.none(`UPDATE ${tableName} SET ${setClauses.join(", ")} WHERE "id" = $${paramIndex}`, values);
|
|
@@ -6497,10 +6518,9 @@ var DatasetsPG = class DatasetsPG extends DatasetsStorage {
|
|
|
6497
6518
|
indexName: TABLE_EXPERIMENT_RESULTS,
|
|
6498
6519
|
schemaName: getSchemaName$5(this.#schema)
|
|
6499
6520
|
});
|
|
6500
|
-
const
|
|
6501
|
-
const purgedMetadata = JSON.stringify({
|
|
6521
|
+
const purgedMetadata = toPgJson({
|
|
6502
6522
|
__purged: true,
|
|
6503
|
-
purgedAt
|
|
6523
|
+
purgedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
6504
6524
|
});
|
|
6505
6525
|
await this.#db.client.tx(async (t) => {
|
|
6506
6526
|
if (!await t.oneOrNone(`SELECT "id" FROM ${datasetsTable} WHERE "id" = $1 FOR UPDATE`, [datasetId])) return;
|
|
@@ -7300,7 +7320,7 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7300
7320
|
}
|
|
7301
7321
|
if (input.metadata !== void 0) {
|
|
7302
7322
|
setClauses.push(`"metadata" = $${paramIndex++}`);
|
|
7303
|
-
values.push(
|
|
7323
|
+
values.push(toPgJson(input.metadata));
|
|
7304
7324
|
}
|
|
7305
7325
|
if (input.status !== void 0) {
|
|
7306
7326
|
setClauses.push(`"status" = $${paramIndex++}`);
|
|
@@ -7531,19 +7551,19 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7531
7551
|
input.itemDatasetVersion ?? null,
|
|
7532
7552
|
input.organizationId ?? null,
|
|
7533
7553
|
input.projectId ?? null,
|
|
7534
|
-
|
|
7535
|
-
purgeMetadata || input.output == null ? null :
|
|
7536
|
-
purgeMetadata || input.groundTruth == null ? null :
|
|
7537
|
-
|
|
7538
|
-
purgeMetadata || input.error == null ? null :
|
|
7554
|
+
toPgJson(purgeMetadata ? null : input.input),
|
|
7555
|
+
purgeMetadata || input.output == null ? null : toPgJson(input.output),
|
|
7556
|
+
purgeMetadata || input.groundTruth == null ? null : toPgJson(input.groundTruth),
|
|
7557
|
+
toPgJson(purgeMetadata ?? input.metadata ?? null),
|
|
7558
|
+
purgeMetadata || input.error == null ? null : toPgJson(input.error),
|
|
7539
7559
|
input.startedAt.toISOString(),
|
|
7540
7560
|
input.completedAt.toISOString(),
|
|
7541
7561
|
input.retryCount,
|
|
7542
7562
|
input.attempt ?? 0,
|
|
7543
7563
|
input.traceId ?? null,
|
|
7544
7564
|
input.status ?? null,
|
|
7545
|
-
purgeMetadata || input.tags == null ? null :
|
|
7546
|
-
purgeMetadata || input.toolMockReport == null ? null :
|
|
7565
|
+
purgeMetadata || input.tags == null ? null : toPgJson(input.tags),
|
|
7566
|
+
purgeMetadata || input.toolMockReport == null ? null : toPgJson(input.toolMockReport),
|
|
7547
7567
|
nowIso
|
|
7548
7568
|
]);
|
|
7549
7569
|
});
|
|
@@ -7589,19 +7609,19 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7589
7609
|
input.itemDatasetVersion ?? null,
|
|
7590
7610
|
input.organizationId ?? null,
|
|
7591
7611
|
input.projectId ?? null,
|
|
7592
|
-
|
|
7593
|
-
purgeMetadata || input.output == null ? null :
|
|
7594
|
-
purgeMetadata || input.groundTruth == null ? null :
|
|
7595
|
-
|
|
7596
|
-
purgeMetadata || input.error == null ? null :
|
|
7612
|
+
toPgJson(purgeMetadata ? null : input.input),
|
|
7613
|
+
purgeMetadata || input.output == null ? null : toPgJson(input.output),
|
|
7614
|
+
purgeMetadata || input.groundTruth == null ? null : toPgJson(input.groundTruth),
|
|
7615
|
+
toPgJson(purgeMetadata ?? input.metadata ?? null),
|
|
7616
|
+
purgeMetadata || input.error == null ? null : toPgJson(input.error),
|
|
7597
7617
|
input.startedAt.toISOString(),
|
|
7598
7618
|
input.completedAt.toISOString(),
|
|
7599
7619
|
input.retryCount,
|
|
7600
7620
|
attempt,
|
|
7601
7621
|
input.traceId ?? null,
|
|
7602
7622
|
input.status ?? null,
|
|
7603
|
-
purgeMetadata || input.tags == null ? null :
|
|
7604
|
-
purgeMetadata || input.toolMockReport == null ? null :
|
|
7623
|
+
purgeMetadata || input.tags == null ? null : toPgJson(input.tags),
|
|
7624
|
+
purgeMetadata || input.toolMockReport == null ? null : toPgJson(input.toolMockReport),
|
|
7605
7625
|
(/* @__PURE__ */ new Date()).toISOString()
|
|
7606
7626
|
]);
|
|
7607
7627
|
}
|
|
@@ -7615,19 +7635,19 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7615
7635
|
input.itemDatasetVersion ?? null,
|
|
7616
7636
|
input.organizationId ?? null,
|
|
7617
7637
|
input.projectId ?? null,
|
|
7618
|
-
|
|
7619
|
-
purgeMetadata || input.output == null ? null :
|
|
7620
|
-
purgeMetadata || input.groundTruth == null ? null :
|
|
7621
|
-
|
|
7622
|
-
purgeMetadata || input.error == null ? null :
|
|
7638
|
+
toPgJson(purgeMetadata ? null : input.input),
|
|
7639
|
+
purgeMetadata || input.output == null ? null : toPgJson(input.output),
|
|
7640
|
+
purgeMetadata || input.groundTruth == null ? null : toPgJson(input.groundTruth),
|
|
7641
|
+
toPgJson(purgeMetadata ?? input.metadata ?? null),
|
|
7642
|
+
purgeMetadata || input.error == null ? null : toPgJson(input.error),
|
|
7623
7643
|
input.startedAt.toISOString(),
|
|
7624
7644
|
input.completedAt.toISOString(),
|
|
7625
7645
|
input.retryCount,
|
|
7626
7646
|
attempt,
|
|
7627
7647
|
input.traceId ?? null,
|
|
7628
7648
|
input.status ?? null,
|
|
7629
|
-
purgeMetadata || input.tags == null ? null :
|
|
7630
|
-
purgeMetadata || input.toolMockReport == null ? null :
|
|
7649
|
+
purgeMetadata || input.tags == null ? null : toPgJson(input.tags),
|
|
7650
|
+
purgeMetadata || input.toolMockReport == null ? null : toPgJson(input.toolMockReport)
|
|
7631
7651
|
]);
|
|
7632
7652
|
});
|
|
7633
7653
|
return this.transformExperimentResultRow(row);
|
|
@@ -7667,7 +7687,7 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7667
7687
|
input.status ?? null,
|
|
7668
7688
|
Boolean(purgeMetadata),
|
|
7669
7689
|
input.tags !== void 0,
|
|
7670
|
-
input.tags === void 0 ? null :
|
|
7690
|
+
input.tags === void 0 ? null : toPgJson(input.tags),
|
|
7671
7691
|
input.comment !== void 0,
|
|
7672
7692
|
input.comment ?? null,
|
|
7673
7693
|
...input.experimentId !== void 0 ? [input.experimentId] : []
|
|
@@ -7738,7 +7758,7 @@ var ExperimentsPG = class ExperimentsPG extends ExperimentsStorage {
|
|
|
7738
7758
|
}
|
|
7739
7759
|
for (const tag of args.tags ?? []) {
|
|
7740
7760
|
conditions.push(`"tags" @> $${paramIndex++}::jsonb`);
|
|
7741
|
-
queryParams.push(
|
|
7761
|
+
queryParams.push(toPgJson([tag]));
|
|
7742
7762
|
}
|
|
7743
7763
|
if (args.filters) {
|
|
7744
7764
|
const { organizationId, projectId } = args.filters;
|
|
@@ -8665,6 +8685,7 @@ var KnowledgePG = class extends KnowledgeStorage {
|
|
|
8665
8685
|
return this.#transaction(async (tx) => {
|
|
8666
8686
|
const parent = await this.#resolveTerminalNode(tx, nodeReferenceId(input.node));
|
|
8667
8687
|
if (!parent) throw new KnowledgeNotFoundError("node", nodeReferenceId(input.node));
|
|
8688
|
+
const metadataJson = input.metadata ? toPgJson(input.metadata) : null;
|
|
8668
8689
|
const record = {
|
|
8669
8690
|
id: input.id ?? createKnowledgeUlid(),
|
|
8670
8691
|
node: parent.id,
|
|
@@ -8688,13 +8709,16 @@ var KnowledgePG = class extends KnowledgeStorage {
|
|
|
8688
8709
|
record.capturedAt.toISOString(),
|
|
8689
8710
|
record.when?.toISOString() ?? null,
|
|
8690
8711
|
record.maxScope ?? null,
|
|
8691
|
-
|
|
8712
|
+
metadataJson
|
|
8692
8713
|
]
|
|
8693
8714
|
});
|
|
8694
8715
|
await this.#replaceMentions(tx, "record", record.id, record.text, resolutionScope, defaultScope);
|
|
8695
8716
|
await this.#activity(tx, "record-created", "record", record.id, scope, record.sourceThreadId);
|
|
8696
8717
|
await this.#outbox(tx, "record", record.id, "upsert", record.id, scope);
|
|
8697
|
-
return
|
|
8718
|
+
return metadataJson ? {
|
|
8719
|
+
...record,
|
|
8720
|
+
metadata: JSON.parse(metadataJson)
|
|
8721
|
+
} : record;
|
|
8698
8722
|
});
|
|
8699
8723
|
}
|
|
8700
8724
|
async getKnowledge(input) {
|
|
@@ -9263,6 +9287,7 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9263
9287
|
});
|
|
9264
9288
|
const now = /* @__PURE__ */ new Date();
|
|
9265
9289
|
const nowIso = now.toISOString();
|
|
9290
|
+
const metadataJson = mcpClient.metadata ? toPgJson(mcpClient.metadata) : null;
|
|
9266
9291
|
await this.#db.client.none(`INSERT INTO ${tableName} (
|
|
9267
9292
|
id, status, "activeVersionId", "authorId", metadata,
|
|
9268
9293
|
"createdAt", "createdAtZ", "updatedAt", "updatedAtZ"
|
|
@@ -9271,7 +9296,7 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9271
9296
|
"draft",
|
|
9272
9297
|
null,
|
|
9273
9298
|
mcpClient.authorId ?? null,
|
|
9274
|
-
|
|
9299
|
+
metadataJson,
|
|
9275
9300
|
nowIso,
|
|
9276
9301
|
nowIso,
|
|
9277
9302
|
nowIso,
|
|
@@ -9292,7 +9317,7 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9292
9317
|
status: "draft",
|
|
9293
9318
|
activeVersionId: void 0,
|
|
9294
9319
|
authorId: mcpClient.authorId,
|
|
9295
|
-
metadata: mcpClient.metadata,
|
|
9320
|
+
metadata: metadataJson ? JSON.parse(metadataJson) : mcpClient.metadata,
|
|
9296
9321
|
createdAt: now,
|
|
9297
9322
|
updatedAt: now
|
|
9298
9323
|
};
|
|
@@ -9350,7 +9375,7 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9350
9375
|
...metadata
|
|
9351
9376
|
};
|
|
9352
9377
|
setClauses.push(`metadata = $${paramIndex++}`);
|
|
9353
|
-
values.push(
|
|
9378
|
+
values.push(toPgJson(mergedMetadata));
|
|
9354
9379
|
}
|
|
9355
9380
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
9356
9381
|
setClauses.push(`"updatedAt" = $${paramIndex++}`);
|
|
@@ -9423,7 +9448,7 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9423
9448
|
}
|
|
9424
9449
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
9425
9450
|
conditions.push(`metadata @> $${paramIdx++}::jsonb`);
|
|
9426
|
-
queryParams.push(
|
|
9451
|
+
queryParams.push(toPgJson(metadata));
|
|
9427
9452
|
}
|
|
9428
9453
|
const whereClause = `WHERE ${conditions.join(" AND ")}`;
|
|
9429
9454
|
const countResult = await this.#db.readClient.one(`SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`, queryParams);
|
|
@@ -9474,6 +9499,8 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9474
9499
|
});
|
|
9475
9500
|
const now = /* @__PURE__ */ new Date();
|
|
9476
9501
|
const nowIso = now.toISOString();
|
|
9502
|
+
const serversJson = toPgJson(input.servers);
|
|
9503
|
+
const changedFieldsJson = input.changedFields ? toPgJson(input.changedFields) : null;
|
|
9477
9504
|
await this.#db.client.none(`INSERT INTO ${tableName} (
|
|
9478
9505
|
id, "mcpClientId", "versionNumber",
|
|
9479
9506
|
name, description, servers,
|
|
@@ -9485,14 +9512,16 @@ var MCPClientsPG = class MCPClientsPG extends MCPClientsStorage {
|
|
|
9485
9512
|
input.versionNumber,
|
|
9486
9513
|
input.name,
|
|
9487
9514
|
input.description ?? null,
|
|
9488
|
-
|
|
9489
|
-
|
|
9515
|
+
serversJson,
|
|
9516
|
+
changedFieldsJson,
|
|
9490
9517
|
input.changeMessage ?? null,
|
|
9491
9518
|
nowIso,
|
|
9492
9519
|
nowIso
|
|
9493
9520
|
]);
|
|
9494
9521
|
return {
|
|
9495
9522
|
...input,
|
|
9523
|
+
servers: JSON.parse(serversJson),
|
|
9524
|
+
changedFields: changedFieldsJson ? JSON.parse(changedFieldsJson) : input.changedFields,
|
|
9496
9525
|
createdAt: now
|
|
9497
9526
|
};
|
|
9498
9527
|
} catch (error) {
|
|
@@ -9834,7 +9863,7 @@ var MCPServersPG = class MCPServersPG extends MCPServersStorage {
|
|
|
9834
9863
|
"draft",
|
|
9835
9864
|
null,
|
|
9836
9865
|
mcpServer.authorId ?? null,
|
|
9837
|
-
mcpServer.metadata ?
|
|
9866
|
+
mcpServer.metadata ? toPgJson(mcpServer.metadata) : null,
|
|
9838
9867
|
nowIso,
|
|
9839
9868
|
nowIso,
|
|
9840
9869
|
nowIso,
|
|
@@ -9913,7 +9942,7 @@ var MCPServersPG = class MCPServersPG extends MCPServersStorage {
|
|
|
9913
9942
|
...metadata
|
|
9914
9943
|
};
|
|
9915
9944
|
setClauses.push(`metadata = $${paramIndex++}`);
|
|
9916
|
-
values.push(
|
|
9945
|
+
values.push(toPgJson(mergedMetadata));
|
|
9917
9946
|
}
|
|
9918
9947
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
9919
9948
|
setClauses.push(`"updatedAt" = $${paramIndex++}`);
|
|
@@ -9986,7 +10015,7 @@ var MCPServersPG = class MCPServersPG extends MCPServersStorage {
|
|
|
9986
10015
|
}
|
|
9987
10016
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
9988
10017
|
conditions.push(`metadata @> $${paramIdx++}::jsonb`);
|
|
9989
|
-
queryParams.push(
|
|
10018
|
+
queryParams.push(toPgJson(metadata));
|
|
9990
10019
|
}
|
|
9991
10020
|
const whereClause = `WHERE ${conditions.join(" AND ")}`;
|
|
9992
10021
|
const countResult = await this.#db.readClient.one(`SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`, queryParams);
|
|
@@ -10052,14 +10081,14 @@ var MCPServersPG = class MCPServersPG extends MCPServersStorage {
|
|
|
10052
10081
|
input.version,
|
|
10053
10082
|
input.description ?? null,
|
|
10054
10083
|
input.instructions ?? null,
|
|
10055
|
-
input.repository ?
|
|
10084
|
+
input.repository ? toPgJson(input.repository) : null,
|
|
10056
10085
|
input.releaseDate ?? null,
|
|
10057
10086
|
input.isLatest ?? null,
|
|
10058
10087
|
input.packageCanonical ?? null,
|
|
10059
|
-
input.tools ?
|
|
10060
|
-
input.agents ?
|
|
10061
|
-
input.workflows ?
|
|
10062
|
-
input.changedFields ?
|
|
10088
|
+
input.tools ? toPgJson(input.tools) : null,
|
|
10089
|
+
input.agents ? toPgJson(input.agents) : null,
|
|
10090
|
+
input.workflows ? toPgJson(input.workflows) : null,
|
|
10091
|
+
input.changedFields ? toPgJson(input.changedFields) : null,
|
|
10063
10092
|
input.changeMessage ?? null,
|
|
10064
10093
|
nowIso,
|
|
10065
10094
|
nowIso
|
|
@@ -10794,7 +10823,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
10794
10823
|
}
|
|
10795
10824
|
if (filter?.metadata && Object.keys(filter.metadata).length > 0) for (const [key, value] of Object.entries(filter.metadata)) {
|
|
10796
10825
|
whereClauses.push(`metadata::jsonb @> $${paramIndex}::jsonb`);
|
|
10797
|
-
queryParams.push(
|
|
10826
|
+
queryParams.push(toPgJson({ [key]: value }));
|
|
10798
10827
|
paramIndex++;
|
|
10799
10828
|
}
|
|
10800
10829
|
const baseQuery = `FROM ${tableName} ${whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : ""}`;
|
|
@@ -10853,6 +10882,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
10853
10882
|
});
|
|
10854
10883
|
const createdAt = toUtcISOString(thread.createdAt);
|
|
10855
10884
|
const updatedAt = toUtcISOString(thread.updatedAt);
|
|
10885
|
+
const metadataJson = thread.metadata ? toPgJson(thread.metadata) : null;
|
|
10856
10886
|
await this.#db.client.none(`INSERT INTO ${tableName} (
|
|
10857
10887
|
id,
|
|
10858
10888
|
"resourceId",
|
|
@@ -10874,13 +10904,16 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
10874
10904
|
thread.id,
|
|
10875
10905
|
thread.resourceId,
|
|
10876
10906
|
thread.title,
|
|
10877
|
-
|
|
10907
|
+
metadataJson,
|
|
10878
10908
|
createdAt,
|
|
10879
10909
|
createdAt,
|
|
10880
10910
|
updatedAt,
|
|
10881
10911
|
updatedAt
|
|
10882
10912
|
]);
|
|
10883
|
-
return
|
|
10913
|
+
return {
|
|
10914
|
+
...thread,
|
|
10915
|
+
metadata: metadataJson ? JSON.parse(metadataJson) : thread.metadata
|
|
10916
|
+
};
|
|
10884
10917
|
} catch (error) {
|
|
10885
10918
|
throw new MastraError({
|
|
10886
10919
|
id: createStorageErrorId("PG", "SAVE_THREAD", "FAILED"),
|
|
@@ -11696,16 +11729,20 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
11696
11729
|
async saveResource({ resource }) {
|
|
11697
11730
|
const createdAt = toUtcISOString(resource.createdAt);
|
|
11698
11731
|
const updatedAt = toUtcISOString(resource.updatedAt);
|
|
11732
|
+
const metadataJson = toPgJson(resource.metadata);
|
|
11699
11733
|
await this.#db.insert({
|
|
11700
11734
|
tableName: TABLE_RESOURCES,
|
|
11701
11735
|
record: {
|
|
11702
11736
|
...resource,
|
|
11703
|
-
metadata:
|
|
11737
|
+
metadata: metadataJson,
|
|
11704
11738
|
createdAt,
|
|
11705
11739
|
updatedAt
|
|
11706
11740
|
}
|
|
11707
11741
|
});
|
|
11708
|
-
return
|
|
11742
|
+
return {
|
|
11743
|
+
...resource,
|
|
11744
|
+
metadata: metadataJson ? JSON.parse(metadataJson) : resource.metadata
|
|
11745
|
+
};
|
|
11709
11746
|
}
|
|
11710
11747
|
async updateResource({ resourceId, workingMemory, metadata }) {
|
|
11711
11748
|
const existingResource = await this.#getResourceById(this.#db.client, resourceId);
|
|
@@ -11740,9 +11777,11 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
11740
11777
|
values.push(workingMemory);
|
|
11741
11778
|
paramIndex++;
|
|
11742
11779
|
}
|
|
11780
|
+
let metadataJson;
|
|
11743
11781
|
if (metadata) {
|
|
11782
|
+
metadataJson = toPgJson(updatedResource.metadata);
|
|
11744
11783
|
updates.push(`metadata = $${paramIndex}`);
|
|
11745
|
-
values.push(
|
|
11784
|
+
values.push(metadataJson);
|
|
11746
11785
|
paramIndex++;
|
|
11747
11786
|
}
|
|
11748
11787
|
const updatedAtStr = updatedResource.updatedAt.toISOString();
|
|
@@ -11752,7 +11791,10 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
11752
11791
|
values.push(updatedAtStr);
|
|
11753
11792
|
values.push(resourceId);
|
|
11754
11793
|
await this.#db.client.none(`UPDATE ${tableName} SET ${updates.join(", ")} WHERE id = $${paramIndex}`, values);
|
|
11755
|
-
return
|
|
11794
|
+
return metadataJson ? {
|
|
11795
|
+
...updatedResource,
|
|
11796
|
+
metadata: JSON.parse(metadataJson)
|
|
11797
|
+
} : updatedResource;
|
|
11756
11798
|
}
|
|
11757
11799
|
async copyThread(args) {
|
|
11758
11800
|
const { sourceThreadId, newThreadId: providedThreadId, resourceId, title, metadata, options } = args;
|
|
@@ -11837,7 +11879,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
11837
11879
|
newThread.id,
|
|
11838
11880
|
newThread.resourceId,
|
|
11839
11881
|
newThread.title,
|
|
11840
|
-
newThread.metadata ?
|
|
11882
|
+
newThread.metadata ? toPgJson(newThread.metadata) : null,
|
|
11841
11883
|
nowStr,
|
|
11842
11884
|
nowStr,
|
|
11843
11885
|
nowStr,
|
|
@@ -12028,7 +12070,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12028
12070
|
"",
|
|
12029
12071
|
null,
|
|
12030
12072
|
"initial",
|
|
12031
|
-
|
|
12073
|
+
toPgJson(input.config),
|
|
12032
12074
|
0,
|
|
12033
12075
|
null,
|
|
12034
12076
|
null,
|
|
@@ -12091,7 +12133,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12091
12133
|
record.activeObservations || "",
|
|
12092
12134
|
null,
|
|
12093
12135
|
record.originType || "initial",
|
|
12094
|
-
record.config ?
|
|
12136
|
+
record.config ? toPgJson(record.config) : null,
|
|
12095
12137
|
record.generationCount || 0,
|
|
12096
12138
|
lastObservedAtStr,
|
|
12097
12139
|
lastObservedAtStr,
|
|
@@ -12100,8 +12142,8 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12100
12142
|
record.pendingMessageTokens || 0,
|
|
12101
12143
|
record.totalTokensObserved || 0,
|
|
12102
12144
|
record.observationTokenCount || 0,
|
|
12103
|
-
record.observedMessageIds ?
|
|
12104
|
-
record.bufferedObservationChunks ?
|
|
12145
|
+
record.observedMessageIds ? toPgJson(record.observedMessageIds) : null,
|
|
12146
|
+
record.bufferedObservationChunks ? toPgJson(record.bufferedObservationChunks) : null,
|
|
12105
12147
|
record.bufferedReflection || null,
|
|
12106
12148
|
record.bufferedReflectionTokens ?? null,
|
|
12107
12149
|
record.bufferedReflectionInputTokens ?? null,
|
|
@@ -12113,7 +12155,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12113
12155
|
record.lastBufferedAtTokens || 0,
|
|
12114
12156
|
lastBufferedAtTimeStr,
|
|
12115
12157
|
record.observedTimezone || null,
|
|
12116
|
-
record.metadata ?
|
|
12158
|
+
record.metadata ? toPgJson(record.metadata) : null,
|
|
12117
12159
|
record.createdAt.toISOString(),
|
|
12118
12160
|
record.createdAt.toISOString(),
|
|
12119
12161
|
record.updatedAt.toISOString(),
|
|
@@ -12141,7 +12183,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12141
12183
|
});
|
|
12142
12184
|
const lastObservedAtStr = input.lastObservedAt.toISOString();
|
|
12143
12185
|
const nowStr = now.toISOString();
|
|
12144
|
-
const observedMessageIdsJson = input.observedMessageIds ?
|
|
12186
|
+
const observedMessageIdsJson = input.observedMessageIds ? toPgJson(input.observedMessageIds) : null;
|
|
12145
12187
|
if ((await this.#db.client.query(`UPDATE ${tableName} SET
|
|
12146
12188
|
"activeObservations" = $1,
|
|
12147
12189
|
"lastObservedAt" = $2,
|
|
@@ -12230,7 +12272,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12230
12272
|
input.reflection,
|
|
12231
12273
|
null,
|
|
12232
12274
|
"reflection",
|
|
12233
|
-
|
|
12275
|
+
toPgJson(record.config),
|
|
12234
12276
|
input.currentRecord.generationCount + 1,
|
|
12235
12277
|
lastObservedAtStr,
|
|
12236
12278
|
lastObservedAtStr,
|
|
@@ -12246,7 +12288,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12246
12288
|
0,
|
|
12247
12289
|
null,
|
|
12248
12290
|
record.observedTimezone || null,
|
|
12249
|
-
record.metadata ?
|
|
12291
|
+
record.metadata ? toPgJson(record.metadata) : null,
|
|
12250
12292
|
nowStr,
|
|
12251
12293
|
nowStr,
|
|
12252
12294
|
nowStr,
|
|
@@ -12497,7 +12539,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12497
12539
|
const merged = this.deepMergeConfig(existing, input.config);
|
|
12498
12540
|
const nowStr = (/* @__PURE__ */ new Date()).toISOString();
|
|
12499
12541
|
await this.#db.client.query(`UPDATE ${tableName} SET config = $1, "updatedAt" = $2, "updatedAtZ" = $3 WHERE id = $4`, [
|
|
12500
|
-
|
|
12542
|
+
toPgJson(merged),
|
|
12501
12543
|
nowStr,
|
|
12502
12544
|
nowStr,
|
|
12503
12545
|
input.id
|
|
@@ -12548,7 +12590,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12548
12590
|
"updatedAt" = $4,
|
|
12549
12591
|
"updatedAtZ" = $5
|
|
12550
12592
|
WHERE id = $6`, [
|
|
12551
|
-
|
|
12593
|
+
toPgJson([newChunk]),
|
|
12552
12594
|
input.chunk.cycleId,
|
|
12553
12595
|
lastBufferedAtTime,
|
|
12554
12596
|
nowStr,
|
|
@@ -12663,7 +12705,7 @@ var MemoryPG = class MemoryPG extends MemoryStorage {
|
|
|
12663
12705
|
activatedContent,
|
|
12664
12706
|
activatedTokens,
|
|
12665
12707
|
activatedMessageTokens,
|
|
12666
|
-
remainingChunks.length > 0 ?
|
|
12708
|
+
remainingChunks.length > 0 ? toPgJson(remainingChunks) : null,
|
|
12667
12709
|
lastObservedAtStr,
|
|
12668
12710
|
lastObservedAtStr,
|
|
12669
12711
|
nowStr,
|
|
@@ -13043,7 +13085,7 @@ var NotificationsPG = class NotificationsPG extends NotificationsStorage {
|
|
|
13043
13085
|
});
|
|
13044
13086
|
const setColumns = entries.map(([key], index) => `"${parseSqlIdentifier(key, "column name")}" = $${index + 1}`);
|
|
13045
13087
|
const values = entries.map(([key, value]) => {
|
|
13046
|
-
if (TABLE_SCHEMAS[TABLE_NOTIFICATIONS][key]?.type === "jsonb" && value !== null) return
|
|
13088
|
+
if (TABLE_SCHEMAS[TABLE_NOTIFICATIONS][key]?.type === "jsonb" && value !== null) return toPgJson(value);
|
|
13047
13089
|
return value;
|
|
13048
13090
|
});
|
|
13049
13091
|
await this.#db.client.none(`UPDATE ${tableName} SET ${setColumns.join(", ")} WHERE "threadId" = $${values.length + 1} AND "id" = $${values.length + 2}`, [
|
|
@@ -13764,15 +13806,15 @@ var ObservabilityPG = class ObservabilityPG extends ObservabilityStorage {
|
|
|
13764
13806
|
}
|
|
13765
13807
|
if (filters.scope != null) {
|
|
13766
13808
|
conditions.push(`r."scope" @> $${paramIndex++}`);
|
|
13767
|
-
params.push(
|
|
13809
|
+
params.push(toPgJson(filters.scope));
|
|
13768
13810
|
}
|
|
13769
13811
|
if (filters.metadata != null) {
|
|
13770
13812
|
conditions.push(`r."metadata" @> $${paramIndex++}`);
|
|
13771
|
-
params.push(
|
|
13813
|
+
params.push(toPgJson(filters.metadata));
|
|
13772
13814
|
}
|
|
13773
13815
|
if (filters.tags != null && filters.tags.length > 0) {
|
|
13774
13816
|
conditions.push(`r."tags" @> $${paramIndex++}`);
|
|
13775
|
-
params.push(
|
|
13817
|
+
params.push(toPgJson(filters.tags));
|
|
13776
13818
|
}
|
|
13777
13819
|
if (filters.status !== void 0) switch (filters.status) {
|
|
13778
13820
|
case TraceStatus.ERROR:
|
|
@@ -15081,7 +15123,7 @@ async function upsertCache(client, schema, cacheKey, values) {
|
|
|
15081
15123
|
VALUES ($1, NOW(), $2::jsonb)
|
|
15082
15124
|
ON CONFLICT ("cacheKey") DO UPDATE SET
|
|
15083
15125
|
"refreshedAt" = EXCLUDED."refreshedAt",
|
|
15084
|
-
"values" = EXCLUDED."values"`, [cacheKey,
|
|
15126
|
+
"values" = EXCLUDED."values"`, [cacheKey, toPgJson(values)]);
|
|
15085
15127
|
}
|
|
15086
15128
|
/**
|
|
15087
15129
|
* Time predicate that bounds a discovery refresh to recent events.
|
|
@@ -16035,20 +16077,6 @@ const COMPLEX_GROUP_BY_EXCLUDED = /* @__PURE__ */ new Set([
|
|
|
16035
16077
|
"requestContext"
|
|
16036
16078
|
]);
|
|
16037
16079
|
//#endregion
|
|
16038
|
-
//#region src/storage/db/sanitize-json.ts
|
|
16039
|
-
/**
|
|
16040
|
-
* Sanitizes JSON string for PostgreSQL jsonb:
|
|
16041
|
-
* - Removes problematic Unicode sequences:
|
|
16042
|
-
* - \u0000 (null character) - causes error 22P05 "unsupported Unicode escape sequence"
|
|
16043
|
-
* - \uD800-\uDFFF (unpaired surrogates) - causes "Unicode low surrogate must follow a high surrogate"
|
|
16044
|
-
* - \\uD800 (escaped-backslash + surrogate, e.g. from JS regex literals like [^\ud800-\udfff]):
|
|
16045
|
-
* removing just \uXXXX would leave a dangling backslash that creates a new invalid escape (e.g. \-)
|
|
16046
|
-
* - Escapes any remaining invalid JSON escape sequences (e.g. \v, \k, \-)
|
|
16047
|
-
*/
|
|
16048
|
-
function sanitizeJsonForPg(jsonString) {
|
|
16049
|
-
return jsonString.replace(/\\\\?u(0000|[Dd][89A-Fa-f][0-9A-Fa-f]{2})/g, "").replace(/(^|[^\\])(\\(?!["\\/bfnrtu]))/g, "$1\\\\");
|
|
16050
|
-
}
|
|
16051
|
-
//#endregion
|
|
16052
16080
|
//#region src/storage/domains/observability/v-next/sql.ts
|
|
16053
16081
|
/**
|
|
16054
16082
|
* SQL helpers for the v-next Postgres observability domain.
|
|
@@ -16070,7 +16098,7 @@ function sanitizeJsonForPg(jsonString) {
|
|
|
16070
16098
|
*/
|
|
16071
16099
|
function encodeJsonb(value) {
|
|
16072
16100
|
if (value === null || value === void 0) return null;
|
|
16073
|
-
return
|
|
16101
|
+
return toPgJson(value);
|
|
16074
16102
|
}
|
|
16075
16103
|
/**
|
|
16076
16104
|
* Build a multi-row INSERT with explicit column types and ON CONFLICT DO NOTHING.
|
|
@@ -16471,7 +16499,7 @@ function applyMetricFilters(acc, filters) {
|
|
|
16471
16499
|
applySingleOrArrayFilter(acc, "costUnit", filters?.costUnit);
|
|
16472
16500
|
if (filters?.labels) {
|
|
16473
16501
|
acc.conditions.push(`"labels" @> $${acc.next++}::jsonb`);
|
|
16474
|
-
acc.params.push(
|
|
16502
|
+
acc.params.push(toPgJson(filters.labels));
|
|
16475
16503
|
}
|
|
16476
16504
|
}
|
|
16477
16505
|
/** Additional WHERE for metric-name restriction (OLAP queries take a `name` array). */
|
|
@@ -16984,7 +17012,7 @@ function applyScoreFilters(acc, filters) {
|
|
|
16984
17012
|
}
|
|
16985
17013
|
if (filters?.metadata && Object.keys(filters.metadata).length > 0) for (const [key, value] of Object.entries(filters.metadata)) {
|
|
16986
17014
|
acc.conditions.push(`"metadata"->($${acc.next++}::text) = $${acc.next++}::jsonb`);
|
|
16987
|
-
acc.params.push(key,
|
|
17015
|
+
acc.params.push(key, toPgJson(value ?? null));
|
|
16988
17016
|
}
|
|
16989
17017
|
}
|
|
16990
17018
|
/** OLAP queries take an explicit scorerId / scoreSource pair as identity. */
|
|
@@ -17250,12 +17278,16 @@ async function getScorePercentiles(client, schema, args) {
|
|
|
17250
17278
|
//#endregion
|
|
17251
17279
|
//#region src/storage/domains/observability/v-next/trace-query.ts
|
|
17252
17280
|
const TRACE_STATUS_SQL = `CASE WHEN r."error" IS NOT NULL THEN 'error' ELSE 'success' END`;
|
|
17281
|
+
function durationMsSql(startedAt, endedAt) {
|
|
17282
|
+
return `EXTRACT(EPOCH FROM (${endedAt} - ${startedAt}))::numeric * 1000`;
|
|
17283
|
+
}
|
|
17253
17284
|
const TRACE_FIELDS = {
|
|
17254
17285
|
traceId: "r.\"traceId\"",
|
|
17255
17286
|
threadId: "r.\"threadId\"",
|
|
17256
17287
|
resourceId: "r.\"resourceId\"",
|
|
17257
17288
|
startedAt: "r.\"startedAt\"",
|
|
17258
17289
|
endedAt: "r.\"endedAt\"",
|
|
17290
|
+
durationMs: durationMsSql("r.\"startedAt\"", "r.\"endedAt\""),
|
|
17259
17291
|
entityName: "r.\"entityName\"",
|
|
17260
17292
|
entityType: "r.\"entityType\"",
|
|
17261
17293
|
environment: "r.\"environment\"",
|
|
@@ -17584,7 +17616,7 @@ function compilePostgresTraceScope(schema, selection, relationCollections, scope
|
|
|
17584
17616
|
CASE WHEN s."isPending" THEN NULL ELSE s."endedAt" END AS "endedAt",
|
|
17585
17617
|
CASE
|
|
17586
17618
|
WHEN s."isPending" THEN NULL
|
|
17587
|
-
ELSE
|
|
17619
|
+
ELSE ${durationMsSql("s.\"startedAt\"", "s.\"endedAt\"")}
|
|
17588
17620
|
END AS "durationMs",
|
|
17589
17621
|
CASE WHEN s."error" IS NOT NULL THEN 'error' ELSE 'success' END AS "status",
|
|
17590
17622
|
s."error",
|
|
@@ -18183,7 +18215,7 @@ function buildListTracesFilters(filters, spanTable, nextParamIdx) {
|
|
|
18183
18215
|
}
|
|
18184
18216
|
if (filters.metadata != null) {
|
|
18185
18217
|
conditions.push(`r."metadataSearch" @> $${i++}::jsonb`);
|
|
18186
|
-
params.push(
|
|
18218
|
+
params.push(toPgJson(filters.metadata));
|
|
18187
18219
|
}
|
|
18188
18220
|
if (filters.tags != null && filters.tags.length > 0) {
|
|
18189
18221
|
conditions.push(`r."tags" @> $${i++}::text[]`);
|
|
@@ -18461,7 +18493,7 @@ function buildListBranchesFilters(filters, spanType, spanTable, nextParamIdx) {
|
|
|
18461
18493
|
}
|
|
18462
18494
|
if (filters.metadata != null) {
|
|
18463
18495
|
conditions.push(`r."metadataSearch" @> $${i++}::jsonb`);
|
|
18464
|
-
params.push(
|
|
18496
|
+
params.push(toPgJson(filters.metadata));
|
|
18465
18497
|
}
|
|
18466
18498
|
if (filters.tags != null && filters.tags.length > 0) {
|
|
18467
18499
|
conditions.push(`r."tags" @> $${i++}::text[]`);
|
|
@@ -18926,6 +18958,7 @@ var ObservabilityStoragePostgresVNext = class ObservabilityStoragePostgresVNext
|
|
|
18926
18958
|
"metrics",
|
|
18927
18959
|
"logs",
|
|
18928
18960
|
"trace-query",
|
|
18961
|
+
"trace-query-root-duration",
|
|
18929
18962
|
"trace-query-discovery",
|
|
18930
18963
|
"thread-query",
|
|
18931
18964
|
"trace-query-tenant-scope"
|
|
@@ -18935,6 +18968,7 @@ var ObservabilityStoragePostgresVNext = class ObservabilityStoragePostgresVNext
|
|
|
18935
18968
|
"logs",
|
|
18936
18969
|
"delta-polling",
|
|
18937
18970
|
"trace-query",
|
|
18971
|
+
"trace-query-root-duration",
|
|
18938
18972
|
"trace-query-discovery",
|
|
18939
18973
|
"thread-query",
|
|
18940
18974
|
"trace-query-tenant-scope"
|
|
@@ -19252,7 +19286,7 @@ var PromptBlocksPG = class PromptBlocksPG extends PromptBlocksStorage {
|
|
|
19252
19286
|
"draft",
|
|
19253
19287
|
null,
|
|
19254
19288
|
promptBlock.authorId ?? null,
|
|
19255
|
-
promptBlock.metadata ?
|
|
19289
|
+
promptBlock.metadata ? toPgJson(promptBlock.metadata) : null,
|
|
19256
19290
|
nowIso,
|
|
19257
19291
|
nowIso,
|
|
19258
19292
|
nowIso,
|
|
@@ -19331,7 +19365,7 @@ var PromptBlocksPG = class PromptBlocksPG extends PromptBlocksStorage {
|
|
|
19331
19365
|
...metadata
|
|
19332
19366
|
};
|
|
19333
19367
|
setClauses.push(`metadata = $${paramIndex++}`);
|
|
19334
|
-
values.push(
|
|
19368
|
+
values.push(toPgJson(mergedMetadata));
|
|
19335
19369
|
}
|
|
19336
19370
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
19337
19371
|
setClauses.push(`"updatedAt" = $${paramIndex++}`);
|
|
@@ -19406,7 +19440,7 @@ var PromptBlocksPG = class PromptBlocksPG extends PromptBlocksStorage {
|
|
|
19406
19440
|
}
|
|
19407
19441
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
19408
19442
|
conditions.push(`metadata @> $${paramIdx++}::jsonb`);
|
|
19409
|
-
queryParams.push(
|
|
19443
|
+
queryParams.push(toPgJson(metadata));
|
|
19410
19444
|
}
|
|
19411
19445
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
19412
19446
|
const countResult = await this.#db.readClient.one(`SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`, queryParams);
|
|
@@ -19469,9 +19503,9 @@ var PromptBlocksPG = class PromptBlocksPG extends PromptBlocksStorage {
|
|
|
19469
19503
|
input.name,
|
|
19470
19504
|
input.description ?? null,
|
|
19471
19505
|
input.content,
|
|
19472
|
-
input.rules ?
|
|
19473
|
-
input.requestContextSchema ?
|
|
19474
|
-
input.changedFields ?
|
|
19506
|
+
input.rules ? toPgJson(input.rules) : null,
|
|
19507
|
+
input.requestContextSchema ? toPgJson(input.requestContextSchema) : null,
|
|
19508
|
+
input.changedFields ? toPgJson(input.changedFields) : null,
|
|
19475
19509
|
input.changeMessage ?? null,
|
|
19476
19510
|
nowIso,
|
|
19477
19511
|
nowIso
|
|
@@ -19978,8 +20012,8 @@ var SchedulesPG = class SchedulesPG extends SchedulesStorage {
|
|
|
19978
20012
|
if ("timezone" in patch) push("timezone = ?", patch.timezone ?? null);
|
|
19979
20013
|
if ("status" in patch && patch.status !== void 0) push("status = ?", patch.status);
|
|
19980
20014
|
if ("nextFireAt" in patch && patch.nextFireAt !== void 0) push("next_fire_at = ?", patch.nextFireAt);
|
|
19981
|
-
if ("target" in patch && patch.target !== void 0) push("target = ?::jsonb",
|
|
19982
|
-
if ("metadata" in patch) push("metadata = ?::jsonb", patch.metadata != null ?
|
|
20015
|
+
if ("target" in patch && patch.target !== void 0) push("target = ?::jsonb", toPgJson(patch.target));
|
|
20016
|
+
if ("metadata" in patch) push("metadata = ?::jsonb", patch.metadata != null ? toPgJson(patch.metadata) : null);
|
|
19983
20017
|
if ("ownerType" in patch) push("owner_type = ?", patch.ownerType ?? null);
|
|
19984
20018
|
if ("ownerId" in patch) push("owner_id = ?", patch.ownerId ?? null);
|
|
19985
20019
|
push("updated_at = ?", Date.now());
|
|
@@ -20197,7 +20231,7 @@ var ScorerDefinitionsPG = class ScorerDefinitionsPG extends ScorerDefinitionsSto
|
|
|
20197
20231
|
scorerDefinition.authorId ?? null,
|
|
20198
20232
|
scorerDefinition.organizationId ?? null,
|
|
20199
20233
|
scorerDefinition.projectId ?? null,
|
|
20200
|
-
scorerDefinition.metadata ?
|
|
20234
|
+
scorerDefinition.metadata ? toPgJson(scorerDefinition.metadata) : null,
|
|
20201
20235
|
nowIso,
|
|
20202
20236
|
nowIso,
|
|
20203
20237
|
nowIso,
|
|
@@ -20278,7 +20312,7 @@ var ScorerDefinitionsPG = class ScorerDefinitionsPG extends ScorerDefinitionsSto
|
|
|
20278
20312
|
...metadata
|
|
20279
20313
|
};
|
|
20280
20314
|
setClauses.push(`metadata = $${paramIndex++}`);
|
|
20281
|
-
values.push(
|
|
20315
|
+
values.push(toPgJson(mergedMetadata));
|
|
20282
20316
|
}
|
|
20283
20317
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
20284
20318
|
setClauses.push(`"updatedAt" = $${paramIndex++}`);
|
|
@@ -20361,7 +20395,7 @@ var ScorerDefinitionsPG = class ScorerDefinitionsPG extends ScorerDefinitionsSto
|
|
|
20361
20395
|
}
|
|
20362
20396
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
20363
20397
|
conditions.push(`metadata @> $${paramIdx++}::jsonb`);
|
|
20364
|
-
queryParams.push(
|
|
20398
|
+
queryParams.push(toPgJson(metadata));
|
|
20365
20399
|
}
|
|
20366
20400
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
20367
20401
|
const countResult = await this.#db.readClient.one(`SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`, queryParams);
|
|
@@ -20424,12 +20458,12 @@ var ScorerDefinitionsPG = class ScorerDefinitionsPG extends ScorerDefinitionsSto
|
|
|
20424
20458
|
input.name,
|
|
20425
20459
|
input.description ?? null,
|
|
20426
20460
|
input.type,
|
|
20427
|
-
input.model ?
|
|
20461
|
+
input.model ? toPgJson(input.model) : null,
|
|
20428
20462
|
input.instructions ?? null,
|
|
20429
|
-
input.scoreRange ?
|
|
20430
|
-
input.presetConfig ?
|
|
20431
|
-
input.defaultSampling ?
|
|
20432
|
-
input.changedFields ?
|
|
20463
|
+
input.scoreRange ? toPgJson(input.scoreRange) : null,
|
|
20464
|
+
input.presetConfig ? toPgJson(input.presetConfig) : null,
|
|
20465
|
+
input.defaultSampling ? toPgJson(input.defaultSampling) : null,
|
|
20466
|
+
input.changedFields ? toPgJson(input.changedFields) : null,
|
|
20433
20467
|
input.changeMessage ?? null,
|
|
20434
20468
|
nowIso,
|
|
20435
20469
|
nowIso
|
|
@@ -20949,15 +20983,15 @@ var ScoresPG = class ScoresPG extends ScoresStorage {
|
|
|
20949
20983
|
record: {
|
|
20950
20984
|
id,
|
|
20951
20985
|
...rest,
|
|
20952
|
-
input:
|
|
20953
|
-
output:
|
|
20954
|
-
scorer: scorer ?
|
|
20955
|
-
preprocessStepResult: preprocessStepResult ?
|
|
20956
|
-
analyzeStepResult: analyzeStepResult ?
|
|
20957
|
-
metadata: metadata ?
|
|
20958
|
-
additionalContext: additionalContext ?
|
|
20959
|
-
requestContext: requestContext ?
|
|
20960
|
-
entity: entity ?
|
|
20986
|
+
input: toPgJson(input) || "",
|
|
20987
|
+
output: toPgJson(output) || "",
|
|
20988
|
+
scorer: scorer ? toPgJson(scorer) : null,
|
|
20989
|
+
preprocessStepResult: preprocessStepResult ? toPgJson(preprocessStepResult) : null,
|
|
20990
|
+
analyzeStepResult: analyzeStepResult ? toPgJson(analyzeStepResult) : null,
|
|
20991
|
+
metadata: metadata ? toPgJson(metadata) : null,
|
|
20992
|
+
additionalContext: additionalContext ? toPgJson(additionalContext) : null,
|
|
20993
|
+
requestContext: requestContext ? toPgJson(requestContext) : null,
|
|
20994
|
+
entity: entity ? toPgJson(entity) : null,
|
|
20961
20995
|
createdAt: now.toISOString(),
|
|
20962
20996
|
updatedAt: now.toISOString()
|
|
20963
20997
|
}
|
|
@@ -21542,15 +21576,15 @@ var SkillsPG = class SkillsPG extends SkillsStorage {
|
|
|
21542
21576
|
input.description ?? null,
|
|
21543
21577
|
input.instructions ?? null,
|
|
21544
21578
|
input.license ?? null,
|
|
21545
|
-
input.compatibility ?
|
|
21546
|
-
input.source ?
|
|
21547
|
-
input.references ?
|
|
21548
|
-
input.scripts ?
|
|
21549
|
-
input.assets ?
|
|
21550
|
-
input.files ?
|
|
21551
|
-
input.metadata ?
|
|
21552
|
-
input.tree ?
|
|
21553
|
-
input.changedFields ?
|
|
21579
|
+
input.compatibility ? toPgJson(input.compatibility) : null,
|
|
21580
|
+
input.source ? toPgJson(input.source) : null,
|
|
21581
|
+
input.references ? toPgJson(input.references) : null,
|
|
21582
|
+
input.scripts ? toPgJson(input.scripts) : null,
|
|
21583
|
+
input.assets ? toPgJson(input.assets) : null,
|
|
21584
|
+
input.files ? toPgJson(input.files) : null,
|
|
21585
|
+
input.metadata ? toPgJson(input.metadata) : null,
|
|
21586
|
+
input.tree ? toPgJson(input.tree) : null,
|
|
21587
|
+
input.changedFields ? toPgJson(input.changedFields) : null,
|
|
21554
21588
|
input.changeMessage ?? null,
|
|
21555
21589
|
nowIso,
|
|
21556
21590
|
nowIso
|
|
@@ -21926,7 +21960,7 @@ var ThreadStatePG = class ThreadStatePG extends ThreadStateStorage {
|
|
|
21926
21960
|
}
|
|
21927
21961
|
async setState({ threadId, type, value }) {
|
|
21928
21962
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
21929
|
-
const serialized =
|
|
21963
|
+
const serialized = toPgJson(value ?? null);
|
|
21930
21964
|
try {
|
|
21931
21965
|
await this.#db.client.none(`INSERT INTO ${this.#table} ("threadId", "type", "value", "createdAt", "createdAtZ", "updatedAt", "updatedAtZ")
|
|
21932
21966
|
VALUES ($1, $2, $3::jsonb, $4::timestamp, $5::timestamptz, $4::timestamp, $5::timestamptz)
|
|
@@ -22703,7 +22737,7 @@ var WorkflowsPG = class WorkflowsPG extends WorkflowsStorage {
|
|
|
22703
22737
|
requestContext
|
|
22704
22738
|
});
|
|
22705
22739
|
const now = /* @__PURE__ */ new Date();
|
|
22706
|
-
const sanitizedSnapshot =
|
|
22740
|
+
const sanitizedSnapshot = toPgJson(snapshot);
|
|
22707
22741
|
await t.none(`INSERT INTO ${tableName}
|
|
22708
22742
|
(workflow_name, run_id, snapshot, "createdAt", "updatedAt", "createdAtZ", "updatedAtZ")
|
|
22709
22743
|
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
@@ -22750,7 +22784,7 @@ var WorkflowsPG = class WorkflowsPG extends WorkflowsStorage {
|
|
|
22750
22784
|
...snapshot,
|
|
22751
22785
|
...state
|
|
22752
22786
|
};
|
|
22753
|
-
const sanitizedSnapshot =
|
|
22787
|
+
const sanitizedSnapshot = toPgJson(updatedSnapshot);
|
|
22754
22788
|
const now = /* @__PURE__ */ new Date();
|
|
22755
22789
|
await t.none(`UPDATE ${tableName}
|
|
22756
22790
|
SET snapshot = $1, "updatedAt" = $2, "updatedAtZ" = $3
|
|
@@ -22780,7 +22814,7 @@ var WorkflowsPG = class WorkflowsPG extends WorkflowsStorage {
|
|
|
22780
22814
|
const now = /* @__PURE__ */ new Date();
|
|
22781
22815
|
const createdAtValue = createdAt ? createdAt : now;
|
|
22782
22816
|
const updatedAtValue = updatedAt ? updatedAt : now;
|
|
22783
|
-
const sanitizedSnapshot =
|
|
22817
|
+
const sanitizedSnapshot = toPgJson(snapshot);
|
|
22784
22818
|
await this.#db.client.none(`INSERT INTO ${getTableName({
|
|
22785
22819
|
indexName: TABLE_WORKFLOW_SNAPSHOT,
|
|
22786
22820
|
schemaName: getSchemaName(this.#schema)
|
|
@@ -23092,7 +23126,7 @@ var WorkspacesPG = class WorkspacesPG extends WorkspacesStorage {
|
|
|
23092
23126
|
"draft",
|
|
23093
23127
|
null,
|
|
23094
23128
|
workspace.authorId ?? null,
|
|
23095
|
-
workspace.metadata ?
|
|
23129
|
+
workspace.metadata ? toPgJson(workspace.metadata) : null,
|
|
23096
23130
|
nowIso,
|
|
23097
23131
|
nowIso,
|
|
23098
23132
|
nowIso,
|
|
@@ -23167,7 +23201,11 @@ var WorkspacesPG = class WorkspacesPG extends WorkspacesStorage {
|
|
|
23167
23201
|
...latestConfig,
|
|
23168
23202
|
...configFields
|
|
23169
23203
|
};
|
|
23170
|
-
const
|
|
23204
|
+
const normalized = (value) => {
|
|
23205
|
+
const json = toPgJson(value);
|
|
23206
|
+
return json === void 0 ? void 0 : JSON.parse(json);
|
|
23207
|
+
};
|
|
23208
|
+
const changedFields = SNAPSHOT_FIELDS.filter((field) => field in configFields && !isDeepStrictEqual(normalized(configFields[field]), normalized(latestConfig[field])));
|
|
23171
23209
|
if (changedFields.length > 0) {
|
|
23172
23210
|
versionCreated = true;
|
|
23173
23211
|
const newVersionId = crypto.randomUUID();
|
|
@@ -23201,12 +23239,13 @@ var WorkspacesPG = class WorkspacesPG extends WorkspacesStorage {
|
|
|
23201
23239
|
values.push(status);
|
|
23202
23240
|
}
|
|
23203
23241
|
if (metadata !== void 0) {
|
|
23242
|
+
const normalizedMetadata = JSON.parse(toPgJson(metadata));
|
|
23204
23243
|
const mergedMetadata = {
|
|
23205
23244
|
...existingWorkspace.metadata || {},
|
|
23206
|
-
...
|
|
23245
|
+
...normalizedMetadata
|
|
23207
23246
|
};
|
|
23208
23247
|
setClauses.push(`metadata = $${paramIndex++}`);
|
|
23209
|
-
values.push(
|
|
23248
|
+
values.push(toPgJson(mergedMetadata));
|
|
23210
23249
|
}
|
|
23211
23250
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
23212
23251
|
setClauses.push(`"updatedAt" = $${paramIndex++}`);
|
|
@@ -23277,7 +23316,7 @@ var WorkspacesPG = class WorkspacesPG extends WorkspacesStorage {
|
|
|
23277
23316
|
}
|
|
23278
23317
|
if (metadata && Object.keys(metadata).length > 0) {
|
|
23279
23318
|
conditions.push(`metadata @> $${paramIdx++}::jsonb`);
|
|
23280
|
-
queryParams.push(
|
|
23319
|
+
queryParams.push(toPgJson(metadata));
|
|
23281
23320
|
}
|
|
23282
23321
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
23283
23322
|
const countResult = await this.#db.readClient.one(`SELECT COUNT(*) as count FROM ${tableName} ${whereClause}`, queryParams);
|
|
@@ -23340,15 +23379,15 @@ var WorkspacesPG = class WorkspacesPG extends WorkspacesStorage {
|
|
|
23340
23379
|
input.versionNumber,
|
|
23341
23380
|
input.name,
|
|
23342
23381
|
input.description ?? null,
|
|
23343
|
-
input.filesystem ?
|
|
23344
|
-
input.sandbox ?
|
|
23345
|
-
input.mounts ?
|
|
23346
|
-
input.search ?
|
|
23347
|
-
input.skills ?
|
|
23348
|
-
input.tools ?
|
|
23382
|
+
input.filesystem ? toPgJson(input.filesystem) : null,
|
|
23383
|
+
input.sandbox ? toPgJson(input.sandbox) : null,
|
|
23384
|
+
input.mounts ? toPgJson(input.mounts) : null,
|
|
23385
|
+
input.search ? toPgJson(input.search) : null,
|
|
23386
|
+
input.skills ? toPgJson(input.skills) : null,
|
|
23387
|
+
input.tools ? toPgJson(input.tools) : null,
|
|
23349
23388
|
input.autoSync ?? false,
|
|
23350
23389
|
input.operationTimeout ?? null,
|
|
23351
|
-
input.changedFields ?
|
|
23390
|
+
input.changedFields ? toPgJson(input.changedFields) : null,
|
|
23352
23391
|
input.changeMessage ?? null,
|
|
23353
23392
|
nowIso,
|
|
23354
23393
|
nowIso
|
|
@@ -23640,7 +23679,7 @@ var PgFactoryStorageOps = class {
|
|
|
23640
23679
|
switch (spec.type) {
|
|
23641
23680
|
case "timestamp": return value instanceof Date ? value : new Date(String(value));
|
|
23642
23681
|
case "boolean": return Boolean(value);
|
|
23643
|
-
case "json": return
|
|
23682
|
+
case "json": return toPgJson(value);
|
|
23644
23683
|
case "bigint":
|
|
23645
23684
|
case "integer": return Number(value);
|
|
23646
23685
|
default: return String(value);
|