openlore 2.0.0

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 (634) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +268 -0
  3. package/dist/api/analyze.d.ts +17 -0
  4. package/dist/api/analyze.d.ts.map +1 -0
  5. package/dist/api/analyze.js +143 -0
  6. package/dist/api/analyze.js.map +1 -0
  7. package/dist/api/audit.d.ts +10 -0
  8. package/dist/api/audit.d.ts.map +1 -0
  9. package/dist/api/audit.js +117 -0
  10. package/dist/api/audit.js.map +1 -0
  11. package/dist/api/decisions.d.ts +55 -0
  12. package/dist/api/decisions.d.ts.map +1 -0
  13. package/dist/api/decisions.js +157 -0
  14. package/dist/api/decisions.js.map +1 -0
  15. package/dist/api/drift.d.ts +21 -0
  16. package/dist/api/drift.d.ts.map +1 -0
  17. package/dist/api/drift.js +152 -0
  18. package/dist/api/drift.js.map +1 -0
  19. package/dist/api/generate.d.ts +18 -0
  20. package/dist/api/generate.d.ts.map +1 -0
  21. package/dist/api/generate.js +259 -0
  22. package/dist/api/generate.js.map +1 -0
  23. package/dist/api/index.d.ts +41 -0
  24. package/dist/api/index.d.ts.map +1 -0
  25. package/dist/api/index.js +34 -0
  26. package/dist/api/index.js.map +1 -0
  27. package/dist/api/init.d.ts +18 -0
  28. package/dist/api/init.d.ts.map +1 -0
  29. package/dist/api/init.js +83 -0
  30. package/dist/api/init.js.map +1 -0
  31. package/dist/api/run.d.ts +19 -0
  32. package/dist/api/run.d.ts.map +1 -0
  33. package/dist/api/run.js +312 -0
  34. package/dist/api/run.js.map +1 -0
  35. package/dist/api/specs.d.ts +49 -0
  36. package/dist/api/specs.d.ts.map +1 -0
  37. package/dist/api/specs.js +137 -0
  38. package/dist/api/specs.js.map +1 -0
  39. package/dist/api/types.d.ts +201 -0
  40. package/dist/api/types.d.ts.map +1 -0
  41. package/dist/api/types.js +9 -0
  42. package/dist/api/types.js.map +1 -0
  43. package/dist/api/verify.d.ts +20 -0
  44. package/dist/api/verify.d.ts.map +1 -0
  45. package/dist/api/verify.js +117 -0
  46. package/dist/api/verify.js.map +1 -0
  47. package/dist/cli/commands/analyze.d.ts +30 -0
  48. package/dist/cli/commands/analyze.d.ts.map +1 -0
  49. package/dist/cli/commands/analyze.js +683 -0
  50. package/dist/cli/commands/analyze.js.map +1 -0
  51. package/dist/cli/commands/audit.d.ts +9 -0
  52. package/dist/cli/commands/audit.d.ts.map +1 -0
  53. package/dist/cli/commands/audit.js +98 -0
  54. package/dist/cli/commands/audit.js.map +1 -0
  55. package/dist/cli/commands/decisions.d.ts +16 -0
  56. package/dist/cli/commands/decisions.d.ts.map +1 -0
  57. package/dist/cli/commands/decisions.js +864 -0
  58. package/dist/cli/commands/decisions.js.map +1 -0
  59. package/dist/cli/commands/digest.d.ts +9 -0
  60. package/dist/cli/commands/digest.d.ts.map +1 -0
  61. package/dist/cli/commands/digest.js +61 -0
  62. package/dist/cli/commands/digest.js.map +1 -0
  63. package/dist/cli/commands/doctor.d.ts +9 -0
  64. package/dist/cli/commands/doctor.d.ts.map +1 -0
  65. package/dist/cli/commands/doctor.js +398 -0
  66. package/dist/cli/commands/doctor.js.map +1 -0
  67. package/dist/cli/commands/drift.d.ts +9 -0
  68. package/dist/cli/commands/drift.d.ts.map +1 -0
  69. package/dist/cli/commands/drift.js +550 -0
  70. package/dist/cli/commands/drift.js.map +1 -0
  71. package/dist/cli/commands/generate.d.ts +9 -0
  72. package/dist/cli/commands/generate.d.ts.map +1 -0
  73. package/dist/cli/commands/generate.js +565 -0
  74. package/dist/cli/commands/generate.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +9 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +173 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/mcp.d.ts +2235 -0
  80. package/dist/cli/commands/mcp.d.ts.map +1 -0
  81. package/dist/cli/commands/mcp.js +1384 -0
  82. package/dist/cli/commands/mcp.js.map +1 -0
  83. package/dist/cli/commands/refresh-stories.d.ts +10 -0
  84. package/dist/cli/commands/refresh-stories.d.ts.map +1 -0
  85. package/dist/cli/commands/refresh-stories.js +314 -0
  86. package/dist/cli/commands/refresh-stories.js.map +1 -0
  87. package/dist/cli/commands/run.d.ts +9 -0
  88. package/dist/cli/commands/run.d.ts.map +1 -0
  89. package/dist/cli/commands/run.js +459 -0
  90. package/dist/cli/commands/run.js.map +1 -0
  91. package/dist/cli/commands/setup.d.ts +19 -0
  92. package/dist/cli/commands/setup.d.ts.map +1 -0
  93. package/dist/cli/commands/setup.js +355 -0
  94. package/dist/cli/commands/setup.js.map +1 -0
  95. package/dist/cli/commands/test.d.ts +22 -0
  96. package/dist/cli/commands/test.d.ts.map +1 -0
  97. package/dist/cli/commands/test.js +180 -0
  98. package/dist/cli/commands/test.js.map +1 -0
  99. package/dist/cli/commands/verify.d.ts +9 -0
  100. package/dist/cli/commands/verify.d.ts.map +1 -0
  101. package/dist/cli/commands/verify.js +383 -0
  102. package/dist/cli/commands/verify.js.map +1 -0
  103. package/dist/cli/commands/view.d.ts +13 -0
  104. package/dist/cli/commands/view.d.ts.map +1 -0
  105. package/dist/cli/commands/view.js +547 -0
  106. package/dist/cli/commands/view.js.map +1 -0
  107. package/dist/cli/index.d.ts +9 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +118 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/tui-approval.d.ts +11 -0
  112. package/dist/cli/tui-approval.d.ts.map +1 -0
  113. package/dist/cli/tui-approval.js +129 -0
  114. package/dist/cli/tui-approval.js.map +1 -0
  115. package/dist/constants.d.ts +314 -0
  116. package/dist/constants.d.ts.map +1 -0
  117. package/dist/constants.js +382 -0
  118. package/dist/constants.js.map +1 -0
  119. package/dist/core/analyzer/ai-config-generator.d.ts +54 -0
  120. package/dist/core/analyzer/ai-config-generator.d.ts.map +1 -0
  121. package/dist/core/analyzer/ai-config-generator.js +98 -0
  122. package/dist/core/analyzer/ai-config-generator.js.map +1 -0
  123. package/dist/core/analyzer/architecture-writer.d.ts +67 -0
  124. package/dist/core/analyzer/architecture-writer.d.ts.map +1 -0
  125. package/dist/core/analyzer/architecture-writer.js +209 -0
  126. package/dist/core/analyzer/architecture-writer.js.map +1 -0
  127. package/dist/core/analyzer/artifact-generator.d.ts +261 -0
  128. package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
  129. package/dist/core/analyzer/artifact-generator.js +909 -0
  130. package/dist/core/analyzer/artifact-generator.js.map +1 -0
  131. package/dist/core/analyzer/ast-chunker.d.ts +24 -0
  132. package/dist/core/analyzer/ast-chunker.d.ts.map +1 -0
  133. package/dist/core/analyzer/ast-chunker.js +198 -0
  134. package/dist/core/analyzer/ast-chunker.js.map +1 -0
  135. package/dist/core/analyzer/call-graph.d.ts +162 -0
  136. package/dist/core/analyzer/call-graph.d.ts.map +1 -0
  137. package/dist/core/analyzer/call-graph.js +2040 -0
  138. package/dist/core/analyzer/call-graph.js.map +1 -0
  139. package/dist/core/analyzer/code-shaper.d.ts +33 -0
  140. package/dist/core/analyzer/code-shaper.d.ts.map +1 -0
  141. package/dist/core/analyzer/code-shaper.js +154 -0
  142. package/dist/core/analyzer/code-shaper.js.map +1 -0
  143. package/dist/core/analyzer/codebase-digest.d.ts +40 -0
  144. package/dist/core/analyzer/codebase-digest.d.ts.map +1 -0
  145. package/dist/core/analyzer/codebase-digest.js +195 -0
  146. package/dist/core/analyzer/codebase-digest.js.map +1 -0
  147. package/dist/core/analyzer/cpp-header-resolver.d.ts +30 -0
  148. package/dist/core/analyzer/cpp-header-resolver.d.ts.map +1 -0
  149. package/dist/core/analyzer/cpp-header-resolver.js +71 -0
  150. package/dist/core/analyzer/cpp-header-resolver.js.map +1 -0
  151. package/dist/core/analyzer/dependency-graph.d.ts +230 -0
  152. package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
  153. package/dist/core/analyzer/dependency-graph.js +752 -0
  154. package/dist/core/analyzer/dependency-graph.js.map +1 -0
  155. package/dist/core/analyzer/duplicate-detector.d.ts +52 -0
  156. package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -0
  157. package/dist/core/analyzer/duplicate-detector.js +289 -0
  158. package/dist/core/analyzer/duplicate-detector.js.map +1 -0
  159. package/dist/core/analyzer/embedding-service.d.ts +56 -0
  160. package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
  161. package/dist/core/analyzer/embedding-service.js +118 -0
  162. package/dist/core/analyzer/embedding-service.js.map +1 -0
  163. package/dist/core/analyzer/env-extractor.d.ts +33 -0
  164. package/dist/core/analyzer/env-extractor.d.ts.map +1 -0
  165. package/dist/core/analyzer/env-extractor.js +196 -0
  166. package/dist/core/analyzer/env-extractor.js.map +1 -0
  167. package/dist/core/analyzer/external-packages.d.ts +20 -0
  168. package/dist/core/analyzer/external-packages.d.ts.map +1 -0
  169. package/dist/core/analyzer/external-packages.js +175 -0
  170. package/dist/core/analyzer/external-packages.js.map +1 -0
  171. package/dist/core/analyzer/file-walker.d.ts +78 -0
  172. package/dist/core/analyzer/file-walker.d.ts.map +1 -0
  173. package/dist/core/analyzer/file-walker.js +532 -0
  174. package/dist/core/analyzer/file-walker.js.map +1 -0
  175. package/dist/core/analyzer/function-registry-trie.d.ts +21 -0
  176. package/dist/core/analyzer/function-registry-trie.d.ts.map +1 -0
  177. package/dist/core/analyzer/function-registry-trie.js +39 -0
  178. package/dist/core/analyzer/function-registry-trie.js.map +1 -0
  179. package/dist/core/analyzer/http-route-parser.d.ts +152 -0
  180. package/dist/core/analyzer/http-route-parser.d.ts.map +1 -0
  181. package/dist/core/analyzer/http-route-parser.js +971 -0
  182. package/dist/core/analyzer/http-route-parser.js.map +1 -0
  183. package/dist/core/analyzer/import-parser.d.ts +100 -0
  184. package/dist/core/analyzer/import-parser.d.ts.map +1 -0
  185. package/dist/core/analyzer/import-parser.js +952 -0
  186. package/dist/core/analyzer/import-parser.js.map +1 -0
  187. package/dist/core/analyzer/import-resolver-bridge.d.ts +25 -0
  188. package/dist/core/analyzer/import-resolver-bridge.d.ts.map +1 -0
  189. package/dist/core/analyzer/import-resolver-bridge.js +99 -0
  190. package/dist/core/analyzer/import-resolver-bridge.js.map +1 -0
  191. package/dist/core/analyzer/index.d.ts +10 -0
  192. package/dist/core/analyzer/index.d.ts.map +1 -0
  193. package/dist/core/analyzer/index.js +10 -0
  194. package/dist/core/analyzer/index.js.map +1 -0
  195. package/dist/core/analyzer/middleware-extractor.d.ts +29 -0
  196. package/dist/core/analyzer/middleware-extractor.d.ts.map +1 -0
  197. package/dist/core/analyzer/middleware-extractor.js +195 -0
  198. package/dist/core/analyzer/middleware-extractor.js.map +1 -0
  199. package/dist/core/analyzer/refactor-analyzer.d.ts +83 -0
  200. package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
  201. package/dist/core/analyzer/refactor-analyzer.js +351 -0
  202. package/dist/core/analyzer/refactor-analyzer.js.map +1 -0
  203. package/dist/core/analyzer/repository-mapper.d.ts +150 -0
  204. package/dist/core/analyzer/repository-mapper.d.ts.map +1 -0
  205. package/dist/core/analyzer/repository-mapper.js +740 -0
  206. package/dist/core/analyzer/repository-mapper.js.map +1 -0
  207. package/dist/core/analyzer/schema-extractor.d.ts +41 -0
  208. package/dist/core/analyzer/schema-extractor.d.ts.map +1 -0
  209. package/dist/core/analyzer/schema-extractor.js +229 -0
  210. package/dist/core/analyzer/schema-extractor.js.map +1 -0
  211. package/dist/core/analyzer/signature-extractor.d.ts +31 -0
  212. package/dist/core/analyzer/signature-extractor.d.ts.map +1 -0
  213. package/dist/core/analyzer/signature-extractor.js +675 -0
  214. package/dist/core/analyzer/signature-extractor.js.map +1 -0
  215. package/dist/core/analyzer/significance-scorer.d.ts +79 -0
  216. package/dist/core/analyzer/significance-scorer.d.ts.map +1 -0
  217. package/dist/core/analyzer/significance-scorer.js +407 -0
  218. package/dist/core/analyzer/significance-scorer.js.map +1 -0
  219. package/dist/core/analyzer/spec-snapshot-generator.d.ts +17 -0
  220. package/dist/core/analyzer/spec-snapshot-generator.d.ts.map +1 -0
  221. package/dist/core/analyzer/spec-snapshot-generator.js +201 -0
  222. package/dist/core/analyzer/spec-snapshot-generator.js.map +1 -0
  223. package/dist/core/analyzer/spec-vector-index.d.ts +68 -0
  224. package/dist/core/analyzer/spec-vector-index.d.ts.map +1 -0
  225. package/dist/core/analyzer/spec-vector-index.js +340 -0
  226. package/dist/core/analyzer/spec-vector-index.js.map +1 -0
  227. package/dist/core/analyzer/subgraph-extractor.d.ts +51 -0
  228. package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
  229. package/dist/core/analyzer/subgraph-extractor.js +147 -0
  230. package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
  231. package/dist/core/analyzer/type-inference-engine.d.ts +23 -0
  232. package/dist/core/analyzer/type-inference-engine.d.ts.map +1 -0
  233. package/dist/core/analyzer/type-inference-engine.js +130 -0
  234. package/dist/core/analyzer/type-inference-engine.js.map +1 -0
  235. package/dist/core/analyzer/ui-component-extractor.d.ts +43 -0
  236. package/dist/core/analyzer/ui-component-extractor.d.ts.map +1 -0
  237. package/dist/core/analyzer/ui-component-extractor.js +245 -0
  238. package/dist/core/analyzer/ui-component-extractor.js.map +1 -0
  239. package/dist/core/analyzer/unified-search.d.ts +116 -0
  240. package/dist/core/analyzer/unified-search.d.ts.map +1 -0
  241. package/dist/core/analyzer/unified-search.js +231 -0
  242. package/dist/core/analyzer/unified-search.js.map +1 -0
  243. package/dist/core/analyzer/vector-index.d.ts +92 -0
  244. package/dist/core/analyzer/vector-index.d.ts.map +1 -0
  245. package/dist/core/analyzer/vector-index.js +451 -0
  246. package/dist/core/analyzer/vector-index.js.map +1 -0
  247. package/dist/core/decisions/consolidator.d.ts +14 -0
  248. package/dist/core/decisions/consolidator.d.ts.map +1 -0
  249. package/dist/core/decisions/consolidator.js +169 -0
  250. package/dist/core/decisions/consolidator.js.map +1 -0
  251. package/dist/core/decisions/extractor.d.ts +26 -0
  252. package/dist/core/decisions/extractor.d.ts.map +1 -0
  253. package/dist/core/decisions/extractor.js +156 -0
  254. package/dist/core/decisions/extractor.js.map +1 -0
  255. package/dist/core/decisions/index.d.ts +19 -0
  256. package/dist/core/decisions/index.d.ts.map +1 -0
  257. package/dist/core/decisions/index.js +16 -0
  258. package/dist/core/decisions/index.js.map +1 -0
  259. package/dist/core/decisions/store.d.ts +36 -0
  260. package/dist/core/decisions/store.d.ts.map +1 -0
  261. package/dist/core/decisions/store.js +109 -0
  262. package/dist/core/decisions/store.js.map +1 -0
  263. package/dist/core/decisions/syncer.d.ts +27 -0
  264. package/dist/core/decisions/syncer.d.ts.map +1 -0
  265. package/dist/core/decisions/syncer.js +214 -0
  266. package/dist/core/decisions/syncer.js.map +1 -0
  267. package/dist/core/decisions/verifier.d.ts +20 -0
  268. package/dist/core/decisions/verifier.d.ts.map +1 -0
  269. package/dist/core/decisions/verifier.js +115 -0
  270. package/dist/core/decisions/verifier.js.map +1 -0
  271. package/dist/core/digest/digest-generator.d.ts +29 -0
  272. package/dist/core/digest/digest-generator.d.ts.map +1 -0
  273. package/dist/core/digest/digest-generator.js +181 -0
  274. package/dist/core/digest/digest-generator.js.map +1 -0
  275. package/dist/core/drift/drift-detector.d.ts +102 -0
  276. package/dist/core/drift/drift-detector.d.ts.map +1 -0
  277. package/dist/core/drift/drift-detector.js +598 -0
  278. package/dist/core/drift/drift-detector.js.map +1 -0
  279. package/dist/core/drift/git-diff.d.ts +60 -0
  280. package/dist/core/drift/git-diff.d.ts.map +1 -0
  281. package/dist/core/drift/git-diff.js +383 -0
  282. package/dist/core/drift/git-diff.js.map +1 -0
  283. package/dist/core/drift/index.d.ts +12 -0
  284. package/dist/core/drift/index.d.ts.map +1 -0
  285. package/dist/core/drift/index.js +9 -0
  286. package/dist/core/drift/index.js.map +1 -0
  287. package/dist/core/drift/spec-mapper.d.ts +73 -0
  288. package/dist/core/drift/spec-mapper.d.ts.map +1 -0
  289. package/dist/core/drift/spec-mapper.js +353 -0
  290. package/dist/core/drift/spec-mapper.js.map +1 -0
  291. package/dist/core/drift/test-suggester.d.ts +18 -0
  292. package/dist/core/drift/test-suggester.d.ts.map +1 -0
  293. package/dist/core/drift/test-suggester.js +107 -0
  294. package/dist/core/drift/test-suggester.js.map +1 -0
  295. package/dist/core/generator/adr-generator.d.ts +32 -0
  296. package/dist/core/generator/adr-generator.d.ts.map +1 -0
  297. package/dist/core/generator/adr-generator.js +192 -0
  298. package/dist/core/generator/adr-generator.js.map +1 -0
  299. package/dist/core/generator/index.d.ts +9 -0
  300. package/dist/core/generator/index.d.ts.map +1 -0
  301. package/dist/core/generator/index.js +12 -0
  302. package/dist/core/generator/index.js.map +1 -0
  303. package/dist/core/generator/mapping-generator.d.ts +54 -0
  304. package/dist/core/generator/mapping-generator.d.ts.map +1 -0
  305. package/dist/core/generator/mapping-generator.js +240 -0
  306. package/dist/core/generator/mapping-generator.js.map +1 -0
  307. package/dist/core/generator/openspec-compat.d.ts +160 -0
  308. package/dist/core/generator/openspec-compat.d.ts.map +1 -0
  309. package/dist/core/generator/openspec-compat.js +524 -0
  310. package/dist/core/generator/openspec-compat.js.map +1 -0
  311. package/dist/core/generator/openspec-format-generator.d.ts +131 -0
  312. package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
  313. package/dist/core/generator/openspec-format-generator.js +963 -0
  314. package/dist/core/generator/openspec-format-generator.js.map +1 -0
  315. package/dist/core/generator/openspec-writer.d.ts +130 -0
  316. package/dist/core/generator/openspec-writer.d.ts.map +1 -0
  317. package/dist/core/generator/openspec-writer.js +404 -0
  318. package/dist/core/generator/openspec-writer.js.map +1 -0
  319. package/dist/core/generator/prompts.d.ts +35 -0
  320. package/dist/core/generator/prompts.d.ts.map +1 -0
  321. package/dist/core/generator/prompts.js +212 -0
  322. package/dist/core/generator/prompts.js.map +1 -0
  323. package/dist/core/generator/rag-manifest-generator.d.ts +37 -0
  324. package/dist/core/generator/rag-manifest-generator.d.ts.map +1 -0
  325. package/dist/core/generator/rag-manifest-generator.js +134 -0
  326. package/dist/core/generator/rag-manifest-generator.js.map +1 -0
  327. package/dist/core/generator/schemas.d.ts +365 -0
  328. package/dist/core/generator/schemas.d.ts.map +1 -0
  329. package/dist/core/generator/schemas.js +190 -0
  330. package/dist/core/generator/schemas.js.map +1 -0
  331. package/dist/core/generator/spec-pipeline.d.ts +123 -0
  332. package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
  333. package/dist/core/generator/spec-pipeline.js +699 -0
  334. package/dist/core/generator/spec-pipeline.js.map +1 -0
  335. package/dist/core/generator/stages/stage1-survey.d.ts +19 -0
  336. package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -0
  337. package/dist/core/generator/stages/stage1-survey.js +171 -0
  338. package/dist/core/generator/stages/stage1-survey.js.map +1 -0
  339. package/dist/core/generator/stages/stage2-entities.d.ts +11 -0
  340. package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -0
  341. package/dist/core/generator/stages/stage2-entities.js +74 -0
  342. package/dist/core/generator/stages/stage2-entities.js.map +1 -0
  343. package/dist/core/generator/stages/stage3-services.d.ts +11 -0
  344. package/dist/core/generator/stages/stage3-services.d.ts.map +1 -0
  345. package/dist/core/generator/stages/stage3-services.js +85 -0
  346. package/dist/core/generator/stages/stage3-services.js.map +1 -0
  347. package/dist/core/generator/stages/stage4-api.d.ts +11 -0
  348. package/dist/core/generator/stages/stage4-api.d.ts.map +1 -0
  349. package/dist/core/generator/stages/stage4-api.js +72 -0
  350. package/dist/core/generator/stages/stage4-api.js.map +1 -0
  351. package/dist/core/generator/stages/stage5-architecture.d.ts +11 -0
  352. package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
  353. package/dist/core/generator/stages/stage5-architecture.js +75 -0
  354. package/dist/core/generator/stages/stage5-architecture.js.map +1 -0
  355. package/dist/core/generator/stages/stage6-adr.d.ts +8 -0
  356. package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -0
  357. package/dist/core/generator/stages/stage6-adr.js +47 -0
  358. package/dist/core/generator/stages/stage6-adr.js.map +1 -0
  359. package/dist/core/services/chat-agent.d.ts +50 -0
  360. package/dist/core/services/chat-agent.d.ts.map +1 -0
  361. package/dist/core/services/chat-agent.js +369 -0
  362. package/dist/core/services/chat-agent.js.map +1 -0
  363. package/dist/core/services/chat-tools.d.ts +32 -0
  364. package/dist/core/services/chat-tools.d.ts.map +1 -0
  365. package/dist/core/services/chat-tools.js +494 -0
  366. package/dist/core/services/chat-tools.js.map +1 -0
  367. package/dist/core/services/config-manager.d.ts +61 -0
  368. package/dist/core/services/config-manager.d.ts.map +1 -0
  369. package/dist/core/services/config-manager.js +149 -0
  370. package/dist/core/services/config-manager.js.map +1 -0
  371. package/dist/core/services/edge-store.d.ts +57 -0
  372. package/dist/core/services/edge-store.d.ts.map +1 -0
  373. package/dist/core/services/edge-store.js +419 -0
  374. package/dist/core/services/edge-store.js.map +1 -0
  375. package/dist/core/services/gitignore-manager.d.ts +29 -0
  376. package/dist/core/services/gitignore-manager.d.ts.map +1 -0
  377. package/dist/core/services/gitignore-manager.js +95 -0
  378. package/dist/core/services/gitignore-manager.js.map +1 -0
  379. package/dist/core/services/index.d.ts +8 -0
  380. package/dist/core/services/index.d.ts.map +1 -0
  381. package/dist/core/services/index.js +8 -0
  382. package/dist/core/services/index.js.map +1 -0
  383. package/dist/core/services/llm-service.d.ts +379 -0
  384. package/dist/core/services/llm-service.d.ts.map +1 -0
  385. package/dist/core/services/llm-service.js +1553 -0
  386. package/dist/core/services/llm-service.js.map +1 -0
  387. package/dist/core/services/mcp-handlers/analysis.d.ts +127 -0
  388. package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
  389. package/dist/core/services/mcp-handlers/analysis.js +1185 -0
  390. package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
  391. package/dist/core/services/mcp-handlers/change.d.ts +14 -0
  392. package/dist/core/services/mcp-handlers/change.d.ts.map +1 -0
  393. package/dist/core/services/mcp-handlers/change.js +416 -0
  394. package/dist/core/services/mcp-handlers/change.js.map +1 -0
  395. package/dist/core/services/mcp-handlers/decisions.d.ts +16 -0
  396. package/dist/core/services/mcp-handlers/decisions.d.ts.map +1 -0
  397. package/dist/core/services/mcp-handlers/decisions.js +239 -0
  398. package/dist/core/services/mcp-handlers/decisions.js.map +1 -0
  399. package/dist/core/services/mcp-handlers/graph.d.ts +94 -0
  400. package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
  401. package/dist/core/services/mcp-handlers/graph.js +693 -0
  402. package/dist/core/services/mcp-handlers/graph.js.map +1 -0
  403. package/dist/core/services/mcp-handlers/orient.d.ts +17 -0
  404. package/dist/core/services/mcp-handlers/orient.d.ts.map +1 -0
  405. package/dist/core/services/mcp-handlers/orient.js +357 -0
  406. package/dist/core/services/mcp-handlers/orient.js.map +1 -0
  407. package/dist/core/services/mcp-handlers/semantic.d.ts +66 -0
  408. package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
  409. package/dist/core/services/mcp-handlers/semantic.js +432 -0
  410. package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
  411. package/dist/core/services/mcp-handlers/utils.d.ts +85 -0
  412. package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
  413. package/dist/core/services/mcp-handlers/utils.js +262 -0
  414. package/dist/core/services/mcp-handlers/utils.js.map +1 -0
  415. package/dist/core/services/mcp-watcher.d.ts +41 -0
  416. package/dist/core/services/mcp-watcher.d.ts.map +1 -0
  417. package/dist/core/services/mcp-watcher.js +254 -0
  418. package/dist/core/services/mcp-watcher.js.map +1 -0
  419. package/dist/core/services/project-detector.d.ts +32 -0
  420. package/dist/core/services/project-detector.d.ts.map +1 -0
  421. package/dist/core/services/project-detector.js +100 -0
  422. package/dist/core/services/project-detector.js.map +1 -0
  423. package/dist/core/test-generator/coverage-analyzer.d.ts +27 -0
  424. package/dist/core/test-generator/coverage-analyzer.d.ts.map +1 -0
  425. package/dist/core/test-generator/coverage-analyzer.js +285 -0
  426. package/dist/core/test-generator/coverage-analyzer.js.map +1 -0
  427. package/dist/core/test-generator/framework-detector.d.ts +17 -0
  428. package/dist/core/test-generator/framework-detector.d.ts.map +1 -0
  429. package/dist/core/test-generator/framework-detector.js +65 -0
  430. package/dist/core/test-generator/framework-detector.js.map +1 -0
  431. package/dist/core/test-generator/index.d.ts +14 -0
  432. package/dist/core/test-generator/index.d.ts.map +1 -0
  433. package/dist/core/test-generator/index.js +11 -0
  434. package/dist/core/test-generator/index.js.map +1 -0
  435. package/dist/core/test-generator/renderers/catch2.d.ts +8 -0
  436. package/dist/core/test-generator/renderers/catch2.d.ts.map +1 -0
  437. package/dist/core/test-generator/renderers/catch2.js +47 -0
  438. package/dist/core/test-generator/renderers/catch2.js.map +1 -0
  439. package/dist/core/test-generator/renderers/gtest.d.ts +8 -0
  440. package/dist/core/test-generator/renderers/gtest.d.ts.map +1 -0
  441. package/dist/core/test-generator/renderers/gtest.js +45 -0
  442. package/dist/core/test-generator/renderers/gtest.js.map +1 -0
  443. package/dist/core/test-generator/renderers/index.d.ts +20 -0
  444. package/dist/core/test-generator/renderers/index.d.ts.map +1 -0
  445. package/dist/core/test-generator/renderers/index.js +35 -0
  446. package/dist/core/test-generator/renderers/index.js.map +1 -0
  447. package/dist/core/test-generator/renderers/playwright.d.ts +8 -0
  448. package/dist/core/test-generator/renderers/playwright.d.ts.map +1 -0
  449. package/dist/core/test-generator/renderers/playwright.js +44 -0
  450. package/dist/core/test-generator/renderers/playwright.js.map +1 -0
  451. package/dist/core/test-generator/renderers/pytest.d.ts +8 -0
  452. package/dist/core/test-generator/renderers/pytest.d.ts.map +1 -0
  453. package/dist/core/test-generator/renderers/pytest.js +44 -0
  454. package/dist/core/test-generator/renderers/pytest.js.map +1 -0
  455. package/dist/core/test-generator/renderers/shared.d.ts +21 -0
  456. package/dist/core/test-generator/renderers/shared.d.ts.map +1 -0
  457. package/dist/core/test-generator/renderers/shared.js +56 -0
  458. package/dist/core/test-generator/renderers/shared.js.map +1 -0
  459. package/dist/core/test-generator/renderers/vitest.d.ts +8 -0
  460. package/dist/core/test-generator/renderers/vitest.d.ts.map +1 -0
  461. package/dist/core/test-generator/renderers/vitest.js +52 -0
  462. package/dist/core/test-generator/renderers/vitest.js.map +1 -0
  463. package/dist/core/test-generator/scenario-parser.d.ts +33 -0
  464. package/dist/core/test-generator/scenario-parser.d.ts.map +1 -0
  465. package/dist/core/test-generator/scenario-parser.js +244 -0
  466. package/dist/core/test-generator/scenario-parser.js.map +1 -0
  467. package/dist/core/test-generator/test-generator.d.ts +30 -0
  468. package/dist/core/test-generator/test-generator.d.ts.map +1 -0
  469. package/dist/core/test-generator/test-generator.js +174 -0
  470. package/dist/core/test-generator/test-generator.js.map +1 -0
  471. package/dist/core/test-generator/test-writer.d.ts +25 -0
  472. package/dist/core/test-generator/test-writer.d.ts.map +1 -0
  473. package/dist/core/test-generator/test-writer.js +128 -0
  474. package/dist/core/test-generator/test-writer.js.map +1 -0
  475. package/dist/core/test-generator/then-matchers.d.ts +35 -0
  476. package/dist/core/test-generator/then-matchers.d.ts.map +1 -0
  477. package/dist/core/test-generator/then-matchers.js +211 -0
  478. package/dist/core/test-generator/then-matchers.js.map +1 -0
  479. package/dist/core/verifier/index.d.ts +5 -0
  480. package/dist/core/verifier/index.d.ts.map +1 -0
  481. package/dist/core/verifier/index.js +5 -0
  482. package/dist/core/verifier/index.js.map +1 -0
  483. package/dist/core/verifier/verification-engine.d.ts +293 -0
  484. package/dist/core/verifier/verification-engine.d.ts.map +1 -0
  485. package/dist/core/verifier/verification-engine.js +919 -0
  486. package/dist/core/verifier/verification-engine.js.map +1 -0
  487. package/dist/types/index.d.ts +368 -0
  488. package/dist/types/index.d.ts.map +1 -0
  489. package/dist/types/index.js +5 -0
  490. package/dist/types/index.js.map +1 -0
  491. package/dist/types/pipeline.d.ts +167 -0
  492. package/dist/types/pipeline.d.ts.map +1 -0
  493. package/dist/types/pipeline.js +5 -0
  494. package/dist/types/pipeline.js.map +1 -0
  495. package/dist/types/test-generator.d.ts +103 -0
  496. package/dist/types/test-generator.d.ts.map +1 -0
  497. package/dist/types/test-generator.js +17 -0
  498. package/dist/types/test-generator.js.map +1 -0
  499. package/dist/utils/command-helpers.d.ts +68 -0
  500. package/dist/utils/command-helpers.d.ts.map +1 -0
  501. package/dist/utils/command-helpers.js +150 -0
  502. package/dist/utils/command-helpers.js.map +1 -0
  503. package/dist/utils/errors.d.ts +51 -0
  504. package/dist/utils/errors.d.ts.map +1 -0
  505. package/dist/utils/errors.js +129 -0
  506. package/dist/utils/errors.js.map +1 -0
  507. package/dist/utils/logger.d.ts +149 -0
  508. package/dist/utils/logger.d.ts.map +1 -0
  509. package/dist/utils/logger.js +342 -0
  510. package/dist/utils/logger.js.map +1 -0
  511. package/dist/utils/misc.d.ts +10 -0
  512. package/dist/utils/misc.d.ts.map +1 -0
  513. package/dist/utils/misc.js +21 -0
  514. package/dist/utils/misc.js.map +1 -0
  515. package/dist/utils/progress.d.ts +142 -0
  516. package/dist/utils/progress.d.ts.map +1 -0
  517. package/dist/utils/progress.js +283 -0
  518. package/dist/utils/progress.js.map +1 -0
  519. package/dist/utils/prompts.d.ts +53 -0
  520. package/dist/utils/prompts.d.ts.map +1 -0
  521. package/dist/utils/prompts.js +199 -0
  522. package/dist/utils/prompts.js.map +1 -0
  523. package/dist/utils/shutdown.d.ts +89 -0
  524. package/dist/utils/shutdown.d.ts.map +1 -0
  525. package/dist/utils/shutdown.js +238 -0
  526. package/dist/utils/shutdown.js.map +1 -0
  527. package/examples/bmad/README.md +113 -0
  528. package/examples/bmad/agents/architect.md +226 -0
  529. package/examples/bmad/agents/dev-brownfield.md +69 -0
  530. package/examples/bmad/setup/architect.customize.yaml +14 -0
  531. package/examples/bmad/tasks/implement-story.md +254 -0
  532. package/examples/bmad/tasks/onboarding.md +169 -0
  533. package/examples/bmad/tasks/refactor.md +178 -0
  534. package/examples/bmad/tasks/sprint-planning.md +168 -0
  535. package/examples/bmad/templates/story.md +108 -0
  536. package/examples/cline-workflows/openlore-analyze-codebase.md +101 -0
  537. package/examples/cline-workflows/openlore-check-spec-drift.md +102 -0
  538. package/examples/cline-workflows/openlore-execute-refactor.md +212 -0
  539. package/examples/cline-workflows/openlore-implement-feature.md +266 -0
  540. package/examples/cline-workflows/openlore-plan-refactor.md +279 -0
  541. package/examples/cline-workflows/openlore-refactor-codebase.md +16 -0
  542. package/examples/cline-workflows/openlore-write-tests.md +177 -0
  543. package/examples/drift-demo/openspec/config.yaml +14 -0
  544. package/examples/drift-demo/openspec/specs/architecture/spec.md +30 -0
  545. package/examples/drift-demo/openspec/specs/auth/spec.md +71 -0
  546. package/examples/drift-demo/openspec/specs/database/spec.md +33 -0
  547. package/examples/drift-demo/openspec/specs/overview/spec.md +20 -0
  548. package/examples/drift-demo/openspec/specs/projects/spec.md +55 -0
  549. package/examples/drift-demo/openspec/specs/tasks/spec.md +78 -0
  550. package/examples/drift-demo/package.json +21 -0
  551. package/examples/drift-demo/src/auth/auth-middleware.ts +30 -0
  552. package/examples/drift-demo/src/auth/auth-routes.ts +29 -0
  553. package/examples/drift-demo/src/auth/auth-service.ts +45 -0
  554. package/examples/drift-demo/src/database/connection.ts +27 -0
  555. package/examples/drift-demo/src/index.ts +16 -0
  556. package/examples/drift-demo/src/projects/project-model.ts +15 -0
  557. package/examples/drift-demo/src/projects/project-service.ts +34 -0
  558. package/examples/drift-demo/src/tasks/task-model.ts +37 -0
  559. package/examples/drift-demo/src/tasks/task-routes.ts +53 -0
  560. package/examples/drift-demo/src/tasks/task-service.ts +60 -0
  561. package/examples/drift-demo/src/utils/validation.ts +11 -0
  562. package/examples/drift-demo/tests/auth.test.ts +4 -0
  563. package/examples/drift-demo/tests/tasks.test.ts +4 -0
  564. package/examples/drift-demo/tsconfig.json +10 -0
  565. package/examples/drift-test/run-drift-test.sh +1087 -0
  566. package/examples/gsd/README.md +119 -0
  567. package/examples/gsd/commands/gsd/openlore-drift.md +111 -0
  568. package/examples/gsd/commands/gsd/openlore-orient.md +191 -0
  569. package/examples/mistral-vibe/README.md +101 -0
  570. package/examples/mistral-vibe/antipatterns-template.md +18 -0
  571. package/examples/mistral-vibe/skills/openlore-analyze-codebase/SKILL.md +124 -0
  572. package/examples/mistral-vibe/skills/openlore-brainstorm/SKILL.md +379 -0
  573. package/examples/mistral-vibe/skills/openlore-debug/SKILL.md +330 -0
  574. package/examples/mistral-vibe/skills/openlore-execute-refactor/SKILL.md +291 -0
  575. package/examples/mistral-vibe/skills/openlore-generate/SKILL.md +245 -0
  576. package/examples/mistral-vibe/skills/openlore-implement-story/SKILL.md +326 -0
  577. package/examples/mistral-vibe/skills/openlore-plan-refactor/SKILL.md +365 -0
  578. package/examples/mistral-vibe/skills/openlore-review-changes/SKILL.md +128 -0
  579. package/examples/mistral-vibe/skills/openlore-write-tests/SKILL.md +261 -0
  580. package/examples/opencode/agent-guard.ts +170 -0
  581. package/examples/opencode/plugins/anti-laziness.ts +202 -0
  582. package/examples/opencode/plugins/lib/openlore-context-injector-helpers.ts +116 -0
  583. package/examples/opencode/plugins/lib/openlore-decision-extractor-helpers.ts +65 -0
  584. package/examples/opencode/plugins/openlore-context-injector.test.ts +211 -0
  585. package/examples/opencode/plugins/openlore-context-injector.ts +165 -0
  586. package/examples/opencode/plugins/openlore-decision-extractor.test.ts +131 -0
  587. package/examples/opencode/plugins/openlore-decision-extractor.ts +322 -0
  588. package/examples/opencode/plugins/openlore-enforcer.ts +227 -0
  589. package/examples/opencode/prompts/sisyphus-sdd.md +150 -0
  590. package/examples/opencode-skills/openlore-analyze-codebase/SKILL.md +101 -0
  591. package/examples/opencode-skills/openlore-brainstorm/SKILL.md +354 -0
  592. package/examples/opencode-skills/openlore-debug/SKILL.md +291 -0
  593. package/examples/opencode-skills/openlore-execute-refactor/SKILL.md +241 -0
  594. package/examples/opencode-skills/openlore-generate/SKILL.md +236 -0
  595. package/examples/opencode-skills/openlore-implement-story/SKILL.md +251 -0
  596. package/examples/opencode-skills/openlore-plan-refactor/SKILL.md +298 -0
  597. package/examples/opencode-skills/openlore-review-changes/SKILL.md +134 -0
  598. package/examples/opencode-skills/openlore-write-tests/SKILL.md +230 -0
  599. package/examples/openspec-analysis/README.md +59 -0
  600. package/examples/openspec-analysis/SUMMARY.md +72 -0
  601. package/examples/openspec-analysis/config.json +16 -0
  602. package/examples/openspec-analysis/dependencies.mermaid +35 -0
  603. package/examples/openspec-analysis/dependency-graph.json +12116 -0
  604. package/examples/openspec-analysis/llm-context.json +119 -0
  605. package/examples/openspec-analysis/repo-structure.json +871 -0
  606. package/examples/openspec-cli/README.md +67 -0
  607. package/examples/openspec-cli/openspec/config.yaml +26 -0
  608. package/examples/openspec-cli/openspec/specs/architecture/spec.md +178 -0
  609. package/examples/openspec-cli/openspec/specs/artifact-graph/spec.md +143 -0
  610. package/examples/openspec-cli/openspec/specs/cli/spec.md +138 -0
  611. package/examples/openspec-cli/openspec/specs/overview/spec.md +60 -0
  612. package/examples/openspec-cli/openspec/specs/parsing/spec.md +123 -0
  613. package/examples/openspec-cli/openspec/specs/validation/spec.md +108 -0
  614. package/examples/spec-kit/README.md +104 -0
  615. package/examples/spec-kit/commands/drift.md +87 -0
  616. package/examples/spec-kit/commands/orient.md +138 -0
  617. package/examples/spec-kit/extension.yml +54 -0
  618. package/package.json +125 -0
  619. package/src/viewer/InteractiveGraphViewer.jsx +1600 -0
  620. package/src/viewer/app/index.html +17 -0
  621. package/src/viewer/app/main.jsx +13 -0
  622. package/src/viewer/components/ArchitectureView.jsx +177 -0
  623. package/src/viewer/components/ChatPanel.jsx +450 -0
  624. package/src/viewer/components/ClassGraph.jsx +782 -0
  625. package/src/viewer/components/ClusterGraph.jsx +469 -0
  626. package/src/viewer/components/FilterBar.jsx +179 -0
  627. package/src/viewer/components/FlatGraph.jsx +282 -0
  628. package/src/viewer/components/MicroComponents.jsx +85 -0
  629. package/src/viewer/hooks/usePanZoom.js +79 -0
  630. package/src/viewer/utils/constants.js +64 -0
  631. package/src/viewer/utils/graph-helpers.js +303 -0
  632. package/src/viewer/utils/graph-helpers.test.ts +39 -0
  633. package/src/viewer/utils/themes.js +206 -0
  634. package/stubs/tree-sitter-cli-stub/package.json +6 -0
@@ -0,0 +1,598 @@
1
+ /**
2
+ * Drift Detection Engine
3
+ *
4
+ * Compares code changes (from git) against existing specs (from spec-mapper)
5
+ * to detect gaps, stale specs, uncovered files, and orphaned specs.
6
+ */
7
+ import { access } from 'node:fs/promises';
8
+ import { join, basename } from 'node:path';
9
+ import { DRIFT_CLASSIFICATION_MAX_TOKENS, OPENLORE_DIR, OPENSPEC_DIR } from '../../constants.js';
10
+ import { matchFileToDomains, getSpecContent } from './spec-mapper.js';
11
+ import { getFileDiff } from './git-diff.js';
12
+ import logger from '../../utils/logger.js';
13
+ // ============================================================================
14
+ // FILE RELEVANCE
15
+ // ============================================================================
16
+ /** High-value filename patterns that indicate spec-relevant source files */
17
+ const HIGH_VALUE_PATTERNS = [
18
+ /service/i, /controller/i, /handler/i, /middleware/i,
19
+ /model/i, /schema/i, /entity/i, /repository/i,
20
+ /route/i, /api/i, /auth/i, /database/i,
21
+ ];
22
+ /**
23
+ * Determine if a changed file is relevant for spec drift detection.
24
+ * Filters out test files, generated files, lock files, assets, etc.
25
+ * @param openspecRelPath - relative path to the openspec directory (default: "openspec")
26
+ */
27
+ export function isSpecRelevantChange(file, openspecRelPath = OPENSPEC_DIR) {
28
+ // Always skip tests and generated files
29
+ if (file.isTest || file.isGenerated)
30
+ return false;
31
+ // Skip openspec directory changes (those are spec updates, not drift)
32
+ // Normalize leading "./" from config paths to match git-reported paths
33
+ const normalizedSpecPath = openspecRelPath.replace(/^\.\//, '').replace(/\/$/, '');
34
+ const specPrefix = normalizedSpecPath + '/';
35
+ if (file.path.startsWith(specPrefix) || file.path.startsWith(`${OPENLORE_DIR}/`))
36
+ return false;
37
+ // Skip markdown files: docs, changelogs, readmes, contributing guides, etc.
38
+ // Only source-embedded .md in non-root src directories could be spec-relevant.
39
+ if (file.extension === '.md') {
40
+ const fileName = basename(file.path).toLowerCase();
41
+ const dir = file.path.split('/')[0];
42
+ // Skip docs directories
43
+ if (dir === 'docs' || dir === 'doc')
44
+ return false;
45
+ // Skip common standalone markdown files
46
+ if (/^(readme|changelog|changes|history|contributing|license|authors|code.of.conduct|security|todo)/i.test(fileName)) {
47
+ return false;
48
+ }
49
+ // Skip root-level markdown (not inside src/)
50
+ if (!file.path.includes('/'))
51
+ return false;
52
+ }
53
+ // Skip static assets and lock files (already filtered by git-diff, but double-check)
54
+ const skipExtensions = new Set([
55
+ '.lock', '.lockb', '.map', '.min.js', '.min.css',
56
+ '.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico',
57
+ '.woff', '.woff2', '.ttf',
58
+ ]);
59
+ if (skipExtensions.has(file.extension))
60
+ return false;
61
+ // Skip CI/CD configs
62
+ const fileName = basename(file.path);
63
+ if (fileName === '.github' || file.path.startsWith('.github/'))
64
+ return false;
65
+ if (fileName === '.gitlab-ci.yml' || fileName === 'Dockerfile')
66
+ return false;
67
+ // Config files: some are relevant (config.ts, settings.ts), some aren't
68
+ if (file.isConfig) {
69
+ // Manifest files with new dependencies can signal new capabilities
70
+ if (fileName === 'package.json')
71
+ return true;
72
+ // Build configs are not spec-relevant
73
+ if (/tsconfig|eslint|prettier|babel|jest|vitest|webpack|rollup|vite\.config/i.test(fileName)) {
74
+ return false;
75
+ }
76
+ // App config files are relevant
77
+ return true;
78
+ }
79
+ return true;
80
+ }
81
+ /**
82
+ * Check if a file is a high-value source file (services, controllers, models, etc.)
83
+ */
84
+ function isHighValueFile(filePath) {
85
+ const fileName = basename(filePath);
86
+ return HIGH_VALUE_PATTERNS.some(p => p.test(fileName));
87
+ }
88
+ /**
89
+ * Compute severity based on issue kind and change magnitude
90
+ */
91
+ export function computeSeverity(kind, file) {
92
+ const totalChanges = file.additions + file.deletions;
93
+ switch (kind) {
94
+ case 'gap':
95
+ if (totalChanges > 30 && isHighValueFile(file.path))
96
+ return 'error';
97
+ if (totalChanges > 5)
98
+ return 'warning';
99
+ return 'info';
100
+ case 'stale':
101
+ if (file.status === 'deleted')
102
+ return 'error';
103
+ return 'warning';
104
+ case 'uncovered':
105
+ if (isHighValueFile(file.path))
106
+ return 'warning';
107
+ return 'info';
108
+ case 'orphaned-spec':
109
+ return 'warning';
110
+ default:
111
+ return 'info';
112
+ }
113
+ }
114
+ // ============================================================================
115
+ // DETECTION ALGORITHMS
116
+ // ============================================================================
117
+ /**
118
+ * Extract domain names whose specs were also changed in this changeset.
119
+ * Must be called on the FULL changedFiles list (before isSpecRelevantChange
120
+ * filtering), because spec files live under openspec/ which isSpecRelevantChange
121
+ * intentionally excludes from source-drift analysis.
122
+ *
123
+ * @param openspecRelPath - relative path prefix for spec files (default: "openspec")
124
+ */
125
+ export function extractChangedSpecDomains(changedFiles, openspecRelPath = OPENSPEC_DIR) {
126
+ const domains = new Set();
127
+ // Normalize: strip leading "./" and trailing slash, escape for regex
128
+ const prefix = openspecRelPath.replace(/^\.\//, '').replace(/\/$/, '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
129
+ const pattern = new RegExp(`^${prefix}/specs/([^/]+)/`);
130
+ for (const file of changedFiles) {
131
+ const specMatch = file.path.match(pattern);
132
+ if (specMatch) {
133
+ domains.add(specMatch[1]);
134
+ }
135
+ }
136
+ return domains;
137
+ }
138
+ /**
139
+ * Detect gaps: code changed in a domain but spec wasn't updated.
140
+ * Pass pre-computed changedSpecDomains to avoid depending on openspec/ files
141
+ * being present in changedFiles (they are excluded by isSpecRelevantChange).
142
+ */
143
+ export function detectGaps(changedFiles, specMap, changedSpecDomains, openspecRelPath) {
144
+ const issues = [];
145
+ // Use pre-computed set if available, otherwise extract from full list
146
+ const updatedSpecDomains = changedSpecDomains ?? extractChangedSpecDomains(changedFiles);
147
+ for (const file of changedFiles) {
148
+ if (!isSpecRelevantChange(file, openspecRelPath))
149
+ continue;
150
+ if (file.status === 'deleted')
151
+ continue; // Deletions handled by detectStaleSpecs
152
+ const domains = matchFileToDomains(file.path, specMap);
153
+ if (domains.length === 0)
154
+ continue; // No spec coverage — handled by detectUncoveredFiles
155
+ for (const domain of domains) {
156
+ // If the spec was also updated, no gap
157
+ if (updatedSpecDomains.has(domain))
158
+ continue;
159
+ const mapping = specMap.byDomain.get(domain);
160
+ const severity = computeSeverity('gap', file);
161
+ issues.push({
162
+ id: `gap:${file.path}:${domain}`,
163
+ kind: 'gap',
164
+ severity,
165
+ message: `File \`${file.path}\` changed (+${file.additions}/-${file.deletions} lines) but spec \`${mapping?.specPath ?? domain}\` was not updated`,
166
+ filePath: file.path,
167
+ domain,
168
+ specPath: mapping?.specPath ?? null,
169
+ changedLines: { added: file.additions, removed: file.deletions },
170
+ suggestion: `Review the ${domain} spec to ensure it still accurately describes the behavior in ${file.path}`,
171
+ });
172
+ }
173
+ }
174
+ return issues;
175
+ }
176
+ /**
177
+ * Detect stale specs: spec references files that were deleted or heavily modified
178
+ */
179
+ export function detectStaleSpecs(changedFiles, specMap) {
180
+ const issues = [];
181
+ // Build a lookup of changed files by path
182
+ const changedByPath = new Map();
183
+ for (const file of changedFiles) {
184
+ changedByPath.set(file.path, file);
185
+ if (file.oldPath) {
186
+ changedByPath.set(file.oldPath, file);
187
+ }
188
+ }
189
+ for (const [domain, mapping] of specMap.byDomain) {
190
+ for (const sourceFile of mapping.declaredSourceFiles) {
191
+ const changed = changedByPath.get(sourceFile);
192
+ if (!changed)
193
+ continue;
194
+ if (changed.status === 'deleted') {
195
+ issues.push({
196
+ id: `stale:${sourceFile}:${domain}`,
197
+ kind: 'stale',
198
+ severity: 'error',
199
+ message: `Spec \`${mapping.specPath}\` references deleted file \`${sourceFile}\``,
200
+ filePath: sourceFile,
201
+ domain,
202
+ specPath: mapping.specPath,
203
+ suggestion: `Update the ${domain} spec to remove references to ${sourceFile}`,
204
+ });
205
+ }
206
+ else if (changed.status === 'renamed') {
207
+ issues.push({
208
+ id: `stale:${sourceFile}:${domain}`,
209
+ kind: 'stale',
210
+ severity: 'warning',
211
+ message: `Spec \`${mapping.specPath}\` references \`${sourceFile}\` which was renamed to \`${changed.path}\``,
212
+ filePath: sourceFile,
213
+ domain,
214
+ specPath: mapping.specPath,
215
+ suggestion: `Update the ${domain} spec to reference the new path \`${changed.path}\``,
216
+ });
217
+ }
218
+ }
219
+ }
220
+ return issues;
221
+ }
222
+ /**
223
+ * Detect uncovered files: new files that don't map to any spec domain
224
+ */
225
+ export function detectUncoveredFiles(changedFiles, specMap, openspecRelPath) {
226
+ const issues = [];
227
+ for (const file of changedFiles) {
228
+ if (!isSpecRelevantChange(file, openspecRelPath))
229
+ continue;
230
+ if (file.status !== 'added')
231
+ continue;
232
+ const domains = matchFileToDomains(file.path, specMap);
233
+ if (domains.length > 0)
234
+ continue; // Already covered by a domain
235
+ const severity = computeSeverity('uncovered', file);
236
+ issues.push({
237
+ id: `uncovered:${file.path}`,
238
+ kind: 'uncovered',
239
+ severity,
240
+ message: `New file \`${file.path}\` has no matching spec domain`,
241
+ filePath: file.path,
242
+ domain: null,
243
+ specPath: null,
244
+ changedLines: { added: file.additions, removed: 0 },
245
+ suggestion: `Consider adding \`${file.path}\` to an existing spec domain or creating a new spec`,
246
+ });
247
+ }
248
+ return issues;
249
+ }
250
+ /** Meta-domains that describe architecture/overview rather than owning source files */
251
+ const META_DOMAINS = new Set(['overview', 'architecture']);
252
+ /**
253
+ * Detect orphaned specs: spec declares source files that don't exist on disk.
254
+ * Skips meta-domains (overview, architecture) which often have generic paths.
255
+ */
256
+ export async function detectOrphanedSpecs(specMap, rootPath) {
257
+ const issues = [];
258
+ for (const [domain, mapping] of specMap.byDomain) {
259
+ // Skip meta-domains — their "source files" are structural, not ownable
260
+ if (META_DOMAINS.has(domain))
261
+ continue;
262
+ for (const sourceFile of mapping.declaredSourceFiles) {
263
+ const fullPath = join(rootPath, sourceFile);
264
+ try {
265
+ await access(fullPath);
266
+ }
267
+ catch {
268
+ issues.push({
269
+ id: `orphaned-spec:${sourceFile}:${domain}`,
270
+ kind: 'orphaned-spec',
271
+ severity: 'warning',
272
+ message: `Spec \`${mapping.specPath}\` declares source file \`${sourceFile}\` which does not exist`,
273
+ filePath: sourceFile,
274
+ domain,
275
+ specPath: mapping.specPath,
276
+ suggestion: `Update the ${domain} spec to remove the reference to \`${sourceFile}\`, or restore the file`,
277
+ });
278
+ }
279
+ }
280
+ }
281
+ return issues;
282
+ }
283
+ // ============================================================================
284
+ // ADR DRIFT DETECTION
285
+ // ============================================================================
286
+ /**
287
+ * Extract ADR IDs that were changed in this changeset.
288
+ * Matches files like: openspec/decisions/adr-0001-foo.md
289
+ */
290
+ export function extractChangedADRIds(changedFiles, openspecRelPath = OPENSPEC_DIR) {
291
+ const ids = new Set();
292
+ const prefix = openspecRelPath.replace(/^\.\//, '').replace(/\/$/, '');
293
+ const pattern = new RegExp(`^${prefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}/decisions/adr-(\\d+)-`);
294
+ for (const file of changedFiles) {
295
+ const match = file.path.match(pattern);
296
+ if (match) {
297
+ ids.add(`ADR-${match[1].replace(/^0+/, '') || '0'}`);
298
+ }
299
+ }
300
+ return ids;
301
+ }
302
+ /**
303
+ * Detect ADR gaps: code changed in a domain referenced by an ADR,
304
+ * but the ADR wasn't updated. Reports once per ADR, not per file.
305
+ * Severity is always 'info' — most code changes don't invalidate decisions.
306
+ */
307
+ export function detectADRGaps(changedFiles, adrMap, specMap, changedADRIds, openspecRelPath) {
308
+ const issues = [];
309
+ const reportedADRs = new Set();
310
+ // Collect all domains that have changed code
311
+ const changedDomains = new Set();
312
+ for (const file of changedFiles) {
313
+ if (!isSpecRelevantChange(file, openspecRelPath))
314
+ continue;
315
+ if (file.status === 'deleted')
316
+ continue;
317
+ const domains = matchFileToDomains(file.path, specMap);
318
+ for (const d of domains)
319
+ changedDomains.add(d);
320
+ }
321
+ // For each ADR, check if any of its related domains had code changes
322
+ for (const [id, mapping] of adrMap.byId) {
323
+ if (changedADRIds.has(id))
324
+ continue;
325
+ if (reportedADRs.has(id))
326
+ continue;
327
+ const affectedDomains = mapping.relatedDomains.filter(d => changedDomains.has(d));
328
+ if (affectedDomains.length === 0)
329
+ continue;
330
+ reportedADRs.add(id);
331
+ issues.push({
332
+ id: `adr-gap:${mapping.adrPath}:${id}`,
333
+ kind: 'adr-gap',
334
+ severity: 'info',
335
+ message: `Code changed in domain(s) ${affectedDomains.join(', ')} referenced by ${id}: "${mapping.title}"`,
336
+ filePath: mapping.adrPath,
337
+ domain: affectedDomains[0],
338
+ specPath: mapping.adrPath,
339
+ suggestion: `Review ${id} to ensure the decision still applies after changes to ${affectedDomains.join(', ')}`,
340
+ });
341
+ }
342
+ return issues;
343
+ }
344
+ /**
345
+ * Detect orphaned ADRs: ADR references domains that no longer exist in specs.
346
+ */
347
+ export function detectADROrphaned(adrMap, specMap) {
348
+ const issues = [];
349
+ for (const [id, mapping] of adrMap.byId) {
350
+ const orphanedDomains = mapping.relatedDomains.filter(d => !specMap.byDomain.has(d));
351
+ if (orphanedDomains.length === 0)
352
+ continue;
353
+ issues.push({
354
+ id: `adr-orphaned:${mapping.adrPath}:${id}`,
355
+ kind: 'adr-orphaned',
356
+ severity: 'info',
357
+ message: `${id}: "${mapping.title}" references domain(s) ${orphanedDomains.join(', ')} which no longer exist in specs`,
358
+ filePath: mapping.adrPath,
359
+ domain: null,
360
+ specPath: mapping.adrPath,
361
+ suggestion: `Review ${id} — the referenced domain(s) ${orphanedDomains.join(', ')} may have been removed or renamed`,
362
+ });
363
+ }
364
+ return issues;
365
+ }
366
+ // ============================================================================
367
+ // SEVERITY COMPARISON
368
+ // ============================================================================
369
+ const SEVERITY_RANK = {
370
+ error: 3,
371
+ warning: 2,
372
+ info: 1,
373
+ };
374
+ /**
375
+ * Check if an issue meets or exceeds the given severity threshold
376
+ */
377
+ function meetsThreshold(issue, threshold) {
378
+ return SEVERITY_RANK[issue.severity] >= SEVERITY_RANK[threshold];
379
+ }
380
+ // ============================================================================
381
+ // LLM ENHANCEMENT
382
+ // ============================================================================
383
+ const LLM_SYSTEM_PROMPT = `You are a spec drift analyzer. Given a code diff and a specification, determine if the code change affects behavior described in the spec.
384
+
385
+ Respond with JSON only: { "relevant": boolean, "confidence": "high" | "medium" | "low", "reason": "one sentence explanation" }
386
+
387
+ - relevant=true: The change modifies, adds, or removes behavior covered by the spec
388
+ - relevant=false: The change is internal (refactoring, formatting, comments, test-only, perf optimization) and doesn't affect spec-described behavior
389
+
390
+ Be conservative: if unsure, mark as relevant.`;
391
+ /**
392
+ * Post-process gap issues using an LLM to determine if code changes
393
+ * actually affect spec-documented behavior. This reduces false positives
394
+ * by dismissing purely internal changes (refactoring, formatting, etc.).
395
+ *
396
+ * Only processes 'gap' issues. Other issue types (stale, uncovered, orphaned)
397
+ * are structural and don't benefit from semantic analysis.
398
+ */
399
+ export async function enhanceGapsWithLLM(issues, options) {
400
+ const { llm, rootPath, specMap, baseRef, maxLlmCalls = 10 } = options;
401
+ const getDiff = options._getDiff ?? getFileDiff;
402
+ const getSpec = options._getSpec ?? getSpecContent;
403
+ // Separate gap issues from non-gap issues
404
+ const gapIssues = issues.filter(i => i.kind === 'gap');
405
+ const nonGapIssues = issues.filter(i => i.kind !== 'gap');
406
+ if (gapIssues.length === 0) {
407
+ return issues;
408
+ }
409
+ // Prioritize: errors first, then warnings, then info
410
+ const sortedGaps = [...gapIssues].sort((a, b) => SEVERITY_RANK[b.severity] - SEVERITY_RANK[a.severity]);
411
+ // Cap at maxLlmCalls
412
+ const toProcess = sortedGaps.slice(0, maxLlmCalls);
413
+ const skipped = sortedGaps.slice(maxLlmCalls);
414
+ const enhancedGaps = [];
415
+ for (const issue of toProcess) {
416
+ try {
417
+ // Get the code diff for this file
418
+ const diff = await getDiff(rootPath, issue.filePath, baseRef);
419
+ if (!diff) {
420
+ enhancedGaps.push(issue);
421
+ continue;
422
+ }
423
+ // Get the spec content for this domain
424
+ const specContent = issue.domain
425
+ ? await getSpec(issue.domain, specMap, rootPath)
426
+ : null;
427
+ if (!specContent) {
428
+ enhancedGaps.push(issue);
429
+ continue;
430
+ }
431
+ // Ask the LLM
432
+ const userPrompt = `## Code Diff\n\`\`\`diff\n${diff}\n\`\`\`\n\n## Specification (${issue.domain})\n${specContent}`;
433
+ const response = await llm.complete({
434
+ systemPrompt: LLM_SYSTEM_PROMPT,
435
+ userPrompt,
436
+ temperature: 0.1,
437
+ maxTokens: DRIFT_CLASSIFICATION_MAX_TOKENS,
438
+ responseFormat: 'json',
439
+ });
440
+ // Parse LLM response
441
+ const classification = parseLLMClassification(response.content);
442
+ if (classification) {
443
+ if (!classification.relevant && classification.confidence === 'high') {
444
+ // Downgrade to info — change is not spec-relevant
445
+ enhancedGaps.push({
446
+ ...issue,
447
+ severity: 'info',
448
+ suggestion: `[LLM] Not spec-relevant: ${classification.reason}`,
449
+ });
450
+ }
451
+ else if (classification.relevant) {
452
+ // Keep severity, enrich suggestion with LLM reasoning
453
+ enhancedGaps.push({
454
+ ...issue,
455
+ suggestion: `${issue.suggestion} [LLM: ${classification.reason}]`,
456
+ });
457
+ }
458
+ else {
459
+ // Low/medium confidence non-relevant — keep as-is but annotate
460
+ enhancedGaps.push({
461
+ ...issue,
462
+ suggestion: `${issue.suggestion} [LLM (${classification.confidence} confidence): possibly not spec-relevant — ${classification.reason}]`,
463
+ });
464
+ }
465
+ }
466
+ else {
467
+ // Could not parse LLM response — keep issue unchanged
468
+ enhancedGaps.push(issue);
469
+ }
470
+ }
471
+ catch (error) {
472
+ logger.debug(`LLM enhancement failed for ${issue.filePath}: ${error.message}`);
473
+ enhancedGaps.push(issue);
474
+ }
475
+ }
476
+ // Recombine: non-gap issues + enhanced gaps + skipped gaps (unchanged)
477
+ return [...nonGapIssues, ...enhancedGaps, ...skipped];
478
+ }
479
+ /**
480
+ * Parse the LLM's JSON response into a classification object.
481
+ * Handles markdown code blocks, extra whitespace, etc.
482
+ */
483
+ function parseLLMClassification(content) {
484
+ try {
485
+ // Strip markdown code blocks if present
486
+ let jsonStr = content.trim();
487
+ const codeBlockMatch = jsonStr.match(/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/);
488
+ if (codeBlockMatch) {
489
+ jsonStr = codeBlockMatch[1].trim();
490
+ }
491
+ const parsed = JSON.parse(jsonStr);
492
+ // Validate expected shape
493
+ if (typeof parsed.relevant !== 'boolean')
494
+ return null;
495
+ if (!['high', 'medium', 'low'].includes(parsed.confidence)) {
496
+ parsed.confidence = 'medium'; // Default if invalid
497
+ }
498
+ if (typeof parsed.reason !== 'string') {
499
+ parsed.reason = 'No reason provided';
500
+ }
501
+ return {
502
+ relevant: parsed.relevant,
503
+ confidence: parsed.confidence,
504
+ reason: parsed.reason,
505
+ };
506
+ }
507
+ catch {
508
+ return null;
509
+ }
510
+ }
511
+ // ============================================================================
512
+ // MAIN DETECTION
513
+ // ============================================================================
514
+ /**
515
+ * Run all drift detection algorithms and produce a combined result
516
+ */
517
+ export async function detectDrift(options) {
518
+ const startTime = Date.now();
519
+ const { specMap, changedFiles, failOn, rootPath, domainFilter, openspecRelPath } = options;
520
+ // Pre-compute which spec domains were also updated in this changeset.
521
+ // This must happen before any filtering, since openspec/ files are excluded
522
+ // by isSpecRelevantChange but needed for gap detection.
523
+ const changedSpecDomains = extractChangedSpecDomains(changedFiles, openspecRelPath);
524
+ // Run all detection algorithms
525
+ const gaps = detectGaps(changedFiles, specMap, changedSpecDomains, openspecRelPath);
526
+ const stale = detectStaleSpecs(changedFiles, specMap);
527
+ const uncovered = detectUncoveredFiles(changedFiles, specMap, openspecRelPath);
528
+ const orphaned = await detectOrphanedSpecs(specMap, rootPath);
529
+ // ADR drift detection (when ADR map is provided)
530
+ let adrGaps = [];
531
+ let adrOrphanedIssues = [];
532
+ if (options.adrMap) {
533
+ const changedADRIds = extractChangedADRIds(changedFiles, openspecRelPath);
534
+ adrGaps = detectADRGaps(changedFiles, options.adrMap, specMap, changedADRIds, openspecRelPath);
535
+ adrOrphanedIssues = detectADROrphaned(options.adrMap, specMap);
536
+ }
537
+ // Combine all issues
538
+ let allIssues = [...gaps, ...stale, ...uncovered, ...orphaned, ...adrGaps, ...adrOrphanedIssues];
539
+ // Apply domain filter if provided — exclude null-domain issues too,
540
+ // since the user only wants results for the specified domains
541
+ if (domainFilter && domainFilter.length > 0) {
542
+ allIssues = allIssues.filter(issue => issue.domain !== null && domainFilter.includes(issue.domain));
543
+ }
544
+ // Deduplicate by id
545
+ const seen = new Set();
546
+ let dedupedIssues = [];
547
+ for (const issue of allIssues) {
548
+ if (!seen.has(issue.id)) {
549
+ seen.add(issue.id);
550
+ dedupedIssues.push(issue);
551
+ }
552
+ }
553
+ // LLM enhancement: post-process gap issues to reduce false positives
554
+ if (options.llm && options.baseRef) {
555
+ dedupedIssues = await enhanceGapsWithLLM(dedupedIssues, {
556
+ llm: options.llm,
557
+ rootPath,
558
+ specMap,
559
+ baseRef: options.baseRef,
560
+ maxLlmCalls: options.maxLlmCalls,
561
+ });
562
+ }
563
+ // Sort by severity (error > warning > info), then domain, then file path
564
+ dedupedIssues.sort((a, b) => {
565
+ const severityDiff = SEVERITY_RANK[b.severity] - SEVERITY_RANK[a.severity];
566
+ if (severityDiff !== 0)
567
+ return severityDiff;
568
+ const domainDiff = (a.domain ?? '').localeCompare(b.domain ?? '');
569
+ if (domainDiff !== 0)
570
+ return domainDiff;
571
+ return a.filePath.localeCompare(b.filePath);
572
+ });
573
+ // Count spec-relevant changed files
574
+ const specRelevantFiles = changedFiles.filter(f => isSpecRelevantChange(f, openspecRelPath)).length;
575
+ // Determine if drift was detected based on failOn threshold
576
+ const hasDrift = dedupedIssues.some(issue => meetsThreshold(issue, failOn));
577
+ const duration = Date.now() - startTime;
578
+ return {
579
+ timestamp: new Date().toISOString(),
580
+ baseRef: options.baseRef ?? '',
581
+ totalChangedFiles: changedFiles.length,
582
+ specRelevantFiles,
583
+ issues: dedupedIssues,
584
+ summary: {
585
+ gaps: dedupedIssues.filter(i => i.kind === 'gap').length,
586
+ stale: dedupedIssues.filter(i => i.kind === 'stale').length,
587
+ uncovered: dedupedIssues.filter(i => i.kind === 'uncovered').length,
588
+ orphanedSpecs: dedupedIssues.filter(i => i.kind === 'orphaned-spec').length,
589
+ adrGaps: dedupedIssues.filter(i => i.kind === 'adr-gap').length,
590
+ adrOrphaned: dedupedIssues.filter(i => i.kind === 'adr-orphaned').length,
591
+ total: dedupedIssues.length,
592
+ },
593
+ hasDrift,
594
+ duration,
595
+ mode: options.llm ? 'llm-enhanced' : 'static',
596
+ };
597
+ }
598
+ //# sourceMappingURL=drift-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift-detector.js","sourceRoot":"","sources":["../../../src/core/drift/drift-detector.ts"],"names":[],"mappings":"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"}