octocode-cli 1.2.8 → 1.2.10

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 +45 -38
  2. package/out/octocode-cli.js +73 -11763
  3. package/package.json +35 -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 +413 -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,406 +0,0 @@
1
- import path from 'node:path';
2
-
3
- import * as ts from 'typescript';
4
-
5
- import {
6
- addToMapSet,
7
- isRelativeImport,
8
- isTestFile,
9
- normalizeDependencyValue,
10
- resolveImportTarget,
11
- toRepoPath,
12
- } from '../common/utils.js';
13
-
14
- import type {
15
- AnalysisOptions,
16
- DependencyProfile,
17
- DependencyRecord,
18
- DependencyState,
19
- ExportSymbol,
20
- ImportedSymbolRef,
21
- ReExportRef,
22
- } from '../types/index.js';
23
-
24
- export function collectModuleDependencies(
25
- sourceFile: ts.SourceFile,
26
- filePath: string,
27
- repoRoot: string
28
- ): DependencyProfile {
29
- const currentDirectory = path.dirname(filePath);
30
- const internal = new Set<string>();
31
- const external = new Set<string>();
32
- const unresolved = new Set<string>();
33
- const declaredExports: ExportSymbol[] = [];
34
- const importedSymbols: ImportedSymbolRef[] = [];
35
- const reExports: ReExportRef[] = [];
36
-
37
- const hasExportModifier = (node: ts.Node): boolean => {
38
- if (!ts.canHaveModifiers(node)) return false;
39
- return Boolean(
40
- ts
41
- .getModifiers(node)
42
- ?.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword)
43
- );
44
- };
45
-
46
- const pushDeclaredExport = (item: ExportSymbol): void => {
47
- if (
48
- declaredExports.some(
49
- entry => entry.name === item.name && entry.kind === item.kind
50
- )
51
- )
52
- return;
53
- declaredExports.push(item);
54
- };
55
-
56
- const resolveSpecifier = (specifier: string | undefined): string | null => {
57
- if (!specifier || typeof specifier !== 'string') {
58
- return null;
59
- }
60
-
61
- if (!isRelativeImport(specifier)) {
62
- external.add(specifier);
63
- return null;
64
- }
65
-
66
- const resolved = resolveImportTarget(currentDirectory, specifier);
67
- if (!resolved) {
68
- unresolved.add(specifier);
69
- return null;
70
- }
71
-
72
- if (!resolved.startsWith(repoRoot)) {
73
- external.add(specifier);
74
- return null;
75
- }
76
-
77
- const relativeResolved = normalizeDependencyValue(
78
- path.relative(repoRoot, resolved)
79
- );
80
- internal.add(relativeResolved);
81
- return relativeResolved;
82
- };
83
-
84
- const importLine = (
85
- node: ts.Node
86
- ): { lineStart: number; lineEnd: number } => {
87
- const start = sourceFile.getLineAndCharacterOfPosition(
88
- node.getStart(sourceFile)
89
- );
90
- const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());
91
- return { lineStart: start.line + 1, lineEnd: end.line + 1 };
92
- };
93
-
94
- const visit = (node: ts.Node): void => {
95
- if (
96
- ts.isImportDeclaration(node) &&
97
- node.moduleSpecifier &&
98
- ts.isStringLiteral(node.moduleSpecifier)
99
- ) {
100
- const sourceModule = node.moduleSpecifier.text;
101
- const resolvedModule = resolveSpecifier(sourceModule) ?? undefined;
102
- const loc = importLine(node);
103
- const clause = node.importClause;
104
- if (clause) {
105
- if (clause.name) {
106
- importedSymbols.push({
107
- sourceModule,
108
- resolvedModule,
109
- importedName: 'default',
110
- localName: clause.name.text,
111
- isTypeOnly: clause.isTypeOnly,
112
- ...loc,
113
- });
114
- }
115
- if (clause.namedBindings) {
116
- if (ts.isNamespaceImport(clause.namedBindings)) {
117
- importedSymbols.push({
118
- sourceModule,
119
- resolvedModule,
120
- importedName: '*',
121
- localName: clause.namedBindings.name.text,
122
- isTypeOnly: clause.isTypeOnly,
123
- ...loc,
124
- });
125
- } else {
126
- for (const element of clause.namedBindings.elements) {
127
- importedSymbols.push({
128
- sourceModule,
129
- resolvedModule,
130
- importedName: element.propertyName?.text ?? element.name.text,
131
- localName: element.name.text,
132
- isTypeOnly: clause.isTypeOnly || element.isTypeOnly,
133
- ...loc,
134
- });
135
- }
136
- }
137
- }
138
- }
139
- }
140
-
141
- if (
142
- ts.isExportDeclaration(node) &&
143
- node.moduleSpecifier &&
144
- ts.isStringLiteral(node.moduleSpecifier)
145
- ) {
146
- const sourceModule = node.moduleSpecifier.text;
147
- const resolvedModule = resolveSpecifier(sourceModule) ?? undefined;
148
- if (node.exportClause && ts.isNamedExports(node.exportClause)) {
149
- for (const element of node.exportClause.elements) {
150
- reExports.push({
151
- sourceModule,
152
- resolvedModule,
153
- exportedAs: element.name.text,
154
- importedName: element.propertyName?.text ?? element.name.text,
155
- isStar: false,
156
- isTypeOnly: node.isTypeOnly || element.isTypeOnly,
157
- lineStart:
158
- sourceFile.getLineAndCharacterOfPosition(
159
- element.getStart(sourceFile)
160
- ).line + 1,
161
- lineEnd:
162
- sourceFile.getLineAndCharacterOfPosition(element.getEnd()).line +
163
- 1,
164
- });
165
- }
166
- } else {
167
- reExports.push({
168
- sourceModule,
169
- resolvedModule,
170
- exportedAs: '*',
171
- importedName: '*',
172
- isStar: true,
173
- isTypeOnly: node.isTypeOnly,
174
- lineStart:
175
- sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
176
- .line + 1,
177
- lineEnd:
178
- sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
179
- });
180
- }
181
- }
182
-
183
- if (ts.isExportAssignment(node)) {
184
- pushDeclaredExport({
185
- name: 'default',
186
- kind: 'value',
187
- isDefault: true,
188
- lineStart:
189
- sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
190
- .line + 1,
191
- lineEnd:
192
- sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
193
- });
194
- }
195
-
196
- if (ts.isFunctionDeclaration(node) && hasExportModifier(node)) {
197
- pushDeclaredExport({
198
- name: node.name?.text || 'default',
199
- kind: 'value',
200
- isDefault: node.name ? false : true,
201
- lineStart:
202
- sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
203
- .line + 1,
204
- lineEnd:
205
- sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
206
- });
207
- }
208
-
209
- if (ts.isClassDeclaration(node) && hasExportModifier(node)) {
210
- pushDeclaredExport({
211
- name: node.name?.text || 'default',
212
- kind: 'value',
213
- isDefault: node.name ? false : true,
214
- lineStart:
215
- sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
216
- .line + 1,
217
- lineEnd:
218
- sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
219
- });
220
- }
221
-
222
- if (ts.isEnumDeclaration(node) && hasExportModifier(node)) {
223
- pushDeclaredExport({
224
- name: node.name.text,
225
- kind: 'value',
226
- lineStart:
227
- sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
228
- .line + 1,
229
- lineEnd:
230
- sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
231
- });
232
- }
233
-
234
- if (
235
- (ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) &&
236
- hasExportModifier(node)
237
- ) {
238
- pushDeclaredExport({
239
- name: node.name.text,
240
- kind: 'type',
241
- lineStart:
242
- sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile))
243
- .line + 1,
244
- lineEnd:
245
- sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1,
246
- });
247
- }
248
-
249
- if (ts.isVariableStatement(node) && hasExportModifier(node)) {
250
- for (const decl of node.declarationList.declarations) {
251
- if (ts.isIdentifier(decl.name)) {
252
- pushDeclaredExport({
253
- name: decl.name.text,
254
- kind: 'value',
255
- lineStart:
256
- sourceFile.getLineAndCharacterOfPosition(
257
- decl.getStart(sourceFile)
258
- ).line + 1,
259
- lineEnd:
260
- sourceFile.getLineAndCharacterOfPosition(decl.getEnd()).line + 1,
261
- });
262
- }
263
- }
264
- }
265
-
266
- if (
267
- ts.isExportDeclaration(node) &&
268
- !node.moduleSpecifier &&
269
- node.exportClause &&
270
- ts.isNamedExports(node.exportClause)
271
- ) {
272
- for (const element of node.exportClause.elements) {
273
- pushDeclaredExport({
274
- name: element.name.text,
275
- kind: element.isTypeOnly ? 'type' : 'unknown',
276
- lineStart:
277
- sourceFile.getLineAndCharacterOfPosition(
278
- element.getStart(sourceFile)
279
- ).line + 1,
280
- lineEnd:
281
- sourceFile.getLineAndCharacterOfPosition(element.getEnd()).line + 1,
282
- });
283
- }
284
- }
285
-
286
- if (
287
- ts.isCallExpression(node) &&
288
- ts.isIdentifier(node.expression) &&
289
- node.expression.text === 'require' &&
290
- node.arguments.length === 1 &&
291
- ts.isStringLiteral(node.arguments[0])
292
- ) {
293
- const sourceModule = node.arguments[0].text;
294
- const resolvedModule = resolveSpecifier(sourceModule) ?? undefined;
295
- importedSymbols.push({
296
- sourceModule,
297
- resolvedModule,
298
- importedName: '*',
299
- localName: 'require',
300
- isTypeOnly: false,
301
- ...importLine(node),
302
- });
303
- }
304
-
305
- ts.forEachChild(node, visit);
306
- };
307
-
308
- visit(sourceFile);
309
- return {
310
- internalDependencies: [...internal].sort(),
311
- externalDependencies: [...external].sort(),
312
- unresolvedDependencies: [...unresolved].sort(),
313
- declaredExports,
314
- importedSymbols,
315
- reExports,
316
- };
317
- }
318
-
319
- export function trackDependencyEdge(
320
- dependencyState: DependencyState,
321
- fromFile: string,
322
- toFile: string,
323
- importerIsTest: boolean
324
- ): void {
325
- addToMapSet(dependencyState.outgoing, fromFile, toFile);
326
- addToMapSet(dependencyState.incoming, toFile, fromFile);
327
- if (importerIsTest) {
328
- addToMapSet(dependencyState.incomingFromTests, toFile, fromFile);
329
- } else {
330
- addToMapSet(dependencyState.incomingFromProduction, toFile, fromFile);
331
- }
332
- }
333
-
334
- export function collectDependencyProfile(
335
- sourceFile: ts.SourceFile,
336
- filePath: string,
337
- packageName: string,
338
- options: AnalysisOptions,
339
- dependencyState: DependencyState
340
- ): DependencyProfile {
341
- const fileRelative = toRepoPath(filePath, options.root);
342
- dependencyState.files.add(fileRelative);
343
-
344
- const deps = collectModuleDependencies(sourceFile, filePath, options.root);
345
- const importerIsTest = isTestFile(filePath);
346
-
347
- for (const internalDependency of deps.internalDependencies) {
348
- const normalizedDep = normalizeDependencyValue(internalDependency);
349
- trackDependencyEdge(
350
- dependencyState,
351
- fileRelative,
352
- normalizedDep,
353
- importerIsTest
354
- );
355
- }
356
-
357
- if (deps.externalDependencies.length > 0) {
358
- dependencyState.externalCounts.set(
359
- fileRelative,
360
- new Set(deps.externalDependencies)
361
- );
362
- }
363
-
364
- if (deps.unresolvedDependencies.length > 0) {
365
- dependencyState.unresolvedCounts.set(
366
- fileRelative,
367
- new Set(deps.unresolvedDependencies)
368
- );
369
- }
370
-
371
- dependencyState.declaredExportsByFile.set(fileRelative, deps.declaredExports);
372
- dependencyState.importedSymbolsByFile.set(fileRelative, deps.importedSymbols);
373
- dependencyState.reExportsByFile.set(fileRelative, deps.reExports);
374
-
375
- return {
376
- ...deps,
377
- package: packageName,
378
- file: fileRelative,
379
- };
380
- }
381
-
382
- export function dependencyProfileToRecord(
383
- fileRelative: string,
384
- dependencyState: DependencyState
385
- ): DependencyRecord {
386
- const outbound = dependencyState.outgoing.get(fileRelative) || new Set();
387
- const inbound = dependencyState.incoming.get(fileRelative) || new Set();
388
- const prodIn =
389
- dependencyState.incomingFromProduction.get(fileRelative) || new Set();
390
- const testIn =
391
- dependencyState.incomingFromTests.get(fileRelative) || new Set();
392
- const external =
393
- dependencyState.externalCounts.get(fileRelative) || new Set();
394
- const unresolvedSet =
395
- dependencyState.unresolvedCounts.get(fileRelative) || new Set();
396
-
397
- return {
398
- file: fileRelative,
399
- outboundCount: outbound.size,
400
- inboundCount: inbound.size,
401
- inboundFromProduction: prodIn.size,
402
- inboundFromTests: testIn.size,
403
- externalDependencyCount: external.size,
404
- unresolvedDependencyCount: unresolvedSet.size,
405
- };
406
- }