@tea-agent/loop-agent 0.44.0-next.13 → 0.44.0-next.14

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 (145) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +12 -12
  3. package/dist/adapters/loop-agent.js +34 -0
  4. package/dist/build-stamp.json +3 -3
  5. package/dist/cli/command-definitions.js +5 -5
  6. package/dist/cli/program.js +1 -4
  7. package/dist/commands/init-legacy-audit.js +330 -0
  8. package/dist/commands/init-upgrade.js +644 -104
  9. package/dist/commands/init.js +685 -330
  10. package/dist/commands/operator-guide.js +99 -0
  11. package/dist/commands/operator.js +16 -3
  12. package/dist/executors/pi-sdk-executor.js +3 -1
  13. package/dist/governance/harness.js +2 -7
  14. package/dist/governance/manifest-types.js +28 -9
  15. package/dist/governance/project-capability-scanner.js +263 -0
  16. package/dist/governance/project-config.js +96 -0
  17. package/dist/governance/resource-catalog.js +151 -0
  18. package/dist/infrastructure/console/app-data.js +6 -2
  19. package/dist/shared/operator/capabilities.js +2 -2
  20. package/dist/shared/package-metadata.js +23 -7
  21. package/dist/shared/pi-context-pressure/extension.js +23 -0
  22. package/dist/shared/pi-context-pressure/index.js +1 -0
  23. package/dist/shared/pi-context-pressure/telemetry.js +4 -0
  24. package/dist/shared/pi-context-pressure/tool-result-pruner.js +98 -0
  25. package/dist/shared/update/npm-client.js +49 -1
  26. package/dist/worker/cli.js +3 -5
  27. package/dist/worker/console/chat/browser-automation.js +114 -5
  28. package/dist/worker/console/chat/browser-routes.js +21 -0
  29. package/dist/worker/console/chat/chat-event-store.js +7 -6
  30. package/dist/worker/console/chat/context-insights.js +84 -19
  31. package/dist/worker/console/chat/pet/pet-affinity.js +169 -0
  32. package/dist/worker/console/chat/pet/pet-persist.js +109 -0
  33. package/dist/worker/console/chat/pet/pet-registry.js +142 -0
  34. package/dist/worker/console/chat/pet/pet-remarks.js +48 -0
  35. package/dist/worker/console/chat/pet/pet-routes.js +125 -0
  36. package/dist/worker/console/chat/pet/pet-service.js +262 -0
  37. package/dist/worker/console/chat/pet/pet-state.js +99 -0
  38. package/dist/worker/console/chat/pi-mode-loop-isolation.js +17 -2
  39. package/dist/worker/console/chat/pi-runtime/custom-tools/browser-tools.js +2 -2
  40. package/dist/worker/console/chat/pi-runtime.js +7 -2
  41. package/dist/worker/console/chat/routes.js +43 -7
  42. package/dist/worker/console/chat/scheduled-goal-request.js +14 -6
  43. package/dist/worker/console/chat/session-store.js +20 -3
  44. package/dist/worker/console/console-shutdown.js +34 -0
  45. package/dist/worker/console/server.js +2 -1
  46. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BA7qCL_r.js → abnfDiagram-N423BO3Z-DASc69AM.js} +1 -1
  47. package/dist/worker/console/static/assets/{arc-Df09ajwL.js → arc-h09p-LAc.js} +1 -1
  48. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CpF9sw5R.js → architectureDiagram-T3A2C74G-CZ3dtLkh.js} +1 -1
  49. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-BtPys8ja.js → blockDiagram-VBNYF7ZC-DMrRhMXG.js} +1 -1
  50. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-DZPnTWqT.js → c4Diagram-5PPSVZJV-DQxisHV6.js} +1 -1
  51. package/dist/worker/console/static/assets/channel-D1zgKZfg.js +1 -0
  52. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-BD9D4h1p.js → chunk-2GRJ4B5K-CefVN9zh.js} +1 -1
  53. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-Svn8yBmn.js → chunk-2Q5K7J3B-DmR1Koq2.js} +1 -1
  54. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-B8EbQj-S.js → chunk-5RXB4S5H-NlzrSW7L.js} +1 -1
  55. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-tENZpcpF.js → chunk-5VM5RSS4-DfelJv-0.js} +1 -1
  56. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DBx71Lco.js → chunk-6Q2QTUOP-BK6RFy58.js} +1 -1
  57. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-1v_QamMz.js → chunk-GF5L2VYU-BAeh9lz4.js} +1 -1
  58. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-BAMCNNBG.js → chunk-JWPE2WC7-ChPS5WzG.js} +1 -1
  59. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-BvuEury-.js → chunk-KBJHAD2P-BoVe5IM6.js} +1 -1
  60. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-YqFuHp8s.js → chunk-RYQCIY6F-C4q_0Lw9.js} +1 -1
  61. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-ouI5T7Mr.js → chunk-XXDRQBXY-Bb9TvjeY.js} +1 -1
  62. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CXNNsY2M.js +1 -0
  63. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CXNNsY2M.js +1 -0
  64. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-Bri0_Izk.js → cose-bilkent-JH36ORCC-DmNnL8Ff.js} +1 -1
  65. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-e8Vhhi4X.js → cynefin-VYW2F7L2-Contvx58.js} +1 -1
  66. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-tSIXGQiJ.js → cynefinDiagram-MW4NZA55-Cigq7cjk.js} +1 -1
  67. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-Rl-sF5pt.js → dagre-VZM6K2ZE-dEbC0nxb.js} +1 -1
  68. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Db6ddPz8.js → diagram-7IWD3JNH-CzIztESV.js} +1 -1
  69. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-Jwd_Xw5S.js → diagram-B4RE2ZJO-Bo14zbaY.js} +1 -1
  70. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-CeC_8InC.js → diagram-LBJQPF4R-C4xUyil6.js} +1 -1
  71. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-LKPRaNq8.js → diagram-Q27KOJAE-CaBY_uYa.js} +1 -1
  72. package/dist/worker/console/static/assets/{diagram-UB23O5K3-DlVQytMW.js → diagram-UB23O5K3-ClUXUeiu.js} +1 -1
  73. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DnfJZwO-.js → ebnfDiagram-BXEA7PRR-BbGCgjC6.js} +1 -1
  74. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-3axVSXca.js → erDiagram-JOGREHBK-Dr-AcwSl.js} +1 -1
  75. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-xe04-_L-.js → flowDiagram-UKHOOZJN-BG8Gcfyc.js} +1 -1
  76. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-hpmRINiD.js → ganttDiagram-PKOTCBZU-CFVaPs5r.js} +1 -1
  77. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-6HSNz9Ko.js → gitGraphDiagram-DS77QQ5N-ChJ8pm-O.js} +1 -1
  78. package/dist/worker/console/static/assets/index-B_5GhVIO.js +488 -0
  79. package/dist/worker/console/static/assets/index-C7YMBluX.css +1 -0
  80. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BF6ksWTX.js → infoDiagram-6WML65LV-C5J9-uCZ.js} +1 -1
  81. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-DXisdeD7.js → ishikawaDiagram-WSZJBQD7-BcfjqzDv.js} +1 -1
  82. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-BWu65wmu.js → journeyDiagram-NVQOT4AX-BzzCO-rD.js} +1 -1
  83. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-hfNhHqAI.js → kanban-definition-27J2QSJJ-NCHUZ46h.js} +1 -1
  84. package/dist/worker/console/static/assets/{linear-D6HTfQcp.js → linear-BKZlWCUU.js} +1 -1
  85. package/dist/worker/console/static/assets/{mermaid.core-Iv91R1WP.js → mermaid.core-DbTaQjFE.js} +5 -5
  86. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CfPChwjR.js → mindmap-definition-FAOFIHXS-CroYl5xQ.js} +1 -1
  87. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-B7TcoqHz.js → pegDiagram-VL7TDLO6-DgMBx-9k.js} +1 -1
  88. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-ouyPKMtQ.js → pieDiagram-7S7Q4E2Y-CyWDmbq1.js} +1 -1
  89. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-B9tuyLbh.js → quadrantDiagram-CIZ2JOQS-BgGEOqSP.js} +1 -1
  90. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Ck4q9nJs.js → railroadDiagram-AXF67PYL-BMZ7oeeV.js} +1 -1
  91. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-wXLX5Dnp.js → requirementDiagram-LRYGKXZP-DxqyGhcc.js} +1 -1
  92. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-D2XWw6_m.js → sankeyDiagram-W5VNT64P-DnSvNCG8.js} +1 -1
  93. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DzxKiug4.js → sequenceDiagram-SI44F4Z6-BiZh6f-R.js} +1 -1
  94. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-DWUqK5Us.js → sizeCapture-X5ZJPWSS-BKXSI8WB.js} +1 -1
  95. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-D5Pa4O5g.js → stateDiagram-OKZ733FA-CfSgoYFm.js} +1 -1
  96. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DgHi3vjb.js +1 -0
  97. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-VH7cRnsJ.js → swimlanes-SLNWSIFB-CyGADcHe.js} +2 -2
  98. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bgvdt1Y0.js +8 -0
  99. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-C4HM5NoZ.js → timeline-definition-Z64GVDOM-HmPaSPOK.js} +1 -1
  100. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-Bu-4hOlA.js → vennDiagram-T6HMQDX7-VA2VBbez.js} +1 -1
  101. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-CasFEvvl.js → wardleyDiagram-T6FBY63Y-BxjiBPZa.js} +1 -1
  102. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-D-gpwPSA.js → xychartDiagram-ELKLHX3M--hUY-qFj.js} +1 -1
  103. package/dist/worker/console/static/index.html +2 -2
  104. package/dist/worker/console/static/pets/ember/pet.json +167 -0
  105. package/dist/worker/console/static/pets/ember/spritesheet.png +0 -0
  106. package/dist/worker/console/static-src/operator-chat/details-rail-surfaces.js +4 -3
  107. package/dist/worker/console/static-src/operator-chat/use-stat-dialog.js +95 -0
  108. package/dist/worker/console/workspace-context.js +14 -0
  109. package/dist/worker/console/workspace-initialization.js +25 -16
  110. package/dist/worker/delivery/package.js +4 -1
  111. package/dist/worker/observe/static/operator-chrome.js +1 -42
  112. package/dist/workflows/dag/backend-test-pytest-collection.js +4 -1
  113. package/dist/workflows/dag/final-verification.js +45 -10
  114. package/dist/workflows/dag/hybrid/sources.js +14 -14
  115. package/dist/workflows/dag/hybrid/templates/backend-test.js +5 -5
  116. package/dist/workflows/dag/hybrid/templates/frontend-test.js +4 -4
  117. package/dist/workflows/dag/hybrid/templates/kg-bootstrap.js +6 -6
  118. package/dist/workflows/dag/hybrid/templates/knowledge-sync.js +5 -5
  119. package/dist/workflows/dag/skill-instructions.js +102 -32
  120. package/dist/workflows/dag/skill-snapshot.js +3 -0
  121. package/dist/workflows/dag/skills.js +7 -7
  122. package/dist/workflows/dag/validate.js +2 -2
  123. package/dist/workflows/dag/workspace-checkpoint.js +13 -1
  124. package/docs/architecture/runtime-boundaries.md +28 -22
  125. package/docs/init-surface.manifest.json +43 -295
  126. package/docs/templates/agent-dag.base.json +9 -9
  127. package/docs/templates/agent-dag.final-verification.json +6 -6
  128. package/docs/templates/agent-dag.supervised-implementation.json +12 -12
  129. package/docs/templates/frontend-implementation-dag.json +2 -2
  130. package/docs/templates/frontend-test-dag.json +2 -2
  131. package/docs/templates/hybrid-dag.json +9 -9
  132. package/docs/templates/knowledge-sync-dag.json +8 -8
  133. package/package.json +6 -2
  134. package/resource-catalog.v1.json +1973 -0
  135. package/resources/agent-bridge/loop-agent/SKILL.md +40 -0
  136. package/resources/init-history/legacy-surface.v1.json +33 -0
  137. package/skills/init-update/SKILL.md +34 -0
  138. package/skills/init-update/agents/openai.yaml +6 -0
  139. package/dist/worker/console/static/assets/channel-DiTNLZUm.js +0 -1
  140. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DgL8aiyZ.js +0 -1
  141. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DgL8aiyZ.js +0 -1
  142. package/dist/worker/console/static/assets/index-C_8_gWal.css +0 -1
  143. package/dist/worker/console/static/assets/index-DybcVXCu.js +0 -488
  144. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-C0QIbqO4.js +0 -1
  145. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BB9CzRHB.js +0 -8
@@ -32,6 +32,9 @@ const unresolvedReferenceSchema = z.object({
32
32
  const resolvedInstructionSchema = z.object({
33
33
  name: z.string().min(1),
34
34
  resolution: z.enum(["resolved", "missing", "error"]),
35
+ sourceKind: z.enum(["builtin", "project", "user", "auto"]).optional(),
36
+ logicalResourceId: z.string().min(1).optional(),
37
+ catalogDigest: z.string().regex(/^[a-f0-9]{64}$/).optional(),
35
38
  path: z.string().min(1).optional(),
36
39
  sha256: z.string().regex(/^[a-f0-9]{64}$/).optional(),
37
40
  bytes: z.number().int().nonnegative().optional(),
@@ -3,13 +3,13 @@
3
3
  * Applied when a node has a role but the spec omits skillsByRole[role].
4
4
  */
5
5
  export const DEFAULT_SKILLS_BY_ROLE = {
6
- planner: ["loop-agent"],
7
- scout: ["ai-engineering-context", "codebase-scout"],
8
- implementer: ["test-driven-development", "verification-before-completion"],
9
- verifier: ["verification-before-completion", "systematic-debugging"],
10
- reviewer: ["requesting-code-review", "code-review-core"],
11
- supervisor: ["verification-before-completion", "loop-agent"],
12
- closeout: ["loop-agent", "verification-before-completion"],
6
+ planner: ["builtin:loop-agent"],
7
+ scout: ["builtin:ai-engineering-context", "builtin:codebase-scout"],
8
+ implementer: ["builtin:test-driven-development", "builtin:verification-before-completion"],
9
+ verifier: ["builtin:verification-before-completion", "builtin:systematic-debugging"],
10
+ reviewer: ["builtin:requesting-code-review", "builtin:code-review-core"],
11
+ supervisor: ["builtin:verification-before-completion", "builtin:loop-agent"],
12
+ closeout: ["builtin:loop-agent", "builtin:verification-before-completion"],
13
13
  };
14
14
  /**
15
15
  * Resolve prompt-level skills for a DAG node.
@@ -773,10 +773,10 @@ function validateCommandPolicyTaskConfig(task, issues, spec) {
773
773
  }
774
774
  if (allowsPlaywright) {
775
775
  const skills = task.skills ?? [];
776
- if (!skills.includes("playwright-cli")) {
776
+ if (!skills.some((skill) => skill === "playwright-cli" || skill === "builtin:playwright-cli")) {
777
777
  issues.push({
778
778
  type: "invalid-command-policy",
779
- message: `task ${task.id} playwright-cli command capability requires skills to include playwright-cli`,
779
+ message: `task ${task.id} playwright-cli command capability requires skills to include builtin:playwright-cli`,
780
780
  });
781
781
  }
782
782
  if (!taskMentionsPlaywrightCliContract(task)) {
@@ -44,7 +44,19 @@ async function hashWorkspacePath(repoRoot, relPath, state) {
44
44
  const abs = path.join(repoRoot, relPath);
45
45
  try {
46
46
  const st = await lstat(abs);
47
- const mode = (st.mode & 0o777777).toString(8);
47
+ // Normalize to git-style 6-digit modes. Windows lstat() carries no
48
+ // file-type bits and reports permissive 0o666/0o777 permission masks
49
+ // that git never stores; collapse to the git permission shape
50
+ // (100644 regular / 100755 executable / 120000 symlink / 040000 dir)
51
+ // so checkpoint consumers agree cross-platform.
52
+ const executable = Boolean(st.mode & 0o111) && !st.isDirectory();
53
+ const mode = st.isSymbolicLink()
54
+ ? "120000"
55
+ : st.isDirectory()
56
+ ? "040000"
57
+ : executable
58
+ ? "100755"
59
+ : "100644";
48
60
  if (st.isSymbolicLink()) {
49
61
  const target = await realpath(abs).catch(async () => {
50
62
  const { readlink } = await import("node:fs/promises");
@@ -6,8 +6,14 @@
6
6
 
7
7
  ```text
8
8
  Skill layer
9
- ├─ DAG/runtime 入口策略(.agents/skills/loop-agent/)
10
- └─ Feature/Task Pool 外层 operator 路由(.agents/skills/agent-worker/)
9
+ ├─ package 内置 DAG/runtime Skills(skills/** + resource catalog)
10
+ ├─ 目标项目外部 Agent 发现桥(.agents/skills/loop-agent/SKILL.md)
11
+ └─ 项目/用户自定义 Skills(显式来源,不与 builtin 混用)
12
+
13
+ Controller context (src/governance/)
14
+ ├─ normalized project config(package defaults + tracked project + local harness)
15
+ ├─ package resource catalog/provider
16
+ └─ bounded project capability scanner
11
17
 
12
18
  CLI layer (src/cli/)
13
19
  └─ argv 解析、adapter 解析、调用 application / command handler、格式化输出
@@ -45,10 +51,18 @@ Governance (scripts/check-*.sh, src/governance/)
45
51
 
46
52
  ### Skill layer
47
53
 
48
- - **位置**:`.agents/skills/loop-agent/**` 与 `.agents/skills/agent-worker/**`
49
- - **职责**:`loop-agent` skill 定义单个 DAG/runtime 工作的入口、硬规则与 reference 路由;`agent-worker` skill 只定义 Feature Packet、TaskSpec、Task Pool、controller pinning、自举 release train 与失败恢复的外层 operator 路由。
54
+ - **位置**:package `skills/**`、目标项目 `.agents/skills/loop-agent/SKILL.md` bridge,以及项目/用户自定义 Skill 目录。
55
+ - **职责**:package `loop-agent` Skill 定义 DAG/runtime 工作的入口、硬规则与 reference 路由;目标项目 bridge 只负责发现当前安装的 controller 与给出唯一下一步,不复制治理正文、不授予写权限。`agent-worker` Skill 仍定义 Feature Packet、TaskSpec、Task Pool、controller pinning、自举 release train 与失败恢复的外层 operator 路由。
56
+ - **来源身份**:runtime 使用 `builtin:<name>`、`project:<name>`、`user:<name>` 区分来源。默认 DAG role 只解析 package builtin;同名项目或用户 Skill 不得遮挡。每个 run 在执行前冻结实际 Skill bytes、reference 与 SHA-256,resume 只信任 run-owned snapshot。
50
57
  - **路由边界**:DAG leaf node 不得递归启动 `agent-worker`;`agent-worker` 不得加入 `DEFAULT_SKILLS_BY_ROLE`,也不实现 executor、scheduler、prompt 或 write guard。
51
- - **禁止**:在入口 skill 中重复维护 CLI command 列表或与 `src/cli/catalog.ts` 冲突的事实源。
58
+ - **禁止**:把 bridge 当作完整 policy、在入口 Skill 中重复维护 CLI command 列表,或从 bare name 在多个来源中猜测 Skill。
59
+
60
+ ### Controller context
61
+
62
+ - **位置**:`src/governance/project-config.ts`、`project-capability-scanner.ts`、`resource-catalog.ts` 与 package 根 `resource-catalog.v1.json`。
63
+ - **配置边界**:`.loop-agent/project.json` 是可选、可提交且无凭据的项目覆盖;`harness.json` 是默认忽略的本机模型/provider/运行配置。合并顺序为 package defaults → tracked project config → local runtime config,其中本机 verification 只能追加,不能删除或降低 tracked verification。
64
+ - **资源边界**:package docs、templates、schemas 与内置 Skills 通过 catalog 逻辑 ID 解析。provider 延迟读取单个资源,并在使用时校验路径 containment、普通文件、size 与 SHA-256;调用方不得递归扫描 package 目录寻找权威资源。
65
+ - **项目事实边界**:capability scanner 只读取有界的 manifest/build/config 候选,不执行项目文件、不递归源码树。验证命令必须携带 evidence;歧义、高风险或无证据候选不能自动进入 authority。
52
66
 
53
67
  ### CLI layer
54
68
 
@@ -59,9 +73,10 @@ Governance (scripts/check-*.sh, src/governance/)
59
73
 
60
74
  ### Init-upgrade command boundary
61
75
 
62
- - **位置**:`src/commands/init-upgrade.ts`,复用 `src/commands/init.ts` 的 ownership scan / safe action 与 `src/commands/client-recovery.ts` 的 generated recovery builders。
63
- - **职责**:拥有可恢复升级状态机与目标项目 run facts;version gate、identity drift、active runtime/lock、workspace re-scan、single-file merge boundary、home zero-write fingerprint 和 completion invariant 都由 controller 决定。
64
- - **禁止**:OpenCode/Pi plugin、主会话 skill 或 notifier 拥有升级状态机;命令不得修改业务源码、用户 home 或以宽泛路径授权模型。主会话仅可按 controller 返回的具体 `allowedPaths` 合并 init surface,随后必须 `--continue`。
76
+ - **位置**:`src/commands/init-upgrade.ts`,复用 `src/commands/init.ts` 的 ownership scan、最小 surface safe action 与 v1/v2 state normalization。
77
+ - **职责**:拥有从旧 full projection 到唯一最小架构的可恢复迁移。version gate、identity drift、active/runtime inventory、单文件内容处置、action/disposition receipt 与 completion invariant 都由 controller 决定。
78
+ - **最小完成面**:`.gitignore` managed block、ignored `harness.json`、共享 `.agents/skills/loop-agent/SKILL.md` bridge 与 `.harness/init-surface.json` v2。README/AGENTS、治理 docs/scripts、内置 Skill 镜像、client recovery 文件和预建 runtime 目录均不是 fresh init surface。
79
+ - **禁止**:仅凭路径把旧文件提升为 controller-owned;递归删除目录;覆盖用户同路径 bridge;整体 untrack `.agents`;在 active/paused/resumable DAG、scheduled goal、Worker、Console operation 或 identity mismatch 存在时写入。
65
80
 
66
81
  ### Application layer
67
82
 
@@ -74,6 +89,7 @@ Governance (scripts/check-*.sh, src/governance/)
74
89
 
75
90
  - **位置**:`src/workflows/dag/**`、`src/workflows/dynamic/**`、`src/workflows/loop/**`
76
91
  - **职责**:DAG spec 校验与执行、dynamic workflow 编译与 expansion、Loop 状态机与 action 编排;新 DAG run 在任何节点执行前创建 run-owned resolved skill profile snapshot,并在普通节点、dynamic child、approve/resume 路径执行 integrity gate。
92
+ - **package resource 合同**:默认 Skills 与模板从当前 package resource provider 解析;目标项目不需要保存内置 Skill、`docs/templates/**` 或 `scripts/check-repo.sh` 副本。run 创建后冻结资源与 normalized project context,package 升级或 scanner cache 变化不得改变该 run。
77
93
  - **skill snapshot 契约**:snapshot ref 使用 run-relative `.runtime/skill-snapshot.json` 与原始 bytes SHA-256;ref、artifact、profile 或 binding 不一致时 fail closed,不允许回退 live skill resolution。旧 run 只有在 ref 与 artifact 都不存在时,才可在 resume 前标记为 `legacy-resume-backfill` 并冻结剩余节点。
78
94
  - **允许依赖**:`src/executors/**`、`src/task/**`、`src/records/**`、`src/shared/**`、application use-case(目标态)。
79
95
  - **禁止**:`import` 来自 `src/commands/**`(见下方过渡例外)。
@@ -102,7 +118,7 @@ Governance (scripts/check-*.sh, src/governance/)
102
118
 
103
119
  - **位置**:`src/worker/**`,独立 `agent-worker` CLI 为 `src/worker/cli.ts`。
104
120
  - **职责**:TaskSpec 校验与物化、Task Pool batch/retry/morning report under `.harness/task-pool/`、失败路由,以及只读 Observe 事件/快照/UI;实际 DAG 执行通过 `LoopAgentClient` 启动已发布的 `loop-agent` 子进程。自 0.8.0 起该目录是唯一受支持的 Task Pool runtime root,旧路径不读取、不迁移、不合并、不重映射。
105
- - **controller identity**:写入型 Feature/batch/Task/final verification 在任何目标仓库或 Task Pool 状态写入前解析并冻结 schemaVersion 1 identity,包括 package name/version、绝对 entry/real entry、直接可执行 launch spec、binary SHA-256 和覆盖 `package.json`、`bin/**`、`dist/**`、`.agents/skills/**` 的 portable fingerprint。expected version/fingerprint 不匹配时 fail-fast;后续 spawn 不重新查询 PATH。
121
+ - **controller identity**:写入型 Feature/batch/Task/final verification 在任何目标仓库或 Task Pool 状态写入前解析并冻结 schemaVersion 1 identity,包括 package name/version、绝对 entry/real entry、直接可执行 launch spec、binary SHA-256 与 package resource catalog digest。expected version/fingerprint 不匹配时 fail-fast;后续 spawn 不重新查询 PATH。
106
122
  - **证据传播**:canonical Worker record、Task Pool run、batch/Feature、QA/final evidence 可选携带同一 identity;只有所有相关层都省略 identity 时才按 legacy evidence 接受,部分缺失或锚点不一致会拒绝。
107
123
  - **Worker-aware recovery**:`agent-worker task reconcile --action abandon` 由 Worker 持有 Worker run ↔ DAG run association,再调用 DAG-kernel reconcile(`src/workflows/dag/reconcile-run.ts`)并把 Task Pool 投影为 `Failed` + recovery evidence。低层 `loop-agent dag reconcile-run` 只维护 DAG lifecycle,不搜索/修改 Task Pool。应急入口 `pool mark-failed` 同属 Worker,禁止覆盖 `Done`。
108
124
  - **允许依赖**:TaskSpec、Task Pool、observability、Node filesystem/path、明确的 shared/task contract,以及只读/共享的 `src/workflows/dag/**` reconcile/lifecycle helpers;它不是第二套 executor 或 DAG kernel。
@@ -118,7 +134,7 @@ Governance (scripts/check-*.sh, src/governance/)
118
134
  ### Governance
119
135
 
120
136
  - **位置**:`scripts/check-repo.sh` 及子脚本、`src/governance/**`、相关 Vitest。
121
- - **职责**:在 CI / in-flight DAG 中检测文档链接、exec plan 状态、架构 import、command registry 漂移、两个公共 skill entry 与 init/package surface 完整性。源码仓库另提供 `scripts/self-host-canary.mjs` 作为 repo-maintainer candidate takeover 证据入口;它不属于发布 package surface。
137
+ - **职责**:在 CI / in-flight DAG 中检测文档链接、exec plan 状态、架构 import、command registry 漂移、package Skills、外部 bridge、resource catalog 与最小 init/package surface 完整性。源码仓库另提供 `scripts/self-host-canary.mjs` 作为 repo-maintainer candidate takeover 证据入口;它不属于发布 package surface。
122
138
 
123
139
  ## 允许的依赖方向
124
140
 
@@ -201,19 +217,9 @@ Runtime 变更另需 `npm run typecheck` 及对应 targeted Vitest(见 exec pl
201
217
 
202
218
  ## Client session 恢复边界
203
219
 
204
- 主会话模型有两类常见缺口:**瞬态 UnknownError**(非标准 502 / `LLMRequestError` / 网络抖动 / 超时经 TypeValidation 落入 UnknownError,内置 APIError 重试不命中)与 **上下文过大**(含内网中文「请求上下文过大」及常见英文 overflow 文案,默认 overflow 识别不全)。loop-agent 通过 **职责分离的项目级产物** 补偿,不修改 OpenCode/Pi 上游,也不引入外部监督器,不改默认模型 `contextWindow`。
205
-
206
- | 面 | 路径 / 入口 | 边界 |
207
- | --- | --- | --- |
208
- | OpenCode transient-retry | `.opencode/plugins/loop-agent-transient-retry.js`(init surface `generated`) | 瞬态 UnknownError / TypeValidation wrapper 及已知被裁剪的内部 provider 波动文案 resume;busy/retry 门控 + backoff;overflow/401/配额/取消/业务标 permanent(`plugin-ignore-permanent-error`),**不** compact |
209
- | OpenCode overflow-compact | `.opencode/plugins/loop-agent-context-overflow-compact.js`(init surface `generated`) | 仅 context overflow → `session.compact`(无则 `summarize`)+ 有限 `promptAsync` 续接;`MAX_OVERFLOW_RECOVERIES ≤ 2`;session 锁;非 overflow 不动作 |
210
- | Pi project extension | `.pi/extensions/loop-agent-context-overflow.js`(init surface `generated`) | `message_end` 上将 overflow `errorMessage` 幂等改写为 `context_length_exceeded:` 前缀,触发 Pi 原生 compact/retry;分类器与控制器共享 P1–P10 / N1–N5 语料(含嵌套 JSON);**不**写 `~/.pi` settings / compaction / 模型窗口,**不**投影 sift native |
211
- | Console / DAG 运行时 | npm 内置 inline extension + 可选 `@agent-context/sift` | Console 无需 init 即启用内部 provider transient 规范化、字段级 retry process defaults 与 L0/L1/L2;项目显式 retry 字段优先于用户全局字段,再优先于推荐默认值。DAG 使用独立 in-memory retry/compaction,且不做 streaming 主动 compact。`HARNESS_CONTEXT_PRESSURE_MODE=off` 只关 L0/L2,不关闭 Console transient 恢复;`HARNESS_CONSOLE_SIFT` / `HARNESS_DAG_SIFT` 的 `0\|false\|off` 关 L1。不进入目标项目 init 文件 |
212
- | Pi 用户配置 | `~/.pi/agent/settings.json` | **不**进入项目 `.harness/init-surface.json` hash;仅 `--client-recovery=user` 可字段级补缺并原子写;`auto`/`project`/`off` 与 `check-update` 默认零写 home;读取时只有 `ENOENT` 视为缺文件,其他 I/O 错误 fail closed |
213
- | CLI mode | `--client-recovery=auto\|project\|user\|off`(默认 `auto`) | `auto`/`project` 安装上述三份项目产物;`user` = 三产物 + 显式 Pi retry 合并;`off` 全跳过 |
214
- | Ownership | recorded sha256 + apply-safe | 三份 generated 缺失可补、与 recorded hash 一致可升级;用户改过 → model merge / human decision,禁止静默覆盖 |
220
+ Console 与 DAG 的 provider transient normalization、retry defaults 和 context-pressure 防护属于 package runtime,不依赖目标项目 init 文件。`loop-agent init` 不再生成 `.opencode/plugins/**`、`.pi/extensions/**`、`.pi/settings.json`,也不写 `~/.pi/**`。
215
221
 
216
- 实现落点:`src/shared/pi-provider-recovery.ts`(内置规则、纯 `additionalRules` 扩展接口与 generated predicate)、`src/shared/pi-retry-settings.ts`(字段级 process defaults)、`src/shared/pi-context-pressure/` 与 `src/worker/console/chat/pi-runtime.ts`(Console inline normalization),以及 `src/commands/client-recovery.ts` / `src/commands/init.ts`(项目投影与 surface 编排)。
222
+ 需要特定客户端适配时必须走独立、显式的 adapter 生命周期;adapter 缺失不影响 core init 或 DAG 健康。旧项目中仍与 controller recorded hash 一致的 recovery 文件属于可退役投影;用户修改过的文件保留并解除 init ownership。
217
223
 
218
224
  ## 演进里程碑
219
225
 
@@ -1,284 +1,27 @@
1
1
  {
2
- "version": 1,
3
- "description": "Machine-checked contract for files that must remain available through npm packaging and target-project initialization.",
2
+ "version": 2,
3
+ "description": "Machine-checked contract for package resources and the minimal target-project initialization surface.",
4
+ "resourceCatalog": "resource-catalog.v1.json",
4
5
  "packageRequired": [
5
6
  "AGENTS.md",
6
7
  "CHANGELOG.md",
7
8
  "README.md",
8
9
  "harness.json",
9
10
  "bin/loop-agent.js",
10
- "docs/README.md",
11
- "docs/governance/harness-methodology-tdd.md",
12
- "docs/governance/harness-methodology-verification.md",
13
- "docs/governance/harness-methodology-debugging.md",
14
- "docs/operations/local-development-environment.md",
11
+ "bin/agent-worker.js",
15
12
  "docs/init-surface.manifest.json",
16
13
  "docs/architecture/runtime-boundaries.md",
17
- "docs/architecture/README.md",
18
- "docs/architecture/system-overview.md",
19
- "docs/architecture/dag-execution.md",
20
- "docs/architecture/worker-and-feature.md",
21
- "docs/architecture/facts-and-state.md",
22
- "docs/architecture/evolution.md",
23
- "docs/skills/README.md",
24
- "docs/skills/vetted-skill-registry.md",
25
- "docs/templates/README.md",
26
- "docs/templates/init-managed-agents.md",
27
- "docs/templates/init-evolution-review.md",
28
- "docs/templates/exec-plan.md",
29
- "docs/templates/production-readiness-checklist.md",
30
- "docs/templates/frontend-task-requirement.md",
31
- "docs/templates/frontend-task-constraints.md",
32
- "docs/templates/frontend-design-contract.md",
33
- "docs/templates/frontend-implementation-contract.schema.json",
34
- "docs/templates/worker-dogfood-setup.md",
35
- "docs/templates/worker-dogfood-evidence.md",
36
14
  "docs/templates/harness.schema.json",
37
- "docs/templates/spec-registry.schema.json",
38
- "docs/templates/interactive-ui-round2-experiment.md",
39
- "docs/templates/product-line/README.md",
40
- "docs/templates/product-line/AGENTS.md",
41
- "docs/templates/product-line/requirement.md",
42
- "docs/templates/product-line/acceptance.yaml",
43
- "docs/templates/product-line/design.md",
44
- "docs/templates/product-line/test-plan.md",
45
- "docs/templates/product-line/task-graph.yaml",
46
- "docs/templates/product-line/task.yaml",
47
- "docs/templates/product-line/feature.yaml",
48
- "docs/templates/product-line/closeout.yaml",
49
- "docs/templates/product-line/links.md",
50
- "scripts/kb-bootstrap-init-skeleton.sh",
51
- "scripts/kb-query.mjs",
52
- "scripts/kb-graph-materialize.mjs",
53
- "scripts/kb-graph-promote.mjs",
54
- "scripts/kb-graph-incremental-prepare.mjs",
55
- "scripts/next-info.mjs",
56
- "scripts/next-publish-gate.mjs",
57
- "scripts/release-source-binding.mjs",
58
- "docs/templates/agent-dag.schema.json",
59
- "examples/example-dag.json",
15
+ "resource-catalog.v1.json",
16
+ "resources/agent-bridge/loop-agent/SKILL.md",
60
17
  "skills/agent-worker/SKILL.md",
61
- "skills/agent-worker/references/agent-worker-operator.md",
62
- "skills/loop-agent/SKILL.md",
63
- "skills/loop-agent/references/command-reference.md",
64
- "skills/loop-agent/references/hybrid-dag.md",
65
- "skills/loop-agent/references/source-and-plan-practice.md",
66
- "skills/loop-agent/references/docs-converge.md",
67
- "skills/ai-engineering-context/SKILL.md",
68
- "skills/verification-before-completion/SKILL.md",
69
- "skills/systematic-debugging/SKILL.md",
70
- "skills/requesting-code-review/SKILL.md",
71
- "skills/codebase-scout/SKILL.md",
72
- "skills/test-driven-development/SKILL.md",
73
- "skills/code-review-core/SKILL.md",
74
- "skills/init-capability-evolution/SKILL.md",
75
- "skills/grill-with-docs/SKILL.md",
76
- "skills/grill-with-docs/context-format.md",
77
- "skills/grill-with-docs/adr-format.md",
78
- "skills/webapp-testing/SKILL.md",
79
- "skills/playwright-cli/SKILL.md",
80
- "skills/playwright-cli-case-generator/SKILL.md",
81
- "skills/frontend-contract/SKILL.md",
82
- "skills/frontend-contract/references/contract-protocol.md",
83
- "skills/frontend-scout/SKILL.md",
84
- "skills/frontend-scout/references/scout-evidence.md",
85
- "skills/frontend-scout/references/design-evidence.md",
86
- "skills/frontend-plan/SKILL.md",
87
- "skills/frontend-plan/references/decision-contract.md",
88
- "skills/frontend-plan/references/design-decisions.md",
89
- "skills/frontend-bounded-implement/SKILL.md",
90
- "skills/frontend-bounded-implement/references/code-standards.md",
91
- "skills/frontend-design-review/SKILL.md",
92
- "skills/frontend-design-review/references/review-checklist.md",
93
- "skills/frontend-review/SKILL.md",
94
- "skills/frontend-review/references/review-findings.md",
95
- "skills/frontend-verification/SKILL.md",
96
- "skills/frontend-verification/references/verification-checklist.md",
97
- "docs/templates/backend-test-analysis.schema.json",
98
- "docs/templates/backend-test-execution.schema.json",
99
- "docs/templates/backend-test-result.schema.json",
100
- "docs/templates/backend-test-case-manifest.schema.json"
101
- ],
102
- "initFullRequired": [
103
- "README.md",
104
- "AGENTS.md",
105
- ".gitignore",
106
- "harness.json",
107
- "docs/README.md",
108
- "docs/development-principles.md",
109
- "docs/feature-workflow.md",
110
- "docs/verification-matrix.md",
111
- "docs/loop-agent-harness.md",
112
- "docs/spec-registry.json",
113
- "docs/harness-methodology-tdd.md",
114
- "docs/harness-methodology-verification.md",
115
- "docs/harness-methodology-debugging.md",
116
- "docs/templates/README.md",
117
- "docs/templates/init-evolution-review.md",
118
- "docs/templates/production-readiness-checklist.md",
119
- "docs/templates/frontend-task-requirement.md",
120
- "docs/templates/frontend-task-constraints.md",
121
- "docs/templates/frontend-design-contract.md",
122
- "docs/templates/worker-dogfood-setup.md",
123
- "docs/templates/worker-dogfood-evidence.md",
124
- "docs/templates/harness.schema.json",
125
- "docs/templates/interactive-ui-round2-experiment.md",
126
- "docs/templates/product-line/README.md",
127
- "docs/templates/product-line/AGENTS.md",
128
- "docs/templates/product-line/requirement.md",
129
- "docs/templates/product-line/acceptance.yaml",
130
- "docs/templates/product-line/design.md",
131
- "docs/templates/product-line/test-plan.md",
132
- "docs/templates/product-line/task-graph.yaml",
133
- "docs/templates/product-line/task.yaml",
134
- "docs/templates/product-line/feature.yaml",
135
- "docs/templates/product-line/closeout.yaml",
136
- "docs/templates/product-line/links.md",
137
- "scripts/check-skill-entry.sh",
138
- "scripts/check-product-line-docs.sh",
139
- "scripts/check-repo.sh",
140
- "scripts/ci-governance.sh",
141
- "scripts/ci-tests.sh",
142
- "scripts/ci.sh",
143
- ".harness/prompts/analyze.md",
144
- ".harness/tasks",
145
- ".harness/dag-runs/active",
146
- ".agents/skills/agent-worker/SKILL.md",
147
- ".agents/skills/agent-worker/references/agent-worker-operator.md",
148
- ".agents/skills/loop-agent/SKILL.md",
149
- ".agents/skills/loop-agent/references/command-reference.md",
150
- ".agents/skills/loop-agent/references/hybrid-dag.md",
151
- ".agents/skills/loop-agent/references/source-and-plan-practice.md",
152
- ".agents/skills/loop-agent/references/docs-converge.md",
153
- ".agents/skills/ai-engineering-context/SKILL.md",
154
- ".agents/skills/verification-before-completion/SKILL.md",
155
- ".agents/skills/systematic-debugging/SKILL.md",
156
- ".agents/skills/requesting-code-review/SKILL.md",
157
- ".agents/skills/codebase-scout/SKILL.md",
158
- ".agents/skills/test-driven-development/SKILL.md",
159
- ".agents/skills/code-review-core/SKILL.md",
160
- ".agents/skills/init-capability-evolution/SKILL.md",
161
- ".agents/skills/grill-with-docs/SKILL.md",
162
- ".agents/skills/grill-with-docs/context-format.md",
163
- ".agents/skills/grill-with-docs/adr-format.md",
164
- ".agents/skills/webapp-testing/SKILL.md",
165
- ".agents/skills/playwright-cli/SKILL.md",
166
- ".agents/skills/playwright-cli-case-generator/SKILL.md",
167
- ".agents/skills/frontend-contract/SKILL.md",
168
- ".agents/skills/frontend-contract/references/contract-protocol.md",
169
- ".agents/skills/frontend-scout/SKILL.md",
170
- ".agents/skills/frontend-scout/references/scout-evidence.md",
171
- ".agents/skills/frontend-scout/references/design-evidence.md",
172
- ".agents/skills/frontend-plan/SKILL.md",
173
- ".agents/skills/frontend-plan/references/decision-contract.md",
174
- ".agents/skills/frontend-plan/references/design-decisions.md",
175
- ".agents/skills/frontend-bounded-implement/SKILL.md",
176
- ".agents/skills/frontend-bounded-implement/references/code-standards.md",
177
- ".agents/skills/frontend-design-review/SKILL.md",
178
- ".agents/skills/frontend-design-review/references/review-checklist.md",
179
- ".agents/skills/frontend-review/SKILL.md",
180
- ".agents/skills/frontend-review/references/review-findings.md",
181
- ".agents/skills/frontend-verification/SKILL.md",
182
- ".agents/skills/frontend-verification/references/verification-checklist.md",
183
- "docs/templates/backend-test-analysis.schema.json",
184
- "docs/templates/backend-test-execution.schema.json",
185
- "docs/templates/backend-test-result.schema.json",
186
- "docs/templates/backend-test-case-manifest.schema.json",
187
- ".opencode/plugins/loop-agent-transient-retry.js",
188
- ".opencode/plugins/loop-agent-context-overflow-compact.js",
189
- ".pi/extensions/loop-agent-context-overflow.js",
190
- ".pi/settings.json"
18
+ "skills/loop-agent/SKILL.md"
191
19
  ],
192
20
  "initSurface": {
193
- "docs/spec-registry.json": "generated",
194
- "README.md": "managed-block",
195
- "AGENTS.md": "managed-block",
196
21
  ".gitignore": "managed-block",
197
22
  "harness.json": "generated",
198
- "docs/README.md": "generated",
199
- "docs/development-principles.md": "generated",
200
- "docs/feature-workflow.md": "generated",
201
- "docs/verification-matrix.md": "generated",
202
- "docs/loop-agent-harness.md": "generated",
203
- "docs/harness-methodology-tdd.md": "copied",
204
- "docs/harness-methodology-verification.md": "copied",
205
- "docs/harness-methodology-debugging.md": "copied",
206
- "docs/templates/README.md": "copied",
207
- "docs/templates/init-evolution-review.md": "copied",
208
- "docs/templates/production-readiness-checklist.md": "copied",
209
- "docs/templates/frontend-task-requirement.md": "copied",
210
- "docs/templates/frontend-task-constraints.md": "copied",
211
- "docs/templates/frontend-design-contract.md": "copied",
212
- "docs/templates/worker-dogfood-setup.md": "copied",
213
- "docs/templates/worker-dogfood-evidence.md": "copied",
214
- "docs/templates/harness.schema.json": "copied",
215
- "docs/templates/interactive-ui-round2-experiment.md": "copied",
216
- "docs/templates/product-line/README.md": "copied",
217
- "docs/templates/product-line/AGENTS.md": "copied",
218
- "docs/templates/product-line/requirement.md": "copied",
219
- "docs/templates/product-line/acceptance.yaml": "copied",
220
- "docs/templates/product-line/design.md": "copied",
221
- "docs/templates/product-line/test-plan.md": "copied",
222
- "docs/templates/product-line/task-graph.yaml": "copied",
223
- "docs/templates/product-line/task.yaml": "copied",
224
- "docs/templates/product-line/feature.yaml": "copied",
225
- "docs/templates/product-line/closeout.yaml": "copied",
226
- "docs/templates/product-line/links.md": "copied",
227
- "scripts/check-skill-entry.sh": "generated",
228
- "scripts/check-product-line-docs.sh": "generated",
229
- "scripts/check-repo.sh": "generated",
230
- "scripts/ci-governance.sh": "generated",
231
- "scripts/ci-tests.sh": "generated",
232
- "scripts/ci.sh": "generated",
233
- ".harness/prompts/analyze.md": "generated",
234
- ".harness/tasks": "directory",
235
- ".harness/dag-runs/active": "directory",
236
- ".harness/init-surface.json": "state",
237
- ".agents/skills/agent-worker/SKILL.md": "copied",
238
- ".agents/skills/agent-worker/references/agent-worker-operator.md": "copied",
239
23
  ".agents/skills/loop-agent/SKILL.md": "copied",
240
- ".agents/skills/loop-agent/references/command-reference.md": "copied",
241
- ".agents/skills/loop-agent/references/hybrid-dag.md": "copied",
242
- ".agents/skills/loop-agent/references/source-and-plan-practice.md": "copied",
243
- ".agents/skills/loop-agent/references/docs-converge.md": "copied",
244
- ".agents/skills/ai-engineering-context/SKILL.md": "copied",
245
- ".agents/skills/verification-before-completion/SKILL.md": "copied",
246
- ".agents/skills/systematic-debugging/SKILL.md": "copied",
247
- ".agents/skills/requesting-code-review/SKILL.md": "copied",
248
- ".agents/skills/codebase-scout/SKILL.md": "copied",
249
- ".agents/skills/test-driven-development/SKILL.md": "copied",
250
- ".agents/skills/code-review-core/SKILL.md": "copied",
251
- ".agents/skills/init-capability-evolution/SKILL.md": "copied",
252
- ".agents/skills/grill-with-docs/SKILL.md": "copied",
253
- ".agents/skills/grill-with-docs/context-format.md": "copied",
254
- ".agents/skills/grill-with-docs/adr-format.md": "copied",
255
- ".agents/skills/webapp-testing/SKILL.md": "copied",
256
- ".agents/skills/playwright-cli/SKILL.md": "copied",
257
- ".agents/skills/playwright-cli-case-generator/SKILL.md": "copied",
258
- ".agents/skills/frontend-contract/SKILL.md": "copied",
259
- ".agents/skills/frontend-contract/references/contract-protocol.md": "copied",
260
- ".agents/skills/frontend-scout/SKILL.md": "copied",
261
- ".agents/skills/frontend-scout/references/scout-evidence.md": "copied",
262
- ".agents/skills/frontend-scout/references/design-evidence.md": "copied",
263
- ".agents/skills/frontend-plan/SKILL.md": "copied",
264
- ".agents/skills/frontend-plan/references/decision-contract.md": "copied",
265
- ".agents/skills/frontend-plan/references/design-decisions.md": "copied",
266
- ".agents/skills/frontend-bounded-implement/SKILL.md": "copied",
267
- ".agents/skills/frontend-bounded-implement/references/code-standards.md": "copied",
268
- ".agents/skills/frontend-design-review/SKILL.md": "copied",
269
- ".agents/skills/frontend-design-review/references/review-checklist.md": "copied",
270
- ".agents/skills/frontend-review/SKILL.md": "copied",
271
- ".agents/skills/frontend-review/references/review-findings.md": "copied",
272
- ".agents/skills/frontend-verification/SKILL.md": "copied",
273
- ".agents/skills/frontend-verification/references/verification-checklist.md": "copied",
274
- "docs/templates/backend-test-analysis.schema.json": "copied",
275
- "docs/templates/backend-test-execution.schema.json": "copied",
276
- "docs/templates/backend-test-result.schema.json": "copied",
277
- "docs/templates/backend-test-case-manifest.schema.json": "copied",
278
- ".opencode/plugins/loop-agent-transient-retry.js": "generated",
279
- ".opencode/plugins/loop-agent-context-overflow-compact.js": "generated",
280
- ".pi/extensions/loop-agent-context-overflow.js": "generated",
281
- ".pi/settings.json": "generated"
24
+ ".harness/init-surface.json": "state"
282
25
  },
283
26
  "packageExcluded": [
284
27
  "docs/progress/20*.md",
@@ -288,9 +31,18 @@
288
31
  "docs/exec-plans/completed/20*.md"
289
32
  ],
290
33
  "initExcluded": [
291
- "examples/example-dag.json",
292
- "docs/skills/vetted-skill-registry.md",
293
- "docs/templates/init-managed-agents.md"
34
+ "README.md",
35
+ "AGENTS.md",
36
+ "ai_workspace/loop-agent",
37
+ "scripts",
38
+ ".harness/prompts",
39
+ ".harness/tasks",
40
+ ".harness/dag-runs",
41
+ ".agents/skills/agent-worker",
42
+ ".opencode/plugins/loop-agent-transient-retry.js",
43
+ ".opencode/plugins/loop-agent-context-overflow-compact.js",
44
+ ".pi/extensions/loop-agent-context-overflow.js",
45
+ ".pi/settings.json"
294
46
  ],
295
47
  "reviewTriggers": [
296
48
  "AGENTS.md",
@@ -298,19 +50,16 @@
298
50
  "CHANGELOG.md",
299
51
  "harness.json",
300
52
  "package.json",
53
+ "resource-catalog.v1.json",
54
+ "resources/**",
301
55
  "src/commands/init.ts",
302
- "src/commands/init-model-catalog.ts",
303
- "src/commands/client-recovery.ts",
304
56
  "src/commands/init-upgrade.ts",
305
- "src/cli.ts",
306
- "src/cli/update/init-surface-notifier.ts",
307
- "src/cli/update/policy.ts",
308
- "src/cli/update/runtime-activity.ts",
57
+ "src/governance/project-config.ts",
58
+ "src/governance/project-capability-scanner.ts",
59
+ "src/governance/resource-catalog.ts",
309
60
  "src/workflows/dag/skills.ts",
310
- "src/workflows/dag/init-hybrid.ts",
311
61
  "src/workflows/dag/skill-instructions.ts",
312
62
  "docs/templates/**",
313
- "docs/skills/**",
314
63
  "skills/**",
315
64
  "scripts/**"
316
65
  ],
@@ -322,25 +71,23 @@
322
71
  "name": "model-review",
323
72
  "severity": "high",
324
73
  "strictRequiresReport": true,
325
- "description": "Changes that may alter target-project initialization behavior, default DAG role skills, skill resolution, or package/init contracts.",
74
+ "description": "Changes that may alter minimal initialization, migration ownership, normalized project context, package resources, or DAG Skill resolution.",
326
75
  "patterns": [
327
76
  "src/commands/init.ts",
328
- "src/commands/init-model-catalog.ts",
329
- "src/commands/client-recovery.ts",
330
77
  "src/commands/init-upgrade.ts",
331
- "src/cli.ts",
332
78
  "src/cli/update/init-surface-notifier.ts",
333
79
  "src/cli/update/policy.ts",
334
- "src/cli/update/runtime-activity.ts",
80
+ "src/shared/runtime-activity.ts",
81
+ "src/governance/project-config.ts",
82
+ "src/governance/project-capability-scanner.ts",
83
+ "src/governance/resource-catalog.ts",
335
84
  "src/workflows/dag/skills.ts",
336
- "src/workflows/dag/init-hybrid.ts",
337
85
  "src/workflows/dag/skill-instructions.ts",
338
- "src/workflows/dag/prompt.ts",
339
- "src/workflows/dag/node-execution.ts",
340
86
  "docs/init-surface.manifest.json",
87
+ "resource-catalog.v1.json",
88
+ "resources/**",
341
89
  "package.json",
342
90
  "harness.json",
343
- "AGENTS.md",
344
91
  "README.md"
345
92
  ]
346
93
  },
@@ -348,20 +95,22 @@
348
95
  "name": "surface-check",
349
96
  "severity": "medium",
350
97
  "strictRequiresReport": false,
351
- "description": "Asset surface changes that usually need deterministic package/init smoke checks but not a model review when the checks pass.",
98
+ "description": "Package resource and bridge changes that require deterministic catalog, package, and minimal-init checks.",
352
99
  "patterns": [
353
100
  "skills/**",
354
101
  "docs/templates/**",
355
- "docs/skills/**",
102
+ "resources/**",
103
+ "resource-catalog.v1.json",
356
104
  "scripts/check-init-surface.sh",
357
- "scripts/check-repo.sh"
105
+ "scripts/check-skill-entry.sh",
106
+ "scripts/generate-resource-catalog.mjs"
358
107
  ]
359
108
  },
360
109
  {
361
110
  "name": "advisory",
362
111
  "severity": "low",
363
112
  "strictRequiresReport": false,
364
- "description": "Documentation and user-facing guidance changes that should be considered but should not slow normal iteration.",
113
+ "description": "User-facing guidance changes that should be reviewed without slowing normal iteration.",
365
114
  "patterns": [
366
115
  "CHANGELOG.md",
367
116
  "CHANGELOG/**",
@@ -372,12 +121,11 @@
372
121
  }
373
122
  ],
374
123
  "modelReviewQuestions": [
375
- "Does this change alter files or guidance produced by loop-agent init --profile full --merge?",
376
- "Does a new or changed skill need to be bundled, projected to target projects, or documented as optional only?",
377
- "Do target-project AGENTS.md, README managed blocks, governance docs, templates, or script matrix need updates?",
378
- "Does package.json files include every static asset required by the runtime and init projection?",
379
- "Does docs/init-surface.manifest.json still match the intended package and init surface?",
380
- "Do older initialized target projects need a migration note, manual copy guidance, or future init audit/update support?"
124
+ "Does this change alter the four-file minimal init surface or old-project migration ownership?",
125
+ "Does a runtime resource belong in the package catalog instead of the target project?",
126
+ "Can a project or user Skill shadow a builtin Skill, or can resume observe live package drift?",
127
+ "Can tracked project verification be removed or weakened by local harness settings?",
128
+ "Do package files, the resource catalog, and the init manifest describe the same shipped bytes?"
381
129
  ]
382
130
  }
383
131
  }