docorbit 0.1.0 → 0.1.1

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