docorbit 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/README.md +29 -15
  2. package/bin/docorbit.js +2 -2
  3. package/dist/apps/cli/src/commands/add.d.ts +7 -0
  4. package/dist/apps/cli/src/commands/add.js +35 -0
  5. package/dist/apps/cli/src/commands/api.d.ts +2 -0
  6. package/dist/apps/cli/src/commands/api.js +35 -0
  7. package/dist/apps/cli/src/commands/context.d.ts +10 -0
  8. package/dist/apps/cli/src/commands/context.js +36 -0
  9. package/dist/apps/cli/src/commands/dashboard.d.ts +8 -0
  10. package/dist/apps/cli/src/commands/dashboard.js +43 -0
  11. package/dist/apps/cli/src/commands/diff.d.ts +2 -0
  12. package/dist/apps/cli/src/commands/diff.js +29 -0
  13. package/dist/apps/cli/src/commands/evaluate.d.ts +11 -0
  14. package/dist/apps/cli/src/commands/evaluate.js +101 -0
  15. package/dist/apps/cli/src/commands/examples.d.ts +2 -0
  16. package/dist/apps/cli/src/commands/examples.js +36 -0
  17. package/dist/apps/cli/src/commands/export.d.ts +11 -0
  18. package/dist/apps/cli/src/commands/export.js +72 -0
  19. package/dist/apps/cli/src/commands/impact.d.ts +2 -0
  20. package/dist/apps/cli/src/commands/impact.js +30 -0
  21. package/dist/apps/cli/src/commands/init.d.ts +5 -0
  22. package/dist/apps/cli/src/commands/init.js +52 -0
  23. package/dist/apps/cli/src/commands/inspect.d.ts +5 -0
  24. package/dist/apps/cli/src/commands/inspect.js +24 -0
  25. package/dist/apps/cli/src/commands/mcp.d.ts +8 -0
  26. package/dist/apps/cli/src/commands/mcp.js +49 -0
  27. package/dist/apps/cli/src/commands/pitfalls.d.ts +2 -0
  28. package/dist/apps/cli/src/commands/pitfalls.js +35 -0
  29. package/dist/apps/cli/src/commands/recipes.d.ts +2 -0
  30. package/dist/apps/cli/src/commands/recipes.js +33 -0
  31. package/dist/apps/cli/src/commands/search.d.ts +11 -0
  32. package/dist/apps/cli/src/commands/search.js +36 -0
  33. package/dist/apps/cli/src/commands/update.d.ts +6 -0
  34. package/dist/apps/cli/src/commands/update.js +53 -0
  35. package/dist/apps/cli/src/commands/verify.d.ts +2 -0
  36. package/dist/apps/cli/src/commands/verify.js +44 -0
  37. package/dist/apps/cli/src/formatters/colors.d.ts +21 -0
  38. package/dist/apps/cli/src/formatters/colors.js +22 -0
  39. package/dist/apps/cli/src/formatters/inspection.d.ts +3 -0
  40. package/dist/apps/cli/src/formatters/inspection.js +88 -0
  41. package/dist/apps/cli/src/formatters/knowledge.d.ts +5 -0
  42. package/dist/apps/cli/src/formatters/knowledge.js +229 -0
  43. package/dist/apps/cli/src/formatters/retrieval.d.ts +3 -0
  44. package/dist/apps/cli/src/formatters/retrieval.js +61 -0
  45. package/{apps/cli/src/formatters/terminal.ts → dist/apps/cli/src/formatters/terminal.d.ts} +0 -1
  46. package/dist/apps/cli/src/formatters/terminal.js +5 -0
  47. package/dist/apps/cli/src/formatters/verification.d.ts +4 -0
  48. package/dist/apps/cli/src/formatters/verification.js +102 -0
  49. package/dist/apps/cli/src/index.d.ts +1 -0
  50. package/dist/apps/cli/src/index.js +376 -0
  51. package/dist/packages/core/src/dashboard/server.d.ts +33 -0
  52. package/dist/packages/core/src/dashboard/server.js +267 -0
  53. package/dist/packages/core/src/dashboard/ui.d.ts +5 -0
  54. package/{packages/core/src/dashboard/ui.ts → dist/packages/core/src/dashboard/ui.js} +2 -2
  55. package/dist/packages/core/src/implementation-service.d.ts +73 -0
  56. package/dist/packages/core/src/implementation-service.js +325 -0
  57. package/{packages/core/src/index.ts → dist/packages/core/src/index.d.ts} +0 -1
  58. package/dist/packages/core/src/index.js +6 -0
  59. package/dist/packages/core/src/inspector.d.ts +22 -0
  60. package/dist/packages/core/src/inspector.js +38 -0
  61. package/dist/packages/core/src/pipeline.d.ts +45 -0
  62. package/dist/packages/core/src/pipeline.js +246 -0
  63. package/dist/packages/crawler/src/config.d.ts +2 -0
  64. package/dist/packages/crawler/src/config.js +10 -0
  65. package/dist/packages/crawler/src/fetcher.d.ts +31 -0
  66. package/dist/packages/crawler/src/fetcher.js +139 -0
  67. package/dist/packages/crawler/src/index.js +2 -0
  68. package/dist/packages/discovery/src/index.d.ts +11 -0
  69. package/dist/packages/discovery/src/index.js +29 -0
  70. package/dist/packages/discovery/src/provider.d.ts +12 -0
  71. package/dist/packages/discovery/src/provider.js +30 -0
  72. package/dist/packages/discovery/src/providers/generic.d.ts +7 -0
  73. package/dist/packages/discovery/src/providers/generic.js +94 -0
  74. package/dist/packages/discovery/src/providers/github.d.ts +7 -0
  75. package/dist/packages/discovery/src/providers/github.js +52 -0
  76. package/dist/packages/discovery/src/providers/llms-txt.d.ts +7 -0
  77. package/dist/packages/discovery/src/providers/llms-txt.js +60 -0
  78. package/dist/packages/discovery/src/providers/markdown.d.ts +7 -0
  79. package/dist/packages/discovery/src/providers/markdown.js +38 -0
  80. package/dist/packages/discovery/src/providers/openapi.d.ts +7 -0
  81. package/dist/packages/discovery/src/providers/openapi.js +77 -0
  82. package/dist/packages/discovery/src/providers/sitemap.d.ts +7 -0
  83. package/dist/packages/discovery/src/providers/sitemap.js +53 -0
  84. package/dist/packages/discovery/src/providers/skill.d.ts +7 -0
  85. package/dist/packages/discovery/src/providers/skill.js +46 -0
  86. package/dist/packages/discovery/src/ranker.d.ts +6 -0
  87. package/dist/packages/discovery/src/ranker.js +107 -0
  88. package/dist/packages/evaluation/src/dataset.d.ts +2 -0
  89. package/dist/packages/evaluation/src/dataset.js +944 -0
  90. package/dist/packages/evaluation/src/index.js +8 -0
  91. package/dist/packages/evaluation/src/runner.d.ts +7 -0
  92. package/dist/packages/evaluation/src/runner.js +196 -0
  93. package/dist/packages/evaluation/src/strategies/context7-runner.d.ts +24 -0
  94. package/dist/packages/evaluation/src/strategies/context7-runner.js +229 -0
  95. package/dist/packages/evaluation/src/strategies/docorbit-runner.d.ts +5 -0
  96. package/dist/packages/evaluation/src/strategies/docorbit-runner.js +210 -0
  97. package/dist/packages/evaluation/src/strategies/firecrawl-runner.d.ts +24 -0
  98. package/dist/packages/evaluation/src/strategies/firecrawl-runner.js +151 -0
  99. package/dist/packages/evaluation/src/strategies/web-search-runner.d.ts +32 -0
  100. package/dist/packages/evaluation/src/strategies/web-search-runner.js +161 -0
  101. package/dist/packages/evaluation/src/types.d.ts +15 -0
  102. package/dist/packages/evaluation/src/types.js +1 -0
  103. package/dist/packages/evaluation/src/version-matcher.d.ts +11 -0
  104. package/dist/packages/evaluation/src/version-matcher.js +61 -0
  105. package/dist/packages/export/src/agents-md.d.ts +19 -0
  106. package/dist/packages/export/src/agents-md.js +170 -0
  107. package/dist/packages/export/src/claude-md.d.ts +17 -0
  108. package/dist/packages/export/src/claude-md.js +118 -0
  109. package/dist/packages/export/src/docs-map.d.ts +14 -0
  110. package/dist/packages/export/src/docs-map.js +118 -0
  111. package/dist/packages/export/src/index.js +6 -0
  112. package/dist/packages/export/src/llms-txt.d.ts +15 -0
  113. package/dist/packages/export/src/llms-txt.js +73 -0
  114. package/dist/packages/export/src/service.d.ts +23 -0
  115. package/dist/packages/export/src/service.js +210 -0
  116. package/dist/packages/export/src/skill-md.d.ts +14 -0
  117. package/dist/packages/export/src/skill-md.js +107 -0
  118. package/{packages/mcp/src/index.ts → dist/packages/mcp/src/index.d.ts} +2 -35
  119. package/dist/packages/mcp/src/index.js +6 -0
  120. package/dist/packages/mcp/src/resources/index.d.ts +12 -0
  121. package/dist/packages/mcp/src/resources/index.js +165 -0
  122. package/dist/packages/mcp/src/server.d.ts +30 -0
  123. package/dist/packages/mcp/src/server.js +243 -0
  124. package/dist/packages/mcp/src/tools/analyze-impact.d.ts +6 -0
  125. package/dist/packages/mcp/src/tools/analyze-impact.js +64 -0
  126. package/dist/packages/mcp/src/tools/check-api.d.ts +6 -0
  127. package/dist/packages/mcp/src/tools/check-api.js +74 -0
  128. package/dist/packages/mcp/src/tools/diff-docs.d.ts +6 -0
  129. package/dist/packages/mcp/src/tools/diff-docs.js +58 -0
  130. package/dist/packages/mcp/src/tools/export-context.d.ts +6 -0
  131. package/dist/packages/mcp/src/tools/export-context.js +61 -0
  132. package/dist/packages/mcp/src/tools/find-api.d.ts +6 -0
  133. package/dist/packages/mcp/src/tools/find-api.js +91 -0
  134. package/dist/packages/mcp/src/tools/find-example.d.ts +6 -0
  135. package/dist/packages/mcp/src/tools/find-example.js +92 -0
  136. package/dist/packages/mcp/src/tools/find-pitfall.d.ts +6 -0
  137. package/dist/packages/mcp/src/tools/find-pitfall.js +85 -0
  138. package/dist/packages/mcp/src/tools/find-recipe.d.ts +6 -0
  139. package/dist/packages/mcp/src/tools/find-recipe.js +89 -0
  140. package/dist/packages/mcp/src/tools/get-doc.d.ts +6 -0
  141. package/dist/packages/mcp/src/tools/get-doc.js +118 -0
  142. package/dist/packages/mcp/src/tools/get-docs-map.d.ts +6 -0
  143. package/dist/packages/mcp/src/tools/get-docs-map.js +54 -0
  144. package/dist/packages/mcp/src/tools/get-version.d.ts +6 -0
  145. package/dist/packages/mcp/src/tools/get-version.js +104 -0
  146. package/dist/packages/mcp/src/tools/implementation-context.d.ts +6 -0
  147. package/dist/packages/mcp/src/tools/implementation-context.js +102 -0
  148. package/dist/packages/mcp/src/tools/index.d.ts +19 -0
  149. package/dist/packages/mcp/src/tools/index.js +41 -0
  150. package/dist/packages/mcp/src/tools/ingest-doc.d.ts +6 -0
  151. package/dist/packages/mcp/src/tools/ingest-doc.js +264 -0
  152. package/dist/packages/mcp/src/tools/list-sources.d.ts +6 -0
  153. package/dist/packages/mcp/src/tools/list-sources.js +76 -0
  154. package/dist/packages/mcp/src/tools/search-docs.d.ts +6 -0
  155. package/dist/packages/mcp/src/tools/search-docs.js +113 -0
  156. package/dist/packages/mcp/src/tools/types.d.ts +22 -0
  157. package/dist/packages/mcp/src/tools/types.js +1 -0
  158. package/dist/packages/mcp/src/transports/http.d.ts +31 -0
  159. package/dist/packages/mcp/src/transports/http.js +215 -0
  160. package/dist/packages/mcp/src/transports/stdio.d.ts +22 -0
  161. package/dist/packages/mcp/src/transports/stdio.js +86 -0
  162. package/{packages/mcp/src/transports/types.ts → dist/packages/mcp/src/transports/types.d.ts} +2 -3
  163. package/dist/packages/mcp/src/transports/types.js +1 -0
  164. package/dist/packages/mcp/src/types.d.ts +89 -0
  165. package/dist/packages/mcp/src/types.js +7 -0
  166. package/dist/packages/normalizer/src/example-indexer.d.ts +5 -0
  167. package/dist/packages/normalizer/src/example-indexer.js +200 -0
  168. package/dist/packages/normalizer/src/html.d.ts +13 -0
  169. package/dist/packages/normalizer/src/html.js +221 -0
  170. package/{packages/normalizer/src/index.ts → dist/packages/normalizer/src/index.d.ts} +0 -1
  171. package/dist/packages/normalizer/src/index.js +7 -0
  172. package/dist/packages/normalizer/src/llms.d.ts +3 -0
  173. package/dist/packages/normalizer/src/llms.js +71 -0
  174. package/dist/packages/normalizer/src/openapi/endpoint-parser.d.ts +11 -0
  175. package/dist/packages/normalizer/src/openapi/endpoint-parser.js +357 -0
  176. package/dist/packages/normalizer/src/openapi/schema-resolver.d.ts +10 -0
  177. package/dist/packages/normalizer/src/openapi/schema-resolver.js +82 -0
  178. package/dist/packages/normalizer/src/openapi.js +2 -0
  179. package/dist/packages/normalizer/src/page.d.ts +13 -0
  180. package/dist/packages/normalizer/src/page.js +150 -0
  181. package/dist/packages/normalizer/src/pitfall-extractor.d.ts +6 -0
  182. package/dist/packages/normalizer/src/pitfall-extractor.js +153 -0
  183. package/dist/packages/normalizer/src/slicer.d.ts +30 -0
  184. package/dist/packages/normalizer/src/slicer.js +360 -0
  185. package/dist/packages/retrieval/src/engine.d.ts +17 -0
  186. package/dist/packages/retrieval/src/engine.js +93 -0
  187. package/{packages/retrieval/src/index.ts → dist/packages/retrieval/src/index.d.ts} +0 -1
  188. package/dist/packages/retrieval/src/index.js +6 -0
  189. package/dist/packages/retrieval/src/intent.d.ts +6 -0
  190. package/dist/packages/retrieval/src/intent.js +39 -0
  191. package/dist/packages/retrieval/src/packer.d.ts +2 -0
  192. package/dist/packages/retrieval/src/packer.js +108 -0
  193. package/dist/packages/retrieval/src/recipe-engine.d.ts +18 -0
  194. package/dist/packages/retrieval/src/recipe-engine.js +265 -0
  195. package/dist/packages/retrieval/src/scorer.d.ts +13 -0
  196. package/dist/packages/retrieval/src/scorer.js +110 -0
  197. package/dist/packages/retrieval/src/weights.d.ts +3 -0
  198. package/dist/packages/retrieval/src/weights.js +28 -0
  199. package/dist/packages/security/src/annotations.d.ts +10 -0
  200. package/dist/packages/security/src/annotations.js +100 -0
  201. package/dist/packages/security/src/index.js +2 -0
  202. package/dist/packages/security/src/ssrf.d.ts +17 -0
  203. package/dist/packages/security/src/ssrf.js +132 -0
  204. package/dist/packages/shared/src/errors.d.ts +22 -0
  205. package/dist/packages/shared/src/errors.js +44 -0
  206. package/dist/packages/shared/src/hashing.d.ts +3 -0
  207. package/dist/packages/shared/src/hashing.js +21 -0
  208. package/dist/packages/shared/src/index.js +3 -0
  209. package/dist/packages/shared/src/types.d.ts +715 -0
  210. package/dist/packages/shared/src/types.js +1 -0
  211. package/dist/packages/storage/src/db.d.ts +11 -0
  212. package/dist/packages/storage/src/db.js +128 -0
  213. package/dist/packages/storage/src/index.js +10 -0
  214. package/dist/packages/storage/src/interfaces.d.ts +83 -0
  215. package/dist/packages/storage/src/interfaces.js +1 -0
  216. package/dist/packages/storage/src/repositories/api-repository.d.ts +16 -0
  217. package/dist/packages/storage/src/repositories/api-repository.js +169 -0
  218. package/dist/packages/storage/src/repositories/chunk-repository.d.ts +32 -0
  219. package/dist/packages/storage/src/repositories/chunk-repository.js +250 -0
  220. package/dist/packages/storage/src/repositories/example-repository.d.ts +16 -0
  221. package/dist/packages/storage/src/repositories/example-repository.js +158 -0
  222. package/dist/packages/storage/src/repositories/page-repository.d.ts +16 -0
  223. package/dist/packages/storage/src/repositories/page-repository.js +161 -0
  224. package/dist/packages/storage/src/repositories/pitfall-repository.d.ts +15 -0
  225. package/dist/packages/storage/src/repositories/pitfall-repository.js +144 -0
  226. package/dist/packages/storage/src/repositories/source-repository.d.ts +33 -0
  227. package/dist/packages/storage/src/repositories/source-repository.js +153 -0
  228. package/dist/packages/storage/src/repository.d.ts +92 -0
  229. package/dist/packages/storage/src/repository.js +157 -0
  230. package/dist/packages/storage/src/schema.d.ts +2 -0
  231. package/{packages/storage/src/schema.ts → dist/packages/storage/src/schema.js} +0 -3
  232. package/dist/packages/storage/src/search-tokens.d.ts +6 -0
  233. package/dist/packages/storage/src/search-tokens.js +26 -0
  234. package/dist/packages/verification/src/diff-engine.d.ts +18 -0
  235. package/dist/packages/verification/src/diff-engine.js +218 -0
  236. package/dist/packages/verification/src/extractor.d.ts +29 -0
  237. package/dist/packages/verification/src/extractor.js +302 -0
  238. package/dist/packages/verification/src/impact-scanner.d.ts +9 -0
  239. package/dist/packages/verification/src/impact-scanner.js +181 -0
  240. package/dist/packages/verification/src/index.js +5 -0
  241. package/dist/packages/verification/src/services.d.ts +55 -0
  242. package/dist/packages/verification/src/services.js +189 -0
  243. package/dist/packages/verification/src/verifier.d.ts +15 -0
  244. package/dist/packages/verification/src/verifier.js +315 -0
  245. package/dist/packages/workspace/src/detector.d.ts +7 -0
  246. package/dist/packages/workspace/src/detector.js +117 -0
  247. package/dist/packages/workspace/src/ecosystems/cargo.d.ts +10 -0
  248. package/dist/packages/workspace/src/ecosystems/cargo.js +69 -0
  249. package/dist/packages/workspace/src/ecosystems/composer.d.ts +7 -0
  250. package/dist/packages/workspace/src/ecosystems/composer.js +40 -0
  251. package/dist/packages/workspace/src/ecosystems/go.d.ts +7 -0
  252. package/dist/packages/workspace/src/ecosystems/go.js +49 -0
  253. package/{packages/workspace/src/ecosystems/index.ts → dist/packages/workspace/src/ecosystems/index.d.ts} +2 -24
  254. package/dist/packages/workspace/src/ecosystems/index.js +21 -0
  255. package/dist/packages/workspace/src/ecosystems/maven.d.ts +7 -0
  256. package/dist/packages/workspace/src/ecosystems/maven.js +28 -0
  257. package/dist/packages/workspace/src/ecosystems/npm.d.ts +10 -0
  258. package/dist/packages/workspace/src/ecosystems/npm.js +73 -0
  259. package/dist/packages/workspace/src/ecosystems/pub.d.ts +7 -0
  260. package/dist/packages/workspace/src/ecosystems/pub.js +34 -0
  261. package/dist/packages/workspace/src/ecosystems/pypi.d.ts +9 -0
  262. package/dist/packages/workspace/src/ecosystems/pypi.js +94 -0
  263. package/dist/packages/workspace/src/ecosystems/rubygems.d.ts +7 -0
  264. package/dist/packages/workspace/src/ecosystems/rubygems.js +25 -0
  265. package/dist/packages/workspace/src/ecosystems/types.d.ts +9 -0
  266. package/dist/packages/workspace/src/ecosystems/types.js +1 -0
  267. package/dist/packages/workspace/src/index.js +5 -0
  268. package/dist/packages/workspace/src/lockfile.d.ts +21 -0
  269. package/dist/packages/workspace/src/lockfile.js +153 -0
  270. package/dist/packages/workspace/src/resolver.d.ts +39 -0
  271. package/dist/packages/workspace/src/resolver.js +164 -0
  272. package/dist/packages/workspace/src/semver.d.ts +33 -0
  273. package/dist/packages/workspace/src/semver.js +235 -0
  274. package/package.json +13 -9
  275. package/apps/cli/bin/docorbit.js +0 -8
  276. package/apps/cli/src/commands/add.ts +0 -44
  277. package/apps/cli/src/commands/api.ts +0 -38
  278. package/apps/cli/src/commands/context.ts +0 -47
  279. package/apps/cli/src/commands/dashboard.ts +0 -55
  280. package/apps/cli/src/commands/diff.ts +0 -30
  281. package/apps/cli/src/commands/evaluate.ts +0 -133
  282. package/apps/cli/src/commands/examples.ts +0 -39
  283. package/apps/cli/src/commands/export.ts +0 -89
  284. package/apps/cli/src/commands/impact.ts +0 -31
  285. package/apps/cli/src/commands/init.ts +0 -69
  286. package/apps/cli/src/commands/inspect.ts +0 -30
  287. package/apps/cli/src/commands/mcp.ts +0 -72
  288. package/apps/cli/src/commands/pitfalls.ts +0 -38
  289. package/apps/cli/src/commands/recipes.ts +0 -35
  290. package/apps/cli/src/commands/search.ts +0 -48
  291. package/apps/cli/src/commands/update.ts +0 -73
  292. package/apps/cli/src/commands/verify.ts +0 -48
  293. package/apps/cli/src/formatters/colors.ts +0 -23
  294. package/apps/cli/src/formatters/inspection.ts +0 -102
  295. package/apps/cli/src/formatters/knowledge.ts +0 -272
  296. package/apps/cli/src/formatters/retrieval.ts +0 -74
  297. package/apps/cli/src/formatters/verification.ts +0 -126
  298. package/apps/cli/src/index.ts +0 -409
  299. package/packages/core/src/dashboard/server.ts +0 -314
  300. package/packages/core/src/implementation-service.ts +0 -451
  301. package/packages/core/src/inspector.ts +0 -71
  302. package/packages/core/src/pipeline.ts +0 -331
  303. package/packages/crawler/src/config.ts +0 -12
  304. package/packages/crawler/src/fetcher.ts +0 -185
  305. package/packages/discovery/src/index.ts +0 -31
  306. package/packages/discovery/src/provider.ts +0 -47
  307. package/packages/discovery/src/providers/generic.ts +0 -98
  308. package/packages/discovery/src/providers/github.ts +0 -61
  309. package/packages/discovery/src/providers/llms-txt.ts +0 -73
  310. package/packages/discovery/src/providers/markdown.ts +0 -48
  311. package/packages/discovery/src/providers/openapi.ts +0 -91
  312. package/packages/discovery/src/providers/sitemap.ts +0 -62
  313. package/packages/discovery/src/providers/skill.ts +0 -54
  314. package/packages/discovery/src/ranker.ts +0 -123
  315. package/packages/evaluation/src/dataset.ts +0 -963
  316. package/packages/evaluation/src/runner.ts +0 -241
  317. package/packages/evaluation/src/strategies/context7-runner.ts +0 -269
  318. package/packages/evaluation/src/strategies/docorbit-runner.ts +0 -228
  319. package/packages/evaluation/src/strategies/firecrawl-runner.ts +0 -172
  320. package/packages/evaluation/src/strategies/web-search-runner.ts +0 -194
  321. package/packages/evaluation/src/types.ts +0 -34
  322. package/packages/evaluation/src/version-matcher.ts +0 -73
  323. package/packages/export/src/agents-md.ts +0 -200
  324. package/packages/export/src/claude-md.ts +0 -141
  325. package/packages/export/src/docs-map.ts +0 -150
  326. package/packages/export/src/llms-txt.ts +0 -96
  327. package/packages/export/src/service.ts +0 -250
  328. package/packages/export/src/skill-md.ts +0 -128
  329. package/packages/mcp/src/resources/index.ts +0 -189
  330. package/packages/mcp/src/server.ts +0 -278
  331. package/packages/mcp/src/tools/analyze-impact.ts +0 -74
  332. package/packages/mcp/src/tools/check-api.ts +0 -86
  333. package/packages/mcp/src/tools/diff-docs.ts +0 -68
  334. package/packages/mcp/src/tools/export-context.ts +0 -73
  335. package/packages/mcp/src/tools/find-api.ts +0 -99
  336. package/packages/mcp/src/tools/find-example.ts +0 -100
  337. package/packages/mcp/src/tools/find-pitfall.ts +0 -94
  338. package/packages/mcp/src/tools/find-recipe.ts +0 -98
  339. package/packages/mcp/src/tools/get-doc.ts +0 -130
  340. package/packages/mcp/src/tools/get-docs-map.ts +0 -64
  341. package/packages/mcp/src/tools/get-version.ts +0 -118
  342. package/packages/mcp/src/tools/implementation-context.ts +0 -88
  343. package/packages/mcp/src/tools/index.ts +0 -59
  344. package/packages/mcp/src/tools/list-sources.ts +0 -85
  345. package/packages/mcp/src/tools/search-docs.ts +0 -123
  346. package/packages/mcp/src/tools/types.ts +0 -28
  347. package/packages/mcp/src/transports/http.ts +0 -256
  348. package/packages/mcp/src/transports/stdio.ts +0 -105
  349. package/packages/mcp/src/types.ts +0 -102
  350. package/packages/normalizer/src/example-indexer.ts +0 -240
  351. package/packages/normalizer/src/html.ts +0 -253
  352. package/packages/normalizer/src/llms.ts +0 -83
  353. package/packages/normalizer/src/openapi/endpoint-parser.ts +0 -406
  354. package/packages/normalizer/src/openapi/schema-resolver.ts +0 -111
  355. package/packages/normalizer/src/page.ts +0 -184
  356. package/packages/normalizer/src/pitfall-extractor.ts +0 -190
  357. package/packages/normalizer/src/slicer.ts +0 -455
  358. package/packages/retrieval/src/engine.ts +0 -120
  359. package/packages/retrieval/src/intent.ts +0 -43
  360. package/packages/retrieval/src/packer.ts +0 -145
  361. package/packages/retrieval/src/recipe-engine.ts +0 -313
  362. package/packages/retrieval/src/scorer.ts +0 -139
  363. package/packages/retrieval/src/weights.ts +0 -31
  364. package/packages/security/src/annotations.ts +0 -112
  365. package/packages/security/src/ssrf.ts +0 -153
  366. package/packages/shared/src/errors.ts +0 -53
  367. package/packages/shared/src/hashing.ts +0 -23
  368. package/packages/shared/src/types.ts +0 -881
  369. package/packages/storage/src/db.ts +0 -72
  370. package/packages/storage/src/interfaces.ts +0 -115
  371. package/packages/storage/src/repositories/api-repository.ts +0 -219
  372. package/packages/storage/src/repositories/chunk-repository.ts +0 -316
  373. package/packages/storage/src/repositories/example-repository.ts +0 -206
  374. package/packages/storage/src/repositories/page-repository.ts +0 -205
  375. package/packages/storage/src/repositories/pitfall-repository.ts +0 -188
  376. package/packages/storage/src/repositories/source-repository.ts +0 -205
  377. package/packages/storage/src/repository.ts +0 -256
  378. package/packages/storage/src/search-tokens.ts +0 -28
  379. package/packages/verification/src/diff-engine.ts +0 -258
  380. package/packages/verification/src/extractor.ts +0 -339
  381. package/packages/verification/src/impact-scanner.ts +0 -203
  382. package/packages/verification/src/services.ts +0 -238
  383. package/packages/verification/src/verifier.ts +0 -375
  384. package/packages/workspace/src/detector.ts +0 -143
  385. package/packages/workspace/src/ecosystems/cargo.ts +0 -84
  386. package/packages/workspace/src/ecosystems/composer.ts +0 -42
  387. package/packages/workspace/src/ecosystems/go.ts +0 -54
  388. package/packages/workspace/src/ecosystems/maven.ts +0 -34
  389. package/packages/workspace/src/ecosystems/npm.ts +0 -83
  390. package/packages/workspace/src/ecosystems/pub.ts +0 -40
  391. package/packages/workspace/src/ecosystems/pypi.ts +0 -100
  392. package/packages/workspace/src/ecosystems/rubygems.ts +0 -30
  393. package/packages/workspace/src/ecosystems/types.ts +0 -18
  394. package/packages/workspace/src/lockfile.ts +0 -194
  395. package/packages/workspace/src/resolver.ts +0 -234
  396. package/packages/workspace/src/semver.ts +0 -259
  397. /package/{packages/crawler/src/index.ts → dist/packages/crawler/src/index.d.ts} +0 -0
  398. /package/{packages/evaluation/src/index.ts → dist/packages/evaluation/src/index.d.ts} +0 -0
  399. /package/{packages/export/src/index.ts → dist/packages/export/src/index.d.ts} +0 -0
  400. /package/{packages/normalizer/src/openapi.ts → dist/packages/normalizer/src/openapi.d.ts} +0 -0
  401. /package/{packages/security/src/index.ts → dist/packages/security/src/index.d.ts} +0 -0
  402. /package/{packages/shared/src/index.ts → dist/packages/shared/src/index.d.ts} +0 -0
  403. /package/{packages/storage/src/index.ts → dist/packages/storage/src/index.d.ts} +0 -0
  404. /package/{packages/verification/src/index.ts → dist/packages/verification/src/index.d.ts} +0 -0
  405. /package/{packages/workspace/src/index.ts → dist/packages/workspace/src/index.d.ts} +0 -0
@@ -1,73 +0,0 @@
1
- import type { BenchmarkTaskDef } from './types.ts';
2
-
3
- /**
4
- * Semantically evaluates whether retrieved documentation content matches
5
- * the target version requirements of a benchmark task.
6
- *
7
- * Rather than looking for an arbitrary literal version string (e.g. "16.12" in HTTP API docs
8
- * which only use date versions, or "2.6" in tutorial prose on GitHub main), this inspects
9
- * whether the retrieved documentation teaches the correct version-specific API signatures,
10
- * syntax, and conventions — and does not teach fatal breaking-change anti-patterns.
11
- */
12
- export function isVersionContentMatch(task: BenchmarkTaskDef, content: string): boolean {
13
- if (!content || content.trim().length === 0) return false;
14
- const lower = content.toLowerCase();
15
-
16
- switch (task.id) {
17
- case 'train_nextjs_14_route_sync':
18
- // Next.js 14: route params are synchronous. If doc teaches "await params" or "Promise<{", it's Next.js 15+!
19
- if (lower.includes('await params') || lower.includes('params: promise') || lower.includes('promise<{')) {
20
- return false;
21
- }
22
- return lower.includes('14') || lower.includes('params.id') || lower.includes('{ params }') || lower.includes('route handler');
23
-
24
- case 'eval_nextjs_15_async_params':
25
- // Next.js 15: route params are asynchronous Promises.
26
- return lower.includes('await params') || lower.includes('params: promise') || lower.includes('promise<{') || lower.includes('next.js 15');
27
-
28
- case 'train_stripe_v1_charges':
29
- // Legacy Stripe: direct charges endpoint /v1/charges
30
- if (lower.includes('payment_intents') && !lower.includes('/v1/charges') && !lower.includes('charges.create')) {
31
- return false;
32
- }
33
- return lower.includes('/v1/charges') || lower.includes('charges.create');
34
-
35
- case 'eval_stripe_payment_intents_2024':
36
- // Modern Stripe: PaymentIntents endpoint
37
- return lower.includes('payment_intents') || lower.includes('paymentintents');
38
-
39
- case 'train_pydantic_v1_validator':
40
- // Pydantic v1: uses @validator. If doc teaches @field_validator, it's Pydantic v2!
41
- if (lower.includes('field_validator')) {
42
- return false;
43
- }
44
- return lower.includes('@validator') || lower.includes('validator(');
45
-
46
- case 'eval_pydantic_v2_field_validator':
47
- // Pydantic v2: uses @field_validator
48
- return lower.includes('field_validator');
49
-
50
- case 'train_fastapi_095_sync_dep':
51
- // FastAPI 0.95 dependency injection with Depends
52
- return lower.includes('depends(') || lower.includes('depends');
53
-
54
- case 'eval_fastapi_100_lifespan':
55
- // FastAPI 0.100+: uses lifespan async context manager
56
- return lower.includes('lifespan');
57
-
58
- case 'eval_tokio_postgres_07':
59
- // tokio-postgres 0.7: connect + spawn connection task
60
- return lower.includes('connect') && (lower.includes('tokio::spawn') || lower.includes('spawn') || lower.includes('connection'));
61
-
62
- case 'eval_gin_gonic_v19':
63
- // Gin 1.9+: ShouldBindJSON
64
- return lower.includes('shouldbindjson');
65
-
66
- default: {
67
- // Fallback: check SemVer major/minor string
68
- const parts = task.targetVersion.split('.');
69
- const majorMinor = parts.slice(0, 2).join('.');
70
- return lower.includes(majorMinor) || lower.includes(`v${parts[0]}`);
71
- }
72
- }
73
- }
@@ -1,200 +0,0 @@
1
- import type {
2
- ApiEndpoint,
3
- Pitfall,
4
- Recipe,
5
- ProjectDependency,
6
- VersionResolutionResult,
7
- } from '../../shared/src/index.ts';
8
-
9
- export interface AgentsMdExportData {
10
- projectDir?: string;
11
- docVersion?: string;
12
- dependencies: Array<{
13
- dep: ProjectDependency;
14
- resolution?: VersionResolutionResult;
15
- }>;
16
- endpoints: ApiEndpoint[];
17
- pitfalls: Pitfall[];
18
- recipes: Recipe[];
19
- sources: string[];
20
- }
21
-
22
- /**
23
- * Generates an AGENTS.md document grounded strictly in indexed documentation.
24
- * Preserves exact versions, endpoint signatures, critical caveats, and provenance.
25
- * Fully deterministic output.
26
- */
27
- export function generateAgentsMd(data: AgentsMdExportData): string {
28
- const lines: string[] = [];
29
-
30
- lines.push('# AGENTS.md — Documentation & Version Intelligence Context');
31
- lines.push('');
32
- lines.push('> [!NOTE]');
33
- lines.push('> **Strict Evidence-Grounding**: All API signatures, version constraints, and pitfalls in this document');
34
- lines.push('> are extracted deterministically from indexed documentation. External documentation content is treated');
35
- lines.push('> as untrusted input (`untrusted: true`).');
36
- lines.push('');
37
-
38
- // 1. Version Matrix & Dependencies
39
- lines.push('## 1. Project Dependencies & Version Matrix');
40
- lines.push('');
41
- if (data.dependencies.length > 0) {
42
- lines.push('| Dependency | Ecosystem | Requested | Resolved / Doc Version | Match Type | Confidence |');
43
- lines.push('| :--- | :--- | :--- | :--- | :--- | :--- |');
44
-
45
- const sortedDeps = [...data.dependencies].sort((a, b) => a.dep.name.localeCompare(b.dep.name));
46
- for (const item of sortedDeps) {
47
- const dep = item.dep;
48
- const res = item.resolution;
49
- const resolved = res?.targetVersion || dep.resolvedVersion || 'unresolved';
50
- const matchType = res?.matchedBy || (res?.targetVersion ? 'resolved' : 'unresolved');
51
- const conf = res ? `${(res.confidence * 100).toFixed(0)}%` : 'N/A';
52
- lines.push(`| \`${dep.name}\` | ${dep.ecosystem} | \`${dep.requestedVersion}\` | \`${resolved}\` | \`${matchType}\` | ${conf} |`);
53
- }
54
- lines.push('');
55
- } else if (data.docVersion) {
56
- lines.push(`- **Target Documentation Version Filter**: \`${data.docVersion}\``);
57
- lines.push('');
58
- } else {
59
- lines.push('- *No local package manifests detected; using globally indexed documentation.*');
60
- lines.push('');
61
- }
62
-
63
- // 2. Core API Contracts
64
- lines.push('## 2. Core API Contracts & Signatures');
65
- lines.push('');
66
- if (data.endpoints.length > 0) {
67
- const sortedEndpoints = [...data.endpoints].sort((a, b) => {
68
- const cmp = a.path.localeCompare(b.path);
69
- return cmp !== 0 ? cmp : a.method.localeCompare(b.method);
70
- });
71
-
72
- for (const ep of sortedEndpoints) {
73
- const depBadge = ep.deprecated ? ' `[DEPRECATED]`' : '';
74
- const versionTag = ep.docVersion ? ` (version: \`${ep.docVersion}\`)` : '';
75
- lines.push(`### \`${ep.method.toUpperCase()} ${ep.path}\`${depBadge}${versionTag}`);
76
- if (ep.summary) {
77
- lines.push(`${ep.summary}`);
78
- }
79
- lines.push('');
80
-
81
- if (ep.parameters && ep.parameters.length > 0) {
82
- lines.push('**Parameters:**');
83
- const sortedParams = [...ep.parameters].sort((a, b) => a.name.localeCompare(b.name));
84
- for (const p of sortedParams) {
85
- const req = p.required ? '**required**' : 'optional';
86
- const type = p.type || 'string';
87
- const desc = p.description ? ` — ${p.description}` : '';
88
- lines.push(`- \`${p.name}\` (\`${p.in}\`, ${req}, type: \`${type}\`)${desc}`);
89
- }
90
- lines.push('');
91
- }
92
-
93
- if (ep.requestSchema) {
94
- lines.push('**Request Body Schema:**');
95
- lines.push('```json');
96
- lines.push(JSON.stringify(ep.requestSchema, null, 2));
97
- lines.push('```');
98
- lines.push('');
99
- }
100
-
101
- if (ep.responseSchema) {
102
- lines.push('**Response Schema:**');
103
- lines.push('```json');
104
- lines.push(JSON.stringify(ep.responseSchema, null, 2));
105
- lines.push('```');
106
- lines.push('');
107
- }
108
- }
109
- } else {
110
- lines.push('- *No structured API endpoints indexed for this version/scope.*');
111
- lines.push('');
112
- }
113
-
114
- // 3. Critical Pitfalls & Breaking Changes
115
- lines.push('## 3. Critical Pitfalls & Breaking Changes');
116
- lines.push('');
117
- if (data.pitfalls.length > 0) {
118
- const sortedPitfalls = [...data.pitfalls].sort((a, b) => {
119
- const severityOrder: Record<string, number> = { error: 0, warning: 1, info: 2 };
120
- const sA = severityOrder[a.severity || 'warning'] ?? 1;
121
- const sB = severityOrder[b.severity || 'warning'] ?? 1;
122
- if (sA !== sB) return sA - sB;
123
- return a.title.localeCompare(b.title);
124
- });
125
-
126
- for (const pf of sortedPitfalls) {
127
- const kindLabel = pf.kind.toUpperCase().replace('_', ' ');
128
- const versionInfo = pf.affectedVersions?.target || pf.docVersion ? ` (Version: \`${pf.affectedVersions?.target || pf.docVersion}\`)` : '';
129
- lines.push(`### [${kindLabel}] ${pf.title}${versionInfo}`);
130
- lines.push(`- **Severity**: \`${pf.severity || 'warning'}\``);
131
- lines.push(`- **Evidence**: ${pf.message}`);
132
- if (pf.mitigation) {
133
- lines.push(`- **Mitigation**: ${pf.mitigation}`);
134
- }
135
- if (pf.provenance?.sourceUrl) {
136
- lines.push(`- **Provenance**: [${pf.provenance.sourceUrl}](${pf.provenance.sourceUrl})`);
137
- }
138
- lines.push('');
139
- }
140
- } else {
141
- lines.push('- *No explicit pitfalls or warnings indexed for this version/scope.*');
142
- lines.push('');
143
- }
144
-
145
- // 4. Grounded Recipes
146
- if (data.recipes.length > 0) {
147
- lines.push('## 4. Evidence-Grounded Implementation Recipes');
148
- lines.push('');
149
- for (const r of data.recipes) {
150
- lines.push(`### Recipe: ${r.title}`);
151
- lines.push(`**Goal**: ${r.goal}`);
152
- lines.push('');
153
- if (r.prerequisites.length > 0) {
154
- lines.push('**Prerequisites:**');
155
- for (const pre of r.prerequisites) {
156
- const evidenceTag = pre.evidenceLevel === 'documented_fact' ? '`[DOCUMENTED FACT]`' : '`[INFERRED]`';
157
- lines.push(`- ${evidenceTag} ${pre.description}`);
158
- }
159
- lines.push('');
160
- }
161
-
162
- if (r.steps.length > 0) {
163
- lines.push('**Implementation Steps:**');
164
- for (const step of r.steps) {
165
- const evidenceTag = step.evidenceLevel === 'documented_fact' ? '`[DOCUMENTED FACT]`' : '`[INFERRED]`';
166
- lines.push(`${step.stepNumber}. ${evidenceTag} **${step.title}**: ${step.action}`);
167
- if (step.codeSnippet) {
168
- lines.push(' ```' + (step.codeSnippet.language || 'typescript'));
169
- lines.push(step.codeSnippet.code.trim().split('\n').map(l => ' ' + l).join('\n'));
170
- lines.push(' ```');
171
- }
172
- }
173
- lines.push('');
174
- }
175
-
176
- if (r.validationSteps.length > 0) {
177
- lines.push('**Evidence-Based Validation Steps:**');
178
- for (const val of r.validationSteps) {
179
- lines.push(`- **Verify**: ${val.assertion} (Expected: \`${val.expectedOutcome}\`)`);
180
- }
181
- lines.push('');
182
- }
183
- }
184
- }
185
-
186
- // 5. Provenance & Security Notice
187
- lines.push('## 5. Indexed Sources & Provenance');
188
- lines.push('');
189
- if (data.sources.length > 0) {
190
- const sortedSources = [...data.sources].sort();
191
- for (const src of sortedSources) {
192
- lines.push(`- Source: \`${src}\` (Status: \`indexed\`, Security: \`untrusted: true\`)`);
193
- }
194
- } else {
195
- lines.push('- *No sources indexed.*');
196
- }
197
- lines.push('');
198
-
199
- return lines.join('\n');
200
- }
@@ -1,141 +0,0 @@
1
- import type {
2
- ApiEndpoint,
3
- Pitfall,
4
- ProjectDependency,
5
- VersionResolutionResult,
6
- } from '../../shared/src/index.ts';
7
-
8
- export interface ClaudeMdExportData {
9
- projectDir?: string;
10
- docVersion?: string;
11
- dependencies: Array<{
12
- dep: ProjectDependency;
13
- resolution?: VersionResolutionResult;
14
- }>;
15
- endpoints: ApiEndpoint[];
16
- pitfalls: Pitfall[];
17
- sources: string[];
18
- }
19
-
20
- /**
21
- * Generates a CLAUDE.md developer and agent guide tailored for Claude Code.
22
- * Extracts deterministic rules, caveats, verification CLI commands, and API signatures.
23
- */
24
- export function generateClaudeMd(data: ClaudeMdExportData): string {
25
- const lines: string[] = [];
26
-
27
- lines.push('# CLAUDE.md — Agent Working Rules & Documentation Contracts');
28
- lines.push('');
29
- lines.push('> [!IMPORTANT]');
30
- lines.push('> **Version-Grounded Rules**: This codebase uses DocOrbit for deterministic documentation intelligence.');
31
- lines.push('> Never hallucinate or assume unpinned library versions. All rules and caveats below are extracted');
32
- lines.push('> from authoritative indexed documentation (`untrusted: true`).');
33
- lines.push('');
34
-
35
- // 1. Architecture & Tech Stack
36
- lines.push('## 1. Project Architecture & Dependencies');
37
- lines.push('');
38
- if (data.dependencies.length > 0) {
39
- const sortedDeps = [...data.dependencies].sort((a, b) => a.dep.name.localeCompare(b.dep.name));
40
- for (const item of sortedDeps) {
41
- const dep = item.dep;
42
- const res = item.resolution;
43
- const ver = res?.targetVersion || dep.resolvedVersion || dep.requestedVersion;
44
- const confidence = res ? ` (doc match confidence: ${(res.confidence * 100).toFixed(0)}%)` : '';
45
- lines.push(`- **${dep.name}**: \`${ver}\` [${dep.ecosystem}]${confidence}`);
46
- }
47
- lines.push('');
48
- } else if (data.docVersion) {
49
- lines.push(`- Pinned Documentation Scope: \`${data.docVersion}\``);
50
- lines.push('');
51
- } else {
52
- lines.push('- *No project manifests detected; relying on indexed documentation.*');
53
- lines.push('');
54
- }
55
-
56
- // 2. Deterministic Verification Commands
57
- lines.push('## 2. DocOrbit Verification Commands');
58
- lines.push('');
59
- lines.push('Run these commands before committing generated code:');
60
- lines.push('```bash');
61
- lines.push('# Verify generated code snippet or file against indexed schemas');
62
- lines.push('docorbit verify "<code-or-file-path>"');
63
- lines.push('');
64
- lines.push('# Check documentation diff across versions (e.g. v14 to v15)');
65
- lines.push('docorbit diff --from v14 --to v15');
66
- lines.push('');
67
- lines.push('# Scan project repository for code impacted by API breaking changes');
68
- lines.push('docorbit impact --from v14 --to v15 --project .');
69
- lines.push('```');
70
- lines.push('');
71
-
72
- // 3. Hard Rules & Caveats (From Pitfalls)
73
- lines.push('## 3. Hard Rules & Caveats');
74
- lines.push('');
75
- if (data.pitfalls.length > 0) {
76
- const sortedPitfalls = [...data.pitfalls].sort((a, b) => {
77
- const severityOrder: Record<string, number> = { error: 0, warning: 1, info: 2 };
78
- const sA = severityOrder[a.severity || 'warning'] ?? 1;
79
- const sB = severityOrder[b.severity || 'warning'] ?? 1;
80
- if (sA !== sB) return sA - sB;
81
- return a.title.localeCompare(b.title);
82
- });
83
-
84
- for (const pf of sortedPitfalls) {
85
- const prefix = pf.kind === 'removed' || pf.kind === 'breaking_change' || pf.severity === 'error' ? 'NEVER' : 'ALWAYS';
86
- const versionNote = pf.affectedVersions?.target || pf.docVersion ? ` (Version: \`${pf.affectedVersions?.target || pf.docVersion}\`)` : '';
87
- lines.push(`- **${prefix}**: ${pf.title}${versionNote}`);
88
- lines.push(` - Caveat: ${pf.message}`);
89
- if (pf.mitigation) {
90
- lines.push(` - Fix: ${pf.mitigation}`);
91
- }
92
- }
93
- lines.push('');
94
- } else {
95
- lines.push('- *No explicit warnings or pitfalls recorded.*');
96
- lines.push('');
97
- }
98
-
99
- // 4. Verified API Endpoints
100
- lines.push('## 4. Key API Signatures');
101
- lines.push('');
102
- if (data.endpoints.length > 0) {
103
- const sortedEndpoints = [...data.endpoints].sort((a, b) => {
104
- const cmp = a.path.localeCompare(b.path);
105
- return cmp !== 0 ? cmp : a.method.localeCompare(b.method);
106
- });
107
-
108
- for (const ep of sortedEndpoints) {
109
- const req = ep.parameters?.filter(p => p.required).map(p => p.name).join(', ') || 'none';
110
- const opt = ep.parameters?.filter(p => !p.required).map(p => p.name).join(', ') || 'none';
111
- const depNotice = ep.deprecated ? ' *(deprecated)*' : '';
112
- lines.push(`- \`${ep.method.toUpperCase()} ${ep.path}\`${depNotice}:`);
113
- if (ep.summary) {
114
- lines.push(` - Summary: ${ep.summary}`);
115
- }
116
- lines.push(` - Required parameters: \`${req}\``);
117
- if (opt !== 'none') {
118
- lines.push(` - Optional parameters: \`${opt}\``);
119
- }
120
- }
121
- lines.push('');
122
- } else {
123
- lines.push('- *No indexed endpoints.*');
124
- lines.push('');
125
- }
126
-
127
- // 5. Security & Provenance
128
- lines.push('## 5. Provenance Notice');
129
- lines.push('');
130
- lines.push('All external documentation indexed by DocOrbit is treated as untrusted third-party input.');
131
- if (data.sources.length > 0) {
132
- const sortedSources = [...data.sources].sort();
133
- lines.push('Sources:');
134
- for (const s of sortedSources) {
135
- lines.push(`- \`${s}\``);
136
- }
137
- }
138
- lines.push('');
139
-
140
- return lines.join('\n');
141
- }
@@ -1,150 +0,0 @@
1
- import type {
2
- NormalizedPage,
3
- DocumentChunk,
4
- ApiEndpoint,
5
- Pitfall,
6
- DiscoveredSource,
7
- DocumentationMapNode,
8
- DocumentationMapResult,
9
- } from '../../shared/src/index.ts';
10
-
11
- export interface DocsMapInputData {
12
- sources: DiscoveredSource[];
13
- pages: NormalizedPage[];
14
- chunks?: DocumentChunk[];
15
- endpoints?: ApiEndpoint[];
16
- pitfalls?: Pitfall[];
17
- docVersion?: string;
18
- }
19
-
20
- /**
21
- * Builds a comprehensive, hierarchical documentation map with token estimates and provenance.
22
- * Fully deterministic.
23
- */
24
- export function buildDocumentationMap(data: DocsMapInputData): DocumentationMapResult {
25
- const pages = [...data.pages];
26
- const sources = [...data.sources];
27
- const endpoints = data.endpoints || [];
28
- const pitfalls = data.pitfalls || [];
29
- const chunks = data.chunks || [];
30
-
31
- // Group chunks by pageId
32
- const chunkCountByPage = new Map<string, number>();
33
- const tokenEstimateByPage = new Map<string, number>();
34
-
35
- for (const chunk of chunks) {
36
- chunkCountByPage.set(chunk.pageId, (chunkCountByPage.get(chunk.pageId) || 0) + 1);
37
- const tokens = chunk.tokenEstimate || 0;
38
- tokenEstimateByPage.set(chunk.pageId, (tokenEstimateByPage.get(chunk.pageId) || 0) + tokens);
39
- }
40
-
41
- // Group endpoints by pageId
42
- const apisByPage = new Map<string, string[]>();
43
- for (const ep of endpoints) {
44
- if (!apisByPage.has(ep.pageId)) {
45
- apisByPage.set(ep.pageId, []);
46
- }
47
- apisByPage.get(ep.pageId)!.push(`${ep.method.toUpperCase()} ${ep.path}`);
48
- }
49
-
50
- // Group pitfalls by pageId
51
- const pitfallsByPage = new Map<string, number>();
52
- for (const pf of pitfalls) {
53
- pitfallsByPage.set(pf.pageId, (pitfallsByPage.get(pf.pageId) || 0) + 1);
54
- }
55
-
56
- // Build page nodes
57
- const sortedPages = pages.sort((a, b) => a.url.localeCompare(b.url));
58
- const pageNodes: DocumentationMapNode[] = sortedPages.map(p => {
59
- const chunkCount = chunkCountByPage.get(p.id) || (p.headings ? Math.max(1, p.headings.length) : 1);
60
- const estimatedTokens = tokenEstimateByPage.get(p.id) || p.estimatedTokens || 150;
61
- const pageApis = apisByPage.get(p.id) || [];
62
- const pagePitfalls = pitfallsByPage.get(p.id) || 0;
63
-
64
- return {
65
- id: p.id,
66
- title: p.title || p.url,
67
- url: p.url,
68
- version: p.provenance?.versionTag || data.docVersion,
69
- sourceId: p.sourceId,
70
- chunkCount,
71
- estimatedTokens,
72
- headings: (p.headings || []).map(h => typeof h === 'string' ? h : (h as any).text || ''),
73
- apis: pageApis.length > 0 ? pageApis : undefined,
74
- pitfallCount: pagePitfalls > 0 ? pagePitfalls : undefined,
75
- untrusted: true,
76
- };
77
- });
78
-
79
- const totalPages = pageNodes.length;
80
- const totalChunks = pageNodes.reduce((acc, p) => acc + p.chunkCount, 0);
81
- const totalEstimatedTokens = pageNodes.reduce((acc, p) => acc + p.estimatedTokens, 0);
82
-
83
- // Group by source
84
- const sourceSummaries = sources.map(s => {
85
- const sourcePages = pageNodes.filter(p => p.sourceId === s.id);
86
- return {
87
- id: s.id,
88
- url: s.url,
89
- pageCount: sourcePages.length,
90
- chunkCount: sourcePages.reduce((acc, p) => acc + p.chunkCount, 0),
91
- };
92
- });
93
-
94
- // Generate Markdown representation
95
- const lines: string[] = [];
96
- lines.push('# Documentation Map & Token Footprint');
97
- lines.push('');
98
- lines.push(`- **Total Indexed Sources**: ${sources.length}`);
99
- lines.push(`- **Total Pages**: ${totalPages}`);
100
- lines.push(`- **Total Chunks**: ${totalChunks}`);
101
- lines.push(`- **Total Estimated Tokens**: ~${totalEstimatedTokens.toLocaleString()}`);
102
- lines.push('- **Security Boundary**: `untrusted: true`');
103
- lines.push('');
104
-
105
- lines.push('## Documentation Tree');
106
- lines.push('');
107
-
108
- for (const s of sources) {
109
- lines.push(`### Source: \`${s.url}\``);
110
- const sourcePages = pageNodes.filter(p => p.sourceId === s.id);
111
- if (sourcePages.length === 0) {
112
- lines.push(' - *(No pages indexed under this source)*');
113
- } else {
114
- for (const p of sourcePages) {
115
- const tokenBadge = `~${p.estimatedTokens} tokens`;
116
- const chunkBadge = `${p.chunkCount} chunks`;
117
- const verBadge = p.version ? ` [version: ${p.version}]` : '';
118
- lines.push(` - **[${p.title}](${p.url})** (${chunkBadge}, ${tokenBadge})${verBadge}`);
119
-
120
- if (p.headings && p.headings.length > 0) {
121
- for (const h of p.headings.slice(0, 5)) {
122
- lines.push(` - section: ${h}`);
123
- }
124
- if (p.headings.length > 5) {
125
- lines.push(` - ... and ${p.headings.length - 5} more sections`);
126
- }
127
- }
128
-
129
- if (p.apis && p.apis.length > 0) {
130
- lines.push(` - *APIs: ${p.apis.join(', ')}*`);
131
- }
132
- if (p.pitfallCount) {
133
- lines.push(` - *Warnings/Pitfalls: ${p.pitfallCount} recorded*`);
134
- }
135
- }
136
- }
137
- lines.push('');
138
- }
139
-
140
- return {
141
- totalSources: sources.length,
142
- totalPages,
143
- totalChunks,
144
- totalEstimatedTokens,
145
- sources: sourceSummaries,
146
- pages: pageNodes,
147
- markdownTree: lines.join('\n'),
148
- untrusted: true,
149
- };
150
- }
@@ -1,96 +0,0 @@
1
- import type {
2
- NormalizedPage,
3
- ApiEndpoint,
4
- Pitfall,
5
- } from '../../shared/src/index.ts';
6
-
7
- export interface LlmsTxtExportData {
8
- title?: string;
9
- summary?: string;
10
- docVersion?: string;
11
- pages: NormalizedPage[];
12
- endpoints: ApiEndpoint[];
13
- pitfalls: Pitfall[];
14
- full?: boolean;
15
- }
16
-
17
- /**
18
- * Generates an llms.txt (or llms-full.txt) document according to the llms.txt specification.
19
- * Fully deterministic output.
20
- */
21
- export function generateLlmsTxt(data: LlmsTxtExportData): string {
22
- const lines: string[] = [];
23
- const title = data.title || 'Documentation Index';
24
- const summary = data.summary || 'Curated machine-readable documentation index generated by DocOrbit.';
25
-
26
- lines.push(`# ${title}`);
27
- lines.push('');
28
- lines.push(`> ${summary}`);
29
- lines.push('');
30
-
31
- if (data.docVersion) {
32
- lines.push(`Documentation Version: \`${data.docVersion}\``);
33
- lines.push('');
34
- }
35
-
36
- // 1. Pages / Core Docs
37
- lines.push('## Documentation Pages');
38
- lines.push('');
39
- if (data.pages.length > 0) {
40
- const sortedPages = [...data.pages].sort((a, b) => a.url.localeCompare(b.url));
41
- for (const page of sortedPages) {
42
- const pageTitle = page.title || page.url;
43
- const tokens = page.estimatedTokens ? ` (~${page.estimatedTokens} tokens)` : '';
44
- lines.push(`- [${pageTitle}](${page.url})${tokens}`);
45
- }
46
- lines.push('');
47
- } else {
48
- lines.push('- *No documentation pages indexed.*');
49
- lines.push('');
50
- }
51
-
52
- // 2. API Reference
53
- if (data.endpoints.length > 0) {
54
- lines.push('## API Reference');
55
- lines.push('');
56
- const sortedEndpoints = [...data.endpoints].sort((a, b) => {
57
- const cmp = a.path.localeCompare(b.path);
58
- return cmp !== 0 ? cmp : a.method.localeCompare(b.method);
59
- });
60
-
61
- for (const ep of sortedEndpoints) {
62
- const desc = ep.summary ? `: ${ep.summary}` : '';
63
- const provUrl = ep.provenance?.sourceUrl || `#`;
64
- lines.push(`- [${ep.method.toUpperCase()} ${ep.path}](${provUrl})${desc}`);
65
- }
66
- lines.push('');
67
- }
68
-
69
- // 3. Pitfalls & Warnings
70
- if (data.pitfalls.length > 0) {
71
- lines.push('## Critical Caveats & Warnings');
72
- lines.push('');
73
- const sortedPitfalls = [...data.pitfalls].sort((a, b) => a.title.localeCompare(b.title));
74
- for (const pf of sortedPitfalls) {
75
- const provUrl = pf.provenance?.sourceUrl || `#`;
76
- lines.push(`- [${pf.title}](${provUrl}): ${pf.message}`);
77
- }
78
- lines.push('');
79
- }
80
-
81
- // If full mode requested, append full page text
82
- if (data.full) {
83
- lines.push('---');
84
- lines.push('## Full Documentation Content');
85
- lines.push('');
86
- const sortedPages = [...data.pages].sort((a, b) => a.url.localeCompare(b.url));
87
- for (const page of sortedPages) {
88
- lines.push(`### [${page.title || page.url}](${page.url})`);
89
- lines.push('');
90
- lines.push(page.content.trim());
91
- lines.push('');
92
- }
93
- }
94
-
95
- return lines.join('\n');
96
- }