@playcraft/common 0.0.55 → 0.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/agent/competitor-report.d.ts +165 -0
  2. package/dist/agent/competitor-report.d.ts.map +1 -0
  3. package/dist/agent/competitor-report.js +261 -0
  4. package/dist/agent/competitor-report.js.map +1 -0
  5. package/dist/agent/context-usage.d.ts +8 -1
  6. package/dist/agent/context-usage.d.ts.map +1 -1
  7. package/dist/agent/context-usage.js +6 -1
  8. package/dist/agent/context-usage.js.map +1 -1
  9. package/dist/agent/index.d.ts +6 -0
  10. package/dist/agent/index.d.ts.map +1 -1
  11. package/dist/agent/index.js +6 -0
  12. package/dist/agent/index.js.map +1 -1
  13. package/dist/agent/model-context-window.d.ts.map +1 -1
  14. package/dist/agent/model-context-window.js +40 -4
  15. package/dist/agent/model-context-window.js.map +1 -1
  16. package/dist/agent/openai-responses-api.d.ts +18 -0
  17. package/dist/agent/openai-responses-api.d.ts.map +1 -0
  18. package/dist/agent/openai-responses-api.js +28 -0
  19. package/dist/agent/openai-responses-api.js.map +1 -0
  20. package/dist/agent/reference-images.d.ts +66 -0
  21. package/dist/agent/reference-images.d.ts.map +1 -0
  22. package/dist/agent/reference-images.js +181 -0
  23. package/dist/agent/reference-images.js.map +1 -0
  24. package/dist/agent/runtime-failure.d.ts +31 -0
  25. package/dist/agent/runtime-failure.d.ts.map +1 -0
  26. package/dist/agent/runtime-failure.js +83 -0
  27. package/dist/agent/runtime-failure.js.map +1 -0
  28. package/dist/agent/session-title.d.ts +8 -0
  29. package/dist/agent/session-title.d.ts.map +1 -0
  30. package/dist/agent/session-title.js +16 -0
  31. package/dist/agent/session-title.js.map +1 -0
  32. package/dist/agent/turn.d.ts +8 -0
  33. package/dist/agent/turn.d.ts.map +1 -0
  34. package/dist/agent/turn.js +7 -0
  35. package/dist/agent/turn.js.map +1 -0
  36. package/dist/agent-jobs/identity.d.ts +8 -0
  37. package/dist/agent-jobs/identity.d.ts.map +1 -0
  38. package/dist/agent-jobs/identity.js +32 -0
  39. package/dist/agent-jobs/identity.js.map +1 -0
  40. package/dist/agent-jobs/index.d.ts +34 -0
  41. package/dist/agent-jobs/index.d.ts.map +1 -0
  42. package/dist/agent-jobs/index.js +39 -0
  43. package/dist/agent-jobs/index.js.map +1 -0
  44. package/dist/agent-jobs/legacy-http-gone.d.ts +13 -0
  45. package/dist/agent-jobs/legacy-http-gone.d.ts.map +1 -0
  46. package/dist/agent-jobs/legacy-http-gone.js +15 -0
  47. package/dist/agent-jobs/legacy-http-gone.js.map +1 -0
  48. package/dist/agent-jobs/legacy-run-task.d.ts +12 -0
  49. package/dist/agent-jobs/legacy-run-task.d.ts.map +1 -0
  50. package/dist/agent-jobs/legacy-run-task.js +14 -0
  51. package/dist/agent-jobs/legacy-run-task.js.map +1 -0
  52. package/dist/agent-jobs/portal-sandbox-team-mount.d.ts +8 -0
  53. package/dist/agent-jobs/portal-sandbox-team-mount.d.ts.map +1 -0
  54. package/dist/agent-jobs/portal-sandbox-team-mount.js +10 -0
  55. package/dist/agent-jobs/portal-sandbox-team-mount.js.map +1 -0
  56. package/dist/agent-jobs/runtime-metrics.d.ts +12 -0
  57. package/dist/agent-jobs/runtime-metrics.d.ts.map +1 -0
  58. package/dist/agent-jobs/runtime-metrics.js +19 -0
  59. package/dist/agent-jobs/runtime-metrics.js.map +1 -0
  60. package/dist/agent-jobs/runtime-timing.d.ts +21 -0
  61. package/dist/agent-jobs/runtime-timing.d.ts.map +1 -0
  62. package/dist/agent-jobs/runtime-timing.js +20 -0
  63. package/dist/agent-jobs/runtime-timing.js.map +1 -0
  64. package/dist/agent-jobs/runtime-v2.d.ts +8 -0
  65. package/dist/agent-jobs/runtime-v2.d.ts.map +1 -0
  66. package/dist/agent-jobs/runtime-v2.js +10 -0
  67. package/dist/agent-jobs/runtime-v2.js.map +1 -0
  68. package/dist/agent-messages/db-message-converter.d.ts +61 -0
  69. package/dist/agent-messages/db-message-converter.d.ts.map +1 -0
  70. package/dist/agent-messages/db-message-converter.js +478 -0
  71. package/dist/agent-messages/db-message-converter.js.map +1 -0
  72. package/dist/agent-messages/index.d.ts +4 -0
  73. package/dist/agent-messages/index.d.ts.map +1 -0
  74. package/dist/agent-messages/index.js +4 -0
  75. package/dist/agent-messages/index.js.map +1 -0
  76. package/dist/agent-messages/message-merge.d.ts +31 -0
  77. package/dist/agent-messages/message-merge.d.ts.map +1 -0
  78. package/dist/agent-messages/message-merge.js +221 -0
  79. package/dist/agent-messages/message-merge.js.map +1 -0
  80. package/dist/agent-messages/runtime-user-messages.d.ts +51 -0
  81. package/dist/agent-messages/runtime-user-messages.d.ts.map +1 -0
  82. package/dist/agent-messages/runtime-user-messages.js +296 -0
  83. package/dist/agent-messages/runtime-user-messages.js.map +1 -0
  84. package/dist/index.d.ts +2 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +2 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/prefab/index.d.ts +1 -0
  89. package/dist/prefab/index.d.ts.map +1 -1
  90. package/dist/prefab/index.js +1 -0
  91. package/dist/prefab/index.js.map +1 -1
  92. package/dist/prefab/schema-condition.d.ts +27 -0
  93. package/dist/prefab/schema-condition.d.ts.map +1 -0
  94. package/dist/prefab/schema-condition.js +107 -0
  95. package/dist/prefab/schema-condition.js.map +1 -0
  96. package/dist/prefab/schema-walker.d.ts +46 -4
  97. package/dist/prefab/schema-walker.d.ts.map +1 -1
  98. package/dist/prefab/schema-walker.js +155 -11
  99. package/dist/prefab/schema-walker.js.map +1 -1
  100. package/dist/prefab/types.d.ts +21 -2
  101. package/dist/prefab/types.d.ts.map +1 -1
  102. package/dist/recommend/atom-graph/basic-atom-graph.d.ts.map +1 -1
  103. package/dist/recommend/atom-graph/basic-atom-graph.js +80 -63
  104. package/dist/recommend/atom-graph/basic-atom-graph.js.map +1 -1
  105. package/dist/recommend/atom-graph/basic-atom-skill-graph.d.ts.map +1 -1
  106. package/dist/recommend/atom-graph/basic-atom-skill-graph.js +8 -0
  107. package/dist/recommend/atom-graph/basic-atom-skill-graph.js.map +1 -1
  108. package/dist/storage/cos.d.ts +4 -4
  109. package/dist/storage/cos.d.ts.map +1 -1
  110. package/dist/storage/cos.js +19 -1
  111. package/dist/storage/cos.js.map +1 -1
  112. package/dist/storage/interface.d.ts +5 -1
  113. package/dist/storage/interface.d.ts.map +1 -1
  114. package/package.json +32 -2
@@ -0,0 +1,478 @@
1
+ function isRecord(obj) {
2
+ return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
3
+ }
4
+ export function parseContentBlocks(content) {
5
+ if (typeof content === 'string') {
6
+ try {
7
+ const parsed = JSON.parse(content);
8
+ if (Array.isArray(parsed))
9
+ return normalizeContentBlocks(parsed);
10
+ if (parsed && typeof parsed === 'object')
11
+ return normalizeContentBlocks([parsed]);
12
+ }
13
+ catch {
14
+ // plain text
15
+ }
16
+ return content ? [{ type: 'text', text: content }] : [];
17
+ }
18
+ if (Array.isArray(content))
19
+ return normalizeContentBlocks(content);
20
+ if (content && typeof content === 'object' && !Array.isArray(content)) {
21
+ return normalizeContentBlocks([content]);
22
+ }
23
+ return [];
24
+ }
25
+ function normalizeContentBlocks(raw) {
26
+ const result = [];
27
+ for (const p of raw) {
28
+ if (!isRecord(p))
29
+ continue;
30
+ const obj = p;
31
+ if (obj.type === 'text' && typeof obj.text === 'string') {
32
+ result.push({ type: 'text', text: obj.text });
33
+ }
34
+ else if (obj.type === 'reasoning' && typeof obj.text === 'string') {
35
+ result.push({ type: 'reasoning', text: obj.text });
36
+ }
37
+ else if ((obj.type === 'tool-call' || obj.type === 'tool_call') &&
38
+ typeof obj.toolCallId === 'string' &&
39
+ typeof obj.toolName === 'string') {
40
+ result.push({
41
+ type: 'tool-call',
42
+ toolCallId: obj.toolCallId,
43
+ toolName: obj.toolName,
44
+ input: obj.args ?? obj.input,
45
+ args: obj.args ?? obj.input,
46
+ });
47
+ }
48
+ else if ((obj.type === 'tool-result' || obj.type === 'tool_result') &&
49
+ typeof obj.toolCallId === 'string') {
50
+ result.push({
51
+ type: 'tool-result',
52
+ toolCallId: obj.toolCallId,
53
+ toolName: typeof obj.toolName === 'string' ? obj.toolName : undefined,
54
+ result: obj.result ?? obj.output ?? obj.content,
55
+ output: obj.output ?? obj.result ?? obj.content,
56
+ isError: obj.isError,
57
+ });
58
+ }
59
+ }
60
+ return result;
61
+ }
62
+ export function unwrapAiSdkToolOutput(raw) {
63
+ if (raw == null)
64
+ return raw;
65
+ if (typeof raw === 'string') {
66
+ const t = raw.trim();
67
+ if ((t.startsWith('{') && t.endsWith('}')) ||
68
+ (t.startsWith('[') && t.endsWith(']'))) {
69
+ try {
70
+ return unwrapAiSdkToolOutput(JSON.parse(raw));
71
+ }
72
+ catch {
73
+ return raw;
74
+ }
75
+ }
76
+ return raw;
77
+ }
78
+ if (typeof raw !== 'object' || Array.isArray(raw))
79
+ return raw;
80
+ const o = raw;
81
+ if (o.type === 'json' &&
82
+ o.value != null &&
83
+ typeof o.value === 'object' &&
84
+ !Array.isArray(o.value)) {
85
+ return unwrapAiSdkToolOutput(o.value);
86
+ }
87
+ if (o.type === 'text' && typeof o.value === 'string') {
88
+ return unwrapAiSdkToolOutput(o.value);
89
+ }
90
+ return raw;
91
+ }
92
+ function buildToolResults(rows) {
93
+ const toolResults = new Map();
94
+ for (const row of rows) {
95
+ if (row.role !== 'tool' && row.role !== 'toolResult')
96
+ continue;
97
+ for (const b of parseContentBlocks(row.content)) {
98
+ if (b.type === 'tool-result') {
99
+ toolResults.set(b.toolCallId, b.result ?? b.output ?? null);
100
+ }
101
+ }
102
+ }
103
+ return toolResults;
104
+ }
105
+ function contentBlocksToParts(blocks, toolResults) {
106
+ const parts = [];
107
+ for (const b of blocks) {
108
+ if (b.type === 'text') {
109
+ if (b.text)
110
+ parts.push({ type: 'text', text: b.text });
111
+ }
112
+ else if (b.type === 'reasoning') {
113
+ if (b.text) {
114
+ parts.push({
115
+ type: 'reasoning',
116
+ text: b.text,
117
+ state: 'done',
118
+ });
119
+ }
120
+ }
121
+ else if (b.type === 'tool-call') {
122
+ const toolResult = toolResults.get(b.toolCallId);
123
+ const output = unwrapAiSdkToolOutput(toolResult ?? null);
124
+ const hasOutput = toolResult !== undefined && toolResult !== null;
125
+ parts.push({
126
+ type: `tool-${b.toolName}`,
127
+ toolCallId: b.toolCallId,
128
+ state: hasOutput ? 'output-available' : 'input-available',
129
+ input: b.input ?? b.args,
130
+ output: output ?? null,
131
+ });
132
+ }
133
+ }
134
+ return parts;
135
+ }
136
+ function earliestCreatedAt(rows) {
137
+ let best;
138
+ let bestMs = Number.POSITIVE_INFINITY;
139
+ for (const row of rows) {
140
+ if (!row.createdAt)
141
+ continue;
142
+ const ms = new Date(row.createdAt).getTime();
143
+ if (Number.isNaN(ms) || ms >= bestMs)
144
+ continue;
145
+ bestMs = ms;
146
+ best = row.createdAt;
147
+ }
148
+ return best;
149
+ }
150
+ function rowToUiMessage(row) {
151
+ if (row.messageFormat === 'ui_v1' && row.content && typeof row.content === 'object') {
152
+ const ui = row.content;
153
+ if (typeof ui.id === 'string' && ui.role && Array.isArray(ui.parts)) {
154
+ return {
155
+ ...ui,
156
+ _agentId: row.agentId ?? ui._agentId,
157
+ _agentName: row.agentName ?? ui._agentName,
158
+ _createdAt: row.createdAt ?? ui._createdAt,
159
+ };
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+ function convertManagerGroup(key, rows, globalToolResults) {
165
+ const toolResults = new Map(globalToolResults);
166
+ for (const row of rows) {
167
+ if (row.role !== 'tool' && row.role !== 'toolResult')
168
+ continue;
169
+ for (const b of parseContentBlocks(row.content)) {
170
+ if (b.type === 'tool-result') {
171
+ toolResults.set(b.toolCallId, b.result ?? b.output ?? null);
172
+ }
173
+ }
174
+ }
175
+ const byRole = new Map();
176
+ for (const row of rows) {
177
+ const role = row.role;
178
+ if (role !== 'user' && role !== 'assistant')
179
+ continue;
180
+ if (!byRole.has(role))
181
+ byRole.set(role, []);
182
+ const parts = byRole.get(role);
183
+ const blocks = parseContentBlocks(row.content);
184
+ if (role === 'assistant' &&
185
+ row.reasoningContent &&
186
+ !blocks.some((b) => b.type === 'reasoning')) {
187
+ parts.push({
188
+ type: 'reasoning',
189
+ text: row.reasoningContent,
190
+ state: 'done',
191
+ });
192
+ }
193
+ parts.push(...contentBlocksToParts(blocks, toolResults));
194
+ }
195
+ const createdAt = earliestCreatedAt(rows);
196
+ const result = [];
197
+ for (const [role, parts] of byRole) {
198
+ if (parts.length === 0)
199
+ continue;
200
+ result.push({
201
+ id: `${key}__${role}`,
202
+ role: role,
203
+ parts,
204
+ ...(createdAt ? { _createdAt: createdAt } : {}),
205
+ });
206
+ }
207
+ return result;
208
+ }
209
+ /**
210
+ * A HITL sub-agent persists one ui_v1 row before suspend (with the ask_user /
211
+ * submit_plan tool-call in `input-available` state) and another after resume
212
+ * (which often re-includes the SAME tool-call, now `output-available`). Naively
213
+ * concatenating parts therefore renders the pending widget twice — once stuck
214
+ * as awaiting input. Collapse tool parts by toolCallId, preferring the resolved
215
+ * copy, and backfill any still-pending part from the global tool-result map
216
+ * (sub-agent HITL outputs are persisted as manager-scoped tool rows).
217
+ */
218
+ function dedupeSubAgentToolParts(parts, globalToolResults) {
219
+ const isResolved = (p) => p.state === 'output-available' ||
220
+ (p.output != null && p.state !== 'input-available');
221
+ const indexByToolCallId = new Map();
222
+ const result = [];
223
+ for (const part of parts) {
224
+ const p = part;
225
+ const isTool = typeof p.type === 'string' && p.type.startsWith('tool-') && !!p.toolCallId;
226
+ if (!isTool) {
227
+ result.push(part);
228
+ continue;
229
+ }
230
+ const toolCallId = p.toolCallId;
231
+ const existingIdx = indexByToolCallId.get(toolCallId);
232
+ if (existingIdx === undefined) {
233
+ indexByToolCallId.set(toolCallId, result.length);
234
+ result.push(part);
235
+ continue;
236
+ }
237
+ // Duplicate tool-call: keep whichever copy is resolved.
238
+ const existing = result[existingIdx];
239
+ if (!isResolved(existing) && isResolved(p)) {
240
+ result[existingIdx] = part;
241
+ }
242
+ }
243
+ // Backfill any tool part still pending using the global tool-result map.
244
+ return result.map((part) => {
245
+ const p = part;
246
+ const isTool = typeof p.type === 'string' && p.type.startsWith('tool-') && !!p.toolCallId;
247
+ if (!isTool || isResolved(p))
248
+ return part;
249
+ if (!globalToolResults.has(p.toolCallId))
250
+ return part;
251
+ const output = unwrapAiSdkToolOutput(globalToolResults.get(p.toolCallId) ?? null);
252
+ return {
253
+ ...part,
254
+ state: 'output-available',
255
+ output,
256
+ };
257
+ });
258
+ }
259
+ function convertSubAgentGroup(agentId, agentName, rows, globalToolResults) {
260
+ // A HITL sub-agent persists MULTIPLE ui_v1 rows for the same agentId:
261
+ // one before suspend (intro + ask_user) and one after resume (the real work).
262
+ // Merge every ui_v1 row's parts in order — taking only the first would drop
263
+ // all post-resume content.
264
+ const createdAt = earliestCreatedAt(rows);
265
+ const uiRows = rows.filter((r) => r.messageFormat === 'ui_v1');
266
+ if (uiRows.length > 0) {
267
+ const mergedParts = [];
268
+ let resolvedName = agentName;
269
+ for (const r of uiRows) {
270
+ const msg = rowToUiMessage(r);
271
+ if (!msg)
272
+ continue;
273
+ mergedParts.push(...(msg.parts ?? []));
274
+ if (msg._agentName)
275
+ resolvedName = msg._agentName;
276
+ }
277
+ if (mergedParts.length > 0) {
278
+ return {
279
+ id: `sub:${agentId}`,
280
+ role: 'assistant',
281
+ parts: dedupeSubAgentToolParts(mergedParts, globalToolResults),
282
+ _agentId: agentId,
283
+ _agentName: resolvedName,
284
+ ...(createdAt ? { _createdAt: createdAt } : {}),
285
+ };
286
+ }
287
+ }
288
+ const toolResults = new Map(globalToolResults);
289
+ for (const row of rows) {
290
+ if (row.role !== 'tool' && row.role !== 'toolResult')
291
+ continue;
292
+ for (const b of parseContentBlocks(row.content)) {
293
+ if (b.type === 'tool-result') {
294
+ toolResults.set(b.toolCallId, b.result ?? b.output ?? null);
295
+ }
296
+ }
297
+ }
298
+ const parts = [];
299
+ for (const row of rows) {
300
+ if (row.role !== 'assistant')
301
+ continue;
302
+ parts.push(...contentBlocksToParts(parseContentBlocks(row.content), toolResults));
303
+ }
304
+ if (parts.length === 0)
305
+ return null;
306
+ return {
307
+ id: `sub:${agentId}`,
308
+ role: 'assistant',
309
+ parts,
310
+ _agentId: agentId,
311
+ _agentName: agentName,
312
+ ...(createdAt ? { _createdAt: createdAt } : {}),
313
+ };
314
+ }
315
+ /**
316
+ * Split Manager messages at `spawn_executor` boundaries for chronological bubbles.
317
+ *
318
+ * One Manager turn is a single UIMessage with many parts (plan → spawn →
319
+ * "started" text). Rendering that as one bubble looks like later content was
320
+ * merged into an earlier bubble. Split into:
321
+ * pre (up to & including spawn) → tail (post-spawn text) → sub-agent
322
+ * so time order is: Manager announces → Manager follow-up → PM asks.
323
+ *
324
+ * (Older order was pre → sub → tail, which put PM questions above Manager's
325
+ * "production started" text.)
326
+ */
327
+ export function interleaveSpawnMessages(messages) {
328
+ const subAgentMsgMap = new Map();
329
+ for (const msg of messages) {
330
+ if (msg._agentId)
331
+ subAgentMsgMap.set(msg._agentId, msg);
332
+ }
333
+ if (subAgentMsgMap.size === 0)
334
+ return messages;
335
+ const insertedAgentIds = new Set();
336
+ const result = [];
337
+ for (const msg of messages) {
338
+ if (msg._agentId)
339
+ continue;
340
+ if (msg.role !== 'assistant') {
341
+ result.push(msg);
342
+ continue;
343
+ }
344
+ const spawnPoints = [];
345
+ for (let i = 0; i < msg.parts.length; i++) {
346
+ const part = msg.parts[i];
347
+ const out = unwrapAiSdkToolOutput(part.output ?? null);
348
+ if (part.type === 'tool-spawn_executor' &&
349
+ out &&
350
+ typeof out === 'object' &&
351
+ typeof out.agentId === 'string') {
352
+ spawnPoints.push({ index: i, agentId: out.agentId });
353
+ }
354
+ }
355
+ if (spawnPoints.length === 0) {
356
+ result.push(msg);
357
+ continue;
358
+ }
359
+ // Collect spawned sub-agents in spawn order (deduped).
360
+ const spawnedSubs = [];
361
+ for (const { agentId } of spawnPoints) {
362
+ if (insertedAgentIds.has(agentId))
363
+ continue;
364
+ const subMsg = subAgentMsgMap.get(agentId);
365
+ if (!subMsg)
366
+ continue;
367
+ spawnedSubs.push(subMsg);
368
+ insertedAgentIds.add(agentId);
369
+ }
370
+ // Emit Manager segments first (pre… then tail), then all spawned sub-agents.
371
+ // Chronological: Manager work + announcement → PM questions.
372
+ let cursor = 0;
373
+ for (let s = 0; s < spawnPoints.length; s++) {
374
+ const { index } = spawnPoints[s];
375
+ const preParts = msg.parts.slice(cursor, index + 1);
376
+ if (preParts.length > 0) {
377
+ const segId = spawnPoints.length === 1 ? msg.id : `${msg.id}__seg${s}`;
378
+ result.push({ ...msg, id: segId, parts: preParts });
379
+ }
380
+ cursor = index + 1;
381
+ }
382
+ const tailParts = msg.parts.slice(cursor);
383
+ if (tailParts.length > 0) {
384
+ const hasContent = tailParts.some((p) => {
385
+ const pp = p;
386
+ if (pp.type === 'text')
387
+ return !!pp.text?.trim();
388
+ return pp.type.startsWith('tool-');
389
+ });
390
+ if (hasContent) {
391
+ result.push({ ...msg, id: `${msg.id}__tail`, parts: tailParts });
392
+ }
393
+ }
394
+ for (const subMsg of spawnedSubs) {
395
+ result.push(subMsg);
396
+ }
397
+ }
398
+ for (const msg of messages) {
399
+ if (msg._agentId && !insertedAgentIds.has(msg._agentId)) {
400
+ result.push(msg);
401
+ }
402
+ }
403
+ return result;
404
+ }
405
+ /** Convert legacy DB rows to AgentUIMessage list (manager + sub-agent). */
406
+ export function dbRowsToAgentUiMessages(rows) {
407
+ const sorted = rows.slice().sort((a, b) => {
408
+ if (!a.createdAt || !b.createdAt)
409
+ return 0;
410
+ return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();
411
+ });
412
+ const groups = [];
413
+ const managerByKey = new Map();
414
+ const subAgentByAgentId = new Map();
415
+ const globalToolResults = buildToolResults(sorted);
416
+ sorted.forEach((m, i) => {
417
+ if (m.agentId) {
418
+ const existing = subAgentByAgentId.get(m.agentId);
419
+ if (existing) {
420
+ existing.rows.push(m);
421
+ }
422
+ else {
423
+ const g = {
424
+ kind: 'subagent',
425
+ agentId: m.agentId,
426
+ agentName: m.agentName ?? m.agentId.slice(0, 8),
427
+ rows: [m],
428
+ };
429
+ subAgentByAgentId.set(m.agentId, g);
430
+ groups.push(g);
431
+ }
432
+ }
433
+ else {
434
+ const key = m.messageId ?? `msg-${i}`;
435
+ const existing = managerByKey.get(key);
436
+ if (existing) {
437
+ existing.rows.push(m);
438
+ }
439
+ else {
440
+ const g = { kind: 'manager', key, rows: [m] };
441
+ managerByKey.set(key, g);
442
+ groups.push(g);
443
+ }
444
+ }
445
+ });
446
+ const result = [];
447
+ for (const group of groups) {
448
+ if (group.kind === 'manager') {
449
+ result.push(...convertManagerGroup(group.key, group.rows, globalToolResults));
450
+ }
451
+ else {
452
+ const msg = convertSubAgentGroup(group.agentId, group.agentName, group.rows, globalToolResults);
453
+ if (msg)
454
+ result.push(msg);
455
+ }
456
+ }
457
+ return interleaveSpawnMessages(result);
458
+ }
459
+ /** Manager-only rows → flat UIMessage[] (no sub-agent interleaving). */
460
+ export function dbRowsToManagerUiMessages(rows) {
461
+ const managerRows = rows.filter((r) => !r.agentId);
462
+ if (managerRows.length === 0)
463
+ return [];
464
+ const globalToolResults = buildToolResults(managerRows);
465
+ const groups = new Map();
466
+ managerRows.forEach((m, i) => {
467
+ const key = m.messageId ?? `msg-${i}`;
468
+ const g = groups.get(key) ?? [];
469
+ g.push(m);
470
+ groups.set(key, g);
471
+ });
472
+ const result = [];
473
+ for (const [key, groupRows] of groups) {
474
+ result.push(...convertManagerGroup(key, groupRows, globalToolResults));
475
+ }
476
+ return result;
477
+ }
478
+ //# sourceMappingURL=db-message-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-message-converter.js","sourceRoot":"","sources":["../../src/agent-messages/db-message-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './db-message-converter.js';
2
+ export * from './message-merge.js';
3
+ export * from './runtime-user-messages.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-messages/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './db-message-converter.js';
2
+ export * from './message-merge.js';
3
+ export * from './runtime-user-messages.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-messages/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { UIMessage } from 'ai';
2
+ export declare function isSubAgentMessage(message: UIMessage): boolean;
3
+ /** Score message completeness for merge decisions (higher = richer). */
4
+ export declare function scoreMessageRichness(message: UIMessage): number;
5
+ /**
6
+ * Merge two copies of the same sub-agent bubble by toolCallId.
7
+ * Whole-message richness scoring can drop a later pending ask_user when the
8
+ * stream copy only has an earlier answered ask_user (fewer parts but higher
9
+ * per-part score from output-available).
10
+ */
11
+ export declare function mergeSubAgentPartsByToolCallId(preferred: UIMessage, other: UIMessage): UIMessage;
12
+ /**
13
+ * Merge live useChat messages with DB-reloaded messages after a stream ends.
14
+ *
15
+ * The DB form is the source of truth for ordering AND structure: it is already
16
+ * interleaved (manager pre + tail segments, then sub-agent bubbles). The live
17
+ * stream form is flat (spawn inline, sub-agents appended via SSE). Naively
18
+ * concatenating the two produces duplicates (flat manager vs DB `__tail`), wrong
19
+ * order, and — for user messages, whose ids never match between useChat and the
20
+ * backend — the same prompt twice. This merge:
21
+ * - uses DB messages as the ordered backbone;
22
+ * - never merges a flat stream manager into a DB message the backend split into
23
+ * segments (that would re-inline the tail → duplicate);
24
+ * - prefers the richer copy for sub-agent bubbles so an optimistic HITL answer
25
+ * (output-available in the stream) is not reverted to the DB's pending copy;
26
+ * - only appends stream messages with no DB counterpart, deduping user prompts
27
+ * across mismatched ids by text.
28
+ * It is idempotent: re-merging its own output against the same DB is a no-op.
29
+ */
30
+ export declare function mergeSessionMessages(streamMessages: UIMessage[], dbMessages: UIMessage[]): UIMessage[];
31
+ //# sourceMappingURL=message-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-merge.d.ts","sourceRoot":"","sources":["../../src/agent-messages/message-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAWpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAM7D;AAED,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAY/D;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,SAAS,GACf,SAAS,CAgFX;AAsCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,SAAS,EAAE,EAC3B,UAAU,EAAE,SAAS,EAAE,GACtB,SAAS,EAAE,CA2Db"}