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,35 @@
1
+ /**
2
+ * THEN Clause Pattern Engine
3
+ *
4
+ * Transforms natural-language THEN clauses from OpenSpec scenarios into
5
+ * framework-specific assertion lines — without any LLM call.
6
+ *
7
+ * Design principles:
8
+ * - Pure functions only, no I/O
9
+ * - Each pattern matches a common spec phrase and emits assertions
10
+ * - Multiple assertions can be emitted per THEN line
11
+ * - Falls back to a TODO placeholder when no pattern matches
12
+ * - Framework-aware: same pattern emits different syntax per framework
13
+ *
14
+ * Adding a new pattern:
15
+ * 1. Add a ThenPattern to PATTERNS below
16
+ * 2. Add assertions for all five frameworks in its `assertions` object
17
+ */
18
+ import type { TestFramework } from '../../types/test-generator.js';
19
+ export interface ThenMatch {
20
+ /** Assertion source lines for the given framework */
21
+ lines: string[];
22
+ /** Which THEN clause index this matched */
23
+ thenIndex: number;
24
+ /** true = came from pattern engine; false = placeholder */
25
+ fromPattern: boolean;
26
+ }
27
+ /**
28
+ * Match THEN clauses against the pattern library and return assertion lines.
29
+ *
30
+ * @param thenClauses Array of THEN clause strings (one per bullet)
31
+ * @param framework Target test framework
32
+ * @returns Array of ThenMatch — one per THEN clause
33
+ */
34
+ export declare function matchThenClauses(thenClauses: string[], framework: TestFramework): ThenMatch[];
35
+ //# sourceMappingURL=then-matchers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"then-matchers.d.ts","sourceRoot":"","sources":["../../../src/core/test-generator/then-matchers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMnE,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;CACtB;AAoMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,aAAa,GACvB,SAAS,EAAE,CAmBb"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * THEN Clause Pattern Engine
3
+ *
4
+ * Transforms natural-language THEN clauses from OpenSpec scenarios into
5
+ * framework-specific assertion lines — without any LLM call.
6
+ *
7
+ * Design principles:
8
+ * - Pure functions only, no I/O
9
+ * - Each pattern matches a common spec phrase and emits assertions
10
+ * - Multiple assertions can be emitted per THEN line
11
+ * - Falls back to a TODO placeholder when no pattern matches
12
+ * - Framework-aware: same pattern emits different syntax per framework
13
+ *
14
+ * Adding a new pattern:
15
+ * 1. Add a ThenPattern to PATTERNS below
16
+ * 2. Add assertions for all five frameworks in its `assertions` object
17
+ */
18
+ // ============================================================================
19
+ // PATTERN LIBRARY
20
+ // ============================================================================
21
+ const PATTERNS = [
22
+ // ── "returns status <N> with error '<msg>'" ──────────────────────────────
23
+ {
24
+ regex: /returns?\s+status\s+(\d+)\s+with\s+error\s+["']([^"']+)["']/i,
25
+ assertions: {
26
+ vitest: ([, status, msg]) => [
27
+ `expect(response.status).toBe(${status});`,
28
+ `expect(response.body.error).toBe('${msg}');`,
29
+ ],
30
+ playwright: ([, status, msg]) => [
31
+ `expect(response.status()).toBe(${status});`,
32
+ `expect(await response.json()).toMatchObject({ error: '${msg}' });`,
33
+ ],
34
+ pytest: ([, status, msg]) => [
35
+ `assert response.status_code == ${status}`,
36
+ `assert response.json()["error"] == "${msg}"`,
37
+ ],
38
+ gtest: ([, status, msg]) => [
39
+ `EXPECT_EQ(response.status, ${status});`,
40
+ `EXPECT_EQ(response.body["error"], "${msg}");`,
41
+ ],
42
+ catch2: ([, status, msg]) => [
43
+ `REQUIRE(response.status == ${status});`,
44
+ `REQUIRE(response.body["error"] == "${msg}");`,
45
+ ],
46
+ },
47
+ },
48
+ // ── "returns status <N>" ─────────────────────────────────────────────────
49
+ {
50
+ regex: /returns?\s+status\s+(\d+)/i,
51
+ assertions: {
52
+ vitest: ([, status]) => [`expect(response.status).toBe(${status});`],
53
+ playwright: ([, status]) => [`expect(response.status()).toBe(${status});`],
54
+ pytest: ([, status]) => [`assert response.status_code == ${status}`],
55
+ gtest: ([, status]) => [`EXPECT_EQ(response.status, ${status});`],
56
+ catch2: ([, status]) => [`REQUIRE(response.status == ${status});`],
57
+ },
58
+ },
59
+ // ── "returns a/an <prop> [, <prop>] [and <prop>]" ────────────────────────
60
+ // e.g. "returns a JWT token, expiry time, and userId"
61
+ {
62
+ regex: /returns?\s+(?:a|an)\s+(.+?)(?:\s+with\s+status\s+\d+)?$/i,
63
+ assertions: {
64
+ vitest: ([, propsStr]) => extractProps(propsStr).map((p) => `expect(response.body).toHaveProperty('${p}');`),
65
+ playwright: ([, propsStr]) => [
66
+ `const body = await response.json();`,
67
+ ...extractProps(propsStr).map((p) => `expect(body).toHaveProperty('${p}');`),
68
+ ],
69
+ pytest: ([, propsStr]) => [
70
+ `body = response.json()`,
71
+ ...extractProps(propsStr).map((p) => `assert "${p}" in body`),
72
+ ],
73
+ gtest: ([, propsStr]) => extractProps(propsStr).map((p) => `EXPECT_TRUE(response.body.contains("${p}"));`),
74
+ catch2: ([, propsStr]) => extractProps(propsStr).map((p) => `REQUIRE(response.body.contains("${p}"));`),
75
+ },
76
+ },
77
+ // ── "creates/creates the <entity> with <field> '<value>'" ─────────────────
78
+ {
79
+ regex: /creates?\s+(?:the\s+)?\w+\s+with\s+(\w+)\s+["']([^"']+)["']/i,
80
+ assertions: {
81
+ vitest: ([, field, value]) => [
82
+ `expect(result.${field}).toBe('${value}');`,
83
+ ],
84
+ playwright: ([, field, value]) => [
85
+ `const result = await response.json();`,
86
+ `expect(result.${field}).toBe('${value}');`,
87
+ ],
88
+ pytest: ([, field, value]) => [
89
+ `result = response.json()`,
90
+ `assert result["${field}"] == "${value}"`,
91
+ ],
92
+ gtest: ([, field, value]) => [
93
+ `EXPECT_EQ(result.${field}, "${value}");`,
94
+ ],
95
+ catch2: ([, field, value]) => [
96
+ `REQUIRE(result.${field} == "${value}");`,
97
+ ],
98
+ },
99
+ },
100
+ // ── "returns the <entity> with status <N>" ───────────────────────────────
101
+ {
102
+ regex: /returns?\s+(?:the\s+)?\w+\s+(?:and\s+)?\w*\s*with\s+status\s+(\d+)/i,
103
+ assertions: {
104
+ vitest: ([, status]) => [
105
+ `expect(response.status).toBe(${status});`,
106
+ `expect(response.body).toBeDefined();`,
107
+ ],
108
+ playwright: ([, status]) => [
109
+ `expect(response.status()).toBe(${status});`,
110
+ ],
111
+ pytest: ([, status]) => [
112
+ `assert response.status_code == ${status}`,
113
+ `assert response.json() is not None`,
114
+ ],
115
+ gtest: ([, status]) => [
116
+ `EXPECT_EQ(response.status, ${status});`,
117
+ `EXPECT_FALSE(response.body.empty());`,
118
+ ],
119
+ catch2: ([, status]) => [
120
+ `REQUIRE(response.status == ${status});`,
121
+ `REQUIRE(!response.body.empty());`,
122
+ ],
123
+ },
124
+ },
125
+ // ── "throws/raises an error" ─────────────────────────────────────────────
126
+ {
127
+ regex: /(?:throws?|raises?)\s+(?:an?\s+)?(?:error|exception)/i,
128
+ assertions: {
129
+ vitest: () => [`await expect(action()).rejects.toThrow();`],
130
+ playwright: () => [`// TODO: verify error is thrown`],
131
+ pytest: () => [`with pytest.raises(Exception):\n action()`],
132
+ gtest: () => [`EXPECT_THROW(action(), std::exception);`],
133
+ catch2: () => [`REQUIRE_THROWS(action());`],
134
+ },
135
+ },
136
+ // ── "does not/doesn't <verb>" ────────────────────────────────────────────
137
+ {
138
+ regex: /does\s+not|doesn'?t/i,
139
+ assertions: {
140
+ vitest: () => [`expect(result).toBeUndefined(); // TODO: verify negative case`],
141
+ playwright: () => [`// TODO: verify negative behavior`],
142
+ pytest: () => [`assert result is None # TODO: verify negative case`],
143
+ gtest: () => [`EXPECT_FALSE(result.has_value()); // TODO: verify negative case`],
144
+ catch2: () => [`REQUIRE_FALSE(result.has_value()); // TODO: verify negative case`],
145
+ },
146
+ },
147
+ ];
148
+ // ============================================================================
149
+ // HELPERS
150
+ // ============================================================================
151
+ /**
152
+ * Extract property names from a "a JWT token, expiry time, and userId" string.
153
+ * Strips filler words (a/an/the/time/etc.) to get clean property identifiers.
154
+ */
155
+ function extractProps(raw) {
156
+ // Remove "and", split on comma
157
+ const parts = raw
158
+ .replace(/\band\b/gi, ',')
159
+ .split(',')
160
+ .map((p) => p.trim())
161
+ .filter(Boolean);
162
+ return parts.map((p) => {
163
+ // Take the last "word" in each part as the property name — usually correct
164
+ // "JWT token" → "token", "expiry time" → "expiry", "userId" → "userId"
165
+ const words = p.replace(/[^a-zA-Z0-9\s_]/g, '').trim().split(/\s+/);
166
+ // If last word is a filler, take the one before it
167
+ const fillers = new Set(['time', 'date', 'value', 'object', 'item', 'entity']);
168
+ if (words.length > 1 && fillers.has(words[words.length - 1].toLowerCase())) {
169
+ return words[words.length - 2];
170
+ }
171
+ return words[words.length - 1];
172
+ }).filter(Boolean);
173
+ }
174
+ // ============================================================================
175
+ // PUBLIC API
176
+ // ============================================================================
177
+ const PLACEHOLDER = {
178
+ vitest: `expect(true).toBe(true); // TODO: implement assertion`,
179
+ playwright: `// TODO: implement assertion`,
180
+ pytest: `assert True # TODO: implement assertion`,
181
+ gtest: `SUCCEED(); // TODO: implement assertion`,
182
+ catch2: `SUCCEED(); // TODO: implement assertion`,
183
+ };
184
+ /**
185
+ * Match THEN clauses against the pattern library and return assertion lines.
186
+ *
187
+ * @param thenClauses Array of THEN clause strings (one per bullet)
188
+ * @param framework Target test framework
189
+ * @returns Array of ThenMatch — one per THEN clause
190
+ */
191
+ export function matchThenClauses(thenClauses, framework) {
192
+ return thenClauses.map((clause, thenIndex) => {
193
+ for (const pattern of PATTERNS) {
194
+ const m = clause.match(pattern.regex);
195
+ if (m) {
196
+ const builder = pattern.assertions[framework];
197
+ const lines = builder(m);
198
+ if (lines.length > 0) {
199
+ return { lines, thenIndex, fromPattern: true };
200
+ }
201
+ }
202
+ }
203
+ // No pattern matched — emit placeholder
204
+ return {
205
+ lines: [PLACEHOLDER[framework]],
206
+ thenIndex,
207
+ fromPattern: false,
208
+ };
209
+ });
210
+ }
211
+ //# sourceMappingURL=then-matchers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"then-matchers.js","sourceRoot":"","sources":["../../../src/core/test-generator/then-matchers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Verifier module index
3
+ */
4
+ export * from './verification-engine.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/verifier/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Verifier module index
3
+ */
4
+ export * from './verification-engine.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/verifier/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Spec Verification Engine
3
+ *
4
+ * Tests whether generated specs accurately describe the codebase by using
5
+ * the specs to predict code behavior and comparing against actual files.
6
+ */
7
+ import type { LLMService } from '../services/llm-service.js';
8
+ import type { DependencyGraphResult } from '../analyzer/dependency-graph.js';
9
+ /**
10
+ * Verification candidate file
11
+ */
12
+ export interface VerificationCandidate {
13
+ path: string;
14
+ absolutePath: string;
15
+ domain: string;
16
+ usedInGeneration: boolean;
17
+ complexity: number;
18
+ lines: number;
19
+ imports: number;
20
+ exports: number;
21
+ }
22
+ /**
23
+ * LLM prediction for a file
24
+ */
25
+ export interface FilePrediction {
26
+ predictedPurpose: string;
27
+ predictedImports: string[];
28
+ predictedExports: string[];
29
+ predictedLogic: string[];
30
+ relatedRequirements: string[];
31
+ confidence: number;
32
+ /** LLM-as-judge score: how accurately does the spec describe this file (0.0–1.0) */
33
+ specAccuracyScore?: number;
34
+ /** LLM-as-judge score: fraction of this file's behavior covered by spec requirements (0.0–1.0) */
35
+ requirementCoverageScore?: number;
36
+ reasoning: string;
37
+ }
38
+ /**
39
+ * Match result for purpose
40
+ */
41
+ export interface PurposeMatch {
42
+ predicted: string;
43
+ actual: string;
44
+ similarity: number;
45
+ }
46
+ /**
47
+ * Match result for imports/exports
48
+ */
49
+ export interface SetMatch {
50
+ predicted: string[];
51
+ actual: string[];
52
+ precision: number;
53
+ recall: number;
54
+ f1Score: number;
55
+ }
56
+ /**
57
+ * Requirement coverage analysis
58
+ */
59
+ export interface RequirementCoverage {
60
+ relatedRequirements: string[];
61
+ actuallyImplements: string[];
62
+ coverage: number;
63
+ }
64
+ /**
65
+ * Result for a single file verification
66
+ */
67
+ export interface VerificationResult {
68
+ filePath: string;
69
+ domain: string;
70
+ purposeMatch: PurposeMatch;
71
+ importMatch: SetMatch;
72
+ exportMatch: SetMatch;
73
+ requirementCoverage: RequirementCoverage;
74
+ overallScore: number;
75
+ llmConfidence: number;
76
+ feedback: string[];
77
+ }
78
+ /**
79
+ * Domain breakdown in report
80
+ */
81
+ export interface DomainBreakdown {
82
+ domain: string;
83
+ specPath: string;
84
+ filesVerified: number;
85
+ averageScore: number;
86
+ weakestArea: string;
87
+ }
88
+ /**
89
+ * Suggested improvement
90
+ */
91
+ export interface SuggestedImprovement {
92
+ domain: string;
93
+ issue: string;
94
+ suggestion: string;
95
+ }
96
+ /**
97
+ * Complete verification report
98
+ */
99
+ export interface VerificationReport {
100
+ timestamp: string;
101
+ specVersion: string;
102
+ sampledFiles: number;
103
+ passedFiles: number;
104
+ overallConfidence: number;
105
+ domainBreakdown: DomainBreakdown[];
106
+ commonGaps: string[];
107
+ recommendation: 'ready' | 'needs-review' | 'regenerate';
108
+ suggestedImprovements: SuggestedImprovement[];
109
+ results: VerificationResult[];
110
+ }
111
+ /**
112
+ * Engine options
113
+ */
114
+ export interface VerificationEngineOptions {
115
+ /** Root directory of the project */
116
+ rootPath: string;
117
+ /** Path to openspec directory */
118
+ openspecPath: string;
119
+ /** Output directory for reports */
120
+ outputDir: string;
121
+ /** Minimum complexity (lines) for candidate files */
122
+ minComplexity?: number;
123
+ /** Maximum complexity (lines) for candidate files */
124
+ maxComplexity?: number;
125
+ /** Number of files to sample per domain */
126
+ filesPerDomain?: number;
127
+ /** Passing threshold for overall score */
128
+ passThreshold?: number;
129
+ /** Files used in generation (to exclude) */
130
+ generationContext?: string[];
131
+ }
132
+ /**
133
+ * Spec Verification Engine
134
+ */
135
+ export declare class SpecVerificationEngine {
136
+ private llm;
137
+ private options;
138
+ private specs;
139
+ private fileDomainMap;
140
+ private parser;
141
+ constructor(llm: LLMService, options: VerificationEngineOptions);
142
+ /**
143
+ * Run full verification
144
+ */
145
+ verify(depGraph: DependencyGraphResult, specVersion: string): Promise<VerificationReport>;
146
+ /**
147
+ * Load all specs from openspec directory
148
+ */
149
+ private loadSpecs;
150
+ /**
151
+ * Load file→domain mapping from .openlore/analysis/mapping.json.
152
+ * Falls back silently if the file doesn't exist (e.g. before first analysis run).
153
+ */
154
+ private loadFileDomainMap;
155
+ /**
156
+ * Select verification candidate files
157
+ */
158
+ selectCandidates(depGraph: DependencyGraphResult): VerificationCandidate[];
159
+ /**
160
+ * Resolve the spec domain for a file.
161
+ *
162
+ * Priority:
163
+ * 1. mapping.json lookup — deterministic, built from the analysis run.
164
+ * 2. Path heuristic — walk segments, match against known spec domain names
165
+ * (exact, then prefix ≥4 chars to handle utils→utilities etc.).
166
+ * 3. Fallback — first meaningful non-structural segment.
167
+ */
168
+ private inferDomain;
169
+ /**
170
+ * Verify a single file
171
+ */
172
+ verifyFile(candidate: VerificationCandidate): Promise<VerificationResult>;
173
+ /**
174
+ * Build specs context string capped at maxChars to avoid silent LLM token overflow.
175
+ * Specs are included in order; the last spec may be truncated if the budget is tight.
176
+ */
177
+ private buildSpecsContext;
178
+ /**
179
+ * Get prediction from LLM.
180
+ *
181
+ * When fileContent is provided the prompt uses an LLM-as-judge approach:
182
+ * the model sees both the spec and the actual file content, and returns a
183
+ * specAccuracyScore (0–1) measuring how well the spec describes the file.
184
+ * This replaces the brittle Jaccard keyword-overlap used for purposeMatch.
185
+ */
186
+ private getPrediction;
187
+ /**
188
+ * Compare predicted purpose to actual file content.
189
+ *
190
+ * When specAccuracyScore is provided (LLM-as-judge), it is used directly as
191
+ * the similarity score — this is far more reliable than keyword overlap because
192
+ * the LLM has seen the actual file and can assess whether the spec describes it.
193
+ * Falls back to Jaccard keyword overlap when no LLM score is available.
194
+ */
195
+ private comparePurpose;
196
+ /**
197
+ * Extract purpose from file content (comments, docstrings)
198
+ */
199
+ private extractPurpose;
200
+ /**
201
+ * Calculate text similarity using keyword overlap
202
+ */
203
+ private calculateSimilarity;
204
+ /**
205
+ * Normalize a word for similarity comparison by truncating to its first 5
206
+ * characters. This is more robust than suffix-stripping for technical
207
+ * English: "generate/generates/generating/generation" all share the prefix
208
+ * "gener", "verify/verification/verifies" share "verif", etc.
209
+ * Tested against 26 word pairs: 18/26 correct matches, 0 false positives.
210
+ */
211
+ private normalize;
212
+ /**
213
+ * Extract keywords from text
214
+ */
215
+ private extractKeywords;
216
+ /**
217
+ * Analyze import coverage using spec content rather than LLM predictions.
218
+ * For each actual import (normalized to module name), checks whether it is
219
+ * mentioned in the domain's spec text (exact name or hyphen→space variant).
220
+ * This is a spec-completeness check: are the modules the file depends on
221
+ * actually described in the spec?
222
+ *
223
+ * Returns a SetMatch where:
224
+ * - actual = all normalized actual import module names
225
+ * - predicted = subset of actual imports that appear in the spec text
226
+ * - f1Score = recall = fraction of actual imports covered by spec
227
+ */
228
+ private analyzeImportCoverage;
229
+ /**
230
+ * Normalize import path for comparison.
231
+ * Strips file extensions and the first leading `./` or `../` prefix,
232
+ * then extracts the final path segment (module name) in lowercase.
233
+ * Deeply-nested relative paths (e.g. `../../foo`) are handled correctly
234
+ * because only the last segment is used for comparison.
235
+ */
236
+ private normalizeImport;
237
+ /**
238
+ * Compare predicted exports to actual
239
+ */
240
+ private compareExports;
241
+ /**
242
+ * Calculate precision, recall, F1 for set comparison
243
+ */
244
+ private calculateSetMatch;
245
+ /**
246
+ * Parse requirements from a spec's markdown content.
247
+ * Returns an array of { name, description } extracted from
248
+ * "### Requirement: Name\n\nThe system SHALL ..." blocks.
249
+ */
250
+ private parseSpecRequirements;
251
+ /**
252
+ * Analyze requirement coverage.
253
+ *
254
+ * When llmScore is provided (LLM-as-judge), it is used directly — the LLM
255
+ * has seen both the spec and the file and scores only the requirements
256
+ * relevant to this specific file, avoiding the false penalty of a domain
257
+ * spec covering many files where each file implements only a small subset.
258
+ *
259
+ * Falls back to keyword matching when no LLM score is available.
260
+ */
261
+ private analyzeRequirementCoverage;
262
+ /**
263
+ * Calculate overall score (weighted combination)
264
+ */
265
+ private calculateOverallScore;
266
+ /**
267
+ * Generate feedback for gaps
268
+ */
269
+ private generateFeedback;
270
+ /**
271
+ * Generate verification report
272
+ */
273
+ private generateReport;
274
+ /**
275
+ * Save verification report
276
+ */
277
+ private saveReport;
278
+ /**
279
+ * Generate markdown report
280
+ */
281
+ private generateMarkdownReport;
282
+ /**
283
+ * Get list of domains from loaded specs.
284
+ * If specs have not been loaded yet (i.e., verify() has not been called),
285
+ * triggers an eager load so callers can preview domains without a full LLM run.
286
+ */
287
+ getDomains(): Promise<string[]>;
288
+ }
289
+ /**
290
+ * Run verification on a project
291
+ */
292
+ export declare function verifySpecs(llm: LLMService, depGraph: DependencyGraphResult, options: VerificationEngineOptions, specVersion: string): Promise<VerificationReport>;
293
+ //# sourceMappingURL=verification-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-engine.d.ts","sourceRoot":"","sources":["../../../src/core/verifier/verification-engine.ts"],"names":[],"mappings":"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"}