@tea-agent/loop-agent 0.25.6 → 0.26.1
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 -1
- package/CHANGELOG.md +27 -1
- package/README.md +8 -3
- package/dist/cli/command-definitions.js +25 -10
- package/dist/cli/help.js +4 -3
- package/dist/cli/program.js +43 -17
- package/dist/commands/import-prd.js +7 -2
- package/dist/commands/init.js +7 -5
- package/dist/commands/task-source-prepare.js +468 -0
- package/dist/executors/dag-pi-executor.js +66 -25
- package/dist/executors/model-routing.js +34 -18
- package/dist/executors/shell-write-guard.js +161 -25
- package/dist/governance/manifest-types.js +33 -5
- package/dist/task/source-prepare/build-draft.js +215 -0
- package/dist/task/source-prepare/completeness.js +195 -0
- package/dist/task/source-prepare/index.js +7 -0
- package/dist/task/source-prepare/parse-intent.js +373 -0
- package/dist/task/source-prepare/path-policy.js +197 -0
- package/dist/task/source-prepare/prepare.js +506 -0
- package/dist/task/source-prepare/reference-integrity.js +274 -0
- package/dist/task/source-prepare/types.js +7 -0
- package/dist/task/task-demand-routing.js +3 -1
- package/dist/worker/console/chat/model-resolver.js +15 -3
- package/dist/worker/observe/static/constants.js +3 -2
- package/dist/worker/observe/static/dag-model.js +1 -0
- package/dist/worker/observe/static/styles.css +182 -42
- package/dist/workflows/dag/lifecycle.js +40 -30
- package/dist/workflows/dag/node-execution.js +13 -0
- package/dist/workflows/dag/types.js +59 -19
- package/docs/templates/harness.schema.json +29 -7
- package/docs/templates/init-managed-agents.md +10 -5
- package/harness.json +1 -2
- package/package.json +1 -1
- package/skills/loop-agent/SKILL.md +5 -2
- package/skills/loop-agent/references/command-reference.md +17 -15
- package/skills/loop-agent/references/harness-policy.md +3 -4
- package/skills/loop-agent/references/hybrid-dag.md +2 -2
- package/skills/loop-agent/references/model-routing.md +2 -0
- package/skills/loop-agent/references/post-implementation-and-patterns.md +1 -1
- package/skills/loop-agent/references/source-and-plan-practice.md +3 -2
- package/skills/loop-agent/references/task-workflow.md +7 -5
package/AGENTS.md
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
- 用 loop-agent 迭代本仓库时,控制器必须来自已发布 npm 包(记录实际版本);启动后不要中途升级;不要用工作区 `npm link` / `npm run dev` 控制可能改 CLI/runtime/package 的任务。
|
|
26
26
|
- 反复出现的约束固化为文档、脚本、检查、测试或模板;禁止占位实现(除非 contract 标明脚手架)。
|
|
27
27
|
- 非微小实现:`exec-plan` 不能替代 Agent DAG;除非用户要求 one-shot 或计划记录 escape hatch,否则改实现前完成 `new-task`、结构化路径、`dag run-task`、`dag validate` 与 writeSet 审查。
|
|
28
|
+
- **实现默认 DAG,主会话不直接改代码**:只要是实现/修复/行为或展示语义变更(含 observe 文案映射、runtime status、schema、executor、CLI 等),主会话只做 Orient / 建 task / dry-run / validate / writeSet 审查 / 执行与监视 DAG,**不得**自己改 `src/**`、`test/**` 等交付面。仅当用户**明确授权**主会话直接处理(例如「直接改」「主会话改」「one-shot」「不用 DAG」)时,才允许主会话写入;授权后仍须记录边界、allowedPaths 与验证证据。纯答疑、读代码、查状态、提交/推送已有 diff、或用户点名的文档微调(如本文件规则)不在此限。
|
|
28
29
|
- 不要自行引入外部 SDD/spec-first 等强制平行治理树;以本文件与 `docs/` 为准(ADR 0006)。
|
|
29
30
|
|
|
30
31
|
## 开始顺序
|
|
@@ -44,7 +45,7 @@
|
|
|
44
45
|
|
|
45
46
|
1. Orient → 2. Select(一块)→ 3. Contract → 4. Implement → 5. Verify → 6. Converge Docs → 7. Handoff。
|
|
46
47
|
|
|
47
|
-
这不是 DAG
|
|
48
|
+
这不是 DAG 节点序列。实现默认 Agent DAG;主 agent 拆任务、写 contract、结构化路径、审查 DAG/writeSet/profile/shell verification,**不自行 implement**。主会话 one-shot 仅在用户明确授权时可用,并记录边界与验证证据;「看起来很小」或「只是展示文案」不构成授权——若改动触及 runtime/status/映射语义,仍走 DAG。
|
|
48
49
|
|
|
49
50
|
启动 loop-agent DAG 流程后,主 agent 应自主推进到整个流程结束,不要中途请求无谓的人工确认(如“要我现在执行 DAG 吗?”)。只要 dry-run / validate / writeSet 审查通过就应直接执行并跑完全部 ranks;遇到真问题(契约不一致、writeSet 越界、verify 失败且超出 maxFixLoops、用户明显未授权的高风险动作)才停。即便 profile 是 supervised/reviewed,也不默认在 review-gate 主动停下等人——控制器会在需要人工 approve 时自行提示,主 agent 的职责是推动流程跑完。
|
|
50
51
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.26.1] - 2026-08-02
|
|
6
|
+
|
|
7
|
+
### 新增
|
|
8
|
+
|
|
9
|
+
- 新增 `task source prepare`:PRD-first 确定性派生薄执行契约(`source/需求.md` / `执行约束.md` + managed paths),默认 dry-run,`--apply` 仅经 Task Contract 投影落盘;默认无 LLM 写 source,工程字段不从 PRD 自动提取
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- Nightly 发布恢复探测会对 annotated tag 做 peel:远程 `ls-remote` 优先取 `refs/tags/<tag>^{}` 的 commit SHA,而不再把 tag object SHA 与 `git rev-list` 的 commit 误判为 conflict,避免「tag+npm 已齐、仅缺 GitHub Release」的恢复被错误中断
|
|
14
|
+
- 收紧 Windows 下 write-guard 的 `git status` 启动路径,降低启动失败与误报
|
|
15
|
+
|
|
16
|
+
## [0.26.0] - 2026-08-01
|
|
17
|
+
|
|
18
|
+
### 新增
|
|
19
|
+
|
|
20
|
+
- Observe/看板将 DAG 机器态 `partial_failed` 展示为「部分成功」(琥珀色 badge/timeline),与红色「执行失败」区分;内部状态与 recovery 语义仍为 `partial_failed` 非成功终态
|
|
21
|
+
- `harness.json` 的 `executors.pi.LOW|MED|HIGH` 支持简洁对象写法 `{ model, thinking? }`,同时完全兼容既有模型字符串;显式 `thinking` 会透传到 DAG Pi 的 `modelConfig.thinking`,省略时不强制覆盖 Pi 默认(含既有 `wizard-local/gpt-5.5 → low` 硬编码例外,且显式配置优先)
|
|
22
|
+
- pre-push 新增本机 verification receipt:相同 Git tree、关键环境与默认 24 小时 TTL 命中时可复用已通过验证,并对仅 `docs/reports/**/*.md` 的确定性变更使用 `check-repo` + `docs:build` 轻量门禁;新分支、多 ref、dirty/HEAD 漂移等不确定场景保持 fail-closed。
|
|
23
|
+
- DAG Pi 模型矩阵支持 `provider/model` 限定引用,可让 LOW/MED/HIGH 通过不同 Pi provider 调用模型;裸模型名继续兼容原有映射与默认 provider,非法空组件在模型调用前安全拒绝
|
|
24
|
+
|
|
25
|
+
### 修复
|
|
26
|
+
|
|
27
|
+
- 收紧 `frontend-project-default-implementation`:强前端项目证据(React/Vue/Next)须与具体前端 allowedPath 证据(如 `.tsx`、`src/components/**`、`apps/web/src/**`)共同出现,才作为默认前端实现依据。核心 runtime 路径(如 `src/workflows/dag/**`、`src/server/**`)与宽泛 `src/**` 不再被仓库级前端证据单独劫持到 `frontend-implementation`,模糊任务安全回退 `standard-dag`/`supervised-implementation`。`Task Type: backend-feature` 不再因项目默认前端证据被误判为 mixed,分类保持 backend、模板保持非前端。不新增模型仲裁或路由 DAG 节点,也不向通用 backend 目录列表硬编码 loop-agent 私有目录,修复跨仓库通用。
|
|
28
|
+
|
|
5
29
|
## [0.25.6] - 2026-08-01
|
|
6
30
|
|
|
7
31
|
### 重点更新
|
|
@@ -16,8 +40,9 @@
|
|
|
16
40
|
|
|
17
41
|
### 改进
|
|
18
42
|
|
|
43
|
+
- Observe/看板将 DAG 机器态 `partial_failed` 展示为「部分成功」(琥珀色 badge/timeline),与红色「执行失败」区分;内部状态与 recovery 语义仍为 `partial_failed` 非成功终态
|
|
19
44
|
- 纯优化类变更现聚焦于需求、确定性影响面与最小回归集,避免无关接口全量用例膨胀
|
|
20
|
-
-
|
|
45
|
+
- 目标项目 `AGENTS.md` 的 `LOOP_AGENT_INIT` managed block 改为从 `docs/templates/init-managed-agents.md` 渲染,便于直接编辑维护;该模板仅随 npm 包发布,不投影到目标项目治理目录;同时同步 `import-prd`/exec-plan 推荐路径、init reconcile 零写入条件、DAG liveness/recovery 精确命令及 Official Console 裸入口
|
|
21
46
|
|
|
22
47
|
## [0.25.5] - 2026-07-31
|
|
23
48
|
|
|
@@ -45,6 +70,7 @@
|
|
|
45
70
|
|
|
46
71
|
### 修复
|
|
47
72
|
|
|
73
|
+
- 修复 Windows 上 Pi writer 已完成写入后,write guard 启动 `git status` 偶发 `0xC0000142 / STATUS_DLL_INIT_FAILED` 而快速失败的问题:对该精确状态启用更长的有界指数退避和同一 Git for Windows 安装内的 executable fallback,持久化 writer 前置 baseline 与逐次结构化诊断;所有尝试耗尽后仍保持 fail-closed
|
|
48
74
|
- 修复后端测试节点 4/6 的确定性覆盖与对应分析在自身崩溃时被静默吞掉的问题,现会写入诊断信息并按基础设施故障安全停止
|
|
49
75
|
- 修复后端测试节点 4、6、7 在缺失 spec.sourceBinding 时未统一停止的问题,避免上游回退导致下游 manifest 突发报错
|
|
50
76
|
- 修复成功执行路径下 HTTP 请求/响应日志解析不规范的问题,现统一规范化大小写不敏感的日志前缀并完整解析 JSON,恢复报告中的请求参数与大响应正文
|
package/README.md
CHANGED
|
@@ -56,11 +56,16 @@ loop-agent init reconcile --repo-root .
|
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
loop-agent new-task example-task "实现一个有明确验收标准的小功能"
|
|
59
|
-
```
|
|
60
59
|
|
|
61
|
-
|
|
60
|
+
# 推荐:先有详细 PRD,再归档并确定性派生执行契约(无需手写两个 source 文件)
|
|
61
|
+
# loop-agent import-prd example-task --file path/to/prd.md --json
|
|
62
|
+
loop-agent task source prepare example-task \
|
|
63
|
+
--use-imported-prd \
|
|
64
|
+
--allowed-path "src/**" \
|
|
65
|
+
--forbidden-path ".harness/**" \
|
|
66
|
+
--verify "typecheck:npm run typecheck" \
|
|
67
|
+
--apply --json
|
|
62
68
|
|
|
63
|
-
```bash
|
|
64
69
|
loop-agent dag run-task example-task \
|
|
65
70
|
--profile auto \
|
|
66
71
|
--strict-models \
|
|
@@ -12,6 +12,7 @@ import { runInstructions } from "../commands/instructions.js";
|
|
|
12
12
|
import { runNewTask } from "../commands/new-task.js";
|
|
13
13
|
import { runImportPrd } from "../commands/import-prd.js";
|
|
14
14
|
import { runTaskContract } from "../commands/task-contract.js";
|
|
15
|
+
import { runTaskSourcePrepare } from "../commands/task-source-prepare.js";
|
|
15
16
|
import { runOperator } from "../commands/operator.js";
|
|
16
17
|
import { runPlanList } from "../commands/plan-list.js";
|
|
17
18
|
import { runPlanCheck, runPlanComplete, runPlanCreate, } from "../commands/plan.js";
|
|
@@ -139,7 +140,7 @@ const DAG_SUBCOMMANDS = [
|
|
|
139
140
|
"final-verification",
|
|
140
141
|
"decision",
|
|
141
142
|
];
|
|
142
|
-
const TASK_SUBCOMMANDS = ["contract"];
|
|
143
|
+
const TASK_SUBCOMMANDS = ["contract", "source"];
|
|
143
144
|
const TASK_CONTRACT_SUBCOMMANDS = [
|
|
144
145
|
"show",
|
|
145
146
|
"validate",
|
|
@@ -149,6 +150,7 @@ const TASK_CONTRACT_SUBCOMMANDS = [
|
|
|
149
150
|
"doctor",
|
|
150
151
|
"recover",
|
|
151
152
|
];
|
|
153
|
+
const TASK_SOURCE_SUBCOMMANDS = ["prepare"];
|
|
152
154
|
const OPERATOR_SUBCOMMANDS = ["capabilities"];
|
|
153
155
|
const WORKFLOW_SUBCOMMANDS = [
|
|
154
156
|
"list",
|
|
@@ -271,19 +273,32 @@ export const COMMAND_DEFINITIONS = [
|
|
|
271
273
|
name: "task",
|
|
272
274
|
adapter: "required",
|
|
273
275
|
tier: "primary",
|
|
274
|
-
intent: "Task Contract
|
|
275
|
-
usage: "task contract <show|validate|diff|apply|adopt|doctor|recover
|
|
276
|
+
intent: "Task Contract and source intake: contract show/validate/diff/apply/adopt/doctor/recover; source prepare (PRD-first Draft projection).",
|
|
277
|
+
usage: "task <contract|source> ... (contract <show|validate|diff|apply|adopt|doctor|recover>; source prepare ...)",
|
|
276
278
|
subcommands: [...TASK_SUBCOMMANDS],
|
|
277
279
|
handler: async ({ repoRoot, subcommand, rest }) => {
|
|
278
|
-
if (subcommand
|
|
279
|
-
|
|
280
|
+
if (subcommand === "contract") {
|
|
281
|
+
const [contractSub, ...contractRest] = rest;
|
|
282
|
+
if (!contractSub ||
|
|
283
|
+
!TASK_CONTRACT_SUBCOMMANDS.includes(contractSub)) {
|
|
284
|
+
throw new Error(`usage: task contract <${TASK_CONTRACT_SUBCOMMANDS.join("|")}> ...`);
|
|
285
|
+
}
|
|
286
|
+
await runTaskContract(repoRoot, [contractSub, ...contractRest]);
|
|
287
|
+
return;
|
|
280
288
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
!
|
|
284
|
-
|
|
289
|
+
if (subcommand === "source") {
|
|
290
|
+
const [sourceSub, ...sourceRest] = rest;
|
|
291
|
+
if (!sourceSub ||
|
|
292
|
+
!TASK_SOURCE_SUBCOMMANDS.includes(sourceSub)) {
|
|
293
|
+
throw new Error(`usage: task source <${TASK_SOURCE_SUBCOMMANDS.join("|")}> ...`);
|
|
294
|
+
}
|
|
295
|
+
if (sourceSub === "prepare") {
|
|
296
|
+
await runTaskSourcePrepare(repoRoot, sourceRest);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
throw new Error(`usage: task source <${TASK_SOURCE_SUBCOMMANDS.join("|")}> ...`);
|
|
285
300
|
}
|
|
286
|
-
|
|
301
|
+
throw new Error(formatSubcommandUsageError("task", TASK_SUBCOMMANDS));
|
|
287
302
|
},
|
|
288
303
|
},
|
|
289
304
|
{
|
package/dist/cli/help.js
CHANGED
|
@@ -24,9 +24,10 @@ export function formatCommandTierSummary(manifest = CODE_AGENT_COMMAND_MANIFEST)
|
|
|
24
24
|
return [
|
|
25
25
|
"Recommended DAG path:",
|
|
26
26
|
" 1. new-task <task-id> [title]",
|
|
27
|
-
" 2. import-prd <task-id> --file <
|
|
28
|
-
" 3.
|
|
29
|
-
" 4. run-
|
|
27
|
+
" 2. import-prd <task-id> --file <detailed-prd> # PRD-first recommended",
|
|
28
|
+
" 3. task source prepare <task-id> --use-imported-prd --allowed-path <glob> --apply",
|
|
29
|
+
" 4. dag run-task <task-id> --profile auto --strict-models",
|
|
30
|
+
" 5. run-dag --dag <path> --cwd <repo-root>",
|
|
30
31
|
"Operator recovery/closeout: dag status/report/doctor/closeout-draft",
|
|
31
32
|
`Primary commands: ${primary}`,
|
|
32
33
|
`Operator commands: ${operator}`,
|
package/dist/cli/program.js
CHANGED
|
@@ -41,6 +41,7 @@ import { runLoopBenchmark } from "../commands/loop-benchmark.js";
|
|
|
41
41
|
import { runNewTask } from "../commands/new-task.js";
|
|
42
42
|
import { runImportPrd } from "../commands/import-prd.js";
|
|
43
43
|
import { runTaskContract } from "../commands/task-contract.js";
|
|
44
|
+
import { runTaskSourcePrepare } from "../commands/task-source-prepare.js";
|
|
44
45
|
import { runOperator } from "../commands/operator.js";
|
|
45
46
|
import { runPiReuseBenchmark } from "../commands/pi-reuse-benchmark.js";
|
|
46
47
|
import { parsePiPromptArgs, printPiPromptUsage, runPiPrompt, } from "../commands/pi-prompt.js";
|
|
@@ -137,25 +138,33 @@ async function runCommanderAction(ctx, command, subcommand, rest) {
|
|
|
137
138
|
await runImportPrd(ctx.repoRoot, compactArgs([subcommand, ...rest]));
|
|
138
139
|
return;
|
|
139
140
|
case "task": {
|
|
140
|
-
if (subcommand
|
|
141
|
-
|
|
141
|
+
if (subcommand === "contract") {
|
|
142
|
+
const [contractSub, ...contractRest] = rest;
|
|
143
|
+
const allowed = [
|
|
144
|
+
"show",
|
|
145
|
+
"validate",
|
|
146
|
+
"diff",
|
|
147
|
+
"apply",
|
|
148
|
+
"adopt",
|
|
149
|
+
"doctor",
|
|
150
|
+
"recover",
|
|
151
|
+
];
|
|
152
|
+
if (!contractSub ||
|
|
153
|
+
!allowed.includes(contractSub)) {
|
|
154
|
+
throw new Error(`usage: task contract <${allowed.join("|")}> ...`);
|
|
155
|
+
}
|
|
156
|
+
await runTaskContract(ctx.repoRoot, [contractSub, ...contractRest]);
|
|
157
|
+
return;
|
|
142
158
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
"
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
"doctor",
|
|
151
|
-
"recover",
|
|
152
|
-
];
|
|
153
|
-
if (!contractSub ||
|
|
154
|
-
!allowed.includes(contractSub)) {
|
|
155
|
-
throw new Error(`usage: task contract <${allowed.join("|")}> ...`);
|
|
159
|
+
if (subcommand === "source") {
|
|
160
|
+
const [sourceSub, ...sourceRest] = rest;
|
|
161
|
+
if (sourceSub !== "prepare") {
|
|
162
|
+
throw new Error("usage: task source <prepare> ...");
|
|
163
|
+
}
|
|
164
|
+
await runTaskSourcePrepare(ctx.repoRoot, sourceRest);
|
|
165
|
+
return;
|
|
156
166
|
}
|
|
157
|
-
|
|
158
|
-
return;
|
|
167
|
+
throw new Error("usage: task <contract|source> ...");
|
|
159
168
|
}
|
|
160
169
|
case "operator":
|
|
161
170
|
await runOperator(ctx.repoRoot, compactArgs([subcommand, ...rest]));
|
|
@@ -437,6 +446,14 @@ function addStandaloneSubcommands(parent, subcommands, handler) {
|
|
|
437
446
|
});
|
|
438
447
|
}
|
|
439
448
|
}
|
|
449
|
+
function configureTaskSourcePrepare(command) {
|
|
450
|
+
command
|
|
451
|
+
.description("Prepare deterministic task source files from a PRD or draft")
|
|
452
|
+
.usage("<task-id> [options]")
|
|
453
|
+
.option("--from-draft <path>", "TaskContractDraftV1 JSON path")
|
|
454
|
+
.option("--use-imported-prd", "use the task's imported PRD reference")
|
|
455
|
+
.option("--force-overwrite-source", "replace existing managed source files");
|
|
456
|
+
}
|
|
440
457
|
function configureDagValidate(command) {
|
|
441
458
|
command
|
|
442
459
|
.description("Validate an Agent DAG spec")
|
|
@@ -662,6 +679,15 @@ export function buildLoopAgentProgram(options) {
|
|
|
662
679
|
}
|
|
663
680
|
if (entry.subcommands)
|
|
664
681
|
addRawSubcommands(command, entry.subcommands, options.defaultRepoRoot);
|
|
682
|
+
if (entry.name === "task") {
|
|
683
|
+
const source = command.commands.find((child) => child.name() === "source");
|
|
684
|
+
if (source) {
|
|
685
|
+
const prepare = createRawArgsCommand("prepare", "Prepare deterministic task source files", options.defaultRepoRoot);
|
|
686
|
+
configureTaskSourcePrepare(prepare);
|
|
687
|
+
replaceActionWithOptionAwareDispatch(prepare, options.defaultRepoRoot);
|
|
688
|
+
source.addCommand(prepare);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
665
691
|
program.addCommand(command);
|
|
666
692
|
}
|
|
667
693
|
return program;
|
|
@@ -61,7 +61,11 @@ export async function runImportPrd(repoRoot, args) {
|
|
|
61
61
|
.split(path.sep)
|
|
62
62
|
.join("/"),
|
|
63
63
|
referenceDocs: result.referenceDocs,
|
|
64
|
-
message: "Imported PRD as an immutable source reference.
|
|
64
|
+
message: "Imported PRD as an immutable source reference. Next: task source prepare --use-imported-prd (plus engineering --allowed-path/--verify) then --apply. Do not rewrite source/references/*.",
|
|
65
|
+
next: [
|
|
66
|
+
`loop-agent task source prepare ${result.taskId} --use-imported-prd --allowed-path <glob> --verify "typecheck:npm run typecheck" --json`,
|
|
67
|
+
`loop-agent task source prepare ${result.taskId} --use-imported-prd --allowed-path <glob> --apply --json`,
|
|
68
|
+
],
|
|
65
69
|
}, null, 2));
|
|
66
70
|
return;
|
|
67
71
|
}
|
|
@@ -71,6 +75,7 @@ export async function runImportPrd(repoRoot, args) {
|
|
|
71
75
|
` materialized: ${result.materializedRelativePath}`,
|
|
72
76
|
` sha256: ${result.sha256}`,
|
|
73
77
|
` manifest: ${path.relative(repoRoot, result.manifestPath).split(path.sep).join("/")}`,
|
|
74
|
-
"Next:
|
|
78
|
+
"Next: loop-agent task source prepare <task-id> --use-imported-prd --allowed-path <glob> [--verify label:cmd] --apply --json",
|
|
79
|
+
"Do not hand-write source/需求.md or source/执行约束.md on the default path; do not edit source/references/*.",
|
|
75
80
|
].join("\n"));
|
|
76
81
|
}
|
package/dist/commands/init.js
CHANGED
|
@@ -1811,14 +1811,15 @@ function buildManagedReadmeBlock(input) {
|
|
|
1811
1811
|
"",
|
|
1812
1812
|
"```bash",
|
|
1813
1813
|
'loop-agent new-task <task-id> "任务标题"',
|
|
1814
|
-
"#
|
|
1815
|
-
"#
|
|
1814
|
+
"# 推荐:详细 PRD → import-prd → task source prepare --apply(无需手写两 source)",
|
|
1815
|
+
"# loop-agent import-prd <task-id> --file <prd.md>",
|
|
1816
|
+
'loop-agent task source prepare <task-id> --use-imported-prd --allowed-path "<glob>" --apply --json',
|
|
1816
1817
|
"loop-agent dag run-task <task-id> --profile auto --strict-models",
|
|
1817
1818
|
"loop-agent dag validate --dag .harness/tasks/<task-id>/dag.json --strict-models --strict-governance",
|
|
1818
1819
|
"loop-agent run-dag --dag .harness/tasks/<task-id>/dag.json --cwd .",
|
|
1819
1820
|
"```",
|
|
1820
1821
|
"",
|
|
1821
|
-
`详细工作流见 \`${input.governanceRoot}/feature-workflow.md\`;验证矩阵见 \`${input.governanceRoot}/verification-matrix.md\`。任务 source
|
|
1822
|
+
`详细工作流见 \`${input.governanceRoot}/feature-workflow.md\`;验证矩阵见 \`${input.governanceRoot}/verification-matrix.md\`。任务 source 仍必需(\`source/需求.md\` / \`source/执行约束.md\`),默认由 \`task source prepare --apply\` 从详细 PRD 确定性派生,而不是主会话手写或 LLM 写 md。`,
|
|
1822
1823
|
"",
|
|
1823
1824
|
"执行后使用 `loop-agent dag report --run-id <run-id> --markdown` 和 `loop-agent dag doctor --run-id <run-id> --markdown` 读取事实与诊断失败。失败 run 不做成功式 closeout;使用 `loop-agent dag closeout-draft --run-id <run-id>` 生成 failure handoff。",
|
|
1824
1825
|
"",
|
|
@@ -2043,8 +2044,9 @@ function buildTargetFeatureWorkflow(input) {
|
|
|
2043
2044
|
"",
|
|
2044
2045
|
"```bash",
|
|
2045
2046
|
'loop-agent new-task <task-id> "Task title"',
|
|
2046
|
-
"#
|
|
2047
|
-
"#
|
|
2047
|
+
"# Preferred: detailed PRD → import-prd → task source prepare --apply",
|
|
2048
|
+
"# loop-agent import-prd <task-id> --file <prd.md>",
|
|
2049
|
+
'loop-agent task source prepare <task-id> --use-imported-prd --allowed-path "<glob>" --apply --json',
|
|
2048
2050
|
"loop-agent dag run-task <task-id> --profile auto --strict-models",
|
|
2049
2051
|
"loop-agent dag validate --dag .harness/tasks/<task-id>/dag.json --strict-models --strict-governance",
|
|
2050
2052
|
"loop-agent run-dag --dag .harness/tasks/<task-id>/dag.json --cwd .",
|