@tea-agent/loop-agent 0.38.2 → 0.38.4
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/AGENTS.md +4 -1
- package/CHANGELOG.md +171 -96
- package/README.md +11 -5
- package/bin/loop-agent.js +7 -3
- package/dist/application/task-lifecycle/advance.js +4 -0
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +16 -5
- package/dist/cli/program.js +16 -2
- package/dist/cli/update/notifier.js +2 -2
- package/dist/cli.js +2 -1
- package/dist/commands/dag-rerun.js +55 -1
- package/dist/commands/init-model-catalog.js +464 -0
- package/dist/commands/init-upgrade.js +265 -97
- package/dist/commands/init.js +428 -27
- package/dist/commands/inspect-next.js +8 -0
- package/dist/commands/task-advance.js +31 -0
- package/dist/executors/dag-pi-executor.js +76 -10
- package/dist/executors/pi-event-serializer.js +42 -1
- package/dist/executors/pi-executor.js +51 -0
- package/dist/executors/pi-extension-resolver.js +233 -0
- package/dist/executors/pi-playwright-cli-tool.js +51 -12
- package/dist/executors/pi-sdk-executor.js +187 -59
- package/dist/executors/shell-executor.js +265 -15
- package/dist/executors/shell-write-guard.js +7 -0
- package/dist/shared/dag-prompt-override.js +28 -0
- package/dist/shared/operator/capabilities.js +32 -0
- package/dist/shared/playwright-cli-command-policy.js +15 -0
- package/dist/shared/update/console-notifier.js +100 -0
- package/dist/{cli → shared}/update/npm-client.js +41 -8
- package/dist/{cli → shared}/update/state.js +41 -13
- package/dist/task/contract/constants.js +1 -0
- package/dist/task/contract/diff.js +26 -0
- package/dist/task/contract/project.js +5 -0
- package/dist/task/contract/schema.js +6 -1
- package/dist/task/source-prepare/build-draft.js +15 -0
- package/dist/task/source-prepare/parse-intent.js +24 -4
- package/dist/worker/cli.js +31 -1
- package/dist/worker/console/chat/routes.js +1 -0
- package/dist/worker/console/dag-execution-receipt.js +33 -0
- package/dist/worker/console/operator-actions.js +116 -0
- package/dist/worker/console/operator-user-error.js +2 -2
- package/dist/worker/console/pi-readiness.js +4 -4
- package/dist/worker/console/routes.js +43 -2
- package/dist/worker/console/security.js +63 -9
- package/dist/worker/console/server.js +36 -5
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C4bmo3iY.js → abnfDiagram-N423BO3Z-gauhD9kD.js} +1 -1
- package/dist/worker/console/static/assets/{arc-SAD7McOS.js → arc-pm3c2Rsl.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-DAVLUdK1.js → architectureDiagram-T3A2C74G-D_JAg3wH.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-CPPdv4vj.js → blockDiagram-VBNYF7ZC-Dk7-ex52.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-D1GRGZax.js → c4Diagram-5PPSVZJV-Uval9oRI.js} +1 -1
- package/dist/worker/console/static/assets/channel-CVrnUdZl.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D_Bq2ZqK.js → chunk-2GRJ4B5K-BSYjHs-v.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-CPLVtamK.js → chunk-2Q5K7J3B-KGUuBXI8.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DnaZWcL3.js → chunk-5RXB4S5H-JqAtxD9N.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-BRTmFgnq.js → chunk-5VM5RSS4-D6EJOVQK.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BRlfYZoH.js → chunk-6Q2QTUOP-B1JriSjm.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CjNybD4u.js → chunk-GF5L2VYU-D62b96Jd.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-D3e-74fG.js → chunk-JWPE2WC7-BsNKEC_r.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-Br3ir6f2.js → chunk-KBJHAD2P-B56v6-ZP.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-1NgVuRbh.js → chunk-RYQCIY6F-D2KPnd8K.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-BTYuvuWN.js → chunk-XXDRQBXY-kzKSCaaL.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-aX91WTya.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-aX91WTya.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BC6Bgosf.js → cose-bilkent-JH36ORCC-C6N6KNJd.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DV-HypfL.js → cynefin-VYW2F7L2-DiyymT2D.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-DhTaddO-.js → cynefinDiagram-MW4NZA55-BeKAXvf3.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BnEcOmiI.js → dagre-VZM6K2ZE-TkIdXfPF.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-xphGRVKp.js → diagram-7IWD3JNH-BFmSG3ks.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CrdD1mRG.js → diagram-B4RE2ZJO-DqpJT2Fs.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-D4YdLsaF.js → diagram-LBJQPF4R-r5ATN43t.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-LCKyGZ5U.js → diagram-Q27KOJAE-DEcSCMuR.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-BeiTe7t0.js → diagram-UB23O5K3-VOvYRLVc.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BO2cq8GS.js → ebnfDiagram-BXEA7PRR-D7f4Cb1u.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-CmWww3Nt.js → erDiagram-JOGREHBK-ziUf3U0G.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-C2kkUYg5.js → flowDiagram-UKHOOZJN-BoRdQ-1y.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-DY_JZ2iQ.js → ganttDiagram-PKOTCBZU-B1-GncNm.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-BizhCSw9.js → gitGraphDiagram-DS77QQ5N-CTW-ph8W.js} +1 -1
- package/dist/worker/console/static/assets/index-C8rOIAJr.css +1 -0
- package/dist/worker/console/static/assets/{index-BXN89VPX.js → index-DEbyrEfW.js} +147 -68
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-Dlo2eK_d.js → infoDiagram-6WML65LV-BFA337tZ.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-3EIlIIuZ.js → ishikawaDiagram-WSZJBQD7-BtEujgRR.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DiMDe5Yh.js → journeyDiagram-NVQOT4AX-C8ZwD2Jp.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-sN553oIN.js → kanban-definition-27J2QSJJ-Ck-z8B11.js} +1 -1
- package/dist/worker/console/static/assets/{linear-D9Py31Ld.js → linear-CAyXjQjN.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-D7Occzk_.js → mermaid.core-CcWKn6tS.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-DjDRboiR.js → mindmap-definition-FAOFIHXS-C2NuDO7E.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-Cgc4qlzp.js → pegDiagram-VL7TDLO6-BFub3PDz.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DxZj8pKd.js → pieDiagram-7S7Q4E2Y-BJx5THZ5.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-CJ50MngR.js → quadrantDiagram-CIZ2JOQS-DhalkDWV.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BY-OD8Tr.js → railroadDiagram-AXF67PYL-CVcBM36o.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-CQFButfK.js → requirementDiagram-LRYGKXZP-D_vy4n0w.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-BB_QUK_b.js → sankeyDiagram-W5VNT64P-DGYdJL1D.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CqhXZjyx.js → sequenceDiagram-SI44F4Z6-C1xJFg3k.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-2l1U4rgJ.js → sizeCapture-X5ZJPWSS-D_Fc43df.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-BX1FbrhJ.js → stateDiagram-OKZ733FA-BhGbIjbu.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DUt1lyFL.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DOSnT7hb.js → swimlanes-SLNWSIFB-DVkNcO-V.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BM6SGr7j.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-DVJQA7AN.js → timeline-definition-Z64GVDOM-BQU9ufV0.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-74uxl9gx.js → vennDiagram-T6HMQDX7-BCQhRmYB.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DsBxlcg_.js → wardleyDiagram-T6FBY63Y-DWerOyHO.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-snuW9Mjw.js → xychartDiagram-ELKLHX3M-DxLeebQU.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
- package/dist/worker/console/static-src/operator-chat/open-preview-in-browser.js +328 -0
- package/dist/worker/loop-agent/loop-agent-client.js +7 -3
- package/dist/worker/observe/node-input.js +74 -3
- package/dist/worker/observe/node-process.js +377 -0
- package/dist/worker/observe/routes.js +36 -3
- package/dist/worker/observe/shell-handler-keys.js +34 -0
- package/dist/worker/observe/static/api.js +66 -0
- package/dist/worker/observe/static/constants.js +8 -1
- package/dist/worker/observe/static/dag-history-labels.js +4 -0
- package/dist/worker/observe/static/format.js +23 -0
- package/dist/worker/observe/static/markdown-render.js +20 -1
- package/dist/worker/observe/static/operator-chrome.js +4 -0
- package/dist/worker/observe/static/state.js +13 -2
- package/dist/worker/observe/static/styles.css +73 -0
- package/dist/worker/observe/static/views/dag-inspector.js +612 -8
- package/dist/worker/observe/static/views/dag.js +8 -1
- package/dist/worker/observe/static/views/failures.js +5 -2
- package/dist/worker/observe/static/views/session-timeline.js +78 -9
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +76 -6
- package/dist/workflows/dag/backend-test-scenario-partitions.js +73 -1
- package/dist/workflows/dag/contract-output-registry.js +15 -0
- package/dist/workflows/dag/failure-category.js +12 -0
- package/dist/workflows/dag/frontend-implementation-contract.js +145 -40
- package/dist/workflows/dag/frontend-prewrite-gate.js +87 -135
- package/dist/workflows/dag/frontend-repair.js +14 -0
- package/dist/workflows/dag/frontend-risk.js +15 -2
- package/dist/workflows/dag/frontend-test-case-checklist.js +26 -2
- package/dist/workflows/dag/frontend-test-case-manifest.js +5 -0
- package/dist/workflows/dag/frontend-test-case-quality.js +5 -13
- package/dist/workflows/dag/frontend-test-environment-probe.js +227 -0
- package/dist/workflows/dag/frontend-test-markdown.js +61 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +160 -28
- package/dist/workflows/dag/frontend-test-standard-scenarios.js +68 -0
- package/dist/workflows/dag/frontend-verification-trace.js +29 -4
- package/dist/workflows/dag/init-hybrid.js +196 -117
- package/dist/workflows/dag/node-execution.js +139 -10
- package/dist/workflows/dag/prompt.js +15 -1
- package/dist/workflows/dag/rerun-plan.js +134 -3
- package/dist/workflows/dag/rerun-run.js +58 -6
- package/dist/workflows/dag/retry-policy.js +91 -0
- package/dist/workflows/dag/structured-output-repair.js +712 -0
- package/dist/workflows/dag/types.js +32 -1
- package/dist/workflows/dag/validate.js +41 -1
- package/docs/init-surface.manifest.json +5 -0
- package/docs/operations/README.md +1 -1
- package/docs/operations/local-development-environment.md +1 -5
- package/docs/skills/vetted-skill-registry.md +14 -0
- package/docs/templates/README.md +1 -1
- package/docs/templates/agent-dag.schema.json +44 -0
- package/docs/templates/backend-test-dag.json +2 -2
- package/docs/templates/frontend-test-dag.json +8 -10
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
- package/docs/templates/init-managed-agents.md +13 -3
- package/harness.json +2 -2
- package/package.json +12 -4
- package/scripts/next-info.mjs +356 -0
- package/scripts/next-publish-gate.mjs +238 -0
- package/scripts/release-source-binding.mjs +251 -0
- package/skills/analyze-product-requirements/SKILL.md +8 -5
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +1 -1
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +10 -6
- package/skills/analyze-product-requirements/references/example.md +50 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +11 -7
- package/skills/analyze-product-requirements/references/kb-integration.md +5 -5
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +8 -4
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +2 -2
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +1 -1
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +11 -1
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +20 -1
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +9 -0
- package/skills/codebase-scout/SKILL.md +1 -1
- package/skills/fe-test-ui-scout/SKILL.md +65 -0
- package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
- package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
- package/skills/improve-codebase-architecture/SKILL.md +81 -0
- package/skills/improve-codebase-architecture/deepening.md +37 -0
- package/skills/improve-codebase-architecture/html-report.md +123 -0
- package/skills/improve-codebase-architecture/interface-design.md +44 -0
- package/skills/improve-codebase-architecture/language.md +53 -0
- package/skills/loop-agent/references/command-reference.md +11 -4
- package/skills/playwright-cli/SKILL.md +22 -0
- package/skills/playwright-cli-case-generator/SKILL.md +20 -1
- package/dist/worker/console/static/assets/channel-R6oQIDkw.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BPXlmPWI.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BPXlmPWI.js +0 -1
- package/dist/worker/console/static/assets/index-CuH5CNFu.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DJKi0Qel.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-YYe7EEm5.js +0 -8
package/AGENTS.md
CHANGED
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
## 默认立场
|
|
14
14
|
|
|
15
15
|
- 仓库是记录系统:决策、契约、计划、测试、报告优先落到仓库,而不是停留在聊天里。
|
|
16
|
+
- 设计遵循“确定性交给代码,灵活性交给模型”:可明确枚举、校验、约束和复现的行为由代码负责;需要结合项目上下文进行理解、权衡和适配的部分交给模型。不要用硬编码取代模型擅长的灵活判断,也不要把安全边界或确定性校验推给模型。
|
|
17
|
+
- 简单问题不要复杂化:优先采用足以解决当前问题的最小清晰方案;没有真实需求或证据时,不额外引入抽象、流程、状态或扩展点。
|
|
18
|
+
- 测试案例应必要而不冗余:每个案例覆盖独立行为、边界或回归风险;合并语义等价的场景,避免用重复输入和重复断言堆砌覆盖,同时不得因精简遗漏关键路径。
|
|
16
19
|
- 一次只推进一个清晰工作块;主会话按 Orient → Select → Contract → Implement → Verify → Handoff 治理,runtime 真实流程以 `src/workflows/` 为准。
|
|
17
20
|
- 先验证基线,再叠加改动;完成定义必须可验证,不能靠删测试、降标准或模糊描述制造“完成”。
|
|
18
21
|
- Do not consider backward compatibility. Ignore legacy code/libraries.
|
|
@@ -38,7 +41,7 @@
|
|
|
38
41
|
4. 涉及测试纪律/验证声明/调试时继续读:`docs/governance/harness-methodology-*.md`。
|
|
39
42
|
5. 查看最近提交、相关 plan/progress/report;`git status --short --branch`;跑最小基线验证。
|
|
40
43
|
6. 后端/接口/pytest → `taskKind: "backend-test"`(不是 `--profile`);知识回写 `knowledge-sync`;图谱开荒 `knowledge-graph-bootstrap`。`--profile` 仅 `auto|minimal|standard|reviewed|supervised`。
|
|
41
|
-
7. 看板/observe → `agent-worker console`(默认 repo=当前目录、port=8790;listen 成功后默认打开系统浏览器,`--no-open` 禁止)(`/inspect/`
|
|
44
|
+
7. 看板/observe → `agent-worker console`(默认 repo=当前目录、port=8790;listen 成功后默认打开系统浏览器,`--no-open` 禁止)(`/inspect/` 只读;唯一实验例外:`HARNESS_DAG_RERUN_PROMPT_OVERRIDE=1` 时节点 inspector 出现「提示词重启」tab 并注入 mutation token,默认关闭时零 token 零 tab);`observe serve` 已下线(`OBSERVE_SERVE_REMOVED` + exit 2);`observe snapshot` 仍可用。
|
|
42
45
|
8. 分支合并 → 先读 `docs/operations/branch-merge-guideline.md`。
|
|
43
46
|
9. 涉及版本发布、npm 渠道、release 分支、GitHub Actions 发布链或 dist-tag → 先读 `docs/operations/version-and-release-management.md`。
|
|
44
47
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
-
###
|
|
5
|
+
### 重点更新
|
|
6
|
+
|
|
7
|
+
- 前端风险分级细分 manifest 触及语义:`allowedPaths` 含 `package.json`/lockfile 或需求文本提到 package.json 不再单独触发 `new-dependency` high-risk(改一行 script、调构建参数的任务不再被顶到强制全门禁并误标高风险),只有任务文本同时出现安装语言(npm install / yarn add / pnpm add / 新增依赖等)才升级;仅路径触及时记 `new-dependency:manifest-path-without-install-language` 拒绝信号,审计可溯。
|
|
8
|
+
- 前端验证 fallback 生成期诚实化:真实项目无可读取的 `package.json` scripts 且未探测到本地 tsc 时,不再注入必然失败的 `npm run typecheck` / `npm run build` / `npm test`(纯静态 / vanilla JS 站点原会在 verify 阶段假失败),改为执行显式 no-op 标记命令(`No frontend verification command configured`,进入冻结命令集可被 contract 引用,trace 如实记录 not-run),并写生成期 advisory 提示用 `--verify` 或执行约束显式声明验证命令后重新生成 DAG。无 repoRoot 的单测 fixture 保留历史 generic fallback。**标记不构成验证证据(fail-closed)**:verification trace 将绑定标记的 target 判为失败、只含标记的 static 证据判为 unavailable,repair 分类归为 non-repairable `contract`,verify 节点以 `frontend verification unavailable` 硬失败阻断 review/closeout——无真实验证命令的 run 无法走完绿灯链。
|
|
9
|
+
- frontend-test `passed` 回执链改按 dispatch 序号判序(B-HASH-01):`summarizePlaywrightCliReceipts` 先按 `sequence` 排序再判 open→find→cleanup 连续链;并行 `find`/`screenshot` 按完成时间落盘导致的乱序不再误杀执行已通过的 case(Wave 1 实测 4 条 passed 被改判 `browser-command-evidence-missing`)。真 gap / 重复序号仍 fail-closed。
|
|
10
|
+
- `tool-policy` 失败归一为 `executor`(B-REC-03):前端 preflight 能力拒绝(缺 `@playwright/cli` JS entry、allowlist 拒绝)不再落 `unknown`→`manual-review`+`humanRequired`;`dag report` 给出 `rerun-after-fix`,Console `standaloneTaskRerun` 的 R2 gate 放行 run-failed 同 task 整单重跑,无需人工决策门或 sibling task。
|
|
11
|
+
- Operator Chrome Band1 模式切换入口补显式 `aria-label`(B-FIND-01,方案 A):`操作`/`观测` mode link 原为 inline-flex 裸文本节点,不参与 name-from-content,a11y snapshot 序列化为无名 link,`find` 无法断言;补 `aria-label` 后实测 `find "观测"` 1 命中、click 后 `find "运行总览"` 1 命中,AC-FE-CHROME-003 恢复可见断言路径。
|
|
12
|
+
- Inspect 异常 Task 页空态文案统一(B-FIND-02):`failures.js` 运行时空态由 `当前没有失败或阻塞的 Task。` 改回与静态 `#failures-empty`、页面标题及回归目录 AC-FE-INS-004 一致的 `当前没有异常 Task`,消除静态/运行时文案漂移;实测新文案 find 1 命中、旧文案 0 命中。
|
|
6
13
|
|
|
14
|
+
- `next-release.yml` 防重复发布守卫补充幂等语义:`mode=recover`(dist-tags.next 已指向出自本 HEAD 的 tarball)时,手动 `workflow_dispatch` 重入不再撞 duplicate publish 硬失败,改为写 summary 后干净退出(§5.1 规则 4);非 recover 的重复发布仍硬失败。
|
|
15
|
+
|
|
16
|
+
- frozen repair 工具审计改为按 attempt 段扫描(B1):`session-events.jsonl` 跨 attempt 共享追加,attempt>1 的 `auditRepairAttemptToolUse` 现在只审本 attempt 字节段(newline 对齐),planner attempt 1 的 ls/find 不再被误判给 repair 轮;repair prompt 显式声明 read-only 工具契约与 allowlist 边界(B2),并内嵌 openspec-citations 输出格式正例;`LOOP_AGENT_IGNORE_STALE_DIST=1` 环境变量旁路 stale-dist guard(B3),Console spawn 的 sibling CLI 可继承。
|
|
17
|
+
- frontend plan/revision 结构化输出改为冻结 repair context + hash-bound canonical artifact:attempt>1 不再重放完整 planner prompt;成功后 stdout 只保留 artifact 路径,design review / prewrite 只消费已校验 artifact,不再从节点文本 merge。失败分类补齐 `structured-repair-exhausted` / `governance-blocked`,并修正 `structured-output-truncated` / `output-too-large` 的归一化映射。
|
|
18
|
+
- 将 `@earendil-works/pi-ai` 与 `@earendil-works/pi-coding-agent` 从可选依赖提升为精确 pin 的运行时依赖 `0.83.0`,将运行时直接导入的 `typebox` 精确声明为 `1.3.7`,并在根包声明 Node.js `>=22.19.0`。安装 `@tea-agent/loop-agent` 会默认装上 Pi SDK(含 `--omit=optional` 场景);`@cursor/sdk` 仍保持 optional。availability / readiness 探针、隔离 tarball canary、发布包契约测试与安装/本地环境说明同步对齐。
|
|
19
|
+
- backend-test Scenario Partition 仅接受绑定源有限 enum/分类集合的 GET/list query/path 轴;非法 Domain(空/重复/保留 token、无有限域、与 OpenAPI enum 不一致)报 `INVALID_PARTITION_DOMAIN` / `NO_FINITE_DOMAIN` / `PARTITION_SOURCE_MISMATCH` 根因,不再生成空后缀 `TP-SP-...-`、重复 slot,也不再级联 `MISSING_*_SLOT`。N6 对这些根因码 fail-closed;合法源分区缺槽仍阻断。N2 禁止为自由串/主键/required-only/boundary-only 建分区;N5 允许删除无源非法 Partition 及其派生槽位。
|
|
7
20
|
- npm `next` 渠道发布改为提交数节流:main push 仅当距上次 next 发布的 source commit ≥ 5 个 commit 时才自动发布(新增 `scripts/next-publish-gate.mjs`,读已发布 tarball build-stamp 对比 HEAD);不足阈值时 workflow 绿色跳过,手动 `workflow_dispatch` 不受限(切 release 线前强制出包 / 紧急补发)。发布文档真源 §4.1/§5.1/§7/§12 同步。
|
|
8
21
|
|
|
9
22
|
### 新增
|
|
10
23
|
|
|
24
|
+
- Operator Chat 时间线左缘新增「用户消息锚点栏」:每个用户输入一枚横向小条(12×3px 微圆角),紧凑等距排列并在时间线高度内垂直居中;条数超出栏高时相邻锚点自动聚合为稍宽的聚合条(悬停展开「N 条聚合输入」逐条列表,时间 + 单行预览,逐条点击定位)。悬停时小条向对话一侧平滑伸长(12→18px)并变橙,浮窗右侧弹出(白底圆角,正文最多 3 行、超出省略号,附序号与时间);单击平滑滚动定位到对应消息(精确停靠在视口顶部偏移 8px);覆盖视口顶部的锚点保持高亮。空会话自动隐藏;历史分页/流式更新/窗口缩放时自动重算(rAF 节流)。
|
|
25
|
+
- 实验能力「编辑失败节点提示词后从节点重跑」(默认关闭):内部开关 `HARNESS_DAG_RERUN_PROMPT_OVERRIDE=1` 启用后,`dag rerun` 支持 `--prompt-override <nodeId>@<file>`(全文替换)与 `--prompt-override-append <nodeId>@<file>`(追加指令:保留冻结原提示词,末尾追加 `<operator_addendum>` 块)。仅限 ERROR 且位于 reset closure 内的节点;mode + base/最终 prompt sha256 计入 planHash(execute 漂移即 `PLAN_DRIFT`),父 run spec 冻结、provenance(含 mode)落 `continuation.promptOverrides`。Console 新增 `dagPromptOverrideConfig` 开关探测 action,`dagRerunPlan`/`dagRerun` 接受 `promptOverrides`(`{nodeId, prompt, mode?}`);Inspect DAG 节点 inspector 新增「提示词重启」tab——默认「追加指令」模式(只读底稿 + 追加编辑器),可切换「全文替换(高级)」,预检通过展示执行估算,提交后续跑并跳转新 run,全程不离开图页;开关开启时 `/inspect` 只注入 **scoped** 变体凭据(独立 cookie + `__INSPECT_MUTATION_TOKEN__`,与 Console 通用 token 互不可重放),mutations 路由对 inspect 凭据仅放行 `dagRerunPlan`/`dagRerun`(其余 action 403 `ACTION_NOT_IN_INSPECT_SCOPE`),Inspect 不获得通用写能力;开关关闭时不注入任何 token、tab 不出现,检视面保持严格只读。
|
|
26
|
+
- 观察面 DAG Inspector 节点详情适配 Pi 扩展:执行器输入摘要展示节点声明的 `piExtensions` 短 id;新增「Pi 扩展运行事实」展示 `pi-extensions.json` 的 resolved(包名@版本)与 missing 降级原因(缺包降级不再静默);产物未生成/损坏时降级提示不阻断接口,绝对路径不外泄。
|
|
27
|
+
- 后端实现 DAG(standard / review-gated / supervised)的 Pi 节点支持按桶显式加载本机 Pi 导航扩展:读侧节点(除 closeout)加载 `pi-codegraph` + `pi-lens`,写侧节点只加载 `pi-codegraph`(pi-lens 的 `ast_grep_replace` 可绕过 writeSet,不加载);前端/测试模板与省略字段节点保持扩展全关。扩展发现始终关闭,只经白名单解析 `~/.pi/agent` 与项目 `.pi` settings 的已装包(缺包降级不失败,产物 `pi-extensions.json` 记录 requested/resolved/missing);session 后 pin 工具面剔 builtin 同名、deny 面与写工具,writer 的 `edit`/`write` 仍为 policy-wrapped;`.codegraph/**` index 同步不再计入 write-guard 越界。
|
|
28
|
+
- Pi SDK 终态 session-events JSONL 顶层增加可选 `finish_reason`:仅当 `message_end` / `turn_end` / `assistant_message` 明确携带非空终止原因时由序列化层提升,不伪造默认值,也不回流 `stopReason` 诊断。
|
|
29
|
+
- `backendTest` 布局配置纳入 Task Contract managed 注入面:`task advance` 新增 `--backend-test <json>`,可在公共任务生命周期内把 `testRoot`/`markdownRel`/`scriptRel`/`sharedSetupDoc`/`mode`/`gapDoc`/`executeScope` 写进 `task.json`,不再需要手工编辑(手工编辑会让任务漂移成 `externally-modified` 并拒绝 `--approve-gate`)。给出即整体替换、省略即保留既有配置(历史手写配置因此自愈)、`'{}'` 为显式清空回默认布局;重复 advance 幂等,契约保持 `managed`。`task contract diff` 把值变更标 routine `BACKEND_TEST_CONFIG_CHANGED`、丢键/清空额外标 elevated `BACKEND_TEST_CONFIG_WEAKENED`。
|
|
30
|
+
- Operator Chat 文件预览抽屉新增图标「新窗口打开」:用当前已加载内容在独立浏览器窗口打开全页阅读视图,窗口内可切换「预览 / 查看原文」(带宽高的 `window.open` popup,Markdown 排版、HTML 铺满视口的空 sandbox iframe、JSON pretty-print / 其它文本等宽滚动);打开成功后断开 `opener` 且不立刻 revoke Blob,避免空白页;弹窗被拦截时 header 附近报错且不关闭抽屉
|
|
11
31
|
- backend-test 适配 A–D:可配置 `backendTest` 布局(`testRoot`/`markdownRel`/`scriptRel`)、用户公共前置文档引用与模块顶部 `user_shared_setup`(不写 conftest)、查询轴 Scenario Partitions 确定性展开与 fail-closed 门禁、`mode=gap-fill` 13 节点增量 DAG。Slot ID 以声明的 Partition ID 为真源(`TP-<Partition ID>-...`)。
|
|
12
32
|
- 前端 plan 唯一机器契约化(JSON-only):`frontend-plan-pi` / `frontend-plan-revision-pi` 输出收敛为「一行导语 + 唯一 fenced `json` 契约 + 唯一 `openspec-citations` 引用块」,彻底移除「可选 Markdown 说明」;plan.md(`contracts/frontend-plan.md`)改由 prewrite gate 用纯函数 `renderFrontendPlanMarkdown` 确定性渲染(不新增 DAG 节点/不新增 Pi 调用)
|
|
13
33
|
- 契约 schema 新增 5 个可选字段(`implementationSteps` / `stylingStrategy` / `dependencyPolicy` / `residualRisks` / `realIntegrationGap`),`schemaVersion` 保持 1;`docs/templates/frontend-implementation-contract.schema.json` 同步
|
|
@@ -28,6 +48,15 @@
|
|
|
28
48
|
|
|
29
49
|
### 改进
|
|
30
50
|
|
|
51
|
+
- DAG 节点检查器「执行过程」按执行器分流:Pi 仍看 session-events;有命令的 shell 展示 `shell-command-receipt` 与 stdout/stderr;`frontendBrowserToolPreflight` 等内部处理器展示步骤回执(历史 run 可从 capability / attempt 产物合成)。空态不再把 shell/static 误说成「暂无过程日志」。节点输入补充 named handler 名称。脚本仍属于节点输入,不假装已执行。
|
|
52
|
+
- DAG 节点检查器「节点输出」在整段内容为完整 JSON 对象或数组时改为缩进代码块展示,不再把紧凑 `JSON.stringify` 挤成一段 Markdown 段落;截断或非法 JSON、普通 Markdown 仍走原阅读器。
|
|
53
|
+
- frontend DAG 的 materialized source references 恢复统一的有界 excerpt 与按需 read 指针,不再把 requirement/acceptance 文档全文复制进每个相关节点,也不再强制 contract/plan 重读全部绑定源文件,降低长需求在多节点中的重复上下文占用。
|
|
54
|
+
- frontend-test prepare-package 会从 `docs/templates/`、`harness.json` `governanceRoot`/templates 以及 init 投影的 `ai_workspace/loop-agent/templates/` 拷贝标准场景;full init 目标仓不再静默落到仅含 `STD-FE-SMOKE-ENTRY` 的 fallback。
|
|
55
|
+
- frontend-test 环境探测区分 connection-refused(curl 7)与 HTTP 4xx/5xx,并提示先启动本地前端后再从 probe 节点续跑;不再把所有不可达都写成同一句 `frontend-base-url-unreachable`。
|
|
56
|
+
- frontend-test 报告解析用例 Markdown 的 `##`/`###` 标题与有序列表(`测试步骤` / `预期结果` / `前置条件与重置`);缺 `测试目的` 时回退到用例 H1,避免主 HTML 出现空步骤。
|
|
57
|
+
- `dag rerun --from-node` 把尚未启动的 writer/map 视为首次执行;frontend-test probe 这种失败的 exclusive shell 可以带着下游未跑节点续跑,不必整图 `standaloneTaskRerun`。
|
|
58
|
+
- Pi SDK 节点在 stall watchdog(默认 15 分钟无 provider 活动)触发后,会先 abort 当前等待,并在同一会话自动发送一次「继续」;仅 abort 已确认且尚未调用 write 工具时恢复,失败仍判 timeout。绝对墙钟超时与 CLI 后端不走这条恢复。
|
|
59
|
+
- DAG 节点检查器「执行过程」时间线默认展开原始协议事件(`message_start` / `message_end`),按钮文案为「隐藏原始协议事件」;用户可点选关闭,同会话内选择会保持。
|
|
31
60
|
- Operator Chat 的乐观停止现在把“视觉已停止”和 Turn ownership 分开:Abort 获得可靠终态前明确显示“正在停止”,此时可为原会话保存一条服务端持久化的“停止后发送”消息;后一次覆盖前一次,切换会话、刷新页面或 Console 重启不会丢失,旧 Turn 结束后复用正常 Turn 准入路径自动发送,并以固定 `clientRequestId` 防止重复执行。
|
|
32
61
|
- Operator Chat 修复快速终止时“停止后发送”与普通发送之间的准入空洞:发送路径改读实时 ownership;若 deferred 请求恰好撞上旧 Turn 终态,会先按服务端状态对账,再使用同一 `clientRequestId` 自动转为普通发送,不再要求用户刷新重试或丢失本次提交。
|
|
33
62
|
- `dag rerun-task` 现在会把父 run 最后一轮仍未解决的 `verify-pi` / review 反馈、证据引用和修订轮次带入新完整 DAG;planner、implementer 与 verifier/reviewer 必须修复或举证说明不再适用,不能仅因文件已存在就返回 `already-satisfied`。Console 同步区分「自动修订」「从失败节点恢复」「带反馈重新执行任务」。
|
|
@@ -46,131 +75,201 @@
|
|
|
46
75
|
- 侧栏文件树实时刷新:agent 回合结束、浏览器标签页回到前台、手动点「刷新」时重拉根目录+全部已展开目录(此前手动刷新只拉根目录,子目录永远旧缓存)。
|
|
47
76
|
- Skills / Packages / Models 面板不再把 Pi 的 warning / collision 原文堆在列表上方:改成标题条一颗摘要芯片(如「14 条提示」),点开按「需要处理 / 名称不规范 / 同名未生效」分组,文案用自然语言,路径只显示末两段;名称不规范的技能在列表旁标「提示」,详情里说明「现在这样也能用」。加载失败仍单独成组,可点「再读一次」。
|
|
48
77
|
- Skills / Packages 双栏改为左右各自滚动;资源弹窗挂到 `document.body`,按顶部对话导航的实时高度在剩余视口居中,不再被 sticky 顶栏挡住上沿。
|
|
78
|
+
- 标准、评审和监督型 DAG 现在会在当前运行中重试短暂的验证故障;写入节点只有在确认工作区完全未变更时才会重试,避免因网络波动重新执行整条任务。
|
|
79
|
+
- 后端测试支持自定义目录、公共前置说明、查询场景分区和增量补缺模式;相关布局可通过 `task advance --backend-test` 纳入受管任务契约,不再需要手工修改 `task.json`。
|
|
80
|
+
|
|
81
|
+
- 裸 `agent-worker console` 在 listen 前会按本机自然日询问一次 npm `latest` 升级;继承当前 npm registry,失败不阻断启动,Console URL 仍只写 stdout。
|
|
82
|
+
- npm `next` 发布成功后会更新 `npm-next` 分支锚点;可用 `loop-agent inspect next` 查看已发布版本、源码提交、构建时间和本地尚未发布的提交。
|
|
83
|
+
- Operator Chat 的文件预览可在新窗口中打开,并可切换排版预览与原始内容;弹窗被浏览器拦截时会保留当前抽屉并给出提示。
|
|
84
|
+
- Pi SDK 的会话事件可透出模型明确返回的结束原因,便于诊断截断、停止和异常结束。
|
|
85
|
+
|
|
86
|
+
- 初始化模型配置新增 Pi/OpenCode 脱敏目录:代码只暴露白名单模型元数据和凭据就绪状态,执行初始化的模型结合目标项目自主选择并直接写入 LOW/MED/HIGH;只有实质歧义才询问用户。
|
|
87
|
+
- npm `next` 自动发布改为每累计 5 个提交触发一次,减少无意义构建;手动发布仍可随时执行。
|
|
88
|
+
- `dag rerun-task` 会继承上一轮尚未解决的验证和评审反馈,避免新一轮忽略旧问题或误判为已经完成。
|
|
89
|
+
- DAG 恢复入口会根据失败类型区分“从节点继续”和“完整重跑”,并避免把失败节点改写成成功状态。
|
|
90
|
+
- Operator Chat 停止会话时会显示真实进度;用户可预先提交一条“停止后发送”的消息,刷新页面或重启 Console 也不会丢失。
|
|
91
|
+
- Operator Chat 的命令说明和参数提示与实际能力保持一致,减少选错恢复入口或误用占位参数。
|
|
92
|
+
- 测试套件按 CPU、内存、平台和当前 DAG 压力动态分配资源,并减少重复启动进程,完整验证耗时更稳定。
|
|
93
|
+
|
|
94
|
+
### 修复
|
|
95
|
+
|
|
96
|
+
- backend-test 用例覆盖分析的 payload 形状提取在无 `python` 可执行文件的环境(现代 macOS 只有 `python3`)静默降级为空结果,导致 payload 观测路径全空、`PAYLOAD_SHAPE_MISMATCH` 误报;解释器解析改为 POSIX 优先 `python3`、Windows 优先 `python`(与 scenario-param 语法校验一致),仅在解释器缺失时尝试下一候选,分析输入自身的失败不再重试。
|
|
97
|
+
- Inspector「执行过程」时间轴按「执行分次」选择过滤:session-events 是跨 attempt 共享追加的单文件,此前所有次执行的事件重合显示、切换顶部分次不生效;现在按 `agent_start` 边界分段,选中第 N 次执行只显示该段并标注「已按第 N 次执行过滤 · 共 M 次执行」,单次执行与 pass 选择保持全量展示,检测不到边界时显式提示并回退全量。
|
|
98
|
+
- 前端 plan/revision 的 `openspec-citations` fence 提取改为行锚定正则:直接闭合的空 fence(无候选行、紧跟关闭 fence)此前被判定为「不存在 citation 块」而进入格式重试循环,现在计为合法的唯一 citation 块;重复、损坏或非唯一的 fence 仍被拒绝。
|
|
99
|
+
- `npm test` 前置段失败导致后续段(io-heavy / integration)被跳过时,`scripts/run-tests.mjs` 显式输出警告与补跑命令,不再静默跳过(此前失败汇总会被误读为全量覆盖)。
|
|
100
|
+
- npm 包现在会包含 `inspect next` 运行时依赖的查询脚本,安装后的 CLI 不再因缺少包内文件而无法启动。
|
|
101
|
+
- 初始化更新改为一次扫描与规划:固定投影按 recorded ownership 确定性增删改,多个语义合并按单文件写边界串行排队,全部完成后只做一次最终验证;已完成的 `--status` / `--report` 只读取哈希锚定证据,不再重复运行项目脚本。`harness.json` 按属性结构演进并保留项目值,仍存在于 Pi 的 LOW/MED/HIGH 保持不变,只重选失效档位;fresh init、update 与 doctor 会在 Pi 无可用模型时提前阻断。
|
|
102
|
+
- CLI 新版本检查与 `init upgrade` 的版本门禁会从调用开始就使用 npm 当前配置:目标项目 `.npmrc`、用户级/全局 `npm config set registry`、环境变量与 scoped registry 均继续由 npm 按原生优先级解析;企业镜像失败时不会偷偷回退官方源,并以脱敏原因区分超时、npm 启动失败、查询失败和无效响应。
|
|
103
|
+
- 同一浏览器、同一 hostname、不同端口的多个 Operator Console 不再争用认证 Cookie;不同项目和同一项目的多个 Console 可以并行对话,往返页面无需刷新。Console 重启后旧页面仍会被安全拒绝,刷新后恢复。
|
|
104
|
+
- Markdown 表格只处理横向溢出,鼠标停在表格上时仍可正常上下滚动对话。
|
|
105
|
+
- Windows 上执行后端测试场景参数的 Python 语法检查时,会跳过不可用的 Microsoft Store 占位程序,避免错误回滚合法改动。
|
|
106
|
+
- 旧版前端 DAG 也能识别增量计划修订,不再因契约格式差异反复重试;无法合并的修订会提示重新生成 DAG。
|
|
107
|
+
|
|
108
|
+
### 文档
|
|
109
|
+
|
|
110
|
+
- 整理 `0.36.0` 以来的更新日志,改为面向用户描述结果,并补齐 `0.38.0`、`0.38.1` 的正式发布记录。
|
|
111
|
+
- 新增检查以阻止纯英文条目、重复版本、版本倒序和非标准 `Unreleased` 标题。
|
|
112
|
+
|
|
113
|
+
## [0.38.1] - 2026-08-18
|
|
114
|
+
|
|
115
|
+
### 重点更新
|
|
116
|
+
|
|
117
|
+
- 前端实现计划统一使用结构化契约,修订只提交必要变更;系统会核对 OpenSpec 引用和组件选型依据,减少格式漂移、遗漏规范和无效返工。
|
|
118
|
+
- Operator Chat 增强了模型配置、MCP 工具、文件浏览和运行状态展示,常用操作更集中,长时间对话也更容易掌握上下文。
|
|
119
|
+
|
|
120
|
+
### 新增
|
|
121
|
+
|
|
122
|
+
- Console「模型与认证」页支持查看和编辑 LOW、MED、HIGH 三档 Pi 模型;保存前会校验配置,保存后自动刷新模型状态和空闲会话。
|
|
123
|
+
- Operator Chat 支持扩展提供的 MCP 工具;侧栏可查看已配置服务和当前会话实际可用的工具。
|
|
124
|
+
- 文件预览改为侧边抽屉,可在排版预览和原始内容之间切换,不会打断当前对话。
|
|
125
|
+
- 前端计划会记录实施步骤、样式策略、依赖选择、剩余风险和真实集成缺口,并在写入前检查组件选型依据。
|
|
126
|
+
|
|
127
|
+
### 改进
|
|
128
|
+
|
|
129
|
+
- 点击“停止”后对话会立即安静下来,并通过服务端状态对账确认最终结果,不再长时间停留在忙碌状态。
|
|
130
|
+
- 对话底部持续显示上下文占用;历史工具调用按所属回合展示,不再错误挂到下一条消息下。
|
|
131
|
+
- 文件树会在回合结束、页面回到前台或手动刷新时更新已展开目录,并支持直接引用整个目录。
|
|
132
|
+
- Skills、Plugins 和 Models 的提示改为分类摘要,列表支持独立滚动,弹窗不会再被顶部导航遮挡。
|
|
133
|
+
- Operator Chat 的恢复工具名称、参数和使用建议与实际能力保持一致,降低误选恢复方式的概率。
|
|
134
|
+
- 前端结构化输出过长或格式不完整时会有针对性地重试,减少因输出截断导致的整轮失败。
|
|
49
135
|
|
|
50
136
|
### 修复
|
|
51
137
|
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
- 前端 gate 内容驱动 revisionPatch 兼容 + verdict 归一化统一:旧 DAG(缺 `revisionPatch` 字段)但 revision 节点按协议输出 merge-patch 时,gate 按内容判定自动合并原始契约并走既有校验(不再因 `missing targets.files` 进入 retryable 死循环);patch 形态但无法合并(fallback 缺失/自身、原始节点不可读或非完整契约、apply 失败)→ `blocked` + 新增 `revision-patch-unmergeable`(错误信息含重新生成 DAG 指引);`normalizeVerdictCandidateLine` 增强 backtick 强调剥离,gate 的 `firstNonEmptyVerdictLine` 复用共享 normalize,runIf / output-protocol / gate 三处一致
|
|
138
|
+
- 前端计划修订能正确识别增量补丁,不再因“提交完整契约”和“只提交变更”两套要求冲突而循环失败。
|
|
139
|
+
- OpenSpec 引用必须来自真实读取记录;缺失、移动或未引用的规范会在写入前给出明确提示。
|
|
140
|
+
- 初始化升级和并发写入不再把构建产物或临时文件误判为越界修改。
|
|
141
|
+
- Console 的授权失效、模型配置错误和资源诊断会显示可操作的中文提示,不再直接暴露内部错误。
|
|
57
142
|
|
|
58
|
-
|
|
143
|
+
## [0.38.0] - 2026-08-17
|
|
144
|
+
|
|
145
|
+
### 重点更新
|
|
146
|
+
|
|
147
|
+
- npm 发布改为 `next`、版本发布线和人工 `latest` 三个渠道,开发版本不再自动覆盖稳定版本。
|
|
148
|
+
|
|
149
|
+
### 新增
|
|
150
|
+
|
|
151
|
+
- 主分支持续发布 npm `next`;发布分支维护对应版本线;`latest` 仅通过人工操作提升。
|
|
152
|
+
- 新增双周发布列车,可从指定 `next` 的源码提交创建发布分支,并绑定最终 tarball 与源码提交。
|
|
153
|
+
|
|
154
|
+
### 改进
|
|
59
155
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
- 新增 `docs/decisions/0014-openspec-gate-claim-verification.md`,并同步 `docs/runtime/frontend-implementation-workflow.md`、`docs/templates/frontend-task-constraints.md`、`docs/templates/frontend-design-contract.md`、`skills/frontend-implementation/references/node-contracts.md`
|
|
156
|
+
- 发布策略会同时校验分支、版本和目标渠道,不符合矩阵的发布会直接拒绝。
|
|
157
|
+
- 发布中断后可从已有分支、版本或标签继续,恢复时会核对预期源码提交,避免发布错误制品。
|
|
63
158
|
|
|
64
159
|
## [0.37.1-beta.0] - 2026-08-16
|
|
65
160
|
|
|
66
161
|
### 重点更新
|
|
67
162
|
|
|
68
|
-
-
|
|
69
|
-
- 强化 backend-test correspondence、scenario-param、Markdown/pytest writer、collection repair、日志审计和 Windows pytest argfile 执行链,稳定区分 controller TestBug、generated TestBug 与真实 API ProductBug
|
|
163
|
+
- 后端测试流程完成一轮真实项目验证:覆盖 146 个测试点和 77 个场景组合,并执行 82 个真实 API 测试,需求、用例与执行结果能够完整对应。
|
|
70
164
|
|
|
71
165
|
### 改进
|
|
72
166
|
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
- backend-test 的 REPAIRABLE collection repair 现在强制 non-empty diff,禁止 `already-satisfied` 制造假修复;Markdown review 增加 `### 测试点` 与三类 binding union 的 exact-set 校验并删除 legacy alias;no-body Case 的 payload correspondence 忽略同一 journey 的 direct setup POST/PUT DTO
|
|
80
|
-
- backend-test generated-local collection repair 从 HIGH 路由降为 MED,在保留 write guard 与 requireChangedFiles 的同时避开连续多轮 grok repair hallucinated blocked/changed-without-write,改由稳定 writer 路由执行有界单文件修复
|
|
81
|
-
- writer outcome 协议确定性归一化显式中文 `实现结果:已变更|已满足|已阻塞` 到 canonical `IMPLEMENTATION_OUTCOME`,仍拒绝无标签 prose、未知值和冲突值,不根据 diff 猜测语义
|
|
82
|
-
- scenario-param 识别 `"x" * _TITLE_MAX_LENGTH` 等长度表达式与 helper 常量名相乘形式
|
|
83
|
-
- correspondence 忽略 pytest payload 中的 `expect`/`echo_*` 辅助键,避免把 DTO 外 helper 字段误判为 PAYLOAD_SHAPE_MISMATCH
|
|
84
|
-
- scenario-param 解析 `bound=LEN100` 机器行、解引用 `_STATUS_ACTIVE` 等 Python 字符串常量,并把 `NOMINAL` 长度样本从 min/max 纠正为 nominal
|
|
167
|
+
- 请求体分析可识别常见包装函数、数据构造器、补丁合并和参数工厂,减少把测试准备数据误判为接口请求的问题。
|
|
168
|
+
- 场景参数校验增强了缺失值、空白、边界长度、非法枚举和辅助常量的识别,降低合法用例被误报的概率。
|
|
169
|
+
- 生成的 Markdown 和 pytest 用例必须使用明确且唯一的测试点编号,并避免猜测接口未声明的 ID 类型或响应结构。
|
|
170
|
+
- 修复流程会直接使用上游提供的测试文件路径,并要求产生真实改动,避免找错文件或“未修改却声称已修复”。
|
|
171
|
+
- 请求与响应日志支持有界脱敏记录,清理阶段可处理常见网络异常,排查失败原因更加可靠。
|
|
172
|
+
- 测试结果能够更稳定地区分控制器问题、生成用例问题和真实产品缺陷。
|
|
85
173
|
|
|
86
|
-
|
|
87
|
-
- scenario-param 兼容 `empty` 意图下的 omit/`missing-key`,规范化 `custom-literal` 外包引号与可见空白符,并把 `max+1`/`min`/`max` 的裸数字位置参数按长度 token 比较(含 oversized 数字本身);`custom-literal:trim` 视为 padded whitespace 语义标签
|
|
88
|
-
- backend-test writer 合同明确:`enum-invalid` 必须使用具体非法字面量且禁止 `_OMIT`/missing-key;`custom-literal:trim|ACTIVE|ARCHIVED` 必须使用真实 padded/enum 字面量,禁止 `filter-active` 类描述性伪值
|
|
89
|
-
- scenario-param 识别 `_*_MAX_LENGTH` / `_*_OVER_LENGTH` 等长度 helper 名,明确 `custom-literal:trim` 不能是全空白,并把无 pytest.param 的 request-level/health nominal 记为 MATCH 以免污染 eligibility
|
|
174
|
+
## [0.37.0] - 2026-08-16
|
|
90
175
|
|
|
91
|
-
|
|
176
|
+
### 新增
|
|
92
177
|
|
|
93
|
-
|
|
178
|
+
- Operator Chat 支持 Markdown 语法高亮、数学公式和 Mermaid 图表。
|
|
179
|
+
- 新增 DAG 操作入口与产物栏,可从对话中查看运行、门禁和交付结果。
|
|
180
|
+
- 对话中可查看上下文压缩进度、上下文占用和语义缓存状态。
|
|
181
|
+
- 当前回合的思考、工具调用和过程事件会按实际发生顺序实时展示。
|
|
94
182
|
|
|
95
|
-
###
|
|
183
|
+
### 改进
|
|
96
184
|
|
|
97
|
-
-
|
|
98
|
-
-
|
|
185
|
+
- 重跑标题会显示运行轮次,运行中的会话和停止按钮具有明确的状态标记。
|
|
186
|
+
- 错误提示改为自动消失的悬浮消息,不再挤压聊天区域。
|
|
99
187
|
|
|
100
188
|
### 修复
|
|
101
189
|
|
|
102
|
-
-
|
|
103
|
-
-
|
|
190
|
+
- 长会话标题能够稳定显示完整悬浮提示,相关活动也能定位到对应 Operation。
|
|
191
|
+
- 非规范的 `newTask` 编号会立即返回修正建议;PRD 标题和投影引用的识别更加宽容。
|
|
192
|
+
- 中断能力通过 Worker 边界调用,减少运行时模块之间的耦合。
|
|
104
193
|
|
|
105
|
-
|
|
194
|
+
## [0.36.4-beta.0] - 2026-08-16
|
|
106
195
|
|
|
107
|
-
|
|
108
|
-
- `docs/templates/frontend-task-requirement.md` 与 `docs/templates/frontend-design-contract.md` 把裸 `TODO` 改写为「编写协议」三要素(要写什么 / DAG 如何消费 / 缺失/冲突时 fail-closed),并新增 `test/frontend-template-no-todo.test.ts` 扫描三个前端模板断言无裸 `TODO`
|
|
109
|
-
- `docs/runtime/frontend-implementation-workflow.md` 的项目规范归类清单改为通用目录约定 + 归类规则,删除写死的示例项目文件名
|
|
196
|
+
> 前端任务读取项目规范的能力进入 beta。
|
|
110
197
|
|
|
111
|
-
|
|
198
|
+
### 新增
|
|
112
199
|
|
|
113
|
-
|
|
200
|
+
- 前端 DAG 会按模板、规则、主题和组件等用途整理项目规范,并把相关内容提供给契约、探索、计划和设计评审阶段。
|
|
114
201
|
|
|
115
|
-
###
|
|
202
|
+
### 修复
|
|
116
203
|
|
|
117
|
-
-
|
|
118
|
-
-
|
|
204
|
+
- 有适用规范时,计划和评审必须真实读取并引用;缺失、移动或删除的规范会给出清晰诊断,而不再笼统提示“未读取”。
|
|
205
|
+
- 规范发现不再静默截断前 40 个文件,同时会排除 loop-agent 自身的治理目录,减少漏读和误读。
|
|
119
206
|
|
|
120
|
-
###
|
|
207
|
+
### 文档
|
|
121
208
|
|
|
122
|
-
-
|
|
123
|
-
- 新增 `next-release.yml` / `cut-release-line.yml` / `release-line-publish.yml` / `promote-npm-latest.yml`,删除旧每日自动 latest 发布入口
|
|
124
|
-
- 发布策略改为 branch + version + channel 矩阵(`scripts/release-channel-policy.mjs`),fail closed
|
|
125
|
-
- 双周 Release Train:可从选定 next 的精确 source SHA 创建版本化 release 分支,带幂等恢复与单 tarball SHA-256 绑定
|
|
209
|
+
- 前端任务模板改为可执行的探索与失败处理说明,移除裸露的 `TODO` 和项目专属示例路径。
|
|
126
210
|
|
|
127
|
-
## [0.
|
|
211
|
+
## [0.36.3-beta.0] - 2026-08-16
|
|
212
|
+
|
|
213
|
+
> 前端 Mock 治理与新发布渠道进入 beta。
|
|
128
214
|
|
|
129
215
|
### 新增
|
|
130
216
|
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
- enter-DAG action, artifact rail projection, zh changelog
|
|
134
|
-
- surface compaction progress and timeline summary
|
|
135
|
-
- floating auto-dismiss toasts replace in-flow error alerts
|
|
136
|
-
- add running spinners to session titles and stop button
|
|
137
|
-
- show context ratio, semantic cache icons, align process entry typography
|
|
138
|
-
- show context usage and semantic cache labels in usage bar
|
|
139
|
-
- stream live turn process in strict order
|
|
217
|
+
- npm 发布分为 `next`、版本发布线和人工 `latest` 三个渠道,避免开发版本自动覆盖稳定版。
|
|
218
|
+
- 新增双周发布列车,可从指定 `next` 的源码提交创建发布分支,并校验最终 tarball 与源码一致。
|
|
140
219
|
|
|
141
|
-
###
|
|
220
|
+
### 改进
|
|
142
221
|
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
- backfill operation link for semantic activity refs
|
|
146
|
-
- fail fast on non-canonical newTask ids with suggested fix
|
|
147
|
-
- accept projected references and normalize PRD headings
|
|
222
|
+
- 前端设计评审会同时考虑任务声明的 Mock 策略和验证命令,避免评审通过后才被写入门禁阻断。
|
|
223
|
+
- 当任务提到 API 或 Mock、但契约缺少验证方式时,系统会在 DAG 生成阶段给出修复建议。
|
|
148
224
|
|
|
149
225
|
## [0.36.2] - 2026-08-16
|
|
150
226
|
|
|
151
227
|
### 修复
|
|
152
228
|
|
|
153
|
-
-
|
|
154
|
-
- exempt gitignore managed-block doc references in task-pool-root check
|
|
229
|
+
- 仓库治理检查不再把更新日志历史或 `.gitignore` 托管说明误认为非法任务池路径。
|
|
155
230
|
|
|
156
231
|
## [0.36.1] - 2026-08-16
|
|
157
232
|
|
|
158
233
|
### 新增
|
|
159
234
|
|
|
160
|
-
-
|
|
235
|
+
- 支持协作式中断正在运行的 DAG:当前节点安全结束后停止后续调度,并提供后续恢复入口。
|
|
161
236
|
|
|
162
237
|
### 修复
|
|
163
238
|
|
|
164
|
-
-
|
|
165
|
-
-
|
|
239
|
+
- 语义导入会在不同 Pi 模型档位之间重试,单次最长等待 300 秒,降低单一模型暂时不可用造成的阻塞。
|
|
240
|
+
- 中断资格判断移到可观测层,避免破坏运行时模块边界。
|
|
166
241
|
|
|
167
242
|
## [0.36.1-beta.0] - 2026-08-16
|
|
168
243
|
|
|
169
|
-
> 标准 DAG
|
|
244
|
+
> 标准 DAG 的计划阶段支持超长输出恢复。
|
|
170
245
|
|
|
171
246
|
### 改进
|
|
172
247
|
|
|
173
|
-
-
|
|
248
|
+
- 契约或计划输出过长时会自动重试为精简版本,只保留实施步骤、写入范围和验证命令等必要信息。
|
|
249
|
+
|
|
250
|
+
## [0.36.0] - 2026-08-15
|
|
251
|
+
|
|
252
|
+
### 重点更新
|
|
253
|
+
|
|
254
|
+
- Operator Chat 可以持续监督长时间运行的 DAG,并在失败后展示原因、恢复路径和可执行的后续动作。
|
|
255
|
+
- 新增任务旅程卡,将任务创建、人工门禁、多次运行、失败和恢复记录集中展示。
|
|
256
|
+
|
|
257
|
+
### 新增
|
|
258
|
+
|
|
259
|
+
- 会话删除改为列表内二次确认,减少误删并避免浏览器原生弹窗打断操作。
|
|
260
|
+
- 斜杠命令面板优化了卡片布局和键盘操作,在较小窗口中也能完整使用。
|
|
261
|
+
|
|
262
|
+
### 改进
|
|
263
|
+
|
|
264
|
+
- 运行状态、恢复建议和关键操作统一使用自然中文,减少内部状态码直接暴露给用户。
|
|
265
|
+
- 任务监督更能容忍短暂静默和状态延迟,降低正常运行被误判为中断的概率。
|
|
266
|
+
|
|
267
|
+
### 修复
|
|
268
|
+
|
|
269
|
+
- 恢复流程可正确读取运行报告,不再因响应结构差异误判为无法恢复。
|
|
270
|
+
- 变更范围以 Git 工作区的真实差异为准,不再根据模型回复推测是否修改过文件。
|
|
271
|
+
- PRD 验收标题支持更多常见写法;目录文档更新时会检查索引是否同步。
|
|
272
|
+
- Operator 自定义工具可正常进入 Pi SDK 会话,命令面板的高度和降级提示也更加稳定。
|
|
174
273
|
|
|
175
274
|
## [0.35.4-beta.0] - 2026-08-15
|
|
176
275
|
|
|
@@ -185,30 +284,6 @@
|
|
|
185
284
|
- `docs/templates/frontend-task-constraints.md` 的 Mock 约束从 TODO 改为可落地契约:要求从项目**探索**实际存在的确定性 Mock 验证命令(不硬编码命令名)并声明到 `task.json.frontendMock.verifyCommands`,说明生成期 `allowedMockStrategies` 来源、`mock-strategy-outside-allowed` 是生成期契约问题(修复 = 补契约 + 重新生成 DAG,plan-revision 无法修复)
|
|
186
285
|
- `docs/runtime/frontend-implementation-workflow.md` 的 task.json 输入标准补充 Mock 契约声明、命令探索与失败恢复指引
|
|
187
286
|
|
|
188
|
-
## [0.36.0] - 2026-08-15
|
|
189
|
-
|
|
190
|
-
### 新增
|
|
191
|
-
|
|
192
|
-
- 新增任务旅程活动栏,把任务创建、人工门禁、多次运行、失败和恢复记录聚合在同一张卡片中
|
|
193
|
-
- 强化 Operator Chat 的 DAG 恢复能力,运行失败后可以直接查看原因、恢复路径和后续动作
|
|
194
|
-
- 会话删除改为列表行内二次确认,减少误删,也不再被浏览器原生弹窗打断
|
|
195
|
-
- Operator Chat 可以持续监督长时间运行的 DAG,直到任务结束、失败或确实需要人工处理
|
|
196
|
-
- 优化斜杠命令面板的卡片布局和键盘操作,在较小窗口中也能完整浏览和选择命令
|
|
197
|
-
- 运行状态、恢复提示和关键操作文案统一为自然中文,减少内部状态码和生硬英文直接暴露给用户
|
|
198
|
-
|
|
199
|
-
### 修复
|
|
200
|
-
|
|
201
|
-
- 任务推进期间的监督更加可靠,减少因短暂静默或状态更新延迟造成的误判
|
|
202
|
-
- 运行器心跳不再提前唤醒 `operationWait`;Markdown 写入统一使用安全编辑工具,降低误覆盖风险
|
|
203
|
-
- 写入目录文档时必须同步更新对应索引,避免内容已经生成却无法从目录入口找到
|
|
204
|
-
- PRD 验收标准支持更多常见中文标题写法,不再因括号、破折号或措辞差异漏掉验收条件
|
|
205
|
-
- 要求执行节点真正生成计划文件;没有触碰禁写路径时,不再错误声称任务受阻
|
|
206
|
-
- 恢复重跑可以正确读取 `dag report` 返回的运行列表,不再因为响应结构差异误判为不可恢复
|
|
207
|
-
- 变更范围统一以 Git 工作区的真实差异为准,不再根据模型回复文字推测是否修改过文件
|
|
208
|
-
- Operator 自定义工具可以正常进入 Pi SDK 会话,不再被工具白名单意外过滤
|
|
209
|
-
- 斜杠命令面板会根据实际可用高度自动调整,不再被窗口边缘裁切
|
|
210
|
-
- 补齐 Operator Chat 的本地命令处理、动态命令降级和错误提示等交互缺口
|
|
211
|
-
|
|
212
287
|
## [0.35.3] - 2026-08-15
|
|
213
288
|
|
|
214
289
|
### 新增
|
package/README.md
CHANGED
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
|
|
25
25
|
### 安装
|
|
26
26
|
|
|
27
|
+
需要 Node.js `>=22.19.0`。建议先运行 `node --version` 确认环境满足要求;启用 npm `engine-strict` 时,旧版本 Node.js 会直接拒绝安装。
|
|
28
|
+
|
|
27
29
|
```bash
|
|
28
30
|
npm install -g @tea-agent/loop-agent@latest
|
|
29
31
|
loop-agent --version
|
|
@@ -45,12 +47,14 @@ npm install -g @tea-agent/loop-agent@0.37.5 # 精确、可复现
|
|
|
45
47
|
|
|
46
48
|
```bash
|
|
47
49
|
loop-agent init instructions --repo-root .
|
|
48
|
-
loop-agent init --repo-root . --
|
|
50
|
+
loop-agent init model-catalog --repo-root . --json
|
|
51
|
+
loop-agent init --repo-root . --profile full --merge \
|
|
52
|
+
--low-model <provider/model> --med-model <provider/model> --high-model <provider/model>
|
|
49
53
|
loop-agent init doctor --repo-root .
|
|
50
54
|
loop-agent inspect --repo-root .
|
|
51
55
|
```
|
|
52
56
|
|
|
53
|
-
|
|
57
|
+
`init model-catalog` 会通过 Pi runtime 与 OpenCode 的非 verbose 列表发现本机可用模型,只输出白名单模型元数据、Pi setup 状态和 provider 凭据就绪状态,不输出原始配置或凭据。已有 LOW/MED/HIGH 只要仍存在于 Pi 就保持不变;只有已移除或缺失的档位才由模型结合项目、能力、成本和上下文窗口重选。如果 Pi 没有模型定义,初始化模型会先向用户补齐 provider/model、API/base URL、上下文窗口、最大输出等无法推断的信息并协助配置;如果只是凭据缺失,则保留 harness 选择并修复认证。初始化会保留已有用户内容,并补充 `AGENTS.md`、`harness.json`、`ai_workspace/loop-agent/`、`.agents/skills/`、`.harness/` 和验证脚本等治理入口。
|
|
54
58
|
|
|
55
59
|
控制器升级后,旧项目可能仍使用过期的 repo-local skills、模板、managed blocks 和治理说明。普通安全仓库命令结束时会自动检测目标项目是否需要对齐:非 TTY 只向 stderr 输出提示且不写入目标;TTY 且无 human decisions、无活跃 DAG/Worker 时,可经明确 `y/yes` 同意后应用 deterministic safe actions;也可手动运行统一入口:
|
|
56
60
|
|
|
@@ -64,11 +68,11 @@ loop-agent init reconcile --repo-root .
|
|
|
64
68
|
|
|
65
69
|
```bash
|
|
66
70
|
loop-agent init upgrade --repo-root . --json
|
|
67
|
-
# controller
|
|
71
|
+
# controller 返回当前单文件 merge task 后(其余任务已在同一次计划中排队):
|
|
68
72
|
loop-agent init upgrade --repo-root . --run-id <run-id> --continue --json
|
|
69
73
|
```
|
|
70
74
|
|
|
71
|
-
它在 `.harness/init-upgrades/<run-id>/`
|
|
75
|
+
它在 `.harness/init-upgrades/<run-id>/` 保存身份、一次性模型目录与 surface 计划、动作收据、合并队列、验证与报告。固定投影文件按 recorded ownership 确定性新增、更新或安全删除;用户改过的文件和项目自适应内容才进入模型合并。多个合并仍逐文件限制 `allowedPaths`,但接受后直接激活下一项,不重复版本发现和全量规划;全部处理完只执行一次最终验证。`harness.json` 按属性结构新增/删除字段并保留项目值,同时同步 schema。已完成的 `--status` / `--report` 只读取控制器哈希锚定的证据,不重新执行项目脚本。默认管理项目 `.opencode/plugins/`、`.pi/extensions/` 和 `.pi/settings.json`,不会默认写 `~/.pi/agent/settings.json`。旧项目首次执行后需 reload 宿主会话。明确「检查初始化更新」「只检查,不要修改」仍只运行 `init check-update`。
|
|
72
76
|
|
|
73
77
|
完整说明见[初始化目标项目](website/docs/quick-start/init-target-project.md)。
|
|
74
78
|
|
|
@@ -112,7 +116,7 @@ loop-agent dag report --run-id <run-id>
|
|
|
112
116
|
| --- | --- | --- |
|
|
113
117
|
| 受治理 CLI | `loop-agent …` / `agent-worker …` | 权威写入与诊断 |
|
|
114
118
|
| Loop Operator Console | `agent-worker console` | Official 本地控制面(默认 repo=当前目录、`127.0.0.1:8790`,含 Operate 与 Inspect) |
|
|
115
|
-
| Inspect(只读) | `agent-worker console` → `/inspect/`;`observe snapshot` | 统一 Console 内只读检视;`observe serve` 已下线(REMOVED / exit 2) |
|
|
119
|
+
| Inspect(只读) | `agent-worker console` → `/inspect/`;`observe snapshot` | 统一 Console 内只读检视;`observe serve` 已下线(REMOVED / exit 2)。实验例外:`HARNESS_DAG_RERUN_PROMPT_OVERRIDE=1` 时节点 inspector 增加失败节点「提示词重启」tab(默认关闭,不注入任何 mutation token) |
|
|
116
120
|
|
|
117
121
|
```bash
|
|
118
122
|
# 终端 A:Console(任务/运行操作面;canonical mutation 只经 sibling loop-agent)
|
|
@@ -122,6 +126,8 @@ agent-worker console doctor --repo .
|
|
|
122
126
|
|
|
123
127
|
```
|
|
124
128
|
|
|
129
|
+
裸 `agent-worker console` 在 listen 前会做一次交互式 npm `latest` 检查(本机自然日最多询问一次,继承当前 npm registry / 企业镜像,失败不阻断启动)。询问与失败提示写 stderr,Console URL 仍只出现在 stdout。`console doctor`、帮助和版本命令不检查。
|
|
130
|
+
|
|
125
131
|
访问 Console <http://127.0.0.1:8790/>;**Operator Chat Official** 是 Console 内的主引导交互,默认打开「对话」工作区。构建时设置 `VITE_OPERATOR_CHAT_DEFAULT_LANDING=tasks` 可改回 Tasks;URL hash(`#/tasks`)与 localStorage 仍优先于默认值。顶部「检视」以及 `/inspect/` 提供只读 Dashboard、DAG、时间线与 artifacts;`loop-agent …` / `agent-worker …` CLI direct path 仍是受治理 fallback。当前状态为 **code ready, dogfood pending/unmet**,不宣称已替代 openCode 或其他外部主会话。
|
|
126
132
|
|
|
127
133
|
## 核心边界
|
package/bin/loop-agent.js
CHANGED
|
@@ -18,11 +18,15 @@ if (!existsSync(cliEntry)) {
|
|
|
18
18
|
* to silently execute a dist/ that predates the latest source edit. The
|
|
19
19
|
* classic failure mode is editing src/** and running the bin without
|
|
20
20
|
* `npm run build`, which executes the previous build. Suppress with
|
|
21
|
-
* --ignore-stale-dist
|
|
21
|
+
* --ignore-stale-dist (or LOOP_AGENT_IGNORE_STALE_DIST=1, which sibling
|
|
22
|
+
* processes such as a Console-spawned CLI inherit automatically) when
|
|
23
|
+
* intentionally running a stale build.
|
|
22
24
|
*/
|
|
23
25
|
const srcDir = join(packageRoot, "src");
|
|
24
|
-
const ignoreStale =
|
|
25
|
-
|
|
26
|
+
const ignoreStale =
|
|
27
|
+
process.argv.includes("--ignore-stale-dist") ||
|
|
28
|
+
process.env.LOOP_AGENT_IGNORE_STALE_DIST === "1";
|
|
29
|
+
if (process.argv.includes("--ignore-stale-dist")) {
|
|
26
30
|
process.argv = process.argv.filter((arg) => arg !== "--ignore-stale-dist");
|
|
27
31
|
}
|
|
28
32
|
if (!ignoreStale && existsSync(srcDir)) {
|
|
@@ -38,6 +38,7 @@ function hasEngineeringBoundary(input) {
|
|
|
38
38
|
return Boolean((input.allowedPaths && input.allowedPaths.length > 0) ||
|
|
39
39
|
(input.forbiddenPaths && input.forbiddenPaths.length > 0) ||
|
|
40
40
|
(input.verifyCommands && input.verifyCommands.length > 0) ||
|
|
41
|
+
input.backendTest !== undefined ||
|
|
41
42
|
input.fromText ||
|
|
42
43
|
input.fromDraftPath);
|
|
43
44
|
}
|
|
@@ -632,6 +633,7 @@ export async function advanceTaskLifecycle(input) {
|
|
|
632
633
|
allowedPaths: effectiveInput.allowedPaths,
|
|
633
634
|
forbiddenPaths: input.forbiddenPaths,
|
|
634
635
|
verifyCommands: effectiveInput.verifyCommands,
|
|
636
|
+
backendTest: input.backendTest,
|
|
635
637
|
},
|
|
636
638
|
});
|
|
637
639
|
if (!prepareResult.ok) {
|
|
@@ -687,6 +689,7 @@ export async function advanceTaskLifecycle(input) {
|
|
|
687
689
|
allowedPaths: effectiveInput.allowedPaths,
|
|
688
690
|
forbiddenPaths: input.forbiddenPaths,
|
|
689
691
|
verifyCommands: effectiveInput.verifyCommands,
|
|
692
|
+
backendTest: input.backendTest,
|
|
690
693
|
},
|
|
691
694
|
});
|
|
692
695
|
if (semantic.ok) {
|
|
@@ -707,6 +710,7 @@ export async function advanceTaskLifecycle(input) {
|
|
|
707
710
|
allowedPaths: effectiveInput.allowedPaths,
|
|
708
711
|
forbiddenPaths: input.forbiddenPaths,
|
|
709
712
|
verifyCommands: effectiveInput.verifyCommands,
|
|
713
|
+
backendTest: input.backendTest,
|
|
710
714
|
},
|
|
711
715
|
});
|
|
712
716
|
if (retry.ok) {
|
package/dist/build-stamp.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.38.
|
|
4
|
-
"gitSha": "
|
|
5
|
-
"builtAt": "2026-08-
|
|
3
|
+
"version": "0.38.4",
|
|
4
|
+
"gitSha": "98f72fa2898d37e75ce479d968efc5461480d9e1",
|
|
5
|
+
"builtAt": "2026-08-23T04:53:41.411Z"
|
|
6
6
|
}
|
|
@@ -7,6 +7,7 @@ import { runCoverageReport } from "../commands/coverage-report.js";
|
|
|
7
7
|
import { runExamples } from "../commands/examples.js";
|
|
8
8
|
import { runHandoffCheck } from "../commands/handoff-check.js";
|
|
9
9
|
import { runInspect } from "../commands/inspect.js";
|
|
10
|
+
import { runInspectNext } from "../commands/inspect-next.js";
|
|
10
11
|
import { runInstructions } from "../commands/instructions.js";
|
|
11
12
|
import { runTaskAdvance } from "../commands/task-advance.js";
|
|
12
13
|
import { runTaskStatus } from "../commands/task-status.js";
|
|
@@ -74,6 +75,7 @@ export function parseSummaryFlag(tokens) {
|
|
|
74
75
|
const DOCS_SUBCOMMANDS = ["audit", "archive"];
|
|
75
76
|
const INIT_SUBCOMMANDS = [
|
|
76
77
|
"instructions",
|
|
78
|
+
"model-catalog",
|
|
77
79
|
"doctor",
|
|
78
80
|
"check-update",
|
|
79
81
|
"update",
|
|
@@ -162,10 +164,19 @@ export const COMMAND_DEFINITIONS = [
|
|
|
162
164
|
name: "inspect",
|
|
163
165
|
adapter: "required",
|
|
164
166
|
tier: "operator",
|
|
165
|
-
intent: "Inspect the target repo harness manifest.",
|
|
166
|
-
usage: "inspect",
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
intent: "Inspect the target repo harness manifest, or report the current npm next binding.",
|
|
168
|
+
usage: "inspect | inspect next [--json]",
|
|
169
|
+
subcommands: ["next"],
|
|
170
|
+
handler: async ({ adapter, repoRoot, subcommand, rest }) => {
|
|
171
|
+
if (subcommand === "next") {
|
|
172
|
+
await runInspectNext(repoRoot, rest.filter((arg) => Boolean(arg)));
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (subcommand === undefined || subcommand.startsWith("-")) {
|
|
176
|
+
await runInspect(adapter, repoRoot);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
throw new Error("usage: inspect | inspect next [--json]");
|
|
169
180
|
},
|
|
170
181
|
},
|
|
171
182
|
{
|
|
@@ -205,7 +216,7 @@ export const COMMAND_DEFINITIONS = [
|
|
|
205
216
|
adapter: "none",
|
|
206
217
|
tier: "primary",
|
|
207
218
|
intent: "Initialize a target repository with loop-agent harness capabilities.",
|
|
208
|
-
usage: "init [instructions|doctor|check-update|update|reconcile|upgrade] [--profile full|minimal] [--merge] [--json|--markdown] [--bootstrap-surface|--apply-safe] [--client-recovery=auto|project|user|off] [--run-id <id> --status|--continue|--report]",
|
|
219
|
+
usage: "init [instructions|model-catalog|doctor|check-update|update|reconcile|upgrade] [--profile full|minimal] [--merge] [--model provider/model | --low-model provider/model --med-model provider/model --high-model provider/model] [--json|--markdown] [--bootstrap-surface|--apply-safe] [--client-recovery=auto|project|user|off] [--run-id <id> --status|--continue|--report]",
|
|
209
220
|
subcommands: [...INIT_SUBCOMMANDS],
|
|
210
221
|
handler: async ({ repoRoot, subcommand, rest }) => {
|
|
211
222
|
await runInit(repoRoot, [subcommand, ...rest].filter(Boolean), { readRuntimeActivity: readInitRuntimeActivity });
|