octocode-cli 1.2.7 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/README.md +42 -35
  2. package/out/octocode-cli.js +36 -11719
  3. package/package.json +36 -36
  4. package/skills/README.md +42 -114
  5. package/skills/{octocode-code-engineer → octocode-engineer}/.claude/settings.local.json +2 -1
  6. package/skills/octocode-engineer/README.md +99 -0
  7. package/skills/octocode-engineer/SKILL.md +499 -0
  8. package/skills/octocode-engineer/build.mjs +29 -0
  9. package/skills/{octocode-code-engineer → octocode-engineer}/eslint.config.mjs +3 -13
  10. package/skills/{octocode-code-engineer → octocode-engineer}/package.json +28 -27
  11. package/skills/octocode-engineer/references/ast-reference.md +166 -0
  12. package/skills/{octocode-code-engineer → octocode-engineer}/references/cli-reference.md +80 -6
  13. package/skills/octocode-engineer/references/externals.md +86 -0
  14. package/skills/{octocode-code-engineer → octocode-engineer}/references/output-files.md +46 -6
  15. package/skills/octocode-engineer/references/quality-indicators.md +202 -0
  16. package/skills/octocode-engineer/references/tool-workflows.md +298 -0
  17. package/skills/octocode-engineer/references/validation-playbooks.md +99 -0
  18. package/skills/octocode-engineer/scripts/ast/search.js +45 -0
  19. package/skills/octocode-engineer/scripts/ast/tree-search.js +27 -0
  20. package/skills/octocode-engineer/scripts/index.js +173 -0
  21. package/skills/octocode-engineer/scripts/run.js +179 -0
  22. package/skills/octocode-engineer/src/analysis/dependencies.ts +378 -0
  23. package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.test.ts +57 -0
  24. package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.ts +43 -0
  25. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.test.ts +113 -0
  26. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.ts +64 -1
  27. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.test.ts +118 -2
  28. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.ts +65 -3
  29. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.test.ts +281 -1
  30. package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.ts +173 -3
  31. package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.test.ts +73 -0
  32. package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.ts +62 -4
  33. package/skills/octocode-engineer/src/detector-gating.test.ts +59 -0
  34. package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/code-quality.ts +342 -0
  35. package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.ts +8 -0
  36. package/skills/{octocode-code-engineer → octocode-engineer}/src/index.test.ts +565 -11
  37. package/skills/octocode-engineer/src/index.ts +468 -0
  38. package/skills/octocode-engineer/src/pipeline/affected.test.ts +147 -0
  39. package/skills/octocode-engineer/src/pipeline/affected.ts +68 -0
  40. package/skills/octocode-engineer/src/pipeline/baseline.test.ts +276 -0
  41. package/skills/octocode-engineer/src/pipeline/baseline.ts +76 -0
  42. package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.test.ts +300 -53
  43. package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.ts +180 -36
  44. package/skills/octocode-engineer/src/pipeline/config-loader.test.ts +264 -0
  45. package/skills/octocode-engineer/src/pipeline/config-loader.ts +109 -0
  46. package/skills/octocode-engineer/src/pipeline/create-options.ts +55 -0
  47. package/skills/octocode-engineer/src/pipeline/health-score.test.ts +65 -0
  48. package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.ts +130 -17
  49. package/skills/octocode-engineer/src/pipeline/progress.ts +51 -0
  50. package/skills/octocode-engineer/src/pipeline/reporters.test.ts +155 -0
  51. package/skills/octocode-engineer/src/pipeline/reporters.ts +64 -0
  52. package/skills/octocode-engineer/src/reporting/graph-features.test.ts +279 -0
  53. package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/output-contract.test.ts +6 -0
  54. package/skills/octocode-engineer/src/reporting/summary-md.test.ts +1066 -0
  55. package/skills/octocode-engineer/src/reporting/summary-md.ts +1604 -0
  56. package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/writer.ts +136 -13
  57. package/skills/octocode-engineer/src/run.ts +78 -0
  58. package/skills/{octocode-code-engineer → octocode-engineer}/src/sanity.test.ts +1 -1
  59. package/skills/octocode-engineer/src/types/analysis.ts +25 -0
  60. package/skills/octocode-engineer/src/types/collectors.ts +134 -0
  61. package/skills/{octocode-code-engineer → octocode-engineer}/src/types/constants.ts +75 -41
  62. package/skills/octocode-engineer/src/types/core.ts +203 -0
  63. package/skills/octocode-engineer/src/types/dependency.ts +215 -0
  64. package/skills/octocode-engineer/src/types/file-entry.ts +108 -0
  65. package/skills/octocode-engineer/src/types/findings.ts +105 -0
  66. package/skills/{octocode-code-engineer → octocode-engineer}/src/types/index.ts +60 -30
  67. package/skills/octocode-engineer/src/types/tree-sitter.ts +38 -0
  68. package/skills/{octocode-code-engineer → octocode-engineer}/tsconfig.json +1 -0
  69. package/skills/octocode-research/.octocode/scan/.cache/analysis-cache.json +1 -0
  70. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/architecture.json +1 -0
  71. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/ast-trees.txt +5566 -0
  72. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/code-quality.json +1 -0
  73. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/dead-code.json +1 -0
  74. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/file-inventory.json +1 -0
  75. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/findings.json +1 -0
  76. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/graph.md +189 -0
  77. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/security.json +1 -0
  78. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.json +1 -0
  79. package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.md +265 -0
  80. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/architecture.json +1 -0
  81. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt +5555 -0
  82. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/code-quality.json +1 -0
  83. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/dead-code.json +1 -0
  84. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/file-inventory.json +1 -0
  85. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/findings.json +1 -0
  86. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/graph.md +190 -0
  87. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/security.json +1 -0
  88. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.json +1 -0
  89. package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.md +265 -0
  90. package/skills/octocode-research/CHANGELOG.md +60 -0
  91. package/skills/octocode-research/README.md +102 -388
  92. package/skills/octocode-research/SKILL.md +169 -498
  93. package/skills/octocode-research/package.json +19 -31
  94. package/skills/octocode-research/references/PARALLEL_AGENT_PROTOCOL.md +19 -0
  95. package/skills/octocode-research/references/SESSION_MANAGEMENT.md +38 -0
  96. package/skills/octocode-research/scripts/server-init.js +1 -1
  97. package/skills/octocode-research/scripts/server.d.ts +2 -1
  98. package/skills/octocode-research/scripts/server.js +329 -233
  99. package/skills/octocode-research/src/__tests__/integration/promptsRoutes.test.ts +180 -0
  100. package/skills/octocode-research/src/__tests__/integration/serverHttp.test.ts +221 -0
  101. package/skills/octocode-research/src/__tests__/integration/serverLifecycle.test.ts +194 -0
  102. package/skills/octocode-research/src/__tests__/integration/toolsRoutes.test.ts +501 -0
  103. package/skills/octocode-research/src/__tests__/unit/readiness.test.ts +61 -0
  104. package/skills/octocode-research/src/__tests__/unit/resilience.test.ts +192 -0
  105. package/skills/octocode-research/src/__tests__/unit/responseFactory.test.ts +172 -0
  106. package/skills/octocode-research/src/__tests__/unit/responseParser.test.ts +288 -0
  107. package/skills/octocode-research/src/__tests__/unit/schemas.test.ts +509 -0
  108. package/skills/octocode-research/src/index.ts +4 -124
  109. package/skills/octocode-research/src/middleware/queryParser.ts +0 -26
  110. package/skills/octocode-research/src/routes/lsp.ts +58 -59
  111. package/skills/octocode-research/src/routes/package.ts +35 -65
  112. package/skills/octocode-research/src/routes/prompts.ts +3 -3
  113. package/skills/octocode-research/src/routes/tools.ts +8 -20
  114. package/skills/octocode-research/src/server-init.ts +30 -237
  115. package/skills/octocode-research/src/server.ts +50 -23
  116. package/skills/octocode-research/src/types/errorGuards.ts +9 -80
  117. package/skills/octocode-research/src/types/guards.ts +0 -28
  118. package/skills/octocode-research/src/types/mcp.ts +11 -66
  119. package/skills/octocode-research/src/types/responses.ts +11 -129
  120. package/skills/octocode-research/src/utils/circuitBreaker.ts +0 -21
  121. package/skills/octocode-research/src/utils/logger.ts +1 -97
  122. package/skills/octocode-research/src/utils/resilience.ts +2 -12
  123. package/skills/octocode-research/src/utils/responseFactory.ts +0 -42
  124. package/skills/octocode-research/src/utils/responseParser.ts +3 -25
  125. package/skills/octocode-research/src/utils/retry.ts +0 -63
  126. package/skills/octocode-research/src/utils/routeFactory.ts +1 -1
  127. package/skills/octocode-research/src/validation/httpPreprocess.ts +0 -3
  128. package/skills/octocode-research/src/validation/index.ts +0 -1
  129. package/skills/octocode-research/src/validation/schemas.ts +0 -63
  130. package/skills/octocode-research/src/validation/toolCallSchema.ts +3 -3
  131. package/skills/octocode-research/tsdown.config.ts +4 -0
  132. package/skills/octocode-research/vitest.config.ts +3 -0
  133. package/skills/octocode-code-engineer/.plan/VALIDATED_PLAN.md +0 -223
  134. package/skills/octocode-code-engineer/README.md +0 -178
  135. package/skills/octocode-code-engineer/SKILL.md +0 -418
  136. package/skills/octocode-code-engineer/minify-scripts.mjs +0 -32
  137. package/skills/octocode-code-engineer/references/agent-ast-reading-rfc.md +0 -95
  138. package/skills/octocode-code-engineer/references/architecture-techniques.md +0 -121
  139. package/skills/octocode-code-engineer/references/ast-search.md +0 -210
  140. package/skills/octocode-code-engineer/references/ast-tree-search.md +0 -151
  141. package/skills/octocode-code-engineer/references/concepts.md +0 -107
  142. package/skills/octocode-code-engineer/references/finding-categories.md +0 -128
  143. package/skills/octocode-code-engineer/references/improvement-roadmap.md +0 -304
  144. package/skills/octocode-code-engineer/references/playbooks.md +0 -204
  145. package/skills/octocode-code-engineer/references/present-results.md +0 -136
  146. package/skills/octocode-code-engineer/references/tool-workflows.md +0 -566
  147. package/skills/octocode-code-engineer/references/validate-investigate.md +0 -225
  148. package/skills/octocode-code-engineer/scripts/analysis/dependencies.js +0 -1
  149. package/skills/octocode-code-engineer/scripts/analysis/dependency-summary.js +0 -1
  150. package/skills/octocode-code-engineer/scripts/analysis/discovery.js +0 -1
  151. package/skills/octocode-code-engineer/scripts/analysis/graph-analytics.js +0 -1
  152. package/skills/octocode-code-engineer/scripts/analysis/semantic.js +0 -1
  153. package/skills/octocode-code-engineer/scripts/ast/helpers.js +0 -1
  154. package/skills/octocode-code-engineer/scripts/ast/metrics.js +0 -1
  155. package/skills/octocode-code-engineer/scripts/ast/search.js +0 -2
  156. package/skills/octocode-code-engineer/scripts/ast/tree-search.js +0 -2
  157. package/skills/octocode-code-engineer/scripts/ast/tree-sitter.js +0 -1
  158. package/skills/octocode-code-engineer/scripts/ast/ts-analyzer.js +0 -1
  159. package/skills/octocode-code-engineer/scripts/collectors/chains.js +0 -1
  160. package/skills/octocode-code-engineer/scripts/collectors/effects.js +0 -1
  161. package/skills/octocode-code-engineer/scripts/collectors/input-sources.js +0 -1
  162. package/skills/octocode-code-engineer/scripts/collectors/performance.js +0 -1
  163. package/skills/octocode-code-engineer/scripts/collectors/prototype-pollution.js +0 -1
  164. package/skills/octocode-code-engineer/scripts/collectors/security.js +0 -1
  165. package/skills/octocode-code-engineer/scripts/collectors/test-profile.js +0 -1
  166. package/skills/octocode-code-engineer/scripts/common/is-direct-run.js +0 -1
  167. package/skills/octocode-code-engineer/scripts/common/utils.js +0 -1
  168. package/skills/octocode-code-engineer/scripts/detectors/code-quality.js +0 -1
  169. package/skills/octocode-code-engineer/scripts/detectors/cohesion.js +0 -1
  170. package/skills/octocode-code-engineer/scripts/detectors/coupling.js +0 -1
  171. package/skills/octocode-code-engineer/scripts/detectors/cycle.js +0 -1
  172. package/skills/octocode-code-engineer/scripts/detectors/dead-code.js +0 -1
  173. package/skills/octocode-code-engineer/scripts/detectors/import-style.js +0 -1
  174. package/skills/octocode-code-engineer/scripts/detectors/index.js +0 -1
  175. package/skills/octocode-code-engineer/scripts/detectors/security.js +0 -1
  176. package/skills/octocode-code-engineer/scripts/detectors/semantic.js +0 -1
  177. package/skills/octocode-code-engineer/scripts/detectors/shared.js +0 -1
  178. package/skills/octocode-code-engineer/scripts/detectors/test-quality.js +0 -1
  179. package/skills/octocode-code-engineer/scripts/index.js +0 -1
  180. package/skills/octocode-code-engineer/scripts/pipeline/cache.js +0 -1
  181. package/skills/octocode-code-engineer/scripts/pipeline/cli.js +0 -1
  182. package/skills/octocode-code-engineer/scripts/pipeline/main.js +0 -2
  183. package/skills/octocode-code-engineer/scripts/reporting/analysis.js +0 -1
  184. package/skills/octocode-code-engineer/scripts/reporting/summary-md.js +0 -1
  185. package/skills/octocode-code-engineer/scripts/reporting/writer.js +0 -1
  186. package/skills/octocode-code-engineer/scripts/types/constants.js +0 -1
  187. package/skills/octocode-code-engineer/scripts/types/index.js +0 -1
  188. package/skills/octocode-code-engineer/scripts/types/interfaces.js +0 -1
  189. package/skills/octocode-code-engineer/src/analysis/dependencies.ts +0 -406
  190. package/skills/octocode-code-engineer/src/index.ts +0 -403
  191. package/skills/octocode-code-engineer/src/reporting/summary-md.test.ts +0 -421
  192. package/skills/octocode-code-engineer/src/reporting/summary-md.ts +0 -714
  193. package/skills/octocode-code-engineer/src/types/interfaces.ts +0 -682
  194. package/skills/octocode-research/src/types/toolTypes.ts +0 -33
  195. package/skills/octocode-research/src/utils/logEmoji.ts +0 -103
  196. /package/skills/{octocode-code-engineer → octocode-engineer}/.octocode/rfc/RFC-code-engineer-weakness-fixes.md +0 -0
  197. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/architecture.ts.html +0 -0
  198. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-helpers.ts.html +0 -0
  199. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-search.ts.html +0 -0
  200. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/base.css +0 -0
  201. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/block-navigation.js +0 -0
  202. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cache.ts.html +0 -0
  203. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cli.ts.html +0 -0
  204. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/clover.xml +0 -0
  205. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-effects.ts.html +0 -0
  206. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-input-sources.ts.html +0 -0
  207. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-performance.ts.html +0 -0
  208. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-prototype-pollution.ts.html +0 -0
  209. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-security.ts.html +0 -0
  210. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-test-profile.ts.html +0 -0
  211. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/coverage-final.json +0 -0
  212. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependencies.ts.html +0 -0
  213. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependency-summary.ts.html +0 -0
  214. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/discovery.ts.html +0 -0
  215. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/favicon.png +0 -0
  216. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/graph-analytics.ts.html +0 -0
  217. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.html +0 -0
  218. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.ts.html +0 -0
  219. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/metrics.ts.html +0 -0
  220. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/pipeline.ts.html +0 -0
  221. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.css +0 -0
  222. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.js +0 -0
  223. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-analysis.ts.html +0 -0
  224. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-writer.ts.html +0 -0
  225. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/security-detectors.ts.html +0 -0
  226. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic-detectors.ts.html +0 -0
  227. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic.ts.html +0 -0
  228. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sort-arrow-sprite.png +0 -0
  229. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sorter.js +0 -0
  230. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/summary-md.ts.html +0 -0
  231. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/test-quality-detectors.ts.html +0 -0
  232. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/tree-sitter-analyzer.ts.html +0 -0
  233. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ts-analyzer.ts.html +0 -0
  234. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/types.ts.html +0 -0
  235. /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/utils.ts.html +0 -0
  236. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependencies.test.ts +0 -0
  237. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.test.ts +0 -0
  238. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.ts +0 -0
  239. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.test.ts +0 -0
  240. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.ts +0 -0
  241. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.test.ts +0 -0
  242. /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.ts +0 -0
  243. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.test.ts +0 -0
  244. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.ts +0 -0
  245. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.test.ts +0 -0
  246. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.ts +0 -0
  247. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.test.ts +0 -0
  248. /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.ts +0 -0
  249. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/chains.ts +0 -0
  250. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.test.ts +0 -0
  251. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.ts +0 -0
  252. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.test.ts +0 -0
  253. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.ts +0 -0
  254. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.test.ts +0 -0
  255. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.ts +0 -0
  256. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.test.ts +0 -0
  257. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.ts +0 -0
  258. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.test.ts +0 -0
  259. /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.ts +0 -0
  260. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.test.ts +0 -0
  261. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.ts +0 -0
  262. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.test.ts +0 -0
  263. /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.ts +0 -0
  264. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cohesion.ts +0 -0
  265. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/coupling.ts +0 -0
  266. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cycle.ts +0 -0
  267. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/dead-code.ts +0 -0
  268. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/import-style.ts +0 -0
  269. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.test.ts +0 -0
  270. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.test.ts +0 -0
  271. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.ts +0 -0
  272. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/semantic.ts +0 -0
  273. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/shared.ts +0 -0
  274. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.test.ts +0 -0
  275. /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.ts +0 -0
  276. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.test.ts +0 -0
  277. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.ts +0 -0
  278. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.test.ts +0 -0
  279. /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline.test.ts +0 -0
  280. /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.test.ts +0 -0
  281. /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.ts +0 -0
  282. /package/skills/{octocode-code-engineer → octocode-engineer}/vitest.config.ts +0 -0
@@ -93,84 +93,83 @@ lspRoutes.get(
93
93
  })
94
94
  );
95
95
 
96
- // Helper: Extract locations from LSP result
96
+ type LspLocation = { uri: string; line: number; preview?: string };
97
+
98
+ function extractStartLine(obj: Record<string, unknown>): number {
99
+ const range = isObject(obj.range) ? obj.range : {};
100
+ const start = isObject(range.start) ? range.start : {};
101
+ return (hasNumberProperty(start, 'line') ? start.line : 0) + 1;
102
+ }
103
+
104
+ function extractDefinitionLocation(data: Record<string, unknown>): LspLocation[] {
105
+ if (!hasProperty(data, 'definition') || !isObject(data.definition)) return [];
106
+ const def = data.definition as Record<string, unknown>;
107
+ if (typeof def.uri !== 'string') return [];
108
+
109
+ return [{
110
+ uri: def.uri,
111
+ line: extractStartLine(def),
112
+ preview: typeof def.preview === 'string' ? def.preview : undefined,
113
+ }];
114
+ }
115
+
116
+ function extractReferenceLocations(data: Record<string, unknown>): LspLocation[] {
117
+ if (!hasProperty(data, 'references')) return [];
118
+ return safeArray<Record<string, unknown>>(data, 'references').map((ref) => ({
119
+ uri: safeString(ref, 'uri'),
120
+ line: extractStartLine(ref),
121
+ preview: hasStringProperty(ref, 'preview') ? ref.preview : undefined,
122
+ }));
123
+ }
124
+
125
+ function extractGenericLocations(data: Record<string, unknown>): LspLocation[] {
126
+ if (!hasProperty(data, 'locations')) return [];
127
+ return safeArray<Record<string, unknown>>(data, 'locations').map((loc) => ({
128
+ uri: safeString(loc, 'uri'),
129
+ line: extractStartLine(loc),
130
+ preview: hasStringProperty(loc, 'content') ? loc.content : undefined,
131
+ }));
132
+ }
133
+
97
134
  function extractLocations(
98
135
  data: Record<string, unknown>,
99
136
  type: 'definition' | 'references'
100
- ): Array<{ uri: string; line: number; preview?: string }> {
101
- // Handle definition results
102
- if (type === 'definition' && hasProperty(data, 'definition') && isObject(data.definition)) {
103
- const def = data.definition as Record<string, unknown>;
104
- if (typeof def.uri === 'string') {
105
- const range = isObject(def.range) ? def.range as Record<string, unknown> : {};
106
- const start = isObject(range.start) ? range.start as Record<string, unknown> : {};
107
- return [
108
- {
109
- uri: def.uri,
110
- line: (typeof start.line === 'number' ? start.line : 0) + 1,
111
- preview: typeof def.preview === 'string' ? def.preview : undefined,
112
- },
113
- ];
114
- }
137
+ ): LspLocation[] {
138
+ if (type === 'definition') {
139
+ const defs = extractDefinitionLocation(data);
140
+ if (defs.length > 0) return defs;
115
141
  }
116
142
 
117
- // Handle references results
118
- if (type === 'references' && hasProperty(data, 'references')) {
119
- const refs = safeArray<Record<string, unknown>>(data, 'references');
120
- return refs.map((ref) => {
121
- const range = isObject(ref.range) ? ref.range : {};
122
- const start = isObject(range.start) ? range.start : {};
123
- return {
124
- uri: safeString(ref, 'uri'),
125
- line: (hasNumberProperty(start, 'line') ? start.line : 0) + 1,
126
- preview: hasStringProperty(ref, 'preview') ? ref.preview : undefined,
127
- };
128
- });
143
+ if (type === 'references') {
144
+ const refs = extractReferenceLocations(data);
145
+ if (refs.length > 0) return refs;
129
146
  }
130
147
 
131
- // Handle locations array (generic) - MCP returns range.start.line
132
- if (hasProperty(data, 'locations')) {
133
- const locs = safeArray<Record<string, unknown>>(data, 'locations');
134
- return locs.map((loc) => {
135
- const range = isObject(loc.range) ? loc.range : {};
136
- const start = isObject(range.start) ? range.start : {};
137
- return {
138
- uri: safeString(loc, 'uri'),
139
- line: (hasNumberProperty(start, 'line') ? start.line : 0) + 1,
140
- preview: hasStringProperty(loc, 'content') ? loc.content : undefined,
141
- };
142
- });
143
- }
148
+ return extractGenericLocations(data);
149
+ }
144
150
 
151
+ function getCallsArray(data: Record<string, unknown>): Record<string, unknown>[] {
152
+ for (const key of ['calls', 'incomingCalls', 'outgoingCalls']) {
153
+ if (hasProperty(data, key) && Array.isArray(data[key])) {
154
+ return data[key] as Record<string, unknown>[];
155
+ }
156
+ }
145
157
  return [];
146
158
  }
147
159
 
148
- // Helper: Extract locations from call hierarchy result
149
160
  function extractCallHierarchyLocations(
150
161
  data: Record<string, unknown>
151
- ): Array<{ uri: string; line: number; preview?: string }> {
152
- // Handle calls array
153
- let calls: Record<string, unknown>[] = [];
154
- if (hasProperty(data, 'calls') && Array.isArray(data.calls)) {
155
- calls = data.calls;
156
- } else if (hasProperty(data, 'incomingCalls') && Array.isArray(data.incomingCalls)) {
157
- calls = data.incomingCalls;
158
- } else if (hasProperty(data, 'outgoingCalls') && Array.isArray(data.outgoingCalls)) {
159
- calls = data.outgoingCalls;
160
- }
161
-
162
- return calls.map((call) => {
162
+ ): LspLocation[] {
163
+ return getCallsArray(data).map((call) => {
163
164
  const item = isObject(call.from) ? call.from : isObject(call.to) ? call.to : call;
164
- const itemObj = isObject(item) ? item : {};
165
- const range = isObject(itemObj.range) ? itemObj.range : {};
166
- const start = isObject(range.start) ? range.start : {};
165
+ const itemObj = isObject(item) ? item as Record<string, unknown> : {};
167
166
 
168
- const lineFromStart = hasNumberProperty(start, 'line') ? start.line : 0;
167
+ const lineFromRange = extractStartLine(itemObj) - 1; // undo +1 from extractStartLine
169
168
  const lineFromItem = hasNumberProperty(itemObj, 'line') ? itemObj.line : 0;
170
169
 
171
170
  return {
172
171
  uri: safeString(itemObj, 'uri'),
173
- line: (lineFromStart || lineFromItem) + 1,
172
+ line: (lineFromRange || lineFromItem) + 1,
174
173
  preview: hasStringProperty(itemObj, 'name') ? itemObj.name : undefined,
175
174
  };
176
175
  });
@@ -47,81 +47,51 @@ packageRoutes.get(
47
47
  }
48
48
  );
49
49
 
50
- // Helper: Extract packages from result
51
- function extractPackages(
52
- data: Record<string, unknown>
53
- ): Array<{
50
+ interface PackageInfo {
54
51
  name: string;
55
52
  version?: string;
56
53
  description?: string;
57
54
  repository?: string;
58
- }> {
59
- // Handle npm results
60
- if (hasProperty(data, 'npmResults') && Array.isArray(data.npmResults)) {
61
- return data.npmResults.map((pkg: unknown) => {
62
- if (!isObject(pkg)) return { name: '' };
63
- return {
64
- name: safeString(pkg, 'name'),
65
- version: hasStringProperty(pkg, 'version') ? pkg.version : undefined,
66
- description: hasStringProperty(pkg, 'description') ? pkg.description : undefined,
67
- repository: extractRepositoryUrl(pkg),
68
- };
69
- });
70
- }
55
+ }
71
56
 
72
- // Handle pypi results
73
- if (hasProperty(data, 'pypiResults') && Array.isArray(data.pypiResults)) {
74
- return data.pypiResults.map((pkg: unknown) => {
75
- if (!isObject(pkg)) return { name: '' };
76
- return {
77
- name: safeString(pkg, 'name'),
78
- version: hasStringProperty(pkg, 'version') ? pkg.version : undefined,
79
- description: hasStringProperty(pkg, 'description') ? pkg.description : undefined,
80
- repository: hasStringProperty(pkg, 'homepage')
81
- ? pkg.homepage
82
- : hasStringProperty(pkg, 'project_url')
83
- ? pkg.project_url
84
- : undefined,
85
- };
86
- });
57
+ function extractRepositoryUrl(pkg: Record<string, unknown>): string | undefined {
58
+ if (hasStringProperty(pkg, 'repository')) return pkg.repository;
59
+ if (hasStringProperty(pkg, 'repoUrl')) return pkg.repoUrl;
60
+ if (hasProperty(pkg, 'repository') && isObject(pkg.repository)) {
61
+ const repo = pkg.repository;
62
+ if (hasStringProperty(repo, 'url')) return repo.url;
87
63
  }
64
+ return undefined;
65
+ }
88
66
 
89
- // Handle generic packages array (MCP uses 'path' for package name, 'repoUrl' for repository)
90
- if (hasProperty(data, 'packages') && Array.isArray(data.packages)) {
91
- return data.packages.map((pkg: unknown) => {
92
- if (!isObject(pkg)) return { name: '' };
93
- return {
94
- name: safeString(pkg, 'name') || safeString(pkg, 'path'),
95
- version: hasStringProperty(pkg, 'version') ? pkg.version : undefined,
96
- description: hasStringProperty(pkg, 'description') ? pkg.description : undefined,
97
- repository: extractRepositoryUrl(pkg),
98
- };
99
- });
100
- }
67
+ function extractPypiRepo(pkg: Record<string, unknown>): string | undefined {
68
+ if (hasStringProperty(pkg, 'homepage')) return pkg.homepage;
69
+ if (hasStringProperty(pkg, 'project_url')) return pkg.project_url;
70
+ return undefined;
71
+ }
101
72
 
102
- // Handle results array (fallback)
103
- const results = safeArray<Record<string, unknown>>(data, 'results');
104
- return results.map((pkg) => ({
105
- name: safeString(pkg, 'name'),
73
+ function toPackageInfo(pkg: unknown, repoFn: (p: Record<string, unknown>) => string | undefined): PackageInfo {
74
+ if (!isObject(pkg)) return { name: '' };
75
+ return {
76
+ name: safeString(pkg, 'name') || safeString(pkg, 'path'),
106
77
  version: hasStringProperty(pkg, 'version') ? pkg.version : undefined,
107
78
  description: hasStringProperty(pkg, 'description') ? pkg.description : undefined,
108
- repository: hasStringProperty(pkg, 'repository') ? pkg.repository : undefined,
109
- }));
79
+ repository: repoFn(pkg),
80
+ };
110
81
  }
111
82
 
112
- // Helper: Extract repository URL from various formats
113
- function extractRepositoryUrl(pkg: Record<string, unknown>): string | undefined {
114
- if (hasStringProperty(pkg, 'repository')) {
115
- return pkg.repository;
116
- }
117
- if (hasStringProperty(pkg, 'repoUrl')) {
118
- return pkg.repoUrl;
119
- }
120
- if (hasProperty(pkg, 'repository') && isObject(pkg.repository)) {
121
- const repo = pkg.repository;
122
- if (hasStringProperty(repo, 'url')) {
123
- return repo.url;
124
- }
125
- }
126
- return undefined;
83
+ function getPackageArray(data: Record<string, unknown>): { items: unknown[]; source: 'npm' | 'pypi' | 'generic' | 'fallback' } {
84
+ if (hasProperty(data, 'npmResults') && Array.isArray(data.npmResults))
85
+ return { items: data.npmResults, source: 'npm' };
86
+ if (hasProperty(data, 'pypiResults') && Array.isArray(data.pypiResults))
87
+ return { items: data.pypiResults, source: 'pypi' };
88
+ if (hasProperty(data, 'packages') && Array.isArray(data.packages))
89
+ return { items: data.packages, source: 'generic' };
90
+ return { items: safeArray<Record<string, unknown>>(data, 'results'), source: 'fallback' };
91
+ }
92
+
93
+ function extractPackages(data: Record<string, unknown>): PackageInfo[] {
94
+ const { items, source } = getPackageArray(data);
95
+ const repoFn = source === 'pypi' ? extractPypiRepo : extractRepositoryUrl;
96
+ return items.map((pkg) => toPackageInfo(pkg, repoFn));
127
97
  }
@@ -9,8 +9,8 @@ export const promptsRoutes = Router();
9
9
  // Apply readiness check middleware to all prompts routes
10
10
  promptsRoutes.use(checkReadiness);
11
11
 
12
- // Package version for response metadata
13
- const PACKAGE_VERSION = '2.0.0';
12
+ declare const __PACKAGE_VERSION__: string;
13
+ const PACKAGE_VERSION = __PACKAGE_VERSION__;
14
14
 
15
15
  interface PromptArg {
16
16
  name: string;
@@ -43,7 +43,7 @@ interface PromptInfo {
43
43
  * ]
44
44
  * }
45
45
  * ],
46
- * "_meta": { "totalCount": 5, "version": "2.0.0" }
46
+ * "_meta": { "totalCount": 5, "version": "2.2.0" }
47
47
  * }
48
48
  */
49
49
  promptsRoutes.get('/list', async (
@@ -15,8 +15,7 @@
15
15
  import { Router, type Request, type Response, type NextFunction } from 'express';
16
16
  import { getMcpContent } from '../mcpCache.js';
17
17
  import { transformToJsonSchema } from '../types/mcp.js';
18
- import { zodToJsonSchema } from 'zod-to-json-schema';
19
- import type { z } from 'zod/v4';
18
+ import { z } from 'zod/v4';
20
19
 
21
20
  // Import Zod schemas from octocode-mcp (source of truth)
22
21
  import {
@@ -66,8 +65,8 @@ export const toolsRoutes = Router();
66
65
  // Apply readiness check middleware to all tools routes
67
66
  toolsRoutes.use(checkReadiness);
68
67
 
69
- // Package version for response metadata
70
- const PACKAGE_VERSION = '2.0.0';
68
+ declare const __PACKAGE_VERSION__: string;
69
+ const PACKAGE_VERSION = __PACKAGE_VERSION__;
71
70
 
72
71
  interface ToolsInfoQuery {
73
72
  schema?: string;
@@ -98,20 +97,9 @@ const TOOL_ZOD_SCHEMAS: Record<string, z.ZodType> = {
98
97
  packageSearch: PackageSearchQuerySchema,
99
98
  };
100
99
 
101
- /**
102
- * Convert a Zod v4 schema to JSON Schema via zod-to-json-schema.
103
- * The library expects Zod v3 types; schemas are structurally compatible at runtime.
104
- */
105
- function toJsonSchema(
106
- schema: z.ZodType,
107
- name: string
108
- ): Record<string, unknown> | null {
100
+ function toJsonSchema(schema: z.ZodType): Record<string, unknown> | null {
109
101
  try {
110
- type ZodToJsonSchemaInput = Parameters<typeof zodToJsonSchema>[0];
111
- return zodToJsonSchema(schema as unknown as ZodToJsonSchemaInput, {
112
- name,
113
- $refStrategy: 'none',
114
- }) as Record<string, unknown>;
102
+ return z.toJSONSchema(schema) as Record<string, unknown>;
115
103
  } catch {
116
104
  return null;
117
105
  }
@@ -119,7 +107,7 @@ function toJsonSchema(
119
107
 
120
108
  function getToolJsonSchema(toolName: string): Record<string, unknown> | null {
121
109
  const zodSchema = TOOL_ZOD_SCHEMAS[toolName];
122
- return zodSchema ? toJsonSchema(zodSchema, toolName) : null;
110
+ return zodSchema ? toJsonSchema(zodSchema) : null;
123
111
  }
124
112
 
125
113
  /**
@@ -378,7 +366,7 @@ toolsRoutes.get('/schemas', async (
378
366
  * Response:
379
367
  * {
380
368
  * "instructions": "## Expert Code Forensics Agent...",
381
- * "_meta": { "charCount": 5432, "version": "2.0.0" }
369
+ * "_meta": { "charCount": 5432, "version": "2.2.0" }
382
370
  * }
383
371
  */
384
372
  toolsRoutes.get('/system', async (
@@ -419,7 +407,7 @@ toolsRoutes.get('/system', async (
419
407
  * "success": true,
420
408
  * "system_prompt": "## Expert Code Forensics Agent...",
421
409
  * "tools_schema": { "localSearchCode": {...}, ... },
422
- * "_meta": { "promptCharCount": 5432, "toolsCount": 13, "version": "2.0.0" }
410
+ * "_meta": { "promptCharCount": 5432, "toolsCount": 13, "version": "2.2.0" }
423
411
  * }
424
412
  */
425
413
  toolsRoutes.get('/initContext', async (