@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,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.44.0-next.1",
4
- "gitSha": "5c5e91b6ac584b0361b78363ee95483cd37564a5",
5
- "builtAt": "2026-09-14T02:24:23.093Z"
3
+ "version": "0.44.0-next.3",
4
+ "gitSha": "2bc5338a83fc147e9ac1a201797b3d04f5617bbe",
5
+ "builtAt": "2026-09-15T12:05:43.839Z"
6
6
  }
@@ -9,9 +9,32 @@ import { BoundedTextPreview, classifyPiFailure, createPiJsonlStreamCollector, DE
9
9
  import { serializeSessionEvent } from "./pi-event-serializer.js";
10
10
  import { PI_RECOMMENDED_COMPACTION, PI_RECOMMENDED_RETRY, } from "../shared/pi-retry-settings.js";
11
11
  import { createCompactionController, createContextPressureExtension, createSiftBridgeState, inMemoryCompactionSettings, isDagSiftEnabled, parseCompactionPolicy, parseSiftBridgeConfig, SIFT_RETRIEVE_TOOL_NAME, } from "../shared/pi-context-pressure/index.js";
12
+ import { DAG_TELEMETRY_SESSION_ID_ENV, injectWizardLocalTelemetryHeaders, isTelemetrySessionId, } from "../shared/wizard-local-telemetry.js";
12
13
  /** Maximum number of same-session continuations after provider output truncation. */
13
14
  export const PI_SDK_OUTPUT_LIMIT_CONTINUE_MAX = 3;
14
15
  export const PI_SDK_OUTPUT_LIMIT_CONTINUE_PROMPT = "继续。上一轮因输出长度上限(stopReason=length)截断;当前会话、工具与已完成工作仍保留。只完成尚未完成的部分,不重做已成功的写入或事实提交。";
16
+ export function createDagWizardLocalTelemetryHeadersExtension(telemetrySessionId) {
17
+ if (!isTelemetrySessionId(telemetrySessionId))
18
+ return undefined;
19
+ return {
20
+ name: "dag-wizard-local-telemetry-headers",
21
+ hidden: true,
22
+ factory: (api) => {
23
+ api.on("before_provider_headers", async (rawEvent, context) => {
24
+ if (!context ||
25
+ !rawEvent.headers ||
26
+ typeof rawEvent.headers !== "object") {
27
+ return;
28
+ }
29
+ await injectWizardLocalTelemetryHeaders({
30
+ headers: rawEvent.headers,
31
+ context,
32
+ telemetrySessionId,
33
+ });
34
+ });
35
+ },
36
+ };
37
+ }
15
38
  /** Wrap the actual stream seam: tool turns, retries and compaction all await it. */
16
39
  export async function installPiProviderRequestBudget(session, reserve, onFailure, capacity) {
17
40
  const agent = session.agent;
@@ -290,6 +313,8 @@ async function createSdkSession(sdk, input, shared) {
290
313
  controller,
291
314
  sift,
292
315
  });
316
+ const telemetryExtension = createDagWizardLocalTelemetryHeadersExtension(input.telemetrySessionId);
317
+ const extensionFactories = [pressureExtension, telemetryExtension].filter((extension) => Boolean(extension));
293
318
  const loader = new DefaultResourceLoader({
294
319
  cwd: input.cwd,
295
320
  agentDir,
@@ -299,7 +324,7 @@ async function createSdkSession(sdk, input, shared) {
299
324
  ...(input.additionalExtensionPaths && input.additionalExtensionPaths.length > 0
300
325
  ? { additionalExtensionPaths: input.additionalExtensionPaths }
301
326
  : {}),
302
- ...(pressureExtension ? { extensionFactories: [pressureExtension] } : {}),
327
+ ...(extensionFactories.length > 0 ? { extensionFactories } : {}),
303
328
  ...(settingsManager ? { settingsManager } : {}),
304
329
  appendSystemPromptOverride: (base) => [
305
330
  ...base,
@@ -718,6 +743,9 @@ async function executeSingleSdkAttemptInternal(options) {
718
743
  provider: modelConfig.provider,
719
744
  model: modelConfig.model,
720
745
  thinking: modelConfig.thinking,
746
+ telemetrySessionId: isTelemetrySessionId(process.env[DAG_TELEMETRY_SESSION_ID_ENV])
747
+ ? process.env[DAG_TELEMETRY_SESSION_ID_ENV]
748
+ : undefined,
721
749
  ...(Array.isArray(writerCustomTools) && writerCustomTools.length > 0
722
750
  ? { customTools: writerCustomTools }
723
751
  : {}),
@@ -0,0 +1,50 @@
1
+ export const DAG_TELEMETRY_SESSION_ID_ENV = "LOOP_AGENT_DAG_TELEMETRY_SESSION_ID";
2
+ export const WIZARD_LOCAL_DEFAULT_USER_AGENT = "Builder/OpenCode ai-sdk/provider-utils/4.0.21 runtime/bun/1.3.11";
3
+ export function isTelemetrySessionId(value) {
4
+ return (typeof value === "string" &&
5
+ /^ses_[0-9A-Za-z]{10,128}$/.test(value));
6
+ }
7
+ function deleteHeaderCaseInsensitive(headers, name) {
8
+ for (const key of Object.keys(headers)) {
9
+ if (key.toLowerCase() === name.toLowerCase())
10
+ delete headers[key];
11
+ }
12
+ }
13
+ function configuredHeader(headers, name) {
14
+ const key = Object.keys(headers ?? {}).find((entry) => entry.toLowerCase() === name.toLowerCase());
15
+ return key ? headers?.[key] : undefined;
16
+ }
17
+ function setStaticHeader(headers, configured, name, defaultValue) {
18
+ deleteHeaderCaseInsensitive(headers, name);
19
+ headers[name] = configuredHeader(configured, name) ?? defaultValue;
20
+ }
21
+ /** Apply the shared reporting identity without changing Pi's internal session. */
22
+ export async function injectWizardLocalTelemetryHeaders(options) {
23
+ const model = options.context.model;
24
+ if (model?.provider !== "wizard-local" ||
25
+ !model.id ||
26
+ !isTelemetrySessionId(options.telemetrySessionId)) {
27
+ return;
28
+ }
29
+ const modelRegistry = options.context.modelRegistry;
30
+ if (!modelRegistry?.getApiKeyAndHeaders)
31
+ return;
32
+ // Keep the call attached because ModelRegistry reads private runtime state via `this`.
33
+ const auth = await modelRegistry.getApiKeyAndHeaders(model);
34
+ if (!auth.ok || typeof auth.apiKey !== "string" || !auth.apiKey)
35
+ return;
36
+ setStaticHeader(options.headers, auth.headers, "client-code", "OpenCode");
37
+ setStaticHeader(options.headers, auth.headers, "User-Agent", WIZARD_LOCAL_DEFAULT_USER_AGENT);
38
+ for (const name of [
39
+ "x-api-key",
40
+ "X-Session-Id",
41
+ "X-Model-Id",
42
+ "ws-auth",
43
+ "ws-sign",
44
+ ]) {
45
+ deleteHeaderCaseInsensitive(options.headers, name);
46
+ }
47
+ options.headers["x-api-key"] = auth.apiKey;
48
+ options.headers["X-Session-Id"] = options.telemetrySessionId;
49
+ options.headers["X-Model-Id"] = model.id;
50
+ }
@@ -1074,6 +1074,9 @@ export function createChatEventStore(options) {
1074
1074
  epoch(sessionId) {
1075
1075
  return ringFor(sessionId).epoch;
1076
1076
  },
1077
+ latestSeq(sessionId) {
1078
+ return ringFor(sessionId).nextSeq - 1;
1079
+ },
1077
1080
  snapshot(sessionId) {
1078
1081
  const ring = rings.get(sessionId) ?? loadRing(sessionId);
1079
1082
  if (ring)