@case-framework/survey-assistant 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -3
- package/dist/{attachments-B0hg3vpT.mjs → attachments-BuNni5vB.mjs} +1 -1
- package/dist/{attachments-B0hg3vpT.mjs.map → attachments-BuNni5vB.mjs.map} +1 -1
- package/dist/{authoring-references-BJQ_1nMX.mjs → authoring-references-CmwLc_C8.mjs} +49 -32
- package/dist/authoring-references-CmwLc_C8.mjs.map +1 -0
- package/dist/capabilities-D55dq-fO.mjs +582 -0
- package/dist/capabilities-D55dq-fO.mjs.map +1 -0
- package/dist/capabilities-default.d.mts +5 -12
- package/dist/capabilities-default.d.mts.map +1 -1
- package/dist/capabilities-default.mjs +2 -411
- package/dist/capabilities-z95e1mti.d.mts +117 -0
- package/dist/capabilities-z95e1mti.d.mts.map +1 -0
- package/dist/{constants-0UHGFcRJ.mjs → constants-Ct-vv9cu.mjs} +1 -1
- package/dist/{constants-0UHGFcRJ.mjs.map → constants-Ct-vv9cu.mjs.map} +1 -1
- package/dist/{constants-Be91Gay9.d.mts → constants-HL_klgJl.d.mts} +7 -28
- package/dist/constants-HL_klgJl.d.mts.map +1 -0
- package/dist/{controller-proxy-BH05e-C2.mjs → controller-proxy-BQ1YsVxJ.mjs} +12 -21
- package/dist/controller-proxy-BQ1YsVxJ.mjs.map +1 -0
- package/dist/controller-proxy-Cmzdr9tV.d.mts +65 -0
- package/dist/controller-proxy-Cmzdr9tV.d.mts.map +1 -0
- package/dist/default-D22AKTqE.mjs +233 -0
- package/dist/default-D22AKTqE.mjs.map +1 -0
- package/dist/{digest-SJmoYVaK.d.mts → digest-FnTTDBq2.d.mts} +2 -3
- package/dist/digest-FnTTDBq2.d.mts.map +1 -0
- package/dist/digest.d.mts +1 -1
- package/dist/digest.mjs.map +1 -1
- package/dist/engine-D950TfvC.mjs +3098 -0
- package/dist/engine-D950TfvC.mjs.map +1 -0
- package/dist/engine.d.mts +4 -3
- package/dist/engine.mjs +3 -3
- package/dist/{fair-guidance-CRYCRxQm.mjs → fair-guidance-BmO4PswW.mjs} +1 -1
- package/dist/{fair-guidance-CRYCRxQm.mjs.map → fair-guidance-BmO4PswW.mjs.map} +1 -1
- package/dist/{index-l_EK4yK7.d.mts → index-B8TLBd1G.d.mts} +18 -72
- package/dist/index-B8TLBd1G.d.mts.map +1 -0
- package/dist/index-CaX3hZmr.d.mts +23813 -0
- package/dist/index-CaX3hZmr.d.mts.map +1 -0
- package/dist/{index-x0qprHgK.d.mts → index-CeUlGkoU.d.mts} +58 -28
- package/dist/index-CeUlGkoU.d.mts.map +1 -0
- package/dist/{index-nhrgbgO5.d.mts → index-DYHdvSE8.d.mts} +347 -88
- package/dist/index-DYHdvSE8.d.mts.map +1 -0
- package/dist/lifecycle-DFzxVxpq.d.mts +54346 -0
- package/dist/lifecycle-DFzxVxpq.d.mts.map +1 -0
- package/dist/{memory-thread-repository-KWHQWFEW.mjs → memory-thread-repository-DmLadygY.mjs} +60 -30
- package/dist/memory-thread-repository-DmLadygY.mjs.map +1 -0
- package/dist/protocol-BQ7uIDYT.mjs +569 -0
- package/dist/protocol-BQ7uIDYT.mjs.map +1 -0
- package/dist/protocol.d.mts +4 -4
- package/dist/protocol.mjs +4 -3
- package/dist/{react-B3ybjJ-X.mjs → react-DybJ5pWw.mjs} +159 -46
- package/dist/react-DybJ5pWw.mjs.map +1 -0
- package/dist/react-integration.d.mts +2 -2
- package/dist/react-integration.mjs +2 -2
- package/dist/react.d.mts +3 -3
- package/dist/react.mjs +3 -3
- package/dist/references/assistant-operations.md +224 -180
- package/dist/references/core-rules.md +6 -3
- package/dist/references/element-types.md +189 -0
- package/dist/references/expressions.md +307 -168
- package/dist/references/fair-by-design.md +9 -9
- package/dist/references/follow-ups.md +151 -0
- package/dist/references/localization.md +26 -12
- package/dist/references/response-variables.md +38 -0
- package/dist/references/rich-text-content.md +22 -43
- package/dist/references/source-material-surveys.md +20 -24
- package/dist/references/survey-data-model.md +36 -102
- package/dist/{request-context-CG4SWijt.mjs → request-context-KVh8VjgH.mjs} +4 -10
- package/dist/request-context-KVh8VjgH.mjs.map +1 -0
- package/dist/{request-guardrails-TmgQtqp4.mjs → request-guardrails-C0ugBOp0.mjs} +6 -5
- package/dist/request-guardrails-C0ugBOp0.mjs.map +1 -0
- package/dist/server-agent.d.mts +62 -43
- package/dist/server-agent.d.mts.map +1 -1
- package/dist/server-agent.mjs +73 -40
- package/dist/server-agent.mjs.map +1 -1
- package/dist/server-runtime.d.mts +24 -42
- package/dist/server-runtime.d.mts.map +1 -1
- package/dist/server-runtime.mjs +12 -12
- package/dist/server-runtime.mjs.map +1 -1
- package/dist/server-tasks.d.mts +2 -2
- package/dist/server-tasks.mjs +2 -313
- package/dist/server-tools.d.mts +1 -1
- package/dist/server-tools.mjs +1 -1
- package/dist/server.d.mts +14 -36
- package/dist/server.d.mts.map +1 -1
- package/dist/server.mjs +5 -5
- package/dist/server.mjs.map +1 -1
- package/dist/storage-postgres.d.mts +9 -25
- package/dist/storage-postgres.d.mts.map +1 -1
- package/dist/storage-postgres.mjs +5 -4
- package/dist/storage-postgres.mjs.map +1 -1
- package/dist/tasks-Coh5N027.mjs +397 -0
- package/dist/tasks-Coh5N027.mjs.map +1 -0
- package/dist/{tasks-CYqrcaRO.d.mts → tasks-wb9M-bak.d.mts} +25 -41
- package/dist/tasks-wb9M-bak.d.mts.map +1 -0
- package/dist/thread-documents-DrHbaXqP.d.mts +119 -0
- package/dist/thread-documents-DrHbaXqP.d.mts.map +1 -0
- package/dist/{thread-handlers-DBAaU7BA.d.mts → thread-handlers-C3Iya92v.d.mts} +9 -40
- package/dist/thread-handlers-C3Iya92v.d.mts.map +1 -0
- package/dist/{tools-BvSovehT.mjs → tools-D0KBDolR.mjs} +677 -459
- package/dist/tools-D0KBDolR.mjs.map +1 -0
- package/dist/turn-survey-draft-B34lggSG.d.mts +185 -0
- package/dist/turn-survey-draft-B34lggSG.d.mts.map +1 -0
- package/dist/ui.css +1 -1
- package/dist/ui.d.mts +15 -54
- package/dist/ui.d.mts.map +1 -1
- package/dist/ui.mjs +203 -156
- package/dist/ui.mjs.map +1 -1
- package/docs/integration.md +11 -1
- package/package.json +41 -36
- package/dist/authoring-references-BJQ_1nMX.mjs.map +0 -1
- package/dist/capabilities-1KNnNO1_.mjs +0 -73
- package/dist/capabilities-1KNnNO1_.mjs.map +0 -1
- package/dist/capabilities-DVTfogjv.d.mts +0 -193
- package/dist/capabilities-DVTfogjv.d.mts.map +0 -1
- package/dist/capabilities-default.mjs.map +0 -1
- package/dist/constants-Be91Gay9.d.mts.map +0 -1
- package/dist/controller-proxy-BH05e-C2.mjs.map +0 -1
- package/dist/controller-proxy-Bd0ZHBPF.d.mts +0 -85
- package/dist/controller-proxy-Bd0ZHBPF.d.mts.map +0 -1
- package/dist/digest-SJmoYVaK.d.mts.map +0 -1
- package/dist/engine-Bo85Oyj0.mjs +0 -6723
- package/dist/engine-Bo85Oyj0.mjs.map +0 -1
- package/dist/index-Tnqv-yKW.d.mts +0 -777
- package/dist/index-Tnqv-yKW.d.mts.map +0 -1
- package/dist/index-l_EK4yK7.d.mts.map +0 -1
- package/dist/index-nhrgbgO5.d.mts.map +0 -1
- package/dist/index-x0qprHgK.d.mts.map +0 -1
- package/dist/lifecycle-Bx0aq_4S.d.mts +0 -529
- package/dist/lifecycle-Bx0aq_4S.d.mts.map +0 -1
- package/dist/memory-thread-repository-KWHQWFEW.mjs.map +0 -1
- package/dist/protocol-BhzQbx81.mjs +0 -1173
- package/dist/protocol-BhzQbx81.mjs.map +0 -1
- package/dist/react-B3ybjJ-X.mjs.map +0 -1
- package/dist/references/embedded-forms.md +0 -126
- package/dist/references/item-types.md +0 -407
- package/dist/request-context-CG4SWijt.mjs.map +0 -1
- package/dist/request-guardrails-TmgQtqp4.mjs.map +0 -1
- package/dist/server-tasks.mjs.map +0 -1
- package/dist/tasks-CYqrcaRO.d.mts.map +0 -1
- package/dist/thread-documents-rmd6nyX9.d.mts +0 -107
- package/dist/thread-documents-rmd6nyX9.d.mts.map +0 -1
- package/dist/thread-handlers-DBAaU7BA.d.mts.map +0 -1
- package/dist/tools-BvSovehT.mjs.map +0 -1
|
@@ -1,1173 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { SURVEY_EDITOR_ITEM_COLORS } from "@case-framework/survey-core/editor/colors";
|
|
3
|
-
//#region src/protocol/sanitization.ts
|
|
4
|
-
const MAX_USER_ERROR_MESSAGE_LENGTH = 700;
|
|
5
|
-
const CONTROL_CHARACTERS = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g;
|
|
6
|
-
const DATA_URL = /data:[^;,\s]+;base64,[a-z0-9+/=_-]+/gi;
|
|
7
|
-
const BEARER_TOKEN = /\bbearer\s+[a-z0-9._~+/-]{8,}/gi;
|
|
8
|
-
const OPENAI_KEY = /\bsk-(?:proj-)?[a-z0-9_-]{8,}/gi;
|
|
9
|
-
const AUTHORIZATION_VALUE = /(authorization\s*[:=]\s*)[^\s,;]+/gi;
|
|
10
|
-
const API_KEY_VALUE = /((?:api[-_ ]?key|token|secret)\s*[:=]\s*)[^\s,;]+/gi;
|
|
11
|
-
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]");
|
|
12
|
-
const sanitizeSurveyAssistantDiagnosticText = (value, maximum = 700) => {
|
|
13
|
-
const normalized = redactSurveyAssistantDiagnosticSecrets(value).replace(/\s+/g, " ").trim();
|
|
14
|
-
if (normalized.length <= maximum) return normalized;
|
|
15
|
-
return `${normalized.slice(0, Math.max(0, maximum - 1))}…`;
|
|
16
|
-
};
|
|
17
|
-
const isSurveyAssistantSensitiveMetadataKey = (key) => {
|
|
18
|
-
const normalized = key.toLocaleLowerCase();
|
|
19
|
-
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");
|
|
20
|
-
};
|
|
21
|
-
const getSurveyAssistantEmbeddedBinaryMarker = (value, parent, key) => {
|
|
22
|
-
if (typeof value !== "string") return void 0;
|
|
23
|
-
if (key === "data" && parent?.type === "embedded" && parent.encoding === "base64") return {
|
|
24
|
-
characters: value.length,
|
|
25
|
-
redacted: "base64"
|
|
26
|
-
};
|
|
27
|
-
if (value.length > 512 && /^data:[^;,]+;base64,/.test(value)) return {
|
|
28
|
-
characters: value.length,
|
|
29
|
-
redacted: "data-url"
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
//#endregion
|
|
33
|
-
//#region src/protocol/errors.ts
|
|
34
|
-
const surveyAssistantErrorCodeSchema = z.enum([
|
|
35
|
-
"attachment_unavailable",
|
|
36
|
-
"authorization_failed",
|
|
37
|
-
"model_unavailable",
|
|
38
|
-
"rate_limited",
|
|
39
|
-
"request_failed"
|
|
40
|
-
]);
|
|
41
|
-
const surveyAssistantErrorInfoSchema = z.object({
|
|
42
|
-
code: surveyAssistantErrorCodeSchema,
|
|
43
|
-
detail: z.string().optional(),
|
|
44
|
-
retryable: z.boolean().optional(),
|
|
45
|
-
upstreamStatus: z.number().int().min(100).max(599).optional(),
|
|
46
|
-
providerRequestId: z.string().trim().min(1).max(240).optional(),
|
|
47
|
-
providerMessage: z.string().max(700).optional()
|
|
48
|
-
});
|
|
49
|
-
const isSurveyAssistantErrorRetryable = (error, httpStatus) => {
|
|
50
|
-
if (error.retryable !== void 0) return error.retryable;
|
|
51
|
-
if (error.code === "rate_limited") return true;
|
|
52
|
-
const status = httpStatus ?? error.upstreamStatus;
|
|
53
|
-
if (error.code === "request_failed") return status === void 0 || status >= 500;
|
|
54
|
-
return error.code === "attachment_unavailable" && status !== void 0 && status >= 500;
|
|
55
|
-
};
|
|
56
|
-
const ERROR_PREFIX = "case-survey-assistant-error:";
|
|
57
|
-
const serializeSurveyAssistantError = (error) => `${ERROR_PREFIX}${JSON.stringify(surveyAssistantErrorInfoSchema.parse(error))}`;
|
|
58
|
-
const parseSurveyAssistantError = (value) => {
|
|
59
|
-
if (typeof value === "object" && value !== null && "code" in value) {
|
|
60
|
-
const detail = "detail" in value && typeof value.detail === "string" ? value.detail : "message" in value && typeof value.message === "string" ? value.message : void 0;
|
|
61
|
-
const parsed = surveyAssistantErrorInfoSchema.safeParse({
|
|
62
|
-
code: value.code,
|
|
63
|
-
detail: detail ? sanitizeSurveyAssistantDiagnosticText(detail, 700) : void 0,
|
|
64
|
-
retryable: "retryable" in value && typeof value.retryable === "boolean" ? value.retryable : void 0,
|
|
65
|
-
upstreamStatus: "upstreamStatus" in value && typeof value.upstreamStatus === "number" ? value.upstreamStatus : void 0,
|
|
66
|
-
providerRequestId: "providerRequestId" in value && typeof value.providerRequestId === "string" ? sanitizeSurveyAssistantDiagnosticText(value.providerRequestId, 240) : void 0,
|
|
67
|
-
providerMessage: "providerMessage" in value && typeof value.providerMessage === "string" ? sanitizeSurveyAssistantDiagnosticText(value.providerMessage, 700) : void 0
|
|
68
|
-
});
|
|
69
|
-
if (parsed.success) return parsed.data;
|
|
70
|
-
}
|
|
71
|
-
const message = value instanceof Error ? value.message : typeof value === "string" ? value : typeof value === "object" && value !== null && "message" in value ? String(value.message) : "";
|
|
72
|
-
if (message.startsWith(ERROR_PREFIX)) try {
|
|
73
|
-
const parsed = surveyAssistantErrorInfoSchema.safeParse(JSON.parse(message.slice(28)));
|
|
74
|
-
if (parsed.success) return parsed.data;
|
|
75
|
-
} catch {}
|
|
76
|
-
return {
|
|
77
|
-
code: "request_failed",
|
|
78
|
-
...message.trim() ? { detail: sanitizeSurveyAssistantDiagnosticText(message, 700) } : {}
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
//#endregion
|
|
82
|
-
//#region src/protocol/content.ts
|
|
83
|
-
const jsonValueSchema = z.lazy(() => z.union([
|
|
84
|
-
z.string(),
|
|
85
|
-
z.number(),
|
|
86
|
-
z.boolean(),
|
|
87
|
-
z.null(),
|
|
88
|
-
z.array(jsonValueSchema),
|
|
89
|
-
z.record(z.string(), jsonValueSchema)
|
|
90
|
-
]));
|
|
91
|
-
const contentAttributesSchema = z.record(z.string(), jsonValueSchema);
|
|
92
|
-
const richTextStyleSchema = z.object({
|
|
93
|
-
weight: z.enum(["strong", "normal"]).optional(),
|
|
94
|
-
italic: z.enum(["italic", "normal"]).optional(),
|
|
95
|
-
underline: z.enum(["underline", "none"]).optional(),
|
|
96
|
-
color: z.enum([
|
|
97
|
-
"primary",
|
|
98
|
-
"accent",
|
|
99
|
-
"default"
|
|
100
|
-
]).optional()
|
|
101
|
-
});
|
|
102
|
-
const richTextTextInlineSchema = z.object({
|
|
103
|
-
type: z.literal("text"),
|
|
104
|
-
text: z.string().max(2e4),
|
|
105
|
-
style: richTextStyleSchema.optional(),
|
|
106
|
-
attrs: contentAttributesSchema.optional()
|
|
107
|
-
});
|
|
108
|
-
const richTextTemplateInlineSchema = z.object({
|
|
109
|
-
type: z.literal("template"),
|
|
110
|
-
key: z.string().min(1).max(240),
|
|
111
|
-
style: richTextStyleSchema.optional(),
|
|
112
|
-
attrs: contentAttributesSchema.optional()
|
|
113
|
-
});
|
|
114
|
-
const richTextLineBreakInlineSchema = z.object({
|
|
115
|
-
type: z.literal("lineBreak"),
|
|
116
|
-
attrs: contentAttributesSchema.optional()
|
|
117
|
-
});
|
|
118
|
-
const richTextLinkChildInlineSchema = z.discriminatedUnion("type", [
|
|
119
|
-
richTextTextInlineSchema,
|
|
120
|
-
richTextTemplateInlineSchema,
|
|
121
|
-
richTextLineBreakInlineSchema
|
|
122
|
-
]);
|
|
123
|
-
const richTextLinkInlineSchema = z.object({
|
|
124
|
-
type: z.literal("link"),
|
|
125
|
-
href: z.string().min(1).max(2e3),
|
|
126
|
-
target: z.string().max(120).nullable().optional(),
|
|
127
|
-
rel: z.string().max(240).nullable().optional(),
|
|
128
|
-
title: z.string().max(1e3).nullable().optional(),
|
|
129
|
-
attrs: contentAttributesSchema.optional(),
|
|
130
|
-
children: z.array(richTextLinkChildInlineSchema).max(200)
|
|
131
|
-
});
|
|
132
|
-
const richTextInlineExtensionSchema = z.object({
|
|
133
|
-
type: z.literal("inlineExtension"),
|
|
134
|
-
name: z.string().min(1).max(120),
|
|
135
|
-
attrs: contentAttributesSchema.optional()
|
|
136
|
-
});
|
|
137
|
-
const richTextInlineSchema = z.discriminatedUnion("type", [
|
|
138
|
-
richTextTextInlineSchema,
|
|
139
|
-
richTextTemplateInlineSchema,
|
|
140
|
-
richTextLinkInlineSchema,
|
|
141
|
-
richTextLineBreakInlineSchema,
|
|
142
|
-
richTextInlineExtensionSchema
|
|
143
|
-
]);
|
|
144
|
-
const textAlignmentSchema = z.enum([
|
|
145
|
-
"left",
|
|
146
|
-
"center",
|
|
147
|
-
"right",
|
|
148
|
-
"justify"
|
|
149
|
-
]);
|
|
150
|
-
const richTextParagraphBlockSchema = z.object({
|
|
151
|
-
type: z.literal("paragraph"),
|
|
152
|
-
children: z.array(richTextInlineSchema).max(500),
|
|
153
|
-
alignment: textAlignmentSchema.optional(),
|
|
154
|
-
attrs: contentAttributesSchema.optional()
|
|
155
|
-
});
|
|
156
|
-
const richTextHeadingBlockSchema = z.object({
|
|
157
|
-
type: z.literal("heading"),
|
|
158
|
-
level: z.union([z.literal(1), z.literal(2)]),
|
|
159
|
-
children: z.array(richTextInlineSchema).max(500),
|
|
160
|
-
alignment: textAlignmentSchema.optional(),
|
|
161
|
-
attrs: contentAttributesSchema.optional()
|
|
162
|
-
});
|
|
163
|
-
const richTextListItemBlockSchema = z.object({
|
|
164
|
-
type: z.literal("listItem"),
|
|
165
|
-
children: z.array(richTextParagraphBlockSchema).max(100),
|
|
166
|
-
attrs: contentAttributesSchema.optional()
|
|
167
|
-
});
|
|
168
|
-
const richTextBulletListBlockSchema = z.object({
|
|
169
|
-
type: z.literal("bulletList"),
|
|
170
|
-
items: z.array(richTextListItemBlockSchema).max(100),
|
|
171
|
-
attrs: contentAttributesSchema.optional()
|
|
172
|
-
});
|
|
173
|
-
const richTextImageDimensionSchema = z.union([z.object({
|
|
174
|
-
unit: z.literal("px"),
|
|
175
|
-
value: z.number().finite().nonnegative()
|
|
176
|
-
}), z.object({
|
|
177
|
-
unit: z.literal("%"),
|
|
178
|
-
value: z.number().finite().nonnegative()
|
|
179
|
-
})]);
|
|
180
|
-
const richTextImageSourceSchema = z.discriminatedUnion("type", [z.object({
|
|
181
|
-
type: z.literal("asset"),
|
|
182
|
-
assetId: z.string().min(1).max(240)
|
|
183
|
-
}), z.object({
|
|
184
|
-
type: z.literal("external"),
|
|
185
|
-
url: z.string().min(1).max(2e3)
|
|
186
|
-
})]);
|
|
187
|
-
const richTextImageBlockSchema = z.object({
|
|
188
|
-
type: z.literal("image"),
|
|
189
|
-
source: richTextImageSourceSchema,
|
|
190
|
-
alt: z.string().max(2e3).optional(),
|
|
191
|
-
caption: z.array(richTextParagraphBlockSchema).max(20).optional(),
|
|
192
|
-
size: z.object({
|
|
193
|
-
width: richTextImageDimensionSchema.optional(),
|
|
194
|
-
height: richTextImageDimensionSchema.optional(),
|
|
195
|
-
maxWidth: richTextImageDimensionSchema.optional(),
|
|
196
|
-
maxHeight: richTextImageDimensionSchema.optional()
|
|
197
|
-
}).optional(),
|
|
198
|
-
alignment: textAlignmentSchema.optional(),
|
|
199
|
-
attrs: contentAttributesSchema.optional()
|
|
200
|
-
});
|
|
201
|
-
const richTextInfoBoxBlockSchema = z.object({
|
|
202
|
-
type: z.literal("infoBox"),
|
|
203
|
-
tone: z.enum(["info", "warning"]).optional(),
|
|
204
|
-
title: z.array(richTextInlineSchema).max(100).optional(),
|
|
205
|
-
collapsible: z.boolean().optional(),
|
|
206
|
-
defaultOpen: z.boolean().optional(),
|
|
207
|
-
children: z.array(richTextParagraphBlockSchema).max(100),
|
|
208
|
-
attrs: contentAttributesSchema.optional()
|
|
209
|
-
});
|
|
210
|
-
const richTextSeparatorBlockSchema = z.object({
|
|
211
|
-
type: z.literal("separator"),
|
|
212
|
-
attrs: contentAttributesSchema.optional()
|
|
213
|
-
});
|
|
214
|
-
const richTextBlockExtensionSchema = z.object({
|
|
215
|
-
type: z.literal("blockExtension"),
|
|
216
|
-
name: z.string().min(1).max(120),
|
|
217
|
-
attrs: contentAttributesSchema.optional()
|
|
218
|
-
});
|
|
219
|
-
const richTextBlockSchema = z.discriminatedUnion("type", [
|
|
220
|
-
richTextParagraphBlockSchema,
|
|
221
|
-
richTextHeadingBlockSchema,
|
|
222
|
-
richTextBulletListBlockSchema,
|
|
223
|
-
richTextImageBlockSchema,
|
|
224
|
-
richTextInfoBoxBlockSchema,
|
|
225
|
-
richTextSeparatorBlockSchema,
|
|
226
|
-
richTextBlockExtensionSchema
|
|
227
|
-
]);
|
|
228
|
-
const surveyContentSchema = z.discriminatedUnion("type", [
|
|
229
|
-
z.object({
|
|
230
|
-
type: z.literal("md"),
|
|
231
|
-
content: z.string().max(2e4)
|
|
232
|
-
}),
|
|
233
|
-
z.object({
|
|
234
|
-
type: z.literal("plain"),
|
|
235
|
-
content: z.string().max(2e4)
|
|
236
|
-
}),
|
|
237
|
-
z.object({
|
|
238
|
-
type: z.literal("richText"),
|
|
239
|
-
version: z.literal(1),
|
|
240
|
-
doc: z.object({
|
|
241
|
-
type: z.literal("doc"),
|
|
242
|
-
blocks: z.array(richTextBlockSchema).max(200)
|
|
243
|
-
})
|
|
244
|
-
})
|
|
245
|
-
]);
|
|
246
|
-
//#endregion
|
|
247
|
-
//#region src/protocol/operations.ts
|
|
248
|
-
const operationIdSchema = z.string().min(1).max(120).optional().describe("Optional client/model supplied id for correlating validation issues.");
|
|
249
|
-
const itemIdentifierSchema = z.string().min(1).max(240).describe("Survey item id, key, or fullKey.");
|
|
250
|
-
const itemKeySchema = z.string().min(1).max(120).describe("New item key. It must be unique among siblings.");
|
|
251
|
-
const itemTranslationSchema = z.object({
|
|
252
|
-
locale: z.string().min(1).max(40),
|
|
253
|
-
contentKey: z.string().min(1).max(240).describe("Item translation content key, for example \"label\" or \"content\"."),
|
|
254
|
-
plainText: z.string().max(2e4).optional().describe("Simple text content to persist for the translation key."),
|
|
255
|
-
content: surveyContentSchema.optional().describe("Canonical structured survey content to persist for the translation key. Use { \"type\": \"richText\", \"version\": 1, \"doc\": ... } for formatted text. The survey_change model interface also accepts documented richTextBlocks shorthand at this translation level and normalizes it to this field before canonical validation.")
|
|
256
|
-
}).refine((translation) => translation.plainText !== void 0 !== (translation.content !== void 0), { message: "Provide exactly one of plainText or content for a translation." });
|
|
257
|
-
const choiceOptionInputSchema = z.object({
|
|
258
|
-
id: z.string().min(1).max(120).optional().describe("Optional stable option id. If omitted, the validator derives a unique id."),
|
|
259
|
-
key: z.string().min(1).max(120).optional().describe("Optional coding key. If omitted, the validator derives a unique key."),
|
|
260
|
-
label: z.string().min(1).max(1e3).describe("Respondent-visible option label as a plain string. Do not pass a translation object here; add-choice-option creates the matching translation in its locale.")
|
|
261
|
-
});
|
|
262
|
-
const rawSurveyItemForCreateSchema = z.object({
|
|
263
|
-
id: z.string().min(1).max(120).optional(),
|
|
264
|
-
key: itemKeySchema,
|
|
265
|
-
itemType: z.string().min(1).max(120),
|
|
266
|
-
metadata: z.record(z.string(), z.string()).optional(),
|
|
267
|
-
config: z.unknown().optional().describe("Optional item-type config. For choiceItem, provide response options as config.options, for example [{ \"label\": \"Fuji\" }, { \"label\": \"Gala\" }]. Use config.maxSelection: 1 for single choice, null for unlimited multiple choice / select-all-that-apply, or a number greater than 1 for capped multiple choice. Put an inline embeddedForm directly on a new choice option; default an eligible one-field embeddedForm to authoringMode \"simple\" and use \"custom\" for blank or structured follow-ups. For formItem, use authoringMode \"simple\" only with one field group containing one field; use \"custom\" for blank or multi-field forms. The validator converts option labels into options.<optionId>.label translations."),
|
|
268
|
-
validations: z.record(z.string(), z.any()).optional(),
|
|
269
|
-
displayConditions: z.any().optional(),
|
|
270
|
-
disabledConditions: z.any().optional(),
|
|
271
|
-
prefills: z.array(z.any()).optional()
|
|
272
|
-
}).passthrough();
|
|
273
|
-
const jsonPointerPathSchema = z.string().max(500).describe("Survey-root JSON Pointer obtained from current raw inspection. Escape \"~\" as \"~0\" and \"/\" within one path segment as \"~1\". Use \"/-\" only as the final destination segment of an add, move, or copy that appends to an array.");
|
|
274
|
-
const jsonPatchOperationSchema = z.discriminatedUnion("op", [
|
|
275
|
-
z.object({
|
|
276
|
-
op: z.literal("add"),
|
|
277
|
-
path: jsonPointerPathSchema,
|
|
278
|
-
value: jsonValueSchema
|
|
279
|
-
}),
|
|
280
|
-
z.object({
|
|
281
|
-
op: z.literal("replace"),
|
|
282
|
-
path: jsonPointerPathSchema,
|
|
283
|
-
value: jsonValueSchema
|
|
284
|
-
}),
|
|
285
|
-
z.object({
|
|
286
|
-
op: z.literal("test"),
|
|
287
|
-
path: jsonPointerPathSchema,
|
|
288
|
-
value: jsonValueSchema
|
|
289
|
-
}),
|
|
290
|
-
z.object({
|
|
291
|
-
op: z.literal("remove"),
|
|
292
|
-
path: jsonPointerPathSchema
|
|
293
|
-
}),
|
|
294
|
-
z.object({
|
|
295
|
-
op: z.literal("move"),
|
|
296
|
-
from: jsonPointerPathSchema,
|
|
297
|
-
path: jsonPointerPathSchema
|
|
298
|
-
}),
|
|
299
|
-
z.object({
|
|
300
|
-
op: z.literal("copy"),
|
|
301
|
-
from: jsonPointerPathSchema,
|
|
302
|
-
path: jsonPointerPathSchema
|
|
303
|
-
})
|
|
304
|
-
]);
|
|
305
|
-
const createItemOperationSchema = z.object({
|
|
306
|
-
id: operationIdSchema,
|
|
307
|
-
kind: z.literal("create-item"),
|
|
308
|
-
target: z.object({
|
|
309
|
-
parentItemId: z.string().max(240).describe("Parent group item id, key, or fullKey where the new item should be inserted. Use the root group id/key for top-level items."),
|
|
310
|
-
index: z.number().int().min(0).optional()
|
|
311
|
-
}),
|
|
312
|
-
item: rawSurveyItemForCreateSchema,
|
|
313
|
-
translations: z.array(itemTranslationSchema).optional().describe("Operation-level item translations for visible content, for example [{ \"locale\": \"en\", \"contentKey\": \"title\", \"plainText\": \"Question text\" }]. Put this property inside the create-item operation beside target and item, never beside the survey_change operations array. For formatted content, the model interface accepts documented richTextBlocks shorthand and normalizes it to canonical content before validation. Form select/dropdown option labels must be translations at fields.<fieldId>.options.<optionId>.label.")
|
|
314
|
-
});
|
|
315
|
-
const updateItemKeyOperationSchema = z.object({
|
|
316
|
-
id: operationIdSchema,
|
|
317
|
-
kind: z.literal("update-item-key"),
|
|
318
|
-
itemId: itemIdentifierSchema,
|
|
319
|
-
key: itemKeySchema
|
|
320
|
-
});
|
|
321
|
-
const updateItemLabelOperationSchema = z.object({
|
|
322
|
-
id: operationIdSchema,
|
|
323
|
-
kind: z.literal("update-item-label"),
|
|
324
|
-
itemId: itemIdentifierSchema,
|
|
325
|
-
itemLabel: z.string().max(200)
|
|
326
|
-
});
|
|
327
|
-
const updateItemColorOperationSchema = z.object({
|
|
328
|
-
id: operationIdSchema,
|
|
329
|
-
kind: z.literal("update-item-color"),
|
|
330
|
-
itemId: itemIdentifierSchema,
|
|
331
|
-
color: z.enum(SURVEY_EDITOR_ITEM_COLORS).describe("One of the Survey Editor's supported item-color swatches.")
|
|
332
|
-
});
|
|
333
|
-
const updateItemTranslationOperationSchema = z.object({
|
|
334
|
-
id: operationIdSchema,
|
|
335
|
-
kind: z.literal("update-item-translation"),
|
|
336
|
-
itemId: itemIdentifierSchema,
|
|
337
|
-
locale: z.string().min(1).max(40),
|
|
338
|
-
contentKey: z.string().min(1).max(240).describe("Item translation content key, for example \"label\"."),
|
|
339
|
-
plainText: z.string().max(2e4).optional().describe("Simple text content to persist for the translation key."),
|
|
340
|
-
content: surveyContentSchema.optional().describe("Canonical structured survey content to persist for the translation key. Use { \"type\": \"richText\", \"version\": 1, \"doc\": ... } for formatted text. The survey_change model interface also accepts documented top-level richTextBlocks shorthand and normalizes it to this field before canonical validation.")
|
|
341
|
-
}).refine((operation) => operation.plainText !== void 0 !== (operation.content !== void 0), { message: "Provide exactly one of plainText or content for update-item-translation." });
|
|
342
|
-
const placedImageDimensionSchema = z.union([z.object({
|
|
343
|
-
unit: z.literal("px"),
|
|
344
|
-
value: z.number().finite().nonnegative()
|
|
345
|
-
}), z.object({
|
|
346
|
-
unit: z.literal("%"),
|
|
347
|
-
value: z.number().finite().nonnegative().max(100)
|
|
348
|
-
})]);
|
|
349
|
-
const placedImageSourceSchema = z.discriminatedUnion("type", [z.object({
|
|
350
|
-
type: z.literal("asset"),
|
|
351
|
-
assetId: z.string().min(1).max(240)
|
|
352
|
-
}), z.object({
|
|
353
|
-
type: z.literal("external"),
|
|
354
|
-
url: z.string().min(1).max(2e3)
|
|
355
|
-
})]);
|
|
356
|
-
const updatePlacedImageOperationSchema = z.object({
|
|
357
|
-
id: operationIdSchema,
|
|
358
|
-
kind: z.literal("update-placed-image"),
|
|
359
|
-
itemId: itemIdentifierSchema,
|
|
360
|
-
locale: z.string().min(1).max(40),
|
|
361
|
-
contentKey: z.string().min(1).max(240),
|
|
362
|
-
imageIndex: z.number().int().nonnegative().describe("Zero-based index among image blocks in the selected rich-text content value."),
|
|
363
|
-
expectedAssetId: z.string().min(1).max(240).optional(),
|
|
364
|
-
changes: z.object({
|
|
365
|
-
source: placedImageSourceSchema.optional(),
|
|
366
|
-
alt: z.string().max(2e3).nullable().optional(),
|
|
367
|
-
caption: z.string().max(2e4).nullable().optional(),
|
|
368
|
-
width: placedImageDimensionSchema.nullable().optional(),
|
|
369
|
-
height: placedImageDimensionSchema.nullable().optional(),
|
|
370
|
-
maxWidth: placedImageDimensionSchema.nullable().optional(),
|
|
371
|
-
maxHeight: placedImageDimensionSchema.nullable().optional(),
|
|
372
|
-
alignment: z.enum([
|
|
373
|
-
"left",
|
|
374
|
-
"center",
|
|
375
|
-
"right"
|
|
376
|
-
]).nullable().optional()
|
|
377
|
-
}).refine((changes) => Object.values(changes).some((value) => value !== void 0), { message: "Provide at least one placed-image property to change." })
|
|
378
|
-
});
|
|
379
|
-
const patchItemConfigOperationSchema = z.object({
|
|
380
|
-
id: operationIdSchema,
|
|
381
|
-
kind: z.literal("patch-item-config"),
|
|
382
|
-
itemId: itemIdentifierSchema,
|
|
383
|
-
patches: z.array(jsonPatchOperationSchema).min(1).max(100).describe("JSON Patch operations relative to this item's config root, for example [{ \"op\": \"replace\", \"path\": \"/max\", \"value\": 7 }]. Inspect the item first and do not include /surveyItems/<index>/config in these paths.")
|
|
384
|
-
});
|
|
385
|
-
const formTargetSchema = z.object({
|
|
386
|
-
itemId: itemIdentifierSchema,
|
|
387
|
-
optionId: z.string().min(1).max(240).optional().describe("Choice option id when targeting an inline embedded form.")
|
|
388
|
-
});
|
|
389
|
-
const formTranslationsSchema = z.array(itemTranslationSchema).max(100).optional().describe("Translations written atomically with this form structure change. Put this property inside the form operation object, never beside the survey_change operations array. Content keys are relative to the form; embedded-form prefixes are added automatically.");
|
|
390
|
-
const formFieldInputSchema = z.object({
|
|
391
|
-
id: z.string().min(1).max(120),
|
|
392
|
-
key: z.string().min(1).max(120),
|
|
393
|
-
type: z.enum([
|
|
394
|
-
"input",
|
|
395
|
-
"textarea",
|
|
396
|
-
"number",
|
|
397
|
-
"datepicker",
|
|
398
|
-
"switch",
|
|
399
|
-
"select",
|
|
400
|
-
"slider"
|
|
401
|
-
]),
|
|
402
|
-
controller: z.record(z.string(), z.unknown()),
|
|
403
|
-
required: z.boolean().optional(),
|
|
404
|
-
validations: z.array(z.record(z.string(), z.unknown())).optional()
|
|
405
|
-
}).passthrough();
|
|
406
|
-
const formFieldGroupInputSchema = z.object({
|
|
407
|
-
id: z.string().min(1).max(120),
|
|
408
|
-
layout: z.object({
|
|
409
|
-
base: z.number().int().min(1).max(4),
|
|
410
|
-
xs: z.number().int().min(1).max(4),
|
|
411
|
-
sm: z.number().int().min(1).max(4),
|
|
412
|
-
md: z.number().int().min(1).max(4),
|
|
413
|
-
xl: z.number().int().min(1).max(4)
|
|
414
|
-
}).describe("Responsive column counts from 1 to 4. Use 1 at every breakpoint for a lone full-width field.").optional(),
|
|
415
|
-
fields: z.array(formFieldInputSchema).max(200).optional(),
|
|
416
|
-
hasDisplayCondition: z.boolean().optional()
|
|
417
|
-
}).passthrough();
|
|
418
|
-
const upsertFormFieldGroupOperationSchema = z.object({
|
|
419
|
-
id: operationIdSchema,
|
|
420
|
-
kind: z.literal("upsert-form-field-group"),
|
|
421
|
-
target: formTargetSchema,
|
|
422
|
-
index: z.number().int().min(0).optional(),
|
|
423
|
-
group: formFieldGroupInputSchema,
|
|
424
|
-
translations: formTranslationsSchema
|
|
425
|
-
});
|
|
426
|
-
const removeFormFieldGroupOperationSchema = z.object({
|
|
427
|
-
id: operationIdSchema,
|
|
428
|
-
kind: z.literal("remove-form-field-group"),
|
|
429
|
-
target: formTargetSchema,
|
|
430
|
-
groupId: z.string().min(1).max(240)
|
|
431
|
-
});
|
|
432
|
-
const reorderFormFieldGroupsOperationSchema = z.object({
|
|
433
|
-
id: operationIdSchema,
|
|
434
|
-
kind: z.literal("reorder-form-field-groups"),
|
|
435
|
-
target: formTargetSchema,
|
|
436
|
-
groupIds: z.array(z.string().min(1).max(240)).min(1).max(100).describe("Complete desired order containing every existing form-field group id exactly once.")
|
|
437
|
-
});
|
|
438
|
-
const upsertFormFieldOperationSchema = z.object({
|
|
439
|
-
id: operationIdSchema,
|
|
440
|
-
kind: z.literal("upsert-form-field"),
|
|
441
|
-
target: formTargetSchema,
|
|
442
|
-
groupId: z.string().min(1).max(240),
|
|
443
|
-
index: z.number().int().min(0).optional(),
|
|
444
|
-
field: formFieldInputSchema,
|
|
445
|
-
translations: formTranslationsSchema
|
|
446
|
-
});
|
|
447
|
-
const removeFormFieldOperationSchema = z.object({
|
|
448
|
-
id: operationIdSchema,
|
|
449
|
-
kind: z.literal("remove-form-field"),
|
|
450
|
-
target: formTargetSchema,
|
|
451
|
-
fieldId: z.string().min(1).max(240)
|
|
452
|
-
});
|
|
453
|
-
const moveFormFieldOperationSchema = z.object({
|
|
454
|
-
id: operationIdSchema,
|
|
455
|
-
kind: z.literal("move-form-field"),
|
|
456
|
-
target: formTargetSchema,
|
|
457
|
-
fieldId: z.string().min(1).max(240),
|
|
458
|
-
targetGroupId: z.string().min(1).max(240),
|
|
459
|
-
index: z.number().int().min(0).optional()
|
|
460
|
-
});
|
|
461
|
-
const setEmbeddedFormOperationSchema = z.object({
|
|
462
|
-
id: operationIdSchema,
|
|
463
|
-
kind: z.literal("set-embedded-form"),
|
|
464
|
-
itemId: itemIdentifierSchema,
|
|
465
|
-
optionId: z.string().min(1).max(240),
|
|
466
|
-
form: z.object({
|
|
467
|
-
id: z.string().min(1).max(120),
|
|
468
|
-
authoringMode: z.enum(["simple", "custom"]).optional().describe("Use \"simple\" only for exactly one field group containing exactly one field; omitted or malformed simple mode normalizes to \"custom\"."),
|
|
469
|
-
fieldGroups: z.array(formFieldGroupInputSchema).max(100)
|
|
470
|
-
}).passthrough(),
|
|
471
|
-
translations: formTranslationsSchema
|
|
472
|
-
});
|
|
473
|
-
const removeEmbeddedFormOperationSchema = z.object({
|
|
474
|
-
id: operationIdSchema,
|
|
475
|
-
kind: z.literal("remove-embedded-form"),
|
|
476
|
-
itemId: itemIdentifierSchema,
|
|
477
|
-
optionId: z.string().min(1).max(240)
|
|
478
|
-
});
|
|
479
|
-
const addChoiceOptionOperationSchema = z.object({
|
|
480
|
-
id: operationIdSchema,
|
|
481
|
-
kind: z.literal("add-choice-option"),
|
|
482
|
-
itemId: itemIdentifierSchema,
|
|
483
|
-
locale: z.string().min(1).max(40).optional(),
|
|
484
|
-
index: z.number().int().min(0).optional(),
|
|
485
|
-
option: choiceOptionInputSchema
|
|
486
|
-
});
|
|
487
|
-
const updateChoiceOptionLabelOperationSchema = z.object({
|
|
488
|
-
id: operationIdSchema,
|
|
489
|
-
kind: z.literal("update-choice-option-label"),
|
|
490
|
-
itemId: itemIdentifierSchema,
|
|
491
|
-
optionId: z.string().min(1).max(240).describe("Existing choice option id, key, or current visible label."),
|
|
492
|
-
locale: z.string().min(1).max(40).optional(),
|
|
493
|
-
label: z.string().min(1).max(1e3).describe("New respondent-visible option label.")
|
|
494
|
-
});
|
|
495
|
-
const removeChoiceOptionOperationSchema = z.object({
|
|
496
|
-
id: operationIdSchema,
|
|
497
|
-
kind: z.literal("remove-choice-option"),
|
|
498
|
-
itemId: itemIdentifierSchema,
|
|
499
|
-
optionId: z.string().min(1).max(240).describe("Existing choice option id, key, or current visible label.")
|
|
500
|
-
});
|
|
501
|
-
const reorderChoiceOptionsOperationSchema = z.object({
|
|
502
|
-
id: operationIdSchema,
|
|
503
|
-
kind: z.literal("reorder-choice-options"),
|
|
504
|
-
itemId: itemIdentifierSchema,
|
|
505
|
-
optionIds: z.array(z.string().min(1).max(240)).min(1).max(100).describe("Complete desired order of existing choice options. Entries can be option ids, keys, or current visible labels.")
|
|
506
|
-
});
|
|
507
|
-
const removeItemOperationSchema = z.object({
|
|
508
|
-
id: operationIdSchema,
|
|
509
|
-
kind: z.literal("remove-item"),
|
|
510
|
-
itemId: itemIdentifierSchema,
|
|
511
|
-
includeChildren: z.boolean().optional().describe("Must be true when removing a group item that has children.")
|
|
512
|
-
});
|
|
513
|
-
const moveItemOperationSchema = z.object({
|
|
514
|
-
id: operationIdSchema,
|
|
515
|
-
kind: z.literal("move-item"),
|
|
516
|
-
itemId: itemIdentifierSchema,
|
|
517
|
-
target: z.object({
|
|
518
|
-
parentItemId: itemIdentifierSchema,
|
|
519
|
-
index: z.number().int().min(0).optional()
|
|
520
|
-
}).describe("A different parent group and optional insertion index. Omit unchanged placements; use reorder-items for sibling order within the current parent.")
|
|
521
|
-
});
|
|
522
|
-
const reorderItemsOperationSchema = z.object({
|
|
523
|
-
id: operationIdSchema,
|
|
524
|
-
kind: z.literal("reorder-items"),
|
|
525
|
-
parentItemId: itemIdentifierSchema,
|
|
526
|
-
itemIds: z.array(itemIdentifierSchema).min(1).max(200).describe("Complete desired order containing every existing direct child of the parent group exactly once.")
|
|
527
|
-
});
|
|
528
|
-
const updateSurveyMetadataOperationSchema = z.object({
|
|
529
|
-
id: operationIdSchema,
|
|
530
|
-
kind: z.literal("update-survey-metadata"),
|
|
531
|
-
values: z.record(z.string().min(1).max(240), z.string().max(2e4).nullable())
|
|
532
|
-
});
|
|
533
|
-
const updateSurveyPaginationOperationSchema = z.object({
|
|
534
|
-
id: operationIdSchema,
|
|
535
|
-
kind: z.literal("update-survey-pagination"),
|
|
536
|
-
value: z.object({
|
|
537
|
-
large: z.number().int().min(1).max(1e3),
|
|
538
|
-
small: z.number().int().min(1).max(1e3)
|
|
539
|
-
}).nullable()
|
|
540
|
-
});
|
|
541
|
-
const updateSurveyTranslationOperationSchema = z.object({
|
|
542
|
-
id: operationIdSchema,
|
|
543
|
-
kind: z.literal("update-survey-translation"),
|
|
544
|
-
locale: z.string().min(1).max(40),
|
|
545
|
-
surface: z.enum([
|
|
546
|
-
"surveyCardContent",
|
|
547
|
-
"navigationContent",
|
|
548
|
-
"validationMessages"
|
|
549
|
-
]),
|
|
550
|
-
contentKey: z.string().min(1).max(240),
|
|
551
|
-
plainText: z.string().max(2e4).optional(),
|
|
552
|
-
content: surveyContentSchema.optional().describe("Canonical structured survey content to persist for the survey translation. The survey_change model interface also accepts documented top-level richTextBlocks shorthand and normalizes it to this field before canonical validation.")
|
|
553
|
-
}).refine((operation) => operation.plainText !== void 0 !== (operation.content !== void 0), { message: "Provide exactly one of plainText or content for update-survey-translation." });
|
|
554
|
-
const surveyLocaleSchema = z.string().trim().min(1).max(40);
|
|
555
|
-
const addSurveyLocaleOperationSchema = z.object({
|
|
556
|
-
id: operationIdSchema,
|
|
557
|
-
kind: z.literal("add-survey-locale"),
|
|
558
|
-
locale: surveyLocaleSchema.describe("New, currently absent survey locale code.")
|
|
559
|
-
}).describe("Register an empty survey locale through the editor locale-management API.");
|
|
560
|
-
const removeSurveyLocaleOperationSchema = z.object({
|
|
561
|
-
id: operationIdSchema,
|
|
562
|
-
kind: z.literal("remove-survey-locale"),
|
|
563
|
-
locale: surveyLocaleSchema.describe("Exact existing survey locale code to remove.")
|
|
564
|
-
}).describe("Destructively remove a survey locale and all survey-level and item-level translations stored for it.");
|
|
565
|
-
const imageAssetMetadataSchema = z.object({
|
|
566
|
-
name: z.string().max(500).optional(),
|
|
567
|
-
filename: z.string().max(500).optional(),
|
|
568
|
-
alt: z.string().max(2e3).optional(),
|
|
569
|
-
width: z.number().int().positive().optional(),
|
|
570
|
-
height: z.number().int().positive().optional()
|
|
571
|
-
});
|
|
572
|
-
const rawSurveyImageAssetSchema = z.object({
|
|
573
|
-
kind: z.literal("image"),
|
|
574
|
-
source: z.object({
|
|
575
|
-
type: z.literal("embedded"),
|
|
576
|
-
mediaType: z.string().regex(/^image\//),
|
|
577
|
-
encoding: z.literal("base64"),
|
|
578
|
-
data: z.string().min(1).max(8e6)
|
|
579
|
-
}),
|
|
580
|
-
metadata: imageAssetMetadataSchema.optional()
|
|
581
|
-
});
|
|
582
|
-
const setImageAssetOperationSchema = z.object({
|
|
583
|
-
id: operationIdSchema,
|
|
584
|
-
kind: z.literal("set-image-asset"),
|
|
585
|
-
assetId: z.string().min(1).max(240),
|
|
586
|
-
asset: rawSurveyImageAssetSchema
|
|
587
|
-
});
|
|
588
|
-
const updateImageAssetMetadataOperationSchema = z.object({
|
|
589
|
-
id: operationIdSchema,
|
|
590
|
-
kind: z.literal("update-image-asset-metadata"),
|
|
591
|
-
assetId: z.string().min(1).max(240),
|
|
592
|
-
metadata: z.object({
|
|
593
|
-
name: z.string().max(500).nullable().optional(),
|
|
594
|
-
filename: z.string().max(500).nullable().optional(),
|
|
595
|
-
alt: z.string().max(2e3).nullable().optional(),
|
|
596
|
-
width: z.number().int().positive().nullable().optional(),
|
|
597
|
-
height: z.number().int().positive().nullable().optional()
|
|
598
|
-
})
|
|
599
|
-
});
|
|
600
|
-
const removeImageAssetOperationSchema = z.object({
|
|
601
|
-
id: operationIdSchema,
|
|
602
|
-
kind: z.literal("remove-image-asset"),
|
|
603
|
-
assetId: z.string().min(1).max(240)
|
|
604
|
-
});
|
|
605
|
-
const surveyPatchOperationSchema = z.object({
|
|
606
|
-
id: operationIdSchema,
|
|
607
|
-
kind: z.literal("survey-json-patch"),
|
|
608
|
-
patches: z.array(jsonPatchOperationSchema).min(1).max(100).describe("Sequential JSON Patch operations applied to the survey document. Use only for an existing, inspected survey-root extension with no typed operation, patch-item-config helper, or survey_expression mutation. Parent paths must exist. Add creates or replaces an object member, inserts at an array index, or appends with /-. Replace, remove, and test require an existing path. Move and copy require an existing from path. Preserve exact JSON value types, and guard overwrites or removals with test when the current value is known.")
|
|
609
|
-
});
|
|
610
|
-
const asDiscriminable = (schema) => schema;
|
|
611
|
-
const surveyOperationSchemasByKind = {
|
|
612
|
-
"create-item": createItemOperationSchema,
|
|
613
|
-
"update-item-key": updateItemKeyOperationSchema,
|
|
614
|
-
"update-item-label": updateItemLabelOperationSchema,
|
|
615
|
-
"update-item-color": updateItemColorOperationSchema,
|
|
616
|
-
"update-item-translation": updateItemTranslationOperationSchema,
|
|
617
|
-
"update-placed-image": updatePlacedImageOperationSchema,
|
|
618
|
-
"patch-item-config": patchItemConfigOperationSchema,
|
|
619
|
-
"upsert-form-field-group": upsertFormFieldGroupOperationSchema,
|
|
620
|
-
"remove-form-field-group": removeFormFieldGroupOperationSchema,
|
|
621
|
-
"reorder-form-field-groups": reorderFormFieldGroupsOperationSchema,
|
|
622
|
-
"upsert-form-field": upsertFormFieldOperationSchema,
|
|
623
|
-
"remove-form-field": removeFormFieldOperationSchema,
|
|
624
|
-
"move-form-field": moveFormFieldOperationSchema,
|
|
625
|
-
"set-embedded-form": setEmbeddedFormOperationSchema,
|
|
626
|
-
"remove-embedded-form": removeEmbeddedFormOperationSchema,
|
|
627
|
-
"add-choice-option": addChoiceOptionOperationSchema,
|
|
628
|
-
"update-choice-option-label": updateChoiceOptionLabelOperationSchema,
|
|
629
|
-
"remove-choice-option": removeChoiceOptionOperationSchema,
|
|
630
|
-
"reorder-choice-options": reorderChoiceOptionsOperationSchema,
|
|
631
|
-
"remove-item": removeItemOperationSchema,
|
|
632
|
-
"move-item": moveItemOperationSchema,
|
|
633
|
-
"reorder-items": reorderItemsOperationSchema,
|
|
634
|
-
"update-survey-metadata": updateSurveyMetadataOperationSchema,
|
|
635
|
-
"update-survey-pagination": updateSurveyPaginationOperationSchema,
|
|
636
|
-
"update-survey-translation": updateSurveyTranslationOperationSchema,
|
|
637
|
-
"add-survey-locale": addSurveyLocaleOperationSchema,
|
|
638
|
-
"remove-survey-locale": removeSurveyLocaleOperationSchema,
|
|
639
|
-
"set-image-asset": setImageAssetOperationSchema,
|
|
640
|
-
"update-image-asset-metadata": updateImageAssetMetadataOperationSchema,
|
|
641
|
-
"remove-image-asset": removeImageAssetOperationSchema,
|
|
642
|
-
"survey-json-patch": surveyPatchOperationSchema
|
|
643
|
-
};
|
|
644
|
-
const surveyOperationSchemaOptions = Object.values(surveyOperationSchemasByKind).map((schema) => asDiscriminable(schema));
|
|
645
|
-
const surveyOperationSchema = z.discriminatedUnion("kind", surveyOperationSchemaOptions);
|
|
646
|
-
const surveyValidationIssueSchema = z.object({
|
|
647
|
-
severity: z.enum(["error", "warning"]),
|
|
648
|
-
code: z.string(),
|
|
649
|
-
message: z.string(),
|
|
650
|
-
operationIndex: z.number().int().nonnegative().optional(),
|
|
651
|
-
operationId: z.string().optional(),
|
|
652
|
-
itemId: z.string().optional()
|
|
653
|
-
});
|
|
654
|
-
const surveyValidationResultSchema = z.object({
|
|
655
|
-
valid: z.boolean(),
|
|
656
|
-
issues: z.array(surveyValidationIssueSchema),
|
|
657
|
-
warnings: z.array(surveyValidationIssueSchema),
|
|
658
|
-
normalizedOperations: z.array(surveyOperationSchema)
|
|
659
|
-
});
|
|
660
|
-
const SURVEY_OPERATION_KINDS = Object.freeze(Object.keys(surveyOperationSchemasByKind));
|
|
661
|
-
const surveyJsonPatchOperationSchema = jsonPatchOperationSchema;
|
|
662
|
-
const surveyAssistantCreateItemOperationSchema = createItemOperationSchema;
|
|
663
|
-
const surveyAssistantUpdateItemKeyOperationSchema = updateItemKeyOperationSchema;
|
|
664
|
-
const surveyAssistantUpdateItemLabelOperationSchema = updateItemLabelOperationSchema;
|
|
665
|
-
const surveyAssistantUpdateItemColorOperationSchema = updateItemColorOperationSchema;
|
|
666
|
-
const surveyAssistantUpdateItemTranslationOperationSchema = updateItemTranslationOperationSchema;
|
|
667
|
-
const surveyAssistantAddChoiceOptionOperationSchema = addChoiceOptionOperationSchema;
|
|
668
|
-
const surveyAssistantUpdateChoiceOptionLabelOperationSchema = updateChoiceOptionLabelOperationSchema;
|
|
669
|
-
const surveyAssistantRemoveChoiceOptionOperationSchema = removeChoiceOptionOperationSchema;
|
|
670
|
-
const surveyAssistantReorderChoiceOptionsOperationSchema = reorderChoiceOptionsOperationSchema;
|
|
671
|
-
const surveyAssistantRemoveItemOperationSchema = removeItemOperationSchema;
|
|
672
|
-
const surveyAssistantSurveyJsonPatchOperationSchema = surveyPatchOperationSchema;
|
|
673
|
-
const surveyAssistantOperationSchema = surveyOperationSchema;
|
|
674
|
-
const surveyAssistantValidationIssueSchema = surveyValidationIssueSchema;
|
|
675
|
-
const surveyAssistantValidationResultSchema = surveyValidationResultSchema;
|
|
676
|
-
//#endregion
|
|
677
|
-
//#region src/protocol/capabilities.ts
|
|
678
|
-
const assistantItemCreateModeSchema = z.enum([
|
|
679
|
-
"deterministic",
|
|
680
|
-
"interactive-only",
|
|
681
|
-
"unsupported"
|
|
682
|
-
]);
|
|
683
|
-
const assistantContentSurfaceSchema = z.object({
|
|
684
|
-
key: z.string().min(1),
|
|
685
|
-
role: z.enum([
|
|
686
|
-
"primary",
|
|
687
|
-
"secondary",
|
|
688
|
-
"option",
|
|
689
|
-
"field",
|
|
690
|
-
"validation"
|
|
691
|
-
]),
|
|
692
|
-
format: z.enum(["plain", "rich"]),
|
|
693
|
-
requiredOnCreate: z.boolean().optional(),
|
|
694
|
-
pattern: z.boolean().optional(),
|
|
695
|
-
aliases: z.array(z.string().min(1)).optional()
|
|
696
|
-
});
|
|
697
|
-
const assistantResponseSlotSchema = z.object({
|
|
698
|
-
key: z.string().min(1),
|
|
699
|
-
valueType: z.string().min(1)
|
|
700
|
-
});
|
|
701
|
-
const assistantItemAuthoringSchema = z.object({
|
|
702
|
-
compactHint: z.string().min(1).max(240).optional(),
|
|
703
|
-
configSummary: z.string().min(1).max(1e3).optional()
|
|
704
|
-
});
|
|
705
|
-
const assistantCreationPresetSchema = z.object({ id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$/) });
|
|
706
|
-
const assistantItemTypeManifestSchema = z.object({
|
|
707
|
-
itemType: z.string().min(1),
|
|
708
|
-
capabilityVersion: z.string().min(1),
|
|
709
|
-
displayName: z.string().min(1),
|
|
710
|
-
description: z.string().optional(),
|
|
711
|
-
defaultItemKeyPrefix: z.string().min(1).optional(),
|
|
712
|
-
create: assistantItemCreateModeSchema,
|
|
713
|
-
supportedOperations: z.array(z.enum(SURVEY_OPERATION_KINDS)),
|
|
714
|
-
contentSurfaces: z.array(assistantContentSurfaceSchema),
|
|
715
|
-
responseSlots: z.array(assistantResponseSlotSchema).optional(),
|
|
716
|
-
creationPresets: z.array(assistantCreationPresetSchema).max(100).optional(),
|
|
717
|
-
referenceTopics: z.array(z.string().min(1)).optional(),
|
|
718
|
-
authoring: assistantItemAuthoringSchema.optional()
|
|
719
|
-
});
|
|
720
|
-
const surveyAssistantCapabilityManifestSchema = z.object({
|
|
721
|
-
digest: z.string().min(1),
|
|
722
|
-
itemTypes: z.array(assistantItemTypeManifestSchema)
|
|
723
|
-
});
|
|
724
|
-
//#endregion
|
|
725
|
-
//#region src/protocol/document.ts
|
|
726
|
-
const SURVEY_ASSISTANT_PROTOCOL_VERSION = 1;
|
|
727
|
-
const surveyAssistantProtocolVersionSchema = z.literal(1);
|
|
728
|
-
const surveyDocumentVersionSchema = z.object({
|
|
729
|
-
sessionId: z.string().nullable(),
|
|
730
|
-
revision: z.number().int().nonnegative(),
|
|
731
|
-
historyIndex: z.number().int(),
|
|
732
|
-
contentHash: z.string().min(1),
|
|
733
|
-
capabilityDigest: z.string().min(1)
|
|
734
|
-
});
|
|
735
|
-
const surveyEditorUIContextSchema = z.object({
|
|
736
|
-
view: z.enum([
|
|
737
|
-
"item-editor",
|
|
738
|
-
"preview-mode",
|
|
739
|
-
"translation-mode",
|
|
740
|
-
"asset-manager"
|
|
741
|
-
]),
|
|
742
|
-
selectedItemId: z.string().optional(),
|
|
743
|
-
selectedLocale: z.string().min(1),
|
|
744
|
-
focusItemId: z.string().optional(),
|
|
745
|
-
recentItemIds: z.array(z.string()).max(10).optional(),
|
|
746
|
-
activeSurface: z.string().max(120).optional(),
|
|
747
|
-
openPanels: z.array(z.string().max(120)).max(12).optional(),
|
|
748
|
-
highlights: z.array(z.object({
|
|
749
|
-
kind: z.string().min(1).max(80),
|
|
750
|
-
itemId: z.string().optional(),
|
|
751
|
-
componentId: z.string().optional(),
|
|
752
|
-
label: z.string().max(240).optional(),
|
|
753
|
-
details: z.string().max(1e3).optional()
|
|
754
|
-
})).max(12).optional(),
|
|
755
|
-
history: z.object({
|
|
756
|
-
currentIndex: z.number().int(),
|
|
757
|
-
totalEntries: z.number().int().nonnegative(),
|
|
758
|
-
canUndo: z.boolean(),
|
|
759
|
-
canRedo: z.boolean(),
|
|
760
|
-
recent: z.array(z.object({
|
|
761
|
-
index: z.number().int().nonnegative(),
|
|
762
|
-
kind: z.enum(["survey-snapshot", "asset-change"]),
|
|
763
|
-
label: z.string(),
|
|
764
|
-
source: z.enum([
|
|
765
|
-
"user",
|
|
766
|
-
"system",
|
|
767
|
-
"assistant"
|
|
768
|
-
]).optional(),
|
|
769
|
-
timestamp: z.number().nonnegative(),
|
|
770
|
-
isCurrent: z.boolean()
|
|
771
|
-
})).max(12)
|
|
772
|
-
}).optional()
|
|
773
|
-
});
|
|
774
|
-
const rawSurveyItemSchema = z.object({
|
|
775
|
-
id: z.string().min(1),
|
|
776
|
-
key: z.string().min(1),
|
|
777
|
-
itemType: z.string().min(1)
|
|
778
|
-
}).passthrough();
|
|
779
|
-
const rawSurveyTranslationsSchema = z.record(z.string(), z.object({ itemTranslations: z.record(z.string(), z.record(z.string(), surveyContentSchema)).optional() }).passthrough());
|
|
780
|
-
const rawSurveyDocumentSchema = z.object({
|
|
781
|
-
$schema: z.string().min(1),
|
|
782
|
-
surveyItems: z.array(rawSurveyItemSchema).min(1),
|
|
783
|
-
translations: rawSurveyTranslationsSchema.optional()
|
|
784
|
-
}).passthrough();
|
|
785
|
-
const surveyDocumentSnapshotSchema = z.object({
|
|
786
|
-
protocolVersion: surveyAssistantProtocolVersionSchema,
|
|
787
|
-
version: surveyDocumentVersionSchema,
|
|
788
|
-
survey: rawSurveyDocumentSchema,
|
|
789
|
-
ui: surveyEditorUIContextSchema,
|
|
790
|
-
capabilities: surveyAssistantCapabilityManifestSchema,
|
|
791
|
-
createdAt: z.string().min(1)
|
|
792
|
-
});
|
|
793
|
-
const surveyAssistantSnapshotSchema = surveyDocumentSnapshotSchema;
|
|
794
|
-
const surveyAssistantSnapshotPayloadSchema = surveyDocumentSnapshotSchema;
|
|
795
|
-
const surveyAssistantDraftChangePreconditionSchema = surveyDocumentVersionSchema;
|
|
796
|
-
//#endregion
|
|
797
|
-
//#region src/protocol/threads.ts
|
|
798
|
-
const SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE = "data-survey-assistant-attachment";
|
|
799
|
-
const surveyAssistantThreadSchema = z.object({
|
|
800
|
-
id: z.string().min(1).max(240),
|
|
801
|
-
title: z.string().min(1).max(160),
|
|
802
|
-
titleMode: z.enum(["automatic", "manual"]),
|
|
803
|
-
createdAt: z.string().datetime(),
|
|
804
|
-
updatedAt: z.string().datetime()
|
|
805
|
-
});
|
|
806
|
-
const surveyAssistantThreadListSchema = z.object({
|
|
807
|
-
nextCursor: z.string().min(1).max(240).optional(),
|
|
808
|
-
threads: z.array(surveyAssistantThreadSchema)
|
|
809
|
-
});
|
|
810
|
-
const surveyAssistantThreadTranscriptSchema = z.object({
|
|
811
|
-
nextCursor: z.string().min(1).max(240).optional(),
|
|
812
|
-
thread: surveyAssistantThreadSchema,
|
|
813
|
-
messages: z.array(z.unknown())
|
|
814
|
-
});
|
|
815
|
-
const createSurveyAssistantThreadInputSchema = z.object({ title: z.string().trim().min(1).max(160).optional() });
|
|
816
|
-
const updateSurveyAssistantThreadInputSchema = z.union([z.object({
|
|
817
|
-
mode: z.literal("automatic"),
|
|
818
|
-
title: z.string().trim().min(1).max(160).optional()
|
|
819
|
-
}), z.object({
|
|
820
|
-
mode: z.literal("manual").optional(),
|
|
821
|
-
title: z.string().trim().min(1).max(160)
|
|
822
|
-
})]);
|
|
823
|
-
//#endregion
|
|
824
|
-
//#region src/protocol/tasks.ts
|
|
825
|
-
const surveyAssistantTaskInvocationModeSchema = z.enum(["user", "background"]);
|
|
826
|
-
const surveyAssistantSuggestedTextSchema = z.object({ text: z.string().min(1) });
|
|
827
|
-
const surveyAssistantKeySuggestionCategorySchema = z.enum([
|
|
828
|
-
"survey-pattern",
|
|
829
|
-
"compact",
|
|
830
|
-
"preferred",
|
|
831
|
-
"fair"
|
|
832
|
-
]);
|
|
833
|
-
const surveyAssistantKeySuggestionSchema = surveyAssistantSuggestedTextSchema.extend({
|
|
834
|
-
category: surveyAssistantKeySuggestionCategorySchema,
|
|
835
|
-
rationale: z.string().optional()
|
|
836
|
-
});
|
|
837
|
-
const surveyAssistantSuggestItemKeyInputSchema = z.object({
|
|
838
|
-
itemId: z.string().min(1),
|
|
839
|
-
draftKey: z.string(),
|
|
840
|
-
currentKey: z.string(),
|
|
841
|
-
siblingKeys: z.array(z.string()),
|
|
842
|
-
maxSuggestions: z.number().int().positive().optional()
|
|
843
|
-
});
|
|
844
|
-
const surveyAssistantSuggestItemKeyResultSchema = z.object({ suggestions: z.array(surveyAssistantKeySuggestionSchema) });
|
|
845
|
-
const surveyAssistantSuggestItemLabelInputSchema = z.object({
|
|
846
|
-
itemId: z.string().min(1),
|
|
847
|
-
draftLabel: z.string(),
|
|
848
|
-
itemType: z.string().min(1),
|
|
849
|
-
locale: z.string().min(1).optional(),
|
|
850
|
-
maxSuggestions: z.number().int().positive().optional()
|
|
851
|
-
});
|
|
852
|
-
const surveyAssistantSuggestItemLabelResultSchema = z.object({ suggestions: z.array(surveyAssistantSuggestedTextSchema) });
|
|
853
|
-
const surveyAssistantTranslateContentEntrySchema = z.object({
|
|
854
|
-
id: z.string().min(1),
|
|
855
|
-
text: z.string(),
|
|
856
|
-
kind: z.string().min(1)
|
|
857
|
-
});
|
|
858
|
-
const surveyAssistantTranslateContentInputSchema = z.object({
|
|
859
|
-
sourceLocale: z.string().min(1),
|
|
860
|
-
targetLocales: z.array(z.string().min(1)).min(1),
|
|
861
|
-
entries: z.array(surveyAssistantTranslateContentEntrySchema).min(1)
|
|
862
|
-
});
|
|
863
|
-
const surveyAssistantTranslateContentResultSchema = z.object({ translations: z.record(z.string(), z.record(z.string(), z.string())) });
|
|
864
|
-
const surveyAssistantTaskItemSummarySchema = z.object({
|
|
865
|
-
id: z.string().min(1),
|
|
866
|
-
key: z.string(),
|
|
867
|
-
fullKey: z.string(),
|
|
868
|
-
itemType: z.string().min(1),
|
|
869
|
-
itemLabel: z.string().optional(),
|
|
870
|
-
visibleText: z.array(z.object({
|
|
871
|
-
locale: z.string().min(1),
|
|
872
|
-
contentKey: z.string().min(1),
|
|
873
|
-
text: z.string()
|
|
874
|
-
})),
|
|
875
|
-
visibleTextTruncated: z.boolean()
|
|
876
|
-
});
|
|
877
|
-
const namingRelationshipSchema = z.enum([
|
|
878
|
-
"sibling",
|
|
879
|
-
"same-type",
|
|
880
|
-
"survey"
|
|
881
|
-
]);
|
|
882
|
-
const surveyAssistantTaskContextSchema = z.object({
|
|
883
|
-
document: z.object({
|
|
884
|
-
revision: z.number().int().nonnegative(),
|
|
885
|
-
contentHash: z.string().min(1),
|
|
886
|
-
capabilityDigest: z.string().min(1)
|
|
887
|
-
}),
|
|
888
|
-
survey: z.object({
|
|
889
|
-
key: z.string().optional(),
|
|
890
|
-
locales: z.array(z.string()),
|
|
891
|
-
itemCount: z.number().int().nonnegative(),
|
|
892
|
-
selectedLocale: z.string().min(1)
|
|
893
|
-
}),
|
|
894
|
-
focus: z.object({
|
|
895
|
-
item: surveyAssistantTaskItemSummarySchema,
|
|
896
|
-
parent: surveyAssistantTaskItemSummarySchema.optional(),
|
|
897
|
-
ancestorPath: z.array(surveyAssistantTaskItemSummarySchema),
|
|
898
|
-
siblingKeys: z.array(z.string()),
|
|
899
|
-
siblingItems: z.array(surveyAssistantTaskItemSummarySchema),
|
|
900
|
-
siblingItemCount: z.number().int().nonnegative(),
|
|
901
|
-
siblingItemsTruncated: z.boolean(),
|
|
902
|
-
relatedItems: z.array(surveyAssistantTaskItemSummarySchema),
|
|
903
|
-
relatedItemCount: z.number().int().nonnegative(),
|
|
904
|
-
relatedItemsTruncated: z.boolean()
|
|
905
|
-
}).optional(),
|
|
906
|
-
naming: z.object({
|
|
907
|
-
keyExamples: z.array(z.object({
|
|
908
|
-
itemId: z.string().min(1),
|
|
909
|
-
itemType: z.string().min(1),
|
|
910
|
-
key: z.string(),
|
|
911
|
-
relationship: namingRelationshipSchema
|
|
912
|
-
})),
|
|
913
|
-
keyExampleCount: z.number().int().nonnegative(),
|
|
914
|
-
keyExamplesTruncated: z.boolean(),
|
|
915
|
-
labelExamples: z.array(z.object({
|
|
916
|
-
itemId: z.string().min(1),
|
|
917
|
-
itemType: z.string().min(1),
|
|
918
|
-
key: z.string(),
|
|
919
|
-
label: z.string(),
|
|
920
|
-
relationship: namingRelationshipSchema
|
|
921
|
-
})),
|
|
922
|
-
labelExampleCount: z.number().int().nonnegative(),
|
|
923
|
-
labelExamplesTruncated: z.boolean()
|
|
924
|
-
}).optional(),
|
|
925
|
-
translation: z.object({
|
|
926
|
-
examples: z.array(z.object({
|
|
927
|
-
itemId: z.string().min(1),
|
|
928
|
-
contentKey: z.string().min(1),
|
|
929
|
-
values: z.record(z.string(), z.string())
|
|
930
|
-
})),
|
|
931
|
-
exampleCount: z.number().int().nonnegative(),
|
|
932
|
-
examplesTruncated: z.boolean()
|
|
933
|
-
}).optional()
|
|
934
|
-
});
|
|
935
|
-
const taskRequestBase = {
|
|
936
|
-
context: surveyAssistantTaskContextSchema,
|
|
937
|
-
mode: surveyAssistantTaskInvocationModeSchema.optional(),
|
|
938
|
-
modelId: z.string().trim().min(1).max(240).optional(),
|
|
939
|
-
resourceId: z.string().trim().min(1).max(240).optional(),
|
|
940
|
-
surveyId: z.string().trim().min(1).max(240).optional()
|
|
941
|
-
};
|
|
942
|
-
const surveyAssistantTaskRequestSchema = z.discriminatedUnion("taskId", [
|
|
943
|
-
z.object({
|
|
944
|
-
...taskRequestBase,
|
|
945
|
-
taskId: z.literal("suggest-item-key"),
|
|
946
|
-
input: surveyAssistantSuggestItemKeyInputSchema
|
|
947
|
-
}),
|
|
948
|
-
z.object({
|
|
949
|
-
...taskRequestBase,
|
|
950
|
-
taskId: z.literal("suggest-item-label"),
|
|
951
|
-
input: surveyAssistantSuggestItemLabelInputSchema
|
|
952
|
-
}),
|
|
953
|
-
z.object({
|
|
954
|
-
...taskRequestBase,
|
|
955
|
-
taskId: z.literal("translate-content"),
|
|
956
|
-
input: surveyAssistantTranslateContentInputSchema
|
|
957
|
-
})
|
|
958
|
-
]);
|
|
959
|
-
//#endregion
|
|
960
|
-
//#region src/protocol/models.ts
|
|
961
|
-
const surveyAssistantModelOptionSchema = z.object({
|
|
962
|
-
id: z.string().trim().min(1).max(240),
|
|
963
|
-
label: z.string().trim().min(1).max(240)
|
|
964
|
-
});
|
|
965
|
-
const surveyAssistantModelCatalogSchema = z.object({
|
|
966
|
-
defaultModelId: z.string().trim().min(1).max(240),
|
|
967
|
-
models: z.array(surveyAssistantModelOptionSchema).min(1)
|
|
968
|
-
}).refine(({ defaultModelId, models }) => models.some((model) => model.id === defaultModelId), "The default model must be present in the model catalog.");
|
|
969
|
-
//#endregion
|
|
970
|
-
//#region src/protocol/lifecycle.ts
|
|
971
|
-
const surveyAssistantChangeVerificationReasonValues = [
|
|
972
|
-
"substantial-change",
|
|
973
|
-
"complex-change",
|
|
974
|
-
"bounded-preview",
|
|
975
|
-
"new-audit-findings"
|
|
976
|
-
];
|
|
977
|
-
const surveyAssistantTurnTerminationReasonValues = [
|
|
978
|
-
"client-abort",
|
|
979
|
-
"first-response-timeout",
|
|
980
|
-
"idle-timeout",
|
|
981
|
-
"max-duration",
|
|
982
|
-
"max-steps",
|
|
983
|
-
"length-limit",
|
|
984
|
-
"content-filter",
|
|
985
|
-
"provider-error",
|
|
986
|
-
"stream-error",
|
|
987
|
-
"incomplete-response"
|
|
988
|
-
];
|
|
989
|
-
const SURVEY_ASSISTANT_TURN_FINAL_DATA_NAME = "survey-assistant-turn-final";
|
|
990
|
-
const SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE = `data-${SURVEY_ASSISTANT_TURN_FINAL_DATA_NAME}`;
|
|
991
|
-
const surveyAssistantApplyOutcomeStatusValues = [
|
|
992
|
-
"not-applied",
|
|
993
|
-
"apply-failed",
|
|
994
|
-
"settle-failed"
|
|
995
|
-
];
|
|
996
|
-
const surveyChangeSetSchema = z.object({
|
|
997
|
-
protocolVersion: surveyAssistantProtocolVersionSchema.default(1),
|
|
998
|
-
id: z.string().min(1),
|
|
999
|
-
turnId: z.string().min(1),
|
|
1000
|
-
status: z.enum(["validated", "rejected"]),
|
|
1001
|
-
summary: z.string().min(1).max(500),
|
|
1002
|
-
operations: z.array(surveyOperationSchema),
|
|
1003
|
-
supersedesChangeIds: z.array(z.string().min(1)).max(100).optional(),
|
|
1004
|
-
pendingRepairs: z.array(z.object({
|
|
1005
|
-
changeId: z.string().min(1),
|
|
1006
|
-
targets: z.array(z.string()),
|
|
1007
|
-
requiresExplicitRetry: z.boolean(),
|
|
1008
|
-
allowsAcknowledgment: z.boolean().optional()
|
|
1009
|
-
})).optional(),
|
|
1010
|
-
precondition: surveyDocumentVersionSchema.optional(),
|
|
1011
|
-
postChange: z.object({
|
|
1012
|
-
version: surveyDocumentVersionSchema,
|
|
1013
|
-
itemCount: z.number().int().nonnegative(),
|
|
1014
|
-
localeCount: z.number().int().nonnegative(),
|
|
1015
|
-
locales: z.array(z.string().min(1)).max(32),
|
|
1016
|
-
targetCount: z.number().int().nonnegative(),
|
|
1017
|
-
touchedTargets: z.array(z.string().min(1)).max(16),
|
|
1018
|
-
touchedItemCount: z.number().int().nonnegative(),
|
|
1019
|
-
availableTouchedItemCount: z.number().int().nonnegative(),
|
|
1020
|
-
touchedItems: z.array(z.object({
|
|
1021
|
-
itemId: z.string().min(1),
|
|
1022
|
-
itemType: z.string().min(1),
|
|
1023
|
-
key: z.string().min(1),
|
|
1024
|
-
fullKey: z.string().min(1),
|
|
1025
|
-
itemLabel: z.string().optional(),
|
|
1026
|
-
translationCount: z.number().int().nonnegative(),
|
|
1027
|
-
translations: z.array(z.object({
|
|
1028
|
-
locale: z.string().min(1),
|
|
1029
|
-
contentKey: z.string().min(1),
|
|
1030
|
-
textPreview: z.string(),
|
|
1031
|
-
textLength: z.number().int().nonnegative(),
|
|
1032
|
-
truncated: z.boolean()
|
|
1033
|
-
})).max(12),
|
|
1034
|
-
responseSlotCount: z.number().int().nonnegative(),
|
|
1035
|
-
responseSlots: z.array(z.string().min(1)).max(12)
|
|
1036
|
-
})).max(6),
|
|
1037
|
-
truncated: z.boolean()
|
|
1038
|
-
}).optional(),
|
|
1039
|
-
verification: z.object({
|
|
1040
|
-
required: z.boolean(),
|
|
1041
|
-
reasons: z.array(z.enum(surveyAssistantChangeVerificationReasonValues)).min(1).max(surveyAssistantChangeVerificationReasonValues.length),
|
|
1042
|
-
newAuditFindingCount: z.number().int().nonnegative(),
|
|
1043
|
-
auditFindings: z.array(z.object({
|
|
1044
|
-
code: z.string().min(1),
|
|
1045
|
-
severity: z.enum([
|
|
1046
|
-
"error",
|
|
1047
|
-
"warning",
|
|
1048
|
-
"info"
|
|
1049
|
-
]),
|
|
1050
|
-
category: z.enum([
|
|
1051
|
-
"structure",
|
|
1052
|
-
"content",
|
|
1053
|
-
"localization",
|
|
1054
|
-
"logic",
|
|
1055
|
-
"responses",
|
|
1056
|
-
"assets",
|
|
1057
|
-
"quality"
|
|
1058
|
-
]),
|
|
1059
|
-
itemId: z.string().min(1).optional(),
|
|
1060
|
-
locale: z.string().min(1).optional(),
|
|
1061
|
-
contentKey: z.string().min(1).optional(),
|
|
1062
|
-
messagePreview: z.string(),
|
|
1063
|
-
messageLength: z.number().int().nonnegative(),
|
|
1064
|
-
truncated: z.boolean()
|
|
1065
|
-
})).max(8),
|
|
1066
|
-
truncated: z.boolean()
|
|
1067
|
-
}).optional(),
|
|
1068
|
-
validation: surveyValidationResultSchema,
|
|
1069
|
-
createdAt: z.string().min(1)
|
|
1070
|
-
});
|
|
1071
|
-
const surveyAssistantTurnTerminationReasonSchema = z.enum(surveyAssistantTurnTerminationReasonValues);
|
|
1072
|
-
const surveyAssistantTurnFinalSchema = z.object({
|
|
1073
|
-
protocolVersion: surveyAssistantProtocolVersionSchema,
|
|
1074
|
-
turnId: z.string().min(1),
|
|
1075
|
-
status: z.enum([
|
|
1076
|
-
"completed",
|
|
1077
|
-
"failed",
|
|
1078
|
-
"aborted"
|
|
1079
|
-
]),
|
|
1080
|
-
executableChangeSetIds: z.array(z.string().min(1)),
|
|
1081
|
-
blockedChangeSetIds: z.array(z.string().min(1)).max(100).optional(),
|
|
1082
|
-
startedAt: z.string().datetime().optional(),
|
|
1083
|
-
durationMs: z.number().int().nonnegative().optional(),
|
|
1084
|
-
terminationReason: surveyAssistantTurnTerminationReasonSchema.optional(),
|
|
1085
|
-
createdAt: z.string().min(1)
|
|
1086
|
-
}).superRefine((value, context) => {
|
|
1087
|
-
if (value.status !== "completed" && value.executableChangeSetIds.length > 0) context.addIssue({
|
|
1088
|
-
code: "custom",
|
|
1089
|
-
message: "Failed or aborted turns cannot authorize executable change sets.",
|
|
1090
|
-
path: ["executableChangeSetIds"]
|
|
1091
|
-
});
|
|
1092
|
-
if (new Set(value.executableChangeSetIds).size !== value.executableChangeSetIds.length) context.addIssue({
|
|
1093
|
-
code: "custom",
|
|
1094
|
-
message: "Executable change-set ids must be unique.",
|
|
1095
|
-
path: ["executableChangeSetIds"]
|
|
1096
|
-
});
|
|
1097
|
-
const blockedChangeSetIds = value.blockedChangeSetIds ?? [];
|
|
1098
|
-
if (new Set(blockedChangeSetIds).size !== blockedChangeSetIds.length) context.addIssue({
|
|
1099
|
-
code: "custom",
|
|
1100
|
-
message: "Blocked change-set ids must be unique.",
|
|
1101
|
-
path: ["blockedChangeSetIds"]
|
|
1102
|
-
});
|
|
1103
|
-
if (blockedChangeSetIds.length > 0 && value.executableChangeSetIds.length > 0) context.addIssue({
|
|
1104
|
-
code: "custom",
|
|
1105
|
-
message: "A blocked turn cannot authorize executable change sets.",
|
|
1106
|
-
path: ["executableChangeSetIds"]
|
|
1107
|
-
});
|
|
1108
|
-
if (value.status === "completed" && value.terminationReason !== void 0) context.addIssue({
|
|
1109
|
-
code: "custom",
|
|
1110
|
-
message: "Completed turns cannot have a failure or abort reason.",
|
|
1111
|
-
path: ["terminationReason"]
|
|
1112
|
-
});
|
|
1113
|
-
});
|
|
1114
|
-
const surveyAssistantApplyPolicySchema = z.enum([
|
|
1115
|
-
"auto",
|
|
1116
|
-
"review",
|
|
1117
|
-
"deny"
|
|
1118
|
-
]);
|
|
1119
|
-
const surveyApplyStatusSchema = z.enum([
|
|
1120
|
-
"applied",
|
|
1121
|
-
"rejected",
|
|
1122
|
-
"stale",
|
|
1123
|
-
"failed"
|
|
1124
|
-
]);
|
|
1125
|
-
const surveyApplyResultSchema = z.object({
|
|
1126
|
-
status: surveyApplyStatusSchema,
|
|
1127
|
-
changeId: z.string(),
|
|
1128
|
-
summary: z.string(),
|
|
1129
|
-
message: z.string(),
|
|
1130
|
-
appliedOperations: z.number().int().nonnegative(),
|
|
1131
|
-
issues: z.array(surveyValidationIssueSchema).optional()
|
|
1132
|
-
});
|
|
1133
|
-
const surveyBatchApplyResultSchema = z.object({ results: z.array(surveyApplyResultSchema) });
|
|
1134
|
-
const surveyAssistantApplyOutcomeSchema = z.object({
|
|
1135
|
-
protocolVersion: surveyAssistantProtocolVersionSchema,
|
|
1136
|
-
turnId: z.string().min(1),
|
|
1137
|
-
status: z.enum(surveyAssistantApplyOutcomeStatusValues),
|
|
1138
|
-
message: z.string().min(1).max(2e3),
|
|
1139
|
-
results: z.array(z.object({
|
|
1140
|
-
status: surveyApplyStatusSchema,
|
|
1141
|
-
changeId: z.string().min(1).max(240),
|
|
1142
|
-
summary: z.string().min(1).max(500),
|
|
1143
|
-
message: z.string().min(1).max(2e3),
|
|
1144
|
-
appliedOperations: z.number().int().nonnegative()
|
|
1145
|
-
})).max(100).optional(),
|
|
1146
|
-
preparedChanges: z.array(z.object({
|
|
1147
|
-
changeId: z.string().min(1).max(240),
|
|
1148
|
-
status: z.enum(["validated", "rejected"]),
|
|
1149
|
-
summary: z.string().min(1).max(500),
|
|
1150
|
-
operationCount: z.number().int().nonnegative()
|
|
1151
|
-
})).max(24).optional(),
|
|
1152
|
-
createdAt: z.string().min(1)
|
|
1153
|
-
});
|
|
1154
|
-
const applyReceiptSchema = z.object({
|
|
1155
|
-
protocolVersion: surveyAssistantProtocolVersionSchema,
|
|
1156
|
-
turnId: z.string().min(1),
|
|
1157
|
-
changeSetId: z.string().min(1),
|
|
1158
|
-
beforeVersion: surveyDocumentVersionSchema,
|
|
1159
|
-
afterVersion: surveyDocumentVersionSchema.optional(),
|
|
1160
|
-
status: surveyApplyStatusSchema,
|
|
1161
|
-
operationCount: z.number().int().nonnegative(),
|
|
1162
|
-
commit: z.object({
|
|
1163
|
-
id: z.string().min(1).optional(),
|
|
1164
|
-
index: z.number().int().optional()
|
|
1165
|
-
}).optional(),
|
|
1166
|
-
issues: z.array(surveyValidationIssueSchema).optional(),
|
|
1167
|
-
createdAt: z.string().min(1)
|
|
1168
|
-
});
|
|
1169
|
-
const surveyAssistantDraftChangeEventSchema = surveyChangeSetSchema;
|
|
1170
|
-
//#endregion
|
|
1171
|
-
export { jsonPatchOperationSchema as $, createSurveyAssistantThreadInputSchema as A, surveyContentSchema as At, surveyAssistantSnapshotSchema as B, sanitizeSurveyAssistantDiagnosticText as Bt, surveyAssistantTaskInvocationModeSchema as C, surveyValidationResultSchema as Ct, surveyAssistantTranslateContentInputSchema as D, updateItemLabelOperationSchema as Dt, surveyAssistantTranslateContentEntrySchema as E, updateItemKeyOperationSchema as Et, SURVEY_ASSISTANT_PROTOCOL_VERSION as F, surveyAssistantErrorInfoSchema as Ft, assistantItemAuthoringSchema as G, surveyDocumentVersionSchema as H, rawSurveyDocumentSchema as I, MAX_USER_ERROR_MESSAGE_LENGTH as It, assistantResponseSlotSchema as J, assistantItemCreateModeSchema as K, surveyAssistantDraftChangePreconditionSchema as L, getSurveyAssistantEmbeddedBinaryMarker as Lt, surveyAssistantThreadSchema as M, parseSurveyAssistantError as Mt, surveyAssistantThreadTranscriptSchema as N, serializeSurveyAssistantError as Nt, surveyAssistantTranslateContentResultSchema as O, updateItemTranslationOperationSchema as Ot, updateSurveyAssistantThreadInputSchema as P, surveyAssistantErrorCodeSchema as Pt, createItemOperationSchema as Q, surveyAssistantProtocolVersionSchema as R, isSurveyAssistantSensitiveMetadataKey as Rt, surveyAssistantTaskContextSchema as S, surveyValidationIssueSchema as St, surveyAssistantTaskRequestSchema as T, updateItemColorOperationSchema as Tt, surveyEditorUIContextSchema as U, surveyDocumentSnapshotSchema as V, assistantContentSurfaceSchema as W, SURVEY_OPERATION_KINDS as X, surveyAssistantCapabilityManifestSchema as Y, addChoiceOptionOperationSchema as Z, surveyAssistantSuggestItemKeyInputSchema as _, surveyAssistantValidationResultSchema as _t, surveyApplyStatusSchema as a, surveyAssistantCreateItemOperationSchema as at, surveyAssistantSuggestItemLabelResultSchema as b, surveyOperationSchemasByKind as bt, surveyAssistantDraftChangeEventSchema as c, surveyAssistantRemoveItemOperationSchema as ct, surveyBatchApplyResultSchema as d, surveyAssistantUpdateChoiceOptionLabelOperationSchema as dt, patchItemConfigOperationSchema as et, surveyChangeSetSchema as f, surveyAssistantUpdateItemColorOperationSchema as ft, surveyAssistantKeySuggestionSchema as g, surveyAssistantValidationIssueSchema as gt, surveyAssistantKeySuggestionCategorySchema as h, surveyAssistantUpdateItemTranslationOperationSchema as ht, surveyApplyResultSchema as i, surveyAssistantAddChoiceOptionOperationSchema as it, surveyAssistantThreadListSchema as j, isSurveyAssistantErrorRetryable as jt, SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE as k, jsonValueSchema as kt, surveyAssistantTurnFinalSchema as l, surveyAssistantReorderChoiceOptionsOperationSchema as lt, surveyAssistantModelOptionSchema as m, surveyAssistantUpdateItemLabelOperationSchema as mt, SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE as n, removeItemOperationSchema as nt, surveyAssistantApplyOutcomeSchema as o, surveyAssistantOperationSchema as ot, surveyAssistantModelCatalogSchema as p, surveyAssistantUpdateItemKeyOperationSchema as pt, assistantItemTypeManifestSchema as q, applyReceiptSchema as r, reorderChoiceOptionsOperationSchema as rt, surveyAssistantApplyPolicySchema as s, surveyAssistantRemoveChoiceOptionOperationSchema as st, SURVEY_ASSISTANT_TURN_FINAL_DATA_NAME as t, removeChoiceOptionOperationSchema as tt, surveyAssistantTurnTerminationReasonSchema as u, surveyAssistantSurveyJsonPatchOperationSchema as ut, surveyAssistantSuggestItemKeyResultSchema as v, surveyJsonPatchOperationSchema as vt, surveyAssistantTaskItemSummarySchema as w, updateChoiceOptionLabelOperationSchema as wt, surveyAssistantSuggestedTextSchema as x, surveyPatchOperationSchema as xt, surveyAssistantSuggestItemLabelInputSchema as y, surveyOperationSchema as yt, surveyAssistantSnapshotPayloadSchema as z, redactSurveyAssistantDiagnosticSecrets as zt };
|
|
1172
|
-
|
|
1173
|
-
//# sourceMappingURL=protocol-BhzQbx81.mjs.map
|