@tea-agent/loop-agent 0.7.4 → 0.8.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 (127) hide show
  1. package/AGENTS.md +143 -142
  2. package/CHANGELOG.md +148 -161
  3. package/README.md +206 -204
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/commands/init.js +518 -488
  7. package/dist/commands/loop-benchmark.js +11 -11
  8. package/dist/commands/pi-reuse-benchmark.js +16 -16
  9. package/dist/executors/cursor-executor.js +1 -1
  10. package/dist/governance/manifest-types.js +1 -1
  11. package/dist/task/runtime.js +27 -27
  12. package/dist/worker/cli.js +3 -3
  13. package/dist/worker/observability/event-store.js +2 -1
  14. package/dist/worker/observability/read-model.js +51 -13
  15. package/dist/worker/observe/paths.js +2 -2
  16. package/dist/worker/observe/routes.js +4 -3
  17. package/dist/worker/observe/static/app.js +1479 -1419
  18. package/dist/worker/observe/static/dag-layout.d.ts +31 -0
  19. package/dist/worker/observe/static/dag-layout.js +83 -0
  20. package/dist/worker/observe/static/index.html +63 -63
  21. package/dist/worker/observe/static/styles.css +722 -613
  22. package/dist/worker/pool/run-store.js +7 -8
  23. package/dist/worker/run-task/run-task.js +11 -2
  24. package/dist/worker/runner/run-ready.js +1 -1
  25. package/dist/workflows/dag/canvas-observer.js +275 -275
  26. package/docs/README.md +80 -76
  27. package/docs/agent-dag-recovery-playbook.md +184 -184
  28. package/docs/agent-dag-runner.md +42 -42
  29. package/docs/architecture/runtime-boundaries.md +162 -162
  30. package/docs/cursor-executor-usage.md +25 -25
  31. package/docs/decisions/README.md +3 -3
  32. package/docs/design/README.md +49 -49
  33. package/docs/development-principles.md +73 -73
  34. package/docs/dynamic-workflow-dag-engine-roadmap.md +1749 -1749
  35. package/docs/exec-plans/README.md +6 -6
  36. package/docs/exec-plans/active/README.md +11 -12
  37. package/docs/exec-plans/completed/README.md +35 -32
  38. package/docs/feature-workflow.md +187 -187
  39. package/docs/harness-methodology-debugging.md +153 -153
  40. package/docs/harness-methodology-tdd.md +130 -130
  41. package/docs/harness-methodology-verification.md +27 -27
  42. package/docs/init-surface.manifest.json +245 -241
  43. package/docs/loop-agent-harness.md +63 -55
  44. package/docs/production-readiness.md +96 -96
  45. package/docs/progress/README.md +3 -3
  46. package/docs/reports/README.md +9 -9
  47. package/docs/skills/README.md +6 -6
  48. package/docs/skills/vetted-skill-registry.md +26 -26
  49. package/docs/templates/adr.md +60 -60
  50. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  51. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  52. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  53. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  54. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  55. package/docs/templates/agent-dag-report.schema.json +454 -454
  56. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  57. package/docs/templates/agent-dag.base.json +195 -195
  58. package/docs/templates/agent-dag.final-verification.json +190 -190
  59. package/docs/templates/agent-dag.schema.json +316 -316
  60. package/docs/templates/agent-dag.supervised-implementation.json +500 -500
  61. package/docs/templates/exec-plan.md +64 -64
  62. package/docs/templates/feature-spec.md +53 -53
  63. package/docs/templates/harness.schema.json +218 -0
  64. package/docs/templates/hybrid-dag.json +193 -193
  65. package/docs/templates/init-evolution-review.md +33 -33
  66. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  67. package/docs/templates/product-line/AGENTS.md +8 -8
  68. package/docs/templates/product-line/README.md +9 -9
  69. package/docs/templates/product-line/acceptance.yaml +14 -14
  70. package/docs/templates/product-line/closeout.yaml +9 -9
  71. package/docs/templates/product-line/design.md +13 -13
  72. package/docs/templates/product-line/links.md +10 -10
  73. package/docs/templates/product-line/requirement.md +17 -17
  74. package/docs/templates/product-line/task-graph.yaml +15 -15
  75. package/docs/templates/product-line/task.yaml +65 -65
  76. package/docs/templates/product-line/test-plan.md +7 -7
  77. package/docs/templates/production-readiness-checklist.md +57 -57
  78. package/docs/templates/progress-log.md +17 -17
  79. package/docs/templates/project-start-checklist.md +9 -9
  80. package/docs/templates/qa-report.md +48 -48
  81. package/docs/templates/sprint-contract.md +29 -29
  82. package/docs/templates/worker-dogfood-evidence.md +52 -52
  83. package/docs/templates/worker-dogfood-setup.md +48 -48
  84. package/docs/verification-matrix.md +49 -49
  85. package/examples/decision-gate-agent-dag.json +123 -123
  86. package/examples/example-dag.json +51 -51
  87. package/examples/hybrid-loop-agent-dag.json +194 -194
  88. package/harness.json +73 -71
  89. package/package.json +68 -67
  90. package/scripts/check-product-line-docs.sh +22 -22
  91. package/scripts/check-task-pool-root.sh +32 -0
  92. package/skills/ai-engineering-context/SKILL.md +48 -48
  93. package/skills/code-review-core/SKILL.md +20 -20
  94. package/skills/codebase-scout/SKILL.md +19 -19
  95. package/skills/init-capability-evolution/SKILL.md +69 -69
  96. package/skills/loop-agent/SKILL.md +149 -149
  97. package/skills/loop-agent/references/README.md +67 -67
  98. package/skills/loop-agent/references/command-reference.md +432 -412
  99. package/skills/loop-agent/references/harness-policy.md +263 -263
  100. package/skills/loop-agent/references/hybrid-dag.md +216 -216
  101. package/skills/loop-agent/references/learned/README.md +21 -21
  102. package/skills/loop-agent/references/long-running-loop.md +59 -59
  103. package/skills/loop-agent/references/model-routing.md +36 -36
  104. package/skills/loop-agent/references/multi-worktree.md +54 -54
  105. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  106. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  107. package/skills/loop-agent/references/pi-prompt.md +23 -23
  108. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +81 -81
  109. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  110. package/skills/loop-agent/references/task-workflow.md +89 -89
  111. package/skills/loop-agent/references/verification-and-failure-handling.md +128 -128
  112. package/skills/requesting-code-review/SKILL.md +101 -101
  113. package/skills/requesting-code-review/code-reviewer.md +168 -168
  114. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  115. package/skills/systematic-debugging/SKILL.md +296 -296
  116. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  117. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  118. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  119. package/skills/systematic-debugging/find-polluter.sh +63 -63
  120. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  121. package/skills/systematic-debugging/test-academic.md +14 -14
  122. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  123. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  124. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  125. package/skills/test-driven-development/SKILL.md +20 -20
  126. package/skills/verification-before-completion/SKILL.md +154 -154
  127. package/skills/webapp-testing/SKILL.md +19 -19
package/README.md CHANGED
@@ -1,204 +1,206 @@
1
- # loop-agent
2
-
3
- `loop-agent` 是面向 AI coding agent 的仓库级任务运行时和治理工具。它把一次研发任务组织成可生成、可校验、可执行、可恢复、可交接的 Agent DAG,并用 `.harness/`、`docs/` 和 shell verification 记录执行事实、长期治理资料和完成依据。
4
-
5
- 它可以作为任意目标项目的稳定控制器:初始化目标项目后,项目会获得 repo-local skills、治理文档、验证脚本、任务运行态目录和模型执行指引,使 agent 在目标项目里的工作体验尽量与本仓库对齐。
6
-
7
- ## 快速开始
8
-
9
- 到一个新项目时,可以直接对当前 agent 说:
10
-
11
- ```text
12
- 请用 loop-agent 完整初始化当前项目;如果本机没有 loop-agent,请先安装 @tea-agent/loop-agent@latest。按 init instructions 使用 full + merge 初始化,探索项目后补全 README 和验证命令,最后运行 doctor、inspect、docs audit 和 check-repo 并汇报结果。
13
- ```
14
-
15
- 作为 CLI 使用时,安装已发布包:
16
-
17
- ```bash
18
- npm install -g @tea-agent/loop-agent@latest
19
- loop-agent --version
20
- loop-agent --help
21
- ```
22
-
23
- 检查当前项目的 loop-agent 配置:
24
-
25
- ```bash
26
- loop-agent doctor
27
- loop-agent inspect
28
- ```
29
-
30
- ## 初始化目标项目
31
-
32
- 在新项目中,最简单的用法是让当前 agent 执行初始化。需要更稳的执行约束时,可以使用下面这段完整提示词:
33
-
34
- ```text
35
- 请用 loop-agent 完整初始化当前项目。
36
-
37
- 如果本机还没有 `loop-agent` 命令,请先运行 `npm install -g @tea-agent/loop-agent@latest`,再记录 `npm list -g @tea-agent/loop-agent --depth=0` 的实际版本。
38
-
39
- 然后运行 `loop-agent init instructions --repo-root .`,按指引使用 full + merge 初始化。需要选择 provider/model,或涉及凭据、成本、部署副作用时先问我;其他能安全默认的选项直接继续。
40
-
41
- 初始化后请立刻探索当前项目的 README、manifest/build/config 文件和源码目录,补全根 README 的项目概览、技术栈/目录结构、开发与验证命令,并同步更新 `docs/verification-matrix.md` 和必要的 `scripts/ci-tests.sh`。
42
-
43
- 最后运行 `loop-agent init doctor --repo-root .`、`loop-agent inspect --repo-root .`、`loop-agent docs audit --repo-root .`、`bash scripts/check-repo.sh`,如项目测试入口可识别也运行 `bash scripts/ci-tests.sh` 或 `bash scripts/ci.sh`,并汇报结果、假设和剩余风险。
44
- ```
45
-
46
- 如果手动运行 CLI,可以使用:
47
-
48
- ```bash
49
- loop-agent init instructions --repo-root <target-repo>
50
- loop-agent init --repo-root <target-repo> --profile full --merge
51
- loop-agent init doctor --repo-root <target-repo>
52
- ```
53
-
54
- `init instructions` 会输出给模型/Agent 执行完整初始化的指引包,不要求目标项目已有 `harness.json`。默认初始化会 merge 已有 `AGENTS.md`、`harness.json` 和 `docs/`,复制 repo-local `skills/` 并同步镜像到 `.agents/skills/`(agent 兼容路径,如 OpenCode 自动发现),生成语言无关的治理脚本矩阵、中文根 README 入口、目标项目版治理文档和 `.harness/` 骨架;已有 README 会保留用户正文并插入/更新 loop-agent managed block。初始化还会向 `.gitignore` 合并一个 loop-agent managed block(`# LOOP_AGENT_INIT_START/END`),把 `.harness/tasks/*`、`.harness/dag-runs/*`、`.harness/runs/*`、`.harness/live/`、`.harness/cache/`、`.harness/init-surface.json`、`.task-pool/`、`.worktrees/` 等个人/会话运行态事实忽略掉,同时保留 `.harness/prompts/` 和目录占位可共享,不会整目录忽略 `.harness/`,也不会覆盖用户已有的 ignore 规则。
55
-
56
- 新初始化会写入 `.harness/init-surface.json`,记录当前 controller 版本、初始化投影文件 hash 和 manifest hash。已用旧版本初始化的目标项目,可以用下面的维护入口对齐新版本初始化能力:
57
-
58
- ```bash
59
- loop-agent init check-update --repo-root <target-repo> --json
60
- loop-agent init check-update --repo-root <target-repo> --markdown
61
- loop-agent init update --repo-root <target-repo> --bootstrap-surface
62
- loop-agent init update --repo-root <target-repo> --apply-safe
63
- ```
64
-
65
- `check-update` 只读报告 deterministic actions、model merge tasks、human decisions 和 recommended next。`update --bootstrap-surface` 为旧项目补 inferred baseline;`update --apply-safe` 只补缺失文件、目录和 managed block(包括过期的 `.gitignore` managed block),不覆盖已有但无法确认来源的本地文件。
66
-
67
- 当初始化由模型/Agent 执行时,它应把初始化当成一个自动化闭环:确认真正不能安全默认的 provider/model、治理根目录或凭据/成本问题后,运行 deterministic init,随后立刻读取目标项目真实文件,补全根 README 的项目概览、技术栈/目录结构、开发与验证命令,并同步适配 `docs/verification-matrix.md` 和必要的 `scripts/ci-tests.sh`。
68
-
69
- 初始化生成的 `scripts/ci-tests.sh` 不假定目标项目是 TypeScript、Node、前端或后端项目。它会保守探测 `package.json`、`Makefile`、`go.mod`、`Cargo.toml`、Python 测试配置、Maven、Gradle、.NET 等常见入口,只运行实际存在且工具可用的命令;探测不到时会清楚提示需要由初始化模型或用户按目标项目实际技术栈补充。
70
-
71
- ## 运行任务
72
-
73
- 创建并运行一个标准 Agent DAG:
74
-
75
- ```bash
76
- loop-agent new-task <task-id> "任务标题"
77
- loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
78
- loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
79
- loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
80
- ```
81
-
82
- `<temp-dir>` 表示平台原生临时目录;也可以省略 `--output`,再使用命令 JSON 输出里的 `outputPath`。
83
-
84
- 一次性只读评审或有边界写入:
85
-
86
- ```bash
87
- loop-agent pi-prompt --cwd . --tools read,grep,find,ls "只读评审这个任务,不要编辑文件。"
88
- loop-agent pi-prompt --cwd . --tools read,bash,edit,write,grep,find,ls "<包含 allowedPaths 和 forbiddenPaths 的有边界任务说明>"
89
- ```
90
-
91
- 产品线 feature packet 可用伴生 Worker CLI 做 docs CI;仓库也提供外部 CI/cron wrapper,调度仍由外部系统负责:
92
-
93
- ```bash
94
- agent-worker task validate-feature <feature-dir>
95
- bash scripts/worker-nightly.sh <feature-dir> <target-repo> <batch-run-id>
96
- ```
97
-
98
- nightly wrapper 按 feature 互斥,保留批次/超时退出码,并输出 morning report、Observe snapshot 和 controller 版本 artifacts。
99
-
100
- ## 核心概念
101
-
102
- - **Agent DAG**:把一次任务拆成 contract、scout、plan、implement、verify、closeout 等可审查节点。
103
- - **`.harness/`**:记录 task、DAG run、one-shot run、cache 和 live state 等运行态事实。
104
- - **`harness.json`**:描述项目名、治理根目录、模型路由、executor 和验证脚本。
105
- - **repo-local skills**:目标项目本地的 `skills/`(loop-agent 主路径)优先于发布包内置 skills,便于项目定制 agent 行为;`init --profile full` 还会把同一份 skills 镜像到 `.agents/skills/`,让外部 agent(如 OpenCode)也能自动发现。DAG skill 解析顺序为:用户配置目录 → `skills/` → `.agents/skills/` → 发布包内置。
106
- - **治理文档**:`docs/` 保存原则、工作流、验证矩阵、runtime 边界、计划和报告。
107
- - **shell verification**:完成声明必须有可复现命令作为依据,而不是只靠聊天结论。
108
-
109
- 这些治理原则的设计思想吸收了 Anthropic 长时运行 agent harness、OpenAI Codex harness engineering、腾讯端到端 Harness Engineering 和社区 agent harness 实践:人类掌舵,智能体执行;仓库作为记录系统;任务小步推进;用结构化 handoff 与可复现验证跨 session 保持连续性。背景资料收录在 `website/docs/practices/`。
110
-
111
- ## 能力概览
112
-
113
- - 生成、校验、执行和汇总 Agent DAG。
114
- - 从任务说明生成标准 DAG,并按依赖顺序运行规划、实现、验证和收口节点。
115
- - 维护 `loop` 长程任务状态,包括目标、轮次、信号、验证事实和收口草稿。
116
- - 通过 Pi executor 执行只读规划、评审、诊断和有边界写入。
117
- - 保留 Cursor executor 作为显式启用的可选后端。
118
- - 通过 shell executor 运行确定性的验证命令。
119
- - 检查任务状态、运行态工件、文档链接、skill entry runtime boundary 等治理规则。
120
-
121
- ## 内置示例
122
-
123
- `examples/` 默认不复制到目标项目。可以通过工具内置命令查看或按需复制:
124
-
125
- ```bash
126
- loop-agent examples list
127
- loop-agent examples show example-dag.json
128
- loop-agent examples copy example-dag.json --repo-root <target-repo>
129
- ```
130
-
131
- ## 迭代本仓库
132
-
133
- 如果要用 loop-agent 迭代 loop-agent 本仓库,控制器必须来自已发布的 npm 安装包。不要使用当前工作区的 `npm link` 或 `npm run dev` 作为控制器;首次安装或有意升级可用 `@latest`,但一次自举任务启动后不要在任务中途升级控制器。
134
-
135
- ```bash
136
- npm install -g @tea-agent/loop-agent@latest
137
- npm list -g @tea-agent/loop-agent --depth=0
138
- loop-agent doctor
139
- loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd <repo-root>
140
- ```
141
-
142
- `@latest` 只用于安装或升级,不要在 DAG 节点里反复用 `npx @latest` 拉取。自举任务应记录 `npm list -g` 显示的实际版本号。
143
-
144
- ## 文档导航
145
-
146
- | 路径 | 用途 |
147
- |---|---|
148
- | `AGENTS.md` | 本仓库的 agent 开工协议、会话协议和长期工作规则 |
149
- | `harness.json` | loop-agent 在本仓库的模型、executor、治理根目录和脚本配置 |
150
- | `docs/README.md` | 治理文档索引 |
151
- | `docs/verification-matrix.md` | 不同变更类型对应的验证命令 |
152
- | `docs/production-readiness.md` | Production Readiness v0.1 支持范围、证据和验收标准 |
153
- | `docs/architecture/runtime-boundaries.md` | runtime 层边界和依赖方向 |
154
- | `skills/loop-agent/` | loop-agent skill 入口和 references |
155
- | `examples/` | 可复用 DAG 示例 |
156
- | `website/docs/` | 面向使用者的 Docusaurus 文档站内容 |
157
- | `website/docs/practices/` | Anthropic、OpenAI Codex、腾讯端到端工程与社区 harness 实践资料 |
158
-
159
- ## 本仓库开发
160
-
161
- 本地源码开发:
162
-
163
- ```bash
164
- npm install
165
- npm run build
166
- node bin/loop-agent.js --help
167
- npm run dev -- --help
168
- ```
169
-
170
- 常用验证命令:
171
-
172
- ```bash
173
- npm run typecheck
174
- npm test
175
- bash scripts/check-repo.sh
176
- bash scripts/ci.sh
177
- npm run docs:build
178
- ```
179
-
180
- 当前 CLI 使用 `commander` 组织 command tree。顶层 help、子命令 help、参数解析和未知命令错误都由 commander 驱动。
181
-
182
- Windows 上运行 `scripts/*.sh` 时使用 Git Bash 或已配置的兼容 Bash,不要求使用 WSL 或 POSIX 路径。实际文件操作和 `--output` / `--dag` / `--cwd` 参数使用当前平台原生路径;仓库内引用、JSON/Markdown 证据引用和 glob 约定可继续用 `/` 作为稳定分隔符。
183
-
184
- ## 发布包内容
185
-
186
- 发布包包含静态运行和指导资料:`bin/`、`dist/`、`skills/`、`docs/*.md`、`docs/architecture/runtime-boundaries.md`、`docs/skills/`、`docs/templates/`、`docs/init-surface.manifest.json`、`examples/`、`harness.json`、`AGENTS.md`、`README.md` 和 `CHANGELOG.md`。
187
-
188
- `docs/progress/`、`docs/reports/`、`docs/exec-plans/`、`docs/decisions/` 等目录下的任务正文是目标仓库实时生成或历史事实;npm 包只携带这些目录的 README,不携带本仓库已有历史记录。
189
-
190
- DAG skill 指令优先从目标项目或用户配置目录解析;目标项目未提供本地 `skills/` 时,CLI 会回退到 npm 包内置的 `skills/`。因此普通项目不需要复制 loop-agent 仓库历史文档或内置 skills 才能获得默认 DAG 能力。
191
-
192
- ## 发布前检查
193
-
194
- 发布 npm 包前至少运行:
195
-
196
- ```bash
197
- npm run typecheck
198
- npm test
199
- npm run build
200
- node bin/loop-agent.js --help
201
- npm pack --dry-run
202
- ```
203
-
204
- 发布入口 `bin/loop-agent.js` 只加载 `dist/cli.js`;`npm run dev -- <args>` 只用于源码开发和定位问题。
1
+ # loop-agent
2
+
3
+ `loop-agent` 是面向 AI coding agent 的仓库级任务运行时和治理工具。它把一次研发任务组织成可生成、可校验、可执行、可恢复、可交接的 Agent DAG,并用 `.harness/`、`docs/` 和 shell verification 记录执行事实、长期治理资料和完成依据。
4
+
5
+ 它可以作为任意目标项目的稳定控制器:初始化目标项目后,项目会获得 repo-local skills、治理文档、验证脚本、任务运行态目录和模型执行指引,使 agent 在目标项目里的工作体验尽量与本仓库对齐。
6
+
7
+ ## 快速开始
8
+
9
+ 到一个新项目时,可以直接对当前 agent 说:
10
+
11
+ ```text
12
+ 请用 loop-agent 完整初始化当前项目;如果本机没有 loop-agent,请先安装 @tea-agent/loop-agent@latest。按 init instructions 使用 full + merge 初始化,探索项目后补全 README 和验证命令,最后运行 doctor、inspect、docs audit 和 check-repo 并汇报结果。
13
+ ```
14
+
15
+ 作为 CLI 使用时,安装已发布包:
16
+
17
+ ```bash
18
+ npm install -g @tea-agent/loop-agent@latest
19
+ loop-agent --version
20
+ loop-agent --help
21
+ ```
22
+
23
+ 检查当前项目的 loop-agent 配置:
24
+
25
+ ```bash
26
+ loop-agent doctor
27
+ loop-agent inspect
28
+ ```
29
+
30
+ ## 初始化目标项目
31
+
32
+ 在新项目中,最简单的用法是让当前 agent 执行初始化。需要更稳的执行约束时,可以使用下面这段完整提示词:
33
+
34
+ ```text
35
+ 请用 loop-agent 完整初始化当前项目。
36
+
37
+ 如果本机还没有 `loop-agent` 命令,请先运行 `npm install -g @tea-agent/loop-agent@latest`,再记录 `npm list -g @tea-agent/loop-agent --depth=0` 的实际版本。
38
+
39
+ 然后运行 `loop-agent init instructions --repo-root .`,按指引使用 full + merge 初始化。需要选择 provider/model,或涉及凭据、成本、部署副作用时先问我;其他能安全默认的选项直接继续。
40
+
41
+ 初始化后请立刻探索当前项目的 README、manifest/build/config 文件和源码目录,补全根 README 的项目概览、技术栈/目录结构、开发与验证命令,并同步更新 `docs/verification-matrix.md` 和必要的 `scripts/ci-tests.sh`。
42
+
43
+ 最后运行 `loop-agent init doctor --repo-root .`、`loop-agent inspect --repo-root .`、`loop-agent docs audit --repo-root .`、`bash scripts/check-repo.sh`,如项目测试入口可识别也运行 `bash scripts/ci-tests.sh` 或 `bash scripts/ci.sh`,并汇报结果、假设和剩余风险。
44
+ ```
45
+
46
+ 如果手动运行 CLI,可以使用:
47
+
48
+ ```bash
49
+ loop-agent init instructions --repo-root <target-repo>
50
+ loop-agent init --repo-root <target-repo> --profile full --merge
51
+ loop-agent init doctor --repo-root <target-repo>
52
+ ```
53
+
54
+ `init instructions` 会输出给模型/Agent 执行完整初始化的指引包,不要求目标项目已有 `harness.json`。默认初始化会 merge 已有 `AGENTS.md`、`harness.json` 和 `docs/`,复制 repo-local `skills/` 并同步镜像到 `.agents/skills/`(agent 兼容路径,如 OpenCode 自动发现),生成语言无关的治理脚本矩阵、中文根 README 入口、目标项目版治理文档、`harness.json` IDE schema 指引和 `.harness/` 骨架;已有 README 会保留用户正文并插入/更新 loop-agent managed block。初始化还会向 `.gitignore` 合并一个 loop-agent managed block(`# LOOP_AGENT_INIT_START/END`),把 `.harness/tasks/*`、`.harness/dag-runs/*`、`.harness/runs/*`、`.harness/live/`、`.harness/cache/`、`.harness/init-surface.json`、`.harness/task-pool/*`、`.task-pool/`、`.worktrees/` 等个人/会话运行态事实忽略掉,同时保留 `.harness/prompts/` 和目录占位可共享,不会整目录忽略 `.harness/`,也不会覆盖用户已有的 ignore 规则。
55
+
56
+ 新初始化会写入 `.harness/init-surface.json`,记录当前 controller 版本、初始化投影文件 hash 和 manifest hash。已用旧版本初始化的目标项目,可以用下面的维护入口对齐新版本初始化能力:
57
+
58
+ ```bash
59
+ loop-agent init check-update --repo-root <target-repo> --json
60
+ loop-agent init check-update --repo-root <target-repo> --markdown
61
+ loop-agent init update --repo-root <target-repo> --bootstrap-surface
62
+ loop-agent init update --repo-root <target-repo> --apply-safe
63
+ ```
64
+
65
+ `check-update` 只读报告 deterministic actions、model merge tasks、human decisions 和 recommended next。`update --bootstrap-surface` 为旧项目补 inferred baseline;`update --apply-safe` 只补缺失文件、目录和 managed block(包括过期的 `.gitignore` managed block),不覆盖已有但无法确认来源的本地文件。
66
+
67
+ 当初始化由模型/Agent 执行时,它应把初始化当成一个自动化闭环:确认真正不能安全默认的 provider/model、治理根目录或凭据/成本问题后,运行 deterministic init,随后立刻读取目标项目真实文件,补全根 README 的项目概览、技术栈/目录结构、开发与验证命令,并同步适配 `docs/verification-matrix.md` 和必要的 `scripts/ci-tests.sh`。
68
+
69
+ 初始化生成的 `scripts/ci-tests.sh` 不假定目标项目是 TypeScript、Node、前端或后端项目。它会保守探测 `package.json`、`Makefile`、`go.mod`、`Cargo.toml`、Python 测试配置、Maven、Gradle、.NET 等常见入口,只运行实际存在且工具可用的命令;探测不到时会清楚提示需要由初始化模型或用户按目标项目实际技术栈补充。
70
+
71
+ ## 运行任务
72
+
73
+ 创建并运行一个标准 Agent DAG:
74
+
75
+ ```bash
76
+ loop-agent new-task <task-id> "任务标题"
77
+ loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
78
+ loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
79
+ loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
80
+ ```
81
+
82
+ `<temp-dir>` 表示平台原生临时目录;也可以省略 `--output`,再使用命令 JSON 输出里的 `outputPath`。
83
+
84
+ 一次性只读评审或有边界写入:
85
+
86
+ ```bash
87
+ loop-agent pi-prompt --cwd . --tools read,grep,find,ls "只读评审这个任务,不要编辑文件。"
88
+ loop-agent pi-prompt --cwd . --tools read,bash,edit,write,grep,find,ls "<包含 allowedPaths 和 forbiddenPaths 的有边界任务说明>"
89
+ ```
90
+
91
+ 产品线 feature packet 可用伴生 Worker CLI 做 docs CI;仓库也提供外部 CI/cron wrapper,调度仍由外部系统负责:
92
+
93
+ ```bash
94
+ agent-worker task validate-feature <feature-dir>
95
+ bash scripts/worker-nightly.sh <feature-dir> <target-repo> <batch-run-id>
96
+ ```
97
+
98
+ nightly wrapper 按 feature 互斥,保留批次/超时退出码,并输出 morning report、Observe snapshot 和 controller 版本 artifacts。
99
+
100
+ 0.8.0 起,`.harness/task-pool/` 是唯一受支持的 Task Pool runtime root,其中包含根级 `runs.jsonl`、`events.jsonl`、`states/`、`artifacts/`、`failure-handoffs/`、`observability/` 和 `reports/`。这是 hard cutover:旧路径不读取、不迁移、不合并、不重映射;升级意味着本地 Worker Task Pool 历史重置。
101
+
102
+ ## 核心概念
103
+
104
+ - **Agent DAG**:把一次任务拆成 contract、scout、plan、implement、verify、closeout 等可审查节点。
105
+ - **`.harness/`**:记录 task、DAG run、one-shot run、cache live state 等运行态事实。
106
+ - **`harness.json`**:描述项目名、治理根目录、模型路由、executor 和验证脚本;`docs/templates/harness.schema.json` IDE 提供补全和字段说明,运行时仍由 Zod schema 校验。
107
+ - **repo-local skills**:目标项目本地的 `skills/`(loop-agent 主路径)优先于发布包内置 skills,便于项目定制 agent 行为;`init --profile full` 还会把同一份 skills 镜像到 `.agents/skills/`,让外部 agent(如 OpenCode)也能自动发现。DAG skill 解析顺序为:用户配置目录 → `skills/` → `.agents/skills/` → 发布包内置。
108
+ - **治理文档**:`docs/` 保存原则、工作流、验证矩阵、runtime 边界、计划和报告。
109
+ - **shell verification**:完成声明必须有可复现命令作为依据,而不是只靠聊天结论。
110
+
111
+ 这些治理原则的设计思想吸收了 Anthropic 长时运行 agent harness、OpenAI Codex harness engineering、腾讯端到端 Harness Engineering 和社区 agent harness 实践:人类掌舵,智能体执行;仓库作为记录系统;任务小步推进;用结构化 handoff 与可复现验证跨 session 保持连续性。背景资料收录在 `website/docs/practices/`。
112
+
113
+ ## 能力概览
114
+
115
+ - 生成、校验、执行和汇总 Agent DAG。
116
+ - 从任务说明生成标准 DAG,并按依赖顺序运行规划、实现、验证和收口节点。
117
+ - 维护 `loop` 长程任务状态,包括目标、轮次、信号、验证事实和收口草稿。
118
+ - 通过 Pi executor 执行只读规划、评审、诊断和有边界写入。
119
+ - 保留 Cursor executor 作为显式启用的可选后端。
120
+ - 通过 shell executor 运行确定性的验证命令。
121
+ - 检查任务状态、运行态工件、文档链接、skill entry 和 runtime boundary 等治理规则。
122
+
123
+ ## 内置示例
124
+
125
+ `examples/` 默认不复制到目标项目。可以通过工具内置命令查看或按需复制:
126
+
127
+ ```bash
128
+ loop-agent examples list
129
+ loop-agent examples show example-dag.json
130
+ loop-agent examples copy example-dag.json --repo-root <target-repo>
131
+ ```
132
+
133
+ ## 迭代本仓库
134
+
135
+ 如果要用 loop-agent 迭代 loop-agent 本仓库,控制器必须来自已发布的 npm 安装包。不要使用当前工作区的 `npm link` 或 `npm run dev` 作为控制器;首次安装或有意升级可用 `@latest`,但一次自举任务启动后不要在任务中途升级控制器。
136
+
137
+ ```bash
138
+ npm install -g @tea-agent/loop-agent@latest
139
+ npm list -g @tea-agent/loop-agent --depth=0
140
+ loop-agent doctor
141
+ loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd <repo-root>
142
+ ```
143
+
144
+ `@latest` 只用于安装或升级,不要在 DAG 节点里反复用 `npx @latest` 拉取。自举任务应记录 `npm list -g` 显示的实际版本号。
145
+
146
+ ## 文档导航
147
+
148
+ | 路径 | 用途 |
149
+ |---|---|
150
+ | `AGENTS.md` | 本仓库的 agent 开工协议、会话协议和长期工作规则 |
151
+ | `harness.json` | loop-agent 在本仓库的模型、executor、治理根目录和脚本配置 |
152
+ | `docs/README.md` | 治理文档索引 |
153
+ | `docs/verification-matrix.md` | 不同变更类型对应的验证命令 |
154
+ | `docs/production-readiness.md` | Production Readiness v0.1 支持范围、证据和验收标准 |
155
+ | `docs/architecture/runtime-boundaries.md` | runtime 层边界和依赖方向 |
156
+ | `skills/loop-agent/` | loop-agent skill 入口和 references |
157
+ | `examples/` | 可复用 DAG 示例 |
158
+ | `website/docs/` | 面向使用者的 Docusaurus 文档站内容 |
159
+ | `website/docs/practices/` | Anthropic、OpenAI Codex、腾讯端到端工程与社区 harness 实践资料 |
160
+
161
+ ## 本仓库开发
162
+
163
+ 本地源码开发:
164
+
165
+ ```bash
166
+ npm install
167
+ npm run build
168
+ node bin/loop-agent.js --help
169
+ npm run dev -- --help
170
+ ```
171
+
172
+ 常用验证命令:
173
+
174
+ ```bash
175
+ npm run typecheck
176
+ npm test
177
+ bash scripts/check-repo.sh
178
+ bash scripts/ci.sh
179
+ npm run docs:build
180
+ ```
181
+
182
+ 当前 CLI 使用 `commander` 组织 command tree。顶层 help、子命令 help、参数解析和未知命令错误都由 commander 驱动。
183
+
184
+ Windows 上运行 `scripts/*.sh` 时使用 Git Bash 或已配置的兼容 Bash,不要求使用 WSL 或 POSIX 路径。实际文件操作和 `--output` / `--dag` / `--cwd` 参数使用当前平台原生路径;仓库内引用、JSON/Markdown 证据引用和 glob 约定可继续用 `/` 作为稳定分隔符。
185
+
186
+ ## 发布包内容
187
+
188
+ 发布包包含静态运行和指导资料:`bin/`、`dist/`、`skills/`、`docs/*.md`、`docs/architecture/runtime-boundaries.md`、`docs/skills/`、`docs/templates/`、`docs/init-surface.manifest.json`、`examples/`、`harness.json`、`AGENTS.md`、`README.md` `CHANGELOG.md`。
189
+
190
+ `docs/progress/`、`docs/reports/`、`docs/exec-plans/`、`docs/decisions/` 等目录下的任务正文是目标仓库实时生成或历史事实;npm 包只携带这些目录的 README,不携带本仓库已有历史记录。
191
+
192
+ DAG skill 指令优先从目标项目或用户配置目录解析;目标项目未提供本地 `skills/` 时,CLI 会回退到 npm 包内置的 `skills/`。因此普通项目不需要复制 loop-agent 仓库历史文档或内置 skills 才能获得默认 DAG 能力。
193
+
194
+ ## 发布前检查
195
+
196
+ 发布 npm 包前至少运行:
197
+
198
+ ```bash
199
+ npm run typecheck
200
+ npm test
201
+ npm run build
202
+ node bin/loop-agent.js --help
203
+ npm pack --dry-run
204
+ ```
205
+
206
+ 发布入口 `bin/loop-agent.js` 只加载 `dist/cli.js`;`npm run dev -- <args>` 只用于源码开发和定位问题。
@@ -1,22 +1,22 @@
1
- #!/usr/bin/env node
2
- import { existsSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { fileURLToPath, pathToFileURL } from "node:url";
5
-
6
- const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
7
- const cliEntry = join(packageRoot, "dist", "worker", "cli.js");
8
-
9
- if (!existsSync(cliEntry)) {
10
- console.error(
11
- `agent-worker: cannot find built CLI at ${cliEntry}. Run \`npm run build\` before using the package bin.`,
12
- );
13
- process.exit(1);
14
- }
15
-
16
- try {
17
- const cli = await import(pathToFileURL(cliEntry).href);
18
- await cli.main(process.argv);
19
- } catch (error) {
20
- console.error(error instanceof Error ? error.message : String(error));
21
- process.exit(1);
22
- }
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
5
+
6
+ const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
7
+ const cliEntry = join(packageRoot, "dist", "worker", "cli.js");
8
+
9
+ if (!existsSync(cliEntry)) {
10
+ console.error(
11
+ `agent-worker: cannot find built CLI at ${cliEntry}. Run \`npm run build\` before using the package bin.`,
12
+ );
13
+ process.exit(1);
14
+ }
15
+
16
+ try {
17
+ const cli = await import(pathToFileURL(cliEntry).href);
18
+ await cli.main(process.argv);
19
+ } catch (error) {
20
+ console.error(error instanceof Error ? error.message : String(error));
21
+ process.exit(1);
22
+ }
package/bin/loop-agent.js CHANGED
@@ -1,21 +1,21 @@
1
- #!/usr/bin/env node
2
- import { existsSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { fileURLToPath, pathToFileURL } from "node:url";
5
-
6
- const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
7
- const cliEntry = join(packageRoot, "dist", "cli.js");
8
-
9
- if (!existsSync(cliEntry)) {
10
- console.error(
11
- `loop-agent: cannot find built CLI at ${cliEntry}. Run \`npm run build\` before using the package bin.`,
12
- );
13
- process.exit(1);
14
- }
15
-
16
- try {
17
- await import(pathToFileURL(cliEntry).href);
18
- } catch (error) {
19
- console.error(error instanceof Error ? error.message : String(error));
20
- process.exit(1);
21
- }
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
5
+
6
+ const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
7
+ const cliEntry = join(packageRoot, "dist", "cli.js");
8
+
9
+ if (!existsSync(cliEntry)) {
10
+ console.error(
11
+ `loop-agent: cannot find built CLI at ${cliEntry}. Run \`npm run build\` before using the package bin.`,
12
+ );
13
+ process.exit(1);
14
+ }
15
+
16
+ try {
17
+ await import(pathToFileURL(cliEntry).href);
18
+ } catch (error) {
19
+ console.error(error instanceof Error ? error.message : String(error));
20
+ process.exit(1);
21
+ }