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,49 @@
1
+ import { DocOrbitDb, DocOrbitRepository } from "../../../../packages/storage/src/index.js";
2
+ import { WorkspaceResolver } from "../../../../packages/workspace/src/index.js";
3
+ import { McpServer, StdioServerTransport, StreamableHttpTransport, } from "../../../../packages/mcp/src/index.js";
4
+ export async function runMcpCommand(options = {}) {
5
+ const dbPath = options.dbPath || '.docorbit/docorbit.db';
6
+ const projectDir = options.projectDir || process.cwd();
7
+ const db = new DocOrbitDb(dbPath);
8
+ const repo = new DocOrbitRepository(db);
9
+ const resolver = new WorkspaceResolver(repo);
10
+ const server = new McpServer({
11
+ repo,
12
+ resolver,
13
+ projectDir,
14
+ serverName: 'docorbit-mcp',
15
+ serverVersion: '0.5.0',
16
+ });
17
+ const isHttp = typeof options.port === 'number' && options.port > 0;
18
+ if (isHttp) {
19
+ const port = options.port;
20
+ const host = options.host || '127.0.0.1';
21
+ const transport = new StreamableHttpTransport({ port, host });
22
+ await transport.start(server);
23
+ const activePort = transport.getPort();
24
+ process.stderr.write(`[DocOrbit MCP] Streamable HTTP server listening on http://${host}:${activePort}\n` +
25
+ ` - MCP endpoint: POST http://${host}:${activePort}/mcp\n` +
26
+ ` - SSE fallback: GET http://${host}:${activePort}/sse\n` +
27
+ ` - Health check: GET http://${host}:${activePort}/health\n`);
28
+ const shutdown = async () => {
29
+ process.stderr.write('[DocOrbit MCP] Shutting down HTTP server...\n');
30
+ await transport.close();
31
+ db.close();
32
+ process.exit(0);
33
+ };
34
+ process.on('SIGINT', shutdown);
35
+ process.on('SIGTERM', shutdown);
36
+ }
37
+ else {
38
+ // Default to Stdio transport
39
+ const transport = new StdioServerTransport();
40
+ await transport.start(server);
41
+ const shutdown = async () => {
42
+ await transport.close();
43
+ db.close();
44
+ process.exit(0);
45
+ };
46
+ process.on('SIGINT', shutdown);
47
+ process.on('SIGTERM', shutdown);
48
+ }
49
+ }
@@ -0,0 +1,2 @@
1
+ import type { PitfallsCommandOptions } from '../../../../packages/shared/src/index.ts';
2
+ export declare function runPitfallsCommand(task?: string, options?: PitfallsCommandOptions): Promise<void>;
@@ -0,0 +1,35 @@
1
+ import { DocOrbitDb, DocOrbitRepository } from "../../../../packages/storage/src/index.js";
2
+ import { resolveProjectContext } from "../../../../packages/workspace/src/index.js";
3
+ import { formatPitfalls } from "../formatters/terminal.js";
4
+ export async function runPitfallsCommand(task = '', options = {}) {
5
+ const dbPath = options.dbPath || '.docorbit/docorbit.db';
6
+ const db = new DocOrbitDb(dbPath);
7
+ const repository = new DocOrbitRepository(db);
8
+ try {
9
+ let effectiveDocVersion = options.docVersion;
10
+ if (options.projectDir) {
11
+ const projContext = resolveProjectContext(options.projectDir, task, repository);
12
+ if (projContext.matchedDependency && !effectiveDocVersion) {
13
+ effectiveDocVersion = projContext.matchedDependency.targetDocVersion;
14
+ }
15
+ }
16
+ const pitfalls = repository.searchPitfalls(task, {
17
+ kind: options.kind,
18
+ docVersion: effectiveDocVersion,
19
+ limit: options.limit || 10,
20
+ });
21
+ if (options.json) {
22
+ console.log(JSON.stringify(pitfalls, null, 2));
23
+ }
24
+ else {
25
+ console.log(formatPitfalls(pitfalls, task));
26
+ }
27
+ }
28
+ catch (err) {
29
+ console.error(`DocOrbit Pitfalls Error: ${err instanceof Error ? err.message : String(err)}`);
30
+ process.exit(1);
31
+ }
32
+ finally {
33
+ db.close();
34
+ }
35
+ }
@@ -0,0 +1,2 @@
1
+ import type { RecipesCommandOptions } from '../../../../packages/shared/src/index.ts';
2
+ export declare function runRecipesCommand(goal: string, options?: RecipesCommandOptions): Promise<void>;
@@ -0,0 +1,33 @@
1
+ import { DocOrbitDb, DocOrbitRepository } from "../../../../packages/storage/src/index.js";
2
+ import { RecipeEngine } from "../../../../packages/retrieval/src/index.js";
3
+ import { formatRecipe } from "../formatters/terminal.js";
4
+ export async function runRecipesCommand(goal, options = {}) {
5
+ if (!goal) {
6
+ console.error('Error: Please provide an implementation goal.');
7
+ console.error('Usage: docorbit recipes "<goal>" [--doc-version <ver>] [--project <dir>] [--json] [--db <path>]');
8
+ process.exit(1);
9
+ }
10
+ const dbPath = options.dbPath || '.docorbit/docorbit.db';
11
+ const db = new DocOrbitDb(dbPath);
12
+ const repository = new DocOrbitRepository(db);
13
+ const recipeEngine = new RecipeEngine(repository);
14
+ try {
15
+ const recipe = await recipeEngine.assembleRecipe(goal, {
16
+ docVersion: options.docVersion,
17
+ projectDir: options.projectDir,
18
+ });
19
+ if (options.json) {
20
+ console.log(JSON.stringify(recipe, null, 2));
21
+ }
22
+ else {
23
+ console.log(formatRecipe(recipe));
24
+ }
25
+ }
26
+ catch (err) {
27
+ console.error(`DocOrbit Recipes Error: ${err instanceof Error ? err.message : String(err)}`);
28
+ process.exit(1);
29
+ }
30
+ finally {
31
+ db.close();
32
+ }
33
+ }
@@ -0,0 +1,11 @@
1
+ import type { ChunkType } from '../../../../packages/shared/src/index.ts';
2
+ export interface SearchCommandOptions {
3
+ json?: boolean;
4
+ dbPath?: string;
5
+ limit?: number;
6
+ chunkType?: ChunkType;
7
+ snapshotId?: string;
8
+ docVersion?: string;
9
+ projectDir?: string;
10
+ }
11
+ export declare function runSearchCommand(query: string, options?: SearchCommandOptions): Promise<void>;
@@ -0,0 +1,36 @@
1
+ import { DocOrbitDb, DocOrbitRepository } from "../../../../packages/storage/src/index.js";
2
+ import { RetrievalEngine } from "../../../../packages/retrieval/src/index.js";
3
+ import { formatSearchResults } from "../formatters/terminal.js";
4
+ export async function runSearchCommand(query, options = {}) {
5
+ if (!query) {
6
+ console.error('Error: Please provide a search query.');
7
+ console.error('Usage: docorbit search "<query>" [--limit <n>] [--type <type>] [--doc-version <ver>] [--project <dir>] [--json] [--db <path>]');
8
+ process.exit(1);
9
+ }
10
+ const dbPath = options.dbPath || '.docorbit/docorbit.db';
11
+ const db = new DocOrbitDb(dbPath);
12
+ const repository = new DocOrbitRepository(db);
13
+ const engine = new RetrievalEngine(repository);
14
+ try {
15
+ const results = await engine.search(query, {
16
+ limit: options.limit || 10,
17
+ chunkType: options.chunkType,
18
+ snapshotId: options.snapshotId,
19
+ docVersion: options.docVersion,
20
+ projectDir: options.projectDir,
21
+ });
22
+ if (options.json) {
23
+ console.log(JSON.stringify(results, null, 2));
24
+ }
25
+ else {
26
+ console.log(formatSearchResults(query, results));
27
+ }
28
+ }
29
+ catch (err) {
30
+ console.error(`DocOrbit Search Error: ${err instanceof Error ? err.message : String(err)}`);
31
+ process.exit(1);
32
+ }
33
+ finally {
34
+ db.close();
35
+ }
36
+ }
@@ -0,0 +1,6 @@
1
+ export interface UpdateCommandOptions {
2
+ json?: boolean;
3
+ dbPath?: string;
4
+ projectDir?: string;
5
+ }
6
+ export declare function runUpdateCommand(targetPackage?: string, options?: UpdateCommandOptions): Promise<void>;
@@ -0,0 +1,53 @@
1
+ import { resolve } from 'node:path';
2
+ import { DocOrbitDb, DocOrbitRepository } from "../../../../packages/storage/src/index.js";
3
+ import { detectWorkspaceDependencies, readDocsLock, updateDocsLock, writeDocsLock, } from "../../../../packages/workspace/src/index.js";
4
+ import { runInitCommand } from "./init.js";
5
+ export async function runUpdateCommand(targetPackage, options = {}) {
6
+ const projectDir = resolve(options.projectDir || '.');
7
+ const existingLock = readDocsLock(projectDir);
8
+ if (!existingLock) {
9
+ console.log(`No docs.lock found at ${projectDir}. Initializing first...`);
10
+ await runInitCommand(projectDir, { json: options.json, dbPath: options.dbPath });
11
+ return;
12
+ }
13
+ const dbPath = options.dbPath || '.docorbit/docorbit.db';
14
+ const db = new DocOrbitDb(dbPath);
15
+ const repository = new DocOrbitRepository(db);
16
+ try {
17
+ const scanResult = detectWorkspaceDependencies(projectDir);
18
+ const updated = updateDocsLock(scanResult, repository, existingLock, targetPackage);
19
+ writeDocsLock(projectDir, updated);
20
+ if (options.json) {
21
+ console.log(JSON.stringify(updated, null, 2));
22
+ return;
23
+ }
24
+ console.log(`\n=== DocOrbit docs.lock Updated ===`);
25
+ if (targetPackage) {
26
+ console.log(`Target Package: ${targetPackage}`);
27
+ }
28
+ else {
29
+ console.log(`Updated all resolved dependencies.`);
30
+ }
31
+ const lockedCount = Object.keys(updated.dependencies).length;
32
+ console.log(`Total Locked Docs: ${lockedCount}\n`);
33
+ console.log('-----------------------------------------------------------------------------');
34
+ console.log('| Package | Project Ver | Doc Ver | Match | Confidence |');
35
+ console.log('-----------------------------------------------------------------------------');
36
+ for (const [key, dep] of Object.entries(updated.dependencies)) {
37
+ const pkgPad = key.padEnd(21).slice(0, 21);
38
+ const projPad = dep.resolvedDependencyVersion.padEnd(11).slice(0, 11);
39
+ const docPad = dep.docVersion.padEnd(8).slice(0, 8);
40
+ const matchPad = dep.matchType.padEnd(11).slice(0, 11);
41
+ const confPad = (dep.confidence * 100).toFixed(0) + '%';
42
+ console.log(`| ${pkgPad} | ${projPad} | ${docPad} | ${matchPad} | ${confPad.padEnd(10)} |`);
43
+ }
44
+ console.log('-----------------------------------------------------------------------------\n');
45
+ }
46
+ catch (err) {
47
+ console.error(`DocOrbit Update Error: ${err instanceof Error ? err.message : String(err)}`);
48
+ process.exit(1);
49
+ }
50
+ finally {
51
+ db.close();
52
+ }
53
+ }
@@ -0,0 +1,2 @@
1
+ import type { VerifyCommandOptions } from '../../../../packages/shared/src/index.ts';
2
+ export declare function runVerifyCommand(codeOrFile?: string, options?: VerifyCommandOptions): Promise<void>;
@@ -0,0 +1,44 @@
1
+ import * as fs from 'node:fs';
2
+ import { DocOrbitDb, DocOrbitRepository } from "../../../../packages/storage/src/index.js";
3
+ import { VerificationService } from "../../../../packages/verification/src/index.js";
4
+ import { formatVerificationReport } from "../formatters/terminal.js";
5
+ export async function runVerifyCommand(codeOrFile = '', options = {}) {
6
+ if (!codeOrFile) {
7
+ console.error('Error: "verify" command requires code snippet or file path as an argument.');
8
+ process.exit(1);
9
+ }
10
+ let code = codeOrFile;
11
+ let filePath;
12
+ // Check if argument is a file path
13
+ if (fs.existsSync(codeOrFile) && fs.statSync(codeOrFile).isFile()) {
14
+ filePath = codeOrFile;
15
+ code = fs.readFileSync(codeOrFile, 'utf8');
16
+ }
17
+ const dbPath = options.dbPath || '.docorbit/docorbit.db';
18
+ const db = new DocOrbitDb(dbPath);
19
+ const repo = new DocOrbitRepository(db);
20
+ try {
21
+ const service = new VerificationService(repo);
22
+ const { result } = service.verifyCode({
23
+ code,
24
+ filePath,
25
+ language: options.language,
26
+ library: options.library,
27
+ version: options.docVersion,
28
+ projectDir: options.projectDir || process.cwd(),
29
+ });
30
+ if (options.json) {
31
+ console.log(JSON.stringify(result, null, 2));
32
+ }
33
+ else {
34
+ console.log(formatVerificationReport(result));
35
+ }
36
+ }
37
+ catch (err) {
38
+ console.error(`DocOrbit Verify Error: ${err instanceof Error ? err.message : String(err)}`);
39
+ process.exit(1);
40
+ }
41
+ finally {
42
+ db.close();
43
+ }
44
+ }
@@ -0,0 +1,21 @@
1
+ export declare const RESET = "\u001B[0m";
2
+ export declare const BOLD = "\u001B[1m";
3
+ export declare const DIM = "\u001B[2m";
4
+ export declare const GREEN = "\u001B[32m";
5
+ export declare const BLUE = "\u001B[34m";
6
+ export declare const CYAN = "\u001B[36m";
7
+ export declare const YELLOW = "\u001B[33m";
8
+ export declare const RED = "\u001B[31m";
9
+ export declare const MAGENTA = "\u001B[35m";
10
+ export declare const c: {
11
+ bold: (s: string) => string;
12
+ dim: (s: string) => string;
13
+ green: (s: string) => string;
14
+ blue: (s: string) => string;
15
+ cyan: (s: string) => string;
16
+ yellow: (s: string) => string;
17
+ red: (s: string) => string;
18
+ magenta: (s: string) => string;
19
+ gray: (s: string) => string;
20
+ underline: (s: string) => string;
21
+ };
@@ -0,0 +1,22 @@
1
+ // ANSI colors
2
+ export const RESET = '\x1b[0m';
3
+ export const BOLD = '\x1b[1m';
4
+ export const DIM = '\x1b[2m';
5
+ export const GREEN = '\x1b[32m';
6
+ export const BLUE = '\x1b[34m';
7
+ export const CYAN = '\x1b[36m';
8
+ export const YELLOW = '\x1b[33m';
9
+ export const RED = '\x1b[31m';
10
+ export const MAGENTA = '\x1b[35m';
11
+ export const c = {
12
+ bold: (s) => `${BOLD}${s}${RESET}`,
13
+ dim: (s) => `${DIM}${s}${RESET}`,
14
+ green: (s) => `${GREEN}${s}${RESET}`,
15
+ blue: (s) => `${BLUE}${s}${RESET}`,
16
+ cyan: (s) => `${CYAN}${s}${RESET}`,
17
+ yellow: (s) => `${YELLOW}${s}${RESET}`,
18
+ red: (s) => `${RED}${s}${RESET}`,
19
+ magenta: (s) => `${MAGENTA}${s}${RESET}`,
20
+ gray: (s) => `${DIM}${s}${RESET}`,
21
+ underline: (s) => `\x1b[4m${s}${RESET}`,
22
+ };
@@ -0,0 +1,3 @@
1
+ import type { InspectionReport, IngestionResult } from '../../../../packages/core/src/index.ts';
2
+ export declare function formatInspectionReport(report: InspectionReport): string;
3
+ export declare function formatIngestionResult(result: IngestionResult): string;
@@ -0,0 +1,88 @@
1
+ import { RESET, BOLD, DIM, GREEN, BLUE, CYAN, YELLOW, RED, MAGENTA } from "./colors.js";
2
+ export function formatInspectionReport(report) {
3
+ const lines = [];
4
+ lines.push('');
5
+ lines.push(`${BOLD}${CYAN}DocOrbit${RESET} ${DIM}— Documentation Intelligence Report${RESET}`);
6
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
7
+ lines.push(`${BOLD}Target URL:${RESET} ${BLUE}${report.targetUrl}${RESET}`);
8
+ lines.push('');
9
+ // Sources Table
10
+ lines.push(`${BOLD}Discovered Sources (${report.summary.totalFound}):${RESET}`);
11
+ lines.push(`${DIM}${'─'.repeat(64)}${RESET}`);
12
+ if (report.sourcesDiscovered.length === 0) {
13
+ lines.push(` ${YELLOW}No machine-readable sources discovered.${RESET}`);
14
+ }
15
+ else {
16
+ for (const src of report.sourcesDiscovered) {
17
+ const icon = src.status === 'valid' ? `${GREEN}✓${RESET}` : `${RED}✗${RESET}`;
18
+ const typeStr = `[${src.type}]`.padEnd(16);
19
+ const mr = src.machineReadable ? `${GREEN}machine-readable${RESET}` : `${DIM}human-html${RESET}`;
20
+ const auth = `${src.authority}`;
21
+ lines.push(` ${icon} ${BOLD}${typeStr}${RESET} ${mr.padEnd(26)} ${DIM}(${auth}, conf: ${Math.round(src.confidence * 100)}%)${RESET}`);
22
+ lines.push(` ${DIM}↳ ${src.url}${RESET}`);
23
+ }
24
+ }
25
+ lines.push('');
26
+ lines.push(`${BOLD}Purpose-Based Source Recommendations:${RESET}`);
27
+ lines.push(`${DIM}${'─'.repeat(64)}${RESET}`);
28
+ const purposes = [
29
+ { key: 'navigation', label: 'Navigation ' },
30
+ { key: 'conceptual', label: 'Conceptual ' },
31
+ { key: 'api', label: 'API Reference ' },
32
+ { key: 'examples', label: 'Code Examples ' },
33
+ { key: 'implementation', label: 'Implementation' },
34
+ ];
35
+ for (const p of purposes) {
36
+ const rec = report.recommendations[p.key];
37
+ if (rec && rec.recommended) {
38
+ lines.push(` ${CYAN}${p.label}${RESET} → ${GREEN}${rec.recommended.type}${RESET} ${DIM}(${rec.recommended.url})${RESET}`);
39
+ }
40
+ else {
41
+ lines.push(` ${CYAN}${p.label}${RESET} → ${DIM}No dedicated source${RESET}`);
42
+ }
43
+ }
44
+ lines.push('');
45
+ lines.push(`${BOLD}Summary:${RESET}`);
46
+ lines.push(` Machine-readable sources: ${GREEN}${report.summary.machineReadableCount}${RESET}`);
47
+ lines.push(` Official sources: ${GREEN}${report.summary.officialCount}${RESET}`);
48
+ lines.push(` OpenAPI detected: ${report.summary.hasOpenApi ? `${GREEN}Yes${RESET}` : `${DIM}No${RESET}`}`);
49
+ lines.push(` llms.txt detected: ${report.summary.hasLlmsTxt ? `${GREEN}Yes${RESET}` : `${DIM}No${RESET}`}`);
50
+ lines.push(` skill.md detected: ${report.summary.hasSkill ? `${GREEN}Yes${RESET}` : `${DIM}No${RESET}`}`);
51
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
52
+ lines.push('');
53
+ return lines.join('\n');
54
+ }
55
+ export function formatIngestionResult(result) {
56
+ const lines = [];
57
+ lines.push('');
58
+ lines.push(`${BOLD}${GREEN}DocOrbit${RESET} ${DIM}— Documentation Ingested Successfully${RESET}`);
59
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
60
+ lines.push(`${BOLD}Target URL:${RESET} ${BLUE}${result.targetUrl}${RESET}`);
61
+ lines.push(`${BOLD}Snapshot ID:${RESET} ${MAGENTA}${result.snapshotId}${RESET}`);
62
+ lines.push(`${BOLD}Duration:${RESET} ${result.durationMs}ms`);
63
+ lines.push('');
64
+ lines.push(`${BOLD}Ingested Pages (${result.pages.length}):${RESET}`);
65
+ lines.push(`${DIM}${'─'.repeat(64)}${RESET}`);
66
+ for (let i = 0; i < result.pages.length; i++) {
67
+ const p = result.pages[i];
68
+ const warnBadge = p.securityAnnotations.length > 0
69
+ ? ` ${YELLOW}[${p.securityAnnotations.length} alert(s)]${RESET}`
70
+ : '';
71
+ lines.push(` ${BOLD}${i + 1}.${RESET} ${CYAN}${p.title}${RESET}${warnBadge}`);
72
+ lines.push(` ${DIM}URL: ${p.url}${RESET}`);
73
+ lines.push(` ${DIM}Tokens: ~${p.estimatedTokens} | Code blocks: ${p.codeExamples.length} | Hash: ${p.contentHash.slice(0, 8)}${RESET}`);
74
+ }
75
+ lines.push('');
76
+ lines.push(`${BOLD}Ingestion Summary:${RESET}`);
77
+ lines.push(` Total Pages: ${BOLD}${result.stats.totalPages}${RESET}`);
78
+ lines.push(` Total Raw Bytes: ${(result.stats.totalBytes / 1024).toFixed(1)} KB`);
79
+ lines.push(` Estimated Tokens: ~${result.stats.totalEstimatedTokens}`);
80
+ lines.push(` Total Code Examples: ${result.stats.totalCodeExamples}`);
81
+ lines.push(` Machine-readable types: ${result.stats.machineReadableSources}`);
82
+ if (result.stats.totalChunks !== undefined) {
83
+ lines.push(` Total Chunks: ${BOLD}${result.stats.totalChunks}${RESET}`);
84
+ }
85
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
86
+ lines.push('');
87
+ return lines.join('\n');
88
+ }
@@ -0,0 +1,5 @@
1
+ import type { ApiEndpoint, IndexedExample, Pitfall, Recipe } from '../../../../packages/shared/src/index.ts';
2
+ export declare function formatApiEndpoints(endpoints: ApiEndpoint[], query?: string): string;
3
+ export declare function formatIndexedExamples(examples: IndexedExample[], task?: string): string;
4
+ export declare function formatPitfalls(pitfalls: Pitfall[], task?: string): string;
5
+ export declare function formatRecipe(recipe: Recipe): string;
@@ -0,0 +1,229 @@
1
+ import { RESET, BOLD, DIM, GREEN, BLUE, CYAN, YELLOW, RED, MAGENTA } from "./colors.js";
2
+ export function formatApiEndpoints(endpoints, query) {
3
+ const lines = [];
4
+ lines.push('');
5
+ lines.push(`${BOLD}${CYAN}DocOrbit${RESET} ${DIM}— API Intelligence for: "${query || '*'}"${RESET}`);
6
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
7
+ if (endpoints.length === 0) {
8
+ lines.push(` ${YELLOW}No matching API endpoints found.${RESET}`);
9
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
10
+ lines.push('');
11
+ return lines.join('\n');
12
+ }
13
+ for (let i = 0; i < endpoints.length; i++) {
14
+ const ep = endpoints[i];
15
+ let methodColor = GREEN;
16
+ if (ep.method === 'post')
17
+ methodColor = BLUE;
18
+ else if (ep.method === 'put')
19
+ methodColor = YELLOW;
20
+ else if (ep.method === 'delete')
21
+ methodColor = RED;
22
+ else if (ep.method === 'patch')
23
+ methodColor = MAGENTA;
24
+ const methodBadge = `${methodColor}${BOLD}[${ep.method.toUpperCase()}]${RESET}`;
25
+ const depBadge = ep.deprecated ? ` ${RED}${BOLD}[DEPRECATED]${RESET}` : '';
26
+ const verBadge = ep.docVersion ? ` ${DIM}(${ep.docVersion})${RESET}` : '';
27
+ lines.push(` ${BOLD}${i + 1}.${RESET} ${methodBadge} ${BOLD}${CYAN}${ep.path}${RESET}${depBadge}${verBadge}`);
28
+ if (ep.summary) {
29
+ lines.push(` ${BOLD}${ep.summary}${RESET}`);
30
+ }
31
+ if (ep.description && ep.description !== ep.summary) {
32
+ lines.push(` ${DIM}${ep.description.slice(0, 120)}${ep.description.length > 120 ? '...' : ''}${RESET}`);
33
+ }
34
+ if (ep.parameters.length > 0) {
35
+ const paramStr = ep.parameters.map(p => {
36
+ const req = p.required ? `${RED}*${RESET}` : '';
37
+ return `${p.name}${req} (${p.in}:${p.type || 'any'})`;
38
+ }).join(', ');
39
+ lines.push(` ${DIM}Params: ${paramStr}${RESET}`);
40
+ }
41
+ if (ep.auth.length > 0) {
42
+ const authStr = ep.auth.map(a => `${a.type}${a.scheme ? `:${a.scheme}` : ''}`).join(', ');
43
+ lines.push(` ${DIM}Auth: ${authStr}${RESET}`);
44
+ }
45
+ if (ep.pagination) {
46
+ lines.push(` ${DIM}Pagination: ${ep.pagination.type} (${ep.pagination.parameters.join(', ')})${RESET}`);
47
+ }
48
+ if (ep.errors.length > 0) {
49
+ const errorCodes = ep.errors.map(e => e.statusCode).join(', ');
50
+ lines.push(` ${DIM}Error Codes: ${errorCodes}${RESET}`);
51
+ }
52
+ if (ep.provenance?.sourceUrl) {
53
+ lines.push(` ${DIM}Source: ${ep.provenance.sourceUrl}${RESET}`);
54
+ }
55
+ lines.push('');
56
+ }
57
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
58
+ lines.push('');
59
+ return lines.join('\n');
60
+ }
61
+ export function formatIndexedExamples(examples, task) {
62
+ const lines = [];
63
+ lines.push('');
64
+ lines.push(`${BOLD}${CYAN}DocOrbit${RESET} ${DIM}— Code Example Intelligence for: "${task || '*'}"${RESET}`);
65
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
66
+ if (examples.length === 0) {
67
+ lines.push(` ${YELLOW}No matching code examples found.${RESET}`);
68
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
69
+ lines.push('');
70
+ return lines.join('\n');
71
+ }
72
+ for (let i = 0; i < examples.length; i++) {
73
+ const ex = examples[i];
74
+ const fwBadge = ex.framework ? ` ${MAGENTA}[${ex.framework}]${RESET}` : '';
75
+ const langBadge = `${GREEN}[${ex.language}]${RESET}`;
76
+ const verBadge = ex.docVersion ? ` ${DIM}(${ex.docVersion})${RESET}` : '';
77
+ const authBadge = ex.sourceAuthority === 'official' ? `${BLUE}[official]${RESET}` : `${DIM}[community]${RESET}`;
78
+ lines.push(` ${BOLD}${i + 1}.${RESET} ${CYAN}${ex.task}${RESET} ${langBadge}${fwBadge} ${authBadge}${verBadge}`);
79
+ if (ex.relatedApi) {
80
+ lines.push(` ${BOLD}Target API:${RESET} ${BLUE}${ex.relatedApi}${RESET}`);
81
+ }
82
+ if (ex.relatedSymbol) {
83
+ lines.push(` ${BOLD}Symbol:${RESET} ${MAGENTA}${ex.relatedSymbol}${RESET}`);
84
+ }
85
+ lines.push(` ${DIM}┌── code snippet ──────────────────────────${RESET}`);
86
+ const codeLines = ex.code.split('\n').slice(0, 15);
87
+ for (const cl of codeLines) {
88
+ lines.push(` ${DIM}│${RESET} ${cl}`);
89
+ }
90
+ if (ex.code.split('\n').length > 15) {
91
+ lines.push(` ${DIM}│ ... (${ex.code.split('\n').length - 15} more lines)${RESET}`);
92
+ }
93
+ lines.push(` ${DIM}└──────────────────────────────────────────${RESET}`);
94
+ lines.push(` ${DIM}Source: ${ex.sourceUrl}${RESET}`);
95
+ lines.push('');
96
+ }
97
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
98
+ lines.push('');
99
+ return lines.join('\n');
100
+ }
101
+ export function formatPitfalls(pitfalls, task) {
102
+ const lines = [];
103
+ lines.push('');
104
+ lines.push(`${BOLD}${YELLOW}DocOrbit${RESET} ${DIM}— Pitfalls & Warnings for: "${task || '*'}"${RESET}`);
105
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
106
+ if (pitfalls.length === 0) {
107
+ lines.push(` ${GREEN}No matching pitfalls or warnings found.${RESET}`);
108
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
109
+ lines.push('');
110
+ return lines.join('\n');
111
+ }
112
+ for (let i = 0; i < pitfalls.length; i++) {
113
+ const pf = pitfalls[i];
114
+ let badgeColor = YELLOW;
115
+ if (pf.kind === 'breaking_change' || pf.kind === 'removed' || pf.kind === 'security') {
116
+ badgeColor = RED;
117
+ }
118
+ else if (pf.kind === 'deprecated') {
119
+ badgeColor = MAGENTA;
120
+ }
121
+ const kindBadge = `${badgeColor}${BOLD}[${pf.kind.toUpperCase().replace(/_/g, ' ')}]${RESET}`;
122
+ const verBadge = pf.docVersion ? ` ${DIM}(${pf.docVersion})${RESET}` : '';
123
+ lines.push(` ${BOLD}${i + 1}.${RESET} ${kindBadge} ${BOLD}${pf.title}${RESET}${verBadge}`);
124
+ if (pf.relatedApi) {
125
+ lines.push(` ${DIM}Related API: ${BLUE}${pf.relatedApi}${RESET}`);
126
+ }
127
+ lines.push(` ${DIM}│${RESET} ${pf.content}`);
128
+ if (pf.provenance?.sourceUrl) {
129
+ lines.push(` ${DIM}Source: ${pf.provenance.sourceUrl}${RESET}`);
130
+ }
131
+ lines.push('');
132
+ }
133
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
134
+ lines.push('');
135
+ return lines.join('\n');
136
+ }
137
+ export function formatRecipe(recipe) {
138
+ const lines = [];
139
+ const confidencePct = Math.round(recipe.confidence * 100);
140
+ const confColor = confidencePct >= 70 ? GREEN : (confidencePct >= 40 ? YELLOW : RED);
141
+ lines.push('');
142
+ lines.push(`${BOLD}${GREEN}DocOrbit${RESET} ${DIM}— Implementation Recipe${RESET}`);
143
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
144
+ lines.push(`${BOLD}Goal:${RESET} ${CYAN}${recipe.goal}${RESET}`);
145
+ lines.push(`${BOLD}Confidence:${RESET} ${confColor}${confidencePct}%${RESET}`);
146
+ if (recipe.docVersion) {
147
+ lines.push(`${BOLD}Version:${RESET} ${MAGENTA}${recipe.docVersion}${RESET}`);
148
+ }
149
+ lines.push('');
150
+ // Prerequisites
151
+ lines.push(`${BOLD}Prerequisites (${recipe.prerequisites.length}):${RESET}`);
152
+ lines.push(`${DIM}${'─'.repeat(64)}${RESET}`);
153
+ if (recipe.prerequisites.length === 0) {
154
+ lines.push(` ${DIM}No special prerequisites documented.${RESET}`);
155
+ }
156
+ else {
157
+ for (const pre of recipe.prerequisites) {
158
+ const badge = pre.evidenceLevel === 'documented_fact'
159
+ ? `${GREEN}[FACT]${RESET}`
160
+ : `${YELLOW}[INFERRED]${RESET}`;
161
+ lines.push(` • ${badge} ${pre.text}`);
162
+ }
163
+ }
164
+ lines.push('');
165
+ // Ordered Implementation Steps
166
+ lines.push(`${BOLD}Implementation Steps (${recipe.orderedSteps.length}):${RESET}`);
167
+ lines.push(`${DIM}${'─'.repeat(64)}${RESET}`);
168
+ for (const s of recipe.orderedSteps) {
169
+ let badge = `${GREEN}[FACT]${RESET}`;
170
+ if (s.evidenceLevel === 'inferred_relationship')
171
+ badge = `${YELLOW}[INFERRED]${RESET}`;
172
+ else if (s.evidenceLevel === 'missing_information')
173
+ badge = `${RED}[MISSING]${RESET}`;
174
+ lines.push(` ${BOLD}${s.step}.${RESET} ${badge} ${BOLD}${CYAN}${s.title}${RESET}`);
175
+ if (s.apiEndpoint) {
176
+ lines.push(` ${BOLD}API Endpoint:${RESET} ${BLUE}${s.apiEndpoint}${RESET}`);
177
+ }
178
+ lines.push(` ${s.description}`);
179
+ if (s.exampleCode) {
180
+ lines.push(` ${DIM}┌── example ────────────────────────────────${RESET}`);
181
+ const codeLines = s.exampleCode.split('\n').slice(0, 10);
182
+ for (const cl of codeLines) {
183
+ lines.push(` ${DIM}│${RESET} ${cl}`);
184
+ }
185
+ if (s.exampleCode.split('\n').length > 10) {
186
+ lines.push(` ${DIM}│ ... (${s.exampleCode.split('\n').length - 10} more lines)${RESET}`);
187
+ }
188
+ lines.push(` ${DIM}└──────────────────────────────────────────${RESET}`);
189
+ }
190
+ if (s.pitfalls && s.pitfalls.length > 0) {
191
+ for (const pf of s.pitfalls) {
192
+ lines.push(` ${YELLOW}⚠ ${pf}${RESET}`);
193
+ }
194
+ }
195
+ if (s.sourceUrl) {
196
+ lines.push(` ${DIM}Source: ${s.sourceUrl}${RESET}`);
197
+ }
198
+ lines.push('');
199
+ }
200
+ // Evidence-Based Validation Steps
201
+ lines.push(`${BOLD}Validation Steps (${recipe.validationSteps.length}):${RESET}`);
202
+ lines.push(`${DIM}${'─'.repeat(64)}${RESET}`);
203
+ for (const vs of recipe.validationSteps) {
204
+ let badge = `${GREEN}[FACT]${RESET}`;
205
+ if (vs.evidenceLevel === 'inferred_relationship')
206
+ badge = `${YELLOW}[INFERRED]${RESET}`;
207
+ else if (vs.evidenceLevel === 'missing_information')
208
+ badge = `${RED}[MISSING]${RESET}`;
209
+ lines.push(` ${BOLD}${vs.step}.${RESET} ${badge} ${vs.description}`);
210
+ if (vs.expectedResponse) {
211
+ lines.push(` ${DIM}Expected Response:${RESET} ${vs.expectedResponse.slice(0, 100)}`);
212
+ }
213
+ if (vs.testPattern) {
214
+ lines.push(` ${DIM}Test Pattern:${RESET} ${vs.testPattern.slice(0, 100)}`);
215
+ }
216
+ }
217
+ lines.push('');
218
+ // Sources consulted
219
+ if (recipe.sources.length > 0) {
220
+ lines.push(`${BOLD}Sources Consulted:${RESET}`);
221
+ for (const src of recipe.sources) {
222
+ lines.push(` ${DIM}• ${src}${RESET}`);
223
+ }
224
+ lines.push('');
225
+ }
226
+ lines.push(`${DIM}${'═'.repeat(64)}${RESET}`);
227
+ lines.push('');
228
+ return lines.join('\n');
229
+ }