@mastra/spanner 1.3.1 → 1.4.0-alpha.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/CHANGELOG.md +25 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +39 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +40 -3
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/memory/index.d.ts.map +1 -1
- package/dist/storage/domains/observability/metrics.d.ts.map +1 -1
- package/package.json +7 -6
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Spanner } from '@google-cloud/spanner';
|
|
2
2
|
import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
|
|
3
|
-
import { AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, TABLE_FAVORITES, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, DatasetsStorage, TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS, TABLE_EXPERIMENT_RESULTS, TABLE_EXPERIMENTS, hasErrorCode, ExperimentsStorage, FavoritesStorage, TABLE_SKILLS, MCPClientsStorage, TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS, MCP_CLIENTS_SCHEMA, MCP_CLIENT_VERSIONS_SCHEMA, MCPServersStorage, TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS, MCP_SERVERS_SCHEMA, MCP_SERVER_VERSIONS_SCHEMA, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, ObservabilityStorage, TABLE_SPANS, listTracesArgsSchema, TraceStatus, toTraceSpans, PromptBlocksStorage, TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS, PROMPT_BLOCKS_SCHEMA, PROMPT_BLOCK_VERSIONS_SCHEMA, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ScorerDefinitionsStorage, TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS, SCORER_DEFINITIONS_SCHEMA, SCORER_DEFINITION_VERSIONS_SCHEMA, ScoresStorage, TABLE_SCORERS, SkillsStorage, TABLE_SKILL_VERSIONS, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, WorkspacesStorage, TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS, WORKSPACES_SCHEMA, WORKSPACE_VERSIONS_SCHEMA, MastraCompositeStore, getDefaultValue, TABLE_CONFIGS, listMetricsArgsSchema, normalizeScheduleTarget, transformScoreRow as transformScoreRow$1, METRIC_DISTINCT_COLUMNS } from '@mastra/core/storage';
|
|
3
|
+
import { AgentsStorage, TABLE_AGENTS, TABLE_AGENT_VERSIONS, AGENTS_SCHEMA, AGENT_VERSIONS_SCHEMA, createStorageErrorId, normalizePerPage, calculatePagination, TABLE_FAVORITES, BackgroundTasksStorage, TABLE_BACKGROUND_TASKS, TABLE_SCHEMAS, BlobStore, TABLE_SKILL_BLOBS, SKILL_BLOBS_SCHEMA, ChannelsStorage, TABLE_CHANNEL_INSTALLATIONS, TABLE_CHANNEL_CONFIG, DatasetsStorage, TABLE_DATASETS, TABLE_DATASET_ITEMS, TABLE_DATASET_VERSIONS, TABLE_EXPERIMENT_RESULTS, TABLE_EXPERIMENTS, hasErrorCode, ExperimentsStorage, FavoritesStorage, TABLE_SKILLS, MCPClientsStorage, TABLE_MCP_CLIENTS, TABLE_MCP_CLIENT_VERSIONS, MCP_CLIENTS_SCHEMA, MCP_CLIENT_VERSIONS_SCHEMA, MCPServersStorage, TABLE_MCP_SERVERS, TABLE_MCP_SERVER_VERSIONS, MCP_SERVERS_SCHEMA, MCP_SERVER_VERSIONS_SCHEMA, MemoryStorage, TABLE_THREADS, TABLE_MESSAGES, TABLE_RESOURCES, validateStorageMetadataFilter, ObservabilityStorage, TABLE_SPANS, listTracesArgsSchema, TraceStatus, toTraceSpans, PromptBlocksStorage, TABLE_PROMPT_BLOCKS, TABLE_PROMPT_BLOCK_VERSIONS, PROMPT_BLOCKS_SCHEMA, PROMPT_BLOCK_VERSIONS_SCHEMA, SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, ScorerDefinitionsStorage, TABLE_SCORER_DEFINITIONS, TABLE_SCORER_DEFINITION_VERSIONS, SCORER_DEFINITIONS_SCHEMA, SCORER_DEFINITION_VERSIONS_SCHEMA, ScoresStorage, TABLE_SCORERS, SkillsStorage, TABLE_SKILL_VERSIONS, SKILLS_SCHEMA, SKILL_VERSIONS_SCHEMA, WorkflowsStorage, TABLE_WORKFLOW_SNAPSHOT, WorkspacesStorage, TABLE_WORKSPACES, TABLE_WORKSPACE_VERSIONS, WORKSPACES_SCHEMA, WORKSPACE_VERSIONS_SCHEMA, MastraCompositeStore, getDefaultValue, TABLE_CONFIGS, listMetricsArgsSchema, normalizeScheduleTarget, transformScoreRow as transformScoreRow$1, METRIC_DISTINCT_COLUMNS } from '@mastra/core/storage';
|
|
4
4
|
import { MastraBase } from '@mastra/core/base';
|
|
5
5
|
import { parseSqlIdentifier } from '@mastra/core/utils';
|
|
6
6
|
import { randomUUID } from 'crypto';
|
|
@@ -6367,6 +6367,35 @@ var MCPServersSpanner = class _MCPServersSpanner extends MCPServersStorage {
|
|
|
6367
6367
|
}
|
|
6368
6368
|
}
|
|
6369
6369
|
};
|
|
6370
|
+
function buildSpannerMessageMetadataFilter(metadataFilter) {
|
|
6371
|
+
if (!metadataFilter) return { clauses: [], params: {} };
|
|
6372
|
+
const clauses = [];
|
|
6373
|
+
const params = {};
|
|
6374
|
+
Object.entries(metadataFilter).forEach(([key, value], index) => {
|
|
6375
|
+
const path = `$.metadata.${key}`;
|
|
6376
|
+
const valueExpr = `JSON_VALUE(SAFE.PARSE_JSON(content), '${path}')`;
|
|
6377
|
+
const queryExpr = `JSON_QUERY(SAFE.PARSE_JSON(content), '${path}')`;
|
|
6378
|
+
const typeExpr = `JSON_TYPE(${queryExpr})`;
|
|
6379
|
+
if (value === null) {
|
|
6380
|
+
clauses.push(`${queryExpr} = 'null'`);
|
|
6381
|
+
return;
|
|
6382
|
+
}
|
|
6383
|
+
const paramName = `metadataValue${index}`;
|
|
6384
|
+
if (typeof value === "string") {
|
|
6385
|
+
params[paramName] = value;
|
|
6386
|
+
clauses.push(`${typeExpr} = 'string' AND ${valueExpr} = @${paramName}`);
|
|
6387
|
+
return;
|
|
6388
|
+
}
|
|
6389
|
+
if (typeof value === "number") {
|
|
6390
|
+
params[paramName] = String(value);
|
|
6391
|
+
clauses.push(`${typeExpr} = 'number' AND ${valueExpr} = @${paramName}`);
|
|
6392
|
+
return;
|
|
6393
|
+
}
|
|
6394
|
+
params[paramName] = value ? "true" : "false";
|
|
6395
|
+
clauses.push(`${typeExpr} = 'boolean' AND ${valueExpr} = @${paramName}`);
|
|
6396
|
+
});
|
|
6397
|
+
return { clauses, params };
|
|
6398
|
+
}
|
|
6370
6399
|
var MemorySpanner = class _MemorySpanner extends MemoryStorage {
|
|
6371
6400
|
database;
|
|
6372
6401
|
db;
|
|
@@ -6845,6 +6874,7 @@ var MemorySpanner = class _MemorySpanner extends MemoryStorage {
|
|
|
6845
6874
|
/** Paginated message listing for a thread, with optional pinned-include and date-range filters. */
|
|
6846
6875
|
async listMessages(args) {
|
|
6847
6876
|
const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;
|
|
6877
|
+
const metadataFilter = validateStorageMetadataFilter(filter?.metadata);
|
|
6848
6878
|
const threadIds = Array.isArray(threadId) ? threadId : [threadId];
|
|
6849
6879
|
if (threadIds.length === 0 || threadIds.some((id) => !id || !id.trim())) {
|
|
6850
6880
|
throw new MastraError(
|
|
@@ -6870,10 +6900,16 @@ var MemorySpanner = class _MemorySpanner extends MemoryStorage {
|
|
|
6870
6900
|
...buildDateRangeFilter(filter?.dateRange, "createdAt")
|
|
6871
6901
|
};
|
|
6872
6902
|
const {
|
|
6873
|
-
sql:
|
|
6903
|
+
sql: preparedWhereSql,
|
|
6874
6904
|
params: whereParams,
|
|
6875
6905
|
types: whereTypes
|
|
6876
6906
|
} = this.db.prepareWhereClause(filters, TABLE_MESSAGES);
|
|
6907
|
+
const metadataWhere = buildSpannerMessageMetadataFilter(metadataFilter);
|
|
6908
|
+
const whereSql = [preparedWhereSql, ...metadataWhere.clauses].reduce((sql, clause) => {
|
|
6909
|
+
if (!clause) return sql;
|
|
6910
|
+
return sql ? `${sql} AND ${clause}` : ` WHERE ${clause}`;
|
|
6911
|
+
}, "");
|
|
6912
|
+
Object.assign(whereParams, metadataWhere.params);
|
|
6877
6913
|
if (perPage === 0 && (!include || include.length === 0)) {
|
|
6878
6914
|
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
6879
6915
|
}
|
|
@@ -6928,6 +6964,7 @@ var MemorySpanner = class _MemorySpanner extends MemoryStorage {
|
|
|
6928
6964
|
const messages = baseRows.map(
|
|
6929
6965
|
(r) => transformFromSpannerRow({ tableName: TABLE_MESSAGES, row: r })
|
|
6930
6966
|
);
|
|
6967
|
+
const primaryPageCount = messages.length;
|
|
6931
6968
|
if (total === 0 && messages.length === 0 && (!include || include.length === 0)) {
|
|
6932
6969
|
return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };
|
|
6933
6970
|
}
|
|
@@ -6958,7 +6995,7 @@ var MemorySpanner = class _MemorySpanner extends MemoryStorage {
|
|
|
6958
6995
|
finalMessages.filter((m) => m.threadId && threadIdSet.has(m.threadId)).map((m) => m.id)
|
|
6959
6996
|
);
|
|
6960
6997
|
const allThreadMessagesReturned = returnedThreadMessageIds.size >= total;
|
|
6961
|
-
const hasMore = perPageInput !== false && !allThreadMessagesReturned && offset + perPage < total;
|
|
6998
|
+
const hasMore = metadataFilter ? perPageInput !== false && offset + primaryPageCount < total : perPageInput !== false && !allThreadMessagesReturned && offset + perPage < total;
|
|
6962
6999
|
return {
|
|
6963
7000
|
messages: finalMessages,
|
|
6964
7001
|
total,
|