@yadsh/dsh-qa-surface 0.1.0 → 0.2.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 (89) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +162 -14
  3. package/SPEC-dsh-qa-surface.md +600 -96
  4. package/capability-policy.json +5 -0
  5. package/compatibility.json +7 -1
  6. package/cordis.patch.yml +11 -0
  7. package/docs/ARCHITECTURE.md +49 -7
  8. package/docs/COMPATIBILITY.md +5 -4
  9. package/docs/CONFIGURATION.md +96 -2
  10. package/lib/attestation.js +10 -0
  11. package/lib/attestation.js.map +1 -0
  12. package/lib/client/QaConfigController.js +111 -4
  13. package/lib/client/QaConfigController.js.map +1 -1
  14. package/lib/client/QaSessionController.js +501 -119
  15. package/lib/client/QaSessionController.js.map +1 -1
  16. package/lib/client/QaSurface.js +137 -20
  17. package/lib/client/QaSurface.js.map +1 -1
  18. package/lib/client/QaTranscriptAdapter.js +534 -45
  19. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  20. package/lib/client/attestation.js +60 -0
  21. package/lib/client/attestation.js.map +1 -0
  22. package/lib/client/chat-index.js +86 -0
  23. package/lib/client/chat-index.js.map +1 -0
  24. package/lib/client/components/Markdown.js +75 -5
  25. package/lib/client/components/Markdown.js.map +1 -1
  26. package/lib/client/components/QaAgentsDrawer.js +40 -0
  27. package/lib/client/components/QaAgentsDrawer.js.map +1 -0
  28. package/lib/client/components/QaComposer.js +132 -15
  29. package/lib/client/components/QaComposer.js.map +1 -1
  30. package/lib/client/components/QaMessage.js +184 -10
  31. package/lib/client/components/QaMessage.js.map +1 -1
  32. package/lib/client/components/QaSidebar.js +124 -0
  33. package/lib/client/components/QaSidebar.js.map +1 -0
  34. package/lib/client/components/QaSourcesDrawer.js +46 -0
  35. package/lib/client/components/QaSourcesDrawer.js.map +1 -0
  36. package/lib/client/components/QaWorkGroup.js +135 -0
  37. package/lib/client/components/QaWorkGroup.js.map +1 -0
  38. package/lib/client/components/VariantSwitcher.js +29 -0
  39. package/lib/client/components/VariantSwitcher.js.map +1 -0
  40. package/lib/client/components/format.js +48 -0
  41. package/lib/client/components/format.js.map +1 -0
  42. package/lib/client/index.js +77 -34
  43. package/lib/client/index.js.map +1 -1
  44. package/lib/client/styles.js +308 -43
  45. package/lib/client/styles.js.map +1 -1
  46. package/lib/client/types.js +13 -0
  47. package/lib/client/types.js.map +1 -0
  48. package/lib/client/wait-for.js +49 -0
  49. package/lib/client/wait-for.js.map +1 -0
  50. package/lib/client.js +8228 -383
  51. package/lib/client.js.map +1 -1
  52. package/lib/config.js +61 -9
  53. package/lib/config.js.map +1 -1
  54. package/lib/index.js +166 -70
  55. package/lib/index.js.map +1 -1
  56. package/lib/lockdown-policy.js +20 -0
  57. package/lib/lockdown-policy.js.map +1 -0
  58. package/lib/resolve-config.js +122 -10
  59. package/lib/resolve-config.js.map +1 -1
  60. package/lib/secure-session.js +170 -0
  61. package/lib/secure-session.js.map +1 -0
  62. package/lib/typert.host.d.ts +3 -0
  63. package/lib/typert.host.js +191 -0
  64. package/lib/typert.remote-client.d.ts +24 -0
  65. package/lib/typert.remote-client.js +129 -0
  66. package/lib/types/attestation.d.ts +17 -0
  67. package/lib/types/client/QaConfigController.d.ts +34 -2
  68. package/lib/types/client/QaSessionController.d.ts +106 -19
  69. package/lib/types/client/QaSurface.d.ts +5 -4
  70. package/lib/types/client/QaTranscriptAdapter.d.ts +17 -2
  71. package/lib/types/client/attestation.d.ts +25 -0
  72. package/lib/types/client/chat-index.d.ts +28 -0
  73. package/lib/types/client/components/Markdown.d.ts +7 -3
  74. package/lib/types/client/components/QaAgentsDrawer.d.ts +25 -0
  75. package/lib/types/client/components/QaComposer.d.ts +12 -2
  76. package/lib/types/client/components/QaMessage.d.ts +14 -1
  77. package/lib/types/client/components/QaSidebar.d.ts +41 -0
  78. package/lib/types/client/components/QaSourcesDrawer.d.ts +8 -0
  79. package/lib/types/client/components/QaWorkGroup.d.ts +19 -0
  80. package/lib/types/client/components/VariantSwitcher.d.ts +19 -0
  81. package/lib/types/client/components/format.d.ts +9 -0
  82. package/lib/types/client/index.d.ts +1 -5
  83. package/lib/types/client/types.d.ts +29 -0
  84. package/lib/types/client/wait-for.d.ts +11 -0
  85. package/lib/types/index.d.ts +22 -6
  86. package/lib/types/lockdown-policy.d.ts +18 -0
  87. package/lib/types/secure-session.d.ts +22 -0
  88. package/lib/types/types.d.ts +148 -1
  89. package/package.json +76 -52
@@ -1,3 +1,60 @@
1
+ /**
2
+ * The hidden regeneration prompt. Regenerate sends this as an ordinary
3
+ * prompt — the session has no truncation seam, so a "variant" is a real
4
+ * follow-up turn — and the projection drops it from the visible transcript,
5
+ * leaving the consecutive answer turns to read as variants of one question.
6
+ */
7
+ export const QA_REGENERATE_MARKER = "Перегенерируй свой предыдущий ответ — дай новый вариант, не повторяя предыдущий.";
8
+ /**
9
+ * Durable image references carried by user content. The core ContentBlock
10
+ * vocabulary is not installed client-side, so the shape is matched
11
+ * structurally against the host contract ({type:"image", attachment:{...}}).
12
+ */
13
+ const SETTLED_HEAD = /^Background subagent ([0-9a-f][0-9a-f-]*) (finished|was stopped|ran out of room|declined the task|failed)/u;
14
+ const SETTLED_CLOSING = "Its closing message:";
15
+ const SETTLED_TITLES = Object.freeze({
16
+ finished: "завершён",
17
+ "was stopped": "остановлен",
18
+ "ran out of room": "упёрся в лимит длины",
19
+ "declined the task": "отклонил задачу",
20
+ failed: "завершился ошибкой",
21
+ });
22
+ /** Fold the host settlement wording into a title plus the closing message. */
23
+ function parseSettlement(text) {
24
+ const head = SETTLED_HEAD.exec(text);
25
+ if (head === null)
26
+ return undefined;
27
+ const id = (head[1] ?? "").slice(0, 8);
28
+ const title = `Субагент ${id} ${SETTLED_TITLES[head[2] ?? "finished"] ?? "завершён"}`;
29
+ const closeAt = text.indexOf(SETTLED_CLOSING);
30
+ const body = closeAt === -1 ? "" : text.slice(closeAt + SETTLED_CLOSING.length).trim();
31
+ return {
32
+ title,
33
+ body: body.length <= 4_000 ? body : `${body.slice(0, 3_999)}…`,
34
+ };
35
+ }
36
+ function visibleContentImages(content) {
37
+ const images = [];
38
+ for (const block of content) {
39
+ if (typeof block !== "object" || block === null)
40
+ continue;
41
+ const record = block;
42
+ if (record.type !== "image")
43
+ continue;
44
+ const attachment = record.attachment;
45
+ const attachmentId = attachment?.attachmentId;
46
+ const mediaType = attachment?.mediaType;
47
+ if (typeof attachmentId !== "string" || attachmentId === "")
48
+ continue;
49
+ images.push({
50
+ attachmentId,
51
+ mediaType: (typeof mediaType === "string"
52
+ ? mediaType
53
+ : "image/png"),
54
+ });
55
+ }
56
+ return images;
57
+ }
1
58
  function visibleContentText(content) {
2
59
  return content
3
60
  .flatMap((block) => {
@@ -16,77 +73,509 @@ function visibleAssistantText(blocks) {
16
73
  .map((block) => block.text)
17
74
  .join("");
18
75
  }
19
- /** Project only end-user-safe text from the public DSH conversation snapshot. */
76
+ function flattenToolOutput(node) {
77
+ const parts = node.content.map((block) => block.type === "text" ? block.text : JSON.stringify(block, null, 2));
78
+ if (parts.length === 0 && node.error !== undefined) {
79
+ parts.push(`${node.error.name}: ${node.error.code}`);
80
+ }
81
+ return parts.join("\n") || null;
82
+ }
83
+ function formatToolInput(argsRaw) {
84
+ if (argsRaw === "")
85
+ return null;
86
+ try {
87
+ return JSON.stringify(JSON.parse(argsRaw), null, 2);
88
+ }
89
+ catch {
90
+ return argsRaw;
91
+ }
92
+ }
93
+ function firstLine(value) {
94
+ return value.split(/\r?\n/u, 1)[0]?.trim() ?? "";
95
+ }
96
+ function truncate(value, length = 140) {
97
+ return value.length <= length ? value : `${value.slice(0, length - 3)}...`;
98
+ }
99
+ function toolSummary(name, argsRaw) {
100
+ try {
101
+ const parsed = JSON.parse(argsRaw);
102
+ if (typeof parsed === "object" && parsed !== null) {
103
+ const values = parsed;
104
+ for (const key of [
105
+ "description",
106
+ "path",
107
+ "file_path",
108
+ "query",
109
+ "pattern",
110
+ "url",
111
+ "command",
112
+ ]) {
113
+ const value = values[key];
114
+ if (typeof value === "string" && value.trim() !== "") {
115
+ return truncate(firstLine(value));
116
+ }
117
+ }
118
+ const fallback = Object.values(values).find((value) => typeof value === "string" && value.trim() !== "");
119
+ if (fallback !== undefined)
120
+ return truncate(firstLine(fallback));
121
+ }
122
+ }
123
+ catch {
124
+ const raw = firstLine(argsRaw);
125
+ if (raw !== "")
126
+ return truncate(raw);
127
+ }
128
+ return name;
129
+ }
130
+ const TOOL_LABELS = Object.freeze({
131
+ bash: "Bash",
132
+ pwsh: "PowerShell",
133
+ read: "Чтение",
134
+ web_fetch: "Загрузка",
135
+ web_search: "Поиск",
136
+ grep: "Поиск",
137
+ glob: "Поиск",
138
+ write: "Запись",
139
+ edit: "Правка",
140
+ str_replace_editor: "Правка",
141
+ run_code: "Код",
142
+ subagent: "Субагент",
143
+ subagent_fork: "Субагент (форк)",
144
+ send_message: "Сообщение агенту",
145
+ list_agents: "Список агентов",
146
+ interrupt_agent: "Остановка агента",
147
+ });
148
+ /** The durable id a continuable launch reports back ("started subagent <id>"). */
149
+ const SUBAGENT_STARTED = /started subagent ([0-9a-f][0-9a-f-]*)/iu;
150
+ function toolLabel(name) {
151
+ return (TOOL_LABELS[name] ?? name.replaceAll("_", " ")) || "Инструмент";
152
+ }
153
+ function toolStatus(node) {
154
+ if (node.error?.code === "interrupted")
155
+ return "stopped";
156
+ return node.isError ? "error" : "ok";
157
+ }
158
+ /**
159
+ * Response timing for the message row, straight from the host-recorded step
160
+ * boundaries. Tokens per second is an estimate — the client never sees a
161
+ * token-count contract, so visible text is measured at the usual ≈4
162
+ * characters per token over the generation window (first token → completed).
163
+ */
164
+ function messageStats(text, timing) {
165
+ if (timing === undefined)
166
+ return undefined;
167
+ const start = timing.stepStartTime;
168
+ const first = timing.firstTokenTime;
169
+ const end = timing.completedTime;
170
+ if (start === null && first === null)
171
+ return undefined;
172
+ const durationMs = start === null
173
+ ? Math.max(0, end - (first ?? end))
174
+ : Math.max(0, end - start);
175
+ const ttftMs = start === null || first === null ? null : Math.max(0, first - start);
176
+ let tokensPerSecond = null;
177
+ if (first !== null && end > first && text.length > 0) {
178
+ tokensPerSecond = Math.round(text.length / 4 / ((end - first) / 1_000));
179
+ }
180
+ return { durationMs, ttftMs, tokensPerSecond };
181
+ }
182
+ function workTool(callId, name, argsRaw, status, startedAt, endedAt, output) {
183
+ const launched = name === "subagent" || name === "subagent_fork"
184
+ ? (SUBAGENT_STARTED.exec(output ?? "")?.[1] ??
185
+ SUBAGENT_STARTED.exec(argsRaw)?.[1])
186
+ : undefined;
187
+ return {
188
+ id: `tool:${callId}`,
189
+ kind: "tool",
190
+ name,
191
+ label: toolLabel(name),
192
+ summary: toolSummary(name, argsRaw),
193
+ input: formatToolInput(argsRaw),
194
+ output,
195
+ status,
196
+ ...(launched === undefined ? {} : { subagentId: launched }),
197
+ ...(startedAt === undefined ? {} : { startedAt }),
198
+ ...(endedAt === undefined ? {} : { endedAt }),
199
+ };
200
+ }
201
+ function getTurn(turns, turn) {
202
+ let buffer = turns.get(turn);
203
+ if (buffer === undefined) {
204
+ buffer = { turn, text: [], work: [] };
205
+ turns.set(turn, buffer);
206
+ }
207
+ return buffer;
208
+ }
209
+ function collectAssistant(node, turns, toolHeads, showReasoning) {
210
+ const turn = getTurn(turns, node.turn);
211
+ const text = visibleAssistantText(node.blocks);
212
+ if (text !== "") {
213
+ turn.text.push({
214
+ id: `assistant:${node.messageId ?? node.seq}`,
215
+ order: node.seq,
216
+ text,
217
+ status: "committed",
218
+ timestamp: node.time,
219
+ turn: node.turn,
220
+ stats: messageStats(text, node.timing),
221
+ });
222
+ }
223
+ node.blocks.forEach((block, index) => {
224
+ const order = node.seq + index / 1_000;
225
+ if (block.kind === "reasoning" && showReasoning && block.text.trim()) {
226
+ turn.work.push({
227
+ order,
228
+ item: {
229
+ id: `reasoning:${node.messageId ?? node.seq}:${index}`,
230
+ kind: "reasoning",
231
+ text: block.text,
232
+ status: "complete",
233
+ },
234
+ });
235
+ }
236
+ else if (block.kind === "tool-call" && block.callId !== "") {
237
+ toolHeads.set(block.callId, {
238
+ turn: node.turn,
239
+ order,
240
+ name: block.name,
241
+ argsRaw: block.argsRaw,
242
+ time: node.time,
243
+ });
244
+ }
245
+ });
246
+ }
247
+ function collectSettledTools(snapshot, turns, toolHeads) {
248
+ const settled = new Set();
249
+ let nearestTurn;
250
+ for (const node of snapshot.nodes) {
251
+ if (node.kind === "assistant")
252
+ nearestTurn = node.turn;
253
+ if (node.kind !== "tool-result" || node.isError)
254
+ continue;
255
+ const head = toolHeads.get(node.callId);
256
+ const turnNumber = head?.turn ?? nearestTurn;
257
+ if (turnNumber === undefined)
258
+ continue;
259
+ const name = head?.name ?? node.call?.name ?? node.callId;
260
+ const argsRaw = head?.argsRaw ?? node.call?.argsRaw ?? "";
261
+ getTurn(turns, turnNumber).work.push({
262
+ order: head?.order ?? node.seq,
263
+ item: workTool(node.callId, name, argsRaw, toolStatus(node), node.callTime ?? head?.time, node.time, flattenToolOutput(node)),
264
+ });
265
+ settled.add(node.callId);
266
+ }
267
+ return settled;
268
+ }
269
+ function collectRunningTool(call, turns, toolHeads) {
270
+ const head = toolHeads.get(call.callId);
271
+ getTurn(turns, call.turn).work.push({
272
+ order: head?.order ?? Number.MAX_SAFE_INTEGER - call.time,
273
+ item: workTool(call.callId, call.name, call.argsRaw, "running", call.time, undefined, null),
274
+ });
275
+ }
276
+ function emitTurn(snapshot, turn, output) {
277
+ const timing = snapshot.turnTimings.get(turn.turn);
278
+ const completed = timing?.endTime !== undefined || snapshot.turnEnds.has(turn.turn);
279
+ const sortedText = [...turn.text].sort((left, right) => left.order - right.order);
280
+ const partial = sortedText.find((message) => message.status === "streaming");
281
+ const committed = sortedText.filter((message) => message.status === "committed");
282
+ const hasVisibleActiveWork = snapshot.running &&
283
+ !completed &&
284
+ turn.work.some(({ item }) => item.status === "running");
285
+ const finalText = partial ?? (hasVisibleActiveWork ? undefined : committed.at(-1));
286
+ const progress = finalText === undefined
287
+ ? committed
288
+ : committed.filter((message) => message !== finalText);
289
+ for (const message of progress) {
290
+ turn.work.push({
291
+ order: message.order,
292
+ item: {
293
+ id: `progress:${message.id}`,
294
+ kind: "progress",
295
+ text: message.text,
296
+ status: "complete",
297
+ },
298
+ });
299
+ }
300
+ if (turn.work.length > 0) {
301
+ const items = [...turn.work]
302
+ .sort((left, right) => left.order - right.order)
303
+ .map(({ item }) => item);
304
+ const workOrder = Math.min(...turn.work.map(({ order }) => order), (finalText?.order ?? Number.MAX_SAFE_INTEGER) - 0.001);
305
+ output.push({
306
+ order: workOrder,
307
+ message: {
308
+ id: `work:${turn.turn}`,
309
+ role: "work",
310
+ turn: turn.turn,
311
+ status: completed || !snapshot.running ? "complete" : "running",
312
+ ...(timing?.startTime === undefined
313
+ ? {}
314
+ : { startedAt: timing.startTime }),
315
+ ...(timing?.endTime === undefined ? {} : { endedAt: timing.endTime }),
316
+ items,
317
+ },
318
+ });
319
+ }
320
+ else {
321
+ for (const message of progress) {
322
+ output.push({
323
+ order: message.order,
324
+ message: {
325
+ id: message.id,
326
+ role: "assistant",
327
+ text: message.text,
328
+ status: message.status,
329
+ turn: turn.turn,
330
+ ...(message.timestamp === undefined
331
+ ? {}
332
+ : { timestamp: message.timestamp }),
333
+ ...(message.stats === undefined ? {} : { stats: message.stats }),
334
+ },
335
+ });
336
+ }
337
+ }
338
+ if (finalText !== undefined) {
339
+ output.push({
340
+ order: finalText.order,
341
+ message: {
342
+ id: finalText.id,
343
+ role: "assistant",
344
+ text: finalText.text,
345
+ status: finalText.status,
346
+ turn: turn.turn,
347
+ ...(finalText.timestamp === undefined
348
+ ? {}
349
+ : { timestamp: finalText.timestamp }),
350
+ ...(finalText.stats === undefined ? {} : { stats: finalText.stats }),
351
+ },
352
+ });
353
+ }
354
+ }
355
+ /** Project end-user messages plus optional operator-approved work detail. */
20
356
  export function projectTranscript(snapshot, options = {}) {
21
- const messages = [];
357
+ const output = [];
358
+ const turns = new Map();
359
+ const toolHeads = new Map();
22
360
  for (const node of snapshot.nodes) {
23
361
  if (node.kind === "user" || node.kind === "steering") {
24
362
  const text = visibleContentText(node.content);
25
- if (text !== "") {
26
- messages.push({
363
+ const images = visibleContentImages(node.content);
364
+ if (text === QA_REGENERATE_MARKER)
365
+ continue;
366
+ if (text === "" && images.length === 0)
367
+ continue;
368
+ output.push({
369
+ order: node.seq,
370
+ message: {
27
371
  id: `${node.kind}:${node.seq}`,
28
372
  role: "user",
29
373
  text,
30
374
  status: "committed",
31
375
  timestamp: node.time,
32
- });
33
- }
34
- continue;
376
+ ...(images.length === 0 ? {} : { images }),
377
+ },
378
+ });
35
379
  }
36
- if (node.kind === "assistant") {
37
- const text = visibleAssistantText(node.blocks);
38
- if (text !== "") {
39
- messages.push({
40
- id: `assistant:${node.messageId ?? node.seq}`,
41
- role: "assistant",
42
- text,
43
- status: "committed",
380
+ else if (node.kind === "assistant") {
381
+ collectAssistant(node, turns, toolHeads, options.showReasoning === true);
382
+ }
383
+ else if (node.kind === "context") {
384
+ // Subagent settlement notices (the host injects them when a background
385
+ // child finishes) read as status rows; other context injections stay
386
+ // hidden — they are operator plumbing, not QA-facing content.
387
+ const label = node.provenance.label ?? "";
388
+ if (!label.toLowerCase().startsWith("subagent"))
389
+ continue;
390
+ const text = visibleContentText(node.content);
391
+ if (text.trim() === "")
392
+ continue;
393
+ const notice = parseSettlement(text);
394
+ output.push({
395
+ order: node.seq,
396
+ message: {
397
+ id: `context:${node.seq}`,
398
+ role: "system",
399
+ text: notice === undefined
400
+ ? text.replace(/\s+/gu, " ").trim().slice(0, 280)
401
+ : notice.title,
402
+ status: "info",
44
403
  timestamp: node.time,
45
- });
46
- }
47
- continue;
404
+ ...(notice === undefined ? {} : { notice }),
405
+ },
406
+ });
48
407
  }
49
- if (node.kind === "turn-error") {
50
- messages.push({
51
- id: `turn-error:${node.seq}`,
52
- role: "system",
53
- text: "The assistant could not complete this response.",
54
- status: "error",
55
- timestamp: node.time,
408
+ else if (node.kind === "turn-error") {
409
+ output.push({
410
+ order: node.seq,
411
+ message: {
412
+ id: `turn-error:${node.seq}`,
413
+ role: "system",
414
+ text: "Помощнику не удалось завершить ответ.",
415
+ status: "error",
416
+ timestamp: node.time,
417
+ },
56
418
  });
57
- continue;
58
419
  }
59
- if (node.kind === "turn-max-tokens") {
60
- messages.push({
61
- id: `turn-max-tokens:${node.seq}`,
62
- role: "system",
63
- text: "The response reached its length limit.",
64
- status: "info",
65
- timestamp: node.time,
420
+ else if (node.kind === "turn-max-tokens") {
421
+ output.push({
422
+ order: node.seq,
423
+ message: {
424
+ id: `turn-max-tokens:${node.seq}`,
425
+ role: "system",
426
+ text: "Ответ достиг предельной длины.",
427
+ status: "info",
428
+ timestamp: node.time,
429
+ },
66
430
  });
67
431
  }
68
432
  }
433
+ if (options.showToolActivity === true) {
434
+ const settled = collectSettledTools(snapshot, turns, toolHeads);
435
+ for (const call of snapshot.runningCalls) {
436
+ if (!settled.has(call.callId)) {
437
+ collectRunningTool(call, turns, toolHeads);
438
+ }
439
+ }
440
+ }
69
441
  if (snapshot.partial !== null) {
442
+ const partialTurn = getTurn(turns, snapshot.partial.turn);
70
443
  const text = visibleAssistantText(snapshot.partial.blocks);
71
444
  if (text !== "") {
72
- messages.push({
445
+ partialTurn.text.push({
73
446
  id: `assistant:partial:${snapshot.partial.turn}:${snapshot.partial.step}`,
74
- role: "assistant",
447
+ order: Number.MAX_SAFE_INTEGER - 1,
75
448
  text,
76
449
  status: "streaming",
77
450
  });
78
451
  }
79
- }
80
- if (options.showToolActivity === true &&
81
- snapshot.runningCalls.length > 0 &&
82
- snapshot.partial === null) {
83
- messages.push({
84
- id: "tool-activity",
85
- role: "system",
86
- text: "Working…",
87
- status: "info",
452
+ snapshot.partial.blocks.forEach((block, index) => {
453
+ if (block.kind === "reasoning" &&
454
+ options.showReasoning === true &&
455
+ block.text.trim()) {
456
+ partialTurn.work.push({
457
+ order: Number.MAX_SAFE_INTEGER - 10 + index / 1_000,
458
+ item: {
459
+ id: `reasoning:partial:${snapshot.partial?.turn}:${snapshot.partial?.step}:${index}`,
460
+ kind: "reasoning",
461
+ text: block.text,
462
+ status: "running",
463
+ },
464
+ });
465
+ }
466
+ else if (block.kind === "tool-call" &&
467
+ options.showToolActivity === true &&
468
+ block.callId !== "" &&
469
+ !snapshot.runningCalls.some((call) => call.callId === block.callId)) {
470
+ partialTurn.work.push({
471
+ order: Number.MAX_SAFE_INTEGER - 9 + index / 1_000,
472
+ item: workTool(block.callId, block.name, block.argsRaw, "running", undefined, undefined, null),
473
+ });
474
+ }
88
475
  });
89
476
  }
90
- return messages;
477
+ for (const turn of turns.values())
478
+ emitTurn(snapshot, turn, output);
479
+ return output
480
+ .sort((left, right) => left.order - right.order)
481
+ .map(({ message }) => message);
482
+ }
483
+ const SOURCE_TOOLS = Object.freeze({
484
+ web_fetch: "web",
485
+ web_search: "search",
486
+ read: "file",
487
+ read_image: "file",
488
+ });
489
+ function sourceTitle(kind, target) {
490
+ if (kind === "web") {
491
+ try {
492
+ return new URL(target).hostname;
493
+ }
494
+ catch {
495
+ return target;
496
+ }
497
+ }
498
+ if (kind === "file") {
499
+ const base = target.replaceAll("\\", "/").split("/").at(-1);
500
+ return base === undefined || base === "" ? target : base;
501
+ }
502
+ return target;
503
+ }
504
+ /** First meaningful line of a tool output, capped for the drawer. */
505
+ function sourceSnippet(output) {
506
+ const line = output === null
507
+ ? ""
508
+ : (output.split(/\r?\n/u).find((part) => part.trim() !== "") ?? "");
509
+ const compact = line.trim().replace(/\s+/gu, " ");
510
+ return compact.length <= 200 ? compact : `${compact.slice(0, 199)}…`;
511
+ }
512
+ /** Models occasionally wrap arguments in tags ("<path>...</path>") - strip them. */
513
+ function sourceTarget(value) {
514
+ return value.replace(/<\/?[a-zA-Z][^>]*>/gu, "").trim();
515
+ }
516
+ /** Whole tool output for the detail pane, capped hard. */
517
+ function sourceOutput(output) {
518
+ const text = (output ?? "").trim();
519
+ return text.length <= 4_000 ? text : `${text.slice(0, 3_999)}…`;
520
+ }
521
+ function sourceFromCall(id, name, argsRaw, output) {
522
+ const kind = SOURCE_TOOLS[name];
523
+ if (kind === undefined)
524
+ return null;
525
+ let target = null;
526
+ try {
527
+ const args = JSON.parse(argsRaw);
528
+ for (const key of ["url", "file_path", "path", "query", "pattern"]) {
529
+ const value = args[key];
530
+ if (typeof value === "string" && value.trim() !== "") {
531
+ target = sourceTarget(value);
532
+ break;
533
+ }
534
+ }
535
+ }
536
+ catch {
537
+ // A non-JSON head leaves the target unresolved.
538
+ }
539
+ // Without a resolvable target the row is noise (a failed search, an
540
+ // unnamed call) - the drawer shows sources, not tool errors.
541
+ if (target === null || target === "")
542
+ return null;
543
+ return {
544
+ id,
545
+ kind,
546
+ target,
547
+ // A search answers with a result list, so the query itself is the title.
548
+ title: kind === "search" ? target : sourceTitle(kind, target),
549
+ snippet: sourceSnippet(output),
550
+ output: sourceOutput(output),
551
+ };
552
+ }
553
+ /**
554
+ * Collect the sources this chat has actually touched, in first-use order:
555
+ * fetched pages, searches, and files read. This is the same tool activity the
556
+ * work groups render, projected as a flat citation-style list, so it carries
557
+ * no information beyond `ui.showToolActivity`.
558
+ */
559
+ export function projectSources(snapshot) {
560
+ const sources = [];
561
+ const seen = new Set();
562
+ const add = (source) => {
563
+ if (source === null)
564
+ return;
565
+ const key = `${source.kind}:${source.target}`;
566
+ if (seen.has(key))
567
+ return;
568
+ seen.add(key);
569
+ sources.push(source);
570
+ };
571
+ for (const node of snapshot.nodes) {
572
+ if (node.kind !== "tool-result" || node.isError)
573
+ continue;
574
+ add(sourceFromCall(`source:${node.callId}`, node.call?.name ?? node.callId, node.call?.argsRaw ?? "", flattenToolOutput(node)));
575
+ }
576
+ for (const call of snapshot.runningCalls) {
577
+ add(sourceFromCall(`source:${call.callId}`, call.name, call.argsRaw, null));
578
+ }
579
+ return sources;
91
580
  }
92
581
  //# sourceMappingURL=QaTranscriptAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QaTranscriptAdapter.js","sourceRoot":"","sources":["../../src/client/QaTranscriptAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QaTranscriptAdapter.js","sourceRoot":"","sources":["../../src/client/QaTranscriptAdapter.ts"],"names":[],"mappings":"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"}