@tea-agent/loop-agent 0.44.0-next.1 → 0.44.0-next.3

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 (99) hide show
  1. package/CHANGELOG.md +178 -175
  2. package/dist/build-stamp.json +3 -3
  3. package/dist/executors/pi-sdk-executor.js +29 -1
  4. package/dist/shared/wizard-local-telemetry.js +50 -0
  5. package/dist/worker/console/chat/chat-event-store.js +3 -0
  6. package/dist/worker/console/chat/db-connections.js +790 -0
  7. package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +1 -1
  8. package/dist/worker/console/chat/pi-runtime/custom-tools/sql-tools.js +627 -0
  9. package/dist/worker/console/chat/pi-runtime.js +66 -6
  10. package/dist/worker/console/chat/routes.js +154 -3
  11. package/dist/worker/console/chat/sdd-data-alignment.js +8 -31
  12. package/dist/worker/console/chat/timeline-message-order.js +22 -0
  13. package/dist/worker/console/chat/tools.js +34 -0
  14. package/dist/worker/console/chat/turn-process.js +43 -39
  15. package/dist/worker/console/dag-confirmation.js +3 -0
  16. package/dist/worker/console/dag-execution-receipt.js +3 -0
  17. package/dist/worker/console/operator-actions.js +32 -2
  18. package/dist/worker/console/server.js +5 -1
  19. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-8-j6y-sd.js → abnfDiagram-N423BO3Z-COQlLTI7.js} +1 -1
  20. package/dist/worker/console/static/assets/{arc-eoQiMvuk.js → arc-zN3QkNaV.js} +1 -1
  21. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-C4A3uMcI.js → architectureDiagram-T3A2C74G-Pyoyj5f2.js} +1 -1
  22. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-D4zD2F-Q.js → blockDiagram-VBNYF7ZC-BNppA5WW.js} +1 -1
  23. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-j1RkJziL.js → c4Diagram-5PPSVZJV-lyxL8nTx.js} +1 -1
  24. package/dist/worker/console/static/assets/channel-CgLPkTw2.js +1 -0
  25. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-YBHmhik1.js → chunk-2GRJ4B5K-0hgjcdK4.js} +1 -1
  26. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-COfWyo9P.js → chunk-2Q5K7J3B-D63N9d4i.js} +1 -1
  27. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-I99OUkHY.js → chunk-5RXB4S5H-CUw2AyB5.js} +1 -1
  28. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-XKxoJNJ4.js → chunk-5VM5RSS4-Q_kwZT30.js} +1 -1
  29. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DLT_cYx1.js → chunk-6Q2QTUOP-C7vMiKcw.js} +1 -1
  30. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CxcKZ9mV.js → chunk-GF5L2VYU-T9GbV5Hz.js} +1 -1
  31. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-V1EqXdjY.js → chunk-JWPE2WC7-D8nUSUJI.js} +1 -1
  32. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DebTtdFp.js → chunk-KBJHAD2P-BCH2ewdp.js} +1 -1
  33. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-B-ivNRDf.js → chunk-RYQCIY6F-BTdDuDBN.js} +1 -1
  34. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DC_Ds11b.js → chunk-XXDRQBXY-Cqm2RcKF.js} +1 -1
  35. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CuSD1Mhb.js +1 -0
  36. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CuSD1Mhb.js +1 -0
  37. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-sWEqKwIb.js → cose-bilkent-JH36ORCC-pjwfpVu4.js} +1 -1
  38. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BXa_dcu4.js → cynefin-VYW2F7L2-BvalptKA.js} +1 -1
  39. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-C-Mle84F.js → cynefinDiagram-MW4NZA55-BU4qJ6d7.js} +1 -1
  40. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CXPDBITe.js → dagre-VZM6K2ZE-DVTpq8J9.js} +1 -1
  41. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CC-WJQfa.js → diagram-7IWD3JNH-B8s1W6Fc.js} +1 -1
  42. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CDAV5Vs4.js → diagram-B4RE2ZJO-DPrFk9yH.js} +1 -1
  43. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-CmFiAcNz.js → diagram-LBJQPF4R-CnQIQsHC.js} +1 -1
  44. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DPBZHuyn.js → diagram-Q27KOJAE-op0DEpCv.js} +1 -1
  45. package/dist/worker/console/static/assets/{diagram-UB23O5K3-jUlm_Ds3.js → diagram-UB23O5K3-DXQamm4T.js} +1 -1
  46. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DWhQ3mfY.js → ebnfDiagram-BXEA7PRR-b1ad2C0r.js} +1 -1
  47. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-Tr2gMqet.js → erDiagram-JOGREHBK-B4cD-ZFJ.js} +1 -1
  48. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DJjVQHPA.js → flowDiagram-UKHOOZJN-CrgGjlQ1.js} +1 -1
  49. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-D74dQ4u0.js → ganttDiagram-PKOTCBZU-DovmXQNV.js} +1 -1
  50. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DwW0tZ0X.js → gitGraphDiagram-DS77QQ5N-DpFyu2Jn.js} +1 -1
  51. package/dist/worker/console/static/assets/index-DHBWEwz_.css +1 -0
  52. package/dist/worker/console/static/assets/index-JRfTUgP7.js +478 -0
  53. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-ILCbxJyb.js → infoDiagram-6WML65LV-D3MoQZIl.js} +1 -1
  54. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-DeuWBQ89.js → ishikawaDiagram-WSZJBQD7-Ci6C1yjS.js} +1 -1
  55. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CF5ih8Fk.js → journeyDiagram-NVQOT4AX-BWMo2lIP.js} +1 -1
  56. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-C7yOSuRO.js → kanban-definition-27J2QSJJ-BdthIAg3.js} +1 -1
  57. package/dist/worker/console/static/assets/{linear-BDZ9riWi.js → linear-DuFAlSOj.js} +1 -1
  58. package/dist/worker/console/static/assets/{mermaid.core-7pKqYtpZ.js → mermaid.core-Dqz3Slj9.js} +5 -5
  59. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-LeJDybSU.js → mindmap-definition-FAOFIHXS-DNVTrD09.js} +1 -1
  60. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BJvT3pMD.js → pegDiagram-VL7TDLO6-CgfZPfBh.js} +1 -1
  61. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-_rGqpMan.js → pieDiagram-7S7Q4E2Y-ClM9P7yo.js} +1 -1
  62. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DPcSv5aA.js → quadrantDiagram-CIZ2JOQS-DwnEak2J.js} +1 -1
  63. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Drxx4hkJ.js → railroadDiagram-AXF67PYL-rK4hxt9P.js} +1 -1
  64. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BCTUdU4z.js → requirementDiagram-LRYGKXZP-Cjqa6vo3.js} +1 -1
  65. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-B6wzbZmB.js → sankeyDiagram-W5VNT64P-D3Fa250Z.js} +1 -1
  66. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BGt8d3QQ.js → sequenceDiagram-SI44F4Z6-2PdrNajj.js} +1 -1
  67. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-7nlhJKo7.js → sizeCapture-X5ZJPWSS-BBcuGeZn.js} +1 -1
  68. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Cv2stqMA.js → stateDiagram-OKZ733FA-CSJX9X6s.js} +1 -1
  69. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cqskj0zt.js +1 -0
  70. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-qDAo4Yc1.js → swimlanes-SLNWSIFB-pOUU1bic.js} +2 -2
  71. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CM0ZIhNP.js +8 -0
  72. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CKbDNKTr.js → timeline-definition-Z64GVDOM-CAeqfQn0.js} +1 -1
  73. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-DI-9EHic.js → vennDiagram-T6HMQDX7-DYPLOMVO.js} +1 -1
  74. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BrzzRDpX.js → wardleyDiagram-T6FBY63Y-Dy2V0Cha.js} +1 -1
  75. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-BclH5hGh.js → xychartDiagram-ELKLHX3M-Dj9o7jrn.js} +1 -1
  76. package/dist/worker/console/static/index.html +2 -2
  77. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +33 -1
  78. package/dist/worker/console/static-src/operator-chat/chat-stream-continuity.js +101 -0
  79. package/dist/worker/console/static-src/operator-chat/compaction-message.js +18 -3
  80. package/dist/worker/console/static-src/operator-chat/pending-user-message.js +17 -3
  81. package/dist/worker/console/static-src/operator-chat/tools-catalog.js +16 -7
  82. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +15 -7
  83. package/dist/worker/console/static-src/operator-chat/useChatStream.js +47 -5
  84. package/dist/worker/console/static-src/operator-chat/useChatThread.js +24 -2
  85. package/dist/worker/console/workspace-context.js +2 -0
  86. package/dist/worker/observe/static/console-theme.css +174 -0
  87. package/dist/worker/observe/static/console-theme.js +36 -0
  88. package/dist/worker/observe/static/operator-chrome.css +85 -0
  89. package/dist/worker/observe/static/operator-chrome.js +51 -0
  90. package/dist/worker/scheduler/scheduled-goal-evidence.js +60 -2
  91. package/dist/worker/scheduler/scheduled-goal-store.js +10 -0
  92. package/package.json +3 -1
  93. package/dist/worker/console/static/assets/channel-ChE7y-cx.js +0 -1
  94. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C01TCf2X.js +0 -1
  95. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C01TCf2X.js +0 -1
  96. package/dist/worker/console/static/assets/index-BWkIfcrK.css +0 -1
  97. package/dist/worker/console/static/assets/index-Cdkvw_H6.js +0 -469
  98. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DC7V5vcq.js +0 -1
  99. 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
- function emptyGroup(key) {
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
- // Unified order (DSH rule): server seq is the single authoritative key,
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
- const byOrder = compareChatOrder(a, b);
274
- if (byOrder !== 0)
275
- return byOrder;
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(compareChatOrder);
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.assistants.push(message);
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
- let end = Number.POSITIVE_INFINITY;
388
- for (let i = index + 1; i < groups.length; i += 1) {
389
- const next = groups[i];
390
- const nextAnchor = next?.user?.createdAt ?? next?.assistants[0]?.createdAt;
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(compareChatOrder);
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: { ...process.env, LOOP_CONSOLE_APP_DATA: ctx.appData.root },
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 (dag-confirmation.ts untouched).
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 sessions = chatSessionCatalog.list().map((entry) => {
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-DLT_cYx1.js";import{p as f}from"./chunk-JWPE2WC7-V1EqXdjY.js";import{_ as n,l as o}from"./mermaid.core-7pKqYtpZ.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BXa_dcu4.js";import"./index-Cdkvw_H6.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
+ import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-C7vMiKcw.js";import{p as f}from"./chunk-JWPE2WC7-D8nUSUJI.js";import{_ as n,l as o}from"./mermaid.core-Dqz3Slj9.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BvalptKA.js";import"./index-JRfTUgP7.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-7pKqYtpZ.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};
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-Dqz3Slj9.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};