@tea-agent/loop-agent 0.26.5-beta.1 → 0.27.0

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 (71) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +29 -0
  3. package/README.md +13 -23
  4. package/dist/application/dag/args.js +7 -7
  5. package/dist/application/dag/generate-task-dag.js +2 -2
  6. package/dist/application/dag/run-dag.js +3 -4
  7. package/dist/application/dag/validate-dag.js +1 -1
  8. package/dist/application/task-lifecycle/advance.js +845 -0
  9. package/dist/application/task-lifecycle/gates.js +80 -0
  10. package/dist/application/task-lifecycle/index.js +7 -0
  11. package/dist/application/task-lifecycle/observe.js +395 -0
  12. package/dist/application/task-lifecycle/plan-transitions.js +224 -0
  13. package/dist/application/task-lifecycle/recommendations.js +180 -0
  14. package/dist/application/task-lifecycle/record.js +73 -0
  15. package/dist/application/task-lifecycle/types.js +1 -0
  16. package/dist/cli/command-definitions.js +14 -111
  17. package/dist/cli/help.js +6 -7
  18. package/dist/cli/program.js +26 -90
  19. package/dist/cli/update/policy.js +0 -1
  20. package/dist/commands/dag-final-verification.js +1 -1
  21. package/dist/commands/dag-init-hybrid.js +1 -1
  22. package/dist/commands/delegate.js +2 -2
  23. package/dist/commands/init.js +21 -19
  24. package/dist/commands/run-dag-progress.js +1 -1
  25. package/dist/commands/status.js +18 -17
  26. package/dist/commands/study-init.js +2 -2
  27. package/dist/commands/task-advance.js +335 -0
  28. package/dist/commands/task-contract.js +3 -5
  29. package/dist/commands/task-source-prepare.js +9 -4
  30. package/dist/commands/task-status.js +133 -0
  31. package/dist/governance/manifest-types.js +2 -2
  32. package/dist/shared/operator/capabilities.js +1358 -243
  33. package/dist/task/contract/adopt.js +1 -1
  34. package/dist/task/contract/apply.js +1 -1
  35. package/dist/task/contract/import-revision.js +1 -1
  36. package/dist/task/contract/recover.js +2 -2
  37. package/dist/task/read-model.js +18 -23
  38. package/dist/task/runtime.js +1 -1
  39. package/dist/task/source-prepare/completeness.js +1 -1
  40. package/dist/task/source-prepare/parse-intent.js +6 -1
  41. package/dist/task/source-prepare/prepare.js +23 -20
  42. package/dist/worker/console/operator-actions.js +288 -95
  43. package/dist/worker/console/recovery-cta.js +4 -4
  44. package/dist/worker/console/static/assets/{index-CSRIhuzh.js → index-CNO7n6qB.js} +1 -1
  45. package/dist/worker/console/static/index.html +1 -1
  46. package/dist/worker/materialize/harness-task-materializer.js +6 -5
  47. package/dist/worker/run-task/run-task.js +204 -112
  48. package/dist/worker/runner/run-ready.js +1 -1
  49. package/dist/workflows/dag/frontend-implementation-contract.js +5 -57
  50. package/dist/workflows/dag/frontend-prewrite-gate.js +1 -6
  51. package/dist/workflows/dag/init-hybrid.js +11 -42
  52. package/docs/templates/evaluation/agents-map-slim-v1.md +1 -1
  53. package/docs/templates/evaluation/agents-map-verbose-v0.md +3 -3
  54. package/docs/templates/harness.schema.json +2 -2
  55. package/docs/templates/init-managed-agents.md +13 -16
  56. package/docs/templates/production-readiness-checklist.md +3 -3
  57. package/harness.json +4 -4
  58. package/package.json +1 -1
  59. package/scripts/kb-bootstrap-init-skeleton.sh +2 -1
  60. package/scripts/kb-graph-incremental-prepare.mjs +2 -2
  61. package/skills/loop-agent/SKILL.md +18 -13
  62. package/skills/loop-agent/references/README.md +1 -1
  63. package/skills/loop-agent/references/command-reference.md +55 -84
  64. package/skills/loop-agent/references/harness-policy.md +19 -23
  65. package/skills/loop-agent/references/hybrid-dag.md +31 -33
  66. package/skills/loop-agent/references/long-running-loop.md +2 -2
  67. package/skills/loop-agent/references/one-shot-runs.md +4 -5
  68. package/skills/loop-agent/references/orchestrator-and-interventions.md +3 -3
  69. package/skills/loop-agent/references/post-implementation-and-patterns.md +4 -4
  70. package/skills/loop-agent/references/source-and-plan-practice.md +45 -51
  71. package/skills/loop-agent/references/task-workflow.md +14 -15
@@ -2455,38 +2455,9 @@ async function buildFrontendHybridDagFromTask(sources) {
2455
2455
  sourceContext,
2456
2456
  ].join("\n\n"),
2457
2457
  },
2458
- {
2459
- id: "frontend-contract-json-pi",
2460
- depends_on: [
2461
- "frontend-plan-revision-pi",
2462
- "frontend-plan-pi",
2463
- "frontend-final-design-review-pi",
2464
- "frontend-design-review-pi",
2465
- ],
2466
- dependsPolicy: "all-or-condition-skip",
2467
- role: "planner",
2468
- executor: "pi",
2469
- complexity: "MED",
2470
- writePolicy: "read-only",
2471
- outputMode: "structured-required",
2472
- retryPolicy: STRUCTURED_REQUIRED_PI_RETRY_POLICY,
2473
- allowedPaths: readOnlyPaths,
2474
- forbiddenPaths,
2475
- skills: FRONTEND_IMPLEMENTATION_SKILLS,
2476
- outputContract: "Return exactly one JSON object conforming to frontend-implementation-contract-v1. No Markdown, prose, comments, or code fences.",
2477
- subtask_prompt: [
2478
- "Convert the effective reviewed frontend plan into the canonical frontend-implementation-contract-v1 JSON.",
2479
- "Use frontend-plan-revision-pi when it is FINISHED; otherwise use frontend-plan-pi. Confirm the effective design review passed before producing the contract.",
2480
- "Return only the JSON object. Do not wrap it in Markdown or a code fence. Do not add explanatory text.",
2481
- "Preserve all requirement expectedOutcome, interaction trigger/expectedBehavior, target files, verification targets, Mock/API decisions, and Real Integration Gap from the effective plan.",
2482
- frontendContractSchemaBlock,
2483
- sourceContext,
2484
- ].join("\n\n"),
2485
- },
2486
2458
  {
2487
2459
  id: "frontend-prewrite-gate-shell",
2488
2460
  depends_on: [
2489
- "frontend-contract-json-pi",
2490
2461
  "frontend-final-design-review-pi",
2491
2462
  "frontend-design-review-pi",
2492
2463
  "frontend-plan-revision-pi",
@@ -2505,8 +2476,8 @@ async function buildFrontendHybridDagFromTask(sources) {
2505
2476
  commands: [],
2506
2477
  frontendPrewriteGate: {
2507
2478
  schemaVersion: 1,
2508
- planFromNodeId: "frontend-contract-json-pi",
2509
- planFallbackFromNodeIds: ["frontend-plan-revision-pi", "frontend-plan-pi"],
2479
+ planFromNodeId: "frontend-plan-revision-pi",
2480
+ planFallbackFromNodeIds: ["frontend-plan-pi"],
2510
2481
  reviewFromNodeId: "frontend-final-design-review-pi",
2511
2482
  reviewFallbackFromNodeIds: ["frontend-design-review-pi"],
2512
2483
  requiredRequirementIds: requirementIds,
@@ -5215,16 +5186,16 @@ export async function requireManagedTaskContractBinding(input) {
5215
5186
  const expectedRevision = state.ref?.revision ?? 0;
5216
5187
  const observedCanonicalHash = state.observedCanonicalHash ?? "<observedCanonicalHash-from-show>";
5217
5188
  const recovery = state.effectiveStatus === "transaction-incomplete"
5218
- ? `Recover the unfinished transaction first: loop-agent task contract recover --task ${input.taskId} --json`
5189
+ ? `Recover the unfinished transaction first: loop-agent task advance ${input.taskId} --json`
5219
5190
  : [
5220
5191
  "After reviewing the show JSON, either adopt the current on-disk facts:",
5221
- `loop-agent task contract adopt --task ${input.taskId} --expected-revision ${expectedRevision} --expected-observed-hash ${observedCanonicalHash} --request-id <unique-request-id> --request-payload-sha256 <sha256-of-this-adopt-request> --json`,
5192
+ `loop-agent task advance ${input.taskId} --from-draft --expected-revision ${expectedRevision} --expected-observed-hash ${observedCanonicalHash} --request-id <unique-request-id> --request-payload-sha256 <sha256-of-this-adopt-request> --json`,
5222
5193
  "or apply a reviewed draft:",
5223
- `loop-agent task contract apply --task ${input.taskId} --input <reviewed-draft.json> --expected-revision ${expectedRevision} --expected-observed-hash ${observedCanonicalHash} --request-id <unique-request-id> --request-payload-sha256 <sha256-of-input-file> --json`,
5194
+ `loop-agent task advance ${input.taskId} --from-draft --input <reviewed-draft.json> --expected-revision ${expectedRevision} --expected-observed-hash ${observedCanonicalHash} --request-id <unique-request-id> --request-payload-sha256 <sha256-of-input-file> --json`,
5224
5195
  ].join(" ");
5225
5196
  const err = new Error([
5226
5197
  `dag generate requires managed Task Contract for task ${input.taskId} (effectiveStatus=${state.effectiveStatus})`,
5227
- `Inspect current state: loop-agent task contract show ${input.taskId} --json`,
5198
+ `Inspect current state: loop-agent task status ${input.taskId} --json`,
5228
5199
  recovery,
5229
5200
  "Do not auto-adopt or auto-apply before confirming the Task Contract facts and concurrency fields.",
5230
5201
  ].join("; "));
@@ -5316,7 +5287,7 @@ async function buildHybridDagForTemplate(sources, template) {
5316
5287
  else if (template === "review-gated-dag")
5317
5288
  spec = buildReviewGatedHybridDag(standard, sources);
5318
5289
  else
5319
- spec = await buildSupervisedHybridDag(standard, sources);
5290
+ spec = buildSupervisedHybridDag(standard, sources);
5320
5291
  }
5321
5292
  applyProjectGovernanceReview(spec, template, sources);
5322
5293
  // New generate path always emits DagSpec v4 + bindings.
@@ -5750,12 +5721,10 @@ function buildWriteSetGateNode(sources) {
5750
5721
  },
5751
5722
  };
5752
5723
  }
5753
- async function buildSoftVerifyNode(sources) {
5724
+ function buildSoftVerifyNode(sources) {
5754
5725
  const implementId = implementationNodeId();
5755
5726
  const strategy = resolveDagVerifyStrategy(sources.taskConfig, "1");
5756
- const fallbackCommands = sources.repoRoot
5757
- ? (await discoverFrontendFallbackVerifyCommands(sources.repoRoot)).staticCommands
5758
- : ["npm run typecheck"];
5727
+ const fallbackCommands = ["npm run typecheck"];
5759
5728
  const focusedIntermediate = sources.verifyCommands?.intermediate.filter((command) => !isFullSuiteVerifyCommand(command));
5760
5729
  const plannedIntermediate = applyMavenVerificationPlanning({
5761
5730
  repoRoot: sources.repoRoot,
@@ -5997,7 +5966,7 @@ function resolveSupervisedConvergence(taskConfig) {
5997
5966
  chainNodeIds: [...SUPERVISED_CONVERGENCE_CHAIN_NODE_IDS],
5998
5967
  };
5999
5968
  }
6000
- async function buildSupervisedHybridDag(standard, sources) {
5969
+ function buildSupervisedHybridDag(standard, sources) {
6001
5970
  const contract = getTaskOrThrow(standard, "contract-pi");
6002
5971
  const scoutSrc = getTaskOrThrow(standard, "scout-src");
6003
5972
  const scoutTests = getTaskOrThrow(standard, "scout-tests");
@@ -6049,7 +6018,7 @@ async function buildSupervisedHybridDag(standard, sources) {
6049
6018
  "final-write-set-audit-format-repair-pi",
6050
6019
  ],
6051
6020
  }),
6052
- await buildSoftVerifyNode(sources),
6021
+ buildSoftVerifyNode(sources),
6053
6022
  buildProcessSupervisorNode(sources),
6054
6023
  buildProcessGateNode(sources),
6055
6024
  buildRepairNode(sources),
@@ -24,7 +24,7 @@
24
24
  - Shell 搜索优先 `rg`,按名找文件优先 `fd`;脚本用 Git Bash / 兼容 Bash。
25
25
  - 用 loop-agent 迭代本仓库时,控制器必须来自已发布 npm 包(记录实际版本);启动后不要中途升级;不要用工作区 `npm link` / `npm run dev` 控制可能改 CLI/runtime/package 的任务。
26
26
  - 反复出现的约束固化为文档、脚本、检查、测试或模板;禁止占位实现(除非 contract 标明脚手架)。
27
- - 非微小实现:`exec-plan` 不能替代 Agent DAG;除非用户要求 one-shot 或计划记录 escape hatch,否则改实现前完成 `new-task`、结构化路径、`dag run-task`、`dag validate` writeSet 审查。
27
+ - 非微小实现:`exec-plan` 不能替代 Agent DAG;除非用户要求 one-shot 或计划记录 escape hatch,否则改实现前完成 `task advance`(结构化路径 + writeSet 审查),不得主会话直接改实现。
28
28
  - 不要自行引入外部 SDD/spec-first 等强制平行治理树;以本文件与 `docs/` 为准(ADR 0006)。
29
29
 
30
30
  ## 开始顺序
@@ -27,7 +27,7 @@
27
27
  - 用 loop-agent 迭代本仓库时,控制器必须来自已发布的 npm 安装包;首次安装或有意升级可用 `@tea-agent/loop-agent@latest`,但一次自举任务启动后不要中途升级控制器,并记录 `npm list -g @tea-agent/loop-agent --depth=0` 显示的实际版本。不要用当前工作区的 `npm link` 或 `npm run dev` 控制可能改动 CLI、DAG runtime、executor、package metadata 或 build output 的任务。
28
28
  - 反复出现的约束要固化为文档、脚本、检查项、测试或模板。
29
29
  - 除非用户明确要求,不要自行引入外部 SDD、spec-first、brainstorming 等方法论的强制设计文档、审批门或专用目录;本仓库的工作流程以本文件和 `docs/` 中的治理规则为准。
30
- - 对非微小的实现或修复,`exec-plan` 只负责记录 Contract、进度和验证证据,不能替代 Agent DAG。除非用户明确要求 one-shot,或在计划中记录了适用的 escape hatch 与理由,否则在改动实现文件前必须完成 `new-task`、结构化 `allowedPaths` / `forbiddenPaths`、`dag run-task` `dag validate`;随后按已校验的 DAG 执行并审查 writer `writeSet`。
30
+ - 对非微小的实现或修复,`exec-plan` 只负责记录 Contract、进度和验证证据,不能替代 Agent DAG。除非用户明确要求 one-shot,或在计划中记录了适用的 escape hatch 与理由,否则在改动实现文件前必须完成 `task advance`(含结构化 `allowedPaths` / `forbiddenPaths` writeSet 审查);随后 `--approve-gate` 长跑,不得主会话直接改实现。
31
31
  - 禁止占位实现;除非 contract 明确约定为脚手架且标出后续闭环。
32
32
 
33
33
  ## 开始顺序
@@ -53,7 +53,7 @@
53
53
  9. 查看最近提交、相关执行计划、progress/report,确认当前上下文。
54
54
  10. 检查 `git status --short --branch`。
55
55
  11. 运行本次任务相关的最小基线验证。
56
- 12. 如果用户提到"后端测试"、"接口测试"、"pytest"、"自动化测试",在任务 `task.json` 中设置 `taskKind: "backend-test"` 再 `dag run-task`;不要用 `--profile backend-test`(CLI 不接受该值,专用模板只走 taskKind)。知识回写用 `taskKind: "knowledge-sync"`(须 `featureId`),图谱开荒用 `taskKind: "knowledge-graph-bootstrap"`。`--profile` 仅表示治理强度:`auto|minimal|standard|reviewed|supervised`。
56
+ 12. 如果用户提到"后端测试"、"接口测试"、"pytest"、"自动化测试",在任务 `task.json` 中设置 `taskKind: "backend-test"` 再 `task advance`;不要用 `--profile backend-test`(CLI 不接受该值,专用模板只走 taskKind)。知识回写用 `taskKind: "knowledge-sync"`(须 `featureId`),图谱开荒用 `taskKind: "knowledge-graph-bootstrap"`。`--profile` 仅表示治理强度:`auto|minimal|standard|reviewed|supervised`。
57
57
  13. 如果用户提到"看板"、"observe"、"监控面板"、"启动看板",使用 `agent-worker console` 启动统一 Operator Console(默认 repo=当前目录、port=8790;兼容入口 `agent-worker console serve --repo . --port 8790`);`/inspect/` 提供只读检视。`agent-worker observe serve --repo . --port 8787` 仅为兼容入口。
58
58
  14. 如果用户要求“合并 `<source>` 到 `<target>`”或“合并 origin/main 到当前分支”,先阅读 `docs/operations/branch-merge-guideline.md`,按影响自动选择快速、标准或深度模式;始终冻结 source SHA、审查双方功能、运行 merge-tree、生成 source-SHA 合并报告,并在提交前再次 fetch 防止主干前进。
59
59
 
@@ -88,7 +88,7 @@
88
88
  - 优先沿用现有 helper、目录边界和局部模式,再考虑新增抽象。
89
89
  - 长期决策写入 `docs/`,不要只留在聊天里。
90
90
  - 分支合并遵循 `docs/operations/branch-merge-guideline.md`;快速模式只用于可证明的低风险/no-op 合并,涉及冲突、init/package/runtime/release/public API 时必须升级为标准或深度模式。
91
- - 后端测试、接口/API 测试、pytest 或明确的后端自动化测试,必须把 `.harness/tasks/<task-id>/task.json` 的 `taskKind` 设置为 `"backend-test"`,不得保留默认 `standard`。`backend-test` 是 `taskKind`,不是 `--profile` 的可选值;`dag run-task` 继续使用 `--profile auto` 选择治理等级。仅说“自动化测试”且前后端不明时,先根据任务源和项目技术栈判断,禁止无条件路由。
91
+ - 后端测试、接口/API 测试、pytest 或明确的后端自动化测试,必须把 `.harness/tasks/<task-id>/task.json` 的 `taskKind` 设置为 `"backend-test"`,不得保留默认 `standard`。`backend-test` 是 `taskKind`,不是 `--profile` 的可选值;`task advance` 继续使用 `--profile auto` 选择治理等级。仅说“自动化测试”且前后端不明时,先根据任务源和项目技术栈判断,禁止无条件路由。
92
92
  - 本地 Operator Console:`agent-worker console`(默认 repo=当前目录、port=8790;兼容 `agent-worker console serve --repo . --port 8790`),访问 `http://127.0.0.1:8790/`;其中 `/inspect/` 为只读运行检视。默认绑定本机 `127.0.0.1`;可用 `--host 0.0.0.0` / `--debug`,不要直接暴露到公开网络。端口被占用时不会自动更换,请用 `--port <port>` 显式指定。
93
93
  - 面向使用者的新增、修改、删除或修复,应同步更新根目录 `CHANGELOG.md`;保持版本级摘要即可,不写过细技术细节。
94
94
  - 面向用户的中文更新日志、README 和说明文档应使用自然、结果导向的表达:先说明用户能获得什么或问题如何改善,保留必要的命令和产品术语,避免逐字翻译、内部实现细节和无意义的中英混杂。
@@ -63,9 +63,9 @@
63
63
  "default": "zh-CN"
64
64
  },
65
65
  "defaultEntry": {
66
- "enum": ["dag run-task", "run-dag"],
66
+ "enum": ["task advance", "dag execute"],
67
67
  "description": "默认 DAG 入口,用于任务 DAG 生成或直接 DAG 执行。",
68
- "default": "dag run-task"
68
+ "default": "task advance"
69
69
  },
70
70
  "profileRouting": {
71
71
  "type": "object",
@@ -33,7 +33,7 @@
33
33
  | **允许** | 已发布 `loop-agent` / `agent-worker` CLI;只读 status/doctor/report/inspect/observe;准备 `source/*` 与 `task.json` 边界;human gate;shell 验证与 handoff。 |
34
34
  | **禁止** | 绕过 CLI 用宿主 Edit/Write/ApplyPatch 直接改业务实现;CLI/DAG 失败后「救火改文件」;用聊天自述代替 shell 验证。 |
35
35
  | **失败时** | `dag doctor` / `dag report` / `dag reconcile-run`(及适用 worker reconcile);修正任务源/`task.json`/DAG 后经 CLI 重跑。 |
36
- | **实现写入** | 业务代码 **只** 经受治理 DAG writer(`implement-pi` / `repair-pi`)经 `dag run-task` / `run-dag`。 |
36
+ | **实现写入** | 业务代码 **只** 经受治理 DAG writer(`implement-pi` / `repair-pi`)经 `task advance`(批准 writeSet gate 后长跑)。 |
37
37
 
38
38
  **永远不要**:`loop-agent` / `agent-worker` 失败 ⇒ 主会话直接改仓库实现。
39
39
 
@@ -45,7 +45,7 @@
45
45
  | 初始化更新校验 / 检查初始化更新 / loop-agent 初始化更新校验 / loop agent初始化更新校验 | 更新校验 | 只读报告,不写入 |
46
46
  | 初始化对齐 / 升级后对齐 / reconcile 初始化 / loop-agent 初始化对齐 | 升级对齐 | 自动应用确定性安全动作;surface 缺失、人工决策、活跃 DAG/Worker 或 Worker 状态无法确认时零写入 |
47
47
  | 初始化安全更新 / 应用初始化更新 / loop-agent 初始化安全更新 / loop agent初始化安全更新 | 安全更新 | 先 check-update,再只执行确定性安全动作 |
48
- | loop-agent 帮我完成 / 帮我实现 / 帮我修复 / 帮我开发 <需求>;使用 loop-agent 完成 <X>;按 loop-agent 流程处理 <X> | 通用需求实现 | 先建任务源与 `task.json.allowedPaths` / `forbiddenPaths`,再 `new-task` → `dag run-task` → `dag validate` → `run-dag`;主会话不得直接修改业务实现 |
48
+ | loop-agent 帮我完成 / 帮我实现 / 帮我修复 / 帮我开发 <需求>;使用 loop-agent 完成 <X>;按 loop-agent 流程处理 <X> | 通用需求实现 | 先提供 PRD 与 `allowedPaths` / `forbiddenPaths` / verify,再 `task advance` → 审查 writeSet gate → `task advance --approve-gate`;主会话不得直接修改业务实现 |
49
49
 
50
50
  **更新校验(只读)**:只读执行下面命令;**不得自动**执行 `apply-safe` 或模型合并。
51
51
 
@@ -85,33 +85,30 @@ pwd → `README.md` → `harness.json` → `__LOOP_AGENT_GOVERNANCE_ROOT__/READM
85
85
  ### Agent DAG 路径
86
86
 
87
87
  ```bash
88
- loop-agent new-task <task-id> "任务标题"
89
- # 推荐默认:详细 PRD → import → prepare(无需手写两个 source;默认无 LLM 写 source)
90
- loop-agent import-prd <task-id> --file <path-to-prd.md>
91
- # 非微小或跨会话任务(推荐):loop-agent plan create <plan-id> "<title>"
92
- loop-agent task source prepare <task-id> \
93
- --use-imported-prd \
88
+ loop-agent task advance <task-id> "任务标题" \
89
+ --prd <path-to-prd.md> \
94
90
  --allowed-path "<glob>" \
95
91
  --forbidden-path ".harness/**" \
96
92
  --verify "typecheck:npm run typecheck" \
97
- --apply --json
98
- loop-agent dag run-task <task-id> --profile auto --strict-models
99
- loop-agent dag validate --dag .harness/tasks/<task-id>/dag.json --strict-models --strict-governance
100
- loop-agent run-dag --dag .harness/tasks/<task-id>/dag.json --cwd .
93
+ --json
94
+ # 审查 writeSet gate digest 后:
95
+ loop-agent task advance <task-id> --approve-gate "write-set-review:<digest>" --json
96
+ loop-agent task status <task-id> --json
97
+ # 非微小或跨会话任务(推荐):loop-agent plan create <plan-id> "<title>"
101
98
  # 有 plan 时收尾:loop-agent plan complete <plan-id> --summary "..."
102
99
  ```
103
100
 
104
- `source/需求.md` 与 `source/执行约束.md` 仍必需(M8/M9),但默认由 `task source prepare --apply` 投影生成,而不是主会话手写。有原始 PRD 时优先 `import-prd` 原样归档。`import-prd` / `plan create` 不是 `dag run-task` 的硬依赖。写入前同步 `task.json.allowedPaths` / `task.json.forbiddenPaths` 并审查 writer `writeSet`。
101
+ `source/需求.md` 与 `source/执行约束.md` 仍必需(M8/M9),但默认由 `task advance --prd` 投影生成,而不是主会话手写。`plan create` 不是 `task advance` 的硬依赖。写入前同步 `task.json.allowedPaths` / `task.json.forbiddenPaths` 并审查 writer `writeSet`。高级任意 DagSpec 才用 `dag validate|execute|report`,不进入标准 happy path。
105
102
 
106
- 凡是影响项目公共契约、执行入口、交付流水线、自动化/治理、数据模型、安全或权限模型、跨模块行为、用户可见工作流的改动,都必须在编辑实现文件前先创建任务、完成 source prepare(或等价 managed contract)、生成 DAG,并审查 DAG/writeSet
103
+ 凡是影响项目公共契约、执行入口、交付流水线、自动化/治理、数据模型、安全或权限模型、跨模块行为、用户可见工作流的改动,都必须在编辑实现文件前先通过 `task advance` 建立 managed contract / writeSet gate,并审查 gate digest
107
104
 
108
105
  ### 任务类型路由(taskKind)
109
106
 
110
107
  - 用户明确提出后端测试、接口/API 测试、pytest,或语境明确为后端的自动化测试时,必须把 `.harness/tasks/<task-id>/task.json` 的 `taskKind` 设置为 `"backend-test"`,不得保留默认 `standard`。
111
- - `backend-test` 是 `taskKind`,不是 `--profile` 的可选值;运行 `dag run-task` 时继续使用 `--profile auto`。
108
+ - `backend-test` 是 `taskKind`,不是 `--profile` 的可选值;运行 `task advance` 时继续使用 `--profile auto`。
112
109
  - 仅出现“自动化测试”且无法判断前后端时,先阅读任务源与目标项目技术栈再决定,禁止无条件路由到 `backend-test`。
113
110
  - 用户提示词明确是前端实现需求(例如前端页面、UI、组件或交互开发)时,必须把 `.harness/tasks/<task-id>/task.json` 的 `taskKind` 设置为 `"frontend-implementation"`,不得保留默认 `standard`。
114
- - `frontend-implementation` 是 `taskKind`,不是 `--profile` 的可选值;运行 `dag run-task` 时继续使用 `--profile auto`,也可按需显式选择 `minimal` / `standard` / `reviewed` / `supervised`,不要把业务模板名当作 profile。
111
+ - `frontend-implementation` 是 `taskKind`,不是 `--profile` 的可选值;运行 `task advance` 时继续使用 `--profile auto`,也可按需显式选择 `minimal` / `standard` / `reviewed` / `supervised`,不要把业务模板名当作 profile。
115
112
  - 前端自动化测试(浏览器/UI 自动化、Playwright、E2E)继续使用 `taskKind: "frontend-test"`,不得设置为 `frontend-implementation`。
116
113
 
117
114
  ### 运行看板(只读)
@@ -23,10 +23,10 @@
23
23
 
24
24
  ## DAG 主路径
25
25
 
26
- - [ ] 已运行 `loop-agent new-task <task-id> "Task title"` task 已存在
27
- - [ ] `loop-agent dag run-task <task-id> --profile auto --strict-models --output <dag-path>` 产出 DAG spec
26
+ - [ ] 已运行 `loop-agent task advance <task-id> "Task title" --prd <prd.md> --allowed-path "<glob>" --json`(或 task 已存在且契约就绪)
27
+ - [ ] `task advance` 产出/刷新 `.harness/tasks/<task-id>/dag.json` 并打开 writeSet gate
28
28
  - [ ] `loop-agent dag validate --dag <dag-path> --strict-models --strict-governance` 通过
29
- - [ ] `loop-agent run-dag --dag <dag-path> --cwd .` 产出 run id
29
+ - [ ] `loop-agent task advance <task-id> --approve-gate "write-set-review:<digest>" --json` 产出 run id / lifecycle 事实(advanced arbitrary DAG 才用 `dag execute`)
30
30
  - [ ] `loop-agent dag report --run-id <run-id> --markdown` 可读
31
31
  - [ ] `loop-agent dag doctor --run-id <run-id>` 能解释失败或 paused run
32
32
 
package/harness.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "workflowPolicy": {
7
7
  "defaultImplementationWorkflow": "agent-dag",
8
8
  "dag": {
9
- "defaultEntry": "dag run-task",
9
+ "defaultEntry": "task advance",
10
10
  "outputLanguage": "zh-CN",
11
11
  "profileRouting": {
12
12
  "minimal": "standard-dag",
@@ -58,9 +58,9 @@
58
58
  "executors": {
59
59
  "pi": {
60
60
  "description": "Pi planning, review, diagnosis, and bounded writing when DAG toolProfile=write",
61
- "LOW": {"model": "deepseek/deepseek-v4-flash", "thinking": "high"},
62
- "MED": {"model": "deepseek/deepseek-v4-flash", "thinking": "max"},
63
- "HIGH": {"model": "deepseek/deepseek-v4-flash", "thinking": "max"}
61
+ "LOW": "minimax-m3",
62
+ "MED": "grok-4.5",
63
+ "HIGH": "gpt-5.6-sol"
64
64
  }
65
65
  }
66
66
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.26.5-beta.1",
3
+ "version": "0.27.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",
@@ -157,7 +157,8 @@ Structured project knowledge (Git is authority).
157
157
  bash scripts/kb-bootstrap-init-skeleton.sh --root .
158
158
  # edit knowledge/bootstrap/scope.yaml
159
159
  # task.json: { "taskKind": "knowledge-graph-bootstrap", ... }
160
- loop-agent dag run-task <id> --execute --cwd .
160
+ loop-agent task advance <id> --task-kind knowledge-graph-bootstrap --allowed-path "<glob>" --json
161
+ # then: loop-agent task advance <id> --approve-gate "write-set-review:<digest>" --json
161
162
  ```
162
163
 
163
164
  ## Query (Phase A design)
@@ -354,7 +354,7 @@ function main() {
354
354
  "Next:",
355
355
  "```bash",
356
356
  "# task.json: { \"taskKind\": \"knowledge-graph-bootstrap\", ... }",
357
- "loop-agent dag run-task <task-id> --execute --cwd .",
357
+ "loop-agent task advance <task-id> --task-kind knowledge-graph-bootstrap --json # then --approve-gate",
358
358
  `bash scripts/kb-graph-materialize.sh --root ${args.root}`,
359
359
  "```",
360
360
  "",
@@ -375,7 +375,7 @@ function main() {
375
375
  services: args.services,
376
376
  domains: args.domains,
377
377
  },
378
- next: "set task.json.taskKind=knowledge-graph-bootstrap; dag run-task --execute",
378
+ next: "set task.json.taskKind=knowledge-graph-bootstrap; task advance --json then --approve-gate",
379
379
  },
380
380
  null,
381
381
  2,
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: loop-agent
3
3
  description: >-
4
- Use when implementing features, processing PRDs or requirements, running structured loop-agent workflows, creating harness tasks, using Agent DAG, run-dag, pi-prompt planning/review, cursor-prompt one-shot sidecar intervention, initializing a target project with loop-agent, checking init update status, applying a safe init update, or converging website/governance docs after user-visible changes in loop-agent. Triggers: loop-agent, workflow, structured development, harness task, Agent DAG, docs converge, Converge Docs, 文档收敛, 结构化开发, 工作流, 需求实现, PRD 实现, 初始化 loop-agent, loop agent 初始化, loop agent初始化, loop-agent 初始化, 初始化更新校验, loop agent初始化更新校验, 检查初始化更新, 初始化安全更新, loop agent初始化安全更新, 应用初始化更新. 强路由:loop-agent 帮我完成需求, 帮我实现, 帮我修复, 帮我开发, 使用 loop-agent 完成, 按 loop-agent 流程处理, 通用需求实现;这些表达确定性地进入 Agent DAG/CLI(new-task, dag run-task, dag validate, run-dag),主会话编排而不直接写业务实现.
4
+ Use when implementing features, processing PRDs or requirements, running structured loop-agent workflows, creating harness tasks, using Agent DAG / task advance lifecycle, pi-prompt planning/review, cursor-prompt one-shot sidecar intervention, initializing a target project with loop-agent, checking init update status, applying a safe init update, or converging website/governance docs after user-visible changes in loop-agent. Triggers: loop-agent, workflow, structured development, harness task, Agent DAG, task advance, task status, dag validate, dag execute, docs converge, Converge Docs, 文档收敛, 结构化开发, 工作流, 需求实现, PRD 实现, 初始化 loop-agent, loop agent 初始化, loop agent初始化, loop-agent 初始化, 初始化更新校验, loop agent初始化更新校验, 检查初始化更新, 初始化安全更新, loop agent初始化安全更新, 应用初始化更新. 强路由:loop-agent 帮我完成需求, 帮我实现, 帮我修复, 帮我开发, 使用 loop-agent 完成, 按 loop-agent 流程处理, 通用需求实现;这些表达确定性地进入 task advance / Agent DAG CLI,主会话编排而不直接写业务实现.
5
5
  references:
6
6
  - path: references/harness-policy.md
7
7
  required: true
@@ -26,24 +26,29 @@ Entry: routing and hard rules. Required details come from frontmatter references
26
26
  ## 唯一推荐执行路径
27
27
 
28
28
  ```bash
29
- loop-agent new-task <task-id> "Title"
30
- # PRD-first default: detailed PRD → import-prd task source prepare --apply
31
- # no hand-written/LLM source by default
32
- loop-agent import-prd <task-id> --file <prd.md>
33
- loop-agent task source prepare <task-id> --use-imported-prd --allowed-path "<glob>" --apply --json
34
- # plan create for non-trivial work (see references/source-and-plan-practice.md)
35
- loop-agent dag run-task <task-id> --profile auto --strict-models
36
- # default draft: .harness/tasks/<task-id>/dag.json
37
- loop-agent dag validate --dag .harness/tasks/<task-id>/dag.json --strict-models --strict-governance
38
- loop-agent run-dag --dag .harness/tasks/<task-id>/dag.json --cwd <repo-root>
29
+ # 标准 mutation:task advance(create/import/prepare/generate/validate → writeSet gate)
30
+ loop-agent task advance <task-id> "Title" \
31
+ --prd <prd.md> \
32
+ --allowed-path "<glob>" \
33
+ --forbidden-path ".harness/**" \
34
+ --verify "typecheck:npm run typecheck" \
35
+ --json
36
+
37
+ # 审查 JSON 中的 gate.writeSet / gate.digest 后批准并长跑
38
+ loop-agent task advance <task-id> \
39
+ --approve-gate "write-set-review:<digest>" \
40
+ --json
41
+
42
+ # 可选只读(无 refresh 副作用)
43
+ loop-agent task status <task-id> --json
39
44
  ```
40
45
 
41
- 执行前审阅 `profileRouting`、`governanceProfile`、writer `writeSet`、`forbiddenPaths`、decision gate mode。
46
+ 非微小跨会话任务仍可先 `plan create`(见 references/source-and-plan-practice.md)。主会话只审 gate/writeSet 与验证证据,不拼低层 prepare/run-task/run-dag/promote/closeout 命令串。
42
47
 
43
48
  ## 进阶主题路由
44
49
 
45
50
  | 主题 | Reference |
46
- |---|---|
51
+ | --- | --- |
47
52
  | Harness policy、Loop、SePO-lite | `references/harness-policy.md` |
48
53
  | Agent DAG topology、writeSet、recovery | `references/hybrid-dag.md` |
49
54
  | Operator commands、`agent-worker` | `references/command-reference.md` |
@@ -39,7 +39,7 @@ failure handling 与 workflow 细节放在这里,避免主 skill 变成百科
39
39
  | `task-workflow.md` | 处理 task source material、task config、repo adapter 或 legacy task 目录布局 |
40
40
  | `pi-prompt.md` | 运行短时 one-shot Pi SDK task,且不创建 `.harness/tasks/` |
41
41
  | `one-shot-runs.md` | 解释 `.harness/runs/{active,completed,failed}` 的创建条件、生命周期、治理清理与 `promote-run` 关系 |
42
- | `hybrid-dag.md` | 使用 Agent DAG Level 2 `dag validate` / `run-dag`,Level 3 `dag init-hybrid` / `dag run-task`,或查看 write policy、DAG source-of-truth 规则 |
42
+ | `hybrid-dag.md` | 使用 Agent DAG Level 2 `dag validate` / `dag execute`,Level 3 `dag init-hybrid` / `task advance`,或查看 write policy、DAG source-of-truth 规则 |
43
43
  | `pi-subagent-assisted-mode.md` | 启用 `piSubagentMode`,或在 Pi step 内配置 read-only scout / planner / reviewer subagent |
44
44
  | `model-routing.md` | 查看或修改 model/provider 默认、profile、routing 或 fallback 行为 |
45
45
  | `post-implementation-and-patterns.md` | 处理 post-verify handoff、PRD item 拆分、fast bounded task、quick status 或 Pi timeout |