@tea-agent/loop-agent 0.44.0-next.5 → 0.44.0-next.7

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 (111) hide show
  1. package/CHANGELOG.md +299 -445
  2. package/dist/build-stamp.json +3 -3
  3. package/dist/executors/pi-sdk-executor.js +7 -7
  4. package/dist/infrastructure/console/operation-store.js +46 -14
  5. package/dist/shared/git-workspace-status.js +2 -0
  6. package/dist/shared/wizard-local-telemetry.js +2 -1
  7. package/dist/worker/console/chat/assistant-content.js +5 -34
  8. package/dist/worker/console/chat/chat-event-store.js +27 -10
  9. package/dist/worker/console/chat/db-connections.js +72 -8
  10. package/dist/worker/console/chat/pi-runtime/custom-tools/sql-tools.js +52 -24
  11. package/dist/worker/console/chat/pi-runtime.js +251 -18
  12. package/dist/worker/console/chat/repo-browser.js +49 -0
  13. package/dist/worker/console/chat/routes.js +215 -66
  14. package/dist/worker/console/chat/session-store.js +147 -19
  15. package/dist/worker/console/chat/turn-process.js +69 -23
  16. package/dist/worker/console/chat/user-turn-outline.js +19 -0
  17. package/dist/worker/console/console-update-runtime.js +2 -2
  18. package/dist/worker/console/operator-user-error.js +28 -1
  19. package/dist/worker/console/pi-readiness.js +4 -4
  20. package/dist/worker/console/recovery-cta.js +14 -14
  21. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BHuhGM1e.js → abnfDiagram-N423BO3Z-DTuku_-7.js} +1 -1
  22. package/dist/worker/console/static/assets/{arc-CKh5E_sr.js → arc-CQbCsSqb.js} +1 -1
  23. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-DizhiBEv.js → architectureDiagram-T3A2C74G-C-xUntTR.js} +1 -1
  24. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-3Neea-Z-.js → blockDiagram-VBNYF7ZC-DhNlwGAl.js} +1 -1
  25. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BCP_Qrgi.js → c4Diagram-5PPSVZJV-B7j3nx8o.js} +1 -1
  26. package/dist/worker/console/static/assets/channel-5_os7t_x.js +1 -0
  27. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-C_wydftK.js → chunk-2GRJ4B5K-BCrcxEh2.js} +1 -1
  28. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-jRPXZbzx.js → chunk-2Q5K7J3B-CsaePDb3.js} +1 -1
  29. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BLQf2OYO.js → chunk-5RXB4S5H--SRQc1rN.js} +1 -1
  30. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-0qRq64rI.js → chunk-5VM5RSS4-C5BFY2Po.js} +1 -1
  31. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-ClMg8xmV.js → chunk-6Q2QTUOP-Caso6uN7.js} +1 -1
  32. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Coop2FlL.js → chunk-GF5L2VYU-AY2ZSAx2.js} +1 -1
  33. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-CDdO-jPJ.js → chunk-JWPE2WC7-DiMqZQ_8.js} +1 -1
  34. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-D8Gkppjl.js → chunk-KBJHAD2P-gpvvriOp.js} +1 -1
  35. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DA9HIySf.js → chunk-RYQCIY6F-CUdyoJhI.js} +1 -1
  36. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DZNDRX1k.js → chunk-XXDRQBXY-Bp1xW3T4.js} +1 -1
  37. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-loz0n18W.js +1 -0
  38. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-loz0n18W.js +1 -0
  39. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CZ1zGyjq.js → cose-bilkent-JH36ORCC-D-JIcOIT.js} +1 -1
  40. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-B8u1_FtM.js → cynefin-VYW2F7L2-C-NKFflx.js} +1 -1
  41. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-CPBB6lfo.js → cynefinDiagram-MW4NZA55-CSOcvOAA.js} +1 -1
  42. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CG3Eov3E.js → dagre-VZM6K2ZE-BQSBltMy.js} +1 -1
  43. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-ycI-dOjh.js → diagram-7IWD3JNH-B0LVC45G.js} +1 -1
  44. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-Bx_GyQ7Y.js → diagram-B4RE2ZJO-Cypg3nqy.js} +1 -1
  45. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-m0G6mP4d.js → diagram-LBJQPF4R-BBDU88XJ.js} +1 -1
  46. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-DTDJkqcJ.js → diagram-Q27KOJAE-BZusLqSb.js} +1 -1
  47. package/dist/worker/console/static/assets/{diagram-UB23O5K3-BCfFrG-p.js → diagram-UB23O5K3-Cfolotcr.js} +1 -1
  48. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BIkTNPpp.js → ebnfDiagram-BXEA7PRR-CjfyUy0m.js} +1 -1
  49. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DTcMWrd2.js → erDiagram-JOGREHBK-DJdz7txE.js} +1 -1
  50. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-BqzDaNQ7.js → flowDiagram-UKHOOZJN-CQqgPO6y.js} +1 -1
  51. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-BSl_vGFe.js → ganttDiagram-PKOTCBZU-BOpGfS2m.js} +1 -1
  52. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DCA5HXM6.js → gitGraphDiagram-DS77QQ5N-C6UCu0qx.js} +1 -1
  53. package/dist/worker/console/static/assets/index-CUT440A8.css +1 -0
  54. package/dist/worker/console/static/assets/index-DWKejNVJ.js +486 -0
  55. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-DvqT18ge.js → infoDiagram-6WML65LV-BWeaVEUB.js} +1 -1
  56. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-B6zGKrQ3.js → ishikawaDiagram-WSZJBQD7-C8gmlBbk.js} +1 -1
  57. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-BpLQPI9C.js → journeyDiagram-NVQOT4AX-DF3bm8Bp.js} +1 -1
  58. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-CzIz_-Lt.js → kanban-definition-27J2QSJJ-D2fG2Vxi.js} +1 -1
  59. package/dist/worker/console/static/assets/{linear-CMQ8Jpp-.js → linear-BGKgMc2T.js} +1 -1
  60. package/dist/worker/console/static/assets/{mermaid.core-BdAMrTf7.js → mermaid.core-DF6mMPJ9.js} +5 -5
  61. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-hSwF6sOq.js → mindmap-definition-FAOFIHXS-AMhePheC.js} +1 -1
  62. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DZdv509B.js → pegDiagram-VL7TDLO6-DN1Cl0W0.js} +1 -1
  63. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-CmD4-b0K.js → pieDiagram-7S7Q4E2Y-Cx9ngUeN.js} +1 -1
  64. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DtKxNxlS.js → quadrantDiagram-CIZ2JOQS-BcYPTQJb.js} +1 -1
  65. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-D48iIoiS.js → railroadDiagram-AXF67PYL-BqHUZWnH.js} +1 -1
  66. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-C3N0K-2p.js → requirementDiagram-LRYGKXZP-CmqWZ0-B.js} +1 -1
  67. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-CACWR-Xs.js → sankeyDiagram-W5VNT64P--4YetH1y.js} +1 -1
  68. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-g_QgugvZ.js → sequenceDiagram-SI44F4Z6-DGD4VMfD.js} +1 -1
  69. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-DqLoRPGK.js → sizeCapture-X5ZJPWSS-QVw9q7rh.js} +1 -1
  70. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-ES59VgMG.js → stateDiagram-OKZ733FA-CuemV9pe.js} +1 -1
  71. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BdlGdIJw.js +1 -0
  72. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-fjyLVNWo.js → swimlanes-SLNWSIFB-C7oKzZKs.js} +2 -2
  73. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DjjbHbde.js +8 -0
  74. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-Cd5-biKv.js → timeline-definition-Z64GVDOM-C2Of60nT.js} +1 -1
  75. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-CZTu6mPf.js → vennDiagram-T6HMQDX7-DHtpQHyL.js} +1 -1
  76. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DR01jjbe.js → wardleyDiagram-T6FBY63Y-COi9OhSy.js} +1 -1
  77. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-iZcuGVGa.js → xychartDiagram-ELKLHX3M-DPHQfRrt.js} +1 -1
  78. package/dist/worker/console/static/index.html +2 -2
  79. package/dist/worker/console/static-src/app/console-types.js +9 -1
  80. package/dist/worker/console/static-src/operator-chat/chat-link.js +20 -0
  81. package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +58 -3
  82. package/dist/worker/console/static-src/operator-chat/details-rail-surfaces.js +98 -0
  83. package/dist/worker/console/static-src/operator-chat/file-palette-nav.js +81 -0
  84. package/dist/worker/console/static-src/operator-chat/process-label.js +19 -6
  85. package/dist/worker/console/static-src/operator-chat/transcript-mode.js +21 -0
  86. package/dist/worker/console/static-src/operator-chat/turn-group-equality.js +2 -0
  87. package/dist/worker/console/static-src/operator-chat/turn-process-disclosure.js +13 -5
  88. package/dist/worker/console/static-src/operator-chat/turn-state-projection.js +166 -0
  89. package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +56 -2
  90. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +202 -41
  91. package/dist/worker/console/static-src/operator-chat/useChatStream.js +78 -23
  92. package/dist/worker/console/static-src/operator-chat/useChatThread.js +55 -18
  93. package/dist/worker/console/static-src/operator-chat/useComposer.js +80 -6
  94. package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +13 -3
  95. package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +36 -17
  96. package/dist/worker/console/static-src/operator-chat/useRuntimeSnapshot.js +18 -0
  97. package/dist/worker/console/static-src/operator-chat/useWorkspaceBrowserGate.js +4 -0
  98. package/dist/worker/console/static-src/shell/console-update-reload.js +1 -1
  99. package/dist/worker/console/workspace-initialization.js +3 -3
  100. package/dist/worker/observability/read-model.js +23 -2
  101. package/dist/worker/scheduler/scheduled-goal-dispatch.js +3 -2
  102. package/dist/worker/scheduler/scheduled-goal-evidence.js +6 -1
  103. package/docs/templates/backend-test-dag.json +1 -0
  104. package/package.json +4 -4
  105. package/dist/worker/console/static/assets/channel-DxgzA1GF.js +0 -1
  106. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BZcm7fs6.js +0 -1
  107. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BZcm7fs6.js +0 -1
  108. package/dist/worker/console/static/assets/index-BAEDjTbD.css +0 -1
  109. package/dist/worker/console/static/assets/index-wKEJUaP5.js +0 -482
  110. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DyCIq6jx.js +0 -1
  111. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CsKtO34q.js +0 -8
@@ -2176,6 +2176,12 @@ function isExecutedNodeStatus(status) {
2176
2176
  return false;
2177
2177
  return EXECUTED_NODE_STATUSES.has(status.toLowerCase());
2178
2178
  }
2179
+ /**
2180
+ * Node statuses that have not reached a terminal outcome. A live node's last
2181
+ * recorded attempt can be a failure that is already being retried, so history
2182
+ * copy must not present it as the final result.
2183
+ */
2184
+ const LIVE_NODE_STATUSES = new Set(["running", "started", "paused"]);
2179
2185
  const PASS_SUCCESS_STATUSES = new Set([
2180
2186
  "finished",
2181
2187
  "completed",
@@ -2221,12 +2227,21 @@ export function projectExecutionSummary(options) {
2221
2227
  const recovered = totalAttemptCount > 1 &&
2222
2228
  firstOutcome === "failure" &&
2223
2229
  finalOutcome === "success";
2230
+ // A node that is still live (running/started/paused) has not reached a
2231
+ // final outcome: its last *recorded* attempt may have failed while a
2232
+ // retry is already queued. Labelling that "最终失败" told the operator
2233
+ // the run was over when it was still working, so keep the attempt count
2234
+ // and mark the last attempt instead of the node.
2235
+ const stillRunning = options.status !== undefined &&
2236
+ LIVE_NODE_STATUSES.has(options.status.toLowerCase());
2224
2237
  // 一次就成功/失败:卡片不展示 historyLabel;Inspector 仍可拿 attempts 元数据。
2225
2238
  const historyLabel = totalAttemptCount <= 1
2226
2239
  ? undefined
2227
2240
  : recovered
2228
2241
  ? `${totalAttemptCount} 次 · 先失败后成功`
2229
- : `${totalAttemptCount} 次 · 最终${finalOutcome === "success" ? "成功" : "失败"}`;
2242
+ : stillRunning && finalOutcome === "failure"
2243
+ ? `${totalAttemptCount} 次 · 最近一次失败,仍在重试`
2244
+ : `${totalAttemptCount} 次 · 最终${finalOutcome === "success" ? "成功" : "失败"}`;
2230
2245
  return {
2231
2246
  totalAttemptCount,
2232
2247
  ...(recovered ? { recovered: true } : {}),
@@ -2266,12 +2281,18 @@ export function projectExecutionSummary(options) {
2266
2281
  }
2267
2282
  // 仅一轮 pass 时不在卡片展示(无叙事价值);多轮才展示中文「修复轮次 N」
2268
2283
  // 主文案,裸 P1/P2 编号不再作为主标题(原始编号仅 hover/title/诊断)。
2284
+ // 与 attempt 分支同理:节点仍在运行时,最后一个已记录 pass 的失败只是
2285
+ // 阶段性事实,不能当作最终结论。
2286
+ const livePasses = options.status !== undefined &&
2287
+ LIVE_NODE_STATUSES.has(options.status.toLowerCase());
2269
2288
  const historyLabel = passes.length <= 1
2270
2289
  ? undefined
2271
2290
  : `修复轮次 ${passes.join(",")}${finalOutcome === "success"
2272
2291
  ? " · 最终成功"
2273
2292
  : finalOutcome === "failure"
2274
- ? " · 最终失败"
2293
+ ? livePasses
2294
+ ? " · 最近一轮失败,仍在重试"
2295
+ : " · 最终失败"
2275
2296
  : ""}`;
2276
2297
  return {
2277
2298
  totalAttemptCount: passes.length,
@@ -69,10 +69,11 @@ export async function prepareScheduledGoalDraft(input, client) {
69
69
  if (!assessment.ok)
70
70
  throw new Error(`scheduled goal ineligible: ${assessment.reason}`);
71
71
  const digest = (bytes) => createHash("sha256").update(bytes).digest("hex");
72
+ const repositoryPath = (file) => path.relative(root, file).split(path.sep).join("/");
72
73
  return scheduledGoalDraftSchema.parse({ ...parsed, controllerRef: identity.packageFingerprint.value,
73
74
  prepared: { gateToken: `${snapshot.gate.id}:${snapshot.gate.digest}`,
74
- dagPath: path.relative(root, paths.dagDraftPath), dagHash: digest(dagBytes),
75
- contractPath: path.relative(root, paths.taskConfigPath), contractHash: digest(configBytes) }, });
75
+ dagPath: repositoryPath(paths.dagDraftPath), dagHash: digest(dagBytes),
76
+ contractPath: repositoryPath(paths.taskConfigPath), contractHash: digest(configBytes) }, });
76
77
  }
77
78
  /** Materialize only contract/runtime inputs; execution remains owned by the operation host. */
78
79
  export async function prepareDerivedScheduledGoalTask(goalId, ownerToken, goals, client) {
@@ -201,8 +201,13 @@ export async function captureScheduledGoalTree(worktree, base, allowedPaths, for
201
201
  }
202
202
  else if (stat.isFile()) {
203
203
  const bytes = await readFile(target);
204
- files.push({ name, kind: "file", hash: sha256(bytes), executable: Boolean(stat.mode & 0o111) });
205
204
  actualId = normalizedIds.get(name) ?? blobId(bytes);
205
+ files.push({
206
+ name,
207
+ kind: "file",
208
+ hash: sha256(`${objectFormat}:${actualId}`),
209
+ executable: Boolean(stat.mode & 0o111),
210
+ });
206
211
  actualMode = stat.mode & 0o111 ? "100755" : "100644";
207
212
  }
208
213
  else
@@ -174,6 +174,7 @@
174
174
  "network",
175
175
  "rate-limit",
176
176
  "unavailable",
177
+ "upstream-unavailable",
177
178
  "empty-output",
178
179
  "output-limit",
179
180
  "output-too-large",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.44.0-next.5",
3
+ "version": "0.44.0-next.7",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",
@@ -58,7 +58,7 @@
58
58
  "prepack": "npm run build",
59
59
  "prepublishOnly": "node scripts/check-npm-publish-policy.mjs && npm run typecheck && npm run test:full && npm run build",
60
60
  "lint": "npm run typecheck",
61
- "typecheck": "tsc --noEmit && npm run console:typecheck",
61
+ "typecheck": "node --max-old-space-size=4096 ./node_modules/typescript/bin/tsc --noEmit && npm run console:typecheck",
62
62
  "test": "node scripts/run-tests.mjs",
63
63
  "test:full": "node scripts/run-tests.mjs --full",
64
64
  "dogfood:backend": "tsx scripts/backend-dogfood-campaign.ts",
@@ -77,8 +77,8 @@
77
77
  "@deepseek-ai/cordis": "4.0.1",
78
78
  "@deepseek-ai/dsh-host-directory-picker-native": "0.1.1-rc.2",
79
79
  "@deepseek-ai/dsh-invariants": "0.1.1-rc.2",
80
- "@earendil-works/pi-ai": "0.83.0",
81
- "@earendil-works/pi-coding-agent": "0.83.0",
80
+ "@earendil-works/pi-ai": "0.84.4",
81
+ "@earendil-works/pi-coding-agent": "0.84.4",
82
82
  "@xterm/addon-fit": "^0.11.0",
83
83
  "@xterm/xterm": "^6.0.0",
84
84
  "commander": "^12.1.0",
@@ -1 +0,0 @@
1
- import{ag as o,ah as n}from"./mermaid.core-BdAMrTf7.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-Coop2FlL.js";import{_ as i}from"./mermaid.core-BdAMrTf7.js";import"./chunk-5VM5RSS4-0qRq64rI.js";import"./chunk-XXDRQBXY-DZNDRX1k.js";import"./chunk-KBJHAD2P-D8Gkppjl.js";import"./chunk-2GRJ4B5K-C_wydftK.js";import"./index-wKEJUaP5.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-Coop2FlL.js";import{_ as i}from"./mermaid.core-BdAMrTf7.js";import"./chunk-5VM5RSS4-0qRq64rI.js";import"./chunk-XXDRQBXY-DZNDRX1k.js";import"./chunk-KBJHAD2P-D8Gkppjl.js";import"./chunk-2GRJ4B5K-C_wydftK.js";import"./index-wKEJUaP5.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};