@tea-agent/loop-agent 0.41.0 → 0.42.0-next.1
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 +102 -14
- package/dist/adapters/context-transfer/optional-pi-handoff.js +31 -0
- package/dist/adapters/context-transfer/pi-session.js +61 -0
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +12 -0
- package/dist/cli/program.js +23 -1
- package/dist/commands/dag-artifact.js +284 -0
- package/dist/commands/dag-context.js +184 -0
- package/dist/commands/dag-rerun.js +206 -1
- package/dist/executors/dag-pi-executor.js +39 -12
- package/dist/executors/pi-sdk-executor.js +3 -0
- package/dist/{worker → infrastructure}/console/app-data.js +4 -0
- package/dist/infrastructure/console/artifact-revision-store.js +430 -0
- package/dist/infrastructure/console/context-export-store.js +160 -0
- package/dist/infrastructure/console/dir-lock.js +132 -0
- package/dist/{worker → infrastructure}/console/operation-store.js +28 -0
- package/dist/infrastructure/harness/artifact-store.js +10 -1
- package/dist/infrastructure/harness/atomic-write.js +12 -2
- package/dist/shared/context-transfer/artifact-revision.js +172 -0
- package/dist/shared/context-transfer.js +418 -0
- package/dist/shared/operator/capabilities.js +14 -0
- package/dist/shared/operator/safe-run-summary.js +1 -0
- package/dist/shared/path-safety.js +93 -0
- package/dist/shared/preview.js +28 -4
- package/dist/task/config-types.js +2 -1
- package/dist/task/task-demand-routing.js +3 -0
- package/dist/worker/console/chat/chat-event-store.js +2 -2
- package/dist/worker/console/chat/resource-preferences-store.js +1 -1
- package/dist/worker/console/chat/routes.js +1 -1
- package/dist/worker/console/chat/session-store.js +1 -1
- package/dist/worker/console/chat/user-questions.js +1 -1
- package/dist/worker/console/console-update-runtime.js +1 -1
- package/dist/worker/console/context-transfer-diagnostics.js +198 -0
- package/dist/worker/console/dag-confirmation.js +1 -1
- package/dist/worker/console/dag-execution-receipt.js +1 -1
- package/dist/worker/console/doctor.js +1 -1
- package/dist/worker/console/draft-store.js +1 -1
- package/dist/worker/console/human-gate-token.js +1 -1
- package/dist/worker/console/index.js +3 -3
- package/dist/worker/console/interview/assessment.js +1 -1
- package/dist/worker/console/interview/session.js +1 -1
- package/dist/worker/console/operation-runner.js +45 -4
- package/dist/worker/console/operation-sse.js +1 -1
- package/dist/worker/console/operation-wait.js +1 -1
- package/dist/worker/console/operator-actions.js +104 -3
- package/dist/worker/console/operator-surface-health.js +1 -1
- package/dist/worker/console/operator-user-error.js +169 -0
- package/dist/worker/console/pi-plugins.js +57 -0
- package/dist/worker/console/routes.js +637 -8
- package/dist/worker/console/security.js +35 -0
- package/dist/worker/console/server.js +6 -3
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-DwVJxUxz.js → abnfDiagram-N423BO3Z-DZZ8m3PO.js} +1 -1
- package/dist/worker/console/static/assets/{arc-DqfCcXdu.js → arc-D6PvaVd-.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-qMVtggRv.js → architectureDiagram-T3A2C74G-B_OTOiI8.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-ECrV38dh.js → blockDiagram-VBNYF7ZC-Bv6rqHBg.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-DBaaLqQv.js → c4Diagram-5PPSVZJV-B8eHr0oz.js} +1 -1
- package/dist/worker/console/static/assets/channel-BU5gOilw.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-BvfNHkAz.js → chunk-2GRJ4B5K-DYwR0im2.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-C5StiIbc.js → chunk-2Q5K7J3B-D2WPGqXt.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-HabGiJkS.js → chunk-5RXB4S5H-CQISJ_I7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BiTg127i.js → chunk-5VM5RSS4-C0o2Du1e.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-CZsXBPuR.js → chunk-6Q2QTUOP-4f8kr-U7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-D-r1MxLK.js → chunk-GF5L2VYU-D_OWvXzX.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-DQxb9plr.js → chunk-JWPE2WC7-CasdPz5X.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DMndGvCT.js → chunk-KBJHAD2P-Cj8lRrla.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-ByL4BgOJ.js → chunk-RYQCIY6F-CUvD1FSd.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-BVe1b1gL.js → chunk-XXDRQBXY-CqLw_eqB.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DIzKJGHr.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DIzKJGHr.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BAyGzN8j.js → cose-bilkent-JH36ORCC-ku-WqJPx.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-C5yVYU7E.js → cynefin-VYW2F7L2-Bq_PYDhl.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-x-MwsEm9.js → cynefinDiagram-MW4NZA55-BiGZV641.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CT5Tle5F.js → dagre-VZM6K2ZE-C4JRlglF.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-BARERhlS.js → diagram-7IWD3JNH-B0dNeWYG.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-BwfUz0VM.js → diagram-B4RE2ZJO-Cj35YvYM.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-Mk4r2WvJ.js → diagram-LBJQPF4R-uzQoJ2-8.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-KUrxuBs0.js → diagram-Q27KOJAE-D1a-Buoz.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-CjZOceZn.js → diagram-UB23O5K3-XjRrLRSs.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-rnwUCiEI.js → ebnfDiagram-BXEA7PRR-Da_O24cW.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DM4j23FM.js → erDiagram-JOGREHBK-BLJ8jrYU.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DD5HdDEs.js → flowDiagram-UKHOOZJN-B9GrLjM0.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CIAGSF47.js → ganttDiagram-PKOTCBZU-CeJ0TqiK.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DbwFbVEL.js → gitGraphDiagram-DS77QQ5N-Bm2eNNFX.js} +1 -1
- package/dist/worker/console/static/assets/index-H9rFJiGL.css +1 -0
- package/dist/worker/console/static/assets/{index-Bih9w9h9.js → index-xwu9GxEc.js} +80 -80
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-B-Pb0T66.js → infoDiagram-6WML65LV-DB26i3d8.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-B9Unk-YX.js → ishikawaDiagram-WSZJBQD7-BOGRyeZT.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-C2F3JkPt.js → journeyDiagram-NVQOT4AX-CZRoBO_6.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-Bl8-Xcoz.js → kanban-definition-27J2QSJJ-qlWhJyoB.js} +1 -1
- package/dist/worker/console/static/assets/{linear-yK4uZmC5.js → linear-CfUiDDB3.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-Bpa6PmuE.js → mermaid.core-BQe6fpqj.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-BfGRoCSe.js → mindmap-definition-FAOFIHXS-zFzWHw64.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-Bz6_HtST.js → pegDiagram-VL7TDLO6-DFGUqjZO.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-i0Umbsby.js → pieDiagram-7S7Q4E2Y-BB5i0l8Z.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-DaVQBobe.js → quadrantDiagram-CIZ2JOQS-obbVZ_X5.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-DMTGnSq7.js → railroadDiagram-AXF67PYL-BwdaNzc1.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-2ao_DaSq.js → requirementDiagram-LRYGKXZP-CkTJaugh.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-2SG1lTB9.js → sankeyDiagram-W5VNT64P-BwJ-hIgq.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BQYOLybR.js → sequenceDiagram-SI44F4Z6-BzSgmm7w.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-C8g3yjuI.js → sizeCapture-X5ZJPWSS-Bn3oj5Q1.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-q_F8nAQG.js → stateDiagram-OKZ733FA-dxhGtL8K.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cld2qK9v.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-8LrWpH2s.js → swimlanes-SLNWSIFB-BLpEInya.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-TIHpiT7w.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-BQoY3qzl.js → timeline-definition-Z64GVDOM-ChJGYcXy.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BDu1UjSp.js → vennDiagram-T6HMQDX7-DK-qjRer.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-C48M7Y0a.js → wardleyDiagram-T6FBY63Y-3qeaWAg-.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-YU6FTl_F.js → xychartDiagram-ELKLHX3M-CootlyP9.js} +1 -1
- package/dist/worker/console/static/index.html +7 -2
- package/dist/worker/console/static-src/app/useOperatorActions.js +3 -2
- package/dist/worker/console/static-src/shell/console-update-reload.js +25 -0
- package/dist/worker/console/workspace-context.js +28 -2
- package/dist/worker/console/workspace-registry.js +2 -2
- package/dist/worker/continuation/worker-continuation.js +278 -0
- package/dist/worker/observe/health.js +1 -1
- package/dist/worker/observe/node-transparency.js +572 -0
- package/dist/worker/observe/routes.js +51 -1
- package/dist/worker/observe/static/api.js +69 -5
- package/dist/worker/observe/static/dag-context-reason-labels.d.ts +9 -0
- package/dist/worker/observe/static/dag-context-reason-labels.js +120 -0
- package/dist/worker/observe/static/state.js +3 -1
- package/dist/worker/observe/static/styles.css +1037 -126
- package/dist/worker/observe/static/views/dag-inspector.js +1215 -58
- package/dist/worker/observe/static/views/session-timeline.js +75 -10
- package/dist/worker/outcomes/adapters.js +19 -0
- package/dist/worker/outcomes/types.js +1 -0
- package/dist/worker/pool/attempt-lease.js +97 -66
- package/dist/worker/pool/begin-attempt-with-lease.js +1 -0
- package/dist/worker/pool/reconcile.js +46 -1
- package/dist/worker/pool/run-store.js +2 -0
- package/dist/worker/pool/state-projection.js +2 -0
- package/dist/worker/task-spec/workflow-routing.js +8 -3
- package/dist/workflows/dag/artifact-bindings.js +149 -0
- package/dist/workflows/dag/artifact-revision-schema-registry.js +31 -0
- package/dist/workflows/dag/budget-enforcement.js +10 -0
- package/dist/workflows/dag/context-receipt.js +305 -0
- package/dist/workflows/dag/context-transfer/context-bundle.js +423 -0
- package/dist/workflows/dag/context-transfer/operator-actions.js +61 -0
- package/dist/workflows/dag/context-transfer/renderers.js +93 -0
- package/dist/workflows/dag/frontend-writer-rollback.js +32 -0
- package/dist/workflows/dag/init-hybrid.js +146 -0
- package/dist/workflows/dag/node-execution.js +112 -27
- package/dist/workflows/dag/path-safety.js +1 -0
- package/dist/workflows/dag/prompt.js +29 -4
- package/dist/workflows/dag/rerun-plan.js +555 -1
- package/dist/workflows/dag/rerun-run.js +601 -15
- package/dist/workflows/dag/runner.js +20 -1
- package/dist/workflows/dag/skill-snapshot.js +17 -0
- package/dist/workflows/dag/types.js +183 -7
- package/docs/architecture/runtime-boundaries.md +6 -6
- package/docs/architecture/worker-and-feature.md +1 -1
- package/docs/templates/agent-dag.schema.json +32 -0
- package/docs/templates/product-line/task.yaml +1 -1
- package/package.json +3 -1
- package/skills/loop-agent/references/command-reference.md +6 -0
- package/dist/worker/console/static/assets/channel-CL1NRAmS.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-PBGzzjZA.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-PBGzzjZA.js +0 -1
- package/dist/worker/console/static/assets/index-BfleX-qj.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DrxGBDJu.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BhpDxzAf.js +0 -8
- /package/dist/{worker → infrastructure}/console/repo-fingerprint.js +0 -0
|
@@ -14,6 +14,162 @@ const MUTATION_GATE_COPY = [
|
|
|
14
14
|
copy: "请求主机校验失败:非回环绑定时要求 Host 头,请刷新页面或检查访问地址。",
|
|
15
15
|
},
|
|
16
16
|
];
|
|
17
|
+
/**
|
|
18
|
+
* Context-transfer / artifact-revision 稳定 reason code(kernel CLI 会原样
|
|
19
|
+
* 透传到操作错误信息里)→ 面向操作者的中文语义。与 observe 侧
|
|
20
|
+
* dag-context-reason-labels.js 同源,保留原码便于诊断。
|
|
21
|
+
*/
|
|
22
|
+
const CONTEXT_TRANSFER_CODE_COPY = [
|
|
23
|
+
{
|
|
24
|
+
pattern: /\bCONTEXT_RECEIPT_MISSING\b/,
|
|
25
|
+
copy: "该节点没有执行时上下文回执(CONTEXT_RECEIPT_MISSING):只有真实执行过的模型节点才有可导出的上下文;历史 run 不做事后回填。",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
pattern: /\bCONTEXT_COMPONENT_UNAVAILABLE\b/,
|
|
29
|
+
copy: "部分上下文组件当前不可用(CONTEXT_COMPONENT_UNAVAILABLE),无法生成完整交接包。",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
pattern: /\bCONTEXT_BUNDLE_TOO_LARGE\b/,
|
|
33
|
+
copy: "导出内容超出体积上限(CONTEXT_BUNDLE_TOO_LARGE),请缩小节点范围或联系维护者调整上限。",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
pattern: /\bRAW_EXPORT_ACKNOWLEDGEMENT_REQUIRED\b/,
|
|
37
|
+
copy: "原文导出包含敏感数据风险(RAW_EXPORT_ACKNOWLEDGEMENT_REQUIRED),需要先勾选风险确认。",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
pattern: /\bSECRET_SCAN_CONFIRMATION_REQUIRED\b/,
|
|
41
|
+
copy: "候选文件疑似包含凭据(SECRET_SCAN_CONFIRMATION_REQUIRED),确认风险后才能继续。",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
pattern: /\bARTIFACT_BINDING_UNAVAILABLE\b/,
|
|
45
|
+
copy: "缺少结构化产物关系(ARTIFACT_BINDING_UNAVAILABLE):只有带产物绑定的新 run 支持修订与派生,历史 run 仅可查看/下载。",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
pattern: /\bARTIFACT_NOT_REVISION_ELIGIBLE\b/,
|
|
49
|
+
copy: "该产物不允许修订替换(ARTIFACT_NOT_REVISION_ELIGIBLE)。",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
pattern: /\bARTIFACT_IDENTITY_AMBIGUOUS\b/,
|
|
53
|
+
copy: "产物身份不唯一(ARTIFACT_IDENTITY_AMBIGUOUS),无法安全定位修订目标。",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
pattern: /\bARTIFACT_REVISION_SCHEMA_INVALID\b/,
|
|
57
|
+
copy: "候选文件不符合该产物声明的数据结构(ARTIFACT_REVISION_SCHEMA_INVALID),已拒绝入库。",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
pattern: /\bARTIFACT_REVISION_PATH_INVALID\b/,
|
|
61
|
+
copy: "候选目标路径无效(ARTIFACT_REVISION_PATH_INVALID),已拒绝。",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
pattern: /\bARTIFACT_REVISION_EXPIRED\b/,
|
|
65
|
+
copy: "修订候选已过期(ARTIFACT_REVISION_EXPIRED),请重新上传后再继续。",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
pattern: /\bARTIFACT_REVISION_DRIFT\b/,
|
|
69
|
+
copy: "候选文件与登记内容不一致(ARTIFACT_REVISION_DRIFT),请重新上传。",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
pattern: /\bARTIFACT_REVISION_QUOTA_EXCEEDED\b/,
|
|
73
|
+
copy: "修订暂存区配额已满(ARTIFACT_REVISION_QUOTA_EXCEEDED),请先丢弃不需要的修订或等待过期回收。",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
pattern: /\bARTIFACT_CONSUMER_UNKNOWN\b/,
|
|
77
|
+
copy: "无法确定受影响的下游节点(ARTIFACT_CONSUMER_UNKNOWN),派生继续已被阻止。",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
pattern: /\bARTIFACT_IMPACT_UNSAFE\b/,
|
|
81
|
+
copy: "影响范围包含不能自动重跑的节点(ARTIFACT_IMPACT_UNSAFE),派生继续已被阻止。",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
pattern: /\bRERUN_PLAN_DRIFT\b|\bPLAN_DRIFT\b/,
|
|
85
|
+
copy: "继续运行计划与当前事实发生漂移(RERUN_PLAN_DRIFT),请重新生成计划后再执行。",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
pattern: /\bWORKER_MANAGED_CONTINUATION_UNSUPPORTED\b/,
|
|
89
|
+
copy: "由 Worker 托管的运行暂不支持派生继续(WORKER_MANAGED_CONTINUATION_UNSUPPORTED),这是当前版本的明确边界,不是失败。",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
pattern: /\bWORKER_CONTINUATION_AUTHORITY_MISMATCH\b/,
|
|
93
|
+
copy: "Worker 派生运行的归属事实不一致(WORKER_CONTINUATION_AUTHORITY_MISMATCH),请刷新计划并核对 Task Pool 状态。",
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
pattern: /\bWORKER_CONTINUATION_LEASE_CONFLICT\b/,
|
|
97
|
+
copy: "该 Worker Task 已有运行占用(WORKER_CONTINUATION_LEASE_CONFLICT),请等待当前运行结束或先完成恢复核对。",
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
pattern: /\bWORKER_CONTINUATION_NEEDS_RECONCILE\b/,
|
|
101
|
+
copy: "Worker 派生运行已存在但终态尚未完成核对(WORKER_CONTINUATION_NEEDS_RECONCILE),不会再次启动;请先执行恢复核对。",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
pattern: /\bPARENT_IMMUTABILITY_VIOLATION\b/,
|
|
105
|
+
copy: "父运行事实发生变化(PARENT_IMMUTABILITY_VIOLATION),已阻止派生以保护历史证据。",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
pattern: /\bPARENT_LIFECYCLE\b/,
|
|
109
|
+
copy: "父运行当前状态不允许派生继续(PARENT_LIFECYCLE)。",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
pattern: /\bREQUEST_ID_REUSE_CONFLICT\b/,
|
|
113
|
+
copy: "相同请求 ID 已被其他操作占用(REQUEST_ID_REUSE_CONFLICT),请更换请求 ID 重试。",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
pattern: /\bOPERATION_NEEDS_RECONCILE\b/,
|
|
117
|
+
copy: "操作记录需要先恢复核对(OPERATION_NEEDS_RECONCILE):上次执行未确认结束,请刷新操作状态后重试。",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
pattern: /\bCONTEXT_EXPORT_FAILED\b/,
|
|
121
|
+
copy: "上下文导出失败(CONTEXT_EXPORT_FAILED),请稍后重试;若持续失败请检查该节点是否存在可导出的执行事实。",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
pattern: /\bCONTEXT_EXPORT_UNAVAILABLE\b/,
|
|
125
|
+
copy: "导出内容不存在或已过期(CONTEXT_EXPORT_UNAVAILABLE),请重新生成。",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
pattern: /\bLEASE_HELD\b/,
|
|
129
|
+
copy: "资源正被其他操作占用(LEASE_HELD),请等待当前操作结束或稍后重试。",
|
|
130
|
+
},
|
|
131
|
+
// 更新并初始化链路的稳定错误码。
|
|
132
|
+
{
|
|
133
|
+
pattern: /\bREGISTRY_VERSION_REGRESSION\b/,
|
|
134
|
+
copy: "所选渠道的最新版本比当前安装的版本更旧(REGISTRY_VERSION_REGRESSION),已阻止降级更新。请改用包含更新版本的渠道(如 next/beta)。",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
pattern: /\bUPDATE_LOCKED\b/,
|
|
138
|
+
copy: "另一个 loop-agent 更新正在进行(UPDATE_LOCKED),请等待其结束后重试。",
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
pattern: /\bINSTALL_FAILED\b/,
|
|
142
|
+
copy: "新版本安装失败(INSTALL_FAILED),请检查网络与 npm registry 后重试。",
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
pattern: /\bINSTALL_VERIFICATION_FAILED\b/,
|
|
146
|
+
copy: "安装后校验未通过(INSTALL_VERIFICATION_FAILED),未接棒新版本;请重试或手动安装。",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
pattern: /\bACTIVE_RUNTIME\b/,
|
|
150
|
+
copy: "当前存在活跃的 DAG/Worker 运行(ACTIVE_RUNTIME),更新已推迟;请等待运行结束后再更新。",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
pattern: /\bCHAT_TURN_ACTIVE\b/,
|
|
154
|
+
copy: "对话正在执行中(CHAT_TURN_ACTIVE),更新已推迟;请等待当前回合结束后再更新。",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
pattern: /\bOPERATION_ACTIVE\b/,
|
|
158
|
+
copy: "另一个 Console 操作正在进行(OPERATION_ACTIVE),请等待其结束后再更新。",
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
pattern: /\bHANDOFF_FAILED\b/,
|
|
162
|
+
copy: "新版本已安装,但接棒启动新 Console 失败(HANDOFF_FAILED);旧进程未被关闭,可直接重试或手动重启 Console。",
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
pattern: /\bINIT_NEEDS_RECONCILE\b/,
|
|
166
|
+
copy: "安全初始化未完全通过(INIT_NEEDS_RECONCILE):版本已就绪,请查看初始化待处理项后重试。",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
pattern: /\bINVALID_VERSION\b/,
|
|
170
|
+
copy: "安装版本或渠道版本号无法解析(INVALID_VERSION),请重试;若持续出现请反馈。",
|
|
171
|
+
},
|
|
172
|
+
];
|
|
17
173
|
/** Map internal spawn/controller errors to actionable Chinese copy. */
|
|
18
174
|
export function formatOperatorUserError(message) {
|
|
19
175
|
const raw = (message ?? "").trim();
|
|
@@ -37,6 +193,19 @@ export function formatOperatorUserError(message) {
|
|
|
37
193
|
if (/force-required|requires --force/i.test(raw)) {
|
|
38
194
|
return "该终态需要强制 Discard。请确认后勾选强制再试。";
|
|
39
195
|
}
|
|
196
|
+
if (/not-global|GLOBAL_INSTALL_UNPROVEN/i.test(raw)) {
|
|
197
|
+
return "当前 Console 由仓库内构建启动,不是全局 npm 安装,一键更新不可用。请全局安装(npm i -g @tea-agent/loop-agent)后从全局命令启动 Console 再更新,或手动更新本仓库后重启。";
|
|
198
|
+
}
|
|
199
|
+
if (/could not verify npm (?:latest|next) \(timeout\)/i.test(raw)) {
|
|
200
|
+
return "检查 npm 更新渠道超时:请确认本机网络或 npm registry 镜像可访问后重试。";
|
|
201
|
+
}
|
|
202
|
+
if (/could not verify npm (?:latest|next) \(/i.test(raw)) {
|
|
203
|
+
return "检查 npm 更新渠道失败:请确认本机 npm 可用、网络可访问 registry 后重试。";
|
|
204
|
+
}
|
|
205
|
+
for (const entry of CONTEXT_TRANSFER_CODE_COPY) {
|
|
206
|
+
if (entry.pattern.test(raw))
|
|
207
|
+
return entry.copy;
|
|
208
|
+
}
|
|
40
209
|
for (const entry of MUTATION_GATE_COPY) {
|
|
41
210
|
if (entry.pattern.test(raw))
|
|
42
211
|
return entry.copy;
|
|
@@ -2,6 +2,7 @@ import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import semver from "semver";
|
|
5
6
|
import catalogData from "./pi-plugins.catalog.json" with { type: "json" };
|
|
6
7
|
export function getPiAgentDir() {
|
|
7
8
|
const envDir = process.env.PI_CODING_AGENT_DIR;
|
|
@@ -125,6 +126,62 @@ export async function listPiPluginVersions(name) {
|
|
|
125
126
|
};
|
|
126
127
|
}
|
|
127
128
|
}
|
|
129
|
+
/** 单个已装插件的升级判定:latest 严格大于已装版本才算有更新。 */
|
|
130
|
+
export function isPluginUpgradable(installed, latest) {
|
|
131
|
+
if (!installed || !latest)
|
|
132
|
+
return false;
|
|
133
|
+
const current = semver.valid(installed);
|
|
134
|
+
const next = semver.valid(latest);
|
|
135
|
+
if (!current || !next)
|
|
136
|
+
return false;
|
|
137
|
+
return semver.gt(next, current);
|
|
138
|
+
}
|
|
139
|
+
/** 已装插件更新检查结果的最短缓存时长:避免前端频繁刷新打爆 registry。 */
|
|
140
|
+
const UPDATES_CACHE_TTL_MS = 60_000;
|
|
141
|
+
let cachedUpdates;
|
|
142
|
+
/**
|
|
143
|
+
* 检查所有已安装插件的可用更新:并发拉取每个包的 dist-tags.latest,
|
|
144
|
+
* 与 node_modules 里的实际版本做 semver 比较。单包失败不阻塞其它包。
|
|
145
|
+
* TTL 内重复调用直接复用上次结果(`force: true` 可绕过)。
|
|
146
|
+
*/
|
|
147
|
+
export async function checkPiPluginUpdates(options) {
|
|
148
|
+
const now = options?.now ?? Date.now;
|
|
149
|
+
if (!options?.force &&
|
|
150
|
+
cachedUpdates &&
|
|
151
|
+
now() - cachedUpdates.at < UPDATES_CACHE_TTL_MS) {
|
|
152
|
+
return cachedUpdates.view;
|
|
153
|
+
}
|
|
154
|
+
const fetchPackument = options?.fetchPackument ?? listPiPluginVersions;
|
|
155
|
+
const installed = options?.listInstalled?.() ??
|
|
156
|
+
listPiPlugins()
|
|
157
|
+
.plugins.filter((p) => p.installed)
|
|
158
|
+
.map((p) => ({ name: p.name, installedVersion: p.installedVersion }));
|
|
159
|
+
const statuses = await Promise.all(installed.map(async (p) => {
|
|
160
|
+
const result = await fetchPackument(p.name);
|
|
161
|
+
if (!result.ok) {
|
|
162
|
+
return {
|
|
163
|
+
name: p.name,
|
|
164
|
+
installedVersion: p.installedVersion,
|
|
165
|
+
upgradable: false,
|
|
166
|
+
error: result.error,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
name: p.name,
|
|
171
|
+
installedVersion: p.installedVersion,
|
|
172
|
+
latest: result.latest,
|
|
173
|
+
upgradable: isPluginUpgradable(p.installedVersion, result.latest),
|
|
174
|
+
};
|
|
175
|
+
}));
|
|
176
|
+
const view = {
|
|
177
|
+
checked: statuses.length,
|
|
178
|
+
upgradableCount: statuses.filter((s) => s.upgradable).length,
|
|
179
|
+
checkedAt: new Date().toISOString(),
|
|
180
|
+
plugins: statuses,
|
|
181
|
+
};
|
|
182
|
+
cachedUpdates = { at: now(), view };
|
|
183
|
+
return view;
|
|
184
|
+
}
|
|
128
185
|
function runPi(args) {
|
|
129
186
|
return new Promise((resolve) => {
|
|
130
187
|
mkdirSync(getPiAgentDir(), { recursive: true });
|