@case-framework/survey-assistant 0.4.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 +8 -0
- package/dist/capabilities-default.d.mts +1 -1
- package/dist/{constants-k1b_evIb.d.mts → constants-DbrJxxOh.d.mts} +2 -2
- package/dist/{constants-k1b_evIb.d.mts.map → constants-DbrJxxOh.d.mts.map} +1 -1
- package/dist/{controller-proxy-quQjtA7j.d.mts → controller-proxy-BdKF2yrq.d.mts} +2 -2
- package/dist/{controller-proxy-quQjtA7j.d.mts.map → controller-proxy-BdKF2yrq.d.mts.map} +1 -1
- package/dist/{engine-BvfUx_Jx.mjs → engine-DcSdLRle.mjs} +88 -1
- package/dist/{engine-BvfUx_Jx.mjs.map → engine-DcSdLRle.mjs.map} +1 -1
- package/dist/engine.d.mts +2 -2
- package/dist/engine.mjs +1 -1
- package/dist/{index-8x1Eqlnz.d.mts → index-BApnIiCI.d.mts} +4 -4
- package/dist/{index-8x1Eqlnz.d.mts.map → index-BApnIiCI.d.mts.map} +1 -1
- package/dist/{index-r8HVcn5b.d.mts → index-Da_Hb9-1.d.mts} +23 -3
- package/dist/{index-r8HVcn5b.d.mts.map → index-Da_Hb9-1.d.mts.map} +1 -1
- package/dist/{index-biZnRl-h.d.mts → index-DhNQKOwr.d.mts} +9 -5
- package/dist/index-DhNQKOwr.d.mts.map +1 -0
- package/dist/{index-BDp6S7r9.d.mts → index-dV6df0W3.d.mts} +3 -3
- package/dist/{index-BDp6S7r9.d.mts.map → index-dV6df0W3.d.mts.map} +1 -1
- package/dist/{memory-thread-repository-xBZOog_q.mjs → memory-thread-repository-CvYZwni6.mjs} +41 -10
- package/dist/{memory-thread-repository-xBZOog_q.mjs.map → memory-thread-repository-CvYZwni6.mjs.map} +1 -1
- package/dist/protocol.d.mts +1 -1
- package/dist/react-integration.d.mts +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/{request-context-DixY5DYu.mjs → request-context-D1sC54ZA.mjs} +2 -2
- package/dist/{request-context-DixY5DYu.mjs.map → request-context-D1sC54ZA.mjs.map} +1 -1
- package/dist/server-agent.d.mts +8 -6
- package/dist/server-agent.mjs +2 -2
- package/dist/server-agent.mjs.map +1 -1
- package/dist/server-runtime.d.mts +19 -5
- package/dist/server-runtime.d.mts.map +1 -1
- package/dist/server-runtime.mjs +45 -6
- package/dist/server-runtime.mjs.map +1 -1
- package/dist/server-tasks.d.mts +1 -1
- package/dist/server-tools.d.mts +1 -1
- package/dist/server-tools.mjs +1 -1
- package/dist/server.d.mts +5 -5
- package/dist/server.mjs +2 -2
- package/dist/storage-postgres.mjs +3 -0
- package/dist/storage-postgres.mjs.map +1 -1
- package/dist/{tasks-BWmTMXoK.d.mts → tasks-CCtxjhwh.d.mts} +3 -3
- package/dist/{tasks-BWmTMXoK.d.mts.map → tasks-CCtxjhwh.d.mts.map} +1 -1
- package/dist/{thread-handlers-D8gkLfU6.d.mts → thread-handlers-Bt9cDo-F.d.mts} +11 -4
- package/dist/{thread-handlers-D8gkLfU6.d.mts.map → thread-handlers-Bt9cDo-F.d.mts.map} +1 -1
- package/dist/{tools-TXI8bfzZ.mjs → tools-3tq-XqI0.mjs} +10 -4
- package/dist/{tools-TXI8bfzZ.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 +70 -15
- package/dist/ui.mjs.map +1 -1
- package/docs/integration.md +34 -0
- package/package.json +1 -1
- package/dist/index-biZnRl-h.d.mts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-runtime.mjs","names":[],"sources":["../src/server/runtime-config.ts","../src/server/runtime.ts"],"sourcesContent":["import type { AgentExecutionOptions } from \"@mastra/core/agent\";\nimport type { AzureOpenAIGatewayConfig } from \"@mastra/core/llm\";\nimport { z } from \"zod\";\nimport {\n createSurveyAssistantObservationalMemoryOptions,\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS,\n type SurveyAssistantObservationalMemoryOptions,\n} from \"./agent\";\nimport {\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS,\n type SurveyAssistantRequestLimits,\n} from \"./request-guardrails\";\n\nexport type SurveyAssistantProvider = \"azure-openai\" | \"lmstudio\" | \"mistral\" | \"openai\";\nexport type SurveyAssistantProviderOptionsKey = \"azure\" | \"lmstudio\" | \"mistral\" | \"openai\";\n\nexport type SurveyAssistantModelRole = \"chat-default\" | \"chat-picker\" | \"memory\" | \"task-default\";\n\nexport interface SurveyAssistantConfiguredModel {\n id: string;\n label: string;\n upstreamModelId: string;\n providerOptions?: AgentExecutionOptions[\"providerOptions\"];\n}\n\nexport interface SurveyAssistantAzureConfig {\n apiKey?: string;\n apiVersion: \"preview\" | \"v1\";\n discoverModels: boolean;\n management?: AzureOpenAIGatewayConfig[\"management\"];\n resourceName?: string;\n}\n\nexport interface SurveyAssistantLmStudioConfig {\n apiKey?: string;\n baseUrl: string;\n}\n\nexport interface SurveyAssistantExecutionConfig {\n firstResponseTimeoutMs: number;\n idleTimeoutMs: number;\n maxConcurrentRequests: number;\n /** Absolute execution ceiling. Active streams still stop when this duration is reached. */\n maxDurationMs: number;\n maxSteps: number;\n providerOptions?: AgentExecutionOptions[\"providerOptions\"];\n sendReasoning: boolean;\n}\n\nexport interface SurveyAssistantRuntimeConfig {\n azure?: SurveyAssistantAzureConfig;\n lmstudio?: SurveyAssistantLmStudioConfig;\n /** Default chat model and fallback for chat requests without a selection. */\n defaultModelId: string;\n enabled: boolean;\n /** Fixed same-provider model shared by memory observation and reflection. */\n memoryModelId: string;\n modelCatalogTtlMs: number;\n /** Every configured model for the active provider, including internal-only roles. */\n models?: SurveyAssistantConfiguredModel[];\n modelIds: string[];\n observationalMemory: SurveyAssistantObservationalMemoryOptions | false;\n provider: SurveyAssistantProvider;\n /** Resolved server-only provider credential. Never expose it through the model catalog. */\n providerApiKey?: string;\n requestLimits: Pick<\n SurveyAssistantRequestLimits,\n | \"maxAttachmentBytes\"\n | \"maxAttachments\"\n | \"maxRequestBytes\"\n | \"maxTextPartChars\"\n | \"maxTotalAttachmentBytes\"\n >;\n readinessError: string | null;\n /**\n * Fixed model for one-shot tasks. When omitted, tasks follow the\n * server-authorized chat model selection.\n */\n taskModelId?: string;\n execution: SurveyAssistantExecutionConfig;\n}\n\nexport interface ParseSurveyAssistantEnvironmentOptions {\n defaultLmStudioModel?: string;\n defaultMistralModel?: string;\n defaultOpenAIModel?: string;\n defaultProvider?: SurveyAssistantProvider;\n requireExperimentalIdentityOptIn?: boolean;\n requireStorage?: boolean;\n}\n\ntype Environment = Record<string, string | undefined>;\n\nconst ENVIRONMENT_VARIABLE_NAME = /^[A-Z_][A-Z0-9_]*$/;\n\nconst modelRoleSchema = z.enum([\"chat-default\", \"chat-picker\", \"memory\", \"task-default\"]);\n\nconst providerModelOptionsSchema = z\n .object({\n parallelToolCalls: z.boolean().optional(),\n promptCacheKey: z.string().trim().min(1).optional(),\n promptCacheRetention: z.enum([\"in_memory\", \"24h\"]).optional(),\n reasoningEffort: z.string().trim().min(1).optional(),\n reasoningSummary: z.enum([\"auto\", \"concise\", \"detailed\", \"off\", \"none\"]).optional(),\n serviceTier: z.enum([\"auto\", \"flex\", \"priority\", \"default\"]).optional(),\n textVerbosity: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n })\n .strict();\n\nconst configuredModelSchema = z\n .object({\n id: z.string().trim().min(1).max(240),\n label: z.string().trim().min(1).max(240).optional(),\n upstreamModel: z.string().trim().min(1).max(240).optional(),\n roles: z.array(modelRoleSchema).min(1),\n options: providerModelOptionsSchema.optional(),\n })\n .strict()\n .superRefine(({ roles }, context) => {\n if (new Set(roles).size !== roles.length) {\n context.addIssue({ code: \"custom\", message: \"Model roles must be unique.\" });\n }\n });\n\nconst providerBaseShape = {\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME).optional(),\n models: z.array(configuredModelSchema).min(1),\n options: providerModelOptionsSchema.optional(),\n};\n\nconst providerSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"openai\"),\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n })\n .strict(),\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"mistral\"),\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n })\n .strict(),\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"lmstudio\"),\n baseUrl: z.string().url().default(\"http://127.0.0.1:1234/v1\"),\n apiKeyOptional: z.boolean().default(true),\n })\n .strict(),\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"azure-openai\"),\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n apiVersion: z.enum([\"v1\", \"preview\"]).default(\"v1\"),\n discoverModels: z.boolean().default(false),\n resourceName: z.string().trim().min(1),\n management: z\n .object({\n tenantId: z.string().trim().min(1),\n clientId: z.string().trim().min(1),\n clientSecretEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n subscriptionId: z.string().trim().min(1),\n resourceGroup: z.string().trim().min(1),\n })\n .strict()\n .optional(),\n })\n .strict(),\n]);\n\nexport const surveyAssistantConfigurationDocumentSchema = z\n .object({\n version: z.literal(1),\n activeProvider: z.string().trim().min(1),\n enabled: z.boolean().optional(),\n providers: z.record(z.string().trim().min(1), providerSchema),\n execution: z\n .object({\n firstResponseTimeoutMs: z.number().int().positive().optional(),\n idleTimeoutMs: z.number().int().positive().optional(),\n maxConcurrentRequests: z.number().int().positive().optional(),\n maxDurationMs: z.number().int().positive().optional(),\n maxSteps: z.number().int().positive().optional(),\n sendReasoning: z.boolean().optional(),\n })\n .strict()\n .optional(),\n memory: z\n .object({\n enabled: z.boolean().optional(),\n bufferOnIdle: z.boolean().optional(),\n messageTokens: z.number().int().positive().optional(),\n observationTokens: z.number().int().positive().optional(),\n temporalMarkers: z.boolean().optional(),\n })\n .strict()\n .optional(),\n modelCatalogTtlMs: z.number().int().positive().optional(),\n requestLimits: z\n .object({\n maxAttachmentBytes: z.number().int().positive().optional(),\n maxAttachments: z.number().int().positive().optional(),\n maxRequestBytes: z.number().int().positive().optional(),\n maxTextPartChars: z.number().int().positive().optional(),\n maxTotalAttachmentBytes: z.number().int().positive().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type SurveyAssistantConfigurationDocument = z.infer<\n typeof surveyAssistantConfigurationDocumentSchema\n>;\n\nconst DEFAULT_MAX_STEPS = 48;\nconst HARD_MAX_STEPS = 64;\nconst DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = 15 * 60 * 1_000;\nconst DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1_000;\nconst DEFAULT_MAX_DURATION_MS = 60 * 60 * 1_000;\nconst DEFAULT_CATALOG_TTL_MS = 5 * 60 * 1_000;\n\ntype ProviderModelOptions = z.infer<typeof providerModelOptionsSchema>;\n\nconst getValue = (env: Environment, name: string) => {\n const value = env[name]?.trim();\n return value || undefined;\n};\n\nconst getBoolean = (env: Environment, name: string, fallback: boolean) => {\n const value = getValue(env, name)?.toLowerCase();\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n if (value !== undefined) {\n throw new Error(`${name} must be \"true\" or \"false\".`);\n }\n return fallback;\n};\n\nconst getPositiveNumber = (env: Environment, name: string, fallback: number) => {\n const configured = getValue(env, name);\n if (configured === undefined) return fallback;\n const value = Number(configured);\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`${name} must be a positive integer.`);\n }\n return value;\n};\n\nconst getEnum = <TValue extends string>(\n env: Environment,\n name: string,\n values: readonly TValue[],\n) => {\n const value = getValue(env, name);\n if (!value) return undefined;\n if (!(values as readonly string[]).includes(value)) {\n throw new Error(`${name} must be one of: ${values.join(\", \")}.`);\n }\n return value as TValue;\n};\n\nconst getCommaSeparatedValues = (env: Environment, name: string) => [\n ...new Set(\n (getValue(env, name) ?? \"\")\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean),\n ),\n];\n\nconst getSameProviderModelId = (\n value: string,\n name: string,\n { allowNestedId = false }: { allowNestedId?: boolean } = {},\n) => {\n if (!allowNestedId && value.includes(\"/\")) {\n throw new Error(\n `${name} must be a model or deployment id without a provider prefix. ` +\n \"All survey assistant models use SURVEY_ASSISTANT_PROVIDER.\",\n );\n }\n return value;\n};\n\nconst getOptionalSameProviderModelId = (\n env: Environment,\n name: string,\n options?: { allowNestedId?: boolean },\n) => {\n const value = getValue(env, name);\n return value ? getSameProviderModelId(value, name, options) : undefined;\n};\n\nexport const resolveSurveyAssistantProviderOptionsKey = (\n provider: SurveyAssistantProvider,\n): SurveyAssistantProviderOptionsKey => (provider === \"azure-openai\" ? \"azure\" : provider);\n\nconst createProviderOptions = (\n provider: SurveyAssistantProvider,\n options: ProviderModelOptions | undefined,\n sendReasoning: boolean,\n): AgentExecutionOptions[\"providerOptions\"] => {\n const providerOptionsKey = resolveSurveyAssistantProviderOptionsKey(provider);\n const reasoningSummary =\n options?.reasoningSummary === \"off\" || options?.reasoningSummary === \"none\"\n ? undefined\n : options?.reasoningSummary;\n const reasoningEffort =\n options?.reasoningEffort === \"default\" || options?.reasoningEffort === \"provider-default\"\n ? undefined\n : options?.reasoningEffort;\n const resolved = {\n parallelToolCalls: options?.parallelToolCalls ?? false,\n ...(reasoningEffort ? { reasoningEffort } : {}),\n ...(options?.promptCacheKey ? { promptCacheKey: options.promptCacheKey } : {}),\n ...(options?.promptCacheRetention\n ? { promptCacheRetention: options.promptCacheRetention }\n : {}),\n ...(sendReasoning && reasoningSummary ? { reasoningSummary } : {}),\n ...(options?.serviceTier ? { serviceTier: options.serviceTier } : {}),\n ...(options?.textVerbosity ? { textVerbosity: options.textVerbosity } : {}),\n };\n return { [providerOptionsKey]: resolved } as AgentExecutionOptions[\"providerOptions\"];\n};\n\nconst resolveConfiguredEnabled = (\n env: Environment,\n configured: boolean | undefined,\n requireExperimentalIdentityOptIn: boolean,\n) => {\n const environmentOverride = getValue(env, \"SURVEY_ASSISTANT_ENABLED\");\n if (\n environmentOverride !== undefined &&\n environmentOverride !== \"true\" &&\n environmentOverride !== \"false\"\n ) {\n throw new Error('SURVEY_ASSISTANT_ENABLED must be \"true\" or \"false\".');\n }\n const requested =\n environmentOverride === \"true\"\n ? true\n : environmentOverride === \"false\"\n ? false\n : (configured ?? env.NODE_ENV === \"development\");\n return (\n requested &&\n (!requireExperimentalIdentityOptIn ||\n env.NODE_ENV === \"development\" ||\n getBoolean(env, \"SURVEY_ASSISTANT_ALLOW_EXPERIMENTAL_IDENTITY\", false))\n );\n};\n\nconst parseProvider = (\n env: Environment,\n fallback: SurveyAssistantProvider,\n): SurveyAssistantProvider => {\n const value = getValue(env, \"SURVEY_ASSISTANT_PROVIDER\")?.toLowerCase();\n if (value === \"azure\" || value === \"azure-openai\") return \"azure-openai\";\n if (value === \"lmstudio\" || value === \"openai\" || value === \"mistral\") return value;\n if (value) {\n throw new Error(\n \"SURVEY_ASSISTANT_PROVIDER must be one of: openai, mistral, lmstudio, azure-openai.\",\n );\n }\n return fallback;\n};\n\nconst parseAzureManagement = (\n env: Environment,\n): AzureOpenAIGatewayConfig[\"management\"] | undefined => {\n if (!getBoolean(env, \"SURVEY_ASSISTANT_AZURE_DISCOVER_MODELS\", false)) return undefined;\n const management = {\n tenantId: getValue(env, \"AZURE_TENANT_ID\"),\n clientId: getValue(env, \"AZURE_CLIENT_ID\"),\n clientSecret: getValue(env, \"AZURE_CLIENT_SECRET\"),\n subscriptionId: getValue(env, \"AZURE_SUBSCRIPTION_ID\"),\n resourceGroup: getValue(env, \"AZURE_RESOURCE_GROUP\"),\n };\n return Object.values(management).every(Boolean)\n ? (management as AzureOpenAIGatewayConfig[\"management\"])\n : undefined;\n};\n\nconst getReadinessError = ({\n azure,\n env,\n modelWasConfigured,\n provider,\n requireStorage,\n}: {\n azure?: SurveyAssistantAzureConfig;\n env: Environment;\n modelWasConfigured: boolean;\n provider: SurveyAssistantProvider;\n requireStorage: boolean;\n}) => {\n if (\n requireStorage &&\n !getValue(env, \"SURVEY_ASSISTANT_DATABASE_URL\") &&\n !getValue(env, \"DATABASE_URL\")\n ) {\n return \"Survey assistant storage is not configured.\";\n }\n if (provider === \"openai\" && !getValue(env, \"OPENAI_API_KEY\")) {\n return \"The OpenAI API key is not configured for the survey assistant.\";\n }\n if (provider === \"mistral\" && !getValue(env, \"MISTRAL_API_KEY\")) {\n return \"The Mistral API key is not configured for the survey assistant.\";\n }\n if (provider === \"azure-openai\") {\n if (!azure?.resourceName) {\n return \"The Azure OpenAI resource name is not configured for the survey assistant.\";\n }\n if (!azure.apiKey) {\n return \"The Azure OpenAI API key is not configured for the survey assistant.\";\n }\n if (!modelWasConfigured) {\n return \"The Azure OpenAI deployment name is not configured for the survey assistant.\";\n }\n if (azure.discoverModels && !azure.management) {\n return \"Azure deployment discovery requires complete tenant, client, subscription, and resource-group settings.\";\n }\n }\n return null;\n};\n\nexport const parseSurveyAssistantConfigurationDocument = (\n input: unknown,\n env: Environment,\n {\n requireExperimentalIdentityOptIn = false,\n requireStorage = true,\n }: Pick<\n ParseSurveyAssistantEnvironmentOptions,\n \"requireExperimentalIdentityOptIn\" | \"requireStorage\"\n > = {},\n): SurveyAssistantRuntimeConfig => {\n const document = surveyAssistantConfigurationDocumentSchema.parse(input);\n const activeProvider = document.providers[document.activeProvider];\n if (!activeProvider) {\n throw new Error(`activeProvider references unknown provider \"${document.activeProvider}\".`);\n }\n\n const memoryEnabled = document.memory?.enabled ?? true;\n for (const [providerName, configuredProvider] of Object.entries(document.providers)) {\n const duplicateModelId = configuredProvider.models.find(\n (model, index, models) =>\n models.findIndex((candidate) => candidate.id === model.id) !== index,\n )?.id;\n if (duplicateModelId) {\n throw new Error(\n `Provider \"${providerName}\" contains duplicate model id \"${duplicateModelId}\".`,\n );\n }\n const modelsForProviderRole = (role: SurveyAssistantModelRole) =>\n configuredProvider.models.filter((model) => model.roles.includes(role));\n const providerChatDefaults = modelsForProviderRole(\"chat-default\");\n const providerChatModels = modelsForProviderRole(\"chat-picker\");\n const providerTaskDefaults = modelsForProviderRole(\"task-default\");\n const providerMemoryModels = modelsForProviderRole(\"memory\");\n if (providerChatDefaults.length !== 1) {\n throw new Error(`Provider \"${providerName}\" must configure exactly one chat-default model.`);\n }\n if (!providerChatDefaults[0].roles.includes(\"chat-picker\")) {\n throw new Error(\n `The chat-default model for provider \"${providerName}\" must also have the chat-picker role.`,\n );\n }\n if (providerChatModels.length === 0) {\n throw new Error(`Provider \"${providerName}\" must configure a chat-picker model.`);\n }\n if (providerTaskDefaults.length > 1) {\n throw new Error(`Provider \"${providerName}\" may configure at most one task-default model.`);\n }\n if (providerMemoryModels.length > 1 || (memoryEnabled && providerMemoryModels.length !== 1)) {\n throw new Error(\n memoryEnabled\n ? `Provider \"${providerName}\" must configure exactly one memory model when memory is enabled.`\n : `Provider \"${providerName}\" may configure at most one memory model.`,\n );\n }\n if (\n configuredProvider.type === \"lmstudio\" &&\n !configuredProvider.apiKeyOptional &&\n !configuredProvider.apiKeyEnv\n ) {\n throw new Error(\n `Provider \"${providerName}\" must configure apiKeyEnv when apiKeyOptional is false.`,\n );\n }\n const validateOptions = (options: ProviderModelOptions | undefined, location: string) => {\n if (!options) return;\n if (\n configuredProvider.type !== \"openai\" &&\n configuredProvider.type !== \"azure-openai\" &&\n (options.promptCacheKey ||\n options.promptCacheRetention ||\n options.reasoningSummary ||\n options.textVerbosity)\n ) {\n throw new Error(`${location} contains options unsupported by ${configuredProvider.type}.`);\n }\n if (configuredProvider.type !== \"openai\" && options.serviceTier) {\n throw new Error(`${location} contains serviceTier, which is only supported by openai.`);\n }\n };\n validateOptions(configuredProvider.options, `Provider \"${providerName}\"`);\n for (const model of configuredProvider.models) {\n const upstreamModelId = model.upstreamModel ?? model.id;\n if (configuredProvider.type !== \"lmstudio\" && upstreamModelId.includes(\"/\")) {\n throw new Error(\n `Model \"${model.id}\" must use an upstreamModel without a provider prefix for ${configuredProvider.type}.`,\n );\n }\n validateOptions(model.options, `Model \"${model.id}\" in provider \"${providerName}\"`);\n }\n }\n\n const modelsForRole = (role: SurveyAssistantModelRole) =>\n activeProvider.models.filter((model) => model.roles.includes(role));\n const chatDefaults = modelsForRole(\"chat-default\");\n const chatModels = modelsForRole(\"chat-picker\");\n const taskDefaults = modelsForRole(\"task-default\");\n const memoryModels = modelsForRole(\"memory\");\n\n const provider = activeProvider.type;\n\n const sendReasoning = document.execution?.sendReasoning ?? true;\n const providerDefaults: ProviderModelOptions = {\n parallelToolCalls: false,\n ...(provider === \"openai\" || provider === \"azure-openai\"\n ? {\n reasoningEffort: \"low\",\n reasoningSummary: \"detailed\" as const,\n promptCacheKey: \"survey-assistant-chat-v21\",\n }\n : provider === \"mistral\"\n ? { reasoningEffort: \"none\" }\n : {}),\n ...activeProvider.options,\n };\n const models: SurveyAssistantConfiguredModel[] = activeProvider.models.map((model) => ({\n id: model.id,\n label: model.label ?? model.id,\n upstreamModelId: model.upstreamModel ?? model.id,\n providerOptions: createProviderOptions(\n provider,\n { ...providerDefaults, ...model.options },\n sendReasoning,\n ),\n }));\n const configuredModel = (id: string) => models.find((model) => model.id === id)!;\n const defaultModelId = chatDefaults[0].id;\n const memoryModelId = (memoryModels[0] ?? chatDefaults[0]).id;\n const taskModelId = taskDefaults[0]?.id;\n const providerApiKey = activeProvider.apiKeyEnv\n ? getValue(env, activeProvider.apiKeyEnv)\n : undefined;\n const memoryModel = configuredModel(memoryModelId);\n const memoryModelConfig:\n | string\n | { id: `${string}/${string}`; apiKey?: string }\n | {\n providerId: string;\n modelId: string;\n url: string;\n apiKey?: string;\n } =\n provider === \"lmstudio\"\n ? {\n providerId: \"lmstudio\",\n modelId: memoryModel.upstreamModelId,\n url: activeProvider.baseUrl,\n ...(providerApiKey ? { apiKey: providerApiKey } : {}),\n }\n : provider === \"azure-openai\"\n ? `${provider}/${memoryModel.upstreamModelId}`\n : {\n id: `${provider}/${memoryModel.upstreamModelId}`,\n ...(providerApiKey ? { apiKey: providerApiKey } : {}),\n };\n const azure: SurveyAssistantAzureConfig | undefined =\n provider === \"azure-openai\"\n ? {\n resourceName: activeProvider.resourceName,\n apiKey: providerApiKey,\n apiVersion: activeProvider.apiVersion,\n discoverModels: activeProvider.discoverModels,\n management: activeProvider.management\n ? {\n tenantId: activeProvider.management.tenantId,\n clientId: activeProvider.management.clientId,\n clientSecret: getValue(env, activeProvider.management.clientSecretEnv) ?? \"\",\n subscriptionId: activeProvider.management.subscriptionId,\n resourceGroup: activeProvider.management.resourceGroup,\n }\n : undefined,\n }\n : undefined;\n const lmstudio: SurveyAssistantLmStudioConfig | undefined =\n provider === \"lmstudio\"\n ? { baseUrl: activeProvider.baseUrl, ...(providerApiKey ? { apiKey: providerApiKey } : {}) }\n : undefined;\n const missingProviderSecret =\n activeProvider.apiKeyEnv &&\n !providerApiKey &&\n !(provider === \"lmstudio\" && activeProvider.apiKeyOptional);\n const missingManagementSecret =\n provider === \"azure-openai\" &&\n activeProvider.discoverModels &&\n (!activeProvider.management || !azure?.management?.clientSecret);\n const missingStorage =\n requireStorage &&\n !getValue(env, \"SURVEY_ASSISTANT_DATABASE_URL\") &&\n !getValue(env, \"DATABASE_URL\");\n const readinessError = missingStorage\n ? \"Survey assistant storage is not configured.\"\n : missingProviderSecret\n ? `The provider credential ${activeProvider.apiKeyEnv} is not configured for the survey assistant.`\n : missingManagementSecret\n ? \"Azure deployment discovery requires complete management configuration and credentials.\"\n : null;\n const configuredMaxSteps = document.execution?.maxSteps ?? DEFAULT_MAX_STEPS;\n\n return {\n provider,\n providerApiKey,\n defaultModelId,\n memoryModelId,\n taskModelId,\n modelIds: chatModels.map((model) => model.id),\n models,\n modelCatalogTtlMs: document.modelCatalogTtlMs ?? DEFAULT_CATALOG_TTL_MS,\n azure,\n lmstudio,\n enabled: resolveConfiguredEnabled(env, document.enabled, requireExperimentalIdentityOptIn),\n readinessError,\n requestLimits: {\n maxAttachmentBytes:\n document.requestLimits?.maxAttachmentBytes ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachmentBytes,\n maxAttachments:\n document.requestLimits?.maxAttachments ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachments,\n maxRequestBytes:\n document.requestLimits?.maxRequestBytes ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxRequestBytes,\n maxTextPartChars:\n document.requestLimits?.maxTextPartChars ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTextPartChars,\n maxTotalAttachmentBytes:\n document.requestLimits?.maxTotalAttachmentBytes ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTotalAttachmentBytes,\n },\n execution: {\n firstResponseTimeoutMs:\n document.execution?.firstResponseTimeoutMs ?? DEFAULT_FIRST_RESPONSE_TIMEOUT_MS,\n idleTimeoutMs: document.execution?.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS,\n maxConcurrentRequests: document.execution?.maxConcurrentRequests ?? 4,\n maxDurationMs: document.execution?.maxDurationMs ?? DEFAULT_MAX_DURATION_MS,\n maxSteps: Math.min(configuredMaxSteps, HARD_MAX_STEPS),\n providerOptions: configuredModel(defaultModelId).providerOptions,\n sendReasoning,\n },\n observationalMemory: memoryEnabled\n ? createSurveyAssistantObservationalMemoryOptions({\n model: memoryModelConfig,\n temporalMarkers: document.memory?.temporalMarkers ?? false,\n observation: {\n messageTokens:\n document.memory?.messageTokens ??\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.messageTokens,\n bufferOnIdle: document.memory?.bufferOnIdle ?? false,\n observeAttachments: false,\n },\n reflection: {\n observationTokens:\n document.memory?.observationTokens ??\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.observationTokens,\n },\n })\n : false,\n };\n};\n\nexport const parseSurveyAssistantEnvironment = (\n env: Environment,\n {\n defaultLmStudioModel,\n defaultMistralModel = \"mistral-medium-latest\",\n defaultOpenAIModel = \"gpt-5.4-nano\",\n defaultProvider = \"openai\",\n requireExperimentalIdentityOptIn = false,\n requireStorage = true,\n }: ParseSurveyAssistantEnvironmentOptions = {},\n): SurveyAssistantRuntimeConfig => {\n const provider = parseProvider(env, defaultProvider);\n const modelIdOptions = { allowNestedId: provider === \"lmstudio\" };\n const configuredModelId = getOptionalSameProviderModelId(\n env,\n \"SURVEY_ASSISTANT_MODEL\",\n modelIdOptions,\n );\n if (provider === \"lmstudio\" && !configuredModelId && !defaultLmStudioModel) {\n throw new Error(\n \"SURVEY_ASSISTANT_MODEL must be configured when SURVEY_ASSISTANT_PROVIDER is lmstudio.\",\n );\n }\n const defaultModelId =\n configuredModelId ??\n getSameProviderModelId(\n provider === \"lmstudio\"\n ? defaultLmStudioModel!\n : provider === \"mistral\"\n ? defaultMistralModel\n : defaultOpenAIModel,\n provider === \"lmstudio\"\n ? \"defaultLmStudioModel\"\n : provider === \"mistral\"\n ? \"defaultMistralModel\"\n : \"defaultOpenAIModel\",\n modelIdOptions,\n );\n const configuredModelIds = getCommaSeparatedValues(env, \"SURVEY_ASSISTANT_MODELS\").map(\n (modelId) => getSameProviderModelId(modelId, \"SURVEY_ASSISTANT_MODELS\", modelIdOptions),\n );\n const modelIds = [\n ...new Set(\n configuredModelIds.includes(defaultModelId)\n ? configuredModelIds\n : [defaultModelId, ...configuredModelIds],\n ),\n ];\n const taskModelId = getOptionalSameProviderModelId(\n env,\n \"SURVEY_ASSISTANT_TASK_MODEL\",\n modelIdOptions,\n );\n const sendReasoning = getBoolean(env, \"SURVEY_ASSISTANT_SEND_REASONING\", true);\n const providerOptionsKey = resolveSurveyAssistantProviderOptionsKey(provider);\n const providerReasoningEffort = getValue(\n env,\n `SURVEY_ASSISTANT_${providerOptionsKey.toUpperCase()}_REASONING_EFFORT`,\n );\n const reasoningEffort =\n providerReasoningEffort ??\n getValue(env, \"SURVEY_ASSISTANT_REASONING_EFFORT\") ??\n (provider === \"openai\" || provider === \"azure-openai\" ? \"low\" : \"none\");\n const promptCacheRetention = getEnum(\n env,\n provider === \"azure-openai\"\n ? \"SURVEY_ASSISTANT_AZURE_PROMPT_CACHE_RETENTION\"\n : \"SURVEY_ASSISTANT_PROMPT_CACHE_RETENTION\",\n [\"in_memory\", \"24h\"] as const,\n );\n const serviceTier = getEnum(env, \"SURVEY_ASSISTANT_OPENAI_SERVICE_TIER\", [\n \"auto\",\n \"flex\",\n \"priority\",\n \"default\",\n ] as const);\n const textVerbosity = getEnum(env, \"SURVEY_ASSISTANT_OPENAI_TEXT_VERBOSITY\", [\n \"low\",\n \"medium\",\n \"high\",\n ] as const);\n const reasoningSummaryValue = getEnum(env, \"SURVEY_ASSISTANT_OPENAI_REASONING_SUMMARY\", [\n \"auto\",\n \"concise\",\n \"detailed\",\n \"off\",\n \"none\",\n ] as const);\n const reasoningSummary =\n reasoningSummaryValue === \"off\" || reasoningSummaryValue === \"none\"\n ? undefined\n : (reasoningSummaryValue ?? \"detailed\");\n const resolvedReasoningEffort =\n reasoningEffort === \"default\" || reasoningEffort === \"provider-default\"\n ? undefined\n : reasoningEffort;\n const providerOptions: AgentExecutionOptions[\"providerOptions\"] =\n provider === \"lmstudio\"\n ? undefined\n : {\n [providerOptionsKey]: {\n parallelToolCalls: false,\n ...(resolvedReasoningEffort ? { reasoningEffort: resolvedReasoningEffort } : {}),\n ...(provider === \"openai\" || provider === \"azure-openai\"\n ? {\n promptCacheKey:\n getValue(env, \"SURVEY_ASSISTANT_PROMPT_CACHE_KEY\") ??\n \"survey-assistant-chat-v21\",\n ...(promptCacheRetention ? { promptCacheRetention } : {}),\n ...(sendReasoning && reasoningSummary ? { reasoningSummary } : {}),\n ...(provider === \"openai\" && serviceTier ? { serviceTier } : {}),\n ...(textVerbosity ? { textVerbosity } : {}),\n }\n : {}),\n },\n };\n const azure: SurveyAssistantAzureConfig | undefined =\n provider === \"azure-openai\"\n ? {\n resourceName: getValue(env, \"AZURE_RESOURCE_NAME\"),\n apiKey: getValue(env, \"AZURE_API_KEY\"),\n apiVersion: getEnum(env, \"SURVEY_ASSISTANT_AZURE_API_VERSION\", [\"v1\", \"preview\"]) ?? \"v1\",\n discoverModels: getBoolean(env, \"SURVEY_ASSISTANT_AZURE_DISCOVER_MODELS\", false),\n management: parseAzureManagement(env),\n }\n : undefined;\n const lmstudio: SurveyAssistantLmStudioConfig | undefined =\n provider === \"lmstudio\"\n ? {\n baseUrl:\n getValue(env, \"SURVEY_ASSISTANT_LMSTUDIO_BASE_URL\") ?? \"http://127.0.0.1:1234/v1\",\n apiKey: getValue(env, \"SURVEY_ASSISTANT_LMSTUDIO_API_KEY\"),\n }\n : undefined;\n const providerApiKey =\n provider === \"openai\"\n ? getValue(env, \"OPENAI_API_KEY\")\n : provider === \"mistral\"\n ? getValue(env, \"MISTRAL_API_KEY\")\n : provider === \"lmstudio\"\n ? getValue(env, \"SURVEY_ASSISTANT_LMSTUDIO_API_KEY\")\n : getValue(env, \"AZURE_API_KEY\");\n const memoryModelId =\n getOptionalSameProviderModelId(env, \"SURVEY_ASSISTANT_MEMORY_MODEL\", modelIdOptions) ??\n defaultModelId;\n const memoryModel =\n provider === \"lmstudio\"\n ? {\n providerId: \"lmstudio\",\n modelId: memoryModelId,\n url: lmstudio!.baseUrl,\n ...(providerApiKey ? { apiKey: providerApiKey } : {}),\n }\n : provider === \"azure-openai\"\n ? `${provider}/${memoryModelId}`\n : `${provider}/${memoryModelId}`;\n const observationalMemory = getBoolean(env, \"SURVEY_ASSISTANT_MEMORY_ENABLED\", true)\n ? createSurveyAssistantObservationalMemoryOptions({\n model: memoryModel,\n temporalMarkers: getBoolean(env, \"SURVEY_ASSISTANT_MEMORY_TEMPORAL_MARKERS\", false),\n observation: {\n messageTokens: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MEMORY_MESSAGE_TOKENS\",\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.messageTokens,\n ),\n bufferOnIdle: getBoolean(env, \"SURVEY_ASSISTANT_MEMORY_BUFFER_ON_IDLE\", false),\n observeAttachments: false,\n },\n reflection: {\n observationTokens: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MEMORY_OBSERVATION_TOKENS\",\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.observationTokens,\n ),\n },\n })\n : false;\n const configuredMaxSteps = getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_STEPS\",\n DEFAULT_MAX_STEPS,\n );\n const enabled = resolveConfiguredEnabled(env, undefined, requireExperimentalIdentityOptIn);\n const allModelIds = [\n ...new Set([...modelIds, ...(taskModelId ? [taskModelId] : []), memoryModelId]),\n ];\n\n return {\n provider,\n defaultModelId,\n memoryModelId,\n modelIds,\n models: allModelIds.map((id) => ({\n id,\n label: id,\n upstreamModelId: id,\n providerOptions,\n })),\n modelCatalogTtlMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MODEL_CATALOG_TTL_MS\",\n DEFAULT_CATALOG_TTL_MS,\n ),\n azure,\n lmstudio,\n enabled,\n readinessError: getReadinessError({\n azure,\n env,\n modelWasConfigured: Boolean(configuredModelId),\n provider,\n requireStorage,\n }),\n requestLimits: {\n maxAttachmentBytes: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachmentBytes,\n ),\n maxAttachments: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_ATTACHMENTS\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachments,\n ),\n maxRequestBytes: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_REQUEST_BYTES\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxRequestBytes,\n ),\n maxTextPartChars: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTextPartChars,\n ),\n maxTotalAttachmentBytes: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTotalAttachmentBytes,\n ),\n },\n execution: {\n firstResponseTimeoutMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_FIRST_RESPONSE_TIMEOUT_MS\",\n DEFAULT_FIRST_RESPONSE_TIMEOUT_MS,\n ),\n idleTimeoutMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_IDLE_TIMEOUT_MS\",\n DEFAULT_IDLE_TIMEOUT_MS,\n ),\n maxConcurrentRequests: getPositiveNumber(env, \"SURVEY_ASSISTANT_MAX_CONCURRENT_REQUESTS\", 4),\n maxDurationMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_DURATION_MS\",\n DEFAULT_MAX_DURATION_MS,\n ),\n maxSteps: Math.min(configuredMaxSteps, HARD_MAX_STEPS),\n providerOptions,\n sendReasoning,\n },\n observationalMemory,\n taskModelId,\n };\n};\n","import type { AgentExecutionOptions } from \"@mastra/core/agent\";\nimport { AzureOpenAIGateway, type MastraModelGatewayInterface } from \"@mastra/core/llm\";\nimport type { Mastra } from \"@mastra/core/mastra\";\nimport type { RequestContext } from \"@mastra/core/request-context\";\nimport type { SurveyAssistantModelCatalog } from \"../protocol\";\nimport { createSurveyAssistantAgent, type CreateSurveyAssistantAgentOptions } from \"./agent\";\nimport { SURVEY_ASSISTANT_AGENT_ID, SURVEY_ASSISTANT_TASK_AGENT_ID } from \"./constants\";\nimport {\n createSurveyAssistantChatHandler,\n SurveyAssistantAuthorizationError,\n type SurveyAssistantAuthorize,\n type SurveyAssistantChatHandlerOptions,\n type SurveyAssistantResolveModel,\n} from \"./handler\";\nimport { createMastraMemoryThreadRepository } from \"./memory-thread-repository\";\nimport type {\n SurveyAssistantModelSelection,\n SurveyAssistantRequestContext,\n} from \"./request-context\";\nimport type { SurveyAssistantCapabilitySet } from \"../engine\";\nimport type { SurveyAssistantRuntimeConfig } from \"./runtime-config\";\nimport {\n createSurveyAssistantTaskAgent,\n createSurveyAssistantTaskHandler,\n type CreateSurveyAssistantTaskHandlerOptions,\n type SurveyAssistantTaskModelResolutionInput,\n} from \"./tasks\";\nimport type { SurveyAssistantThreadDocumentRepository } from \"./thread-documents\";\nimport {\n createSurveyAssistantThreadHandlers,\n type CreateSurveyAssistantThreadHandlersOptions,\n} from \"./thread-handlers\";\nimport { SURVEY_ASSISTANT_TOOL_IDS } from \"./tools\";\n\nexport {\n parseSurveyAssistantEnvironment,\n parseSurveyAssistantConfigurationDocument,\n resolveSurveyAssistantProviderOptionsKey,\n surveyAssistantConfigurationDocumentSchema,\n type ParseSurveyAssistantEnvironmentOptions,\n type SurveyAssistantAzureConfig,\n type SurveyAssistantConfigurationDocument,\n type SurveyAssistantConfiguredModel,\n type SurveyAssistantExecutionConfig,\n type SurveyAssistantLmStudioConfig,\n type SurveyAssistantModelRole,\n type SurveyAssistantProvider,\n type SurveyAssistantProviderOptionsKey,\n type SurveyAssistantRuntimeConfig,\n} from \"./runtime-config\";\n\nexport interface SurveyAssistantModelRouter {\n defaultModel: SurveyAssistantModelSelection[\"model\"];\n gateways?: Record<string, MastraModelGatewayInterface>;\n getCatalog(options?: { refresh?: boolean }): Promise<SurveyAssistantModelCatalog>;\n memoryModel: SurveyAssistantModelSelection[\"model\"];\n providerName: string;\n providerOptions?: AgentExecutionOptions[\"providerOptions\"];\n resolveModel: SurveyAssistantResolveModel;\n resolveTaskModel(\n input: SurveyAssistantTaskModelResolutionInput,\n ): ReturnType<SurveyAssistantResolveModel>;\n taskModel?: SurveyAssistantModelSelection[\"model\"];\n}\n\nexport const createSurveyAssistantModelRouter = (\n config: SurveyAssistantRuntimeConfig,\n): SurveyAssistantModelRouter => {\n const configuredModels = new Map(config.models?.map((model) => [model.id, model]));\n const getConfiguredModel = (modelId: string) =>\n configuredModels.get(modelId) ?? {\n id: modelId,\n label: modelId,\n upstreamModelId: modelId,\n providerOptions: config.execution.providerOptions,\n };\n const toProviderModel = (\n modelId: string,\n configName: string,\n ): SurveyAssistantModelSelection[\"model\"] => {\n const configuredModel = getConfiguredModel(modelId);\n const upstreamModelId = configuredModel.upstreamModelId;\n if (config.provider === \"lmstudio\") {\n if (!config.lmstudio) {\n throw new Error(\"LM Studio configuration is missing for the lmstudio provider.\");\n }\n return {\n providerId: \"lmstudio\",\n modelId: upstreamModelId,\n url: config.lmstudio.baseUrl,\n ...(config.lmstudio.apiKey ? { apiKey: config.lmstudio.apiKey } : {}),\n };\n }\n if (upstreamModelId.includes(\"/\")) {\n throw new Error(\n `${configName} must be a model or deployment id without a provider prefix. ` +\n \"All survey assistant models use the configured provider.\",\n );\n }\n const id = `${config.provider}/${upstreamModelId}` as `${string}/${string}`;\n return config.providerApiKey && config.provider !== \"azure-openai\"\n ? { id, apiKey: config.providerApiKey }\n : id;\n };\n const defaultModel = toProviderModel(config.defaultModelId, \"defaultModelId\");\n const chatModelIds = config.modelIds.map((modelId) => {\n toProviderModel(modelId, \"modelIds\");\n return modelId;\n });\n if (!chatModelIds.includes(config.defaultModelId)) {\n throw new Error(\"modelIds must include defaultModelId.\");\n }\n const taskModel = config.taskModelId\n ? toProviderModel(config.taskModelId, \"taskModelId\")\n : undefined;\n const memoryModel = toProviderModel(config.memoryModelId, \"memoryModelId\");\n if (config.observationalMemory !== false) {\n const configuredMemoryModel = toProviderModel(config.memoryModelId, \"memoryModelId\");\n if (\n JSON.stringify(config.observationalMemory.model) !== JSON.stringify(configuredMemoryModel) ||\n config.observationalMemory.observation?.model !== undefined ||\n config.observationalMemory.reflection?.model !== undefined\n ) {\n throw new Error(\n \"The standard runtime requires observationalMemory to use memoryModelId \" +\n \"for both observation and reflection. Use the low-level Agent factory \" +\n \"for custom memory model routing.\",\n );\n }\n }\n const deploymentIds = [\n ...new Set([\n ...chatModelIds.map((id) => getConfiguredModel(id).upstreamModelId),\n ...(config.taskModelId ? [getConfiguredModel(config.taskModelId).upstreamModelId] : []),\n getConfiguredModel(config.memoryModelId).upstreamModelId,\n ]),\n ];\n const azureGateway = config.azure\n ? new AzureOpenAIGateway({\n resourceName: config.azure.resourceName ?? \"\",\n apiKey: config.azure.apiKey,\n apiVersion: config.azure.apiVersion,\n useResponsesAPI: true,\n ...(config.azure.management\n ? { management: config.azure.management }\n : { deployments: deploymentIds }),\n })\n : undefined;\n let cachedCatalog: { expiresAt: number; value: SurveyAssistantModelCatalog } | undefined;\n\n const getCatalog = async ({ refresh = false }: { refresh?: boolean } = {}) => {\n if (!refresh && cachedCatalog && cachedCatalog.expiresAt > Date.now()) {\n return cachedCatalog.value;\n }\n let ids = chatModelIds;\n if (azureGateway && config.azure?.discoverModels) {\n try {\n const providers = await azureGateway.fetchProviders();\n const configuredUpstreamIds = new Set(\n chatModelIds.map((id) => getConfiguredModel(id).upstreamModelId),\n );\n const discoveredIds = (providers[\"azure-openai\"]?.models ?? []).filter(\n (id) => !configuredUpstreamIds.has(id),\n );\n ids = [...new Set([...chatModelIds, ...discoveredIds])];\n } catch {\n // Keep the explicit catalog available when Azure management discovery is temporarily down.\n }\n }\n const value = {\n defaultModelId: config.defaultModelId,\n models: ids.map((id) => {\n const configuredModel = getConfiguredModel(id);\n return { id, label: configuredModel.label };\n }),\n } satisfies SurveyAssistantModelCatalog;\n cachedCatalog = { expiresAt: Date.now() + config.modelCatalogTtlMs, value };\n return value;\n };\n const resolveRequestedModel = async (requestedModelId?: string) => {\n const catalog = await getCatalog();\n const id = requestedModelId ?? catalog.defaultModelId;\n return catalog.models.some((model) => model.id === id)\n ? {\n id,\n model: toProviderModel(id, \"requestedModelId\"),\n providerName: config.provider,\n ...(getConfiguredModel(id).providerOptions\n ? { providerOptions: getConfiguredModel(id).providerOptions }\n : {}),\n }\n : null;\n };\n\n return {\n defaultModel,\n gateways: azureGateway\n ? {\n // Mastra 1.47 narrows one method's environment type in the concrete class.\n \"azure-openai\": azureGateway as unknown as MastraModelGatewayInterface,\n }\n : undefined,\n getCatalog,\n memoryModel,\n providerName: config.provider,\n providerOptions: config.execution.providerOptions,\n resolveModel: async ({ requestedModelId }) => resolveRequestedModel(requestedModelId),\n resolveTaskModel: async ({ requestedModelId }) =>\n config.taskModelId\n ? {\n id: config.taskModelId,\n model: taskModel!,\n providerName: config.provider,\n ...(getConfiguredModel(config.taskModelId).providerOptions\n ? { providerOptions: getConfiguredModel(config.taskModelId).providerOptions }\n : {}),\n }\n : resolveRequestedModel(requestedModelId),\n taskModel,\n };\n};\n\nexport interface SurveyAssistantRuntimeComponents {\n agents: Record<\n string,\n | ReturnType<typeof createSurveyAssistantAgent>\n | ReturnType<typeof createSurveyAssistantTaskAgent>\n >;\n gateways?: Record<string, MastraModelGatewayInterface>;\n modelRouter: SurveyAssistantModelRouter;\n}\n\nexport const createSurveyAssistantRuntimeComponents = (\n config: SurveyAssistantRuntimeConfig,\n): SurveyAssistantRuntimeComponents => {\n const modelRouter = createSurveyAssistantModelRouter(config);\n const chatModel: CreateSurveyAssistantAgentOptions[\"model\"] = ({\n requestContext,\n }: {\n requestContext: RequestContext<SurveyAssistantRequestContext>;\n }) => requestContext.get(\"modelSelection\")?.model ?? modelRouter.defaultModel;\n const taskModel = modelRouter.taskModel ?? chatModel;\n const observationalMemory =\n config.provider === \"lmstudio\" && config.observationalMemory !== false\n ? { ...config.observationalMemory, model: modelRouter.memoryModel }\n : config.observationalMemory;\n return {\n agents: {\n [SURVEY_ASSISTANT_AGENT_ID]: createSurveyAssistantAgent({\n model: chatModel,\n observationalMemory,\n }),\n [SURVEY_ASSISTANT_TASK_AGENT_ID]: createSurveyAssistantTaskAgent({ model: taskModel }),\n },\n gateways: modelRouter.gateways,\n modelRouter,\n };\n};\n\ntype ChatHandlerOverrides = Partial<\n Omit<\n SurveyAssistantChatHandlerOptions,\n \"authorize\" | \"mastra\" | \"providerName\" | \"providerOptions\" | \"resolveModel\"\n >\n>;\ntype TaskHandlerOverrides = Partial<\n Omit<\n CreateSurveyAssistantTaskHandlerOptions,\n \"agent\" | \"authorize\" | \"providerOptions\" | \"resolveModel\"\n >\n>;\n\nexport interface CreateSurveyAssistantRuntimeHandlersOptions {\n authorize: {\n chat: SurveyAssistantAuthorize;\n model?: (request: Request) => unknown | Promise<unknown>;\n task: CreateSurveyAssistantTaskHandlerOptions[\"authorize\"];\n thread: CreateSurveyAssistantThreadHandlersOptions[\"authorize\"];\n };\n chat?: ChatHandlerOverrides;\n config: SurveyAssistantRuntimeConfig;\n mastra: Mastra | (() => Mastra | Promise<Mastra>);\n modelRouter: SurveyAssistantModelRouter;\n task?: TaskHandlerOverrides;\n threadDocuments?: SurveyAssistantThreadDocumentRepository;\n}\n\nexport type CreateConfiguredSurveyAssistantRuntimeHandlersOptions = Omit<\n CreateSurveyAssistantRuntimeHandlersOptions,\n \"config\" | \"modelRouter\"\n>;\n\nconst resolveMastra = async (mastra: Mastra | (() => Mastra | Promise<Mastra>)) =>\n typeof mastra === \"function\" ? mastra() : mastra;\n\nexport const createSurveyAssistantRuntimeHandlers = ({\n authorize,\n chat = {},\n config,\n mastra,\n modelRouter,\n task = {},\n threadDocuments,\n}: CreateSurveyAssistantRuntimeHandlersOptions) => {\n const isEnabled = chat.isEnabled ?? (() => config.enabled);\n const getReadinessError = chat.getReadinessError ?? (() => config.readinessError);\n const chatHandler = createSurveyAssistantChatHandler({\n ...chat,\n mastra,\n agentId: SURVEY_ASSISTANT_AGENT_ID,\n activeTools:\n chat.activeTools ??\n (config.observationalMemory === false\n ? SURVEY_ASSISTANT_TOOL_IDS\n : [...SURVEY_ASSISTANT_TOOL_IDS, \"recall\"]),\n authorize: authorize.chat,\n firstResponseTimeoutMs: chat.firstResponseTimeoutMs ?? config.execution.firstResponseTimeoutMs,\n getReadinessError,\n isEnabled,\n idleTimeoutMs: chat.idleTimeoutMs ?? config.execution.idleTimeoutMs,\n maxConcurrentRequests: chat.maxConcurrentRequests ?? config.execution.maxConcurrentRequests,\n maxDurationMs: chat.maxDurationMs ?? config.execution.maxDurationMs,\n maxSteps: chat.maxSteps ?? config.execution.maxSteps,\n providerName: modelRouter.providerName,\n providerOptions: modelRouter.providerOptions,\n requestLimits: { ...config.requestLimits, ...chat.requestLimits },\n resolveModel: modelRouter.resolveModel,\n sendReasoning: chat.sendReasoning ?? config.execution.sendReasoning,\n threadDocuments,\n });\n const taskHandler = createSurveyAssistantTaskHandler({\n ...task,\n agent: async () => (await resolveMastra(mastra)).getAgent(SURVEY_ASSISTANT_TASK_AGENT_ID),\n authorize: authorize.task,\n getReadinessError: task.getReadinessError ?? getReadinessError,\n isEnabled: task.isEnabled ?? isEnabled,\n maxConcurrentRequests: task.maxConcurrentRequests ?? config.execution.maxConcurrentRequests,\n maxDurationMs: task.maxDurationMs ?? config.execution.maxDurationMs,\n providerOptions: modelRouter.providerOptions,\n resolveModel: modelRouter.resolveTaskModel,\n });\n const getMemory = async () => {\n const memory = await (\n await resolveMastra(mastra)\n )\n .getAgent(SURVEY_ASSISTANT_AGENT_ID)\n .getMemory();\n if (!memory) throw new Error(\"Survey assistant memory is not configured.\");\n return memory;\n };\n const threads = createSurveyAssistantThreadHandlers({\n authorize: async (request) => {\n if (!config.enabled) {\n throw new SurveyAssistantAuthorizationError(\"Survey assistant is disabled.\", 404);\n }\n return authorize.thread(request);\n },\n repository: createMastraMemoryThreadRepository({ getMemory, threadDocuments }),\n });\n const models = async (request: Request) => {\n if (!config.enabled) {\n return Response.json(\n { code: \"authorization_failed\", error: \"Survey assistant is disabled.\" },\n { status: 404 },\n );\n }\n try {\n if (authorize.model) {\n await authorize.model(request);\n } else {\n await authorize.task({ request });\n }\n return Response.json(await modelRouter.getCatalog());\n } catch (error) {\n const status =\n typeof error === \"object\" &&\n error !== null &&\n \"status\" in error &&\n typeof error.status === \"number\"\n ? error.status\n : 403;\n return Response.json(\n {\n code: \"authorization_failed\",\n error: \"The survey assistant request is not authorized.\",\n },\n { status },\n );\n }\n };\n\n return {\n chat: chatHandler,\n models,\n task: taskHandler,\n threads,\n };\n};\n\nexport interface SurveyAssistantRuntime extends SurveyAssistantRuntimeComponents {\n config: SurveyAssistantRuntimeConfig;\n createHandlers(\n options: CreateConfiguredSurveyAssistantRuntimeHandlersOptions,\n ): ReturnType<typeof createSurveyAssistantRuntimeHandlers>;\n}\n\nexport interface CreateSurveyAssistantRuntimeOptions {\n /** Trusted server-side capabilities for custom registry item types. */\n trustedCapabilities?: SurveyAssistantCapabilitySet;\n}\n\n/**\n * Creates the reusable assistant runtime without hiding Mastra from the host.\n * Register `agents` and `gateways` in the host's standard Mastra instance, then\n * call `createHandlers` with that instance and host authorization policy.\n */\nexport const createSurveyAssistantRuntime = (\n config: SurveyAssistantRuntimeConfig,\n runtimeOptions: CreateSurveyAssistantRuntimeOptions = {},\n): SurveyAssistantRuntime => {\n const components = createSurveyAssistantRuntimeComponents(config);\n return {\n ...components,\n config,\n createHandlers: (handlerOptions) =>\n createSurveyAssistantRuntimeHandlers({\n ...handlerOptions,\n chat: {\n ...handlerOptions.chat,\n trustedCapabilities:\n handlerOptions.chat?.trustedCapabilities ?? runtimeOptions.trustedCapabilities,\n },\n config,\n modelRouter: components.modelRouter,\n }),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server-runtime.mjs","names":[],"sources":["../src/server/runtime-config.ts","../src/server/runtime.ts"],"sourcesContent":["import type { AgentExecutionOptions } from \"@mastra/core/agent\";\nimport type { AzureOpenAIGatewayConfig } from \"@mastra/core/llm\";\nimport { z } from \"zod\";\nimport {\n createSurveyAssistantObservationalMemoryOptions,\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS,\n type SurveyAssistantObservationalMemoryOptions,\n} from \"./agent\";\nimport {\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS,\n type SurveyAssistantRequestLimits,\n} from \"./request-guardrails\";\n\nexport type SurveyAssistantProvider = \"azure-openai\" | \"lmstudio\" | \"mistral\" | \"openai\";\nexport type SurveyAssistantProviderOptionsKey = \"azure\" | \"lmstudio\" | \"mistral\" | \"openai\";\n\nexport type SurveyAssistantModelRole = \"chat-default\" | \"chat-picker\" | \"memory\" | \"task-default\";\n\nexport interface SurveyAssistantConfiguredModel {\n id: string;\n label: string;\n upstreamModelId: string;\n providerOptions?: AgentExecutionOptions[\"providerOptions\"];\n}\n\nexport interface SurveyAssistantAzureConfig {\n apiKey?: string;\n apiVersion: \"preview\" | \"v1\";\n discoverModels: boolean;\n management?: AzureOpenAIGatewayConfig[\"management\"];\n resourceName?: string;\n}\n\nexport interface SurveyAssistantLmStudioConfig {\n apiKey?: string;\n baseUrl: string;\n}\n\nexport interface SurveyAssistantExecutionConfig {\n firstResponseTimeoutMs: number;\n idleTimeoutMs: number;\n maxConcurrentRequests: number;\n /** Absolute execution ceiling. Active streams still stop when this duration is reached. */\n maxDurationMs: number;\n maxSteps: number;\n providerOptions?: AgentExecutionOptions[\"providerOptions\"];\n sendReasoning: boolean;\n}\n\nexport interface SurveyAssistantRuntimeConfig {\n azure?: SurveyAssistantAzureConfig;\n lmstudio?: SurveyAssistantLmStudioConfig;\n /** Default chat model and fallback for chat requests without a selection. */\n defaultModelId: string;\n enabled: boolean;\n /** Fixed same-provider model shared by memory observation and reflection. */\n memoryModelId: string;\n modelCatalogTtlMs: number;\n /** Every configured model for the active provider, including internal-only roles. */\n models?: SurveyAssistantConfiguredModel[];\n modelIds: string[];\n observationalMemory: SurveyAssistantObservationalMemoryOptions | false;\n provider: SurveyAssistantProvider;\n /** Resolved server-only provider credential. Never expose it through the model catalog. */\n providerApiKey?: string;\n requestLimits: Pick<\n SurveyAssistantRequestLimits,\n | \"maxAttachmentBytes\"\n | \"maxAttachments\"\n | \"maxRequestBytes\"\n | \"maxTextPartChars\"\n | \"maxTotalAttachmentBytes\"\n >;\n readinessError: string | null;\n /**\n * Fixed model for one-shot tasks. When omitted, tasks follow the\n * server-authorized chat model selection.\n */\n taskModelId?: string;\n execution: SurveyAssistantExecutionConfig;\n}\n\nexport interface ParseSurveyAssistantEnvironmentOptions {\n defaultLmStudioModel?: string;\n defaultMistralModel?: string;\n defaultOpenAIModel?: string;\n defaultProvider?: SurveyAssistantProvider;\n /**\n * Adds an explicit production rollout gate to assistant enablement. When\n * true, an otherwise enabled assistant remains disabled outside development\n * unless `SURVEY_ASSISTANT_ALLOW_EXPERIMENTAL_IDENTITY=true` is also set.\n *\n * Despite the legacy environment-variable name, this does not select an\n * identity authority or replace the host's authorization callback. Most\n * hosts with authenticated identity integration should omit it unless they\n * deliberately want the additional rollout gate.\n *\n * @default false\n */\n requireExperimentalIdentityOptIn?: boolean;\n requireStorage?: boolean;\n}\n\ntype Environment = Record<string, string | undefined>;\n\nconst ENVIRONMENT_VARIABLE_NAME = /^[A-Z_][A-Z0-9_]*$/;\n\nconst modelRoleSchema = z.enum([\"chat-default\", \"chat-picker\", \"memory\", \"task-default\"]);\n\nconst providerModelOptionsSchema = z\n .object({\n parallelToolCalls: z.boolean().optional(),\n promptCacheKey: z.string().trim().min(1).optional(),\n promptCacheRetention: z.enum([\"in_memory\", \"24h\"]).optional(),\n reasoningEffort: z.string().trim().min(1).optional(),\n reasoningSummary: z.enum([\"auto\", \"concise\", \"detailed\", \"off\", \"none\"]).optional(),\n serviceTier: z.enum([\"auto\", \"flex\", \"priority\", \"default\"]).optional(),\n textVerbosity: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n })\n .strict();\n\nconst configuredModelSchema = z\n .object({\n id: z.string().trim().min(1).max(240),\n label: z.string().trim().min(1).max(240).optional(),\n upstreamModel: z.string().trim().min(1).max(240).optional(),\n roles: z.array(modelRoleSchema).min(1),\n options: providerModelOptionsSchema.optional(),\n })\n .strict()\n .superRefine(({ roles }, context) => {\n if (new Set(roles).size !== roles.length) {\n context.addIssue({ code: \"custom\", message: \"Model roles must be unique.\" });\n }\n });\n\nconst providerBaseShape = {\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME).optional(),\n models: z.array(configuredModelSchema).min(1),\n options: providerModelOptionsSchema.optional(),\n};\n\nconst providerSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"openai\"),\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n })\n .strict(),\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"mistral\"),\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n })\n .strict(),\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"lmstudio\"),\n baseUrl: z.string().url().default(\"http://127.0.0.1:1234/v1\"),\n apiKeyOptional: z.boolean().default(true),\n })\n .strict(),\n z\n .object({\n ...providerBaseShape,\n type: z.literal(\"azure-openai\"),\n apiKeyEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n apiVersion: z.enum([\"v1\", \"preview\"]).default(\"v1\"),\n discoverModels: z.boolean().default(false),\n resourceName: z.string().trim().min(1),\n management: z\n .object({\n tenantId: z.string().trim().min(1),\n clientId: z.string().trim().min(1),\n clientSecretEnv: z.string().regex(ENVIRONMENT_VARIABLE_NAME),\n subscriptionId: z.string().trim().min(1),\n resourceGroup: z.string().trim().min(1),\n })\n .strict()\n .optional(),\n })\n .strict(),\n]);\n\nexport const surveyAssistantConfigurationDocumentSchema = z\n .object({\n version: z.literal(1),\n activeProvider: z.string().trim().min(1),\n enabled: z.boolean().optional(),\n providers: z.record(z.string().trim().min(1), providerSchema),\n execution: z\n .object({\n firstResponseTimeoutMs: z.number().int().positive().optional(),\n idleTimeoutMs: z.number().int().positive().optional(),\n maxConcurrentRequests: z.number().int().positive().optional(),\n maxDurationMs: z.number().int().positive().optional(),\n maxSteps: z.number().int().positive().optional(),\n sendReasoning: z.boolean().optional(),\n })\n .strict()\n .optional(),\n memory: z\n .object({\n enabled: z.boolean().optional(),\n bufferOnIdle: z.boolean().optional(),\n messageTokens: z.number().int().positive().optional(),\n observationTokens: z.number().int().positive().optional(),\n temporalMarkers: z.boolean().optional(),\n })\n .strict()\n .optional(),\n modelCatalogTtlMs: z.number().int().positive().optional(),\n requestLimits: z\n .object({\n maxAttachmentBytes: z.number().int().positive().optional(),\n maxAttachments: z.number().int().positive().optional(),\n maxRequestBytes: z.number().int().positive().optional(),\n maxTextPartChars: z.number().int().positive().optional(),\n maxTotalAttachmentBytes: z.number().int().positive().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type SurveyAssistantConfigurationDocument = z.infer<\n typeof surveyAssistantConfigurationDocumentSchema\n>;\n\nconst DEFAULT_MAX_STEPS = 48;\nconst HARD_MAX_STEPS = 64;\nconst DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = 15 * 60 * 1_000;\nconst DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1_000;\nconst DEFAULT_MAX_DURATION_MS = 60 * 60 * 1_000;\nconst DEFAULT_CATALOG_TTL_MS = 5 * 60 * 1_000;\n\ntype ProviderModelOptions = z.infer<typeof providerModelOptionsSchema>;\n\nconst getValue = (env: Environment, name: string) => {\n const value = env[name]?.trim();\n return value || undefined;\n};\n\nconst getBoolean = (env: Environment, name: string, fallback: boolean) => {\n const value = getValue(env, name)?.toLowerCase();\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n if (value !== undefined) {\n throw new Error(`${name} must be \"true\" or \"false\".`);\n }\n return fallback;\n};\n\nconst getPositiveNumber = (env: Environment, name: string, fallback: number) => {\n const configured = getValue(env, name);\n if (configured === undefined) return fallback;\n const value = Number(configured);\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new Error(`${name} must be a positive integer.`);\n }\n return value;\n};\n\nconst getEnum = <TValue extends string>(\n env: Environment,\n name: string,\n values: readonly TValue[],\n) => {\n const value = getValue(env, name);\n if (!value) return undefined;\n if (!(values as readonly string[]).includes(value)) {\n throw new Error(`${name} must be one of: ${values.join(\", \")}.`);\n }\n return value as TValue;\n};\n\nconst getCommaSeparatedValues = (env: Environment, name: string) => [\n ...new Set(\n (getValue(env, name) ?? \"\")\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean),\n ),\n];\n\nconst getSameProviderModelId = (\n value: string,\n name: string,\n { allowNestedId = false }: { allowNestedId?: boolean } = {},\n) => {\n if (!allowNestedId && value.includes(\"/\")) {\n throw new Error(\n `${name} must be a model or deployment id without a provider prefix. ` +\n \"All survey assistant models use SURVEY_ASSISTANT_PROVIDER.\",\n );\n }\n return value;\n};\n\nconst getOptionalSameProviderModelId = (\n env: Environment,\n name: string,\n options?: { allowNestedId?: boolean },\n) => {\n const value = getValue(env, name);\n return value ? getSameProviderModelId(value, name, options) : undefined;\n};\n\nexport const resolveSurveyAssistantProviderOptionsKey = (\n provider: SurveyAssistantProvider,\n): SurveyAssistantProviderOptionsKey => (provider === \"azure-openai\" ? \"azure\" : provider);\n\nconst createProviderOptions = (\n provider: SurveyAssistantProvider,\n options: ProviderModelOptions | undefined,\n sendReasoning: boolean,\n): AgentExecutionOptions[\"providerOptions\"] => {\n const providerOptionsKey = resolveSurveyAssistantProviderOptionsKey(provider);\n const reasoningSummary =\n options?.reasoningSummary === \"off\" || options?.reasoningSummary === \"none\"\n ? undefined\n : options?.reasoningSummary;\n const reasoningEffort =\n options?.reasoningEffort === \"default\" || options?.reasoningEffort === \"provider-default\"\n ? undefined\n : options?.reasoningEffort;\n const resolved = {\n parallelToolCalls: options?.parallelToolCalls ?? false,\n ...(reasoningEffort ? { reasoningEffort } : {}),\n ...(options?.promptCacheKey ? { promptCacheKey: options.promptCacheKey } : {}),\n ...(options?.promptCacheRetention\n ? { promptCacheRetention: options.promptCacheRetention }\n : {}),\n ...(sendReasoning && reasoningSummary ? { reasoningSummary } : {}),\n ...(options?.serviceTier ? { serviceTier: options.serviceTier } : {}),\n ...(options?.textVerbosity ? { textVerbosity: options.textVerbosity } : {}),\n };\n return { [providerOptionsKey]: resolved } as AgentExecutionOptions[\"providerOptions\"];\n};\n\nconst getConfiguredEnabledOverride = (env: Environment) => {\n const value = getValue(env, \"SURVEY_ASSISTANT_ENABLED\");\n if (value !== undefined && value !== \"true\" && value !== \"false\") {\n throw new Error('SURVEY_ASSISTANT_ENABLED must be \"true\" or \"false\".');\n }\n return value === undefined ? undefined : value === \"true\";\n};\n\nconst isSurveyAssistantExplicitlyDisabled = (input: unknown, env: Environment) => {\n const environmentOverride = getConfiguredEnabledOverride(env);\n if (environmentOverride !== undefined) return !environmentOverride;\n return (\n typeof input === \"object\" && input !== null && \"enabled\" in input && input.enabled === false\n );\n};\n\nconst createDisabledSurveyAssistantRuntimeConfig = (): SurveyAssistantRuntimeConfig => {\n const disabledModelId = \"survey-assistant-disabled\";\n return {\n provider: \"openai\",\n defaultModelId: disabledModelId,\n memoryModelId: disabledModelId,\n modelIds: [disabledModelId],\n models: [\n {\n id: disabledModelId,\n label: \"Survey assistant disabled\",\n upstreamModelId: disabledModelId,\n },\n ],\n modelCatalogTtlMs: DEFAULT_CATALOG_TTL_MS,\n enabled: false,\n readinessError: null,\n requestLimits: { ...SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS },\n execution: {\n firstResponseTimeoutMs: DEFAULT_FIRST_RESPONSE_TIMEOUT_MS,\n idleTimeoutMs: DEFAULT_IDLE_TIMEOUT_MS,\n maxConcurrentRequests: 4,\n maxDurationMs: DEFAULT_MAX_DURATION_MS,\n maxSteps: DEFAULT_MAX_STEPS,\n sendReasoning: false,\n },\n observationalMemory: false,\n };\n};\n\nconst resolveConfiguredEnabled = (\n env: Environment,\n configured: boolean | undefined,\n requireExperimentalIdentityOptIn: boolean,\n) => {\n const environmentOverride = getConfiguredEnabledOverride(env);\n const requested =\n environmentOverride !== undefined\n ? environmentOverride\n : (configured ?? env.NODE_ENV === \"development\");\n return (\n requested &&\n (!requireExperimentalIdentityOptIn ||\n env.NODE_ENV === \"development\" ||\n getBoolean(env, \"SURVEY_ASSISTANT_ALLOW_EXPERIMENTAL_IDENTITY\", false))\n );\n};\n\nconst parseProvider = (\n env: Environment,\n fallback: SurveyAssistantProvider,\n): SurveyAssistantProvider => {\n const value = getValue(env, \"SURVEY_ASSISTANT_PROVIDER\")?.toLowerCase();\n if (value === \"azure\" || value === \"azure-openai\") return \"azure-openai\";\n if (value === \"lmstudio\" || value === \"openai\" || value === \"mistral\") return value;\n if (value) {\n throw new Error(\n \"SURVEY_ASSISTANT_PROVIDER must be one of: openai, mistral, lmstudio, azure-openai.\",\n );\n }\n return fallback;\n};\n\nconst parseAzureManagement = (\n env: Environment,\n): AzureOpenAIGatewayConfig[\"management\"] | undefined => {\n if (!getBoolean(env, \"SURVEY_ASSISTANT_AZURE_DISCOVER_MODELS\", false)) return undefined;\n const management = {\n tenantId: getValue(env, \"AZURE_TENANT_ID\"),\n clientId: getValue(env, \"AZURE_CLIENT_ID\"),\n clientSecret: getValue(env, \"AZURE_CLIENT_SECRET\"),\n subscriptionId: getValue(env, \"AZURE_SUBSCRIPTION_ID\"),\n resourceGroup: getValue(env, \"AZURE_RESOURCE_GROUP\"),\n };\n return Object.values(management).every(Boolean)\n ? (management as AzureOpenAIGatewayConfig[\"management\"])\n : undefined;\n};\n\nconst getReadinessError = ({\n azure,\n env,\n modelWasConfigured,\n provider,\n requireStorage,\n}: {\n azure?: SurveyAssistantAzureConfig;\n env: Environment;\n modelWasConfigured: boolean;\n provider: SurveyAssistantProvider;\n requireStorage: boolean;\n}) => {\n if (\n requireStorage &&\n !getValue(env, \"SURVEY_ASSISTANT_DATABASE_URL\") &&\n !getValue(env, \"DATABASE_URL\")\n ) {\n return \"Survey assistant storage is not configured.\";\n }\n if (provider === \"openai\" && !getValue(env, \"OPENAI_API_KEY\")) {\n return \"The OpenAI API key is not configured for the survey assistant.\";\n }\n if (provider === \"mistral\" && !getValue(env, \"MISTRAL_API_KEY\")) {\n return \"The Mistral API key is not configured for the survey assistant.\";\n }\n if (provider === \"azure-openai\") {\n if (!azure?.resourceName) {\n return \"The Azure OpenAI resource name is not configured for the survey assistant.\";\n }\n if (!azure.apiKey) {\n return \"The Azure OpenAI API key is not configured for the survey assistant.\";\n }\n if (!modelWasConfigured) {\n return \"The Azure OpenAI deployment name is not configured for the survey assistant.\";\n }\n if (azure.discoverModels && !azure.management) {\n return \"Azure deployment discovery requires complete tenant, client, subscription, and resource-group settings.\";\n }\n }\n return null;\n};\n\nexport const parseSurveyAssistantConfigurationDocument = (\n input: unknown,\n env: Environment,\n {\n requireExperimentalIdentityOptIn = false,\n requireStorage = true,\n }: Pick<\n ParseSurveyAssistantEnvironmentOptions,\n \"requireExperimentalIdentityOptIn\" | \"requireStorage\"\n > = {},\n): SurveyAssistantRuntimeConfig => {\n if (isSurveyAssistantExplicitlyDisabled(input, env)) {\n return createDisabledSurveyAssistantRuntimeConfig();\n }\n const document = surveyAssistantConfigurationDocumentSchema.parse(input);\n const activeProvider = document.providers[document.activeProvider];\n if (!activeProvider) {\n throw new Error(`activeProvider references unknown provider \"${document.activeProvider}\".`);\n }\n\n const memoryEnabled = document.memory?.enabled ?? true;\n for (const [providerName, configuredProvider] of Object.entries(document.providers)) {\n const duplicateModelId = configuredProvider.models.find(\n (model, index, models) =>\n models.findIndex((candidate) => candidate.id === model.id) !== index,\n )?.id;\n if (duplicateModelId) {\n throw new Error(\n `Provider \"${providerName}\" contains duplicate model id \"${duplicateModelId}\".`,\n );\n }\n const modelsForProviderRole = (role: SurveyAssistantModelRole) =>\n configuredProvider.models.filter((model) => model.roles.includes(role));\n const providerChatDefaults = modelsForProviderRole(\"chat-default\");\n const providerChatModels = modelsForProviderRole(\"chat-picker\");\n const providerTaskDefaults = modelsForProviderRole(\"task-default\");\n const providerMemoryModels = modelsForProviderRole(\"memory\");\n if (providerChatDefaults.length !== 1) {\n throw new Error(`Provider \"${providerName}\" must configure exactly one chat-default model.`);\n }\n if (!providerChatDefaults[0].roles.includes(\"chat-picker\")) {\n throw new Error(\n `The chat-default model for provider \"${providerName}\" must also have the chat-picker role.`,\n );\n }\n if (providerChatModels.length === 0) {\n throw new Error(`Provider \"${providerName}\" must configure a chat-picker model.`);\n }\n if (providerTaskDefaults.length > 1) {\n throw new Error(`Provider \"${providerName}\" may configure at most one task-default model.`);\n }\n if (providerMemoryModels.length > 1 || (memoryEnabled && providerMemoryModels.length !== 1)) {\n throw new Error(\n memoryEnabled\n ? `Provider \"${providerName}\" must configure exactly one memory model when memory is enabled.`\n : `Provider \"${providerName}\" may configure at most one memory model.`,\n );\n }\n if (\n configuredProvider.type === \"lmstudio\" &&\n !configuredProvider.apiKeyOptional &&\n !configuredProvider.apiKeyEnv\n ) {\n throw new Error(\n `Provider \"${providerName}\" must configure apiKeyEnv when apiKeyOptional is false.`,\n );\n }\n const validateOptions = (options: ProviderModelOptions | undefined, location: string) => {\n if (!options) return;\n if (\n configuredProvider.type !== \"openai\" &&\n configuredProvider.type !== \"azure-openai\" &&\n (options.promptCacheKey ||\n options.promptCacheRetention ||\n options.reasoningSummary ||\n options.textVerbosity)\n ) {\n throw new Error(`${location} contains options unsupported by ${configuredProvider.type}.`);\n }\n if (configuredProvider.type !== \"openai\" && options.serviceTier) {\n throw new Error(`${location} contains serviceTier, which is only supported by openai.`);\n }\n };\n validateOptions(configuredProvider.options, `Provider \"${providerName}\"`);\n for (const model of configuredProvider.models) {\n const upstreamModelId = model.upstreamModel ?? model.id;\n if (configuredProvider.type !== \"lmstudio\" && upstreamModelId.includes(\"/\")) {\n throw new Error(\n `Model \"${model.id}\" must use an upstreamModel without a provider prefix for ${configuredProvider.type}.`,\n );\n }\n validateOptions(model.options, `Model \"${model.id}\" in provider \"${providerName}\"`);\n }\n }\n\n const modelsForRole = (role: SurveyAssistantModelRole) =>\n activeProvider.models.filter((model) => model.roles.includes(role));\n const chatDefaults = modelsForRole(\"chat-default\");\n const chatModels = modelsForRole(\"chat-picker\");\n const taskDefaults = modelsForRole(\"task-default\");\n const memoryModels = modelsForRole(\"memory\");\n\n const provider = activeProvider.type;\n\n const sendReasoning = document.execution?.sendReasoning ?? true;\n const providerDefaults: ProviderModelOptions = {\n parallelToolCalls: false,\n ...(provider === \"openai\" || provider === \"azure-openai\"\n ? {\n reasoningEffort: \"low\",\n reasoningSummary: \"detailed\" as const,\n promptCacheKey: \"survey-assistant-chat-v21\",\n }\n : provider === \"mistral\"\n ? { reasoningEffort: \"none\" }\n : {}),\n ...activeProvider.options,\n };\n const models: SurveyAssistantConfiguredModel[] = activeProvider.models.map((model) => ({\n id: model.id,\n label: model.label ?? model.id,\n upstreamModelId: model.upstreamModel ?? model.id,\n providerOptions: createProviderOptions(\n provider,\n { ...providerDefaults, ...model.options },\n sendReasoning,\n ),\n }));\n const configuredModel = (id: string) => models.find((model) => model.id === id)!;\n const defaultModelId = chatDefaults[0].id;\n const memoryModelId = (memoryModels[0] ?? chatDefaults[0]).id;\n const taskModelId = taskDefaults[0]?.id;\n const providerApiKey = activeProvider.apiKeyEnv\n ? getValue(env, activeProvider.apiKeyEnv)\n : undefined;\n const memoryModel = configuredModel(memoryModelId);\n const memoryModelConfig:\n | string\n | { id: `${string}/${string}`; apiKey?: string }\n | {\n providerId: string;\n modelId: string;\n url: string;\n apiKey?: string;\n } =\n provider === \"lmstudio\"\n ? {\n providerId: \"lmstudio\",\n modelId: memoryModel.upstreamModelId,\n url: activeProvider.baseUrl,\n ...(providerApiKey ? { apiKey: providerApiKey } : {}),\n }\n : provider === \"azure-openai\"\n ? `${provider}/${memoryModel.upstreamModelId}`\n : {\n id: `${provider}/${memoryModel.upstreamModelId}`,\n ...(providerApiKey ? { apiKey: providerApiKey } : {}),\n };\n const azure: SurveyAssistantAzureConfig | undefined =\n provider === \"azure-openai\"\n ? {\n resourceName: activeProvider.resourceName,\n apiKey: providerApiKey,\n apiVersion: activeProvider.apiVersion,\n discoverModels: activeProvider.discoverModels,\n management: activeProvider.management\n ? {\n tenantId: activeProvider.management.tenantId,\n clientId: activeProvider.management.clientId,\n clientSecret: getValue(env, activeProvider.management.clientSecretEnv) ?? \"\",\n subscriptionId: activeProvider.management.subscriptionId,\n resourceGroup: activeProvider.management.resourceGroup,\n }\n : undefined,\n }\n : undefined;\n const lmstudio: SurveyAssistantLmStudioConfig | undefined =\n provider === \"lmstudio\"\n ? { baseUrl: activeProvider.baseUrl, ...(providerApiKey ? { apiKey: providerApiKey } : {}) }\n : undefined;\n const missingProviderSecret =\n activeProvider.apiKeyEnv &&\n !providerApiKey &&\n !(provider === \"lmstudio\" && activeProvider.apiKeyOptional);\n const missingManagementSecret =\n provider === \"azure-openai\" &&\n activeProvider.discoverModels &&\n (!activeProvider.management || !azure?.management?.clientSecret);\n const missingStorage =\n requireStorage &&\n !getValue(env, \"SURVEY_ASSISTANT_DATABASE_URL\") &&\n !getValue(env, \"DATABASE_URL\");\n const readinessError = missingStorage\n ? \"Survey assistant storage is not configured.\"\n : missingProviderSecret\n ? `The provider credential ${activeProvider.apiKeyEnv} is not configured for the survey assistant.`\n : missingManagementSecret\n ? \"Azure deployment discovery requires complete management configuration and credentials.\"\n : null;\n const configuredMaxSteps = document.execution?.maxSteps ?? DEFAULT_MAX_STEPS;\n\n return {\n provider,\n providerApiKey,\n defaultModelId,\n memoryModelId,\n taskModelId,\n modelIds: chatModels.map((model) => model.id),\n models,\n modelCatalogTtlMs: document.modelCatalogTtlMs ?? DEFAULT_CATALOG_TTL_MS,\n azure,\n lmstudio,\n enabled: resolveConfiguredEnabled(env, document.enabled, requireExperimentalIdentityOptIn),\n readinessError,\n requestLimits: {\n maxAttachmentBytes:\n document.requestLimits?.maxAttachmentBytes ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachmentBytes,\n maxAttachments:\n document.requestLimits?.maxAttachments ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachments,\n maxRequestBytes:\n document.requestLimits?.maxRequestBytes ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxRequestBytes,\n maxTextPartChars:\n document.requestLimits?.maxTextPartChars ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTextPartChars,\n maxTotalAttachmentBytes:\n document.requestLimits?.maxTotalAttachmentBytes ??\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTotalAttachmentBytes,\n },\n execution: {\n firstResponseTimeoutMs:\n document.execution?.firstResponseTimeoutMs ?? DEFAULT_FIRST_RESPONSE_TIMEOUT_MS,\n idleTimeoutMs: document.execution?.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS,\n maxConcurrentRequests: document.execution?.maxConcurrentRequests ?? 4,\n maxDurationMs: document.execution?.maxDurationMs ?? DEFAULT_MAX_DURATION_MS,\n maxSteps: Math.min(configuredMaxSteps, HARD_MAX_STEPS),\n providerOptions: configuredModel(defaultModelId).providerOptions,\n sendReasoning,\n },\n observationalMemory: memoryEnabled\n ? createSurveyAssistantObservationalMemoryOptions({\n model: memoryModelConfig,\n temporalMarkers: document.memory?.temporalMarkers ?? false,\n observation: {\n messageTokens:\n document.memory?.messageTokens ??\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.messageTokens,\n bufferOnIdle: document.memory?.bufferOnIdle ?? false,\n observeAttachments: false,\n },\n reflection: {\n observationTokens:\n document.memory?.observationTokens ??\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.observationTokens,\n },\n })\n : false,\n };\n};\n\nexport const parseSurveyAssistantEnvironment = (\n env: Environment,\n {\n defaultLmStudioModel,\n defaultMistralModel = \"mistral-medium-latest\",\n defaultOpenAIModel = \"gpt-5.4-nano\",\n defaultProvider = \"openai\",\n requireExperimentalIdentityOptIn = false,\n requireStorage = true,\n }: ParseSurveyAssistantEnvironmentOptions = {},\n): SurveyAssistantRuntimeConfig => {\n if (getConfiguredEnabledOverride(env) === false) {\n return createDisabledSurveyAssistantRuntimeConfig();\n }\n const provider = parseProvider(env, defaultProvider);\n const modelIdOptions = { allowNestedId: provider === \"lmstudio\" };\n const configuredModelId = getOptionalSameProviderModelId(\n env,\n \"SURVEY_ASSISTANT_MODEL\",\n modelIdOptions,\n );\n if (provider === \"lmstudio\" && !configuredModelId && !defaultLmStudioModel) {\n throw new Error(\n \"SURVEY_ASSISTANT_MODEL must be configured when SURVEY_ASSISTANT_PROVIDER is lmstudio.\",\n );\n }\n const defaultModelId =\n configuredModelId ??\n getSameProviderModelId(\n provider === \"lmstudio\"\n ? defaultLmStudioModel!\n : provider === \"mistral\"\n ? defaultMistralModel\n : defaultOpenAIModel,\n provider === \"lmstudio\"\n ? \"defaultLmStudioModel\"\n : provider === \"mistral\"\n ? \"defaultMistralModel\"\n : \"defaultOpenAIModel\",\n modelIdOptions,\n );\n const configuredModelIds = getCommaSeparatedValues(env, \"SURVEY_ASSISTANT_MODELS\").map(\n (modelId) => getSameProviderModelId(modelId, \"SURVEY_ASSISTANT_MODELS\", modelIdOptions),\n );\n const modelIds = [\n ...new Set(\n configuredModelIds.includes(defaultModelId)\n ? configuredModelIds\n : [defaultModelId, ...configuredModelIds],\n ),\n ];\n const taskModelId = getOptionalSameProviderModelId(\n env,\n \"SURVEY_ASSISTANT_TASK_MODEL\",\n modelIdOptions,\n );\n const sendReasoning = getBoolean(env, \"SURVEY_ASSISTANT_SEND_REASONING\", true);\n const providerOptionsKey = resolveSurveyAssistantProviderOptionsKey(provider);\n const providerReasoningEffort = getValue(\n env,\n `SURVEY_ASSISTANT_${providerOptionsKey.toUpperCase()}_REASONING_EFFORT`,\n );\n const reasoningEffort =\n providerReasoningEffort ??\n getValue(env, \"SURVEY_ASSISTANT_REASONING_EFFORT\") ??\n (provider === \"openai\" || provider === \"azure-openai\" ? \"low\" : \"none\");\n const promptCacheRetention = getEnum(\n env,\n provider === \"azure-openai\"\n ? \"SURVEY_ASSISTANT_AZURE_PROMPT_CACHE_RETENTION\"\n : \"SURVEY_ASSISTANT_PROMPT_CACHE_RETENTION\",\n [\"in_memory\", \"24h\"] as const,\n );\n const serviceTier = getEnum(env, \"SURVEY_ASSISTANT_OPENAI_SERVICE_TIER\", [\n \"auto\",\n \"flex\",\n \"priority\",\n \"default\",\n ] as const);\n const textVerbosity = getEnum(env, \"SURVEY_ASSISTANT_OPENAI_TEXT_VERBOSITY\", [\n \"low\",\n \"medium\",\n \"high\",\n ] as const);\n const reasoningSummaryValue = getEnum(env, \"SURVEY_ASSISTANT_OPENAI_REASONING_SUMMARY\", [\n \"auto\",\n \"concise\",\n \"detailed\",\n \"off\",\n \"none\",\n ] as const);\n const reasoningSummary =\n reasoningSummaryValue === \"off\" || reasoningSummaryValue === \"none\"\n ? undefined\n : (reasoningSummaryValue ?? \"detailed\");\n const resolvedReasoningEffort =\n reasoningEffort === \"default\" || reasoningEffort === \"provider-default\"\n ? undefined\n : reasoningEffort;\n const providerOptions: AgentExecutionOptions[\"providerOptions\"] =\n provider === \"lmstudio\"\n ? undefined\n : {\n [providerOptionsKey]: {\n parallelToolCalls: false,\n ...(resolvedReasoningEffort ? { reasoningEffort: resolvedReasoningEffort } : {}),\n ...(provider === \"openai\" || provider === \"azure-openai\"\n ? {\n promptCacheKey:\n getValue(env, \"SURVEY_ASSISTANT_PROMPT_CACHE_KEY\") ??\n \"survey-assistant-chat-v21\",\n ...(promptCacheRetention ? { promptCacheRetention } : {}),\n ...(sendReasoning && reasoningSummary ? { reasoningSummary } : {}),\n ...(provider === \"openai\" && serviceTier ? { serviceTier } : {}),\n ...(textVerbosity ? { textVerbosity } : {}),\n }\n : {}),\n },\n };\n const azure: SurveyAssistantAzureConfig | undefined =\n provider === \"azure-openai\"\n ? {\n resourceName: getValue(env, \"AZURE_RESOURCE_NAME\"),\n apiKey: getValue(env, \"AZURE_API_KEY\"),\n apiVersion: getEnum(env, \"SURVEY_ASSISTANT_AZURE_API_VERSION\", [\"v1\", \"preview\"]) ?? \"v1\",\n discoverModels: getBoolean(env, \"SURVEY_ASSISTANT_AZURE_DISCOVER_MODELS\", false),\n management: parseAzureManagement(env),\n }\n : undefined;\n const lmstudio: SurveyAssistantLmStudioConfig | undefined =\n provider === \"lmstudio\"\n ? {\n baseUrl:\n getValue(env, \"SURVEY_ASSISTANT_LMSTUDIO_BASE_URL\") ?? \"http://127.0.0.1:1234/v1\",\n apiKey: getValue(env, \"SURVEY_ASSISTANT_LMSTUDIO_API_KEY\"),\n }\n : undefined;\n const providerApiKey =\n provider === \"openai\"\n ? getValue(env, \"OPENAI_API_KEY\")\n : provider === \"mistral\"\n ? getValue(env, \"MISTRAL_API_KEY\")\n : provider === \"lmstudio\"\n ? getValue(env, \"SURVEY_ASSISTANT_LMSTUDIO_API_KEY\")\n : getValue(env, \"AZURE_API_KEY\");\n const memoryModelId =\n getOptionalSameProviderModelId(env, \"SURVEY_ASSISTANT_MEMORY_MODEL\", modelIdOptions) ??\n defaultModelId;\n const memoryModel =\n provider === \"lmstudio\"\n ? {\n providerId: \"lmstudio\",\n modelId: memoryModelId,\n url: lmstudio!.baseUrl,\n ...(providerApiKey ? { apiKey: providerApiKey } : {}),\n }\n : provider === \"azure-openai\"\n ? `${provider}/${memoryModelId}`\n : `${provider}/${memoryModelId}`;\n const observationalMemory = getBoolean(env, \"SURVEY_ASSISTANT_MEMORY_ENABLED\", true)\n ? createSurveyAssistantObservationalMemoryOptions({\n model: memoryModel,\n temporalMarkers: getBoolean(env, \"SURVEY_ASSISTANT_MEMORY_TEMPORAL_MARKERS\", false),\n observation: {\n messageTokens: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MEMORY_MESSAGE_TOKENS\",\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.messageTokens,\n ),\n bufferOnIdle: getBoolean(env, \"SURVEY_ASSISTANT_MEMORY_BUFFER_ON_IDLE\", false),\n observeAttachments: false,\n },\n reflection: {\n observationTokens: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MEMORY_OBSERVATION_TOKENS\",\n SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS.observationTokens,\n ),\n },\n })\n : false;\n const configuredMaxSteps = getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_STEPS\",\n DEFAULT_MAX_STEPS,\n );\n const enabled = resolveConfiguredEnabled(env, undefined, requireExperimentalIdentityOptIn);\n const allModelIds = [\n ...new Set([...modelIds, ...(taskModelId ? [taskModelId] : []), memoryModelId]),\n ];\n\n return {\n provider,\n defaultModelId,\n memoryModelId,\n modelIds,\n models: allModelIds.map((id) => ({\n id,\n label: id,\n upstreamModelId: id,\n providerOptions,\n })),\n modelCatalogTtlMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MODEL_CATALOG_TTL_MS\",\n DEFAULT_CATALOG_TTL_MS,\n ),\n azure,\n lmstudio,\n enabled,\n readinessError: getReadinessError({\n azure,\n env,\n modelWasConfigured: Boolean(configuredModelId),\n provider,\n requireStorage,\n }),\n requestLimits: {\n maxAttachmentBytes: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachmentBytes,\n ),\n maxAttachments: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_ATTACHMENTS\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxAttachments,\n ),\n maxRequestBytes: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_REQUEST_BYTES\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxRequestBytes,\n ),\n maxTextPartChars: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTextPartChars,\n ),\n maxTotalAttachmentBytes: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES\",\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS.maxTotalAttachmentBytes,\n ),\n },\n execution: {\n firstResponseTimeoutMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_FIRST_RESPONSE_TIMEOUT_MS\",\n DEFAULT_FIRST_RESPONSE_TIMEOUT_MS,\n ),\n idleTimeoutMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_IDLE_TIMEOUT_MS\",\n DEFAULT_IDLE_TIMEOUT_MS,\n ),\n maxConcurrentRequests: getPositiveNumber(env, \"SURVEY_ASSISTANT_MAX_CONCURRENT_REQUESTS\", 4),\n maxDurationMs: getPositiveNumber(\n env,\n \"SURVEY_ASSISTANT_MAX_DURATION_MS\",\n DEFAULT_MAX_DURATION_MS,\n ),\n maxSteps: Math.min(configuredMaxSteps, HARD_MAX_STEPS),\n providerOptions,\n sendReasoning,\n },\n observationalMemory,\n taskModelId,\n };\n};\n","import type { AgentExecutionOptions } from \"@mastra/core/agent\";\nimport { AzureOpenAIGateway, type MastraModelGatewayInterface } from \"@mastra/core/llm\";\nimport type { Mastra } from \"@mastra/core/mastra\";\nimport type { RequestContext } from \"@mastra/core/request-context\";\nimport type { SurveyAssistantModelCatalog } from \"../protocol\";\nimport { createSurveyAssistantAgent, type CreateSurveyAssistantAgentOptions } from \"./agent\";\nimport { SURVEY_ASSISTANT_AGENT_ID, SURVEY_ASSISTANT_TASK_AGENT_ID } from \"./constants\";\nimport {\n createSurveyAssistantChatHandler,\n SurveyAssistantAuthorizationError,\n type SurveyAssistantAuthorize,\n type SurveyAssistantChatHandlerOptions,\n type SurveyAssistantResolveModel,\n} from \"./handler\";\nimport { createMastraMemoryThreadRepository } from \"./memory-thread-repository\";\nimport type {\n SurveyAssistantModelSelection,\n SurveyAssistantRequestContext,\n} from \"./request-context\";\nimport type { SurveyAssistantCapabilitySet } from \"../engine\";\nimport type { SurveyAssistantRuntimeConfig } from \"./runtime-config\";\nimport {\n createSurveyAssistantTaskAgent,\n createSurveyAssistantTaskHandler,\n type CreateSurveyAssistantTaskHandlerOptions,\n type SurveyAssistantTaskModelResolutionInput,\n} from \"./tasks\";\nimport type { SurveyAssistantThreadDocumentRepository } from \"./thread-documents\";\nimport {\n createSurveyAssistantThreadHandlers,\n type CreateSurveyAssistantThreadHandlersOptions,\n} from \"./thread-handlers\";\nimport { SURVEY_ASSISTANT_TOOL_IDS } from \"./tools\";\n\nexport {\n parseSurveyAssistantEnvironment,\n parseSurveyAssistantConfigurationDocument,\n resolveSurveyAssistantProviderOptionsKey,\n surveyAssistantConfigurationDocumentSchema,\n type ParseSurveyAssistantEnvironmentOptions,\n type SurveyAssistantAzureConfig,\n type SurveyAssistantConfigurationDocument,\n type SurveyAssistantConfiguredModel,\n type SurveyAssistantExecutionConfig,\n type SurveyAssistantLmStudioConfig,\n type SurveyAssistantModelRole,\n type SurveyAssistantProvider,\n type SurveyAssistantProviderOptionsKey,\n type SurveyAssistantRuntimeConfig,\n} from \"./runtime-config\";\n\nexport interface SurveyAssistantModelRouter {\n defaultModel: SurveyAssistantModelSelection[\"model\"];\n gateways?: Record<string, MastraModelGatewayInterface>;\n getCatalog(options?: { refresh?: boolean }): Promise<SurveyAssistantModelCatalog>;\n memoryModel: SurveyAssistantModelSelection[\"model\"];\n providerName: string;\n providerOptions?: AgentExecutionOptions[\"providerOptions\"];\n resolveModel: SurveyAssistantResolveModel;\n resolveTaskModel(\n input: SurveyAssistantTaskModelResolutionInput,\n ): ReturnType<SurveyAssistantResolveModel>;\n taskModel?: SurveyAssistantModelSelection[\"model\"];\n}\n\nexport const createSurveyAssistantModelRouter = (\n config: SurveyAssistantRuntimeConfig,\n): SurveyAssistantModelRouter => {\n const configuredModels = new Map(config.models?.map((model) => [model.id, model]));\n const getConfiguredModel = (modelId: string) =>\n configuredModels.get(modelId) ?? {\n id: modelId,\n label: modelId,\n upstreamModelId: modelId,\n providerOptions: config.execution.providerOptions,\n };\n const toProviderModel = (\n modelId: string,\n configName: string,\n ): SurveyAssistantModelSelection[\"model\"] => {\n const configuredModel = getConfiguredModel(modelId);\n const upstreamModelId = configuredModel.upstreamModelId;\n if (config.provider === \"lmstudio\") {\n if (!config.lmstudio) {\n throw new Error(\"LM Studio configuration is missing for the lmstudio provider.\");\n }\n return {\n providerId: \"lmstudio\",\n modelId: upstreamModelId,\n url: config.lmstudio.baseUrl,\n ...(config.lmstudio.apiKey ? { apiKey: config.lmstudio.apiKey } : {}),\n };\n }\n if (upstreamModelId.includes(\"/\")) {\n throw new Error(\n `${configName} must be a model or deployment id without a provider prefix. ` +\n \"All survey assistant models use the configured provider.\",\n );\n }\n const id = `${config.provider}/${upstreamModelId}` as `${string}/${string}`;\n return config.providerApiKey && config.provider !== \"azure-openai\"\n ? { id, apiKey: config.providerApiKey }\n : id;\n };\n const defaultModel = toProviderModel(config.defaultModelId, \"defaultModelId\");\n const chatModelIds = config.modelIds.map((modelId) => {\n toProviderModel(modelId, \"modelIds\");\n return modelId;\n });\n if (!chatModelIds.includes(config.defaultModelId)) {\n throw new Error(\"modelIds must include defaultModelId.\");\n }\n const taskModel = config.taskModelId\n ? toProviderModel(config.taskModelId, \"taskModelId\")\n : undefined;\n const memoryModel = toProviderModel(config.memoryModelId, \"memoryModelId\");\n if (config.observationalMemory !== false) {\n const configuredMemoryModel = toProviderModel(config.memoryModelId, \"memoryModelId\");\n if (\n JSON.stringify(config.observationalMemory.model) !== JSON.stringify(configuredMemoryModel) ||\n config.observationalMemory.observation?.model !== undefined ||\n config.observationalMemory.reflection?.model !== undefined\n ) {\n throw new Error(\n \"The standard runtime requires observationalMemory to use memoryModelId \" +\n \"for both observation and reflection. Use the low-level Agent factory \" +\n \"for custom memory model routing.\",\n );\n }\n }\n const deploymentIds = [\n ...new Set([\n ...chatModelIds.map((id) => getConfiguredModel(id).upstreamModelId),\n ...(config.taskModelId ? [getConfiguredModel(config.taskModelId).upstreamModelId] : []),\n getConfiguredModel(config.memoryModelId).upstreamModelId,\n ]),\n ];\n const azureGateway = config.azure\n ? new AzureOpenAIGateway({\n resourceName: config.azure.resourceName ?? \"\",\n apiKey: config.azure.apiKey,\n apiVersion: config.azure.apiVersion,\n useResponsesAPI: true,\n ...(config.azure.management\n ? { management: config.azure.management }\n : { deployments: deploymentIds }),\n })\n : undefined;\n let cachedCatalog: { expiresAt: number; value: SurveyAssistantModelCatalog } | undefined;\n\n const getCatalog = async ({ refresh = false }: { refresh?: boolean } = {}) => {\n if (!refresh && cachedCatalog && cachedCatalog.expiresAt > Date.now()) {\n return cachedCatalog.value;\n }\n let ids = chatModelIds;\n if (azureGateway && config.azure?.discoverModels) {\n try {\n const providers = await azureGateway.fetchProviders();\n const configuredUpstreamIds = new Set(\n chatModelIds.map((id) => getConfiguredModel(id).upstreamModelId),\n );\n const discoveredIds = (providers[\"azure-openai\"]?.models ?? []).filter(\n (id) => !configuredUpstreamIds.has(id),\n );\n ids = [...new Set([...chatModelIds, ...discoveredIds])];\n } catch {\n // Keep the explicit catalog available when Azure management discovery is temporarily down.\n }\n }\n const value = {\n defaultModelId: config.defaultModelId,\n models: ids.map((id) => {\n const configuredModel = getConfiguredModel(id);\n return { id, label: configuredModel.label };\n }),\n } satisfies SurveyAssistantModelCatalog;\n cachedCatalog = { expiresAt: Date.now() + config.modelCatalogTtlMs, value };\n return value;\n };\n const resolveRequestedModel = async (requestedModelId?: string) => {\n const catalog = await getCatalog();\n const id = requestedModelId ?? catalog.defaultModelId;\n return catalog.models.some((model) => model.id === id)\n ? {\n id,\n model: toProviderModel(id, \"requestedModelId\"),\n providerName: config.provider,\n ...(getConfiguredModel(id).providerOptions\n ? { providerOptions: getConfiguredModel(id).providerOptions }\n : {}),\n }\n : null;\n };\n\n return {\n defaultModel,\n gateways: azureGateway\n ? {\n // Mastra 1.47 narrows one method's environment type in the concrete class.\n \"azure-openai\": azureGateway as unknown as MastraModelGatewayInterface,\n }\n : undefined,\n getCatalog,\n memoryModel,\n providerName: config.provider,\n providerOptions: config.execution.providerOptions,\n resolveModel: async ({ requestedModelId }) => resolveRequestedModel(requestedModelId),\n resolveTaskModel: async ({ requestedModelId }) =>\n config.taskModelId\n ? {\n id: config.taskModelId,\n model: taskModel!,\n providerName: config.provider,\n ...(getConfiguredModel(config.taskModelId).providerOptions\n ? { providerOptions: getConfiguredModel(config.taskModelId).providerOptions }\n : {}),\n }\n : resolveRequestedModel(requestedModelId),\n taskModel,\n };\n};\n\nexport interface SurveyAssistantRuntimeComponents {\n agents: Record<\n string,\n | ReturnType<typeof createSurveyAssistantAgent>\n | ReturnType<typeof createSurveyAssistantTaskAgent>\n >;\n gateways?: Record<string, MastraModelGatewayInterface>;\n modelRouter: SurveyAssistantModelRouter;\n}\n\nexport const createSurveyAssistantRuntimeComponents = (\n config: SurveyAssistantRuntimeConfig,\n): SurveyAssistantRuntimeComponents => {\n const modelRouter = createSurveyAssistantModelRouter(config);\n const chatModel: CreateSurveyAssistantAgentOptions[\"model\"] = ({\n requestContext,\n }: {\n requestContext: RequestContext<SurveyAssistantRequestContext>;\n }) => requestContext.get(\"modelSelection\")?.model ?? modelRouter.defaultModel;\n const taskModel = modelRouter.taskModel ?? chatModel;\n const observationalMemory =\n config.provider === \"lmstudio\" && config.observationalMemory !== false\n ? { ...config.observationalMemory, model: modelRouter.memoryModel }\n : config.observationalMemory;\n return {\n agents: {\n [SURVEY_ASSISTANT_AGENT_ID]: createSurveyAssistantAgent({\n model: chatModel,\n observationalMemory,\n }),\n [SURVEY_ASSISTANT_TASK_AGENT_ID]: createSurveyAssistantTaskAgent({ model: taskModel }),\n },\n gateways: modelRouter.gateways,\n modelRouter,\n };\n};\n\ntype ChatHandlerOverrides = Partial<\n Omit<\n SurveyAssistantChatHandlerOptions,\n \"authorize\" | \"mastra\" | \"providerName\" | \"providerOptions\" | \"resolveModel\"\n >\n>;\ntype TaskHandlerOverrides = Partial<\n Omit<\n CreateSurveyAssistantTaskHandlerOptions,\n \"agent\" | \"authorize\" | \"providerOptions\" | \"resolveModel\"\n >\n>;\n\nexport interface CreateSurveyAssistantRuntimeHandlersOptions {\n authorize: {\n chat: SurveyAssistantAuthorize;\n model?: (request: Request) => unknown | Promise<unknown>;\n task: CreateSurveyAssistantTaskHandlerOptions[\"authorize\"];\n thread: CreateSurveyAssistantThreadHandlersOptions[\"authorize\"];\n };\n chat?: ChatHandlerOverrides;\n config: SurveyAssistantRuntimeConfig;\n mastra: Mastra | (() => Mastra | Promise<Mastra>);\n modelRouter: SurveyAssistantModelRouter;\n task?: TaskHandlerOverrides;\n threads?: Pick<CreateSurveyAssistantThreadHandlersOptions, \"onError\">;\n threadDocuments?: SurveyAssistantThreadDocumentRepository;\n}\n\nexport type CreateConfiguredSurveyAssistantRuntimeHandlersOptions = Omit<\n CreateSurveyAssistantRuntimeHandlersOptions,\n \"config\" | \"modelRouter\"\n>;\n\nconst resolveMastra = async (mastra: Mastra | (() => Mastra | Promise<Mastra>)) =>\n typeof mastra === \"function\" ? mastra() : mastra;\n\nexport const createSurveyAssistantRuntimeHandlers = ({\n authorize,\n chat = {},\n config,\n mastra,\n modelRouter,\n task = {},\n threads: threadOptions = {},\n threadDocuments,\n}: CreateSurveyAssistantRuntimeHandlersOptions) => {\n const isEnabled = chat.isEnabled ?? (() => config.enabled);\n const getReadinessError = chat.getReadinessError ?? (() => config.readinessError);\n const chatHandler = createSurveyAssistantChatHandler({\n ...chat,\n mastra,\n agentId: SURVEY_ASSISTANT_AGENT_ID,\n activeTools:\n chat.activeTools ??\n (config.observationalMemory === false\n ? SURVEY_ASSISTANT_TOOL_IDS\n : [...SURVEY_ASSISTANT_TOOL_IDS, \"recall\"]),\n authorize: authorize.chat,\n firstResponseTimeoutMs: chat.firstResponseTimeoutMs ?? config.execution.firstResponseTimeoutMs,\n getReadinessError,\n isEnabled,\n idleTimeoutMs: chat.idleTimeoutMs ?? config.execution.idleTimeoutMs,\n maxConcurrentRequests: chat.maxConcurrentRequests ?? config.execution.maxConcurrentRequests,\n maxDurationMs: chat.maxDurationMs ?? config.execution.maxDurationMs,\n maxSteps: chat.maxSteps ?? config.execution.maxSteps,\n providerName: modelRouter.providerName,\n providerOptions: modelRouter.providerOptions,\n requestLimits: { ...config.requestLimits, ...chat.requestLimits },\n resolveModel: modelRouter.resolveModel,\n sendReasoning: chat.sendReasoning ?? config.execution.sendReasoning,\n threadDocuments,\n });\n const taskHandler = createSurveyAssistantTaskHandler({\n ...task,\n agent: async () => (await resolveMastra(mastra)).getAgent(SURVEY_ASSISTANT_TASK_AGENT_ID),\n authorize: authorize.task,\n getReadinessError: task.getReadinessError ?? getReadinessError,\n isEnabled: task.isEnabled ?? isEnabled,\n maxConcurrentRequests: task.maxConcurrentRequests ?? config.execution.maxConcurrentRequests,\n maxDurationMs: task.maxDurationMs ?? config.execution.maxDurationMs,\n providerOptions: modelRouter.providerOptions,\n resolveModel: modelRouter.resolveTaskModel,\n });\n const getMemory = async () => {\n const memory = await (\n await resolveMastra(mastra)\n )\n .getAgent(SURVEY_ASSISTANT_AGENT_ID)\n .getMemory();\n if (!memory) throw new Error(\"Survey assistant memory is not configured.\");\n return memory;\n };\n const threads = createSurveyAssistantThreadHandlers({\n authorize: async (request) => {\n if (!config.enabled) {\n throw new SurveyAssistantAuthorizationError(\"Survey assistant is disabled.\", 404);\n }\n return authorize.thread(request);\n },\n ...threadOptions,\n repository: createMastraMemoryThreadRepository({ getMemory, threadDocuments }),\n });\n const models = async (request: Request) => {\n if (!config.enabled) {\n return Response.json(\n { code: \"authorization_failed\", error: \"Survey assistant is disabled.\" },\n { status: 404 },\n );\n }\n try {\n if (authorize.model) {\n await authorize.model(request);\n } else {\n await authorize.task({ request });\n }\n return Response.json(await modelRouter.getCatalog());\n } catch (error) {\n const status =\n typeof error === \"object\" &&\n error !== null &&\n \"status\" in error &&\n typeof error.status === \"number\"\n ? error.status\n : 403;\n return Response.json(\n {\n code: \"authorization_failed\",\n error: \"The survey assistant request is not authorized.\",\n },\n { status },\n );\n }\n };\n\n return {\n chat: chatHandler,\n models,\n task: taskHandler,\n threads,\n };\n};\n\nexport interface SurveyAssistantRuntime extends SurveyAssistantRuntimeComponents {\n config: SurveyAssistantRuntimeConfig;\n createHandlers(\n options: CreateConfiguredSurveyAssistantRuntimeHandlersOptions,\n ): ReturnType<typeof createSurveyAssistantRuntimeHandlers>;\n}\n\nexport interface CreateSurveyAssistantRuntimeOptions {\n /** Trusted server-side capabilities for custom registry item types. */\n trustedCapabilities?: SurveyAssistantCapabilitySet;\n}\n\n/**\n * Creates the reusable assistant runtime without hiding Mastra from the host.\n * Register `agents` and `gateways` in the host's standard Mastra instance, then\n * call `createHandlers` with that instance and host authorization policy.\n */\nexport const createSurveyAssistantRuntime = (\n config: SurveyAssistantRuntimeConfig,\n runtimeOptions: CreateSurveyAssistantRuntimeOptions = {},\n): SurveyAssistantRuntime => {\n const components = createSurveyAssistantRuntimeComponents(config);\n return {\n ...components,\n config,\n createHandlers: (handlerOptions) =>\n createSurveyAssistantRuntimeHandlers({\n ...handlerOptions,\n chat: {\n ...handlerOptions.chat,\n trustedCapabilities:\n handlerOptions.chat?.trustedCapabilities ?? runtimeOptions.trustedCapabilities,\n },\n config,\n modelRouter: components.modelRouter,\n }),\n };\n};\n"],"mappings":"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"}
|
package/dist/server-tasks.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as SurveyAssistantTaskAuthorizationInput, c as createSurveyAssistantTaskAgent, d as runSurveyAssistantSuggestItemLabelTask, f as runSurveyAssistantTask, i as RunSurveyAssistantTaskOptions, l as createSurveyAssistantTaskHandler, n as CreateSurveyAssistantTaskHandlerOptions, o as SurveyAssistantTaskAuthorizedIdentity, p as runSurveyAssistantTranslateContentTask, r as RunSurveyAssistantBuiltInTaskOptions, s as SurveyAssistantTaskModelResolutionInput, t as CreateSurveyAssistantTaskAgentOptions, u as runSurveyAssistantSuggestItemKeyTask } from "./tasks-
|
|
1
|
+
import { a as SurveyAssistantTaskAuthorizationInput, c as createSurveyAssistantTaskAgent, d as runSurveyAssistantSuggestItemLabelTask, f as runSurveyAssistantTask, i as RunSurveyAssistantTaskOptions, l as createSurveyAssistantTaskHandler, n as CreateSurveyAssistantTaskHandlerOptions, o as SurveyAssistantTaskAuthorizedIdentity, p as runSurveyAssistantTranslateContentTask, r as RunSurveyAssistantBuiltInTaskOptions, s as SurveyAssistantTaskModelResolutionInput, t as CreateSurveyAssistantTaskAgentOptions, u as runSurveyAssistantSuggestItemKeyTask } from "./tasks-CCtxjhwh.mjs";
|
|
2
2
|
export { CreateSurveyAssistantTaskAgentOptions, CreateSurveyAssistantTaskHandlerOptions, RunSurveyAssistantBuiltInTaskOptions, RunSurveyAssistantTaskOptions, SurveyAssistantTaskAuthorizationInput, SurveyAssistantTaskAuthorizedIdentity, SurveyAssistantTaskModelResolutionInput, createSurveyAssistantTaskAgent, createSurveyAssistantTaskHandler, runSurveyAssistantSuggestItemKeyTask, runSurveyAssistantSuggestItemLabelTask, runSurveyAssistantTask, runSurveyAssistantTranslateContentTask };
|
package/dist/server-tools.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as surveyAuditTool, n as surveyAssistantTools, r as surveyAssetTool, t as SURVEY_ASSISTANT_TOOL_IDS } from "./index-
|
|
1
|
+
import { i as surveyAuditTool, n as surveyAssistantTools, r as surveyAssetTool, t as SURVEY_ASSISTANT_TOOL_IDS } from "./index-DhNQKOwr.mjs";
|
|
2
2
|
export { SURVEY_ASSISTANT_TOOL_IDS, surveyAssetTool, surveyAssistantTools, surveyAuditTool };
|
package/dist/server-tools.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as surveyAuditTool, n as surveyAssistantTools, r as surveyAssetTool, t as SURVEY_ASSISTANT_TOOL_IDS } from "./tools-
|
|
1
|
+
import { i as surveyAuditTool, n as surveyAssistantTools, r as surveyAssetTool, t as SURVEY_ASSISTANT_TOOL_IDS } from "./tools-3tq-XqI0.mjs";
|
|
2
2
|
export { SURVEY_ASSISTANT_TOOL_IDS, surveyAssetTool, surveyAssistantTools, surveyAuditTool };
|
package/dist/server.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { p as SurveyAssistantTurnTerminationReason } from "./lifecycle-DWv5CiSu.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { b as TurnSurveyDraft } from "./index-Da_Hb9-1.mjs";
|
|
3
3
|
import { a as SurveyAssistantThreadDocumentRepository, c as loadSurveyAssistantThreadAttachments, d as replaceCurrentSurveyAssistantAttachmentsWithReferences, i as SurveyAssistantThreadDocumentContent, l as registerSurveyAssistantThreadAttachments, n as SurveyAssistantModelAttachment, o as getSurveyAssistantReplayableDocuments, r as SurveyAssistantThreadDocument, s as loadSurveyAssistantDocuments, t as SurveyAssistantAttachmentAccess, u as removeHistoricalSurveyAssistantAttachments } from "./thread-documents-Dvo6XS7o.mjs";
|
|
4
|
-
import { a as SurveyAssistantModelSelection, c as deriveSurveyAssistantDocumentTransition, d as parseSurveyAssistantSnapshot, f as requireSurveyAssistantTurnState, i as SurveyAssistantIdentityContext, l as parseSurveyAssistantPreviousApplyOutcome, n as SURVEY_ASSISTANT_TASK_AGENT_ID, o as SurveyAssistantRequestContext, r as SurveyAssistantDocumentTransition, s as buildSurveyAssistantRequestContext, t as SURVEY_ASSISTANT_AGENT_ID, u as parseSurveyAssistantPreviousSettledVersion } from "./constants-
|
|
5
|
-
import { A as
|
|
6
|
-
import { a as SurveyAssistantTaskAuthorizationInput, g as surveyAuthoringReferences, h as surveyAuthoringReferenceTopics, m as SurveyAuthoringReferenceTopic, o as SurveyAssistantTaskAuthorizedIdentity } from "./tasks-
|
|
4
|
+
import { a as SurveyAssistantModelSelection, c as deriveSurveyAssistantDocumentTransition, d as parseSurveyAssistantSnapshot, f as requireSurveyAssistantTurnState, i as SurveyAssistantIdentityContext, l as parseSurveyAssistantPreviousApplyOutcome, n as SURVEY_ASSISTANT_TASK_AGENT_ID, o as SurveyAssistantRequestContext, r as SurveyAssistantDocumentTransition, s as buildSurveyAssistantRequestContext, t as SURVEY_ASSISTANT_AGENT_ID, u as parseSurveyAssistantPreviousSettledVersion } from "./constants-DbrJxxOh.mjs";
|
|
5
|
+
import { A as readSurveyAssistantRequestJson, C as SURVEY_ASSISTANT_MAX_ATTACHMENT_NAME_CHARS, D as SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES, E as SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS, O as SurveyAssistantRequestError, S as SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES, T as SURVEY_ASSISTANT_MAX_REQUEST_BYTES, _ as describeSurveyAssistantStreamError, a as SurveyAssistantThreadRepository, b as SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS, c as SurveyAssistantAuthorizationInput, d as SurveyAssistantChatHandlerOptions, f as SurveyAssistantModelResolutionInput, g as createSurveyAssistantChatHandler, h as SurveyAssistantTurnMetrics, i as SurveyAssistantThreadIdentity, j as validateSurveyAssistantMessages, k as SurveyAssistantRequestLimits, l as SurveyAssistantAuthorize, m as SurveyAssistantStreamErrorContext, n as SurveyAssistantStoredThread, o as createSurveyAssistantThreadHandlers, p as SurveyAssistantResolveModel, r as SurveyAssistantThreadErrorContext, s as SurveyAssistantAuthorizationError, t as CreateSurveyAssistantThreadHandlersOptions, u as SurveyAssistantAuthorizedIdentity, v as formatSurveyAssistantStreamError, w as SURVEY_ASSISTANT_MAX_MESSAGES, x as SURVEY_ASSISTANT_MAX_ATTACHMENTS, y as SURVEY_ASSISTANT_ACCEPTED_ATTACHMENT_TYPES } from "./thread-handlers-Bt9cDo-F.mjs";
|
|
6
|
+
import { a as SurveyAssistantTaskAuthorizationInput, g as surveyAuthoringReferences, h as surveyAuthoringReferenceTopics, m as SurveyAuthoringReferenceTopic, o as SurveyAssistantTaskAuthorizedIdentity } from "./tasks-CCtxjhwh.mjs";
|
|
7
7
|
import { UIMessageChunk } from "ai";
|
|
8
8
|
import { MastraMemory } from "@mastra/core/memory";
|
|
9
9
|
|
|
@@ -125,5 +125,5 @@ declare const createSurveyAssistantTurnStream: ({
|
|
|
125
125
|
turnStartedAt
|
|
126
126
|
}: SurveyAssistantTurnStreamOptions) => ReadableStream<UIMessageChunk>;
|
|
127
127
|
//#endregion
|
|
128
|
-
export { type CreateMastraMemoryThreadRepositoryOptions, type CreateSurveyAssistantSurveyLifecycleOptions, type CreateSurveyAssistantThreadHandlersOptions, type DeleteSurveyAssistantSurveyThreadsInput, type DeleteSurveyAssistantSurveyThreadsResult, SURVEY_ASSISTANT_ACCEPTED_ATTACHMENT_TYPES, SURVEY_ASSISTANT_AGENT_ID, SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS, SURVEY_ASSISTANT_MAX_ATTACHMENTS, SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES, SURVEY_ASSISTANT_MAX_ATTACHMENT_NAME_CHARS, SURVEY_ASSISTANT_MAX_MESSAGES, SURVEY_ASSISTANT_MAX_REQUEST_BYTES, SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS, SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES, SURVEY_ASSISTANT_SURVEY_ID_METADATA_KEY, SURVEY_ASSISTANT_TASK_AGENT_ID, type SurveyAssistantAttachmentAccess, SurveyAssistantAuthorizationError, type SurveyAssistantAuthorizationInput, type SurveyAssistantAuthorize, type SurveyAssistantAuthorizedIdentity, type SurveyAssistantChatHandlerOptions, type SurveyAssistantDocumentTransition, type SurveyAssistantIdentityContext, type SurveyAssistantModelAttachment, type SurveyAssistantModelResolutionInput, type SurveyAssistantModelSelection, type SurveyAssistantRequestContext, SurveyAssistantRequestError, type SurveyAssistantRequestLimits, type SurveyAssistantResolveModel, type SurveyAssistantScopedSurvey, type SurveyAssistantStoredThread, type SurveyAssistantStreamErrorContext, type SurveyAssistantSurveyLifecycle, type SurveyAssistantSurveyPanelProps, type SurveyAssistantThreadCleanupResult, type SurveyAssistantThreadDocument, type SurveyAssistantThreadDocumentContent, type SurveyAssistantThreadDocumentRepository, type SurveyAssistantThreadIdentity, type SurveyAssistantThreadRepository, type SurveyAssistantTurnMetrics, type SurveyAssistantTurnStreamOptions, type SurveyAuthoringReferenceTopic, buildSurveyAssistantRequestContext, createMastraMemoryThreadRepository, createSurveyAssistantChatHandler, createSurveyAssistantSurveyLifecycle, createSurveyAssistantSurveyThreadMetadata, createSurveyAssistantThreadHandlers, createSurveyAssistantTurnStream, deriveSurveyAssistantDocumentTransition, describeSurveyAssistantStreamError, formatSurveyAssistantStreamError, getSurveyAssistantReplayableDocuments, loadSurveyAssistantDocuments, loadSurveyAssistantThreadAttachments, parseSurveyAssistantPreviousApplyOutcome, parseSurveyAssistantPreviousSettledVersion, parseSurveyAssistantSnapshot, readSurveyAssistantRequestJson, registerSurveyAssistantThreadAttachments, removeHistoricalSurveyAssistantAttachments, replaceCurrentSurveyAssistantAttachmentsWithReferences, requireSurveyAssistantTurnState, surveyAuthoringReferenceTopics, surveyAuthoringReferences, validateSurveyAssistantMessages };
|
|
128
|
+
export { type CreateMastraMemoryThreadRepositoryOptions, type CreateSurveyAssistantSurveyLifecycleOptions, type CreateSurveyAssistantThreadHandlersOptions, type DeleteSurveyAssistantSurveyThreadsInput, type DeleteSurveyAssistantSurveyThreadsResult, SURVEY_ASSISTANT_ACCEPTED_ATTACHMENT_TYPES, SURVEY_ASSISTANT_AGENT_ID, SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS, SURVEY_ASSISTANT_MAX_ATTACHMENTS, SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES, SURVEY_ASSISTANT_MAX_ATTACHMENT_NAME_CHARS, SURVEY_ASSISTANT_MAX_MESSAGES, SURVEY_ASSISTANT_MAX_REQUEST_BYTES, SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS, SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES, SURVEY_ASSISTANT_SURVEY_ID_METADATA_KEY, SURVEY_ASSISTANT_TASK_AGENT_ID, type SurveyAssistantAttachmentAccess, SurveyAssistantAuthorizationError, type SurveyAssistantAuthorizationInput, type SurveyAssistantAuthorize, type SurveyAssistantAuthorizedIdentity, type SurveyAssistantChatHandlerOptions, type SurveyAssistantDocumentTransition, type SurveyAssistantIdentityContext, type SurveyAssistantModelAttachment, type SurveyAssistantModelResolutionInput, type SurveyAssistantModelSelection, type SurveyAssistantRequestContext, SurveyAssistantRequestError, type SurveyAssistantRequestLimits, type SurveyAssistantResolveModel, type SurveyAssistantScopedSurvey, type SurveyAssistantStoredThread, type SurveyAssistantStreamErrorContext, type SurveyAssistantSurveyLifecycle, type SurveyAssistantSurveyPanelProps, type SurveyAssistantThreadCleanupResult, type SurveyAssistantThreadDocument, type SurveyAssistantThreadDocumentContent, type SurveyAssistantThreadDocumentRepository, type SurveyAssistantThreadErrorContext, type SurveyAssistantThreadIdentity, type SurveyAssistantThreadRepository, type SurveyAssistantTurnMetrics, type SurveyAssistantTurnStreamOptions, type SurveyAuthoringReferenceTopic, buildSurveyAssistantRequestContext, createMastraMemoryThreadRepository, createSurveyAssistantChatHandler, createSurveyAssistantSurveyLifecycle, createSurveyAssistantSurveyThreadMetadata, createSurveyAssistantThreadHandlers, createSurveyAssistantTurnStream, deriveSurveyAssistantDocumentTransition, describeSurveyAssistantStreamError, formatSurveyAssistantStreamError, getSurveyAssistantReplayableDocuments, loadSurveyAssistantDocuments, loadSurveyAssistantThreadAttachments, parseSurveyAssistantPreviousApplyOutcome, parseSurveyAssistantPreviousSettledVersion, parseSurveyAssistantSnapshot, readSurveyAssistantRequestJson, registerSurveyAssistantThreadAttachments, removeHistoricalSurveyAssistantAttachments, replaceCurrentSurveyAssistantAttachmentsWithReferences, requireSurveyAssistantTurnState, surveyAuthoringReferenceTopics, surveyAuthoringReferences, validateSurveyAssistantMessages };
|
|
129
129
|
//# sourceMappingURL=server.d.mts.map
|
package/dist/server.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as SURVEY_ASSISTANT_TASK_AGENT_ID, t as SURVEY_ASSISTANT_AGENT_ID } from "./constants-CFUWrRtl.mjs";
|
|
2
|
-
import { a as parseSurveyAssistantPreviousSettledVersion, i as parseSurveyAssistantPreviousApplyOutcome, n as deriveSurveyAssistantDocumentTransition, o as parseSurveyAssistantSnapshot, s as requireSurveyAssistantTurnState, t as buildSurveyAssistantRequestContext } from "./request-context-
|
|
2
|
+
import { a as parseSurveyAssistantPreviousSettledVersion, i as parseSurveyAssistantPreviousApplyOutcome, n as deriveSurveyAssistantDocumentTransition, o as parseSurveyAssistantSnapshot, s as requireSurveyAssistantTurnState, t as buildSurveyAssistantRequestContext } from "./request-context-D1sC54ZA.mjs";
|
|
3
3
|
import { a as SURVEY_ASSISTANT_MAX_ATTACHMENT_NAME_CHARS, c as SURVEY_ASSISTANT_MAX_TEXT_PART_CHARS, d as readSurveyAssistantRequestJson, f as validateSurveyAssistantMessages, i as SURVEY_ASSISTANT_MAX_ATTACHMENT_BYTES, l as SURVEY_ASSISTANT_MAX_TOTAL_ATTACHMENT_BYTES, n as SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS, o as SURVEY_ASSISTANT_MAX_MESSAGES, r as SURVEY_ASSISTANT_MAX_ATTACHMENTS, s as SURVEY_ASSISTANT_MAX_REQUEST_BYTES, t as SURVEY_ASSISTANT_ACCEPTED_ATTACHMENT_TYPES, u as SurveyAssistantRequestError } from "./request-guardrails-h4t6u8mP.mjs";
|
|
4
|
-
import { a as describeSurveyAssistantStreamError, c as loadSurveyAssistantDocuments, d as removeHistoricalSurveyAssistantAttachments, f as replaceCurrentSurveyAssistantAttachmentsWithReferences, i as createSurveyAssistantChatHandler, l as loadSurveyAssistantThreadAttachments, n as createSurveyAssistantThreadHandlers, o as formatSurveyAssistantStreamError, p as createSurveyAssistantTurnStream, r as SurveyAssistantAuthorizationError, s as getSurveyAssistantReplayableDocuments, t as createMastraMemoryThreadRepository, u as registerSurveyAssistantThreadAttachments } from "./memory-thread-repository-
|
|
4
|
+
import { a as describeSurveyAssistantStreamError, c as loadSurveyAssistantDocuments, d as removeHistoricalSurveyAssistantAttachments, f as replaceCurrentSurveyAssistantAttachmentsWithReferences, i as createSurveyAssistantChatHandler, l as loadSurveyAssistantThreadAttachments, n as createSurveyAssistantThreadHandlers, o as formatSurveyAssistantStreamError, p as createSurveyAssistantTurnStream, r as SurveyAssistantAuthorizationError, s as getSurveyAssistantReplayableDocuments, t as createMastraMemoryThreadRepository, u as registerSurveyAssistantThreadAttachments } from "./memory-thread-repository-CvYZwni6.mjs";
|
|
5
5
|
import { i as surveyAuthoringReferences, r as surveyAuthoringReferenceTopics } from "./authoring-references-yyYC4Ydi.mjs";
|
|
6
6
|
//#region src/server/survey-lifecycle.ts
|
|
7
7
|
const SURVEY_ASSISTANT_SURVEY_ID_METADATA_KEY = "surveyId";
|
|
@@ -152,6 +152,9 @@ const createSurveyAssistantPostgresRuntime = ({ ensureObservationalMemory, maxSt
|
|
|
152
152
|
initialization ??= initializeSurveyAssistantPostgresStorage(storage, {
|
|
153
153
|
ensureObservationalMemory,
|
|
154
154
|
schemaName
|
|
155
|
+
}).catch((error) => {
|
|
156
|
+
initialization = void 0;
|
|
157
|
+
throw error;
|
|
155
158
|
});
|
|
156
159
|
return initialization;
|
|
157
160
|
};
|
|
@@ -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"}
|