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,267 @@
1
+ import http from 'node:http';
2
+ import { URL } from 'node:url';
3
+ import { ExportService } from "../../../export/src/index.js";
4
+ import { VerificationService, DiffService, ImpactAnalysisService, } from "../../../verification/src/index.js";
5
+ import { renderDashboardHtml } from "./ui.js";
6
+ export class DashboardServer {
7
+ repo;
8
+ projectDir;
9
+ dbPath;
10
+ exportService;
11
+ verificationService;
12
+ diffService;
13
+ impactService;
14
+ server = null;
15
+ constructor(options) {
16
+ this.repo = options.repo;
17
+ this.projectDir = options.projectDir;
18
+ this.dbPath = options.dbPath || '.docorbit/docorbit.db';
19
+ this.exportService = new ExportService(this.repo);
20
+ this.verificationService = new VerificationService(this.repo);
21
+ this.diffService = new DiffService(this.repo);
22
+ this.impactService = new ImpactAnalysisService(this.repo);
23
+ }
24
+ /**
25
+ * Starts the local dashboard HTTP server.
26
+ */
27
+ start(port = 3737, host = '127.0.0.1') {
28
+ return new Promise((resolve, reject) => {
29
+ this.server = http.createServer(async (req, res) => {
30
+ try {
31
+ await this.handleRequest(req, res);
32
+ }
33
+ catch (err) {
34
+ res.writeHead(500, { 'Content-Type': 'application/json' });
35
+ res.end(JSON.stringify({ error: err.message || 'Internal Server Error' }));
36
+ }
37
+ });
38
+ this.server.on('error', (err) => {
39
+ reject(err);
40
+ });
41
+ this.server.listen(port, host, () => {
42
+ const address = this.server.address();
43
+ const actualPort = address.port;
44
+ const url = `http://${host}:${actualPort}/`;
45
+ resolve({ server: this.server, url, port: actualPort });
46
+ });
47
+ });
48
+ }
49
+ /**
50
+ * Stops the server gracefully.
51
+ */
52
+ stop() {
53
+ return new Promise((resolve) => {
54
+ if (this.server) {
55
+ this.server.close(() => {
56
+ this.server = null;
57
+ resolve();
58
+ });
59
+ }
60
+ else {
61
+ resolve();
62
+ }
63
+ });
64
+ }
65
+ async handleRequest(req, res) {
66
+ const parsedUrl = new URL(req.url || '/', `http://${req.headers.host || '127.0.0.1'}`);
67
+ const pathname = parsedUrl.pathname;
68
+ const method = (req.method || 'GET').toUpperCase();
69
+ // CORS for local development
70
+ res.setHeader('Access-Control-Allow-Origin', '*');
71
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
72
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
73
+ if (method === 'OPTIONS') {
74
+ res.writeHead(204);
75
+ res.end();
76
+ return;
77
+ }
78
+ // Root UI
79
+ if (pathname === '/' || pathname === '/index.html') {
80
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
81
+ res.end(renderDashboardHtml());
82
+ return;
83
+ }
84
+ // JSON REST API
85
+ if (pathname.startsWith('/api/')) {
86
+ res.setHeader('Content-Type', 'application/json; charset=utf-8');
87
+ if (pathname === '/api/stats' && method === 'GET') {
88
+ const stats = this.getStats();
89
+ res.writeHead(200);
90
+ res.end(JSON.stringify(stats));
91
+ return;
92
+ }
93
+ if (pathname === '/api/sources' && method === 'GET') {
94
+ const sources = this.repo.sources.listSources();
95
+ res.writeHead(200);
96
+ res.end(JSON.stringify(sources));
97
+ return;
98
+ }
99
+ if (pathname === '/api/pages' && method === 'GET') {
100
+ const pages = this.repo.pages.listPages(200);
101
+ res.writeHead(200);
102
+ res.end(JSON.stringify(pages));
103
+ return;
104
+ }
105
+ if (pathname === '/api/apis' && method === 'GET') {
106
+ const q = parsedUrl.searchParams.get('q') || '';
107
+ const apiMethod = parsedUrl.searchParams.get('method') || undefined;
108
+ const docVersion = parsedUrl.searchParams.get('docVersion') || undefined;
109
+ const apis = this.repo.apis.searchApiEndpoints(q, {
110
+ method: apiMethod,
111
+ docVersion,
112
+ limit: 100,
113
+ });
114
+ res.writeHead(200);
115
+ res.end(JSON.stringify(apis));
116
+ return;
117
+ }
118
+ if (pathname === '/api/pitfalls' && method === 'GET') {
119
+ const q = parsedUrl.searchParams.get('q') || '';
120
+ const kind = parsedUrl.searchParams.get('kind') || undefined;
121
+ const docVersion = parsedUrl.searchParams.get('docVersion') || undefined;
122
+ const pitfalls = this.repo.pitfalls.searchPitfalls(q, {
123
+ kind,
124
+ docVersion,
125
+ limit: 100,
126
+ });
127
+ res.writeHead(200);
128
+ res.end(JSON.stringify(pitfalls));
129
+ return;
130
+ }
131
+ if (pathname === '/api/examples' && method === 'GET') {
132
+ const q = parsedUrl.searchParams.get('q') || '';
133
+ const language = parsedUrl.searchParams.get('language') || undefined;
134
+ const framework = parsedUrl.searchParams.get('framework') || undefined;
135
+ const docVersion = parsedUrl.searchParams.get('docVersion') || undefined;
136
+ const examples = this.repo.examples.searchIndexedExamples(q, {
137
+ language,
138
+ framework,
139
+ docVersion,
140
+ limit: 50,
141
+ });
142
+ res.writeHead(200);
143
+ res.end(JSON.stringify(examples));
144
+ return;
145
+ }
146
+ if (pathname === '/api/docs-map' && method === 'GET') {
147
+ const sourceId = parsedUrl.searchParams.get('sourceId') || undefined;
148
+ const docVersion = parsedUrl.searchParams.get('docVersion') || undefined;
149
+ const map = this.exportService.getDocumentationMap({ sourceId, docVersion });
150
+ res.writeHead(200);
151
+ res.end(JSON.stringify(map));
152
+ return;
153
+ }
154
+ if (pathname === '/api/export' && method === 'GET') {
155
+ const format = (parsedUrl.searchParams.get('format') || 'agents.md');
156
+ const docVersion = parsedUrl.searchParams.get('docVersion') || undefined;
157
+ const exp = await this.exportService.generateExport({
158
+ format,
159
+ docVersion,
160
+ projectDir: this.projectDir,
161
+ });
162
+ res.writeHead(200);
163
+ res.end(JSON.stringify(exp));
164
+ return;
165
+ }
166
+ if (pathname === '/api/verify' && method === 'POST') {
167
+ const body = await this.readJsonBody(req);
168
+ const code = body.code || '';
169
+ const version = body.version || body.docVersion;
170
+ const library = body.library;
171
+ const language = body.language;
172
+ const verifyResult = this.verificationService.verifyCode({
173
+ code,
174
+ version,
175
+ library,
176
+ language,
177
+ projectDir: this.projectDir,
178
+ });
179
+ res.writeHead(200);
180
+ res.end(JSON.stringify(verifyResult));
181
+ return;
182
+ }
183
+ if (pathname === '/api/diff' && method === 'GET') {
184
+ const from = parsedUrl.searchParams.get('from') || undefined;
185
+ const to = parsedUrl.searchParams.get('to') || undefined;
186
+ const source = parsedUrl.searchParams.get('source') || undefined;
187
+ const diffResult = this.diffService.diff({ from, to, source });
188
+ res.writeHead(200);
189
+ res.end(JSON.stringify(diffResult));
190
+ return;
191
+ }
192
+ if (pathname === '/api/impact' && method === 'GET') {
193
+ const from = parsedUrl.searchParams.get('from') || undefined;
194
+ const to = parsedUrl.searchParams.get('to') || undefined;
195
+ const targetDir = parsedUrl.searchParams.get('projectDir') || this.projectDir || process.cwd();
196
+ const impactResult = this.impactService.analyzeWorkspaceImpact({
197
+ from,
198
+ to,
199
+ projectDir: targetDir,
200
+ });
201
+ res.writeHead(200);
202
+ res.end(JSON.stringify(impactResult));
203
+ return;
204
+ }
205
+ res.writeHead(404);
206
+ res.end(JSON.stringify({ error: `Route not found: ${pathname}` }));
207
+ return;
208
+ }
209
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
210
+ res.end('Not Found');
211
+ }
212
+ getStats() {
213
+ const sources = this.repo.sources.listSources();
214
+ const totalPages = this.repo.pages.countPages();
215
+ const totalChunks = this.repo.chunks.countChunks();
216
+ let totalApis = 0;
217
+ let totalPitfalls = 0;
218
+ let totalExamples = 0;
219
+ const activeVersions = new Set();
220
+ try {
221
+ const raw = this.repo.db.getRawDb();
222
+ const apiRow = raw.prepare('SELECT COUNT(*) as c FROM api_endpoints').get();
223
+ totalApis = apiRow?.c || 0;
224
+ const pitRow = raw.prepare('SELECT COUNT(*) as c FROM pitfalls').get();
225
+ totalPitfalls = pitRow?.c || 0;
226
+ const exRow = raw.prepare('SELECT COUNT(*) as c FROM indexed_examples').get();
227
+ totalExamples = exRow?.c || 0;
228
+ const verRows = raw.prepare('SELECT DISTINCT doc_version FROM snapshots WHERE doc_version IS NOT NULL').all();
229
+ for (const r of verRows) {
230
+ if (r.doc_version)
231
+ activeVersions.add(r.doc_version);
232
+ }
233
+ }
234
+ catch {
235
+ // Best-effort stats aggregation
236
+ }
237
+ return {
238
+ totalSources: sources.length,
239
+ totalPages,
240
+ totalChunks,
241
+ totalApis,
242
+ totalPitfalls,
243
+ totalExamples,
244
+ totalRecipes: 5,
245
+ activeVersions: Array.from(activeVersions).sort(),
246
+ dbPath: this.dbPath,
247
+ untrusted: true,
248
+ };
249
+ }
250
+ readJsonBody(req) {
251
+ return new Promise((resolve, reject) => {
252
+ let body = '';
253
+ req.on('data', (chunk) => {
254
+ body += chunk.toString();
255
+ });
256
+ req.on('end', () => {
257
+ try {
258
+ resolve(body ? JSON.parse(body) : {});
259
+ }
260
+ catch (err) {
261
+ reject(new Error('Invalid JSON payload'));
262
+ }
263
+ });
264
+ req.on('error', (err) => reject(err));
265
+ });
266
+ }
267
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Embedded HTML/CSS/JS dashboard UI for DocOrbit.
3
+ * Lightweight, zero external dependencies, zero CDN requests, fully offline capable.
4
+ */
5
+ export declare function renderDashboardHtml(): string;
@@ -2,8 +2,8 @@
2
2
  * Embedded HTML/CSS/JS dashboard UI for DocOrbit.
3
3
  * Lightweight, zero external dependencies, zero CDN requests, fully offline capable.
4
4
  */
5
- export function renderDashboardHtml(): string {
6
- return `<!DOCTYPE html>
5
+ export function renderDashboardHtml() {
6
+ return `<!DOCTYPE html>
7
7
  <html lang="en">
8
8
  <head>
9
9
  <meta charset="UTF-8">
@@ -0,0 +1,73 @@
1
+ import type { DocOrbitRepository } from '../../storage/src/index.ts';
2
+ import type { QueryIntent, Recipe, ApiEndpoint, IndexedExample, Pitfall, DocumentChunk } from '../../shared/src/index.ts';
3
+ export interface ImplementationContextRequest {
4
+ task: string;
5
+ projectPath?: string;
6
+ library?: string;
7
+ version?: string;
8
+ tokenBudget?: number;
9
+ }
10
+ export interface ProjectResolutionInfo {
11
+ root: string;
12
+ matchedDependency?: {
13
+ name: string;
14
+ ecosystem: string;
15
+ requestedVersion: string;
16
+ resolvedVersion?: string;
17
+ };
18
+ versionResolution?: {
19
+ targetVersion: string;
20
+ confidence: number;
21
+ snapshotId?: string;
22
+ matchedBy?: string;
23
+ };
24
+ resolvedDependency?: string;
25
+ projectVersion?: string;
26
+ docVersion?: string;
27
+ confidence?: number;
28
+ }
29
+ export interface ProvenanceItem {
30
+ sourceUrl: string;
31
+ authority: string;
32
+ retrievedAt?: string;
33
+ untrusted: true;
34
+ }
35
+ export interface VerificationHint {
36
+ endpoint: string;
37
+ method: string;
38
+ requiredParameters: string[];
39
+ requiredBodyFields: string[];
40
+ deprecated?: boolean;
41
+ warnings?: string[];
42
+ }
43
+ export interface ImplementationContextResult {
44
+ task: string;
45
+ detectedIntent: QueryIntent;
46
+ project?: ProjectResolutionInfo;
47
+ recipe: Recipe;
48
+ apiEndpoints: ApiEndpoint[];
49
+ examples: IndexedExample[];
50
+ pitfalls: Pitfall[];
51
+ chunks: DocumentChunk[];
52
+ totalEstimatedTokens: number;
53
+ tokenBudget: number;
54
+ markdown: string;
55
+ provenance: ProvenanceItem[];
56
+ verificationHints?: VerificationHint[];
57
+ untrusted: true;
58
+ untrustedContentNotice?: string;
59
+ }
60
+ export declare class ImplementationContextService {
61
+ private repo;
62
+ private retrievalEngine;
63
+ private recipeEngine;
64
+ private workspaceResolver;
65
+ constructor(repo: DocOrbitRepository);
66
+ /**
67
+ * Orchestrates the complete documentation intelligence pipeline for an agent task:
68
+ * task → project/dependency detection → version resolution → intent → retrieval →
69
+ * APIs → examples → pitfalls → recipe → token-budgeted context → provenance.
70
+ */
71
+ getContext(request: ImplementationContextRequest): Promise<ImplementationContextResult>;
72
+ private synthesizeMarkdown;
73
+ }
@@ -0,0 +1,325 @@
1
+ import { RetrievalEngine, RecipeEngine, detectQueryIntent, } from "../../retrieval/src/index.js";
2
+ import { detectWorkspaceDependencies, WorkspaceResolver, } from "../../workspace/src/index.js";
3
+ import { estimateTokenCount, } from "../../shared/src/index.js";
4
+ export class ImplementationContextService {
5
+ repo;
6
+ retrievalEngine;
7
+ recipeEngine;
8
+ workspaceResolver;
9
+ constructor(repo) {
10
+ this.repo = repo;
11
+ this.retrievalEngine = new RetrievalEngine(repo);
12
+ this.recipeEngine = new RecipeEngine(repo);
13
+ this.workspaceResolver = new WorkspaceResolver(repo);
14
+ }
15
+ /**
16
+ * Orchestrates the complete documentation intelligence pipeline for an agent task:
17
+ * task → project/dependency detection → version resolution → intent → retrieval →
18
+ * APIs → examples → pitfalls → recipe → token-budgeted context → provenance.
19
+ */
20
+ async getContext(request) {
21
+ const task = request.task.trim();
22
+ const tokenBudget = request.tokenBudget || 4000;
23
+ let targetVersion = request.version;
24
+ // 1. Intent Detection
25
+ const detectedIntent = detectQueryIntent(task);
26
+ // 2. Project Awareness & Version Resolution
27
+ let projectInfo;
28
+ if (request.projectPath) {
29
+ try {
30
+ const scan = detectWorkspaceDependencies(request.projectPath);
31
+ const resolution = this.workspaceResolver.resolveWorkspace(scan);
32
+ let matchedDep = undefined;
33
+ let versionRes = undefined;
34
+ // If library was specified, look for it specifically
35
+ if (request.library) {
36
+ const libLower = request.library.toLowerCase();
37
+ matchedDep = scan.dependencies.find(d => d.name.toLowerCase() === libLower);
38
+ const match = resolution.matches.find(m => m.dependency.name.toLowerCase() === libLower);
39
+ if (match && match.targetVersion) {
40
+ targetVersion = targetVersion || match.targetVersion;
41
+ versionRes = {
42
+ targetVersion: match.targetVersion,
43
+ confidence: match.confidence,
44
+ snapshotId: match.snapshotId,
45
+ matchedBy: match.matchedBy,
46
+ };
47
+ }
48
+ }
49
+ else {
50
+ // Find any relevant dependency mentioned in the task
51
+ const taskLower = task.toLowerCase();
52
+ for (const m of resolution.matches) {
53
+ if (taskLower.includes(m.dependency.name.toLowerCase()) && m.targetVersion) {
54
+ matchedDep = m.dependency;
55
+ targetVersion = targetVersion || m.targetVersion;
56
+ versionRes = {
57
+ targetVersion: m.targetVersion,
58
+ confidence: m.confidence,
59
+ snapshotId: m.snapshotId,
60
+ matchedBy: m.matchedBy,
61
+ };
62
+ break;
63
+ }
64
+ }
65
+ }
66
+ projectInfo = {
67
+ root: request.projectPath,
68
+ matchedDependency: matchedDep ? {
69
+ name: matchedDep.name,
70
+ ecosystem: matchedDep.ecosystem,
71
+ requestedVersion: matchedDep.requestedVersion,
72
+ resolvedVersion: matchedDep.resolvedVersion,
73
+ } : undefined,
74
+ versionResolution: versionRes,
75
+ resolvedDependency: matchedDep?.name,
76
+ projectVersion: matchedDep?.requestedVersion,
77
+ docVersion: versionRes?.targetVersion,
78
+ confidence: versionRes?.confidence,
79
+ };
80
+ }
81
+ catch {
82
+ // Continue if workspace scan fails
83
+ }
84
+ }
85
+ // 3. Structured Recipe Generation
86
+ const recipe = await this.recipeEngine.assembleRecipe(task, {
87
+ docVersion: targetVersion,
88
+ projectDir: request.projectPath,
89
+ });
90
+ // 4. API Endpoints
91
+ const apiEndpoints = this.repo.searchApiEndpoints(task, {
92
+ docVersion: targetVersion,
93
+ limit: 5,
94
+ });
95
+ // 5. Verified Examples
96
+ const examples = this.repo.searchIndexedExamples(task, {
97
+ docVersion: targetVersion,
98
+ limit: 5,
99
+ });
100
+ // 6. Pitfalls & Deprecations
101
+ const pitfalls = this.repo.searchPitfalls(task, {
102
+ docVersion: targetVersion,
103
+ limit: 5,
104
+ });
105
+ // 7. Targeted Chunk Retrieval
106
+ const searchResults = await this.retrievalEngine.search(task, {
107
+ docVersion: targetVersion,
108
+ limit: 8,
109
+ projectDir: request.projectPath,
110
+ });
111
+ const chunks = searchResults.map(r => r.chunk);
112
+ // 8. Compile Provenance & Untrusted Boundaries
113
+ const provenanceMap = new Map();
114
+ const recordProvenance = (url, authority, date) => {
115
+ if (url && !provenanceMap.has(url)) {
116
+ provenanceMap.set(url, {
117
+ sourceUrl: url,
118
+ authority: authority || 'official',
119
+ retrievedAt: date,
120
+ untrusted: true,
121
+ });
122
+ }
123
+ };
124
+ for (const c of chunks) {
125
+ if (c.provenance?.sourceUrl) {
126
+ recordProvenance(c.provenance.sourceUrl, undefined, c.provenance.fetchedAt);
127
+ }
128
+ }
129
+ for (const ep of apiEndpoints) {
130
+ if (ep.provenance?.sourceUrl) {
131
+ recordProvenance(ep.provenance.sourceUrl, ep.provenance.sourceAuthority, ep.provenance.retrievedAt);
132
+ }
133
+ }
134
+ for (const ex of examples) {
135
+ if (ex.sourceUrl) {
136
+ recordProvenance(ex.sourceUrl, ex.sourceAuthority);
137
+ }
138
+ }
139
+ for (const pf of pitfalls) {
140
+ if (pf.provenance?.sourceUrl) {
141
+ recordProvenance(pf.provenance.sourceUrl, undefined, pf.provenance.retrievedAt);
142
+ }
143
+ }
144
+ for (const src of recipe.sources) {
145
+ recordProvenance(src);
146
+ }
147
+ const provenanceList = Array.from(provenanceMap.values());
148
+ // 9. Extract Verification Hints (Schema contracts & required parameters)
149
+ const verificationHints = apiEndpoints.map(ep => {
150
+ const requiredParameters = ep.parameters.filter(p => p.required).map(p => `${p.name} (${p.in})`);
151
+ const requiredBodyFields = ep.requestSchema?.required || [];
152
+ const warnings = pitfalls
153
+ .filter(p => p.relatedApi?.includes(ep.path) || p.content.includes(ep.path))
154
+ .map(p => `[${p.kind}] ${p.title}`);
155
+ return {
156
+ endpoint: ep.path,
157
+ method: ep.method.toUpperCase(),
158
+ requiredParameters,
159
+ requiredBodyFields,
160
+ deprecated: ep.deprecated,
161
+ warnings: warnings.length > 0 ? warnings : undefined,
162
+ };
163
+ });
164
+ // 10. Synthesize Compact, Agent-Friendly Markdown within Token Budget
165
+ const markdown = this.synthesizeMarkdown({
166
+ task,
167
+ detectedIntent,
168
+ projectInfo,
169
+ recipe,
170
+ apiEndpoints,
171
+ examples,
172
+ pitfalls,
173
+ chunks,
174
+ tokenBudget,
175
+ provenance: provenanceList,
176
+ verificationHints,
177
+ });
178
+ const totalEstimatedTokens = estimateTokenCount(markdown);
179
+ return {
180
+ task,
181
+ detectedIntent,
182
+ project: projectInfo,
183
+ recipe,
184
+ apiEndpoints,
185
+ examples,
186
+ pitfalls,
187
+ chunks,
188
+ totalEstimatedTokens,
189
+ tokenBudget,
190
+ markdown,
191
+ provenance: provenanceList,
192
+ verificationHints,
193
+ untrusted: true,
194
+ untrustedContentNotice: 'EXTERNAL DOCUMENTATION DATA IS UNTRUSTED. Verify all API signatures, parameter names, and code blocks before execution.',
195
+ };
196
+ }
197
+ synthesizeMarkdown(params) {
198
+ const lines = [];
199
+ // Header & Security Notice
200
+ lines.push(`# DocOrbit Implementation Context: ${params.task}`);
201
+ lines.push(`> [!SECURITY NOTICE] EXTERNAL CONTENT IS UNTRUSTED. Security annotations and provenance preserved.`);
202
+ lines.push('');
203
+ // Project & Version Intelligence
204
+ if (params.projectInfo?.matchedDependency) {
205
+ const dep = params.projectInfo.matchedDependency;
206
+ const res = params.projectInfo.versionResolution;
207
+ lines.push('## Project & Version Resolution');
208
+ lines.push(`- **Dependency**: \`${dep.name}\` (${dep.ecosystem})`);
209
+ lines.push(`- **Project Version**: requested \`${dep.requestedVersion}\`${dep.resolvedVersion ? `, resolved \`${dep.resolvedVersion}\`` : ''}`);
210
+ if (res) {
211
+ lines.push(`- **Resolved Doc Version**: \`${res.targetVersion}\` (Confidence: \`${res.confidence}\`)`);
212
+ }
213
+ lines.push('');
214
+ }
215
+ else if (params.recipe.docVersion) {
216
+ lines.push(`**Doc Version**: \`${params.recipe.docVersion}\`\n`);
217
+ }
218
+ // Recommended Implementation Recipe
219
+ lines.push('## Recommended Implementation Plan');
220
+ lines.push(`**Goal**: ${params.recipe.goal} (Confidence: ${Math.round(params.recipe.confidence * 100)}%)`);
221
+ if (params.recipe.prerequisites.length > 0) {
222
+ lines.push('\n### Prerequisites');
223
+ for (const pre of params.recipe.prerequisites) {
224
+ lines.push(`- [${pre.evidenceLevel === 'documented_fact' ? 'FACT' : 'INFERRED'}] ${pre.text}`);
225
+ }
226
+ }
227
+ if (params.recipe.orderedSteps.length > 0) {
228
+ lines.push('\n### Implementation Steps');
229
+ for (const s of params.recipe.orderedSteps) {
230
+ const badge = s.evidenceLevel === 'documented_fact' ? 'FACT' : (s.evidenceLevel === 'missing_information' ? 'MISSING' : 'INFERRED');
231
+ lines.push(`${s.step}. **[${badge}] ${s.title}**`);
232
+ if (s.apiEndpoint)
233
+ lines.push(` - Endpoint: \`${s.apiEndpoint}\``);
234
+ lines.push(` - ${s.description}`);
235
+ }
236
+ }
237
+ if (params.recipe.validationSteps.length > 0) {
238
+ lines.push('\n### Validation & Verification');
239
+ for (const vs of params.recipe.validationSteps) {
240
+ lines.push(`${vs.step}. **[FACT]** ${vs.description}`);
241
+ if (vs.expectedResponse)
242
+ lines.push(` - Expected: \`${vs.expectedResponse}\``);
243
+ }
244
+ }
245
+ lines.push('');
246
+ // Structured Required APIs
247
+ if (params.apiEndpoints.length > 0) {
248
+ lines.push('## Required API Endpoints');
249
+ for (const ep of params.apiEndpoints.slice(0, 3)) {
250
+ lines.push(`### \`${ep.method.toUpperCase()} ${ep.path}\`${ep.deprecated ? ' (DEPRECATED)' : ''}`);
251
+ if (ep.summary)
252
+ lines.push(`*${ep.summary}*`);
253
+ if (ep.parameters.length > 0) {
254
+ const req = ep.parameters.filter(p => p.required).map(p => `\`${p.name}\` (${p.in}:${p.type || 'any'})`).join(', ');
255
+ const opt = ep.parameters.filter(p => !p.required).map(p => `\`${p.name}\``).join(', ');
256
+ if (req)
257
+ lines.push(`- **Required Parameters**: ${req}`);
258
+ if (opt)
259
+ lines.push(`- **Optional Parameters**: ${opt}`);
260
+ }
261
+ if (ep.auth.length > 0) {
262
+ lines.push(`- **Auth**: ${ep.auth.map(a => `${a.type}${a.scheme ? `:${a.scheme}` : ''}`).join(', ')}`);
263
+ }
264
+ if (ep.pagination) {
265
+ lines.push(`- **Pagination**: ${ep.pagination.type} (${ep.pagination.parameters.join(', ')})`);
266
+ }
267
+ lines.push('');
268
+ }
269
+ }
270
+ // Best Code Examples
271
+ if (params.examples.length > 0) {
272
+ lines.push('## Verified Code Examples');
273
+ for (const ex of params.examples.slice(0, 2)) {
274
+ lines.push(`### ${ex.task} (${ex.language}${ex.framework ? `, ${ex.framework}` : ''})`);
275
+ lines.push('```' + ex.language);
276
+ lines.push(ex.code);
277
+ lines.push('```\n');
278
+ }
279
+ }
280
+ // Pitfalls, Gotchas & Deprecations
281
+ if (params.pitfalls.length > 0) {
282
+ lines.push('## Pitfalls & Warnings');
283
+ for (const pf of params.pitfalls.slice(0, 4)) {
284
+ lines.push(`- ⚠️ **[${pf.kind.toUpperCase()}] ${pf.title}**: ${pf.content}`);
285
+ }
286
+ lines.push('');
287
+ }
288
+ // Verification Constraints & Schema Contracts
289
+ if (params.verificationHints && params.verificationHints.length > 0) {
290
+ lines.push('## Verification Constraints & Schema Contracts');
291
+ for (const hint of params.verificationHints.slice(0, 3)) {
292
+ lines.push(`- **\`${hint.method} ${hint.endpoint}\`**${hint.deprecated ? ' (DEPRECATED)' : ''}`);
293
+ if (hint.requiredParameters.length > 0) {
294
+ lines.push(` - *Required Query/Path Params*: \`${hint.requiredParameters.join('`, `')}\``);
295
+ }
296
+ if (hint.requiredBodyFields.length > 0) {
297
+ lines.push(` - *Required Body Fields*: \`${hint.requiredBodyFields.join('`, `')}\``);
298
+ }
299
+ if (hint.warnings && hint.warnings.length > 0) {
300
+ for (const w of hint.warnings) {
301
+ lines.push(` - ⚠️ ${w}`);
302
+ }
303
+ }
304
+ }
305
+ lines.push('');
306
+ }
307
+ // Sources & Provenance
308
+ if (params.provenance.length > 0) {
309
+ lines.push('## Documentation Sources & Provenance');
310
+ for (const prov of params.provenance) {
311
+ lines.push(`- \`${prov.authority}\`: ${prov.sourceUrl} (untrusted)`);
312
+ }
313
+ lines.push('');
314
+ }
315
+ // Budget enforcement
316
+ let fullText = lines.join('\n');
317
+ let tokens = estimateTokenCount(fullText);
318
+ if (tokens > params.tokenBudget) {
319
+ // Trim examples or documentation chunks to fit strictly in budget
320
+ const truncated = fullText.slice(0, Math.floor(params.tokenBudget * 3.5)) + '\n\n... [Context truncated to fit token budget]';
321
+ return truncated;
322
+ }
323
+ return fullText;
324
+ }
325
+ }
@@ -4,4 +4,3 @@ export * from './implementation-service.ts';
4
4
  export * from '../../verification/src/index.ts';
5
5
  export * from '../../export/src/index.ts';
6
6
  export * from './dashboard/server.ts';
7
-