docorbit 0.1.0 → 0.1.2

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 (405) hide show
  1. package/README.md +29 -15
  2. package/bin/docorbit.js +2 -2
  3. package/dist/apps/cli/src/commands/add.d.ts +7 -0
  4. package/dist/apps/cli/src/commands/add.js +35 -0
  5. package/dist/apps/cli/src/commands/api.d.ts +2 -0
  6. package/dist/apps/cli/src/commands/api.js +35 -0
  7. package/dist/apps/cli/src/commands/context.d.ts +10 -0
  8. package/dist/apps/cli/src/commands/context.js +36 -0
  9. package/dist/apps/cli/src/commands/dashboard.d.ts +8 -0
  10. package/dist/apps/cli/src/commands/dashboard.js +43 -0
  11. package/dist/apps/cli/src/commands/diff.d.ts +2 -0
  12. package/dist/apps/cli/src/commands/diff.js +29 -0
  13. package/dist/apps/cli/src/commands/evaluate.d.ts +11 -0
  14. package/dist/apps/cli/src/commands/evaluate.js +101 -0
  15. package/dist/apps/cli/src/commands/examples.d.ts +2 -0
  16. package/dist/apps/cli/src/commands/examples.js +36 -0
  17. package/dist/apps/cli/src/commands/export.d.ts +11 -0
  18. package/dist/apps/cli/src/commands/export.js +72 -0
  19. package/dist/apps/cli/src/commands/impact.d.ts +2 -0
  20. package/dist/apps/cli/src/commands/impact.js +30 -0
  21. package/dist/apps/cli/src/commands/init.d.ts +5 -0
  22. package/dist/apps/cli/src/commands/init.js +52 -0
  23. package/dist/apps/cli/src/commands/inspect.d.ts +5 -0
  24. package/dist/apps/cli/src/commands/inspect.js +24 -0
  25. package/dist/apps/cli/src/commands/mcp.d.ts +8 -0
  26. package/dist/apps/cli/src/commands/mcp.js +49 -0
  27. package/dist/apps/cli/src/commands/pitfalls.d.ts +2 -0
  28. package/dist/apps/cli/src/commands/pitfalls.js +35 -0
  29. package/dist/apps/cli/src/commands/recipes.d.ts +2 -0
  30. package/dist/apps/cli/src/commands/recipes.js +33 -0
  31. package/dist/apps/cli/src/commands/search.d.ts +11 -0
  32. package/dist/apps/cli/src/commands/search.js +36 -0
  33. package/dist/apps/cli/src/commands/update.d.ts +6 -0
  34. package/dist/apps/cli/src/commands/update.js +53 -0
  35. package/dist/apps/cli/src/commands/verify.d.ts +2 -0
  36. package/dist/apps/cli/src/commands/verify.js +44 -0
  37. package/dist/apps/cli/src/formatters/colors.d.ts +21 -0
  38. package/dist/apps/cli/src/formatters/colors.js +22 -0
  39. package/dist/apps/cli/src/formatters/inspection.d.ts +3 -0
  40. package/dist/apps/cli/src/formatters/inspection.js +88 -0
  41. package/dist/apps/cli/src/formatters/knowledge.d.ts +5 -0
  42. package/dist/apps/cli/src/formatters/knowledge.js +229 -0
  43. package/dist/apps/cli/src/formatters/retrieval.d.ts +3 -0
  44. package/dist/apps/cli/src/formatters/retrieval.js +61 -0
  45. package/{apps/cli/src/formatters/terminal.ts → dist/apps/cli/src/formatters/terminal.d.ts} +0 -1
  46. package/dist/apps/cli/src/formatters/terminal.js +5 -0
  47. package/dist/apps/cli/src/formatters/verification.d.ts +4 -0
  48. package/dist/apps/cli/src/formatters/verification.js +102 -0
  49. package/dist/apps/cli/src/index.d.ts +1 -0
  50. package/dist/apps/cli/src/index.js +376 -0
  51. package/dist/packages/core/src/dashboard/server.d.ts +33 -0
  52. package/dist/packages/core/src/dashboard/server.js +267 -0
  53. package/dist/packages/core/src/dashboard/ui.d.ts +5 -0
  54. package/{packages/core/src/dashboard/ui.ts → dist/packages/core/src/dashboard/ui.js} +2 -2
  55. package/dist/packages/core/src/implementation-service.d.ts +73 -0
  56. package/dist/packages/core/src/implementation-service.js +325 -0
  57. package/{packages/core/src/index.ts → dist/packages/core/src/index.d.ts} +0 -1
  58. package/dist/packages/core/src/index.js +6 -0
  59. package/dist/packages/core/src/inspector.d.ts +22 -0
  60. package/dist/packages/core/src/inspector.js +38 -0
  61. package/dist/packages/core/src/pipeline.d.ts +45 -0
  62. package/dist/packages/core/src/pipeline.js +246 -0
  63. package/dist/packages/crawler/src/config.d.ts +2 -0
  64. package/dist/packages/crawler/src/config.js +10 -0
  65. package/dist/packages/crawler/src/fetcher.d.ts +31 -0
  66. package/dist/packages/crawler/src/fetcher.js +139 -0
  67. package/dist/packages/crawler/src/index.js +2 -0
  68. package/dist/packages/discovery/src/index.d.ts +11 -0
  69. package/dist/packages/discovery/src/index.js +29 -0
  70. package/dist/packages/discovery/src/provider.d.ts +12 -0
  71. package/dist/packages/discovery/src/provider.js +30 -0
  72. package/dist/packages/discovery/src/providers/generic.d.ts +7 -0
  73. package/dist/packages/discovery/src/providers/generic.js +94 -0
  74. package/dist/packages/discovery/src/providers/github.d.ts +7 -0
  75. package/dist/packages/discovery/src/providers/github.js +52 -0
  76. package/dist/packages/discovery/src/providers/llms-txt.d.ts +7 -0
  77. package/dist/packages/discovery/src/providers/llms-txt.js +60 -0
  78. package/dist/packages/discovery/src/providers/markdown.d.ts +7 -0
  79. package/dist/packages/discovery/src/providers/markdown.js +38 -0
  80. package/dist/packages/discovery/src/providers/openapi.d.ts +7 -0
  81. package/dist/packages/discovery/src/providers/openapi.js +77 -0
  82. package/dist/packages/discovery/src/providers/sitemap.d.ts +7 -0
  83. package/dist/packages/discovery/src/providers/sitemap.js +53 -0
  84. package/dist/packages/discovery/src/providers/skill.d.ts +7 -0
  85. package/dist/packages/discovery/src/providers/skill.js +46 -0
  86. package/dist/packages/discovery/src/ranker.d.ts +6 -0
  87. package/dist/packages/discovery/src/ranker.js +107 -0
  88. package/dist/packages/evaluation/src/dataset.d.ts +2 -0
  89. package/dist/packages/evaluation/src/dataset.js +944 -0
  90. package/dist/packages/evaluation/src/index.js +8 -0
  91. package/dist/packages/evaluation/src/runner.d.ts +7 -0
  92. package/dist/packages/evaluation/src/runner.js +196 -0
  93. package/dist/packages/evaluation/src/strategies/context7-runner.d.ts +24 -0
  94. package/dist/packages/evaluation/src/strategies/context7-runner.js +229 -0
  95. package/dist/packages/evaluation/src/strategies/docorbit-runner.d.ts +5 -0
  96. package/dist/packages/evaluation/src/strategies/docorbit-runner.js +210 -0
  97. package/dist/packages/evaluation/src/strategies/firecrawl-runner.d.ts +24 -0
  98. package/dist/packages/evaluation/src/strategies/firecrawl-runner.js +151 -0
  99. package/dist/packages/evaluation/src/strategies/web-search-runner.d.ts +32 -0
  100. package/dist/packages/evaluation/src/strategies/web-search-runner.js +161 -0
  101. package/dist/packages/evaluation/src/types.d.ts +15 -0
  102. package/dist/packages/evaluation/src/types.js +1 -0
  103. package/dist/packages/evaluation/src/version-matcher.d.ts +11 -0
  104. package/dist/packages/evaluation/src/version-matcher.js +61 -0
  105. package/dist/packages/export/src/agents-md.d.ts +19 -0
  106. package/dist/packages/export/src/agents-md.js +170 -0
  107. package/dist/packages/export/src/claude-md.d.ts +17 -0
  108. package/dist/packages/export/src/claude-md.js +118 -0
  109. package/dist/packages/export/src/docs-map.d.ts +14 -0
  110. package/dist/packages/export/src/docs-map.js +118 -0
  111. package/dist/packages/export/src/index.js +6 -0
  112. package/dist/packages/export/src/llms-txt.d.ts +15 -0
  113. package/dist/packages/export/src/llms-txt.js +73 -0
  114. package/dist/packages/export/src/service.d.ts +23 -0
  115. package/dist/packages/export/src/service.js +210 -0
  116. package/dist/packages/export/src/skill-md.d.ts +14 -0
  117. package/dist/packages/export/src/skill-md.js +107 -0
  118. package/{packages/mcp/src/index.ts → dist/packages/mcp/src/index.d.ts} +2 -35
  119. package/dist/packages/mcp/src/index.js +6 -0
  120. package/dist/packages/mcp/src/resources/index.d.ts +12 -0
  121. package/dist/packages/mcp/src/resources/index.js +165 -0
  122. package/dist/packages/mcp/src/server.d.ts +30 -0
  123. package/dist/packages/mcp/src/server.js +243 -0
  124. package/dist/packages/mcp/src/tools/analyze-impact.d.ts +6 -0
  125. package/dist/packages/mcp/src/tools/analyze-impact.js +64 -0
  126. package/dist/packages/mcp/src/tools/check-api.d.ts +6 -0
  127. package/dist/packages/mcp/src/tools/check-api.js +74 -0
  128. package/dist/packages/mcp/src/tools/diff-docs.d.ts +6 -0
  129. package/dist/packages/mcp/src/tools/diff-docs.js +58 -0
  130. package/dist/packages/mcp/src/tools/export-context.d.ts +6 -0
  131. package/dist/packages/mcp/src/tools/export-context.js +61 -0
  132. package/dist/packages/mcp/src/tools/find-api.d.ts +6 -0
  133. package/dist/packages/mcp/src/tools/find-api.js +91 -0
  134. package/dist/packages/mcp/src/tools/find-example.d.ts +6 -0
  135. package/dist/packages/mcp/src/tools/find-example.js +92 -0
  136. package/dist/packages/mcp/src/tools/find-pitfall.d.ts +6 -0
  137. package/dist/packages/mcp/src/tools/find-pitfall.js +85 -0
  138. package/dist/packages/mcp/src/tools/find-recipe.d.ts +6 -0
  139. package/dist/packages/mcp/src/tools/find-recipe.js +89 -0
  140. package/dist/packages/mcp/src/tools/get-doc.d.ts +6 -0
  141. package/dist/packages/mcp/src/tools/get-doc.js +118 -0
  142. package/dist/packages/mcp/src/tools/get-docs-map.d.ts +6 -0
  143. package/dist/packages/mcp/src/tools/get-docs-map.js +54 -0
  144. package/dist/packages/mcp/src/tools/get-version.d.ts +6 -0
  145. package/dist/packages/mcp/src/tools/get-version.js +104 -0
  146. package/dist/packages/mcp/src/tools/implementation-context.d.ts +6 -0
  147. package/dist/packages/mcp/src/tools/implementation-context.js +102 -0
  148. package/dist/packages/mcp/src/tools/index.d.ts +19 -0
  149. package/dist/packages/mcp/src/tools/index.js +41 -0
  150. package/dist/packages/mcp/src/tools/ingest-doc.d.ts +6 -0
  151. package/dist/packages/mcp/src/tools/ingest-doc.js +264 -0
  152. package/dist/packages/mcp/src/tools/list-sources.d.ts +6 -0
  153. package/dist/packages/mcp/src/tools/list-sources.js +76 -0
  154. package/dist/packages/mcp/src/tools/search-docs.d.ts +6 -0
  155. package/dist/packages/mcp/src/tools/search-docs.js +113 -0
  156. package/dist/packages/mcp/src/tools/types.d.ts +22 -0
  157. package/dist/packages/mcp/src/tools/types.js +1 -0
  158. package/dist/packages/mcp/src/transports/http.d.ts +31 -0
  159. package/dist/packages/mcp/src/transports/http.js +215 -0
  160. package/dist/packages/mcp/src/transports/stdio.d.ts +22 -0
  161. package/dist/packages/mcp/src/transports/stdio.js +86 -0
  162. package/{packages/mcp/src/transports/types.ts → dist/packages/mcp/src/transports/types.d.ts} +2 -3
  163. package/dist/packages/mcp/src/transports/types.js +1 -0
  164. package/dist/packages/mcp/src/types.d.ts +89 -0
  165. package/dist/packages/mcp/src/types.js +7 -0
  166. package/dist/packages/normalizer/src/example-indexer.d.ts +5 -0
  167. package/dist/packages/normalizer/src/example-indexer.js +200 -0
  168. package/dist/packages/normalizer/src/html.d.ts +13 -0
  169. package/dist/packages/normalizer/src/html.js +221 -0
  170. package/{packages/normalizer/src/index.ts → dist/packages/normalizer/src/index.d.ts} +0 -1
  171. package/dist/packages/normalizer/src/index.js +7 -0
  172. package/dist/packages/normalizer/src/llms.d.ts +3 -0
  173. package/dist/packages/normalizer/src/llms.js +71 -0
  174. package/dist/packages/normalizer/src/openapi/endpoint-parser.d.ts +11 -0
  175. package/dist/packages/normalizer/src/openapi/endpoint-parser.js +357 -0
  176. package/dist/packages/normalizer/src/openapi/schema-resolver.d.ts +10 -0
  177. package/dist/packages/normalizer/src/openapi/schema-resolver.js +82 -0
  178. package/dist/packages/normalizer/src/openapi.js +2 -0
  179. package/dist/packages/normalizer/src/page.d.ts +13 -0
  180. package/dist/packages/normalizer/src/page.js +150 -0
  181. package/dist/packages/normalizer/src/pitfall-extractor.d.ts +6 -0
  182. package/dist/packages/normalizer/src/pitfall-extractor.js +153 -0
  183. package/dist/packages/normalizer/src/slicer.d.ts +30 -0
  184. package/dist/packages/normalizer/src/slicer.js +360 -0
  185. package/dist/packages/retrieval/src/engine.d.ts +17 -0
  186. package/dist/packages/retrieval/src/engine.js +93 -0
  187. package/{packages/retrieval/src/index.ts → dist/packages/retrieval/src/index.d.ts} +0 -1
  188. package/dist/packages/retrieval/src/index.js +6 -0
  189. package/dist/packages/retrieval/src/intent.d.ts +6 -0
  190. package/dist/packages/retrieval/src/intent.js +39 -0
  191. package/dist/packages/retrieval/src/packer.d.ts +2 -0
  192. package/dist/packages/retrieval/src/packer.js +108 -0
  193. package/dist/packages/retrieval/src/recipe-engine.d.ts +18 -0
  194. package/dist/packages/retrieval/src/recipe-engine.js +265 -0
  195. package/dist/packages/retrieval/src/scorer.d.ts +13 -0
  196. package/dist/packages/retrieval/src/scorer.js +110 -0
  197. package/dist/packages/retrieval/src/weights.d.ts +3 -0
  198. package/dist/packages/retrieval/src/weights.js +28 -0
  199. package/dist/packages/security/src/annotations.d.ts +10 -0
  200. package/dist/packages/security/src/annotations.js +100 -0
  201. package/dist/packages/security/src/index.js +2 -0
  202. package/dist/packages/security/src/ssrf.d.ts +17 -0
  203. package/dist/packages/security/src/ssrf.js +132 -0
  204. package/dist/packages/shared/src/errors.d.ts +22 -0
  205. package/dist/packages/shared/src/errors.js +44 -0
  206. package/dist/packages/shared/src/hashing.d.ts +3 -0
  207. package/dist/packages/shared/src/hashing.js +21 -0
  208. package/dist/packages/shared/src/index.js +3 -0
  209. package/dist/packages/shared/src/types.d.ts +715 -0
  210. package/dist/packages/shared/src/types.js +1 -0
  211. package/dist/packages/storage/src/db.d.ts +11 -0
  212. package/dist/packages/storage/src/db.js +128 -0
  213. package/dist/packages/storage/src/index.js +10 -0
  214. package/dist/packages/storage/src/interfaces.d.ts +83 -0
  215. package/dist/packages/storage/src/interfaces.js +1 -0
  216. package/dist/packages/storage/src/repositories/api-repository.d.ts +16 -0
  217. package/dist/packages/storage/src/repositories/api-repository.js +169 -0
  218. package/dist/packages/storage/src/repositories/chunk-repository.d.ts +32 -0
  219. package/dist/packages/storage/src/repositories/chunk-repository.js +250 -0
  220. package/dist/packages/storage/src/repositories/example-repository.d.ts +16 -0
  221. package/dist/packages/storage/src/repositories/example-repository.js +158 -0
  222. package/dist/packages/storage/src/repositories/page-repository.d.ts +16 -0
  223. package/dist/packages/storage/src/repositories/page-repository.js +161 -0
  224. package/dist/packages/storage/src/repositories/pitfall-repository.d.ts +15 -0
  225. package/dist/packages/storage/src/repositories/pitfall-repository.js +144 -0
  226. package/dist/packages/storage/src/repositories/source-repository.d.ts +33 -0
  227. package/dist/packages/storage/src/repositories/source-repository.js +153 -0
  228. package/dist/packages/storage/src/repository.d.ts +92 -0
  229. package/dist/packages/storage/src/repository.js +157 -0
  230. package/dist/packages/storage/src/schema.d.ts +2 -0
  231. package/{packages/storage/src/schema.ts → dist/packages/storage/src/schema.js} +0 -3
  232. package/dist/packages/storage/src/search-tokens.d.ts +6 -0
  233. package/dist/packages/storage/src/search-tokens.js +26 -0
  234. package/dist/packages/verification/src/diff-engine.d.ts +18 -0
  235. package/dist/packages/verification/src/diff-engine.js +218 -0
  236. package/dist/packages/verification/src/extractor.d.ts +29 -0
  237. package/dist/packages/verification/src/extractor.js +302 -0
  238. package/dist/packages/verification/src/impact-scanner.d.ts +9 -0
  239. package/dist/packages/verification/src/impact-scanner.js +181 -0
  240. package/dist/packages/verification/src/index.js +5 -0
  241. package/dist/packages/verification/src/services.d.ts +55 -0
  242. package/dist/packages/verification/src/services.js +189 -0
  243. package/dist/packages/verification/src/verifier.d.ts +15 -0
  244. package/dist/packages/verification/src/verifier.js +315 -0
  245. package/dist/packages/workspace/src/detector.d.ts +7 -0
  246. package/dist/packages/workspace/src/detector.js +117 -0
  247. package/dist/packages/workspace/src/ecosystems/cargo.d.ts +10 -0
  248. package/dist/packages/workspace/src/ecosystems/cargo.js +69 -0
  249. package/dist/packages/workspace/src/ecosystems/composer.d.ts +7 -0
  250. package/dist/packages/workspace/src/ecosystems/composer.js +40 -0
  251. package/dist/packages/workspace/src/ecosystems/go.d.ts +7 -0
  252. package/dist/packages/workspace/src/ecosystems/go.js +49 -0
  253. package/{packages/workspace/src/ecosystems/index.ts → dist/packages/workspace/src/ecosystems/index.d.ts} +2 -24
  254. package/dist/packages/workspace/src/ecosystems/index.js +21 -0
  255. package/dist/packages/workspace/src/ecosystems/maven.d.ts +7 -0
  256. package/dist/packages/workspace/src/ecosystems/maven.js +28 -0
  257. package/dist/packages/workspace/src/ecosystems/npm.d.ts +10 -0
  258. package/dist/packages/workspace/src/ecosystems/npm.js +73 -0
  259. package/dist/packages/workspace/src/ecosystems/pub.d.ts +7 -0
  260. package/dist/packages/workspace/src/ecosystems/pub.js +34 -0
  261. package/dist/packages/workspace/src/ecosystems/pypi.d.ts +9 -0
  262. package/dist/packages/workspace/src/ecosystems/pypi.js +94 -0
  263. package/dist/packages/workspace/src/ecosystems/rubygems.d.ts +7 -0
  264. package/dist/packages/workspace/src/ecosystems/rubygems.js +25 -0
  265. package/dist/packages/workspace/src/ecosystems/types.d.ts +9 -0
  266. package/dist/packages/workspace/src/ecosystems/types.js +1 -0
  267. package/dist/packages/workspace/src/index.js +5 -0
  268. package/dist/packages/workspace/src/lockfile.d.ts +21 -0
  269. package/dist/packages/workspace/src/lockfile.js +153 -0
  270. package/dist/packages/workspace/src/resolver.d.ts +39 -0
  271. package/dist/packages/workspace/src/resolver.js +164 -0
  272. package/dist/packages/workspace/src/semver.d.ts +33 -0
  273. package/dist/packages/workspace/src/semver.js +235 -0
  274. package/package.json +13 -9
  275. package/apps/cli/bin/docorbit.js +0 -8
  276. package/apps/cli/src/commands/add.ts +0 -44
  277. package/apps/cli/src/commands/api.ts +0 -38
  278. package/apps/cli/src/commands/context.ts +0 -47
  279. package/apps/cli/src/commands/dashboard.ts +0 -55
  280. package/apps/cli/src/commands/diff.ts +0 -30
  281. package/apps/cli/src/commands/evaluate.ts +0 -133
  282. package/apps/cli/src/commands/examples.ts +0 -39
  283. package/apps/cli/src/commands/export.ts +0 -89
  284. package/apps/cli/src/commands/impact.ts +0 -31
  285. package/apps/cli/src/commands/init.ts +0 -69
  286. package/apps/cli/src/commands/inspect.ts +0 -30
  287. package/apps/cli/src/commands/mcp.ts +0 -72
  288. package/apps/cli/src/commands/pitfalls.ts +0 -38
  289. package/apps/cli/src/commands/recipes.ts +0 -35
  290. package/apps/cli/src/commands/search.ts +0 -48
  291. package/apps/cli/src/commands/update.ts +0 -73
  292. package/apps/cli/src/commands/verify.ts +0 -48
  293. package/apps/cli/src/formatters/colors.ts +0 -23
  294. package/apps/cli/src/formatters/inspection.ts +0 -102
  295. package/apps/cli/src/formatters/knowledge.ts +0 -272
  296. package/apps/cli/src/formatters/retrieval.ts +0 -74
  297. package/apps/cli/src/formatters/verification.ts +0 -126
  298. package/apps/cli/src/index.ts +0 -409
  299. package/packages/core/src/dashboard/server.ts +0 -314
  300. package/packages/core/src/implementation-service.ts +0 -451
  301. package/packages/core/src/inspector.ts +0 -71
  302. package/packages/core/src/pipeline.ts +0 -331
  303. package/packages/crawler/src/config.ts +0 -12
  304. package/packages/crawler/src/fetcher.ts +0 -185
  305. package/packages/discovery/src/index.ts +0 -31
  306. package/packages/discovery/src/provider.ts +0 -47
  307. package/packages/discovery/src/providers/generic.ts +0 -98
  308. package/packages/discovery/src/providers/github.ts +0 -61
  309. package/packages/discovery/src/providers/llms-txt.ts +0 -73
  310. package/packages/discovery/src/providers/markdown.ts +0 -48
  311. package/packages/discovery/src/providers/openapi.ts +0 -91
  312. package/packages/discovery/src/providers/sitemap.ts +0 -62
  313. package/packages/discovery/src/providers/skill.ts +0 -54
  314. package/packages/discovery/src/ranker.ts +0 -123
  315. package/packages/evaluation/src/dataset.ts +0 -963
  316. package/packages/evaluation/src/runner.ts +0 -241
  317. package/packages/evaluation/src/strategies/context7-runner.ts +0 -269
  318. package/packages/evaluation/src/strategies/docorbit-runner.ts +0 -228
  319. package/packages/evaluation/src/strategies/firecrawl-runner.ts +0 -172
  320. package/packages/evaluation/src/strategies/web-search-runner.ts +0 -194
  321. package/packages/evaluation/src/types.ts +0 -34
  322. package/packages/evaluation/src/version-matcher.ts +0 -73
  323. package/packages/export/src/agents-md.ts +0 -200
  324. package/packages/export/src/claude-md.ts +0 -141
  325. package/packages/export/src/docs-map.ts +0 -150
  326. package/packages/export/src/llms-txt.ts +0 -96
  327. package/packages/export/src/service.ts +0 -250
  328. package/packages/export/src/skill-md.ts +0 -128
  329. package/packages/mcp/src/resources/index.ts +0 -189
  330. package/packages/mcp/src/server.ts +0 -278
  331. package/packages/mcp/src/tools/analyze-impact.ts +0 -74
  332. package/packages/mcp/src/tools/check-api.ts +0 -86
  333. package/packages/mcp/src/tools/diff-docs.ts +0 -68
  334. package/packages/mcp/src/tools/export-context.ts +0 -73
  335. package/packages/mcp/src/tools/find-api.ts +0 -99
  336. package/packages/mcp/src/tools/find-example.ts +0 -100
  337. package/packages/mcp/src/tools/find-pitfall.ts +0 -94
  338. package/packages/mcp/src/tools/find-recipe.ts +0 -98
  339. package/packages/mcp/src/tools/get-doc.ts +0 -130
  340. package/packages/mcp/src/tools/get-docs-map.ts +0 -64
  341. package/packages/mcp/src/tools/get-version.ts +0 -118
  342. package/packages/mcp/src/tools/implementation-context.ts +0 -88
  343. package/packages/mcp/src/tools/index.ts +0 -59
  344. package/packages/mcp/src/tools/list-sources.ts +0 -85
  345. package/packages/mcp/src/tools/search-docs.ts +0 -123
  346. package/packages/mcp/src/tools/types.ts +0 -28
  347. package/packages/mcp/src/transports/http.ts +0 -256
  348. package/packages/mcp/src/transports/stdio.ts +0 -105
  349. package/packages/mcp/src/types.ts +0 -102
  350. package/packages/normalizer/src/example-indexer.ts +0 -240
  351. package/packages/normalizer/src/html.ts +0 -253
  352. package/packages/normalizer/src/llms.ts +0 -83
  353. package/packages/normalizer/src/openapi/endpoint-parser.ts +0 -406
  354. package/packages/normalizer/src/openapi/schema-resolver.ts +0 -111
  355. package/packages/normalizer/src/page.ts +0 -184
  356. package/packages/normalizer/src/pitfall-extractor.ts +0 -190
  357. package/packages/normalizer/src/slicer.ts +0 -455
  358. package/packages/retrieval/src/engine.ts +0 -120
  359. package/packages/retrieval/src/intent.ts +0 -43
  360. package/packages/retrieval/src/packer.ts +0 -145
  361. package/packages/retrieval/src/recipe-engine.ts +0 -313
  362. package/packages/retrieval/src/scorer.ts +0 -139
  363. package/packages/retrieval/src/weights.ts +0 -31
  364. package/packages/security/src/annotations.ts +0 -112
  365. package/packages/security/src/ssrf.ts +0 -153
  366. package/packages/shared/src/errors.ts +0 -53
  367. package/packages/shared/src/hashing.ts +0 -23
  368. package/packages/shared/src/types.ts +0 -881
  369. package/packages/storage/src/db.ts +0 -72
  370. package/packages/storage/src/interfaces.ts +0 -115
  371. package/packages/storage/src/repositories/api-repository.ts +0 -219
  372. package/packages/storage/src/repositories/chunk-repository.ts +0 -316
  373. package/packages/storage/src/repositories/example-repository.ts +0 -206
  374. package/packages/storage/src/repositories/page-repository.ts +0 -205
  375. package/packages/storage/src/repositories/pitfall-repository.ts +0 -188
  376. package/packages/storage/src/repositories/source-repository.ts +0 -205
  377. package/packages/storage/src/repository.ts +0 -256
  378. package/packages/storage/src/search-tokens.ts +0 -28
  379. package/packages/verification/src/diff-engine.ts +0 -258
  380. package/packages/verification/src/extractor.ts +0 -339
  381. package/packages/verification/src/impact-scanner.ts +0 -203
  382. package/packages/verification/src/services.ts +0 -238
  383. package/packages/verification/src/verifier.ts +0 -375
  384. package/packages/workspace/src/detector.ts +0 -143
  385. package/packages/workspace/src/ecosystems/cargo.ts +0 -84
  386. package/packages/workspace/src/ecosystems/composer.ts +0 -42
  387. package/packages/workspace/src/ecosystems/go.ts +0 -54
  388. package/packages/workspace/src/ecosystems/maven.ts +0 -34
  389. package/packages/workspace/src/ecosystems/npm.ts +0 -83
  390. package/packages/workspace/src/ecosystems/pub.ts +0 -40
  391. package/packages/workspace/src/ecosystems/pypi.ts +0 -100
  392. package/packages/workspace/src/ecosystems/rubygems.ts +0 -30
  393. package/packages/workspace/src/ecosystems/types.ts +0 -18
  394. package/packages/workspace/src/lockfile.ts +0 -194
  395. package/packages/workspace/src/resolver.ts +0 -234
  396. package/packages/workspace/src/semver.ts +0 -259
  397. /package/{packages/crawler/src/index.ts → dist/packages/crawler/src/index.d.ts} +0 -0
  398. /package/{packages/evaluation/src/index.ts → dist/packages/evaluation/src/index.d.ts} +0 -0
  399. /package/{packages/export/src/index.ts → dist/packages/export/src/index.d.ts} +0 -0
  400. /package/{packages/normalizer/src/openapi.ts → dist/packages/normalizer/src/openapi.d.ts} +0 -0
  401. /package/{packages/security/src/index.ts → dist/packages/security/src/index.d.ts} +0 -0
  402. /package/{packages/shared/src/index.ts → dist/packages/shared/src/index.d.ts} +0 -0
  403. /package/{packages/storage/src/index.ts → dist/packages/storage/src/index.d.ts} +0 -0
  404. /package/{packages/verification/src/index.ts → dist/packages/verification/src/index.d.ts} +0 -0
  405. /package/{packages/workspace/src/index.ts → dist/packages/workspace/src/index.d.ts} +0 -0
@@ -1,143 +0,0 @@
1
- import { readFileSync, readdirSync } from 'node:fs';
2
- import { join, relative } from 'node:path';
3
- import type {
4
- Ecosystem,
5
- ProjectDependency,
6
- WorkspaceScanResult,
7
- } from '../../shared/src/index.ts';
8
- import {
9
- type EcosystemStrategy,
10
- getDefaultStrategies,
11
- } from './ecosystems/index.ts';
12
-
13
- const IGNORED_DIRS = new Set([
14
- 'node_modules',
15
- '.git',
16
- '.docorbit',
17
- 'dist',
18
- 'build',
19
- 'target',
20
- 'vendor',
21
- '.venv',
22
- 'venv',
23
- '.next',
24
- '.turbo',
25
- ]);
26
-
27
- /**
28
- * Recursively locates files in a directory up to a max depth, skipping ignored folders.
29
- */
30
- function findManifestFiles(
31
- dir: string,
32
- targetFileNames: Set<string>,
33
- maxDepth: number = 4,
34
- currentDepth: number = 0
35
- ): string[] {
36
- if (currentDepth > maxDepth) return [];
37
- const results: string[] = [];
38
-
39
- try {
40
- const entries = readdirSync(dir, { withFileTypes: true });
41
- for (const entry of entries) {
42
- if (IGNORED_DIRS.has(entry.name)) continue;
43
-
44
- const fullPath = join(dir, entry.name);
45
- if (entry.isDirectory()) {
46
- results.push(...findManifestFiles(fullPath, targetFileNames, maxDepth, currentDepth + 1));
47
- } else if (entry.isFile()) {
48
- const name = entry.name.toLowerCase();
49
- if (targetFileNames.has(name)) {
50
- results.push(fullPath);
51
- }
52
- }
53
- }
54
- } catch {
55
- // Directory unreadable, ignore
56
- }
57
-
58
- return results;
59
- }
60
-
61
- /**
62
- * Scans a workspace directory, detects package manifests across supported ecosystems,
63
- * correlates lockfiles with resolved versions, and preserves monorepo boundaries.
64
- */
65
- export function detectWorkspaceDependencies(
66
- workspaceDir: string,
67
- strategies: EcosystemStrategy[] = getDefaultStrategies()
68
- ): WorkspaceScanResult {
69
- // Index strategies by manifest and lockfile names
70
- const manifestMap = new Map<string, EcosystemStrategy>();
71
- const lockfileMap = new Map<string, EcosystemStrategy>();
72
- const allTargetNames = new Set<string>();
73
-
74
- for (const strat of strategies) {
75
- for (const mName of strat.manifestNames) {
76
- const lower = mName.toLowerCase();
77
- manifestMap.set(lower, strat);
78
- allTargetNames.add(lower);
79
- }
80
- if (strat.lockfileNames) {
81
- for (const lName of strat.lockfileNames) {
82
- const lower = lName.toLowerCase();
83
- lockfileMap.set(lower, strat);
84
- allTargetNames.add(lower);
85
- }
86
- }
87
- }
88
-
89
- const manifests = findManifestFiles(workspaceDir, allTargetNames);
90
- const ecosystems = new Set<Ecosystem>();
91
- const dependencies: ProjectDependency[] = [];
92
- const manifestsFound: string[] = [];
93
-
94
- // 1. Gather all lockfiles first to correlate resolved versions
95
- const lockfileCache = new Map<string, Map<string, string>>();
96
-
97
- for (const file of manifests) {
98
- const rel = relative(workspaceDir, file);
99
- manifestsFound.push(rel);
100
- const baseName = file.split(/[/\\]/).pop()?.toLowerCase() || '';
101
-
102
- const lockStrategy = lockfileMap.get(baseName);
103
- if (lockStrategy && lockStrategy.parseLockfile) {
104
- try {
105
- const content = readFileSync(file, 'utf-8');
106
- lockfileCache.set(rel, lockStrategy.parseLockfile(baseName, content));
107
- } catch {
108
- // Ignore unreadable lockfile
109
- }
110
- }
111
- }
112
-
113
- // 2. Parse package manifests and resolve versions
114
- for (const file of manifests) {
115
- const rel = relative(workspaceDir, file);
116
- const baseName = file.split(/[/\\]/).pop()?.toLowerCase() || '';
117
- const pkgDir = rel.includes('/') ? rel.slice(0, rel.lastIndexOf('/')) : '.';
118
-
119
- const strat = manifestMap.get(baseName);
120
- if (strat) {
121
- try {
122
- const content = readFileSync(file, 'utf-8');
123
- ecosystems.add(strat.ecosystem);
124
- const parsed = strat.parseManifest(baseName, content, rel, pkgDir);
125
-
126
- if (strat.resolveVersions) {
127
- strat.resolveVersions(parsed, pkgDir, lockfileCache);
128
- }
129
-
130
- dependencies.push(...parsed);
131
- } catch {
132
- // Ignore parse failure
133
- }
134
- }
135
- }
136
-
137
- return {
138
- workspaceRoot: workspaceDir,
139
- ecosystems: Array.from(ecosystems),
140
- manifestsFound,
141
- dependencies,
142
- };
143
- }
@@ -1,84 +0,0 @@
1
- import { join } from 'node:path';
2
- import type { ProjectDependency } from '../../../shared/src/index.ts';
3
- import type { EcosystemStrategy } from './types.ts';
4
-
5
- export class CargoStrategy implements EcosystemStrategy {
6
- readonly ecosystem = 'cargo';
7
- readonly manifestNames = ['cargo.toml'];
8
- readonly lockfileNames = ['cargo.lock'];
9
-
10
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
11
- const deps: ProjectDependency[] = [];
12
- let currentSection = '';
13
- const lines = content.split('\n');
14
-
15
- for (const line of lines) {
16
- const trimmed = line.trim();
17
- if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
18
- currentSection = trimmed.slice(1, -1).trim();
19
- continue;
20
- }
21
-
22
- const isDep =
23
- currentSection === 'dependencies' ||
24
- currentSection === 'dev-dependencies' ||
25
- currentSection === 'build-dependencies';
26
-
27
- if (isDep && trimmed && !trimmed.startsWith('#') && trimmed.includes('=')) {
28
- const eqIdx = trimmed.indexOf('=');
29
- const name = trimmed.slice(0, eqIdx).trim();
30
- const val = trimmed.slice(eqIdx + 1).trim();
31
-
32
- let version = '*';
33
- if (val.startsWith('"')) {
34
- version = val.replace(/^"|"$/g, '');
35
- } else if (val.startsWith('{')) {
36
- const vMatch = val.match(/version\s*=\s*"([^"]+)"/);
37
- if (vMatch) version = vMatch[1];
38
- }
39
-
40
- deps.push({
41
- name,
42
- ecosystem: 'cargo',
43
- requestedVersion: version,
44
- sourceFile: relPath,
45
- packagePath: packageDir,
46
- isDev: currentSection === 'dev-dependencies',
47
- });
48
- }
49
- }
50
- return deps;
51
- }
52
-
53
- parseLockfile(_fileName: string, content: string): Map<string, string> {
54
- const resolved = new Map<string, string>();
55
- const blocks = content.split('[[package]]');
56
- for (const block of blocks) {
57
- const nameMatch = block.match(/name\s*=\s*"([^"]+)"/);
58
- const verMatch = block.match(/version\s*=\s*"([^"]+)"/);
59
- if (nameMatch && verMatch) {
60
- resolved.set(nameMatch[1], verMatch[1]);
61
- }
62
- }
63
- return resolved;
64
- }
65
-
66
- resolveVersions(
67
- deps: ProjectDependency[],
68
- pkgDir: string,
69
- lockfileCache: Map<string, Map<string, string>>
70
- ): void {
71
- const lockMap =
72
- lockfileCache.get('Cargo.lock') ||
73
- lockfileCache.get('cargo.lock') ||
74
- lockfileCache.get(join(pkgDir, 'Cargo.lock')) ||
75
- lockfileCache.get(join(pkgDir, 'cargo.lock'));
76
-
77
- if (lockMap) {
78
- for (const dep of deps) {
79
- const resolved = lockMap.get(dep.name);
80
- if (resolved) dep.resolvedVersion = resolved;
81
- }
82
- }
83
- }
84
- }
@@ -1,42 +0,0 @@
1
- import type { ProjectDependency } from '../../../shared/src/index.ts';
2
- import type { EcosystemStrategy } from './types.ts';
3
-
4
- export class ComposerStrategy implements EcosystemStrategy {
5
- readonly ecosystem = 'composer';
6
- readonly manifestNames = ['composer.json'];
7
-
8
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
9
- const deps: ProjectDependency[] = [];
10
- try {
11
- const composer = JSON.parse(content);
12
- if (composer.require && typeof composer.require === 'object') {
13
- for (const [name, ver] of Object.entries(composer.require)) {
14
- if (name === 'php') continue;
15
- deps.push({
16
- name,
17
- ecosystem: 'composer',
18
- requestedVersion: String(ver),
19
- sourceFile: relPath,
20
- packagePath: packageDir,
21
- isDev: false,
22
- });
23
- }
24
- }
25
- if (composer['require-dev'] && typeof composer['require-dev'] === 'object') {
26
- for (const [name, ver] of Object.entries(composer['require-dev'])) {
27
- deps.push({
28
- name,
29
- ecosystem: 'composer',
30
- requestedVersion: String(ver),
31
- sourceFile: relPath,
32
- packagePath: packageDir,
33
- isDev: true,
34
- });
35
- }
36
- }
37
- } catch {
38
- // Ignore malformed JSON
39
- }
40
- return deps;
41
- }
42
- }
@@ -1,54 +0,0 @@
1
- import type { ProjectDependency } from '../../../shared/src/index.ts';
2
- import type { EcosystemStrategy } from './types.ts';
3
-
4
- export class GoStrategy implements EcosystemStrategy {
5
- readonly ecosystem = 'go';
6
- readonly manifestNames = ['go.mod'];
7
-
8
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
9
- const deps: ProjectDependency[] = [];
10
- const lines = content.split('\n');
11
- let inRequireBlock = false;
12
-
13
- for (const line of lines) {
14
- const trimmed = line.trim();
15
- if (trimmed.startsWith('require (')) {
16
- inRequireBlock = true;
17
- continue;
18
- }
19
- if (inRequireBlock && trimmed === ')') {
20
- inRequireBlock = false;
21
- continue;
22
- }
23
-
24
- if (inRequireBlock && trimmed && !trimmed.startsWith('//')) {
25
- const parts = trimmed.split(/\s+/);
26
- if (parts.length >= 2) {
27
- deps.push({
28
- name: parts[0],
29
- ecosystem: 'go',
30
- requestedVersion: parts[1],
31
- resolvedVersion: parts[1].replace(/^\+incompatible$/, ''),
32
- sourceFile: relPath,
33
- packagePath: packageDir,
34
- isDev: false,
35
- });
36
- }
37
- } else if (trimmed.startsWith('require ') && !trimmed.includes('(')) {
38
- const parts = trimmed.slice('require '.length).trim().split(/\s+/);
39
- if (parts.length >= 2) {
40
- deps.push({
41
- name: parts[0],
42
- ecosystem: 'go',
43
- requestedVersion: parts[1],
44
- resolvedVersion: parts[1].replace(/^\+incompatible$/, ''),
45
- sourceFile: relPath,
46
- packagePath: packageDir,
47
- isDev: false,
48
- });
49
- }
50
- }
51
- }
52
- return deps;
53
- }
54
- }
@@ -1,34 +0,0 @@
1
- import type { ProjectDependency } from '../../../shared/src/index.ts';
2
- import type { EcosystemStrategy } from './types.ts';
3
-
4
- export class MavenStrategy implements EcosystemStrategy {
5
- readonly ecosystem = 'maven';
6
- readonly manifestNames = ['pom.xml'];
7
-
8
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
9
- const deps: ProjectDependency[] = [];
10
- const depRegex = /<dependency>([\s\S]*?)<\/dependency>/g;
11
- let match: RegExpExecArray | null;
12
-
13
- while ((match = depRegex.exec(content)) !== null) {
14
- const block = match[1];
15
- const groupMatch = block.match(/<groupId>([^<]+)<\/groupId>/);
16
- const artifactMatch = block.match(/<artifactId>([^<]+)<\/artifactId>/);
17
- const verMatch = block.match(/<version>([^<]+)<\/version>/);
18
-
19
- if (artifactMatch) {
20
- const name = groupMatch ? `${groupMatch[1]}:${artifactMatch[1]}` : artifactMatch[1];
21
- deps.push({
22
- name,
23
- ecosystem: 'maven',
24
- requestedVersion: verMatch ? verMatch[1].trim() : '*',
25
- resolvedVersion: verMatch ? verMatch[1].trim() : undefined,
26
- sourceFile: relPath,
27
- packagePath: packageDir,
28
- isDev: block.includes('<scope>test</scope>'),
29
- });
30
- }
31
- }
32
- return deps;
33
- }
34
- }
@@ -1,83 +0,0 @@
1
- import { join } from 'node:path';
2
- import type { ProjectDependency } from '../../../shared/src/index.ts';
3
- import type { EcosystemStrategy } from './types.ts';
4
-
5
- export class NpmStrategy implements EcosystemStrategy {
6
- readonly ecosystem = 'npm';
7
- readonly manifestNames = ['package.json'];
8
- readonly lockfileNames = ['package-lock.json'];
9
-
10
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
11
- const deps: ProjectDependency[] = [];
12
- try {
13
- const pkg = JSON.parse(content);
14
-
15
- const addSection = (section: Record<string, string> | undefined, isDev: boolean) => {
16
- if (!section) return;
17
- for (const [name, version] of Object.entries(section)) {
18
- deps.push({
19
- name,
20
- ecosystem: 'npm',
21
- requestedVersion: String(version),
22
- sourceFile: relPath,
23
- packagePath: packageDir,
24
- isDev,
25
- });
26
- }
27
- };
28
-
29
- addSection(pkg.dependencies, false);
30
- addSection(pkg.devDependencies, true);
31
- addSection(pkg.peerDependencies, false);
32
- } catch {
33
- // Malformed JSON
34
- }
35
- return deps;
36
- }
37
-
38
- parseLockfile(_fileName: string, content: string): Map<string, string> {
39
- const resolved = new Map<string, string>();
40
- try {
41
- const lock = JSON.parse(content);
42
- // npm v2/v3 lockfile format
43
- if (lock.packages && typeof lock.packages === 'object') {
44
- for (const [key, val] of Object.entries(lock.packages)) {
45
- if (val && typeof val === 'object' && (val as any).version) {
46
- const pkgName = key.replace(/^node_modules\//, '');
47
- if (pkgName && !pkgName.includes('node_modules')) {
48
- resolved.set(pkgName, String((val as any).version));
49
- }
50
- }
51
- }
52
- }
53
- // npm v1 lockfile format fallback
54
- if (lock.dependencies && typeof lock.dependencies === 'object') {
55
- for (const [name, val] of Object.entries(lock.dependencies)) {
56
- if (val && typeof val === 'object' && (val as any).version) {
57
- resolved.set(name, String((val as any).version));
58
- }
59
- }
60
- }
61
- } catch {
62
- // Malformed lockfile
63
- }
64
- return resolved;
65
- }
66
-
67
- resolveVersions(
68
- deps: ProjectDependency[],
69
- pkgDir: string,
70
- lockfileCache: Map<string, Map<string, string>>
71
- ): void {
72
- const lockMap =
73
- lockfileCache.get('package-lock.json') ||
74
- lockfileCache.get(join(pkgDir, 'package-lock.json'));
75
-
76
- if (lockMap) {
77
- for (const dep of deps) {
78
- const resolved = lockMap.get(dep.name);
79
- if (resolved) dep.resolvedVersion = resolved;
80
- }
81
- }
82
- }
83
- }
@@ -1,40 +0,0 @@
1
- import type { ProjectDependency } from '../../../shared/src/index.ts';
2
- import type { EcosystemStrategy } from './types.ts';
3
-
4
- export class PubStrategy implements EcosystemStrategy {
5
- readonly ecosystem = 'pub';
6
- readonly manifestNames = ['pubspec.yaml'];
7
-
8
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
9
- const deps: ProjectDependency[] = [];
10
- const lines = content.split('\n');
11
- let inDependencies = false;
12
-
13
- for (const line of lines) {
14
- const trimmed = line.trim();
15
- if (trimmed === 'dependencies:' || trimmed === 'dev_dependencies:') {
16
- inDependencies = true;
17
- continue;
18
- }
19
- if (inDependencies && /^[a-zA-Z0-9_]+:/.test(line) && !line.startsWith(' ')) {
20
- inDependencies = false;
21
- continue;
22
- }
23
-
24
- if (inDependencies && trimmed && !trimmed.startsWith('#')) {
25
- const match = trimmed.match(/^([a-zA-Z0-9_]+)\s*:\s*(.+)$/);
26
- if (match && match[1] !== 'sdk' && match[1] !== 'flutter') {
27
- deps.push({
28
- name: match[1],
29
- ecosystem: 'pub',
30
- requestedVersion: match[2]?.trim() || '*',
31
- sourceFile: relPath,
32
- packagePath: packageDir,
33
- isDev: false,
34
- });
35
- }
36
- }
37
- }
38
- return deps;
39
- }
40
- }
@@ -1,100 +0,0 @@
1
- import type { ProjectDependency } from '../../../shared/src/index.ts';
2
- import type { EcosystemStrategy } from './types.ts';
3
-
4
- export class PyPiStrategy implements EcosystemStrategy {
5
- readonly ecosystem = 'pypi';
6
- readonly manifestNames = ['requirements.txt', 'pyproject.toml'];
7
-
8
- parseManifest(fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
9
- const lower = fileName.toLowerCase();
10
- if (lower === 'requirements.txt') {
11
- return this.parseRequirementsTxt(content, relPath, packageDir);
12
- }
13
- if (lower === 'pyproject.toml') {
14
- return this.parsePyprojectToml(content, relPath, packageDir);
15
- }
16
- return [];
17
- }
18
-
19
- private parseRequirementsTxt(content: string, relPath: string, packageDir: string): ProjectDependency[] {
20
- const deps: ProjectDependency[] = [];
21
- const lines = content.split('\n');
22
-
23
- for (const line of lines) {
24
- const trimmed = line.trim();
25
- if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('-')) continue;
26
-
27
- // Match name and version specifier (e.g. requests==2.31.0, flask>=3.0.0, numpy)
28
- const match = trimmed.match(/^([a-zA-Z0-9_.-]+)\s*([=><~^!].*)?$/);
29
- if (match) {
30
- const name = match[1];
31
- const spec = match[2]?.trim() || '*';
32
- const exactMatch = spec.match(/^==\s*([a-zA-Z0-9_.-]+)$/);
33
- deps.push({
34
- name,
35
- ecosystem: 'pypi',
36
- requestedVersion: spec,
37
- resolvedVersion: exactMatch ? exactMatch[1] : undefined,
38
- sourceFile: relPath,
39
- packagePath: packageDir,
40
- isDev: false,
41
- });
42
- }
43
- }
44
- return deps;
45
- }
46
-
47
- private parsePyprojectToml(content: string, relPath: string, packageDir: string): ProjectDependency[] {
48
- const deps: ProjectDependency[] = [];
49
- const lines = content.split('\n');
50
- let inDependencies = false;
51
-
52
- for (const line of lines) {
53
- const trimmed = line.trim();
54
- if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
55
- const sec = trimmed.slice(1, -1).trim();
56
- inDependencies =
57
- sec === 'project.dependencies' ||
58
- sec === 'tool.poetry.dependencies' ||
59
- sec === 'project.optional-dependencies';
60
- continue;
61
- }
62
-
63
- if (inDependencies && trimmed && !trimmed.startsWith('#')) {
64
- // Poetry format: name = "^1.2.3" or name = { version = "1.2.3" }
65
- const eqIdx = trimmed.indexOf('=');
66
- if (eqIdx !== -1) {
67
- const name = trimmed.slice(0, eqIdx).trim();
68
- if (name.toLowerCase() === 'python') continue;
69
- const val = trimmed.slice(eqIdx + 1).trim();
70
- let ver = '*';
71
- const vMatch = val.match(/"([^"]+)"/);
72
- if (vMatch) ver = vMatch[1];
73
- deps.push({
74
- name,
75
- ecosystem: 'pypi',
76
- requestedVersion: ver,
77
- sourceFile: relPath,
78
- packagePath: packageDir,
79
- isDev: false,
80
- });
81
- } else if (trimmed.startsWith('"') || trimmed.startsWith("'")) {
82
- // Standard PEP 621: "requests>=2.28.0",
83
- const clean = trimmed.replace(/^[",']|[",']$/g, '');
84
- const match = clean.match(/^([a-zA-Z0-9_.-]+)\s*([=><~^!].*)?$/);
85
- if (match) {
86
- deps.push({
87
- name: match[1],
88
- ecosystem: 'pypi',
89
- requestedVersion: match[2]?.trim() || '*',
90
- sourceFile: relPath,
91
- packagePath: packageDir,
92
- isDev: false,
93
- });
94
- }
95
- }
96
- }
97
- }
98
- return deps;
99
- }
100
- }
@@ -1,30 +0,0 @@
1
- import type { ProjectDependency } from '../../../shared/src/index.ts';
2
- import type { EcosystemStrategy } from './types.ts';
3
-
4
- export class RubyGemsStrategy implements EcosystemStrategy {
5
- readonly ecosystem = 'rubygems';
6
- readonly manifestNames = ['gemfile'];
7
-
8
- parseManifest(_fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[] {
9
- const deps: ProjectDependency[] = [];
10
- const lines = content.split('\n');
11
-
12
- for (const line of lines) {
13
- const trimmed = line.trim();
14
- if (trimmed.startsWith('gem ') || trimmed.startsWith("gem\t")) {
15
- const match = trimmed.match(/^gem\s+['"]([^'"]+)['"](?:\s*,\s*['"]([^'"]+)['"])?/);
16
- if (match) {
17
- deps.push({
18
- name: match[1],
19
- ecosystem: 'rubygems',
20
- requestedVersion: match[2] || '*',
21
- sourceFile: relPath,
22
- packagePath: packageDir,
23
- isDev: false,
24
- });
25
- }
26
- }
27
- }
28
- return deps;
29
- }
30
- }
@@ -1,18 +0,0 @@
1
- import type {
2
- Ecosystem,
3
- ProjectDependency,
4
- } from '../../../shared/src/index.ts';
5
-
6
- export interface EcosystemStrategy {
7
- readonly ecosystem: Ecosystem;
8
- readonly manifestNames: string[];
9
- readonly lockfileNames?: string[];
10
-
11
- parseManifest(fileName: string, content: string, relPath: string, packageDir: string): ProjectDependency[];
12
- parseLockfile?(fileName: string, content: string): Map<string, string>;
13
- resolveVersions?(
14
- deps: ProjectDependency[],
15
- pkgDir: string,
16
- lockfileCache: Map<string, Map<string, string>>
17
- ): void;
18
- }