agentopology 0.9.2 → 0.10.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 (168) hide show
  1. package/README.md +17 -19
  2. package/dist/__tests__/e2e/action-guard.test.d.ts +13 -0
  3. package/dist/__tests__/e2e/action-guard.test.d.ts.map +1 -0
  4. package/dist/__tests__/e2e/action-guard.test.js +299 -0
  5. package/dist/__tests__/e2e/action-guard.test.js.map +1 -0
  6. package/dist/__tests__/e2e/conformance.test.d.ts +13 -0
  7. package/dist/__tests__/e2e/conformance.test.d.ts.map +1 -0
  8. package/dist/__tests__/e2e/conformance.test.js +109 -0
  9. package/dist/__tests__/e2e/conformance.test.js.map +1 -0
  10. package/dist/__tests__/e2e/contract-drift.test.d.ts +11 -0
  11. package/dist/__tests__/e2e/contract-drift.test.d.ts.map +1 -0
  12. package/dist/__tests__/e2e/contract-drift.test.js +142 -0
  13. package/dist/__tests__/e2e/contract-drift.test.js.map +1 -0
  14. package/dist/__tests__/e2e/guard-check.test.d.ts +9 -0
  15. package/dist/__tests__/e2e/guard-check.test.d.ts.map +1 -0
  16. package/dist/__tests__/e2e/guard-check.test.js +316 -0
  17. package/dist/__tests__/e2e/guard-check.test.js.map +1 -0
  18. package/dist/__tests__/e2e/guard-target.test.d.ts +11 -0
  19. package/dist/__tests__/e2e/guard-target.test.d.ts.map +1 -0
  20. package/dist/__tests__/e2e/guard-target.test.js +198 -0
  21. package/dist/__tests__/e2e/guard-target.test.js.map +1 -0
  22. package/dist/__tests__/e2e/inventory.test.d.ts +18 -0
  23. package/dist/__tests__/e2e/inventory.test.d.ts.map +1 -0
  24. package/dist/__tests__/e2e/inventory.test.js +187 -0
  25. package/dist/__tests__/e2e/inventory.test.js.map +1 -0
  26. package/dist/__tests__/e2e/matcher.test.d.ts +14 -0
  27. package/dist/__tests__/e2e/matcher.test.d.ts.map +1 -0
  28. package/dist/__tests__/e2e/matcher.test.js +145 -0
  29. package/dist/__tests__/e2e/matcher.test.js.map +1 -0
  30. package/dist/__tests__/e2e/step-check.test.d.ts +9 -0
  31. package/dist/__tests__/e2e/step-check.test.d.ts.map +1 -0
  32. package/dist/__tests__/e2e/step-check.test.js +158 -0
  33. package/dist/__tests__/e2e/step-check.test.js.map +1 -0
  34. package/dist/__tests__/e2e/strength.test.d.ts +17 -0
  35. package/dist/__tests__/e2e/strength.test.d.ts.map +1 -0
  36. package/dist/__tests__/e2e/strength.test.js +130 -0
  37. package/dist/__tests__/e2e/strength.test.js.map +1 -0
  38. package/dist/__tests__/e2e/verified-on.test.d.ts +2 -0
  39. package/dist/__tests__/e2e/verified-on.test.d.ts.map +1 -0
  40. package/dist/__tests__/e2e/verified-on.test.js +57 -0
  41. package/dist/__tests__/e2e/verified-on.test.js.map +1 -0
  42. package/dist/__tests__/open-findings.test.js +1 -0
  43. package/dist/__tests__/open-findings.test.js.map +1 -1
  44. package/dist/bindings/__tests__/bindings.test.js +6 -686
  45. package/dist/bindings/__tests__/bindings.test.js.map +1 -1
  46. package/dist/bindings/__tests__/defaults-agreement.test.js +0 -12
  47. package/dist/bindings/__tests__/defaults-agreement.test.js.map +1 -1
  48. package/dist/bindings/__tests__/hook-command.test.js +2 -2
  49. package/dist/bindings/__tests__/hook-command.test.js.map +1 -1
  50. package/dist/bindings/__tests__/mod-plugin.test.js +2 -2
  51. package/dist/bindings/__tests__/mod-plugin.test.js.map +1 -1
  52. package/dist/bindings/claude-code.d.ts +45 -1
  53. package/dist/bindings/claude-code.d.ts.map +1 -1
  54. package/dist/bindings/claude-code.js +181 -15
  55. package/dist/bindings/claude-code.js.map +1 -1
  56. package/dist/bindings/index.d.ts +5 -5
  57. package/dist/bindings/index.d.ts.map +1 -1
  58. package/dist/bindings/index.js +9 -16
  59. package/dist/bindings/index.js.map +1 -1
  60. package/dist/bindings/types.d.ts +6 -1
  61. package/dist/bindings/types.d.ts.map +1 -1
  62. package/dist/cli/__tests__/cli.test.js +25 -0
  63. package/dist/cli/__tests__/cli.test.js.map +1 -1
  64. package/dist/cli/index.js +222 -8
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/conformance/claude-code.d.ts +99 -0
  67. package/dist/conformance/claude-code.d.ts.map +1 -0
  68. package/dist/conformance/claude-code.js +242 -0
  69. package/dist/conformance/claude-code.js.map +1 -0
  70. package/dist/conformance/extract.d.ts +70 -0
  71. package/dist/conformance/extract.d.ts.map +1 -0
  72. package/dist/conformance/extract.js +185 -0
  73. package/dist/conformance/extract.js.map +1 -0
  74. package/dist/docs/content.d.ts.map +1 -1
  75. package/dist/docs/content.js +57 -32
  76. package/dist/docs/content.js.map +1 -1
  77. package/dist/guard/check.d.ts +53 -0
  78. package/dist/guard/check.d.ts.map +1 -0
  79. package/dist/guard/check.js +366 -0
  80. package/dist/guard/check.js.map +1 -0
  81. package/dist/guard/target.d.ts +45 -0
  82. package/dist/guard/target.d.ts.map +1 -0
  83. package/dist/guard/target.js +168 -0
  84. package/dist/guard/target.js.map +1 -0
  85. package/dist/import/__tests__/import.test.js +0 -554
  86. package/dist/import/__tests__/import.test.js.map +1 -1
  87. package/dist/import/index.d.ts +0 -1
  88. package/dist/import/index.d.ts.map +1 -1
  89. package/dist/import/index.js +1 -7
  90. package/dist/import/index.js.map +1 -1
  91. package/dist/import/serializer.d.ts.map +1 -1
  92. package/dist/import/serializer.js +41 -0
  93. package/dist/import/serializer.js.map +1 -1
  94. package/dist/index.d.ts +0 -4
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +0 -4
  97. package/dist/index.js.map +1 -1
  98. package/dist/inventory/index.d.ts +65 -0
  99. package/dist/inventory/index.d.ts.map +1 -0
  100. package/dist/inventory/index.js +272 -0
  101. package/dist/inventory/index.js.map +1 -0
  102. package/dist/parser/ast.d.ts +46 -0
  103. package/dist/parser/ast.d.ts.map +1 -1
  104. package/dist/parser/ast.js.map +1 -1
  105. package/dist/parser/index.d.ts +6 -1
  106. package/dist/parser/index.d.ts.map +1 -1
  107. package/dist/parser/index.js +66 -4
  108. package/dist/parser/index.js.map +1 -1
  109. package/dist/parser/known-fields.d.ts +3 -0
  110. package/dist/parser/known-fields.d.ts.map +1 -1
  111. package/dist/parser/known-fields.js +5 -3
  112. package/dist/parser/known-fields.js.map +1 -1
  113. package/dist/parser/ledger.d.ts +36 -0
  114. package/dist/parser/ledger.d.ts.map +1 -0
  115. package/dist/parser/ledger.js +72 -0
  116. package/dist/parser/ledger.js.map +1 -0
  117. package/dist/parser/run.d.ts +6 -0
  118. package/dist/parser/run.d.ts.map +1 -1
  119. package/dist/parser/run.js +10 -0
  120. package/dist/parser/run.js.map +1 -1
  121. package/dist/parser/validator.d.ts.map +1 -1
  122. package/dist/parser/validator.js +255 -1
  123. package/dist/parser/validator.js.map +1 -1
  124. package/dist/scaffold/manifest.d.ts.map +1 -1
  125. package/dist/scaffold/manifest.js +0 -8
  126. package/dist/scaffold/manifest.js.map +1 -1
  127. package/dist/scaffold/merge.d.ts.map +1 -1
  128. package/dist/scaffold/merge.js +1 -3
  129. package/dist/scaffold/merge.js.map +1 -1
  130. package/dist/step/check.d.ts +56 -0
  131. package/dist/step/check.d.ts.map +1 -0
  132. package/dist/step/check.js +125 -0
  133. package/dist/step/check.js.map +1 -0
  134. package/dist/sync/index.d.ts +0 -2
  135. package/dist/sync/index.d.ts.map +1 -1
  136. package/dist/sync/index.js +0 -109
  137. package/dist/sync/index.js.map +1 -1
  138. package/package.json +3 -1
  139. package/spec/claude-code/README.md +19 -0
  140. package/spec/claude-code/hooks-contract.2.1.295.json +143 -0
  141. package/spec/claude-code/hooks-contract.json +142 -0
  142. package/spec/grammar.md +45 -7
  143. package/spec/testing.md +15 -0
  144. package/spec/validation.md +11 -2
  145. package/dist/__tests__/live/zz-debug.test.d.ts +0 -2
  146. package/dist/__tests__/live/zz-debug.test.d.ts.map +0 -1
  147. package/dist/__tests__/live/zz-debug.test.js +0 -4
  148. package/dist/__tests__/live/zz-debug.test.js.map +0 -1
  149. package/dist/bindings/copilot-cli.d.ts +0 -20
  150. package/dist/bindings/copilot-cli.d.ts.map +0 -1
  151. package/dist/bindings/copilot-cli.js +0 -1516
  152. package/dist/bindings/copilot-cli.js.map +0 -1
  153. package/dist/bindings/gemini-cli.d.ts +0 -18
  154. package/dist/bindings/gemini-cli.d.ts.map +0 -1
  155. package/dist/bindings/gemini-cli.js +0 -1318
  156. package/dist/bindings/gemini-cli.js.map +0 -1
  157. package/dist/bindings/kiro.d.ts +0 -17
  158. package/dist/bindings/kiro.d.ts.map +0 -1
  159. package/dist/bindings/kiro.js +0 -1615
  160. package/dist/bindings/kiro.js.map +0 -1
  161. package/dist/bindings/openclaw.d.ts +0 -18
  162. package/dist/bindings/openclaw.d.ts.map +0 -1
  163. package/dist/bindings/openclaw.js +0 -1947
  164. package/dist/bindings/openclaw.js.map +0 -1
  165. package/dist/import/openclaw.d.ts +0 -70
  166. package/dist/import/openclaw.d.ts.map +0 -1
  167. package/dist/import/openclaw.js +0 -1060
  168. package/dist/import/openclaw.js.map +0 -1
@@ -11,10 +11,6 @@ export { deduplicateFiles } from "./types.js";
11
11
  export { claudeCodeBinding } from "./claude-code.js";
12
12
  export { claudeWorkflowBinding } from "./claude-workflow.js";
13
13
  export { codexBinding } from "./codex.js";
14
- export { geminiCliBinding } from "./gemini-cli.js";
15
- export { copilotCliBinding } from "./copilot-cli.js";
16
- export { openClawBinding } from "./openclaw.js";
17
- export { kiroBinding } from "./kiro.js";
18
14
  export { cursorBinding } from "./cursor.js";
19
15
  /**
20
16
  * `type: mod` hooks run inside the Claude Code engine; only the claude-code
@@ -23,6 +19,10 @@ export { cursorBinding } from "./cursor.js";
23
19
  * warning instead.
24
20
  */
25
21
  export declare function withoutMods(binding: BindingTarget): BindingTarget;
26
- /** All available binding targets, keyed by name. */
22
+ /**
23
+ * All available binding targets, keyed by name. Claude Code is the supported
24
+ * target; the others are experimental (0.10.0 removed gemini-cli, copilot-cli,
25
+ * openclaw and kiro).
26
+ */
27
27
  export declare const bindings: Record<string, BindingTarget>;
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAWhD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAajE;AAED,oDAAoD;AACpD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CASlD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAajE;AAID;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAKlD,CAAC"}
@@ -8,19 +8,11 @@
8
8
  import { claudeCodeBinding } from "./claude-code.js";
9
9
  import { claudeWorkflowBinding } from "./claude-workflow.js";
10
10
  import { codexBinding } from "./codex.js";
11
- import { geminiCliBinding } from "./gemini-cli.js";
12
- import { copilotCliBinding } from "./copilot-cli.js";
13
- import { openClawBinding } from "./openclaw.js";
14
- import { kiroBinding } from "./kiro.js";
15
11
  import { cursorBinding } from "./cursor.js";
16
12
  export { deduplicateFiles } from "./types.js";
17
13
  export { claudeCodeBinding } from "./claude-code.js";
18
14
  export { claudeWorkflowBinding } from "./claude-workflow.js";
19
15
  export { codexBinding } from "./codex.js";
20
- export { geminiCliBinding } from "./gemini-cli.js";
21
- export { copilotCliBinding } from "./copilot-cli.js";
22
- export { openClawBinding } from "./openclaw.js";
23
- export { kiroBinding } from "./kiro.js";
24
16
  export { cursorBinding } from "./cursor.js";
25
17
  /**
26
18
  * `type: mod` hooks run inside the Claude Code engine; only the claude-code
@@ -41,15 +33,16 @@ export function withoutMods(binding) {
41
33
  },
42
34
  };
43
35
  }
44
- /** All available binding targets, keyed by name. */
36
+ const experimental = (b) => ({ ...b, experimental: true });
37
+ /**
38
+ * All available binding targets, keyed by name. Claude Code is the supported
39
+ * target; the others are experimental (0.10.0 removed gemini-cli, copilot-cli,
40
+ * openclaw and kiro).
41
+ */
45
42
  export const bindings = {
46
43
  "claude-code": claudeCodeBinding,
47
- "claude-workflow": withoutMods(claudeWorkflowBinding),
48
- "codex": withoutMods(codexBinding),
49
- "gemini-cli": withoutMods(geminiCliBinding),
50
- "copilot-cli": withoutMods(copilotCliBinding),
51
- "openclaw": withoutMods(openClawBinding),
52
- "kiro": withoutMods(kiroBinding),
53
- "cursor": withoutMods(cursorBinding),
44
+ "claude-workflow": experimental(withoutMods(claudeWorkflowBinding)),
45
+ "codex": experimental(withoutMods(codexBinding)),
46
+ "cursor": experimental(withoutMods(cursorBinding)),
54
47
  };
55
48
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,OAAO;QACL,GAAG,OAAO;QACV,QAAQ,CAAC,GAAgB;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,IAAI,OAAO,CAAC,IAAI,6CAA6C,OAAO,CAAC,IAAI,qBAAqB;gBAC5F,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpD,CAAC;YACF,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,MAAM,QAAQ,GAAkC;IACrD,aAAa,EAAE,iBAAiB;IAChC,iBAAiB,EAAE,WAAW,CAAC,qBAAqB,CAAC;IACrD,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC;IAClC,YAAY,EAAE,WAAW,CAAC,gBAAgB,CAAC;IAC3C,aAAa,EAAE,WAAW,CAAC,iBAAiB,CAAC;IAC7C,UAAU,EAAE,WAAW,CAAC,eAAe,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC;IAChC,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC;CACrC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,OAAO;QACL,GAAG,OAAO;QACV,QAAQ,CAAC,GAAgB;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,IAAI,OAAO,CAAC,IAAI,6CAA6C,OAAO,CAAC,IAAI,qBAAqB;gBAC5F,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpD,CAAC;YACF,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzF;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAkC;IACrD,aAAa,EAAE,iBAAiB;IAChC,iBAAiB,EAAE,YAAY,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACnE,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAChD,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;CACnD,CAAC"}
@@ -34,10 +34,15 @@ export interface GeneratedFile {
34
34
  export declare function deduplicateFiles(files: GeneratedFile[]): GeneratedFile[];
35
35
  /** A binding target that can scaffold project structure from a TopologyAST. */
36
36
  export interface BindingTarget {
37
- /** Machine-readable name (e.g. "claude-code", "codex", "gemini-cli"). */
37
+ /** Machine-readable name (e.g. "claude-code", "codex"). */
38
38
  name: string;
39
39
  /** Human-readable description of the target platform. */
40
40
  description: string;
41
+ /**
42
+ * Not a supported target: kept, but not verified against the platform the way
43
+ * claude-code is. `targets` labels it and scaffold warns.
44
+ */
45
+ experimental?: boolean;
41
46
  /** Generate all files for the target platform from a parsed topology. */
42
47
  scaffold(ast: TopologyAST): GeneratedFile[];
43
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bindings/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CASxE;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAAC;CAC7C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bindings/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CASxE;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAAC;CAC7C"}
@@ -168,4 +168,29 @@ describe("agentopology CLI", () => {
168
168
  });
169
169
  });
170
170
  });
171
+ describe("0.10.0 targets", () => {
172
+ const run = (...args) => {
173
+ try {
174
+ return { code: 0, out: execFileSync(process.execPath, [CLI, ...args], { encoding: "utf8", stdio: "pipe" }) };
175
+ }
176
+ catch (e) {
177
+ const err = e;
178
+ return { code: err.status, out: err.stdout + err.stderr };
179
+ }
180
+ };
181
+ it("a removed target says it was removed, not that it is unknown", () => {
182
+ for (const t of ["gemini-cli", "copilot-cli", "openclaw", "kiro"]) {
183
+ const r = run("scaffold", resolve(root, "examples/simple-pipeline.at"), "--target", t, "--dry-run");
184
+ expect(r.code, t).toBe(1);
185
+ expect(r.out, t).toContain("was removed in 0.10.0");
186
+ }
187
+ });
188
+ it("targets labels codex, cursor and claude-workflow experimental, and claude-code not", () => {
189
+ const out = run("targets").out;
190
+ for (const line of out.split("\n").filter((l) => /^\s+(codex|cursor|claude-workflow)\s/.test(l))) {
191
+ expect(line).toContain("(experimental)");
192
+ }
193
+ expect(out.split("\n").find((l) => /^\s+claude-code\s/.test(l))).not.toContain("experimental");
194
+ });
195
+ });
171
196
  //# sourceMappingURL=cli.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -38,6 +38,11 @@ import { jsonChanges } from "../scaffold/diff.js";
38
38
  import { renderAscii } from "../render/ascii.js";
39
39
  import { buildExecutionBrief } from "../plan/brief.js";
40
40
  import { renderBriefMarkdown } from "../plan/render.js";
41
+ import { checkGuards, renderGuardReport } from "../guard/check.js";
42
+ import { checkStep, renderStepReport, parseStepArgs } from "../step/check.js";
43
+ import { planGuardTarget, applyGuardTarget } from "../guard/target.js";
44
+ import { verifiedOnLine } from "../conformance/claude-code.js";
45
+ import { collectInventory, coverage, renderCoverage } from "../inventory/index.js";
41
46
  // ---------------------------------------------------------------------------
42
47
  // ANSI colors (no external deps)
43
48
  // ---------------------------------------------------------------------------
@@ -59,7 +64,13 @@ ${c.bold("agentopology")} — AgenTopology CLI
59
64
 
60
65
  ${c.bold("Usage:")}
61
66
  agentopology plan <file.at> [--mode plan|execute|auto] [--brief] [--task <text>] [--root <dir>] [--log <path>]
62
- agentopology validate <file.at>
67
+ agentopology validate <file.at> [--inventory <project-dir|inventory.json>] [--dir <project-dir>]
68
+ With --inventory: how many live things in the project the .at
69
+ accounts for (unmapped warns), and what it points at that is not
70
+ on disk (missing, exits 1).
71
+ agentopology inventory [<project-dir>]
72
+ Print the project's live things (the .claude tree, settings hooks,
73
+ .mcp.json servers, package.json scripts) as JSON. Writes nothing.
63
74
  agentopology scaffold <file.at> --target <binding> [--dry-run] [--force] [--allow-invalid] [--prune] [--output <dir>]
64
75
  agentopology sync <file.at> --target <binding> --dir <path>
65
76
  agentopology visualize <file.at> [--output <dir>]
@@ -67,6 +78,20 @@ ${c.bold("Usage:")}
67
78
  agentopology export <file.at> --format <markdown|mermaid|json|ascii|brief> [--output <dir>]
68
79
  agentopology info <file.at>
69
80
  agentopology import --target <binding> --dir <path> [--name <topology-name>] [--output <dir>]
81
+ agentopology guard <file.at> --target claude-code [--dir <project-dir>] [--dry-run]
82
+ Write only the guard part of scaffold into a project that may be
83
+ hand-built: hook scripts, gates, checks, and the hooks and
84
+ permissions of settings.json (merged). Keeps edited scripts and
85
+ implemented checks, reports each. Then runs --check.
86
+ agentopology guard <file.at> --check [--dir <project-dir>]
87
+ Report which gates, approval steps and permission rules the
88
+ project enforces today (refuse / none / hope). Writes nothing;
89
+ exits 1 when something the binding generates is missing.
90
+ agentopology step check <file.at> <step-id> [--unit U] [--dir D]
91
+ Exit 0 when every gate before <step-id> holds (its ledger shows the
92
+ after: step ok for the unit; its run: exits 0 from D), else 1,
93
+ naming each failing gate. Call it at the start of a script step.
94
+ Reads and runs check scripts; never writes.
70
95
  agentopology stubs [<project-dir>]
71
96
  agentopology targets
72
97
  agentopology docs [topic]
@@ -93,7 +118,7 @@ ${c.bold("Commands:")}
93
118
  docs Language reference — show documentation for .at syntax and features.
94
119
 
95
120
  ${c.bold("Options:")}
96
- --target <name> Binding target (e.g. claude-code, codex, gemini-cli, copilot-cli, kiro)
121
+ --target <name> Binding target (claude-code; codex, cursor and claude-workflow are experimental)
97
122
  --format <name> Export format (markdown, mermaid, json, ascii, brief).
98
123
  --dir <path> Directory to read platform files from (used with sync, import).
99
124
  --name <name> Topology name for the generated .at file (used with import).
@@ -152,6 +177,8 @@ function parseArgs(argv) {
152
177
  log: undefined,
153
178
  task: undefined,
154
179
  root: undefined,
180
+ check: false,
181
+ inventory: undefined,
155
182
  help: false,
156
183
  };
157
184
  let i = 0;
@@ -182,6 +209,16 @@ function parseArgs(argv) {
182
209
  i++;
183
210
  continue;
184
211
  }
212
+ if (arg === "--check") {
213
+ result.check = true;
214
+ i++;
215
+ continue;
216
+ }
217
+ if (arg === "--inventory" && i + 1 < args.length) {
218
+ result.inventory = args[i + 1];
219
+ i += 2;
220
+ continue;
221
+ }
185
222
  if (arg === "--all") {
186
223
  result.all = true;
187
224
  i++;
@@ -261,7 +298,7 @@ function parseArgs(argv) {
261
298
  // ---------------------------------------------------------------------------
262
299
  // Commands
263
300
  // ---------------------------------------------------------------------------
264
- function cmdValidate(filePath) {
301
+ function cmdValidate(filePath, inventory, dir) {
265
302
  const source = readFile(filePath);
266
303
  let ast;
267
304
  try {
@@ -274,9 +311,13 @@ function cmdValidate(filePath) {
274
311
  console.log(c.bold(`Validating ${path.basename(filePath)} (${ast.topology.name} v${ast.topology.version})`));
275
312
  console.log("");
276
313
  const results = validate(ast);
314
+ const covered = inventory ? printCoverage(ast, inventory, dir) : true;
277
315
  if (results.length === 0) {
278
316
  console.log(c.green(" All validation rules passed."));
279
317
  console.log("");
318
+ console.log(c.dim(verifiedOnLine()));
319
+ if (!covered)
320
+ process.exit(1);
280
321
  return;
281
322
  }
282
323
  const errors = results.filter((r) => r.level === "error");
@@ -293,10 +334,47 @@ function cmdValidate(filePath) {
293
334
  console.log(` ${c.red(`${errors.length} error(s)`)}, ${c.yellow(`${warnings.length} warning(s)`)}`);
294
335
  console.log("");
295
336
  printLessons(results.map((r) => r.rule));
296
- if (errors.length > 0) {
337
+ console.log(c.dim(verifiedOnLine()));
338
+ if (errors.length > 0 || !covered) {
297
339
  process.exit(1);
298
340
  }
299
341
  }
342
+ /**
343
+ * The --inventory section: a directory is collected now, a file is a saved
344
+ * inventory.json (its tags settled by the owner). Missing paths are resolved
345
+ * against --dir, else the directory given, else the current directory.
346
+ * Returns false when something the .at points at is missing.
347
+ */
348
+ function printCoverage(ast, inventory, dir) {
349
+ const target = path.resolve(inventory);
350
+ if (!fs.existsSync(target)) {
351
+ console.error(c.red(`Error: --inventory ${inventory} not found.`));
352
+ process.exit(1);
353
+ }
354
+ const isDir = fs.statSync(target).isDirectory();
355
+ const root = path.resolve(dir ?? (isDir ? target : "."));
356
+ let items;
357
+ if (isDir)
358
+ items = collectInventory(target);
359
+ else {
360
+ try {
361
+ items = JSON.parse(fs.readFileSync(target, "utf-8")).items;
362
+ }
363
+ catch (err) {
364
+ console.error(c.red(`Error: ${inventory} is not an inventory.json (${err.message}).`));
365
+ process.exit(1);
366
+ }
367
+ if (!Array.isArray(items)) {
368
+ console.error(c.red(`Error: ${inventory} has no items list.`));
369
+ process.exit(1);
370
+ }
371
+ }
372
+ const r = coverage(ast, items, root);
373
+ for (const line of renderCoverage(r))
374
+ console.log(` ${line}`);
375
+ console.log("");
376
+ return r.missing.length === 0;
377
+ }
300
378
  /**
301
379
  * Show the correct form for what just failed.
302
380
  *
@@ -335,10 +413,19 @@ function cmdScaffold(filePath, targetName, dryRun, outputDir, force, prune, allo
335
413
  }
336
414
  const binding = bindings[targetName];
337
415
  if (!binding) {
338
- console.error(c.red(`Unknown target: "${targetName}"`));
339
- console.error(`Available targets: ${Object.keys(bindings).join(", ")}`);
416
+ if (REMOVED_TARGETS.includes(targetName)) {
417
+ console.error(c.red(`Target "${targetName}" was removed in 0.10.0: Claude Code is the supported target.`));
418
+ console.error(`Use agentopology 0.9.x for ${targetName}, or one of: ${Object.keys(bindings).join(", ")}`);
419
+ }
420
+ else {
421
+ console.error(c.red(`Unknown target: "${targetName}"`));
422
+ console.error(`Available targets: ${Object.keys(bindings).join(", ")}`);
423
+ }
340
424
  process.exit(1);
341
425
  }
426
+ if (binding.experimental) {
427
+ console.warn(c.yellow(` ${targetName} is experimental: not verified against the platform the way claude-code is.`));
428
+ }
342
429
  // Never compile what does not validate: fields the validator rejects can
343
430
  // vanish silently in the output. --allow-invalid compiles anyway. It used to
344
431
  // be --force, which also overwrites kept files: one flag, two risks.
@@ -358,6 +445,10 @@ function cmdScaffold(filePath, targetName, dryRun, outputDir, force, prune, allo
358
445
  }
359
446
  console.log(c.bold(`Scaffolding ${ast.topology.name} for ${binding.description}`));
360
447
  console.log("");
448
+ if (targetName === "claude-code") {
449
+ console.log(c.dim(` ${verifiedOnLine()}`));
450
+ console.log("");
451
+ }
361
452
  const files = binding.scaffold(ast);
362
453
  if (files.length === 0) {
363
454
  console.log(c.yellow(" No files generated."));
@@ -996,11 +1087,15 @@ function cmdImport(targetName, dirPath, topologyName, outputDir) {
996
1087
  }
997
1088
  console.log("");
998
1089
  }
1090
+ /** Targets removed in 0.10.0, named so the error says so instead of "unknown". */
1091
+ const REMOVED_TARGETS = ["gemini-cli", "copilot-cli", "openclaw", "kiro"];
999
1092
  function cmdTargets() {
1000
1093
  console.log(c.bold("Available binding targets:"));
1001
1094
  console.log("");
1002
1095
  for (const [name, binding] of Object.entries(bindings)) {
1003
- console.log(` ${c.cyan(name.padEnd(16))} ${binding.description}`);
1096
+ const label = binding.experimental ? c.yellow(" (experimental)") : "";
1097
+ const verified = name === "claude-code" ? c.dim(` — ${verifiedOnLine()}`) : "";
1098
+ console.log(` ${c.cyan(name.padEnd(16))} ${binding.description}${label}${verified}`);
1004
1099
  }
1005
1100
  console.log("");
1006
1101
  }
@@ -1012,6 +1107,92 @@ function cmdTargets() {
1012
1107
  * removing it (after implementing the script) flips the file out of stub
1013
1108
  * state. Designed for CI: exits 1 if stubs remain, 0 if clean.
1014
1109
  */
1110
+ function cmdGuardCheck(filePath, dirPath) {
1111
+ const source = fs.readFileSync(path.resolve(filePath), "utf-8");
1112
+ const ast = parse(source);
1113
+ const root = path.resolve(dirPath);
1114
+ const report = checkGuards(ast, root);
1115
+ console.log(`guard --check ${filePath} (project: ${dirPath})`);
1116
+ console.log("");
1117
+ for (const line of renderGuardReport(report))
1118
+ console.log(line);
1119
+ process.exit(report.missing > 0 ? 1 : 0);
1120
+ }
1121
+ /**
1122
+ * `guard <file> --target claude-code`: write only the guard part of scaffold's
1123
+ * output (see src/guard/target.ts), print what was written or kept, then run
1124
+ * the `--check` report and exit like it.
1125
+ */
1126
+ function cmdGuardTarget(filePath, targetName, dirPath, dryRun) {
1127
+ if (targetName !== "claude-code") {
1128
+ console.error(c.red(`Error: guard --target supports claude-code only (got "${targetName}").`));
1129
+ process.exit(1);
1130
+ }
1131
+ const source = readFile(filePath);
1132
+ let ast;
1133
+ try {
1134
+ ast = parse(source);
1135
+ }
1136
+ catch (err) {
1137
+ console.error(c.red(`Parse error: ${err.message}`));
1138
+ process.exit(1);
1139
+ }
1140
+ const errors = validate(ast).filter((r) => r.level === "error");
1141
+ if (errors.length > 0) {
1142
+ console.error(c.red(` ${errors.length} validation error(s). Nothing was written.`));
1143
+ for (const e of errors.slice(0, 5))
1144
+ console.error(` ${c.red(`[${e.rule}]`)}${e.line ? ` line ${e.line}:` : ""} ${e.message}`);
1145
+ process.exit(1);
1146
+ }
1147
+ const root = path.resolve(dirPath);
1148
+ const name = path.basename(filePath);
1149
+ const plan = planGuardTarget(ast, root, name);
1150
+ const unsafe = plan.actions.filter((a) => a.type === "blocked" && a.unsafe);
1151
+ if (unsafe.length > 0) {
1152
+ console.error(c.red(` Refusing to write: ${unsafe.length} generated path(s) are not safe file names. Nothing was written.`));
1153
+ process.exit(1);
1154
+ }
1155
+ console.log(c.bold(`guard --target ${targetName} ${filePath} (project: ${dirPath})${dryRun ? c.cyan(" — dry run, nothing is written") : ""}`));
1156
+ console.log(c.dim(` ${verifiedOnLine()}`));
1157
+ console.log("");
1158
+ for (const a of plan.actions) {
1159
+ if (a.type === "create")
1160
+ console.log(` ${c.green("+")} ${a.path}`);
1161
+ else if (a.type === "update") {
1162
+ console.log(` ${c.yellow("~")} ${a.path} (${a.detail})`);
1163
+ if (dryRun) {
1164
+ for (const line of jsonChanges(fs.readFileSync(path.join(root, a.path), "utf-8"), a.content))
1165
+ console.log(` ${c.dim(line)}`);
1166
+ }
1167
+ }
1168
+ else if (a.type === "unchanged")
1169
+ console.log(` ${c.dim("=")} ${a.path}`);
1170
+ }
1171
+ for (const s of plan.skipped)
1172
+ console.log(` ${c.bold("!")} ${s.path} (${s.why})`);
1173
+ console.log("");
1174
+ if (dryRun) {
1175
+ const writes = plan.actions.filter((a) => a.type === "create" || a.type === "update").length;
1176
+ console.log(` ${writes} file(s) would be written, ${plan.skipped.length} kept.`);
1177
+ return;
1178
+ }
1179
+ let result;
1180
+ try {
1181
+ result = applyGuardTarget(plan, root, name, source);
1182
+ }
1183
+ catch (err) {
1184
+ console.error(c.red(` Could not write: ${err.message}`));
1185
+ process.exit(1);
1186
+ }
1187
+ console.log(` ${result.created} created, ${result.updated} updated, ${result.unchanged} unchanged, ${plan.skipped.length} kept`);
1188
+ if (result.failures.length > 0) {
1189
+ for (const f of result.failures)
1190
+ console.error(` ${c.red("✗")} ${f.path} — ${f.error}`);
1191
+ process.exit(1);
1192
+ }
1193
+ console.log("");
1194
+ cmdGuardCheck(filePath, dirPath);
1195
+ }
1015
1196
  function cmdStubs(dirPath) {
1016
1197
  const resolved = path.resolve(dirPath);
1017
1198
  if (!fs.existsSync(resolved)) {
@@ -1071,7 +1252,10 @@ function main() {
1071
1252
  usage();
1072
1253
  process.exit(1);
1073
1254
  }
1074
- cmdValidate(args.file);
1255
+ cmdValidate(args.file, args.inventory, args.dir);
1256
+ break;
1257
+ case "inventory":
1258
+ console.log(JSON.stringify({ version: 1, items: collectInventory(path.resolve(args.file ?? args.dir ?? ".")) }, null, 2));
1075
1259
  break;
1076
1260
  case "scaffold":
1077
1261
  if (!args.file) {
@@ -1165,6 +1349,36 @@ function main() {
1165
1349
  case "targets":
1166
1350
  cmdTargets();
1167
1351
  break;
1352
+ case "guard": {
1353
+ if (!args.file) {
1354
+ console.error(c.red("Error: guard requires a file argument."));
1355
+ process.exit(1);
1356
+ }
1357
+ if (args.target) {
1358
+ cmdGuardTarget(args.file, args.target, args.dir ?? ".", args.dryRun);
1359
+ break;
1360
+ }
1361
+ if (!args.check) {
1362
+ console.error(c.red("Error: guard needs --check (read-only report) or --target claude-code (write the guards)."));
1363
+ process.exit(1);
1364
+ }
1365
+ cmdGuardCheck(args.file, args.dir ?? ".");
1366
+ break;
1367
+ }
1368
+ case "step": {
1369
+ // `agentopology step check <file.at> <step-id> [--unit U] [--dir D]`
1370
+ const rest = process.argv.slice(2);
1371
+ const sub = rest[rest.indexOf("step") + 1];
1372
+ const a = parseStepArgs(rest.slice(rest.indexOf("step") + 2));
1373
+ if (sub !== "check" || !a.file || !a.step) {
1374
+ console.error(c.red("Usage: agentopology step check <file.at> <step-id> [--unit U] [--dir D]"));
1375
+ process.exit(1);
1376
+ }
1377
+ const report = checkStep(parse(readFile(a.file)), a.step, { unit: a.unit, dir: a.dir ?? "." });
1378
+ for (const line of renderStepReport(report))
1379
+ (report.ok ? console.log : console.error)(line);
1380
+ process.exit(report.ok ? 0 : 1);
1381
+ }
1168
1382
  case "stubs": {
1169
1383
  // `agentopology stubs [<dir>]` — scan for unimplemented scaffold stubs.
1170
1384
  // Default to the current working directory if no path given.