@case-framework/survey-assistant 0.6.0 → 0.8.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 (135) hide show
  1. package/README.md +67 -7
  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-CW38pYzK.mjs → authoring-references-DbuOKerg.mjs} +13 -4
  5. package/dist/authoring-references-DbuOKerg.mjs.map +1 -0
  6. package/dist/{capabilities-DVTfogjv.d.mts → capabilities-CmeeAjEc.d.mts} +3 -4
  7. package/dist/capabilities-CmeeAjEc.d.mts.map +1 -0
  8. package/dist/capabilities-DCMA71PP.mjs +58 -0
  9. package/dist/capabilities-DCMA71PP.mjs.map +1 -0
  10. package/dist/capabilities-default.d.mts +13 -12
  11. package/dist/capabilities-default.d.mts.map +1 -1
  12. package/dist/capabilities-default.mjs +2 -414
  13. package/dist/{constants-BMGTgfjv.d.mts → constants-B6HzpEsx.d.mts} +7 -28
  14. package/dist/constants-B6HzpEsx.d.mts.map +1 -0
  15. package/dist/{constants-0UHGFcRJ.mjs → constants-Ct-vv9cu.mjs} +1 -1
  16. package/dist/{constants-0UHGFcRJ.mjs.map → constants-Ct-vv9cu.mjs.map} +1 -1
  17. package/dist/controller-proxy-D7uQfm5f.d.mts +65 -0
  18. package/dist/controller-proxy-D7uQfm5f.d.mts.map +1 -0
  19. package/dist/{controller-proxy-DMTqer6T.mjs → controller-proxy-DEeFl9IA.mjs} +29 -26
  20. package/dist/controller-proxy-DEeFl9IA.mjs.map +1 -0
  21. package/dist/default-fhSon2RM.mjs +760 -0
  22. package/dist/default-fhSon2RM.mjs.map +1 -0
  23. package/dist/{digest-SJmoYVaK.d.mts → digest-C39WyAWG.d.mts} +2 -3
  24. package/dist/digest-C39WyAWG.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-CQwOAcwK.mjs → engine-nXoCWYpQ.mjs} +2821 -2018
  28. package/dist/engine-nXoCWYpQ.mjs.map +1 -0
  29. package/dist/engine.d.mts +3 -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-D6nqkz0O.d.mts → index-Ciq7vHIs.d.mts} +121 -197
  34. package/dist/index-Ciq7vHIs.d.mts.map +1 -0
  35. package/dist/{index-DvTqML-0.d.mts → index-D7wT6P3t.d.mts} +294 -63
  36. package/dist/index-D7wT6P3t.d.mts.map +1 -0
  37. package/dist/index-WB5kfnz0.d.mts +348 -0
  38. package/dist/index-WB5kfnz0.d.mts.map +1 -0
  39. package/dist/{index-B0lxsAzx.d.mts → index-r5riv4md.d.mts} +50 -29
  40. package/dist/index-r5riv4md.d.mts.map +1 -0
  41. package/dist/{lifecycle-BmGAIUlv.d.mts → lifecycle-Dm8u7QFh.d.mts} +40 -18
  42. package/dist/lifecycle-Dm8u7QFh.d.mts.map +1 -0
  43. package/dist/{memory-thread-repository-CjFGVNZh.mjs → memory-thread-repository-DAnOGIB3.mjs} +89 -34
  44. package/dist/memory-thread-repository-DAnOGIB3.mjs.map +1 -0
  45. package/dist/{protocol-DJUP4gc0.mjs → protocol-CF4Bh_Ch.mjs} +182 -50
  46. package/dist/protocol-CF4Bh_Ch.mjs.map +1 -0
  47. package/dist/protocol.d.mts +4 -4
  48. package/dist/protocol.mjs +3 -3
  49. package/dist/react-C_GY-Fsc.mjs +1727 -0
  50. package/dist/react-C_GY-Fsc.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 +143 -68
  56. package/dist/references/core-rules.md +6 -3
  57. package/dist/references/embedded-forms.md +34 -14
  58. package/dist/references/expressions.md +238 -48
  59. package/dist/references/fair-by-design.md +9 -9
  60. package/dist/references/item-types.md +306 -72
  61. package/dist/references/localization.md +5 -4
  62. package/dist/references/response-variables.md +38 -0
  63. package/dist/references/rich-text-content.md +60 -27
  64. package/dist/references/source-material-surveys.md +13 -5
  65. package/dist/references/survey-data-model.md +32 -9
  66. package/dist/{request-context-BjTHNcDd.mjs → request-context-Dg4jSwN1.mjs} +4 -10
  67. package/dist/request-context-Dg4jSwN1.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 +53 -44
  71. package/dist/server-agent.d.mts.map +1 -1
  72. package/dist/server-agent.mjs +48 -27
  73. package/dist/server-agent.mjs.map +1 -1
  74. package/dist/server-runtime.d.mts +36 -49
  75. package/dist/server-runtime.d.mts.map +1 -1
  76. package/dist/server-runtime.mjs +17 -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 +13 -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-DxzD25Zc.d.mts → tasks-B9h3LPam.d.mts} +19 -35
  91. package/dist/tasks-B9h3LPam.d.mts.map +1 -0
  92. package/dist/tasks-BZEiwgxA.mjs +396 -0
  93. package/dist/tasks-BZEiwgxA.mjs.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-AbQbt4sX.d.mts → thread-handlers-Bef0td9N.d.mts} +10 -40
  97. package/dist/thread-handlers-Bef0td9N.d.mts.map +1 -0
  98. package/dist/{tools-CFh35R4d.mjs → tools-CEsv-WoO.mjs} +705 -578
  99. package/dist/tools-CEsv-WoO.mjs.map +1 -0
  100. package/dist/ui.css +1 -1
  101. package/dist/ui.d.mts +17 -55
  102. package/dist/ui.d.mts.map +1 -1
  103. package/dist/ui.mjs +759 -171
  104. package/dist/ui.mjs.map +1 -1
  105. package/docs/integration.md +51 -1
  106. package/package.json +49 -42
  107. package/dist/authoring-references-CW38pYzK.mjs.map +0 -1
  108. package/dist/capabilities-DVTfogjv.d.mts.map +0 -1
  109. package/dist/capabilities-default.mjs.map +0 -1
  110. package/dist/constants-BMGTgfjv.d.mts.map +0 -1
  111. package/dist/controller-proxy-DMTqer6T.mjs.map +0 -1
  112. package/dist/controller-proxy-mRvez2qw.d.mts +0 -85
  113. package/dist/controller-proxy-mRvez2qw.d.mts.map +0 -1
  114. package/dist/digest-SJmoYVaK.d.mts.map +0 -1
  115. package/dist/engine-CQwOAcwK.mjs.map +0 -1
  116. package/dist/form-authoring-kQDgC5oz.mjs +0 -155
  117. package/dist/form-authoring-kQDgC5oz.mjs.map +0 -1
  118. package/dist/index-B0lxsAzx.d.mts.map +0 -1
  119. package/dist/index-BS-Xjk1h.d.mts +0 -224
  120. package/dist/index-BS-Xjk1h.d.mts.map +0 -1
  121. package/dist/index-D6nqkz0O.d.mts.map +0 -1
  122. package/dist/index-DvTqML-0.d.mts.map +0 -1
  123. package/dist/lifecycle-BmGAIUlv.d.mts.map +0 -1
  124. package/dist/memory-thread-repository-CjFGVNZh.mjs.map +0 -1
  125. package/dist/protocol-DJUP4gc0.mjs.map +0 -1
  126. package/dist/react-Dqlmasrs.mjs +0 -768
  127. package/dist/react-Dqlmasrs.mjs.map +0 -1
  128. package/dist/request-context-BjTHNcDd.mjs.map +0 -1
  129. package/dist/request-guardrails-TmgQtqp4.mjs.map +0 -1
  130. package/dist/server-tasks.mjs.map +0 -1
  131. package/dist/tasks-DxzD25Zc.d.mts.map +0 -1
  132. package/dist/thread-documents-rmd6nyX9.d.mts +0 -107
  133. package/dist/thread-documents-rmd6nyX9.d.mts.map +0 -1
  134. package/dist/thread-handlers-AbQbt4sX.d.mts.map +0 -1
  135. package/dist/tools-CFh35R4d.mjs.map +0 -1
@@ -1,13 +1,19 @@
1
- import { O as surveyAssistantTranslateContentResultSchema, b as surveyAssistantSuggestItemLabelResultSchema, jt as parseSurveyAssistantError, v as surveyAssistantSuggestItemKeyResultSchema } from "./protocol-DJUP4gc0.mjs";
1
+ import { A as surveyAssistantTranslateContentResultSchema, Ft as isSurveyAssistantErrorRetryable, It as parseSurveyAssistantError, S as surveyAssistantSuggestResponseSettingsResultSchema, b as surveyAssistantSuggestResponseNameResultSchema, v as surveyAssistantSuggestItemLabelResultSchema } from "./protocol-CF4Bh_Ch.mjs";
2
2
  //#region src/react/client-error.ts
3
3
  var SurveyAssistantClientError = class extends Error {
4
4
  code;
5
5
  retryable;
6
- constructor(code, message, retryable = false) {
6
+ upstreamStatus;
7
+ providerRequestId;
8
+ providerMessage;
9
+ constructor(code, message, retryable = false, diagnostics = {}) {
7
10
  super(message);
8
11
  this.name = "SurveyAssistantClientError";
9
12
  this.code = code;
10
13
  this.retryable = retryable;
14
+ this.upstreamStatus = diagnostics.upstreamStatus;
15
+ this.providerRequestId = diagnostics.providerRequestId;
16
+ this.providerMessage = diagnostics.providerMessage;
11
17
  }
12
18
  };
13
19
  const readSurveyAssistantJson = async (response, fallback = "The assistant request could not be completed.") => {
@@ -22,10 +28,14 @@ const readSurveyAssistantJson = async (response, fallback = "The assistant reque
22
28
  const detail = typeof body === "object" && body !== null && "error" in body && typeof body.error === "string" ? body.error : responseText.trim() || fallback;
23
29
  const parsed = parseSurveyAssistantError(typeof body === "object" && body !== null && "code" in body && typeof body.code === "string" ? {
24
30
  code: body.code,
25
- detail
31
+ detail,
32
+ retryable: "retryable" in body && typeof body.retryable === "boolean" ? body.retryable : void 0,
33
+ upstreamStatus: "upstreamStatus" in body && typeof body.upstreamStatus === "number" ? body.upstreamStatus : void 0,
34
+ providerRequestId: "providerRequestId" in body && typeof body.providerRequestId === "string" ? body.providerRequestId : void 0,
35
+ providerMessage: "providerMessage" in body && typeof body.providerMessage === "string" ? body.providerMessage : void 0
26
36
  } : detail);
27
- const retryable = (typeof body === "object" && body !== null && "retryable" in body && typeof body.retryable === "boolean" ? body.retryable : void 0) ?? (parsed.code === "rate_limited" || (parsed.code === "request_failed" || parsed.code === "attachment_unavailable") && response.status >= 500);
28
- throw new SurveyAssistantClientError(parsed.code, parsed.detail ?? detail, retryable);
37
+ const retryable = isSurveyAssistantErrorRetryable(parsed, response.status);
38
+ throw new SurveyAssistantClientError(parsed.code, parsed.detail ?? detail, retryable, parsed);
29
39
  }
30
40
  return response.json().catch(() => ({}));
31
41
  };
@@ -99,9 +109,9 @@ const connectSurveyAssistantThreadLauncher = (launcher, handler) => {
99
109
  };
100
110
  //#endregion
101
111
  //#region src/react/task-client.ts
102
- const createSurveyAssistantTaskClient = ({ api = "/api/survey-assistant/tasks", getModelId, resourceId, surveyId } = {}) => {
112
+ const createSurveyAssistantTaskClient = ({ api = "/api/survey-assistant/tasks", resourceId, surveyId } = {}) => {
103
113
  const run = async (taskId, input, context, options) => {
104
- const modelId = options?.modelId ?? getModelId?.();
114
+ const modelId = options?.modelId;
105
115
  return readSurveyAssistantJson(await fetch(api, {
106
116
  body: JSON.stringify({
107
117
  taskId,
@@ -118,8 +128,11 @@ const createSurveyAssistantTaskClient = ({ api = "/api/survey-assistant/tasks",
118
128
  }), "The survey assistant task could not be completed.");
119
129
  };
120
130
  return {
121
- async suggestItemKey(input, context, options) {
122
- return surveyAssistantSuggestItemKeyResultSchema.parse(await run("suggest-item-key", input, context, options));
131
+ async suggestResponseSettings(input, context, options) {
132
+ return surveyAssistantSuggestResponseSettingsResultSchema.parse(await run("suggest-response-settings", input, context, options));
133
+ },
134
+ async suggestResponseName(input, context, options) {
135
+ return surveyAssistantSuggestResponseNameResultSchema.parse(await run("suggest-response-name", input, context, options));
123
136
  },
124
137
  async suggestItemLabel(input, context, options) {
125
138
  return surveyAssistantSuggestItemLabelResultSchema.parse(await run("suggest-item-label", input, context, options));
@@ -129,19 +142,6 @@ const createSurveyAssistantTaskClient = ({ api = "/api/survey-assistant/tasks",
129
142
  }
130
143
  };
131
144
  };
132
- const createSurveyAssistantTaskExecutor = (options = {}) => {
133
- const client = createSurveyAssistantTaskClient(options);
134
- const executionOptions = (request, cache) => ({
135
- mode: request?.mode,
136
- modelId: cache?.cacheScope,
137
- signal: request?.signal
138
- });
139
- return {
140
- suggestItemKey: (input, context, request, cache) => client.suggestItemKey(input, context, executionOptions(request, cache)),
141
- suggestItemLabel: (input, context, request, cache) => client.suggestItemLabel(input, context, executionOptions(request, cache)),
142
- translateContent: (input, context, request, cache) => client.translateContent(input, context, executionOptions(request, cache))
143
- };
144
- };
145
145
  //#endregion
146
146
  //#region src/react/controller-proxy.ts
147
147
  const failedResult = (change, message) => ({
@@ -153,8 +153,11 @@ const failedResult = (change, message) => ({
153
153
  });
154
154
  const createSurveyAssistantControllerProxy = (getController, { notReadyMessage = "The survey editor is not ready." } = {}) => ({
155
155
  getSnapshot: () => getController()?.getSnapshot() ?? null,
156
- applyAssistantChange: (change) => getController()?.applyAssistantChange?.(change) ?? failedResult(change, notReadyMessage),
157
- applyAssistantChanges: (changes) => getController()?.applyAssistantChanges?.(changes) ?? { results: changes.map((change) => failedResult(change, notReadyMessage)) }
156
+ applyAssistantChanges: (changes) => {
157
+ const controller = getController();
158
+ if (!controller) return { results: changes.map((change) => failedResult(change, notReadyMessage)) };
159
+ return controller.applyAssistantChanges(changes);
160
+ }
158
161
  });
159
162
  const createSurveyAssistantControllerBridge = (options) => {
160
163
  let currentController;
@@ -166,6 +169,6 @@ const createSurveyAssistantControllerBridge = (options) => {
166
169
  };
167
170
  };
168
171
  //#endregion
169
- export { applySurveyAssistantLaunchUIContext as a, SurveyAssistantClientError as c, createSurveyAssistantTaskExecutor as i, readSurveyAssistantJson as l, createSurveyAssistantControllerProxy as n, connectSurveyAssistantThreadLauncher as o, createSurveyAssistantTaskClient as r, createSurveyAssistantThreadLauncher as s, createSurveyAssistantControllerBridge as t };
172
+ export { connectSurveyAssistantThreadLauncher as a, readSurveyAssistantJson as c, applySurveyAssistantLaunchUIContext as i, createSurveyAssistantControllerProxy as n, createSurveyAssistantThreadLauncher as o, createSurveyAssistantTaskClient as r, SurveyAssistantClientError as s, createSurveyAssistantControllerBridge as t };
170
173
 
171
- //# sourceMappingURL=controller-proxy-DMTqer6T.mjs.map
174
+ //# sourceMappingURL=controller-proxy-DEeFl9IA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller-proxy-DEeFl9IA.mjs","names":[],"sources":["../src/react/client-error.ts","../src/react/thread-launcher.ts","../src/react/task-client.ts","../src/react/controller-proxy.ts"],"sourcesContent":["import {\n isSurveyAssistantErrorRetryable,\n parseSurveyAssistantError,\n type SurveyAssistantErrorCode,\n type SurveyAssistantErrorInfo,\n} from \"../protocol\";\n\nexport class SurveyAssistantClientError extends Error {\n readonly code: SurveyAssistantErrorCode;\n readonly retryable: boolean;\n readonly upstreamStatus?: number;\n readonly providerRequestId?: string;\n readonly providerMessage?: string;\n\n constructor(\n code: SurveyAssistantErrorCode,\n message: string,\n retryable = false,\n diagnostics: Pick<\n SurveyAssistantErrorInfo,\n \"providerMessage\" | \"providerRequestId\" | \"upstreamStatus\"\n > = {},\n ) {\n super(message);\n this.name = \"SurveyAssistantClientError\";\n this.code = code;\n this.retryable = retryable;\n this.upstreamStatus = diagnostics.upstreamStatus;\n this.providerRequestId = diagnostics.providerRequestId;\n this.providerMessage = diagnostics.providerMessage;\n }\n}\n\nexport const readSurveyAssistantJson = async (\n response: Response,\n fallback = \"The assistant request could not be completed.\",\n) => {\n if (!response.ok) {\n const responseText = await response.text().catch(() => \"\");\n let body: unknown;\n try {\n body = responseText ? JSON.parse(responseText) : undefined;\n } catch {\n body = undefined;\n }\n const detail =\n typeof body === \"object\" && body !== null && \"error\" in body && typeof body.error === \"string\"\n ? body.error\n : responseText.trim() || fallback;\n const parsed = parseSurveyAssistantError(\n typeof body === \"object\" && body !== null && \"code\" in body && typeof body.code === \"string\"\n ? {\n code: body.code,\n detail,\n retryable:\n \"retryable\" in body && typeof body.retryable === \"boolean\"\n ? body.retryable\n : undefined,\n upstreamStatus:\n \"upstreamStatus\" in body && typeof body.upstreamStatus === \"number\"\n ? body.upstreamStatus\n : undefined,\n providerRequestId:\n \"providerRequestId\" in body && typeof body.providerRequestId === \"string\"\n ? body.providerRequestId\n : undefined,\n providerMessage:\n \"providerMessage\" in body && typeof body.providerMessage === \"string\"\n ? body.providerMessage\n : undefined,\n }\n : detail,\n );\n const retryable = isSurveyAssistantErrorRetryable(parsed, response.status);\n throw new SurveyAssistantClientError(parsed.code, parsed.detail ?? detail, retryable, parsed);\n }\n return response.json().catch(() => ({}));\n};\n","import type {\n SurveyAssistantSnapshot,\n SurveyAssistantThread,\n SurveyEditorUIContext,\n} from \"../protocol\";\nimport type { FileUIPart } from \"ai\";\n\nexport type SurveyAssistantLaunchUIContext = Partial<Omit<SurveyEditorUIContext, \"history\">>;\n\nexport interface SurveyAssistantThreadLaunch {\n /** User-visible prompt submitted as the first message in the new thread. */\n prompt: string;\n files?: FileUIPart[];\n /** Optional model used for the opening assistant turn. */\n modelId?: string;\n /** Optional manual thread title. The prompt-derived automatic title is used by default. */\n title?: string;\n /** Turn-local editor context merged into the snapshot captured when the prompt is submitted. */\n uiContext?: SurveyAssistantLaunchUIContext;\n}\n\nexport interface SurveyAssistantThreadLauncher {\n /**\n * Creates a new thread and submits its first prompt when a connected panel is ready.\n * Calls made before the panel mounts are queued.\n */\n startThread(input: SurveyAssistantThreadLaunch): Promise<SurveyAssistantThread>;\n}\n\ntype LaunchHandler = (input: SurveyAssistantThreadLaunch) => Promise<SurveyAssistantThread>;\n\ninterface PendingLaunch {\n input: SurveyAssistantThreadLaunch;\n reject(error: unknown): void;\n resolve(thread: SurveyAssistantThread): void;\n}\n\ninterface LauncherState {\n handler: LaunchHandler | null;\n pending: PendingLaunch[];\n draining: boolean;\n}\n\nconst launcherStates = new WeakMap<SurveyAssistantThreadLauncher, LauncherState>();\n\nexport const applySurveyAssistantLaunchUIContext = (\n snapshot: SurveyAssistantSnapshot | null,\n uiContext: SurveyAssistantLaunchUIContext | undefined,\n): SurveyAssistantSnapshot | null =>\n snapshot && uiContext\n ? {\n ...snapshot,\n ui: {\n ...snapshot.ui,\n ...uiContext,\n },\n }\n : snapshot;\n\nconst getLauncherState = (launcher: SurveyAssistantThreadLauncher) => {\n const state = launcherStates.get(launcher);\n if (!state) {\n throw new Error(\n \"The survey assistant thread launcher was not created by createSurveyAssistantThreadLauncher.\",\n );\n }\n return state;\n};\n\nconst drainPendingLaunches = async (state: LauncherState) => {\n if (state.draining) return;\n state.draining = true;\n try {\n while (state.handler && state.pending.length > 0) {\n const pending = state.pending.shift();\n if (!pending) continue;\n try {\n pending.resolve(await state.handler(pending.input));\n } catch (error) {\n pending.reject(error);\n }\n }\n } finally {\n state.draining = false;\n }\n};\n\nexport const createSurveyAssistantThreadLauncher = (): SurveyAssistantThreadLauncher => {\n const state: LauncherState = { handler: null, pending: [], draining: false };\n const launcher: SurveyAssistantThreadLauncher = {\n startThread(input) {\n const prompt = input.prompt.trim();\n if (!prompt && (input.files?.length ?? 0) === 0) {\n return Promise.reject(new Error(\"A survey assistant prompt or attachment is required.\"));\n }\n\n return new Promise((resolve, reject) => {\n state.pending.push({\n input: {\n ...input,\n prompt,\n ...(input.files ? { files: [...input.files] } : {}),\n ...(input.modelId ? { modelId: input.modelId.trim() } : {}),\n ...(input.title ? { title: input.title.trim() } : {}),\n },\n reject,\n resolve,\n });\n void drainPendingLaunches(state);\n });\n },\n };\n launcherStates.set(launcher, state);\n return launcher;\n};\n\nexport const connectSurveyAssistantThreadLauncher = (\n launcher: SurveyAssistantThreadLauncher,\n handler: LaunchHandler,\n) => {\n const state = getLauncherState(launcher);\n if (state.handler && state.handler !== handler) {\n throw new Error(\"A survey assistant thread launcher can only control one mounted panel.\");\n }\n state.handler = handler;\n void drainPendingLaunches(state);\n\n return () => {\n if (state.handler === handler) state.handler = null;\n };\n};\n","import {\n surveyAssistantSuggestResponseSettingsResultSchema,\n type SurveyAssistantSuggestResponseSettingsInput,\n type SurveyAssistantSuggestResponseSettingsResult,\n} from \"../protocol/tasks\";\nimport {\n surveyAssistantSuggestResponseNameResultSchema,\n surveyAssistantSuggestItemLabelResultSchema,\n surveyAssistantTranslateContentResultSchema,\n type SurveyAssistantSuggestResponseNameInput,\n type SurveyAssistantSuggestResponseNameResult,\n type SurveyAssistantSuggestItemLabelInput,\n type SurveyAssistantSuggestItemLabelResult,\n type SurveyAssistantTaskContext,\n type SurveyAssistantTaskInvocationMode,\n type SurveyAssistantTranslateContentInput,\n type SurveyAssistantTranslateContentResult,\n} from \"../protocol\";\nimport { readSurveyAssistantJson } from \"./client-error\";\n\nexport interface SurveyAssistantTaskClientOptions {\n api?: string;\n resourceId?: string;\n surveyId?: string;\n}\n\nexport interface SurveyAssistantTaskExecutionOptions {\n mode?: SurveyAssistantTaskInvocationMode;\n modelId?: string;\n signal?: AbortSignal;\n}\n\nexport interface SurveyAssistantTaskClient {\n suggestResponseSettings(\n input: SurveyAssistantSuggestResponseSettingsInput,\n context: SurveyAssistantTaskContext,\n options?: SurveyAssistantTaskExecutionOptions,\n ): Promise<SurveyAssistantSuggestResponseSettingsResult>;\n suggestResponseName(\n input: SurveyAssistantSuggestResponseNameInput,\n context: SurveyAssistantTaskContext,\n options?: SurveyAssistantTaskExecutionOptions,\n ): Promise<SurveyAssistantSuggestResponseNameResult>;\n suggestItemLabel(\n input: SurveyAssistantSuggestItemLabelInput,\n context: SurveyAssistantTaskContext,\n options?: SurveyAssistantTaskExecutionOptions,\n ): Promise<SurveyAssistantSuggestItemLabelResult>;\n translateContent(\n input: SurveyAssistantTranslateContentInput,\n context: SurveyAssistantTaskContext,\n options?: SurveyAssistantTaskExecutionOptions,\n ): Promise<SurveyAssistantTranslateContentResult>;\n}\n\nexport const createSurveyAssistantTaskClient = ({\n api = \"/api/survey-assistant/tasks\",\n resourceId,\n surveyId,\n}: SurveyAssistantTaskClientOptions = {}): SurveyAssistantTaskClient => {\n const run = async (\n taskId:\n | \"suggest-response-settings\"\n | \"suggest-response-name\"\n | \"suggest-item-label\"\n | \"translate-content\",\n input: unknown,\n context: SurveyAssistantTaskContext,\n options?: SurveyAssistantTaskExecutionOptions,\n ) => {\n const modelId = options?.modelId;\n return readSurveyAssistantJson(\n await fetch(api, {\n body: JSON.stringify({\n taskId,\n input,\n context,\n ...(options?.mode ? { mode: options.mode } : {}),\n ...(modelId ? { modelId } : {}),\n ...(resourceId ? { resourceId } : {}),\n ...(surveyId ? { surveyId } : {}),\n }),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n signal: options?.signal,\n }),\n \"The survey assistant task could not be completed.\",\n );\n };\n\n return {\n async suggestResponseSettings(input, context, options) {\n return surveyAssistantSuggestResponseSettingsResultSchema.parse(\n await run(\"suggest-response-settings\", input, context, options),\n );\n },\n async suggestResponseName(input, context, options) {\n return surveyAssistantSuggestResponseNameResultSchema.parse(\n await run(\"suggest-response-name\", input, context, options),\n );\n },\n async suggestItemLabel(input, context, options) {\n return surveyAssistantSuggestItemLabelResultSchema.parse(\n await run(\"suggest-item-label\", input, context, options),\n );\n },\n async translateContent(input, context, options) {\n return surveyAssistantTranslateContentResultSchema.parse(\n await run(\"translate-content\", input, context, options),\n );\n },\n };\n};\n","import type { SurveyApplyResult, SurveyBatchApplyResult, SurveyChangeSet } from \"../protocol\";\nimport type { SurveyAssistantController } from \"./controller\";\n\nexport interface CreateSurveyAssistantControllerProxyOptions {\n notReadyMessage?: string;\n}\n\nexport interface SurveyAssistantControllerBridge {\n controller: SurveyAssistantController;\n setController(controller: SurveyAssistantController | null | undefined): void;\n}\n\nconst failedResult = (change: SurveyChangeSet, message: string): SurveyApplyResult => ({\n status: \"failed\",\n changeId: change.id,\n summary: change.summary,\n message,\n appliedOperations: 0,\n});\n\nexport const createSurveyAssistantControllerProxy = (\n getController: () => SurveyAssistantController | null | undefined,\n {\n notReadyMessage = \"The survey editor is not ready.\",\n }: CreateSurveyAssistantControllerProxyOptions = {},\n): SurveyAssistantController => ({\n getSnapshot: () => getController()?.getSnapshot() ?? null,\n applyAssistantChanges: (changes): SurveyBatchApplyResult => {\n const controller = getController();\n if (!controller) {\n return { results: changes.map((change) => failedResult(change, notReadyMessage)) };\n }\n return controller.applyAssistantChanges(changes);\n },\n});\n\nexport const createSurveyAssistantControllerBridge = (\n options?: CreateSurveyAssistantControllerProxyOptions,\n): SurveyAssistantControllerBridge => {\n let currentController: SurveyAssistantController | null | undefined;\n return {\n controller: createSurveyAssistantControllerProxy(() => currentController, options),\n setController(controller) {\n currentController = controller;\n },\n };\n};\n"],"mappings":"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"}