octocode-cli 1.2.8 → 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 -11767
  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
@@ -8,6 +8,8 @@ import {
8
8
  } from './analysis.js';
9
9
  import {
10
10
  categoryBreakdown,
11
+ computeFeatureScores,
12
+ computeQualityAspectRatings,
11
13
  generateSummaryMd,
12
14
  severityBreakdown,
13
15
  } from './summary-md.js';
@@ -17,6 +19,7 @@ import { computeHotFiles } from '../detectors/index.js';
17
19
  import { PILLAR_CATEGORIES } from '../types/index.js';
18
20
 
19
21
  import type {
22
+ AgentOutputData,
20
23
  AnalysisOptions,
21
24
  DependencyState,
22
25
  DependencySummary,
@@ -24,6 +27,7 @@ import type {
24
27
  FileCriticality,
25
28
  FileEntry,
26
29
  Finding,
30
+ ScanSummaryData,
27
31
  TreeEntry,
28
32
  } from '../types/index.js';
29
33
 
@@ -46,12 +50,12 @@ export interface FullReport {
46
50
  repoRoot: string;
47
51
  options: Record<string, unknown>;
48
52
  parser: Record<string, unknown>;
49
- summary: Record<string, unknown>;
53
+ summary: ScanSummaryData;
50
54
  fileInventory: FileEntry[];
51
55
  duplicateFlows: Record<string, unknown>;
52
56
  dependencyGraph: DependencySummary;
53
57
  dependencyFindings: Finding[];
54
- agentOutput: Record<string, unknown>;
58
+ agentOutput: AgentOutputData;
55
59
  optimizationOpportunities: DuplicateFlowHint[];
56
60
  optimizationFindings: Finding[];
57
61
  parseErrors: { file: string; message: string }[];
@@ -66,7 +70,8 @@ export function writeMultiFileReport(
66
70
  options: AnalysisOptions,
67
71
  dependencyState: DependencyState,
68
72
  dependencySummary: DependencySummary,
69
- fileCriticalityByPath: Map<string, FileCriticality>
73
+ fileCriticalityByPath: Map<string, FileCriticality>,
74
+ graphOpts: GraphRenderOptions = {}
70
75
  ): Record<string, string> {
71
76
  fs.mkdirSync(dir, { recursive: true });
72
77
 
@@ -129,6 +134,12 @@ export function writeMultiFileReport(
129
134
  hotFiles,
130
135
  graphAnalytics
131
136
  );
137
+ const qualityRating = computeQualityAspectRatings(allFindings, {
138
+ fileInventory: enrichedFileInventory,
139
+ hotFiles,
140
+ reportAnalysis,
141
+ includeTests: options.includeTests,
142
+ });
132
143
 
133
144
  writeJson('architecture.json', {
134
145
  schemaVersion: REPORT_SCHEMA_VERSION,
@@ -214,7 +225,8 @@ export function writeMultiFileReport(
214
225
  const graphMd = generateMermaidGraph(
215
226
  dependencyState,
216
227
  dependencySummary,
217
- fileCriticalityByPath
228
+ fileCriticalityByPath,
229
+ graphOpts
218
230
  );
219
231
  fs.writeFileSync(path.join(dir, 'graph.md'), graphMd, 'utf8');
220
232
  outputFiles.graph = 'graph.md';
@@ -248,6 +260,13 @@ export function writeMultiFileReport(
248
260
  strongestGraphSignal: reportAnalysis.strongestGraphSignal,
249
261
  strongestAstSignal: reportAnalysis.strongestAstSignal,
250
262
  combinedSignals: reportAnalysis.combinedSignals,
263
+ featureScores: computeFeatureScores(
264
+ allFindings,
265
+ report.summary.totalFiles ?? 0,
266
+ options.features,
267
+ { hotFiles }
268
+ ),
269
+ qualityRating,
251
270
  recommendedValidation: reportAnalysis.recommendedValidation,
252
271
  investigationPrompts: reportAnalysis.investigationPrompts,
253
272
  parseErrors: report.parseErrors,
@@ -271,6 +290,7 @@ export function writeMultiFileReport(
271
290
  securityFindings,
272
291
  testQualityFindings,
273
292
  reportAnalysis,
293
+ fileInventory: enrichedFileInventory,
274
294
  });
275
295
  fs.writeFileSync(path.join(dir, 'summary.md'), summaryMd, 'utf8');
276
296
  outputFiles.summaryMd = 'summary.md';
@@ -280,10 +300,17 @@ export function writeMultiFileReport(
280
300
  return outputFiles;
281
301
  }
282
302
 
303
+ export interface GraphRenderOptions {
304
+ focus?: string | null;
305
+ focusDepth?: number;
306
+ collapse?: number | null;
307
+ }
308
+
283
309
  export function generateMermaidGraph(
284
310
  dependencyState: DependencyState,
285
311
  dependencySummary: DependencySummary,
286
- _fileCriticalityByPath: Map<string, FileCriticality>
312
+ _fileCriticalityByPath: Map<string, FileCriticality>,
313
+ renderOpts: GraphRenderOptions = {}
287
314
  ): string {
288
315
  const lines: string[] = [];
289
316
  lines.push('# Dependency Graph\n');
@@ -310,14 +337,30 @@ export function generateMermaidGraph(
310
337
  const renderedNodes = new Set<string>();
311
338
  const renderedEdges = new Set<string>();
312
339
 
313
- const topModules = [
314
- ...(dependencySummary.outgoingTop || []).slice(0, 15),
315
- ...(dependencySummary.inboundTop || []).slice(0, 15),
316
- ...(dependencySummary.criticalModules || []).slice(0, 10),
317
- ];
318
- const moduleSet = new Set(topModules.map(m => m.file));
319
- for (const cycle of (dependencySummary.cycles || []).slice(0, 5)) {
320
- for (const f of cycle.path) moduleSet.add(f);
340
+ let moduleSet: Set<string>;
341
+
342
+ if (renderOpts.focus) {
343
+ moduleSet = collectFocusNeighborhood(
344
+ renderOpts.focus,
345
+ renderOpts.focusDepth ?? 1,
346
+ dependencyState
347
+ );
348
+ lines.push(`%% Focus: ${renderOpts.focus} (depth=${renderOpts.focusDepth ?? 1})`);
349
+ } else {
350
+ const topModules = [
351
+ ...(dependencySummary.outgoingTop || []).slice(0, 15),
352
+ ...(dependencySummary.inboundTop || []).slice(0, 15),
353
+ ...(dependencySummary.criticalModules || []).slice(0, 10),
354
+ ];
355
+ moduleSet = new Set(topModules.map(m => m.file));
356
+ for (const cycle of (dependencySummary.cycles || []).slice(0, 5)) {
357
+ for (const f of cycle.path) moduleSet.add(f);
358
+ }
359
+ }
360
+
361
+ if (renderOpts.collapse != null && renderOpts.collapse > 0) {
362
+ const collapsed = collapseToFolderDepth(moduleSet, dependencyState, renderOpts.collapse);
363
+ return renderCollapsedGraph(collapsed, lines);
321
364
  }
322
365
 
323
366
  for (const file of moduleSet) {
@@ -428,3 +471,83 @@ export function generateMermaidGraph(
428
471
 
429
472
  return lines.join('\n');
430
473
  }
474
+
475
+ export function collectFocusNeighborhood(
476
+ focus: string,
477
+ depth: number,
478
+ state: DependencyState
479
+ ): Set<string> {
480
+ const focusKey = [...state.outgoing.keys()].find(
481
+ k => k === focus || k.endsWith(`/${focus}`)
482
+ );
483
+ if (!focusKey) return new Set();
484
+
485
+ const result = new Set<string>([focusKey]);
486
+ let frontier = new Set([focusKey]);
487
+
488
+ for (let d = 0; d < depth; d++) {
489
+ const next = new Set<string>();
490
+ for (const node of frontier) {
491
+ for (const neighbor of state.outgoing.get(node) || []) {
492
+ if (!result.has(neighbor)) { result.add(neighbor); next.add(neighbor); }
493
+ }
494
+ for (const neighbor of state.incoming.get(node) || []) {
495
+ if (!result.has(neighbor)) { result.add(neighbor); next.add(neighbor); }
496
+ }
497
+ }
498
+ frontier = next;
499
+ if (frontier.size === 0) break;
500
+ }
501
+ return result;
502
+ }
503
+
504
+ interface CollapsedEdge { from: string; to: string; weight: number }
505
+
506
+ export function collapseToFolderDepth(
507
+ moduleSet: Set<string>,
508
+ state: DependencyState,
509
+ depth: number
510
+ ): { nodes: Set<string>; edges: CollapsedEdge[] } {
511
+ const toFolder = (f: string) => f.split('/').slice(0, depth).join('/');
512
+ const nodes = new Set<string>();
513
+ const edgeMap = new Map<string, number>();
514
+
515
+ for (const file of moduleSet) nodes.add(toFolder(file));
516
+
517
+ for (const file of moduleSet) {
518
+ const from = toFolder(file);
519
+ for (const dep of state.outgoing.get(file) || []) {
520
+ const to = toFolder(dep);
521
+ if (from === to) continue;
522
+ nodes.add(to);
523
+ const key = `${from}::${to}`;
524
+ edgeMap.set(key, (edgeMap.get(key) || 0) + 1);
525
+ }
526
+ }
527
+
528
+ const edges: CollapsedEdge[] = [];
529
+ for (const [key, weight] of edgeMap) {
530
+ const [from, to] = key.split('::');
531
+ edges.push({ from, to, weight });
532
+ }
533
+
534
+ return { nodes, edges };
535
+ }
536
+
537
+ function renderCollapsedGraph(
538
+ data: { nodes: Set<string>; edges: CollapsedEdge[] },
539
+ lines: string[]
540
+ ): string {
541
+ const sanitize = (id: string): string => id.replace(/[^a-zA-Z0-9]/g, '_');
542
+
543
+ for (const node of data.nodes) {
544
+ lines.push(` ${sanitize(node)}["${node}"]`);
545
+ }
546
+ for (const edge of data.edges) {
547
+ const label = edge.weight > 1 ? `|${edge.weight}|` : '';
548
+ lines.push(` ${sanitize(edge.from)} -->${label} ${sanitize(edge.to)}`);
549
+ }
550
+ lines.push('```\n');
551
+ lines.push(`> Collapsed to folder depth. ${data.nodes.size} folders, ${data.edges.length} edges.\n`);
552
+ return lines.join('\n');
553
+ }
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Bootstrap entry point for the octocode-code-engineer skill.
4
+ * Ensures npm dependencies are installed before loading the scanner,
5
+ * which requires native addons (tree-sitter, @ast-grep/napi) and
6
+ * pure-JS packages (typescript) that cannot be bundled.
7
+ */
8
+ import { spawnSync } from 'node:child_process';
9
+ import { existsSync } from 'node:fs';
10
+ import { createRequire } from 'node:module';
11
+ import { dirname, join } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ // When compiled, this file lives at <skill>/scripts/run.js
16
+ // Go up one level from scripts/ to reach the skill root
17
+ const skillDir = dirname(dirname(__filename));
18
+ const nodeModulesDir = join(skillDir, 'node_modules');
19
+ const require = createRequire(import.meta.url);
20
+
21
+ const REQUIRED_PACKAGES = [
22
+ 'typescript',
23
+ '@ast-grep/napi',
24
+ 'tree-sitter',
25
+ 'tree-sitter-typescript',
26
+ ];
27
+
28
+ function isDependencyAvailable(pkgName: string): boolean {
29
+ if (existsSync(join(nodeModulesDir, pkgName))) {
30
+ return true;
31
+ }
32
+
33
+ try {
34
+ require.resolve(pkgName, { paths: [skillDir] });
35
+ return true;
36
+ } catch {
37
+ return false;
38
+ }
39
+ }
40
+
41
+ const missingPackages = REQUIRED_PACKAGES.filter(pkg => !isDependencyAvailable(pkg));
42
+
43
+ if (missingPackages.length > 0) {
44
+ process.stderr.write(
45
+ `[octocode-scan] Missing dependencies (${missingPackages.join(', ')}). Installing...\n`
46
+ );
47
+ const result = spawnSync(
48
+ 'npm',
49
+ ['install', '--prefix', skillDir, '--no-audit', '--no-fund'],
50
+ {
51
+ stdio: 'inherit',
52
+ shell: false,
53
+ }
54
+ );
55
+ if (result.status !== 0) {
56
+ process.stderr.write(
57
+ `[octocode-scan] Failed to install dependencies.\n` +
58
+ `Run manually: cd ${skillDir} && npm install\n`
59
+ );
60
+ process.exit(1);
61
+ }
62
+ process.stderr.write('[octocode-scan] Dependencies installed.\n');
63
+ }
64
+
65
+ // Dependencies are now available — load and run the main scanner
66
+ const { main, EXIT_ERROR } = await import('./pipeline/main.js');
67
+ const { OptionsError } = await import('./pipeline/create-options.js');
68
+ try {
69
+ const exitCode = await main();
70
+ process.exitCode = exitCode;
71
+ } catch (err: unknown) {
72
+ if (err instanceof OptionsError) {
73
+ process.stderr.write(`${err.message}\n`);
74
+ } else {
75
+ console.error(err);
76
+ }
77
+ process.exitCode = EXIT_ERROR;
78
+ }
@@ -32,7 +32,7 @@ describe('sanity checks', () => {
32
32
  expect(parsed.json).toBe(true);
33
33
  expect(parsed.includeTests).toBe(true);
34
34
  expect(parsed.parser).toBe('typescript');
35
- expect(parsed.minFunctionStatements).toBe(10);
35
+ expect(parsed.thresholds.minFunctionStatements).toBe(10);
36
36
  expect(parsed.findingsLimit).toBe(120);
37
37
  expect(parsed.packageRoot).toMatch(/packages$/);
38
38
  });
@@ -0,0 +1,25 @@
1
+ export type AnalysisLens = 'graph' | 'ast' | 'hybrid';
2
+
3
+ export interface RecommendedValidation {
4
+ summary: string;
5
+ tools: string[];
6
+ }
7
+
8
+ export interface FlowTraceStep {
9
+ file: string;
10
+ lineStart: number;
11
+ lineEnd: number;
12
+ label: string;
13
+ }
14
+
15
+ export interface AnalysisSignal {
16
+ kind: string;
17
+ lens: AnalysisLens;
18
+ title: string;
19
+ summary: string;
20
+ confidence: 'high' | 'medium' | 'low';
21
+ score: number;
22
+ files: string[];
23
+ categories: string[];
24
+ evidence: Record<string, unknown>;
25
+ }
@@ -0,0 +1,134 @@
1
+ import type { CodeLocation } from './core.js';
2
+
3
+ export interface SuspiciousString {
4
+ lineStart: number;
5
+ lineEnd: number;
6
+ kind: 'hardcoded-secret' | 'sql-injection' | 'secret-assignment';
7
+ snippet?: string;
8
+ context?:
9
+ | 'literal'
10
+ | 'regex-definition'
11
+ | 'template'
12
+ | 'comment'
13
+ | 'error-message';
14
+ }
15
+
16
+ export interface TimerCall {
17
+ kind: 'setInterval' | 'setTimeout';
18
+ lineStart: number;
19
+ lineEnd: number;
20
+ hasCleanup: boolean;
21
+ }
22
+
23
+ export interface TestBlock {
24
+ name: string;
25
+ lineStart: number;
26
+ lineEnd: number;
27
+ assertionCount: number;
28
+ }
29
+
30
+ export interface FocusedTestCall {
31
+ kind:
32
+ | 'it.only'
33
+ | 'test.only'
34
+ | 'describe.only'
35
+ | 'it.skip'
36
+ | 'test.skip'
37
+ | 'describe.skip'
38
+ | 'it.todo'
39
+ | 'test.todo';
40
+ lineStart: number;
41
+ lineEnd: number;
42
+ }
43
+
44
+ export interface TimerControlCall {
45
+ kind:
46
+ | 'jest.useFakeTimers'
47
+ | 'jest.useRealTimers'
48
+ | 'vi.useFakeTimers'
49
+ | 'vi.useRealTimers'
50
+ | 'other';
51
+ lineStart: number;
52
+ lineEnd: number;
53
+ }
54
+
55
+ export interface MockControlCall extends CodeLocation {
56
+ kind: 'spy' | 'stub' | 'restore' | 'restoreAll';
57
+ target?: string;
58
+ }
59
+
60
+ export interface TestProfile {
61
+ testBlocks: TestBlock[];
62
+ mockCalls: CodeLocation[];
63
+ setupCalls: Array<{
64
+ kind: 'beforeAll' | 'beforeEach' | 'afterAll' | 'afterEach';
65
+ lineStart: number;
66
+ }>;
67
+ mutableStateDecls: CodeLocation[];
68
+ focusedCalls: FocusedTestCall[];
69
+ timerControls: TimerControlCall[];
70
+ mockRestores: MockControlCall[];
71
+ spyOrStubCalls: MockControlCall[];
72
+ }
73
+
74
+ export interface InputSourceInfo {
75
+ functionName: string;
76
+ lineStart: number;
77
+ lineEnd: number;
78
+ sourceParams: string[];
79
+ hasSinkInBody: boolean;
80
+ sinkKinds: string[];
81
+ hasValidation: boolean;
82
+ callsWithInputArgs: Array<{ callee: string; lineStart: number }>;
83
+ paramConfidence: 'high' | 'medium' | 'low';
84
+ }
85
+
86
+ export type TopLevelEffectKind =
87
+ | 'sync-io'
88
+ | 'exec-sync'
89
+ | 'eval'
90
+ | 'timer'
91
+ | 'listener'
92
+ | 'process-handler'
93
+ | 'side-effect-import'
94
+ | 'top-level-await'
95
+ | 'dynamic-import';
96
+
97
+ export interface TopLevelEffect {
98
+ kind: TopLevelEffectKind;
99
+ lineStart: number;
100
+ lineEnd: number;
101
+ detail: string;
102
+ weight: number;
103
+ confidence: 'high' | 'medium' | 'low';
104
+ }
105
+
106
+ export interface EffectProfile {
107
+ totalEffects: number;
108
+ totalWeight: number;
109
+ byKind: Partial<Record<TopLevelEffectKind, number>>;
110
+ highestRisk: TopLevelEffectKind | null;
111
+ }
112
+
113
+ export interface SymbolUsageSummary {
114
+ declaredExportCount: number;
115
+ importedSymbolCount: number;
116
+ internalImportCount: number;
117
+ externalImportCount: number;
118
+ reExportCount: number;
119
+ dominantInternalDependency: string | null;
120
+ }
121
+
122
+ export interface BoundaryRoleHint {
123
+ role: string;
124
+ confidence: 'high' | 'medium' | 'low';
125
+ reasons: string[];
126
+ }
127
+
128
+ export interface CfgFlags {
129
+ hasValidationChecks: boolean;
130
+ hasCleanupHooks: boolean;
131
+ exitPointCount: number;
132
+ asyncBoundaryCount: number;
133
+ hasTopLevelEffects: boolean;
134
+ }
@@ -2,67 +2,94 @@ import path from 'node:path';
2
2
 
3
3
  import * as ts from 'typescript';
4
4
 
5
- import type { AnalysisOptions } from './interfaces.js';
5
+ import type { AnalysisOptions, Thresholds } from './core.js';
6
6
 
7
- export const DEFAULT_OPTS: AnalysisOptions = {
8
- minFunctionStatements: 6,
9
- minFlowStatements: 6,
10
- root: process.cwd(),
11
- includeTests: false,
12
- emitTree: true,
13
- json: false,
14
- graph: false,
15
- out: null,
16
- treeDepth: 4,
17
- findingsLimit: Infinity,
18
- parser: 'auto',
19
- criticalComplexityThreshold: 30,
20
- deepLinkTopN: 12,
21
- packageRoot: path.join(process.cwd(), 'packages'),
22
- ignoreDirs: new Set([
23
- '.git',
24
- '.next',
25
- '.yarn',
26
- '.cache',
27
- '.octocode',
28
- 'node_modules',
29
- 'dist',
30
- 'coverage',
31
- 'out',
32
- ]),
7
+ export const DEFAULT_THRESHOLDS: Thresholds = {
8
+ // Architecture
33
9
  couplingThreshold: 15,
34
10
  fanInThreshold: 20,
35
11
  fanOutThreshold: 15,
36
12
  godModuleStatements: 500,
37
13
  godModuleExports: 20,
14
+ barrelSymbolThreshold: 30,
15
+ sdpMinDelta: 0.15,
16
+ sdpMaxSourceInstability: 0.6,
17
+ layerOrder: [],
18
+
19
+ // Code quality
20
+ minFunctionStatements: 6,
21
+ minFlowStatements: 6,
22
+ criticalComplexityThreshold: 30,
38
23
  godFunctionStatements: 100,
39
24
  godFunctionMiThreshold: 10,
40
25
  cognitiveComplexityThreshold: 15,
41
- barrelSymbolThreshold: 30,
42
- layerOrder: [],
43
26
  parameterThreshold: 5,
44
27
  halsteadEffortThreshold: 500_000,
45
28
  maintainabilityIndexThreshold: 20,
46
29
  anyThreshold: 5,
47
30
  flowDupThreshold: 3,
48
- maxRecsPerCategory: 2,
49
- features: null,
50
- scope: null,
51
- scopeSymbols: null,
52
- noCache: false,
53
- clearCache: false,
54
- semantic: false,
31
+ similarityThreshold: 0.85,
32
+ deepNestingThreshold: 5,
33
+ multipleReturnThreshold: 6,
34
+ magicStringMinOccurrences: 3,
35
+ booleanParamThreshold: 3,
36
+
37
+ // Semantic
55
38
  overrideChainThreshold: 3,
56
39
  shotgunThreshold: 8,
57
- sdpMinDelta: 0.15,
58
- sdpMaxSourceInstability: 0.6,
40
+
41
+ // Security
59
42
  secretEntropyThreshold: 4.5,
60
43
  secretMinLength: 20,
61
- similarityThreshold: 0.85,
44
+
45
+ // Test quality
62
46
  mockThreshold: 10,
63
- noDiversify: false,
47
+ };
48
+
49
+ export const DEFAULT_OPTS: AnalysisOptions = {
50
+ root: process.cwd(),
51
+ out: null,
52
+ json: false,
53
+ packageRoot: path.join(process.cwd(), 'packages'),
54
+ parser: 'auto',
55
+ includeTests: false,
56
+ emitTree: true,
57
+ treeDepth: 4,
58
+ noCache: false,
59
+ clearCache: false,
60
+ semantic: false,
61
+ graph: false,
64
62
  graphAdvanced: false,
65
63
  flow: false,
64
+ scope: null,
65
+ scopeSymbols: null,
66
+ features: null,
67
+ ignoreDirs: new Set([
68
+ '.git',
69
+ '.next',
70
+ '.yarn',
71
+ '.cache',
72
+ '.octocode',
73
+ 'node_modules',
74
+ 'dist',
75
+ 'coverage',
76
+ 'out',
77
+ ]),
78
+ findingsLimit: Infinity,
79
+ noDiversify: false,
80
+ maxRecsPerCategory: 2,
81
+ deepLinkTopN: 12,
82
+ thresholds: { ...DEFAULT_THRESHOLDS },
83
+
84
+ affected: null,
85
+ saveBaseline: false,
86
+ ignoreKnown: null,
87
+ reporter: 'default',
88
+ focus: null,
89
+ focusDepth: 1,
90
+ collapse: null,
91
+ atLeast: null,
92
+ configFile: null,
66
93
  };
67
94
 
68
95
  export const PILLAR_CATEGORIES: Record<string, string[]> = {
@@ -123,6 +150,14 @@ export const PILLAR_CATEGORIES: Record<string, string[]> = {
123
150
  'unbounded-collection',
124
151
  'similar-function-body',
125
152
  'message-chain',
153
+ 'deep-nesting',
154
+ 'multiple-return-paths',
155
+ 'catch-rethrow',
156
+ 'magic-string',
157
+ 'boolean-parameter-cluster',
158
+ 'promise-all-unhandled',
159
+ 'export-surface-density',
160
+ 'change-risk',
126
161
  ],
127
162
  'dead-code': [
128
163
  'dead-export',
@@ -221,7 +256,6 @@ export const TS_TREE_SITTER_CONTROL_TYPES = new Set<string>([
221
256
  'for_of_statement',
222
257
  'for_await_statement',
223
258
  'conditional_expression',
224
- 'conditional_expression?',
225
259
  'catch_clause',
226
260
  ]);
227
261