octocode-cli 1.2.7 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/README.md +42 -35
  2. package/out/octocode-cli.js +36 -11719
  3. package/package.json +36 -36
  4. package/skills/README.md +42 -114
  5. package/skills/{octocode-code-engineer → octocode-engineer}/.claude/settings.local.json +2 -1
  6. package/skills/octocode-engineer/README.md +99 -0
  7. package/skills/octocode-engineer/SKILL.md +499 -0
  8. package/skills/octocode-engineer/build.mjs +29 -0
  9. package/skills/{octocode-code-engineer → octocode-engineer}/eslint.config.mjs +3 -13
  10. package/skills/{octocode-code-engineer → octocode-engineer}/package.json +28 -27
  11. package/skills/octocode-engineer/references/ast-reference.md +166 -0
  12. package/skills/{octocode-code-engineer → octocode-engineer}/references/cli-reference.md +80 -6
  13. package/skills/octocode-engineer/references/externals.md +86 -0
  14. package/skills/{octocode-code-engineer → octocode-engineer}/references/output-files.md +46 -6
  15. package/skills/octocode-engineer/references/quality-indicators.md +202 -0
  16. package/skills/octocode-engineer/references/tool-workflows.md +298 -0
  17. package/skills/octocode-engineer/references/validation-playbooks.md +99 -0
  18. package/skills/octocode-engineer/scripts/ast/search.js +45 -0
  19. package/skills/octocode-engineer/scripts/ast/tree-search.js +27 -0
  20. package/skills/octocode-engineer/scripts/index.js +173 -0
  21. package/skills/octocode-engineer/scripts/run.js +179 -0
  22. package/skills/octocode-engineer/src/analysis/dependencies.ts +378 -0
  23. package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.test.ts +57 -0
  24. package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.ts +43 -0
  25. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.test.ts +113 -0
  26. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.ts +64 -1
  27. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.test.ts +118 -2
  28. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.ts +65 -3
  29. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.test.ts +281 -1
  30. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.ts +173 -3
  31. package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.test.ts +73 -0
  32. package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.ts +62 -4
  33. package/skills/octocode-engineer/src/detector-gating.test.ts +59 -0
  34. package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/code-quality.ts +342 -0
  35. package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.ts +8 -0
  36. package/skills/{octocode-code-engineer → octocode-engineer}/src/index.test.ts +565 -11
  37. package/skills/octocode-engineer/src/index.ts +468 -0
  38. package/skills/octocode-engineer/src/pipeline/affected.test.ts +147 -0
  39. package/skills/octocode-engineer/src/pipeline/affected.ts +68 -0
  40. package/skills/octocode-engineer/src/pipeline/baseline.test.ts +276 -0
  41. package/skills/octocode-engineer/src/pipeline/baseline.ts +76 -0
  42. package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.test.ts +300 -53
  43. package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.ts +180 -36
  44. package/skills/octocode-engineer/src/pipeline/config-loader.test.ts +264 -0
  45. package/skills/octocode-engineer/src/pipeline/config-loader.ts +109 -0
  46. package/skills/octocode-engineer/src/pipeline/create-options.ts +55 -0
  47. package/skills/octocode-engineer/src/pipeline/health-score.test.ts +65 -0
  48. package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.ts +130 -17
  49. package/skills/octocode-engineer/src/pipeline/progress.ts +51 -0
  50. package/skills/octocode-engineer/src/pipeline/reporters.test.ts +155 -0
  51. package/skills/octocode-engineer/src/pipeline/reporters.ts +64 -0
  52. package/skills/octocode-engineer/src/reporting/graph-features.test.ts +279 -0
  53. package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/output-contract.test.ts +6 -0
  54. package/skills/octocode-engineer/src/reporting/summary-md.test.ts +1066 -0
  55. package/skills/octocode-engineer/src/reporting/summary-md.ts +1604 -0
  56. package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/writer.ts +136 -13
  57. package/skills/octocode-engineer/src/run.ts +78 -0
  58. package/skills/{octocode-code-engineer → octocode-engineer}/src/sanity.test.ts +1 -1
  59. package/skills/octocode-engineer/src/types/analysis.ts +25 -0
  60. package/skills/octocode-engineer/src/types/collectors.ts +134 -0
  61. package/skills/{octocode-code-engineer → octocode-engineer}/src/types/constants.ts +75 -41
  62. package/skills/octocode-engineer/src/types/core.ts +203 -0
  63. package/skills/octocode-engineer/src/types/dependency.ts +215 -0
  64. package/skills/octocode-engineer/src/types/file-entry.ts +108 -0
  65. package/skills/octocode-engineer/src/types/findings.ts +105 -0
  66. package/skills/{octocode-code-engineer → octocode-engineer}/src/types/index.ts +60 -30
  67. package/skills/octocode-engineer/src/types/tree-sitter.ts +38 -0
  68. package/skills/{octocode-code-engineer → octocode-engineer}/tsconfig.json +1 -0
  69. package/skills/octocode-research/.octocode/scan/.cache/analysis-cache.json +1 -0
  70. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/architecture.json +1 -0
  71. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/ast-trees.txt +5566 -0
  72. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/code-quality.json +1 -0
  73. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/dead-code.json +1 -0
  74. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/file-inventory.json +1 -0
  75. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/findings.json +1 -0
  76. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/graph.md +189 -0
  77. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/security.json +1 -0
  78. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.json +1 -0
  79. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.md +265 -0
  80. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/architecture.json +1 -0
  81. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt +5555 -0
  82. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/code-quality.json +1 -0
  83. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/dead-code.json +1 -0
  84. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/file-inventory.json +1 -0
  85. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/findings.json +1 -0
  86. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/graph.md +190 -0
  87. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/security.json +1 -0
  88. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.json +1 -0
  89. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.md +265 -0
  90. package/skills/octocode-research/CHANGELOG.md +60 -0
  91. package/skills/octocode-research/README.md +102 -388
  92. package/skills/octocode-research/SKILL.md +169 -498
  93. package/skills/octocode-research/package.json +19 -31
  94. package/skills/octocode-research/references/PARALLEL_AGENT_PROTOCOL.md +19 -0
  95. package/skills/octocode-research/references/SESSION_MANAGEMENT.md +38 -0
  96. package/skills/octocode-research/scripts/server-init.js +1 -1
  97. package/skills/octocode-research/scripts/server.d.ts +2 -1
  98. package/skills/octocode-research/scripts/server.js +329 -233
  99. package/skills/octocode-research/src/__tests__/integration/promptsRoutes.test.ts +180 -0
  100. package/skills/octocode-research/src/__tests__/integration/serverHttp.test.ts +221 -0
  101. package/skills/octocode-research/src/__tests__/integration/serverLifecycle.test.ts +194 -0
  102. package/skills/octocode-research/src/__tests__/integration/toolsRoutes.test.ts +501 -0
  103. package/skills/octocode-research/src/__tests__/unit/readiness.test.ts +61 -0
  104. package/skills/octocode-research/src/__tests__/unit/resilience.test.ts +192 -0
  105. package/skills/octocode-research/src/__tests__/unit/responseFactory.test.ts +172 -0
  106. package/skills/octocode-research/src/__tests__/unit/responseParser.test.ts +288 -0
  107. package/skills/octocode-research/src/__tests__/unit/schemas.test.ts +509 -0
  108. package/skills/octocode-research/src/index.ts +4 -124
  109. package/skills/octocode-research/src/middleware/queryParser.ts +0 -26
  110. package/skills/octocode-research/src/routes/lsp.ts +58 -59
  111. package/skills/octocode-research/src/routes/package.ts +35 -65
  112. package/skills/octocode-research/src/routes/prompts.ts +3 -3
  113. package/skills/octocode-research/src/routes/tools.ts +8 -20
  114. package/skills/octocode-research/src/server-init.ts +30 -237
  115. package/skills/octocode-research/src/server.ts +50 -23
  116. package/skills/octocode-research/src/types/errorGuards.ts +9 -80
  117. package/skills/octocode-research/src/types/guards.ts +0 -28
  118. package/skills/octocode-research/src/types/mcp.ts +11 -66
  119. package/skills/octocode-research/src/types/responses.ts +11 -129
  120. package/skills/octocode-research/src/utils/circuitBreaker.ts +0 -21
  121. package/skills/octocode-research/src/utils/logger.ts +1 -97
  122. package/skills/octocode-research/src/utils/resilience.ts +2 -12
  123. package/skills/octocode-research/src/utils/responseFactory.ts +0 -42
  124. package/skills/octocode-research/src/utils/responseParser.ts +3 -25
  125. package/skills/octocode-research/src/utils/retry.ts +0 -63
  126. package/skills/octocode-research/src/utils/routeFactory.ts +1 -1
  127. package/skills/octocode-research/src/validation/httpPreprocess.ts +0 -3
  128. package/skills/octocode-research/src/validation/index.ts +0 -1
  129. package/skills/octocode-research/src/validation/schemas.ts +0 -63
  130. package/skills/octocode-research/src/validation/toolCallSchema.ts +3 -3
  131. package/skills/octocode-research/tsdown.config.ts +4 -0
  132. package/skills/octocode-research/vitest.config.ts +3 -0
  133. package/skills/octocode-code-engineer/.plan/VALIDATED_PLAN.md +0 -223
  134. package/skills/octocode-code-engineer/README.md +0 -178
  135. package/skills/octocode-code-engineer/SKILL.md +0 -418
  136. package/skills/octocode-code-engineer/minify-scripts.mjs +0 -32
  137. package/skills/octocode-code-engineer/references/agent-ast-reading-rfc.md +0 -95
  138. package/skills/octocode-code-engineer/references/architecture-techniques.md +0 -121
  139. package/skills/octocode-code-engineer/references/ast-search.md +0 -210
  140. package/skills/octocode-code-engineer/references/ast-tree-search.md +0 -151
  141. package/skills/octocode-code-engineer/references/concepts.md +0 -107
  142. package/skills/octocode-code-engineer/references/finding-categories.md +0 -128
  143. package/skills/octocode-code-engineer/references/improvement-roadmap.md +0 -304
  144. package/skills/octocode-code-engineer/references/playbooks.md +0 -204
  145. package/skills/octocode-code-engineer/references/present-results.md +0 -136
  146. package/skills/octocode-code-engineer/references/tool-workflows.md +0 -566
  147. package/skills/octocode-code-engineer/references/validate-investigate.md +0 -225
  148. package/skills/octocode-code-engineer/scripts/analysis/dependencies.js +0 -1
  149. package/skills/octocode-code-engineer/scripts/analysis/dependency-summary.js +0 -1
  150. package/skills/octocode-code-engineer/scripts/analysis/discovery.js +0 -1
  151. package/skills/octocode-code-engineer/scripts/analysis/graph-analytics.js +0 -1
  152. package/skills/octocode-code-engineer/scripts/analysis/semantic.js +0 -1
  153. package/skills/octocode-code-engineer/scripts/ast/helpers.js +0 -1
  154. package/skills/octocode-code-engineer/scripts/ast/metrics.js +0 -1
  155. package/skills/octocode-code-engineer/scripts/ast/search.js +0 -2
  156. package/skills/octocode-code-engineer/scripts/ast/tree-search.js +0 -2
  157. package/skills/octocode-code-engineer/scripts/ast/tree-sitter.js +0 -1
  158. package/skills/octocode-code-engineer/scripts/ast/ts-analyzer.js +0 -1
  159. package/skills/octocode-code-engineer/scripts/collectors/chains.js +0 -1
  160. package/skills/octocode-code-engineer/scripts/collectors/effects.js +0 -1
  161. package/skills/octocode-code-engineer/scripts/collectors/input-sources.js +0 -1
  162. package/skills/octocode-code-engineer/scripts/collectors/performance.js +0 -1
  163. package/skills/octocode-code-engineer/scripts/collectors/prototype-pollution.js +0 -1
  164. package/skills/octocode-code-engineer/scripts/collectors/security.js +0 -1
  165. package/skills/octocode-code-engineer/scripts/collectors/test-profile.js +0 -1
  166. package/skills/octocode-code-engineer/scripts/common/is-direct-run.js +0 -1
  167. package/skills/octocode-code-engineer/scripts/common/utils.js +0 -1
  168. package/skills/octocode-code-engineer/scripts/detectors/code-quality.js +0 -1
  169. package/skills/octocode-code-engineer/scripts/detectors/cohesion.js +0 -1
  170. package/skills/octocode-code-engineer/scripts/detectors/coupling.js +0 -1
  171. package/skills/octocode-code-engineer/scripts/detectors/cycle.js +0 -1
  172. package/skills/octocode-code-engineer/scripts/detectors/dead-code.js +0 -1
  173. package/skills/octocode-code-engineer/scripts/detectors/import-style.js +0 -1
  174. package/skills/octocode-code-engineer/scripts/detectors/index.js +0 -1
  175. package/skills/octocode-code-engineer/scripts/detectors/security.js +0 -1
  176. package/skills/octocode-code-engineer/scripts/detectors/semantic.js +0 -1
  177. package/skills/octocode-code-engineer/scripts/detectors/shared.js +0 -1
  178. package/skills/octocode-code-engineer/scripts/detectors/test-quality.js +0 -1
  179. package/skills/octocode-code-engineer/scripts/index.js +0 -1
  180. package/skills/octocode-code-engineer/scripts/pipeline/cache.js +0 -1
  181. package/skills/octocode-code-engineer/scripts/pipeline/cli.js +0 -1
  182. package/skills/octocode-code-engineer/scripts/pipeline/main.js +0 -2
  183. package/skills/octocode-code-engineer/scripts/reporting/analysis.js +0 -1
  184. package/skills/octocode-code-engineer/scripts/reporting/summary-md.js +0 -1
  185. package/skills/octocode-code-engineer/scripts/reporting/writer.js +0 -1
  186. package/skills/octocode-code-engineer/scripts/types/constants.js +0 -1
  187. package/skills/octocode-code-engineer/scripts/types/index.js +0 -1
  188. package/skills/octocode-code-engineer/scripts/types/interfaces.js +0 -1
  189. package/skills/octocode-code-engineer/src/analysis/dependencies.ts +0 -406
  190. package/skills/octocode-code-engineer/src/index.ts +0 -403
  191. package/skills/octocode-code-engineer/src/reporting/summary-md.test.ts +0 -421
  192. package/skills/octocode-code-engineer/src/reporting/summary-md.ts +0 -714
  193. package/skills/octocode-code-engineer/src/types/interfaces.ts +0 -682
  194. package/skills/octocode-research/src/types/toolTypes.ts +0 -33
  195. package/skills/octocode-research/src/utils/logEmoji.ts +0 -103
  196. /package/skills/{octocode-code-engineer → octocode-engineer}/.octocode/rfc/RFC-code-engineer-weakness-fixes.md +0 -0
  197. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/architecture.ts.html +0 -0
  198. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-helpers.ts.html +0 -0
  199. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-search.ts.html +0 -0
  200. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/base.css +0 -0
  201. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/block-navigation.js +0 -0
  202. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cache.ts.html +0 -0
  203. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cli.ts.html +0 -0
  204. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/clover.xml +0 -0
  205. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-effects.ts.html +0 -0
  206. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-input-sources.ts.html +0 -0
  207. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-performance.ts.html +0 -0
  208. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-prototype-pollution.ts.html +0 -0
  209. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-security.ts.html +0 -0
  210. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-test-profile.ts.html +0 -0
  211. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/coverage-final.json +0 -0
  212. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependencies.ts.html +0 -0
  213. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependency-summary.ts.html +0 -0
  214. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/discovery.ts.html +0 -0
  215. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/favicon.png +0 -0
  216. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/graph-analytics.ts.html +0 -0
  217. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.html +0 -0
  218. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.ts.html +0 -0
  219. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/metrics.ts.html +0 -0
  220. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/pipeline.ts.html +0 -0
  221. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.css +0 -0
  222. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.js +0 -0
  223. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-analysis.ts.html +0 -0
  224. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-writer.ts.html +0 -0
  225. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/security-detectors.ts.html +0 -0
  226. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic-detectors.ts.html +0 -0
  227. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic.ts.html +0 -0
  228. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sort-arrow-sprite.png +0 -0
  229. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sorter.js +0 -0
  230. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/summary-md.ts.html +0 -0
  231. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/test-quality-detectors.ts.html +0 -0
  232. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/tree-sitter-analyzer.ts.html +0 -0
  233. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ts-analyzer.ts.html +0 -0
  234. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/types.ts.html +0 -0
  235. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/utils.ts.html +0 -0
  236. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependencies.test.ts +0 -0
  237. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.test.ts +0 -0
  238. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.ts +0 -0
  239. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.test.ts +0 -0
  240. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.ts +0 -0
  241. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.test.ts +0 -0
  242. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.ts +0 -0
  243. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.test.ts +0 -0
  244. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.ts +0 -0
  245. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.test.ts +0 -0
  246. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.ts +0 -0
  247. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.test.ts +0 -0
  248. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.ts +0 -0
  249. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/chains.ts +0 -0
  250. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.test.ts +0 -0
  251. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.ts +0 -0
  252. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.test.ts +0 -0
  253. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.ts +0 -0
  254. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.test.ts +0 -0
  255. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.ts +0 -0
  256. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.test.ts +0 -0
  257. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.ts +0 -0
  258. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.test.ts +0 -0
  259. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.ts +0 -0
  260. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.test.ts +0 -0
  261. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.ts +0 -0
  262. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.test.ts +0 -0
  263. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.ts +0 -0
  264. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cohesion.ts +0 -0
  265. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/coupling.ts +0 -0
  266. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cycle.ts +0 -0
  267. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/dead-code.ts +0 -0
  268. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/import-style.ts +0 -0
  269. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.test.ts +0 -0
  270. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.test.ts +0 -0
  271. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.ts +0 -0
  272. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/semantic.ts +0 -0
  273. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/shared.ts +0 -0
  274. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.test.ts +0 -0
  275. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.ts +0 -0
  276. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.test.ts +0 -0
  277. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.ts +0 -0
  278. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.test.ts +0 -0
  279. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline.test.ts +0 -0
  280. /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.test.ts +0 -0
  281. /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.ts +0 -0
  282. /package/skills/{octocode-code-engineer → octocode-engineer}/vitest.config.ts +0 -0
@@ -1,403 +0,0 @@
1
- import { isDirectRun } from './common/is-direct-run.js';
2
- import {
3
- buildConsumedFromModule,
4
- computeHotFiles,
5
- detectAwaitInLoop,
6
- detectBarrelExplosion,
7
- detectBoundaryViolations,
8
- detectCognitiveComplexity,
9
- detectCommonJsInEsm,
10
- detectCriticalPaths,
11
- detectDeadExports,
12
- detectDeadFiles,
13
- detectDeadReExports,
14
- detectDependencyCycles,
15
- detectDistanceFromMainSequence,
16
- detectDuplicateFlowStructures,
17
- detectDuplicateFunctionBodies,
18
- detectEmptyCatchBlocks,
19
- detectExcessiveParameters,
20
- detectExportStarLeak,
21
- detectFeatureEnvy,
22
- detectFunctionOptimization,
23
- detectGodFunctions,
24
- detectGodModuleCoupling,
25
- detectGodModules,
26
- detectHighCoupling,
27
- detectHighHalsteadEffort,
28
- detectImportSideEffectRisk,
29
- detectLayerViolations,
30
- detectListenerLeakRisk,
31
- detectLowCohesion,
32
- detectLowMaintainability,
33
- detectMegaFolders,
34
- detectMessageChains,
35
- detectMissingErrorBoundary,
36
- detectNamespaceImport,
37
- detectOrphanModules,
38
- detectPromiseMisuse,
39
- detectSdpViolations,
40
- detectSimilarFunctionBodies,
41
- detectSwitchNoDefault,
42
- detectSyncIo,
43
- detectTestOnlyModules,
44
- detectTypeAssertionEscape,
45
- detectUnboundedCollection,
46
- detectUnclearedTimers,
47
- detectUnreachableModules,
48
- detectUnsafeAny,
49
- detectUntestedCriticalCode,
50
- detectUnusedNpmDeps,
51
- } from './detectors/index.js';
52
- import {
53
- detectCommandInjectionRisk,
54
- detectDebugLogLeakage,
55
- detectEvalUsage,
56
- detectHardcodedSecrets,
57
- detectInputPassthroughRisk,
58
- detectPathTraversalRisk,
59
- detectPrototypePollutionRisk,
60
- detectSensitiveDataLogging,
61
- detectSqlInjectionRisk,
62
- detectUnsafeHtml,
63
- detectUnsafeRegex,
64
- detectUnvalidatedInputSink,
65
- } from './detectors/security.js';
66
- import {
67
- detectExcessiveMocking,
68
- detectFakeTimersWithoutRestore,
69
- detectFocusedTests,
70
- detectLowAssertionDensity,
71
- detectMissingMockRestoration,
72
- detectMissingTestCleanup,
73
- detectSharedMutableState,
74
- detectTestNoAssertion,
75
- } from './detectors/test-quality.js';
76
- import { diversifyFindings } from './reporting/summary-md.js';
77
- import { SEVERITY_ORDER } from './types/index.js';
78
-
79
- import type {
80
- AnalysisOptions,
81
- DependencyState,
82
- DependencySummary,
83
- DuplicateGroup,
84
- FileCriticality,
85
- FileEntry,
86
- Finding,
87
- FlowMapEntry,
88
- RedundantFlowGroup,
89
- } from './types/index.js';
90
-
91
- export {
92
- buildDependencySummary,
93
- computeDependencyCycles,
94
- computeDependencyCriticalPaths,
95
- } from './analysis/dependency-summary.js';
96
- export {
97
- REPORT_SCHEMA_VERSION,
98
- ARCHITECTURE_CATEGORIES,
99
- CODE_QUALITY_CATEGORIES,
100
- DEAD_CODE_CATEGORIES,
101
- SECURITY_CATEGORIES,
102
- TEST_QUALITY_CATEGORIES,
103
- writeMultiFileReport,
104
- generateMermaidGraph,
105
- } from './reporting/writer.js';
106
- export type { FullReport } from './reporting/writer.js';
107
- export {
108
- severityBreakdown,
109
- categoryBreakdown,
110
- computeHealthScore,
111
- collectTagCloud,
112
- formatFileSize,
113
- diversifyFindings,
114
- diverseTopRecommendations,
115
- generateSummaryMd,
116
- } from './reporting/summary-md.js';
117
- export type { SummaryMdOptions } from './reporting/summary-md.js';
118
-
119
- export function buildIssueCatalog(
120
- duplicates: DuplicateGroup[],
121
- controlDuplicates: RedundantFlowGroup[],
122
- fileSummaries: FileEntry[],
123
- dependencySummary: DependencySummary,
124
- dependencyState: DependencyState,
125
- options: AnalysisOptions,
126
- pkgJsonDeps: Record<string, string> = {},
127
- pkgJsonDevDeps: Record<string, string> = {},
128
- fileCriticalityByPath: Map<string, FileCriticality> = new Map(),
129
- semanticFindings: Array<Omit<Finding, 'id'>> = [],
130
- flowMap: Map<string, FlowMapEntry[]> = new Map(),
131
- additionalFindings: Array<Omit<Finding, 'id'>> = []
132
- ): {
133
- allFindings: Array<Omit<Finding, 'id'>>;
134
- findings: Finding[];
135
- byFile: Map<string, string[]>;
136
- totalBeforeTruncation: number;
137
- droppedCategories: string[];
138
- } {
139
- const rawFindings: Array<Omit<Finding, 'id'>> = [];
140
-
141
- const addFinding = (finding: Omit<Finding, 'id'>): void => {
142
- if (options.features && !options.features.has(finding.category)) return;
143
- rawFindings.push(finding);
144
- };
145
-
146
- const { production: consumedFromModule, test: testConsumedFromModule } =
147
- buildConsumedFromModule(dependencyState);
148
-
149
- for (const f of detectDuplicateFunctionBodies(duplicates)) addFinding(f);
150
- for (const f of detectDuplicateFlowStructures(
151
- controlDuplicates,
152
- options.flowDupThreshold
153
- ))
154
- addFinding(f);
155
- for (const f of detectFunctionOptimization(
156
- fileSummaries,
157
- options.criticalComplexityThreshold
158
- ))
159
- addFinding(f);
160
- for (const f of detectTestOnlyModules(dependencySummary)) addFinding(f);
161
- for (const f of detectDependencyCycles(dependencySummary, dependencyState))
162
- addFinding(f);
163
- for (const f of detectCriticalPaths(
164
- dependencySummary,
165
- dependencyState,
166
- options.criticalComplexityThreshold
167
- ))
168
- addFinding(f);
169
- for (const f of detectDeadFiles(dependencySummary, dependencyState))
170
- addFinding(f);
171
- for (const f of detectDeadExports(
172
- dependencyState,
173
- consumedFromModule,
174
- testConsumedFromModule
175
- ))
176
- addFinding(f);
177
- for (const f of detectDeadReExports(dependencyState, consumedFromModule))
178
- addFinding(f);
179
- for (const f of detectSdpViolations(
180
- dependencyState,
181
- options.sdpMinDelta,
182
- options.sdpMaxSourceInstability
183
- ))
184
- addFinding(f);
185
- for (const f of detectHighCoupling(
186
- dependencyState,
187
- options.couplingThreshold
188
- ))
189
- addFinding(f);
190
- for (const f of detectGodModuleCoupling(
191
- dependencyState,
192
- options.fanInThreshold,
193
- options.fanOutThreshold
194
- ))
195
- addFinding(f);
196
- for (const f of detectOrphanModules(dependencyState)) addFinding(f);
197
- for (const f of detectUnreachableModules(dependencyState)) addFinding(f);
198
-
199
- for (const f of detectUnusedNpmDeps(
200
- dependencyState.externalCounts,
201
- pkgJsonDeps,
202
- pkgJsonDevDeps
203
- ))
204
- addFinding(f);
205
- for (const f of detectBoundaryViolations(dependencyState)) addFinding(f);
206
- for (const f of detectBarrelExplosion(
207
- dependencyState,
208
- options.barrelSymbolThreshold
209
- ))
210
- addFinding(f);
211
- for (const f of detectGodModules(
212
- fileSummaries,
213
- dependencyState,
214
- options.godModuleStatements,
215
- options.godModuleExports
216
- ))
217
- addFinding(f);
218
- for (const f of detectMegaFolders(fileSummaries)) addFinding(f);
219
- for (const f of detectGodFunctions(
220
- fileSummaries,
221
- options.godFunctionStatements,
222
- options.godFunctionMiThreshold
223
- ))
224
- addFinding(f);
225
- for (const f of detectCognitiveComplexity(
226
- fileSummaries,
227
- options.cognitiveComplexityThreshold
228
- ))
229
- addFinding(f);
230
- if (options.layerOrder.length >= 2) {
231
- for (const f of detectLayerViolations(dependencyState, options.layerOrder))
232
- addFinding(f);
233
- }
234
- for (const f of detectLowCohesion(dependencyState)) addFinding(f);
235
- for (const f of detectDistanceFromMainSequence(dependencyState))
236
- addFinding(f);
237
- for (const f of detectFeatureEnvy(dependencyState)) addFinding(f);
238
-
239
- const hotFilesForDetector = computeHotFiles(
240
- dependencyState,
241
- dependencySummary,
242
- fileCriticalityByPath
243
- );
244
- for (const f of detectUntestedCriticalCode(
245
- dependencyState,
246
- hotFilesForDetector,
247
- fileCriticalityByPath
248
- ))
249
- addFinding(f);
250
-
251
- for (const f of detectImportSideEffectRisk(
252
- fileSummaries,
253
- dependencyState,
254
- dependencySummary,
255
- hotFilesForDetector
256
- ))
257
- addFinding(f);
258
-
259
- for (const f of detectNamespaceImport(dependencyState)) addFinding(f);
260
- for (const f of detectCommonJsInEsm(dependencyState)) addFinding(f);
261
- for (const f of detectExportStarLeak(dependencyState)) addFinding(f);
262
-
263
- for (const f of detectExcessiveParameters(
264
- fileSummaries,
265
- options.parameterThreshold
266
- ))
267
- addFinding(f);
268
- for (const f of detectEmptyCatchBlocks(fileSummaries)) addFinding(f);
269
- for (const f of detectSwitchNoDefault(fileSummaries)) addFinding(f);
270
- for (const f of detectUnsafeAny(fileSummaries, options.anyThreshold))
271
- addFinding(f);
272
- for (const f of detectHighHalsteadEffort(
273
- fileSummaries,
274
- options.halsteadEffortThreshold
275
- ))
276
- addFinding(f);
277
- for (const f of detectLowMaintainability(
278
- fileSummaries,
279
- options.maintainabilityIndexThreshold
280
- ))
281
- addFinding(f);
282
- for (const f of detectTypeAssertionEscape(fileSummaries)) addFinding(f);
283
- for (const f of detectMissingErrorBoundary(fileSummaries)) addFinding(f);
284
- for (const f of detectPromiseMisuse(fileSummaries)) addFinding(f);
285
-
286
- for (const f of detectAwaitInLoop(fileSummaries)) addFinding(f);
287
- for (const f of detectSyncIo(fileSummaries)) addFinding(f);
288
- for (const f of detectUnclearedTimers(fileSummaries)) addFinding(f);
289
- for (const f of detectListenerLeakRisk(fileSummaries)) addFinding(f);
290
- for (const f of detectUnboundedCollection(fileSummaries)) addFinding(f);
291
- for (const f of detectMessageChains(fileSummaries)) addFinding(f);
292
- for (const f of detectSimilarFunctionBodies(
293
- flowMap,
294
- options.similarityThreshold
295
- ))
296
- addFinding(f);
297
-
298
- for (const f of detectHardcodedSecrets(fileSummaries)) addFinding(f);
299
- for (const f of detectEvalUsage(fileSummaries)) addFinding(f);
300
- for (const f of detectUnsafeHtml(fileSummaries)) addFinding(f);
301
- for (const f of detectSqlInjectionRisk(fileSummaries)) addFinding(f);
302
- for (const f of detectUnsafeRegex(fileSummaries)) addFinding(f);
303
- for (const f of detectUnvalidatedInputSink(fileSummaries)) addFinding(f);
304
- for (const f of detectInputPassthroughRisk(fileSummaries)) addFinding(f);
305
- for (const f of detectPrototypePollutionRisk(fileSummaries)) addFinding(f);
306
- for (const f of detectPathTraversalRisk(fileSummaries)) addFinding(f);
307
- for (const f of detectCommandInjectionRisk(fileSummaries)) addFinding(f);
308
- for (const f of detectDebugLogLeakage(fileSummaries)) addFinding(f);
309
- for (const f of detectSensitiveDataLogging(fileSummaries)) addFinding(f);
310
-
311
- for (const f of detectLowAssertionDensity(fileSummaries)) addFinding(f);
312
- for (const f of detectTestNoAssertion(fileSummaries)) addFinding(f);
313
- for (const f of detectExcessiveMocking(fileSummaries, options.mockThreshold))
314
- addFinding(f);
315
- for (const f of detectSharedMutableState(fileSummaries)) addFinding(f);
316
- for (const f of detectMissingTestCleanup(fileSummaries)) addFinding(f);
317
- for (const f of detectFocusedTests(fileSummaries)) addFinding(f);
318
- for (const f of detectFakeTimersWithoutRestore(fileSummaries)) addFinding(f);
319
- for (const f of detectMissingMockRestoration(fileSummaries)) addFinding(f);
320
-
321
- for (const f of semanticFindings) addFinding(f);
322
- for (const f of additionalFindings) addFinding(f);
323
-
324
- const sorted = rawFindings.sort((a, b) => {
325
- const bySeverity = SEVERITY_ORDER[b.severity] - SEVERITY_ORDER[a.severity];
326
- if (bySeverity !== 0) return bySeverity;
327
- if (a.category < b.category) return -1;
328
- if (a.category > b.category) return 1;
329
- return 0;
330
- });
331
-
332
- const { findings: truncated, totalBeforeTruncation, droppedCategories } =
333
- applyFindingsLimit(sorted, options);
334
- const { findings, byFile } = assignFindingIds(truncated);
335
-
336
- return {
337
- allFindings: sorted,
338
- findings,
339
- byFile,
340
- totalBeforeTruncation,
341
- droppedCategories,
342
- };
343
- }
344
-
345
- export function applyFindingsLimit<T extends Omit<Finding, 'id'>>(
346
- sorted: T[],
347
- options: Pick<AnalysisOptions, 'findingsLimit' | 'noDiversify'>
348
- ): {
349
- findings: T[];
350
- totalBeforeTruncation: number;
351
- droppedCategories: string[];
352
- } {
353
- const totalBeforeTruncation = sorted.length;
354
- const allCategoriesBefore = new Set(sorted.map(f => f.category));
355
- const limit = options.findingsLimit;
356
- const truncated =
357
- !Number.isFinite(limit) || limit == null
358
- ? sorted
359
- : options.noDiversify
360
- ? sorted.slice(0, limit)
361
- : diversifyFindings(sorted, limit);
362
- const categoriesAfter = new Set(truncated.map(f => f.category));
363
- const droppedCategories = [...allCategoriesBefore].filter(
364
- c => !categoriesAfter.has(c)
365
- );
366
-
367
- return {
368
- findings: truncated,
369
- totalBeforeTruncation,
370
- droppedCategories,
371
- };
372
- }
373
-
374
- export function assignFindingIds(
375
- rawFindings: Array<Omit<Finding, 'id'>>
376
- ): {
377
- findings: Finding[];
378
- byFile: Map<string, string[]>;
379
- } {
380
- const findings: Finding[] = [];
381
- const byFile = new Map<string, string[]>();
382
-
383
- for (const [i, raw] of rawFindings.entries()) {
384
- const id = `AST-ISSUE-${String(i + 1).padStart(4, '0')}`;
385
- const full: Finding = { id, ...raw };
386
- findings.push(full);
387
- if (full.file) {
388
- if (!byFile.has(full.file)) byFile.set(full.file, []);
389
- byFile.get(full.file)!.push(id);
390
- }
391
- }
392
-
393
- return { findings, byFile };
394
- }
395
-
396
- if (isDirectRun(import.meta.url)) {
397
- import('./pipeline/main.js')
398
- .then(m => m.main())
399
- .catch((error: unknown) => {
400
- console.error(error);
401
- process.exit(1);
402
- });
403
- }