@mastra/libsql 1.14.0 → 1.14.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createClient } from '@libsql/client';
2
2
  import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
3
- import { createVectorErrorId, AgentsStorage, AGENTS_SCHEMA, TABLE_AGENTS, AGENT_VERSIONS_SCHEMA, TABLE_AGENT_VERSIONS, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_SCHEMAS, TABLE_BACKGROUND_TASKS, BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, DatasetsStorage, DATASETS_SCHEMA, TABLE_DATASETS, DATASET_ITEMS_SCHEMA, TABLE_DATASET_ITEMS, DATASET_VERSIONS_SCHEMA, TABLE_DATASET_VERSIONS, ensureDate, safelyParseJSON, TABLE_EXPERIMENT_RESULTS, TABLE_EXPERIMENTS, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, FavoritesStorage, FAVORITES_SCHEMA, TABLE_FAVORITES, TABLE_SKILLS, HarnessStorage, TABLE_HARNESS_SESSIONS, MCPClientsStorage, MCP_CLIENTS_SCHEMA, TABLE_MCP_CLIENTS, MCP_CLIENT_VERSIONS_SCHEMA, TABLE_MCP_CLIENT_VERSIONS, MCPServersStorage, MCP_SERVERS_SCHEMA, TABLE_MCP_SERVERS, MCP_SERVER_VERSIONS_SCHEMA, TABLE_MCP_SERVER_VERSIONS, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, NotificationsStorage, TABLE_NOTIFICATIONS, ObservabilityStorage, SPAN_SCHEMA, TABLE_SPANS, listTracesArgsSchema, toTraceSpans, PromptBlocksStorage, PROMPT_BLOCKS_SCHEMA, TABLE_PROMPT_BLOCKS, PROMPT_BLOCK_VERSIONS_SCHEMA, TABLE_PROMPT_BLOCK_VERSIONS, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ScorerDefinitionsStorage, SCORER_DEFINITIONS_SCHEMA, TABLE_SCORER_DEFINITIONS, SCORER_DEFINITION_VERSIONS_SCHEMA, TABLE_SCORER_DEFINITION_VERSIONS, ScoresStorage, SCORERS_SCHEMA, TABLE_SCORERS, transformScoreRow, SkillsStorage, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, TABLE_SKILL_VERSIONS, ThreadStateStorage, THREAD_STATE_SCHEMA, TABLE_THREAD_STATE, ToolProviderConnectionsStorage, TOOL_PROVIDER_CONNECTIONS_SCHEMA, TABLE_TOOL_PROVIDER_CONNECTIONS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, WorkspacesStorage, WORKSPACES_SCHEMA, TABLE_WORKSPACES, WORKSPACE_VERSIONS_SCHEMA, TABLE_WORKSPACE_VERSIONS, MastraCompositeStore, getSqlType, TraceStatus, mergeWorkflowStepResult } from '@mastra/core/storage';
3
+ import { createVectorErrorId, AgentsStorage, AGENTS_SCHEMA, TABLE_AGENTS, AGENT_VERSIONS_SCHEMA, TABLE_AGENT_VERSIONS, createStorageErrorId, normalizePerPage, calculatePagination, BackgroundTasksStorage, TABLE_SCHEMAS, TABLE_BACKGROUND_TASKS, BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, DatasetsStorage, DATASETS_SCHEMA, TABLE_DATASETS, DATASET_ITEMS_SCHEMA, TABLE_DATASET_ITEMS, DATASET_VERSIONS_SCHEMA, TABLE_DATASET_VERSIONS, ensureDate, safelyParseJSON, TABLE_EXPERIMENT_RESULTS, TABLE_EXPERIMENTS, ExperimentsStorage, EXPERIMENTS_SCHEMA, EXPERIMENT_RESULTS_SCHEMA, FavoritesStorage, FAVORITES_SCHEMA, TABLE_FAVORITES, TABLE_SKILLS, HarnessStorage, TABLE_HARNESS_SESSIONS, MCPClientsStorage, MCP_CLIENTS_SCHEMA, TABLE_MCP_CLIENTS, MCP_CLIENT_VERSIONS_SCHEMA, TABLE_MCP_CLIENT_VERSIONS, MCPServersStorage, MCP_SERVERS_SCHEMA, TABLE_MCP_SERVERS, MCP_SERVER_VERSIONS_SCHEMA, TABLE_MCP_SERVER_VERSIONS, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, OBSERVATIONAL_MEMORY_TABLE_SCHEMA, NotificationsStorage, TABLE_NOTIFICATIONS, ObservabilityStorage, SPAN_SCHEMA, TABLE_SPANS, listTracesArgsSchema, toTraceSpans, PromptBlocksStorage, PROMPT_BLOCKS_SCHEMA, TABLE_PROMPT_BLOCKS, PROMPT_BLOCK_VERSIONS_SCHEMA, TABLE_PROMPT_BLOCK_VERSIONS, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ScorerDefinitionsStorage, SCORER_DEFINITIONS_SCHEMA, TABLE_SCORER_DEFINITIONS, SCORER_DEFINITION_VERSIONS_SCHEMA, TABLE_SCORER_DEFINITION_VERSIONS, ScoresStorage, SCORERS_SCHEMA, TABLE_SCORERS, transformScoreRow, SkillsStorage, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, TABLE_SKILL_VERSIONS, ThreadStateStorage, THREAD_STATE_SCHEMA, TABLE_THREAD_STATE, ToolProviderConnectionsStorage, TOOL_PROVIDER_CONNECTIONS_SCHEMA, TABLE_TOOL_PROVIDER_CONNECTIONS, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, WorkspacesStorage, WORKSPACES_SCHEMA, TABLE_WORKSPACES, WORKSPACE_VERSIONS_SCHEMA, TABLE_WORKSPACE_VERSIONS, MastraCompositeStore, getSqlType, TraceStatus, mergeWorkflowStepResult } from '@mastra/core/storage';
4
4
  import { parseSqlIdentifier, parseFieldKey } from '@mastra/core/utils';
5
5
  import { MastraVector, validateTopK, validateUpsertInput } from '@mastra/core/vector';
6
6
  import { BaseFilterTranslator } from '@mastra/core/vector/filter';
@@ -3620,9 +3620,16 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3620
3620
  await this.#addColumnIfNotExists(TABLE_DATASETS, "targetType", "TEXT");
3621
3621
  await this.#addColumnIfNotExists(TABLE_DATASETS, "targetIds", "TEXT");
3622
3622
  await this.#addColumnIfNotExists(TABLE_DATASETS, "scorerIds", "TEXT");
3623
+ await this.#addColumnIfNotExists(TABLE_DATASETS, "organizationId", "TEXT");
3624
+ await this.#addColumnIfNotExists(TABLE_DATASETS, "projectId", "TEXT");
3625
+ await this.#addColumnIfNotExists(TABLE_DATASETS, "candidateKey", "TEXT");
3626
+ await this.#addColumnIfNotExists(TABLE_DATASETS, "candidateId", "TEXT");
3623
3627
  await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "requestContext", "TEXT");
3624
3628
  await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "source", "TEXT");
3625
3629
  await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "expectedTrajectory", "TEXT");
3630
+ await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "organizationId", "TEXT");
3631
+ await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "projectId", "TEXT");
3632
+ await this.#addColumnIfNotExists(TABLE_DATASET_ITEMS, "toolMocks", "TEXT");
3626
3633
  await this.#client.batch(
3627
3634
  [
3628
3635
  {
@@ -3644,6 +3651,18 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3644
3651
  {
3645
3652
  sql: `CREATE UNIQUE INDEX IF NOT EXISTS idx_dataset_versions_dataset_version_unique ON "${TABLE_DATASET_VERSIONS}" ("datasetId", "version")`,
3646
3653
  args: []
3654
+ },
3655
+ {
3656
+ sql: `CREATE INDEX IF NOT EXISTS idx_datasets_tenancy_createdat ON "${TABLE_DATASETS}" ("organizationId", "projectId", "createdAt", "id")`,
3657
+ args: []
3658
+ },
3659
+ {
3660
+ sql: `CREATE INDEX IF NOT EXISTS idx_datasets_tenancy_candidate ON "${TABLE_DATASETS}" ("organizationId", "projectId", "candidateKey", "candidateId")`,
3661
+ args: []
3662
+ },
3663
+ {
3664
+ sql: `CREATE INDEX IF NOT EXISTS idx_dataset_items_tenancy_list ON "${TABLE_DATASET_ITEMS}" ("organizationId", "projectId", "datasetId", "validTo", "isDeleted")`,
3665
+ args: []
3647
3666
  }
3648
3667
  ],
3649
3668
  "write"
@@ -3675,6 +3694,10 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3675
3694
  targetIds: row.targetIds ? safelyParseJSON(row.targetIds) : void 0,
3676
3695
  scorerIds: row.scorerIds ? safelyParseJSON(row.scorerIds) : void 0,
3677
3696
  version: row.version,
3697
+ organizationId: row.organizationId ?? null,
3698
+ projectId: row.projectId ?? null,
3699
+ candidateKey: row.candidateKey ?? null,
3700
+ candidateId: row.candidateId ?? null,
3678
3701
  createdAt: ensureDate(row.createdAt),
3679
3702
  updatedAt: ensureDate(row.updatedAt)
3680
3703
  };
@@ -3684,9 +3707,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3684
3707
  id: row.id,
3685
3708
  datasetId: row.datasetId,
3686
3709
  datasetVersion: row.datasetVersion,
3710
+ organizationId: row.organizationId ?? null,
3711
+ projectId: row.projectId ?? null,
3687
3712
  input: safelyParseJSON(row.input),
3688
3713
  groundTruth: row.groundTruth ? safelyParseJSON(row.groundTruth) : void 0,
3689
3714
  expectedTrajectory: row.expectedTrajectory ? safelyParseJSON(row.expectedTrajectory) : void 0,
3715
+ toolMocks: row.toolMocks ? safelyParseJSON(row.toolMocks) : void 0,
3690
3716
  requestContext: row.requestContext ? safelyParseJSON(row.requestContext) : void 0,
3691
3717
  metadata: row.metadata ? safelyParseJSON(row.metadata) : void 0,
3692
3718
  source: row.source ? safelyParseJSON(row.source) : void 0,
@@ -3699,11 +3725,14 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3699
3725
  id: row.id,
3700
3726
  datasetId: row.datasetId,
3701
3727
  datasetVersion: row.datasetVersion,
3728
+ organizationId: row.organizationId ?? null,
3729
+ projectId: row.projectId ?? null,
3702
3730
  validTo: row.validTo,
3703
3731
  isDeleted: Boolean(row.isDeleted),
3704
3732
  input: safelyParseJSON(row.input),
3705
3733
  groundTruth: row.groundTruth ? safelyParseJSON(row.groundTruth) : void 0,
3706
3734
  expectedTrajectory: row.expectedTrajectory ? safelyParseJSON(row.expectedTrajectory) : void 0,
3735
+ toolMocks: row.toolMocks ? safelyParseJSON(row.toolMocks) : void 0,
3707
3736
  requestContext: row.requestContext ? safelyParseJSON(row.requestContext) : void 0,
3708
3737
  metadata: row.metadata ? safelyParseJSON(row.metadata) : void 0,
3709
3738
  source: row.source ? safelyParseJSON(row.source) : void 0,
@@ -3739,6 +3768,10 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3739
3768
  targetIds: input.targetIds ? JSON.stringify(input.targetIds) : null,
3740
3769
  scorerIds: input.scorerIds ? JSON.stringify(input.scorerIds) : null,
3741
3770
  version: 0,
3771
+ organizationId: input.organizationId ?? null,
3772
+ projectId: input.projectId ?? null,
3773
+ candidateKey: input.candidateKey ?? null,
3774
+ candidateId: input.candidateId ?? null,
3742
3775
  createdAt: nowIso,
3743
3776
  updatedAt: nowIso
3744
3777
  }
@@ -3755,6 +3788,10 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3755
3788
  targetIds: input.targetIds ?? void 0,
3756
3789
  scorerIds: input.scorerIds ?? void 0,
3757
3790
  version: 0,
3791
+ organizationId: input.organizationId ?? null,
3792
+ projectId: input.projectId ?? null,
3793
+ candidateKey: input.candidateKey ?? null,
3794
+ candidateId: input.candidateId ?? null,
3758
3795
  createdAt: now,
3759
3796
  updatedAt: now
3760
3797
  };
@@ -3910,9 +3947,28 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3910
3947
  async listDatasets(args) {
3911
3948
  try {
3912
3949
  const { page, perPage: perPageInput } = args.pagination;
3950
+ const filterConditions = [];
3951
+ const filterParams = [];
3952
+ if (args.filters?.organizationId !== void 0) {
3953
+ filterConditions.push("organizationId = ?");
3954
+ filterParams.push(args.filters.organizationId);
3955
+ }
3956
+ if (args.filters?.projectId !== void 0) {
3957
+ filterConditions.push("projectId = ?");
3958
+ filterParams.push(args.filters.projectId);
3959
+ }
3960
+ if (args.filters?.candidateKey !== void 0) {
3961
+ filterConditions.push("candidateKey = ?");
3962
+ filterParams.push(args.filters.candidateKey);
3963
+ }
3964
+ if (args.filters?.candidateId !== void 0) {
3965
+ filterConditions.push("candidateId = ?");
3966
+ filterParams.push(args.filters.candidateId);
3967
+ }
3968
+ const whereClause = filterConditions.length > 0 ? `WHERE ${filterConditions.join(" AND ")}` : "";
3913
3969
  const countResult = await this.#client.execute({
3914
- sql: `SELECT COUNT(*) as count FROM ${TABLE_DATASETS}`,
3915
- args: []
3970
+ sql: `SELECT COUNT(*) as count FROM ${TABLE_DATASETS} ${whereClause}`,
3971
+ args: filterParams
3916
3972
  });
3917
3973
  const total = Number(countResult.rows?.[0]?.count ?? 0);
3918
3974
  if (total === 0) {
@@ -3926,8 +3982,8 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3926
3982
  const limitValue = perPageInput === false ? total : perPage;
3927
3983
  const end = perPageInput === false ? total : start + perPage;
3928
3984
  const result = await this.#client.execute({
3929
- sql: `SELECT ${buildSelectColumns(TABLE_DATASETS)} FROM ${TABLE_DATASETS} ORDER BY createdAt DESC, id ASC LIMIT ? OFFSET ?`,
3930
- args: [limitValue, start]
3985
+ sql: `SELECT ${buildSelectColumns(TABLE_DATASETS)} FROM ${TABLE_DATASETS} ${whereClause} ORDER BY createdAt DESC, id ASC LIMIT ? OFFSET ?`,
3986
+ args: [...filterParams, limitValue, start]
3931
3987
  });
3932
3988
  return {
3933
3989
  datasets: result.rows?.map((row) => this.transformDatasetRow(row)) ?? [],
@@ -3952,6 +4008,7 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3952
4008
  // --- SCD-2 item mutations ---
3953
4009
  async _doAddItem(args) {
3954
4010
  try {
4011
+ const dataset = await this.getDatasetById({ id: args.datasetId });
3955
4012
  const id = crypto.randomUUID();
3956
4013
  const versionId = crypto.randomUUID();
3957
4014
  const now = /* @__PURE__ */ new Date();
@@ -3963,14 +4020,17 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3963
4020
  args: [args.datasetId]
3964
4021
  },
3965
4022
  {
3966
- sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, expectedTrajectory, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4023
+ sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
3967
4024
  args: [
3968
4025
  id,
3969
4026
  args.datasetId,
3970
4027
  args.datasetId,
4028
+ args.datasetId,
4029
+ args.datasetId,
3971
4030
  jsonbArg(args.input),
3972
4031
  jsonbArg(args.groundTruth),
3973
4032
  jsonbArg(args.expectedTrajectory),
4033
+ jsonbArg(args.toolMocks),
3974
4034
  jsonbArg(args.requestContext),
3975
4035
  jsonbArg(args.metadata),
3976
4036
  jsonbArg(args.source),
@@ -3990,9 +4050,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
3990
4050
  id,
3991
4051
  datasetId: args.datasetId,
3992
4052
  datasetVersion: newVersion,
4053
+ organizationId: dataset?.organizationId ?? null,
4054
+ projectId: dataset?.projectId ?? null,
3993
4055
  input: args.input,
3994
4056
  groundTruth: args.groundTruth,
3995
4057
  expectedTrajectory: args.expectedTrajectory,
4058
+ toolMocks: args.toolMocks,
3996
4059
  requestContext: args.requestContext,
3997
4060
  metadata: args.metadata,
3998
4061
  source: args.source,
@@ -4030,12 +4093,14 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4030
4093
  details: { itemId: args.id, expectedDatasetId: args.datasetId, actualDatasetId: existing.datasetId }
4031
4094
  });
4032
4095
  }
4096
+ const dataset = await this.getDatasetById({ id: args.datasetId });
4033
4097
  const versionId = crypto.randomUUID();
4034
4098
  const now = /* @__PURE__ */ new Date();
4035
4099
  const nowIso = now.toISOString();
4036
4100
  const mergedInput = args.input !== void 0 ? args.input : existing.input;
4037
4101
  const mergedGroundTruth = args.groundTruth !== void 0 ? args.groundTruth : existing.groundTruth;
4038
4102
  const mergedExpectedTrajectory = args.expectedTrajectory !== void 0 ? args.expectedTrajectory : existing.expectedTrajectory;
4103
+ const mergedToolMocks = args.toolMocks !== void 0 ? args.toolMocks : existing.toolMocks;
4039
4104
  const mergedRequestContext = args.requestContext !== void 0 ? args.requestContext : existing.requestContext;
4040
4105
  const mergedMetadata = args.metadata !== void 0 ? args.metadata : existing.metadata;
4041
4106
  const mergedSource = args.source !== void 0 ? args.source : existing.source;
@@ -4050,14 +4115,17 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4050
4115
  args: [args.datasetId, args.id]
4051
4116
  },
4052
4117
  {
4053
- sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, expectedTrajectory, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4118
+ sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4054
4119
  args: [
4055
4120
  args.id,
4056
4121
  args.datasetId,
4057
4122
  args.datasetId,
4123
+ args.datasetId,
4124
+ args.datasetId,
4058
4125
  jsonbArg(mergedInput),
4059
4126
  jsonbArg(mergedGroundTruth),
4060
4127
  jsonbArg(mergedExpectedTrajectory),
4128
+ jsonbArg(mergedToolMocks),
4061
4129
  jsonbArg(mergedRequestContext),
4062
4130
  jsonbArg(mergedMetadata),
4063
4131
  jsonbArg(mergedSource),
@@ -4076,9 +4144,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4076
4144
  return {
4077
4145
  ...existing,
4078
4146
  datasetVersion: newVersion,
4147
+ organizationId: dataset?.organizationId ?? null,
4148
+ projectId: dataset?.projectId ?? null,
4079
4149
  input: mergedInput,
4080
4150
  groundTruth: mergedGroundTruth,
4081
4151
  expectedTrajectory: mergedExpectedTrajectory,
4152
+ toolMocks: mergedToolMocks,
4082
4153
  requestContext: mergedRequestContext,
4083
4154
  metadata: mergedMetadata,
4084
4155
  source: mergedSource,
@@ -4121,13 +4192,17 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4121
4192
  args: [datasetId, id]
4122
4193
  },
4123
4194
  {
4124
- sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4195
+ sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT organizationId FROM ${TABLE_DATASETS} WHERE id = ?), (SELECT projectId FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4125
4196
  args: [
4126
4197
  id,
4127
4198
  datasetId,
4128
4199
  datasetId,
4200
+ datasetId,
4201
+ datasetId,
4129
4202
  jsonbArg(existing.input),
4130
4203
  jsonbArg(existing.groundTruth),
4204
+ jsonbArg(existing.expectedTrajectory),
4205
+ jsonbArg(existing.toolMocks),
4131
4206
  jsonbArg(existing.requestContext),
4132
4207
  jsonbArg(existing.metadata),
4133
4208
  jsonbArg(existing.source),
@@ -4228,6 +4303,14 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4228
4303
  "isDeleted = 0"
4229
4304
  ];
4230
4305
  const queryParams2 = [args.datasetId, args.version, args.version];
4306
+ if (args.filters?.organizationId !== void 0) {
4307
+ conditions2.push("organizationId = ?");
4308
+ queryParams2.push(args.filters.organizationId);
4309
+ }
4310
+ if (args.filters?.projectId !== void 0) {
4311
+ conditions2.push("projectId = ?");
4312
+ queryParams2.push(args.filters.projectId);
4313
+ }
4231
4314
  if (args.search) {
4232
4315
  conditions2.push(`(LOWER(json(input)) LIKE ? OR LOWER(COALESCE(json(groundTruth), '')) LIKE ?)`);
4233
4316
  const searchPattern = `%${args.search.toLowerCase()}%`;
@@ -4265,6 +4348,14 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4265
4348
  }
4266
4349
  const conditions = ["datasetId = ?", "validTo IS NULL", "isDeleted = 0"];
4267
4350
  const queryParams = [args.datasetId];
4351
+ if (args.filters?.organizationId !== void 0) {
4352
+ conditions.push("organizationId = ?");
4353
+ queryParams.push(args.filters.organizationId);
4354
+ }
4355
+ if (args.filters?.projectId !== void 0) {
4356
+ conditions.push("projectId = ?");
4357
+ queryParams.push(args.filters.projectId);
4358
+ }
4268
4359
  if (args.search) {
4269
4360
  conditions.push(`(LOWER(json(input)) LIKE ? OR LOWER(COALESCE(json(groundTruth), '')) LIKE ?)`);
4270
4361
  const searchPattern = `%${args.search.toLowerCase()}%`;
@@ -4410,14 +4501,17 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4410
4501
  const id = crypto.randomUUID();
4411
4502
  items.push({ id, input: itemInput });
4412
4503
  statements.push({
4413
- sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, expectedTrajectory, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4504
+ sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, ?, NULL, 0, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4414
4505
  args: [
4415
4506
  id,
4416
4507
  input.datasetId,
4417
4508
  input.datasetId,
4509
+ dataset.organizationId ?? null,
4510
+ dataset.projectId ?? null,
4418
4511
  jsonbArg(itemInput.input),
4419
4512
  jsonbArg(itemInput.groundTruth),
4420
4513
  jsonbArg(itemInput.expectedTrajectory),
4514
+ jsonbArg(itemInput.toolMocks),
4421
4515
  jsonbArg(itemInput.requestContext),
4422
4516
  jsonbArg(itemInput.metadata),
4423
4517
  jsonbArg(itemInput.source),
@@ -4436,9 +4530,12 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4436
4530
  id,
4437
4531
  datasetId: input.datasetId,
4438
4532
  datasetVersion: newVersion,
4533
+ organizationId: dataset.organizationId ?? null,
4534
+ projectId: dataset.projectId ?? null,
4439
4535
  input: itemInput.input,
4440
4536
  groundTruth: itemInput.groundTruth,
4441
4537
  expectedTrajectory: itemInput.expectedTrajectory,
4538
+ toolMocks: itemInput.toolMocks,
4442
4539
  requestContext: itemInput.requestContext,
4443
4540
  metadata: itemInput.metadata,
4444
4541
  source: itemInput.source,
@@ -4490,13 +4587,17 @@ var DatasetsLibSQL = class extends DatasetsStorage {
4490
4587
  args: [input.datasetId, item.id]
4491
4588
  });
4492
4589
  statements.push({
4493
- sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, validTo, isDeleted, input, groundTruth, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4590
+ sql: `INSERT INTO ${TABLE_DATASET_ITEMS} (id, datasetId, datasetVersion, organizationId, projectId, validTo, isDeleted, input, groundTruth, expectedTrajectory, toolMocks, requestContext, metadata, source, createdAt, updatedAt) VALUES (?, ?, (SELECT version FROM ${TABLE_DATASETS} WHERE id = ?), ?, ?, NULL, 1, jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), jsonb(?), ?, ?)`,
4494
4591
  args: [
4495
4592
  item.id,
4496
4593
  input.datasetId,
4497
4594
  input.datasetId,
4595
+ dataset.organizationId ?? null,
4596
+ dataset.projectId ?? null,
4498
4597
  jsonbArg(item.input),
4499
4598
  jsonbArg(item.groundTruth),
4599
+ jsonbArg(item.expectedTrajectory),
4600
+ jsonbArg(item.toolMocks),
4500
4601
  jsonbArg(item.requestContext),
4501
4602
  jsonbArg(item.metadata),
4502
4603
  jsonbArg(item.source),
@@ -4541,12 +4642,12 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4541
4642
  await this.#db.alterTable({
4542
4643
  tableName: TABLE_EXPERIMENTS,
4543
4644
  schema: EXPERIMENTS_SCHEMA,
4544
- ifNotExists: ["agentVersion"]
4645
+ ifNotExists: ["agentVersion", "organizationId", "projectId"]
4545
4646
  });
4546
4647
  await this.#db.alterTable({
4547
4648
  tableName: TABLE_EXPERIMENT_RESULTS,
4548
4649
  schema: EXPERIMENT_RESULTS_SCHEMA,
4549
- ifNotExists: ["status", "tags"]
4650
+ ifNotExists: ["status", "tags", "toolMockReport", "organizationId", "projectId"]
4550
4651
  });
4551
4652
  await this.#client.batch(
4552
4653
  [
@@ -4561,6 +4662,15 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4561
4662
  {
4562
4663
  sql: `CREATE UNIQUE INDEX IF NOT EXISTS idx_experiment_results_exp_item ON "${TABLE_EXPERIMENT_RESULTS}" ("experimentId", "itemId")`,
4563
4664
  args: []
4665
+ },
4666
+ // Tenancy: leading-tenant indexes for multi-tenant scans (parity with datasets domain).
4667
+ {
4668
+ sql: `CREATE INDEX IF NOT EXISTS idx_experiments_org_project ON "${TABLE_EXPERIMENTS}" ("organizationId", "projectId")`,
4669
+ args: []
4670
+ },
4671
+ {
4672
+ sql: `CREATE INDEX IF NOT EXISTS idx_experiment_results_org_project ON "${TABLE_EXPERIMENT_RESULTS}" ("organizationId", "projectId")`,
4673
+ args: []
4564
4674
  }
4565
4675
  ],
4566
4676
  "write"
@@ -4577,6 +4687,8 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4577
4687
  datasetId: row.datasetId ?? null,
4578
4688
  datasetVersion: row.datasetVersion != null ? row.datasetVersion : null,
4579
4689
  agentVersion: row.agentVersion ?? null,
4690
+ organizationId: row.organizationId ?? null,
4691
+ projectId: row.projectId ?? null,
4580
4692
  targetType: row.targetType,
4581
4693
  targetId: row.targetId,
4582
4694
  name: row.name ?? void 0,
@@ -4600,6 +4712,8 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4600
4712
  experimentId: row.experimentId,
4601
4713
  itemId: row.itemId,
4602
4714
  itemDatasetVersion: row.itemDatasetVersion != null ? row.itemDatasetVersion : null,
4715
+ organizationId: row.organizationId ?? null,
4716
+ projectId: row.projectId ?? null,
4603
4717
  input: safelyParseJSON(row.input),
4604
4718
  output: row.output ? safelyParseJSON(row.output) : null,
4605
4719
  groundTruth: row.groundTruth ? safelyParseJSON(row.groundTruth) : null,
@@ -4610,6 +4724,7 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4610
4724
  traceId: row.traceId ?? null,
4611
4725
  status: row.status ?? null,
4612
4726
  tags: row.tags ? safelyParseJSON(row.tags) : null,
4727
+ toolMockReport: row.toolMockReport ? safelyParseJSON(row.toolMockReport) : null,
4613
4728
  createdAt: ensureDate(row.createdAt)
4614
4729
  };
4615
4730
  }
@@ -4626,6 +4741,8 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4626
4741
  datasetId: input.datasetId ?? null,
4627
4742
  datasetVersion: input.datasetVersion ?? null,
4628
4743
  agentVersion: input.agentVersion ?? null,
4744
+ organizationId: input.organizationId ?? null,
4745
+ projectId: input.projectId ?? null,
4629
4746
  targetType: input.targetType,
4630
4747
  targetId: input.targetId,
4631
4748
  name: input.name ?? null,
@@ -4647,6 +4764,8 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4647
4764
  datasetId: input.datasetId,
4648
4765
  datasetVersion: input.datasetVersion,
4649
4766
  agentVersion: input.agentVersion ?? null,
4767
+ organizationId: input.organizationId ?? null,
4768
+ projectId: input.projectId ?? null,
4650
4769
  targetType: input.targetType,
4651
4770
  targetId: input.targetId,
4652
4771
  name: input.name,
@@ -4789,6 +4908,17 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4789
4908
  conditions.push("status = ?");
4790
4909
  queryParams.push(args.status);
4791
4910
  }
4911
+ if (args.filters) {
4912
+ const { organizationId, projectId } = args.filters;
4913
+ if (organizationId !== void 0) {
4914
+ conditions.push("organizationId = ?");
4915
+ queryParams.push(organizationId);
4916
+ }
4917
+ if (projectId !== void 0) {
4918
+ conditions.push("projectId = ?");
4919
+ queryParams.push(projectId);
4920
+ }
4921
+ }
4792
4922
  const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
4793
4923
  const countResult = await this.#client.execute({
4794
4924
  sql: `SELECT COUNT(*) as count FROM ${TABLE_EXPERIMENTS} ${whereClause}`,
@@ -4863,6 +4993,8 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4863
4993
  experimentId: input.experimentId,
4864
4994
  itemId: input.itemId,
4865
4995
  itemDatasetVersion: input.itemDatasetVersion ?? null,
4996
+ organizationId: input.organizationId ?? null,
4997
+ projectId: input.projectId ?? null,
4866
4998
  input: input.input,
4867
4999
  output: input.output,
4868
5000
  groundTruth: input.groundTruth,
@@ -4873,6 +5005,7 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4873
5005
  traceId: input.traceId ?? null,
4874
5006
  status: input.status ?? null,
4875
5007
  tags: input.tags !== void 0 && input.tags !== null ? JSON.stringify(input.tags) : null,
5008
+ toolMockReport: input.toolMockReport ?? null,
4876
5009
  createdAt: nowIso
4877
5010
  }
4878
5011
  });
@@ -4881,6 +5014,8 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4881
5014
  experimentId: input.experimentId,
4882
5015
  itemId: input.itemId,
4883
5016
  itemDatasetVersion: input.itemDatasetVersion,
5017
+ organizationId: input.organizationId ?? null,
5018
+ projectId: input.projectId ?? null,
4884
5019
  input: input.input,
4885
5020
  output: input.output,
4886
5021
  groundTruth: input.groundTruth,
@@ -4891,6 +5026,7 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4891
5026
  traceId: input.traceId ?? null,
4892
5027
  status: input.status ?? null,
4893
5028
  tags: input.tags ?? null,
5029
+ toolMockReport: input.toolMockReport ?? null,
4894
5030
  createdAt: now
4895
5031
  };
4896
5032
  } catch (error) {
@@ -4999,6 +5135,17 @@ var ExperimentsLibSQL = class extends ExperimentsStorage {
4999
5135
  conditions.push("status = ?");
5000
5136
  queryParams.push(args.status);
5001
5137
  }
5138
+ if (args.filters) {
5139
+ const { organizationId, projectId } = args.filters;
5140
+ if (organizationId !== void 0) {
5141
+ conditions.push("organizationId = ?");
5142
+ queryParams.push(organizationId);
5143
+ }
5144
+ if (projectId !== void 0) {
5145
+ conditions.push("projectId = ?");
5146
+ queryParams.push(projectId);
5147
+ }
5148
+ }
5002
5149
  const whereClause = `WHERE ${conditions.join(" AND ")}`;
5003
5150
  const countResult = await this.#client.execute({
5004
5151
  sql: `SELECT COUNT(*) as count FROM ${TABLE_EXPERIMENT_RESULTS} ${whereClause}`,
@@ -6435,12 +6582,7 @@ var MemoryLibSQL = class extends MemoryStorage {
6435
6582
  await this.#db.createTable({ tableName: TABLE_THREADS, schema: TABLE_SCHEMAS[TABLE_THREADS] });
6436
6583
  await this.#db.createTable({ tableName: TABLE_MESSAGES, schema: TABLE_SCHEMAS[TABLE_MESSAGES] });
6437
6584
  await this.#db.createTable({ tableName: TABLE_RESOURCES, schema: TABLE_SCHEMAS[TABLE_RESOURCES] });
6438
- let omSchema;
6439
- try {
6440
- const { OBSERVATIONAL_MEMORY_TABLE_SCHEMA } = await import('@mastra/core/storage');
6441
- omSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA?.[OM_TABLE];
6442
- } catch {
6443
- }
6585
+ const omSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA?.[OM_TABLE];
6444
6586
  if (omSchema) {
6445
6587
  await this.#db.createTable({
6446
6588
  tableName: OM_TABLE,