@case-framework/survey-assistant 0.7.0 → 0.9.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 +58 -3
- package/dist/{attachments-B0hg3vpT.mjs → attachments-BuNni5vB.mjs} +1 -1
- package/dist/{attachments-B0hg3vpT.mjs.map → attachments-BuNni5vB.mjs.map} +1 -1
- package/dist/{authoring-references-BJQ_1nMX.mjs → authoring-references-CmwLc_C8.mjs} +49 -32
- package/dist/authoring-references-CmwLc_C8.mjs.map +1 -0
- package/dist/capabilities-D55dq-fO.mjs +582 -0
- package/dist/capabilities-D55dq-fO.mjs.map +1 -0
- package/dist/capabilities-default.d.mts +5 -12
- package/dist/capabilities-default.d.mts.map +1 -1
- package/dist/capabilities-default.mjs +2 -411
- package/dist/capabilities-z95e1mti.d.mts +117 -0
- package/dist/capabilities-z95e1mti.d.mts.map +1 -0
- package/dist/{constants-0UHGFcRJ.mjs → constants-Ct-vv9cu.mjs} +1 -1
- package/dist/{constants-0UHGFcRJ.mjs.map → constants-Ct-vv9cu.mjs.map} +1 -1
- package/dist/{constants-Be91Gay9.d.mts → constants-HL_klgJl.d.mts} +7 -28
- package/dist/constants-HL_klgJl.d.mts.map +1 -0
- package/dist/{controller-proxy-BH05e-C2.mjs → controller-proxy-BQ1YsVxJ.mjs} +12 -21
- package/dist/controller-proxy-BQ1YsVxJ.mjs.map +1 -0
- package/dist/controller-proxy-Cmzdr9tV.d.mts +65 -0
- package/dist/controller-proxy-Cmzdr9tV.d.mts.map +1 -0
- package/dist/default-D22AKTqE.mjs +233 -0
- package/dist/default-D22AKTqE.mjs.map +1 -0
- package/dist/{digest-SJmoYVaK.d.mts → digest-FnTTDBq2.d.mts} +2 -3
- package/dist/digest-FnTTDBq2.d.mts.map +1 -0
- package/dist/digest.d.mts +1 -1
- package/dist/digest.mjs.map +1 -1
- package/dist/engine-D950TfvC.mjs +3098 -0
- package/dist/engine-D950TfvC.mjs.map +1 -0
- package/dist/engine.d.mts +4 -3
- package/dist/engine.mjs +3 -3
- package/dist/{fair-guidance-CRYCRxQm.mjs → fair-guidance-BmO4PswW.mjs} +1 -1
- package/dist/{fair-guidance-CRYCRxQm.mjs.map → fair-guidance-BmO4PswW.mjs.map} +1 -1
- package/dist/{index-l_EK4yK7.d.mts → index-B8TLBd1G.d.mts} +18 -72
- package/dist/index-B8TLBd1G.d.mts.map +1 -0
- package/dist/index-CaX3hZmr.d.mts +23813 -0
- package/dist/index-CaX3hZmr.d.mts.map +1 -0
- package/dist/{index-x0qprHgK.d.mts → index-CeUlGkoU.d.mts} +58 -28
- package/dist/index-CeUlGkoU.d.mts.map +1 -0
- package/dist/{index-nhrgbgO5.d.mts → index-DYHdvSE8.d.mts} +347 -88
- package/dist/index-DYHdvSE8.d.mts.map +1 -0
- package/dist/lifecycle-DFzxVxpq.d.mts +54346 -0
- package/dist/lifecycle-DFzxVxpq.d.mts.map +1 -0
- package/dist/{memory-thread-repository-KWHQWFEW.mjs → memory-thread-repository-DmLadygY.mjs} +60 -30
- package/dist/memory-thread-repository-DmLadygY.mjs.map +1 -0
- package/dist/protocol-BQ7uIDYT.mjs +569 -0
- package/dist/protocol-BQ7uIDYT.mjs.map +1 -0
- package/dist/protocol.d.mts +4 -4
- package/dist/protocol.mjs +4 -3
- package/dist/{react-B3ybjJ-X.mjs → react-DybJ5pWw.mjs} +159 -46
- package/dist/react-DybJ5pWw.mjs.map +1 -0
- package/dist/react-integration.d.mts +2 -2
- package/dist/react-integration.mjs +2 -2
- package/dist/react.d.mts +3 -3
- package/dist/react.mjs +3 -3
- package/dist/references/assistant-operations.md +224 -180
- package/dist/references/core-rules.md +6 -3
- package/dist/references/element-types.md +189 -0
- package/dist/references/expressions.md +307 -168
- package/dist/references/fair-by-design.md +9 -9
- package/dist/references/follow-ups.md +151 -0
- package/dist/references/localization.md +26 -12
- package/dist/references/response-variables.md +38 -0
- package/dist/references/rich-text-content.md +22 -43
- package/dist/references/source-material-surveys.md +20 -24
- package/dist/references/survey-data-model.md +36 -102
- package/dist/{request-context-CG4SWijt.mjs → request-context-KVh8VjgH.mjs} +4 -10
- package/dist/request-context-KVh8VjgH.mjs.map +1 -0
- package/dist/{request-guardrails-TmgQtqp4.mjs → request-guardrails-C0ugBOp0.mjs} +6 -5
- package/dist/request-guardrails-C0ugBOp0.mjs.map +1 -0
- package/dist/server-agent.d.mts +62 -43
- package/dist/server-agent.d.mts.map +1 -1
- package/dist/server-agent.mjs +73 -40
- package/dist/server-agent.mjs.map +1 -1
- package/dist/server-runtime.d.mts +24 -42
- package/dist/server-runtime.d.mts.map +1 -1
- package/dist/server-runtime.mjs +12 -12
- package/dist/server-runtime.mjs.map +1 -1
- package/dist/server-tasks.d.mts +2 -2
- package/dist/server-tasks.mjs +2 -313
- package/dist/server-tools.d.mts +1 -1
- package/dist/server-tools.mjs +1 -1
- package/dist/server.d.mts +14 -36
- package/dist/server.d.mts.map +1 -1
- package/dist/server.mjs +5 -5
- package/dist/server.mjs.map +1 -1
- package/dist/storage-postgres.d.mts +9 -25
- package/dist/storage-postgres.d.mts.map +1 -1
- package/dist/storage-postgres.mjs +5 -4
- package/dist/storage-postgres.mjs.map +1 -1
- package/dist/tasks-Coh5N027.mjs +397 -0
- package/dist/tasks-Coh5N027.mjs.map +1 -0
- package/dist/{tasks-CYqrcaRO.d.mts → tasks-wb9M-bak.d.mts} +25 -41
- package/dist/tasks-wb9M-bak.d.mts.map +1 -0
- package/dist/thread-documents-DrHbaXqP.d.mts +119 -0
- package/dist/thread-documents-DrHbaXqP.d.mts.map +1 -0
- package/dist/{thread-handlers-DBAaU7BA.d.mts → thread-handlers-C3Iya92v.d.mts} +9 -40
- package/dist/thread-handlers-C3Iya92v.d.mts.map +1 -0
- package/dist/{tools-BvSovehT.mjs → tools-D0KBDolR.mjs} +677 -459
- package/dist/tools-D0KBDolR.mjs.map +1 -0
- package/dist/turn-survey-draft-B34lggSG.d.mts +185 -0
- package/dist/turn-survey-draft-B34lggSG.d.mts.map +1 -0
- package/dist/ui.css +1 -1
- package/dist/ui.d.mts +15 -54
- package/dist/ui.d.mts.map +1 -1
- package/dist/ui.mjs +203 -156
- package/dist/ui.mjs.map +1 -1
- package/docs/integration.md +11 -1
- package/package.json +41 -36
- package/dist/authoring-references-BJQ_1nMX.mjs.map +0 -1
- package/dist/capabilities-1KNnNO1_.mjs +0 -73
- package/dist/capabilities-1KNnNO1_.mjs.map +0 -1
- package/dist/capabilities-DVTfogjv.d.mts +0 -193
- package/dist/capabilities-DVTfogjv.d.mts.map +0 -1
- package/dist/capabilities-default.mjs.map +0 -1
- package/dist/constants-Be91Gay9.d.mts.map +0 -1
- package/dist/controller-proxy-BH05e-C2.mjs.map +0 -1
- package/dist/controller-proxy-Bd0ZHBPF.d.mts +0 -85
- package/dist/controller-proxy-Bd0ZHBPF.d.mts.map +0 -1
- package/dist/digest-SJmoYVaK.d.mts.map +0 -1
- package/dist/engine-Bo85Oyj0.mjs +0 -6723
- package/dist/engine-Bo85Oyj0.mjs.map +0 -1
- package/dist/index-Tnqv-yKW.d.mts +0 -777
- package/dist/index-Tnqv-yKW.d.mts.map +0 -1
- package/dist/index-l_EK4yK7.d.mts.map +0 -1
- package/dist/index-nhrgbgO5.d.mts.map +0 -1
- package/dist/index-x0qprHgK.d.mts.map +0 -1
- package/dist/lifecycle-Bx0aq_4S.d.mts +0 -529
- package/dist/lifecycle-Bx0aq_4S.d.mts.map +0 -1
- package/dist/memory-thread-repository-KWHQWFEW.mjs.map +0 -1
- package/dist/protocol-BhzQbx81.mjs +0 -1173
- package/dist/protocol-BhzQbx81.mjs.map +0 -1
- package/dist/react-B3ybjJ-X.mjs.map +0 -1
- package/dist/references/embedded-forms.md +0 -126
- package/dist/references/item-types.md +0 -407
- package/dist/request-context-CG4SWijt.mjs.map +0 -1
- package/dist/request-guardrails-TmgQtqp4.mjs.map +0 -1
- package/dist/server-tasks.mjs.map +0 -1
- package/dist/tasks-CYqrcaRO.d.mts.map +0 -1
- package/dist/thread-documents-rmd6nyX9.d.mts +0 -107
- package/dist/thread-documents-rmd6nyX9.d.mts.map +0 -1
- package/dist/thread-handlers-DBAaU7BA.d.mts.map +0 -1
- package/dist/tools-BvSovehT.mjs.map +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { t as SurveyAssistantModelCatalog } from "./index-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
1
|
+
import { t as SurveyAssistantModelCatalog } from "./index-DYHdvSE8.mjs";
|
|
2
|
+
import { _ as SurveyAssistantCapabilitySet } from "./turn-survey-draft-B34lggSG.mjs";
|
|
3
|
+
import "./index-CaX3hZmr.mjs";
|
|
4
|
+
import { C as SurveyAssistantRequestLimits, o as SurveyAssistantThreadDocumentRepository } from "./thread-documents-DrHbaXqP.mjs";
|
|
5
|
+
import { a as SurveyAssistantModelSelection } from "./constants-HL_klgJl.mjs";
|
|
5
6
|
import { SurveyAssistantObservationalMemoryOptions, createSurveyAssistantAgent } from "./server-agent.mjs";
|
|
6
|
-
import { d as SurveyAssistantChatHandlerOptions,
|
|
7
|
-
import { c as createSurveyAssistantTaskAgent, n as CreateSurveyAssistantTaskHandlerOptions, s as SurveyAssistantTaskModelResolutionInput } from "./tasks-
|
|
7
|
+
import { d as SurveyAssistantChatHandlerOptions, l as SurveyAssistantAuthorize, p as SurveyAssistantResolveModel, t as CreateSurveyAssistantThreadHandlersOptions } from "./thread-handlers-C3Iya92v.mjs";
|
|
8
|
+
import { c as createSurveyAssistantTaskAgent, n as CreateSurveyAssistantTaskHandlerOptions, s as SurveyAssistantTaskModelResolutionInput } from "./tasks-wb9M-bak.mjs";
|
|
8
9
|
import { z } from "zod";
|
|
9
10
|
import { AgentExecutionOptions } from "@mastra/core/agent";
|
|
10
11
|
import { AzureOpenAIGatewayConfig, MastraModelGatewayInterface } from "@mastra/core/llm";
|
|
11
12
|
import { Mastra } from "@mastra/core/mastra";
|
|
12
|
-
|
|
13
13
|
//#region src/server/runtime-config.d.ts
|
|
14
14
|
type SurveyAssistantProvider = "azure-openai" | "lmstudio" | "mistral" | "openai";
|
|
15
15
|
type SurveyAssistantProviderOptionsKey = "azure" | "lmstudio" | "mistral" | "openai";
|
|
@@ -59,7 +59,8 @@ interface SurveyAssistantRuntimeConfig {
|
|
|
59
59
|
providerApiKey?: string;
|
|
60
60
|
requestLimits: Pick<SurveyAssistantRequestLimits, "maxAttachmentBytes" | "maxAttachments" | "maxRequestBytes" | "maxTextPartChars" | "maxTotalAttachmentBytes">;
|
|
61
61
|
supportBundle: {
|
|
62
|
-
/** Whether the package UI exposes support-bundle export actions. */
|
|
62
|
+
/** Whether the package UI exposes support-bundle export actions. */
|
|
63
|
+
enabled: boolean;
|
|
63
64
|
};
|
|
64
65
|
readinessError: string | null;
|
|
65
66
|
/**
|
|
@@ -90,7 +91,7 @@ interface ParseSurveyAssistantEnvironmentOptions {
|
|
|
90
91
|
requireStorage?: boolean;
|
|
91
92
|
}
|
|
92
93
|
type Environment = Record<string, string | undefined>;
|
|
93
|
-
declare const surveyAssistantConfigurationDocumentSchema: z.ZodObject<{
|
|
94
|
+
export declare const surveyAssistantConfigurationDocumentSchema: z.ZodObject<{
|
|
94
95
|
version: z.ZodLiteral<1>;
|
|
95
96
|
activeProvider: z.ZodString;
|
|
96
97
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -410,22 +411,12 @@ declare const surveyAssistantConfigurationDocumentSchema: z.ZodObject<{
|
|
|
410
411
|
}, z.core.$strict>>;
|
|
411
412
|
}, z.core.$strict>;
|
|
412
413
|
type SurveyAssistantConfigurationDocument = z.infer<typeof surveyAssistantConfigurationDocumentSchema>;
|
|
413
|
-
declare const resolveSurveyAssistantProviderOptionsKey: (provider: SurveyAssistantProvider) => SurveyAssistantProviderOptionsKey;
|
|
414
|
-
declare const parseSurveyAssistantConfigurationDocument: (input: unknown, env: Environment, {
|
|
415
|
-
|
|
416
|
-
requireStorage
|
|
417
|
-
}?: Pick<ParseSurveyAssistantEnvironmentOptions, "requireExperimentalIdentityOptIn" | "requireStorage">) => SurveyAssistantRuntimeConfig;
|
|
418
|
-
declare const parseSurveyAssistantEnvironment: (env: Environment, {
|
|
419
|
-
defaultLmStudioModel,
|
|
420
|
-
defaultMistralModel,
|
|
421
|
-
defaultOpenAIModel,
|
|
422
|
-
defaultProvider,
|
|
423
|
-
requireExperimentalIdentityOptIn,
|
|
424
|
-
requireStorage
|
|
425
|
-
}?: ParseSurveyAssistantEnvironmentOptions) => SurveyAssistantRuntimeConfig;
|
|
414
|
+
export declare const resolveSurveyAssistantProviderOptionsKey: (provider: SurveyAssistantProvider) => SurveyAssistantProviderOptionsKey;
|
|
415
|
+
export declare const parseSurveyAssistantConfigurationDocument: (input: unknown, env: Environment, { requireExperimentalIdentityOptIn, requireStorage }?: Pick<ParseSurveyAssistantEnvironmentOptions, "requireExperimentalIdentityOptIn" | "requireStorage">) => SurveyAssistantRuntimeConfig;
|
|
416
|
+
export declare const parseSurveyAssistantEnvironment: (env: Environment, { defaultLmStudioModel, defaultMistralModel, defaultOpenAIModel, defaultProvider, requireExperimentalIdentityOptIn, requireStorage }?: ParseSurveyAssistantEnvironmentOptions) => SurveyAssistantRuntimeConfig;
|
|
426
417
|
//#endregion
|
|
427
418
|
//#region src/server/runtime.d.ts
|
|
428
|
-
interface SurveyAssistantModelRouter {
|
|
419
|
+
export interface SurveyAssistantModelRouter {
|
|
429
420
|
defaultModel: SurveyAssistantModelSelection["model"];
|
|
430
421
|
gateways?: Record<string, MastraModelGatewayInterface>;
|
|
431
422
|
getCatalog(options?: {
|
|
@@ -438,16 +429,16 @@ interface SurveyAssistantModelRouter {
|
|
|
438
429
|
resolveTaskModel(input: SurveyAssistantTaskModelResolutionInput): ReturnType<SurveyAssistantResolveModel>;
|
|
439
430
|
taskModel?: SurveyAssistantModelSelection["model"];
|
|
440
431
|
}
|
|
441
|
-
declare const createSurveyAssistantModelRouter: (config: SurveyAssistantRuntimeConfig) => SurveyAssistantModelRouter;
|
|
442
|
-
interface SurveyAssistantRuntimeComponents {
|
|
432
|
+
export declare const createSurveyAssistantModelRouter: (config: SurveyAssistantRuntimeConfig) => SurveyAssistantModelRouter;
|
|
433
|
+
export interface SurveyAssistantRuntimeComponents {
|
|
443
434
|
agents: Record<string, ReturnType<typeof createSurveyAssistantAgent> | ReturnType<typeof createSurveyAssistantTaskAgent>>;
|
|
444
435
|
gateways?: Record<string, MastraModelGatewayInterface>;
|
|
445
436
|
modelRouter: SurveyAssistantModelRouter;
|
|
446
437
|
}
|
|
447
|
-
declare const createSurveyAssistantRuntimeComponents: (config: SurveyAssistantRuntimeConfig) => SurveyAssistantRuntimeComponents;
|
|
438
|
+
export declare const createSurveyAssistantRuntimeComponents: (config: SurveyAssistantRuntimeConfig) => SurveyAssistantRuntimeComponents;
|
|
448
439
|
type ChatHandlerOverrides = Partial<Omit<SurveyAssistantChatHandlerOptions, "authorize" | "mastra" | "providerName" | "providerOptions" | "resolveModel">>;
|
|
449
440
|
type TaskHandlerOverrides = Partial<Omit<CreateSurveyAssistantTaskHandlerOptions, "agent" | "authorize" | "providerOptions" | "resolveModel">>;
|
|
450
|
-
interface CreateSurveyAssistantRuntimeHandlersOptions {
|
|
441
|
+
export interface CreateSurveyAssistantRuntimeHandlersOptions {
|
|
451
442
|
authorize: {
|
|
452
443
|
chat: SurveyAssistantAuthorize;
|
|
453
444
|
model?: (request: Request) => unknown | Promise<unknown>;
|
|
@@ -462,17 +453,8 @@ interface CreateSurveyAssistantRuntimeHandlersOptions {
|
|
|
462
453
|
threads?: Pick<CreateSurveyAssistantThreadHandlersOptions, "onError">;
|
|
463
454
|
threadDocuments?: SurveyAssistantThreadDocumentRepository;
|
|
464
455
|
}
|
|
465
|
-
type CreateConfiguredSurveyAssistantRuntimeHandlersOptions = Omit<CreateSurveyAssistantRuntimeHandlersOptions, "config" | "modelRouter">;
|
|
466
|
-
declare const createSurveyAssistantRuntimeHandlers: ({
|
|
467
|
-
authorize,
|
|
468
|
-
chat,
|
|
469
|
-
config,
|
|
470
|
-
mastra,
|
|
471
|
-
modelRouter,
|
|
472
|
-
task,
|
|
473
|
-
threads: threadOptions,
|
|
474
|
-
threadDocuments
|
|
475
|
-
}: CreateSurveyAssistantRuntimeHandlersOptions) => {
|
|
456
|
+
export type CreateConfiguredSurveyAssistantRuntimeHandlersOptions = Omit<CreateSurveyAssistantRuntimeHandlersOptions, "config" | "modelRouter">;
|
|
457
|
+
export declare const createSurveyAssistantRuntimeHandlers: ({ authorize, chat, config, mastra, modelRouter, task, threads: threadOptions, threadDocuments }: CreateSurveyAssistantRuntimeHandlersOptions) => {
|
|
476
458
|
chat: (request: Request) => Promise<Response>;
|
|
477
459
|
models: (request: Request) => Promise<Response>;
|
|
478
460
|
task: (request: Request) => Promise<Response>;
|
|
@@ -484,11 +466,11 @@ declare const createSurveyAssistantRuntimeHandlers: ({
|
|
|
484
466
|
update: (request: Request, threadId: string) => Promise<Response>;
|
|
485
467
|
};
|
|
486
468
|
};
|
|
487
|
-
interface SurveyAssistantRuntime extends SurveyAssistantRuntimeComponents {
|
|
469
|
+
export interface SurveyAssistantRuntime extends SurveyAssistantRuntimeComponents {
|
|
488
470
|
config: SurveyAssistantRuntimeConfig;
|
|
489
471
|
createHandlers(options: CreateConfiguredSurveyAssistantRuntimeHandlersOptions): ReturnType<typeof createSurveyAssistantRuntimeHandlers>;
|
|
490
472
|
}
|
|
491
|
-
interface CreateSurveyAssistantRuntimeOptions {
|
|
473
|
+
export interface CreateSurveyAssistantRuntimeOptions {
|
|
492
474
|
/** Trusted server-side capabilities for custom registry item types. */
|
|
493
475
|
trustedCapabilities?: SurveyAssistantCapabilitySet;
|
|
494
476
|
}
|
|
@@ -497,7 +479,7 @@ interface CreateSurveyAssistantRuntimeOptions {
|
|
|
497
479
|
* Register `agents` and `gateways` in the host's standard Mastra instance, then
|
|
498
480
|
* call `createHandlers` with that instance and host authorization policy.
|
|
499
481
|
*/
|
|
500
|
-
declare const createSurveyAssistantRuntime: (config: SurveyAssistantRuntimeConfig, runtimeOptions?: CreateSurveyAssistantRuntimeOptions) => SurveyAssistantRuntime;
|
|
482
|
+
export declare const createSurveyAssistantRuntime: (config: SurveyAssistantRuntimeConfig, runtimeOptions?: CreateSurveyAssistantRuntimeOptions) => SurveyAssistantRuntime;
|
|
501
483
|
//#endregion
|
|
502
|
-
export {
|
|
484
|
+
export type { ParseSurveyAssistantEnvironmentOptions, SurveyAssistantAzureConfig, SurveyAssistantConfigurationDocument, SurveyAssistantConfiguredModel, SurveyAssistantExecutionConfig, SurveyAssistantLmStudioConfig, SurveyAssistantModelRole, SurveyAssistantProvider, SurveyAssistantProviderOptionsKey, SurveyAssistantRuntimeConfig };
|
|
503
485
|
//# sourceMappingURL=server-runtime.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-runtime.d.mts","names":[],"sources":["../src/server/runtime-config.ts","../src/server/runtime.ts"],"mappings":";;;;;;;;;;;;;KAaY
|
|
1
|
+
{"version":3,"file":"server-runtime.d.mts","names":[],"sources":["../src/server/runtime-config.ts","../src/server/runtime.ts"],"mappings":";;;;;;;;;;;;;KAaY;KACA;KAEA;UAEK;EACf;EACA;EACA;EACA,kBAAkB;;UAGH;EACf;EACA;EACA;EACA,aAAa;EACb;;UAGe;EACf;EACA;;UAGe;EACf;EACA;EACA;;EAEA;EACA;EACA,kBAAkB;EAClB;;UAGe;EACf,QAAQ;EACR,WAAW;;EAEX;EACA;;EAEA;EACA;;EAEA,SAAS;EACT;EACA,qBAAqB;EACrB,UAAU;;EAEV;EACA,eAAe,KACb;EAOF;;IAEE;;EAEF;;;;;EAKA;EACA,WAAW;;UAGI;EACf;EACA;EACA;EACA,kBAAkB;;;;;;;;;;;;;EAalB;EACA;;KAGG,cAAc;qBAoFN,4CAA0C,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6C5C,EAAA,KAAA;KAEC,uCAAuC,EAAE,aAC5C;qBAkFI,2CACX,UAAU,4BACT;qBA4KU,4CACX,gBACA,KAAK,eACL,kCAAA,mBAGG,KACD,mGAGD;qBA+PU,kCACX,KAAK,eACL,sBAAA,qBAAA,oBAAA,iBAAA,kCAAA,mBAOG,2CACF;;;iBC/sBc;EACf,cAAc;EACd,WAAW,eAAe;EAC1B,WAAW;IAAY;MAAsB,QAAQ;EACrD,aAAa;EACb;EACA,kBAAkB;EAClB,cAAc;EACd,iBACE,OAAO,0CACN,WAAW;EACd,YAAY;;qBAGD,mCACX,QAAQ,iCACP;iBA2Jc;EACf,QAAQ,eAEJ,kBAAkB,8BAClB,kBAAkB;EAEtB,WAAW,eAAe;EAC1B,aAAa;;qBAGF,yCACX,QAAQ,iCACP;KAyBE,uBAAuB,QAC1B,KACE;KAIC,uBAAuB,QAC1B,KACE;iBAKa;EACf;IACE,MAAM;IACN,SAAS,SAAS,sBAAsB;IACxC,MAAM;IACN,QAAQ;;EAEV,OAAO;EACP,QAAQ;EACR,QAAQ,gBAAgB,SAAS,QAAQ;EACzC,aAAa;EACb,OAAO;EACP,UAAU,KAAK;EACf,kBAAkB;;YAGR,wDAAwD,KAClE;qBAOW,yCAAwC,WAAA,MAAA,QAAA,QAAA,aAAA,MAAA,SAAA,eAAA,mBASlD;;EAyD8B,SAAA,SAAA,YAAO,QAAA;;;;;;;;;;iBAwCvB,+BAA+B;EAC9C,QAAQ;EACR,eACE,SAAS,wDACR,kBAAkB;;iBAGN;;EAEf,sBAAsB;;;;;;;qBAQX,+BACX,QAAQ,8BACR,iBAAgB,wCACf"}
|
package/dist/server-runtime.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { n as SURVEY_ASSISTANT_TASK_AGENT_ID, t as SURVEY_ASSISTANT_AGENT_ID } from "./constants-
|
|
2
|
-
import { n as
|
|
3
|
-
import {
|
|
4
|
-
import { t as SURVEY_ASSISTANT_TOOL_IDS } from "./tools-
|
|
1
|
+
import { n as SURVEY_ASSISTANT_TASK_AGENT_ID, t as SURVEY_ASSISTANT_AGENT_ID } from "./constants-Ct-vv9cu.mjs";
|
|
2
|
+
import { i as createSurveyAssistantChatHandler, n as createSurveyAssistantThreadHandlers, r as SurveyAssistantAuthorizationError, t as createMastraMemoryThreadRepository } from "./memory-thread-repository-DmLadygY.mjs";
|
|
3
|
+
import { n as SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS } from "./request-guardrails-C0ugBOp0.mjs";
|
|
4
|
+
import { t as SURVEY_ASSISTANT_TOOL_IDS } from "./tools-D0KBDolR.mjs";
|
|
5
5
|
import { SURVEY_ASSISTANT_OBSERVATIONAL_MEMORY_DEFAULTS, createSurveyAssistantAgent, createSurveyAssistantObservationalMemoryOptions } from "./server-agent.mjs";
|
|
6
|
-
import {
|
|
6
|
+
import { n as createSurveyAssistantTaskHandler, t as createSurveyAssistantTaskAgent } from "./tasks-Coh5N027.mjs";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { AzureOpenAIGateway } from "@mastra/core/llm";
|
|
9
9
|
//#region src/server/runtime-config.ts
|
|
@@ -120,10 +120,10 @@ const surveyAssistantConfigurationDocumentSchema = z.object({
|
|
|
120
120
|
}).strict();
|
|
121
121
|
const DEFAULT_MAX_STEPS = 48;
|
|
122
122
|
const HARD_MAX_STEPS = 64;
|
|
123
|
-
const DEFAULT_FIRST_RESPONSE_TIMEOUT_MS =
|
|
124
|
-
const DEFAULT_IDLE_TIMEOUT_MS =
|
|
125
|
-
const DEFAULT_MAX_DURATION_MS =
|
|
126
|
-
const DEFAULT_CATALOG_TTL_MS =
|
|
123
|
+
const DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = 9e5;
|
|
124
|
+
const DEFAULT_IDLE_TIMEOUT_MS = 3e5;
|
|
125
|
+
const DEFAULT_MAX_DURATION_MS = 36e5;
|
|
126
|
+
const DEFAULT_CATALOG_TTL_MS = 3e5;
|
|
127
127
|
const getValue = (env, name) => {
|
|
128
128
|
return env[name]?.trim() || void 0;
|
|
129
129
|
};
|
|
@@ -461,7 +461,7 @@ const parseSurveyAssistantEnvironment = (env, { defaultLmStudioModel, defaultMis
|
|
|
461
461
|
defaultModelId,
|
|
462
462
|
memoryModelId,
|
|
463
463
|
modelIds,
|
|
464
|
-
models: [
|
|
464
|
+
models: [.../* @__PURE__ */ new Set([
|
|
465
465
|
...modelIds,
|
|
466
466
|
...taskModelId ? [taskModelId] : [],
|
|
467
467
|
memoryModelId
|
|
@@ -543,7 +543,7 @@ const createSurveyAssistantModelRouter = (config) => {
|
|
|
543
543
|
const configuredMemoryModel = toProviderModel(config.memoryModelId, "memoryModelId");
|
|
544
544
|
if (JSON.stringify(config.observationalMemory.model) !== JSON.stringify(configuredMemoryModel) || config.observationalMemory.observation?.model !== void 0 || config.observationalMemory.reflection?.model !== void 0) throw new Error("The standard runtime requires observationalMemory to use memoryModelId for both observation and reflection. Use the low-level Agent factory for custom memory model routing.");
|
|
545
545
|
}
|
|
546
|
-
const deploymentIds = [
|
|
546
|
+
const deploymentIds = [.../* @__PURE__ */ new Set([
|
|
547
547
|
...chatModelIds.map((id) => getConfiguredModel(id).upstreamModelId),
|
|
548
548
|
...config.taskModelId ? [getConfiguredModel(config.taskModelId).upstreamModelId] : [],
|
|
549
549
|
getConfiguredModel(config.memoryModelId).upstreamModelId
|
|
@@ -563,7 +563,7 @@ const createSurveyAssistantModelRouter = (config) => {
|
|
|
563
563
|
const providers = await azureGateway.fetchProviders();
|
|
564
564
|
const configuredUpstreamIds = new Set(chatModelIds.map((id) => getConfiguredModel(id).upstreamModelId));
|
|
565
565
|
const discoveredIds = (providers["azure-openai"]?.models ?? []).filter((id) => !configuredUpstreamIds.has(id));
|
|
566
|
-
ids = [
|
|
566
|
+
ids = [.../* @__PURE__ */ new Set([...chatModelIds, ...discoveredIds])];
|
|
567
567
|
} catch {}
|
|
568
568
|
const value = {
|
|
569
569
|
defaultModelId: config.defaultModelId,
|
|
@@ -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 supportBundle: {\n /** Whether the package UI exposes support-bundle export actions. */\n enabled: boolean;\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 supportBundle: z\n .object({\n enabled: z.boolean().optional(),\n })\n .strict()\n .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 resolveSupportBundleEnabled = (env: Environment, configured?: boolean) =>\n getBoolean(env, \"SURVEY_ASSISTANT_SUPPORT_BUNDLE_ENABLED\", configured ?? true);\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 supportBundle: { enabled: false },\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 supportBundle: {\n enabled: resolveSupportBundleEnabled(env, document.supportBundle?.enabled),\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 supportBundle: { enabled: resolveSupportBundleEnabled(env) },\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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"}
|
|
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 supportBundle: {\n /** Whether the package UI exposes support-bundle export actions. */\n enabled: boolean;\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 supportBundle: z\n .object({\n enabled: z.boolean().optional(),\n })\n .strict()\n .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 resolveSupportBundleEnabled = (env: Environment, configured?: boolean) =>\n getBoolean(env, \"SURVEY_ASSISTANT_SUPPORT_BUNDLE_ENABLED\", configured ?? true);\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 supportBundle: { enabled: false },\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 supportBundle: {\n enabled: resolveSupportBundleEnabled(env, document.supportBundle?.enabled),\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 supportBundle: { enabled: resolveSupportBundleEnabled(env) },\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
|
|
2
|
-
export { CreateSurveyAssistantTaskAgentOptions, CreateSurveyAssistantTaskHandlerOptions, RunSurveyAssistantBuiltInTaskOptions, RunSurveyAssistantTaskOptions, SurveyAssistantTaskAuthorizationInput, SurveyAssistantTaskAuthorizedIdentity, SurveyAssistantTaskModelResolutionInput, createSurveyAssistantTaskAgent, createSurveyAssistantTaskHandler,
|
|
1
|
+
import { a as SurveyAssistantTaskAuthorizationInput, c as createSurveyAssistantTaskAgent, d as runSurveyAssistantSuggestResponseNameTask, f as runSurveyAssistantSuggestResponseSettingsTask, i as RunSurveyAssistantTaskOptions, l as createSurveyAssistantTaskHandler, m as runSurveyAssistantTranslateContentTask, n as CreateSurveyAssistantTaskHandlerOptions, o as SurveyAssistantTaskAuthorizedIdentity, p as runSurveyAssistantTask, r as RunSurveyAssistantBuiltInTaskOptions, s as SurveyAssistantTaskModelResolutionInput, t as CreateSurveyAssistantTaskAgentOptions, u as runSurveyAssistantSuggestItemLabelTask } from "./tasks-wb9M-bak.mjs";
|
|
2
|
+
export { CreateSurveyAssistantTaskAgentOptions, CreateSurveyAssistantTaskHandlerOptions, RunSurveyAssistantBuiltInTaskOptions, RunSurveyAssistantTaskOptions, SurveyAssistantTaskAuthorizationInput, SurveyAssistantTaskAuthorizedIdentity, SurveyAssistantTaskModelResolutionInput, createSurveyAssistantTaskAgent, createSurveyAssistantTaskHandler, runSurveyAssistantSuggestItemLabelTask, runSurveyAssistantSuggestResponseNameTask, runSurveyAssistantSuggestResponseSettingsTask, runSurveyAssistantTask, runSurveyAssistantTranslateContentTask };
|