@jskit-ai/assistant-core 0.2.7 → 0.2.8

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 (214) hide show
  1. package/examples/conversation/package.json +5 -5
  2. package/package.json +18 -7
  3. package/src/client/browser.js +21 -0
  4. package/src/client/conversation/AssistantAttachmentQueue.vue +25 -108
  5. package/src/client/conversation/AssistantComposerActions.vue +1 -1
  6. package/src/client/conversation/AssistantConversationElement.vue +14 -52
  7. package/src/client/conversation/AssistantGoalControl.vue +13 -10
  8. package/src/client/conversation/AssistantPromptInput.vue +6 -91
  9. package/src/client/conversation/AssistantTranscript.css +505 -0
  10. package/src/client/conversation/AssistantTranscript.vue +24 -1197
  11. package/src/client/conversation/attachmentFiles.js +158 -0
  12. package/src/client/conversation/attachmentQueueItems.js +121 -0
  13. package/src/client/conversation/attachmentUploadRows.js +265 -0
  14. package/src/client/conversation/conversationDisplay.js +54 -0
  15. package/src/client/conversation/messageDelivery.js +13 -9
  16. package/src/client/conversation/retainedConversation.js +14 -3
  17. package/src/client/conversation/submitText.js +13 -2
  18. package/src/client/conversation/transcriptEntries.js +225 -0
  19. package/src/client/conversation/useAssistantAttachments.js +86 -388
  20. package/src/client/conversation/useAssistantQuestions.js +16 -3
  21. package/src/client/conversation/useAssistantSuggestions.js +16 -2
  22. package/src/client/conversation/useScrollToBottom.js +17 -19
  23. package/src/client/conversation/useTextareaAutoGrow.js +115 -0
  24. package/src/client/conversation/useTranscriptScrollFollow.js +525 -0
  25. package/src/client/lib/assistantApi.js +192 -161
  26. package/src/client/types.js +110 -0
  27. package/src/server/conversation/attachments.js +21 -6
  28. package/src/server/conversation/boundedToolLoop.js +1 -0
  29. package/src/server/conversation/claudeClient.js +71 -20
  30. package/src/server/conversation/claudeCommandRun.js +191 -0
  31. package/src/server/conversation/claudeHistory.js +7 -0
  32. package/src/server/conversation/claudeNativeTurn.js +708 -0
  33. package/src/server/conversation/claudeProcess.js +186 -112
  34. package/src/server/conversation/claudeProcessStart.js +214 -0
  35. package/src/server/conversation/claudePromptDelivery.js +183 -0
  36. package/src/server/conversation/claudeSessionCleanup.js +248 -0
  37. package/src/server/conversation/claudeTools.js +15 -3
  38. package/src/server/conversation/claudeTurn.js +212 -1388
  39. package/src/server/conversation/codexAccountReader.js +168 -0
  40. package/src/server/conversation/codexAuthPreflight.js +5 -4
  41. package/src/server/conversation/codexClient.js +18 -6
  42. package/src/server/conversation/codexConfiguration.js +8 -844
  43. package/src/server/conversation/codexConversationStops.js +377 -0
  44. package/src/server/conversation/codexConversationStore.js +119 -85
  45. package/src/server/conversation/codexConversationTurns.js +378 -0
  46. package/src/server/conversation/codexConversations.js +134 -866
  47. package/src/server/conversation/codexDetachedConversation.js +203 -0
  48. package/src/server/conversation/codexDetachedTurn.js +145 -104
  49. package/src/server/conversation/codexEvents.js +5 -200
  50. package/src/server/conversation/codexGoalCommands.js +14 -4
  51. package/src/server/conversation/codexHelperExecution.js +57 -57
  52. package/src/server/conversation/codexHelperThreadLedger.js +30 -288
  53. package/src/server/conversation/codexHelperThreadRecord.js +304 -0
  54. package/src/server/conversation/codexHelperThreadRecovery.js +54 -76
  55. package/src/server/conversation/codexHelperThreads.js +94 -93
  56. package/src/server/conversation/codexHistoryAdapter.js +13 -8
  57. package/src/server/conversation/codexIsolation.js +672 -0
  58. package/src/server/conversation/codexLiveItems.js +379 -0
  59. package/src/server/conversation/codexMessageCommands.js +68 -286
  60. package/src/server/conversation/codexMessageDelivery.js +46 -37
  61. package/src/server/conversation/codexModelCatalog.js +86 -7
  62. package/src/server/conversation/codexNotificationObserver.js +81 -88
  63. package/src/server/conversation/codexNotificationQueue.js +21 -10
  64. package/src/server/conversation/codexObservationControl.js +105 -89
  65. package/src/server/conversation/codexOutput.js +84 -419
  66. package/src/server/conversation/codexProcess.js +29 -1053
  67. package/src/server/conversation/codexProcessLeader.js +1 -0
  68. package/src/server/conversation/codexPromptDispatch.js +241 -0
  69. package/src/server/conversation/codexProvider.js +147 -1807
  70. package/src/server/conversation/codexProviderAuth.js +348 -0
  71. package/src/server/conversation/codexProviderInvalidation.js +371 -0
  72. package/src/server/conversation/codexProviderInventories.js +437 -0
  73. package/src/server/conversation/codexProviderOwner.js +149 -957
  74. package/src/server/conversation/codexProviderRelease.js +465 -0
  75. package/src/server/conversation/codexProviderSelection.js +26 -15
  76. package/src/server/conversation/codexProviderThreads.js +698 -0
  77. package/src/server/conversation/codexProviderTurns.js +453 -0
  78. package/src/server/conversation/codexReasoning.js +32 -23
  79. package/src/server/conversation/codexRenewalCommands.js +18 -6
  80. package/src/server/conversation/codexRenewalThreads.js +7 -22
  81. package/src/server/conversation/codexResultSettlement.js +70 -88
  82. package/src/server/conversation/codexRunJournal.js +91 -97
  83. package/src/server/conversation/codexRuntime.js +426 -0
  84. package/src/server/conversation/codexRuntimeInventory.js +113 -0
  85. package/src/server/conversation/codexRuntimeLifecycle.js +39 -13
  86. package/src/server/conversation/codexRuntimeStart.js +431 -0
  87. package/src/server/conversation/codexRuntimeStop.js +324 -0
  88. package/src/server/conversation/codexSessionCleanup.js +25 -10
  89. package/src/server/conversation/codexSessionReconciliation.js +21 -7
  90. package/src/server/conversation/codexThreadReadiness.js +49 -52
  91. package/src/server/conversation/codexThreadSnapshot.js +210 -0
  92. package/src/server/conversation/codexThreadStatus.js +48 -62
  93. package/src/server/conversation/codexTurn.js +171 -55
  94. package/src/server/conversation/codexTurnActivity.js +210 -0
  95. package/src/server/conversation/codexTurnControl.js +44 -48
  96. package/src/server/conversation/codexTurnEndings.js +610 -0
  97. package/src/server/conversation/codexTurnRecovery.js +97 -848
  98. package/src/server/conversation/codexTurnState.js +138 -111
  99. package/src/server/conversation/completedResponses.js +227 -0
  100. package/src/server/conversation/configuration.js +2 -2
  101. package/src/server/conversation/continuity.js +43 -6
  102. package/src/server/conversation/conversationDelivery.js +394 -0
  103. package/src/server/conversation/conversationEntries.js +365 -0
  104. package/src/server/conversation/conversationEvents.js +192 -0
  105. package/src/server/conversation/conversationGoals.js +187 -0
  106. package/src/server/conversation/conversationHandles.js +237 -0
  107. package/src/server/conversation/conversationReads.js +206 -0
  108. package/src/server/conversation/conversationRefusals.js +58 -0
  109. package/src/server/conversation/conversationReplacement.js +254 -0
  110. package/src/server/conversation/conversationSending.js +273 -0
  111. package/src/server/conversation/conversationStopping.js +121 -0
  112. package/src/server/conversation/conversationTurnDelivery.js +413 -0
  113. package/src/server/conversation/conversationTurns.js +511 -0
  114. package/src/server/conversation/deliveryTiming.js +25 -3
  115. package/src/server/conversation/fileStorage.js +11 -6
  116. package/src/server/conversation/hookBridge.js +14 -3
  117. package/src/server/conversation/index.js +1 -1
  118. package/src/server/conversation/localExecution.js +82 -625
  119. package/src/server/conversation/nativeCommandCallbacks.js +10 -0
  120. package/src/server/conversation/nativeConversationLifecycle.js +379 -0
  121. package/src/server/conversation/nativeHistoryExport.js +27 -18
  122. package/src/server/conversation/normalize.js +9 -0
  123. package/src/server/conversation/openCodeClient.js +295 -366
  124. package/src/server/conversation/openCodeNativeHistory.js +141 -0
  125. package/src/server/conversation/openCodeNativeSession.js +79 -0
  126. package/src/server/conversation/openCodeProcess.js +109 -53
  127. package/src/server/conversation/openCodeProcessOwner.js +565 -0
  128. package/src/server/conversation/openCodeRuntime.js +111 -1814
  129. package/src/server/conversation/openCodeSessionTurns.js +547 -0
  130. package/src/server/conversation/openCodeTemporaryConversations.js +394 -0
  131. package/src/server/conversation/openCodeTools.js +28 -14
  132. package/src/server/conversation/openCodeTurn.js +80 -74
  133. package/src/server/conversation/openCodeTurnMonitor.js +388 -0
  134. package/src/server/conversation/processIdentity.js +582 -0
  135. package/src/server/conversation/provider.js +21 -6
  136. package/src/server/conversation/providers/api.js +268 -107
  137. package/src/server/conversation/providers/claude.js +29 -6
  138. package/src/server/conversation/providers/claudeDriver.js +325 -250
  139. package/src/server/conversation/providers/codex.js +69 -33
  140. package/src/server/conversation/providers/codexDriver.js +503 -1081
  141. package/src/server/conversation/providers/codexDriverConnection.js +331 -0
  142. package/src/server/conversation/providers/codexDriverTurns.js +464 -0
  143. package/src/server/conversation/providers/opencode.js +30 -4
  144. package/src/server/conversation/providers/opencodeDriver.js +321 -659
  145. package/src/server/conversation/providers/opencodeStandalone.js +475 -0
  146. package/src/server/conversation/providers/scoped.js +64 -19
  147. package/src/server/conversation/runtime.js +171 -2863
  148. package/src/server/conversation/storage.js +91 -50
  149. package/src/server/conversation/streams.js +15 -2
  150. package/src/server/conversation/structuredOutput.js +7 -11
  151. package/src/server/conversation/systemPrompt.js +13 -1
  152. package/src/server/conversation/tools.js +47 -15
  153. package/src/server/conversation/transcript.js +49 -20
  154. package/src/server/hosts/claudeTurn.js +2 -4
  155. package/src/server/hosts/codexConfiguration.js +6 -8
  156. package/src/server/hosts/codexEvents.js +4 -2
  157. package/src/server/hosts/codexProcess.js +1 -1
  158. package/src/server/hosts/codexProvider.js +11 -9
  159. package/src/server/hosts/codexTurn.js +3 -3
  160. package/src/server/hosts/openCodeClient.js +4 -2
  161. package/src/server/index.js +0 -2
  162. package/src/server/lib/aiConnectionClient.js +35 -25
  163. package/src/server/lib/ndjson.js +1 -0
  164. package/src/server/lib/providers/anthropicClient.js +15 -6
  165. package/src/server/lib/providers/common.js +10 -6
  166. package/src/server/lib/providers/openAiCompatibleClient.js +40 -23
  167. package/src/server/lib/serviceToolCatalog.js +29 -283
  168. package/src/server/lib/serviceToolEntries.js +270 -0
  169. package/src/server/types.js +78 -0
  170. package/src/shared/assistantResource.js +0 -23
  171. package/src/shared/conversation/answerChoiceSugar.js +2 -14
  172. package/src/shared/conversation/messageInputSugar.js +18 -0
  173. package/src/shared/conversation/numberedQuestionSugar.js +6 -16
  174. package/src/shared/conversation/pagination.js +1 -1
  175. package/src/shared/conversation/questions.js +1 -0
  176. package/src/shared/conversation/streaming.js +1 -0
  177. package/src/shared/index.js +0 -1
  178. package/src/testing/conversationStorageContract.js +20 -0
  179. package/test/aiConnectionClient.test.js +42 -1
  180. package/test/apiConversationDriver.test.js +217 -38
  181. package/test/assistantBoundedToolLoop.test.js +1 -1
  182. package/test/claudeConversationSession.test.js +15 -11
  183. package/test/claudeInstructionResume.test.js +1 -1
  184. package/test/claudeProcess.test.js +9 -9
  185. package/test/claudeTurn.test.js +21 -8
  186. package/test/codexAccountChange.test.js +5 -3
  187. package/test/codexConversationSession.test.js +22 -21
  188. package/test/codexEvents.test.js +3 -1
  189. package/test/codexHelperDeletion.test.js +3 -7
  190. package/test/codexIsolation.test.js +6 -6
  191. package/test/codexModelCatalog.test.js +6 -7
  192. package/test/codexProcess.test.js +3 -3
  193. package/test/codexThreadSelection.test.js +4 -1
  194. package/test/codexTurn.test.js +29 -20
  195. package/test/conversationApiFacilities.test.js +11 -9
  196. package/test/conversationAttachments.test.js +3 -3
  197. package/test/conversationConfiguration.test.js +4 -4
  198. package/test/conversationNativeStorage.test.js +11 -10
  199. package/test/conversationReplacement.test.js +13 -13
  200. package/test/conversationRuntime.test.js +9 -5
  201. package/test/conversationSession.test.js +78 -22
  202. package/test/conversationTools.test.js +47 -26
  203. package/test/fileConversationStorage.test.js +10 -3
  204. package/test/fixtures/codexHelperThreadLedger.js +3 -3
  205. package/test/frameworkActions.test.js +33 -18
  206. package/test/localConversationExecution.test.js +4 -4
  207. package/test/localExecution.test.js +1 -1
  208. package/test/openCodeConnectionChange.test.js +3 -2
  209. package/test/openCodeRuntime.test.js +8 -7
  210. package/test/openCodeTools.test.js +1 -1
  211. package/test/opencodeConversationSession.test.js +4 -3
  212. package/test/serviceToolCatalog.test.js +3 -8
  213. package/src/server/lib/assistantCompletion.js +0 -190
  214. package/src/server/lib/assistantToolLoop.js +0 -259
@@ -0,0 +1,505 @@
1
+ .assistant-transcript__plain-user { white-space: pre-wrap; margin: 0; }
2
+ .assistant-transcript {
3
+ border: 1px solid rgba(var(--v-theme-outline), 0.24);
4
+ border-radius: 8px;
5
+ display: grid;
6
+ gap: 0.35rem;
7
+ grid-template-rows: minmax(0, 1fr);
8
+ min-height: 0;
9
+ overflow: hidden;
10
+ padding: 0.5rem;
11
+ position: relative;
12
+ text-align: left;
13
+ }
14
+
15
+ .assistant-transcript__loading-skeleton {
16
+ inset: 0;
17
+ overflow: hidden;
18
+ position: absolute;
19
+ z-index: 1;
20
+ }
21
+
22
+ .assistant-transcript--error {
23
+ grid-template-rows: max-content minmax(0, 1fr);
24
+ min-height: min-content;
25
+ }
26
+
27
+ .assistant-transcript--error .assistant-transcript__body {
28
+ contain: size;
29
+ }
30
+
31
+ .assistant-transcript__error {
32
+ position: relative;
33
+ z-index: 4;
34
+ background: rgb(var(--v-theme-surface));
35
+ padding: 0.25rem 0.5rem;
36
+ font-size: 0.85rem;
37
+ min-width: 0;
38
+ overflow-wrap: anywhere;
39
+ }
40
+
41
+ .assistant-transcript__error-content {
42
+ align-items: center;
43
+ display: flex;
44
+ gap: 0.5rem;
45
+ }
46
+
47
+ .assistant-transcript__error-content > span {
48
+ flex: 1 1 auto;
49
+ min-width: 0;
50
+ }
51
+
52
+ .assistant-transcript__error-content > .v-btn {
53
+ flex: 0 0 auto;
54
+ }
55
+
56
+ .assistant-transcript__settling {
57
+ background: rgb(var(--v-theme-surface));
58
+ inset: 0;
59
+ overflow: hidden;
60
+ padding: 0.5rem;
61
+ position: absolute;
62
+ z-index: 1;
63
+ }
64
+
65
+ .assistant-transcript__settling-skeleton {
66
+ height: 100%;
67
+ }
68
+
69
+ .assistant-transcript__reload {
70
+ color: rgba(var(--v-theme-on-surface), 0.66);
71
+ position: absolute;
72
+ right: 0.38rem;
73
+ top: 0.38rem;
74
+ z-index: 2;
75
+ }
76
+
77
+ .assistant-transcript__body {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 0.65rem;
81
+ min-height: 0;
82
+ min-width: 0;
83
+ overflow-x: hidden;
84
+ overflow-y: auto;
85
+ padding-right: 0.15rem;
86
+ }
87
+
88
+ .assistant-transcript__welcome {
89
+ background: rgba(var(--v-theme-primary), 0.08);
90
+ border: 1px solid rgba(var(--v-theme-primary), 0.18);
91
+ border-radius: 16px;
92
+ color: rgb(var(--v-theme-on-surface));
93
+ display: grid;
94
+ flex: 0 0 auto;
95
+ gap: 0.55rem;
96
+ margin: 0.1rem 0.15rem 0;
97
+ padding: 0.8rem 0.9rem 0.9rem;
98
+ }
99
+
100
+ .assistant-transcript__welcome p {
101
+ line-height: 1.48;
102
+ margin: 0;
103
+ }
104
+
105
+ .assistant-transcript__body--settling {
106
+ visibility: hidden;
107
+ }
108
+
109
+ .assistant-transcript__load-more {
110
+ align-items: center;
111
+ display: flex;
112
+ flex: 0 0 auto;
113
+ flex-direction: column;
114
+ gap: 0.35rem;
115
+ padding: 0.35rem 0 0.55rem;
116
+ }
117
+
118
+ .assistant-transcript__load-more-error {
119
+ color: rgb(var(--v-theme-error));
120
+ font-size: 0.76rem;
121
+ line-height: 1.3;
122
+ text-align: center;
123
+ }
124
+
125
+ .assistant-transcript__load-more + .assistant-transcript__turn,
126
+ .assistant-transcript__body > .assistant-transcript__turn:first-child {
127
+ margin-top: auto;
128
+ }
129
+
130
+ .assistant-transcript__turn {
131
+ contain-intrinsic-block-size: auto 12rem;
132
+ content-visibility: auto;
133
+ display: flex;
134
+ flex: 0 0 auto;
135
+ flex-direction: column;
136
+ gap: 0.65rem;
137
+ min-height: 0;
138
+ min-width: 0;
139
+ }
140
+
141
+ .assistant-transcript--retained .assistant-transcript__turn {
142
+ /* Late offscreen height estimates cannot move a restored reader anchor. */
143
+ content-visibility: visible;
144
+ }
145
+
146
+ .assistant-transcript__message-row {
147
+ align-items: start;
148
+ display: grid;
149
+ gap: 0.65rem;
150
+ max-width: 100%;
151
+ min-width: 0;
152
+ overflow-x: hidden;
153
+ }
154
+
155
+ .assistant-transcript__message-row--user {
156
+ grid-template-columns: minmax(0, auto) auto;
157
+ justify-self: end;
158
+ max-width: min(28rem, 88%);
159
+ margin-left: auto;
160
+ }
161
+
162
+ .assistant-transcript__message-row--assistant {
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: 0.28rem;
166
+ justify-self: start;
167
+ max-width: min(52rem, 94%);
168
+ margin-right: auto;
169
+ }
170
+
171
+ .assistant-transcript__assistant-header {
172
+ align-items: center;
173
+ display: grid;
174
+ gap: 0.65rem;
175
+ grid-template-columns: auto minmax(0, 1fr);
176
+ min-width: 0;
177
+ }
178
+
179
+ .assistant-transcript__message {
180
+ display: flex;
181
+ flex-direction: column;
182
+ gap: 0.24rem;
183
+ max-width: 100%;
184
+ min-width: 0;
185
+ overflow-wrap: anywhere;
186
+ word-break: break-word;
187
+ }
188
+
189
+ .assistant-transcript__avatar {
190
+ align-items: center;
191
+ border-radius: 999px;
192
+ display: inline-flex;
193
+ height: 1.5rem;
194
+ justify-content: center;
195
+ width: 1.5rem;
196
+ }
197
+
198
+ .assistant-transcript__avatar--user {
199
+ background: rgba(var(--v-theme-primary), 0.1);
200
+ color: rgb(var(--v-theme-primary));
201
+ margin-top: 0.2rem;
202
+ }
203
+
204
+ .assistant-transcript__avatar--assistant {
205
+ background: rgb(var(--v-theme-primary));
206
+ color: rgb(var(--v-theme-on-primary));
207
+ margin-top: 0.05rem;
208
+ }
209
+
210
+ .assistant-transcript__message--user {
211
+ background: rgba(var(--v-theme-primary), 0.1);
212
+ border-radius: 16px;
213
+ color: rgb(var(--v-theme-on-surface));
214
+ gap: 0.75rem;
215
+ justify-content: space-between;
216
+ overflow-x: auto;
217
+ padding: 0.75rem 1rem 0.72rem;
218
+ width: fit-content;
219
+ }
220
+
221
+ .assistant-transcript__message--user.assistant-transcript__message--pending {
222
+ background: rgba(var(--v-theme-on-surface), 0.04);
223
+ outline: 1px dashed rgba(var(--v-theme-on-surface), 0.4);
224
+ outline-offset: -1px;
225
+ }
226
+
227
+ .assistant-transcript__message--pending .assistant-transcript__message-footer {
228
+ color: rgba(var(--v-theme-on-surface), 0.7);
229
+ }
230
+
231
+ .assistant-transcript__message--user.assistant-transcript__message--failed {
232
+ outline: 1px solid rgb(var(--v-theme-error));
233
+ outline-offset: -1px;
234
+ }
235
+
236
+ .assistant-transcript__message--assistant {
237
+ background: rgb(var(--v-theme-surface));
238
+ color: rgb(var(--v-theme-on-surface));
239
+ padding: 0;
240
+ }
241
+
242
+ .assistant-transcript--task {
243
+ border-color: rgba(126, 87, 194, 0.32);
244
+ }
245
+
246
+ .assistant-transcript--task .assistant-transcript__avatar--assistant {
247
+ background: #7e57c2;
248
+ }
249
+
250
+ .assistant-transcript--task .assistant-transcript__message--user {
251
+ background: #eee8f8;
252
+ color: #2d2440;
253
+ }
254
+
255
+ .assistant-transcript__thinking {
256
+ justify-self: start;
257
+ margin-left: 2.15rem;
258
+ max-width: min(34rem, 86%);
259
+ }
260
+
261
+ .assistant-transcript__user-content-toggle {
262
+ background: transparent;
263
+ border: 0;
264
+ color: rgb(var(--v-theme-primary));
265
+ cursor: pointer;
266
+ font: inherit;
267
+ text-align: left;
268
+ }
269
+
270
+ .assistant-transcript__system {
271
+ align-items: start;
272
+ background: transparent;
273
+ color: rgba(var(--v-theme-on-surface), 0.84);
274
+ display: grid;
275
+ gap: 0.45rem;
276
+ grid-template-columns: auto minmax(0, 1fr);
277
+ justify-self: start;
278
+ max-width: min(34rem, 96%);
279
+ min-width: 0;
280
+ padding: 0.1rem 0.15rem;
281
+ }
282
+
283
+ .assistant-transcript__system-icon {
284
+ color: rgba(var(--v-theme-primary), 0.82);
285
+ margin-top: 0.15rem;
286
+ }
287
+
288
+ .assistant-transcript__system-body {
289
+ display: grid;
290
+ gap: 0.1rem;
291
+ min-width: 0;
292
+ overflow-wrap: anywhere;
293
+ }
294
+
295
+ .assistant-transcript__system-meta {
296
+ align-items: center;
297
+ color: rgba(var(--v-theme-on-surface), 0.48);
298
+ display: flex;
299
+ font-size: 0.72rem;
300
+ gap: 0.5rem;
301
+ line-height: 1.15;
302
+ }
303
+
304
+ .assistant-transcript__message-header {
305
+ align-items: center;
306
+ color: rgba(var(--v-theme-on-surface), 0.82);
307
+ display: flex;
308
+ font-size: 0.9rem;
309
+ gap: 0.7rem;
310
+ justify-content: space-between;
311
+ line-height: 1.2;
312
+ }
313
+
314
+ .assistant-transcript__message--assistant .assistant-transcript__message-header {
315
+ color: rgba(var(--v-theme-on-surface), 0.78);
316
+ font-weight: 560;
317
+ }
318
+
319
+ .assistant-transcript__message-header span {
320
+ align-items: center;
321
+ display: flex;
322
+ gap: 0.25rem;
323
+ min-width: 0;
324
+ overflow-wrap: anywhere;
325
+ }
326
+
327
+ .assistant-transcript__message-header time {
328
+ color: #6d7888;
329
+ font-weight: 650;
330
+ }
331
+
332
+ .assistant-transcript__message-footer {
333
+ align-items: center;
334
+ color: #9aa6b6;
335
+ display: flex;
336
+ font-size: 0.88rem;
337
+ font-weight: 500;
338
+ gap: 0.65rem;
339
+ line-height: 1.2;
340
+ }
341
+
342
+ .assistant-transcript__message-footer--user {
343
+ justify-content: flex-start;
344
+ }
345
+
346
+ .assistant-transcript__message-footer--assistant {
347
+ justify-content: flex-start;
348
+ margin-top: -0.15rem;
349
+ }
350
+
351
+ .assistant-transcript__optimistic-failure {
352
+ align-items: center;
353
+ color: rgba(var(--v-theme-error), 0.92);
354
+ display: flex;
355
+ flex-wrap: wrap;
356
+ font-size: 0.76rem;
357
+ gap: 0.35rem 0.55rem;
358
+ line-height: 1.25;
359
+ }
360
+
361
+ .assistant-transcript__optimistic-actions {
362
+ align-items: center;
363
+ display: inline-flex;
364
+ gap: 0.25rem;
365
+ }
366
+
367
+ @media (max-width: 600px), (pointer: coarse) {
368
+ .assistant-transcript__delivery-action {
369
+ min-height: 3rem;
370
+ min-width: 3rem;
371
+ }
372
+ }
373
+
374
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__blocks),
375
+ .assistant-transcript__message--user :deep(.studio-long-text-review__blocks) {
376
+ color: inherit;
377
+ font-size: 0.94rem;
378
+ line-height: 1.5;
379
+ min-width: 0;
380
+ overflow-wrap: anywhere;
381
+ }
382
+
383
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__paragraph),
384
+ .assistant-transcript__message--user :deep(.studio-long-text-review__paragraph) {
385
+ font-size: 0.94rem;
386
+ margin-block: 0;
387
+ }
388
+
389
+ .assistant-transcript__message--user :deep(.studio-long-text-review__paragraph) {
390
+ white-space: pre-wrap;
391
+ }
392
+
393
+ .assistant-transcript__user-content {
394
+ min-width: 0;
395
+ }
396
+
397
+ .assistant-transcript__user-content-toggle {
398
+ align-self: flex-start;
399
+ font-size: 0.78rem;
400
+ font-weight: 650;
401
+ padding: 0;
402
+ }
403
+
404
+ .assistant-transcript__user-content-toggle:hover,
405
+ .assistant-transcript__user-content-toggle:focus-visible {
406
+ text-decoration: underline;
407
+ }
408
+
409
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__paragraph code),
410
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__list li > code),
411
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__table th > code),
412
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__table td > code),
413
+ .assistant-transcript__message--assistant :deep(.studio-long-text-review__details-summary code),
414
+ .assistant-transcript__message--user :deep(.studio-long-text-review__paragraph code),
415
+ .assistant-transcript__message--user :deep(.studio-long-text-review__list li > code),
416
+ .assistant-transcript__message--user :deep(.studio-long-text-review__table th > code),
417
+ .assistant-transcript__message--user :deep(.studio-long-text-review__table td > code),
418
+ .assistant-transcript__message--user :deep(.studio-long-text-review__details-summary code) {
419
+ background: rgba(var(--v-theme-primary), 0.07);
420
+ border: 1px solid rgba(var(--v-theme-primary), 0.14);
421
+ border-radius: 3px;
422
+ color: rgba(var(--v-theme-on-surface), 0.9);
423
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
424
+ font-size: 0.9em;
425
+ padding: 0.02rem 0.2rem;
426
+ }
427
+
428
+ .assistant-transcript__questions {
429
+ box-sizing: border-box;
430
+ display: grid;
431
+ gap: 0.2rem;
432
+ list-style: none;
433
+ margin: 0;
434
+ max-width: 100%;
435
+ min-width: 0;
436
+ padding: 0;
437
+ }
438
+
439
+ .assistant-transcript__question {
440
+ align-items: start;
441
+ background: rgba(var(--v-theme-surface), 0.62);
442
+ border: 1px solid rgba(var(--v-theme-outline), 0.2);
443
+ border-radius: 8px;
444
+ box-sizing: border-box;
445
+ display: grid;
446
+ gap: 0.32rem;
447
+ grid-template-columns: auto minmax(0, 1fr);
448
+ max-width: 100%;
449
+ min-width: 0;
450
+ padding: 0.28rem 0.42rem;
451
+ }
452
+
453
+ .assistant-transcript__question-number {
454
+ align-items: center;
455
+ background: rgba(var(--v-theme-primary), 0.1);
456
+ border: 1px solid rgba(var(--v-theme-primary), 0.2);
457
+ border-radius: 999px;
458
+ color: rgb(var(--v-theme-primary));
459
+ display: inline-flex;
460
+ font-size: 0.72rem;
461
+ font-weight: 760;
462
+ height: 1.35rem;
463
+ justify-content: center;
464
+ line-height: 1;
465
+ min-width: 1.35rem;
466
+ }
467
+
468
+ .assistant-transcript__question-text {
469
+ color: rgb(var(--v-theme-on-surface));
470
+ font-size: 0.9rem;
471
+ line-height: 1.35;
472
+ max-width: 100%;
473
+ min-width: 0;
474
+ overflow-wrap: anywhere;
475
+ }
476
+
477
+ .assistant-transcript__question-content {
478
+ display: block;
479
+ min-width: 0;
480
+ }
481
+
482
+ .assistant-transcript__question-choices {
483
+ color: rgba(var(--v-theme-on-surface), 0.72);
484
+ display: inline;
485
+ font-size: 0.8rem;
486
+ margin: 0;
487
+ padding: 0;
488
+ }
489
+
490
+ .assistant-transcript__question-choices::before {
491
+ content: " · ";
492
+ }
493
+
494
+ .assistant-transcript__question-choices li {
495
+ display: inline;
496
+ overflow-wrap: anywhere;
497
+ }
498
+
499
+ .assistant-transcript__question-choices li + li::before {
500
+ content: " · ";
501
+ }
502
+
503
+ .assistant-transcript__bottom {
504
+ height: 1px;
505
+ }