@case-framework/survey-assistant 0.3.0 → 0.5.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/README.md +20 -4
- package/dist/capabilities-default.d.mts +1 -1
- package/dist/capabilities-default.mjs +1 -1
- package/dist/{constants-DrGZXtQf.d.mts → constants-DbrJxxOh.d.mts} +5 -2
- package/dist/constants-DbrJxxOh.d.mts.map +1 -0
- package/dist/{controller-proxy-DmBdzqKs.d.mts → controller-proxy-BdKF2yrq.d.mts} +2 -2
- package/dist/{controller-proxy-DmBdzqKs.d.mts.map → controller-proxy-BdKF2yrq.d.mts.map} +1 -1
- package/dist/{controller-proxy-CpkQRezb.mjs → controller-proxy-jWIPOZAv.mjs} +17 -8
- package/dist/controller-proxy-jWIPOZAv.mjs.map +1 -0
- package/dist/{engine-CWTuN3o2.mjs → engine-DcSdLRle.mjs} +172 -12
- package/dist/engine-DcSdLRle.mjs.map +1 -0
- package/dist/engine.d.mts +2 -2
- package/dist/engine.mjs +3 -3
- package/dist/{form-authoring-DCd9XfXf.mjs → form-authoring-BQh40yDb.mjs} +2 -2
- package/dist/{form-authoring-DCd9XfXf.mjs.map → form-authoring-BQh40yDb.mjs.map} +1 -1
- package/dist/{index-D4OitUg4.d.mts → index-BApnIiCI.d.mts} +7 -4
- package/dist/index-BApnIiCI.d.mts.map +1 -0
- package/dist/{index-Bo4dHAo8.d.mts → index-Da_Hb9-1.d.mts} +28 -4
- package/dist/index-Da_Hb9-1.d.mts.map +1 -0
- package/dist/{index-DZk20e3k.d.mts → index-DhNQKOwr.d.mts} +9 -5
- package/dist/index-DhNQKOwr.d.mts.map +1 -0
- package/dist/{index-Dxgg0-D_.d.mts → index-dV6df0W3.d.mts} +11 -5
- package/dist/index-dV6df0W3.d.mts.map +1 -0
- package/dist/{memory-thread-repository-acbz6HZJ.mjs → memory-thread-repository-CvYZwni6.mjs} +87 -28
- package/dist/memory-thread-repository-CvYZwni6.mjs.map +1 -0
- package/dist/{protocol-DATvkr1S.mjs → protocol-DJUP4gc0.mjs} +10 -4
- package/dist/protocol-DJUP4gc0.mjs.map +1 -0
- package/dist/protocol.d.mts +1 -1
- package/dist/protocol.mjs +1 -1
- package/dist/{react-Br5YE8H-.mjs → react-CY6N7lVi.mjs} +25 -5
- package/dist/react-CY6N7lVi.mjs.map +1 -0
- package/dist/react-integration.d.mts +1 -1
- package/dist/react-integration.mjs +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/react.mjs +2 -2
- package/dist/{request-context-BEjnaaFr.mjs → request-context-D1sC54ZA.mjs} +3 -3
- package/dist/request-context-D1sC54ZA.mjs.map +1 -0
- package/dist/server-agent.d.mts +8 -6
- package/dist/server-agent.d.mts.map +1 -1
- package/dist/server-agent.mjs +4 -3
- package/dist/server-agent.mjs.map +1 -1
- package/dist/server-runtime.d.mts +354 -7
- package/dist/server-runtime.d.mts.map +1 -1
- package/dist/server-runtime.mjs +361 -24
- package/dist/server-runtime.mjs.map +1 -1
- package/dist/server-tasks.d.mts +1 -1
- package/dist/server-tasks.mjs +5 -4
- package/dist/server-tasks.mjs.map +1 -1
- package/dist/server-tools.d.mts +1 -1
- package/dist/server-tools.mjs +1 -1
- package/dist/server.d.mts +7 -7
- package/dist/server.d.mts.map +1 -1
- package/dist/server.mjs +2 -2
- package/dist/storage-postgres.mjs +3 -0
- package/dist/storage-postgres.mjs.map +1 -1
- package/dist/{tasks-DQgL449A.d.mts → tasks-CCtxjhwh.d.mts} +3 -3
- package/dist/{tasks-DQgL449A.d.mts.map → tasks-CCtxjhwh.d.mts.map} +1 -1
- package/dist/{thread-handlers-CeYl45xG.d.mts → thread-handlers-Bt9cDo-F.d.mts} +21 -6
- package/dist/{thread-handlers-CeYl45xG.d.mts.map → thread-handlers-Bt9cDo-F.d.mts.map} +1 -1
- package/dist/{tools-Dg9HZrYU.mjs → tools-3tq-XqI0.mjs} +31 -6
- package/dist/{tools-Dg9HZrYU.mjs.map → tools-3tq-XqI0.mjs.map} +1 -1
- package/dist/ui.css +1 -1
- package/dist/ui.d.mts +3 -3
- package/dist/ui.d.mts.map +1 -1
- package/dist/ui.mjs +438 -140
- package/dist/ui.mjs.map +1 -1
- package/docs/integration.md +113 -58
- package/package.json +3 -3
- package/dist/constants-DrGZXtQf.d.mts.map +0 -1
- package/dist/controller-proxy-CpkQRezb.mjs.map +0 -1
- package/dist/engine-CWTuN3o2.mjs.map +0 -1
- package/dist/index-Bo4dHAo8.d.mts.map +0 -1
- package/dist/index-D4OitUg4.d.mts.map +0 -1
- package/dist/index-DZk20e3k.d.mts.map +0 -1
- package/dist/index-Dxgg0-D_.d.mts.map +0 -1
- package/dist/memory-thread-repository-acbz6HZJ.mjs.map +0 -1
- package/dist/protocol-DATvkr1S.mjs.map +0 -1
- package/dist/react-Br5YE8H-.mjs.map +0 -1
- package/dist/request-context-BEjnaaFr.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-postgres.mjs","names":[],"sources":["../src/storage/postgres.ts"],"sourcesContent":["import { OBSERVATIONAL_MEMORY_TABLE_SCHEMA, type StorageColumn } from \"@mastra/core/storage\";\nimport { PostgresStore, type PostgresStoreConfig } from \"@mastra/pg\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { SurveyAssistantRequestError } from \"../server/request-guardrails\";\nimport type {\n SurveyAssistantThreadDocument,\n SurveyAssistantThreadDocumentRepository,\n} from \"../server/thread-documents\";\n\nconst OBSERVATIONAL_MEMORY_TABLE = \"mastra_observational_memory\";\nconst THREAD_DOCUMENTS_TABLE = \"survey_assistant_thread_documents\";\nexport const SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENTS_PER_THREAD = 100;\nexport const SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENT_BYTES_PER_THREAD = 200 * 1024 * 1024;\n\nconst quoteIdentifier = (value: string) => `\"${value.replaceAll('\"', '\"\"')}\"`;\n\nconst postgresType = (column: StorageColumn) => {\n switch (column.type) {\n case \"text\":\n return \"TEXT\";\n case \"timestamp\":\n return \"TIMESTAMP\";\n case \"jsonb\":\n return \"JSONB\";\n case \"integer\":\n return \"INTEGER\";\n case \"float\":\n return \"DOUBLE PRECISION\";\n case \"bigint\":\n return \"BIGINT\";\n case \"boolean\":\n return \"BOOLEAN\";\n case \"uuid\":\n return \"UUID\";\n }\n};\n\nconst migrationDefault = (column: StorageColumn) => {\n switch (column.type) {\n case \"boolean\":\n return \"FALSE\";\n case \"integer\":\n case \"bigint\":\n case \"float\":\n return \"0\";\n case \"jsonb\":\n return \"'{}'::jsonb\";\n case \"timestamp\":\n return \"NOW()\";\n case \"text\":\n return \"''\";\n case \"uuid\":\n return \"gen_random_uuid()\";\n }\n};\n\nconst columnSql = (name: string, column: StorageColumn, includeMigrationDefault = false) => {\n const constraints = [\n column.primaryKey ? \"PRIMARY KEY\" : undefined,\n column.nullable === false ? \"NOT NULL\" : undefined,\n includeMigrationDefault && column.nullable === false\n ? `DEFAULT ${migrationDefault(column)}`\n : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n return `${quoteIdentifier(name)} ${postgresType(column)}${constraints ? ` ${constraints}` : \"\"}`;\n};\n\nconst ensureObservationalMemorySchema = async (storage: PostgresStore, schemaName: string) => {\n const tableSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA[OBSERVATIONAL_MEMORY_TABLE];\n if (!tableSchema) throw new Error(\"Mastra observational memory schema is unavailable.\");\n\n const tableName = `${quoteIdentifier(schemaName)}.${quoteIdentifier(OBSERVATIONAL_MEMORY_TABLE)}`;\n const columns = Object.entries(tableSchema).flatMap(([name, column]) => [\n columnSql(name, column),\n ...(column.type === \"timestamp\"\n ? [`${quoteIdentifier(`${name}Z`)} TIMESTAMPTZ DEFAULT NOW()`]\n : []),\n ]);\n\n await storage.db.none(`CREATE TABLE IF NOT EXISTS ${tableName} (${columns.join(\", \")})`);\n for (const [name, column] of Object.entries(tableSchema)) {\n await storage.db.none(\n `ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${columnSql(name, column, true)}`,\n );\n if (column.type === \"timestamp\") {\n await storage.db.none(\n `ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${quoteIdentifier(`${name}Z`)} TIMESTAMPTZ DEFAULT NOW()`,\n );\n }\n }\n await storage.db.none(\n `CREATE INDEX IF NOT EXISTS idx_om_lookup_key ON ${tableName} (${quoteIdentifier(\"lookupKey\")})`,\n );\n};\n\nconst ensureThreadDocumentsSchema = async (storage: PostgresStore, schemaName: string) => {\n const tableName = `${quoteIdentifier(schemaName)}.${quoteIdentifier(THREAD_DOCUMENTS_TABLE)}`;\n await storage.db.none(`\n CREATE TABLE IF NOT EXISTS ${tableName} (\n id TEXT PRIMARY KEY,\n resource_id TEXT NOT NULL,\n thread_id TEXT NOT NULL,\n name TEXT NOT NULL,\n media_type TEXT NOT NULL,\n byte_size INTEGER NOT NULL,\n content_hash TEXT NOT NULL,\n data BYTEA NOT NULL,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n UNIQUE (resource_id, thread_id, content_hash)\n )\n `);\n await storage.db.none(\n `CREATE INDEX IF NOT EXISTS idx_survey_assistant_thread_documents_thread ON ${tableName} (resource_id, thread_id, created_at)`,\n );\n};\n\nexport interface InitializeSurveyAssistantPostgresStorageOptions {\n ensureObservationalMemory?: boolean;\n schemaName?: string;\n}\n\nexport const initializeSurveyAssistantPostgresStorage = async (\n storage: PostgresStore,\n {\n ensureObservationalMemory = true,\n schemaName = \"public\",\n }: InitializeSurveyAssistantPostgresStorageOptions = {},\n) => {\n await storage.init();\n if (ensureObservationalMemory) await ensureObservationalMemorySchema(storage, schemaName);\n await ensureThreadDocumentsSchema(storage, schemaName);\n return storage;\n};\n\nconst toThreadDocument = (row: {\n id: string;\n name: string;\n media_type: string;\n byte_size: number;\n content_hash: string;\n created_at: Date | string;\n}): SurveyAssistantThreadDocument => ({\n id: row.id,\n name: row.name,\n mediaType: row.media_type,\n bytes: row.byte_size,\n contentHash: row.content_hash,\n createdAt: new Date(row.created_at).toISOString(),\n});\n\nexport interface CreateSurveyAssistantPostgresThreadDocumentRepositoryOptions {\n getStorage(): PostgresStore | Promise<PostgresStore>;\n maxStoredAttachmentsPerThread?: number;\n maxStoredBytesPerThread?: number;\n schemaName?: string;\n}\n\nexport const createSurveyAssistantPostgresThreadDocumentRepository = ({\n getStorage,\n maxStoredAttachmentsPerThread = SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENTS_PER_THREAD,\n maxStoredBytesPerThread = SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENT_BYTES_PER_THREAD,\n schemaName = \"public\",\n}: CreateSurveyAssistantPostgresThreadDocumentRepositoryOptions): SurveyAssistantThreadDocumentRepository => {\n if (\n !Number.isSafeInteger(maxStoredAttachmentsPerThread) ||\n maxStoredAttachmentsPerThread <= 0 ||\n !Number.isSafeInteger(maxStoredBytesPerThread) ||\n maxStoredBytesPerThread <= 0\n ) {\n throw new Error(\"Survey assistant stored attachment limits must be positive integers.\");\n }\n const tableName = `${quoteIdentifier(schemaName)}.${quoteIdentifier(THREAD_DOCUMENTS_TABLE)}`;\n return {\n async put({ bytes, data, mediaType, name, resourceId, threadId }) {\n const storage = await getStorage();\n const contentHash = createHash(\"sha256\").update(data).digest(\"hex\");\n const row = await storage.db.tx(async (transaction) => {\n await transaction.none(\"SELECT pg_advisory_xact_lock(hashtext($1), hashtext($2))\", [\n resourceId,\n threadId,\n ]);\n const existing = await transaction.oneOrNone(\n `SELECT id, name, media_type, byte_size, content_hash, created_at FROM ${tableName}\n WHERE resource_id = $1 AND thread_id = $2 AND content_hash = $3`,\n [resourceId, threadId, contentHash],\n );\n if (existing) return existing;\n\n const usage = await transaction.one<{ count: string; bytes: string }>(\n `SELECT COUNT(*) AS count, COALESCE(SUM(byte_size), 0) AS bytes FROM ${tableName}\n WHERE resource_id = $1 AND thread_id = $2`,\n [resourceId, threadId],\n );\n if (Number(usage.count) >= maxStoredAttachmentsPerThread) {\n throw new SurveyAssistantRequestError(\n `A chat can contain up to ${maxStoredAttachmentsPerThread} stored attachments.`,\n );\n }\n if (Number(usage.bytes) + bytes > maxStoredBytesPerThread) {\n throw new SurveyAssistantRequestError(\n \"The attachments stored for this chat are too large in total.\",\n );\n }\n\n return transaction.one(\n `INSERT INTO ${tableName}\n (id, resource_id, thread_id, name, media_type, byte_size, content_hash, data)\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, decode($8, 'base64'))\n RETURNING id, name, media_type, byte_size, content_hash, created_at`,\n [randomUUID(), resourceId, threadId, name, mediaType, bytes, contentHash, data],\n );\n });\n return toThreadDocument(row);\n },\n async list({ resourceId, threadId }) {\n const storage = await getStorage();\n const rows = await storage.db.manyOrNone(\n `SELECT id, name, media_type, byte_size, content_hash, created_at\n FROM ${tableName}\n WHERE resource_id = $1 AND thread_id = $2\n ORDER BY created_at ASC`,\n [resourceId, threadId],\n );\n return rows.map(toThreadDocument);\n },\n async read({ documentId, resourceId, threadId }) {\n const storage = await getStorage();\n const row = await storage.db.oneOrNone(\n `SELECT id, name, media_type, byte_size, content_hash, created_at,\n encode(data, 'base64') AS data\n FROM ${tableName}\n WHERE id = $1 AND resource_id = $2 AND thread_id = $3`,\n [documentId, resourceId, threadId],\n );\n return row\n ? {\n ...toThreadDocument(row),\n // PostgreSQL wraps encoded BYTEA output at 76 characters.\n data: String(row.data).replace(/\\s+/g, \"\"),\n }\n : null;\n },\n async deleteThread({ resourceId, threadId }) {\n const storage = await getStorage();\n await storage.db.none(`DELETE FROM ${tableName} WHERE resource_id = $1 AND thread_id = $2`, [\n resourceId,\n threadId,\n ]);\n },\n };\n};\n\nexport interface CreateSurveyAssistantPostgresRuntimeOptions {\n ensureObservationalMemory?: boolean;\n maxStoredAttachmentsPerThread?: number;\n maxStoredBytesPerThread?: number;\n schemaName?: string;\n store: PostgresStore | PostgresStoreConfig;\n}\n\nexport const createSurveyAssistantPostgresRuntime = ({\n ensureObservationalMemory,\n maxStoredAttachmentsPerThread,\n maxStoredBytesPerThread,\n schemaName = \"public\",\n store: storeOrConfig,\n}: CreateSurveyAssistantPostgresRuntimeOptions) => {\n const storage =\n storeOrConfig instanceof PostgresStore ? storeOrConfig : new PostgresStore(storeOrConfig);\n let initialization: Promise<PostgresStore> | undefined;\n const getStorage = () => {\n initialization ??= initializeSurveyAssistantPostgresStorage(storage, {\n ensureObservationalMemory,\n schemaName,\n });\n return initialization;\n };\n\n return {\n storage,\n getStorage,\n threadDocuments: createSurveyAssistantPostgresThreadDocumentRepository({\n getStorage,\n maxStoredAttachmentsPerThread,\n maxStoredBytesPerThread,\n schemaName,\n }),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage-postgres.mjs","names":[],"sources":["../src/storage/postgres.ts"],"sourcesContent":["import { OBSERVATIONAL_MEMORY_TABLE_SCHEMA, type StorageColumn } from \"@mastra/core/storage\";\nimport { PostgresStore, type PostgresStoreConfig } from \"@mastra/pg\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { SurveyAssistantRequestError } from \"../server/request-guardrails\";\nimport type {\n SurveyAssistantThreadDocument,\n SurveyAssistantThreadDocumentRepository,\n} from \"../server/thread-documents\";\n\nconst OBSERVATIONAL_MEMORY_TABLE = \"mastra_observational_memory\";\nconst THREAD_DOCUMENTS_TABLE = \"survey_assistant_thread_documents\";\nexport const SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENTS_PER_THREAD = 100;\nexport const SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENT_BYTES_PER_THREAD = 200 * 1024 * 1024;\n\nconst quoteIdentifier = (value: string) => `\"${value.replaceAll('\"', '\"\"')}\"`;\n\nconst postgresType = (column: StorageColumn) => {\n switch (column.type) {\n case \"text\":\n return \"TEXT\";\n case \"timestamp\":\n return \"TIMESTAMP\";\n case \"jsonb\":\n return \"JSONB\";\n case \"integer\":\n return \"INTEGER\";\n case \"float\":\n return \"DOUBLE PRECISION\";\n case \"bigint\":\n return \"BIGINT\";\n case \"boolean\":\n return \"BOOLEAN\";\n case \"uuid\":\n return \"UUID\";\n }\n};\n\nconst migrationDefault = (column: StorageColumn) => {\n switch (column.type) {\n case \"boolean\":\n return \"FALSE\";\n case \"integer\":\n case \"bigint\":\n case \"float\":\n return \"0\";\n case \"jsonb\":\n return \"'{}'::jsonb\";\n case \"timestamp\":\n return \"NOW()\";\n case \"text\":\n return \"''\";\n case \"uuid\":\n return \"gen_random_uuid()\";\n }\n};\n\nconst columnSql = (name: string, column: StorageColumn, includeMigrationDefault = false) => {\n const constraints = [\n column.primaryKey ? \"PRIMARY KEY\" : undefined,\n column.nullable === false ? \"NOT NULL\" : undefined,\n includeMigrationDefault && column.nullable === false\n ? `DEFAULT ${migrationDefault(column)}`\n : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n return `${quoteIdentifier(name)} ${postgresType(column)}${constraints ? ` ${constraints}` : \"\"}`;\n};\n\nconst ensureObservationalMemorySchema = async (storage: PostgresStore, schemaName: string) => {\n const tableSchema = OBSERVATIONAL_MEMORY_TABLE_SCHEMA[OBSERVATIONAL_MEMORY_TABLE];\n if (!tableSchema) throw new Error(\"Mastra observational memory schema is unavailable.\");\n\n const tableName = `${quoteIdentifier(schemaName)}.${quoteIdentifier(OBSERVATIONAL_MEMORY_TABLE)}`;\n const columns = Object.entries(tableSchema).flatMap(([name, column]) => [\n columnSql(name, column),\n ...(column.type === \"timestamp\"\n ? [`${quoteIdentifier(`${name}Z`)} TIMESTAMPTZ DEFAULT NOW()`]\n : []),\n ]);\n\n await storage.db.none(`CREATE TABLE IF NOT EXISTS ${tableName} (${columns.join(\", \")})`);\n for (const [name, column] of Object.entries(tableSchema)) {\n await storage.db.none(\n `ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${columnSql(name, column, true)}`,\n );\n if (column.type === \"timestamp\") {\n await storage.db.none(\n `ALTER TABLE ${tableName} ADD COLUMN IF NOT EXISTS ${quoteIdentifier(`${name}Z`)} TIMESTAMPTZ DEFAULT NOW()`,\n );\n }\n }\n await storage.db.none(\n `CREATE INDEX IF NOT EXISTS idx_om_lookup_key ON ${tableName} (${quoteIdentifier(\"lookupKey\")})`,\n );\n};\n\nconst ensureThreadDocumentsSchema = async (storage: PostgresStore, schemaName: string) => {\n const tableName = `${quoteIdentifier(schemaName)}.${quoteIdentifier(THREAD_DOCUMENTS_TABLE)}`;\n await storage.db.none(`\n CREATE TABLE IF NOT EXISTS ${tableName} (\n id TEXT PRIMARY KEY,\n resource_id TEXT NOT NULL,\n thread_id TEXT NOT NULL,\n name TEXT NOT NULL,\n media_type TEXT NOT NULL,\n byte_size INTEGER NOT NULL,\n content_hash TEXT NOT NULL,\n data BYTEA NOT NULL,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n UNIQUE (resource_id, thread_id, content_hash)\n )\n `);\n await storage.db.none(\n `CREATE INDEX IF NOT EXISTS idx_survey_assistant_thread_documents_thread ON ${tableName} (resource_id, thread_id, created_at)`,\n );\n};\n\nexport interface InitializeSurveyAssistantPostgresStorageOptions {\n ensureObservationalMemory?: boolean;\n schemaName?: string;\n}\n\nexport const initializeSurveyAssistantPostgresStorage = async (\n storage: PostgresStore,\n {\n ensureObservationalMemory = true,\n schemaName = \"public\",\n }: InitializeSurveyAssistantPostgresStorageOptions = {},\n) => {\n await storage.init();\n if (ensureObservationalMemory) await ensureObservationalMemorySchema(storage, schemaName);\n await ensureThreadDocumentsSchema(storage, schemaName);\n return storage;\n};\n\nconst toThreadDocument = (row: {\n id: string;\n name: string;\n media_type: string;\n byte_size: number;\n content_hash: string;\n created_at: Date | string;\n}): SurveyAssistantThreadDocument => ({\n id: row.id,\n name: row.name,\n mediaType: row.media_type,\n bytes: row.byte_size,\n contentHash: row.content_hash,\n createdAt: new Date(row.created_at).toISOString(),\n});\n\nexport interface CreateSurveyAssistantPostgresThreadDocumentRepositoryOptions {\n getStorage(): PostgresStore | Promise<PostgresStore>;\n maxStoredAttachmentsPerThread?: number;\n maxStoredBytesPerThread?: number;\n schemaName?: string;\n}\n\nexport const createSurveyAssistantPostgresThreadDocumentRepository = ({\n getStorage,\n maxStoredAttachmentsPerThread = SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENTS_PER_THREAD,\n maxStoredBytesPerThread = SURVEY_ASSISTANT_DEFAULT_MAX_STORED_ATTACHMENT_BYTES_PER_THREAD,\n schemaName = \"public\",\n}: CreateSurveyAssistantPostgresThreadDocumentRepositoryOptions): SurveyAssistantThreadDocumentRepository => {\n if (\n !Number.isSafeInteger(maxStoredAttachmentsPerThread) ||\n maxStoredAttachmentsPerThread <= 0 ||\n !Number.isSafeInteger(maxStoredBytesPerThread) ||\n maxStoredBytesPerThread <= 0\n ) {\n throw new Error(\"Survey assistant stored attachment limits must be positive integers.\");\n }\n const tableName = `${quoteIdentifier(schemaName)}.${quoteIdentifier(THREAD_DOCUMENTS_TABLE)}`;\n return {\n async put({ bytes, data, mediaType, name, resourceId, threadId }) {\n const storage = await getStorage();\n const contentHash = createHash(\"sha256\").update(data).digest(\"hex\");\n const row = await storage.db.tx(async (transaction) => {\n await transaction.none(\"SELECT pg_advisory_xact_lock(hashtext($1), hashtext($2))\", [\n resourceId,\n threadId,\n ]);\n const existing = await transaction.oneOrNone(\n `SELECT id, name, media_type, byte_size, content_hash, created_at FROM ${tableName}\n WHERE resource_id = $1 AND thread_id = $2 AND content_hash = $3`,\n [resourceId, threadId, contentHash],\n );\n if (existing) return existing;\n\n const usage = await transaction.one<{ count: string; bytes: string }>(\n `SELECT COUNT(*) AS count, COALESCE(SUM(byte_size), 0) AS bytes FROM ${tableName}\n WHERE resource_id = $1 AND thread_id = $2`,\n [resourceId, threadId],\n );\n if (Number(usage.count) >= maxStoredAttachmentsPerThread) {\n throw new SurveyAssistantRequestError(\n `A chat can contain up to ${maxStoredAttachmentsPerThread} stored attachments.`,\n );\n }\n if (Number(usage.bytes) + bytes > maxStoredBytesPerThread) {\n throw new SurveyAssistantRequestError(\n \"The attachments stored for this chat are too large in total.\",\n );\n }\n\n return transaction.one(\n `INSERT INTO ${tableName}\n (id, resource_id, thread_id, name, media_type, byte_size, content_hash, data)\n VALUES\n ($1, $2, $3, $4, $5, $6, $7, decode($8, 'base64'))\n RETURNING id, name, media_type, byte_size, content_hash, created_at`,\n [randomUUID(), resourceId, threadId, name, mediaType, bytes, contentHash, data],\n );\n });\n return toThreadDocument(row);\n },\n async list({ resourceId, threadId }) {\n const storage = await getStorage();\n const rows = await storage.db.manyOrNone(\n `SELECT id, name, media_type, byte_size, content_hash, created_at\n FROM ${tableName}\n WHERE resource_id = $1 AND thread_id = $2\n ORDER BY created_at ASC`,\n [resourceId, threadId],\n );\n return rows.map(toThreadDocument);\n },\n async read({ documentId, resourceId, threadId }) {\n const storage = await getStorage();\n const row = await storage.db.oneOrNone(\n `SELECT id, name, media_type, byte_size, content_hash, created_at,\n encode(data, 'base64') AS data\n FROM ${tableName}\n WHERE id = $1 AND resource_id = $2 AND thread_id = $3`,\n [documentId, resourceId, threadId],\n );\n return row\n ? {\n ...toThreadDocument(row),\n // PostgreSQL wraps encoded BYTEA output at 76 characters.\n data: String(row.data).replace(/\\s+/g, \"\"),\n }\n : null;\n },\n async deleteThread({ resourceId, threadId }) {\n const storage = await getStorage();\n await storage.db.none(`DELETE FROM ${tableName} WHERE resource_id = $1 AND thread_id = $2`, [\n resourceId,\n threadId,\n ]);\n },\n };\n};\n\nexport interface CreateSurveyAssistantPostgresRuntimeOptions {\n ensureObservationalMemory?: boolean;\n maxStoredAttachmentsPerThread?: number;\n maxStoredBytesPerThread?: number;\n schemaName?: string;\n store: PostgresStore | PostgresStoreConfig;\n}\n\nexport const createSurveyAssistantPostgresRuntime = ({\n ensureObservationalMemory,\n maxStoredAttachmentsPerThread,\n maxStoredBytesPerThread,\n schemaName = \"public\",\n store: storeOrConfig,\n}: CreateSurveyAssistantPostgresRuntimeOptions) => {\n const storage =\n storeOrConfig instanceof PostgresStore ? storeOrConfig : new PostgresStore(storeOrConfig);\n let initialization: Promise<PostgresStore> | undefined;\n const getStorage = () => {\n initialization ??= initializeSurveyAssistantPostgresStorage(storage, {\n ensureObservationalMemory,\n schemaName,\n }).catch((error: unknown) => {\n initialization = undefined;\n throw error;\n });\n return initialization;\n };\n\n return {\n storage,\n getStorage,\n threadDocuments: createSurveyAssistantPostgresThreadDocumentRepository({\n getStorage,\n maxStoredAttachmentsPerThread,\n maxStoredBytesPerThread,\n schemaName,\n }),\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as SurveyAssistantSuggestItemKeyInput, d as SurveyAssistantSuggestItemLabelResult, l as SurveyAssistantSuggestItemKeyResult, m as SurveyAssistantTaskInvocationMode, p as SurveyAssistantTaskContext, u as SurveyAssistantSuggestItemLabelInput, v as SurveyAssistantTranslateContentInput, y as SurveyAssistantTranslateContentResult } from "./index-
|
|
2
|
-
import { a as SurveyAssistantModelSelection, n as SURVEY_ASSISTANT_TASK_AGENT_ID, o as SurveyAssistantRequestContext } from "./constants-
|
|
1
|
+
import { c as SurveyAssistantSuggestItemKeyInput, d as SurveyAssistantSuggestItemLabelResult, l as SurveyAssistantSuggestItemKeyResult, m as SurveyAssistantTaskInvocationMode, p as SurveyAssistantTaskContext, u as SurveyAssistantSuggestItemLabelInput, v as SurveyAssistantTranslateContentInput, y as SurveyAssistantTranslateContentResult } from "./index-BApnIiCI.mjs";
|
|
2
|
+
import { a as SurveyAssistantModelSelection, n as SURVEY_ASSISTANT_TASK_AGENT_ID, o as SurveyAssistantRequestContext } from "./constants-DbrJxxOh.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { RequestContext } from "@mastra/core/request-context";
|
|
5
5
|
import * as _$_mastra_core_agent0 from "@mastra/core/agent";
|
|
@@ -141,4 +141,4 @@ declare const createSurveyAssistantTaskHandler: ({
|
|
|
141
141
|
}: CreateSurveyAssistantTaskHandlerOptions) => (request: Request) => Promise<Response>;
|
|
142
142
|
//#endregion
|
|
143
143
|
export { SurveyAssistantTaskAuthorizationInput as a, createSurveyAssistantTaskAgent as c, runSurveyAssistantSuggestItemLabelTask as d, runSurveyAssistantTask as f, surveyAuthoringReferences as g, surveyAuthoringReferenceTopics as h, RunSurveyAssistantTaskOptions as i, createSurveyAssistantTaskHandler as l, SurveyAuthoringReferenceTopic as m, CreateSurveyAssistantTaskHandlerOptions as n, SurveyAssistantTaskAuthorizedIdentity as o, runSurveyAssistantTranslateContentTask as p, RunSurveyAssistantBuiltInTaskOptions as r, SurveyAssistantTaskModelResolutionInput as s, CreateSurveyAssistantTaskAgentOptions as t, runSurveyAssistantSuggestItemKeyTask as u };
|
|
144
|
-
//# sourceMappingURL=tasks-
|
|
144
|
+
//# sourceMappingURL=tasks-CCtxjhwh.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-
|
|
1
|
+
{"version":3,"file":"tasks-CCtxjhwh.d.mts","names":[],"sources":["../src/server/authoring-references.ts","../src/server/tasks.ts"],"mappings":";;;;;;;;cAMa,8BAAA;AAAA,KAcD,6BAAA,WAAwC,8BAAA;AAAA,cA6BvC,yBAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KCtBR,8BAAA,GAAiC,WAAA,QAC7B,8BAAA,EACP,MAAA,4BAEA,6BAAA;AAAA,UAGe,qCAAA;EACf,KAAA,EAAO,8BAAA;AAAA;AAAA,cAGI,8BAAA;EAAkC;AAAA,GAAW,qCAAA,KAAqC,KAAA,gCAAA,MAAA,4BAAA,6BAAA,EAAA,qBAAA,CAAA,iBAAA;AAAA,UAc9E,6BAAA,iBAA8C,CAAA,CAAE,OAAA;EAC/D,KAAA,EAAO,IAAA,CAAK,KAAA;EACZ,MAAA;EACA,KAAA;EACA,OAAA,EAAS,0BAAA;EACT,MAAA,EAAQ,OAAA;EACR,YAAA;EACA,eAAA,YAA2B,6BAAA;EAC3B,cAAA,GAAiB,cAAA,CAAe,6BAAA;EAChC,eAAA,GAAkB,qBAAA;EAClB,WAAA,GAAc,WAAA;AAAA;AAAA,cAWH,sBAAA,mBAAgD,CAAA,CAAE,OAAA;EAAS,KAAA;EAAA,MAAA;EAAA,KAAA;EAAA,OAAA;EAAA,MAAA;EAAA,YAAA;EAAA,eAAA;EAAA,cAAA;EAAA,eAAA;EAAA;AAAA,GAWrE,6BAAA,CAA8B,OAAA,MAAW,OAAA,CAAQ,CAAA,CAAE,MAAA,CAAO,OAAA;AAAA,UAiF5C,oCAAA;EACf,KAAA,EAAO,IAAA,CAAK,KAAA;EACZ,OAAA,EAAS,0BAAA;EACT,IAAA,GAAO,iCAAA;EACP,cAAA,GAAiB,cAAA,CAAe,6BAAA;EAChC,eAAA,GAAkB,qBAAA;EAClB,WAAA,GAAc,WAAA;AAAA;AAAA,cA8CH,oCAAA,GACX,KAAA,EAAO,kCAAA,EACP,OAAA,EAAS,oCAAA,KACR,OAAA,CAAQ,mCAAA;AAAA,cA6DE,sCAAA,GACX,KAAA,EAAO,oCAAA,EACP,OAAA,EAAS,oCAAA,KACR,OAAA,CAAQ,qCAAA;AAAA,cA6CE,sCAAA,GACX,KAAA,EAAO,oCAAA,EACP,OAAA,EAAS,oCAAA,KACR,OAAA,CAAQ,qCAAA;AAAA,UA8CM,qCAAA;EACf,UAAA;EACA,QAAA;AAAA;AAAA,UAGe,qCAAA;EACf,OAAA,EAAS,OAAA;EACT,mBAAA;EACA,iBAAA;AAAA;AAAA,UAGe,uCAAA;EACf,QAAA,EAAU,qCAAA;EACV,OAAA,EAAS,OAAA;EACT,gBAAA;AAAA;AAAA,UAGe,uCAAA;EACf,KAAA,EACI,IAAA,CAAK,KAAA,uBACE,IAAA,CAAK,KAAA,gBAAqB,OAAA,CAAQ,IAAA,CAAK,KAAA;EAClD,SAAA,CACE,KAAA,EAAO,qCAAA,GACN,qCAAA,GAAwC,OAAA,CAAQ,qCAAA;EACnD,iBAAA,EAAmB,OAAA,EAAS,OAAA,mBAA0B,OAAA;EACtD,SAAA,EAAW,OAAA,EAAS,OAAA,aAAoB,OAAA;EACxC,qBAAA;EACA,aAAA;EACA,aAAA,EAAe,KAAA;IACb,UAAA;IACA,QAAA,EAAU,qCAAA;IACV,MAAA;IACA,MAAA;EAAA;EAEF,eAAA,GAAkB,qBAAA;EAClB,YAAA,EACE,KAAA,EAAO,uCAAA,GAEL,6BAAA,sBAGA,OAAA,CAAQ,6BAAA;AAAA;AAAA,cAmCD,gCAAA;EAAoC,KAAA;EAAA,SAAA;EAAA,iBAAA;EAAA,SAAA;EAAA,qBAAA;EAAA,aAAA;EAAA,aAAA;EAAA,eAAA;EAAA;AAAA,GAU9C,uCAAA,MAWa,OAAA,EAAS,OAAA,KAAU,OAAA,CAAQ,QAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { p as SurveyAssistantTurnTerminationReason } from "./lifecycle-DWv5CiSu.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { Ut as SurveyAssistantCapabilitySet } from "./index-Da_Hb9-1.mjs";
|
|
3
3
|
import { a as SurveyAssistantThreadDocumentRepository } from "./thread-documents-Dvo6XS7o.mjs";
|
|
4
|
-
import { a as SurveyAssistantModelSelection, i as SurveyAssistantIdentityContext } from "./constants-
|
|
4
|
+
import { a as SurveyAssistantModelSelection, i as SurveyAssistantIdentityContext } from "./constants-DbrJxxOh.mjs";
|
|
5
5
|
import { UIMessage } from "ai";
|
|
6
6
|
import { AgentExecutionOptions } from "@mastra/core/agent";
|
|
7
7
|
import { Mastra } from "@mastra/core/mastra";
|
|
@@ -109,8 +109,14 @@ interface SurveyAssistantThreadIdentity {
|
|
|
109
109
|
}
|
|
110
110
|
interface CreateSurveyAssistantThreadHandlersOptions {
|
|
111
111
|
authorize(request: Request): SurveyAssistantThreadIdentity | Promise<SurveyAssistantThreadIdentity>;
|
|
112
|
+
onError?(error: unknown, context: SurveyAssistantThreadErrorContext): void;
|
|
112
113
|
repository: SurveyAssistantThreadRepository;
|
|
113
114
|
}
|
|
115
|
+
interface SurveyAssistantThreadErrorContext {
|
|
116
|
+
operation: "create" | "delete" | "list" | "read" | "update";
|
|
117
|
+
request: Request;
|
|
118
|
+
threadId?: string;
|
|
119
|
+
}
|
|
114
120
|
interface SurveyAssistantStoredThread {
|
|
115
121
|
id: string;
|
|
116
122
|
title?: string;
|
|
@@ -126,8 +132,16 @@ interface SurveyAssistantThreadRepository {
|
|
|
126
132
|
metadata: Record<string, unknown>;
|
|
127
133
|
}): Promise<SurveyAssistantStoredThread>;
|
|
128
134
|
get(threadId: string): Promise<SurveyAssistantStoredThread | null>;
|
|
129
|
-
list(resourceId: string, metadata: Record<string, string
|
|
130
|
-
|
|
135
|
+
list(resourceId: string, metadata: Record<string, string>, options?: {
|
|
136
|
+
cursor?: string;
|
|
137
|
+
}): Promise<SurveyAssistantStoredThread[] | {
|
|
138
|
+
threads: SurveyAssistantStoredThread[];
|
|
139
|
+
nextCursor?: string;
|
|
140
|
+
}>;
|
|
141
|
+
readMessages(threadId: string, resourceId: string, cursor?: string): Promise<unknown[] | {
|
|
142
|
+
messages: unknown[];
|
|
143
|
+
nextCursor?: string;
|
|
144
|
+
}>;
|
|
131
145
|
delete(threadId: string): Promise<void>;
|
|
132
146
|
update(input: {
|
|
133
147
|
id: string;
|
|
@@ -137,6 +151,7 @@ interface SurveyAssistantThreadRepository {
|
|
|
137
151
|
}
|
|
138
152
|
declare const createSurveyAssistantThreadHandlers: ({
|
|
139
153
|
authorize,
|
|
154
|
+
onError,
|
|
140
155
|
repository
|
|
141
156
|
}: CreateSurveyAssistantThreadHandlersOptions) => {
|
|
142
157
|
create: (request: Request) => Promise<Response>;
|
|
@@ -146,5 +161,5 @@ declare const createSurveyAssistantThreadHandlers: ({
|
|
|
146
161
|
update: (request: Request, threadId: string) => Promise<Response>;
|
|
147
162
|
};
|
|
148
163
|
//#endregion
|
|
149
|
-
export {
|
|
150
|
-
//# sourceMappingURL=thread-handlers-
|
|
164
|
+
export { readSurveyAssistantRequestJson as A, SURVEY_ASSISTANT_MAX_ATTACHMENT_NAME_CHARS as C, SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES as D, SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS as E, SurveyAssistantRequestError as O, SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES as S, SURVEY_ASSISTANT_MAX_REQUEST_BYTES as T, describeSurveyAssistantStreamError as _, SurveyAssistantThreadRepository as a, SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS as b, SurveyAssistantAuthorizationInput as c, SurveyAssistantChatHandlerOptions as d, SurveyAssistantModelResolutionInput as f, createSurveyAssistantChatHandler as g, SurveyAssistantTurnMetrics as h, SurveyAssistantThreadIdentity as i, validateSurveyAssistantMessages as j, SurveyAssistantRequestLimits as k, SurveyAssistantAuthorize as l, SurveyAssistantStreamErrorContext as m, SurveyAssistantStoredThread as n, createSurveyAssistantThreadHandlers as o, SurveyAssistantResolveModel as p, SurveyAssistantThreadErrorContext as r, SurveyAssistantAuthorizationError as s, CreateSurveyAssistantThreadHandlersOptions as t, SurveyAssistantAuthorizedIdentity as u, formatSurveyAssistantStreamError as v, SURVEY_ASSISTANT_MAX_MESSAGES as w, SURVEY_ASSISTANT_MAX_ATTACHMENTS as x, SURVEY_ASSISTANT_ACCEPTED_ATTACHMENT_TYPES as y };
|
|
165
|
+
//# sourceMappingURL=thread-handlers-Bt9cDo-F.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-handlers-
|
|
1
|
+
{"version":3,"file":"thread-handlers-Bt9cDo-F.d.mts","names":[],"sources":["../src/server/request-guardrails.ts","../src/server/handler.ts","../src/server/thread-handlers.ts"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { X as SURVEY_OPERATION_KINDS, bt as surveyOperationSchemasByKind, f as surveyChangeSetSchema, q as assistantItemTypeManifestSchema, yt as surveyOperationSchema } from "./protocol-
|
|
2
|
-
import { d as getDeterministicCreateItemTypes, f as inspectAssistantItem, p as resolveAssistantCapabilityReference } from "./form-authoring-
|
|
3
|
-
import { A as getRawSurvey, B as resolveItemSummary, C as clampLimit, F as mapKeyIndexById, H as summarizeFocusItemNode, I as mapOutlineById, J as translationEntrySchema, K as summarizeOutlineNode, L as mapRawItemsById, M as itemConfigDetailsSchema, N as itemMatchesQuery, P as itemSummarySchema, R as normalizeText, U as summarizeItemById, V as sliceWithCursor, W as summarizeKeyIndexEntries, Y as unique, _ as buildConfigSearchText, b as buildItemTranslationEntries, d as normalizeSurveyChangeOperations, f as buildExpressionMutationPatches, i as auditSurvey, j as getRawSurveyItems, k as getKeyIndexEntries, l as createSurveyChangeSet, p as expressionMutationSchema, q as summarizeRawItem, v as buildEmbeddedFormDetails, w as findDirectChildrenByFullKey, y as buildItemConfigDetails } from "./engine-
|
|
4
|
-
import { r as getSurveyAssistantEngineContext, s as requireSurveyAssistantTurnState } from "./request-context-
|
|
1
|
+
import { X as SURVEY_OPERATION_KINDS, bt as surveyOperationSchemasByKind, f as surveyChangeSetSchema, q as assistantItemTypeManifestSchema, yt as surveyOperationSchema } from "./protocol-DJUP4gc0.mjs";
|
|
2
|
+
import { d as getDeterministicCreateItemTypes, f as inspectAssistantItem, p as resolveAssistantCapabilityReference } from "./form-authoring-BQh40yDb.mjs";
|
|
3
|
+
import { A as getRawSurvey, B as resolveItemSummary, C as clampLimit, F as mapKeyIndexById, H as summarizeFocusItemNode, I as mapOutlineById, J as translationEntrySchema, K as summarizeOutlineNode, L as mapRawItemsById, M as itemConfigDetailsSchema, N as itemMatchesQuery, P as itemSummarySchema, R as normalizeText, U as summarizeItemById, V as sliceWithCursor, W as summarizeKeyIndexEntries, X as analyzeSurveyAssistantExpressionReferences, Y as unique, _ as buildConfigSearchText, b as buildItemTranslationEntries, d as normalizeSurveyChangeOperations, f as buildExpressionMutationPatches, i as auditSurvey, j as getRawSurveyItems, k as getKeyIndexEntries, l as createSurveyChangeSet, p as expressionMutationSchema, q as summarizeRawItem, v as buildEmbeddedFormDetails, w as findDirectChildrenByFullKey, y as buildItemConfigDetails } from "./engine-DcSdLRle.mjs";
|
|
4
|
+
import { r as getSurveyAssistantEngineContext, s as requireSurveyAssistantTurnState } from "./request-context-D1sC54ZA.mjs";
|
|
5
5
|
import { i as surveyAuthoringReferences, n as getBuiltInItemTypeAuthoringReference, r as surveyAuthoringReferenceTopics, t as builtInSurveyAuthoringItemTypes } from "./authoring-references-yyYC4Ydi.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { JsonPatchError, SURVEY_EDITOR_ITEM_COLORS, encodeJsonPointerSegment, getAssetUsagesFromContent, getContentPlainText, getValueAtJsonPointer } from "@case-framework/survey-core";
|
|
@@ -1681,6 +1681,7 @@ const inspectActionSchema = z.enum([
|
|
|
1681
1681
|
"item-details",
|
|
1682
1682
|
"localization",
|
|
1683
1683
|
"assets",
|
|
1684
|
+
"expression-diagnostics",
|
|
1684
1685
|
"raw-json"
|
|
1685
1686
|
]);
|
|
1686
1687
|
const outlineModeSchema = z.enum([
|
|
@@ -1975,6 +1976,24 @@ const surveyInspectTool = createTool({
|
|
|
1975
1976
|
result
|
|
1976
1977
|
};
|
|
1977
1978
|
}
|
|
1979
|
+
if (input.action === "expression-diagnostics") {
|
|
1980
|
+
const allDiagnostics = analyzeSurveyAssistantExpressionReferences(snapshot.survey, snapshot.trustedCapabilities);
|
|
1981
|
+
const itemId = input.itemRef ? resolveItemRef(input, snapshot) : void 0;
|
|
1982
|
+
const diagnostics = itemId ? allDiagnostics.filter((diagnostic) => diagnostic.ownerItemId === itemId) : allDiagnostics;
|
|
1983
|
+
const limit = input.limit ?? 50;
|
|
1984
|
+
const result = {
|
|
1985
|
+
valid: diagnostics.length === 0,
|
|
1986
|
+
count: diagnostics.length,
|
|
1987
|
+
diagnostics: diagnostics.slice(0, limit),
|
|
1988
|
+
truncated: diagnostics.length > limit
|
|
1989
|
+
};
|
|
1990
|
+
return {
|
|
1991
|
+
ok: true,
|
|
1992
|
+
action: input.action,
|
|
1993
|
+
modelSummary: diagnostics.length === 0 ? "No broken expression references were found in the current survey draft." : `${diagnostics.length} broken expression reference${diagnostics.length === 1 ? " was" : "s were"} found. Repair every listed location, then run expression-diagnostics again before claiming completion.\n${stringifyForModel(result)}`,
|
|
1994
|
+
result
|
|
1995
|
+
};
|
|
1996
|
+
}
|
|
1978
1997
|
if (input.action === "localization") {
|
|
1979
1998
|
if (!input.targetLocale) return {
|
|
1980
1999
|
ok: false,
|
|
@@ -2137,6 +2156,8 @@ const inputSchema$1 = z.object({
|
|
|
2137
2156
|
sourceLocale: z.string().min(1).optional().describe("Locale treated as the source when checking translation completeness."),
|
|
2138
2157
|
targetLocales: z.array(z.string().min(1)).max(20).optional(),
|
|
2139
2158
|
maxFindings: z.number().int().min(1).max(300).default(120).optional(),
|
|
2159
|
+
keyReviewOffset: z.number().int().nonnegative().default(0).optional().describe("Zero-based offset for the qualitative key/content review evidence."),
|
|
2160
|
+
keyReviewLimit: z.number().int().min(1).max(50).default(30).optional().describe("Number of item, choice-option, and form-field key/content pairs to return."),
|
|
2140
2161
|
reason: z.string().max(500).optional()
|
|
2141
2162
|
});
|
|
2142
2163
|
const outputSchema = z.object({
|
|
@@ -2184,13 +2205,17 @@ const formatAuditForModel = (output) => {
|
|
|
2184
2205
|
return `- ${finding.code}${location ? ` (${location})` : ""}: ${previewAuditMessage(finding.message)}`;
|
|
2185
2206
|
}).join("\n")}` : void 0,
|
|
2186
2207
|
report.qualityReviewPrinciples.length > 0 ? `Qualitative review rubric:\n${report.qualityReviewPrinciples.map((principle) => `- ${principle.id}: ${principle.prompt}`).join("\n")}` : void 0,
|
|
2208
|
+
report.keyReview.entries.length > 0 ? `Key/content review evidence (${report.keyReview.offset + 1}-${report.keyReview.offset + report.keyReview.returnedEntryCount} of ${report.keyReview.entryCount}, source locale ${report.keyReview.sourceLocale ?? "unavailable"}${report.keyReview.truncated ? "; more pages available" : ""}):\n${report.keyReview.entries.map((entry) => {
|
|
2209
|
+
const content = entry.content ? `; current content=${JSON.stringify(previewAuditMessage(entry.content))}` : "; current content unavailable";
|
|
2210
|
+
return `- ${entry.kind} item=${entry.itemId} itemKey=${JSON.stringify(entry.itemKey)} key=${JSON.stringify(entry.key)} (${entry.keySource})${entry.contentKey ? ` contentKey=${entry.contentKey}` : ""}${content}`;
|
|
2211
|
+
}).join("\n")}\n${report.keyReview.note}` : `Key/content review evidence: none returned (${report.keyReview.entryCount} total entries).`,
|
|
2187
2212
|
report.note,
|
|
2188
2213
|
"This audit checks the current survey deterministically. It does not compare the draft with an attached source document, so a clean audit does not establish source fidelity or completeness."
|
|
2189
2214
|
].filter((line) => Boolean(line)).join("\n\n");
|
|
2190
2215
|
};
|
|
2191
2216
|
const surveyAuditTool = createTool({
|
|
2192
2217
|
id: TOOL_ID$1,
|
|
2193
|
-
description: "Audit the current survey for deterministic structural, content, localization, response, and asset issues, and return a
|
|
2218
|
+
description: "Audit the current survey for deterministic structural, content, localization, expression-reference, response, and asset issues, and return a questionnaire-quality rubric plus paged key/content evidence for qualitative consistency review. This is read-only and is not psychometric validation.",
|
|
2194
2219
|
inputSchema: inputSchema$1,
|
|
2195
2220
|
outputSchema,
|
|
2196
2221
|
mcp: { annotations: {
|
|
@@ -2415,4 +2440,4 @@ const surveyAssistantTools = Object.freeze({
|
|
|
2415
2440
|
//#endregion
|
|
2416
2441
|
export { surveyAuditTool as i, surveyAssistantTools as n, surveyAssetTool as r, SURVEY_ASSISTANT_TOOL_IDS as t };
|
|
2417
2442
|
|
|
2418
|
-
//# sourceMappingURL=tools-
|
|
2443
|
+
//# sourceMappingURL=tools-3tq-XqI0.mjs.map
|