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,103 @@
1
+ /**
2
+ * Types for spec-driven test generation.
3
+ *
4
+ * These types flow through the test-generator pipeline:
5
+ * parseScenarios → matchThenClauses → renderTests → writeTestFiles
6
+ * and the coverage pipeline:
7
+ * analyzeTestCoverage → TestCoverageReport
8
+ */
9
+ export type TestFramework = 'vitest' | 'playwright' | 'pytest' | 'gtest' | 'catch2';
10
+ /** Maps framework → generated file extension */
11
+ export declare const FRAMEWORK_EXTENSIONS: Record<TestFramework, string>;
12
+ /** A lightweight reference to an implementation function (from mapping.json) */
13
+ export interface FunctionRef {
14
+ name: string;
15
+ file: string;
16
+ line?: number;
17
+ confidence: 'llm' | 'semantic' | 'heuristic';
18
+ }
19
+ /** One extracted scenario from a spec file */
20
+ export interface ParsedScenario {
21
+ domain: string;
22
+ specFile: string;
23
+ requirement: string;
24
+ scenarioName: string;
25
+ given: string[];
26
+ when: string[];
27
+ then: string[];
28
+ mappedFunctions: FunctionRef[];
29
+ skip: boolean;
30
+ skipReason?: string;
31
+ tags: string[];
32
+ priority: 'high' | 'normal' | 'low';
33
+ }
34
+ /** One matched assertion line, formatted for a specific framework */
35
+ export interface MatchedAssertion {
36
+ /** Human-readable assertion source code for the given framework */
37
+ line: string;
38
+ /** Which THEN clause this came from (0-indexed) */
39
+ thenIndex: number;
40
+ /** true = matched by pattern engine; false = LLM-generated; undefined = placeholder */
41
+ fromPattern?: boolean;
42
+ }
43
+ /** A fully rendered test file ready to be written to disk */
44
+ export interface GeneratedTestFile {
45
+ /** Output path relative to rootPath, e.g. spec-tests/auth/user-login.spec.ts */
46
+ outputPath: string;
47
+ domain: string;
48
+ framework: TestFramework;
49
+ scenarios: ParsedScenario[];
50
+ content: string;
51
+ isNew: boolean;
52
+ }
53
+ export interface TestOptions {
54
+ framework: TestFramework | 'auto';
55
+ domains: string[];
56
+ output: string;
57
+ merge: boolean;
58
+ dryRun: boolean;
59
+ useLlm: boolean;
60
+ limit?: number;
61
+ coverage: boolean;
62
+ discover: boolean;
63
+ minCoverage?: number;
64
+ testDirs: string[];
65
+ json: boolean;
66
+ quiet: boolean;
67
+ verbose: boolean;
68
+ }
69
+ export interface CoveredScenario {
70
+ domain: string;
71
+ requirement: string;
72
+ scenarioName: string;
73
+ testFile: string;
74
+ discoveredBy: 'tag' | 'semantic';
75
+ similarity?: number;
76
+ }
77
+ export interface UncoveredScenario {
78
+ domain: string;
79
+ requirement: string;
80
+ scenarioName: string;
81
+ specFile: string;
82
+ }
83
+ export interface DomainCoverage {
84
+ total: number;
85
+ covered: number;
86
+ percent: number;
87
+ hasDrift: boolean;
88
+ }
89
+ export interface TestCoverageReport {
90
+ timestamp: string;
91
+ totalScenarios: number;
92
+ taggedScenarios: number;
93
+ discoveredScenarios: number;
94
+ coveredScenarios: number;
95
+ coveragePercent: number;
96
+ byDomain: Record<string, DomainCoverage>;
97
+ covered: CoveredScenario[];
98
+ uncovered: UncoveredScenario[];
99
+ staleDomains: string[];
100
+ belowThreshold: boolean;
101
+ minCoverage?: number;
102
+ }
103
+ //# sourceMappingURL=test-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-generator.d.ts","sourceRoot":"","sources":["../../src/types/test-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Types for spec-driven test generation.
3
+ *
4
+ * These types flow through the test-generator pipeline:
5
+ * parseScenarios → matchThenClauses → renderTests → writeTestFiles
6
+ * and the coverage pipeline:
7
+ * analyzeTestCoverage → TestCoverageReport
8
+ */
9
+ /** Maps framework → generated file extension */
10
+ export const FRAMEWORK_EXTENSIONS = {
11
+ vitest: '.spec.ts',
12
+ playwright: '.spec.ts',
13
+ pytest: '_test.py',
14
+ gtest: '_test.cpp',
15
+ catch2: '_test.cpp',
16
+ };
17
+ //# sourceMappingURL=test-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-generator.js","sourceRoot":"","sources":["../../src/types/test-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,gDAAgD;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAkC;IACjE,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,WAAW;CACpB,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Shared utilities for CLI commands
3
+ *
4
+ * Functions used across multiple commands (analyze, generate, verify, drift, run)
5
+ * are collected here to avoid duplication.
6
+ */
7
+ import type { LLMContext } from '../core/analyzer/artifact-generator.js';
8
+ /**
9
+ * Check whether a file or directory exists at the given path.
10
+ */
11
+ export declare function fileExists(path: string): Promise<boolean>;
12
+ /**
13
+ * Format a duration in milliseconds into a human-readable string.
14
+ * @example formatDuration(750) // "750ms"
15
+ * @example formatDuration(3500) // "3.5s"
16
+ * @example formatDuration(125000) // "2m 5s"
17
+ */
18
+ export declare function formatDuration(ms: number): string;
19
+ /**
20
+ * Format an elapsed time (ms) as a human-readable age string.
21
+ * @example formatAge(30000) // "just now"
22
+ * @example formatAge(300000) // "5 minutes ago"
23
+ * @example formatAge(7200000) // "2 hours ago"
24
+ */
25
+ export declare function formatAge(ms: number): string;
26
+ /**
27
+ * Parse a comma-separated string into a trimmed, non-empty array of values.
28
+ * @example parseList("auth, billing, api") // ["auth", "billing", "api"]
29
+ */
30
+ export declare function parseList(value: string): string[];
31
+ export type ProviderName = 'anthropic' | 'openai' | 'openai-compat' | 'gemini' | 'claude-code' | 'mistral-vibe' | 'copilot' | 'gemini-cli' | 'cursor-agent';
32
+ /**
33
+ * Resolve the LLM provider and base URL from environment variables.
34
+ * Returns null when no key is found, allowing callers to handle the error their own way.
35
+ *
36
+ * Priority: ANTHROPIC_API_KEY > GEMINI_API_KEY > OPENAI_COMPAT_API_KEY > OPENAI_API_KEY
37
+ */
38
+ export declare function resolveLLMProvider(openloreConfig?: {
39
+ generation?: {
40
+ provider?: string;
41
+ openaiCompatBaseUrl?: string;
42
+ };
43
+ }): {
44
+ provider: ProviderName;
45
+ openaiCompatBaseUrl?: string;
46
+ } | null;
47
+ /**
48
+ * Read and JSON-parse a file, returning null when the file does not exist.
49
+ * Throws a descriptive error when the file exists but contains invalid JSON.
50
+ *
51
+ * @param filePath Absolute path to the JSON file.
52
+ * @param label Human-readable label used in the error message (e.g. "repo-structure.json").
53
+ */
54
+ export declare function readJsonFile<T>(filePath: string, label: string): Promise<T | null>;
55
+ /**
56
+ * Return the age in milliseconds of the analysis at the given path,
57
+ * measured from the mtime of repo-structure.json. Returns null when not found.
58
+ */
59
+ export declare function getAnalysisAge(analysisPath: string): Promise<number | null>;
60
+ /**
61
+ * Estimate the LLM cost for a full generation run.
62
+ * Uses per-stage token breakdown for accuracy.
63
+ */
64
+ export declare function estimateCost(llmContext: LLMContext, provider: string, model: string): {
65
+ tokens: number;
66
+ cost: number;
67
+ };
68
+ //# sourceMappingURL=command-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/command-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjD;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,QAAQ,GAAG,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,CAAC;AAE5J;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,CAAC,EAAE;IAClD,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE,GAAG;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyBlE;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAcxF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASjF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAsBlC"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Shared utilities for CLI commands
3
+ *
4
+ * Functions used across multiple commands (analyze, generate, verify, drift, run)
5
+ * are collected here to avoid duplication.
6
+ */
7
+ import { access, readFile, stat } from 'node:fs/promises';
8
+ import { join } from 'node:path';
9
+ import { LLM_SYSTEM_PROMPT_OVERHEAD_TOKENS, GENERATION_OUTPUT_RATIO, DEFAULT_SURVEY_ESTIMATED_TOKENS, ARTIFACT_REPO_STRUCTURE, } from '../constants.js';
10
+ import { lookupPricing } from '../core/services/llm-service.js';
11
+ /**
12
+ * Check whether a file or directory exists at the given path.
13
+ */
14
+ export async function fileExists(path) {
15
+ try {
16
+ await access(path);
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ /**
24
+ * Format a duration in milliseconds into a human-readable string.
25
+ * @example formatDuration(750) // "750ms"
26
+ * @example formatDuration(3500) // "3.5s"
27
+ * @example formatDuration(125000) // "2m 5s"
28
+ */
29
+ export function formatDuration(ms) {
30
+ if (ms < 1000)
31
+ return `${ms}ms`;
32
+ if (ms < 60_000)
33
+ return `${(ms / 1000).toFixed(1)}s`;
34
+ const minutes = Math.floor(ms / 60_000);
35
+ const seconds = Math.floor((ms % 60_000) / 1000);
36
+ return `${minutes}m ${seconds}s`;
37
+ }
38
+ /**
39
+ * Format an elapsed time (ms) as a human-readable age string.
40
+ * @example formatAge(30000) // "just now"
41
+ * @example formatAge(300000) // "5 minutes ago"
42
+ * @example formatAge(7200000) // "2 hours ago"
43
+ */
44
+ export function formatAge(ms) {
45
+ if (ms < 60_000)
46
+ return 'just now';
47
+ if (ms < 3_600_000)
48
+ return `${Math.floor(ms / 60_000)} minutes ago`;
49
+ if (ms < 86_400_000)
50
+ return `${Math.floor(ms / 3_600_000)} hours ago`;
51
+ return `${Math.floor(ms / 86_400_000)} days ago`;
52
+ }
53
+ /**
54
+ * Parse a comma-separated string into a trimmed, non-empty array of values.
55
+ * @example parseList("auth, billing, api") // ["auth", "billing", "api"]
56
+ */
57
+ export function parseList(value) {
58
+ return value.split(',').map((s) => s.trim()).filter(Boolean);
59
+ }
60
+ /**
61
+ * Resolve the LLM provider and base URL from environment variables.
62
+ * Returns null when no key is found, allowing callers to handle the error their own way.
63
+ *
64
+ * Priority: ANTHROPIC_API_KEY > GEMINI_API_KEY > OPENAI_COMPAT_API_KEY > OPENAI_API_KEY
65
+ */
66
+ export function resolveLLMProvider(openloreConfig) {
67
+ const anthropicKey = process.env.ANTHROPIC_API_KEY;
68
+ const geminiKey = process.env.GEMINI_API_KEY;
69
+ const openaiCompatKey = process.env.OPENAI_COMPAT_API_KEY;
70
+ const openaiKey = process.env.OPENAI_API_KEY;
71
+ const configProvider = openloreConfig?.generation?.provider;
72
+ // These providers don't need an API key
73
+ if (configProvider === 'claude-code' || configProvider === 'mistral-vibe' || configProvider === 'copilot' || configProvider === 'gemini-cli' || configProvider === 'cursor-agent') {
74
+ return { provider: configProvider };
75
+ }
76
+ if (!anthropicKey && !geminiKey && !openaiCompatKey && !openaiKey)
77
+ return null;
78
+ const envProvider = anthropicKey ? 'anthropic'
79
+ : geminiKey ? 'gemini'
80
+ : openaiCompatKey ? 'openai-compat'
81
+ : 'openai';
82
+ const provider = configProvider ?? envProvider;
83
+ const openaiCompatBaseUrl = process.env.OPENAI_COMPAT_BASE_URL
84
+ ?? openloreConfig?.generation?.openaiCompatBaseUrl;
85
+ return { provider, openaiCompatBaseUrl };
86
+ }
87
+ /**
88
+ * Read and JSON-parse a file, returning null when the file does not exist.
89
+ * Throws a descriptive error when the file exists but contains invalid JSON.
90
+ *
91
+ * @param filePath Absolute path to the JSON file.
92
+ * @param label Human-readable label used in the error message (e.g. "repo-structure.json").
93
+ */
94
+ export async function readJsonFile(filePath, label) {
95
+ let raw;
96
+ try {
97
+ raw = await readFile(filePath, 'utf-8');
98
+ }
99
+ catch (err) {
100
+ // File not found — expected, return null
101
+ if (err.code === 'ENOENT')
102
+ return null;
103
+ throw err;
104
+ }
105
+ try {
106
+ return JSON.parse(raw);
107
+ }
108
+ catch {
109
+ throw new Error(`Failed to parse ${label} — the file may be corrupted. Re-run openlore analyze to regenerate.`);
110
+ }
111
+ }
112
+ /**
113
+ * Return the age in milliseconds of the analysis at the given path,
114
+ * measured from the mtime of repo-structure.json. Returns null when not found.
115
+ */
116
+ export async function getAnalysisAge(analysisPath) {
117
+ try {
118
+ const repoStructurePath = join(analysisPath, ARTIFACT_REPO_STRUCTURE);
119
+ if (!(await fileExists(repoStructurePath)))
120
+ return null;
121
+ const stats = await stat(repoStructurePath);
122
+ return Date.now() - stats.mtime.getTime();
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ /**
129
+ * Estimate the LLM cost for a full generation run.
130
+ * Uses per-stage token breakdown for accuracy.
131
+ */
132
+ export function estimateCost(llmContext, provider, model) {
133
+ const OVERHEAD = LLM_SYSTEM_PROMPT_OVERHEAD_TOKENS;
134
+ const OUTPUT_RATIO = GENERATION_OUTPUT_RATIO;
135
+ const phase2Files = llmContext.phase2_deep.files;
136
+ const phase2Total = phase2Files.reduce((s, f) => s + f.tokens, 0);
137
+ const fileOverhead = OVERHEAD * phase2Files.length;
138
+ const stage1Input = (llmContext.phase1_survey.estimatedTokens ?? DEFAULT_SURVEY_ESTIMATED_TOKENS) + OVERHEAD;
139
+ const stage2Input = phase2Total + fileOverhead;
140
+ const stage3Input = phase2Total + fileOverhead;
141
+ const stage4Input = Math.ceil(phase2Total * 0.5) + OVERHEAD;
142
+ const stage5Input = Math.ceil((stage1Input + stage2Input) * 0.3) + OVERHEAD;
143
+ const totalInput = stage1Input + stage2Input + stage3Input + stage4Input + stage5Input;
144
+ const totalOutput = Math.ceil(totalInput * OUTPUT_RATIO);
145
+ const modelPricing = lookupPricing(provider, model);
146
+ const cost = (totalInput / 1_000_000) * modelPricing.input
147
+ + (totalOutput / 1_000_000) * modelPricing.output;
148
+ return { tokens: totalInput + totalOutput, cost };
149
+ }
150
+ //# sourceMappingURL=command-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/utils/command-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Custom error classes for openlore with helpful user-facing messages
3
+ */
4
+ export type ErrorCode = 'NO_API_KEY' | 'NOT_A_REPOSITORY' | 'OPENSPEC_EXISTS' | 'ANALYSIS_TOO_OLD' | 'NO_HIGH_VALUE_FILES' | 'LLM_RATE_LIMIT' | 'OPENSPEC_VALIDATION_FAILED' | 'ANALYSIS_FAILED' | 'GENERATION_FAILED' | 'VERIFICATION_FAILED' | 'CONFIG_NOT_FOUND' | 'INVALID_CONFIG' | 'FILE_WRITE_ERROR' | 'FILE_READ_ERROR' | 'DRIFT_DETECTED' | 'NO_SPECS_FOUND' | 'UNKNOWN_ERROR';
5
+ /**
6
+ * Base error class for openlore with code and suggestion
7
+ */
8
+ export declare class OpenLoreError extends Error {
9
+ code: ErrorCode;
10
+ suggestion?: string | undefined;
11
+ constructor(message: string, code: ErrorCode, suggestion?: string | undefined);
12
+ /**
13
+ * Format error for CLI display with color support
14
+ */
15
+ format(useColor?: boolean): string;
16
+ }
17
+ /**
18
+ * Error factory functions with predefined messages and suggestions
19
+ */
20
+ export declare const errors: {
21
+ noApiKey(): OpenLoreError;
22
+ notARepository(): OpenLoreError;
23
+ openspecExists(path: string): OpenLoreError;
24
+ analysisTooOld(ageHours: number): OpenLoreError;
25
+ noHighValueFiles(): OpenLoreError;
26
+ llmRateLimit(attempt: number, maxAttempts: number): OpenLoreError;
27
+ openspecValidationFailed(details?: string): OpenLoreError;
28
+ analysisFailed(reason: string): OpenLoreError;
29
+ generationFailed(reason: string): OpenLoreError;
30
+ verificationFailed(reason: string): OpenLoreError;
31
+ configNotFound(path: string): OpenLoreError;
32
+ invalidConfig(path: string, details?: string): OpenLoreError;
33
+ fileWriteError(path: string, reason?: string): OpenLoreError;
34
+ fileReadError(path: string, reason?: string): OpenLoreError;
35
+ driftDetected(issueCount: number): OpenLoreError;
36
+ noSpecsFound(): OpenLoreError;
37
+ unknown(error: unknown): OpenLoreError;
38
+ };
39
+ /**
40
+ * Type guard to check if an error is a OpenLoreError
41
+ */
42
+ export declare function isOpenLoreError(error: unknown): error is OpenLoreError;
43
+ /**
44
+ * Format any error for CLI display
45
+ */
46
+ export declare function formatError(error: unknown, useColor?: boolean): string;
47
+ /**
48
+ * Handle errors in CLI commands by formatting and logging them
49
+ */
50
+ export declare function handleError(error: unknown, exit?: boolean): never | void;
51
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,gBAAgB,GAChB,4BAA4B,GAC5B,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,CAAC;AAEpB;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,EAAE,SAAS;IACf,UAAU,CAAC,EAAE,MAAM;gBAF1B,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,YAAA;IAQ5B;;OAEG;IACH,MAAM,CAAC,QAAQ,UAAO,GAAG,MAAM;CAgBhC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;gBACL,aAAa;sBASP,aAAa;yBASV,MAAM,GAAG,aAAa;6BASlB,MAAM,GAAG,aAAa;wBAQ3B,aAAa;0BASX,MAAM,eAAe,MAAM,GAAG,aAAa;uCAS9B,MAAM,GAAG,aAAa;2BASlC,MAAM,GAAG,aAAa;6BASpB,MAAM,GAAG,aAAa;+BASpB,MAAM,GAAG,aAAa;yBAS5B,MAAM,GAAG,aAAa;wBAQvB,MAAM,YAAY,MAAM,GAAG,aAAa;yBAQvC,MAAM,WAAW,MAAM,GAAG,aAAa;wBAQxC,MAAM,WAAW,MAAM,GAAG,aAAa;8BAQjC,MAAM,GAAG,aAAa;oBAShC,aAAa;mBAQd,OAAO,GAAG,aAAa;CAQvC,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,UAAO,GAAG,MAAM,CAUnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,UAAO,GAAG,KAAK,GAAG,IAAI,CAMrE"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Custom error classes for openlore with helpful user-facing messages
3
+ */
4
+ import { OPENLORE_DIR, OPENLORE_BACKUPS_SUBDIR, OPENLORE_LOGS_SUBDIR, OPENLORE_CONFIG_REL_PATH, } from '../constants.js';
5
+ /**
6
+ * Base error class for openlore with code and suggestion
7
+ */
8
+ export class OpenLoreError extends Error {
9
+ code;
10
+ suggestion;
11
+ constructor(message, code, suggestion) {
12
+ super(message);
13
+ this.code = code;
14
+ this.suggestion = suggestion;
15
+ this.name = 'OpenLoreError';
16
+ // Maintains proper stack trace for where error was thrown
17
+ Error.captureStackTrace?.(this, this.constructor);
18
+ }
19
+ /**
20
+ * Format error for CLI display with color support
21
+ */
22
+ format(useColor = true) {
23
+ const red = useColor ? '\x1b[31m' : '';
24
+ const yellow = useColor ? '\x1b[33m' : '';
25
+ const reset = useColor ? '\x1b[0m' : '';
26
+ const dim = useColor ? '\x1b[2m' : '';
27
+ let output = `${red}Error [${this.code}]:${reset} ${this.message}`;
28
+ if (this.suggestion) {
29
+ output += `\n\n${yellow}Suggestion:${reset} ${this.suggestion}`;
30
+ }
31
+ output += `\n\n${dim}For more help, see: https://github.com/clay-good/openlore#readme${reset}`;
32
+ return output;
33
+ }
34
+ }
35
+ /**
36
+ * Error factory functions with predefined messages and suggestions
37
+ */
38
+ export const errors = {
39
+ noApiKey() {
40
+ return new OpenLoreError('No API key found for LLM provider', 'NO_API_KEY', `Set ANTHROPIC_API_KEY or OPENAI_API_KEY environment variable.
41
+ Get an API key at https://console.anthropic.com/ or https://platform.openai.com/`);
42
+ },
43
+ notARepository() {
44
+ return new OpenLoreError('No .git directory found', 'NOT_A_REPOSITORY', `openlore works best in git repositories.
45
+ Run 'git init' or use --force to continue anyway.`);
46
+ },
47
+ openspecExists(path) {
48
+ return new OpenLoreError(`openspec/specs/ already contains specifications at ${path}`, 'OPENSPEC_EXISTS', `Use --merge to add to existing specs, or --force to overwrite.
49
+ Existing specs will be backed up to ${OPENLORE_DIR}/${OPENLORE_BACKUPS_SUBDIR}/`);
50
+ },
51
+ analysisTooOld(ageHours) {
52
+ return new OpenLoreError(`Existing analysis is ${ageHours.toFixed(1)} hours old`, 'ANALYSIS_TOO_OLD', `Run 'openlore analyze' to refresh, or use --reanalyze flag.`);
53
+ },
54
+ noHighValueFiles() {
55
+ return new OpenLoreError('Could not identify any high-value files to analyze', 'NO_HIGH_VALUE_FILES', `This might happen with unusual project structures.
56
+ Try adjusting scoring in ${OPENLORE_CONFIG_REL_PATH} or use --include patterns.`);
57
+ },
58
+ llmRateLimit(attempt, maxAttempts) {
59
+ return new OpenLoreError('API rate limit exceeded', 'LLM_RATE_LIMIT', `Waiting and retrying... (attempt ${attempt} of ${maxAttempts})
60
+ If this persists, try a different model or wait a few minutes.`);
61
+ },
62
+ openspecValidationFailed(details) {
63
+ return new OpenLoreError(`Generated specs failed OpenSpec validation${details ? `: ${details}` : ''}`, 'OPENSPEC_VALIDATION_FAILED', `Check ${OPENLORE_DIR}/${OPENLORE_LOGS_SUBDIR}/ for details.
64
+ This may indicate a generation bug - please report it at https://github.com/clay-good/openlore/issues`);
65
+ },
66
+ analysisFailed(reason) {
67
+ return new OpenLoreError(`Static analysis failed: ${reason}`, 'ANALYSIS_FAILED', `Check that the project directory is accessible and contains source files.
68
+ Try running with --verbose for more details.`);
69
+ },
70
+ generationFailed(reason) {
71
+ return new OpenLoreError(`Spec generation failed: ${reason}`, 'GENERATION_FAILED', `This could be due to API issues or invalid analysis data.
72
+ Try running 'openlore analyze' first, then 'openlore generate'.`);
73
+ },
74
+ verificationFailed(reason) {
75
+ return new OpenLoreError(`Verification failed: ${reason}`, 'VERIFICATION_FAILED', `Ensure specs exist in openspec/specs/ directory.
76
+ Run 'openlore generate' first if you haven't already.`);
77
+ },
78
+ configNotFound(path) {
79
+ return new OpenLoreError(`Configuration file not found at ${path}`, 'CONFIG_NOT_FOUND', `Run 'openlore init' to create a configuration file.`);
80
+ },
81
+ invalidConfig(path, details) {
82
+ return new OpenLoreError(`Invalid configuration file at ${path}${details ? `: ${details}` : ''}`, 'INVALID_CONFIG', `Check the configuration file format. You may need to delete it and run 'openlore init' again.`);
83
+ },
84
+ fileWriteError(path, reason) {
85
+ return new OpenLoreError(`Failed to write file ${path}${reason ? `: ${reason}` : ''}`, 'FILE_WRITE_ERROR', `Check that you have write permissions for the directory.`);
86
+ },
87
+ fileReadError(path, reason) {
88
+ return new OpenLoreError(`Failed to read file ${path}${reason ? `: ${reason}` : ''}`, 'FILE_READ_ERROR', `Check that the file exists and you have read permissions.`);
89
+ },
90
+ driftDetected(issueCount) {
91
+ return new OpenLoreError(`Spec drift detected: ${issueCount} issue${issueCount === 1 ? '' : 's'} found`, 'DRIFT_DETECTED', `Run 'openlore drift' to see details, then update specs to match code changes.
92
+ Use 'openlore drift --verbose' for detailed issue descriptions.`);
93
+ },
94
+ noSpecsFound() {
95
+ return new OpenLoreError('No OpenSpec specifications found', 'NO_SPECS_FOUND', `Run 'openlore generate' to create specifications from your codebase.`);
96
+ },
97
+ unknown(error) {
98
+ const message = error instanceof Error ? error.message : String(error);
99
+ return new OpenLoreError(`An unexpected error occurred: ${message}`, 'UNKNOWN_ERROR', `Please report this issue at https://github.com/clay-good/openlore/issues`);
100
+ },
101
+ };
102
+ /**
103
+ * Type guard to check if an error is a OpenLoreError
104
+ */
105
+ export function isOpenLoreError(error) {
106
+ return error instanceof OpenLoreError;
107
+ }
108
+ /**
109
+ * Format any error for CLI display
110
+ */
111
+ export function formatError(error, useColor = true) {
112
+ if (isOpenLoreError(error)) {
113
+ return error.format(useColor);
114
+ }
115
+ if (error instanceof Error) {
116
+ return errors.unknown(error).format(useColor);
117
+ }
118
+ return errors.unknown(String(error)).format(useColor);
119
+ }
120
+ /**
121
+ * Handle errors in CLI commands by formatting and logging them
122
+ */
123
+ export function handleError(error, exit = true) {
124
+ console.error(formatError(error, process.stdout.isTTY));
125
+ if (exit) {
126
+ process.exit(1);
127
+ }
128
+ }
129
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}