@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
@@ -0,0 +1,569 @@
1
+ import { B as elementTransportSchema, G as responseSettingsChangesSchema, O as surveyValidationIssueSchema, T as surveyOperationSchema, V as jsonValueSchema, f as localizationRefSchema, i as surveyAssistantCapabilityManifestSchema, k as surveyValidationResultSchema } from "./capabilities-D55dq-fO.mjs";
2
+ import { z } from "zod";
3
+ import { answerTypeReservationsSchema, createCompositionSchema, createSurveySchema, stringRecord } from "@case-framework/survey-core/schema";
4
+ //#region src/protocol/sanitization.ts
5
+ const MAX_USER_ERROR_MESSAGE_LENGTH = 700;
6
+ const CONTROL_CHARACTERS = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g;
7
+ const DATA_URL = /data:[^;,\s]+;base64,[a-z0-9+/=_-]+/gi;
8
+ const BEARER_TOKEN = /\bbearer\s+[a-z0-9._~+/-]{8,}/gi;
9
+ const OPENAI_KEY = /\bsk-(?:proj-)?[a-z0-9_-]{8,}/gi;
10
+ const AUTHORIZATION_VALUE = /(authorization\s*[:=]\s*)[^\s,;]+/gi;
11
+ const API_KEY_VALUE = /((?:api[-_ ]?key|token|secret)\s*[:=]\s*)[^\s,;]+/gi;
12
+ const redactSurveyAssistantDiagnosticSecrets = (value) => value.replace(CONTROL_CHARACTERS, "").replace(DATA_URL, "[data URL omitted]").replace(BEARER_TOKEN, "Bearer [credential omitted]").replace(OPENAI_KEY, "[credential omitted]").replace(AUTHORIZATION_VALUE, "$1[credential omitted]").replace(API_KEY_VALUE, "$1[credential omitted]");
13
+ const sanitizeSurveyAssistantDiagnosticText = (value, maximum = 700) => {
14
+ const normalized = redactSurveyAssistantDiagnosticSecrets(value).replace(/\s+/g, " ").trim();
15
+ if (normalized.length <= maximum) return normalized;
16
+ return `${normalized.slice(0, Math.max(0, maximum - 1))}…`;
17
+ };
18
+ const isSurveyAssistantSensitiveMetadataKey = (key) => {
19
+ const normalized = key.toLocaleLowerCase();
20
+ return normalized.includes("authorization") || normalized.includes("credential") || normalized.includes("encrypted") || normalized.includes("password") || normalized.includes("redacted") || normalized.includes("secret") || normalized.includes("signature") || normalized === "token" || normalized.endsWith("token") || normalized.includes("api_key") || normalized.includes("apikey");
21
+ };
22
+ const getSurveyAssistantEmbeddedBinaryMarker = (value, parent, key) => {
23
+ if (typeof value !== "string") return void 0;
24
+ if (key === "data" && parent?.type === "embedded" && parent.encoding === "base64") return {
25
+ characters: value.length,
26
+ redacted: "base64"
27
+ };
28
+ if (value.length > 512 && /^data:[^;,]+;base64,/.test(value)) return {
29
+ characters: value.length,
30
+ redacted: "data-url"
31
+ };
32
+ };
33
+ //#endregion
34
+ //#region src/protocol/errors.ts
35
+ const surveyAssistantErrorCodeSchema = z.enum([
36
+ "attachment_unavailable",
37
+ "authorization_failed",
38
+ "model_unavailable",
39
+ "rate_limited",
40
+ "request_failed"
41
+ ]);
42
+ const surveyAssistantErrorInfoSchema = z.object({
43
+ code: surveyAssistantErrorCodeSchema,
44
+ detail: z.string().optional(),
45
+ retryable: z.boolean().optional(),
46
+ upstreamStatus: z.number().int().min(100).max(599).optional(),
47
+ providerRequestId: z.string().trim().min(1).max(240).optional(),
48
+ providerMessage: z.string().max(700).optional()
49
+ });
50
+ const isSurveyAssistantErrorRetryable = (error, httpStatus) => {
51
+ if (error.retryable !== void 0) return error.retryable;
52
+ if (error.code === "rate_limited") return true;
53
+ const status = httpStatus ?? error.upstreamStatus;
54
+ if (error.code === "request_failed") return status === void 0 || status >= 500;
55
+ return error.code === "attachment_unavailable" && status !== void 0 && status >= 500;
56
+ };
57
+ const ERROR_PREFIX = "case-survey-assistant-error:";
58
+ const serializeSurveyAssistantError = (error) => `${ERROR_PREFIX}${JSON.stringify(surveyAssistantErrorInfoSchema.parse(error))}`;
59
+ const parseSurveyAssistantError = (value) => {
60
+ if (typeof value === "object" && value !== null && "code" in value) {
61
+ const detail = "detail" in value && typeof value.detail === "string" ? value.detail : "message" in value && typeof value.message === "string" ? value.message : void 0;
62
+ const parsed = surveyAssistantErrorInfoSchema.safeParse({
63
+ code: value.code,
64
+ detail: detail ? sanitizeSurveyAssistantDiagnosticText(detail, 700) : void 0,
65
+ retryable: "retryable" in value && typeof value.retryable === "boolean" ? value.retryable : void 0,
66
+ upstreamStatus: "upstreamStatus" in value && typeof value.upstreamStatus === "number" ? value.upstreamStatus : void 0,
67
+ providerRequestId: "providerRequestId" in value && typeof value.providerRequestId === "string" ? sanitizeSurveyAssistantDiagnosticText(value.providerRequestId, 240) : void 0,
68
+ providerMessage: "providerMessage" in value && typeof value.providerMessage === "string" ? sanitizeSurveyAssistantDiagnosticText(value.providerMessage, 700) : void 0
69
+ });
70
+ if (parsed.success) return parsed.data;
71
+ }
72
+ const message = value instanceof Error ? value.message : typeof value === "string" ? value : typeof value === "object" && value !== null && "message" in value ? String(value.message) : "";
73
+ if (message.startsWith(ERROR_PREFIX)) try {
74
+ const parsed = surveyAssistantErrorInfoSchema.safeParse(JSON.parse(message.slice(28)));
75
+ if (parsed.success) return parsed.data;
76
+ } catch {}
77
+ return {
78
+ code: "request_failed",
79
+ ...message.trim() ? { detail: sanitizeSurveyAssistantDiagnosticText(message, 700) } : {}
80
+ };
81
+ };
82
+ //#endregion
83
+ //#region src/protocol/document.ts
84
+ const SURVEY_ASSISTANT_PROTOCOL_VERSION = 1;
85
+ const surveyAssistantProtocolVersionSchema = z.literal(1);
86
+ const surveyDocumentVersionSchema = z.object({
87
+ sessionId: z.string().nullable(),
88
+ revision: z.number().int().nonnegative(),
89
+ historyIndex: z.number().int(),
90
+ contentHash: z.string().min(1),
91
+ capabilityDigest: z.string().min(1)
92
+ });
93
+ const SURVEY_EDITOR_UI_TASK_MAX_DATA_LENGTH = 64e3;
94
+ const surveyEditorUITaskSchema = z.object({
95
+ kind: z.string().min(1).max(80),
96
+ title: z.string().max(240).optional(),
97
+ instructions: z.string().max(4e3).optional(),
98
+ data: jsonValueSchema.refine((value) => JSON.stringify(value).length <= SURVEY_EDITOR_UI_TASK_MAX_DATA_LENGTH, { message: `Task data must serialize to at most ${SURVEY_EDITOR_UI_TASK_MAX_DATA_LENGTH} characters.` }).optional()
99
+ });
100
+ const surveyEditorUIContextSchema = z.object({
101
+ view: z.enum([
102
+ "item-editor",
103
+ "preview-mode",
104
+ "translation-mode",
105
+ "asset-manager",
106
+ "response-data"
107
+ ]),
108
+ selectedItemId: z.string().optional(),
109
+ responseSlotId: z.string().optional(),
110
+ selectedLocale: z.string().min(1),
111
+ focusItemId: z.string().optional(),
112
+ recentItemIds: z.array(z.string()).max(10).optional(),
113
+ activeSurface: z.string().max(120).optional(),
114
+ openPanels: z.array(z.string().max(120)).max(12).optional(),
115
+ highlights: z.array(z.object({
116
+ kind: z.string().min(1).max(80),
117
+ itemId: z.string().optional(),
118
+ componentId: z.string().optional(),
119
+ label: z.string().max(240).optional(),
120
+ details: z.string().max(1e3).optional()
121
+ })).max(12).optional(),
122
+ task: surveyEditorUITaskSchema.optional(),
123
+ history: z.object({
124
+ currentIndex: z.number().int(),
125
+ totalEntries: z.number().int().nonnegative(),
126
+ canUndo: z.boolean(),
127
+ canRedo: z.boolean(),
128
+ recent: z.array(z.object({
129
+ index: z.number().int().nonnegative(),
130
+ kind: z.enum(["survey-snapshot", "asset-change"]),
131
+ label: z.string(),
132
+ source: z.enum([
133
+ "user",
134
+ "system",
135
+ "assistant"
136
+ ]).optional(),
137
+ timestamp: z.number().nonnegative(),
138
+ isCurrent: z.boolean()
139
+ })).max(12)
140
+ }).optional()
141
+ });
142
+ const rawSurveyDocumentSchema = createSurveySchema(createCompositionSchema(elementTransportSchema));
143
+ const surveyDocumentSnapshotSchema = z.object({
144
+ protocolVersion: surveyAssistantProtocolVersionSchema,
145
+ version: surveyDocumentVersionSchema,
146
+ survey: rawSurveyDocumentSchema,
147
+ answerTypes: answerTypeReservationsSchema.optional(),
148
+ ui: surveyEditorUIContextSchema,
149
+ capabilities: surveyAssistantCapabilityManifestSchema,
150
+ createdAt: z.string().min(1)
151
+ });
152
+ const surveyAssistantSnapshotSchema = surveyDocumentSnapshotSchema;
153
+ const surveyAssistantSnapshotPayloadSchema = surveyDocumentSnapshotSchema;
154
+ const surveyAssistantDraftChangePreconditionSchema = surveyDocumentVersionSchema;
155
+ //#endregion
156
+ //#region src/protocol/threads.ts
157
+ const SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE = "data-survey-assistant-attachment";
158
+ const surveyAssistantThreadSchema = z.object({
159
+ id: z.string().min(1).max(240),
160
+ title: z.string().min(1).max(160),
161
+ titleMode: z.enum(["automatic", "manual"]),
162
+ createdAt: z.string().datetime(),
163
+ updatedAt: z.string().datetime(),
164
+ /** Original UI-launched task, retained for continuations and reopened chats. */
165
+ task: surveyEditorUITaskSchema.optional()
166
+ });
167
+ const surveyAssistantThreadListSchema = z.object({
168
+ nextCursor: z.string().min(1).max(240).optional(),
169
+ threads: z.array(surveyAssistantThreadSchema)
170
+ });
171
+ const surveyAssistantThreadTranscriptSchema = z.object({
172
+ nextCursor: z.string().min(1).max(240).optional(),
173
+ thread: surveyAssistantThreadSchema,
174
+ messages: z.array(z.unknown())
175
+ });
176
+ const createSurveyAssistantThreadInputSchema = z.object({
177
+ title: z.string().trim().min(1).max(160).optional(),
178
+ task: surveyEditorUITaskSchema.optional()
179
+ });
180
+ const updateSurveyAssistantThreadInputSchema = z.union([z.object({
181
+ mode: z.literal("automatic"),
182
+ title: z.string().trim().min(1).max(160).optional()
183
+ }), z.object({
184
+ mode: z.literal("manual").optional(),
185
+ title: z.string().trim().min(1).max(160)
186
+ })]);
187
+ //#endregion
188
+ //#region src/protocol/tasks.ts
189
+ const surveyAssistantTaskInvocationModeSchema = z.enum(["user", "background"]);
190
+ const surveyAssistantSuggestedTextSchema = z.object({ text: z.string().min(1) });
191
+ const surveyAssistantKeySuggestionCategorySchema = z.enum([
192
+ "survey-pattern",
193
+ "compact",
194
+ "preferred",
195
+ "fair"
196
+ ]);
197
+ const surveyAssistantKeySuggestionSchema = surveyAssistantSuggestedTextSchema.extend({
198
+ category: surveyAssistantKeySuggestionCategorySchema,
199
+ rationale: z.string().optional()
200
+ });
201
+ const surveyAssistantSuggestResponseNameInputSchema = z.object({
202
+ itemId: z.string().min(1),
203
+ slotId: z.string().min(1),
204
+ draftName: z.string(),
205
+ currentName: z.string(),
206
+ existingNames: z.array(z.string()),
207
+ maxSuggestions: z.number().int().positive().optional()
208
+ });
209
+ const surveyAssistantSuggestResponseNameResultSchema = z.object({ suggestions: z.array(surveyAssistantKeySuggestionSchema) });
210
+ const surveyAssistantSuggestItemLabelInputSchema = z.object({
211
+ itemId: z.string().min(1),
212
+ draftLabel: z.string(),
213
+ itemType: z.string().min(1),
214
+ locale: z.string().min(1).optional(),
215
+ maxSuggestions: z.number().int().positive().optional()
216
+ });
217
+ const surveyAssistantSuggestItemLabelResultSchema = z.object({ suggestions: z.array(surveyAssistantSuggestedTextSchema) });
218
+ const surveyAssistantTranslateContentEntrySchema = z.object({
219
+ id: z.string().min(1),
220
+ text: z.string(),
221
+ kind: z.string().min(1)
222
+ });
223
+ const surveyAssistantTranslateContentInputSchema = z.object({
224
+ sourceLocale: z.string().min(1),
225
+ targetLocales: z.array(z.string().min(1)).min(1),
226
+ entries: z.array(surveyAssistantTranslateContentEntrySchema).min(1)
227
+ });
228
+ const surveyAssistantTranslateContentResultSchema = z.object({ translations: stringRecord(z.string(), stringRecord(z.string(), z.string())) });
229
+ const surveyAssistantTaskItemSummarySchema = z.object({
230
+ id: z.string().min(1),
231
+ editorName: z.string(),
232
+ breadcrumb: z.string(),
233
+ itemType: z.string().min(1),
234
+ itemLabel: z.string().optional(),
235
+ visibleText: z.array(z.object({
236
+ locale: z.string().min(1),
237
+ ownerId: z.string().min(1),
238
+ role: z.string().min(1),
239
+ text: z.string()
240
+ })),
241
+ visibleTextTruncated: z.boolean()
242
+ });
243
+ const surveyAssistantSuggestResponseSettingsInputSchema = z.object({
244
+ slotIds: z.array(z.string().min(1)).min(1).max(200),
245
+ category: surveyAssistantKeySuggestionCategorySchema.default("fair")
246
+ });
247
+ const surveyAssistantSuggestResponseSettingsResultSchema = responseSettingsChangesSchema;
248
+ const namingRelationshipSchema = z.enum([
249
+ "sibling",
250
+ "same-type",
251
+ "survey"
252
+ ]);
253
+ const surveyAssistantTaskContextSchema = z.object({
254
+ document: z.object({
255
+ revision: z.number().int().nonnegative(),
256
+ contentHash: z.string().min(1),
257
+ capabilityDigest: z.string().min(1)
258
+ }),
259
+ survey: z.object({
260
+ key: z.string().optional(),
261
+ locales: z.array(z.string()),
262
+ itemCount: z.number().int().nonnegative(),
263
+ selectedLocale: z.string().min(1)
264
+ }),
265
+ responseVariables: z.array(stringRecord(z.string(), z.unknown())).optional(),
266
+ existingVariableNames: z.array(z.string()).optional(),
267
+ responseOwners: z.array(stringRecord(z.string(), z.unknown())).optional(),
268
+ focus: z.object({
269
+ item: surveyAssistantTaskItemSummarySchema,
270
+ parent: surveyAssistantTaskItemSummarySchema.optional(),
271
+ ancestorPath: z.array(surveyAssistantTaskItemSummarySchema),
272
+ siblingNames: z.array(z.string()),
273
+ siblingItems: z.array(surveyAssistantTaskItemSummarySchema),
274
+ siblingItemCount: z.number().int().nonnegative(),
275
+ siblingItemsTruncated: z.boolean(),
276
+ relatedItems: z.array(surveyAssistantTaskItemSummarySchema),
277
+ relatedItemCount: z.number().int().nonnegative(),
278
+ relatedItemsTruncated: z.boolean()
279
+ }).optional(),
280
+ naming: z.object({
281
+ keyExamples: z.array(z.object({
282
+ itemId: z.string().min(1),
283
+ itemType: z.string().min(1),
284
+ key: z.string(),
285
+ relationship: namingRelationshipSchema
286
+ })),
287
+ keyExampleCount: z.number().int().nonnegative(),
288
+ keyExamplesTruncated: z.boolean(),
289
+ labelExamples: z.array(z.object({
290
+ itemId: z.string().min(1),
291
+ itemType: z.string().min(1),
292
+ key: z.string(),
293
+ label: z.string(),
294
+ relationship: namingRelationshipSchema
295
+ })),
296
+ labelExampleCount: z.number().int().nonnegative(),
297
+ labelExamplesTruncated: z.boolean()
298
+ }).optional(),
299
+ translation: z.object({
300
+ examples: z.array(z.object({
301
+ itemId: z.string().min(1),
302
+ ownerId: z.string().min(1),
303
+ role: z.string().min(1),
304
+ values: stringRecord(z.string(), z.string())
305
+ })),
306
+ exampleCount: z.number().int().nonnegative(),
307
+ examplesTruncated: z.boolean()
308
+ }).optional()
309
+ });
310
+ const taskRequestBase = {
311
+ context: surveyAssistantTaskContextSchema,
312
+ mode: surveyAssistantTaskInvocationModeSchema.optional(),
313
+ modelId: z.string().trim().min(1).max(240).optional(),
314
+ resourceId: z.string().trim().min(1).max(240).optional(),
315
+ surveyId: z.string().trim().min(1).max(240).optional()
316
+ };
317
+ const surveyAssistantTaskRequestSchema = z.discriminatedUnion("taskId", [
318
+ z.object({
319
+ ...taskRequestBase,
320
+ taskId: z.literal("suggest-response-settings"),
321
+ input: surveyAssistantSuggestResponseSettingsInputSchema
322
+ }),
323
+ z.object({
324
+ ...taskRequestBase,
325
+ taskId: z.literal("suggest-response-name"),
326
+ input: surveyAssistantSuggestResponseNameInputSchema
327
+ }),
328
+ z.object({
329
+ ...taskRequestBase,
330
+ taskId: z.literal("suggest-item-label"),
331
+ input: surveyAssistantSuggestItemLabelInputSchema
332
+ }),
333
+ z.object({
334
+ ...taskRequestBase,
335
+ taskId: z.literal("translate-content"),
336
+ input: surveyAssistantTranslateContentInputSchema
337
+ })
338
+ ]);
339
+ //#endregion
340
+ //#region src/protocol/models.ts
341
+ const surveyAssistantModelOptionSchema = z.object({
342
+ id: z.string().trim().min(1).max(240),
343
+ label: z.string().trim().min(1).max(240)
344
+ });
345
+ const surveyAssistantModelCatalogSchema = z.object({
346
+ defaultModelId: z.string().trim().min(1).max(240),
347
+ models: z.array(surveyAssistantModelOptionSchema).min(1)
348
+ }).refine(({ defaultModelId, models }) => models.some((model) => model.id === defaultModelId), "The default model must be present in the model catalog.");
349
+ //#endregion
350
+ //#region src/protocol/lifecycle.ts
351
+ const surveyAssistantChangeVerificationReasonValues = [
352
+ "substantial-change",
353
+ "complex-change",
354
+ "bounded-preview",
355
+ "new-audit-findings"
356
+ ];
357
+ const surveyAssistantTurnTerminationReasonValues = [
358
+ "client-abort",
359
+ "first-response-timeout",
360
+ "idle-timeout",
361
+ "max-duration",
362
+ "max-steps",
363
+ "length-limit",
364
+ "content-filter",
365
+ "provider-error",
366
+ "stream-error",
367
+ "incomplete-response"
368
+ ];
369
+ const SURVEY_ASSISTANT_TURN_FINAL_DATA_NAME = "survey-assistant-turn-final";
370
+ const SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE = `data-${SURVEY_ASSISTANT_TURN_FINAL_DATA_NAME}`;
371
+ const surveyAssistantApplyOutcomeStatusValues = [
372
+ "not-applied",
373
+ "apply-failed",
374
+ "settle-failed"
375
+ ];
376
+ const surveyChangeSetSchema = z.object({
377
+ protocolVersion: surveyAssistantProtocolVersionSchema.default(1),
378
+ id: z.string().min(1),
379
+ turnId: z.string().min(1),
380
+ status: z.enum(["validated", "rejected"]),
381
+ summary: z.string().min(1).max(500),
382
+ operations: z.array(surveyOperationSchema),
383
+ supersedesChangeIds: z.array(z.string().min(1)).max(100).optional(),
384
+ pendingRepairs: z.array(z.object({
385
+ changeId: z.string().min(1),
386
+ targets: z.array(z.string()),
387
+ requiresExplicitRetry: z.boolean(),
388
+ allowsAcknowledgment: z.boolean().optional()
389
+ })).optional(),
390
+ precondition: surveyDocumentVersionSchema.optional(),
391
+ postChange: z.object({
392
+ version: surveyDocumentVersionSchema,
393
+ itemCount: z.number().int().nonnegative(),
394
+ localeCount: z.number().int().nonnegative(),
395
+ locales: z.array(z.string().min(1)).max(32),
396
+ targetCount: z.number().int().nonnegative(),
397
+ touchedTargets: z.array(z.string().min(1)).max(16),
398
+ touchedItemCount: z.number().int().nonnegative(),
399
+ availableTouchedItemCount: z.number().int().nonnegative(),
400
+ touchedItems: z.array(z.object({
401
+ itemId: z.string().min(1),
402
+ itemType: z.string().min(1),
403
+ editorName: z.string().min(1),
404
+ breadcrumb: z.string().min(1),
405
+ itemLabel: z.string().optional(),
406
+ placement: z.object({
407
+ parentItemId: z.string().min(1),
408
+ index: z.number().int().nonnegative(),
409
+ siblingCount: z.number().int().nonnegative(),
410
+ previousItemId: z.string().min(1).optional(),
411
+ nextItemId: z.string().min(1).optional(),
412
+ shuffled: z.boolean()
413
+ }).optional(),
414
+ childOrder: z.object({
415
+ itemIds: z.array(z.string().min(1)).max(16),
416
+ total: z.number().int().nonnegative(),
417
+ truncated: z.boolean(),
418
+ shuffled: z.boolean()
419
+ }).optional(),
420
+ translationCount: z.number().int().nonnegative(),
421
+ translations: z.array(z.object({
422
+ locale: z.string().min(1),
423
+ ownerId: z.string().min(1),
424
+ role: z.string().min(1),
425
+ textPreview: z.string(),
426
+ textLength: z.number().int().nonnegative(),
427
+ truncated: z.boolean()
428
+ })).max(12),
429
+ responseSlotCount: z.number().int().nonnegative(),
430
+ responseSlots: z.array(z.string().min(1)).max(12),
431
+ responseVariables: z.array(z.unknown()).max(12).optional()
432
+ })).max(6),
433
+ truncated: z.boolean()
434
+ }).optional(),
435
+ verification: z.object({
436
+ required: z.boolean(),
437
+ reasons: z.array(z.enum(surveyAssistantChangeVerificationReasonValues)).min(1).max(surveyAssistantChangeVerificationReasonValues.length),
438
+ newAuditFindingCount: z.number().int().nonnegative(),
439
+ auditFindings: z.array(z.object({
440
+ code: z.string().min(1),
441
+ severity: z.enum([
442
+ "error",
443
+ "warning",
444
+ "info"
445
+ ]),
446
+ category: z.enum([
447
+ "structure",
448
+ "content",
449
+ "localization",
450
+ "logic",
451
+ "responses",
452
+ "assets",
453
+ "quality"
454
+ ]),
455
+ itemId: z.string().min(1).optional(),
456
+ locale: z.string().min(1).optional(),
457
+ localizationRefs: z.array(localizationRefSchema).optional(),
458
+ messagePreview: z.string(),
459
+ messageLength: z.number().int().nonnegative(),
460
+ truncated: z.boolean()
461
+ })).max(8),
462
+ truncated: z.boolean()
463
+ }).optional(),
464
+ validation: surveyValidationResultSchema,
465
+ createdAt: z.string().min(1)
466
+ });
467
+ const surveyAssistantTurnTerminationReasonSchema = z.enum(surveyAssistantTurnTerminationReasonValues);
468
+ const surveyAssistantTurnFinalSchema = z.object({
469
+ protocolVersion: surveyAssistantProtocolVersionSchema,
470
+ turnId: z.string().min(1),
471
+ status: z.enum([
472
+ "completed",
473
+ "failed",
474
+ "aborted"
475
+ ]),
476
+ executableChangeSetIds: z.array(z.string().min(1)),
477
+ blockedChangeSetIds: z.array(z.string().min(1)).max(100).optional(),
478
+ startedAt: z.string().datetime().optional(),
479
+ durationMs: z.number().int().nonnegative().optional(),
480
+ terminationReason: surveyAssistantTurnTerminationReasonSchema.optional(),
481
+ createdAt: z.string().min(1)
482
+ }).superRefine((value, context) => {
483
+ if (value.status !== "completed" && value.executableChangeSetIds.length > 0) context.addIssue({
484
+ code: "custom",
485
+ message: "Failed or aborted turns cannot authorize executable change sets.",
486
+ path: ["executableChangeSetIds"]
487
+ });
488
+ if (new Set(value.executableChangeSetIds).size !== value.executableChangeSetIds.length) context.addIssue({
489
+ code: "custom",
490
+ message: "Executable change-set ids must be unique.",
491
+ path: ["executableChangeSetIds"]
492
+ });
493
+ const blockedChangeSetIds = value.blockedChangeSetIds ?? [];
494
+ if (new Set(blockedChangeSetIds).size !== blockedChangeSetIds.length) context.addIssue({
495
+ code: "custom",
496
+ message: "Blocked change-set ids must be unique.",
497
+ path: ["blockedChangeSetIds"]
498
+ });
499
+ if (blockedChangeSetIds.length > 0 && value.executableChangeSetIds.length > 0) context.addIssue({
500
+ code: "custom",
501
+ message: "A blocked turn cannot authorize executable change sets.",
502
+ path: ["executableChangeSetIds"]
503
+ });
504
+ if (value.status === "completed" && value.terminationReason !== void 0) context.addIssue({
505
+ code: "custom",
506
+ message: "Completed turns cannot have a failure or abort reason.",
507
+ path: ["terminationReason"]
508
+ });
509
+ });
510
+ const surveyAssistantApplyPolicySchema = z.enum([
511
+ "auto",
512
+ "review",
513
+ "deny"
514
+ ]);
515
+ const surveyApplyStatusSchema = z.enum([
516
+ "applied",
517
+ "rejected",
518
+ "stale",
519
+ "failed"
520
+ ]);
521
+ const surveyApplyResultSchema = z.object({
522
+ status: surveyApplyStatusSchema,
523
+ changeId: z.string(),
524
+ summary: z.string(),
525
+ message: z.string(),
526
+ appliedOperations: z.number().int().nonnegative(),
527
+ issues: z.array(surveyValidationIssueSchema).optional()
528
+ });
529
+ const surveyBatchApplyResultSchema = z.object({ results: z.array(surveyApplyResultSchema) });
530
+ const surveyAssistantApplyOutcomeSchema = z.object({
531
+ protocolVersion: surveyAssistantProtocolVersionSchema,
532
+ turnId: z.string().min(1),
533
+ status: z.enum(surveyAssistantApplyOutcomeStatusValues),
534
+ message: z.string().min(1).max(2e3),
535
+ results: z.array(z.object({
536
+ status: surveyApplyStatusSchema,
537
+ changeId: z.string().min(1).max(240),
538
+ summary: z.string().min(1).max(500),
539
+ message: z.string().min(1).max(2e3),
540
+ appliedOperations: z.number().int().nonnegative()
541
+ })).max(100).optional(),
542
+ preparedChanges: z.array(z.object({
543
+ changeId: z.string().min(1).max(240),
544
+ status: z.enum(["validated", "rejected"]),
545
+ summary: z.string().min(1).max(500),
546
+ operationCount: z.number().int().nonnegative()
547
+ })).max(24).optional(),
548
+ createdAt: z.string().min(1)
549
+ });
550
+ const applyReceiptSchema = z.object({
551
+ protocolVersion: surveyAssistantProtocolVersionSchema,
552
+ turnId: z.string().min(1),
553
+ changeSetId: z.string().min(1),
554
+ beforeVersion: surveyDocumentVersionSchema,
555
+ afterVersion: surveyDocumentVersionSchema.optional(),
556
+ status: surveyApplyStatusSchema,
557
+ operationCount: z.number().int().nonnegative(),
558
+ commit: z.object({
559
+ id: z.string().min(1).optional(),
560
+ index: z.number().int().optional()
561
+ }).optional(),
562
+ issues: z.array(surveyValidationIssueSchema).optional(),
563
+ createdAt: z.string().min(1)
564
+ });
565
+ const surveyAssistantDraftChangeEventSchema = surveyChangeSetSchema;
566
+ //#endregion
567
+ export { MAX_USER_ERROR_MESSAGE_LENGTH as $, surveyAssistantTranslateContentResultSchema as A, surveyAssistantDraftChangePreconditionSchema as B, surveyAssistantSuggestedTextSchema as C, surveyAssistantTaskRequestSchema as D, surveyAssistantTaskItemSummarySchema as E, surveyAssistantThreadTranscriptSchema as F, surveyDocumentVersionSchema as G, surveyAssistantSnapshotPayloadSchema as H, updateSurveyAssistantThreadInputSchema as I, isSurveyAssistantErrorRetryable as J, surveyEditorUIContextSchema as K, SURVEY_ASSISTANT_PROTOCOL_VERSION as L, createSurveyAssistantThreadInputSchema as M, surveyAssistantThreadListSchema as N, surveyAssistantTranslateContentEntrySchema as O, surveyAssistantThreadSchema as P, surveyAssistantErrorInfoSchema as Q, SURVEY_EDITOR_UI_TASK_MAX_DATA_LENGTH as R, surveyAssistantSuggestResponseSettingsResultSchema as S, surveyAssistantTaskInvocationModeSchema as T, surveyAssistantSnapshotSchema as U, surveyAssistantProtocolVersionSchema as V, surveyDocumentSnapshotSchema as W, serializeSurveyAssistantError as X, parseSurveyAssistantError as Y, surveyAssistantErrorCodeSchema as Z, surveyAssistantSuggestItemLabelInputSchema as _, surveyApplyStatusSchema as a, surveyAssistantSuggestResponseNameResultSchema as b, surveyAssistantDraftChangeEventSchema as c, surveyBatchApplyResultSchema as d, getSurveyAssistantEmbeddedBinaryMarker as et, surveyChangeSetSchema as f, surveyAssistantKeySuggestionSchema as g, surveyAssistantKeySuggestionCategorySchema as h, surveyApplyResultSchema as i, SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE as j, surveyAssistantTranslateContentInputSchema as k, surveyAssistantTurnFinalSchema as l, surveyAssistantModelOptionSchema as m, SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE as n, redactSurveyAssistantDiagnosticSecrets as nt, surveyAssistantApplyOutcomeSchema as o, surveyAssistantModelCatalogSchema as p, surveyEditorUITaskSchema as q, applyReceiptSchema as r, sanitizeSurveyAssistantDiagnosticText as rt, surveyAssistantApplyPolicySchema as s, SURVEY_ASSISTANT_TURN_FINAL_DATA_NAME as t, isSurveyAssistantSensitiveMetadataKey as tt, surveyAssistantTurnTerminationReasonSchema as u, surveyAssistantSuggestItemLabelResultSchema as v, surveyAssistantTaskContextSchema as w, surveyAssistantSuggestResponseSettingsInputSchema as x, surveyAssistantSuggestResponseNameInputSchema as y, rawSurveyDocumentSchema as z };
568
+
569
+ //# sourceMappingURL=protocol-BQ7uIDYT.mjs.map