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,418 +0,0 @@
1
- ---
2
- name: octocode-code-engineer
3
- description: "Code engineering platform: CLI scanner + AST engine + Octocode MCP local/LSP tools. Use for any engineering task — not just reviews. Understand unfamiliar code, explore architecture, write code with blast radius awareness, plan refactors safely, audit quality, review changes, analyze test gaps, check security, or assess dependency health. Integrates into your coding workflow: pre-implementation checks, impact-aware coding, and post-change verification."
4
- compatibility: "Requires Node.js >= 18. Works with any AI coding agent. Best with Octocode MCP local + LSP tools for hybrid validation. Pre-built scripts only; no install or build step required."
5
- ---
6
-
7
- # Octocode Code Engineer
8
-
9
- Code engineering platform — understand, build, and improve code with full codebase awareness.
10
-
11
- The scanner is a hypothesis generator, not a source of truth. Every finding must be validated before it becomes a recommendation.
12
-
13
- **Architecture principle: deterministic detection + AI-powered validation.** Detectors use cheap structural AST signals (loop depth, call count, fan-in/fan-out, statement count) to flag candidates. They intentionally do NOT hardcode domain-specific heuristics (regex patterns, method name lists, keyword matching). The AI agent is the smart layer — it uses its tools (AST search, LSP, localGetFileContent) to read the actual code, confirm or dismiss the hypothesis, and explain the evidence. This separation keeps detectors fast, maintainable, and language-generic while the agent adapts to any codebase.
14
-
15
- ## Capabilities
16
-
17
- Use this skill throughout your engineering workflow — not just for reviews.
18
-
19
- **Understand & Navigate**
20
-
21
- | Mode | Trigger | What it does |
22
- |------|---------|-------------|
23
- | **Codebase Exploration** | "how does X work", "explore this module", "understand this codebase" | Structure → Search → Fetch funnel with LSP semantic tracing |
24
- | **Pre-Implementation Check** | "before I build X", "where should this live" | Layout → existing patterns → dependency map → pick safe location |
25
-
26
- **Build & Change**
27
-
28
- | Mode | Trigger | What it does |
29
- |------|---------|-------------|
30
- | **Smart Coding** | "implement this", "code this safely", "add feature", "fix this" | Pre-check (blast radius, consumers, coupling) → code → verify (re-scan, lint, test, build) |
31
- | **Refactoring Planning** | "plan this refactor", "safe to rename", "how to restructure" | Impact analysis → blast radius → test/prod split → decomposition candidates |
32
-
33
- **Analyze & Improve**
34
-
35
- | Mode | Trigger | What it does |
36
- |------|---------|-------------|
37
- | **Architecture Analysis** | "check architecture", "find cycles", "dependency analysis" | Dependency graph, cycles, SCC clusters, coupling hotspots, chokepoints, layer violations |
38
- | **Quality Audit** | "audit code", "find issues", "scan for problems" | Scan → triage → validate → present → plan fixes → apply → verify |
39
- | **Code Quality Review** | "review this module", "is this code good" | AST smell sweep + complexity + dead code + maintainability |
40
- | **Code Review** | "review impact of changes", "what does this PR touch" | Change impact → architecture delta → new issues → test coverage |
41
- | **Test Strategy** | "test coverage gaps", "what needs testing" | Coverage mapping + test quality (requires `--include-tests`) + critical untested code (graph-based, always on) |
42
- | **Security Analysis** | "security review", "find vulnerabilities", "check sensitive flows" | Map project security context → identify critical paths (auth, payments, user data, DB, external services) → trace sensitive flows with LSP → validate scanner findings → check exposure points (APIs, logs, errors, third-party) |
43
- | **Dependency Health** | "unused deps", "import analysis" | Dead-code scan + reference counting + import mapping |
44
-
45
- ## Flow at a Glance
46
-
47
- **Explore** (understand code):
48
- ```
49
- Structure (localViewStructure, ast/tree-search.js, index.js --graph)
50
- → Search (localSearchCode, ast/search.js, lspFindReferences)
51
- → Fetch (localGetFileContent, lspGotoDefinition)
52
- → Present understanding with evidence
53
- ```
54
-
55
- **Code** (implement with awareness):
56
- ```
57
- Pre-check: blast radius (lspFindReferences → consumer count, test/prod split)
58
- → Architecture safety (index.js --scope=<target> --graph → coupling/cycle risk)
59
- → Existing patterns (ast/search.js, localSearchCode → follow conventions)
60
- → Code the change
61
- → Verify: lint + test + build + re-scan --scope=<changed>
62
- ```
63
-
64
- **Analyze** (architecture health):
65
- ```
66
- index.js --graph --graph-advanced --flow --semantic
67
- → architecture.json: cycles, SCC clusters, chokepoints, hotFiles, critical paths
68
- → Validate with LSP: fan-in/fan-out per module, consumer maps
69
- → Present architecture health with evidence
70
- ```
71
-
72
- **Audit** (quality review):
73
- ```
74
- Scan (CLI) → Read summary.md → Triage findings.json
75
- → Validate each finding with Octocode local tools
76
- → Present validated findings → ASK user before planning fixes
77
- → Apply fixes (TDD when possible) → lint + test + build
78
- → Re-scan to verify finding count drops
79
- ```
80
-
81
- ## Tools
82
-
83
- Three layers work together — use any combination that fits the problem.
84
-
85
- **Layer 1: CLI scan scripts** — broad hypothesis generation, structural proof
86
-
87
- | Script | Purpose |
88
- |--------|---------|
89
- | `scripts/index.js` | Full scan with `--scope`, `--graph`, `--flow`, `--semantic`; scoped re-scan for verification |
90
- | `scripts/ast/search.js` | Structural search on source files (`@ast-grep/napi`); 16 presets, pattern/kind/rule modes; zero false-positive structural checks |
91
- | `scripts/ast/tree-search.js` | Fast AST triage from scan artifacts; decides where to look before deeper tools |
92
-
93
- **Layer 2: Octocode local tools** — fast text search, file discovery, targeted reading
94
-
95
- | Tool | Purpose |
96
- |------|---------|
97
- | `localSearchCode` | The bridge tool — provides `lineHint` for all LSP calls; `filesOnly=true` for fast discovery |
98
- | `localGetFileContent` | `matchString` jumps to exact section; `charOffset` pagination for large files; `fullContent` for small files |
99
- | `localViewStructure` | Project layout at any depth; `filesOnly`/`directoriesOnly` filters |
100
- | `localFindFiles` | `sortBy=size` finds hotspots; `modifiedWithin` finds active code; multi-name patterns |
101
-
102
- **Layer 3: LSP tools** — semantic proof (definitions, usages, call chains)
103
-
104
- | Tool | Purpose |
105
- |------|---------|
106
- | `lspFindReferences` | Definitive consumer count; `includePattern`/`excludePattern` for test/prod split; works on types, vars, exports |
107
- | `lspCallHierarchy` | `incoming` = who calls this; `outgoing` = what does this call; `fromRanges[]` for exact sites. **Functions only** — fails on types/vars |
108
- | `lspGotoDefinition` | Jump to where a symbol is defined; cross-file resolution |
109
-
110
- ### Research Approach
111
-
112
- Three primitives power every investigation: **Search** (find targets), **Fetch** (read evidence), **Structure** (see shape). Chain them as a funnel:
113
-
114
- ```
115
- STRUCTURE → SEARCH → FETCH
116
- 80-90% 90-99% 100%
117
- ```
118
-
119
- **Core rules:**
120
- - `localSearchCode` always first → produces `lineHint` for all LSP tools. Never guess `lineHint`.
121
- - `ast/search.js` for structural proof (zero false positives); `ast/tree-search.js` for fast triage from scan artifacts.
122
- - `lspFindReferences` for types/vars/exports; `lspCallHierarchy` for functions only (fails on types).
123
- - `localGetFileContent(matchString=...)` for targeted reading; `fullContent` only for files <200 lines.
124
- - `localViewStructure` before deep reading — know the layout first.
125
- - Reverse the funnel when `lspHints` from `findings.json` provide exact coordinates.
126
-
127
- For the complete methodology (all tool tables, flags, decision tables, AST presets, efficiency tips) and all validated hybrid workflows, see [tool workflows](./references/tool-workflows.md).
128
-
129
- The agent decides which tools to use. No required order — pick what makes sense for the finding. If Octocode MCP is unavailable, fall back to CLI-only and mark confidence explicitly.
130
-
131
- **MCP detection**: try any local tool (e.g. `localSearchCode`). If it fails → MCP not available, use CLI-only.
132
-
133
- ## Principles
134
-
135
- - Findings are leads, not facts — validate with Octocode local tools before presenting.
136
- - **Be the smart layer**: detectors flag structural candidates; you decide what's real. Read the code (`localGetFileContent`, `ast/search.js`), trace relationships (`lspCallHierarchy`, `lspFindReferences`), check context. Dismiss findings that don't hold up. Promote findings with strong evidence. Explain your reasoning with `file:line` citations.
137
- - **Use `lspHints`**: many findings include `lspHints[]` — pre-computed tool calls that point you to the fastest validation path. Run them before inventing your own.
138
- - Read `summary.md` first: scope, health scores, analysis signals, hotspots, recommended validation.
139
- - Let the problem drive tool choice — pick the tools that fit the finding, not a fixed sequence.
140
- - CLI-only is the fallback when Octocode MCP is unavailable, not the default.
141
- - Use `--help` and reference docs for flags, categories, and presets — do not restate them.
142
- - Detect the project environment before running commands — see Project Environment.
143
- - **TDD when possible**: for behavioral or logic fixes, write a failing test first, then make it pass. Skip for mechanical cleanups (comment removal, dead re-export deletion). See [TDD Fix Playbook](./references/playbooks.md).
144
- - **Validate fixes with the project toolchain**: after each fix batch, run the project's lint (with `--fix` if supported), tests, and build. Do not present fixes as done until the toolchain passes.
145
- - **Hygiene is part of every fix**: when touching a file, also remove redundant comments (comments that just restate the code) and redundant re-exports (barrel re-exports with 0 consumers). See [playbooks](./references/playbooks.md).
146
- - **Use the task tool** to create a todo list at the start of every review — one item per workflow step. Update status as you go. Always stop and ask the user before planning fixes (after Step 5) and before applying them (after Step 6).
147
- - Run only the pre-built scripts in `scripts/`. Never execute files from `src/`.
148
- - Use absolute paths with MCP/LSP tools.
149
- - Do not present live-code claims without validation when local/LSP tools are available.
150
- - Do not recommend broad refactors from one noisy finding.
151
- - If the scan and validation disagree, say so explicitly and lower confidence.
152
- - **Use shell commands for mechanical file operations**: for renaming, moving files, and bulk import-path rewrites, prefer `mv`, `sed`, `find + xargs`, `rg` over manual edits. Batch changes into scripts when touching many files. Detect the OS (`uname`) if commands differ across platforms (e.g. `sed -i` on Linux vs `sed -i ''` on macOS).
153
-
154
- ## Project Environment
155
-
156
- Never hardcode tool names. Detect the project setup before running lint, build, or test commands:
157
-
158
- 1. **Package manager**: `yarn.lock` → yarn, `pnpm-lock.yaml` → pnpm, `package-lock.json` → npm.
159
- 2. **Scripts**: read `package.json` `scripts` (both root and package-level in monorepos). Use actual script names — do not invent commands.
160
- 3. **Workspace context**: in monorepos, check `workspaces` config to decide between root-level (`yarn workspace <name> test`) or package-level (`cd packages/foo && yarn test`).
161
-
162
- ### Validation Commands
163
-
164
- After detecting the project environment, identify these three commands for post-fix validation:
165
-
166
- | Command | How to detect | Fallback |
167
- |---------|--------------|----------|
168
- | **Lint** | `scripts.lint` in `package.json`. If the script wraps eslint/biome/oxlint, use `<pm> run lint --fix`. | Skip lint step, warn user |
169
- | **Test** | `scripts.test` in `package.json`. In monorepos, prefer package-level test scope. | Skip test step, warn user |
170
- | **Build** | `scripts.build` in `package.json`. | Skip build step, warn user |
171
-
172
- Run all three after every fix batch. If lint `--fix` auto-corrects files, stage those corrections as part of the fix. If tests fail, investigate before continuing — the fix may have introduced a regression.
173
-
174
- ## Quick Start
175
-
176
- **Placeholders** used throughout this skill:
177
-
178
- - `<SKILL_DIR>` — absolute path to this skill's directory (where `SKILL.md` lives). All script paths are relative to it.
179
- - `<CURRENT_SCAN>` — timestamped scan output directory (e.g., `.octocode/scan/2026-03-19T00-01-19-468Z`). Find it at the top of `summary.md` or use the latest directory in `.octocode/scan/`.
180
- - `<TARGET_ROOT>` — root of the codebase being analyzed. Defaults to cwd, override with `--root`.
181
-
182
- Minimum path for a fresh scan — adapt based on the question:
183
-
184
- ```bash
185
- # 1. Scan (from target repo root)
186
- node <SKILL_DIR>/scripts/index.js --graph --flow
187
- # 2. Summary
188
- cat .octocode/scan/<latest>/summary.md
189
- # 3. Top findings
190
- cat .octocode/scan/<latest>/findings.json | jq '.optimizationFindings[:5]'
191
- # 4. Structural search (source files)
192
- node <SKILL_DIR>/scripts/ast/search.js -p 'console.log($$$ARGS)' --root ./src --json
193
- # 5. AST snapshot search (scan output)
194
- node <SKILL_DIR>/scripts/ast/tree-search.js -i .octocode/scan -k function_declaration --limit 25
195
- ```
196
-
197
- Use `--help` on any script for the full flag reference.
198
-
199
- ## Workflow
200
-
201
- ### Choose Your Mode
202
-
203
- | Your goal | Mode | Entry point |
204
- |-----------|------|------------|
205
- | Understand code, explore a module, trace a flow | **Explore** | Structure → Search → Fetch |
206
- | Write code, implement features, fix bugs | **Code** | Pre-check → Implement → Verify |
207
- | Check architecture health, find cycles/coupling | **Analyze** | Full scan → Validate → Report |
208
- | Audit quality, review code, find issues to fix | **Audit** | Scan → Triage → Validate → Fix → Verify |
209
-
210
- The agent picks the right mode based on your request. Modes compose — e.g. "implement X" triggers **Code** mode, which uses **Explore** internally to understand the target area first.
211
-
212
- ---
213
-
214
- ### Explore Mode
215
-
216
- Use when understanding code — tracing flows, learning a codebase, finding where things live, pre-implementation research.
217
-
218
- **Step 1. Orient** — see the shape before searching:
219
- ```
220
- localViewStructure(depth=2, directoriesOnly=true) → project layout
221
- localFindFiles(sortBy="size", sizeGreater="10k") → hotspot files
222
- ast/tree-search.js -k function_declaration --limit 25 → code structure triage
223
- ```
224
-
225
- **Step 2. Search** — find what you need:
226
- ```
227
- localSearchCode(pattern="target", filesOnly=true) → text matches + lineHint
228
- ast/search.js -p 'pattern' --json --root <dir> → structural matches
229
- lspFindReferences(lineHint=N) → all usages of a symbol
230
- lspCallHierarchy(incoming/outgoing, depth=1) → call relationships
231
- ```
232
-
233
- **Step 3. Deep-dive** — read evidence, trace across files:
234
- ```
235
- localGetFileContent(matchString="target", contextLines=5) → read specific section
236
- lspGotoDefinition(lineHint=N) → jump to definition
237
- lspCallHierarchy chain → follow call path across files
238
- ```
239
-
240
- **Step 4. Present** — explain with evidence (`file:line` citations, call chains, dependency maps).
241
-
242
- ---
243
-
244
- ### Code Mode
245
-
246
- Use when implementing features, fixing bugs, refactoring, or making any code change. Wraps every change with pre-check and verification.
247
-
248
- **Step 1. Understand the target** (uses Explore internally):
249
- ```
250
- localViewStructure(path="target/dir", depth=2) → module layout
251
- localGetFileContent(matchString="targetFunction", contextLines=10) → current code
252
- lspGotoDefinition(lineHint=N) → follow definitions
253
- ```
254
-
255
- **Step 2. Pre-check — blast radius**:
256
- ```
257
- lspFindReferences(lineHint=N, includeDeclaration=false) → total consumers
258
- lspFindReferences(excludePattern=["**/tests/**"]) → production consumers
259
- lspFindReferences(includePattern=["**/tests/**"]) → test coverage
260
- lspCallHierarchy(incoming, depth=1) → direct callers
261
- ```
262
-
263
- **Step 3. Architecture safety**:
264
- ```
265
- index.js --scope=<target-files> --features=architecture --graph → coupling/cycle risk
266
- ast/search.js -p 'similar-pattern' --json --root <nearby-dir> → follow existing conventions
267
- ```
268
-
269
- **Step 4. Implement the change**.
270
-
271
- **Step 5. Verify**:
272
- ```
273
- index.js --scope=<changed-files> --features=code-quality,architecture → no new issues
274
- ast/search.js --preset any-type --json --root <changed-dir> → no new : any
275
- lspFindReferences(lineHint=N) → moved/renamed symbols resolve
276
- <pm> run lint --fix && <pm> run test && <pm> run build → toolchain passes
277
- ```
278
-
279
- **If LSP unavailable** (Steps 2, 5): fall back to `localSearchCode` for usage counting, `ast/search.js` for structural verification, and scan JSON (`architecture.json` hotFiles/fan-in) for dependency data. Mark confidence as `medium` (structural) instead of `high` (semantic).
280
-
281
- **Decision gates**:
282
- - Step 2: >20 production consumers = high-risk, consider feature flag or incremental approach
283
- - Step 3: target touches cycle member or hotfile = extra caution
284
- - Step 5: new findings or test failures = fix before committing
285
-
286
- ---
287
-
288
- ### Analyze Mode
289
-
290
- Use for architecture health checks, dependency analysis, cycle detection, coupling assessment.
291
-
292
- **Step 1. Full architecture scan**:
293
- ```
294
- index.js --graph --graph-advanced --flow --features=architecture
295
- summary.md → architecture health score
296
- architecture.json → cycles, hotFiles, sccClusters, chokepoints → raw data
297
- graph.md → Mermaid visualization
298
- ```
299
-
300
- **Step 2. Validate hotspots with LSP**:
301
- ```
302
- lspFindReferences(lineHint=N, includeDeclaration=false) → fan-in per module
303
- lspCallHierarchy(outgoing, depth=1) → fan-out per module
304
- ast/search.js -p 'import { $$$N } from $MOD' --json → cross-module imports
305
- ```
306
-
307
- **Step 3. Present** — architecture health report with cycle list, SCC clusters, chokepoints, hotfiles (ranked), boundary violations, critical paths, fan-in/fan-out per module.
308
-
309
- ---
310
-
311
- ### Audit Mode
312
-
313
- Use for quality audits, code reviews, finding and fixing issues. This is the full review loop.
314
-
315
- **Step 1. Scan** — get hypotheses:
316
-
317
- ```bash
318
- node <SKILL_DIR>/scripts/index.js [flags] # default entry point
319
- node <SKILL_DIR>/scripts/index.js --graph --flow # good starting point
320
- node <SKILL_DIR>/scripts/index.js --help # full flag reference
321
- ```
322
-
323
- | Flag | When to use |
324
- |------|-------------|
325
- | `--features=architecture` | Cycles, coupling, reachability, dependency pressure |
326
- | `--features=code-quality` | Complexity, maintainability, duplication, performance smells |
327
- | `--features=dead-code` | Dead exports, unused deps, boundary violations |
328
- | `--features=security` | Sink-risk, validation-sensitive findings |
329
- | `--features=test-quality` | Flaky or misleading test patterns |
330
- | `--graph` | Dependency structure, hotspots, critical paths |
331
- | `--flow` | Path-sensitive claims, control-flow evidence |
332
- | `--semantic` | Type-aware design signals (adds ~3-5s) |
333
- | `--scope=<path>` | Narrow to specific path, file, or `file:symbol` |
334
-
335
- **Step 2. Read outputs** — `summary.md` first (health scores → analysis signals → top recommendations), then `findings.json` (work queue with `lspHints`, `impact`, `suggestedFix`).
336
-
337
- | File | Use for |
338
- |------|---------|
339
- | `summary.md` | Health scores, severity ordering, analysis signals, top recommendations |
340
- | `summary.json` | Machine-readable metadata, `agentOutput`, `investigationPrompts` |
341
- | `findings.json` | Full prioritized finding queue with `lspHints`, `impact`, `suggestedFix` |
342
- | `architecture.json` | Dependency graph, cycles, critical paths, hotspots, chokepoints |
343
- | `code-quality.json` | Complexity, duplicates, god modules/functions |
344
- | `dead-code.json` | Dead exports, boundary violations, unused deps |
345
- | `security.json` / `test-quality.json` | Pillar-specific findings |
346
- | `file-inventory.json` | Per-file functions, flows, dependencies, effects |
347
- | `ast-trees.txt` | AST snapshot for structural triage |
348
- | `graph.md` | Mermaid dependency graph (with `--graph`) |
349
-
350
- For JSON key schemas and field reference, see [output files](./references/output-files.md).
351
-
352
- **AST tools — which one to use:**
353
-
354
- | Tool | Searches | Input | Purpose |
355
- |------|----------|-------|---------|
356
- | `ast/tree-search.js` | Generated `ast-trees.txt` from a scan | `-i .octocode/scan` (auto-resolves latest) | Fast structure triage — decide where to look |
357
- | `ast/search.js` | Actual source files on disk | `--root <dir>` | Structural proof — find code by AST shape |
358
-
359
- Do not point `ast/search.js` at `.octocode/scan/...` output files — it searches source files, not generated AST text artifacts.
360
-
361
- **Step 3. Triage** — prioritize findings with high severity, clusters in the same call path, security-sensitive items, architecture signals that align with hotspots. Label each: `observed`, `suspected`, or `validated`.
362
-
363
- **Step 4. Validate** — every finding must be confirmed before presenting as fact.
364
-
365
- Detectors produce structural candidates (loops × calls × depth). You are the intelligence layer. Read the code, trace the graph, and decide:
366
-
367
- 1. **Check `lspHints`** — if the finding has `lspHints[]`, run those tool calls first. They're pre-computed shortcuts to the fastest validation.
368
- 2. **Read evidence** — `localGetFileContent(matchString=functionName)` to see the actual code. Look for the concrete behavior the detector suspected (e.g., collection mutation inside a loop, unvalidated input reaching a sink, function doing too many things).
369
- 3. **Trace context** — `lspCallHierarchy` / `lspFindReferences` to understand callers, consumers, blast radius.
370
- 4. **Decide** — `confirmed` (evidence supports), `dismissed` (false positive — explain why), `uncertain` (need more data — say what's missing).
371
-
372
- | Finding type | Read the code for | Trace context with | Dismiss when |
373
- |-------------|-------------------|-------------------|-------------|
374
- | Unbounded collection | Collection mutation (.push/.add/.set) inside loops | `lspCallHierarchy(incoming)` — is it hot path? | No mutation in body, or bounded by guard/limit |
375
- | Dead export | — | `lspFindReferences` → 0 refs = confirmed | Dynamic usage, runtime reflection |
376
- | Security sink | Unsanitized input reaching sink call | `lspCallHierarchy(incoming)` → trace data source; map project context first (auth, payments, DB, external services) | Input validated upstream; see [security analysis](./references/validate-investigate.md#security-analysis) for full flow |
377
- | God function | Multiple responsibilities in body | `lspCallHierarchy(outgoing)` → what it calls | Single responsibility, just long |
378
- | Coupling hotspot | What the module exposes | `lspFindReferences` per export → consumer map | Intentionally shared utility |
379
-
380
- For detailed per-category guidance, see [playbooks](./references/playbooks.md) and [validate & investigate](./references/validate-investigate.md).
381
-
382
- **CLI-only fallback** (if Octocode MCP unavailable): use `ast/search.js` for structural verification, re-scan with `--scope`. Mark confidence: `high` = structural, `medium` = semantic, `low` = behavioral.
383
-
384
- **Step 5. Present** — what the scan suggested → what validation confirmed/disproved → what remains uncertain. Always include `file:line` evidence and confidence. See [present results](./references/present-results.md).
385
-
386
- **After presenting, ask:** "Want me to plan fixes?" Do not jump into fixes automatically.
387
-
388
- **Step 6. Plan fixes** (on user request) — prioritized improvement plan:
389
- 1. Immediate fixes for validated high-signal problems
390
- 2. Short follow-up checks for suspected issues
391
- 3. Structural improvements for recurring patterns
392
- 4. Re-scan scope and validation steps
393
-
394
- **After presenting the plan, ask:** "Should I apply these fixes?"
395
-
396
- **Step 7. Apply fixes** (on user approval):
397
- 1. TDD-first for behavioral fixes — write failing test → fix → pass → full suite. Skip TDD for mechanical cleanups.
398
- 2. When touching a file: remove redundant comments (restate the code) and dead re-exports (0 consumers via `lspFindReferences`).
399
- 3. Validate with project toolchain: lint (`--fix`) → tests → build.
400
-
401
- **Step 8. Verify** — re-scan with `--scope`, compare finding counts, report before/after delta.
402
-
403
- ## References
404
-
405
- Use these when you need specifics instead of copying detailed reference material into the response:
406
-
407
- - [CLI reference](./references/cli-reference.md) — all flags, thresholds, presets
408
- - [Output files](./references/output-files.md) — JSON schemas, key reference, reading guide
409
- - [AST tree search](./references/ast-tree-search.md) — `ast/tree-search.js` usage and examples
410
- - [AST search](./references/ast-search.md) — `ast/search.js` patterns, rules, presets
411
- - [Tool workflows](./references/tool-workflows.md) — 18 hybrid workflows: audits, architecture, smart coding, quality, refactoring, exploration, testing, security, reviews
412
- - [Validation and investigation](./references/validate-investigate.md) — reasoning loop, hybrid validation, taint tracing, lspHints
413
- - [Playbooks](./references/playbooks.md) — per-category validate & fix, TDD, validation, comments, re-exports
414
- - [Finding categories](./references/finding-categories.md) — all detectable categories by pillar
415
- - [Present results](./references/present-results.md) — summary sections, decision heuristics, templates
416
- - [Architecture techniques](./references/architecture-techniques.md) — SCC, broker, symbol-level analysis
417
- - [Concepts](./references/concepts.md) — metric definitions (SDP, cognitive complexity, Halstead, MI)
418
- - [Improvement roadmap](./references/improvement-roadmap.md) — planned upgrades for security, semantic, test quality
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import { minify } from 'terser';
6
-
7
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
- const scriptsDir = path.join(__dirname, 'scripts');
9
-
10
- function collectJsFiles(dir) {
11
- const results = [];
12
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
13
- const full = path.join(dir, entry.name);
14
- if (entry.isDirectory()) {
15
- results.push(...collectJsFiles(full));
16
- } else if (entry.isFile() && entry.name.endsWith('.js')) {
17
- results.push(full);
18
- }
19
- }
20
- return results;
21
- }
22
-
23
- const files = collectJsFiles(scriptsDir);
24
-
25
- for (const filePath of files) {
26
- let code = fs.readFileSync(filePath, 'utf8');
27
- const shebang = code.startsWith('#!') ? code.slice(0, code.indexOf('\n') + 1) : '';
28
- if (shebang) code = code.slice(shebang.length);
29
- const result = await minify(code, { compress: true, mangle: true, format: { ecma: 2020 } });
30
- if (result.error) throw result.error;
31
- fs.writeFileSync(filePath, shebang + (result.code ?? ''), 'utf8');
32
- }
@@ -1,95 +0,0 @@
1
- # RFC: Agent-Safe AST Artifact Reading
2
-
3
- > **Status: Implemented.** This RFC documents the design decisions behind `ast/tree-search.js`. For usage, see [ast-tree-search.md](./ast-tree-search.md). This file is architectural context only — not an actionable guide.
4
-
5
- ## Summary
6
-
7
- This RFC standardizes how agents inspect generated AST artifacts in `octocode-local-code-quality`.
8
-
9
- The recommendation is to keep a dedicated `ast-tree-search` CLI for `ast-trees.txt`, make the TypeScript source authoritative, generate the runtime JS from that source, and have generated `summary.md` guidance point to the exact scan artifact being discussed.
10
-
11
- ## Motivation
12
-
13
- The current AST artifact workflow had four failures:
14
-
15
- 1. latest-scan ambiguity: commands that target `.octocode/scan` can silently read a different scan than the `summary.md` the agent is reviewing
16
- 2. conflicting working-directory assumptions: some generated commands only work inside a scan directory while others assume repo-root or skill-root execution
17
- 3. source/runtime drift: AST guidance and runtime behavior diverged because `scripts/` and `src/` were not acting like one source-of-truth pipeline
18
- 4. agent-noisy output: artifact search could dump hundreds of hits with no built-in narrowing, which makes triage harder and increases false conclusions
19
-
20
- Agents need artifact inspection that is pinned, bounded, and clearly separate from source-level AST search.
21
-
22
- ## Alternatives Considered
23
-
24
- ### 1. Keep `grep` or `rg` only
25
-
26
- Pros:
27
-
28
- - zero new code
29
- - flexible for power users
30
-
31
- Cons:
32
-
33
- - easy to run against the wrong artifact
34
- - no default bounding or structured metadata
35
- - weak affordances for agents that need predictable output
36
-
37
- ### 2. Teach `ast-search` to ingest generated output files
38
-
39
- Pros:
40
-
41
- - one CLI surface
42
- - reuses an existing command name
43
-
44
- Cons:
45
-
46
- - mixes two different problem spaces: generated artifact triage and source-level AST matching
47
- - increases confusion about what is being validated
48
- - encourages agents to treat artifact search as if it were source proof
49
-
50
- ### 3. Keep a dedicated AST artifact CLI with TypeScript source-of-truth
51
-
52
- Pros:
53
-
54
- - clean separation between artifact navigation and source search
55
- - output can be optimized for agent triage
56
- - easy to pin generated guidance to the current scan
57
-
58
- Cons:
59
-
60
- - one additional CLI surface to document and test
61
- - more summary-generation logic
62
- - build sync must be maintained so `scripts/` does not drift from `src`
63
-
64
- ## Recommendation
65
-
66
- Adopt alternative 3.
67
-
68
- - `ast-tree-search` remains a dedicated CLI for generated `ast-trees.txt`
69
- - `ast-search` remains the source-level structural search tool
70
- - the TypeScript source under `src/` becomes the implementation source of truth
71
- - generated `summary.md` points to the exact `ast-trees.txt` file for the current scan
72
- - artifact search output is bounded and filterable by default
73
-
74
- ## Design Notes
75
-
76
- - default `--limit` is `50`; `0` means unlimited output
77
- - `--file` and `--section` support scan-specific narrowing
78
- - output always includes the selected `ast-trees.txt` file
79
- - JSON output includes parsed `file` metadata for each match
80
- - raw `rg` remains documented only as a fallback for indentation/text checks
81
-
82
- ## Drawbacks
83
-
84
- - more implementation and testing surface
85
- - generated docs and runtime help must stay aligned
86
- - users now need to understand when to use artifact search versus source search
87
-
88
- ## Implementation Plan
89
-
90
- 1. Add `src/ast-tree-search.ts` and tests.
91
- 2. Regenerate runtime `scripts/` from TypeScript source.
92
- 3. Update `summary.md` generation to print pinned commands for the current scan.
93
- 4. Add package aliases and reference docs for the new CLI.
94
- 5. Update skill docs so the artifact-search flow is consistent everywhere.
95
- 6. Validate with package tests and a real scoped scan.
@@ -1,121 +0,0 @@
1
- # Architecture Techniques
2
-
3
- Use this reference when the scan output is directionally useful but not yet strong enough to justify a confident architecture claim.
4
-
5
- > For how to validate architecture findings with tools, see [validate & investigate](./validate-investigate.md) and the Architecture Playbooks in [playbooks.md](./playbooks.md). For metric definitions (instability, SDP, cyclomatic density), see [concepts.md](./concepts.md).
6
-
7
- ---
8
-
9
- ## Graph Techniques
10
-
11
- ### SCC Condensation
12
-
13
- Collapse raw file cycles into strongly connected clusters before reasoning about architecture. This is better than treating every cycle edge as a separate problem.
14
-
15
- Use when:
16
-
17
- - many `dependency-cycle` findings point at overlapping files
18
- - the same hotspot appears in multiple cycle paths
19
- - the graph feels "sticky" but a single edge fix is unclear
20
-
21
- Interpretation:
22
-
23
- - a large SCC usually means a subsystem boundary is missing
24
- - hub files inside an SCC are better refactor starting points than random cycle members
25
-
26
- ### Package / Folder Graph
27
-
28
- Aggregate file edges into package or folder edges to see subsystem behavior.
29
-
30
- Use when:
31
-
32
- - file-level cycles hide the real architectural issue
33
- - the repo has many cross-package imports
34
- - the user asks about bounded contexts or team ownership
35
-
36
- Interpretation:
37
-
38
- - high cross-package chatter means packages are acting like one subsystem
39
- - one package importing many internals of another usually means boundary erosion
40
-
41
- ### Broker / Articulation Analysis
42
-
43
- Look for modules that many dependency paths flow through.
44
-
45
- Use when:
46
-
47
- - `hotFiles[]` is dominated by one or two files
48
- - changes in one file ripple unexpectedly broadly
49
- - the architecture feels centralized without an obvious god module
50
-
51
- Interpretation:
52
-
53
- - articulation points are brittle bridges between subsystems
54
- - high-scoring chokepoints are priority refactor targets even if they have few direct findings
55
-
56
- ---
57
-
58
- ## AST And Semantic Techniques
59
-
60
- ### Relational AST Rules
61
-
62
- Use structure-aware rules instead of single-node patterns.
63
-
64
- Good targets:
65
-
66
- - boundary leaks
67
- - import-time orchestration
68
- - controller -> repository shortcuts
69
- - modules mixing transport, persistence, and domain logic
70
-
71
- Ask:
72
-
73
- - is the suspicious node `inside` the wrong context?
74
- - does the module `have` multiple unrelated responsibilities?
75
- - do bad patterns `follow` or `precede` each other in a repeated shape?
76
-
77
- ### Symbol-Level Usage Graphs
78
-
79
- Reason below the file level by tracking which exports are consumed together.
80
-
81
- Use when:
82
-
83
- - `low-cohesion` is flagged
84
- - `feature-envy` looks real but the file is still widely used
85
- - a barrel or utility file may hide unrelated APIs
86
-
87
- Interpretation:
88
-
89
- - disjoint consumer groups usually mean the file exports multiple concepts
90
- - one symbol cluster dominating imports can mean the logic belongs closer to that target
91
-
92
- ### CFG / Dataflow Checks
93
-
94
- Use lightweight flow reasoning to avoid flat heuristic claims.
95
-
96
- Best questions:
97
-
98
- - does validation dominate sink usage?
99
- - does cleanup happen on all exits?
100
- - is initialization happening only on some paths?
101
- - does import-time work trigger hidden side effects?
102
-
103
- Interpretation:
104
-
105
- - if the path is not explainable, lower confidence
106
- - if validation or cleanup is path-dependent, prefer a hybrid conclusion over a local one
107
-
108
- ---
109
-
110
- ## How To Decide
111
-
112
- - Use the **graph lens** first for cycles, chokepoints, package chatter, and startup risk.
113
- - Use the **AST lens** first for low cohesion, feature envy, repeated orchestration, and side effects.
114
- - Use the **hybrid lens** when graph and AST evidence point to the same file or boundary.
115
- - If graph and AST signals conflict, say so explicitly and validate before concluding.
116
-
117
- ---
118
-
119
- ## Validation
120
-
121
- These techniques are investigation tools, not proof. Validate statements about live code with Octocode local tools before presenting as fact. See the Principles section in [SKILL.md](../SKILL.md).