@tea-agent/loop-agent 0.13.0-beta.0 → 0.13.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 (282) hide show
  1. package/AGENTS.md +157 -155
  2. package/CHANGELOG.md +301 -322
  3. package/README.md +335 -345
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/commands/cursor-prompt.js +6 -6
  7. package/dist/commands/init.js +597 -528
  8. package/dist/commands/loop-benchmark.js +11 -11
  9. package/dist/commands/pi-reuse-benchmark.js +16 -16
  10. package/dist/executors/shell-executor.js +200 -21
  11. package/dist/infrastructure/evaluation/candidate-store.js +5 -1
  12. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  13. package/dist/task/runtime.js +27 -27
  14. package/dist/worker/observe/static/api.js +46 -46
  15. package/dist/worker/observe/static/app.js +150 -150
  16. package/dist/worker/observe/static/constants.js +148 -148
  17. package/dist/worker/observe/static/copy.js +67 -67
  18. package/dist/worker/observe/static/dag-helpers.js +172 -172
  19. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  20. package/dist/worker/observe/static/dag-layout.js +83 -83
  21. package/dist/worker/observe/static/dag-model.js +72 -72
  22. package/dist/worker/observe/static/dom.js +212 -53
  23. package/dist/worker/observe/static/format-pool.js +67 -67
  24. package/dist/worker/observe/static/format.js +292 -292
  25. package/dist/worker/observe/static/index.html +308 -308
  26. package/dist/worker/observe/static/kpi.js +94 -94
  27. package/dist/worker/observe/static/relations.js +133 -133
  28. package/dist/worker/observe/static/router.js +93 -93
  29. package/dist/worker/observe/static/run-processing.js +148 -148
  30. package/dist/worker/observe/static/shell-chrome.js +68 -68
  31. package/dist/worker/observe/static/state.js +267 -253
  32. package/dist/worker/observe/static/styles.css +1902 -1902
  33. package/dist/worker/observe/static/views/batch.js +227 -227
  34. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  35. package/dist/worker/observe/static/views/dag-inspector.js +627 -607
  36. package/dist/worker/observe/static/views/dag.js +371 -362
  37. package/dist/worker/observe/static/views/dashboard.js +509 -252
  38. package/dist/worker/observe/static/views/failures.js +143 -143
  39. package/dist/worker/observe/static/views/feature.js +492 -492
  40. package/dist/worker/observe/static/views/pool.js +350 -350
  41. package/dist/worker/observe/static/views/run.js +453 -453
  42. package/dist/worker/observe/static/views/session-timeline.js +219 -205
  43. package/dist/worker/observe/static/views/shell.js +7 -7
  44. package/dist/worker/observe/static/views/task.js +314 -314
  45. package/dist/worker/observe/static/views/timeline.js +163 -163
  46. package/dist/workflows/dag/backend-test-case-manifest.js +503 -0
  47. package/dist/workflows/dag/backend-test-execution-contract.js +353 -0
  48. package/dist/workflows/dag/backend-test-result-contract.js +568 -0
  49. package/dist/workflows/dag/canvas-observer.js +275 -275
  50. package/dist/workflows/dag/decision-envelope.js +57 -2
  51. package/dist/workflows/dag/frontend-implementation-contract.js +240 -0
  52. package/dist/workflows/dag/frontend-project-capability.js +309 -0
  53. package/dist/workflows/dag/frontend-repair.js +341 -0
  54. package/dist/workflows/dag/frontend-risk.js +161 -0
  55. package/dist/workflows/dag/frontend-verification-trace.js +190 -0
  56. package/dist/workflows/dag/init-hybrid.js +1020 -125
  57. package/dist/workflows/dag/repair-artifact.js +43 -3
  58. package/dist/workflows/dag/skill-instructions.js +4 -2
  59. package/dist/workflows/dag/types.js +29 -8
  60. package/docs/README.md +105 -104
  61. package/docs/agent-dag-recovery-playbook.md +195 -195
  62. package/docs/agent-dag-runner.md +67 -67
  63. package/docs/architecture/README.md +26 -26
  64. package/docs/architecture/dag-execution.md +140 -140
  65. package/docs/architecture/evolution.md +54 -54
  66. package/docs/architecture/facts-and-state.md +71 -71
  67. package/docs/architecture/runtime-boundaries.md +191 -191
  68. package/docs/architecture/system-overview.md +93 -93
  69. package/docs/architecture/worker-and-feature.md +85 -85
  70. package/docs/cursor-prompt-sidecar.md +36 -36
  71. package/docs/decisions/README.md +18 -18
  72. package/docs/design/README.md +167 -167
  73. package/docs/development-principles.md +73 -73
  74. package/docs/exec-plans/README.md +6 -6
  75. package/docs/exec-plans/active/README.md +1 -4
  76. package/docs/exec-plans/completed/README.md +106 -84
  77. package/docs/feature-workflow.md +414 -389
  78. package/docs/harness-methodology-debugging.md +153 -153
  79. package/docs/harness-methodology-tdd.md +130 -130
  80. package/docs/harness-methodology-verification.md +27 -27
  81. package/docs/init-surface.manifest.json +307 -289
  82. package/docs/loop-agent-harness.md +142 -142
  83. package/docs/production-readiness.md +96 -96
  84. package/docs/progress/README.md +76 -60
  85. package/docs/reports/README.md +150 -108
  86. package/docs/skills/README.md +7 -7
  87. package/docs/skills/vetted-skill-registry.md +29 -29
  88. package/docs/templates/adr.md +60 -60
  89. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  90. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  91. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  92. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  93. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  94. package/docs/templates/agent-dag-report.schema.json +473 -473
  95. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  96. package/docs/templates/agent-dag.base.json +190 -190
  97. package/docs/templates/agent-dag.final-verification.json +185 -185
  98. package/docs/templates/agent-dag.schema.json +411 -411
  99. package/docs/templates/agent-dag.supervised-implementation.json +620 -501
  100. package/docs/templates/backend-test-analysis.schema.json +44 -44
  101. package/docs/templates/backend-test-case-manifest.schema.json +190 -0
  102. package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
  103. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +204 -202
  104. package/docs/templates/backend-test-dag.json +559 -311
  105. package/docs/templates/backend-test-dag.retrospect.prompt.md +139 -125
  106. package/docs/templates/backend-test-dag.review-cases.prompt.md +83 -81
  107. package/docs/templates/backend-test-execution.schema.json +133 -0
  108. package/docs/templates/backend-test-result.schema.json +99 -0
  109. package/docs/templates/branch-merge-report.md +93 -0
  110. package/docs/templates/exec-plan.md +64 -64
  111. package/docs/templates/feature-spec.md +53 -53
  112. package/docs/templates/frontend-design-contract.md +42 -42
  113. package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
  114. package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
  115. package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
  116. package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
  117. package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
  118. package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
  119. package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
  120. package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
  121. package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
  122. package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
  123. package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
  124. package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
  125. package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
  126. package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
  127. package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
  128. package/docs/templates/frontend-eval/metrics.md +138 -0
  129. package/docs/templates/frontend-eval/smoke-targets.md +53 -0
  130. package/docs/templates/frontend-implementation-contract.schema.json +27 -0
  131. package/docs/templates/frontend-task-constraints.md +35 -35
  132. package/docs/templates/frontend-task-requirement.md +70 -70
  133. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -5
  134. package/docs/templates/frontend-test-dag.json +23 -23
  135. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -3
  136. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -3
  137. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -3
  138. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -3
  139. package/docs/templates/harness.schema.json +221 -221
  140. package/docs/templates/hybrid-dag.json +188 -188
  141. package/docs/templates/init-evolution-review.md +35 -35
  142. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  143. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  144. package/docs/templates/knowledge-sync-dag.json +178 -178
  145. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  146. package/docs/templates/product-line/AGENTS.md +8 -8
  147. package/docs/templates/product-line/README.md +9 -9
  148. package/docs/templates/product-line/acceptance.yaml +14 -14
  149. package/docs/templates/product-line/closeout.yaml +9 -9
  150. package/docs/templates/product-line/design.md +13 -13
  151. package/docs/templates/product-line/links.md +10 -10
  152. package/docs/templates/product-line/requirement.md +17 -17
  153. package/docs/templates/product-line/task-graph.yaml +15 -15
  154. package/docs/templates/product-line/task.yaml +64 -64
  155. package/docs/templates/product-line/test-plan.md +7 -7
  156. package/docs/templates/production-readiness-checklist.md +57 -57
  157. package/docs/templates/progress-log.md +17 -17
  158. package/docs/templates/project-start-checklist.md +9 -9
  159. package/docs/templates/qa-report.md +48 -48
  160. package/docs/templates/sprint-contract.md +29 -29
  161. package/docs/templates/worker-dogfood-evidence.md +80 -80
  162. package/docs/templates/worker-dogfood-setup.md +68 -68
  163. package/docs/verification-matrix.md +70 -70
  164. package/examples/decision-gate-agent-dag.json +177 -177
  165. package/examples/example-dag.json +46 -46
  166. package/examples/hybrid-loop-agent-dag.json +189 -189
  167. package/harness.json +66 -66
  168. package/package.json +52 -88
  169. package/scripts/check-product-line-docs.sh +29 -29
  170. package/scripts/check-task-pool-root.sh +32 -32
  171. package/scripts/kb-bootstrap-init-skeleton.sh +240 -240
  172. package/scripts/kb-graph-incremental-prepare.mjs +386 -386
  173. package/scripts/kb-graph-incremental-prepare.sh +5 -5
  174. package/scripts/kb-graph-materialize.mjs +105 -105
  175. package/scripts/kb-graph-materialize.sh +4 -4
  176. package/scripts/kb-graph-promote.mjs +164 -164
  177. package/scripts/kb-graph-promote.sh +4 -4
  178. package/scripts/kb-query.mjs +554 -554
  179. package/scripts/kb-query.sh +5 -5
  180. package/skills/agent-worker/SKILL.md +39 -39
  181. package/skills/agent-worker/references/agent-worker-operator.md +60 -60
  182. package/skills/ai-engineering-context/SKILL.md +48 -48
  183. package/skills/analyze-product-dependencies/SKILL.md +67 -67
  184. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -4
  185. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -30
  186. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -28
  187. package/skills/analyze-product-dependencies/references/example.md +76 -76
  188. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -35
  189. package/skills/analyze-product-dependencies/references/input-contract.md +11 -11
  190. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -61
  191. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -267
  192. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -101
  193. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -142
  194. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -76
  195. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -146
  196. package/skills/analyze-product-requirements/SKILL.md +90 -90
  197. package/skills/analyze-product-requirements/agents/openai.yaml +4 -4
  198. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -91
  199. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -56
  200. package/skills/analyze-product-requirements/references/example.md +86 -86
  201. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -66
  202. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -32
  203. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -33
  204. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -35
  205. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -193
  206. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -69
  207. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -97
  208. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -98
  209. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -156
  210. package/skills/browser-tools/SKILL.md +196 -0
  211. package/skills/browser-tools/browser-content.js +103 -0
  212. package/skills/browser-tools/browser-cookies.js +35 -0
  213. package/skills/browser-tools/browser-eval.js +53 -0
  214. package/skills/browser-tools/browser-hn-scraper.js +108 -0
  215. package/skills/browser-tools/browser-nav.js +44 -0
  216. package/skills/browser-tools/browser-pick.js +162 -0
  217. package/skills/browser-tools/browser-screenshot.js +34 -0
  218. package/skills/browser-tools/browser-start.js +86 -0
  219. package/skills/browser-tools/package-lock.json +2556 -0
  220. package/skills/browser-tools/package.json +19 -0
  221. package/skills/code-review-core/SKILL.md +20 -20
  222. package/skills/codebase-scout/SKILL.md +19 -19
  223. package/skills/frontend-design-review/SKILL.md +66 -66
  224. package/skills/frontend-design-review/references/review-checklist.md +58 -58
  225. package/skills/frontend-implementation/SKILL.md +49 -47
  226. package/skills/frontend-implementation/references/code-standards.md +32 -32
  227. package/skills/frontend-implementation/references/design-spec.md +46 -46
  228. package/skills/frontend-implementation/references/node-contracts.md +27 -76
  229. package/skills/frontend-review/SKILL.md +59 -59
  230. package/skills/frontend-review/references/review-findings.md +47 -47
  231. package/skills/frontend-verification/SKILL.md +53 -53
  232. package/skills/frontend-verification/references/verification-checklist.md +68 -68
  233. package/skills/grill-me/SKILL.md +10 -10
  234. package/skills/grill-with-docs/SKILL.md +88 -88
  235. package/skills/grill-with-docs/adr-format.md +47 -47
  236. package/skills/grill-with-docs/context-format.md +60 -60
  237. package/skills/init-capability-evolution/SKILL.md +70 -70
  238. package/skills/loop-agent/SKILL.md +151 -151
  239. package/skills/loop-agent/references/README.md +67 -67
  240. package/skills/loop-agent/references/command-reference.md +527 -505
  241. package/skills/loop-agent/references/docs-converge.md +126 -126
  242. package/skills/loop-agent/references/harness-policy.md +263 -263
  243. package/skills/loop-agent/references/hybrid-dag.md +243 -238
  244. package/skills/loop-agent/references/learned/README.md +21 -21
  245. package/skills/loop-agent/references/long-running-loop.md +57 -57
  246. package/skills/loop-agent/references/model-routing.md +36 -36
  247. package/skills/loop-agent/references/multi-worktree.md +54 -54
  248. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  249. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  250. package/skills/loop-agent/references/pi-prompt.md +23 -23
  251. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  252. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  253. package/skills/loop-agent/references/task-workflow.md +89 -89
  254. package/skills/loop-agent/references/verification-and-failure-handling.md +141 -139
  255. package/skills/playwright-cli/SKILL.md +420 -420
  256. package/skills/playwright-cli/references/element-attributes.md +23 -23
  257. package/skills/playwright-cli/references/playwright-tests.md +39 -39
  258. package/skills/playwright-cli/references/request-mocking.md +87 -87
  259. package/skills/playwright-cli/references/running-code.md +241 -241
  260. package/skills/playwright-cli/references/session-management.md +225 -225
  261. package/skills/playwright-cli/references/storage-state.md +275 -275
  262. package/skills/playwright-cli/references/test-generation.md +433 -433
  263. package/skills/playwright-cli/references/tracing.md +139 -139
  264. package/skills/playwright-cli/references/video-recording.md +143 -143
  265. package/skills/playwright-cli-case-generator/SKILL.md +74 -74
  266. package/skills/requesting-code-review/SKILL.md +101 -101
  267. package/skills/requesting-code-review/code-reviewer.md +168 -168
  268. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  269. package/skills/systematic-debugging/SKILL.md +296 -296
  270. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  271. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  272. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  273. package/skills/systematic-debugging/find-polluter.sh +63 -63
  274. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  275. package/skills/systematic-debugging/test-academic.md +14 -14
  276. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  277. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  278. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  279. package/skills/test-driven-development/SKILL.md +20 -20
  280. package/skills/using-git-worktrees/SKILL.md +215 -215
  281. package/skills/verification-before-completion/SKILL.md +154 -154
  282. package/skills/webapp-testing/SKILL.md +19 -19
@@ -13,12 +13,51 @@ export const repairArtifactSchema = z.object({
13
13
  schemaVersion: z.literal(1),
14
14
  verdict: z.enum(["pass", "request-revision"]),
15
15
  failureClass: repairFailureClassSchema,
16
- rootCause: z.string().min(1),
16
+ rootCause: z
17
+ .string()
18
+ .min(1, { message: 'repair artifact field "rootCause" must be a non-empty string' }),
17
19
  fixScope: z.array(z.string().min(1)).default([]),
18
20
  invariant: z.string().min(1),
19
21
  evidenceRefs: z.array(z.string().min(1)).default([]),
20
22
  rawLogFallbackAllowed: z.boolean().default(false),
21
23
  });
24
+ /**
25
+ * Canonical rootCause substituted when a `verdict: "pass"` repair artifact
26
+ * arrives with an empty or whitespace-only rootCause. Keeps the persisted
27
+ * RepairArtifact schema-valid without weakening request-revision diagnostics.
28
+ */
29
+ export const PASS_VERDICT_DEFAULT_ROOT_CAUSE = "No repair required.";
30
+ /**
31
+ * Normalize model-emitted repair artifacts deterministically at the parser
32
+ * boundary: a `verdict: "pass"` artifact with an empty/whitespace-only
33
+ * rootCause is rewritten to the canonical default so it still satisfies the
34
+ * strict schema. request-revision and other fields are left untouched so the
35
+ * strict diagnostics and write boundaries remain fail-closed.
36
+ */
37
+ function normalizePassArtifactRootCause(parsed) {
38
+ if (parsed &&
39
+ typeof parsed === "object" &&
40
+ !Array.isArray(parsed) &&
41
+ parsed.verdict === "pass") {
42
+ const record = parsed;
43
+ const rootCause = record.rootCause;
44
+ if (typeof rootCause === "string" && rootCause.trim().length === 0) {
45
+ return { ...record, rootCause: PASS_VERDICT_DEFAULT_ROOT_CAUSE };
46
+ }
47
+ }
48
+ return parsed;
49
+ }
50
+ /**
51
+ * Render a single Zod issue as a field-path-aware message so callers can locate
52
+ * invalid repair-artifact fields instead of seeing bare min-length text.
53
+ */
54
+ function describeZodIssue(issue) {
55
+ const path = issue.path && issue.path.length > 0 ? issue.path.join(".") : "(root)";
56
+ if (issue.message && !/^String must contain/.test(issue.message)) {
57
+ return `field "${path}": ${issue.message} (code ${issue.code})`;
58
+ }
59
+ return `field "${path}" is invalid (code ${issue.code})`;
60
+ }
22
61
  const REPAIR_ARTIFACT_FENCE = /```(?:REPAIR_ARTIFACT_JSON|json)\s*([\s\S]*?)```/gi;
23
62
  function extractCandidateJsonBlocks(text) {
24
63
  const blocks = [];
@@ -42,11 +81,12 @@ export function parseRepairArtifactFromText(text) {
42
81
  for (const candidate of candidates) {
43
82
  try {
44
83
  const parsed = JSON.parse(candidate);
45
- const result = repairArtifactSchema.safeParse(parsed);
84
+ const normalized = normalizePassArtifactRootCause(parsed);
85
+ const result = repairArtifactSchema.safeParse(normalized);
46
86
  if (result.success) {
47
87
  return { ok: true, artifact: result.data };
48
88
  }
49
- errors.push(result.error.issues.map((issue) => issue.message).join(", "));
89
+ errors.push(result.error.issues.map((issue) => describeZodIssue(issue)).join(", "));
50
90
  }
51
91
  catch (error) {
52
92
  errors.push(error instanceof Error ? error.message : String(error));
@@ -3,8 +3,8 @@ import { access, readFile } from "node:fs/promises";
3
3
  import os from "node:os";
4
4
  import path from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
- export const DEFAULT_SKILL_INSTRUCTION_MAX_CHARS = 2_500;
7
- export const DEFAULT_SKILL_INSTRUCTION_TOTAL_MAX_CHARS = 10_000;
6
+ export const DEFAULT_SKILL_INSTRUCTION_MAX_CHARS = 3_000;
7
+ export const DEFAULT_SKILL_INSTRUCTION_TOTAL_MAX_CHARS = 12_000;
8
8
  const SKILL_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
9
9
  async function fileExists(filePath) {
10
10
  try {
@@ -413,7 +413,9 @@ async function findFirstExistingFile(candidates) {
413
413
  async function resolveLearnedPatternInstructions(input) {
414
414
  const repoSlug = path.basename(input.cwd).replace(/[^A-Za-z0-9_-]+/g, "-");
415
415
  const candidates = [
416
+ normalizeCandidate(path.join(input.cwd, ".agents", "skills", "loop-agent", "references", "learned", `${repoSlug}.md`)),
416
417
  normalizeCandidate(path.join(input.cwd, "skills", "loop-agent", "references", "learned", `${repoSlug}.md`)),
418
+ normalizeCandidate(path.join(input.cwd, ".agents", "skills", "loop-agent", "references", "learned", "default.md")),
417
419
  normalizeCandidate(path.join(input.cwd, "skills", "loop-agent", "references", "learned", "default.md")),
418
420
  normalizeCandidate(path.join(input.cwd, "tools", "loop-agent", "skill", "references", "learned", `${repoSlug}.md`)),
419
421
  normalizeCandidate(path.join(input.cwd, "tools", "loop-agent", "skill", "references", "learned", "default.md")),
@@ -63,13 +63,26 @@ export const dagVerdictGateSchema = z.object({
63
63
  label: z.string().min(1).optional(),
64
64
  });
65
65
  export const dagRequirementCoverageGateSchema = z.object({
66
- fromNodeIds: z.array(z.string().regex(/^[a-z][a-z0-9-]*$/, "fromNodeIds must be kebab-case")).min(1),
67
- requiredIds: z.array(z.string().regex(/^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$/, "requiredIds must use REQ-*, BR-*, or AC-* identifiers")).min(1),
66
+ fromNodeIds: z
67
+ .array(z.string().regex(/^[a-z][a-z0-9-]*$/, "fromNodeIds must be kebab-case"))
68
+ .min(1),
69
+ requiredIds: z
70
+ .array(z
71
+ .string()
72
+ .regex(/^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$/, "requiredIds must use REQ-*, BR-*, or AC-* identifiers"))
73
+ .min(1),
68
74
  label: z.string().min(1).optional(),
69
75
  });
76
+ export const dagJsonArtifactSchemaIdSchema = z.enum([
77
+ "backend-test-analysis-v1",
78
+ "backend-test-execution-v1",
79
+ "backend-test-result-v1",
80
+ "backend-test-case-manifest-v1",
81
+ "frontend-implementation-contract-v1",
82
+ ]);
70
83
  export const dagJsonArtifactGateSchema = z.object({
71
84
  fromNodeId: z.string().regex(/^[a-z][a-z0-9-]*$/),
72
- schemaId: z.literal("backend-test-analysis-v1"),
85
+ schemaId: dagJsonArtifactSchemaIdSchema,
73
86
  artifactName: z.string().regex(/^[a-z0-9][a-z0-9._-]*\.json$/),
74
87
  outputDir: z.string().regex(/^[a-z0-9][a-z0-9._-]*$/),
75
88
  });
@@ -117,6 +130,8 @@ export const dagShellConfigSchema = z.object({
117
130
  jsonArtifactGate: dagJsonArtifactGateSchema.optional(),
118
131
  verifyEvidence: dagShellVerifyEvidenceSchema.optional(),
119
132
  repairArtifactGate: dagRepairArtifactGateSchema.optional(),
133
+ /** fail (default): any nonzero command fails the node. record: finish node FINISHED with failure facts for downstream assess/repair. */
134
+ nonZeroExitPolicy: z.enum(["fail", "record"]).optional(),
120
135
  envAllowlist: z.array(z.string()).optional(),
121
136
  timeoutMs: z.number().optional(),
122
137
  cwd: z.string().optional(),
@@ -153,10 +168,12 @@ export const dagDynamicExpansionSchema = z.object({
153
168
  .string()
154
169
  .regex(/^[a-z][a-z0-9-]*$/, "childIdPrefix must be kebab-case"),
155
170
  childTask: dagDynamicExpansionChildTaskSchema,
156
- tokenBudget: z.object({
171
+ tokenBudget: z
172
+ .object({
157
173
  maxTokensPerCase: z.number().int().positive().optional(),
158
174
  maxTotalTokens: z.number().int().positive().optional(),
159
- }).optional(),
175
+ })
176
+ .optional(),
160
177
  });
161
178
  export const dagDynamicReductionSchema = z.object({
162
179
  type: z.literal("verified_findings_report"),
@@ -286,11 +303,15 @@ export const dagEvaluationBindingSchema = z
286
303
  export const dagSourceBindingSchema = z.object({
287
304
  schemaVersion: z.literal(1),
288
305
  taskId: z.string().min(1),
289
- sources: z.array(z.object({
306
+ sources: z
307
+ .array(z.object({
290
308
  kind: z.enum(["requirement", "constraint", "reference"]),
291
309
  path: z.string().min(1),
292
- sha256: z.string().regex(/^[a-f0-9]{64}$/, "sha256 must be lowercase hex"),
293
- })).min(1),
310
+ sha256: z
311
+ .string()
312
+ .regex(/^[a-f0-9]{64}$/, "sha256 must be lowercase hex"),
313
+ }))
314
+ .min(1),
294
315
  requirementIds: z.array(z.string().regex(/^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$/)),
295
316
  });
296
317
  export const dagSpecSchema = z
package/docs/README.md CHANGED
@@ -1,106 +1,107 @@
1
- # 文档索引
2
-
3
- `docs/` 是 loop-agent 的治理根目录,包含工作流规则、方法论、验证规则、执行计划、报告、进度日志、决策记录和可复用模板。
4
-
5
- 顶层 `AGENTS.md` 是操作地图。长期知识应落在此处:决策、契约、计划、验证证据、调试笔记和可复用流程规则应记录在 `docs/` 下,而不是只留在聊天里。
6
-
7
- **索引职责**:本文件只索引**核心契约、方法论、产物目录入口与模板**。单篇 progress / report / completed plan 的全量列表分别由对应子目录 `README.md` 维护,避免三处精选榜漂移。
8
-
9
- 站上用法文档在 `../website/docs/`;双树收敛见 `../skills/loop-agent/references/docs-converge.md`。
10
-
11
- ## 核心文档
12
-
13
- - `design/archive/2026-07-14-loop-agent-self-update-notifier.md` — loop-agent CLI 自更新提醒设计(已实现;历史设计说明)
14
- - `development-principles.md` — 仓库开发原则
15
- - `architecture/runtime-boundaries.md` — runtime 层边界与依赖方向
16
- - `architecture/README.md` — 架构文档目录索引与阅读路径
17
- - `architecture/system-overview.md` — loop-agent / agent-worker / 治理层 / 外部系统全景
18
- - `architecture/dag-execution.md` — Agent DAG 主调用链、rank 调度、executor、skill snapshot、生命周期
19
- - `architecture/worker-and-feature.md` — agent-worker 子进程边界、controller identity、Task Pool、Feature 与 Observe
20
- - `architecture/facts-and-state.md` — harness 事实与状态、canonical/derived、可写/只读边界
21
- - `architecture/evolution.md` — 当前已实现能力 vs 第 3–6 月未来方向
22
- - `feature-workflow.md` — 有边界的功能工作流
23
- - `verification-matrix.md` — 验证命令选择
24
- - `production-readiness.md` — Production Readiness v0.1 范围、证据与 DAG hardening 标准
25
- - `loop-agent-harness.md` — runtime 与 command surface 概览
26
- - `agent-dag-runner.md` — Agent DAG runner 指南
27
- - `agent-dag-recovery-playbook.md` — DAG 失败分类、recovery action 与 operator 处置手册
28
- - `design/frontend-mock-data-workflow.md` — 已实现的前端 Mock 数据节点、触发条件、规范证据、验证与失败路由
29
- - `design/dag-source-binding-and-recovery.md` — 新生成 DAG 的权威任务源绑定、前端需求编号覆盖门禁与中断恢复规则
30
- - `cursor-prompt-sidecar.md` — `cursor-prompt` one-shot sidecar 用法(非受治理 writer)
31
- - `init-surface.manifest.json` — npm 包范围、目标项目初始化投影与 `init check-update` surface 分类的机器校验契约
32
-
33
- ## 近期完成合同(入口)
34
-
35
- 完整列表见 `exec-plans/completed/README.md`。近期高频入口:
36
-
37
- - `exec-plans/completed/2026-07-14-website-docs-ia-and-converge.md` — Website IA、双树边界与 docs-converge
38
- - `exec-plans/completed/2026-07-13-versioned-self-hosting-bootstrap.md` — 版本化自举与 candidate canary
39
- - `exec-plans/completed/2026-07-12-pi-only-agent-runtime.md` — Pi-only 受治理 runtime
40
- - `exec-plans/completed/2026-07-12-observe-warm-console-redesign.md` — Observe 暖白运行控制台
41
- - `exec-plans/completed/2026-07-12-m2-08-closeout-dogfood-release.md` — 第二月 Closeout 与 dogfood 收口(M2-01~08 见 completed 索引)
42
-
43
- ## 设计思想来源
44
-
45
- - `../website/docs/practices/` — Anthropic 长时运行 agent harness、OpenAI Codex harness engineering、腾讯端到端 Harness Engineering 与社区 agent harness 实践资料。当前仓库的“人类掌舵、智能体执行”、仓库即记录系统、小步增量、结构化 handoff 和 shell verification 纪律均受这些实践启发;权威执行规则仍以本目录治理文档、根目录 AGENTS.md、harness.json、skills 目录和脚本检查为准。
46
-
47
- ## 方法论
48
-
49
- - `harness-methodology-tdd.md` — 行为变更与 bug 修复的 TDD 纪律
50
- - `harness-methodology-verification.md` — 完成声明前的验证纪律
51
- - `harness-methodology-debugging.md` — 修复前的系统化调试工作流
52
-
53
- ## 产物目录
54
-
55
- - `design/README.md` — 设计草稿、契约映射与路线图(含 design/dynamic-workflow-dag-engine-roadmap.md)
56
- - `exec-plans/active/README.md` — 进行中的执行计划
57
- - `exec-plans/completed/README.md` — 已完成的执行计划(全量)
58
- - `progress/README.md` — 进度交接日志(全量)
59
- - `reports/README.md` — 验证与审计报告(全量);活能力摘要见 `reports/current-capability-summary.md`
60
- - `decisions/README.md` — 架构决策(ADR 0001–0004;0004 = Task Pool feature-scoped identity)
61
- - `skills/README.md` — repo-local skill registry and vetting notes
62
- - `templates/` — 可复用的规划、报告与 DAG 模板
63
-
64
- ## 仓库 Skills
65
-
66
- - `../skills/loop-agent/` — loop-agent 自身的 skill 指令与参考资料
67
- - `../skills/agent-worker/` — Feature Packet / Task Pool / versioned self-hosting 的可选 outer-loop operator skill;不进入默认 DAG role skills
68
- - 每个额外 skill 在仓库根 `../skills/` 下使用独立子目录;这些本地副本由 DAG 模板引用,维护不依赖外部 agent skill 目录
69
-
70
- ## 模板
71
-
72
- - `templates/project-start-checklist.md` — 开工前检查清单
73
- - `templates/feature-spec.md` — 有边界的功能规格
74
- - `templates/sprint-contract.md` — 实现契约与验收标准
75
- - `templates/exec-plan.md` — 非平凡工作的执行计划
76
- - `templates/progress-log.md` — 进度与交接日志
77
- - `templates/qa-report.md` — 验证与 QA 证据
78
- - `templates/worker-dogfood-setup.md` — 发布 controller identity 固定、真实 Worker sample、candidate canary 与 retry 纪律
79
- - `templates/worker-dogfood-evidence.md` — controller fingerprint、skill snapshot、canary、BE/FE/QA、Observe 与 failure evidence 模板
80
- - `templates/harness.schema.json` — `harness.json` 的 IDE JSON Schema,随初始化投影到目标项目
81
- - `templates/interactive-ui-round2-experiment.md` — interactive UI prompt/model A/B/C 对照实验与统一指标模板
82
- - `templates/product-line/` — 可投影的 Feature/Task/QA/Links 产品线包;配合 `agent-worker task validate-feature` 做 docs CI
83
- - `templates/production-readiness-checklist.md` — 低/中风险单仓库 DAG readiness 检查清单
1
+ # 文档索引
2
+
3
+ `docs/` 是 loop-agent 的治理根目录,包含工作流规则、方法论、验证规则、执行计划、报告、进度日志、决策记录和可复用模板。
4
+
5
+ 顶层 `AGENTS.md` 是操作地图。长期知识应落在此处:决策、契约、计划、验证证据、调试笔记和可复用流程规则应记录在 `docs/` 下,而不是只留在聊天里。
6
+
7
+ **索引职责**:本文件只索引**核心契约、方法论、产物目录入口与模板**。单篇 progress / report / completed plan 的全量列表分别由对应子目录 `README.md` 维护,避免三处精选榜漂移。
8
+
9
+ 站上用法文档在 `../website/docs/`;双树收敛见 `../skills/loop-agent/references/docs-converge.md`。
10
+
11
+ ## 核心文档
12
+
13
+ - `design/archive/2026-07-14-loop-agent-self-update-notifier.md` — loop-agent CLI 自更新提醒设计(已实现;历史设计说明)
14
+ - `development-principles.md` — 仓库开发原则
15
+ - `architecture/runtime-boundaries.md` — runtime 层边界与依赖方向
16
+ - `architecture/README.md` — 架构文档目录索引与阅读路径
17
+ - `architecture/system-overview.md` — loop-agent / agent-worker / 治理层 / 外部系统全景
18
+ - `architecture/dag-execution.md` — Agent DAG 主调用链、rank 调度、executor、skill snapshot、生命周期
19
+ - `architecture/worker-and-feature.md` — agent-worker 子进程边界、controller identity、Task Pool、Feature 与 Observe
20
+ - `architecture/facts-and-state.md` — harness 事实与状态、canonical/derived、可写/只读边界
21
+ - `architecture/evolution.md` — 当前已实现能力 vs 第 3–6 月未来方向
22
+ - `feature-workflow.md` — 有边界的功能工作流
23
+ - `verification-matrix.md` — 验证命令选择
24
+ - `production-readiness.md` — Production Readiness v0.1 范围、证据与 DAG hardening 标准
25
+ - `loop-agent-harness.md` — runtime 与 command surface 概览
26
+ - `agent-dag-runner.md` — Agent DAG runner 指南
27
+ - `agent-dag-recovery-playbook.md` — DAG 失败分类、recovery action 与 operator 处置手册
28
+ - `design/frontend-mock-data-workflow.md` — 已实现的前端 Mock 数据节点、触发条件、规范证据、验证与失败路由
29
+ - `design/dag-source-binding-and-recovery.md` — 新生成 DAG 的权威任务源绑定、前端需求编号覆盖门禁与中断恢复规则
30
+ - `cursor-prompt-sidecar.md` — `cursor-prompt` one-shot sidecar 用法(非受治理 writer)
31
+ - `init-surface.manifest.json` — npm 包范围、目标项目初始化投影与 `init check-update` surface 分类的机器校验契约
32
+
33
+ ## 近期完成合同(入口)
34
+
35
+ 完整列表见 `exec-plans/completed/README.md`。近期高频入口:
36
+
37
+ - `exec-plans/completed/2026-07-14-website-docs-ia-and-converge.md` — Website IA、双树边界与 docs-converge
38
+ - `exec-plans/completed/2026-07-13-versioned-self-hosting-bootstrap.md` — 版本化自举与 candidate canary
39
+ - `exec-plans/completed/2026-07-12-pi-only-agent-runtime.md` — Pi-only 受治理 runtime
40
+ - `exec-plans/completed/2026-07-12-observe-warm-console-redesign.md` — Observe 暖白运行控制台
41
+ - `exec-plans/completed/2026-07-12-m2-08-closeout-dogfood-release.md` — 第二月 Closeout 与 dogfood 收口(M2-01~08 见 completed 索引)
42
+
43
+ ## 设计思想来源
44
+
45
+ - `../website/docs/practices/` — Anthropic 长时运行 agent harness、OpenAI Codex harness engineering、腾讯端到端 Harness Engineering 与社区 agent harness 实践资料。当前仓库的“人类掌舵、智能体执行”、仓库即记录系统、小步增量、结构化 handoff 和 shell verification 纪律均受这些实践启发;权威执行规则仍以本目录治理文档、根目录 AGENTS.md、harness.json、skills 目录和脚本检查为准。
46
+
47
+ ## 方法论
48
+
49
+ - `harness-methodology-tdd.md` — 行为变更与 bug 修复的 TDD 纪律
50
+ - `harness-methodology-verification.md` — 完成声明前的验证纪律
51
+ - `harness-methodology-debugging.md` — 修复前的系统化调试工作流
52
+
53
+ ## 产物目录
54
+
55
+ - `design/README.md` — 设计草稿、契约映射与路线图(含 design/dynamic-workflow-dag-engine-roadmap.md)
56
+ - `exec-plans/active/README.md` — 进行中的执行计划
57
+ - `exec-plans/completed/README.md` — 已完成的执行计划(全量)
58
+ - `progress/README.md` — 进度交接日志(全量)
59
+ - `reports/README.md` — 验证与审计报告(全量);活能力摘要见 `reports/current-capability-summary.md`
60
+ - `decisions/README.md` — 架构决策(ADR 0001–0004;0004 = Task Pool feature-scoped identity)
61
+ - `skills/README.md` — repo-local skill registry and vetting notes
62
+ - `templates/` — 可复用的规划、报告与 DAG 模板
63
+
64
+ ## 仓库 Skills
65
+
66
+ - `../skills/loop-agent/` — loop-agent 自身的 skill 指令与参考资料
67
+ - `../skills/agent-worker/` — Feature Packet / Task Pool / versioned self-hosting 的可选 outer-loop operator skill;不进入默认 DAG role skills
68
+ - 每个额外 skill 在仓库根 `../skills/` 下使用独立子目录;这些本地副本由 DAG 模板引用,维护不依赖外部 agent skill 目录
69
+
70
+ ## 模板
71
+
72
+ - `templates/project-start-checklist.md` — 开工前检查清单
73
+ - `templates/feature-spec.md` — 有边界的功能规格
74
+ - `templates/sprint-contract.md` — 实现契约与验收标准
75
+ - `templates/exec-plan.md` — 非平凡工作的执行计划
76
+ - `templates/progress-log.md` — 进度与交接日志
77
+ - `templates/qa-report.md` — 验证与 QA 证据
78
+ - `templates/worker-dogfood-setup.md` — 发布 controller identity 固定、真实 Worker sample、candidate canary 与 retry 纪律
79
+ - `templates/worker-dogfood-evidence.md` — controller fingerprint、skill snapshot、canary、BE/FE/QA、Observe 与 failure evidence 模板
80
+ - `templates/harness.schema.json` — `harness.json` 的 IDE JSON Schema,随初始化投影到目标项目
81
+ - `templates/interactive-ui-round2-experiment.md` — interactive UI prompt/model A/B/C 对照实验与统一指标模板
82
+ - `templates/product-line/` — 可投影的 Feature/Task/QA/Links 产品线包;配合 `agent-worker task validate-feature` 做 docs CI
83
+ - `templates/production-readiness-checklist.md` — 低/中风险单仓库 DAG readiness 检查清单
84
84
  - `templates/init-evolution-review.md` — 初始化能力演化审查报告模板
85
+ - `templates/branch-merge-report.md` — 跨分支合并的功能保留、冲突解析、init/update 与 package surface 审计模板
85
86
  - `templates/adr.md` — 架构决策记录(ADR)
86
-
87
- ## 维护
88
-
89
- 文档变更后运行:
90
-
91
- ```bash
92
- node bin/loop-agent.js docs audit --repo-root .
93
- bash scripts/check-doc-index.sh
94
- bash scripts/check-doc-links.sh
95
- bash scripts/check-repo.sh
96
- ```
97
-
98
- 涉及 `website/docs/` 时再跑 `npm run docs:build`,并按 `skills/loop-agent/references/docs-converge.md` 同步 `overview/roadmap.md` 等站上活页。
99
-
100
- Windows 上通过 Git Bash 或已配置的兼容 Bash 运行脚本。实际文件操作使用平台原生路径;`/` 仅用于 repo 引用、JSON/Markdown 证据引用和 glob 约定。
101
-
102
- 完整本地门禁:
103
-
104
- ```bash
105
- bash scripts/ci.sh
106
- ```
87
+
88
+ ## 维护
89
+
90
+ 文档变更后运行:
91
+
92
+ ```bash
93
+ node bin/loop-agent.js docs audit --repo-root .
94
+ bash scripts/check-doc-index.sh
95
+ bash scripts/check-doc-links.sh
96
+ bash scripts/check-repo.sh
97
+ ```
98
+
99
+ 涉及 `website/docs/` 时再跑 `npm run docs:build`,并按 `skills/loop-agent/references/docs-converge.md` 同步 `overview/roadmap.md` 等站上活页。
100
+
101
+ Windows 上通过 Git Bash 或已配置的兼容 Bash 运行脚本。实际文件操作使用平台原生路径;`/` 仅用于 repo 引用、JSON/Markdown 证据引用和 glob 约定。
102
+
103
+ 完整本地门禁:
104
+
105
+ ```bash
106
+ bash scripts/ci.sh
107
+ ```