@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.
Files changed (142) hide show
  1. package/README.md +58 -3
  2. package/dist/{attachments-B0hg3vpT.mjs → attachments-BuNni5vB.mjs} +1 -1
  3. package/dist/{attachments-B0hg3vpT.mjs.map → attachments-BuNni5vB.mjs.map} +1 -1
  4. package/dist/{authoring-references-BJQ_1nMX.mjs → authoring-references-CmwLc_C8.mjs} +49 -32
  5. package/dist/authoring-references-CmwLc_C8.mjs.map +1 -0
  6. package/dist/capabilities-D55dq-fO.mjs +582 -0
  7. package/dist/capabilities-D55dq-fO.mjs.map +1 -0
  8. package/dist/capabilities-default.d.mts +5 -12
  9. package/dist/capabilities-default.d.mts.map +1 -1
  10. package/dist/capabilities-default.mjs +2 -411
  11. package/dist/capabilities-z95e1mti.d.mts +117 -0
  12. package/dist/capabilities-z95e1mti.d.mts.map +1 -0
  13. package/dist/{constants-0UHGFcRJ.mjs → constants-Ct-vv9cu.mjs} +1 -1
  14. package/dist/{constants-0UHGFcRJ.mjs.map → constants-Ct-vv9cu.mjs.map} +1 -1
  15. package/dist/{constants-Be91Gay9.d.mts → constants-HL_klgJl.d.mts} +7 -28
  16. package/dist/constants-HL_klgJl.d.mts.map +1 -0
  17. package/dist/{controller-proxy-BH05e-C2.mjs → controller-proxy-BQ1YsVxJ.mjs} +12 -21
  18. package/dist/controller-proxy-BQ1YsVxJ.mjs.map +1 -0
  19. package/dist/controller-proxy-Cmzdr9tV.d.mts +65 -0
  20. package/dist/controller-proxy-Cmzdr9tV.d.mts.map +1 -0
  21. package/dist/default-D22AKTqE.mjs +233 -0
  22. package/dist/default-D22AKTqE.mjs.map +1 -0
  23. package/dist/{digest-SJmoYVaK.d.mts → digest-FnTTDBq2.d.mts} +2 -3
  24. package/dist/digest-FnTTDBq2.d.mts.map +1 -0
  25. package/dist/digest.d.mts +1 -1
  26. package/dist/digest.mjs.map +1 -1
  27. package/dist/engine-D950TfvC.mjs +3098 -0
  28. package/dist/engine-D950TfvC.mjs.map +1 -0
  29. package/dist/engine.d.mts +4 -3
  30. package/dist/engine.mjs +3 -3
  31. package/dist/{fair-guidance-CRYCRxQm.mjs → fair-guidance-BmO4PswW.mjs} +1 -1
  32. package/dist/{fair-guidance-CRYCRxQm.mjs.map → fair-guidance-BmO4PswW.mjs.map} +1 -1
  33. package/dist/{index-l_EK4yK7.d.mts → index-B8TLBd1G.d.mts} +18 -72
  34. package/dist/index-B8TLBd1G.d.mts.map +1 -0
  35. package/dist/index-CaX3hZmr.d.mts +23813 -0
  36. package/dist/index-CaX3hZmr.d.mts.map +1 -0
  37. package/dist/{index-x0qprHgK.d.mts → index-CeUlGkoU.d.mts} +58 -28
  38. package/dist/index-CeUlGkoU.d.mts.map +1 -0
  39. package/dist/{index-nhrgbgO5.d.mts → index-DYHdvSE8.d.mts} +347 -88
  40. package/dist/index-DYHdvSE8.d.mts.map +1 -0
  41. package/dist/lifecycle-DFzxVxpq.d.mts +54346 -0
  42. package/dist/lifecycle-DFzxVxpq.d.mts.map +1 -0
  43. package/dist/{memory-thread-repository-KWHQWFEW.mjs → memory-thread-repository-DmLadygY.mjs} +60 -30
  44. package/dist/memory-thread-repository-DmLadygY.mjs.map +1 -0
  45. package/dist/protocol-BQ7uIDYT.mjs +569 -0
  46. package/dist/protocol-BQ7uIDYT.mjs.map +1 -0
  47. package/dist/protocol.d.mts +4 -4
  48. package/dist/protocol.mjs +4 -3
  49. package/dist/{react-B3ybjJ-X.mjs → react-DybJ5pWw.mjs} +159 -46
  50. package/dist/react-DybJ5pWw.mjs.map +1 -0
  51. package/dist/react-integration.d.mts +2 -2
  52. package/dist/react-integration.mjs +2 -2
  53. package/dist/react.d.mts +3 -3
  54. package/dist/react.mjs +3 -3
  55. package/dist/references/assistant-operations.md +224 -180
  56. package/dist/references/core-rules.md +6 -3
  57. package/dist/references/element-types.md +189 -0
  58. package/dist/references/expressions.md +307 -168
  59. package/dist/references/fair-by-design.md +9 -9
  60. package/dist/references/follow-ups.md +151 -0
  61. package/dist/references/localization.md +26 -12
  62. package/dist/references/response-variables.md +38 -0
  63. package/dist/references/rich-text-content.md +22 -43
  64. package/dist/references/source-material-surveys.md +20 -24
  65. package/dist/references/survey-data-model.md +36 -102
  66. package/dist/{request-context-CG4SWijt.mjs → request-context-KVh8VjgH.mjs} +4 -10
  67. package/dist/request-context-KVh8VjgH.mjs.map +1 -0
  68. package/dist/{request-guardrails-TmgQtqp4.mjs → request-guardrails-C0ugBOp0.mjs} +6 -5
  69. package/dist/request-guardrails-C0ugBOp0.mjs.map +1 -0
  70. package/dist/server-agent.d.mts +62 -43
  71. package/dist/server-agent.d.mts.map +1 -1
  72. package/dist/server-agent.mjs +73 -40
  73. package/dist/server-agent.mjs.map +1 -1
  74. package/dist/server-runtime.d.mts +24 -42
  75. package/dist/server-runtime.d.mts.map +1 -1
  76. package/dist/server-runtime.mjs +12 -12
  77. package/dist/server-runtime.mjs.map +1 -1
  78. package/dist/server-tasks.d.mts +2 -2
  79. package/dist/server-tasks.mjs +2 -313
  80. package/dist/server-tools.d.mts +1 -1
  81. package/dist/server-tools.mjs +1 -1
  82. package/dist/server.d.mts +14 -36
  83. package/dist/server.d.mts.map +1 -1
  84. package/dist/server.mjs +5 -5
  85. package/dist/server.mjs.map +1 -1
  86. package/dist/storage-postgres.d.mts +9 -25
  87. package/dist/storage-postgres.d.mts.map +1 -1
  88. package/dist/storage-postgres.mjs +5 -4
  89. package/dist/storage-postgres.mjs.map +1 -1
  90. package/dist/tasks-Coh5N027.mjs +397 -0
  91. package/dist/tasks-Coh5N027.mjs.map +1 -0
  92. package/dist/{tasks-CYqrcaRO.d.mts → tasks-wb9M-bak.d.mts} +25 -41
  93. package/dist/tasks-wb9M-bak.d.mts.map +1 -0
  94. package/dist/thread-documents-DrHbaXqP.d.mts +119 -0
  95. package/dist/thread-documents-DrHbaXqP.d.mts.map +1 -0
  96. package/dist/{thread-handlers-DBAaU7BA.d.mts → thread-handlers-C3Iya92v.d.mts} +9 -40
  97. package/dist/thread-handlers-C3Iya92v.d.mts.map +1 -0
  98. package/dist/{tools-BvSovehT.mjs → tools-D0KBDolR.mjs} +677 -459
  99. package/dist/tools-D0KBDolR.mjs.map +1 -0
  100. package/dist/turn-survey-draft-B34lggSG.d.mts +185 -0
  101. package/dist/turn-survey-draft-B34lggSG.d.mts.map +1 -0
  102. package/dist/ui.css +1 -1
  103. package/dist/ui.d.mts +15 -54
  104. package/dist/ui.d.mts.map +1 -1
  105. package/dist/ui.mjs +203 -156
  106. package/dist/ui.mjs.map +1 -1
  107. package/docs/integration.md +11 -1
  108. package/package.json +41 -36
  109. package/dist/authoring-references-BJQ_1nMX.mjs.map +0 -1
  110. package/dist/capabilities-1KNnNO1_.mjs +0 -73
  111. package/dist/capabilities-1KNnNO1_.mjs.map +0 -1
  112. package/dist/capabilities-DVTfogjv.d.mts +0 -193
  113. package/dist/capabilities-DVTfogjv.d.mts.map +0 -1
  114. package/dist/capabilities-default.mjs.map +0 -1
  115. package/dist/constants-Be91Gay9.d.mts.map +0 -1
  116. package/dist/controller-proxy-BH05e-C2.mjs.map +0 -1
  117. package/dist/controller-proxy-Bd0ZHBPF.d.mts +0 -85
  118. package/dist/controller-proxy-Bd0ZHBPF.d.mts.map +0 -1
  119. package/dist/digest-SJmoYVaK.d.mts.map +0 -1
  120. package/dist/engine-Bo85Oyj0.mjs +0 -6723
  121. package/dist/engine-Bo85Oyj0.mjs.map +0 -1
  122. package/dist/index-Tnqv-yKW.d.mts +0 -777
  123. package/dist/index-Tnqv-yKW.d.mts.map +0 -1
  124. package/dist/index-l_EK4yK7.d.mts.map +0 -1
  125. package/dist/index-nhrgbgO5.d.mts.map +0 -1
  126. package/dist/index-x0qprHgK.d.mts.map +0 -1
  127. package/dist/lifecycle-Bx0aq_4S.d.mts +0 -529
  128. package/dist/lifecycle-Bx0aq_4S.d.mts.map +0 -1
  129. package/dist/memory-thread-repository-KWHQWFEW.mjs.map +0 -1
  130. package/dist/protocol-BhzQbx81.mjs +0 -1173
  131. package/dist/protocol-BhzQbx81.mjs.map +0 -1
  132. package/dist/react-B3ybjJ-X.mjs.map +0 -1
  133. package/dist/references/embedded-forms.md +0 -126
  134. package/dist/references/item-types.md +0 -407
  135. package/dist/request-context-CG4SWijt.mjs.map +0 -1
  136. package/dist/request-guardrails-TmgQtqp4.mjs.map +0 -1
  137. package/dist/server-tasks.mjs.map +0 -1
  138. package/dist/tasks-CYqrcaRO.d.mts.map +0 -1
  139. package/dist/thread-documents-rmd6nyX9.d.mts +0 -107
  140. package/dist/thread-documents-rmd6nyX9.d.mts.map +0 -1
  141. package/dist/thread-handlers-DBAaU7BA.d.mts.map +0 -1
  142. package/dist/tools-BvSovehT.mjs.map +0 -1
@@ -1,15 +1,15 @@
1
- import { t as SurveyAssistantModelCatalog } from "./index-nhrgbgO5.mjs";
2
- import { qt as SurveyAssistantCapabilitySet } from "./index-Tnqv-yKW.mjs";
3
- import { a as SurveyAssistantThreadDocumentRepository } from "./thread-documents-rmd6nyX9.mjs";
4
- import { a as SurveyAssistantModelSelection } from "./constants-Be91Gay9.mjs";
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, k as SurveyAssistantRequestLimits, l as SurveyAssistantAuthorize, p as SurveyAssistantResolveModel, t as CreateSurveyAssistantThreadHandlersOptions } from "./thread-handlers-DBAaU7BA.mjs";
7
- import { c as createSurveyAssistantTaskAgent, n as CreateSurveyAssistantTaskHandlerOptions, s as SurveyAssistantTaskModelResolutionInput } from "./tasks-CYqrcaRO.mjs";
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. */enabled: boolean;
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
- requireExperimentalIdentityOptIn,
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 { CreateConfiguredSurveyAssistantRuntimeHandlersOptions, CreateSurveyAssistantRuntimeHandlersOptions, CreateSurveyAssistantRuntimeOptions, type ParseSurveyAssistantEnvironmentOptions, type SurveyAssistantAzureConfig, type SurveyAssistantConfigurationDocument, type SurveyAssistantConfiguredModel, type SurveyAssistantExecutionConfig, type SurveyAssistantLmStudioConfig, type SurveyAssistantModelRole, SurveyAssistantModelRouter, type SurveyAssistantProvider, type SurveyAssistantProviderOptionsKey, SurveyAssistantRuntime, SurveyAssistantRuntimeComponents, type SurveyAssistantRuntimeConfig, createSurveyAssistantModelRouter, createSurveyAssistantRuntime, createSurveyAssistantRuntimeComponents, createSurveyAssistantRuntimeHandlers, parseSurveyAssistantConfigurationDocument, parseSurveyAssistantEnvironment, resolveSurveyAssistantProviderOptionsKey, surveyAssistantConfigurationDocumentSchema };
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":"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"}
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"}
@@ -1,9 +1,9 @@
1
- import { n as SURVEY_ASSISTANT_TASK_AGENT_ID, t as SURVEY_ASSISTANT_AGENT_ID } from "./constants-0UHGFcRJ.mjs";
2
- import { n as SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS } from "./request-guardrails-TmgQtqp4.mjs";
3
- import { i as createSurveyAssistantChatHandler, n as createSurveyAssistantThreadHandlers, r as SurveyAssistantAuthorizationError, t as createMastraMemoryThreadRepository } from "./memory-thread-repository-KWHQWFEW.mjs";
4
- import { t as SURVEY_ASSISTANT_TOOL_IDS } from "./tools-BvSovehT.mjs";
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 { createSurveyAssistantTaskAgent, createSurveyAssistantTaskHandler } from "./server-tasks.mjs";
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 = 900 * 1e3;
124
- const DEFAULT_IDLE_TIMEOUT_MS = 300 * 1e3;
125
- const DEFAULT_MAX_DURATION_MS = 3600 * 1e3;
126
- const DEFAULT_CATALOG_TTL_MS = 300 * 1e3;
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: [...new Set([
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 = [...new Set([
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 = [...new Set([...chatModelIds, ...discoveredIds])];
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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"}
@@ -1,2 +1,2 @@
1
- import { a as SurveyAssistantTaskAuthorizationInput, c as createSurveyAssistantTaskAgent, d as runSurveyAssistantSuggestItemLabelTask, f as runSurveyAssistantTask, i as RunSurveyAssistantTaskOptions, l as createSurveyAssistantTaskHandler, n as CreateSurveyAssistantTaskHandlerOptions, o as SurveyAssistantTaskAuthorizedIdentity, p as runSurveyAssistantTranslateContentTask, r as RunSurveyAssistantBuiltInTaskOptions, s as SurveyAssistantTaskModelResolutionInput, t as CreateSurveyAssistantTaskAgentOptions, u as runSurveyAssistantSuggestItemKeyTask } from "./tasks-CYqrcaRO.mjs";
2
- export { CreateSurveyAssistantTaskAgentOptions, CreateSurveyAssistantTaskHandlerOptions, RunSurveyAssistantBuiltInTaskOptions, RunSurveyAssistantTaskOptions, SurveyAssistantTaskAuthorizationInput, SurveyAssistantTaskAuthorizedIdentity, SurveyAssistantTaskModelResolutionInput, createSurveyAssistantTaskAgent, createSurveyAssistantTaskHandler, runSurveyAssistantSuggestItemKeyTask, runSurveyAssistantSuggestItemLabelTask, runSurveyAssistantTask, runSurveyAssistantTranslateContentTask };
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 };