@case-framework/survey-assistant 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/{authoring-references-DbuOKerg.mjs → authoring-references-CmwLc_C8.mjs} +40 -32
  2. package/dist/authoring-references-CmwLc_C8.mjs.map +1 -0
  3. package/dist/capabilities-D55dq-fO.mjs +582 -0
  4. package/dist/capabilities-D55dq-fO.mjs.map +1 -0
  5. package/dist/capabilities-default.d.mts +4 -12
  6. package/dist/capabilities-default.d.mts.map +1 -1
  7. package/dist/capabilities-default.mjs +2 -2
  8. package/dist/capabilities-z95e1mti.d.mts +117 -0
  9. package/dist/capabilities-z95e1mti.d.mts.map +1 -0
  10. package/dist/{constants-B6HzpEsx.d.mts → constants-HL_klgJl.d.mts} +4 -4
  11. package/dist/{constants-B6HzpEsx.d.mts.map → constants-HL_klgJl.d.mts.map} +1 -1
  12. package/dist/{controller-proxy-DEeFl9IA.mjs → controller-proxy-BQ1YsVxJ.mjs} +4 -3
  13. package/dist/controller-proxy-BQ1YsVxJ.mjs.map +1 -0
  14. package/dist/{controller-proxy-D7uQfm5f.d.mts → controller-proxy-Cmzdr9tV.d.mts} +4 -4
  15. package/dist/{controller-proxy-D7uQfm5f.d.mts.map → controller-proxy-Cmzdr9tV.d.mts.map} +1 -1
  16. package/dist/default-D22AKTqE.mjs +233 -0
  17. package/dist/default-D22AKTqE.mjs.map +1 -0
  18. package/dist/{digest-C39WyAWG.d.mts → digest-FnTTDBq2.d.mts} +2 -2
  19. package/dist/digest-FnTTDBq2.d.mts.map +1 -0
  20. package/dist/digest.d.mts +1 -1
  21. package/dist/engine-D950TfvC.mjs +3098 -0
  22. package/dist/engine-D950TfvC.mjs.map +1 -0
  23. package/dist/engine.d.mts +4 -3
  24. package/dist/engine.mjs +3 -3
  25. package/dist/{index-WB5kfnz0.d.mts → index-B8TLBd1G.d.mts} +8 -6
  26. package/dist/index-B8TLBd1G.d.mts.map +1 -0
  27. package/dist/index-CaX3hZmr.d.mts +23813 -0
  28. package/dist/index-CaX3hZmr.d.mts.map +1 -0
  29. package/dist/{index-r5riv4md.d.mts → index-CeUlGkoU.d.mts} +27 -6
  30. package/dist/index-CeUlGkoU.d.mts.map +1 -0
  31. package/dist/{index-D7wT6P3t.d.mts → index-DYHdvSE8.d.mts} +83 -41
  32. package/dist/index-DYHdvSE8.d.mts.map +1 -0
  33. package/dist/lifecycle-DFzxVxpq.d.mts +54346 -0
  34. package/dist/lifecycle-DFzxVxpq.d.mts.map +1 -0
  35. package/dist/{memory-thread-repository-DAnOGIB3.mjs → memory-thread-repository-DmLadygY.mjs} +15 -9
  36. package/dist/{memory-thread-repository-DAnOGIB3.mjs.map → memory-thread-repository-DmLadygY.mjs.map} +1 -1
  37. package/dist/protocol-BQ7uIDYT.mjs +569 -0
  38. package/dist/protocol-BQ7uIDYT.mjs.map +1 -0
  39. package/dist/protocol.d.mts +4 -4
  40. package/dist/protocol.mjs +3 -2
  41. package/dist/{react-C_GY-Fsc.mjs → react-DybJ5pWw.mjs} +17 -11
  42. package/dist/react-DybJ5pWw.mjs.map +1 -0
  43. package/dist/react-integration.d.mts +1 -1
  44. package/dist/react-integration.mjs +1 -1
  45. package/dist/react.d.mts +2 -2
  46. package/dist/react.mjs +2 -2
  47. package/dist/references/assistant-operations.md +190 -215
  48. package/dist/references/core-rules.md +2 -2
  49. package/dist/references/element-types.md +189 -0
  50. package/dist/references/expressions.md +215 -238
  51. package/dist/references/follow-ups.md +151 -0
  52. package/dist/references/localization.md +26 -12
  53. package/dist/references/response-variables.md +3 -3
  54. package/dist/references/rich-text-content.md +22 -43
  55. package/dist/references/source-material-surveys.md +20 -25
  56. package/dist/references/survey-data-model.md +36 -117
  57. package/dist/{request-context-Dg4jSwN1.mjs → request-context-KVh8VjgH.mjs} +4 -4
  58. package/dist/request-context-KVh8VjgH.mjs.map +1 -0
  59. package/dist/server-agent.d.mts +28 -7
  60. package/dist/server-agent.d.mts.map +1 -1
  61. package/dist/server-agent.mjs +33 -25
  62. package/dist/server-agent.mjs.map +1 -1
  63. package/dist/server-runtime.d.mts +6 -5
  64. package/dist/server-runtime.d.mts.map +1 -1
  65. package/dist/server-runtime.mjs +3 -3
  66. package/dist/server-tasks.d.mts +1 -1
  67. package/dist/server-tasks.mjs +1 -1
  68. package/dist/server-tools.d.mts +1 -1
  69. package/dist/server-tools.mjs +1 -1
  70. package/dist/server.d.mts +7 -6
  71. package/dist/server.d.mts.map +1 -1
  72. package/dist/server.mjs +3 -3
  73. package/dist/{tasks-BZEiwgxA.mjs → tasks-Coh5N027.mjs} +16 -15
  74. package/dist/tasks-Coh5N027.mjs.map +1 -0
  75. package/dist/{tasks-B9h3LPam.d.mts → tasks-wb9M-bak.d.mts} +11 -11
  76. package/dist/{tasks-B9h3LPam.d.mts.map → tasks-wb9M-bak.d.mts.map} +1 -1
  77. package/dist/{thread-handlers-Bef0td9N.d.mts → thread-handlers-C3Iya92v.d.mts} +6 -5
  78. package/dist/thread-handlers-C3Iya92v.d.mts.map +1 -0
  79. package/dist/{tools-CEsv-WoO.mjs → tools-D0KBDolR.mjs} +435 -408
  80. package/dist/tools-D0KBDolR.mjs.map +1 -0
  81. package/dist/turn-survey-draft-B34lggSG.d.mts +185 -0
  82. package/dist/turn-survey-draft-B34lggSG.d.mts.map +1 -0
  83. package/dist/ui.d.mts +3 -3
  84. package/dist/ui.d.mts.map +1 -1
  85. package/dist/ui.mjs +35 -23
  86. package/dist/ui.mjs.map +1 -1
  87. package/package.json +7 -7
  88. package/dist/authoring-references-DbuOKerg.mjs.map +0 -1
  89. package/dist/capabilities-CmeeAjEc.d.mts +0 -192
  90. package/dist/capabilities-CmeeAjEc.d.mts.map +0 -1
  91. package/dist/capabilities-DCMA71PP.mjs +0 -58
  92. package/dist/capabilities-DCMA71PP.mjs.map +0 -1
  93. package/dist/controller-proxy-DEeFl9IA.mjs.map +0 -1
  94. package/dist/default-fhSon2RM.mjs +0 -760
  95. package/dist/default-fhSon2RM.mjs.map +0 -1
  96. package/dist/digest-C39WyAWG.d.mts.map +0 -1
  97. package/dist/engine-nXoCWYpQ.mjs +0 -6888
  98. package/dist/engine-nXoCWYpQ.mjs.map +0 -1
  99. package/dist/index-Ciq7vHIs.d.mts +0 -716
  100. package/dist/index-Ciq7vHIs.d.mts.map +0 -1
  101. package/dist/index-D7wT6P3t.d.mts.map +0 -1
  102. package/dist/index-WB5kfnz0.d.mts.map +0 -1
  103. package/dist/index-r5riv4md.d.mts.map +0 -1
  104. package/dist/lifecycle-Dm8u7QFh.d.mts +0 -545
  105. package/dist/lifecycle-Dm8u7QFh.d.mts.map +0 -1
  106. package/dist/protocol-CF4Bh_Ch.mjs +0 -1255
  107. package/dist/protocol-CF4Bh_Ch.mjs.map +0 -1
  108. package/dist/react-C_GY-Fsc.mjs.map +0 -1
  109. package/dist/references/embedded-forms.md +0 -146
  110. package/dist/references/item-types.md +0 -641
  111. package/dist/request-context-Dg4jSwN1.mjs.map +0 -1
  112. package/dist/tasks-BZEiwgxA.mjs.map +0 -1
  113. package/dist/thread-handlers-Bef0td9N.d.mts.map +0 -1
  114. package/dist/tools-CEsv-WoO.mjs.map +0 -1
@@ -0,0 +1,185 @@
1
+ import { i as SurveyAssistantCapabilityManifest, r as AssistantElementTypeManifest } from "./capabilities-z95e1mti.mjs";
2
+ import { tt as JsonValue$1 } from "./index-DYHdvSE8.mjs";
3
+ import { Ct as SurveyDocumentVersion, St as SurveyDocumentSnapshot, f as SurveyAssistantTurnFinal, h as SurveyChangeSet, j as SurveyValidationIssue, k as SurveyOperation } from "./lifecycle-DFzxVxpq.mjs";
4
+ import { CompositionSurvey, Content, ContentOwner, ElementRegistry, ReadonlyResponseSlotDefinition, RuntimeElement, Survey, ValueType } from "@case-framework/survey-core";
5
+ //#region src/engine/capabilities.d.ts
6
+ interface AssistantCapabilityReference {
7
+ topic: string;
8
+ title?: string;
9
+ markdown: string;
10
+ }
11
+ interface AssistantElementInspection {
12
+ summary: string;
13
+ details?: JsonValue$1;
14
+ }
15
+ /** Authoring policy supplements the registry; it never supplies a substitute slot/ownership schema. */
16
+ interface AssistantElementCapabilityAdapter {
17
+ manifest: AssistantElementTypeManifest;
18
+ references?: AssistantCapabilityReference[];
19
+ materializePreset?: (presetId: string, locale: string, usedNames: ReadonlySet<string>) => {
20
+ element: RuntimeElement;
21
+ content?: Record<string, Record<string, Content>>;
22
+ };
23
+ /** Deterministic element diagnostics. New errors block edits; unchanged errors
24
+ * on the same element/type may remain during repair. Removed nodes are not
25
+ * validated. Use supportedOperations/supportsOperation to restrict mutations.
26
+ */
27
+ validateElement?: (element: RuntimeElement) => SurveyValidationIssue[];
28
+ supportsOperation?: (operation: SurveyOperation) => boolean;
29
+ /** Receives a node validated by inspectAssistantElement with the active trusted registry. */
30
+ inspectElement?: (element: RuntimeElement) => AssistantElementInspection;
31
+ }
32
+ interface SurveyAssistantCapabilitySet {
33
+ manifest: SurveyAssistantCapabilityManifest;
34
+ registry: ElementRegistry;
35
+ byElementType: ReadonlyMap<string, AssistantElementCapabilityAdapter>;
36
+ }
37
+ declare const resolveAssistantCapabilityReference: ({ capabilities, elementType, topic }: {
38
+ capabilities: SurveyAssistantCapabilitySet | undefined;
39
+ elementType: string;
40
+ topic: string;
41
+ }) => AssistantCapabilityReference | undefined;
42
+ declare const inspectAssistantElement: ({ capabilities, element }: {
43
+ capabilities: SurveyAssistantCapabilitySet | undefined;
44
+ element: RuntimeElement;
45
+ }) => AssistantElementInspection | undefined;
46
+ declare function createSurveyAssistantCapabilities(registry: ElementRegistry, capabilities: readonly AssistantElementCapabilityAdapter[]): SurveyAssistantCapabilitySet;
47
+ declare const getDeterministicCreateElementTypes: (manifest: SurveyAssistantCapabilityManifest) => string[];
48
+ declare const createUnsupportedElementCapability: ({ displayName, elementType }: {
49
+ displayName: string;
50
+ elementType: string;
51
+ }) => AssistantElementCapabilityAdapter;
52
+ declare class SurveyAssistantCapabilityMismatchError extends Error {
53
+ readonly code = "survey-assistant-capability-mismatch";
54
+ constructor(message?: string);
55
+ }
56
+ declare const assertSurveyAssistantCapabilities: ({ manifest, trustedCapabilities, versionDigest }: {
57
+ manifest: SurveyAssistantCapabilityManifest;
58
+ trustedCapabilities?: SurveyAssistantCapabilitySet;
59
+ versionDigest: string;
60
+ }) => void;
61
+ //#endregion
62
+ //#region src/engine/context.d.ts
63
+ type SurveyAssistantResponseSlotTypes = Record<string, ValueType | undefined>;
64
+ interface SurveyAssistantInspectionOutlineNode {
65
+ itemId: string;
66
+ parentId?: string;
67
+ depth: number;
68
+ itemType: string;
69
+ editorName: string;
70
+ breadcrumb: string;
71
+ itemLabel?: string;
72
+ childCount: number;
73
+ }
74
+ interface SurveyAssistantInspectionFocus {
75
+ focusItemId: string;
76
+ parentItemId?: string;
77
+ pathItemIds: string[];
78
+ siblingItemIds: string[];
79
+ childItemIds: string[];
80
+ }
81
+ interface SurveyAssistantInspectionItemNode {
82
+ itemId: string;
83
+ itemType: string;
84
+ editorName: string;
85
+ breadcrumb: string;
86
+ itemLabel?: string;
87
+ siblingNames: string[];
88
+ translations: Array<{
89
+ locale: string;
90
+ ownerId: string;
91
+ role: string;
92
+ text: string;
93
+ }>;
94
+ elements: Array<{
95
+ elementId: string;
96
+ elementType: string;
97
+ owners: ContentOwner[];
98
+ }>;
99
+ descendants: SurveyAssistantInspectionItemNode[];
100
+ }
101
+ interface SurveyAssistantInspectionItemEntry {
102
+ itemId: string;
103
+ itemType: string;
104
+ editorName: string;
105
+ breadcrumb: string;
106
+ itemLabel?: string;
107
+ path: string[];
108
+ }
109
+ /** Deterministic, request-local lookup data derived from the canonical document. */
110
+ interface SurveyAssistantInspectionIndex {
111
+ surveyKey?: string;
112
+ locales: string[];
113
+ /** All survey items except the structural root group. */
114
+ itemCount: number;
115
+ outline: SurveyAssistantInspectionOutlineNode[];
116
+ focus?: SurveyAssistantInspectionFocus;
117
+ focusItem?: SurveyAssistantInspectionItemNode;
118
+ itemIndex: SurveyAssistantInspectionItemEntry[];
119
+ responseSlots: string[];
120
+ focusItemTreeTruncated: boolean;
121
+ }
122
+ /** Request-local derived state built from one authoritative survey document. */
123
+ interface SurveyAssistantEngineContext {
124
+ document: SurveyDocumentSnapshot;
125
+ version: SurveyDocumentVersion;
126
+ survey: CompositionSurvey;
127
+ /** Exact trusted parsed revision; shared owners, slots and expression locations. */
128
+ model: Survey;
129
+ ui: SurveyDocumentSnapshot["ui"];
130
+ capabilities: SurveyAssistantCapabilityManifest;
131
+ responseSlotTypes: SurveyAssistantResponseSlotTypes;
132
+ responseVariables: readonly ReadonlyResponseSlotDefinition[];
133
+ inspection: SurveyAssistantInspectionIndex;
134
+ trustedCapabilities?: SurveyAssistantCapabilitySet;
135
+ }
136
+ interface CreateSurveyAssistantEngineContextOptions {
137
+ focusItemId?: string;
138
+ }
139
+ declare const deriveResponseSlotTypes: (survey: CompositionSurvey, trustedCapabilities?: SurveyAssistantCapabilitySet) => SurveyAssistantResponseSlotTypes;
140
+ declare const createSurveyAssistantEngineContext: (document: SurveyDocumentSnapshot, trustedCapabilities?: SurveyAssistantCapabilitySet, options?: CreateSurveyAssistantEngineContextOptions) => SurveyAssistantEngineContext;
141
+ //#endregion
142
+ //#region src/engine/mutation-recovery.d.ts
143
+ type RecoveryTargetRefinement = {
144
+ targets: string[];
145
+ replacement: string;
146
+ };
147
+ //#endregion
148
+ //#region src/engine/turn-survey-draft.d.ts
149
+ declare const mutationRecoveryRouteByIssueCode: {
150
+ readonly "expression-patch-requires-specialized-tool": "expression";
151
+ };
152
+ type SurveyAssistantMutationRoute = (typeof mutationRecoveryRouteByIssueCode)[keyof typeof mutationRecoveryRouteByIssueCode];
153
+ /**
154
+ * Request-scoped transactional draft for one assistant response.
155
+ *
156
+ * Mutation tools submit deltas. A successful delta replaces the previous
157
+ * candidate with a newly validated, cumulative change set. A rejected delta
158
+ * leaves the accepted draft intact and blocks authorization until all of its
159
+ * operation/surface obligations have been repaired. Only the latest cumulative
160
+ * candidate can be authorized.
161
+ */
162
+ declare class TurnSurveyDraft {
163
+ #private;
164
+ readonly turnId: string;
165
+ constructor(turnId?: string);
166
+ initialize(context: SurveyAssistantEngineContext): void;
167
+ stage({ addressedTargets, allowExpressionJsonPatches, handledMutationRoutes, retryOfChangeIds, operations, snapshot, summary }: {
168
+ addressedTargets?: string[];
169
+ allowExpressionJsonPatches?: boolean;
170
+ handledMutationRoutes?: SurveyAssistantMutationRoute[];
171
+ retryOfChangeIds?: string[];
172
+ operations: SurveyOperation[];
173
+ snapshot: SurveyAssistantEngineContext | SurveyDocumentSnapshot | undefined;
174
+ summary: string;
175
+ }): SurveyChangeSet;
176
+ reject(candidate: SurveyChangeSet, addressedTargets?: Iterable<string>, refinements?: RecoveryTargetRefinement[]): SurveyChangeSet;
177
+ finalize(status: SurveyAssistantTurnFinal["status"], createdAt?: string, details?: Pick<SurveyAssistantTurnFinal, "durationMs" | "startedAt" | "terminationReason">): SurveyAssistantTurnFinal;
178
+ getCandidate(changeSetId: string): SurveyChangeSet | undefined;
179
+ get draftOperations(): readonly SurveyOperation[];
180
+ get context(): SurveyAssistantEngineContext | undefined;
181
+ get final(): SurveyAssistantTurnFinal | null;
182
+ }
183
+ //#endregion
184
+ export { resolveAssistantCapabilityReference as C, inspectAssistantElement as S, SurveyAssistantCapabilitySet as _, SurveyAssistantInspectionFocus as a, createUnsupportedElementCapability as b, SurveyAssistantInspectionItemNode as c, createSurveyAssistantEngineContext as d, deriveResponseSlotTypes as f, SurveyAssistantCapabilityMismatchError as g, AssistantElementInspection as h, SurveyAssistantEngineContext as i, SurveyAssistantInspectionOutlineNode as l, AssistantElementCapabilityAdapter as m, TurnSurveyDraft as n, SurveyAssistantInspectionIndex as o, AssistantCapabilityReference as p, CreateSurveyAssistantEngineContextOptions as r, SurveyAssistantInspectionItemEntry as s, SurveyAssistantMutationRoute as t, SurveyAssistantResponseSlotTypes as u, assertSurveyAssistantCapabilities as v, getDeterministicCreateElementTypes as x, createSurveyAssistantCapabilities as y };
185
+ //# sourceMappingURL=turn-survey-draft-B34lggSG.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-survey-draft-B34lggSG.d.mts","names":[],"sources":["../src/engine/capabilities.ts","../src/engine/context.ts","../src/engine/mutation-recovery.ts","../src/engine/turn-survey-draft.ts"],"mappings":";;;;;UAWiB;EACf;EACA;EACA;;UAEe;EACf;EACA,UAAU;;;UAGK;EACf,UAAU;EACV,aAAa;EACb,qBACE,kBACA,gBACA,WAAW;IAEX,SAAS;IACT,UAAU,eAAe,eAAe;;;;;;EAM1C,mBAAmB,SAAS,mBAAmB;EAC/C,qBAAqB,WAAW;;EAEhC,kBAAkB,SAAS,mBAAmB;;UAE/B;EACf,UAAU;EACV,UAAU;EACV,eAAe,oBAAoB;;cAExB,wCAAuC,cAAA,aAAA;EAKlD,cAAc;EACd;EACA;MACD;cAIY,4BAA2B,cAAA;EAItC,cAAc;EACd,SAAS;MACP;iBAcY,kCACd,UAAU,iBACV,uBAAuB,sCACtB;cAkDU,qCAAsC,UAAU;cAIhD,uCAAsC,aAAA;EAIjD;EACA;MACE;cASS,+CAA+C;WACjD;EACG,YAAA;;cAKD,sCAAqC,UAAA,qBAAA;EAKhD,UAAU;EACV,sBAAsB;EACtB;;;;KC/IU,mCAAmC,eAAe;UAE7C;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;IAAQ;IAAgB;IAAiB;IAAc;;EACrE,UAAU;IAAQ;IAAmB;IAAqB,QAAQ;;EAClE,aAAa;;UAGE;EACf;EACA;EACA;EACA;EACA;EACA;;;UAIe;EACf;EACA;;EAEA;EACA,SAAS;EACT,QAAQ;EACR,YAAY;EACZ,WAAW;EACX;EACA;;;UAIe;EACf,UAAU;EACV,SAAS;EACT,QAAQ;;EAER,OAAO;EACP,IAAI;EACJ,cAAc;EACd,mBAAmB;EACnB,4BAA4B;EAC5B,YAAY;EACZ,sBAAsB;;UAGP;EACf;;cAMW,0BACX,QAAQ,mBACR,sBAAsB,iCACrB;cAmLU,qCACX,UAAU,wBACV,sBAAsB,8BACtB,UAAU,8CACT;;;KCiDS;EAA6B;EAAmB;;;;cCtNtD;WAAA;;KAIM,uCACF,+CAA+C;;;;;;;;;;cAiQ5C;;WACF;EAYG,YAAA;EAIZ,WAAW,SAAS;EAQpB,QACE,kBACA,4BACA,uBACA,kBACA,YACA,UACA;IAEA;IACA;IACA,wBAAwB;IACxB;IACA,YAAY;IACZ,UAAU,+BAA+B;IACzC;MACE;EAyPJ,OACE,WAAW,iBACX,mBAAkB,kBAClB,cAAa,6BACZ;EA8CH,SACE,QAAQ,oCACR,oBACA,UAAS,KAAK,8EACb;EAsBH,aAAa,sBAAsB;MAI/B,4BAA4B;MAI5B,WAAW;MAIX,SAAS"}
package/dist/ui.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { G as SurveyAssistantThread, n as SurveyAssistantModelOption } from "./index-D7wT6P3t.mjs";
2
- import { N as SurveyAssistantThreadClient, m as SurveyAssistantSupportBundleConfig, n as SurveyAssistantSessionOptions } from "./index-WB5kfnz0.mjs";
3
- import { f as SurveyAssistantThreadLauncher, u as SurveyAssistantLaunchUIContext } from "./controller-proxy-D7uQfm5f.mjs";
1
+ import { G as SurveyAssistantThread, n as SurveyAssistantModelOption } from "./index-DYHdvSE8.mjs";
2
+ import { N as SurveyAssistantThreadClient, m as SurveyAssistantSupportBundleConfig, n as SurveyAssistantSessionOptions } from "./index-B8TLBd1G.mjs";
3
+ import { f as SurveyAssistantThreadLauncher, u as SurveyAssistantLaunchUIContext } from "./controller-proxy-Cmzdr9tV.mjs";
4
4
  import { ChatStatus, FileUIPart } from "ai";
5
5
  import { ComponentProps, FormEvent, ReactNode, Ref } from "react";
6
6
  import { LocalizationCatalog, LocalizationMessages, LocalizationTranslate } from "@case-framework/ui-localization";
package/dist/ui.d.mts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.mts","names":[],"sources":["../src/ui/survey-assistant-panel.tsx","../src/ui/survey-assistant-thread-launcher-prompt.tsx","../src/ui/internal/prompt-input.tsx","../src/ui/survey-assistant-prompt-input.tsx","../src/ui/connected-survey-assistant-panel.tsx","../src/ui/localizations/en.ts","../src/ui/localizations/nl.ts","../src/ui/localization.tsx"],"mappings":";;;;;;;KA+wBY,4BAA4B,KACtC;EAGA;EACA;EACA,gBAAgB;EAChB;EACA,SAAS;EACT,yBAAyB,QAAQ,oCAAoC;EACrE,eAAe;EACf;EACA;EACA,gBAAgB;EAChB;EACA,eAAe;;EAEf,iBAAiB;;qBA61CN,yBAAwB,UAAA,kBAAA,SAIlC,8CAAyB,IAAA;;;UCjnEX;EACf;EACA;EACA;EACA,gBAAgB;EAChB;EACA;EACA,SAAS;EACT,qBAAqB,OAAO;EAC5B;EACA,eAAe;EACf;EACA;EACA,gBAAgB,KAAK;EACrB,cAAc,IAAI;EAClB,gBAAgB;EAChB,YAAY;EACZ;;qBAyEW,wCAAuC,UAAA,kBAAA,SAIjD,6DAAwC,IAAA;;;UCtC1B;EACf;EACA,OAAO;;KAqBG,mBAAmB,KAAK;EAClC;EACA,iBAAiB;EACjB,WACE,SAAS,oBACT,OAAO,UAAU,sCACG;EACtB;;;;UCNe;EACf;EACA;EACA;EACA;EACA;EACA,YAAY,KACV;EAGF;EACA;EACA,QAAQ;EACR,cAAc;EACd;EACA,UAAU;EACV,eAAe;EACf;EACA,SAAS;EACT;EACA,gBAAgB,KACd;EAGF,cAAc,IAAI;EAClB;;qBAGW,+BAA8B,qBAAA,2BAAA,WAAA,UAAA,iBAAA,WAAA,eAAA,SAAA,QAAA,eAAA,QAAA,UAAA,eAAA,aAAA,QAAA,mBAAA,eAAA,aAAA,SAoBxC,oDAA+B,IAAA;;;KC1I7B,mCAAmC,KACtC;KAIU,qCAAqC;EAC/C;EACA;EACA,qBAAqB,OAAO;EAC5B,eAAe;;qBAGJ,kCAAiC,iBAAA,iBAAA,qBAAA,kBAAA,SAM3C,uDAAkC,IAAA;;;qBCtBxB,2BAA2B;;;qBCA3B,2BAA2B;;;qBCa3B,qCAAqC;UAOjC;EACf,UAAU;EACV;EACA,gBAAgB;;qBAGL,wCAAuC,UAAA,UAAA,iBAIjD,6DAAwC,IAAA;qBAyB9B,qCAAoC"}
1
+ {"version":3,"file":"ui.d.mts","names":[],"sources":["../src/ui/survey-assistant-panel.tsx","../src/ui/survey-assistant-thread-launcher-prompt.tsx","../src/ui/internal/prompt-input.tsx","../src/ui/survey-assistant-prompt-input.tsx","../src/ui/connected-survey-assistant-panel.tsx","../src/ui/localizations/en.ts","../src/ui/localizations/nl.ts","../src/ui/localization.tsx"],"mappings":";;;;;;;KA+wBY,4BAA4B,KACtC;EAGA;EACA;EACA,gBAAgB;EAChB;EACA,SAAS;EACT,yBAAyB,QAAQ,oCAAoC;EACrE,eAAe;EACf;EACA;EACA,gBAAgB;EAChB;EACA,eAAe;;EAEf,iBAAiB;;qBA02CN,yBAAwB,UAAA,kBAAA,SAIlC,8CAAyB,IAAA;;;UC9nEX;EACf;EACA;EACA;EACA,gBAAgB;EAChB;EACA;EACA,SAAS;EACT,qBAAqB,OAAO;EAC5B;EACA,eAAe;EACf;EACA;EACA,gBAAgB,KAAK;EACrB,cAAc,IAAI;EAClB,gBAAgB;EAChB,YAAY;EACZ;;qBAyEW,wCAAuC,UAAA,kBAAA,SAIjD,6DAAwC,IAAA;;;UCtC1B;EACf;EACA,OAAO;;KAqBG,mBAAmB,KAAK;EAClC;EACA,iBAAiB;EACjB,WACE,SAAS,oBACT,OAAO,UAAU,sCACG;EACtB;;;;UCNe;EACf;EACA;EACA;EACA;EACA;EACA,YAAY,KACV;EAGF;EACA;EACA,QAAQ;EACR,cAAc;EACd;EACA,UAAU;EACV,eAAe;EACf;EACA,SAAS;EACT;EACA,gBAAgB,KACd;EAGF,cAAc,IAAI;EAClB;;qBAGW,+BAA8B,qBAAA,2BAAA,WAAA,UAAA,iBAAA,WAAA,eAAA,SAAA,QAAA,eAAA,QAAA,UAAA,eAAA,aAAA,QAAA,mBAAA,eAAA,aAAA,SAoBxC,oDAA+B,IAAA;;;KC1I7B,mCAAmC,KACtC;KAIU,qCAAqC;EAC/C;EACA;EACA,qBAAqB,OAAO;EAC5B,eAAe;;qBAGJ,kCAAiC,iBAAA,iBAAA,qBAAA,kBAAA,SAM3C,uDAAkC,IAAA;;;qBCtBxB,2BAA2B;;;qBCA3B,2BAA2B;;;qBCa3B,qCAAqC;UAOjC;EACf,UAAU;EACV;EACA,gBAAgB;;qBAGL,wCAAuC,UAAA,UAAA,iBAIjD,6DAAwC,IAAA;qBAyB9B,qCAAoC"}
package/dist/ui.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { Ft as isSurveyAssistantErrorRetryable, It as parseSurveyAssistantError, Vt as getSurveyAssistantEmbeddedBinaryMarker, l as surveyAssistantTurnFinalSchema, n as SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE } from "./protocol-CF4Bh_Ch.mjs";
2
+ import { J as isSurveyAssistantErrorRetryable, Y as parseSurveyAssistantError, et as getSurveyAssistantEmbeddedBinaryMarker, l as surveyAssistantTurnFinalSchema, n as SURVEY_ASSISTANT_TURN_FINAL_PART_TYPE } from "./protocol-BQ7uIDYT.mjs";
3
3
  import { n as isSurveyAssistantAttachmentMediaType, t as SURVEY_ASSISTANT_ATTACHMENT_MEDIA_TYPES } from "./attachments-BuNni5vB.mjs";
4
- import { E as isSurveyAssistantTurnActive, S as parseSurveyChangeSet, T as unwrapSurveyAssistantToolOutput, _ as createSurveyAssistantThreadClient, a as createSurveyAssistantSupportDetails, c as estimateSurveyAssistantSupportBundleBytes, d as prepareSurveyAssistantSupportBundle, i as SURVEY_ASSISTANT_DEFAULT_SUPPORT_BUNDLE_SELECTION, l as generateSurveyAssistantSupportBundle, m as createSurveyAssistantDiagnosticStore, o as createSurveyAssistantSupportMailto, r as useSurveyAssistantModelCatalog, s as downloadSurveyAssistantSupportBundle, t as useSurveyAssistantSession, u as isSurveyAssistantSupportBundleEnabled } from "./react-C_GY-Fsc.mjs";
5
- import { a as connectSurveyAssistantThreadLauncher } from "./controller-proxy-DEeFl9IA.mjs";
4
+ import { E as isSurveyAssistantTurnActive, S as parseSurveyChangeSet, T as unwrapSurveyAssistantToolOutput, _ as createSurveyAssistantThreadClient, a as createSurveyAssistantSupportDetails, c as estimateSurveyAssistantSupportBundleBytes, d as prepareSurveyAssistantSupportBundle, i as SURVEY_ASSISTANT_DEFAULT_SUPPORT_BUNDLE_SELECTION, l as generateSurveyAssistantSupportBundle, m as createSurveyAssistantDiagnosticStore, o as createSurveyAssistantSupportMailto, r as useSurveyAssistantModelCatalog, s as downloadSurveyAssistantSupportBundle, t as useSurveyAssistantSession, u as isSurveyAssistantSupportBundleEnabled } from "./react-DybJ5pWw.mjs";
5
+ import { a as connectSurveyAssistantThreadLauncher } from "./controller-proxy-BQ1YsVxJ.mjs";
6
6
  import { getToolName, isFileUIPart, isReasoningUIPart, isToolUIPart } from "ai";
7
7
  import { createContext, createElement, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
8
8
  import { Collapsible } from "@base-ui/react/collapsible";
@@ -786,7 +786,7 @@ ChainOfThoughtContent.displayName = "ChainOfThoughtContent";
786
786
  ChainOfThoughtStep.displayName = "ChainOfThoughtStep";
787
787
  //#endregion
788
788
  //#region src/ui/internal/button.tsx
789
- const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
789
+ const buttonVariants = cva("inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
790
790
  variants: {
791
791
  variant: {
792
792
  default: "bg-primary text-primary-foreground hover:bg-primary/90",
@@ -1216,7 +1216,7 @@ function SelectTrigger({ className, size = "default", children, ...props }) {
1216
1216
  return /* @__PURE__ */ jsxs(Select.Trigger, {
1217
1217
  "data-slot": "select-trigger",
1218
1218
  "data-size": size,
1219
- className: cn("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className),
1219
+ className: cn("flex w-fit cursor-pointer items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className),
1220
1220
  ...props,
1221
1221
  children: [children, /* @__PURE__ */ jsx(Select.Icon, { render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })]
1222
1222
  });
@@ -1248,7 +1248,7 @@ function SelectContent({ className, children, side = "bottom", sideOffset = 4, a
1248
1248
  function SelectItem({ className, children, ...props }) {
1249
1249
  return /* @__PURE__ */ jsxs(Select.Item, {
1250
1250
  "data-slot": "select-item",
1251
- className: cn("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
1251
+ className: cn("relative flex w-full cursor-pointer items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
1252
1252
  ...props,
1253
1253
  children: [/* @__PURE__ */ jsx(Select.ItemText, {
1254
1254
  className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap",
@@ -1633,7 +1633,7 @@ const getAssistantErrorPresentation = ({ authorizationError, error, t }) => {
1633
1633
  //#endregion
1634
1634
  //#region src/ui/internal/checkbox.tsx
1635
1635
  const Checkbox$1 = ({ className, ...props }) => /* @__PURE__ */ jsx(Checkbox.Root, {
1636
- className: cn("relative flex size-4 shrink-0 items-center justify-center rounded border border-input outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground", className),
1636
+ className: cn("relative flex size-4 shrink-0 cursor-pointer items-center justify-center rounded border border-input outline-none transition-colors focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground", className),
1637
1637
  ...props,
1638
1638
  children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
1639
1639
  className: "grid place-content-center text-current",
@@ -2417,7 +2417,7 @@ const SurveyAssistantHeaderIdentity = ({ indicatorClassName, status, title }) =>
2417
2417
  })]
2418
2418
  })]
2419
2419
  });
2420
- const SurveyAssistantChatPanel = ({ api, applyPolicy, controller, diagnosticStore, embedded = false, focusPromptOnMount = false, hasEarlierMessages, initialLaunch, initialMessages, modelId, models, onInitialLaunchHandled, onModelChange, onFirstSubmit, onExportDetails, onLoadEarlierMessages, onTurnSettled, onApplyReceipts, onSettleApply, onReviewChangeSets, onTurnActiveChange, resourceId, surveyId, threadControls, threadId, threadTitle }) => {
2420
+ const SurveyAssistantChatPanel = ({ api, applyPolicy, controller, diagnosticStore, embedded = false, focusPromptOnMount = false, hasEarlierMessages, initialLaunch, initialMessages, modelId, models, onInitialLaunchHandled, onModelChange, onFirstSubmit, onExportDetails, onLoadEarlierMessages, onTurnSettled, onApplyReceipts, onSettleApply, onReviewChangeSets, onTurnActiveChange, resourceId, surveyId, threadControls, threadId, threadTitle, threadTask }) => {
2421
2421
  const t = useSurveyAssistantTranslation();
2422
2422
  const emptyStateContext = getAssistantEmptyStateContext(controller);
2423
2423
  const assistantQuickPrompts = getAssistantQuickPrompts(t, emptyStateContext);
@@ -2434,7 +2434,8 @@ const SurveyAssistantChatPanel = ({ api, applyPolicy, controller, diagnosticStor
2434
2434
  onTurnActiveChange,
2435
2435
  resourceId,
2436
2436
  surveyId,
2437
- threadId
2437
+ threadId,
2438
+ threadTask
2438
2439
  });
2439
2440
  const hasSubmittedMessageRef = useRef((initialMessages?.length ?? 0) > 0);
2440
2441
  const showAssistantError = Boolean(authorizationError) || Boolean(error);
@@ -2532,19 +2533,26 @@ const SurveyAssistantChatPanel = ({ api, applyPolicy, controller, diagnosticStor
2532
2533
  }), [handleSubmit]);
2533
2534
  useEffect(() => {
2534
2535
  if (!initialLaunch) return;
2535
- if (initialLaunch.modelId) onModelChange(initialLaunch.modelId);
2536
- if (submit({
2537
- files: initialLaunch.files ?? [],
2538
- modelId: initialLaunch.modelId,
2539
- text: initialLaunch.prompt,
2540
- uiContext: initialLaunch.uiContext
2541
- })) {
2542
- if (!hasSubmittedMessageRef.current) {
2543
- hasSubmittedMessageRef.current = true;
2544
- onFirstSubmit(initialLaunch.prompt);
2536
+ let cancelled = false;
2537
+ queueMicrotask(() => {
2538
+ if (cancelled) return;
2539
+ if (initialLaunch.modelId) onModelChange(initialLaunch.modelId);
2540
+ if (submit({
2541
+ files: initialLaunch.files ?? [],
2542
+ modelId: initialLaunch.modelId,
2543
+ text: initialLaunch.prompt,
2544
+ uiContext: initialLaunch.uiContext
2545
+ })) {
2546
+ if (!hasSubmittedMessageRef.current) {
2547
+ hasSubmittedMessageRef.current = true;
2548
+ onFirstSubmit(initialLaunch.prompt);
2549
+ }
2550
+ onInitialLaunchHandled();
2545
2551
  }
2546
- onInitialLaunchHandled();
2547
- }
2552
+ });
2553
+ return () => {
2554
+ cancelled = true;
2555
+ };
2548
2556
  }, [
2549
2557
  initialLaunch,
2550
2558
  onFirstSubmit,
@@ -2828,7 +2836,7 @@ const SurveyAssistantPanelContent = ({ embedded = false, modelId, models = [], o
2828
2836
  setLoadingThread(true);
2829
2837
  setThreadError(null);
2830
2838
  try {
2831
- const thread = await threadClient.create(launch?.title);
2839
+ const thread = await threadClient.create(launch?.title, launch?.uiContext?.task);
2832
2840
  setPromptFocusThreadId(launch ? void 0 : thread.id);
2833
2841
  setThreads((current) => mergeThreads(current, [thread]));
2834
2842
  setSelectedThread(thread);
@@ -3122,7 +3130,10 @@ const SurveyAssistantPanelContent = ({ embedded = false, modelId, models = [], o
3122
3130
  const current = page.threads.find((thread) => thread.id === selectedThread?.id);
3123
3131
  if (current && !editingThreadId) setSelectedThread((selected) => {
3124
3132
  if (!selected || selected.id !== current.id) return selected;
3125
- return selected.title === current.title && selected.titleMode === current.titleMode && selected.updatedAt === current.updatedAt ? selected : current;
3133
+ return selected.title === current.title && selected.titleMode === current.titleMode && selected.updatedAt === current.updatedAt ? selected : {
3134
+ ...selected,
3135
+ ...current
3136
+ };
3126
3137
  });
3127
3138
  } catch (error) {
3128
3139
  if (reportError) setThreadError(parseSurveyAssistantError(error).detail ?? t("errors.fallbackDetail"));
@@ -3375,6 +3386,7 @@ const SurveyAssistantPanelContent = ({ embedded = false, modelId, models = [], o
3375
3386
  hasEarlierMessages: Boolean(nextMessageCursor),
3376
3387
  initialLaunch: initialLaunch?.input,
3377
3388
  initialMessages,
3389
+ threadTask: selectedThread.task,
3378
3390
  key: selectedThread.id,
3379
3391
  modelId,
3380
3392
  models,