@tea-agent/loop-agent 0.26.5-beta.2 → 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.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +29 -0
- package/README.md +13 -23
- package/dist/application/dag/args.js +7 -7
- package/dist/application/dag/generate-task-dag.js +2 -2
- package/dist/application/dag/run-dag.js +3 -4
- package/dist/application/dag/validate-dag.js +1 -1
- package/dist/application/task-lifecycle/advance.js +845 -0
- package/dist/application/task-lifecycle/gates.js +80 -0
- package/dist/application/task-lifecycle/index.js +7 -0
- package/dist/application/task-lifecycle/observe.js +395 -0
- package/dist/application/task-lifecycle/plan-transitions.js +224 -0
- package/dist/application/task-lifecycle/recommendations.js +180 -0
- package/dist/application/task-lifecycle/record.js +73 -0
- package/dist/application/task-lifecycle/types.js +1 -0
- package/dist/cli/command-definitions.js +14 -111
- package/dist/cli/help.js +6 -7
- package/dist/cli/program.js +26 -90
- package/dist/cli/update/policy.js +0 -1
- package/dist/commands/dag-final-verification.js +1 -1
- package/dist/commands/dag-init-hybrid.js +1 -1
- package/dist/commands/delegate.js +2 -2
- package/dist/commands/init.js +21 -19
- package/dist/commands/run-dag-progress.js +1 -1
- package/dist/commands/status.js +18 -17
- package/dist/commands/study-init.js +2 -2
- package/dist/commands/task-advance.js +335 -0
- package/dist/commands/task-contract.js +3 -5
- package/dist/commands/task-source-prepare.js +9 -4
- package/dist/commands/task-status.js +133 -0
- package/dist/governance/manifest-types.js +2 -2
- package/dist/shared/operator/capabilities.js +1358 -243
- package/dist/task/contract/adopt.js +1 -1
- package/dist/task/contract/apply.js +1 -1
- package/dist/task/contract/import-revision.js +1 -1
- package/dist/task/contract/recover.js +2 -2
- package/dist/task/read-model.js +18 -23
- package/dist/task/runtime.js +1 -1
- package/dist/task/source-prepare/completeness.js +1 -1
- package/dist/task/source-prepare/parse-intent.js +6 -1
- package/dist/task/source-prepare/prepare.js +23 -20
- package/dist/worker/console/operator-actions.js +288 -95
- package/dist/worker/console/recovery-cta.js +4 -4
- package/dist/worker/console/static/assets/{index-CSRIhuzh.js → index-CNO7n6qB.js} +1 -1
- package/dist/worker/console/static/index.html +1 -1
- package/dist/worker/materialize/harness-task-materializer.js +6 -5
- package/dist/worker/run-task/run-task.js +204 -112
- package/dist/worker/runner/run-ready.js +1 -1
- package/dist/workflows/dag/frontend-implementation-contract.js +6 -72
- package/dist/workflows/dag/frontend-prewrite-gate.js +4 -17
- package/dist/workflows/dag/init-hybrid.js +11 -66
- package/docs/templates/evaluation/agents-map-slim-v1.md +1 -1
- package/docs/templates/evaluation/agents-map-verbose-v0.md +3 -3
- package/docs/templates/harness.schema.json +2 -2
- package/docs/templates/init-managed-agents.md +13 -16
- package/docs/templates/production-readiness-checklist.md +3 -3
- package/harness.json +4 -4
- package/package.json +1 -1
- package/scripts/kb-bootstrap-init-skeleton.sh +2 -1
- package/scripts/kb-graph-incremental-prepare.mjs +2 -2
- package/skills/loop-agent/SKILL.md +18 -13
- package/skills/loop-agent/references/README.md +1 -1
- package/skills/loop-agent/references/command-reference.md +55 -84
- package/skills/loop-agent/references/harness-policy.md +19 -23
- package/skills/loop-agent/references/hybrid-dag.md +31 -33
- package/skills/loop-agent/references/long-running-loop.md +2 -2
- package/skills/loop-agent/references/one-shot-runs.md +4 -5
- package/skills/loop-agent/references/orchestrator-and-interventions.md +3 -3
- package/skills/loop-agent/references/post-implementation-and-patterns.md +4 -4
- package/skills/loop-agent/references/source-and-plan-practice.md +45 -51
- package/skills/loop-agent/references/task-workflow.md +14 -15
|
@@ -2455,62 +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
|
-
{
|
|
2487
|
-
id: "frontend-contract-json-validate-shell",
|
|
2488
|
-
depends_on: ["frontend-contract-json-pi"],
|
|
2489
|
-
role: "verifier",
|
|
2490
|
-
executor: "shell",
|
|
2491
|
-
complexity: "LOW",
|
|
2492
|
-
writePolicy: "read-only",
|
|
2493
|
-
allowedPaths: readOnlyPaths,
|
|
2494
|
-
forbiddenPaths,
|
|
2495
|
-
outputContract: "Validated frontend implementation contract artifact with schema ID and SHA-256.",
|
|
2496
|
-
subtask_prompt: "Materialize and validate the structured frontend contract before prewrite authorization.",
|
|
2497
|
-
shell: {
|
|
2498
|
-
commands: [],
|
|
2499
|
-
jsonArtifactGate: {
|
|
2500
|
-
fromNodeId: "frontend-contract-json-pi",
|
|
2501
|
-
schemaId: "frontend-implementation-contract-v1",
|
|
2502
|
-
artifactName: "frontend-implementation-contract.json",
|
|
2503
|
-
outputDir: "contracts",
|
|
2504
|
-
},
|
|
2505
|
-
cwd: ".",
|
|
2506
|
-
timeoutMs: 60000,
|
|
2507
|
-
},
|
|
2508
|
-
},
|
|
2509
2458
|
{
|
|
2510
2459
|
id: "frontend-prewrite-gate-shell",
|
|
2511
2460
|
depends_on: [
|
|
2512
|
-
"frontend-contract-json-pi",
|
|
2513
|
-
"frontend-contract-json-validate-shell",
|
|
2514
2461
|
"frontend-final-design-review-pi",
|
|
2515
2462
|
"frontend-design-review-pi",
|
|
2516
2463
|
"frontend-plan-revision-pi",
|
|
@@ -2529,8 +2476,8 @@ async function buildFrontendHybridDagFromTask(sources) {
|
|
|
2529
2476
|
commands: [],
|
|
2530
2477
|
frontendPrewriteGate: {
|
|
2531
2478
|
schemaVersion: 1,
|
|
2532
|
-
planFromNodeId: "frontend-
|
|
2533
|
-
planFallbackFromNodeIds: ["frontend-plan-
|
|
2479
|
+
planFromNodeId: "frontend-plan-revision-pi",
|
|
2480
|
+
planFallbackFromNodeIds: ["frontend-plan-pi"],
|
|
2534
2481
|
reviewFromNodeId: "frontend-final-design-review-pi",
|
|
2535
2482
|
reviewFallbackFromNodeIds: ["frontend-design-review-pi"],
|
|
2536
2483
|
requiredRequirementIds: requirementIds,
|
|
@@ -5239,16 +5186,16 @@ export async function requireManagedTaskContractBinding(input) {
|
|
|
5239
5186
|
const expectedRevision = state.ref?.revision ?? 0;
|
|
5240
5187
|
const observedCanonicalHash = state.observedCanonicalHash ?? "<observedCanonicalHash-from-show>";
|
|
5241
5188
|
const recovery = state.effectiveStatus === "transaction-incomplete"
|
|
5242
|
-
? `Recover the unfinished transaction first: loop-agent task
|
|
5189
|
+
? `Recover the unfinished transaction first: loop-agent task advance ${input.taskId} --json`
|
|
5243
5190
|
: [
|
|
5244
5191
|
"After reviewing the show JSON, either adopt the current on-disk facts:",
|
|
5245
|
-
`loop-agent task
|
|
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`,
|
|
5246
5193
|
"or apply a reviewed draft:",
|
|
5247
|
-
`loop-agent task
|
|
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`,
|
|
5248
5195
|
].join(" ");
|
|
5249
5196
|
const err = new Error([
|
|
5250
5197
|
`dag generate requires managed Task Contract for task ${input.taskId} (effectiveStatus=${state.effectiveStatus})`,
|
|
5251
|
-
`Inspect current state: loop-agent task
|
|
5198
|
+
`Inspect current state: loop-agent task status ${input.taskId} --json`,
|
|
5252
5199
|
recovery,
|
|
5253
5200
|
"Do not auto-adopt or auto-apply before confirming the Task Contract facts and concurrency fields.",
|
|
5254
5201
|
].join("; "));
|
|
@@ -5340,7 +5287,7 @@ async function buildHybridDagForTemplate(sources, template) {
|
|
|
5340
5287
|
else if (template === "review-gated-dag")
|
|
5341
5288
|
spec = buildReviewGatedHybridDag(standard, sources);
|
|
5342
5289
|
else
|
|
5343
|
-
spec =
|
|
5290
|
+
spec = buildSupervisedHybridDag(standard, sources);
|
|
5344
5291
|
}
|
|
5345
5292
|
applyProjectGovernanceReview(spec, template, sources);
|
|
5346
5293
|
// New generate path always emits DagSpec v4 + bindings.
|
|
@@ -5774,12 +5721,10 @@ function buildWriteSetGateNode(sources) {
|
|
|
5774
5721
|
},
|
|
5775
5722
|
};
|
|
5776
5723
|
}
|
|
5777
|
-
|
|
5724
|
+
function buildSoftVerifyNode(sources) {
|
|
5778
5725
|
const implementId = implementationNodeId();
|
|
5779
5726
|
const strategy = resolveDagVerifyStrategy(sources.taskConfig, "1");
|
|
5780
|
-
const fallbackCommands =
|
|
5781
|
-
? (await discoverFrontendFallbackVerifyCommands(sources.repoRoot)).staticCommands
|
|
5782
|
-
: ["npm run typecheck"];
|
|
5727
|
+
const fallbackCommands = ["npm run typecheck"];
|
|
5783
5728
|
const focusedIntermediate = sources.verifyCommands?.intermediate.filter((command) => !isFullSuiteVerifyCommand(command));
|
|
5784
5729
|
const plannedIntermediate = applyMavenVerificationPlanning({
|
|
5785
5730
|
repoRoot: sources.repoRoot,
|
|
@@ -6021,7 +5966,7 @@ function resolveSupervisedConvergence(taskConfig) {
|
|
|
6021
5966
|
chainNodeIds: [...SUPERVISED_CONVERGENCE_CHAIN_NODE_IDS],
|
|
6022
5967
|
};
|
|
6023
5968
|
}
|
|
6024
|
-
|
|
5969
|
+
function buildSupervisedHybridDag(standard, sources) {
|
|
6025
5970
|
const contract = getTaskOrThrow(standard, "contract-pi");
|
|
6026
5971
|
const scoutSrc = getTaskOrThrow(standard, "scout-src");
|
|
6027
5972
|
const scoutTests = getTaskOrThrow(standard, "scout-tests");
|
|
@@ -6073,7 +6018,7 @@ async function buildSupervisedHybridDag(standard, sources) {
|
|
|
6073
6018
|
"final-write-set-audit-format-repair-pi",
|
|
6074
6019
|
],
|
|
6075
6020
|
}),
|
|
6076
|
-
|
|
6021
|
+
buildSoftVerifyNode(sources),
|
|
6077
6022
|
buildProcessSupervisorNode(sources),
|
|
6078
6023
|
buildProcessGateNode(sources),
|
|
6079
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,否则改实现前完成 `
|
|
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 与理由,否则在改动实现文件前必须完成 `
|
|
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"` 再 `
|
|
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` 的可选值;`
|
|
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": ["
|
|
66
|
+
"enum": ["task advance", "dag execute"],
|
|
67
67
|
"description": "默认 DAG 入口,用于任务 DAG 生成或直接 DAG 执行。",
|
|
68
|
-
"default": "
|
|
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`)经 `
|
|
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> | 通用需求实现 |
|
|
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
|
|
89
|
-
|
|
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
|
-
--
|
|
98
|
-
|
|
99
|
-
loop-agent
|
|
100
|
-
loop-agent
|
|
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
|
|
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
|
-
|
|
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` 的可选值;运行 `
|
|
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` 的可选值;运行 `
|
|
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
|
|
27
|
-
- [ ] `
|
|
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
|
|
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": "
|
|
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":
|
|
62
|
-
"MED":
|
|
63
|
-
"HIGH":
|
|
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
|
@@ -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
|
|
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
|
|
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;
|
|
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
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
loop-agent
|
|
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
|
-
|
|
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` / `
|
|
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 |
|