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
@@ -0,0 +1,92 @@
1
+ export class FindExampleTool {
2
+ definition = {
3
+ name: 'find_example',
4
+ description: 'Find verified, framework-specific code examples by task, language, framework, or target API.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ query: {
9
+ type: 'string',
10
+ description: 'Implementation task or symbol to look for examples of (e.g. "verify webhook signature", "constructEvent").',
11
+ },
12
+ language: {
13
+ type: 'string',
14
+ description: 'Programming language filter (e.g. "typescript", "python", "go").',
15
+ },
16
+ framework: {
17
+ type: 'string',
18
+ description: 'Framework filter (e.g. "express", "fastapi", "next").',
19
+ },
20
+ version: {
21
+ type: 'string',
22
+ description: 'Target documentation version filter.',
23
+ },
24
+ limit: {
25
+ type: 'number',
26
+ description: 'Maximum number of examples to return (default: 5).',
27
+ },
28
+ },
29
+ required: ['query'],
30
+ },
31
+ };
32
+ async execute(args, ctx) {
33
+ const query = typeof args.query === 'string'
34
+ ? args.query.trim()
35
+ : (typeof args.task === 'string' ? args.task.trim() : '');
36
+ if (!query) {
37
+ return {
38
+ isError: true,
39
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Missing required parameter: query (or task)' }) }],
40
+ };
41
+ }
42
+ const language = typeof args.language === 'string' ? args.language : undefined;
43
+ const framework = typeof args.framework === 'string' ? args.framework : undefined;
44
+ const version = typeof args.docVersion === 'string'
45
+ ? args.docVersion
46
+ : (typeof args.version === 'string' ? args.version : undefined);
47
+ const limit = typeof args.limit === 'number' && args.limit > 0 ? args.limit : 5;
48
+ const examples = ctx.repo.searchIndexedExamples(query, {
49
+ language,
50
+ framework,
51
+ docVersion: version,
52
+ limit,
53
+ });
54
+ if (examples.length === 0) {
55
+ return {
56
+ content: [
57
+ {
58
+ type: 'text',
59
+ text: JSON.stringify({
60
+ markdown: `### Code Examples for "${query}"\n\nNo verified code examples found.`,
61
+ data: { query, count: 0, examples: [] },
62
+ }, null, 2),
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ const lines = [`### Verified Code Examples for "${query}" (${examples.length} found)\n`];
68
+ for (const ex of examples) {
69
+ lines.push(`#### ${ex.task} [${ex.language}${ex.framework ? ` / ${ex.framework}` : ''}] (${ex.sourceAuthority})`);
70
+ if (ex.relatedApi)
71
+ lines.push(`*Target API*: \`${ex.relatedApi}\``);
72
+ lines.push('```' + ex.language);
73
+ lines.push(ex.code);
74
+ lines.push('```\n');
75
+ }
76
+ return {
77
+ content: [
78
+ {
79
+ type: 'text',
80
+ text: JSON.stringify({
81
+ markdown: lines.join('\n'),
82
+ data: {
83
+ query,
84
+ count: examples.length,
85
+ examples,
86
+ },
87
+ }, null, 2),
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ }
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult, McpTool } from '../types.ts';
2
+ import type { McpContext, McpToolHandler } from './types.ts';
3
+ export declare class FindPitfallTool implements McpToolHandler {
4
+ readonly definition: McpTool;
5
+ execute(args: Record<string, unknown>, ctx: McpContext): Promise<CallToolResult>;
6
+ }
@@ -0,0 +1,85 @@
1
+ export class FindPitfallTool {
2
+ definition = {
3
+ name: 'find_pitfall',
4
+ description: 'Search documented pitfalls, gotchas, deprecations, breaking changes, and runtime restrictions.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ query: {
9
+ type: 'string',
10
+ description: 'Topic, feature, or symbol to inspect for pitfalls (e.g. "webhook raw body", "route params").',
11
+ },
12
+ kind: {
13
+ type: 'string',
14
+ description: 'Category filter for pitfalls.',
15
+ enum: ['deprecated', 'removed', 'breaking_change', 'gotcha', 'security', 'runtime_restriction', 'server_only', 'rate_limit'],
16
+ },
17
+ version: {
18
+ type: 'string',
19
+ description: 'Target documentation version filter.',
20
+ },
21
+ limit: {
22
+ type: 'number',
23
+ description: 'Maximum number of pitfalls to return (default: 5).',
24
+ },
25
+ },
26
+ required: ['query'],
27
+ },
28
+ };
29
+ async execute(args, ctx) {
30
+ const query = typeof args.query === 'string'
31
+ ? args.query.trim()
32
+ : (typeof args.task === 'string' ? args.task.trim() : '');
33
+ if (!query) {
34
+ return {
35
+ isError: true,
36
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Missing required parameter: query (or task)' }) }],
37
+ };
38
+ }
39
+ const kind = typeof args.kind === 'string' ? args.kind : undefined;
40
+ const version = typeof args.docVersion === 'string'
41
+ ? args.docVersion
42
+ : (typeof args.version === 'string' ? args.version : undefined);
43
+ const limit = typeof args.limit === 'number' && args.limit > 0 ? args.limit : 5;
44
+ const pitfalls = ctx.repo.searchPitfalls(query, {
45
+ kind,
46
+ docVersion: version,
47
+ limit,
48
+ });
49
+ if (pitfalls.length === 0) {
50
+ return {
51
+ content: [
52
+ {
53
+ type: 'text',
54
+ text: JSON.stringify({
55
+ markdown: `### Pitfalls & Warnings for "${query}"\n\nNo matching pitfalls or warnings found.`,
56
+ data: { query, count: 0, pitfalls: [] },
57
+ }, null, 2),
58
+ },
59
+ ],
60
+ };
61
+ }
62
+ const lines = [`### Pitfalls & Warnings for "${query}" (${pitfalls.length} found)\n`];
63
+ for (const pf of pitfalls) {
64
+ lines.push(`- ⚠️ **[${pf.kind.toUpperCase()}] ${pf.title}**${pf.docVersion ? ` (${pf.docVersion})` : ''}`);
65
+ if (pf.relatedApi)
66
+ lines.push(` *Related API*: \`${pf.relatedApi}\``);
67
+ lines.push(` ${pf.content}\n`);
68
+ }
69
+ return {
70
+ content: [
71
+ {
72
+ type: 'text',
73
+ text: JSON.stringify({
74
+ markdown: lines.join('\n'),
75
+ data: {
76
+ query,
77
+ count: pitfalls.length,
78
+ pitfalls,
79
+ },
80
+ }, null, 2),
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ }
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult, McpTool } from '../types.ts';
2
+ import type { McpContext, McpToolHandler } from './types.ts';
3
+ export declare class FindRecipeTool implements McpToolHandler {
4
+ readonly definition: McpTool;
5
+ execute(args: Record<string, unknown>, ctx: McpContext): Promise<CallToolResult>;
6
+ }
@@ -0,0 +1,89 @@
1
+ import { RecipeEngine } from "../../../retrieval/src/index.js";
2
+ export class FindRecipeTool {
3
+ definition = {
4
+ name: 'find_recipe',
5
+ description: 'Assemble an evidence-grounded implementation recipe with explicit prerequisites, ordered steps, and validation steps.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ goal: {
10
+ type: 'string',
11
+ description: 'The implementation goal or workflow to construct a recipe for.',
12
+ },
13
+ version: {
14
+ type: 'string',
15
+ description: 'Target documentation version.',
16
+ },
17
+ projectPath: {
18
+ type: 'string',
19
+ description: 'Workspace root for project-aware dependency detection.',
20
+ },
21
+ },
22
+ required: ['goal'],
23
+ },
24
+ };
25
+ async execute(args, ctx) {
26
+ const goal = typeof args.goal === 'string'
27
+ ? args.goal.trim()
28
+ : (typeof args.task === 'string' ? args.task.trim() : (typeof args.query === 'string' ? args.query.trim() : ''));
29
+ if (!goal) {
30
+ return {
31
+ isError: true,
32
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Missing required parameter: goal (or task)' }) }],
33
+ };
34
+ }
35
+ const version = typeof args.docVersion === 'string'
36
+ ? args.docVersion
37
+ : (typeof args.version === 'string' ? args.version : undefined);
38
+ const projectPath = typeof args.projectPath === 'string'
39
+ ? args.projectPath
40
+ : (typeof args.project === 'string' ? args.project : ctx.workspaceRoot);
41
+ const engine = new RecipeEngine(ctx.repo);
42
+ const recipe = await engine.assembleRecipe(goal, {
43
+ docVersion: version,
44
+ projectDir: projectPath,
45
+ });
46
+ const lines = [
47
+ `### Implementation Recipe: ${recipe.goal}`,
48
+ `**Confidence**: ${Math.round(recipe.confidence * 100)}%${recipe.docVersion ? ` | **Version**: \`${recipe.docVersion}\`` : ''}\n`,
49
+ ];
50
+ if (recipe.prerequisites.length > 0) {
51
+ lines.push('#### Prerequisites');
52
+ for (const p of recipe.prerequisites) {
53
+ lines.push(`- [${p.evidenceLevel === 'documented_fact' ? 'FACT' : 'INFERRED'}] ${p.text}`);
54
+ }
55
+ lines.push('');
56
+ }
57
+ if (recipe.orderedSteps.length > 0) {
58
+ lines.push('#### Implementation Steps');
59
+ for (const s of recipe.orderedSteps) {
60
+ const badge = s.evidenceLevel === 'documented_fact' ? 'FACT' : (s.evidenceLevel === 'missing_information' ? 'MISSING' : 'INFERRED');
61
+ lines.push(`${s.step}. **[${badge}] ${s.title}**`);
62
+ if (s.apiEndpoint)
63
+ lines.push(` - Endpoint: \`${s.apiEndpoint}\``);
64
+ lines.push(` - ${s.description}`);
65
+ }
66
+ lines.push('');
67
+ }
68
+ if (recipe.validationSteps.length > 0) {
69
+ lines.push('#### Validation Steps');
70
+ for (const vs of recipe.validationSteps) {
71
+ lines.push(`${vs.step}. **[FACT]** ${vs.description}`);
72
+ if (vs.expectedResponse)
73
+ lines.push(` - Expected: \`${vs.expectedResponse}\``);
74
+ }
75
+ lines.push('');
76
+ }
77
+ return {
78
+ content: [
79
+ {
80
+ type: 'text',
81
+ text: JSON.stringify({
82
+ markdown: lines.join('\n'),
83
+ data: recipe,
84
+ }, null, 2),
85
+ },
86
+ ],
87
+ };
88
+ }
89
+ }
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult, McpTool } from '../types.ts';
2
+ import type { McpContext, McpToolHandler } from './types.ts';
3
+ export declare class GetDocTool implements McpToolHandler {
4
+ readonly definition: McpTool;
5
+ execute(args: Record<string, unknown>, ctx: McpContext): Promise<CallToolResult>;
6
+ }
@@ -0,0 +1,118 @@
1
+ export class GetDocTool {
2
+ definition = {
3
+ name: 'get_doc',
4
+ description: 'Retrieve a specific documentation page or contextual chunk by ID or URL with complete metadata and security annotations.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ chunkId: {
9
+ type: 'string',
10
+ description: 'Unique chunk identifier (e.g. "chk_...").',
11
+ },
12
+ pageId: {
13
+ type: 'string',
14
+ description: 'Unique page identifier (e.g. "page_...").',
15
+ },
16
+ url: {
17
+ type: 'string',
18
+ description: 'Normalized source URL of the documentation page.',
19
+ },
20
+ },
21
+ },
22
+ };
23
+ async execute(args, ctx) {
24
+ const chunkId = typeof args.chunkId === 'string' ? args.chunkId.trim() : undefined;
25
+ const pageId = typeof args.pageId === 'string' ? args.pageId.trim() : undefined;
26
+ const url = typeof args.url === 'string' ? args.url.trim() : undefined;
27
+ if (!chunkId && !pageId && !url) {
28
+ return {
29
+ isError: true,
30
+ content: [
31
+ {
32
+ type: 'text',
33
+ text: JSON.stringify({ error: 'Please provide at least one identifier: chunkId, pageId, or url.' }),
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ if (chunkId) {
39
+ const chunk = ctx.repo.getChunk(chunkId);
40
+ if (!chunk) {
41
+ return {
42
+ isError: true,
43
+ content: [
44
+ {
45
+ type: 'text',
46
+ text: JSON.stringify({ error: `Chunk not found: ${chunkId}`, available: false }),
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ const codeSnippets = ctx.repo.getChunkCode(chunkId);
52
+ const symbols = ctx.repo.getChunkSymbols(chunkId);
53
+ const relationships = ctx.repo.getChunkRelationships(chunkId);
54
+ const breadcrumb = chunk.sectionPath.length > 0 ? chunk.sectionPath.join(' > ') : (chunk.title || 'General');
55
+ const md = [
56
+ `### Chunk: ${breadcrumb}`,
57
+ `**ID**: \`${chunk.id}\` | **Type**: \`${chunk.chunkType}\` | **Est. Tokens**: ~${chunk.tokenEstimate}`,
58
+ chunk.docVersion ? `**Version**: \`${chunk.docVersion}\`` : '',
59
+ `> [!NOTE] External content is untrusted.\n`,
60
+ chunk.content,
61
+ ].filter(Boolean).join('\n\n');
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: JSON.stringify({
67
+ markdown: md,
68
+ data: {
69
+ chunk,
70
+ codeSnippets,
71
+ symbols,
72
+ relationships,
73
+ untrusted: true,
74
+ },
75
+ }, null, 2),
76
+ },
77
+ ],
78
+ };
79
+ }
80
+ // Page lookup by ID or URL
81
+ const page = pageId ? ctx.repo.getPage(pageId) : (url ? ctx.repo.getPageByUrl(url) : null);
82
+ if (!page) {
83
+ return {
84
+ isError: true,
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: JSON.stringify({ error: `Page not found for ${pageId ? `pageId: ${pageId}` : `url: ${url}`}`, available: false }),
89
+ },
90
+ ],
91
+ };
92
+ }
93
+ const links = ctx.repo.getPageLinks(page.id);
94
+ const md = [
95
+ `### ${page.title}`,
96
+ `**URL**: ${page.url} | **Tokens**: ~${page.estimatedTokens} | **Hash**: \`${page.contentHash.slice(0, 8)}\``,
97
+ page.securityAnnotations.length > 0
98
+ ? `> [!WARNING] Security alerts detected: ${page.securityAnnotations.map(a => a.patternName).join(', ')}`
99
+ : `> [!NOTE] External content is untrusted.`,
100
+ `\n${page.content}`,
101
+ ].join('\n\n');
102
+ return {
103
+ content: [
104
+ {
105
+ type: 'text',
106
+ text: JSON.stringify({
107
+ markdown: md,
108
+ data: {
109
+ page,
110
+ links,
111
+ untrusted: true,
112
+ },
113
+ }, null, 2),
114
+ },
115
+ ],
116
+ };
117
+ }
118
+ }
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult, McpTool } from '../types.ts';
2
+ import type { McpContext, McpToolHandler } from './types.ts';
3
+ export declare class GetDocumentationMapTool implements McpToolHandler {
4
+ readonly definition: McpTool;
5
+ execute(args: Record<string, unknown>, ctx: McpContext): Promise<CallToolResult>;
6
+ }
@@ -0,0 +1,54 @@
1
+ import { ExportService } from "../../../export/src/index.js";
2
+ export class GetDocumentationMapTool {
3
+ definition = {
4
+ name: 'get_documentation_map',
5
+ description: 'Retrieve the hierarchical documentation map, page tree, section headings, and estimated token budget footprints for indexed documentation.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ sourceId: {
10
+ type: 'string',
11
+ description: 'Optional source ID or source URL substring filter.',
12
+ },
13
+ docVersion: {
14
+ type: 'string',
15
+ description: 'Optional documentation version filter (e.g. "v14", "15.0").',
16
+ },
17
+ },
18
+ },
19
+ };
20
+ async execute(args, ctx) {
21
+ const sourceId = typeof args.sourceId === 'string' ? args.sourceId : undefined;
22
+ const docVersion = typeof args.docVersion === 'string' ? args.docVersion : undefined;
23
+ const exportService = ctx.exportService || new ExportService(ctx.repo);
24
+ const map = exportService.getDocumentationMap({ sourceId, docVersion });
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: JSON.stringify({
30
+ markdown: map.markdownTree,
31
+ data: {
32
+ totalSources: map.totalSources,
33
+ totalPages: map.totalPages,
34
+ totalChunks: map.totalChunks,
35
+ totalEstimatedTokens: map.totalEstimatedTokens,
36
+ sources: map.sources,
37
+ pages: map.pages.map(p => ({
38
+ id: p.id,
39
+ title: p.title,
40
+ url: p.url,
41
+ version: p.version,
42
+ chunkCount: p.chunkCount,
43
+ estimatedTokens: p.estimatedTokens,
44
+ apis: p.apis,
45
+ pitfallCount: p.pitfallCount,
46
+ })),
47
+ untrusted: true,
48
+ },
49
+ }, null, 2),
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ }
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult, McpTool } from '../types.ts';
2
+ import type { McpContext, McpToolHandler } from './types.ts';
3
+ export declare class GetVersionTool implements McpToolHandler {
4
+ readonly definition: McpTool;
5
+ execute(args: Record<string, unknown>, ctx: McpContext): Promise<CallToolResult>;
6
+ }
@@ -0,0 +1,104 @@
1
+ import { detectWorkspaceDependencies, WorkspaceResolver, } from "../../../workspace/src/index.js";
2
+ export class GetVersionTool {
3
+ definition = {
4
+ name: 'get_version',
5
+ description: 'Inspect workspace dependencies and resolve the exact compatible documentation version using the SemVer confidence ladder.',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ library: {
10
+ type: 'string',
11
+ description: 'Package or library name to check (e.g. "next", "stripe", "fastapi").',
12
+ },
13
+ projectPath: {
14
+ type: 'string',
15
+ description: 'Workspace root directory containing package manifests (default: current directory).',
16
+ },
17
+ },
18
+ required: ['library'],
19
+ },
20
+ };
21
+ async execute(args, ctx) {
22
+ const library = typeof args.library === 'string' ? args.library.trim() : '';
23
+ if (!library) {
24
+ return {
25
+ isError: true,
26
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Missing required parameter: library' }) }],
27
+ };
28
+ }
29
+ const projectPath = typeof args.projectPath === 'string' ? args.projectPath : (ctx.workspaceRoot || '.');
30
+ let scan;
31
+ try {
32
+ scan = detectWorkspaceDependencies(projectPath);
33
+ }
34
+ catch (err) {
35
+ return {
36
+ isError: true,
37
+ content: [
38
+ {
39
+ type: 'text',
40
+ text: JSON.stringify({ error: `Failed to inspect workspace manifests at ${projectPath}: ${err instanceof Error ? err.message : String(err)}` }),
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ const libLower = library.toLowerCase();
46
+ const matchedDep = scan.dependencies.find(d => d.name.toLowerCase() === libLower);
47
+ if (!matchedDep) {
48
+ return {
49
+ content: [
50
+ {
51
+ type: 'text',
52
+ text: JSON.stringify({
53
+ markdown: `### Version Resolution for "${library}"\n\nNo installed dependency named \`${library}\` was found in workspace manifests.`,
54
+ data: {
55
+ library,
56
+ foundInWorkspace: false,
57
+ ecosystemsScanned: scan.ecosystems,
58
+ },
59
+ }, null, 2),
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ const resolver = new WorkspaceResolver(ctx.repo);
65
+ const resolution = resolver.resolveWorkspace(scan);
66
+ const match = resolution.matches.find(m => m.dependency.name.toLowerCase() === libLower);
67
+ const data = {
68
+ library: matchedDep.name,
69
+ ecosystem: matchedDep.ecosystem,
70
+ requestedVersion: matchedDep.requestedVersion,
71
+ resolvedVersion: matchedDep.resolvedVersion,
72
+ sourceFile: matchedDep.sourceFile,
73
+ docVersionMatch: match ? {
74
+ targetVersion: match.targetVersion,
75
+ confidence: match.confidence,
76
+ snapshotId: match.snapshotId,
77
+ matchedBy: match.matchedBy,
78
+ } : {
79
+ targetVersion: 'unresolved',
80
+ confidence: 'unresolved',
81
+ },
82
+ };
83
+ const lines = [
84
+ `### Version Intelligence: \`${matchedDep.name}\``,
85
+ `- **Ecosystem**: \`${matchedDep.ecosystem}\``,
86
+ `- **Requested in Manifest**: \`${matchedDep.requestedVersion}\` (${matchedDep.sourceFile})`,
87
+ matchedDep.resolvedVersion ? `- **Resolved in Lockfile**: \`${matchedDep.resolvedVersion}\`` : '',
88
+ match?.targetVersion
89
+ ? `- **Recommended Doc Version**: \`${match.targetVersion}\` (Confidence: \`${match.confidence}\`, Matched via: \`${match.matchedBy}\`)`
90
+ : `- **Recommended Doc Version**: \`unresolved\` (No compatible indexed documentation found)`,
91
+ ].filter(Boolean);
92
+ return {
93
+ content: [
94
+ {
95
+ type: 'text',
96
+ text: JSON.stringify({
97
+ markdown: lines.join('\n'),
98
+ data,
99
+ }, null, 2),
100
+ },
101
+ ],
102
+ };
103
+ }
104
+ }
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult, McpTool } from '../types.ts';
2
+ import type { McpContext, McpToolHandler } from './types.ts';
3
+ export declare class ImplementationContextTool implements McpToolHandler {
4
+ readonly definition: McpTool;
5
+ execute(args: Record<string, unknown>, ctx: McpContext): Promise<CallToolResult>;
6
+ }