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,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
+ }
@@ -0,0 +1,82 @@
1
+ export class ImplementationContextTool {
2
+ definition = {
3
+ name: 'get_implementation_context',
4
+ description: 'High-level documentation intelligence orchestrator. Automatically resolves workspace dependencies and versions, detects task intent, retrieves relevant chunks, APIs, verified examples, and pitfalls, and compiles an evidence-grounded recipe within a strict token budget.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ task: {
9
+ type: 'string',
10
+ description: 'The specific coding task or feature to implement (e.g. "Implement Stripe webhook signature verification in Express").',
11
+ },
12
+ project: {
13
+ type: 'string',
14
+ description: 'Path to repository workspace root for project-aware dependency detection (default: current directory).',
15
+ },
16
+ library: {
17
+ type: 'string',
18
+ description: 'Optional primary library or package to focus documentation on (e.g. "stripe", "next").',
19
+ },
20
+ version: {
21
+ type: 'string',
22
+ description: 'Optional explicit target documentation version (e.g. "v14", "15.0").',
23
+ },
24
+ tokenBudget: {
25
+ type: 'number',
26
+ description: 'Maximum token budget for packed context (default: 4000).',
27
+ },
28
+ },
29
+ required: ['task'],
30
+ },
31
+ };
32
+ async execute(args, ctx) {
33
+ const task = typeof args.task === 'string' ? args.task.trim() : '';
34
+ if (!task) {
35
+ return {
36
+ isError: true,
37
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Missing required parameter: task' }) }],
38
+ };
39
+ }
40
+ const projectPath = typeof args.project === 'string'
41
+ ? args.project
42
+ : (ctx.workspaceRoot || '.');
43
+ const library = typeof args.library === 'string' ? args.library : undefined;
44
+ const version = typeof args.version === 'string' ? args.version : undefined;
45
+ const tokenBudget = typeof args.tokenBudget === 'number' && args.tokenBudget > 0
46
+ ? args.tokenBudget
47
+ : 4000;
48
+ try {
49
+ const result = await ctx.implService.getContext({
50
+ task,
51
+ projectPath,
52
+ library,
53
+ version,
54
+ tokenBudget,
55
+ });
56
+ return {
57
+ content: [
58
+ {
59
+ type: 'text',
60
+ text: JSON.stringify({
61
+ markdown: result.markdown,
62
+ data: result,
63
+ }, null, 2),
64
+ },
65
+ ],
66
+ };
67
+ }
68
+ catch (err) {
69
+ return {
70
+ isError: true,
71
+ content: [
72
+ {
73
+ type: 'text',
74
+ text: JSON.stringify({
75
+ error: `Failed to compile implementation context: ${err instanceof Error ? err.message : String(err)}`,
76
+ }),
77
+ },
78
+ ],
79
+ };
80
+ }
81
+ }
82
+ }