@tea-agent/loop-agent 0.43.0 → 0.44.0-next.2
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/CHANGELOG.md +226 -146
- package/dist/build-stamp.json +3 -3
- package/dist/executors/pi-sdk-executor.js +29 -1
- package/dist/shared/wizard-local-telemetry.js +50 -0
- package/dist/worker/console/chat/chat-event-store.js +3 -0
- package/dist/worker/console/chat/db-connections.js +758 -0
- package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +1 -1
- package/dist/worker/console/chat/pi-runtime/custom-tools/sql-tools.js +627 -0
- package/dist/worker/console/chat/pi-runtime.js +66 -6
- package/dist/worker/console/chat/routes.js +154 -3
- package/dist/worker/console/chat/sdd-data-alignment.js +8 -31
- package/dist/worker/console/chat/timeline-message-order.js +22 -0
- package/dist/worker/console/chat/tools.js +34 -0
- package/dist/worker/console/chat/turn-process.js +43 -39
- package/dist/worker/console/dag-confirmation.js +3 -0
- package/dist/worker/console/dag-execution-receipt.js +3 -0
- package/dist/worker/console/operator-actions.js +32 -2
- package/dist/worker/console/server.js +5 -1
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-8-j6y-sd.js → abnfDiagram-N423BO3Z-B8EdIjdl.js} +1 -1
- package/dist/worker/console/static/assets/{arc-eoQiMvuk.js → arc-CUaduV17.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-C4A3uMcI.js → architectureDiagram-T3A2C74G-bYAcxRaf.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-D4zD2F-Q.js → blockDiagram-VBNYF7ZC-FfhFUEMJ.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-j1RkJziL.js → c4Diagram-5PPSVZJV-0Rqwn2_U.js} +1 -1
- package/dist/worker/console/static/assets/channel-ICokO4I1.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-YBHmhik1.js → chunk-2GRJ4B5K-D4FbDmsM.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-COfWyo9P.js → chunk-2Q5K7J3B-C2nu32ml.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-I99OUkHY.js → chunk-5RXB4S5H-G2tHSClK.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-XKxoJNJ4.js → chunk-5VM5RSS4-181nyzuH.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DLT_cYx1.js → chunk-6Q2QTUOP-D091VbiQ.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CxcKZ9mV.js → chunk-GF5L2VYU-BjrMCKTH.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-V1EqXdjY.js → chunk-JWPE2WC7-T3zFHTpb.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DebTtdFp.js → chunk-KBJHAD2P-CIB7wrYq.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-B-ivNRDf.js → chunk-RYQCIY6F-HwnAsgDw.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DC_Ds11b.js → chunk-XXDRQBXY-CQSdQAqo.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0c0PBcA.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0c0PBcA.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-sWEqKwIb.js → cose-bilkent-JH36ORCC-CyBVLpjP.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BXa_dcu4.js → cynefin-VYW2F7L2-D2Pf3U7m.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-C-Mle84F.js → cynefinDiagram-MW4NZA55-CzXuQ1a2.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CXPDBITe.js → dagre-VZM6K2ZE-9cMmcOsQ.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CC-WJQfa.js → diagram-7IWD3JNH-DTOr8GLs.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CDAV5Vs4.js → diagram-B4RE2ZJO-B8saqFHU.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-CmFiAcNz.js → diagram-LBJQPF4R-Bvygp--w.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DPBZHuyn.js → diagram-Q27KOJAE-CJyLwBhZ.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-jUlm_Ds3.js → diagram-UB23O5K3-CkR1FDRN.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DWhQ3mfY.js → ebnfDiagram-BXEA7PRR-BsbNtwvi.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-Tr2gMqet.js → erDiagram-JOGREHBK-EVZo9AKy.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DJjVQHPA.js → flowDiagram-UKHOOZJN-C1x91tWN.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-D74dQ4u0.js → ganttDiagram-PKOTCBZU-CiNBUsrJ.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DwW0tZ0X.js → gitGraphDiagram-DS77QQ5N-CSd50p3d.js} +1 -1
- package/dist/worker/console/static/assets/index-DHBWEwz_.css +1 -0
- package/dist/worker/console/static/assets/index-RFWQLUE-.js +478 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-ILCbxJyb.js → infoDiagram-6WML65LV-1JDiYCuA.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-DeuWBQ89.js → ishikawaDiagram-WSZJBQD7-BZLE6zpm.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CF5ih8Fk.js → journeyDiagram-NVQOT4AX-Cg0nDmbe.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-C7yOSuRO.js → kanban-definition-27J2QSJJ-DcwEdKjq.js} +1 -1
- package/dist/worker/console/static/assets/{linear-BDZ9riWi.js → linear-CXvVge5x.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-7pKqYtpZ.js → mermaid.core-5R4WTYSN.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-LeJDybSU.js → mindmap-definition-FAOFIHXS-By9pSeeq.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BJvT3pMD.js → pegDiagram-VL7TDLO6-DzbVZTqW.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-_rGqpMan.js → pieDiagram-7S7Q4E2Y-B9nbfnAq.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DPcSv5aA.js → quadrantDiagram-CIZ2JOQS-D268jfWH.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Drxx4hkJ.js → railroadDiagram-AXF67PYL-oNOXPRNn.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BCTUdU4z.js → requirementDiagram-LRYGKXZP-DXdr8K-4.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-B6wzbZmB.js → sankeyDiagram-W5VNT64P-Dtm4uOJ0.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BGt8d3QQ.js → sequenceDiagram-SI44F4Z6-CeeFiof4.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-7nlhJKo7.js → sizeCapture-X5ZJPWSS-CK1gARll.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Cv2stqMA.js → stateDiagram-OKZ733FA-3jMoAcZw.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cr_kaxrX.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-qDAo4Yc1.js → swimlanes-SLNWSIFB-Div6kwoD.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bl4fQmZh.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CKbDNKTr.js → timeline-definition-Z64GVDOM-B7P_6Up9.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-DI-9EHic.js → vennDiagram-T6HMQDX7-eOPaGUOX.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BrzzRDpX.js → wardleyDiagram-T6FBY63Y-tAcDnb31.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-BclH5hGh.js → xychartDiagram-ELKLHX3M-Dg_r_785.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +33 -1
- package/dist/worker/console/static-src/operator-chat/chat-stream-continuity.js +101 -0
- package/dist/worker/console/static-src/operator-chat/compaction-message.js +18 -3
- package/dist/worker/console/static-src/operator-chat/pending-user-message.js +17 -3
- package/dist/worker/console/static-src/operator-chat/tools-catalog.js +16 -7
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +15 -7
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +47 -5
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +24 -2
- package/dist/worker/console/workspace-context.js +1 -0
- package/dist/worker/scheduler/scheduled-goal-evidence.js +60 -2
- package/dist/worker/scheduler/scheduled-goal-store.js +10 -0
- package/package.json +3 -1
- package/dist/worker/console/static/assets/channel-ChE7y-cx.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C01TCf2X.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C01TCf2X.js +0 -1
- package/dist/worker/console/static/assets/index-BWkIfcrK.css +0 -1
- package/dist/worker/console/static/assets/index-Cdkvw_H6.js +0 -469
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DC7V5vcq.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bwy4QUTO.js +0 -8
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Turn grouping for Operator Chat inline process UX (pi-web ProcessDetails mind).
|
|
3
3
|
*/
|
|
4
|
-
import { compareChatOrder } from "./turn-order.js";
|
|
5
4
|
import { getDisplayableAssistantBlocks, joinAssistantText, parseAssistantContent, splitFinalAssistantBlocks, } from "./assistant-content.js";
|
|
6
5
|
import { dagProgressActivityForTool, semanticActivityForTool, } from "./semantic-activity.js";
|
|
7
|
-
|
|
6
|
+
import { ensureLinkedSubmissionOrder } from "./timeline-message-order.js";
|
|
7
|
+
function emptyGroup(key, turnId) {
|
|
8
8
|
return {
|
|
9
9
|
key,
|
|
10
|
+
...(turnId ? { turnId } : {}),
|
|
10
11
|
assistants: [],
|
|
11
12
|
tools: [],
|
|
12
13
|
processItems: [],
|
|
@@ -265,14 +266,13 @@ function fillProcessDetails(group) {
|
|
|
265
266
|
items,
|
|
266
267
|
});
|
|
267
268
|
}
|
|
268
|
-
|
|
269
|
-
// createdAt falls back, insertion order breaks remaining ties. No
|
|
270
|
-
// "fullySequenced" switch — a partially-sequenced group must not
|
|
271
|
-
// silently re-sort its peers by wall clock when most nodes carry seq.
|
|
269
|
+
const fullySequenced = nodes.every((node) => node.eventSeq !== undefined);
|
|
272
270
|
nodes.sort((a, b) => {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
271
|
+
if (fullySequenced && a.eventSeq !== b.eventSeq) {
|
|
272
|
+
return a.eventSeq - b.eventSeq;
|
|
273
|
+
}
|
|
274
|
+
if (a.createdAt !== b.createdAt)
|
|
275
|
+
return a.createdAt - b.createdAt;
|
|
276
276
|
return a.insertionOrder - b.insertionOrder;
|
|
277
277
|
});
|
|
278
278
|
const processItems = nodes.flatMap((node) => node.items);
|
|
@@ -301,39 +301,48 @@ function fillProcessDetails(group) {
|
|
|
301
301
|
* Build user → process → answer groups for the message timeline.
|
|
302
302
|
*/
|
|
303
303
|
export function buildTurnProcessGroups(input) {
|
|
304
|
-
const visible = input.messages
|
|
304
|
+
const visible = ensureLinkedSubmissionOrder(input.messages
|
|
305
305
|
.filter((m) => m.role === "user" || m.role === "assistant")
|
|
306
|
-
.sort(
|
|
306
|
+
.sort((a, b) => {
|
|
307
|
+
if (a.eventSeq !== undefined &&
|
|
308
|
+
b.eventSeq !== undefined &&
|
|
309
|
+
a.eventSeq !== b.eventSeq) {
|
|
310
|
+
return a.eventSeq - b.eventSeq;
|
|
311
|
+
}
|
|
312
|
+
if (a.createdAt !== b.createdAt)
|
|
313
|
+
return a.createdAt - b.createdAt;
|
|
314
|
+
if (a.eventSeq !== undefined && b.eventSeq === undefined)
|
|
315
|
+
return 1;
|
|
316
|
+
if (a.eventSeq === undefined && b.eventSeq !== undefined)
|
|
317
|
+
return -1;
|
|
318
|
+
return 0;
|
|
319
|
+
}));
|
|
307
320
|
const groups = [];
|
|
308
321
|
let current = null;
|
|
309
|
-
const startGroup = (key) => {
|
|
310
|
-
const group = emptyGroup(key);
|
|
322
|
+
const startGroup = (key, turnId) => {
|
|
323
|
+
const group = emptyGroup(key, turnId);
|
|
311
324
|
groups.push(group);
|
|
312
325
|
return group;
|
|
313
326
|
};
|
|
314
327
|
for (const message of visible) {
|
|
315
328
|
if (message.role === "user") {
|
|
316
|
-
current = startGroup(`user-${message.id}
|
|
329
|
+
current = startGroup(`user-${message.id}`, message.turnId);
|
|
317
330
|
current.user = message;
|
|
318
|
-
if (message.turnId)
|
|
319
|
-
current.turnId = message.turnId;
|
|
320
331
|
continue;
|
|
321
332
|
}
|
|
322
333
|
if (message.kind === "compaction") {
|
|
323
334
|
// Compaction is a standalone timeline event. Starting a fresh group
|
|
324
335
|
// prevents it from replacing the previous turn's assistant answer.
|
|
325
|
-
current = startGroup(`compaction-${message.id}
|
|
336
|
+
current = startGroup(`compaction-${message.id}`, message.turnId);
|
|
326
337
|
current.assistants.push(message);
|
|
327
|
-
if (message.turnId)
|
|
328
|
-
current.turnId = message.turnId;
|
|
329
338
|
current = null;
|
|
330
339
|
continue;
|
|
331
340
|
}
|
|
332
341
|
if (!current)
|
|
333
|
-
current = startGroup(`assistant-${message.id}
|
|
334
|
-
current.
|
|
335
|
-
if (current.turnId === undefined && message.turnId)
|
|
342
|
+
current = startGroup(`assistant-${message.id}`, message.turnId);
|
|
343
|
+
if (!current.turnId && message.turnId)
|
|
336
344
|
current.turnId = message.turnId;
|
|
345
|
+
current.assistants.push(message);
|
|
337
346
|
}
|
|
338
347
|
const assigned = new Set();
|
|
339
348
|
const assistantToGroup = new Map();
|
|
@@ -355,10 +364,10 @@ export function buildTurnProcessGroups(input) {
|
|
|
355
364
|
if (assigned.has(tool.id))
|
|
356
365
|
continue;
|
|
357
366
|
if (tool.turnId) {
|
|
358
|
-
const byTurn = groups.find((group) => group.turnId === tool.turnId ||
|
|
359
|
-
group.user?.turnId === tool.turnId ||
|
|
367
|
+
const byTurn = groups.find((group) => group.user?.turnId === tool.turnId ||
|
|
360
368
|
group.assistants.some((assistant) => assistant.turnId === tool.turnId) ||
|
|
361
369
|
group.tools.some((t) => t.turnId === tool.turnId) ||
|
|
370
|
+
group.key === `turn-${tool.turnId}` ||
|
|
362
371
|
(group.user && `restored-${group.user.id}` === tool.turnId));
|
|
363
372
|
if (byTurn) {
|
|
364
373
|
byTurn.tools.push(tool);
|
|
@@ -374,25 +383,15 @@ export function buildTurnProcessGroups(input) {
|
|
|
374
383
|
}
|
|
375
384
|
}
|
|
376
385
|
}
|
|
377
|
-
// Time-window fallback for legacy rows with neither assistantMessageId nor
|
|
378
|
-
// turnId. The window ends at the NEXT group's first anchor (user OR first
|
|
379
|
-
// assistant) — using POSITIVE_INFINITY would swallow every later group's
|
|
380
|
-
// tools when the very next group has no user message (e.g. compaction or a
|
|
381
|
-
// stand-alone assistant row), dumping one turn's bash cards into another.
|
|
382
386
|
for (const tool of input.toolCalls) {
|
|
383
387
|
if (assigned.has(tool.id))
|
|
384
388
|
continue;
|
|
385
389
|
const windowGroup = groups.find((group, index) => {
|
|
386
390
|
const start = group.user?.createdAt ?? group.assistants[0]?.createdAt ?? 0;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
if (nextAnchor !== undefined) {
|
|
392
|
-
end = nextAnchor;
|
|
393
|
-
break;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
391
|
+
const next = groups[index + 1];
|
|
392
|
+
const end = next?.user?.createdAt ??
|
|
393
|
+
next?.assistants[0]?.createdAt ??
|
|
394
|
+
Number.POSITIVE_INFINITY;
|
|
396
395
|
return tool.createdAt >= start && tool.createdAt < end;
|
|
397
396
|
});
|
|
398
397
|
// Time window only. Never dump unmatched tools onto the latest group:
|
|
@@ -403,7 +402,12 @@ export function buildTurnProcessGroups(input) {
|
|
|
403
402
|
}
|
|
404
403
|
}
|
|
405
404
|
for (const group of groups) {
|
|
406
|
-
group.tools.sort(
|
|
405
|
+
group.tools.sort((a, b) => {
|
|
406
|
+
if (a.eventSeq !== undefined && b.eventSeq !== undefined) {
|
|
407
|
+
return a.eventSeq - b.eventSeq;
|
|
408
|
+
}
|
|
409
|
+
return a.createdAt - b.createdAt;
|
|
410
|
+
});
|
|
407
411
|
group.live =
|
|
408
412
|
input.streaming &&
|
|
409
413
|
input.activeAssistantId !== null &&
|
|
@@ -142,6 +142,9 @@ export class DagConfirmationStore {
|
|
|
142
142
|
preparedAt: now.toISOString(),
|
|
143
143
|
expiresAt,
|
|
144
144
|
operatorSessionId: input.operatorSessionId,
|
|
145
|
+
...(input.telemetrySessionId
|
|
146
|
+
? { telemetrySessionId: input.telemetrySessionId }
|
|
147
|
+
: {}),
|
|
145
148
|
dagHandle: input.dagHandle,
|
|
146
149
|
dagSha256,
|
|
147
150
|
dagBytesPath: input.dagBytesPath,
|
|
@@ -286,6 +286,9 @@ export class DagExecutionReceiptStore {
|
|
|
286
286
|
preparedAt: now.toISOString(),
|
|
287
287
|
expiresAt: new Date(now.getTime() + ttl).toISOString(),
|
|
288
288
|
operatorSessionId: input.operatorSessionId,
|
|
289
|
+
...(input.telemetrySessionId
|
|
290
|
+
? { telemetrySessionId: input.telemetrySessionId }
|
|
291
|
+
: {}),
|
|
289
292
|
taskId: input.taskId,
|
|
290
293
|
dagHandle: input.dagHandle,
|
|
291
294
|
dagSha256: hashDagBytes(input.dagBytes),
|
|
@@ -35,6 +35,7 @@ import { evaluateConsoleDagInterruptEligibility } from "../observability/interru
|
|
|
35
35
|
import { INTERRUPT_ERROR_MESSAGES, isInterruptReasonCode, normalizeInterruptReasonDetail, } from "../observability/interrupt-eligibility.js";
|
|
36
36
|
import { assessAutonomousExecutionEligibility, deriveEligibilityFactsFromDagSpec, } from "./dag-execution-receipt.js";
|
|
37
37
|
import { issueHumanGateToken, mutationGatePayloadHash, verifyHumanGateToken, } from "./human-gate-token.js";
|
|
38
|
+
import { DAG_TELEMETRY_SESSION_ID_ENV, isTelemetrySessionId, } from "../../shared/wizard-local-telemetry.js";
|
|
38
39
|
const MUTATION_GATE_ACTIONS = new Set([
|
|
39
40
|
// 2026-08-11: standaloneTaskRerun / workerTaskRetry are autonomous (server
|
|
40
41
|
// run-facts checks). Destructive DAG reconciliation, live cooperative
|
|
@@ -565,7 +566,11 @@ export async function acceptOperation(ctx, input) {
|
|
|
565
566
|
events: ctx.events,
|
|
566
567
|
client: ctx.client,
|
|
567
568
|
repoRoot: ctx.repoRoot,
|
|
568
|
-
env: {
|
|
569
|
+
env: {
|
|
570
|
+
...process.env,
|
|
571
|
+
LOOP_CONSOLE_APP_DATA: ctx.appData.root,
|
|
572
|
+
...input.env,
|
|
573
|
+
},
|
|
569
574
|
runCommand: ctx.runCommand,
|
|
570
575
|
beforeTerminal: input.beforeTerminal,
|
|
571
576
|
onSettled: async (operation, state, info) => {
|
|
@@ -822,6 +827,21 @@ async function acceptConsoleUpdateAndInit(ctx, clientRequestId, channel) {
|
|
|
822
827
|
},
|
|
823
828
|
};
|
|
824
829
|
}
|
|
830
|
+
async function resolvePreparedDagTelemetrySessionId(ctx) {
|
|
831
|
+
if (!ctx.chatSessionRef || !ctx.sddDataAlignment)
|
|
832
|
+
return undefined;
|
|
833
|
+
if (!(await ctx.sddDataAlignment.isEligible()))
|
|
834
|
+
return undefined;
|
|
835
|
+
return ctx.sddDataAlignment.ensureTelemetrySessionId(ctx.chatSessionRef);
|
|
836
|
+
}
|
|
837
|
+
async function resolveDagTelemetryEnv(ctx, telemetrySessionId) {
|
|
838
|
+
if (!isTelemetrySessionId(telemetrySessionId) ||
|
|
839
|
+
!ctx.sddDataAlignment ||
|
|
840
|
+
!(await ctx.sddDataAlignment.isEligible())) {
|
|
841
|
+
return undefined;
|
|
842
|
+
}
|
|
843
|
+
return { [DAG_TELEMETRY_SESSION_ID_ENV]: telemetrySessionId };
|
|
844
|
+
}
|
|
825
845
|
export async function dispatchOperatorAction(ctx, req) {
|
|
826
846
|
const action = req.action?.trim();
|
|
827
847
|
if (!action) {
|
|
@@ -1668,8 +1688,10 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
1668
1688
|
canonicalizerVersion: ref.canonicalizerVersion,
|
|
1669
1689
|
taskConfigSchemaVersion: ref.taskConfigSchemaVersion,
|
|
1670
1690
|
};
|
|
1691
|
+
const telemetrySessionId = await resolvePreparedDagTelemetrySessionId(ctx);
|
|
1671
1692
|
const confirmation = await ctx.confirmations.prepare({
|
|
1672
1693
|
operatorSessionId: ctx.operatorSessionId,
|
|
1694
|
+
...(telemetrySessionId ? { telemetrySessionId } : {}),
|
|
1673
1695
|
dagHandle,
|
|
1674
1696
|
dagBytes: dagText,
|
|
1675
1697
|
dagBytesPath: staged.path,
|
|
@@ -1910,8 +1932,10 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
1910
1932
|
}),
|
|
1911
1933
|
};
|
|
1912
1934
|
}
|
|
1935
|
+
const telemetrySessionId = await resolvePreparedDagTelemetrySessionId(ctx);
|
|
1913
1936
|
const prepared = await ctx.dagExecutionReceipts.prepare({
|
|
1914
1937
|
operatorSessionId: ctx.operatorSessionId,
|
|
1938
|
+
...(telemetrySessionId ? { telemetrySessionId } : {}),
|
|
1915
1939
|
taskId,
|
|
1916
1940
|
dagHandle: "staged-dag.json",
|
|
1917
1941
|
dagBytes: dagText,
|
|
@@ -2350,7 +2374,7 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
2350
2374
|
if (!confirmationId) {
|
|
2351
2375
|
return invalid(action, "runDag requires executionId (autonomous) or confirmationId (browser Human Gate)");
|
|
2352
2376
|
}
|
|
2353
|
-
// Preserved browser Human Gate flow
|
|
2377
|
+
// Preserved browser Human Gate flow.
|
|
2354
2378
|
const conf = await ctx.confirmations.get(confirmationId);
|
|
2355
2379
|
if (!conf) {
|
|
2356
2380
|
return {
|
|
@@ -2409,12 +2433,14 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
2409
2433
|
}
|
|
2410
2434
|
const taskId = conf.taskContractBinding.taskId;
|
|
2411
2435
|
const gateToken = readWriteSetGateToken(conf.reviewPacket);
|
|
2436
|
+
const dagTelemetryEnv = await resolveDagTelemetryEnv(ctx, conf.telemetrySessionId);
|
|
2412
2437
|
if (gateToken) {
|
|
2413
2438
|
return acceptOperation(ctx, {
|
|
2414
2439
|
action,
|
|
2415
2440
|
actionParams: { confirmationId },
|
|
2416
2441
|
clientRequestId,
|
|
2417
2442
|
taskId,
|
|
2443
|
+
env: dagTelemetryEnv,
|
|
2418
2444
|
cliArgs: [
|
|
2419
2445
|
"task",
|
|
2420
2446
|
"advance",
|
|
@@ -2430,6 +2456,7 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
2430
2456
|
actionParams: { confirmationId },
|
|
2431
2457
|
clientRequestId,
|
|
2432
2458
|
taskId,
|
|
2459
|
+
env: dagTelemetryEnv,
|
|
2433
2460
|
cliArgs: [
|
|
2434
2461
|
"dag",
|
|
2435
2462
|
"execute",
|
|
@@ -2503,6 +2530,7 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
2503
2530
|
};
|
|
2504
2531
|
}
|
|
2505
2532
|
const gateToken = readWriteSetGateToken(receipt.reviewPacket);
|
|
2533
|
+
const dagTelemetryEnv = await resolveDagTelemetryEnv(ctx, receipt.telemetrySessionId);
|
|
2506
2534
|
const dispatchRun = async () => {
|
|
2507
2535
|
if (gateToken) {
|
|
2508
2536
|
// Standard lifecycle path: the execution receipt replaces the
|
|
@@ -2512,6 +2540,7 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
2512
2540
|
actionParams: { executionId },
|
|
2513
2541
|
clientRequestId,
|
|
2514
2542
|
taskId,
|
|
2543
|
+
env: dagTelemetryEnv,
|
|
2515
2544
|
cliArgs: [
|
|
2516
2545
|
"task",
|
|
2517
2546
|
"advance",
|
|
@@ -2528,6 +2557,7 @@ export async function dispatchOperatorAction(ctx, req) {
|
|
|
2528
2557
|
actionParams: { executionId },
|
|
2529
2558
|
clientRequestId,
|
|
2530
2559
|
taskId,
|
|
2560
|
+
env: dagTelemetryEnv,
|
|
2531
2561
|
cliArgs: [
|
|
2532
2562
|
"dag",
|
|
2533
2563
|
"execute",
|
|
@@ -446,7 +446,11 @@ export async function createConsoleServer(options) {
|
|
|
446
446
|
if (method === "GET" &&
|
|
447
447
|
pathname === "/api/operator/v1/chat/sessions" &&
|
|
448
448
|
!url.searchParams.has("workspaceId")) {
|
|
449
|
-
const
|
|
449
|
+
const visibleWorkspaceIds = new Set((await registry.listVisible()).map((workspace) => workspace.workspaceId));
|
|
450
|
+
const sessions = chatSessionCatalog
|
|
451
|
+
.list()
|
|
452
|
+
.filter((entry) => !entry.workspaceId || visibleWorkspaceIds.has(entry.workspaceId))
|
|
453
|
+
.map((entry) => {
|
|
450
454
|
const active = entry.workspaceId
|
|
451
455
|
? workspaceContexts
|
|
452
456
|
.get(entry.workspaceId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-D091VbiQ.js";import{p as f}from"./chunk-JWPE2WC7-T3zFHTpb.js";import{_ as n,l as o}from"./mermaid.core-5R4WTYSN.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-D2Pf3U7m.js";import"./index-RFWQLUE-.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-5R4WTYSN.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|