@yadsh/dsh-qa-surface 0.3.0 → 0.5.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 +192 -15
- package/cordis.patch.yml +8 -0
- package/lib/account-remotes.js +100 -0
- package/lib/account-remotes.js.map +1 -0
- package/lib/accounts/credentials.js +35 -0
- package/lib/accounts/credentials.js.map +1 -0
- package/lib/accounts/errors.js +9 -0
- package/lib/accounts/errors.js.map +1 -0
- package/lib/accounts/file.js +101 -0
- package/lib/accounts/file.js.map +1 -0
- package/lib/accounts/store.js +159 -161
- package/lib/accounts/store.js.map +1 -1
- package/lib/accounts/token.js +61 -0
- package/lib/accounts/token.js.map +1 -0
- package/lib/approvals.js +179 -0
- package/lib/approvals.js.map +1 -0
- package/lib/attachment-rules.js +111 -0
- package/lib/attachment-rules.js.map +1 -0
- package/lib/cli.js +132 -9
- package/lib/cli.js.map +1 -1
- package/lib/client/QaAccountsController.js +32 -2
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +140 -65
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +134 -107
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +71 -6
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/approvals.js +104 -0
- package/lib/client/approvals.js.map +1 -0
- package/lib/client/attachments.js +150 -0
- package/lib/client/attachments.js.map +1 -0
- package/lib/client/attestation.js +4 -1
- package/lib/client/attestation.js.map +1 -1
- package/lib/client/base64.js +16 -0
- package/lib/client/base64.js.map +1 -0
- package/lib/client/chat-files.js +48 -0
- package/lib/client/chat-files.js.map +1 -0
- package/lib/client/components/Markdown.js +1 -1
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaApproval.js +23 -0
- package/lib/client/components/QaApproval.js.map +1 -0
- package/lib/client/components/QaChangelog.js +62 -19
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaComposer.js +56 -74
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaFileAttachment.js +19 -0
- package/lib/client/components/QaFileAttachment.js.map +1 -0
- package/lib/client/components/QaFilesPanel.js +45 -0
- package/lib/client/components/QaFilesPanel.js.map +1 -0
- package/lib/client/components/QaHeader.js +34 -0
- package/lib/client/components/QaHeader.js.map +1 -0
- package/lib/client/components/QaMessage.js +17 -4
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModal.js +31 -0
- package/lib/client/components/QaModal.js.map +1 -0
- package/lib/client/components/QaProfile.js +64 -0
- package/lib/client/components/QaProfile.js.map +1 -0
- package/lib/client/components/QaQuestions.js +96 -0
- package/lib/client/components/QaQuestions.js.map +1 -0
- package/lib/client/components/QaRightRail.js +15 -0
- package/lib/client/components/QaRightRail.js.map +1 -0
- package/lib/client/components/QaSidebar.js +6 -1
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/{QaSourcesDrawer.js → QaSourcesPanel.js} +3 -3
- package/lib/client/components/QaSourcesPanel.js.map +1 -0
- package/lib/client/components/QaTurnRail.js +15 -0
- package/lib/client/components/QaTurnRail.js.map +1 -1
- package/lib/client/components/QaWidthHandle.js +25 -20
- package/lib/client/components/QaWidthHandle.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +19 -20
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/surface-utils.js +28 -0
- package/lib/client/components/surface-utils.js.map +1 -0
- package/lib/client/components/thinking-phrases.js +24 -0
- package/lib/client/components/thinking-phrases.js.map +1 -0
- package/lib/client/create-session.js +7 -32
- package/lib/client/create-session.js.map +1 -1
- package/lib/client/failure-copy.js +63 -0
- package/lib/client/failure-copy.js.map +1 -0
- package/lib/client/index.js +49 -7
- package/lib/client/index.js.map +1 -1
- package/lib/client/project-session-state.js +5 -3
- package/lib/client/project-session-state.js.map +1 -1
- package/lib/client/prompt-content.js +54 -0
- package/lib/client/prompt-content.js.map +1 -0
- package/lib/client/questions.js +114 -0
- package/lib/client/questions.js.map +1 -0
- package/lib/client/settings/card.js +143 -0
- package/lib/client/settings/card.js.map +1 -0
- package/lib/client/settings/fields.js +145 -0
- package/lib/client/settings/fields.js.map +1 -0
- package/lib/client/settings/format.js +255 -0
- package/lib/client/settings/format.js.map +1 -0
- package/lib/client/settings/sections/access.js +25 -0
- package/lib/client/settings/sections/access.js.map +1 -0
- package/lib/client/settings/sections/accounts.js +47 -0
- package/lib/client/settings/sections/accounts.js.map +1 -0
- package/lib/client/settings/sections/attachments.js +46 -0
- package/lib/client/settings/sections/attachments.js.map +1 -0
- package/lib/client/settings/sections/branding.js +28 -0
- package/lib/client/settings/sections/branding.js.map +1 -0
- package/lib/client/settings/sections/common.js +20 -0
- package/lib/client/settings/sections/common.js.map +1 -0
- package/lib/client/settings/sections/embedding.js +19 -0
- package/lib/client/settings/sections/embedding.js.map +1 -0
- package/lib/client/settings/sections/interface.js +60 -0
- package/lib/client/settings/sections/interface.js.map +1 -0
- package/lib/client/settings/sections/lockdown.js +82 -0
- package/lib/client/settings/sections/lockdown.js.map +1 -0
- package/lib/client/settings/sections/session.js +53 -0
- package/lib/client/settings/sections/session.js.map +1 -0
- package/lib/client/settings/sections/sources.js +74 -0
- package/lib/client/settings/sections/sources.js.map +1 -0
- package/lib/client/settings/sections/status.js +37 -0
- package/lib/client/settings/sections/status.js.map +1 -0
- package/lib/client/settings/sections.js +23 -0
- package/lib/client/settings/sections.js.map +1 -0
- package/lib/client/settings/styles.js +57 -0
- package/lib/client/settings/styles.js.map +1 -0
- package/lib/client/stream-publisher.js +47 -0
- package/lib/client/stream-publisher.js.map +1 -0
- package/lib/client/styles.js +127 -19
- package/lib/client/styles.js.map +1 -1
- package/lib/client/types.js +2 -0
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-right-rail.js +96 -0
- package/lib/client/use-right-rail.js.map +1 -0
- package/lib/client/use-session-ui-state.js +26 -19
- package/lib/client/use-session-ui-state.js.map +1 -1
- package/lib/client.js +5694 -813
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +60 -0
- package/lib/config-resolvers/accounts.js.map +1 -0
- package/lib/config-resolvers/attachments.js +28 -0
- package/lib/config-resolvers/attachments.js.map +1 -0
- package/lib/config-resolvers/basics.js +61 -0
- package/lib/config-resolvers/basics.js.map +1 -0
- package/lib/config-resolvers/defaults.js +136 -0
- package/lib/config-resolvers/defaults.js.map +1 -0
- package/lib/config-resolvers/lockdown.js +90 -0
- package/lib/config-resolvers/lockdown.js.map +1 -0
- package/lib/config-resolvers/session.js +42 -0
- package/lib/config-resolvers/session.js.map +1 -0
- package/lib/config-resolvers/shared.js +51 -0
- package/lib/config-resolvers/shared.js.map +1 -0
- package/lib/config-resolvers/sources.js +83 -0
- package/lib/config-resolvers/sources.js.map +1 -0
- package/lib/config-resolvers/ui.js +20 -0
- package/lib/config-resolvers/ui.js.map +1 -0
- package/lib/config.js +76 -6
- package/lib/config.js.map +1 -1
- package/lib/entry-redirect.js +2 -1
- package/lib/entry-redirect.js.map +1 -1
- package/lib/index.js +198 -79
- package/lib/index.js.map +1 -1
- package/lib/profile.js +214 -0
- package/lib/profile.js.map +1 -0
- package/lib/prompt-notes.js +231 -0
- package/lib/prompt-notes.js.map +1 -0
- package/lib/provenance/host-store.js +25 -9
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/reported.js +37 -12
- package/lib/provenance/reported.js.map +1 -1
- package/lib/questions.js +185 -0
- package/lib/questions.js.map +1 -0
- package/lib/resolve-config.js +35 -410
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +139 -21
- package/lib/secure-session.js.map +1 -1
- package/lib/session-ownership.js +55 -0
- package/lib/session-ownership.js.map +1 -0
- package/lib/shared/session-key.js +18 -0
- package/lib/shared/session-key.js.map +1 -0
- package/lib/shared/settings.js +10 -0
- package/lib/shared/settings.js.map +1 -0
- package/lib/thinking-phrases.js +68 -0
- package/lib/thinking-phrases.js.map +1 -0
- package/lib/typert.host.js +506 -21
- package/lib/typert.remote-client.d.ts +15 -1
- package/lib/typert.remote-client.js +407 -15
- package/lib/types/account-remotes.d.ts +42 -0
- package/lib/types/accounts/credentials.d.ts +20 -0
- package/lib/types/accounts/errors.d.ts +11 -0
- package/lib/types/accounts/file.d.ts +82 -0
- package/lib/types/accounts/store.d.ts +74 -43
- package/lib/types/accounts/token.d.ts +31 -0
- package/lib/types/approvals.d.ts +65 -0
- package/lib/types/attachment-rules.d.ts +44 -0
- package/lib/types/cli.d.ts +2 -2
- package/lib/types/client/QaAccountsController.d.ts +8 -1
- package/lib/types/client/QaSessionController.d.ts +53 -16
- package/lib/types/client/QaSurface.d.ts +14 -1
- package/lib/types/client/approvals.d.ts +39 -0
- package/lib/types/client/attachments.d.ts +54 -0
- package/lib/types/client/base64.d.ts +10 -0
- package/lib/types/client/chat-files.d.ts +30 -0
- package/lib/types/client/components/QaApproval.d.ts +13 -0
- package/lib/types/client/components/QaChangelog.d.ts +1 -1
- package/lib/types/client/components/QaComposer.d.ts +8 -4
- package/lib/types/client/components/QaFileAttachment.d.ts +14 -0
- package/lib/types/client/components/QaFilesPanel.d.ts +15 -0
- package/lib/types/client/components/QaHeader.d.ts +41 -0
- package/lib/types/client/components/QaMessage.d.ts +3 -1
- package/lib/types/client/components/QaModal.d.ts +26 -0
- package/lib/types/client/components/QaProfile.d.ts +25 -0
- package/lib/types/client/components/QaQuestions.d.ts +13 -0
- package/lib/types/client/components/QaRightRail.d.ts +23 -0
- package/lib/types/client/components/QaSidebar.d.ts +14 -0
- package/lib/types/client/components/{QaSourcesDrawer.d.ts → QaSourcesPanel.d.ts} +7 -4
- package/lib/types/client/components/QaTurnRail.d.ts +6 -0
- package/lib/types/client/components/QaWidthHandle.d.ts +14 -7
- package/lib/types/client/components/QaWorkGroup.d.ts +5 -3
- package/lib/types/client/components/surface-utils.d.ts +11 -0
- package/lib/types/client/components/thinking-phrases.d.ts +9 -0
- package/lib/types/client/create-session.d.ts +6 -9
- package/lib/types/client/failure-copy.d.ts +19 -0
- package/lib/types/client/project-session-state.d.ts +8 -1
- package/lib/types/client/prompt-content.d.ts +30 -0
- package/lib/types/client/questions.d.ts +45 -0
- package/lib/types/client/settings/card.d.ts +23 -0
- package/lib/types/client/settings/fields.d.ts +139 -0
- package/lib/types/client/settings/format.d.ts +108 -0
- package/lib/types/client/settings/sections/access.d.ts +9 -0
- package/lib/types/client/settings/sections/accounts.d.ts +9 -0
- package/lib/types/client/settings/sections/attachments.d.ts +15 -0
- package/lib/types/client/settings/sections/branding.d.ts +8 -0
- package/lib/types/client/settings/sections/common.d.ts +28 -0
- package/lib/types/client/settings/sections/embedding.d.ts +8 -0
- package/lib/types/client/settings/sections/interface.d.ts +9 -0
- package/lib/types/client/settings/sections/lockdown.d.ts +9 -0
- package/lib/types/client/settings/sections/session.d.ts +9 -0
- package/lib/types/client/settings/sections/sources.d.ts +9 -0
- package/lib/types/client/settings/sections/status.d.ts +22 -0
- package/lib/types/client/settings/sections.d.ts +25 -0
- package/lib/types/client/settings/styles.d.ts +8 -0
- package/lib/types/client/stream-publisher.d.ts +28 -0
- package/lib/types/client/types.d.ts +76 -1
- package/lib/types/client/use-right-rail.d.ts +56 -0
- package/lib/types/client/use-session-ui-state.d.ts +13 -7
- package/lib/types/config-resolvers/accounts.d.ts +15 -0
- package/lib/types/config-resolvers/attachments.d.ts +6 -0
- package/lib/types/config-resolvers/basics.d.ts +8 -0
- package/lib/types/config-resolvers/defaults.d.ts +4 -0
- package/lib/types/config-resolvers/lockdown.d.ts +10 -0
- package/lib/types/config-resolvers/session.d.ts +6 -0
- package/lib/types/config-resolvers/shared.d.ts +23 -0
- package/lib/types/config-resolvers/sources.d.ts +6 -0
- package/lib/types/config-resolvers/ui.d.ts +6 -0
- package/lib/types/index.d.ts +48 -15
- package/lib/types/profile.d.ts +76 -0
- package/lib/types/prompt-notes.d.ts +110 -0
- package/lib/types/provenance/reported.d.ts +9 -1
- package/lib/types/questions.d.ts +83 -0
- package/lib/types/resolve-config.d.ts +8 -3
- package/lib/types/secure-session.d.ts +46 -2
- package/lib/types/session-ownership.d.ts +30 -0
- package/lib/types/shared/session-key.d.ts +23 -0
- package/lib/types/shared/settings.d.ts +10 -0
- package/lib/types/thinking-phrases.d.ts +17 -0
- package/lib/types/types.d.ts +203 -9
- package/lib/types/user-workspace.d.ts +42 -0
- package/lib/user-workspace.js +246 -0
- package/lib/user-workspace.js.map +1 -0
- package/package.json +15 -8
- package/CHANGELOG.md +0 -176
- package/SPEC-dsh-qa-surface.md +0 -2425
- package/docs/ARCHITECTURE.md +0 -66
- package/docs/COMPATIBILITY.md +0 -14
- package/docs/CONFIGURATION.md +0 -199
- package/docs/EMBEDDING.md +0 -13
- package/docs/SOURCES-MIGRATION.md +0 -28
- package/docs/SOURCES-PROVENANCE-AUDIT.md +0 -88
- package/docs/SPEC-dsh-qa-surface-accounts.md +0 -219
- package/docs/SPEC-dsh-qa-surface-sources-provenance.md +0 -1692
- package/lib/client/components/QaSourcesDrawer.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { chatLegacyOf } from "./turn-sources.js";
|
|
2
2
|
import { parseSettlement } from "./settlement.js";
|
|
3
|
+
import { retryWorkCopy, turnErrorCopy } from "./failure-copy.js";
|
|
3
4
|
import { flattenToolOutput, toolStatus, workTool, } from "./tool-presentation.js";
|
|
4
5
|
/**
|
|
5
6
|
* The hidden regeneration prompt. Regenerate sends this as an ordinary
|
|
@@ -35,6 +36,33 @@ function visibleContentImages(content) {
|
|
|
35
36
|
}
|
|
36
37
|
return images;
|
|
37
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Durable file references carried by user content. Files reach the model as
|
|
41
|
+
* handle text (name, size, stored path), so the row shows the same handle;
|
|
42
|
+
* matched structurally for the same reason as the images above.
|
|
43
|
+
*/
|
|
44
|
+
function visibleContentFiles(content) {
|
|
45
|
+
const files = [];
|
|
46
|
+
for (const block of content) {
|
|
47
|
+
if (typeof block !== "object" || block === null)
|
|
48
|
+
continue;
|
|
49
|
+
const record = block;
|
|
50
|
+
if (record.type !== "file")
|
|
51
|
+
continue;
|
|
52
|
+
const attachment = record.attachment;
|
|
53
|
+
const attachmentId = attachment?.attachmentId;
|
|
54
|
+
if (typeof attachmentId !== "string" || attachmentId === "")
|
|
55
|
+
continue;
|
|
56
|
+
files.push({
|
|
57
|
+
attachmentId,
|
|
58
|
+
name: typeof attachment?.name === "string" && attachment.name !== ""
|
|
59
|
+
? attachment.name
|
|
60
|
+
: "файл",
|
|
61
|
+
bytes: typeof attachment?.bytes === "number" ? attachment.bytes : 0,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return files;
|
|
65
|
+
}
|
|
38
66
|
function visibleContentText(content) {
|
|
39
67
|
return content
|
|
40
68
|
.flatMap((block) => {
|
|
@@ -155,7 +183,32 @@ function collectRunningTool(call, turns, toolHeads) {
|
|
|
155
183
|
item: workTool(call.callId, call.name, call.argsRaw, "running", call.time, undefined, null),
|
|
156
184
|
});
|
|
157
185
|
}
|
|
158
|
-
|
|
186
|
+
/**
|
|
187
|
+
* One host-scheduled model-request retry as a work-group row. The copy is
|
|
188
|
+
* code-driven only: the carried provider message can contain host internals.
|
|
189
|
+
*/
|
|
190
|
+
function collectModelRetry(node, turns) {
|
|
191
|
+
getTurn(turns, node.turn).work.push({
|
|
192
|
+
order: node.seq,
|
|
193
|
+
item: {
|
|
194
|
+
id: `retry:${node.retryId}:${node.retry}`,
|
|
195
|
+
kind: "progress",
|
|
196
|
+
text: retryWorkCopy({
|
|
197
|
+
mode: node.mode,
|
|
198
|
+
retry: node.retry,
|
|
199
|
+
...(node.mode === "normal" ? { maxRetries: node.maxRetries } : {}),
|
|
200
|
+
delayMs: node.delayMs,
|
|
201
|
+
retryState: node.retryState,
|
|
202
|
+
failureCode: node.failure.code,
|
|
203
|
+
}),
|
|
204
|
+
// Only a scheduled wait is live; "started" attempts are settled history
|
|
205
|
+
// because their outcome arrives as further steps, retries, or the turn
|
|
206
|
+
// end — the node itself never advances past "started".
|
|
207
|
+
status: node.retryState === "scheduled" ? "running" : "complete",
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
function emitTurn(legacy, running, turn, output, erroredCode) {
|
|
159
212
|
const timing = legacy.turnTimings.get(turn.turn);
|
|
160
213
|
const completed = timing?.endTime !== undefined || legacy.turnEnds.has(turn.turn);
|
|
161
214
|
const sortedText = [...turn.text].sort((left, right) => left.order - right.order);
|
|
@@ -190,7 +243,11 @@ function emitTurn(legacy, running, turn, output) {
|
|
|
190
243
|
id: `work:${turn.turn}`,
|
|
191
244
|
role: "work",
|
|
192
245
|
turn: turn.turn,
|
|
193
|
-
status:
|
|
246
|
+
status: erroredCode !== undefined
|
|
247
|
+
? "error"
|
|
248
|
+
: completed || !running
|
|
249
|
+
? "complete"
|
|
250
|
+
: "running",
|
|
194
251
|
...(timing?.startTime === undefined
|
|
195
252
|
? {}
|
|
196
253
|
: { startedAt: timing.startTime }),
|
|
@@ -241,13 +298,15 @@ export function projectTranscript(snapshot, options = {}) {
|
|
|
241
298
|
const output = [];
|
|
242
299
|
const turns = new Map();
|
|
243
300
|
const toolHeads = new Map();
|
|
301
|
+
const erroredTurns = new Map();
|
|
244
302
|
for (const node of legacy.nodes) {
|
|
245
303
|
if (node.kind === "user" || node.kind === "steering") {
|
|
246
304
|
const text = visibleContentText(node.content);
|
|
247
305
|
const images = visibleContentImages(node.content);
|
|
306
|
+
const files = visibleContentFiles(node.content);
|
|
248
307
|
if (text === QA_REGENERATE_MARKER)
|
|
249
308
|
continue;
|
|
250
|
-
if (text === "" && images.length === 0)
|
|
309
|
+
if (text === "" && images.length === 0 && files.length === 0)
|
|
251
310
|
continue;
|
|
252
311
|
output.push({
|
|
253
312
|
order: node.seq,
|
|
@@ -258,6 +317,7 @@ export function projectTranscript(snapshot, options = {}) {
|
|
|
258
317
|
status: "committed",
|
|
259
318
|
timestamp: node.time,
|
|
260
319
|
...(images.length === 0 ? {} : { images }),
|
|
320
|
+
...(files.length === 0 ? {} : { files }),
|
|
261
321
|
},
|
|
262
322
|
});
|
|
263
323
|
}
|
|
@@ -290,17 +350,21 @@ export function projectTranscript(snapshot, options = {}) {
|
|
|
290
350
|
});
|
|
291
351
|
}
|
|
292
352
|
else if (node.kind === "turn-error") {
|
|
353
|
+
erroredTurns.set(node.turn, node.code);
|
|
293
354
|
output.push({
|
|
294
355
|
order: node.seq,
|
|
295
356
|
message: {
|
|
296
357
|
id: `turn-error:${node.seq}`,
|
|
297
358
|
role: "system",
|
|
298
|
-
text:
|
|
359
|
+
text: turnErrorCopy(node.code),
|
|
299
360
|
status: "error",
|
|
300
361
|
timestamp: node.time,
|
|
301
362
|
},
|
|
302
363
|
});
|
|
303
364
|
}
|
|
365
|
+
else if (node.kind === "model-retry") {
|
|
366
|
+
collectModelRetry(node, turns);
|
|
367
|
+
}
|
|
304
368
|
else if (node.kind === "turn-max-tokens") {
|
|
305
369
|
output.push({
|
|
306
370
|
order: node.seq,
|
|
@@ -358,8 +422,9 @@ export function projectTranscript(snapshot, options = {}) {
|
|
|
358
422
|
}
|
|
359
423
|
});
|
|
360
424
|
}
|
|
361
|
-
for (const turn of turns.values())
|
|
362
|
-
emitTurn(legacy, running, turn, output);
|
|
425
|
+
for (const turn of turns.values()) {
|
|
426
|
+
emitTurn(legacy, running, turn, output, erroredTurns.get(turn.turn));
|
|
427
|
+
}
|
|
363
428
|
return output
|
|
364
429
|
.sort((left, right) => left.order - right.order)
|
|
365
430
|
.map(({ message }) => message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QaTranscriptAdapter.js","sourceRoot":"","sources":["../../src/client/QaTranscriptAdapter.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,kFAAkF,CAAC;AA0CrF;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,OAA2B;IAE3B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAiD,CAAC;QAC5E,MAAM,YAAY,GAAG,UAAU,EAAE,YAAY,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,EAAE,SAAS,CAAC;QACxC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,EAAE;YAAE,SAAS;QACtE,MAAM,CAAC,IAAI,CAAC;YACV,YAAY;YACZ,SAAS,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ;gBACvC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,WAAW,CAAqB;SACrC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA2B;IACrD,OAAO,OAAO;SACX,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM;YAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ;YAC9C,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAW,CAAC;YACxC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAoE;IAEpE,OAAO,MAAM;SACV,MAAM,CACL,CAAC,KAAK,EAA6D,EAAE,CACnE,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAC1D;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,IAAY,EACZ,MAAsC;IAEtC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,UAAU,GACd,KAAK,KAAK,IAAI;QACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,GACV,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;IACvE,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,KAA8B,EAAE,IAAY;IAC3D,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,IAA0B,EAC1B,KAA8B,EAC9B,SAAgC,EAChC,aAAsB;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,aAAa,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YAC7C,KAAK,EAAE,IAAI,CAAC,GAAG;YACf,IAAI;YACJ,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACb,KAAK;gBACL,IAAI,EAAE;oBACJ,EAAE,EAAE,aAAa,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE;oBACtD,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,UAAU;iBACnB;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC7D,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkC,EAClC,KAA8B,EAC9B,SAAgC;IAEhC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,WAA+B,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QACvD,sEAAsE;QACtE,qEAAqE;QACrE,sDAAsD;QACtD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,IAAI,WAAW,CAAC;QAC7C,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QACvC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG;YAC9B,IAAI,EAAE,QAAQ,CACZ,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,OAAO,EACP,UAAU,CAAC,IAAI,CAAC,EAChB,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,IAAI,EAC3B,IAAI,CAAC,IAAI,EACT,iBAAiB,CAAC,IAAI,CAAC,CACxB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAqB,EACrB,KAA8B,EAC9B,SAAgC;IAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI;QACzD,IAAI,EAAE,QAAQ,CACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,SAAS,EACT,IAAI,CAAC,IAAI,EACT,SAAS,EACT,IAAI,CACL;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CACf,MAA+B,EAC/B,OAAgB,EAChB,IAAgB,EAChB,MAAwB;IAExB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GACb,MAAM,EAAE,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACpC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAC1C,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CACjC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,CAC5C,CAAC;IACF,MAAM,oBAAoB,GACxB,OAAO;QACP,CAAC,SAAS;QACV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GACZ,SAAS,KAAK,SAAS;QACrB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAC3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE;gBACJ,EAAE,EAAE,YAAY,OAAO,CAAC,EAAE,EAAE;gBAC5B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,UAAU;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;aACzB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aAC/C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EACtC,CAAC,SAAS,EAAE,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CACtD,CAAC;QACF,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE;gBACP,EAAE,EAAE,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACvB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBACtD,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS;oBACjC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpC,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrE,KAAK;aACN;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE;oBACP,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;wBACjC,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;oBACrC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;iBACjE;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,OAAO,EAAE;gBACP,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;oBACnC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;gBACvC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;aACrE;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAC/B,QAA0C,EAC1C,OAAO,GAKH,EAAE;IAEN,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;IACzC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,oBAAoB;gBAAE,SAAS;YAC5C,IAAI,IAAI,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACjD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,OAAO,EAAE;oBACP,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;oBAC9B,IAAI,EAAE,MAAM;oBACZ,IAAI;oBACJ,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,IAAI,CAAC,IAAI;oBACpB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;iBAC3C;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACrC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,uEAAuE;YACvE,qEAAqE;YACrE,8DAA8D;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,SAAS;YAC1D,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YACjC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,OAAO,EAAE;oBACP,EAAE,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE;oBACzB,IAAI,EAAE,QAAQ;oBACd,IAAI,EACF,MAAM,KAAK,SAAS;wBAClB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBACjD,CAAC,CAAC,MAAM,CAAC,KAAK;oBAClB,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,IAAI,CAAC,IAAI;oBACpB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;iBAC5C;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,OAAO,EAAE;oBACP,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE;oBAC5B,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,uCAAuC;oBAC7C,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,IAAI,CAAC,IAAI;iBACrB;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,OAAO,EAAE;oBACP,EAAE,EAAE,mBAAmB,IAAI,CAAC,GAAG,EAAE;oBACjC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,gCAAgC;oBACtC,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,IAAI,CAAC,IAAI;iBACrB;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpB,EAAE,EAAE,qBAAqB,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACrE,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,CAAC;gBAClC,IAAI;gBACJ,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,IACE,KAAK,CAAC,IAAI,KAAK,WAAW;gBAC1B,OAAO,CAAC,aAAa,KAAK,IAAI;gBAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EACjB,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpB,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK;oBACnD,IAAI,EAAE;wBACJ,EAAE,EAAE,qBAAqB,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE;wBAChF,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,MAAM,EAAE,SAAS;qBAClB;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,IACL,KAAK,CAAC,IAAI,KAAK,WAAW;gBAC1B,OAAO,CAAC,gBAAgB,KAAK,IAAI;gBACjC,KAAK,CAAC,MAAM,KAAK,EAAE;gBACnB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,EACjE,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpB,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK;oBAClD,IAAI,EAAE,QAAQ,CACZ,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,CACL;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,OAAO,MAAM;SACV,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SAC/C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"QaTranscriptAdapter.js","sourceRoot":"","sources":["../../src/client/QaTranscriptAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The operator's side of a parked tool call.
|
|
3
|
+
*
|
|
4
|
+
* A composed gate's `ask` is answered on the Host, so the waiting request is
|
|
5
|
+
* Host state: it survives a page reload, and the surface learns about it by
|
|
6
|
+
* asking rather than by receiving an event. The bridge holds the last list it
|
|
7
|
+
* saw, refreshes it while a turn runs, and forwards an answer.
|
|
8
|
+
*/
|
|
9
|
+
export class QaHostApprovalBridge {
|
|
10
|
+
approvalApi;
|
|
11
|
+
approvals = [];
|
|
12
|
+
signature = "";
|
|
13
|
+
refreshing = false;
|
|
14
|
+
answering = false;
|
|
15
|
+
/** Bumped on reset so a stale in-flight response never lands. */
|
|
16
|
+
generation = 0;
|
|
17
|
+
constructor(approvalApi) {
|
|
18
|
+
this.approvalApi = approvalApi;
|
|
19
|
+
}
|
|
20
|
+
/** Leave the chat: a chat switch drops the previous chat's requests. */
|
|
21
|
+
reset() {
|
|
22
|
+
this.generation += 1;
|
|
23
|
+
this.approvals = [];
|
|
24
|
+
this.signature = "";
|
|
25
|
+
this.refreshing = false;
|
|
26
|
+
this.answering = false;
|
|
27
|
+
}
|
|
28
|
+
/** The last list this bridge saw; empty when the deployment blocks them. */
|
|
29
|
+
list() {
|
|
30
|
+
return this.approvals;
|
|
31
|
+
}
|
|
32
|
+
/** Whether this page can ask the Host about approvals at all. */
|
|
33
|
+
get available() {
|
|
34
|
+
return this.approvalApi !== undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Re-read the chat's pending requests; a changed list republishes through the
|
|
38
|
+
* callback. Overlapping calls coalesce, and a response that outlives its chat
|
|
39
|
+
* is dropped.
|
|
40
|
+
*/
|
|
41
|
+
async refresh(sessionId, token, onChanged) {
|
|
42
|
+
const api = this.approvalApi;
|
|
43
|
+
if (api === undefined || this.refreshing)
|
|
44
|
+
return;
|
|
45
|
+
const generation = this.generation;
|
|
46
|
+
this.refreshing = true;
|
|
47
|
+
try {
|
|
48
|
+
const result = await api.pendingApprovals(token, sessionId);
|
|
49
|
+
if (!result.ok || generation !== this.generation)
|
|
50
|
+
return;
|
|
51
|
+
const signature = JSON.stringify(result.value);
|
|
52
|
+
if (signature === this.signature)
|
|
53
|
+
return;
|
|
54
|
+
this.signature = signature;
|
|
55
|
+
this.approvals = result.value;
|
|
56
|
+
onChanged();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// The poll is a background read: a transport failure leaves the last
|
|
60
|
+
// known list on screen and the next tick retries.
|
|
61
|
+
console.error("dsh-qa-surface: approval poll failed", error);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
if (generation === this.generation)
|
|
65
|
+
this.refreshing = false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Answer one request and re-read the list. A refusal is not an error: the
|
|
70
|
+
* request was already settled (the turn was stopped, the call went away), so
|
|
71
|
+
* the refresh — not the answer — is what the surface shows.
|
|
72
|
+
*/
|
|
73
|
+
async answer(sessionId, token, requestId, decision) {
|
|
74
|
+
const api = this.approvalApi;
|
|
75
|
+
if (api === undefined || this.answering)
|
|
76
|
+
return;
|
|
77
|
+
this.answering = true;
|
|
78
|
+
const generation = this.generation;
|
|
79
|
+
try {
|
|
80
|
+
await api.answerApproval(token, sessionId, requestId, decision);
|
|
81
|
+
const result = await api.pendingApprovals(token, sessionId);
|
|
82
|
+
if (generation !== this.generation)
|
|
83
|
+
return;
|
|
84
|
+
if (result.ok) {
|
|
85
|
+
this.signature = JSON.stringify(result.value);
|
|
86
|
+
this.approvals = result.value;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// The list is unreadable: drop the answered row rather than leave a
|
|
90
|
+
// request the operator already resolved on screen.
|
|
91
|
+
this.signature = "";
|
|
92
|
+
this.approvals = this.approvals.filter((approval) => approval.id !== requestId);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
// A transport failure is not a decision: the row stays, and the next
|
|
96
|
+
// poll reconciles it with what the Host actually holds.
|
|
97
|
+
console.error("dsh-qa-surface: approval answer failed", error);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
this.answering = false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/client/approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composer-side attachment intake: which files are accepted, how a pasted
|
|
3
|
+
* blob turns into an attachment, and the browser-side ceilings. The Host
|
|
4
|
+
* remains authoritative — these checks exist so a refusal happens before a
|
|
5
|
+
* round trip, not to replace the Host's own admission.
|
|
6
|
+
*/
|
|
7
|
+
import { countTextLines, hasTextExtension } from "../attachment-rules.js";
|
|
8
|
+
import { bytesToBase64 } from "./base64.js";
|
|
9
|
+
import { pluralRu } from "./settings/format.js";
|
|
10
|
+
/** Raster formats the host attachment path accepts. */
|
|
11
|
+
export const QA_IMAGE_MEDIA_TYPES = [
|
|
12
|
+
"image/png",
|
|
13
|
+
"image/jpeg",
|
|
14
|
+
"image/webp",
|
|
15
|
+
"image/gif",
|
|
16
|
+
];
|
|
17
|
+
/** Soft image ceiling; the Host stays authoritative at admission. */
|
|
18
|
+
export const QA_MAX_IMAGE_BYTES = 15 * 1024 * 1024;
|
|
19
|
+
/**
|
|
20
|
+
* Project the deployment's resolved configuration into the composer's policy.
|
|
21
|
+
* @param config - effective QA configuration.
|
|
22
|
+
* @returns the attachment ceilings the composer enforces.
|
|
23
|
+
*/
|
|
24
|
+
export function attachmentLimits(config) {
|
|
25
|
+
return {
|
|
26
|
+
textFiles: config.attachments.textFiles,
|
|
27
|
+
pastedTextLines: config.attachments.pastedTextLines,
|
|
28
|
+
maxFileBytes: config.attachments.maxFileBytes,
|
|
29
|
+
maxPending: config.attachments.maxPending,
|
|
30
|
+
extensions: config.attachments.extensions,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The file picker's `accept` value: the raster formats plus either the
|
|
35
|
+
* configured text extensions or the browser's whole `text/*` family.
|
|
36
|
+
* @param limits - attachment policy in effect.
|
|
37
|
+
* @returns the accept attribute value.
|
|
38
|
+
*/
|
|
39
|
+
export function attachmentAccept(limits) {
|
|
40
|
+
const parts = [...QA_IMAGE_MEDIA_TYPES];
|
|
41
|
+
if (limits.textFiles) {
|
|
42
|
+
parts.push("text/*", ...limits.extensions.map((value) => `.${value}`));
|
|
43
|
+
}
|
|
44
|
+
return parts.join(",");
|
|
45
|
+
}
|
|
46
|
+
let attachmentSequence = 0;
|
|
47
|
+
function nextDraftId(kind) {
|
|
48
|
+
attachmentSequence += 1;
|
|
49
|
+
return `${kind}-${String(attachmentSequence)}`;
|
|
50
|
+
}
|
|
51
|
+
/** FileReader covers runtimes without File.arrayBuffer (jsdom). */
|
|
52
|
+
function readAsArrayBuffer(file) {
|
|
53
|
+
if (typeof file.arrayBuffer === "function")
|
|
54
|
+
return file.arrayBuffer();
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const reader = new FileReader();
|
|
57
|
+
reader.onload = () => resolve(reader.result);
|
|
58
|
+
reader.onerror = () => reject(reader.error ?? new Error("read failed"));
|
|
59
|
+
reader.readAsArrayBuffer(file);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Whether one browser-reported MIME type is worth offering as text. */
|
|
63
|
+
function isTextMediaType(mediaType) {
|
|
64
|
+
return mediaType.toLowerCase().startsWith("text/");
|
|
65
|
+
}
|
|
66
|
+
/** Whether a dropped payload may be attached as a text file at all. */
|
|
67
|
+
export function acceptsTextFile(name, mediaType, limits) {
|
|
68
|
+
if (!limits.textFiles)
|
|
69
|
+
return false;
|
|
70
|
+
return (hasTextExtension(name, limits.extensions) || isTextMediaType(mediaType));
|
|
71
|
+
}
|
|
72
|
+
function imageDraftFromBlob(blob, name) {
|
|
73
|
+
return readAsArrayBuffer(blob).then((buffer) => ({
|
|
74
|
+
kind: "image",
|
|
75
|
+
id: nextDraftId("image"),
|
|
76
|
+
mediaType: blob.type,
|
|
77
|
+
name: name === "" ? "изображение" : name,
|
|
78
|
+
data: bytesToBase64(new Uint8Array(buffer)),
|
|
79
|
+
previewUrl: URL.createObjectURL(blob),
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Turn one dropped or picked file into a composer draft, or into the message
|
|
84
|
+
* the visitor sees when the file is not accepted.
|
|
85
|
+
* @param file - browser file from a picker, drop or paste.
|
|
86
|
+
* @param limits - attachment policy in effect.
|
|
87
|
+
* @returns the draft, or a refusal message.
|
|
88
|
+
*/
|
|
89
|
+
export async function draftFromFile(file, limits) {
|
|
90
|
+
if (QA_IMAGE_MEDIA_TYPES.includes(file.type)) {
|
|
91
|
+
if (file.size > QA_MAX_IMAGE_BYTES) {
|
|
92
|
+
return `Изображение слишком большое (лимит ${formatFileSize(QA_MAX_IMAGE_BYTES)}).`;
|
|
93
|
+
}
|
|
94
|
+
return imageDraftFromBlob(file, file.name);
|
|
95
|
+
}
|
|
96
|
+
if (!acceptsTextFile(file.name, file.type, limits)) {
|
|
97
|
+
return limits.textFiles
|
|
98
|
+
? "Поддерживаются изображения и текстовые файлы (md, txt, log и другие)."
|
|
99
|
+
: "Поддерживаются изображения PNG, JPEG, WebP и GIF.";
|
|
100
|
+
}
|
|
101
|
+
if (file.size > limits.maxFileBytes) {
|
|
102
|
+
return `Файл слишком большой (лимит ${formatFileSize(limits.maxFileBytes)}).`;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
kind: "file",
|
|
106
|
+
id: nextDraftId("file"),
|
|
107
|
+
name: file.name === "" ? "файл.txt" : file.name,
|
|
108
|
+
bytes: file.size,
|
|
109
|
+
blob: file,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Convert a large pasted blob into an attached file. Pasted text has no file
|
|
114
|
+
* name of its own, so the name states what it is; the model resolves it from
|
|
115
|
+
* the durable store like any other attachment.
|
|
116
|
+
* @param text - pasted plain text.
|
|
117
|
+
* @param limits - attachment policy in effect.
|
|
118
|
+
* @returns the draft, or null when the paste stays in the input field.
|
|
119
|
+
*/
|
|
120
|
+
export function draftFromPaste(text, limits) {
|
|
121
|
+
if (!limits.textFiles || limits.pastedTextLines <= 0)
|
|
122
|
+
return null;
|
|
123
|
+
const lines = countTextLines(text);
|
|
124
|
+
if (lines <= limits.pastedTextLines)
|
|
125
|
+
return null;
|
|
126
|
+
const name = `Вставленный текст (${pluralRu(lines, ["строка", "строки", "строк"])}).txt`;
|
|
127
|
+
const blob = new Blob([text], { type: "text/plain;charset=utf-8" });
|
|
128
|
+
return {
|
|
129
|
+
kind: "file",
|
|
130
|
+
id: nextDraftId("file"),
|
|
131
|
+
name,
|
|
132
|
+
bytes: blob.size,
|
|
133
|
+
blob,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/** Human-readable megabyte budget for refusal messages. */
|
|
137
|
+
function formatMegabytes(bytes) {
|
|
138
|
+
const megabytes = bytes / (1024 * 1024);
|
|
139
|
+
const rounded = megabytes >= 10 ? Math.round(megabytes) : Math.round(megabytes * 10) / 10;
|
|
140
|
+
return `${String(rounded).replace(".", ",")} МБ`;
|
|
141
|
+
}
|
|
142
|
+
/** Format one attachment size for a card, a chip or a refusal message. */
|
|
143
|
+
export function formatFileSize(bytes) {
|
|
144
|
+
if (bytes < 1024)
|
|
145
|
+
return `${String(bytes)} Б`;
|
|
146
|
+
if (bytes < 1024 * 1024)
|
|
147
|
+
return `${String(Math.max(1, Math.round(bytes / 1024)))} КБ`;
|
|
148
|
+
return formatMegabytes(bytes);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/client/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,9 @@ export function attestationReasonOf(failure) {
|
|
|
22
22
|
return reason === undefined ? null : reason;
|
|
23
23
|
}
|
|
24
24
|
export function attestationHint(reason) {
|
|
25
|
+
if (reason === "agent-unavailable") {
|
|
26
|
+
return "The Host could not put a live agent behind this chat: resuming the composition its session recorded failed (a preset that no longer mounts does this). The refusal detail is in the Host logs.";
|
|
27
|
+
}
|
|
25
28
|
if (reason === "unknown-tools") {
|
|
26
29
|
return "A lockdown.toolPolicy name is not mounted in this session's tool catalog — check the deployment agent preset and the tool's server availability.";
|
|
27
30
|
}
|
|
@@ -56,7 +59,7 @@ export function proofMatchesConfig(proof, lockdown, sessionId) {
|
|
|
56
59
|
proof.agentPresetMatches &&
|
|
57
60
|
proof.workspaceMatches &&
|
|
58
61
|
proof.modelMatches &&
|
|
59
|
-
proof.
|
|
62
|
+
proof.sandboxModeMatches &&
|
|
60
63
|
proof.approvalIsNever &&
|
|
61
64
|
proof.permissionPreset === lockdown.permissionPreset &&
|
|
62
65
|
proof.toolPolicyLoaded &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/client/attestation.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD;QACE,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAKQ;IAER,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,kJAAkJ,CAAC;IAC5J,CAAC;IACD,IAAI,MAAM,KAAK,uBAAuB,EAAE,CAAC;QACvC,OAAO,6JAA6J,CAAC;IACvK,CAAC;IACD,IAAI,MAAM,KAAK,sBAAsB,EAAE,CAAC;QACtC,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,yFAAyF,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClC,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;QACzC,OAAO,iGAAiG,CAAC;IAC3G,CAAC;IACD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,sFAAsF,CAAC;IAChG,CAAC;IACD,OAAO,2DAA2D,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,QAA6C,EAC7C,SAAiB;IAEjB,OAAO,CACL,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,gBAAgB;QACtB,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/client/attestation.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD;QACE,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAKQ;IAER,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,gMAAgM,CAAC;IAC1M,CAAC;IACD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,kJAAkJ,CAAC;IAC5J,CAAC;IACD,IAAI,MAAM,KAAK,uBAAuB,EAAE,CAAC;QACvC,OAAO,6JAA6J,CAAC;IACvK,CAAC;IACD,IAAI,MAAM,KAAK,sBAAsB,EAAE,CAAC;QACtC,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,yFAAyF,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClC,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;QACzC,OAAO,iGAAiG,CAAC;IAC3G,CAAC;IACD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,sFAAsF,CAAC;IAChG,CAAC;IACD,OAAO,2DAA2D,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,QAA6C,EAC7C,SAAiB;IAEjB,OAAO,CACL,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,gBAAgB;QACtB,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,kBAAkB;QACxB,KAAK,CAAC,eAAe;QACrB,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB;QACpD,KAAK,CAAC,gBAAgB;QACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side binary-to-base64. Chunked so `String.fromCharCode` never
|
|
3
|
+
* crosses the engine's argument limit on large attachments.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @param bytes - raw bytes to encode.
|
|
7
|
+
* @returns the canonical base64 text (no `data:` prefix, no padding tricks).
|
|
8
|
+
*/
|
|
9
|
+
export function bytesToBase64(bytes) {
|
|
10
|
+
let binary = "";
|
|
11
|
+
for (let index = 0; index < bytes.length; index += 0x8000) {
|
|
12
|
+
binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000));
|
|
13
|
+
}
|
|
14
|
+
return btoa(binary);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/client/base64.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC;QAC1D,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attachment roster of one chat, projected for the rail's files tab: a pure
|
|
3
|
+
* scan of the durable transcript, newest message first. The browser never
|
|
4
|
+
* re-reads file bytes (the attachment route serves images), so a row keeps
|
|
5
|
+
* the same handle the transcript shows.
|
|
6
|
+
*/
|
|
7
|
+
/** Whether the group carries at least one attachment of either kind. */
|
|
8
|
+
export function groupHasAttachments(group) {
|
|
9
|
+
return group.files.length > 0 || group.images.length > 0;
|
|
10
|
+
}
|
|
11
|
+
/** Total attachment count across groups; the header badge's value. */
|
|
12
|
+
export function countChatAttachments(groups) {
|
|
13
|
+
let total = 0;
|
|
14
|
+
for (const group of groups) {
|
|
15
|
+
total += group.files.length + group.images.length;
|
|
16
|
+
}
|
|
17
|
+
return total;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Group the attachments of a chat by their sending message. Only user
|
|
21
|
+
* messages can carry attachments; messages without any are dropped. The
|
|
22
|
+
* groups come out newest message first, matching a roster that grows at the
|
|
23
|
+
* bottom of the transcript.
|
|
24
|
+
* @param messages - the chat's projected transcript.
|
|
25
|
+
* @returns attachment groups, newest message first.
|
|
26
|
+
*/
|
|
27
|
+
export function collectChatFiles(messages) {
|
|
28
|
+
const groups = [];
|
|
29
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
30
|
+
const message = messages[index];
|
|
31
|
+
if (message === undefined || message.role !== "user")
|
|
32
|
+
continue;
|
|
33
|
+
const files = message.files ?? [];
|
|
34
|
+
const images = message.images ?? [];
|
|
35
|
+
if (files.length === 0 && images.length === 0)
|
|
36
|
+
continue;
|
|
37
|
+
groups.push({
|
|
38
|
+
messageId: message.id,
|
|
39
|
+
...(message.timestamp === undefined
|
|
40
|
+
? {}
|
|
41
|
+
: { timestamp: message.timestamp }),
|
|
42
|
+
files,
|
|
43
|
+
images,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return groups;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=chat-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-files.js","sourceRoot":"","sources":["../../src/client/chat-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,oBAAoB,CAClC,MAAkC;IAElC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA8B;IAE9B,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACxD,MAAM,CAAC,IAAI,CAAC;YACV,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YACrC,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { memo, Fragment } from "react";
|
|
3
|
-
import { SourceIcon } from "./
|
|
3
|
+
import { SourceIcon } from "./QaSourcesPanel.js";
|
|
4
4
|
import { sourceFileName } from "./source-refs.js";
|
|
5
5
|
const INLINE = /(\[[^\]]+\]\([^\s)]+\)|`[^`]+`|\*\*[^*]+\*\*|\*[^*]+\*)/gu;
|
|
6
6
|
const TABLE_SEPARATOR = /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/u;
|