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,238 @@
1
+ /**
2
+ * Graceful shutdown handling for openlore CLI
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import { OPENLORE_DIR, ARTIFACT_SHUTDOWN_STATE } from '../constants.js';
7
+ /**
8
+ * Manages graceful shutdown with cleanup callbacks
9
+ */
10
+ export class ShutdownManager {
11
+ callbacks = [];
12
+ isShuttingDown = false;
13
+ state = null;
14
+ stateFile;
15
+ handlers = new Map();
16
+ handlersAttached = false;
17
+ constructor(projectPath = process.cwd(), options) {
18
+ this.stateFile = path.join(projectPath, OPENLORE_DIR, ARTIFACT_SHUTDOWN_STATE);
19
+ // Skip handlers in test environment or when explicitly disabled
20
+ if (!options?.skipHandlers && process.env.NODE_ENV !== 'test') {
21
+ this.setupHandlers();
22
+ }
23
+ }
24
+ setupHandlers() {
25
+ if (this.handlersAttached)
26
+ return;
27
+ this.handlersAttached = true;
28
+ const sigintHandler = () => this.handleShutdown('SIGINT');
29
+ const sigtermHandler = () => this.handleShutdown('SIGTERM');
30
+ const exceptionHandler = (error) => {
31
+ console.error('\n❌ Uncaught exception:', error.message);
32
+ this.handleShutdown('uncaughtException');
33
+ };
34
+ const rejectionHandler = (reason) => {
35
+ console.error('\n❌ Unhandled rejection:', reason);
36
+ this.handleShutdown('unhandledRejection');
37
+ };
38
+ // Store handlers for potential cleanup
39
+ this.handlers.set('SIGINT', sigintHandler);
40
+ this.handlers.set('SIGTERM', sigtermHandler);
41
+ this.handlers.set('uncaughtException', exceptionHandler);
42
+ this.handlers.set('unhandledRejection', rejectionHandler);
43
+ // Handle Ctrl+C
44
+ process.on('SIGINT', sigintHandler);
45
+ // Handle termination signal
46
+ process.on('SIGTERM', sigtermHandler);
47
+ // Handle uncaught exceptions
48
+ process.on('uncaughtException', exceptionHandler);
49
+ // Handle unhandled promise rejections
50
+ process.on('unhandledRejection', rejectionHandler);
51
+ }
52
+ /**
53
+ * Remove all registered signal handlers (for testing)
54
+ */
55
+ removeHandlers() {
56
+ for (const [event, handler] of this.handlers) {
57
+ process.removeListener(event, handler);
58
+ }
59
+ this.handlers.clear();
60
+ this.handlersAttached = false;
61
+ }
62
+ async handleShutdown(signal) {
63
+ if (this.isShuttingDown) {
64
+ console.log('\n⚠️ Force quitting...');
65
+ process.exit(1);
66
+ }
67
+ this.isShuttingDown = true;
68
+ console.log('\n\n🛑 Interrupted! Cleaning up...');
69
+ // Save state if we have one
70
+ if (this.state) {
71
+ await this.saveState();
72
+ }
73
+ // Run cleanup callbacks in reverse order (copy to avoid mutating the array)
74
+ for (const callback of [...this.callbacks].reverse()) {
75
+ try {
76
+ await callback();
77
+ }
78
+ catch (error) {
79
+ console.error('Cleanup error:', error);
80
+ }
81
+ }
82
+ // Show resume suggestion
83
+ this.showResumeSuggestion();
84
+ process.exit(signal === 'SIGINT' ? 130 : 1);
85
+ }
86
+ /**
87
+ * Register a cleanup callback to run on shutdown
88
+ */
89
+ onCleanup(callback) {
90
+ this.callbacks.push(callback);
91
+ }
92
+ /**
93
+ * Remove a cleanup callback
94
+ */
95
+ removeCleanup(callback) {
96
+ const index = this.callbacks.indexOf(callback);
97
+ if (index !== -1) {
98
+ this.callbacks.splice(index, 1);
99
+ }
100
+ }
101
+ /**
102
+ * Set the current state for potential resume
103
+ */
104
+ setState(state) {
105
+ this.state = {
106
+ phase: state.phase ?? 'init',
107
+ currentFiles: state.currentFiles,
108
+ savedResults: state.savedResults,
109
+ timestamp: Date.now(),
110
+ };
111
+ }
112
+ /**
113
+ * Clear state (call on successful completion)
114
+ */
115
+ clearState() {
116
+ this.state = null;
117
+ // Remove state file if it exists
118
+ try {
119
+ if (fs.existsSync(this.stateFile)) {
120
+ fs.unlinkSync(this.stateFile);
121
+ }
122
+ }
123
+ catch {
124
+ // Ignore errors
125
+ }
126
+ }
127
+ /**
128
+ * Save state to file for potential resume
129
+ */
130
+ async saveState() {
131
+ if (!this.state)
132
+ return;
133
+ try {
134
+ const dir = path.dirname(this.stateFile);
135
+ if (!fs.existsSync(dir)) {
136
+ fs.mkdirSync(dir, { recursive: true });
137
+ }
138
+ fs.writeFileSync(this.stateFile, JSON.stringify(this.state, null, 2));
139
+ console.log(`📝 State saved to ${this.stateFile}`);
140
+ }
141
+ catch (error) {
142
+ console.error('Failed to save state:', error);
143
+ }
144
+ }
145
+ /**
146
+ * Load previous shutdown state
147
+ */
148
+ loadState() {
149
+ try {
150
+ if (fs.existsSync(this.stateFile)) {
151
+ const content = fs.readFileSync(this.stateFile, 'utf-8');
152
+ return JSON.parse(content);
153
+ }
154
+ }
155
+ catch {
156
+ // Ignore errors
157
+ }
158
+ return null;
159
+ }
160
+ /**
161
+ * Check if there's a previous interrupted session
162
+ */
163
+ hasPreviousState() {
164
+ return this.loadState() !== null;
165
+ }
166
+ showResumeSuggestion() {
167
+ if (!this.state)
168
+ return;
169
+ console.log('\n📋 To resume from where you left off:');
170
+ switch (this.state.phase) {
171
+ case 'init':
172
+ console.log(' Run: openlore init');
173
+ break;
174
+ case 'analyze':
175
+ console.log(' Run: openlore analyze');
176
+ if (this.state.savedResults) {
177
+ console.log(` Partial analysis saved to: ${this.state.savedResults}`);
178
+ }
179
+ break;
180
+ case 'generate':
181
+ console.log(' Run: openlore generate');
182
+ if (this.state.savedResults) {
183
+ console.log(` Partial specs saved to: ${this.state.savedResults}`);
184
+ }
185
+ break;
186
+ case 'verify':
187
+ console.log(' Run: openlore verify');
188
+ break;
189
+ }
190
+ console.log('');
191
+ }
192
+ /**
193
+ * Check if shutdown is in progress
194
+ */
195
+ isInProgress() {
196
+ return this.isShuttingDown;
197
+ }
198
+ }
199
+ // Global shutdown manager instance
200
+ let globalManager = null;
201
+ /**
202
+ * Get or create the global shutdown manager
203
+ */
204
+ export function getShutdownManager(projectPath) {
205
+ if (!globalManager) {
206
+ globalManager = new ShutdownManager(projectPath);
207
+ }
208
+ return globalManager;
209
+ }
210
+ /**
211
+ * Register a cleanup callback with the global manager
212
+ */
213
+ export function onShutdown(callback) {
214
+ getShutdownManager().onCleanup(callback);
215
+ }
216
+ /**
217
+ * Set current state for potential resume
218
+ */
219
+ export function setShutdownState(state) {
220
+ getShutdownManager().setState(state);
221
+ }
222
+ /**
223
+ * Clear shutdown state (call on successful completion)
224
+ */
225
+ export function clearShutdownState() {
226
+ getShutdownManager().clearState();
227
+ }
228
+ /**
229
+ * Create a scope that sets/clears state automatically
230
+ */
231
+ export async function withShutdownState(state, fn) {
232
+ const manager = getShutdownManager();
233
+ manager.setState(state);
234
+ const result = await fn();
235
+ manager.clearState();
236
+ return result;
237
+ }
238
+ //# sourceMappingURL=shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/utils/shutdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ # BMAD assets for openlore
2
+
3
+ BMAD Method implementation of the [openlore agentic workflow pattern](../../docs/agentic-workflows/README.md).
4
+
5
+ See [docs/agentic-workflows/BMAD.md](../../docs/agentic-workflows/BMAD.md) for the full integration guide.
6
+
7
+ ## OpenSpec spec baseline
8
+
9
+ `search_specs` and `check_spec_drift` are only useful if specs exist. The Architect agent
10
+ runs `openlore generate` during onboarding — that creates the baseline. Without it,
11
+ `search_specs` returns empty and `check_spec_drift` flags everything as uncovered.
12
+
13
+ | State | What to do |
14
+ |---|---|
15
+ | First time on this codebase | Run `openlore analyze && openlore generate` during onboarding (covered in `tasks/onboarding.md`) |
16
+ | Specs exist | `search_specs` and `check_spec_drift` work as expected |
17
+ | Specs missing mid-project | Run `openlore generate $PROJECT_ROOT` — takes a few minutes, only needed once |
18
+
19
+ The `implement-story.md` task detects this automatically and tells you what to do.
20
+
21
+ ## Workflow
22
+
23
+ ```mermaid
24
+ flowchart TD
25
+ ONBOARD["openlore analyze + generate\n(one-time baseline)"]
26
+
27
+ subgraph ARCH ["🏛️ Architecture"]
28
+ ONBOARD --> OVERVIEW["get_architecture_overview\nget_refactor_report"]
29
+ OVERVIEW --> PROPOSAL["generate_change_proposal × epic\nannotate_story × story\n→ risk_context pre-filled"]
30
+ end
31
+
32
+ subgraph PLAN ["📋 Sprint Planning"]
33
+ PROPOSAL --> SPRINT["sprint-planning.md\nconflict detection\nrefactor ordering"]
34
+ SPRINT --> GATE{risk ≥ 70?}
35
+ GATE -- yes --> REFACTOR["refactor.md\n🔴 refactor first"]
36
+ GATE -- no --> LOCKED["Sprint locked"]
37
+ REFACTOR --> SPRINT
38
+ end
39
+
40
+ subgraph IMPL ["⚙️ Per Story"]
41
+ LOCKED --> ORIENT["orient + analyze_impact\n(confirm risk_context)"]
42
+ ORIENT --> CODE["implement"]
43
+ CODE --> TESTS["tests green ✅"]
44
+ TESTS --> DRIFT["check_spec_drift"]
45
+ DRIFT --> DONE["story done ✅"]
46
+ end
47
+
48
+ style ONBOARD fill:#f0f0f0,stroke:#999
49
+ style REFACTOR fill:#fdd,stroke:#c00
50
+ ```
51
+
52
+ ## Setup (BMAD via npm)
53
+
54
+ ### Prerequisites
55
+
56
+ - Node.js 20+
57
+ - BMAD installed in your project: `npx bmad-method install`
58
+ - openlore MCP server running and indexed (`openlore analyze && openlore generate`)
59
+
60
+ ### Step 1 — Copy assets into your BMAD project
61
+
62
+ ```bash
63
+ # From your project root (where _bmad/ lives)
64
+ cp /path/to/openlore/examples/bmad/agents/architect.md \
65
+ _bmad/_memory/architect-sidecar/openlore.md
66
+
67
+ cp /path/to/openlore/examples/bmad/tasks/*.md \
68
+ _bmad/openlore/tasks/
69
+
70
+ cp /path/to/openlore/examples/bmad/templates/*.md \
71
+ _bmad/openlore/templates/
72
+ ```
73
+
74
+ ### Step 2 — Install the architect customization
75
+
76
+ ```bash
77
+ cp /path/to/openlore/examples/bmad/setup/architect.customize.yaml \
78
+ _bmad/_config/customizations/architect.customize.yaml
79
+ ```
80
+
81
+ This tells the BMAD Architect agent to load the openlore structural analysis
82
+ instructions every time it starts, via the sidecar mechanism.
83
+
84
+ ### Step 3 — Recompile BMAD agents
85
+
86
+ ```bash
87
+ npx bmad-method install
88
+ ```
89
+
90
+ BMAD recompiles the Architect agent with the new customization. The compiled
91
+ markdown agent file now includes a `Load COMPLETE file` directive pointing to
92
+ `_bmad/_memory/architect-sidecar/openlore.md`.
93
+
94
+ ### Step 4 — Start an architecture session
95
+
96
+ Open your IDE and start a conversation with the BMAD Architect agent.
97
+ The agent will automatically load the openlore instructions and begin
98
+ with Phase 0 (Structural Reality) before any design work.
99
+
100
+ ---
101
+
102
+ ## Contents
103
+
104
+ | Path | Purpose | Where it goes in BMAD |
105
+ |---|---|---|
106
+ | `agents/architect.md` | Architect sidecar — structural analysis before architecture | `_bmad/_memory/architect-sidecar/openlore.md` |
107
+ | `agents/dev-brownfield.md` | Dev agent fallback gate when planning was skipped | `_bmad/_memory/dev-sidecar/openlore-fallback.md` *(optional)* |
108
+ | `tasks/onboarding.md` | One-time baseline: analyze + generate specs | `_bmad/openlore/tasks/` |
109
+ | `tasks/sprint-planning.md` | Sprint validation: conflict detection, refactor ordering | `_bmad/openlore/tasks/` |
110
+ | `tasks/implement-story.md` | Implementation: risk-proportional orient → code → tests → drift | `_bmad/openlore/tasks/` |
111
+ | `tasks/refactor.md` | Safe refactor task for risk ≥ 70 stories | `_bmad/openlore/tasks/` |
112
+ | `templates/story.md` | Story template with `risk_context` section | `_bmad/openlore/templates/` |
113
+ | `setup/architect.customize.yaml` | BMAD customization — enables sidecar load | `_bmad/_config/customizations/` |
@@ -0,0 +1,226 @@
1
+ # Agent: Architect — openlore extension
2
+
3
+ > **This file is a sidecar for the BMAD `architect` agent.**
4
+ >
5
+ > **Setup (one-time):**
6
+ > ```bash
7
+ > # 1. Copy this file into your BMAD project
8
+ > cp examples/bmad/agents/architect.md _bmad/_memory/architect-sidecar/openlore.md
9
+ >
10
+ > # 2. Install the customization that tells BMAD to load it
11
+ > cp examples/bmad/setup/architect.customize.yaml \
12
+ > _bmad/_config/customizations/architect.customize.yaml
13
+ >
14
+ > # 3. Recompile BMAD agents
15
+ > npx bmad-method install
16
+ > ```
17
+ >
18
+ > After that, the Architect agent loads this file automatically at session start.
19
+ > No manual step needed in the conversation.
20
+ >
21
+ > Requires: openlore MCP server connected and onboarding completed
22
+ > (see `tasks/onboarding.md`).
23
+
24
+ ---
25
+
26
+ ## Core Principle
27
+
28
+ The architecture document MUST reflect the reality of the code,
29
+ not just the desired target state. An architecture written without reading the code
30
+ produces a plan that the codebase cannot support.
31
+
32
+ **Produce two documents:**
33
+ 1. **Structural Reality** — what the code actually is (openlore output)
34
+ 2. **Target Architecture** — what you want it to become (your design)
35
+
36
+ The gap between them is the technical debt backlog.
37
+
38
+ ---
39
+
40
+ ## Phase 0 — Structural Reality (run before any design work)
41
+
42
+ ### Step 0.1 — Architecture overview
43
+
44
+ ```xml
45
+ <use_mcp_tool>
46
+ <server_name>openlore</server_name>
47
+ <tool_name>get_architecture_overview</tool_name>
48
+ <arguments>{"directory": "$PROJECT_ROOT"}</arguments>
49
+ </use_mcp_tool>
50
+ ```
51
+
52
+ Extract:
53
+ - **Domain clusters** → existing logical boundaries
54
+ - **Cross-cluster dependencies** → where coupling is highest
55
+ - **Critical hubs** → functions that act as bottlenecks
56
+ - **Entry points** → where control enters the system
57
+
58
+ If this returns an error, run `analyze_codebase` first.
59
+
60
+ ### Step 0.2 — Risk landscape
61
+
62
+ ```xml
63
+ <use_mcp_tool>
64
+ <server_name>openlore</server_name>
65
+ <tool_name>get_refactor_report</tool_name>
66
+ <arguments>{"directory": "$PROJECT_ROOT"}</arguments>
67
+ </use_mcp_tool>
68
+ ```
69
+
70
+ Classify each high-priority candidate:
71
+
72
+ | Function | Issues | Priority | Classification |
73
+ |---|---|---|---|
74
+ | ... | high_fan_out | 85 | 🔴 no-touch zone |
75
+ | ... | in_cycle | 62 | 🟠 isolate before touching |
76
+ | ... | multi_requirement | 38 | 🟡 document carefully |
77
+
78
+ **No-touch zones** (priority ≥ 70): any story touching these functions is **blocked**
79
+ until a refactor story is completed first.
80
+
81
+ ### Step 0.3 — Structural debt
82
+
83
+ ```xml
84
+ <use_mcp_tool>
85
+ <server_name>openlore</server_name>
86
+ <tool_name>get_duplicate_report</tool_name>
87
+ <arguments>{"directory": "$PROJECT_ROOT"}</arguments>
88
+ </use_mcp_tool>
89
+ ```
90
+
91
+ Note clone groups — they amplify the cost of any feature that touches duplicated logic.
92
+
93
+ ### Step 0.4 — Critical hubs
94
+
95
+ ```xml
96
+ <use_mcp_tool>
97
+ <server_name>openlore</server_name>
98
+ <tool_name>get_critical_hubs</tool_name>
99
+ <arguments>{"directory": "$PROJECT_ROOT", "limit": 10, "minFanIn": 3}</arguments>
100
+ </use_mcp_tool>
101
+ ```
102
+
103
+ Hubs with high fan-in are the riskiest insertion points. Note their recommended approach
104
+ (`extract`, `split`, `facade`, `delegate`).
105
+
106
+ ---
107
+
108
+ ## Phase 1 — Feature / Epic Impact Assessment
109
+
110
+ For each epic or major feature in scope, generate a change proposal:
111
+
112
+ ```xml
113
+ <use_mcp_tool>
114
+ <server_name>openlore</server_name>
115
+ <tool_name>generate_change_proposal</tool_name>
116
+ <arguments>{
117
+ "directory": "$PROJECT_ROOT",
118
+ "description": "$EPIC_DESCRIPTION",
119
+ "slug": "$EPIC_SLUG"
120
+ }</arguments>
121
+ </use_mcp_tool>
122
+ ```
123
+
124
+ From each proposal:
125
+ - **domainsAffected** → which spec domains this epic touches
126
+ - **maxRiskScore** → overall risk level of this epic
127
+ - **requirementsTouched** → existing requirements this epic overlaps or extends
128
+
129
+ Build an epic risk matrix:
130
+
131
+ | Epic | Domains | Max Risk | Blocking Refactors |
132
+ |---|---|---|---|
133
+ | Add payment retry | payment, api | 🔴 82 | refactor `processPayment` first |
134
+ | User email validation | auth, user | 🟢 18 | none |
135
+
136
+ ---
137
+
138
+ ## Phase 2 — Architecture Document
139
+
140
+ Write `docs/architecture.md` (or the BMAD equivalent) with two mandatory sections:
141
+
142
+ ### Section: Structural Reality
143
+
144
+ ```markdown
145
+ ## Structural Reality (as-is)
146
+
147
+ > Generated from openlore analysis on {date}.
148
+ > Re-run `openlore analyze --force` before each planning cycle.
149
+
150
+ ### Domain Map
151
+
152
+ {paste architecture overview clusters and dependencies}
153
+
154
+ ### No-Touch Zones
155
+
156
+ Functions that MUST NOT be modified without a prior refactor story:
157
+
158
+ | Function | File | Risk | Issues |
159
+ |---|---|---|---|
160
+
161
+ ### Known Debt
162
+
163
+ - N clone groups detected
164
+ - N cyclic dependencies
165
+
166
+ ### Critical Hubs
167
+
168
+ Functions requiring the most careful change management:
169
+
170
+ | Function | Fan-in | Recommended approach |
171
+ |---|---|---|
172
+ ```
173
+
174
+ ### Section: Target Architecture
175
+
176
+ Design the future state here — new domains, desired boundaries, patterns to introduce.
177
+ **For each structural gap between reality and target, create a technical debt story.**
178
+
179
+ ---
180
+
181
+ ## Phase 3 — Technical Debt Backlog
182
+
183
+ For every no-touch zone, create a **refactor story** in the BMAD backlog:
184
+
185
+ Use the template `bmad/templates/story.md` with:
186
+ - Story type: `technical-debt`
187
+ - Title: `Refactor {function}: {issue}`
188
+ - Blocking: list stories that cannot proceed until this is done
189
+ - **Won't Do**: at minimum one item — scope the refactor tightly (e.g. "Won't change the public API", "Won't refactor callers")
190
+ - **Acceptance Criteria**: must be testable — state observable outcomes (e.g. "riskScore drops below 70", "no caller changes required")
191
+
192
+ These stories MUST be sprint-scheduled before any story that depends on the refactored function.
193
+
194
+ ---
195
+
196
+ ## Phase 4 — Annotate Stories with Risk Context
197
+
198
+ For each story in the backlog, run `annotate_story` — do not fill `risk_context` manually.
199
+
200
+ ```xml
201
+ <use_mcp_tool>
202
+ <server_name>openlore</server_name>
203
+ <tool_name>annotate_story</tool_name>
204
+ <arguments>{
205
+ "directory": "$PROJECT_ROOT",
206
+ "storyFilePath": "$STORY_FILE_PATH",
207
+ "description": "$STORY_TITLE — $PRIMARY_AC"
208
+ }</arguments>
209
+ </use_mcp_tool>
210
+ ```
211
+
212
+ The tool reads the story file, runs `orient` + `analyze_impact`, and writes the
213
+ `risk_context` section directly. Existing sections are replaced, not appended.
214
+
215
+ Re-run after any completed refactor story — risk scores change as the code evolves.
216
+
217
+ The Dev Agent reads this context at sprint time — it does **not** discover it.
218
+
219
+ ---
220
+
221
+ ## Absolute Constraints
222
+
223
+ - Never write a target architecture without first completing Phase 0
224
+ - Never assign a story touching a no-touch zone without a blocking refactor story in the backlog
225
+ - Always run `annotate_story` on stories before they enter a sprint — never fill risk_context manually
226
+ - Re-run Phase 0 at the start of each planning cycle — the structural reality changes
@@ -0,0 +1,69 @@
1
+ # Agent: Developer — No-Planning Fallback
2
+
3
+ > **Load this ONLY when:**
4
+ > - No architect analysis was done and stories have no `risk_context`
5
+ > - Onboarding to a completely unknown codebase mid-project
6
+ > - The sprint planning task was skipped
7
+ >
8
+ > In normal usage, `bmad/tasks/implement-story.md` is sufficient —
9
+ > the risk context from planning makes this override unnecessary.
10
+
11
+ ---
12
+
13
+ ## What this adds
14
+
15
+ When `risk_context` is absent from a story, this override enforces a full
16
+ structural gate at implementation time as a safety net.
17
+
18
+ For every story, before writing code:
19
+
20
+ 1. Call `orient` with the story description
21
+ 2. Call `analyze_impact` on the top 3 functions
22
+ 3. If any `riskScore ≥ 70`: stop, propose a refactor story, do not proceed
23
+
24
+ This replicates at dev time what should have happened at planning time.
25
+
26
+ ---
27
+
28
+ ## When to stop using this
29
+
30
+ Once the Architect Agent has run `bmad/tasks/onboarding.md` and
31
+ `bmad/agents/architect.md`, and stories have `risk_context` populated,
32
+ **remove this override**. It adds cost (extra MCP calls) with no benefit
33
+ once planning is done correctly.
34
+
35
+ ---
36
+
37
+ ## Gate
38
+
39
+ ```xml
40
+ <use_mcp_tool>
41
+ <server_name>openlore</server_name>
42
+ <tool_name>orient</tool_name>
43
+ <arguments>{
44
+ "directory": "$PROJECT_ROOT",
45
+ "task": "$STORY_TITLE — $AC1",
46
+ "limit": 7
47
+ }</arguments>
48
+ </use_mcp_tool>
49
+ ```
50
+
51
+ For each of the top 3 functions:
52
+
53
+ ```xml
54
+ <use_mcp_tool>
55
+ <server_name>openlore</server_name>
56
+ <tool_name>analyze_impact</tool_name>
57
+ <arguments>{
58
+ "directory": "$PROJECT_ROOT",
59
+ "symbol": "$FUNCTION_NAME",
60
+ "depth": 2
61
+ }</arguments>
62
+ </use_mcp_tool>
63
+ ```
64
+
65
+ | riskScore | Action |
66
+ |---|---|
67
+ | < 40 | Proceed |
68
+ | 40–69 | Proceed with care — protect listed callers |
69
+ | ≥ 70 | Stop — create refactor story, block this story |
@@ -0,0 +1,14 @@
1
+ # openlore extension for the BMAD Architect agent
2
+ #
3
+ # Drop this file at: _bmad/_config/customizations/architect.customize.yaml
4
+ # Then re-run: npx bmad-method install
5
+ #
6
+ # What it does: instructs the Architect agent to load the openlore structural
7
+ # analysis instructions as a sidecar before starting any design work.
8
+
9
+ customize:
10
+ metadata:
11
+ hasSidecar: true
12
+ critical-actions:
13
+ Appends:
14
+ - "Load COMPLETE file {project-root}/_bmad/_memory/architect-sidecar/openlore.md"