@tea-agent/loop-agent 0.1.0 → 0.2.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/CHANGELOG.md +17 -1
- package/README.md +127 -92
- package/dist/adapters/index.js +3 -2
- package/dist/adapters/loop-agent.js +44 -2
- package/dist/application/dag/args.js +420 -0
- package/dist/application/dag/generate-task-dag.js +280 -0
- package/dist/application/dag/report-dag.js +14 -0
- package/dist/application/dag/run-dag.js +93 -0
- package/dist/application/dag/validate-dag.js +101 -0
- package/dist/application/loop/run-action.js +23 -0
- package/dist/cli/catalog.js +2 -237
- package/dist/cli/command-definitions.js +571 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/program.js +65 -1
- package/dist/cli/router.js +13 -0
- package/dist/cli-governance/active-residue-check.js +38 -0
- package/dist/commands/dag-report.js +6 -107
- package/dist/commands/dag-run-task.js +8 -466
- package/dist/commands/dag-validate.js +7 -179
- package/dist/commands/examples.js +90 -0
- package/dist/commands/init.js +1495 -0
- package/dist/commands/loop.js +57 -31
- package/dist/commands/pi-prompt.js +2 -9
- package/dist/commands/run-dag.js +7 -180
- package/dist/executors/cursor-executor-artifacts.js +3 -4
- package/dist/executors/cursor-worker-client.js +13 -3
- package/dist/executors/dag-cursor-executor.js +2 -3
- package/dist/executors/dag-pi-executor.js +3 -4
- package/dist/executors/dag-static-executor.js +2 -5
- package/dist/executors/pi-defaults.js +9 -0
- package/dist/executors/shell-executor.js +12 -20
- package/dist/governance/manifest-types.js +1 -0
- package/dist/infrastructure/harness/active-residue-policy.js +73 -0
- package/dist/infrastructure/harness/artifact-store.js +72 -0
- package/dist/infrastructure/harness/atomic-write.js +49 -0
- package/dist/infrastructure/harness/completed-facts-guard.js +40 -0
- package/dist/infrastructure/harness/loop-action-store.js +23 -0
- package/dist/infrastructure/harness/loop-store.js +41 -0
- package/dist/infrastructure/harness/one-shot-run-store.js +94 -0
- package/dist/infrastructure/harness/task-store.js +77 -0
- package/dist/records/one-shot-runs.js +26 -61
- package/dist/records/promotion.js +3 -4
- package/dist/shared/artifacts-core.js +5 -5
- package/dist/shared/logger.js +9 -15
- package/dist/task/delegate.js +4 -4
- package/dist/task/runtime.js +5 -7
- package/dist/task/state.js +6 -20
- package/dist/workflows/dag/convergence/controller.js +277 -0
- package/dist/workflows/dag/dynamic-runtime/condition.js +48 -0
- package/dist/workflows/dag/dynamic-runtime/loop-until.js +156 -0
- package/dist/workflows/dag/dynamic-runtime/map.js +185 -0
- package/dist/workflows/dag/dynamic-runtime/reduction.js +72 -0
- package/dist/workflows/dag/dynamic-runtime/shared.js +133 -0
- package/dist/workflows/dag/lifecycle.js +6 -5
- package/dist/workflows/dag/node-execution.js +262 -0
- package/dist/workflows/dag/run-store.js +36 -0
- package/dist/workflows/dag/runner.js +82 -1341
- package/dist/workflows/dag/scheduler.js +84 -0
- package/dist/workflows/dag/upstream-artifacts.js +20 -18
- package/dist/workflows/loop/actions/cursor-fix.js +191 -0
- package/dist/workflows/loop/actions/dag-action.js +130 -0
- package/dist/workflows/loop/actions/pi-review.js +267 -0
- package/dist/workflows/loop/actions/shared.js +157 -0
- package/dist/workflows/loop/actions/shell-verify.js +82 -0
- package/dist/workflows/loop/actions/types.js +1 -0
- package/dist/workflows/loop/actions/workflow-action.js +255 -0
- package/dist/workflows/loop/actions.js +55 -1212
- package/dist/workflows/loop/closeout.js +5 -4
- package/dist/workflows/loop/context.js +2 -3
- package/dist/workflows/loop/events.js +3 -2
- package/dist/workflows/loop/policy/auto-policy.js +104 -0
- package/dist/workflows/loop/policy/cursor-fix-policy.js +31 -0
- package/dist/workflows/loop/rounds.js +3 -3
- package/dist/workflows/loop/signals.js +4 -7
- package/dist/workflows/loop/state.js +11 -11
- package/docs/README.md +3 -2
- package/docs/architecture/runtime-boundaries.md +147 -0
- package/docs/exec-plans/active/README.md +4 -0
- package/docs/exec-plans/completed/README.md +6 -2
- package/package.json +2 -1
- package/skills/ai-engineering-context/SKILL.md +21 -21
- package/skills/loop-agent/SKILL.md +73 -188
- package/skills/loop-agent/references/README.md +6 -2
- package/skills/loop-agent/references/harness-policy.md +113 -113
- package/skills/loop-agent/references/learned/README.md +13 -13
- package/skills/loop-agent/references/long-running-loop.md +59 -0
- package/skills/loop-agent/references/pi-subagent-assisted-mode.md +0 -2
- package/skills/loop-agent/references/verification-and-failure-handling.md +18 -0
- package/skills/requesting-code-review/SKILL.md +40 -40
- package/skills/requesting-code-review/code-reviewer.md +4 -4
- package/skills/systematic-debugging/CREATION-LOG.md +43 -43
- package/skills/systematic-debugging/SKILL.md +113 -113
- package/skills/systematic-debugging/condition-based-waiting.md +20 -20
- package/skills/systematic-debugging/defense-in-depth.md +27 -27
- package/skills/systematic-debugging/root-cause-tracing.md +38 -38
- package/skills/systematic-debugging/test-academic.md +6 -6
- package/skills/systematic-debugging/test-pressure-1.md +6 -6
- package/skills/systematic-debugging/test-pressure-2.md +2 -2
- package/skills/systematic-debugging/test-pressure-3.md +6 -6
- package/skills/verification-before-completion/SKILL.md +37 -37
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
这里记录每个版本面向使用者的主要变化。保持简短即可:新增、修改、修复或删除了什么,不需要展开实现细节。
|
|
4
4
|
|
|
5
|
-
## [0.
|
|
5
|
+
## [0.2.0] - 2026-07-05
|
|
6
|
+
|
|
7
|
+
### 新增
|
|
8
|
+
|
|
9
|
+
- 新增 `loop-agent init` 初始化目标项目,包含模型指引输出、merge 初始化、初始化体检、repo-local skills 投影、语言无关治理脚本矩阵、runtime boundary 文档、skill entry/architecture boundary 检查和目标项目版治理文档;根 README 默认生成中文项目入口,并以 managed block 合并已有 README;模型执行初始化时必须在同一轮自动完成项目识别、README/验证矩阵适配和体检闭环;`examples` 改为工具内置查看/按需复制,不在初始化时默认写入目标仓库。
|
|
10
|
+
|
|
11
|
+
### 修改
|
|
12
|
+
|
|
13
|
+
- `harness.json` 支持用 `adapter: "loop-agent"` 与真实项目名分离,目标项目无需把 `project` 写成 `loop-agent` 才能使用默认 adapter。
|
|
14
|
+
- README 重组为兼顾 npm/GitHub 展示和本仓库迭代导航的入口,明确区分快速开始、目标项目初始化、任务运行、核心概念、本仓库开发和发布包内容,并补充新项目初始化时可直接交给模型执行的提示词。
|
|
15
|
+
|
|
16
|
+
### 修复
|
|
17
|
+
|
|
18
|
+
- npm 发布包范围纳入 `docs/architecture/runtime-boundaries.md`,确保 runtime boundary 治理文档随 0.2.0 包一起发布。
|
|
19
|
+
- Cursor DAG worker 在构建产物中使用 `.js` worker 入口且不依赖 `tsx`,避免发布包/本地 build 运行 Cursor 节点时先因 worker 入口解析失败。
|
|
20
|
+
|
|
21
|
+
## [0.1.0] - 已发布
|
|
6
22
|
|
|
7
23
|
### 新增
|
|
8
24
|
|
package/README.md
CHANGED
|
@@ -1,55 +1,113 @@
|
|
|
1
|
-
# loop-agent
|
|
2
|
-
|
|
3
|
-
`loop-agent` 是从 `agent-memory/tools/code-agent` 独立出来的 TypeScript 工作流运行时,用来支撑 AI coding agent 在一个仓库内完成可恢复、可验证、可交接的研发任务。
|
|
1
|
+
# loop-agent
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
`loop-agent` 是面向 AI coding agent 的仓库级任务运行时和治理工具。它把一次研发任务组织成可生成、可校验、可执行、可恢复、可交接的 Agent DAG,并用 `.harness/`、`docs/` 和 shell verification 记录执行事实、长期治理资料和完成依据。
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## 核心能力
|
|
10
|
-
|
|
11
|
-
- 生成、校验、执行和汇总 Agent DAG
|
|
12
|
-
- 支持以 Agent DAG 为主的任务生成、校验、执行和收口
|
|
13
|
-
- 维护 `loop` 长程任务状态,包括目标、轮次、信号、验证事实和收口草稿
|
|
14
|
-
- 通过 Pi executor 执行只读规划、评审和诊断
|
|
15
|
-
- 通过 Pi executor 的 `toolProfile: "write"` 执行有边界的写代码任务;Cursor executor 保留为显式启用的可选后端
|
|
16
|
-
- 通过 shell executor 运行确定性的验证命令
|
|
17
|
-
- 检查任务状态、运行态工件、文档链接和源码结构等治理规则
|
|
18
|
-
|
|
19
|
-
## 目录结构
|
|
20
|
-
|
|
21
|
-
| 路径 | 用途 |
|
|
22
|
-
|---|---|
|
|
23
|
-
| `src/` | CLI、命令、工作流、执行器、任务运行时、治理和共享 helper |
|
|
24
|
-
| `test/` | Vitest 回归测试 |
|
|
25
|
-
| `bin/loop-agent.js` | CLI 可执行入口 |
|
|
26
|
-
| `skills/` | loop-agent 和 DAG 模板引用的本地 skill 指令与参考资料 |
|
|
27
|
-
| `.harness/` | 任务、DAG、run、cache 和 live state 等运行态目录 |
|
|
28
|
-
| `docs/` | 治理文档、工作流规则、执行计划、报告和模板 |
|
|
29
|
-
| `website/` | Docusaurus 用户文档站 |
|
|
30
|
-
| `examples/` | 可复用 DAG 示例 |
|
|
31
|
-
| `scripts/` | 仓库验证和维护脚本 |
|
|
32
|
-
|
|
33
|
-
## 安装
|
|
5
|
+
它可以作为任意目标项目的稳定控制器:初始化目标项目后,项目会获得 repo-local skills、治理文档、验证脚本、任务运行态目录和模型执行指引,使 agent 在目标项目里的工作体验尽量与本仓库对齐。
|
|
34
6
|
|
|
35
|
-
|
|
36
|
-
|
|
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 并汇报结果。
|
|
37
13
|
```
|
|
38
14
|
|
|
39
|
-
|
|
15
|
+
作为 CLI 使用时,安装已发布包:
|
|
40
16
|
|
|
41
17
|
```bash
|
|
42
|
-
npm
|
|
18
|
+
npm install -g @tea-agent/loop-agent@latest
|
|
43
19
|
loop-agent --help
|
|
44
20
|
```
|
|
45
21
|
|
|
46
|
-
|
|
22
|
+
检查当前项目的 loop-agent 配置:
|
|
47
23
|
|
|
48
24
|
```bash
|
|
49
|
-
|
|
25
|
+
loop-agent doctor
|
|
26
|
+
loop-agent inspect
|
|
50
27
|
```
|
|
51
28
|
|
|
52
|
-
|
|
29
|
+
## 初始化目标项目
|
|
30
|
+
|
|
31
|
+
在新项目中,最简单的用法是让当前 agent 执行初始化。需要更稳的执行约束时,可以使用下面这段完整提示词:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
请用 loop-agent 完整初始化当前项目。
|
|
35
|
+
|
|
36
|
+
如果本机还没有 `loop-agent` 命令,请先运行 `npm install -g @tea-agent/loop-agent@latest`,再记录 `npm list -g @tea-agent/loop-agent --depth=0` 的实际版本。
|
|
37
|
+
|
|
38
|
+
然后运行 `loop-agent init instructions --repo-root .`,按指引使用 full + merge 初始化。需要选择 provider/model,或涉及凭据、成本、部署副作用时先问我;其他能安全默认的选项直接继续。
|
|
39
|
+
|
|
40
|
+
初始化后请立刻探索当前项目的 README、manifest/build/config 文件和源码目录,补全根 README 的项目概览、技术栈/目录结构、开发与验证命令,并同步更新 `docs/verification-matrix.md` 和必要的 `scripts/ci-tests.sh`。
|
|
41
|
+
|
|
42
|
+
最后运行 `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`,并汇报结果、假设和剩余风险。
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
如果手动运行 CLI,可以使用:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
loop-agent init instructions --repo-root <target-repo>
|
|
49
|
+
loop-agent init --repo-root <target-repo> --profile full --merge
|
|
50
|
+
loop-agent init doctor --repo-root <target-repo>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`init instructions` 会输出给模型/Agent 执行完整初始化的指引包,不要求目标项目已有 `harness.json`。默认初始化会 merge 已有 `AGENTS.md`、`harness.json` 和 `docs/`,复制 repo-local `skills/`,生成语言无关的治理脚本矩阵、中文根 README 入口、目标项目版治理文档和 `.harness/` 骨架;已有 README 会保留用户正文并插入/更新 loop-agent managed block。
|
|
54
|
+
|
|
55
|
+
当初始化由模型/Agent 执行时,它应把初始化当成一个自动化闭环:确认真正不能安全默认的 provider/model、治理根目录或凭据/成本问题后,运行 deterministic init,随后立刻读取目标项目真实文件,补全根 README 的项目概览、技术栈/目录结构、开发与验证命令,并同步适配 `docs/verification-matrix.md` 和必要的 `scripts/ci-tests.sh`。
|
|
56
|
+
|
|
57
|
+
初始化生成的 `scripts/ci-tests.sh` 不假定目标项目是 TypeScript、Node、前端或后端项目。它会保守探测 `package.json`、`Makefile`、`go.mod`、`Cargo.toml`、Python 测试配置、Maven、Gradle、.NET 等常见入口,只运行实际存在且工具可用的命令;探测不到时会清楚提示需要由初始化模型或用户按目标项目实际技术栈补充。
|
|
58
|
+
|
|
59
|
+
## 运行任务
|
|
60
|
+
|
|
61
|
+
创建并运行一个标准 Agent DAG:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
loop-agent new-task <task-id> "任务标题"
|
|
65
|
+
loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
|
|
66
|
+
loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
|
|
67
|
+
loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`<temp-dir>` 表示平台原生临时目录;也可以省略 `--output`,再使用命令 JSON 输出里的 `outputPath`。
|
|
71
|
+
|
|
72
|
+
一次性只读评审或有边界写入:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
loop-agent pi-prompt --cwd . --tools read,grep,find,ls "只读评审这个任务,不要编辑文件。"
|
|
76
|
+
loop-agent pi-prompt --cwd . --tools read,bash,edit,write,grep,find,ls "<包含 allowedPaths 和 forbiddenPaths 的有边界任务说明>"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 核心概念
|
|
80
|
+
|
|
81
|
+
- **Agent DAG**:把一次任务拆成 contract、scout、plan、implement、verify、closeout 等可审查节点。
|
|
82
|
+
- **`.harness/`**:记录 task、DAG run、one-shot run、cache 和 live state 等运行态事实。
|
|
83
|
+
- **`harness.json`**:描述项目名、治理根目录、模型路由、executor 和验证脚本。
|
|
84
|
+
- **repo-local skills**:目标项目本地的 `skills/` 优先于发布包内置 skills,便于项目定制 agent 行为。
|
|
85
|
+
- **治理文档**:`docs/` 保存原则、工作流、验证矩阵、runtime 边界、计划和报告。
|
|
86
|
+
- **shell verification**:完成声明必须有可复现命令作为依据,而不是只靠聊天结论。
|
|
87
|
+
|
|
88
|
+
## 能力概览
|
|
89
|
+
|
|
90
|
+
- 生成、校验、执行和汇总 Agent DAG。
|
|
91
|
+
- 从任务说明生成标准 DAG,并按依赖顺序运行规划、实现、验证和收口节点。
|
|
92
|
+
- 维护 `loop` 长程任务状态,包括目标、轮次、信号、验证事实和收口草稿。
|
|
93
|
+
- 通过 Pi executor 执行只读规划、评审、诊断和有边界写入。
|
|
94
|
+
- 保留 Cursor executor 作为显式启用的可选后端。
|
|
95
|
+
- 通过 shell executor 运行确定性的验证命令。
|
|
96
|
+
- 检查任务状态、运行态工件、文档链接、skill entry 和 runtime boundary 等治理规则。
|
|
97
|
+
|
|
98
|
+
## 内置示例
|
|
99
|
+
|
|
100
|
+
`examples/` 默认不复制到目标项目。可以通过工具内置命令查看或按需复制:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
loop-agent examples list
|
|
104
|
+
loop-agent examples show example-dag.json
|
|
105
|
+
loop-agent examples copy example-dag.json --repo-root <target-repo>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## 迭代本仓库
|
|
109
|
+
|
|
110
|
+
如果要用 loop-agent 迭代 loop-agent 本仓库,控制器必须来自已发布的 npm 安装包。不要使用当前工作区的 `npm link` 或 `npm run dev` 作为控制器;首次安装或有意升级可用 `@latest`,但一次自举任务启动后不要在任务中途升级控制器。
|
|
53
111
|
|
|
54
112
|
```bash
|
|
55
113
|
npm install -g @tea-agent/loop-agent@latest
|
|
@@ -60,68 +118,51 @@ loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd <repo-root>
|
|
|
60
118
|
|
|
61
119
|
`@latest` 只用于安装或升级,不要在 DAG 节点里反复用 `npx @latest` 拉取。自举任务应记录 `npm list -g` 显示的实际版本号。
|
|
62
120
|
|
|
63
|
-
|
|
121
|
+
## 文档导航
|
|
122
|
+
|
|
123
|
+
| 路径 | 用途 |
|
|
124
|
+
|---|---|
|
|
125
|
+
| `AGENTS.md` | 本仓库的 agent 开工协议、会话协议和长期工作规则 |
|
|
126
|
+
| `harness.json` | loop-agent 在本仓库的模型、executor、治理根目录和脚本配置 |
|
|
127
|
+
| `docs/README.md` | 治理文档索引 |
|
|
128
|
+
| `docs/verification-matrix.md` | 不同变更类型对应的验证命令 |
|
|
129
|
+
| `docs/architecture/runtime-boundaries.md` | runtime 层边界和依赖方向 |
|
|
130
|
+
| `skills/loop-agent/` | loop-agent skill 入口和 references |
|
|
131
|
+
| `examples/` | 可复用 DAG 示例 |
|
|
132
|
+
| `website/docs/` | 面向使用者的 Docusaurus 文档站内容 |
|
|
133
|
+
|
|
134
|
+
## 本仓库开发
|
|
135
|
+
|
|
136
|
+
本地源码开发:
|
|
64
137
|
|
|
65
|
-
|
|
138
|
+
```bash
|
|
139
|
+
npm install
|
|
140
|
+
npm run build
|
|
141
|
+
node bin/loop-agent.js --help
|
|
142
|
+
npm run dev -- --help
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
常用验证命令:
|
|
66
146
|
|
|
67
|
-
## 常用命令
|
|
68
|
-
|
|
69
147
|
```bash
|
|
70
148
|
npm run typecheck
|
|
71
149
|
npm test
|
|
72
150
|
bash scripts/check-repo.sh
|
|
73
151
|
bash scripts/ci.sh
|
|
74
|
-
npm run docs:dev
|
|
75
152
|
npm run docs:build
|
|
76
153
|
```
|
|
77
154
|
|
|
78
|
-
|
|
155
|
+
当前 CLI 使用 `commander` 组织 command tree。顶层 help、子命令 help、参数解析和未知命令错误都由 commander 驱动。
|
|
79
156
|
|
|
80
|
-
|
|
81
|
-
- 实际文件操作和 `--output` / `--dag` / `--cwd` 参数使用当前平台原生路径。仓库内引用、JSON/Markdown 证据引用和 glob 约定可继续用 `/` 作为稳定分隔符。
|
|
157
|
+
Windows 上运行 `scripts/*.sh` 时使用 Git Bash 或已配置的兼容 Bash,不要求使用 WSL 或 POSIX 路径。实际文件操作和 `--output` / `--dag` / `--cwd` 参数使用当前平台原生路径;仓库内引用、JSON/Markdown 证据引用和 glob 约定可继续用 `/` 作为稳定分隔符。
|
|
82
158
|
|
|
83
|
-
|
|
159
|
+
## 发布包内容
|
|
84
160
|
|
|
85
|
-
|
|
86
|
-
loop-agent new-task <task-id> "任务标题"
|
|
87
|
-
loop-agent dag run-task <task-id> --profile auto --strict-models --output <temp-dir>/<task-id>-dag.json
|
|
88
|
-
loop-agent dag validate --dag <temp-dir>/<task-id>-dag.json --strict-models --strict-governance
|
|
89
|
-
loop-agent run-dag --dag <temp-dir>/<task-id>-dag.json --cwd .
|
|
90
|
-
```
|
|
161
|
+
发布包包含静态运行和指导资料:`bin/`、`dist/`、`skills/`、`docs/*.md`、`docs/architecture/runtime-boundaries.md`、`docs/templates/`、`examples/`、`harness.json`、`AGENTS.md`、`README.md` 和 `CHANGELOG.md`。
|
|
91
162
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
loop-agent pi-prompt --cwd . --tools read,grep,find,ls "只读评审这个任务,不要编辑文件。"
|
|
98
|
-
loop-agent pi-prompt --cwd . --tools read,bash,edit,write,grep,find,ls "<包含 allowedPaths 和 forbiddenPaths 的有边界任务说明>"
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## 文档站
|
|
102
|
-
|
|
103
|
-
面向使用者的 Markdown 文档放在 `website/docs/`,通过 Docusaurus 渲染为静态 HTML。
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
npm run docs:dev
|
|
107
|
-
npm run docs:build
|
|
108
|
-
npm run docs:serve
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
构建产物输出到 `website/build/`。仓库根目录的 `docs/` 仍然是治理根目录,不和用户文档站混用。
|
|
112
|
-
|
|
113
|
-
## 验证原则
|
|
114
|
-
|
|
115
|
-
选择能覆盖本次变更的最小命令:
|
|
116
|
-
|
|
117
|
-
- 文档或治理变更:`bash scripts/check-repo.sh`
|
|
118
|
-
- TypeScript 运行时代码变更:`npm run typecheck`
|
|
119
|
-
- 行为变更:`npm test`
|
|
120
|
-
- 完整本地门禁:`bash scripts/ci.sh`
|
|
121
|
-
|
|
122
|
-
Windows 上的 Bash 验证命令同样通过 Git Bash 或配置好的 Bash 执行;不要把 `/tmp`、`which`、POSIX shell builtin 等假设写进跨平台 CLI 逻辑。
|
|
123
|
-
|
|
124
|
-
不要在没有新鲜验证结果的情况下声明完成。
|
|
163
|
+
`docs/progress/`、`docs/reports/`、`docs/exec-plans/`、`docs/decisions/` 等目录下的任务正文是目标仓库实时生成或历史事实;npm 包只携带这些目录的 README,不携带本仓库已有历史记录。
|
|
164
|
+
|
|
165
|
+
DAG skill 指令优先从目标项目或用户配置目录解析;目标项目未提供本地 `skills/` 时,CLI 会回退到 npm 包内置的 `skills/`。因此普通项目不需要复制 loop-agent 仓库历史文档或内置 skills 才能获得默认 DAG 能力。
|
|
125
166
|
|
|
126
167
|
## 发布前检查
|
|
127
168
|
|
|
@@ -136,9 +177,3 @@ npm pack --dry-run
|
|
|
136
177
|
```
|
|
137
178
|
|
|
138
179
|
发布入口 `bin/loop-agent.js` 只加载 `dist/cli.js`;`npm run dev -- <args>` 只用于源码开发和定位问题。
|
|
139
|
-
|
|
140
|
-
## 改造来源
|
|
141
|
-
|
|
142
|
-
`loop-agent` 来自 `agent-memory/tools/code-agent` 的主仓库化改造。原型阶段的 `code-agent` 文档偏内部说明;当前仓库入口文档面向独立项目维护和使用。
|
|
143
|
-
|
|
144
|
-
已完成的主仓库重构记录保留在源码仓库的历史 execution plans 中;发布包只携带目录说明和可复用运行资料。
|
package/dist/adapters/index.js
CHANGED
|
@@ -14,9 +14,10 @@ export async function resolveAdapter(repoRoot, explicit) {
|
|
|
14
14
|
}
|
|
15
15
|
try {
|
|
16
16
|
const manifest = await loadHarnessManifest(repoRoot);
|
|
17
|
-
const
|
|
17
|
+
const adapterName = manifest.adapter ?? manifest.project;
|
|
18
|
+
const adapter = ADAPTERS[adapterName];
|
|
18
19
|
if (!adapter)
|
|
19
|
-
throw new Error(`no adapter registered for project "${
|
|
20
|
+
throw new Error(`no adapter registered for project "${adapterName}"; valid options: ${Object.keys(ADAPTERS).join(', ')}`);
|
|
20
21
|
return adapter;
|
|
21
22
|
}
|
|
22
23
|
catch (error) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
2
3
|
import { buildStepContextFiles } from './context.js';
|
|
3
4
|
import { loadHarnessManifest } from '../governance/harness.js';
|
|
4
5
|
function getKeyRepoPaths(repoRoot, manifest) {
|
|
@@ -58,6 +59,10 @@ async function getContextFilesForStep(repoRoot, manifest, taskId, step, taskConf
|
|
|
58
59
|
});
|
|
59
60
|
}
|
|
60
61
|
function getVerifyCommands(repoRoot, options) {
|
|
62
|
+
const manifestCommands = getManifestVerifyCommands(repoRoot, options.preset);
|
|
63
|
+
if (manifestCommands) {
|
|
64
|
+
return applyQuota(manifestCommands, options);
|
|
65
|
+
}
|
|
61
66
|
const quickCommands = [
|
|
62
67
|
{
|
|
63
68
|
args: ['bash', 'scripts/check-repo.sh'],
|
|
@@ -84,11 +89,48 @@ function getVerifyCommands(repoRoot, options) {
|
|
|
84
89
|
: options.preset === 'standard'
|
|
85
90
|
? [...quickCommands, ...standardCommands]
|
|
86
91
|
: [...quickCommands, ...standardCommands, ...fullCommands];
|
|
92
|
+
return applyQuota(selectedCommands, options);
|
|
93
|
+
}
|
|
94
|
+
function applyQuota(commands, options) {
|
|
87
95
|
if (options.phase === 'final' || !options.quota || options.quota === 'full') {
|
|
88
|
-
return
|
|
96
|
+
return commands;
|
|
89
97
|
}
|
|
90
98
|
const maxCommands = options.quota === '1' ? 1 : 3;
|
|
91
|
-
return
|
|
99
|
+
return commands.slice(0, maxCommands);
|
|
100
|
+
}
|
|
101
|
+
function commandFromScript(repoRoot, label, command) {
|
|
102
|
+
return {
|
|
103
|
+
args: ['bash', '-lc', command],
|
|
104
|
+
cwd: repoRoot,
|
|
105
|
+
label,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function getManifestVerifyCommands(repoRoot, preset) {
|
|
109
|
+
try {
|
|
110
|
+
const manifest = JSON.parse(readFileSync(path.join(repoRoot, 'harness.json'), 'utf-8'));
|
|
111
|
+
const quick = typeof manifest.scripts?.quickVerify === 'string'
|
|
112
|
+
? manifest.scripts.quickVerify
|
|
113
|
+
: undefined;
|
|
114
|
+
const standard = typeof manifest.scripts?.standardVerify === 'string'
|
|
115
|
+
? manifest.scripts.standardVerify
|
|
116
|
+
: undefined;
|
|
117
|
+
const full = typeof manifest.scripts?.fullVerify === 'string'
|
|
118
|
+
? manifest.scripts.fullVerify
|
|
119
|
+
: undefined;
|
|
120
|
+
if (!quick && !standard && !full)
|
|
121
|
+
return undefined;
|
|
122
|
+
const quickCommands = quick ? [commandFromScript(repoRoot, 'repo quick verification', quick)] : [];
|
|
123
|
+
const standardCommands = standard ? [commandFromScript(repoRoot, 'repo standard verification', standard)] : [];
|
|
124
|
+
const fullCommands = full ? [commandFromScript(repoRoot, 'repo full verification', full)] : [];
|
|
125
|
+
if (preset === 'quick')
|
|
126
|
+
return quickCommands;
|
|
127
|
+
if (preset === 'standard')
|
|
128
|
+
return [...quickCommands, ...standardCommands];
|
|
129
|
+
return [...quickCommands, ...standardCommands, ...fullCommands];
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
92
134
|
}
|
|
93
135
|
export const loopAgentAdapter = {
|
|
94
136
|
name: 'loop-agent',
|