docorbit 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/README.md +29 -15
  2. package/bin/docorbit.js +2 -2
  3. package/dist/apps/cli/src/commands/add.d.ts +7 -0
  4. package/dist/apps/cli/src/commands/add.js +35 -0
  5. package/dist/apps/cli/src/commands/api.d.ts +2 -0
  6. package/dist/apps/cli/src/commands/api.js +35 -0
  7. package/dist/apps/cli/src/commands/context.d.ts +10 -0
  8. package/dist/apps/cli/src/commands/context.js +36 -0
  9. package/dist/apps/cli/src/commands/dashboard.d.ts +8 -0
  10. package/dist/apps/cli/src/commands/dashboard.js +43 -0
  11. package/dist/apps/cli/src/commands/diff.d.ts +2 -0
  12. package/dist/apps/cli/src/commands/diff.js +29 -0
  13. package/dist/apps/cli/src/commands/evaluate.d.ts +11 -0
  14. package/dist/apps/cli/src/commands/evaluate.js +101 -0
  15. package/dist/apps/cli/src/commands/examples.d.ts +2 -0
  16. package/dist/apps/cli/src/commands/examples.js +36 -0
  17. package/dist/apps/cli/src/commands/export.d.ts +11 -0
  18. package/dist/apps/cli/src/commands/export.js +72 -0
  19. package/dist/apps/cli/src/commands/impact.d.ts +2 -0
  20. package/dist/apps/cli/src/commands/impact.js +30 -0
  21. package/dist/apps/cli/src/commands/init.d.ts +5 -0
  22. package/dist/apps/cli/src/commands/init.js +52 -0
  23. package/dist/apps/cli/src/commands/inspect.d.ts +5 -0
  24. package/dist/apps/cli/src/commands/inspect.js +24 -0
  25. package/dist/apps/cli/src/commands/mcp.d.ts +8 -0
  26. package/dist/apps/cli/src/commands/mcp.js +49 -0
  27. package/dist/apps/cli/src/commands/pitfalls.d.ts +2 -0
  28. package/dist/apps/cli/src/commands/pitfalls.js +35 -0
  29. package/dist/apps/cli/src/commands/recipes.d.ts +2 -0
  30. package/dist/apps/cli/src/commands/recipes.js +33 -0
  31. package/dist/apps/cli/src/commands/search.d.ts +11 -0
  32. package/dist/apps/cli/src/commands/search.js +36 -0
  33. package/dist/apps/cli/src/commands/update.d.ts +6 -0
  34. package/dist/apps/cli/src/commands/update.js +53 -0
  35. package/dist/apps/cli/src/commands/verify.d.ts +2 -0
  36. package/dist/apps/cli/src/commands/verify.js +44 -0
  37. package/dist/apps/cli/src/formatters/colors.d.ts +21 -0
  38. package/dist/apps/cli/src/formatters/colors.js +22 -0
  39. package/dist/apps/cli/src/formatters/inspection.d.ts +3 -0
  40. package/dist/apps/cli/src/formatters/inspection.js +88 -0
  41. package/dist/apps/cli/src/formatters/knowledge.d.ts +5 -0
  42. package/dist/apps/cli/src/formatters/knowledge.js +229 -0
  43. package/dist/apps/cli/src/formatters/retrieval.d.ts +3 -0
  44. package/dist/apps/cli/src/formatters/retrieval.js +61 -0
  45. package/{apps/cli/src/formatters/terminal.ts → dist/apps/cli/src/formatters/terminal.d.ts} +0 -1
  46. package/dist/apps/cli/src/formatters/terminal.js +5 -0
  47. package/dist/apps/cli/src/formatters/verification.d.ts +4 -0
  48. package/dist/apps/cli/src/formatters/verification.js +102 -0
  49. package/dist/apps/cli/src/index.d.ts +1 -0
  50. package/dist/apps/cli/src/index.js +376 -0
  51. package/dist/packages/core/src/dashboard/server.d.ts +33 -0
  52. package/dist/packages/core/src/dashboard/server.js +267 -0
  53. package/dist/packages/core/src/dashboard/ui.d.ts +5 -0
  54. package/{packages/core/src/dashboard/ui.ts → dist/packages/core/src/dashboard/ui.js} +2 -2
  55. package/dist/packages/core/src/implementation-service.d.ts +73 -0
  56. package/dist/packages/core/src/implementation-service.js +325 -0
  57. package/{packages/core/src/index.ts → dist/packages/core/src/index.d.ts} +0 -1
  58. package/dist/packages/core/src/index.js +6 -0
  59. package/dist/packages/core/src/inspector.d.ts +22 -0
  60. package/dist/packages/core/src/inspector.js +38 -0
  61. package/dist/packages/core/src/pipeline.d.ts +45 -0
  62. package/dist/packages/core/src/pipeline.js +246 -0
  63. package/dist/packages/crawler/src/config.d.ts +2 -0
  64. package/dist/packages/crawler/src/config.js +10 -0
  65. package/dist/packages/crawler/src/fetcher.d.ts +31 -0
  66. package/dist/packages/crawler/src/fetcher.js +139 -0
  67. package/dist/packages/crawler/src/index.js +2 -0
  68. package/dist/packages/discovery/src/index.d.ts +11 -0
  69. package/dist/packages/discovery/src/index.js +29 -0
  70. package/dist/packages/discovery/src/provider.d.ts +12 -0
  71. package/dist/packages/discovery/src/provider.js +30 -0
  72. package/dist/packages/discovery/src/providers/generic.d.ts +7 -0
  73. package/dist/packages/discovery/src/providers/generic.js +94 -0
  74. package/dist/packages/discovery/src/providers/github.d.ts +7 -0
  75. package/dist/packages/discovery/src/providers/github.js +52 -0
  76. package/dist/packages/discovery/src/providers/llms-txt.d.ts +7 -0
  77. package/dist/packages/discovery/src/providers/llms-txt.js +60 -0
  78. package/dist/packages/discovery/src/providers/markdown.d.ts +7 -0
  79. package/dist/packages/discovery/src/providers/markdown.js +38 -0
  80. package/dist/packages/discovery/src/providers/openapi.d.ts +7 -0
  81. package/dist/packages/discovery/src/providers/openapi.js +77 -0
  82. package/dist/packages/discovery/src/providers/sitemap.d.ts +7 -0
  83. package/dist/packages/discovery/src/providers/sitemap.js +53 -0
  84. package/dist/packages/discovery/src/providers/skill.d.ts +7 -0
  85. package/dist/packages/discovery/src/providers/skill.js +46 -0
  86. package/dist/packages/discovery/src/ranker.d.ts +6 -0
  87. package/dist/packages/discovery/src/ranker.js +107 -0
  88. package/dist/packages/evaluation/src/dataset.d.ts +2 -0
  89. package/dist/packages/evaluation/src/dataset.js +944 -0
  90. package/dist/packages/evaluation/src/index.js +8 -0
  91. package/dist/packages/evaluation/src/runner.d.ts +7 -0
  92. package/dist/packages/evaluation/src/runner.js +196 -0
  93. package/dist/packages/evaluation/src/strategies/context7-runner.d.ts +24 -0
  94. package/dist/packages/evaluation/src/strategies/context7-runner.js +229 -0
  95. package/dist/packages/evaluation/src/strategies/docorbit-runner.d.ts +5 -0
  96. package/dist/packages/evaluation/src/strategies/docorbit-runner.js +210 -0
  97. package/dist/packages/evaluation/src/strategies/firecrawl-runner.d.ts +24 -0
  98. package/dist/packages/evaluation/src/strategies/firecrawl-runner.js +151 -0
  99. package/dist/packages/evaluation/src/strategies/web-search-runner.d.ts +32 -0
  100. package/dist/packages/evaluation/src/strategies/web-search-runner.js +161 -0
  101. package/dist/packages/evaluation/src/types.d.ts +15 -0
  102. package/dist/packages/evaluation/src/types.js +1 -0
  103. package/dist/packages/evaluation/src/version-matcher.d.ts +11 -0
  104. package/dist/packages/evaluation/src/version-matcher.js +61 -0
  105. package/dist/packages/export/src/agents-md.d.ts +19 -0
  106. package/dist/packages/export/src/agents-md.js +170 -0
  107. package/dist/packages/export/src/claude-md.d.ts +17 -0
  108. package/dist/packages/export/src/claude-md.js +118 -0
  109. package/dist/packages/export/src/docs-map.d.ts +14 -0
  110. package/dist/packages/export/src/docs-map.js +118 -0
  111. package/dist/packages/export/src/index.js +6 -0
  112. package/dist/packages/export/src/llms-txt.d.ts +15 -0
  113. package/dist/packages/export/src/llms-txt.js +73 -0
  114. package/dist/packages/export/src/service.d.ts +23 -0
  115. package/dist/packages/export/src/service.js +210 -0
  116. package/dist/packages/export/src/skill-md.d.ts +14 -0
  117. package/dist/packages/export/src/skill-md.js +107 -0
  118. package/{packages/mcp/src/index.ts → dist/packages/mcp/src/index.d.ts} +2 -35
  119. package/dist/packages/mcp/src/index.js +6 -0
  120. package/dist/packages/mcp/src/resources/index.d.ts +12 -0
  121. package/dist/packages/mcp/src/resources/index.js +165 -0
  122. package/dist/packages/mcp/src/server.d.ts +30 -0
  123. package/dist/packages/mcp/src/server.js +243 -0
  124. package/dist/packages/mcp/src/tools/analyze-impact.d.ts +6 -0
  125. package/dist/packages/mcp/src/tools/analyze-impact.js +64 -0
  126. package/dist/packages/mcp/src/tools/check-api.d.ts +6 -0
  127. package/dist/packages/mcp/src/tools/check-api.js +74 -0
  128. package/dist/packages/mcp/src/tools/diff-docs.d.ts +6 -0
  129. package/dist/packages/mcp/src/tools/diff-docs.js +58 -0
  130. package/dist/packages/mcp/src/tools/export-context.d.ts +6 -0
  131. package/dist/packages/mcp/src/tools/export-context.js +61 -0
  132. package/dist/packages/mcp/src/tools/find-api.d.ts +6 -0
  133. package/dist/packages/mcp/src/tools/find-api.js +91 -0
  134. package/dist/packages/mcp/src/tools/find-example.d.ts +6 -0
  135. package/dist/packages/mcp/src/tools/find-example.js +92 -0
  136. package/dist/packages/mcp/src/tools/find-pitfall.d.ts +6 -0
  137. package/dist/packages/mcp/src/tools/find-pitfall.js +85 -0
  138. package/dist/packages/mcp/src/tools/find-recipe.d.ts +6 -0
  139. package/dist/packages/mcp/src/tools/find-recipe.js +89 -0
  140. package/dist/packages/mcp/src/tools/get-doc.d.ts +6 -0
  141. package/dist/packages/mcp/src/tools/get-doc.js +118 -0
  142. package/dist/packages/mcp/src/tools/get-docs-map.d.ts +6 -0
  143. package/dist/packages/mcp/src/tools/get-docs-map.js +54 -0
  144. package/dist/packages/mcp/src/tools/get-version.d.ts +6 -0
  145. package/dist/packages/mcp/src/tools/get-version.js +104 -0
  146. package/dist/packages/mcp/src/tools/implementation-context.d.ts +6 -0
  147. package/dist/packages/mcp/src/tools/implementation-context.js +102 -0
  148. package/dist/packages/mcp/src/tools/index.d.ts +19 -0
  149. package/dist/packages/mcp/src/tools/index.js +41 -0
  150. package/dist/packages/mcp/src/tools/ingest-doc.d.ts +6 -0
  151. package/dist/packages/mcp/src/tools/ingest-doc.js +264 -0
  152. package/dist/packages/mcp/src/tools/list-sources.d.ts +6 -0
  153. package/dist/packages/mcp/src/tools/list-sources.js +76 -0
  154. package/dist/packages/mcp/src/tools/search-docs.d.ts +6 -0
  155. package/dist/packages/mcp/src/tools/search-docs.js +113 -0
  156. package/dist/packages/mcp/src/tools/types.d.ts +22 -0
  157. package/dist/packages/mcp/src/tools/types.js +1 -0
  158. package/dist/packages/mcp/src/transports/http.d.ts +31 -0
  159. package/dist/packages/mcp/src/transports/http.js +215 -0
  160. package/dist/packages/mcp/src/transports/stdio.d.ts +22 -0
  161. package/dist/packages/mcp/src/transports/stdio.js +86 -0
  162. package/{packages/mcp/src/transports/types.ts → dist/packages/mcp/src/transports/types.d.ts} +2 -3
  163. package/dist/packages/mcp/src/transports/types.js +1 -0
  164. package/dist/packages/mcp/src/types.d.ts +89 -0
  165. package/dist/packages/mcp/src/types.js +7 -0
  166. package/dist/packages/normalizer/src/example-indexer.d.ts +5 -0
  167. package/dist/packages/normalizer/src/example-indexer.js +200 -0
  168. package/dist/packages/normalizer/src/html.d.ts +13 -0
  169. package/dist/packages/normalizer/src/html.js +221 -0
  170. package/{packages/normalizer/src/index.ts → dist/packages/normalizer/src/index.d.ts} +0 -1
  171. package/dist/packages/normalizer/src/index.js +7 -0
  172. package/dist/packages/normalizer/src/llms.d.ts +3 -0
  173. package/dist/packages/normalizer/src/llms.js +71 -0
  174. package/dist/packages/normalizer/src/openapi/endpoint-parser.d.ts +11 -0
  175. package/dist/packages/normalizer/src/openapi/endpoint-parser.js +357 -0
  176. package/dist/packages/normalizer/src/openapi/schema-resolver.d.ts +10 -0
  177. package/dist/packages/normalizer/src/openapi/schema-resolver.js +82 -0
  178. package/dist/packages/normalizer/src/openapi.js +2 -0
  179. package/dist/packages/normalizer/src/page.d.ts +13 -0
  180. package/dist/packages/normalizer/src/page.js +150 -0
  181. package/dist/packages/normalizer/src/pitfall-extractor.d.ts +6 -0
  182. package/dist/packages/normalizer/src/pitfall-extractor.js +153 -0
  183. package/dist/packages/normalizer/src/slicer.d.ts +30 -0
  184. package/dist/packages/normalizer/src/slicer.js +360 -0
  185. package/dist/packages/retrieval/src/engine.d.ts +17 -0
  186. package/dist/packages/retrieval/src/engine.js +93 -0
  187. package/{packages/retrieval/src/index.ts → dist/packages/retrieval/src/index.d.ts} +0 -1
  188. package/dist/packages/retrieval/src/index.js +6 -0
  189. package/dist/packages/retrieval/src/intent.d.ts +6 -0
  190. package/dist/packages/retrieval/src/intent.js +39 -0
  191. package/dist/packages/retrieval/src/packer.d.ts +2 -0
  192. package/dist/packages/retrieval/src/packer.js +108 -0
  193. package/dist/packages/retrieval/src/recipe-engine.d.ts +18 -0
  194. package/dist/packages/retrieval/src/recipe-engine.js +265 -0
  195. package/dist/packages/retrieval/src/scorer.d.ts +13 -0
  196. package/dist/packages/retrieval/src/scorer.js +110 -0
  197. package/dist/packages/retrieval/src/weights.d.ts +3 -0
  198. package/dist/packages/retrieval/src/weights.js +28 -0
  199. package/dist/packages/security/src/annotations.d.ts +10 -0
  200. package/dist/packages/security/src/annotations.js +100 -0
  201. package/dist/packages/security/src/index.js +2 -0
  202. package/dist/packages/security/src/ssrf.d.ts +17 -0
  203. package/dist/packages/security/src/ssrf.js +132 -0
  204. package/dist/packages/shared/src/errors.d.ts +22 -0
  205. package/dist/packages/shared/src/errors.js +44 -0
  206. package/dist/packages/shared/src/hashing.d.ts +3 -0
  207. package/dist/packages/shared/src/hashing.js +21 -0
  208. package/dist/packages/shared/src/index.js +3 -0
  209. package/dist/packages/shared/src/types.d.ts +715 -0
  210. package/dist/packages/shared/src/types.js +1 -0
  211. package/dist/packages/storage/src/db.d.ts +11 -0
  212. package/dist/packages/storage/src/db.js +128 -0
  213. package/dist/packages/storage/src/index.js +10 -0
  214. package/dist/packages/storage/src/interfaces.d.ts +83 -0
  215. package/dist/packages/storage/src/interfaces.js +1 -0
  216. package/dist/packages/storage/src/repositories/api-repository.d.ts +16 -0
  217. package/dist/packages/storage/src/repositories/api-repository.js +169 -0
  218. package/dist/packages/storage/src/repositories/chunk-repository.d.ts +32 -0
  219. package/dist/packages/storage/src/repositories/chunk-repository.js +250 -0
  220. package/dist/packages/storage/src/repositories/example-repository.d.ts +16 -0
  221. package/dist/packages/storage/src/repositories/example-repository.js +158 -0
  222. package/dist/packages/storage/src/repositories/page-repository.d.ts +16 -0
  223. package/dist/packages/storage/src/repositories/page-repository.js +161 -0
  224. package/dist/packages/storage/src/repositories/pitfall-repository.d.ts +15 -0
  225. package/dist/packages/storage/src/repositories/pitfall-repository.js +144 -0
  226. package/dist/packages/storage/src/repositories/source-repository.d.ts +33 -0
  227. package/dist/packages/storage/src/repositories/source-repository.js +153 -0
  228. package/dist/packages/storage/src/repository.d.ts +92 -0
  229. package/dist/packages/storage/src/repository.js +157 -0
  230. package/dist/packages/storage/src/schema.d.ts +2 -0
  231. package/{packages/storage/src/schema.ts → dist/packages/storage/src/schema.js} +0 -3
  232. package/dist/packages/storage/src/search-tokens.d.ts +6 -0
  233. package/dist/packages/storage/src/search-tokens.js +26 -0
  234. package/dist/packages/verification/src/diff-engine.d.ts +18 -0
  235. package/dist/packages/verification/src/diff-engine.js +218 -0
  236. package/dist/packages/verification/src/extractor.d.ts +29 -0
  237. package/dist/packages/verification/src/extractor.js +302 -0
  238. package/dist/packages/verification/src/impact-scanner.d.ts +9 -0
  239. package/dist/packages/verification/src/impact-scanner.js +181 -0
  240. package/dist/packages/verification/src/index.js +5 -0
  241. package/dist/packages/verification/src/services.d.ts +55 -0
  242. package/dist/packages/verification/src/services.js +189 -0
  243. package/dist/packages/verification/src/verifier.d.ts +15 -0
  244. package/dist/packages/verification/src/verifier.js +315 -0
  245. package/dist/packages/workspace/src/detector.d.ts +7 -0
  246. package/dist/packages/workspace/src/detector.js +117 -0
  247. package/dist/packages/workspace/src/ecosystems/cargo.d.ts +10 -0
  248. package/dist/packages/workspace/src/ecosystems/cargo.js +69 -0
  249. package/dist/packages/workspace/src/ecosystems/composer.d.ts +7 -0
  250. package/dist/packages/workspace/src/ecosystems/composer.js +40 -0
  251. package/dist/packages/workspace/src/ecosystems/go.d.ts +7 -0
  252. package/dist/packages/workspace/src/ecosystems/go.js +49 -0
  253. package/{packages/workspace/src/ecosystems/index.ts → dist/packages/workspace/src/ecosystems/index.d.ts} +2 -24
  254. package/dist/packages/workspace/src/ecosystems/index.js +21 -0
  255. package/dist/packages/workspace/src/ecosystems/maven.d.ts +7 -0
  256. package/dist/packages/workspace/src/ecosystems/maven.js +28 -0
  257. package/dist/packages/workspace/src/ecosystems/npm.d.ts +10 -0
  258. package/dist/packages/workspace/src/ecosystems/npm.js +73 -0
  259. package/dist/packages/workspace/src/ecosystems/pub.d.ts +7 -0
  260. package/dist/packages/workspace/src/ecosystems/pub.js +34 -0
  261. package/dist/packages/workspace/src/ecosystems/pypi.d.ts +9 -0
  262. package/dist/packages/workspace/src/ecosystems/pypi.js +94 -0
  263. package/dist/packages/workspace/src/ecosystems/rubygems.d.ts +7 -0
  264. package/dist/packages/workspace/src/ecosystems/rubygems.js +25 -0
  265. package/dist/packages/workspace/src/ecosystems/types.d.ts +9 -0
  266. package/dist/packages/workspace/src/ecosystems/types.js +1 -0
  267. package/dist/packages/workspace/src/index.js +5 -0
  268. package/dist/packages/workspace/src/lockfile.d.ts +21 -0
  269. package/dist/packages/workspace/src/lockfile.js +153 -0
  270. package/dist/packages/workspace/src/resolver.d.ts +39 -0
  271. package/dist/packages/workspace/src/resolver.js +164 -0
  272. package/dist/packages/workspace/src/semver.d.ts +33 -0
  273. package/dist/packages/workspace/src/semver.js +235 -0
  274. package/package.json +13 -9
  275. package/apps/cli/bin/docorbit.js +0 -8
  276. package/apps/cli/src/commands/add.ts +0 -44
  277. package/apps/cli/src/commands/api.ts +0 -38
  278. package/apps/cli/src/commands/context.ts +0 -47
  279. package/apps/cli/src/commands/dashboard.ts +0 -55
  280. package/apps/cli/src/commands/diff.ts +0 -30
  281. package/apps/cli/src/commands/evaluate.ts +0 -133
  282. package/apps/cli/src/commands/examples.ts +0 -39
  283. package/apps/cli/src/commands/export.ts +0 -89
  284. package/apps/cli/src/commands/impact.ts +0 -31
  285. package/apps/cli/src/commands/init.ts +0 -69
  286. package/apps/cli/src/commands/inspect.ts +0 -30
  287. package/apps/cli/src/commands/mcp.ts +0 -72
  288. package/apps/cli/src/commands/pitfalls.ts +0 -38
  289. package/apps/cli/src/commands/recipes.ts +0 -35
  290. package/apps/cli/src/commands/search.ts +0 -48
  291. package/apps/cli/src/commands/update.ts +0 -73
  292. package/apps/cli/src/commands/verify.ts +0 -48
  293. package/apps/cli/src/formatters/colors.ts +0 -23
  294. package/apps/cli/src/formatters/inspection.ts +0 -102
  295. package/apps/cli/src/formatters/knowledge.ts +0 -272
  296. package/apps/cli/src/formatters/retrieval.ts +0 -74
  297. package/apps/cli/src/formatters/verification.ts +0 -126
  298. package/apps/cli/src/index.ts +0 -409
  299. package/packages/core/src/dashboard/server.ts +0 -314
  300. package/packages/core/src/implementation-service.ts +0 -451
  301. package/packages/core/src/inspector.ts +0 -71
  302. package/packages/core/src/pipeline.ts +0 -331
  303. package/packages/crawler/src/config.ts +0 -12
  304. package/packages/crawler/src/fetcher.ts +0 -185
  305. package/packages/discovery/src/index.ts +0 -31
  306. package/packages/discovery/src/provider.ts +0 -47
  307. package/packages/discovery/src/providers/generic.ts +0 -98
  308. package/packages/discovery/src/providers/github.ts +0 -61
  309. package/packages/discovery/src/providers/llms-txt.ts +0 -73
  310. package/packages/discovery/src/providers/markdown.ts +0 -48
  311. package/packages/discovery/src/providers/openapi.ts +0 -91
  312. package/packages/discovery/src/providers/sitemap.ts +0 -62
  313. package/packages/discovery/src/providers/skill.ts +0 -54
  314. package/packages/discovery/src/ranker.ts +0 -123
  315. package/packages/evaluation/src/dataset.ts +0 -963
  316. package/packages/evaluation/src/runner.ts +0 -241
  317. package/packages/evaluation/src/strategies/context7-runner.ts +0 -269
  318. package/packages/evaluation/src/strategies/docorbit-runner.ts +0 -228
  319. package/packages/evaluation/src/strategies/firecrawl-runner.ts +0 -172
  320. package/packages/evaluation/src/strategies/web-search-runner.ts +0 -194
  321. package/packages/evaluation/src/types.ts +0 -34
  322. package/packages/evaluation/src/version-matcher.ts +0 -73
  323. package/packages/export/src/agents-md.ts +0 -200
  324. package/packages/export/src/claude-md.ts +0 -141
  325. package/packages/export/src/docs-map.ts +0 -150
  326. package/packages/export/src/llms-txt.ts +0 -96
  327. package/packages/export/src/service.ts +0 -250
  328. package/packages/export/src/skill-md.ts +0 -128
  329. package/packages/mcp/src/resources/index.ts +0 -189
  330. package/packages/mcp/src/server.ts +0 -278
  331. package/packages/mcp/src/tools/analyze-impact.ts +0 -74
  332. package/packages/mcp/src/tools/check-api.ts +0 -86
  333. package/packages/mcp/src/tools/diff-docs.ts +0 -68
  334. package/packages/mcp/src/tools/export-context.ts +0 -73
  335. package/packages/mcp/src/tools/find-api.ts +0 -99
  336. package/packages/mcp/src/tools/find-example.ts +0 -100
  337. package/packages/mcp/src/tools/find-pitfall.ts +0 -94
  338. package/packages/mcp/src/tools/find-recipe.ts +0 -98
  339. package/packages/mcp/src/tools/get-doc.ts +0 -130
  340. package/packages/mcp/src/tools/get-docs-map.ts +0 -64
  341. package/packages/mcp/src/tools/get-version.ts +0 -118
  342. package/packages/mcp/src/tools/implementation-context.ts +0 -88
  343. package/packages/mcp/src/tools/index.ts +0 -59
  344. package/packages/mcp/src/tools/list-sources.ts +0 -85
  345. package/packages/mcp/src/tools/search-docs.ts +0 -123
  346. package/packages/mcp/src/tools/types.ts +0 -28
  347. package/packages/mcp/src/transports/http.ts +0 -256
  348. package/packages/mcp/src/transports/stdio.ts +0 -105
  349. package/packages/mcp/src/types.ts +0 -102
  350. package/packages/normalizer/src/example-indexer.ts +0 -240
  351. package/packages/normalizer/src/html.ts +0 -253
  352. package/packages/normalizer/src/llms.ts +0 -83
  353. package/packages/normalizer/src/openapi/endpoint-parser.ts +0 -406
  354. package/packages/normalizer/src/openapi/schema-resolver.ts +0 -111
  355. package/packages/normalizer/src/page.ts +0 -184
  356. package/packages/normalizer/src/pitfall-extractor.ts +0 -190
  357. package/packages/normalizer/src/slicer.ts +0 -455
  358. package/packages/retrieval/src/engine.ts +0 -120
  359. package/packages/retrieval/src/intent.ts +0 -43
  360. package/packages/retrieval/src/packer.ts +0 -145
  361. package/packages/retrieval/src/recipe-engine.ts +0 -313
  362. package/packages/retrieval/src/scorer.ts +0 -139
  363. package/packages/retrieval/src/weights.ts +0 -31
  364. package/packages/security/src/annotations.ts +0 -112
  365. package/packages/security/src/ssrf.ts +0 -153
  366. package/packages/shared/src/errors.ts +0 -53
  367. package/packages/shared/src/hashing.ts +0 -23
  368. package/packages/shared/src/types.ts +0 -881
  369. package/packages/storage/src/db.ts +0 -72
  370. package/packages/storage/src/interfaces.ts +0 -115
  371. package/packages/storage/src/repositories/api-repository.ts +0 -219
  372. package/packages/storage/src/repositories/chunk-repository.ts +0 -316
  373. package/packages/storage/src/repositories/example-repository.ts +0 -206
  374. package/packages/storage/src/repositories/page-repository.ts +0 -205
  375. package/packages/storage/src/repositories/pitfall-repository.ts +0 -188
  376. package/packages/storage/src/repositories/source-repository.ts +0 -205
  377. package/packages/storage/src/repository.ts +0 -256
  378. package/packages/storage/src/search-tokens.ts +0 -28
  379. package/packages/verification/src/diff-engine.ts +0 -258
  380. package/packages/verification/src/extractor.ts +0 -339
  381. package/packages/verification/src/impact-scanner.ts +0 -203
  382. package/packages/verification/src/services.ts +0 -238
  383. package/packages/verification/src/verifier.ts +0 -375
  384. package/packages/workspace/src/detector.ts +0 -143
  385. package/packages/workspace/src/ecosystems/cargo.ts +0 -84
  386. package/packages/workspace/src/ecosystems/composer.ts +0 -42
  387. package/packages/workspace/src/ecosystems/go.ts +0 -54
  388. package/packages/workspace/src/ecosystems/maven.ts +0 -34
  389. package/packages/workspace/src/ecosystems/npm.ts +0 -83
  390. package/packages/workspace/src/ecosystems/pub.ts +0 -40
  391. package/packages/workspace/src/ecosystems/pypi.ts +0 -100
  392. package/packages/workspace/src/ecosystems/rubygems.ts +0 -30
  393. package/packages/workspace/src/ecosystems/types.ts +0 -18
  394. package/packages/workspace/src/lockfile.ts +0 -194
  395. package/packages/workspace/src/resolver.ts +0 -234
  396. package/packages/workspace/src/semver.ts +0 -259
  397. /package/{packages/crawler/src/index.ts → dist/packages/crawler/src/index.d.ts} +0 -0
  398. /package/{packages/evaluation/src/index.ts → dist/packages/evaluation/src/index.d.ts} +0 -0
  399. /package/{packages/export/src/index.ts → dist/packages/export/src/index.d.ts} +0 -0
  400. /package/{packages/normalizer/src/openapi.ts → dist/packages/normalizer/src/openapi.d.ts} +0 -0
  401. /package/{packages/security/src/index.ts → dist/packages/security/src/index.d.ts} +0 -0
  402. /package/{packages/shared/src/index.ts → dist/packages/shared/src/index.d.ts} +0 -0
  403. /package/{packages/storage/src/index.ts → dist/packages/storage/src/index.d.ts} +0 -0
  404. /package/{packages/verification/src/index.ts → dist/packages/verification/src/index.d.ts} +0 -0
  405. /package/{packages/workspace/src/index.ts → dist/packages/workspace/src/index.d.ts} +0 -0
@@ -1,256 +0,0 @@
1
- import type {
2
- DiscoveredSource,
3
- NormalizedPage,
4
- DocumentChunk,
5
- ChunkCode,
6
- SymbolReference,
7
- ChunkRelationship,
8
- ChunkType,
9
- ApiEndpoint,
10
- IndexedExample,
11
- Pitfall,
12
- PitfallKind,
13
- } from '../../shared/src/index.ts';
14
- import type { DocOrbitDb } from './db.ts';
15
- import type {
16
- Snapshot,
17
- ISourceRepository,
18
- IPageRepository,
19
- IChunkRepository,
20
- IApiRepository,
21
- IExampleRepository,
22
- IPitfallRepository,
23
- } from './interfaces.ts';
24
- import { SourceRepository } from './repositories/source-repository.ts';
25
- import { PageRepository } from './repositories/page-repository.ts';
26
- import { ChunkRepository } from './repositories/chunk-repository.ts';
27
- import { ApiRepository } from './repositories/api-repository.ts';
28
- import { ExampleRepository } from './repositories/example-repository.ts';
29
- import { PitfallRepository } from './repositories/pitfall-repository.ts';
30
-
31
- export type { Snapshot } from './interfaces.ts';
32
-
33
- /**
34
- * Unified Facade for the DocOrbit database storage layer.
35
- * Delegates domain responsibilities to specialized sub-repositories:
36
- * - sources: ISourceRepository (sources, snapshots, snapshot-page links)
37
- * - pages: IPageRepository (normalized pages, page links, page FTS)
38
- * - chunks: IChunkRepository (document chunks, code, symbols, relationships, chunk FTS)
39
- * - apis: IApiRepository (API endpoints, OpenAPI schemas, endpoint FTS)
40
- * - examples: IExampleRepository (code examples, example FTS)
41
- * - pitfalls: IPitfallRepository (pitfalls, gotchas, pitfall FTS)
42
- */
43
- export class DocOrbitRepository
44
- implements
45
- ISourceRepository,
46
- IPageRepository,
47
- IChunkRepository,
48
- IApiRepository,
49
- IExampleRepository,
50
- IPitfallRepository
51
- {
52
- public readonly sources: SourceRepository;
53
- public readonly pages: PageRepository;
54
- public readonly chunks: ChunkRepository;
55
- public readonly apis: ApiRepository;
56
- public readonly examples: ExampleRepository;
57
- public readonly pitfalls: PitfallRepository;
58
-
59
- public readonly db: DocOrbitDb;
60
-
61
- constructor(db: DocOrbitDb) {
62
- this.db = db;
63
- this.pages = new PageRepository(db);
64
- this.sources = new SourceRepository(db, row => this.pages.hydratePage(row));
65
- this.chunks = new ChunkRepository(db);
66
- this.apis = new ApiRepository(db);
67
- this.examples = new ExampleRepository(db);
68
- this.pitfalls = new PitfallRepository(db);
69
- }
70
-
71
- // --- ISourceRepository Delegations ---
72
-
73
- saveSource(source: DiscoveredSource): string {
74
- return this.sources.saveSource(source);
75
- }
76
-
77
- getSource(id: string): DiscoveredSource | null {
78
- return this.sources.getSource(id);
79
- }
80
-
81
- getSourceByUrl(url: string): DiscoveredSource | null {
82
- return this.sources.getSourceByUrl(url);
83
- }
84
-
85
- listSources(): DiscoveredSource[] {
86
- return this.sources.listSources();
87
- }
88
-
89
- createSnapshot(sourceId: string, metadata?: Record<string, unknown>, docVersion?: string): string {
90
- return this.sources.createSnapshot(sourceId, metadata, docVersion);
91
- }
92
-
93
- saveSnapshot(snapshot: Snapshot): void {
94
- this.sources.saveSnapshot(snapshot);
95
- }
96
-
97
- getSnapshot(id: string): Snapshot | null {
98
- return this.sources.getSnapshot(id);
99
- }
100
-
101
- getLatestSnapshot(sourceId: string): Snapshot | null {
102
- return this.sources.getLatestSnapshot(sourceId);
103
- }
104
-
105
- listSnapshots(sourceId: string): Snapshot[] {
106
- return this.sources.listSnapshots(sourceId);
107
- }
108
-
109
- linkSnapshotPages(snapshotId: string, pageIds: string[]): void {
110
- this.sources.linkSnapshotPages(snapshotId, pageIds);
111
- }
112
-
113
- getSnapshotPages(snapshotId: string): NormalizedPage[] {
114
- return this.sources.getSnapshotPages(snapshotId);
115
- }
116
-
117
- // --- IPageRepository Delegations ---
118
-
119
- savePage(page: NormalizedPage): void {
120
- this.pages.savePage(page);
121
- }
122
-
123
- getPage(id: string): NormalizedPage | null {
124
- return this.pages.getPage(id);
125
- }
126
-
127
- getPageByUrl(normalizedUrl: string): NormalizedPage | null {
128
- return this.pages.getPageByUrl(normalizedUrl);
129
- }
130
-
131
- listPages(limit?: number, offset?: number): NormalizedPage[] {
132
- return this.pages.listPages(limit, offset);
133
- }
134
-
135
- countPages(sourceId?: string): number {
136
- return this.pages.countPages(sourceId);
137
- }
138
-
139
- savePageLinks(pageId: string, targetUrls: string[]): void {
140
- this.pages.savePageLinks(pageId, targetUrls);
141
- }
142
-
143
- getPageLinks(pageId: string): string[] {
144
- return this.pages.getPageLinks(pageId);
145
- }
146
-
147
- searchPagesFts(query: string, limit: number = 10): NormalizedPage[] {
148
- return this.pages.searchPagesFts(query, limit);
149
- }
150
-
151
- // --- IChunkRepository Delegations ---
152
-
153
- saveChunks(
154
- chunks: DocumentChunk[],
155
- relationships: ChunkRelationship[] = [],
156
- codeSnippets: ChunkCode[] = [],
157
- symbols: SymbolReference[] = []
158
- ): void {
159
- this.chunks.saveChunks(chunks, relationships, codeSnippets, symbols);
160
- }
161
-
162
- getChunk(id: string): DocumentChunk | null {
163
- return this.chunks.getChunk(id);
164
- }
165
-
166
- getChunksByPage(pageId: string): DocumentChunk[] {
167
- return this.chunks.getChunksByPage(pageId);
168
- }
169
-
170
- getChunksBySnapshot(snapshotId: string): DocumentChunk[] {
171
- return this.chunks.getChunksBySnapshot(snapshotId);
172
- }
173
-
174
- getChunksByVersion(docVersion: string): DocumentChunk[] {
175
- return this.chunks.getChunksByVersion(docVersion);
176
- }
177
-
178
- getChunkCode(chunkId: string): ChunkCode[] {
179
- return this.chunks.getChunkCode(chunkId);
180
- }
181
-
182
- getChunkSymbols(chunkId: string): SymbolReference[] {
183
- return this.chunks.getChunkSymbols(chunkId);
184
- }
185
-
186
- getChunkRelationships(chunkId: string): ChunkRelationship[] {
187
- return this.chunks.getChunkRelationships(chunkId);
188
- }
189
-
190
- countChunks(snapshotId?: string): number {
191
- return this.chunks.countChunks(snapshotId);
192
- }
193
-
194
- searchChunksFts(
195
- query: string,
196
- options: { limit?: number; snapshotId?: string; chunkType?: ChunkType; docVersion?: string } = {}
197
- ): Array<{ chunk: DocumentChunk; ftsRank: number; symbols: SymbolReference[]; codeSnippets: ChunkCode[] }> {
198
- return this.chunks.searchChunksFts(query, options);
199
- }
200
-
201
- // --- IApiRepository Delegations ---
202
-
203
- saveApiEndpoints(endpoints: ApiEndpoint[]): void {
204
- this.apis.saveApiEndpoints(endpoints);
205
- }
206
-
207
- getApiEndpoint(id: string): ApiEndpoint | null {
208
- return this.apis.getApiEndpoint(id);
209
- }
210
-
211
- getApiEndpointsBySnapshot(snapshotId: string): ApiEndpoint[] {
212
- return this.apis.getApiEndpointsBySnapshot(snapshotId);
213
- }
214
-
215
- searchApiEndpoints(
216
- query: string,
217
- options: { method?: string; docVersion?: string; limit?: number } = {}
218
- ): ApiEndpoint[] {
219
- return this.apis.searchApiEndpoints(query, options);
220
- }
221
-
222
- // --- IExampleRepository Delegations ---
223
-
224
- saveIndexedExamples(examples: IndexedExample[]): void {
225
- this.examples.saveIndexedExamples(examples);
226
- }
227
-
228
- getIndexedExamplesBySnapshot(snapshotId: string): IndexedExample[] {
229
- return this.examples.getIndexedExamplesBySnapshot(snapshotId);
230
- }
231
-
232
- searchIndexedExamples(
233
- query: string,
234
- options: { language?: string; framework?: string; docVersion?: string; limit?: number } = {}
235
- ): IndexedExample[] {
236
- return this.examples.searchIndexedExamples(query, options);
237
- }
238
-
239
- // --- IPitfallRepository Delegations ---
240
-
241
- savePitfalls(pitfalls: Pitfall[]): void {
242
- this.pitfalls.savePitfalls(pitfalls);
243
- }
244
-
245
- getPitfallsBySnapshot(snapshotId: string): Pitfall[] {
246
- return this.pitfalls.getPitfallsBySnapshot(snapshotId);
247
- }
248
-
249
- searchPitfalls(
250
- query: string,
251
- options: { kind?: PitfallKind; docVersion?: string; limit?: number } = {}
252
- ): Pitfall[] {
253
- return this.pitfalls.searchPitfalls(query, options);
254
- }
255
- }
256
-
@@ -1,28 +0,0 @@
1
- export const SEARCH_STOPWORDS = new Set([
2
- 'a', 'about', 'above', 'after', 'again', 'against', 'all', 'am', 'an', 'and', 'any', 'are',
3
- 'as', 'at', 'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by',
4
- 'can', 'did', 'do', 'does', 'doing', 'down', 'during', 'each', 'few', 'for', 'from',
5
- 'further', 'had', 'has', 'have', 'having', 'he', 'her', 'here', 'hers', 'herself', 'him',
6
- 'himself', 'his', 'how', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'itself', 'just',
7
- 'me', 'more', 'most', 'my', 'myself', 'no', 'nor', 'not', 'now', 'of', 'off', 'on',
8
- 'once', 'only', 'or', 'other', 'our', 'ours', 'ourselves', 'out', 'over', 'own', 'same',
9
- 'she', 'should', 'so', 'some', 'such', 'than', 'that', 'the', 'their', 'theirs', 'them',
10
- 'themselves', 'then', 'there', 'these', 'they', 'this', 'those', 'through', 'to', 'too',
11
- 'under', 'until', 'up', 'very', 'was', 'we', 'were', 'what', 'when', 'where', 'which',
12
- 'while', 'who', 'whom', 'why', 'with', 'you', 'your', 'yours', 'yourself', 'yourselves'
13
- ]);
14
-
15
- /**
16
- * Extracts substantive tokens from query text, filtering out common stopwords
17
- * and short words (< 3 chars), while falling back to short words if query has no substantive words.
18
- */
19
- export function extractSearchTokens(text: string): string[] {
20
- const words = text
21
- .replace(/[^\w\s-]/g, ' ')
22
- .trim()
23
- .split(/\s+/)
24
- .filter(w => w.length > 0);
25
-
26
- const substantive = words.filter(w => w.length >= 3 && !SEARCH_STOPWORDS.has(w.toLowerCase()));
27
- return substantive.length > 0 ? substantive : words.filter(w => w.length >= 2);
28
- }
@@ -1,258 +0,0 @@
1
- import type {
2
- ApiEndpoint,
3
- DocDiffResult,
4
- EndpointDiffItem,
5
- Pitfall,
6
- } from '../../shared/src/index.ts';
7
- import type { DocOrbitRepository } from '../../storage/src/index.ts';
8
-
9
- export interface DiffOptions {
10
- fromVersion?: string;
11
- toVersion?: string;
12
- fromSnapshotId?: string;
13
- toSnapshotId?: string;
14
- sourceId?: string;
15
- }
16
-
17
- export class DocDiffEngine {
18
- private repo: DocOrbitRepository;
19
-
20
- constructor(repo: DocOrbitRepository) {
21
- this.repo = repo;
22
- }
23
-
24
- diff(options: DiffOptions): DocDiffResult {
25
- const fromEndpoints = this.getEndpoints(options.fromSnapshotId, options.fromVersion);
26
- const toEndpoints = this.getEndpoints(options.toSnapshotId, options.toVersion);
27
-
28
- const fromPitfalls = this.getPitfalls(options.fromSnapshotId, options.fromVersion);
29
- const toPitfalls = this.getPitfalls(options.toSnapshotId, options.toVersion);
30
-
31
- // 1. Compute Endpoint Diffs
32
- const apiChanges: EndpointDiffItem[] = [];
33
- const fromMap = new Map<string, ApiEndpoint>();
34
- const toMap = new Map<string, ApiEndpoint>();
35
-
36
- for (const ep of fromEndpoints) {
37
- fromMap.set(`${ep.method.toUpperCase()} ${ep.path}`, ep);
38
- }
39
- for (const ep of toEndpoints) {
40
- toMap.set(`${ep.method.toUpperCase()} ${ep.path}`, ep);
41
- }
42
-
43
- let addedCount = 0;
44
- let removedCount = 0;
45
- let modifiedCount = 0;
46
- let deprecatedCount = 0;
47
-
48
- // Check additions, deprecations, and modifications in 'to'
49
- for (const [key, toEp] of toMap.entries()) {
50
- const fromEp = fromMap.get(key);
51
-
52
- if (!fromEp) {
53
- // Newly added endpoint
54
- apiChanges.push({
55
- path: toEp.path,
56
- method: toEp.method,
57
- changeType: 'added',
58
- endpoint: toEp,
59
- });
60
- addedCount++;
61
- } else {
62
- // Existed previously: check deprecation status
63
- if (toEp.deprecated && !fromEp.deprecated) {
64
- apiChanges.push({
65
- path: toEp.path,
66
- method: toEp.method,
67
- changeType: 'deprecated',
68
- endpoint: toEp,
69
- previousEndpoint: fromEp,
70
- });
71
- deprecatedCount++;
72
- }
73
-
74
- // Check semantic parameter and schema modifications
75
- const changes = this.detectEndpointModifications(fromEp, toEp);
76
- if (changes.length > 0) {
77
- apiChanges.push({
78
- path: toEp.path,
79
- method: toEp.method,
80
- changeType: 'modified',
81
- changes,
82
- endpoint: toEp,
83
- previousEndpoint: fromEp,
84
- });
85
- modifiedCount++;
86
- }
87
- }
88
- }
89
-
90
- // Check removals from 'from'
91
- for (const [key, fromEp] of fromMap.entries()) {
92
- if (!toMap.has(key)) {
93
- apiChanges.push({
94
- path: fromEp.path,
95
- method: fromEp.method,
96
- changeType: 'removed',
97
- endpoint: fromEp,
98
- });
99
- removedCount++;
100
- }
101
- }
102
-
103
- // 2. Compute Pitfall Diffs
104
- const pitfallChanges: Array<{ changeType: 'added' | 'removed'; pitfall: Pitfall }> = [];
105
- const fromPitfallTitles = new Set(fromPitfalls.map(p => `${p.kind}:${p.title}`));
106
- const toPitfallTitles = new Set(toPitfalls.map(p => `${p.kind}:${p.title}`));
107
-
108
- for (const toP of toPitfalls) {
109
- if (!fromPitfallTitles.has(`${toP.kind}:${toP.title}`)) {
110
- pitfallChanges.push({ changeType: 'added', pitfall: toP });
111
- }
112
- }
113
- for (const fromP of fromPitfalls) {
114
- if (!toPitfallTitles.has(`${fromP.kind}:${fromP.title}`)) {
115
- pitfallChanges.push({ changeType: 'removed', pitfall: fromP });
116
- }
117
- }
118
-
119
- // 3. Compute Content/Chunk Diffs (Semantic only, ignoring formatting-only whitespace)
120
- const contentChanges = this.computeContentDiffs(options);
121
-
122
- return {
123
- fromVersion: options.fromVersion,
124
- toVersion: options.toVersion,
125
- fromSnapshotId: options.fromSnapshotId,
126
- toSnapshotId: options.toSnapshotId,
127
- sourceId: options.sourceId,
128
- summary: {
129
- endpointsAdded: addedCount,
130
- endpointsRemoved: removedCount,
131
- endpointsModified: modifiedCount,
132
- endpointsDeprecated: deprecatedCount,
133
- pitfallsAdded: pitfallChanges.filter(p => p.changeType === 'added').length,
134
- pitfallsRemoved: pitfallChanges.filter(p => p.changeType === 'removed').length,
135
- contentChanged: contentChanges.length,
136
- },
137
- apiChanges,
138
- pitfallChanges,
139
- contentChanges,
140
- retrievedAt: new Date().toISOString(),
141
- };
142
- }
143
-
144
- private getEndpoints(snapshotId?: string, docVersion?: string): ApiEndpoint[] {
145
- if (snapshotId) {
146
- return this.repo.getApiEndpointsBySnapshot(snapshotId);
147
- }
148
- return this.repo.searchApiEndpoints('', {
149
- docVersion,
150
- limit: 500,
151
- });
152
- }
153
-
154
- private getPitfalls(snapshotId?: string, docVersion?: string): Pitfall[] {
155
- if (snapshotId) {
156
- return this.repo.getPitfallsBySnapshot(snapshotId);
157
- }
158
- return this.repo.searchPitfalls('', {
159
- docVersion,
160
- limit: 200,
161
- });
162
- }
163
-
164
- private detectEndpointModifications(fromEp: ApiEndpoint, toEp: ApiEndpoint): string[] {
165
- const changes: string[] = [];
166
-
167
- // Compare parameters
168
- const fromParams = new Map(fromEp.parameters.map(p => [p.name, p]));
169
- const toParams = new Map(toEp.parameters.map(p => [p.name, p]));
170
-
171
- for (const [name, toP] of toParams.entries()) {
172
- const fromP = fromParams.get(name);
173
- if (!fromP) {
174
- changes.push(`Added parameter "${name}"${toP.required ? ' (required)' : ''}`);
175
- } else if (!fromP.required && toP.required) {
176
- changes.push(`Parameter "${name}" is now required (was optional)`);
177
- } else if (fromP.type !== toP.type && toP.type) {
178
- changes.push(`Parameter "${name}" type changed from ${fromP.type || 'any'} to ${toP.type}`);
179
- }
180
- }
181
-
182
- for (const name of fromParams.keys()) {
183
- if (!toParams.has(name)) {
184
- changes.push(`Removed parameter "${name}"`);
185
- }
186
- }
187
-
188
- // Compare Request Body required fields
189
- const fromReq = new Set(fromEp.requestSchema?.required || []);
190
- const toReq = new Set(toEp.requestSchema?.required || []);
191
-
192
- for (const field of toReq) {
193
- if (!fromReq.has(field)) {
194
- changes.push(`Request body field "${field}" is now required`);
195
- }
196
- }
197
- for (const field of fromReq) {
198
- if (!toReq.has(field)) {
199
- changes.push(`Request body field "${field}" is no longer required`);
200
- }
201
- }
202
-
203
- return changes;
204
- }
205
-
206
- private computeContentDiffs(options: DiffOptions): Array<{ title: string; changeType: 'added' | 'removed' | 'modified'; summary: string }> {
207
- const fromChunks = options.fromSnapshotId
208
- ? this.repo.getChunksBySnapshot(options.fromSnapshotId)
209
- : options.fromVersion
210
- ? this.repo.getChunksByVersion(options.fromVersion)
211
- : [];
212
- const toChunks = options.toSnapshotId
213
- ? this.repo.getChunksBySnapshot(options.toSnapshotId)
214
- : options.toVersion
215
- ? this.repo.getChunksByVersion(options.toVersion)
216
- : [];
217
-
218
- if (fromChunks.length === 0 && toChunks.length === 0) return [];
219
-
220
- const changes: Array<{ title: string; changeType: 'added' | 'removed' | 'modified'; summary: string }> = [];
221
- const fromMap = new Map(fromChunks.map(c => [c.title, c]));
222
- const toMap = new Map(toChunks.map(c => [c.title, c]));
223
-
224
- for (const [title, toC] of toMap.entries()) {
225
- const fromC = fromMap.get(title);
226
- if (!fromC) {
227
- changes.push({
228
- title,
229
- changeType: 'added',
230
- summary: `New documentation section: "${title}"`,
231
- });
232
- } else if (fromC.contentHash !== toC.contentHash) {
233
- // Compare normalized text to ignore formatting-only whitespace
234
- const normFrom = fromC.content.replace(/\s+/g, ' ').trim();
235
- const normTo = toC.content.replace(/\s+/g, ' ').trim();
236
- if (normFrom !== normTo) {
237
- changes.push({
238
- title,
239
- changeType: 'modified',
240
- summary: `Content updated for section "${title}"`,
241
- });
242
- }
243
- }
244
- }
245
-
246
- for (const title of fromMap.keys()) {
247
- if (!toMap.has(title)) {
248
- changes.push({
249
- title,
250
- changeType: 'removed',
251
- summary: `Documentation section removed: "${title}"`,
252
- });
253
- }
254
- }
255
-
256
- return changes;
257
- }
258
- }