@case-framework/survey-assistant 0.5.0 → 0.7.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 +9 -4
- package/dist/attachments-B0hg3vpT.mjs +11 -0
- package/dist/attachments-B0hg3vpT.mjs.map +1 -0
- package/dist/authoring-references-BJQ_1nMX.mjs +115 -0
- package/dist/authoring-references-BJQ_1nMX.mjs.map +1 -0
- package/dist/capabilities-1KNnNO1_.mjs +73 -0
- package/dist/capabilities-1KNnNO1_.mjs.map +1 -0
- package/dist/{capabilities-CnsVuJ1k.d.mts → capabilities-DVTfogjv.d.mts} +1 -1
- package/dist/{capabilities-CnsVuJ1k.d.mts.map → capabilities-DVTfogjv.d.mts.map} +1 -1
- package/dist/capabilities-default.d.mts +1 -1
- package/dist/capabilities-default.d.mts.map +1 -1
- package/dist/capabilities-default.mjs +47 -20
- package/dist/capabilities-default.mjs.map +1 -1
- package/dist/{constants-CFUWrRtl.mjs → constants-0UHGFcRJ.mjs} +1 -1
- package/dist/{constants-CFUWrRtl.mjs.map → constants-0UHGFcRJ.mjs.map} +1 -1
- package/dist/{constants-DbrJxxOh.d.mts → constants-Be91Gay9.d.mts} +4 -4
- package/dist/{constants-DbrJxxOh.d.mts.map → constants-Be91Gay9.d.mts.map} +1 -1
- package/dist/{controller-proxy-jWIPOZAv.mjs → controller-proxy-BH05e-C2.mjs} +21 -8
- package/dist/controller-proxy-BH05e-C2.mjs.map +1 -0
- package/dist/{controller-proxy-BdKF2yrq.d.mts → controller-proxy-Bd0ZHBPF.d.mts} +11 -11
- package/dist/controller-proxy-Bd0ZHBPF.d.mts.map +1 -0
- package/dist/{digest-Dyjch_sC.d.mts → digest-SJmoYVaK.d.mts} +2 -2
- package/dist/{digest-Dyjch_sC.d.mts.map → digest-SJmoYVaK.d.mts.map} +1 -1
- package/dist/digest.d.mts +1 -1
- package/dist/{engine-DcSdLRle.mjs → engine-Bo85Oyj0.mjs} +3129 -2435
- package/dist/engine-Bo85Oyj0.mjs.map +1 -0
- package/dist/engine.d.mts +3 -3
- package/dist/engine.mjs +3 -3
- package/dist/{fair-guidance-CEdJYccK.mjs → fair-guidance-CRYCRxQm.mjs} +1 -1
- package/dist/{fair-guidance-CEdJYccK.mjs.map → fair-guidance-CRYCRxQm.mjs.map} +1 -1
- package/dist/{index-Da_Hb9-1.d.mts → index-Tnqv-yKW.d.mts} +73 -67
- package/dist/index-Tnqv-yKW.d.mts.map +1 -0
- package/dist/index-l_EK4yK7.d.mts +404 -0
- package/dist/index-l_EK4yK7.d.mts.map +1 -0
- package/dist/{index-BApnIiCI.d.mts → index-nhrgbgO5.d.mts} +24 -5
- package/dist/index-nhrgbgO5.d.mts.map +1 -0
- package/dist/{index-DhNQKOwr.d.mts → index-x0qprHgK.d.mts} +19 -7
- package/dist/index-x0qprHgK.d.mts.map +1 -0
- package/dist/{lifecycle-DWv5CiSu.d.mts → lifecycle-Bx0aq_4S.d.mts} +8 -2
- package/dist/{lifecycle-DWv5CiSu.d.mts.map → lifecycle-Bx0aq_4S.d.mts.map} +1 -1
- package/dist/{memory-thread-repository-CvYZwni6.mjs → memory-thread-repository-KWHQWFEW.mjs} +45 -14
- package/dist/memory-thread-repository-KWHQWFEW.mjs.map +1 -0
- package/dist/{protocol-DJUP4gc0.mjs → protocol-BhzQbx81.mjs} +66 -16
- package/dist/protocol-BhzQbx81.mjs.map +1 -0
- package/dist/protocol.d.mts +4 -4
- package/dist/protocol.mjs +3 -2
- package/dist/react-B3ybjJ-X.mjs +1620 -0
- package/dist/react-B3ybjJ-X.mjs.map +1 -0
- package/dist/react-integration.d.mts +1 -1
- package/dist/react-integration.mjs +1 -1
- package/dist/react.d.mts +3 -3
- package/dist/react.mjs +3 -3
- package/dist/references/assistant-operations.md +45 -39
- package/dist/references/expressions.md +28 -0
- package/dist/references/item-types.md +1 -1
- package/dist/references/localization.md +5 -4
- package/dist/references/rich-text-content.md +60 -27
- package/dist/references/source-material-surveys.md +9 -2
- package/dist/references/survey-data-model.md +9 -1
- package/dist/{request-context-D1sC54ZA.mjs → request-context-CG4SWijt.mjs} +3 -3
- package/dist/{request-context-D1sC54ZA.mjs.map → request-context-CG4SWijt.mjs.map} +1 -1
- package/dist/{request-guardrails-h4t6u8mP.mjs → request-guardrails-TmgQtqp4.mjs} +5 -12
- package/dist/request-guardrails-TmgQtqp4.mjs.map +1 -0
- package/dist/server-agent.d.mts +19 -8
- package/dist/server-agent.d.mts.map +1 -1
- package/dist/server-agent.mjs +11 -13
- package/dist/server-agent.mjs.map +1 -1
- package/dist/server-runtime.d.mts +12 -6
- package/dist/server-runtime.d.mts.map +1 -1
- package/dist/server-runtime.mjs +9 -4
- package/dist/server-runtime.mjs.map +1 -1
- package/dist/server-tasks.d.mts +1 -1
- package/dist/server-tasks.mjs +5 -5
- package/dist/server-tools.d.mts +1 -1
- package/dist/server-tools.mjs +1 -1
- package/dist/server.d.mts +7 -7
- package/dist/server.mjs +6 -6
- package/dist/storage-postgres.d.mts +1 -1
- package/dist/storage-postgres.mjs +1 -1
- package/dist/{tasks-CCtxjhwh.d.mts → tasks-CYqrcaRO.d.mts} +16 -4
- package/dist/tasks-CYqrcaRO.d.mts.map +1 -0
- package/dist/{thread-documents-Dvo6XS7o.d.mts → thread-documents-rmd6nyX9.d.mts} +1 -1
- package/dist/{thread-documents-Dvo6XS7o.d.mts.map → thread-documents-rmd6nyX9.d.mts.map} +1 -1
- package/dist/{thread-handlers-Bt9cDo-F.d.mts → thread-handlers-DBAaU7BA.d.mts} +7 -5
- package/dist/thread-handlers-DBAaU7BA.d.mts.map +1 -0
- package/dist/{tools-3tq-XqI0.mjs → tools-BvSovehT.mjs} +433 -495
- package/dist/tools-BvSovehT.mjs.map +1 -0
- package/dist/ui.css +1 -1
- package/dist/ui.d.mts +5 -4
- package/dist/ui.d.mts.map +1 -1
- package/dist/ui.mjs +744 -131
- package/dist/ui.mjs.map +1 -1
- package/docs/integration.md +43 -3
- package/package.json +21 -19
- package/dist/authoring-references-yyYC4Ydi.mjs +0 -98
- package/dist/authoring-references-yyYC4Ydi.mjs.map +0 -1
- package/dist/controller-proxy-BdKF2yrq.d.mts.map +0 -1
- package/dist/controller-proxy-jWIPOZAv.mjs.map +0 -1
- package/dist/engine-DcSdLRle.mjs.map +0 -1
- package/dist/form-authoring-BQh40yDb.mjs +0 -155
- package/dist/form-authoring-BQh40yDb.mjs.map +0 -1
- package/dist/index-BApnIiCI.d.mts.map +0 -1
- package/dist/index-Da_Hb9-1.d.mts.map +0 -1
- package/dist/index-DhNQKOwr.d.mts.map +0 -1
- package/dist/index-dV6df0W3.d.mts +0 -224
- package/dist/index-dV6df0W3.d.mts.map +0 -1
- package/dist/memory-thread-repository-CvYZwni6.mjs.map +0 -1
- package/dist/protocol-DJUP4gc0.mjs.map +0 -1
- package/dist/react-CY6N7lVi.mjs +0 -768
- package/dist/react-CY6N7lVi.mjs.map +0 -1
- package/dist/request-guardrails-h4t6u8mP.mjs.map +0 -1
- package/dist/tasks-CCtxjhwh.d.mts.map +0 -1
- package/dist/thread-handlers-Bt9cDo-F.d.mts.map +0 -1
- package/dist/tools-3tq-XqI0.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-DWv5CiSu.d.mts","names":[],"sources":["../src/protocol/content.ts","../src/protocol/document.ts","../src/protocol/operations.ts","../src/protocol/lifecycle.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lifecycle-Bx0aq_4S.d.mts","names":[],"sources":["../src/protocol/content.ts","../src/protocol/document.ts","../src/protocol/operations.ts","../src/protocol/lifecycle.ts"],"mappings":"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"}
|
package/dist/{memory-thread-repository-CvYZwni6.mjs → memory-thread-repository-KWHQWFEW.mjs}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { A as createSurveyAssistantThreadInputSchema,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import "./constants-
|
|
5
|
-
import { a as parseSurveyAssistantPreviousSettledVersion, i as parseSurveyAssistantPreviousApplyOutcome, o as parseSurveyAssistantSnapshot, t as buildSurveyAssistantRequestContext } from "./request-context-
|
|
6
|
-
import { d as readSurveyAssistantRequestJson, f as validateSurveyAssistantMessages, n as SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS, u as SurveyAssistantRequestError } from "./request-guardrails-
|
|
1
|
+
import { A as createSurveyAssistantThreadInputSchema, Bt as sanitizeSurveyAssistantDiagnosticText, Nt as serializeSurveyAssistantError, P as updateSurveyAssistantThreadInputSchema, jt as isSurveyAssistantErrorRetryable, k as SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE, n as SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE } from "./protocol-BhzQbx81.mjs";
|
|
2
|
+
import { t as SurveyAssistantCapabilityMismatchError } from "./capabilities-1KNnNO1_.mjs";
|
|
3
|
+
import { l as TurnSurveyDraft } from "./engine-Bo85Oyj0.mjs";
|
|
4
|
+
import "./constants-0UHGFcRJ.mjs";
|
|
5
|
+
import { a as parseSurveyAssistantPreviousSettledVersion, i as parseSurveyAssistantPreviousApplyOutcome, o as parseSurveyAssistantSnapshot, t as buildSurveyAssistantRequestContext } from "./request-context-CG4SWijt.mjs";
|
|
6
|
+
import { d as readSurveyAssistantRequestJson, f as validateSurveyAssistantMessages, n as SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS, u as SurveyAssistantRequestError } from "./request-guardrails-TmgQtqp4.mjs";
|
|
7
7
|
import { createUIMessageStreamResponse } from "ai";
|
|
8
8
|
import { handleChatStream } from "@mastra/ai-sdk";
|
|
9
9
|
import { createHash } from "node:crypto";
|
|
@@ -305,7 +305,6 @@ const DEFAULT_MAX_CONCURRENT_REQUESTS = 8;
|
|
|
305
305
|
const DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = 900 * 1e3;
|
|
306
306
|
const DEFAULT_IDLE_TIMEOUT_MS = 300 * 1e3;
|
|
307
307
|
const DEFAULT_MAX_DURATION_MS = 3600 * 1e3;
|
|
308
|
-
const MAX_USER_ERROR_MESSAGE_LENGTH = 700;
|
|
309
308
|
const MAX_ERROR_CAUSE_DEPTH = 5;
|
|
310
309
|
const getTimeoutTerminationReason = (kind) => {
|
|
311
310
|
switch (kind) {
|
|
@@ -328,6 +327,11 @@ const optionalRequestedId = (value) => {
|
|
|
328
327
|
const normalized = value.trim();
|
|
329
328
|
return normalized.length > 0 && normalized.length <= 240 ? normalized : void 0;
|
|
330
329
|
};
|
|
330
|
+
const optionalDiagnosticId = (value) => {
|
|
331
|
+
if (typeof value !== "string") return void 0;
|
|
332
|
+
const normalized = value.trim();
|
|
333
|
+
return /^[A-Za-z0-9_-]{8,64}$/.test(normalized) ? normalized : void 0;
|
|
334
|
+
};
|
|
331
335
|
const validateAuthorizedIdentity = (identity) => {
|
|
332
336
|
if (!identity || identity.authority !== "authenticated-host" && identity.authority !== "experimental-client-request" || typeof identity.resourceId !== "string" || identity.resourceId.trim().length === 0 || identity.resourceId.length > 240 || identity.surveyId !== void 0 && !optionalRequestedId(identity.surveyId) || typeof identity.threadId !== "string" || identity.threadId.trim().length === 0 || identity.threadId.length > 240) throw new SurveyAssistantAuthorizationError("The host returned an invalid survey assistant identity.", 500);
|
|
333
337
|
return {
|
|
@@ -422,8 +426,7 @@ const describeSurveyAssistantStreamError = (error) => {
|
|
|
422
426
|
return levels.length === 1 ? levels[0] : { levels };
|
|
423
427
|
};
|
|
424
428
|
const clampUserErrorMessage = (message) => {
|
|
425
|
-
|
|
426
|
-
return normalized.length <= MAX_USER_ERROR_MESSAGE_LENGTH ? normalized : `${normalized.slice(0, MAX_USER_ERROR_MESSAGE_LENGTH - 1)}…`;
|
|
429
|
+
return sanitizeSurveyAssistantDiagnosticText(message, 700);
|
|
427
430
|
};
|
|
428
431
|
const getProviderModelName = (message) => message.match(/\bmodel\s+[`'"]([^`'"]+)[`'"]/i)?.[1]?.trim();
|
|
429
432
|
const classifyStreamError = (message, statusCode) => {
|
|
@@ -451,14 +454,26 @@ const parseProviderResponseBodyMessage = (responseBody) => {
|
|
|
451
454
|
const parsed = JSON.parse(responseBody);
|
|
452
455
|
if (isRecord(parsed) && isRecord(parsed.error) && typeof parsed.error.message === "string") return parsed.error.message;
|
|
453
456
|
} catch {
|
|
454
|
-
return
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
const getProviderRequestId = (levels) => {
|
|
461
|
+
for (const level of levels) {
|
|
462
|
+
if (!isRecord(level) || !isRecord(level.responseHeaders)) continue;
|
|
463
|
+
for (const [key, value] of Object.entries(level.responseHeaders)) {
|
|
464
|
+
const normalizedKey = key.toLocaleLowerCase();
|
|
465
|
+
if ((normalizedKey === "request-id" || normalizedKey === "x-request-id") && typeof value === "string") {
|
|
466
|
+
const normalized = sanitizeSurveyAssistantDiagnosticText(value, 240);
|
|
467
|
+
if (normalized) return normalized;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
455
470
|
}
|
|
456
|
-
return responseBody;
|
|
457
471
|
};
|
|
458
472
|
const extractUserErrorMessageFromLevel = (level) => {
|
|
459
473
|
if (isRecord(level.data) && isRecord(level.data.error) && typeof level.data.error.message === "string") return level.data.error.message;
|
|
460
474
|
return parseProviderResponseBodyMessage(level.responseBody) ?? (typeof level.message === "string" ? level.message : void 0);
|
|
461
475
|
};
|
|
476
|
+
const isProviderCallErrorLevel = (level) => level.constructorName === "APICallError" || level.name === "AI_APICallError" || level.statusCode !== void 0 && (level.responseBody !== void 0 || level.responseHeaders !== void 0);
|
|
462
477
|
const formatSurveyAssistantStreamError = (error) => {
|
|
463
478
|
const describedError = describeSurveyAssistantStreamError(error);
|
|
464
479
|
const levels = Array.isArray(describedError.levels) ? describedError.levels : [describedError];
|
|
@@ -466,12 +481,23 @@ const formatSurveyAssistantStreamError = (error) => {
|
|
|
466
481
|
const statusLevel = levels.find((level) => isRecord(level) && level.statusCode !== void 0);
|
|
467
482
|
const statusCode = Number(statusLevel?.statusCode);
|
|
468
483
|
const detail = messageLevel ? extractUserErrorMessageFromLevel(messageLevel) : void 0;
|
|
484
|
+
const providerLevel = levels.find((level) => isRecord(level) && isProviderCallErrorLevel(level));
|
|
485
|
+
const providerDetail = providerLevel ? extractUserErrorMessageFromLevel(providerLevel) : void 0;
|
|
469
486
|
const formattedDetail = detail ? formatKnownProviderError(detail) : void 0;
|
|
470
|
-
const code = classifyStreamError(formattedDetail ?? "", Number.isFinite(statusCode) ? statusCode : void 0);
|
|
487
|
+
const code = classifyStreamError(detail ?? formattedDetail ?? "", Number.isFinite(statusCode) ? statusCode : void 0);
|
|
488
|
+
const providerMessage = code === "authorization_failed" || !providerDetail ? void 0 : sanitizeSurveyAssistantDiagnosticText(providerDetail, 700);
|
|
489
|
+
const upstreamStatus = Number.isFinite(statusCode) ? statusCode : void 0;
|
|
490
|
+
const providerRequestId = getProviderRequestId(levels);
|
|
471
491
|
return serializeSurveyAssistantError({
|
|
472
492
|
code,
|
|
473
493
|
...formattedDetail ? { detail: formattedDetail } : {},
|
|
474
|
-
|
|
494
|
+
...upstreamStatus ? { upstreamStatus } : {},
|
|
495
|
+
...providerRequestId ? { providerRequestId } : {},
|
|
496
|
+
...providerMessage ? { providerMessage } : {},
|
|
497
|
+
retryable: isSurveyAssistantErrorRetryable({
|
|
498
|
+
code,
|
|
499
|
+
upstreamStatus
|
|
500
|
+
})
|
|
475
501
|
});
|
|
476
502
|
};
|
|
477
503
|
const requestErrorResponse = (error, fallback) => {
|
|
@@ -516,6 +542,7 @@ const createSurveyAssistantChatHandler = (options) => {
|
|
|
516
542
|
return requestErrorResponse(error, "The survey assistant request could not be read.");
|
|
517
543
|
}
|
|
518
544
|
const params = isRecord(rawParams) ? rawParams : {};
|
|
545
|
+
const requestId = optionalDiagnosticId(params.requestId);
|
|
519
546
|
let identity;
|
|
520
547
|
try {
|
|
521
548
|
identity = validateAuthorizedIdentity(await options.authorize({
|
|
@@ -552,6 +579,7 @@ const createSurveyAssistantChatHandler = (options) => {
|
|
|
552
579
|
})) ?? void 0;
|
|
553
580
|
} catch (error) {
|
|
554
581
|
options.onStreamError?.(error, {
|
|
582
|
+
requestId,
|
|
555
583
|
resourceId: identity.resourceId,
|
|
556
584
|
surveyId: identity.surveyId,
|
|
557
585
|
threadId: identity.threadId
|
|
@@ -650,6 +678,7 @@ const createSurveyAssistantChatHandler = (options) => {
|
|
|
650
678
|
code: error.code
|
|
651
679
|
}, { status: 409 });
|
|
652
680
|
options.onStreamError?.(error, {
|
|
681
|
+
requestId,
|
|
653
682
|
resourceId: identity.resourceId,
|
|
654
683
|
surveyId: identity.surveyId,
|
|
655
684
|
threadId: identity.threadId
|
|
@@ -664,6 +693,7 @@ const createSurveyAssistantChatHandler = (options) => {
|
|
|
664
693
|
toolCalls: 0
|
|
665
694
|
};
|
|
666
695
|
const streamErrorContext = {
|
|
696
|
+
requestId,
|
|
667
697
|
resourceId: identity.resourceId,
|
|
668
698
|
surveyId: identity.surveyId,
|
|
669
699
|
threadId: identity.threadId
|
|
@@ -749,6 +779,7 @@ const createSurveyAssistantChatHandler = (options) => {
|
|
|
749
779
|
identity,
|
|
750
780
|
metrics,
|
|
751
781
|
provider: modelSelection?.providerName ?? options.providerName,
|
|
782
|
+
requestId,
|
|
752
783
|
turnId: turnDraft.turnId
|
|
753
784
|
});
|
|
754
785
|
} catch (error) {
|
|
@@ -998,4 +1029,4 @@ const createMastraMemoryThreadRepository = ({ getMemory, maxMessagesPerTranscrip
|
|
|
998
1029
|
//#endregion
|
|
999
1030
|
export { describeSurveyAssistantStreamError as a, loadSurveyAssistantDocuments as c, removeHistoricalSurveyAssistantAttachments as d, replaceCurrentSurveyAssistantAttachmentsWithReferences as f, createSurveyAssistantChatHandler as i, loadSurveyAssistantThreadAttachments as l, createSurveyAssistantThreadHandlers as n, formatSurveyAssistantStreamError as o, createSurveyAssistantTurnStream as p, SurveyAssistantAuthorizationError as r, getSurveyAssistantReplayableDocuments as s, createMastraMemoryThreadRepository as t, registerSurveyAssistantThreadAttachments as u };
|
|
1000
1031
|
|
|
1001
|
-
//# sourceMappingURL=memory-thread-repository-
|
|
1032
|
+
//# sourceMappingURL=memory-thread-repository-KWHQWFEW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-thread-repository-KWHQWFEW.mjs","names":[],"sources":["../src/server/execution-timeout.ts","../src/server/turn-stream.ts","../src/server/thread-documents.ts","../src/server/handler.ts","../src/server/thread-handlers.ts","../src/server/memory-thread-repository.ts"],"sourcesContent":["import type { UIMessageChunk } from \"ai\";\n\nexport type SurveyAssistantExecutionTimeoutKind = \"first-response\" | \"idle\" | \"max-duration\";\n\nexport interface SurveyAssistantExecutionTimeoutOptions {\n firstResponseTimeoutMs: number;\n idleTimeoutMs: number;\n maxDurationMs: number;\n requestSignal: AbortSignal;\n}\n\nexport interface SurveyAssistantExecutionTimeout {\n readonly signal: AbortSignal;\n readonly timeoutKind: SurveyAssistantExecutionTimeoutKind | null;\n dispose(): void;\n recordActivity(): void;\n}\n\nconst timeoutMessages: Record<SurveyAssistantExecutionTimeoutKind, string> = {\n \"first-response\": \"The survey assistant timed out while waiting for its first response.\",\n idle: \"The survey assistant timed out after it stopped producing activity.\",\n \"max-duration\": \"The survey assistant reached its maximum execution duration.\",\n};\n\nexport const getSurveyAssistantExecutionTimeoutMessage = (\n kind: SurveyAssistantExecutionTimeoutKind,\n) => timeoutMessages[kind];\n\nexport const isSurveyAssistantExecutionActivityChunk = (chunk: UIMessageChunk): boolean =>\n chunk.type !== \"start\" &&\n chunk.type !== \"start-step\" &&\n chunk.type !== \"finish\" &&\n chunk.type !== \"finish-step\" &&\n chunk.type !== \"abort\" &&\n chunk.type !== \"error\";\n\nexport const createSurveyAssistantExecutionTimeout = ({\n firstResponseTimeoutMs,\n idleTimeoutMs,\n maxDurationMs,\n requestSignal,\n}: SurveyAssistantExecutionTimeoutOptions): SurveyAssistantExecutionTimeout => {\n const timeoutController = new AbortController();\n let activityTimer: ReturnType<typeof setTimeout> | undefined;\n let hardCapTimer: ReturnType<typeof setTimeout> | undefined;\n let timeoutKind: SurveyAssistantExecutionTimeoutKind | null = null;\n\n const unrefTimer = (timer: ReturnType<typeof setTimeout>) => {\n if (typeof timer === \"object\" && \"unref\" in timer) timer.unref();\n };\n\n const clearActivityTimer = () => {\n if (activityTimer !== undefined) clearTimeout(activityTimer);\n activityTimer = undefined;\n };\n const dispose = () => {\n clearActivityTimer();\n if (hardCapTimer !== undefined) clearTimeout(hardCapTimer);\n hardCapTimer = undefined;\n };\n const abortForTimeout = (kind: SurveyAssistantExecutionTimeoutKind) => {\n if (timeoutController.signal.aborted || requestSignal.aborted) return;\n timeoutKind = kind;\n dispose();\n timeoutController.abort(\n new DOMException(getSurveyAssistantExecutionTimeoutMessage(kind), \"TimeoutError\"),\n );\n };\n const scheduleActivityTimeout = (\n durationMs: number,\n kind: Extract<SurveyAssistantExecutionTimeoutKind, \"first-response\" | \"idle\">,\n ) => {\n clearActivityTimer();\n activityTimer = setTimeout(() => abortForTimeout(kind), durationMs);\n unrefTimer(activityTimer);\n };\n\n if (!requestSignal.aborted) {\n hardCapTimer = setTimeout(() => abortForTimeout(\"max-duration\"), maxDurationMs);\n unrefTimer(hardCapTimer);\n scheduleActivityTimeout(firstResponseTimeoutMs, \"first-response\");\n }\n\n const signal = AbortSignal.any([requestSignal, timeoutController.signal]);\n\n return {\n signal,\n get timeoutKind() {\n return timeoutKind;\n },\n dispose,\n recordActivity() {\n if (signal.aborted) return;\n scheduleActivityTimeout(idleTimeoutMs, \"idle\");\n },\n };\n};\n","import {\n SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE,\n type SurveyAssistantTurnFinal,\n type SurveyAssistantTurnTerminationReason,\n} from \"../protocol\";\nimport type { TurnSurveyDraft } from \"../engine\";\nimport type { UIMessageChunk } from \"ai\";\nimport { isSurveyAssistantExecutionActivityChunk } from \"./execution-timeout\";\n\nconst createTurnFinalChunk = (turnFinal: SurveyAssistantTurnFinal): UIMessageChunk => ({\n type: SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE,\n id: turnFinal.turnId,\n data: turnFinal,\n});\n\nexport interface SurveyAssistantTurnStreamOptions {\n stream: ReadableStream<UIMessageChunk>;\n turnDraft: TurnSurveyDraft;\n signal?: AbortSignal;\n onUnexpectedError?: (error: unknown) => string;\n onActivity?: () => void;\n onSettled?: () => void;\n getAbortErrorText?: () => string | undefined;\n getAbortTerminationReason?: () => SurveyAssistantTurnTerminationReason | undefined;\n turnStartedAt?: number;\n}\n\nconst getFinishTerminationReason = (\n finishReason: Extract<UIMessageChunk, { type: \"finish\" }>[\"finishReason\"],\n): SurveyAssistantTurnTerminationReason => {\n switch (finishReason) {\n // The AI SDK reports the agent loop's step cap this way; it isn't a literal tool-call error.\n case \"tool-calls\":\n return \"max-steps\";\n case \"length\":\n return \"length-limit\";\n case \"content-filter\":\n return \"content-filter\";\n case \"error\":\n return \"provider-error\";\n default:\n return \"incomplete-response\";\n }\n};\n\nexport const createSurveyAssistantTurnStream = ({\n turnDraft,\n getAbortErrorText,\n getAbortTerminationReason,\n onActivity,\n onSettled,\n onUnexpectedError = () => \"The survey assistant stream ended unexpectedly.\",\n signal,\n stream,\n turnStartedAt,\n}: SurveyAssistantTurnStreamOptions): ReadableStream<UIMessageChunk> => {\n const reader = stream.getReader();\n let settled = false;\n\n const settle = () => {\n if (settled) {\n return;\n }\n settled = true;\n onSettled?.();\n };\n\n return new ReadableStream<UIMessageChunk>({\n async start(controller) {\n let emittedTurnFinal = false;\n let sawFinish = false;\n let emittedAbortError = false;\n let finishReason: Extract<UIMessageChunk, { type: \"finish\" }>[\"finishReason\"];\n\n const emitTurnFinal = (\n status: SurveyAssistantTurnFinal[\"status\"],\n terminationReason?: SurveyAssistantTurnTerminationReason,\n ) => {\n if (emittedTurnFinal) {\n return;\n }\n emittedTurnFinal = true;\n const completedAt = Date.now();\n controller.enqueue(\n createTurnFinalChunk(\n turnDraft.finalize(status, new Date(completedAt).toISOString(), {\n ...(turnStartedAt === undefined\n ? {}\n : {\n startedAt: new Date(turnStartedAt).toISOString(),\n durationMs: Math.max(0, completedAt - turnStartedAt),\n }),\n ...(terminationReason ? { terminationReason } : {}),\n }),\n ),\n );\n };\n const emitAbortOutcome = () => {\n const errorText = getAbortErrorText?.();\n emitTurnFinal(\n errorText ? \"failed\" : \"aborted\",\n getAbortTerminationReason?.() ?? (errorText ? \"incomplete-response\" : \"client-abort\"),\n );\n if (errorText && !emittedAbortError) {\n emittedAbortError = true;\n controller.enqueue({ type: \"error\", errorText });\n }\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n if (isSurveyAssistantExecutionActivityChunk(value)) onActivity?.();\n\n if (value.type === SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE) {\n emitTurnFinal(\"failed\");\n controller.enqueue({\n type: \"error\",\n errorText: \"The survey assistant returned an invalid duplicate turn final.\",\n });\n await reader.cancel(\"duplicate turn final\");\n break;\n }\n if (value.type === \"error\") {\n emitTurnFinal(\"failed\", \"provider-error\");\n controller.enqueue(value);\n continue;\n }\n if (value.type === \"abort\") {\n const timeoutErrorText = getAbortErrorText?.();\n emitAbortOutcome();\n if (!timeoutErrorText) controller.enqueue(value);\n continue;\n }\n if (value.type === \"finish\") {\n sawFinish = true;\n finishReason = value.finishReason;\n }\n controller.enqueue(value);\n }\n\n if (!emittedTurnFinal) {\n if (signal?.aborted) {\n emitAbortOutcome();\n } else {\n emitTurnFinal(\n sawFinish && (finishReason === undefined || finishReason === \"stop\")\n ? \"completed\"\n : \"failed\",\n sawFinish && finishReason !== undefined && finishReason !== \"stop\"\n ? getFinishTerminationReason(finishReason)\n : !sawFinish\n ? \"incomplete-response\"\n : undefined,\n );\n }\n }\n controller.close();\n } catch (error) {\n try {\n if (signal?.aborted) emitAbortOutcome();\n else emitTurnFinal(\"failed\", \"stream-error\");\n if (!signal?.aborted) {\n controller.enqueue({ type: \"error\", errorText: onUnexpectedError(error) });\n }\n controller.close();\n } catch {\n // The client disconnected; finalization still occurred server-side.\n }\n } finally {\n reader.releaseLock();\n settle();\n }\n },\n async cancel(reason) {\n const completedAt = Date.now();\n turnDraft.finalize(\"aborted\", new Date(completedAt).toISOString(), {\n ...(turnStartedAt === undefined\n ? {}\n : {\n startedAt: new Date(turnStartedAt).toISOString(),\n durationMs: Math.max(0, completedAt - turnStartedAt),\n }),\n terminationReason: \"client-abort\",\n });\n settle();\n await reader.cancel(reason);\n },\n });\n};\n","import type { UIMessage } from \"ai\";\nimport { createHash } from \"node:crypto\";\nimport {\n SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE,\n type SurveyAssistantAttachmentReference,\n} from \"../protocol\";\n\nexport interface SurveyAssistantThreadDocument {\n id: string;\n name: string;\n mediaType: string;\n bytes: number;\n contentHash: string;\n createdAt: string;\n}\n\nexport interface SurveyAssistantThreadDocumentContent extends SurveyAssistantThreadDocument {\n data: string;\n}\n\nexport interface SurveyAssistantModelAttachment {\n filename: string;\n mediaType: string;\n data: string;\n contentHash: string;\n}\n\nexport interface SurveyAssistantAttachmentAccess {\n documents: SurveyAssistantThreadDocument[];\n /** Attachments submitted in the current user message; already present as model context. */\n currentDocumentIds?: string[];\n selectedAttachments: SurveyAssistantModelAttachment[];\n load(documentIds: string[]): Promise<SurveyAssistantModelAttachment[]>;\n}\n\nexport interface SurveyAssistantThreadDocumentRepository {\n put(input: {\n resourceId: string;\n threadId: string;\n name: string;\n mediaType: string;\n data: string;\n bytes: number;\n }): Promise<SurveyAssistantThreadDocument>;\n list(input: { resourceId: string; threadId: string }): Promise<SurveyAssistantThreadDocument[]>;\n read(input: {\n resourceId: string;\n threadId: string;\n documentId: string;\n }): Promise<SurveyAssistantThreadDocumentContent | null>;\n deleteThread(input: { resourceId: string; threadId: string }): Promise<void>;\n}\n\nconst parseFileDataUrl = (url: string) => {\n const match = /^data:([^;,]+);base64,([A-Za-z0-9+/]*={0,2})$/.exec(url);\n return match ? { mediaType: match[1], data: match[2] } : null;\n};\n\nconst getBase64Bytes = (data: string) => {\n const padding = data.endsWith(\"==\") ? 2 : data.endsWith(\"=\") ? 1 : 0;\n return Math.max(0, Math.floor((data.length * 3) / 4) - padding);\n};\n\nconst getAttachmentContentHash = (data: string) => createHash(\"sha256\").update(data).digest(\"hex\");\n\nconst createAttachmentReferencePart = ({\n document,\n filename,\n mediaType,\n parsedData,\n}: {\n document?: SurveyAssistantThreadDocument;\n filename?: string;\n mediaType: string;\n parsedData?: string;\n}) => ({\n type: SURVEY_ASSISTANT_ATTACHMENT_PART_TYPE,\n data: {\n ...(document ? { documentId: document.id } : {}),\n filename: filename?.trim() || document?.name || \"Attached document\",\n mediaType: document?.mediaType || mediaType,\n bytes: document?.bytes ?? (parsedData ? getBase64Bytes(parsedData) : 0),\n } satisfies SurveyAssistantAttachmentReference,\n});\n\nconst createDocumentIndex = (documents: SurveyAssistantThreadDocument[]) =>\n new Map(\n documents.map((document) => [`${document.mediaType}\\u0000${document.contentHash}`, document]),\n );\n\n/**\n * Replaces current-turn file data with small repository references before the\n * message is handed to Mastra for persistence. The provider-bound attachment\n * processor re-injects the authorized repository copy transiently.\n */\nexport const replaceCurrentSurveyAssistantAttachmentsWithReferences = ({\n documents,\n messages,\n}: {\n documents: SurveyAssistantThreadDocument[];\n messages: UIMessage[];\n}): UIMessage[] => {\n const current = getCurrentUserMessage(messages);\n if (!current) return messages;\n const documentIndex = createDocumentIndex(documents);\n\n return messages.map((message) => {\n if (message !== current) return message;\n let changed = false;\n const parts = message.parts.map((part) => {\n if (part.type !== \"file\") return part;\n changed = true;\n const parsed = typeof part.url === \"string\" ? parseFileDataUrl(part.url) : null;\n const mediaType = parsed?.mediaType || part.mediaType;\n const document = parsed\n ? documentIndex.get(`${mediaType}\\u0000${getAttachmentContentHash(parsed.data)}`)\n : undefined;\n return createAttachmentReferencePart({\n document,\n filename: part.filename,\n mediaType,\n parsedData: parsed?.data,\n });\n });\n return changed ? { ...message, parts } : message;\n }) as UIMessage[];\n};\n\nexport const registerSurveyAssistantThreadAttachments = async ({\n messages,\n repository,\n resourceId,\n threadId,\n}: {\n messages: UIMessage[];\n repository: SurveyAssistantThreadDocumentRepository;\n resourceId: string;\n threadId: string;\n}) => {\n const registered: SurveyAssistantThreadDocument[] = [];\n\n const currentMessage = getCurrentUserMessage(messages);\n for (const message of currentMessage ? [currentMessage] : []) {\n for (const part of message.parts) {\n if (part.type !== \"file\" || typeof part.url !== \"string\") continue;\n const parsed = parseFileDataUrl(part.url);\n if (!parsed) continue;\n\n registered.push(\n await repository.put({\n resourceId,\n threadId,\n name: part.filename?.trim() || \"Attached document\",\n mediaType: parsed.mediaType,\n data: parsed.data,\n bytes: getBase64Bytes(parsed.data),\n }),\n );\n }\n }\n\n return registered;\n};\n\nconst getCurrentUserMessage = (messages: UIMessage[]) => {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role === \"user\") return message;\n }\n return undefined;\n};\n\nexport const removeHistoricalSurveyAssistantAttachments = (messages: UIMessage[]) => {\n const current = getCurrentUserMessage(messages);\n return messages.map((message) => {\n if (message === current) return message;\n const parts = message.parts.filter((part) => part.type !== \"file\");\n return parts.length === message.parts.length ? message : { ...message, parts };\n });\n};\n\n/**\n * Excludes the exact repository documents already loaded for the current turn.\n * Message parts are references by this stage and are not a deduplication source.\n */\nexport const getSurveyAssistantReplayableDocuments = (\n documents: SurveyAssistantThreadDocument[],\n currentDocumentIds: ReadonlySet<string>,\n) => documents.filter((document) => !currentDocumentIds.has(document.id));\n\nexport const loadSurveyAssistantThreadAttachments = async ({\n currentDocumentIds = new Set<string>(),\n documents,\n repository,\n resourceId,\n threadId,\n}: {\n currentDocumentIds?: ReadonlySet<string>;\n documents: SurveyAssistantThreadDocument[];\n repository: SurveyAssistantThreadDocumentRepository;\n resourceId: string;\n threadId: string;\n}): Promise<SurveyAssistantModelAttachment[]> => {\n const replayableDocuments = getSurveyAssistantReplayableDocuments(documents, currentDocumentIds);\n\n return loadSurveyAssistantDocuments({\n documents: replayableDocuments,\n repository,\n resourceId,\n threadId,\n });\n};\n\nexport const loadSurveyAssistantDocuments = async ({\n documents,\n repository,\n resourceId,\n threadId,\n}: {\n documents: SurveyAssistantThreadDocument[];\n repository: SurveyAssistantThreadDocumentRepository;\n resourceId: string;\n threadId: string;\n}): Promise<SurveyAssistantModelAttachment[]> => {\n const attachments: SurveyAssistantModelAttachment[] = [];\n for (const document of documents) {\n const content = await repository.read({\n resourceId,\n threadId,\n documentId: document.id,\n });\n if (!content) continue;\n attachments.push({\n filename: content.name,\n mediaType: content.mediaType,\n data: content.data,\n contentHash: content.contentHash,\n });\n }\n\n return attachments;\n};\n","import { handleChatStream } from \"@mastra/ai-sdk\";\nimport type { AgentExecutionOptions } from \"@mastra/core/agent\";\nimport type { Mastra } from \"@mastra/core/mastra\";\nimport { createUIMessageStreamResponse, type UIMessage, type UIMessageChunk } from \"ai\";\nimport {\n SurveyAssistantCapabilityMismatchError,\n TurnSurveyDraft,\n type SurveyAssistantCapabilitySet,\n} from \"../engine\";\nimport {\n isSurveyAssistantErrorRetryable,\n MAX_USER_ERROR_MESSAGE_LENGTH,\n sanitizeSurveyAssistantDiagnosticText,\n serializeSurveyAssistantError,\n type SurveyAssistantErrorCode,\n type SurveyAssistantTurnTerminationReason,\n type SurveyDocumentSnapshot,\n} from \"../protocol\";\nimport {\n buildSurveyAssistantRequestContext,\n parseSurveyAssistantPreviousApplyOutcome,\n parseSurveyAssistantPreviousSettledVersion,\n parseSurveyAssistantSnapshot,\n type SurveyAssistantModelSelection,\n type SurveyAssistantIdentityContext,\n} from \"./request-context\";\nimport { SURVEY_ASSISTANT_AGENT_ID } from \"./constants\";\nimport {\n readSurveyAssistantRequestJson,\n SurveyAssistantRequestError,\n SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS,\n type SurveyAssistantRequestLimits,\n validateSurveyAssistantMessages,\n} from \"./request-guardrails\";\nimport { createSurveyAssistantTurnStream } from \"./turn-stream\";\nimport {\n createSurveyAssistantExecutionTimeout,\n getSurveyAssistantExecutionTimeoutMessage,\n type SurveyAssistantExecutionTimeoutKind,\n} from \"./execution-timeout\";\nimport {\n registerSurveyAssistantThreadAttachments,\n loadSurveyAssistantDocuments,\n getSurveyAssistantReplayableDocuments,\n removeHistoricalSurveyAssistantAttachments,\n replaceCurrentSurveyAssistantAttachmentsWithReferences,\n type SurveyAssistantAttachmentAccess,\n type SurveyAssistantModelAttachment,\n type SurveyAssistantThreadDocumentRepository,\n} from \"./thread-documents\";\n\nconst DEFAULT_MAX_STEPS = 48;\nconst DEFAULT_MAX_CONCURRENT_REQUESTS = 8;\nconst DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = 15 * 60 * 1_000;\nconst DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1_000;\nconst DEFAULT_MAX_DURATION_MS = 60 * 60 * 1_000;\nconst MAX_ERROR_CAUSE_DEPTH = 5;\n\ntype ProviderOptions = AgentExecutionOptions[\"providerOptions\"];\n\nconst getTimeoutTerminationReason = (\n kind: SurveyAssistantExecutionTimeoutKind,\n): SurveyAssistantTurnTerminationReason => {\n switch (kind) {\n case \"first-response\":\n return \"first-response-timeout\";\n case \"idle\":\n return \"idle-timeout\";\n case \"max-duration\":\n return \"max-duration\";\n }\n};\n\nexport interface SurveyAssistantAuthorizationInput {\n request: Request;\n requestedResourceId?: string;\n requestedThreadId?: string;\n requestedSurveyId?: string;\n}\n\nexport type SurveyAssistantAuthorizedIdentity = SurveyAssistantIdentityContext;\n\nexport type SurveyAssistantAuthorize = (\n input: SurveyAssistantAuthorizationInput,\n) => Promise<SurveyAssistantAuthorizedIdentity> | SurveyAssistantAuthorizedIdentity;\n\nexport interface SurveyAssistantModelResolutionInput {\n identity: SurveyAssistantAuthorizedIdentity;\n request: Request;\n requestedModelId?: string;\n}\n\nexport type SurveyAssistantResolveModel = (\n input: SurveyAssistantModelResolutionInput,\n) =>\n | Promise<SurveyAssistantModelSelection | null | undefined>\n | SurveyAssistantModelSelection\n | null\n | undefined;\n\nexport class SurveyAssistantAuthorizationError extends Error {\n readonly status: number;\n\n constructor(message = \"The survey assistant request is not authorized.\", status = 403) {\n super(message);\n this.name = \"SurveyAssistantAuthorizationError\";\n this.status = status;\n }\n}\n\nexport interface SurveyAssistantTurnMetrics {\n durationMs?: number;\n snapshotBytes: number;\n toolCalls: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n cachedInputTokens?: number;\n terminationReason?: SurveyAssistantTurnTerminationReason;\n}\n\nexport interface SurveyAssistantStreamErrorContext {\n requestId?: string;\n resourceId: string;\n surveyId?: string;\n threadId: string;\n}\n\nexport interface SurveyAssistantChatHandlerOptions {\n mastra: Mastra | (() => Mastra | Promise<Mastra>);\n authorize: SurveyAssistantAuthorize;\n activeTools: readonly string[];\n agentId?: string;\n trustedCapabilities?: SurveyAssistantCapabilitySet;\n isEnabled?: (request: Request) => boolean | Promise<boolean>;\n getReadinessError?: (request: Request) => string | null | Promise<string | null>;\n firstResponseTimeoutMs?: number;\n idleTimeoutMs?: number;\n maxConcurrentRequests?: number;\n maxDurationMs?: number;\n maxSteps?: number;\n providerName?: string;\n providerOptions?: ProviderOptions;\n sendReasoning?: boolean;\n formatStreamError?: (error: unknown, context: SurveyAssistantStreamErrorContext) => string;\n onStreamError?: (error: unknown, context: SurveyAssistantStreamErrorContext) => void;\n onTurnMetrics?: (input: {\n identity: SurveyAssistantAuthorizedIdentity;\n metrics: SurveyAssistantTurnMetrics;\n provider?: string;\n requestId?: string;\n turnId: string;\n }) => void;\n /** Optional overrides; omitted values use the safe package defaults. */\n requestLimits?: Partial<SurveyAssistantRequestLimits>;\n resolveModel?: SurveyAssistantResolveModel;\n threadDocuments?: SurveyAssistantThreadDocumentRepository;\n}\n\ntype SurveyAssistantChatParams = {\n messages?: unknown;\n snapshot?: unknown;\n previousSettledVersion?: unknown;\n previousApplyOutcome?: unknown;\n requestId?: unknown;\n id?: unknown;\n resourceId?: unknown;\n modelId?: unknown;\n threadId?: unknown;\n surveyId?: unknown;\n trigger?: \"submit-message\" | \"regenerate-message\";\n} & Record<string, unknown>;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst optionalRequestedId = (value: unknown) => {\n if (typeof value !== \"string\") return undefined;\n const normalized = value.trim();\n return normalized.length > 0 && normalized.length <= 240 ? normalized : undefined;\n};\n\nconst optionalDiagnosticId = (value: unknown) => {\n if (typeof value !== \"string\") return undefined;\n const normalized = value.trim();\n return /^[A-Za-z0-9_-]{8,64}$/.test(normalized) ? normalized : undefined;\n};\n\nconst validateAuthorizedIdentity = (\n identity: SurveyAssistantAuthorizedIdentity,\n): SurveyAssistantAuthorizedIdentity => {\n if (\n !identity ||\n (identity.authority !== \"authenticated-host\" &&\n identity.authority !== \"experimental-client-request\") ||\n typeof identity.resourceId !== \"string\" ||\n identity.resourceId.trim().length === 0 ||\n identity.resourceId.length > 240 ||\n (identity.surveyId !== undefined && !optionalRequestedId(identity.surveyId)) ||\n typeof identity.threadId !== \"string\" ||\n identity.threadId.trim().length === 0 ||\n identity.threadId.length > 240\n ) {\n throw new SurveyAssistantAuthorizationError(\n \"The host returned an invalid survey assistant identity.\",\n 500,\n );\n }\n\n return {\n authority: identity.authority,\n resourceId: identity.resourceId.trim(),\n ...(identity.surveyId ? { surveyId: optionalRequestedId(identity.surveyId) } : {}),\n threadId: identity.threadId.trim(),\n };\n};\n\nconst validateModelSelection = (\n selection: SurveyAssistantModelSelection | null | undefined,\n): SurveyAssistantModelSelection | null => {\n if (!selection) return null;\n const id = optionalRequestedId(selection.id);\n const modelValue: unknown = selection.model;\n const stringModel = typeof modelValue === \"string\" ? optionalRequestedId(modelValue) : undefined;\n const objectModel = (() => {\n if (!isRecord(modelValue)) return undefined;\n const url = modelValue.url;\n const apiKey = modelValue.apiKey;\n const headers = modelValue.headers;\n if (\n (url !== undefined && typeof url !== \"string\") ||\n (apiKey !== undefined && typeof apiKey !== \"string\") ||\n (headers !== undefined &&\n (!isRecord(headers) || Object.values(headers).some((value) => typeof value !== \"string\")))\n ) {\n return undefined;\n }\n const shared = {\n ...(url === undefined ? {} : { url }),\n ...(apiKey === undefined ? {} : { apiKey }),\n ...(headers === undefined ? {} : { headers: headers as Record<string, string> }),\n };\n const compatibleId = optionalRequestedId(modelValue.id);\n if (compatibleId) {\n return { id: compatibleId, ...shared } as SurveyAssistantModelSelection[\"model\"];\n }\n const providerId = optionalRequestedId(modelValue.providerId);\n const modelId = optionalRequestedId(modelValue.modelId);\n if (providerId && modelId) {\n return {\n providerId,\n modelId,\n ...shared,\n } as SurveyAssistantModelSelection[\"model\"];\n }\n return undefined;\n })();\n const providerName =\n selection.providerName === undefined ? undefined : optionalRequestedId(selection.providerName);\n const providerOptions = selection.providerOptions;\n if (\n (selection.providerName !== undefined && !providerName) ||\n (providerOptions !== undefined && !isRecord(providerOptions))\n ) {\n return null;\n }\n return id && (stringModel || objectModel)\n ? {\n id,\n model: stringModel ?? objectModel!,\n ...(providerName ? { providerName } : {}),\n ...(providerOptions ? { providerOptions } : {}),\n }\n : null;\n};\n\nconst readNumber = (value: unknown): number | undefined =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst recordTurnStreamPart = (metrics: SurveyAssistantTurnMetrics, part: unknown) => {\n if (!isRecord(part)) return;\n if (part.type === \"tool-call\") metrics.toolCalls += 1;\n if (part.type !== \"finish\") return;\n\n const payload = isRecord(part.payload) ? part.payload : undefined;\n const output = isRecord(payload?.output) ? payload.output : undefined;\n const usage = isRecord(output?.usage) ? output.usage : undefined;\n if (!usage) return;\n\n metrics.inputTokens = readNumber(usage.inputTokens);\n metrics.outputTokens = readNumber(usage.outputTokens);\n metrics.totalTokens = readNumber(usage.totalTokens);\n metrics.reasoningTokens = readNumber(usage.reasoningTokens);\n metrics.cachedInputTokens = readNumber(usage.cachedInputTokens);\n};\n\nconst unwrapStreamError = (error: unknown) => {\n if (isRecord(error) && error.error !== undefined) return error.error;\n return error;\n};\n\nconst describeErrorLevel = (value: unknown): Record<string, unknown> => {\n if (value instanceof Error) {\n const properties = Object.fromEntries(\n Object.getOwnPropertyNames(value)\n .filter((key) => key !== \"stack\")\n .map((key) => [key, (value as unknown as Record<string, unknown>)[key]]),\n );\n return { name: value.name, message: value.message, stack: value.stack, ...properties };\n }\n\n if (isRecord(value)) {\n return {\n constructorName: value.constructor?.name,\n ...Object.fromEntries(Object.getOwnPropertyNames(value).map((key) => [key, value[key]])),\n };\n }\n\n return { value };\n};\n\nexport const describeSurveyAssistantStreamError = (error: unknown) => {\n const levels: Record<string, unknown>[] = [];\n let current: unknown = unwrapStreamError(error);\n\n for (\n let depth = 0;\n depth < MAX_ERROR_CAUSE_DEPTH && current !== undefined && current !== null;\n depth += 1\n ) {\n const level = describeErrorLevel(current);\n levels.push(level);\n current = level.cause;\n }\n\n return levels.length === 1 ? levels[0] : { levels };\n};\n\nconst clampUserErrorMessage = (message: string) => {\n return sanitizeSurveyAssistantDiagnosticText(message, MAX_USER_ERROR_MESSAGE_LENGTH);\n};\n\nconst getProviderModelName = (message: string) =>\n message.match(/\\bmodel\\s+[`'\"]([^`'\"]+)[`'\"]/i)?.[1]?.trim();\n\nconst classifyStreamError = (message: string, statusCode?: number): SurveyAssistantErrorCode => {\n if (statusCode === 401 || statusCode === 403) return \"authorization_failed\";\n if (statusCode === 429) return \"rate_limited\";\n if (\n /\\bmodel\\b[\\s\\S]{0,160}\\b(?:limited preview|not available)\\b/i.test(message) ||\n /\\blimited preview\\b[\\s\\S]{0,160}\\bmodel\\b/i.test(message)\n ) {\n return \"model_unavailable\";\n }\n if (/\\b(?:rate limit|too many requests|request limit)\\b/i.test(message)) {\n return \"rate_limited\";\n }\n if (\n /\\b(?:invalid api key|incorrect api key|authentication|unauthorized|forbidden)\\b/i.test(message)\n ) {\n return \"authorization_failed\";\n }\n if (\n /\\b(?:attachment|document|file)\\b[\\s\\S]{0,120}\\b(?:missing|unavailable|not found|failed)\\b/i.test(\n message,\n )\n ) {\n return \"attachment_unavailable\";\n }\n return \"request_failed\";\n};\n\nconst formatKnownProviderError = (message: string) => {\n const normalized = clampUserErrorMessage(message);\n if (\n /\\bmodel\\b[\\s\\S]{0,160}\\b(?:limited preview|not available)\\b/i.test(normalized) ||\n /\\blimited preview\\b[\\s\\S]{0,160}\\bmodel\\b/i.test(normalized)\n ) {\n const modelName = getProviderModelName(normalized);\n return `The configured model${modelName ? ` \\`${modelName}\\`` : \"\"} is not available on this account.`;\n }\n if (/\\b(?:rate limit|too many requests|request limit)\\b/i.test(normalized)) {\n return \"The AI provider is temporarily limiting requests.\";\n }\n if (\n /\\b(?:invalid api key|incorrect api key|authentication|unauthorized|forbidden)\\b/i.test(\n normalized,\n )\n ) {\n return \"The AI provider rejected the assistant credentials.\";\n }\n return \"The AI provider could not complete the request.\";\n};\n\nconst parseProviderResponseBodyMessage = (responseBody: unknown) => {\n if (typeof responseBody !== \"string\" || responseBody.trim().length === 0) return undefined;\n try {\n const parsed = JSON.parse(responseBody) as unknown;\n if (isRecord(parsed) && isRecord(parsed.error) && typeof parsed.error.message === \"string\") {\n return parsed.error.message;\n }\n } catch {\n return undefined;\n }\n return undefined;\n};\n\nconst getProviderRequestId = (levels: unknown[]): string | undefined => {\n for (const level of levels) {\n if (!isRecord(level) || !isRecord(level.responseHeaders)) continue;\n for (const [key, value] of Object.entries(level.responseHeaders)) {\n const normalizedKey = key.toLocaleLowerCase();\n if (\n (normalizedKey === \"request-id\" || normalizedKey === \"x-request-id\") &&\n typeof value === \"string\"\n ) {\n const normalized = sanitizeSurveyAssistantDiagnosticText(value, 240);\n if (normalized) return normalized;\n }\n }\n }\n return undefined;\n};\n\nconst extractUserErrorMessageFromLevel = (level: Record<string, unknown>) => {\n if (\n isRecord(level.data) &&\n isRecord(level.data.error) &&\n typeof level.data.error.message === \"string\"\n ) {\n return level.data.error.message;\n }\n return (\n parseProviderResponseBodyMessage(level.responseBody) ??\n (typeof level.message === \"string\" ? level.message : undefined)\n );\n};\n\nconst isProviderCallErrorLevel = (level: Record<string, unknown>) =>\n level.constructorName === \"APICallError\" ||\n level.name === \"AI_APICallError\" ||\n (level.statusCode !== undefined &&\n (level.responseBody !== undefined || level.responseHeaders !== undefined));\n\nexport const formatSurveyAssistantStreamError = (error: unknown) => {\n const describedError = describeSurveyAssistantStreamError(error);\n const levels = Array.isArray(describedError.levels) ? describedError.levels : [describedError];\n const messageLevel = levels.find(\n (level): level is Record<string, unknown> =>\n isRecord(level) && Boolean(extractUserErrorMessageFromLevel(level)),\n );\n const statusLevel = levels.find(\n (level): level is Record<string, unknown> => isRecord(level) && level.statusCode !== undefined,\n );\n const statusCode = Number(statusLevel?.statusCode);\n const detail = messageLevel ? extractUserErrorMessageFromLevel(messageLevel) : undefined;\n const providerLevel = levels.find(\n (level): level is Record<string, unknown> => isRecord(level) && isProviderCallErrorLevel(level),\n );\n const providerDetail = providerLevel\n ? extractUserErrorMessageFromLevel(providerLevel)\n : undefined;\n const formattedDetail = detail ? formatKnownProviderError(detail) : undefined;\n const code = classifyStreamError(\n detail ?? formattedDetail ?? \"\",\n Number.isFinite(statusCode) ? statusCode : undefined,\n );\n const providerMessage =\n code === \"authorization_failed\" || !providerDetail\n ? undefined\n : sanitizeSurveyAssistantDiagnosticText(providerDetail, MAX_USER_ERROR_MESSAGE_LENGTH);\n const upstreamStatus = Number.isFinite(statusCode) ? statusCode : undefined;\n const providerRequestId = getProviderRequestId(levels);\n return serializeSurveyAssistantError({\n code,\n ...(formattedDetail ? { detail: formattedDetail } : {}),\n ...(upstreamStatus ? { upstreamStatus } : {}),\n ...(providerRequestId ? { providerRequestId } : {}),\n ...(providerMessage ? { providerMessage } : {}),\n retryable: isSurveyAssistantErrorRetryable({ code, upstreamStatus }),\n });\n};\n\nconst requestErrorResponse = (error: unknown, fallback: string) => {\n const requestError =\n error instanceof SurveyAssistantRequestError\n ? error\n : new SurveyAssistantRequestError(fallback);\n return Response.json(\n { code: \"request_failed\", error: requestError.message },\n { status: requestError.status },\n );\n};\n\nexport const createSurveyAssistantChatHandler = (options: SurveyAssistantChatHandlerOptions) => {\n const requestLimits: SurveyAssistantRequestLimits = {\n ...SURVEY_ASSISTANT_DEFAULT_REQUEST_LIMITS,\n ...options.requestLimits,\n };\n for (const [name, value] of Object.entries(requestLimits)) {\n if (\n name !== \"acceptedAttachmentTypes\" &&\n (!Number.isSafeInteger(value) || (value as number) <= 0)\n ) {\n throw new Error(`Survey assistant request limit \"${name}\" must be a positive integer.`);\n }\n }\n if (typeof requestLimits.acceptedAttachmentTypes?.has !== \"function\") {\n throw new Error(\"Survey assistant accepted attachment types must be a set.\");\n }\n const maxConcurrentRequests =\n Number.isInteger(options.maxConcurrentRequests) && (options.maxConcurrentRequests ?? 0) > 0\n ? options.maxConcurrentRequests!\n : DEFAULT_MAX_CONCURRENT_REQUESTS;\n const firstResponseTimeoutMs =\n Number.isFinite(options.firstResponseTimeoutMs) && (options.firstResponseTimeoutMs ?? 0) > 0\n ? options.firstResponseTimeoutMs!\n : DEFAULT_FIRST_RESPONSE_TIMEOUT_MS;\n const idleTimeoutMs =\n Number.isFinite(options.idleTimeoutMs) && (options.idleTimeoutMs ?? 0) > 0\n ? options.idleTimeoutMs!\n : DEFAULT_IDLE_TIMEOUT_MS;\n const maxSteps =\n Number.isInteger(options.maxSteps) && (options.maxSteps ?? 0) > 0\n ? options.maxSteps!\n : DEFAULT_MAX_STEPS;\n const maxDurationMs =\n Number.isFinite(options.maxDurationMs) && (options.maxDurationMs ?? 0) > 0\n ? options.maxDurationMs!\n : DEFAULT_MAX_DURATION_MS;\n let activeRequestCount = 0;\n\n const acquireRequestSlot = () => {\n if (activeRequestCount >= maxConcurrentRequests) return null;\n activeRequestCount += 1;\n let released = false;\n return () => {\n if (released) return;\n released = true;\n activeRequestCount = Math.max(0, activeRequestCount - 1);\n };\n };\n\n return async (request: Request): Promise<Response> => {\n if (options.isEnabled && !(await options.isEnabled(request))) {\n return Response.json(\n { code: \"authorization_failed\", error: \"Survey assistant is disabled.\" },\n { status: 404 },\n );\n }\n\n let rawParams: unknown;\n try {\n rawParams = await readSurveyAssistantRequestJson(request, requestLimits.maxRequestBytes);\n } catch (error) {\n return requestErrorResponse(error, \"The survey assistant request could not be read.\");\n }\n\n const params = isRecord(rawParams)\n ? (rawParams as SurveyAssistantChatParams)\n : ({} satisfies SurveyAssistantChatParams);\n const requestId = optionalDiagnosticId(params.requestId);\n\n let identity: SurveyAssistantAuthorizedIdentity;\n try {\n identity = validateAuthorizedIdentity(\n await options.authorize({\n request,\n requestedResourceId: optionalRequestedId(params.resourceId),\n requestedThreadId: optionalRequestedId(params.threadId ?? params.id),\n requestedSurveyId: optionalRequestedId(params.surveyId),\n }),\n );\n } catch (error) {\n const authorizationError =\n error instanceof SurveyAssistantAuthorizationError\n ? error\n : new SurveyAssistantAuthorizationError();\n return Response.json(\n { code: \"authorization_failed\", error: authorizationError.message },\n { status: authorizationError.status },\n );\n }\n\n let messages: UIMessage[];\n try {\n messages = validateSurveyAssistantMessages(params.messages, requestLimits);\n } catch (error) {\n return requestErrorResponse(error, \"The survey assistant messages are invalid.\");\n }\n\n let modelSelection: SurveyAssistantModelSelection | undefined;\n if (options.resolveModel) {\n const requestedModelId = optionalRequestedId(params.modelId);\n if (params.modelId !== undefined && !requestedModelId) {\n return Response.json(\n { code: \"model_unavailable\", error: \"Invalid survey assistant model selection.\" },\n { status: 400 },\n );\n }\n\n try {\n modelSelection =\n validateModelSelection(\n await options.resolveModel({ identity, request, requestedModelId }),\n ) ?? undefined;\n } catch (error) {\n options.onStreamError?.(error, {\n requestId,\n resourceId: identity.resourceId,\n surveyId: identity.surveyId,\n threadId: identity.threadId,\n });\n return Response.json(\n {\n code: \"model_unavailable\",\n error: \"The survey assistant model catalog is unavailable.\",\n },\n { status: 503 },\n );\n }\n if (!modelSelection) {\n return Response.json(\n {\n code: \"model_unavailable\",\n error: \"The selected survey assistant model is not available.\",\n },\n { status: 400 },\n );\n }\n }\n\n let snapshot: SurveyDocumentSnapshot | null;\n let previousSettledVersion;\n let previousApplyOutcome;\n try {\n snapshot = parseSurveyAssistantSnapshot(params.snapshot);\n previousSettledVersion = parseSurveyAssistantPreviousSettledVersion(\n params.previousSettledVersion,\n );\n previousApplyOutcome = parseSurveyAssistantPreviousApplyOutcome(params.previousApplyOutcome);\n } catch {\n return Response.json(\n { code: \"request_failed\", error: \"Invalid survey assistant document context.\" },\n { status: 400 },\n );\n }\n\n const readinessError = await options.getReadinessError?.(request);\n if (readinessError) {\n return Response.json({ code: \"request_failed\", error: readinessError }, { status: 503 });\n }\n\n const releaseRequestSlot = acquireRequestSlot();\n if (!releaseRequestSlot) {\n return Response.json(\n {\n code: \"rate_limited\",\n error: \"The survey assistant is handling too many requests. Try again shortly.\",\n },\n { status: 429 },\n );\n }\n\n const turnDraft = new TurnSurveyDraft();\n let requestContext;\n try {\n let attachmentAccess: SurveyAssistantAttachmentAccess | undefined;\n let modelAttachments: SurveyAssistantModelAttachment[] = [];\n if (options.threadDocuments) {\n const repository = options.threadDocuments;\n const registered = await registerSurveyAssistantThreadAttachments({\n messages,\n repository,\n resourceId: identity.resourceId,\n threadId: identity.threadId,\n });\n const manifest = await repository.list({\n resourceId: identity.resourceId,\n threadId: identity.threadId,\n });\n modelAttachments = await loadSurveyAssistantDocuments({\n documents: registered,\n repository,\n resourceId: identity.resourceId,\n threadId: identity.threadId,\n });\n messages = replaceCurrentSurveyAssistantAttachmentsWithReferences({\n documents: registered,\n messages,\n });\n messages = removeHistoricalSurveyAssistantAttachments(messages);\n const registeredIds = new Set(registered.map((document) => document.id));\n const replayableDocuments = getSurveyAssistantReplayableDocuments(manifest, registeredIds);\n const documents = [...registered, ...replayableDocuments];\n if (documents.length > 0) {\n attachmentAccess = {\n documents,\n currentDocumentIds: registered.map((document) => document.id),\n selectedAttachments: [],\n load: (documentIds) =>\n loadSurveyAssistantDocuments({\n documents: documents.filter((document) => documentIds.includes(document.id)),\n repository,\n resourceId: identity.resourceId,\n threadId: identity.threadId,\n }),\n };\n }\n }\n requestContext = buildSurveyAssistantRequestContext({\n turnDraft,\n identity,\n snapshot,\n previousSettledVersion,\n previousApplyOutcome,\n trustedCapabilities: options.trustedCapabilities,\n attachmentAccess,\n modelAttachments,\n modelSelection,\n });\n } catch (error) {\n releaseRequestSlot();\n if (error instanceof SurveyAssistantRequestError) {\n return requestErrorResponse(error, \"The thread attachments could not be prepared.\");\n }\n if (error instanceof SurveyAssistantCapabilityMismatchError) {\n return Response.json({ error: error.message, code: error.code }, { status: 409 });\n }\n options.onStreamError?.(error, {\n requestId,\n resourceId: identity.resourceId,\n surveyId: identity.surveyId,\n threadId: identity.threadId,\n });\n return Response.json(\n {\n code: \"attachment_unavailable\",\n error: \"The survey assistant could not prepare the thread's reference documents.\",\n },\n { status: 503 },\n );\n }\n\n const metrics: SurveyAssistantTurnMetrics = {\n snapshotBytes: snapshot ? new TextEncoder().encode(JSON.stringify(snapshot)).byteLength : 0,\n toolCalls: 0,\n };\n const streamErrorContext = {\n requestId,\n resourceId: identity.resourceId,\n surveyId: identity.surveyId,\n threadId: identity.threadId,\n };\n const executionStartedAt = Date.now();\n const executionTimeout = createSurveyAssistantExecutionTimeout({\n firstResponseTimeoutMs,\n idleTimeoutMs,\n maxDurationMs,\n requestSignal: request.signal,\n });\n const executionSignal = executionTimeout.signal;\n const finalizeExecutionTurn = (\n status: \"completed\" | \"failed\" | \"aborted\",\n terminationReason?: SurveyAssistantTurnTerminationReason,\n ) => {\n const completedAt = Date.now();\n return turnDraft.finalize(status, new Date(completedAt).toISOString(), {\n startedAt: new Date(executionStartedAt).toISOString(),\n durationMs: Math.max(0, completedAt - executionStartedAt),\n ...(terminationReason ? { terminationReason } : {}),\n });\n };\n const handleStreamError = (error: unknown) => {\n options.onStreamError?.(error, streamErrorContext);\n return (\n options.formatStreamError?.(error, streamErrorContext) ??\n formatSurveyAssistantStreamError(error)\n );\n };\n\n let stream: ReadableStream<UIMessageChunk>;\n try {\n const mastra = typeof options.mastra === \"function\" ? await options.mastra() : options.mastra;\n stream = (await handleChatStream({\n mastra,\n agentId: options.agentId ?? SURVEY_ASSISTANT_AGENT_ID,\n version: \"v6\",\n params: {\n messages,\n ...(params.trigger ? { trigger: params.trigger } : {}),\n requestContext,\n runId: turnDraft.turnId,\n abortSignal: executionSignal,\n onAbort: () => {\n finalizeExecutionTurn(\n executionTimeout.timeoutKind ? \"failed\" : \"aborted\",\n executionTimeout.timeoutKind\n ? getTimeoutTerminationReason(executionTimeout.timeoutKind)\n : \"client-abort\",\n );\n },\n onError: () => {\n finalizeExecutionTurn(\"failed\", \"provider-error\");\n },\n memory: {\n thread: identity.threadId,\n resource: identity.resourceId,\n },\n },\n defaultOptions: {\n activeTools: [...options.activeTools],\n maxSteps,\n ...((modelSelection?.providerOptions ?? options.providerOptions)\n ? { providerOptions: modelSelection?.providerOptions ?? options.providerOptions }\n : {}),\n },\n sendReasoning: options.sendReasoning ?? true,\n messageMetadata: ({ part }: { part: unknown }) => {\n recordTurnStreamPart(metrics, part);\n return undefined;\n },\n onError: (error: unknown) => {\n finalizeExecutionTurn(\"failed\", \"provider-error\");\n return handleStreamError(error);\n },\n } as never)) as ReadableStream<UIMessageChunk>;\n } catch (error) {\n finalizeExecutionTurn(\n executionTimeout.timeoutKind ? \"failed\" : executionSignal.aborted ? \"aborted\" : \"failed\",\n executionTimeout.timeoutKind\n ? getTimeoutTerminationReason(executionTimeout.timeoutKind)\n : executionSignal.aborted\n ? \"client-abort\"\n : \"provider-error\",\n );\n executionTimeout.dispose();\n releaseRequestSlot();\n return Response.json(\n {\n error: executionTimeout.timeoutKind\n ? getSurveyAssistantExecutionTimeoutMessage(executionTimeout.timeoutKind)\n : handleStreamError(error),\n },\n { status: 503 },\n );\n }\n\n const turnStream = createSurveyAssistantTurnStream({\n stream,\n turnDraft,\n signal: executionSignal,\n getAbortErrorText: () =>\n executionTimeout.timeoutKind\n ? getSurveyAssistantExecutionTimeoutMessage(executionTimeout.timeoutKind)\n : undefined,\n getAbortTerminationReason: () =>\n executionTimeout.timeoutKind\n ? getTimeoutTerminationReason(executionTimeout.timeoutKind)\n : request.signal.aborted\n ? \"client-abort\"\n : undefined,\n onActivity: executionTimeout.recordActivity,\n onUnexpectedError: handleStreamError,\n onSettled: () => {\n executionTimeout.dispose();\n releaseRequestSlot();\n metrics.durationMs = Date.now() - executionStartedAt;\n metrics.terminationReason = turnDraft.final?.terminationReason;\n try {\n options.onTurnMetrics?.({\n identity,\n metrics,\n provider: modelSelection?.providerName ?? options.providerName,\n requestId,\n turnId: turnDraft.turnId,\n });\n } catch (error) {\n try {\n options.onStreamError?.(error, streamErrorContext);\n } catch {\n // Host observability hooks must not break an already-settled stream.\n }\n }\n },\n turnStartedAt: executionStartedAt,\n });\n\n return createUIMessageStreamResponse({ stream: turnStream });\n };\n};\n","import {\n createSurveyAssistantThreadInputSchema,\n updateSurveyAssistantThreadInputSchema,\n type SurveyAssistantThread,\n} from \"../protocol\";\nimport { readSurveyAssistantRequestJson, SurveyAssistantRequestError } from \"./request-guardrails\";\n\nconst DEFAULT_TITLE = \"New chat\";\nconst MAX_THREAD_MUTATION_BYTES = 16 * 1024;\nconst MANUAL_TITLE_METADATA_KEY = \"surveyAssistant.manualTitle\";\nconst AUTOMATIC_TITLE_METADATA_KEY = \"surveyAssistant.automaticTitle\";\n\nexport interface SurveyAssistantThreadIdentity {\n resourceId: string;\n metadata: Record<string, string>;\n}\n\nexport interface CreateSurveyAssistantThreadHandlersOptions {\n authorize(\n request: Request,\n ): SurveyAssistantThreadIdentity | Promise<SurveyAssistantThreadIdentity>;\n onError?(error: unknown, context: SurveyAssistantThreadErrorContext): void;\n repository: SurveyAssistantThreadRepository;\n}\n\nexport interface SurveyAssistantThreadErrorContext {\n operation: \"create\" | \"delete\" | \"list\" | \"read\" | \"update\";\n request: Request;\n threadId?: string;\n}\n\nexport interface SurveyAssistantStoredThread {\n id: string;\n title?: string;\n resourceId: string;\n createdAt: Date;\n updatedAt: Date;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SurveyAssistantThreadRepository {\n create(input: {\n resourceId: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<SurveyAssistantStoredThread>;\n get(threadId: string): Promise<SurveyAssistantStoredThread | null>;\n list(\n resourceId: string,\n metadata: Record<string, string>,\n options?: { cursor?: string },\n ): Promise<\n SurveyAssistantStoredThread[] | { threads: SurveyAssistantStoredThread[]; nextCursor?: string }\n >;\n readMessages(\n threadId: string,\n resourceId: string,\n cursor?: string,\n ): Promise<unknown[] | { messages: unknown[]; nextCursor?: string }>;\n delete(threadId: string): Promise<void>;\n update(input: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<SurveyAssistantStoredThread>;\n}\n\nconst getMetadataString = (metadata: Record<string, unknown> | undefined, key: string) => {\n const value = metadata?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n};\n\nconst getRawTitle = (thread: SurveyAssistantStoredThread) => thread.title?.trim() || DEFAULT_TITLE;\n\nconst getAutomaticTitle = (thread: SurveyAssistantStoredThread, manualTitle: string): string => {\n const rawTitle = thread.title?.trim();\n if (rawTitle && rawTitle !== manualTitle) return rawTitle;\n return getMetadataString(thread.metadata, AUTOMATIC_TITLE_METADATA_KEY) ?? DEFAULT_TITLE;\n};\n\nconst asThread = (thread: SurveyAssistantStoredThread): SurveyAssistantThread => {\n const manualTitle = getMetadataString(thread.metadata, MANUAL_TITLE_METADATA_KEY);\n\n return {\n id: thread.id,\n title: manualTitle ?? getRawTitle(thread),\n titleMode: manualTitle ? \"manual\" : \"automatic\",\n createdAt: thread.createdAt.toISOString(),\n updatedAt: thread.updatedAt.toISOString(),\n };\n};\n\nconst json = (body: unknown, status = 200) => Response.json(body, { status });\n\nconst errorResponse = (\n error: unknown,\n onError: CreateSurveyAssistantThreadHandlersOptions[\"onError\"],\n context: SurveyAssistantThreadErrorContext,\n) => {\n const status =\n typeof error === \"object\" &&\n error !== null &&\n \"status\" in error &&\n typeof error.status === \"number\"\n ? error.status\n : error instanceof SurveyAssistantRequestError ||\n error instanceof SyntaxError ||\n (error instanceof Error && error.name === \"ZodError\")\n ? 400\n : 500;\n if (status >= 500) {\n try {\n if (onError) {\n onError(error, context);\n } else {\n const url = new URL(context.request.url);\n console.error(\"[survey-assistant] thread request error\", {\n operation: context.operation,\n method: context.request.method,\n path: url.pathname,\n ...(context.threadId ? { threadId: context.threadId } : {}),\n error,\n });\n }\n } catch {\n // Error reporting must not replace the sanitized HTTP response.\n }\n }\n const message =\n error instanceof SurveyAssistantRequestError\n ? error.message\n : status === 401 || status === 403 || status === 404\n ? status === 404\n ? \"Chat not found.\"\n : \"The chat request is not authorized.\"\n : status >= 500\n ? \"The chat request could not be completed.\"\n : \"The chat request is invalid.\";\n return json(\n {\n code:\n status === 401 || status === 403 || status === 404\n ? \"authorization_failed\"\n : \"request_failed\",\n error: message,\n },\n status,\n );\n};\n\nconst ownsThread = (thread: SurveyAssistantStoredThread, identity: SurveyAssistantThreadIdentity) =>\n thread.resourceId === identity.resourceId &&\n Object.entries(identity.metadata).every(([key, value]) => thread.metadata?.[key] === value);\n\nconst getOwnedThread = async (\n repository: SurveyAssistantThreadRepository,\n identity: SurveyAssistantThreadIdentity,\n threadId: string,\n) => {\n const thread = await repository.get(threadId);\n return thread && ownsThread(thread, identity) ? thread : null;\n};\n\nexport const createSurveyAssistantThreadHandlers = ({\n authorize,\n onError,\n repository,\n}: CreateSurveyAssistantThreadHandlersOptions) => {\n const list = async (request: Request) => {\n try {\n const identity = await authorize(request);\n const url = new URL(request.url);\n const cursor = url.searchParams.get(\"cursor\")?.trim() || undefined;\n const result = await repository.list(identity.resourceId, identity.metadata, {\n ...(cursor ? { cursor } : {}),\n });\n const storedThreads = Array.isArray(result) ? result : result.threads;\n const threads = storedThreads\n .filter(\n (thread) =>\n ownsThread(thread, identity) && typeof thread.metadata?.archivedAt !== \"string\",\n )\n .map(asThread);\n return json({\n threads,\n ...(!Array.isArray(result) && result.nextCursor ? { nextCursor: result.nextCursor } : {}),\n });\n } catch (error) {\n return errorResponse(error, onError, { operation: \"list\", request });\n }\n };\n\n const create = async (request: Request) => {\n try {\n const [identity, input] = await Promise.all([\n authorize(request),\n readSurveyAssistantRequestJson(request, MAX_THREAD_MUTATION_BYTES),\n ]);\n const parsed = createSurveyAssistantThreadInputSchema.parse(input);\n const metadata = { ...identity.metadata };\n if (parsed.title) {\n metadata[MANUAL_TITLE_METADATA_KEY] = parsed.title;\n metadata[AUTOMATIC_TITLE_METADATA_KEY] = DEFAULT_TITLE;\n }\n const thread = await repository.create({\n resourceId: identity.resourceId,\n title: parsed.title ?? DEFAULT_TITLE,\n metadata,\n });\n return json({ thread: asThread(thread) }, 201);\n } catch (error) {\n return errorResponse(error, onError, { operation: \"create\", request });\n }\n };\n\n const read = async (request: Request, threadId: string) => {\n try {\n const identity = await authorize(request);\n const thread = await getOwnedThread(repository, identity, threadId);\n if (!thread || typeof thread.metadata?.archivedAt === \"string\") {\n return json({ error: \"Chat not found.\" }, 404);\n }\n const cursor = new URL(request.url).searchParams.get(\"cursor\")?.trim() || undefined;\n const result = await repository.readMessages(threadId, identity.resourceId, cursor);\n return json({\n thread: asThread(thread),\n messages: Array.isArray(result) ? result : result.messages,\n ...(!Array.isArray(result) && result.nextCursor ? { nextCursor: result.nextCursor } : {}),\n });\n } catch (error) {\n return errorResponse(error, onError, { operation: \"read\", request, threadId });\n }\n };\n\n const update = async (request: Request, threadId: string) => {\n try {\n const [identity, input] = await Promise.all([\n authorize(request),\n readSurveyAssistantRequestJson(request, MAX_THREAD_MUTATION_BYTES),\n ]);\n const thread = await getOwnedThread(repository, identity, threadId);\n if (!thread || typeof thread.metadata?.archivedAt === \"string\") {\n return json({ error: \"Chat not found.\" }, 404);\n }\n const parsed = updateSurveyAssistantThreadInputSchema.parse(input);\n const metadata = { ...(thread.metadata ?? identity.metadata) };\n let title: string;\n\n if (parsed.mode === \"automatic\") {\n const manualTitle = getMetadataString(metadata, MANUAL_TITLE_METADATA_KEY);\n title =\n parsed.title ??\n (manualTitle ? getAutomaticTitle(thread, manualTitle) : getRawTitle(thread));\n metadata[MANUAL_TITLE_METADATA_KEY] = null;\n metadata[AUTOMATIC_TITLE_METADATA_KEY] = null;\n } else {\n const previousManualTitle = getMetadataString(metadata, MANUAL_TITLE_METADATA_KEY);\n const automaticTitle = previousManualTitle\n ? getAutomaticTitle(thread, previousManualTitle)\n : getRawTitle(thread);\n title = parsed.title;\n metadata[MANUAL_TITLE_METADATA_KEY] = title;\n metadata[AUTOMATIC_TITLE_METADATA_KEY] = automaticTitle;\n }\n\n const updated = await repository.update({\n id: thread.id,\n title,\n metadata,\n });\n return json({ thread: asThread(updated) });\n } catch (error) {\n return errorResponse(error, onError, { operation: \"update\", request, threadId });\n }\n };\n\n const deleteThread = async (request: Request, threadId: string) => {\n try {\n const identity = await authorize(request);\n const thread = await getOwnedThread(repository, identity, threadId);\n if (!thread) return json({ error: \"Chat not found.\" }, 404);\n await repository.delete(thread.id);\n return new Response(null, { status: 204 });\n } catch (error) {\n return errorResponse(error, onError, { operation: \"delete\", request, threadId });\n }\n };\n\n return { create, delete: deleteThread, list, read, update };\n};\n","import { toAISdkMessages } from \"@mastra/ai-sdk/ui\";\nimport type { MastraMemory } from \"@mastra/core/memory\";\nimport type { SurveyAssistantThreadDocumentRepository } from \"./thread-documents\";\nimport type { SurveyAssistantThreadRepository } from \"./thread-handlers\";\n\ntype ThreadMemory = Pick<\n MastraMemory,\n \"createThread\" | \"deleteThread\" | \"getThreadById\" | \"listThreads\" | \"recall\" | \"updateThread\"\n>;\n\nexport interface CreateMastraMemoryThreadRepositoryOptions {\n getMemory(): ThreadMemory | Promise<ThreadMemory>;\n /** Maximum recent messages returned per transcript page. */\n maxMessagesPerTranscript?: number;\n /** Maximum threads returned per history page. */\n maxThreadsPerList?: number;\n threadDocuments?: SurveyAssistantThreadDocumentRepository;\n}\n\nexport const createMastraMemoryThreadRepository = ({\n getMemory,\n maxMessagesPerTranscript = 100,\n maxThreadsPerList = 30,\n threadDocuments,\n}: CreateMastraMemoryThreadRepositoryOptions): SurveyAssistantThreadRepository => ({\n async create({ metadata, resourceId, title }) {\n return (await getMemory()).createThread({ metadata, resourceId, title, saveThread: true });\n },\n async get(threadId) {\n return (await getMemory()).getThreadById({ threadId });\n },\n async list(resourceId, metadata, options) {\n const page = Number.parseInt(options?.cursor ?? \"0\", 10);\n const perPage = Math.max(1, Math.min(200, maxThreadsPerList));\n const result = await (\n await getMemory()\n ).listThreads({\n filter: { metadata, resourceId },\n orderBy: { field: \"updatedAt\", direction: \"DESC\" },\n page: Number.isFinite(page) && page >= 0 ? page : 0,\n perPage,\n });\n return {\n ...(result.hasMore ? { nextCursor: String(result.page + 1) } : {}),\n threads: result.threads,\n };\n },\n async readMessages(threadId, resourceId, cursor) {\n const page = Number.parseInt(cursor ?? \"0\", 10);\n const result = await (\n await getMemory()\n ).recall({\n threadId,\n resourceId,\n page: Number.isFinite(page) && page >= 0 ? page : 0,\n perPage: Math.max(1, Math.min(5_000, maxMessagesPerTranscript)),\n orderBy: { field: \"createdAt\", direction: \"DESC\" },\n });\n return {\n messages: toAISdkMessages([...result.messages].reverse(), { version: \"v6\" }),\n ...(result.hasMore ? { nextCursor: String(result.page + 1) } : {}),\n };\n },\n async delete(threadId) {\n const memory = await getMemory();\n const thread = await memory.getThreadById({ threadId });\n if (thread && threadDocuments) {\n await threadDocuments.deleteThread({ resourceId: thread.resourceId, threadId });\n }\n await memory.deleteThread(threadId);\n },\n async update({ id, metadata, title }) {\n return (await getMemory()).updateThread({ id, metadata, title });\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
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
|
|
3
33
|
//#region src/protocol/errors.ts
|
|
4
34
|
const surveyAssistantErrorCodeSchema = z.enum([
|
|
5
35
|
"attachment_unavailable",
|
|
@@ -11,16 +41,30 @@ const surveyAssistantErrorCodeSchema = z.enum([
|
|
|
11
41
|
const surveyAssistantErrorInfoSchema = z.object({
|
|
12
42
|
code: surveyAssistantErrorCodeSchema,
|
|
13
43
|
detail: z.string().optional(),
|
|
14
|
-
retryable: z.boolean().optional()
|
|
15
|
-
|
|
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
|
+
};
|
|
16
56
|
const ERROR_PREFIX = "case-survey-assistant-error:";
|
|
17
57
|
const serializeSurveyAssistantError = (error) => `${ERROR_PREFIX}${JSON.stringify(surveyAssistantErrorInfoSchema.parse(error))}`;
|
|
18
58
|
const parseSurveyAssistantError = (value) => {
|
|
19
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;
|
|
20
61
|
const parsed = surveyAssistantErrorInfoSchema.safeParse({
|
|
21
62
|
code: value.code,
|
|
22
|
-
detail:
|
|
23
|
-
retryable: "retryable" in value && typeof value.retryable === "boolean" ? value.retryable : void 0
|
|
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
|
|
24
68
|
});
|
|
25
69
|
if (parsed.success) return parsed.data;
|
|
26
70
|
}
|
|
@@ -31,7 +75,7 @@ const parseSurveyAssistantError = (value) => {
|
|
|
31
75
|
} catch {}
|
|
32
76
|
return {
|
|
33
77
|
code: "request_failed",
|
|
34
|
-
...message.trim() ? { detail: message
|
|
78
|
+
...message.trim() ? { detail: sanitizeSurveyAssistantDiagnosticText(message, 700) } : {}
|
|
35
79
|
};
|
|
36
80
|
};
|
|
37
81
|
//#endregion
|
|
@@ -208,8 +252,8 @@ const itemTranslationSchema = z.object({
|
|
|
208
252
|
locale: z.string().min(1).max(40),
|
|
209
253
|
contentKey: z.string().min(1).max(240).describe("Item translation content key, for example \"label\" or \"content\"."),
|
|
210
254
|
plainText: z.string().max(2e4).optional().describe("Simple text content to persist for the translation key."),
|
|
211
|
-
content: surveyContentSchema.optional().describe("
|
|
212
|
-
}).refine((translation) => translation.plainText !== void 0
|
|
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." });
|
|
213
257
|
const choiceOptionInputSchema = z.object({
|
|
214
258
|
id: z.string().min(1).max(120).optional().describe("Optional stable option id. If omitted, the validator derives a unique id."),
|
|
215
259
|
key: z.string().min(1).max(120).optional().describe("Optional coding key. If omitted, the validator derives a unique key."),
|
|
@@ -226,7 +270,7 @@ const rawSurveyItemForCreateSchema = z.object({
|
|
|
226
270
|
disabledConditions: z.any().optional(),
|
|
227
271
|
prefills: z.array(z.any()).optional()
|
|
228
272
|
}).passthrough();
|
|
229
|
-
const jsonPointerPathSchema = z.string().max(500).describe("JSON Pointer
|
|
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.");
|
|
230
274
|
const jsonPatchOperationSchema = z.discriminatedUnion("op", [
|
|
231
275
|
z.object({
|
|
232
276
|
op: z.literal("add"),
|
|
@@ -266,7 +310,7 @@ const createItemOperationSchema = z.object({
|
|
|
266
310
|
index: z.number().int().min(0).optional()
|
|
267
311
|
}),
|
|
268
312
|
item: rawSurveyItemForCreateSchema,
|
|
269
|
-
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,
|
|
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.")
|
|
270
314
|
});
|
|
271
315
|
const updateItemKeyOperationSchema = z.object({
|
|
272
316
|
id: operationIdSchema,
|
|
@@ -293,8 +337,8 @@ const updateItemTranslationOperationSchema = z.object({
|
|
|
293
337
|
locale: z.string().min(1).max(40),
|
|
294
338
|
contentKey: z.string().min(1).max(240).describe("Item translation content key, for example \"label\"."),
|
|
295
339
|
plainText: z.string().max(2e4).optional().describe("Simple text content to persist for the translation key."),
|
|
296
|
-
content: surveyContentSchema.optional().describe("
|
|
297
|
-
}).refine((operation) => operation.plainText !== void 0
|
|
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." });
|
|
298
342
|
const placedImageDimensionSchema = z.union([z.object({
|
|
299
343
|
unit: z.literal("px"),
|
|
300
344
|
value: z.number().finite().nonnegative()
|
|
@@ -505,8 +549,8 @@ const updateSurveyTranslationOperationSchema = z.object({
|
|
|
505
549
|
]),
|
|
506
550
|
contentKey: z.string().min(1).max(240),
|
|
507
551
|
plainText: z.string().max(2e4).optional(),
|
|
508
|
-
content: surveyContentSchema.optional()
|
|
509
|
-
}).refine((operation) => operation.plainText !== void 0
|
|
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." });
|
|
510
554
|
const surveyLocaleSchema = z.string().trim().min(1).max(40);
|
|
511
555
|
const addSurveyLocaleOperationSchema = z.object({
|
|
512
556
|
id: operationIdSchema,
|
|
@@ -561,7 +605,7 @@ const removeImageAssetOperationSchema = z.object({
|
|
|
561
605
|
const surveyPatchOperationSchema = z.object({
|
|
562
606
|
id: operationIdSchema,
|
|
563
607
|
kind: z.literal("survey-json-patch"),
|
|
564
|
-
patches: z.array(jsonPatchOperationSchema).min(1).max(100).describe("
|
|
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.")
|
|
565
609
|
});
|
|
566
610
|
const asDiscriminable = (schema) => schema;
|
|
567
611
|
const surveyOperationSchemasByKind = {
|
|
@@ -957,6 +1001,12 @@ const surveyChangeSetSchema = z.object({
|
|
|
957
1001
|
summary: z.string().min(1).max(500),
|
|
958
1002
|
operations: z.array(surveyOperationSchema),
|
|
959
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(),
|
|
960
1010
|
precondition: surveyDocumentVersionSchema.optional(),
|
|
961
1011
|
postChange: z.object({
|
|
962
1012
|
version: surveyDocumentVersionSchema,
|
|
@@ -1118,6 +1168,6 @@ const applyReceiptSchema = z.object({
|
|
|
1118
1168
|
});
|
|
1119
1169
|
const surveyAssistantDraftChangeEventSchema = surveyChangeSetSchema;
|
|
1120
1170
|
//#endregion
|
|
1121
|
-
export { jsonPatchOperationSchema as $, createSurveyAssistantThreadInputSchema as A, surveyContentSchema as At, surveyAssistantSnapshotSchema as B, surveyAssistantTaskInvocationModeSchema as C, surveyValidationResultSchema as Ct, surveyAssistantTranslateContentInputSchema as D, updateItemLabelOperationSchema as Dt, surveyAssistantTranslateContentEntrySchema as E, updateItemKeyOperationSchema as Et, SURVEY_ASSISTANT_PROTOCOL_VERSION as F, assistantItemAuthoringSchema as G, surveyDocumentVersionSchema as H, rawSurveyDocumentSchema as I, assistantResponseSlotSchema as J, assistantItemCreateModeSchema as K, surveyAssistantDraftChangePreconditionSchema as L, surveyAssistantThreadSchema as M,
|
|
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 };
|
|
1122
1172
|
|
|
1123
|
-
//# sourceMappingURL=protocol-
|
|
1173
|
+
//# sourceMappingURL=protocol-BhzQbx81.mjs.map
|