autodocs-engine 0.5.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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/analysis-builder.d.ts +13 -0
  4. package/dist/analysis-builder.js +268 -0
  5. package/dist/analysis-builder.js.map +1 -0
  6. package/dist/anti-pattern-detector.d.ts +9 -0
  7. package/dist/anti-pattern-detector.js +58 -0
  8. package/dist/anti-pattern-detector.js.map +1 -0
  9. package/dist/architecture-detector.d.ts +7 -0
  10. package/dist/architecture-detector.js +212 -0
  11. package/dist/architecture-detector.js.map +1 -0
  12. package/dist/ast-parser.d.ts +5 -0
  13. package/dist/ast-parser.js +635 -0
  14. package/dist/ast-parser.js.map +1 -0
  15. package/dist/benchmark/code-generator.d.ts +20 -0
  16. package/dist/benchmark/code-generator.js +206 -0
  17. package/dist/benchmark/code-generator.js.map +1 -0
  18. package/dist/benchmark/pr-miner.d.ts +61 -0
  19. package/dist/benchmark/pr-miner.js +304 -0
  20. package/dist/benchmark/pr-miner.js.map +1 -0
  21. package/dist/benchmark/pr-runner.d.ts +58 -0
  22. package/dist/benchmark/pr-runner.js +346 -0
  23. package/dist/benchmark/pr-runner.js.map +1 -0
  24. package/dist/benchmark/pr-scorer.d.ts +48 -0
  25. package/dist/benchmark/pr-scorer.js +222 -0
  26. package/dist/benchmark/pr-scorer.js.map +1 -0
  27. package/dist/benchmark/pr-task-gen.d.ts +16 -0
  28. package/dist/benchmark/pr-task-gen.js +129 -0
  29. package/dist/benchmark/pr-task-gen.js.map +1 -0
  30. package/dist/benchmark/report.d.ts +9 -0
  31. package/dist/benchmark/report.js +131 -0
  32. package/dist/benchmark/report.js.map +1 -0
  33. package/dist/benchmark/runner.d.ts +6 -0
  34. package/dist/benchmark/runner.js +183 -0
  35. package/dist/benchmark/runner.js.map +1 -0
  36. package/dist/benchmark/scorer.d.ts +6 -0
  37. package/dist/benchmark/scorer.js +549 -0
  38. package/dist/benchmark/scorer.js.map +1 -0
  39. package/dist/benchmark/shuffler.d.ts +5 -0
  40. package/dist/benchmark/shuffler.js +70 -0
  41. package/dist/benchmark/shuffler.js.map +1 -0
  42. package/dist/benchmark/statistics.d.ts +36 -0
  43. package/dist/benchmark/statistics.js +159 -0
  44. package/dist/benchmark/statistics.js.map +1 -0
  45. package/dist/benchmark/task-generator.d.ts +20 -0
  46. package/dist/benchmark/task-generator.js +388 -0
  47. package/dist/benchmark/task-generator.js.map +1 -0
  48. package/dist/benchmark/types.d.ts +111 -0
  49. package/dist/benchmark/types.js +3 -0
  50. package/dist/benchmark/types.js.map +1 -0
  51. package/dist/bin/autodocs-engine.d.ts +2 -0
  52. package/dist/bin/autodocs-engine.js +296 -0
  53. package/dist/bin/autodocs-engine.js.map +1 -0
  54. package/dist/bin/benchmark.d.ts +14 -0
  55. package/dist/bin/benchmark.js +172 -0
  56. package/dist/bin/benchmark.js.map +1 -0
  57. package/dist/bin/check.d.ts +13 -0
  58. package/dist/bin/check.js +79 -0
  59. package/dist/bin/check.js.map +1 -0
  60. package/dist/bin/init.d.ts +11 -0
  61. package/dist/bin/init.js +268 -0
  62. package/dist/bin/init.js.map +1 -0
  63. package/dist/bin/serve.d.ts +4 -0
  64. package/dist/bin/serve.js +29 -0
  65. package/dist/bin/serve.js.map +1 -0
  66. package/dist/budget-validator.d.ts +22 -0
  67. package/dist/budget-validator.js +119 -0
  68. package/dist/budget-validator.js.map +1 -0
  69. package/dist/command-extractor.d.ts +10 -0
  70. package/dist/command-extractor.js +276 -0
  71. package/dist/command-extractor.js.map +1 -0
  72. package/dist/config-analyzer.d.ts +5 -0
  73. package/dist/config-analyzer.js +364 -0
  74. package/dist/config-analyzer.js.map +1 -0
  75. package/dist/config.d.ts +33 -0
  76. package/dist/config.js +172 -0
  77. package/dist/config.js.map +1 -0
  78. package/dist/contribution-patterns.d.ts +6 -0
  79. package/dist/contribution-patterns.js +263 -0
  80. package/dist/contribution-patterns.js.map +1 -0
  81. package/dist/convention-extractor.d.ts +17 -0
  82. package/dist/convention-extractor.js +90 -0
  83. package/dist/convention-extractor.js.map +1 -0
  84. package/dist/cross-package.d.ts +5 -0
  85. package/dist/cross-package.js +71 -0
  86. package/dist/cross-package.js.map +1 -0
  87. package/dist/dependency-analyzer.d.ts +5 -0
  88. package/dist/dependency-analyzer.js +233 -0
  89. package/dist/dependency-analyzer.js.map +1 -0
  90. package/dist/detectors/build-tool.d.ts +2 -0
  91. package/dist/detectors/build-tool.js +67 -0
  92. package/dist/detectors/build-tool.js.map +1 -0
  93. package/dist/detectors/component-patterns.d.ts +2 -0
  94. package/dist/detectors/component-patterns.js +49 -0
  95. package/dist/detectors/component-patterns.js.map +1 -0
  96. package/dist/detectors/data-fetching.d.ts +2 -0
  97. package/dist/detectors/data-fetching.js +127 -0
  98. package/dist/detectors/data-fetching.js.map +1 -0
  99. package/dist/detectors/database.d.ts +2 -0
  100. package/dist/detectors/database.js +54 -0
  101. package/dist/detectors/database.js.map +1 -0
  102. package/dist/detectors/error-handling.d.ts +2 -0
  103. package/dist/detectors/error-handling.js +47 -0
  104. package/dist/detectors/error-handling.js.map +1 -0
  105. package/dist/detectors/export-patterns.d.ts +2 -0
  106. package/dist/detectors/export-patterns.js +64 -0
  107. package/dist/detectors/export-patterns.js.map +1 -0
  108. package/dist/detectors/file-naming.d.ts +2 -0
  109. package/dist/detectors/file-naming.js +74 -0
  110. package/dist/detectors/file-naming.js.map +1 -0
  111. package/dist/detectors/graphql-patterns.d.ts +2 -0
  112. package/dist/detectors/graphql-patterns.js +47 -0
  113. package/dist/detectors/graphql-patterns.js.map +1 -0
  114. package/dist/detectors/hook-patterns.d.ts +2 -0
  115. package/dist/detectors/hook-patterns.js +105 -0
  116. package/dist/detectors/hook-patterns.js.map +1 -0
  117. package/dist/detectors/import-patterns.d.ts +2 -0
  118. package/dist/detectors/import-patterns.js +88 -0
  119. package/dist/detectors/import-patterns.js.map +1 -0
  120. package/dist/detectors/telemetry-patterns.d.ts +2 -0
  121. package/dist/detectors/telemetry-patterns.js +42 -0
  122. package/dist/detectors/telemetry-patterns.js.map +1 -0
  123. package/dist/detectors/test-framework-ecosystem.d.ts +2 -0
  124. package/dist/detectors/test-framework-ecosystem.js +95 -0
  125. package/dist/detectors/test-framework-ecosystem.js.map +1 -0
  126. package/dist/detectors/test-patterns.d.ts +2 -0
  127. package/dist/detectors/test-patterns.js +60 -0
  128. package/dist/detectors/test-patterns.js.map +1 -0
  129. package/dist/detectors/web-framework.d.ts +2 -0
  130. package/dist/detectors/web-framework.js +51 -0
  131. package/dist/detectors/web-framework.js.map +1 -0
  132. package/dist/deterministic-formatter.d.ts +54 -0
  133. package/dist/deterministic-formatter.js +922 -0
  134. package/dist/deterministic-formatter.js.map +1 -0
  135. package/dist/diff-analyzer.d.ts +7 -0
  136. package/dist/diff-analyzer.js +126 -0
  137. package/dist/diff-analyzer.js.map +1 -0
  138. package/dist/example-extractor.d.ts +6 -0
  139. package/dist/example-extractor.js +115 -0
  140. package/dist/example-extractor.js.map +1 -0
  141. package/dist/existing-docs.d.ts +36 -0
  142. package/dist/existing-docs.js +257 -0
  143. package/dist/existing-docs.js.map +1 -0
  144. package/dist/file-discovery.d.ts +6 -0
  145. package/dist/file-discovery.js +154 -0
  146. package/dist/file-discovery.js.map +1 -0
  147. package/dist/git-history.d.ts +41 -0
  148. package/dist/git-history.js +401 -0
  149. package/dist/git-history.js.map +1 -0
  150. package/dist/impact-classifier.d.ts +22 -0
  151. package/dist/impact-classifier.js +87 -0
  152. package/dist/impact-classifier.js.map +1 -0
  153. package/dist/impact-radius.d.ts +23 -0
  154. package/dist/impact-radius.js +130 -0
  155. package/dist/impact-radius.js.map +1 -0
  156. package/dist/import-chain.d.ts +12 -0
  157. package/dist/import-chain.js +93 -0
  158. package/dist/import-chain.js.map +1 -0
  159. package/dist/index.d.ts +40 -0
  160. package/dist/index.js +72 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/inferability.d.ts +16 -0
  163. package/dist/inferability.js +142 -0
  164. package/dist/inferability.js.map +1 -0
  165. package/dist/llm/adapter.d.ts +33 -0
  166. package/dist/llm/adapter.js +202 -0
  167. package/dist/llm/adapter.js.map +1 -0
  168. package/dist/llm/client.d.ts +5 -0
  169. package/dist/llm/client.js +68 -0
  170. package/dist/llm/client.js.map +1 -0
  171. package/dist/llm/hierarchical.d.ts +23 -0
  172. package/dist/llm/hierarchical.js +126 -0
  173. package/dist/llm/hierarchical.js.map +1 -0
  174. package/dist/llm/serializer.d.ts +19 -0
  175. package/dist/llm/serializer.js +363 -0
  176. package/dist/llm/serializer.js.map +1 -0
  177. package/dist/llm/template-selector.d.ts +7 -0
  178. package/dist/llm/template-selector.js +21 -0
  179. package/dist/llm/template-selector.js.map +1 -0
  180. package/dist/llm-adapter.d.ts +2 -0
  181. package/dist/llm-adapter.js +5 -0
  182. package/dist/llm-adapter.js.map +1 -0
  183. package/dist/mcp/cache.d.ts +30 -0
  184. package/dist/mcp/cache.js +112 -0
  185. package/dist/mcp/cache.js.map +1 -0
  186. package/dist/mcp/errors.d.ts +21 -0
  187. package/dist/mcp/errors.js +27 -0
  188. package/dist/mcp/errors.js.map +1 -0
  189. package/dist/mcp/queries.d.ts +27 -0
  190. package/dist/mcp/queries.js +121 -0
  191. package/dist/mcp/queries.js.map +1 -0
  192. package/dist/mcp/server.d.ts +14 -0
  193. package/dist/mcp/server.js +131 -0
  194. package/dist/mcp/server.js.map +1 -0
  195. package/dist/mcp/tools.d.ts +39 -0
  196. package/dist/mcp/tools.js +249 -0
  197. package/dist/mcp/tools.js.map +1 -0
  198. package/dist/mermaid-generator.d.ts +6 -0
  199. package/dist/mermaid-generator.js +59 -0
  200. package/dist/mermaid-generator.js.map +1 -0
  201. package/dist/meta-tool-detector.d.ts +23 -0
  202. package/dist/meta-tool-detector.js +177 -0
  203. package/dist/meta-tool-detector.js.map +1 -0
  204. package/dist/output-validator.d.ts +6 -0
  205. package/dist/output-validator.js +471 -0
  206. package/dist/output-validator.js.map +1 -0
  207. package/dist/pattern-fingerprinter.d.ts +7 -0
  208. package/dist/pattern-fingerprinter.js +241 -0
  209. package/dist/pattern-fingerprinter.js.map +1 -0
  210. package/dist/pipeline.d.ts +5 -0
  211. package/dist/pipeline.js +374 -0
  212. package/dist/pipeline.js.map +1 -0
  213. package/dist/plugin-loader.d.ts +19 -0
  214. package/dist/plugin-loader.js +124 -0
  215. package/dist/plugin-loader.js.map +1 -0
  216. package/dist/role-inferrer.d.ts +5 -0
  217. package/dist/role-inferrer.js +159 -0
  218. package/dist/role-inferrer.js.map +1 -0
  219. package/dist/symbol-graph.d.ts +11 -0
  220. package/dist/symbol-graph.js +613 -0
  221. package/dist/symbol-graph.js.map +1 -0
  222. package/dist/templates/agents-md.d.ts +20 -0
  223. package/dist/templates/agents-md.js +346 -0
  224. package/dist/templates/agents-md.js.map +1 -0
  225. package/dist/templates/claude-md.d.ts +4 -0
  226. package/dist/templates/claude-md.js +23 -0
  227. package/dist/templates/claude-md.js.map +1 -0
  228. package/dist/templates/cursorrules.d.ts +4 -0
  229. package/dist/templates/cursorrules.js +18 -0
  230. package/dist/templates/cursorrules.js.map +1 -0
  231. package/dist/tier-classifier.d.ts +7 -0
  232. package/dist/tier-classifier.js +32 -0
  233. package/dist/tier-classifier.js.map +1 -0
  234. package/dist/types.d.ts +428 -0
  235. package/dist/types.js +42 -0
  236. package/dist/types.js.map +1 -0
  237. package/dist/workflow-rules.d.ts +18 -0
  238. package/dist/workflow-rules.js +131 -0
  239. package/dist/workflow-rules.js.map +1 -0
  240. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-analyzer.js","sourceRoot":"","sources":["../src/config-analyzer.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gFAAgF;AAChF,4EAA4E;AAE5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAkB,EAClB,OAAgB,EAChB,WAAsB,EAAE;IAExB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,qDAAqD;IACrD,MAAM,CAAC,UAAU,GAAG,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEzE,+CAA+C;IAC/C,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAElE,SAAS;IACT,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5D,YAAY;IACZ,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAElE,mCAAmC;IACnC,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEpE,wBAAwB;IACxB,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAE/E,SAAS,qBAAqB,CAC5B,UAAkB,EAClB,OAAgB,EAChB,WAAsB,EAAE;IAExB,qCAAqC;IACrC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;QACjC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QAEtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,8DAA8D;YAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;YAExC,OAAO;gBACL,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,KAAK;gBAC1B,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS;gBAC9B,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS;gBAC9B,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,IAAI,SAAS;gBAClD,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;gBAC5B,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,SAAS;aACzB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,mBAAmB,UAAU,EAAE;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAE/E,SAAS,eAAe,CACtB,UAAkB,EAClB,OAAgB,EAChB,WAAsB,EAAE;IAExB,qCAAqC;IACrC,MAAM,cAAc,GAAG;QACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;KAC/B,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEnC,8DAA8D;YAC9D,iEAAiE;YACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEpG,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,SAAS;gBACT,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC3E,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,iCAAiC,SAAS,EAAE;aACtD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,WAAW,GAAG;QAClB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;KAC5B,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;YAE/B,4CAA4C;YAC5C,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,0CAA0C;YAC1C,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,qEAAqE;YACvE,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,SAAS;gBACT,UAAU,EAAE,SAAS;aACtB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,iBAAiB;gBACzB,OAAO,EAAE,8BAA8B,MAAM,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,cAAc,GAAG;QACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;KAC/B,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,YAAY;aACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAE/E,SAAS,cAAc,CACrB,GAAW;IAEX,QAAQ;IACR,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,CAAC;QACjD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,SAAS;IACT,MAAM,WAAW,GAAG;QAClB,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB;QAChF,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW;KAClG,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CACnB,UAAkB,EAClB,OAAgB,EAChB,YAAuB,EAAE;IAEzB,gEAAgE;IAChE,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,oBAAoB;IACpB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAE/E,SAAS,iBAAiB,CACxB,GAAW;IAEX,QAAQ;IACR,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,CAAC;QACjD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;oBACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IACD,WAAW;IACX,MAAM,aAAa,GAAG;QACpB,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB;QACzF,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB;QACzD,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB;KACnE,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CACtB,UAAkB,EAClB,OAAgB,EAChB,YAAuB,EAAE;IAEzB,gEAAgE;IAChE,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,oBAAoB;IACpB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAE/E,SAAS,gBAAgB,CACvB,UAAkB,EAClB,OAAgB,EAChB,YAAuB,EAAE;IAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAE5D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,WAAW;QACX,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEhC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,WAAW;QACX,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEhC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,gFAAgF;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC1E,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,4DAA4D;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC3D,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAE/E,SAAS,aAAa,CAAC,UAAkB,EAAE,OAAgB;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;IAExF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEhC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAa,EAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBACvD,IAAI,KAAK;wBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAE/E;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzB,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChB,eAAe,GAAG,KAAK,CAAC;gBACxB,MAAM,IAAI,EAAE,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC/B,cAAc,GAAG,KAAK,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACtC,eAAe,GAAG,IAAI,CAAC;YACvB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACtC,cAAc,GAAG,IAAI,CAAC;YACtB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { ResolvedConfig, Warning } from "./types.js";
2
+ export type LLMSynthesisMode = "deterministic" | "full";
3
+ export interface ParsedArgs {
4
+ packages: string[];
5
+ format?: string;
6
+ output?: string;
7
+ config?: string;
8
+ root?: string;
9
+ quiet: boolean;
10
+ verbose: boolean;
11
+ dryRun: boolean;
12
+ help: boolean;
13
+ hierarchical?: boolean;
14
+ flat?: boolean;
15
+ merge?: boolean;
16
+ diff?: string;
17
+ llmSynthesis?: LLMSynthesisMode;
18
+ noMetaTool?: boolean;
19
+ saveBaseline?: boolean;
20
+ minimal?: boolean;
21
+ full?: boolean;
22
+ model?: string;
23
+ maxTasks?: number;
24
+ benchmarkMode?: "synthetic" | "pr";
25
+ }
26
+ /**
27
+ * Resolve config from CLI args, config file, and defaults.
28
+ */
29
+ export declare function resolveConfig(args: ParsedArgs, warnings?: Warning[]): ResolvedConfig;
30
+ /**
31
+ * E-37: Parse CLI args using mri.
32
+ */
33
+ export declare function parseCliArgs(argv: string[]): Promise<ParsedArgs>;
package/dist/config.js ADDED
@@ -0,0 +1,172 @@
1
+ // src/config.ts — Config Resolver
2
+ // Errata applied: E-37 (mri for arg parsing), E-38 (warn if API key in config file)
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { resolve, join } from "node:path";
5
+ const DEFAULTS = {
6
+ packages: ["."],
7
+ exclude: [],
8
+ rootDir: undefined,
9
+ output: {
10
+ format: "json",
11
+ dir: ".",
12
+ },
13
+ llm: {
14
+ provider: "anthropic",
15
+ model: process.env.AUTODOCS_LLM_MODEL ?? "claude-opus-4-20250514",
16
+ maxOutputTokens: 4096, // E-7
17
+ },
18
+ conventions: {
19
+ disable: [],
20
+ },
21
+ maxPublicAPIEntries: 100, // E-13
22
+ verbose: false,
23
+ metaToolThreshold: 5,
24
+ noMetaTool: false,
25
+ };
26
+ /**
27
+ * Resolve config from CLI args, config file, and defaults.
28
+ */
29
+ export function resolveConfig(args, warnings = []) {
30
+ // Load config file
31
+ const fileConfig = loadConfigFile(args.config, warnings);
32
+ // Merge: defaults ← fileConfig ← CLI args
33
+ const config = {
34
+ ...DEFAULTS,
35
+ ...fileConfig,
36
+ packages: args.packages.length > 0
37
+ ? args.packages.map((p) => resolve(p))
38
+ : fileConfig?.packages?.map((p) => resolve(p)) ??
39
+ DEFAULTS.packages.map((p) => resolve(p)),
40
+ exclude: fileConfig?.exclude ?? DEFAULTS.exclude,
41
+ rootDir: args.root ? resolve(args.root) : fileConfig?.rootDir ? resolve(fileConfig.rootDir) : undefined,
42
+ output: {
43
+ format: args.format ??
44
+ fileConfig?.output?.format ??
45
+ DEFAULTS.output.format,
46
+ dir: args.output ?? fileConfig?.output?.dir ?? DEFAULTS.output.dir,
47
+ },
48
+ llm: {
49
+ ...DEFAULTS.llm,
50
+ ...fileConfig?.llm,
51
+ apiKey: process.env.ANTHROPIC_API_KEY ??
52
+ process.env.OPENAI_API_KEY ??
53
+ fileConfig?.llm?.apiKey,
54
+ },
55
+ conventions: {
56
+ disable: fileConfig?.conventions?.disable ?? DEFAULTS.conventions.disable,
57
+ },
58
+ maxPublicAPIEntries: fileConfig?.maxPublicAPIEntries ?? DEFAULTS.maxPublicAPIEntries,
59
+ verbose: args.verbose,
60
+ metaToolThreshold: fileConfig?.metaToolThreshold ?? DEFAULTS.metaToolThreshold,
61
+ noMetaTool: args.noMetaTool ?? fileConfig?.noMetaTool ?? DEFAULTS.noMetaTool,
62
+ };
63
+ // Decision #11: Auto-detect format based on API key availability
64
+ if (!args.format && !fileConfig?.output?.format) {
65
+ config.output.format = config.llm.apiKey ? "agents.md" : "json";
66
+ }
67
+ // Validate: LLM format requires API key
68
+ if (config.output.format !== "json" &&
69
+ !config.llm.apiKey &&
70
+ !args.dryRun) {
71
+ warnings.push({
72
+ level: "warn",
73
+ module: "config",
74
+ message: `Format "${config.output.format}" requires an API key. Set ANTHROPIC_API_KEY or use --format json.`,
75
+ });
76
+ }
77
+ return config;
78
+ }
79
+ function loadConfigFile(configPath, warnings) {
80
+ // Explicit config path
81
+ if (configPath) {
82
+ const absPath = resolve(configPath);
83
+ if (!existsSync(absPath)) {
84
+ warnings.push({
85
+ level: "warn",
86
+ module: "config",
87
+ message: `Config file not found: ${configPath}`,
88
+ });
89
+ return null;
90
+ }
91
+ return parseConfigFile(absPath, warnings);
92
+ }
93
+ // Search for config file
94
+ const cwd = process.cwd();
95
+ // autodocs.config.json
96
+ const jsonConfig = join(cwd, "autodocs.config.json");
97
+ if (existsSync(jsonConfig)) {
98
+ return parseConfigFile(jsonConfig, warnings);
99
+ }
100
+ // autodocs key in package.json
101
+ const pkgJson = join(cwd, "package.json");
102
+ if (existsSync(pkgJson)) {
103
+ try {
104
+ const pkg = JSON.parse(readFileSync(pkgJson, "utf-8"));
105
+ if (pkg.autodocs)
106
+ return pkg.autodocs;
107
+ }
108
+ catch {
109
+ // Invalid package.json
110
+ }
111
+ }
112
+ return null;
113
+ }
114
+ function parseConfigFile(filePath, warnings) {
115
+ try {
116
+ const content = readFileSync(filePath, "utf-8");
117
+ const parsed = JSON.parse(content);
118
+ // E-38: Warn if API key found in config file
119
+ if (parsed?.llm?.apiKey) {
120
+ warnings.push({
121
+ level: "warn",
122
+ module: "config",
123
+ message: "API keys should not be stored in config files. Use ANTHROPIC_API_KEY environment variable instead.",
124
+ });
125
+ }
126
+ return parsed;
127
+ }
128
+ catch (err) {
129
+ const msg = err instanceof Error ? err.message : String(err);
130
+ warnings.push({
131
+ level: "warn",
132
+ module: "config",
133
+ message: `Failed to parse config file ${filePath}: ${msg}`,
134
+ });
135
+ return null;
136
+ }
137
+ }
138
+ /**
139
+ * E-37: Parse CLI args using mri.
140
+ */
141
+ export async function parseCliArgs(argv) {
142
+ const mri = (await import("mri")).default;
143
+ const args = mri(argv, {
144
+ alias: { f: "format", o: "output", c: "config", q: "quiet", v: "verbose" },
145
+ boolean: ["dry-run", "quiet", "verbose", "help", "hierarchical", "flat", "merge", "no-meta-tool", "save-baseline", "full", "minimal"],
146
+ string: ["format", "output", "config", "root", "diff", "llm-synthesis", "model", "max-tasks", "mode"],
147
+ });
148
+ return {
149
+ packages: args._,
150
+ format: args.format,
151
+ output: args.output,
152
+ config: args.config,
153
+ root: args.root,
154
+ quiet: args.quiet ?? false,
155
+ verbose: args.verbose ?? false,
156
+ dryRun: args["dry-run"] ?? false,
157
+ help: args.help ?? false,
158
+ hierarchical: args.hierarchical ?? undefined,
159
+ flat: args.flat ?? undefined,
160
+ merge: args.merge ?? undefined,
161
+ diff: args.diff ?? undefined,
162
+ llmSynthesis: args["llm-synthesis"] ?? undefined,
163
+ noMetaTool: args["no-meta-tool"] ?? undefined,
164
+ saveBaseline: args["save-baseline"] ?? undefined,
165
+ minimal: args.minimal ?? undefined,
166
+ full: args.full ?? undefined,
167
+ model: args.model ?? undefined,
168
+ maxTasks: args["max-tasks"] ? parseInt(args["max-tasks"], 10) : undefined,
169
+ benchmarkMode: (args.mode === "pr" || args.mode === "synthetic") ? args.mode : undefined,
170
+ };
171
+ }
172
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ParsedFile, PublicAPIEntry, TierInfo, DirectoryInfo, ContributionPattern } from "./types.js";
2
+ /**
3
+ * Detect contribution patterns from the analyzed package structure.
4
+ * Examines T1 and T2 files (not just T1) to surface internal patterns like detectors.
5
+ */
6
+ export declare function detectContributionPatterns(parsedFiles: ParsedFile[], publicAPI: PublicAPIEntry[], tiers: Map<string, TierInfo>, directories: DirectoryInfo[], barrelFile: string | undefined): ContributionPattern[];
@@ -0,0 +1,263 @@
1
+ // src/contribution-patterns.ts — Contribution Pattern Detection
2
+ // Detects "how to add new code" patterns from existing directory structure.
3
+ // Deep patterns: analyzes common imports, export naming, and registration files.
4
+ const COMMON_IMPORT_THRESHOLD = 0.8; // ≥80% of siblings must share the import
5
+ const MAX_COMMON_IMPORT_SYMBOLS = 5;
6
+ /**
7
+ * Detect contribution patterns from the analyzed package structure.
8
+ * Examines T1 and T2 files (not just T1) to surface internal patterns like detectors.
9
+ */
10
+ export function detectContributionPatterns(parsedFiles, publicAPI, tiers, directories, barrelFile) {
11
+ const patterns = [];
12
+ // Group T1 and T2 files by directory (skip T3: test/generated)
13
+ const filesByDir = new Map();
14
+ for (const pf of parsedFiles) {
15
+ const tier = tiers.get(pf.relativePath);
16
+ if (!tier || tier.tier === 3)
17
+ continue;
18
+ if (pf.isTestFile || pf.isGeneratedFile)
19
+ continue;
20
+ const dir = findParentDir(pf.relativePath, directories);
21
+ if (!dir)
22
+ continue;
23
+ const existing = filesByDir.get(dir.path) ?? [];
24
+ existing.push(pf);
25
+ filesByDir.set(dir.path, existing);
26
+ }
27
+ for (const [dirPath, files] of filesByDir) {
28
+ if (files.length < 3)
29
+ continue;
30
+ const dirInfo = directories.find((d) => d.path === dirPath);
31
+ if (!dirInfo)
32
+ continue;
33
+ // Skip workspace-level directories that are containers for sub-packages,
34
+ // not containers for source files. These produce useless patterns like
35
+ // "add a function to packages/" which is nonsensical.
36
+ // Heuristic: if most files in this dir are deeply nested (3+ path segments
37
+ // deeper than the dir itself), it's a workspace container, not a code dir.
38
+ const dirDepth = dirPath.split("/").filter(Boolean).length;
39
+ const deepFiles = files.filter(f => {
40
+ const fileDepth = f.relativePath.split("/").filter(Boolean).length;
41
+ return fileDepth > dirDepth + 2; // file is 3+ levels below this dir
42
+ });
43
+ if (deepFiles.length > files.length * 0.5)
44
+ continue; // >50% are deeply nested → workspace dir
45
+ // Dominant export kind
46
+ const kindCounts = new Map();
47
+ for (const pf of files) {
48
+ for (const exp of pf.exports) {
49
+ if (exp.isTypeOnly)
50
+ continue;
51
+ const kind = exp.kind === "unknown" ? "function" : exp.kind;
52
+ kindCounts.set(kind, (kindCounts.get(kind) ?? 0) + 1);
53
+ }
54
+ }
55
+ let dominantKind = "function";
56
+ let maxCount = 0;
57
+ for (const [kind, count] of kindCounts) {
58
+ if (count > maxCount) {
59
+ dominantKind = kind;
60
+ maxCount = count;
61
+ }
62
+ }
63
+ const filePattern = dirInfo.pattern ?? detectSimplePattern(files, dominantKind);
64
+ if (!filePattern)
65
+ continue;
66
+ // Co-located tests
67
+ const testFiles = parsedFiles.filter((pf) => pf.isTestFile && pf.relativePath.startsWith(dirPath + "/"));
68
+ const hasCoLocatedTests = testFiles.length >= Math.floor(files.length / 2);
69
+ let testPattern;
70
+ if (hasCoLocatedTests && testFiles.length > 0) {
71
+ testPattern = filePattern.replace(/(\.[a-z]+)$/, ".test$1");
72
+ }
73
+ // Best example file
74
+ const dirExports = publicAPI.filter((e) => e.sourceFile.startsWith(dirPath + "/"));
75
+ const bestExport = dirExports.reduce((best, exp) => ((exp.importCount ?? 0) > (best?.importCount ?? 0) ? exp : best), dirExports[0]);
76
+ const exampleFile = bestExport?.sourceFile ?? files[0].relativePath;
77
+ // ─── Deep pattern analysis ───────────────────────────────────────────
78
+ // Common imports (≥80% of siblings share this import)
79
+ const commonImports = detectCommonImports(files);
80
+ // Export naming suffix (e.g., all exports end with "Detector")
81
+ const exportSuffix = detectExportSuffix(files);
82
+ // Registration file (external file that imports most exports from this directory)
83
+ const registrationFile = detectRegistrationFile(files, dirPath, parsedFiles);
84
+ // ─── Build steps ─────────────────────────────────────────────────────
85
+ const steps = [];
86
+ steps.push(`Create \`${filePattern}\` in \`${dirPath}/\``);
87
+ // Deep: common imports
88
+ for (const imp of commonImports) {
89
+ const symbolList = imp.symbols.join(", ");
90
+ steps.push(`Import \`${symbolList}\` from \`${imp.specifier}\` (${imp.coverage}/${files.length} siblings)`);
91
+ }
92
+ // Deep: export naming convention
93
+ if (exportSuffix) {
94
+ steps.push(`Export as \`{name}${exportSuffix}\` (naming convention)`);
95
+ }
96
+ // Deep: registration
97
+ if (registrationFile) {
98
+ steps.push(`Register in \`${registrationFile}\``);
99
+ }
100
+ if (testPattern) {
101
+ steps.push(`Create co-located test file \`${testPattern}\``);
102
+ }
103
+ if (barrelFile) {
104
+ steps.push(`Add re-export to \`${barrelFile}\``);
105
+ }
106
+ patterns.push({
107
+ type: dominantKind,
108
+ directory: dirPath + "/",
109
+ filePattern,
110
+ testPattern,
111
+ exampleFile,
112
+ steps,
113
+ commonImports: commonImports.length > 0 ? commonImports : undefined,
114
+ exportSuffix: exportSuffix || undefined,
115
+ registrationFile: registrationFile || undefined,
116
+ });
117
+ }
118
+ return patterns;
119
+ }
120
+ // ─── Deep Pattern Helpers ────────────────────────────────────────────────────
121
+ /**
122
+ * Find relative imports that ≥80% of sibling files share.
123
+ */
124
+ function detectCommonImports(files) {
125
+ const importCounts = new Map();
126
+ for (const pf of files) {
127
+ // Track which specifiers this file imports (deduplicate per file)
128
+ const seenSpecifiers = new Set();
129
+ for (const imp of pf.imports) {
130
+ if (!imp.moduleSpecifier.startsWith("."))
131
+ continue;
132
+ const key = imp.moduleSpecifier;
133
+ if (seenSpecifiers.has(key))
134
+ continue;
135
+ seenSpecifiers.add(key);
136
+ const entry = importCounts.get(key) ?? { count: 0, names: new Set() };
137
+ entry.count++;
138
+ for (const name of imp.importedNames) {
139
+ if (!name.startsWith("*"))
140
+ entry.names.add(name);
141
+ }
142
+ importCounts.set(key, entry);
143
+ }
144
+ }
145
+ const threshold = Math.ceil(files.length * COMMON_IMPORT_THRESHOLD);
146
+ return [...importCounts.entries()]
147
+ .filter(([, v]) => v.count >= threshold)
148
+ .sort((a, b) => b[1].count - a[1].count)
149
+ .map(([specifier, v]) => ({
150
+ specifier,
151
+ symbols: [...v.names].slice(0, MAX_COMMON_IMPORT_SYMBOLS),
152
+ coverage: v.count,
153
+ }));
154
+ }
155
+ /**
156
+ * Find a common suffix in export names (e.g., "Detector", "Template").
157
+ * Returns the suffix if ≥80% of non-type exports share it.
158
+ */
159
+ function detectExportSuffix(files) {
160
+ const exportNames = files.flatMap((f) => f.exports.filter((e) => !e.isTypeOnly && e.name !== "default").map((e) => e.name));
161
+ if (exportNames.length < 3)
162
+ return null;
163
+ // Try common suffixes from longest to shortest
164
+ const suffixCounts = new Map();
165
+ for (const name of exportNames) {
166
+ // Extract potential suffixes (last capitalized word)
167
+ const match = name.match(/[A-Z][a-z]+$/);
168
+ if (match) {
169
+ const suffix = match[0];
170
+ suffixCounts.set(suffix, (suffixCounts.get(suffix) ?? 0) + 1);
171
+ }
172
+ }
173
+ const threshold = Math.ceil(exportNames.length * COMMON_IMPORT_THRESHOLD);
174
+ for (const [suffix, count] of [...suffixCounts.entries()].sort((a, b) => b[1] - a[1])) {
175
+ if (count >= threshold && suffix.length >= 3) {
176
+ return suffix;
177
+ }
178
+ }
179
+ return null;
180
+ }
181
+ /**
182
+ * Find a file outside this directory that imports most of the directory's exports.
183
+ * This is the "registration file" — where new items need to be added.
184
+ */
185
+ function detectRegistrationFile(dirFiles, dirPath, allFiles) {
186
+ // Collect all non-type export names from the directory
187
+ const dirExportNames = new Set();
188
+ for (const pf of dirFiles) {
189
+ for (const exp of pf.exports) {
190
+ if (!exp.isTypeOnly && exp.name !== "default" && exp.name !== "*") {
191
+ dirExportNames.add(exp.name);
192
+ }
193
+ }
194
+ }
195
+ if (dirExportNames.size < 3)
196
+ return null;
197
+ // Find external files that import from this directory
198
+ let bestFile = null;
199
+ let bestCount = 0;
200
+ for (const pf of allFiles) {
201
+ if (pf.relativePath.startsWith(dirPath + "/"))
202
+ continue; // Skip files IN the directory
203
+ if (pf.isTestFile || pf.isGeneratedFile)
204
+ continue;
205
+ let matchCount = 0;
206
+ for (const imp of pf.imports) {
207
+ for (const name of imp.importedNames) {
208
+ if (dirExportNames.has(name))
209
+ matchCount++;
210
+ }
211
+ }
212
+ if (matchCount > bestCount) {
213
+ bestCount = matchCount;
214
+ bestFile = pf.relativePath;
215
+ }
216
+ }
217
+ // Only report if the registration file references ≥50% of exports
218
+ if (bestFile && bestCount >= dirExportNames.size * 0.5) {
219
+ return bestFile;
220
+ }
221
+ return null;
222
+ }
223
+ // ─── Basic Helpers ───────────────────────────────────────────────────────────
224
+ function findParentDir(filePath, directories) {
225
+ let best;
226
+ for (const dir of directories) {
227
+ if (filePath.startsWith(dir.path + "/")) {
228
+ if (!best || dir.path.length > best.path.length) {
229
+ best = dir;
230
+ }
231
+ }
232
+ }
233
+ return best;
234
+ }
235
+ function detectSimplePattern(files, kind) {
236
+ const names = files.map((f) => {
237
+ const parts = f.relativePath.split("/");
238
+ return parts[parts.length - 1];
239
+ }).filter((n) => !n.startsWith("index."));
240
+ if (names.length < 3)
241
+ return undefined;
242
+ const extCounts = new Map();
243
+ for (const name of names) {
244
+ const match = name.match(/\.(tsx?|jsx?)$/);
245
+ if (match) {
246
+ extCounts.set("." + match[1], (extCounts.get("." + match[1]) ?? 0) + 1);
247
+ }
248
+ }
249
+ let ext = ".ts";
250
+ let maxExtCount = 0;
251
+ for (const [e, c] of extCounts) {
252
+ if (c > maxExtCount) {
253
+ ext = e;
254
+ maxExtCount = c;
255
+ }
256
+ }
257
+ switch (kind) {
258
+ case "hook": return `use-{feature}${ext}`;
259
+ case "component": return `{ComponentName}${ext}`;
260
+ default: return `{name}${ext}`;
261
+ }
262
+ }
263
+ //# sourceMappingURL=contribution-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contribution-patterns.js","sourceRoot":"","sources":["../src/contribution-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ParsedFile, TierInfo, Convention, ConventionConfidence, DetectorContext, Warning } from "./types.js";
2
+ import type { DetectorPlugin } from "./plugin-loader.js";
3
+ /**
4
+ * Run all convention detectors and collect results.
5
+ * W2-3: Accepts optional DetectorContext for ecosystem-aware detectors.
6
+ * W5-C2: Accepts optional plugins for org-specific detectors.
7
+ */
8
+ export declare function extractConventions(parsedFiles: ParsedFile[], tiers: Map<string, TierInfo>, disabledDetectors: string[], warnings?: Warning[], context?: DetectorContext, plugins?: DetectorPlugin[]): Convention[];
9
+ /**
10
+ * Build a structured confidence metric for convention detection.
11
+ * Shared by all detectors to avoid duplication.
12
+ */
13
+ export declare function buildConfidence(matched: number, total: number): ConventionConfidence;
14
+ /**
15
+ * E-28: Helper to filter to Tier 1 and Tier 2 source files only.
16
+ */
17
+ export declare function sourceParsedFiles(files: ParsedFile[], tiers: Map<string, TierInfo>): ParsedFile[];
@@ -0,0 +1,90 @@
1
+ // src/convention-extractor.ts — Module 5: Convention Extractor (orchestrator)
2
+ // Errata applied: E-26 (report dominant pattern below threshold),
3
+ // E-27 (structured confidence), E-28 (filter by tier)
4
+ // W2-3: Added ecosystem-specific detectors with DetectorContext support.
5
+ // W5-A: Removed 6 noisy detectors (import/export/component/error-handling/graphql/telemetry patterns).
6
+ import { fileNamingDetector } from "./detectors/file-naming.js";
7
+ import { hookPatternDetector } from "./detectors/hook-patterns.js";
8
+ import { testPatternDetector } from "./detectors/test-patterns.js";
9
+ // W2-3: Ecosystem-specific detectors
10
+ import { testFrameworkEcosystemDetector } from "./detectors/test-framework-ecosystem.js";
11
+ import { dataFetchingDetector } from "./detectors/data-fetching.js";
12
+ import { databaseDetector } from "./detectors/database.js";
13
+ import { webFrameworkDetector } from "./detectors/web-framework.js";
14
+ import { buildToolDetector } from "./detectors/build-tool.js";
15
+ const DETECTOR_REGISTRY = {
16
+ // Core
17
+ fileNaming: fileNamingDetector,
18
+ hookPatterns: hookPatternDetector,
19
+ testPatterns: testPatternDetector,
20
+ // Ecosystem-specific (Wave 2)
21
+ testFrameworkEcosystem: testFrameworkEcosystemDetector,
22
+ dataFetching: dataFetchingDetector,
23
+ database: databaseDetector,
24
+ webFramework: webFrameworkDetector,
25
+ buildTool: buildToolDetector,
26
+ };
27
+ /**
28
+ * Run all convention detectors and collect results.
29
+ * W2-3: Accepts optional DetectorContext for ecosystem-aware detectors.
30
+ * W5-C2: Accepts optional plugins for org-specific detectors.
31
+ */
32
+ export function extractConventions(parsedFiles, tiers, disabledDetectors, warnings = [], context, plugins) {
33
+ const conventions = [];
34
+ const disabled = new Set(disabledDetectors);
35
+ // Run built-in detectors
36
+ for (const [name, detector] of Object.entries(DETECTOR_REGISTRY)) {
37
+ if (disabled.has(name))
38
+ continue;
39
+ try {
40
+ const results = detector(parsedFiles, tiers, warnings, context);
41
+ conventions.push(...results);
42
+ }
43
+ catch (err) {
44
+ const msg = err instanceof Error ? err.message : String(err);
45
+ warnings.push({
46
+ level: "warn",
47
+ module: "convention-extractor",
48
+ message: `Detector "${name}" threw: ${msg}`,
49
+ });
50
+ }
51
+ }
52
+ // W5-C2: Run plugin detectors
53
+ if (plugins && plugins.length > 0) {
54
+ for (const plugin of plugins) {
55
+ if (disabled.has(plugin.name))
56
+ continue;
57
+ try {
58
+ const results = plugin.detect(parsedFiles, tiers, warnings, context);
59
+ conventions.push(...results);
60
+ }
61
+ catch (err) {
62
+ const msg = err instanceof Error ? err.message : String(err);
63
+ warnings.push({
64
+ level: "warn",
65
+ module: "convention-extractor",
66
+ message: `Plugin "${plugin.name}" threw: ${msg}`,
67
+ });
68
+ }
69
+ }
70
+ }
71
+ return conventions;
72
+ }
73
+ /**
74
+ * Build a structured confidence metric for convention detection.
75
+ * Shared by all detectors to avoid duplication.
76
+ */
77
+ export function buildConfidence(matched, total) {
78
+ const percentage = total > 0 ? Math.round((matched / total) * 100) : 0;
79
+ return { matched, total, percentage, description: `${matched} of ${total} (${percentage}%)` };
80
+ }
81
+ /**
82
+ * E-28: Helper to filter to Tier 1 and Tier 2 source files only.
83
+ */
84
+ export function sourceParsedFiles(files, tiers) {
85
+ return files.filter((f) => {
86
+ const t = tiers.get(f.relativePath);
87
+ return t && t.tier !== 3;
88
+ });
89
+ }
90
+ //# sourceMappingURL=convention-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convention-extractor.js","sourceRoot":"","sources":["../src/convention-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PackageAnalysis, CrossPackageAnalysis, CommandSet } from "./types.js";
2
+ /**
3
+ * Combine multiple per-package analyses into a cross-package view.
4
+ */
5
+ export declare function analyzeCrossPackage(packages: PackageAnalysis[], rootCommands?: CommandSet): CrossPackageAnalysis;