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,354 @@
1
+ ---
2
+ name: openlore-brainstorm
3
+ description: Transform a feature idea into an annotated story. Detects greenfield vs brownfield automatically — uses Domain Sketch for greenfield (no existing code), Constrained Option Tree for brownfield (existing codebase with openlore analysis).
4
+ license: MIT
5
+ compatibility: openlore MCP server
6
+ ---
7
+
8
+ # openlore: Brainstorm
9
+
10
+ ## When to use this skill
11
+
12
+ Trigger this skill when the user wants to **explore or design a new feature** before
13
+ writing any code, with phrasings like:
14
+ - "I want to add feature X"
15
+ - "how should I approach this?"
16
+ - "let's brainstorm this story"
17
+ - explicit command `/openlore-brainstorm`
18
+
19
+ ---
20
+
21
+ ## Step 1 — Detect mode
22
+
23
+ Capture `$PROJECT_ROOT`, `$FEATURE_DESCRIPTION`, and
24
+ `$FEATURE_SLUG` (kebab-case, ≤ 5 words, e.g. `payment-retry-flow`).
25
+
26
+ Then probe the structural index by calling the openlore MCP tool `orient` with:
27
+ ```json
28
+ {
29
+ "directory": "$PROJECT_ROOT",
30
+ "task": "$FEATURE_DESCRIPTION",
31
+ "limit": 7
32
+ }
33
+ ```
34
+
35
+ Set `$MODE` based on the result:
36
+
37
+ | Result | `$MODE` | Meaning |
38
+ |---|---|---|
39
+ | Returns functions with score > 0 | `brownfield` | Existing indexed codebase |
40
+ | Returns `"error": "no cache"` or 0 functions | `greenfield` | No structural index yet |
41
+
42
+ Inform the user:
43
+ - Brownfield: "I found existing code related to this feature. Using structural analysis to guide design."
44
+ - Greenfield: "No structural index found. Using Domain Sketch — structural analysis will be available after `openlore analyze` is run on the first implementation."
45
+
46
+ **Load project antipatterns (both modes):**
47
+
48
+ If `.claude/antipatterns.md` exists, read it and store as `$ANTIPATTERNS`.
49
+ These will be used as a failure mode source in Step 5. If absent, `$ANTIPATTERNS = none`.
50
+
51
+ ---
52
+
53
+ ## Steps 2–4 — Structural analysis (brownfield only)
54
+
55
+ *Skip to Step 5 if `$MODE = greenfield`.*
56
+
57
+ ### Step 2 — Architecture overview
58
+
59
+ Call the openlore MCP tool `get_architecture_overview` with `{"directory": "$PROJECT_ROOT"}`.
60
+
61
+ Note hub functions and cross-domain dependencies in `$DOMAINS_AFFECTED`.
62
+
63
+ ### Step 3 — Generate change proposal
64
+
65
+ Call the openlore MCP tool `generate_change_proposal` with:
66
+ ```json
67
+ {
68
+ "directory": "$PROJECT_ROOT",
69
+ "description": "$FEATURE_DESCRIPTION",
70
+ "slug": "$FEATURE_SLUG"
71
+ }
72
+ ```
73
+
74
+ This chains `orient` + `search_specs` + `analyze_impact` and writes
75
+ `openspec/changes/$FEATURE_SLUG/proposal.md`.
76
+
77
+ Extract:
78
+ - **`$MAX_RISK_SCORE`** — overall risk level
79
+ - **`$REQUIREMENTS_TOUCHED`** — existing requirements this feature overlaps
80
+ - **`$BLOCKING_REFACTORS`** — functions with risk ≥ 70
81
+
82
+ ### Step 4 — Risk gate
83
+
84
+ | Score | Action |
85
+ |---|---|
86
+ | 🟢 < 40 | Proceed to Step 5 |
87
+ | 🟡 40–69 | Proceed, flag impacted callers to protect during design |
88
+ | 🔴 ≥ 70 | Stop — propose a blocking refactor story before continuing |
89
+
90
+ If blocked:
91
+ > "This feature touches `$BLOCKING_FUNCTION` (risk score: $SCORE).
92
+ > A refactor story must be completed first. I can create it now if you'd like."
93
+
94
+ Do not continue until the user accepts the refactor story or explicitly overrides.
95
+
96
+ ---
97
+
98
+ ## Step 5 — Brainstorming
99
+
100
+ ### If `$MODE = brownfield` — Constrained Option Tree
101
+
102
+ **5a — Establish the constraint space**
103
+
104
+ Derive from Steps 2–4 and present before generating options:
105
+
106
+ ```
107
+ Hard constraints (non-negotiable):
108
+ - Functions with riskScore ≥ 70: $BLOCKED_FUNCTIONS
109
+ - Requirements that must be preserved: $REQUIREMENTS_TOUCHED
110
+ - Domain boundaries that must not be crossed: $DOMAIN_BOUNDARIES
111
+
112
+ Soft constraints (preferred):
113
+ - Existing insertion points: $INSERTION_POINTS
114
+ - Patterns already used in $DOMAINS_AFFECTED
115
+ ```
116
+
117
+ Ask: "Are there additional constraints before we explore approaches?"
118
+
119
+ **5b — Generate 2–3 options**
120
+
121
+ Each option must respect hard constraints. Name them clearly
122
+ (e.g. Option A — Extend existing, Option B — New service, Option C — Facade).
123
+
124
+ If `$ANTIPATTERNS ≠ none`, cross-check each option against the list.
125
+ Flag any option that would reproduce a known failure pattern with ⚠ and the relevant AP-NNN.
126
+
127
+ | | Option A | Option B | Option C |
128
+ |---|---|---|---|
129
+ | Insertion point | | | |
130
+ | Domains touched | | | |
131
+ | Risk score impact | | | |
132
+ | Requirements affected | | | |
133
+ | Estimated scope (files) | | | |
134
+ | Trade-off | | | |
135
+
136
+ **5c — Recommend**
137
+
138
+ State one recommendation with a single structural reason:
139
+
140
+ > "Recommend Option B — inserts at `$SAFE_FUNCTION` (risk 18), avoids `$HUB`
141
+ > (fan-in 14) entirely. Option A is valid but adds unnecessary blast radius."
142
+
143
+ **5d — Confirm**
144
+
145
+ Do not proceed to Step 5e until the user chooses. If they want a hybrid,
146
+ produce a revised option table.
147
+
148
+ **5e — Adversarial challenge**
149
+
150
+ Before writing the story, switch roles: challenge the chosen option as a skeptic.
151
+
152
+ State exactly 2 failure modes grounded in the structural data and, if `$ANTIPATTERNS ≠ none`,
153
+ any applicable antipatterns from `.claude/antipatterns.md`:
154
+
155
+ > "Devil's advocate on Option B:
156
+ > 1. `$CALLER_A` calls `$INSERTION_POINT` with `$EDGE_CASE` — this path is not covered
157
+ > by the proposed approach and could silently break.
158
+ > 2. The proposal scores risk at $SCORE but `$HUB` (fan-in $N) is one hop away —
159
+ > a regression there would not be caught until `check_spec_drift`."
160
+
161
+ Then ask the user: "Do these failure modes change your choice, or should we add
162
+ mitigations to the story constraints?"
163
+
164
+ Only proceed to Step 6 once the user has acknowledged the failure modes.
165
+ Mitigations go into `## Technical Constraints` in the story.
166
+
167
+ > Note: this IS a gate (waits for user input) because brainstorm is a design phase
168
+ > where changing course is cheap. In contrast, `openlore-implement-story` Step 4b
169
+ > is a mandatory self-check that does NOT gate — because by implementation time
170
+ > the design decision is already made.
171
+
172
+ Ask: "What is explicitly out of scope for this story?" List the answers as `$WONT_DO`.
173
+
174
+ ---
175
+
176
+ ### If `$MODE = greenfield` — Domain Sketch
177
+
178
+ No existing structure to constrain — the method builds the structure from scratch.
179
+
180
+ **5a — Entities**
181
+
182
+ Ask the user: "What are the core data objects this feature creates or transforms?"
183
+
184
+ List them as nouns with a one-line definition each:
185
+ ```
186
+ $ENTITY_1 — definition
187
+ $ENTITY_2 — definition
188
+ ```
189
+
190
+ **5b — Operations**
191
+
192
+ For each entity, identify the operations the feature needs (create, read,
193
+ transform, delete, emit, receive…):
194
+
195
+ ```
196
+ $ENTITY_1: $OP_1, $OP_2
197
+ $ENTITY_2: $OP_1
198
+ ```
199
+
200
+ Identify which operations cross a system boundary (external API, database,
201
+ event bus, CLI…) — these are the riskiest integration points.
202
+
203
+ **5c — Boundaries**
204
+
205
+ Define where the feature sits relative to the system:
206
+
207
+ ```
208
+ Entry point: $HOW_IT_IS_TRIGGERED (HTTP request / CLI command / event / cron)
209
+ Data in: $INPUT_FORMAT
210
+ Data out: $OUTPUT_FORMAT or side-effects
211
+ External deps: $THIRD_PARTY_SERVICES or "none"
212
+ ```
213
+
214
+ **5d — Architecture decisions**
215
+
216
+ State 2–3 decisions that must be made before coding. For each, list the options
217
+ and a recommendation:
218
+
219
+ | Decision | Options | Recommendation |
220
+ |---|---|---|
221
+ | e.g. Storage | in-memory / DB / file | DB — survives restarts |
222
+ | e.g. Coupling | new module / extend existing | new module — clear boundary |
223
+
224
+ Ask the user to confirm or override each decision before proceeding to Step 6.
225
+
226
+ Ask: "What is explicitly out of scope for this story?" List the answers as `$WONT_DO`.
227
+
228
+ ---
229
+
230
+ ## Step 6 — Write the story
231
+
232
+ Produce a story file at `$STORIES_DIR/$FEATURE_SLUG.md`.
233
+
234
+ If a story template exists at `$PROJECT_ROOT/_bmad/openlore/templates/story.md`
235
+ or `$PROJECT_ROOT/examples/bmad/templates/story.md`, use it. Otherwise:
236
+
237
+ **Brownfield template:**
238
+
239
+ ```markdown
240
+ # $STORY_TITLE
241
+
242
+ ## Goal
243
+
244
+ $FEATURE_DESCRIPTION
245
+
246
+ ## Acceptance Criteria
247
+
248
+ Each AC must be verifiable by a test. State the observable outcome, not the intent.
249
+ ✗ "Should handle errors correctly" — ✓ "Returns HTTP 400 with `{error: 'X'}` when Y is absent"
250
+
251
+ - [ ] $AC_1
252
+ - [ ] $AC_2
253
+
254
+ ## Won't Do
255
+
256
+ - $WONT_DO_1
257
+ - $WONT_DO_2
258
+
259
+ ## Risk Context
260
+
261
+ <!-- Filled by annotate_story in Step 7 -->
262
+
263
+ ## Technical Constraints
264
+
265
+ $BLOCKING_REFACTORS and caller protection notes from the proposal.
266
+
267
+ ## Notes
268
+
269
+ - Chosen approach: $CHOSEN_OPTION — $TRADE_OFF
270
+ - Domains affected: $DOMAINS_AFFECTED
271
+ - Requirements touched: $REQUIREMENTS_TOUCHED
272
+ - Max risk score: $MAX_RISK_SCORE
273
+ ```
274
+
275
+ **Greenfield template:**
276
+
277
+ ```markdown
278
+ # $STORY_TITLE
279
+
280
+ ## Goal
281
+
282
+ $FEATURE_DESCRIPTION
283
+
284
+ ## Acceptance Criteria
285
+
286
+ Each AC must be verifiable by a test. State the observable outcome, not the intent.
287
+ ✗ "Should handle errors correctly" — ✓ "Returns HTTP 400 with `{error: 'X'}` when Y is absent"
288
+
289
+ - [ ] $AC_1
290
+ - [ ] $AC_2
291
+
292
+ ## Won't Do
293
+
294
+ - $WONT_DO_1
295
+ - $WONT_DO_2
296
+
297
+ ## Domain Sketch
298
+
299
+ ### Entities
300
+ $ENTITIES
301
+
302
+ ### Operations
303
+ $OPERATIONS
304
+
305
+ ### Boundaries
306
+ $BOUNDARIES
307
+
308
+ ## Architecture Decisions
309
+
310
+ $DECISIONS_TABLE
311
+
312
+ ## Notes
313
+
314
+ - First implementation — run `openlore analyze && openlore generate` after
315
+ to enable structural analysis for future stories.
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Step 7 — Annotate the story
321
+
322
+ **Brownfield only.** Skip if `$MODE = greenfield`.
323
+
324
+ Call the openlore MCP tool `annotate_story` with:
325
+ ```json
326
+ {
327
+ "directory": "$PROJECT_ROOT",
328
+ "storyFilePath": "$STORY_FILE_PATH",
329
+ "description": "$STORY_TITLE"
330
+ }
331
+ ```
332
+
333
+ Patches `## Risk Context` directly. Story is now ready for `openlore-implement-story`.
334
+
335
+ **Greenfield:** confirm to the user:
336
+ > "Story written to `$STORY_FILE_PATH`. No risk context yet — run
337
+ > `openlore analyze` after the first implementation sprint to enable
338
+ > structural analysis for future stories."
339
+
340
+ ---
341
+
342
+ ## Absolute constraints
343
+
344
+ - Do not ask design questions before Step 5 (both modes)
345
+ - Brownfield: do not proceed past Step 4 if `$MAX_RISK_SCORE ≥ 70` without acknowledgement
346
+ - Brownfield: do not fill `## Risk Context` manually — always use `annotate_story`
347
+ - Greenfield: do not call `annotate_story` — there is nothing to annotate yet
348
+ - Do not propose implementation steps — this skill ends at story creation
349
+ - Every AC must be verifiable by a test — reject vague ACs ("should work", "handles errors") and rewrite them before proceeding
350
+ - `## Won't Do` is mandatory in the story — at minimum one item
351
+ - Brownfield: `generate_change_proposal` creates `openspec/changes/$FEATURE_SLUG/proposal.md`
352
+ on disk. Inform the user at session end:
353
+ "A proposal file was created at `openspec/changes/$FEATURE_SLUG/proposal.md`.
354
+ Delete it if this idea is not pursued."
@@ -0,0 +1,291 @@
1
+ ---
2
+ name: openlore-debug
3
+ description: Debug a problem by anchoring root-cause analysis in openlore structural knowledge. Uses orient + search_specs + analyze_impact to form an explicit hypothesis before reading code. Enforces RED/GREEN test verification.
4
+ license: MIT
5
+ compatibility: openlore MCP server
6
+ ---
7
+
8
+ # openlore: Debug
9
+
10
+ ## When to use this skill
11
+
12
+ Trigger this skill when the user reports **a bug or unexpected behaviour** on a codebase
13
+ that has openlore analysis available, with phrasings like:
14
+ - "this is broken"
15
+ - "X is not working"
16
+ - "something is wrong with Y"
17
+ - "debug this"
18
+ - explicit command `/openlore-debug`
19
+
20
+ **The rule**: form an explicit hypothesis before reading any code. Do not browse
21
+ files speculatively.
22
+
23
+ **Prerequisite**: openlore analysis must exist (`openlore analyze` has been run).
24
+ If `orient` returns `"error": "no cache"` → run `analyze_codebase` first, then retry.
25
+
26
+ ---
27
+
28
+ ## Step 1 — Reproduce
29
+
30
+ Ask the user for:
31
+ 1. **Steps to reproduce** — minimal sequence that triggers the bug
32
+ 2. **Expected behaviour** — what should happen
33
+ 3. **Observed behaviour** — what actually happens
34
+ 4. **`$PROJECT_ROOT`** — project root directory
35
+
36
+ Do not proceed to Step 2 until all four are known.
37
+
38
+ If the user cannot reproduce the bug reliably, note it and proceed anyway — but
39
+ flag that the fix may be speculative until reproduction is confirmed.
40
+
41
+ Capture:
42
+ - `$BUG_DESCRIPTION` — one-line summary of the symptom (e.g. "payment retry does not reset counter after success")
43
+ - `$REPRO_STEPS` — reproduction sequence
44
+
45
+ ---
46
+
47
+ ## Step 2 — Orient
48
+
49
+ Call the openlore MCP tool `orient` with:
50
+ ```json
51
+ {
52
+ "directory": "$PROJECT_ROOT",
53
+ "task": "$BUG_DESCRIPTION",
54
+ "limit": 7
55
+ }
56
+ ```
57
+
58
+ Extract:
59
+ - **`$CANDIDATE_FUNCTIONS`** — top 3–5 functions structurally related to the symptom
60
+ - **`$DOMAINS_AFFECTED`** — spec domains involved
61
+ - **`$CALL_PATHS`** — call chains relevant to the symptom
62
+
63
+ ---
64
+
65
+ ## Step 3 — Search specs
66
+
67
+ If `openspec/specs/` exists:
68
+
69
+ Call the openlore MCP tool `search_specs` with:
70
+ ```json
71
+ {
72
+ "directory": "$PROJECT_ROOT",
73
+ "query": "$BUG_DESCRIPTION",
74
+ "limit": 5
75
+ }
76
+ ```
77
+
78
+ Look for:
79
+ - **Documented constraints** that the buggy behaviour violates
80
+ - **Requirements** that define what "correct" means for `$DOMAINS_AFFECTED`
81
+ - **Known edge cases** documented in the spec that may explain the symptom
82
+
83
+ If no specs exist, skip this step and note the absence.
84
+
85
+ ---
86
+
87
+ ## Step 4 — Isolate and hypothesize
88
+
89
+ For the top 2 candidate functions from Step 2, get minimal context first (callers, callees, body, test coverage in one call):
90
+ ```json
91
+ // get_minimal_context
92
+ {
93
+ "directory": "$PROJECT_ROOT",
94
+ "functionName": "$CANDIDATE_FUNCTION"
95
+ }
96
+ ```
97
+
98
+ Then check structural properties:
99
+ ```json
100
+ // analyze_impact
101
+ {
102
+ "directory": "$PROJECT_ROOT",
103
+ "symbol": "$CANDIDATE_FUNCTION",
104
+ "depth": 2
105
+ }
106
+ ```
107
+
108
+ If the repro involves a request flow (HTTP request, event, message queue), confirm the call chain before forming the hypothesis by calling the openlore MCP tool `trace_execution_path` with:
109
+ ```json
110
+ {
111
+ "directory": "$PROJECT_ROOT",
112
+ "from": "$ENTRY_POINT",
113
+ "to": "$CANDIDATE_FUNCTION"
114
+ }
115
+ ```
116
+
117
+ This replaces speculative file browsing — the path is structural fact, not inference. Skip if `$ENTRY_POINT` is unknown or the repro is not request-driven.
118
+
119
+ Using the call paths, risk scores, spec constraints, and traced path gathered so far,
120
+ **state an explicit hypothesis before reading any code**:
121
+
122
+ > "Hypothesis: `$FUNCTION` does not reset `$STATE` when `$CONDITION` because
123
+ > it is called from `$CALLER` which does not pass `$PARAMETER`."
124
+
125
+ The hypothesis must:
126
+ - Name a specific function
127
+ - State a specific mechanism (state not reset, condition not checked, wrong caller, etc.)
128
+ - Be falsifiable by reading the code
129
+
130
+ **Do not read source files before forming this hypothesis.**
131
+
132
+ ---
133
+
134
+ ## Step 5 — Verify the hypothesis
135
+
136
+ Read the skeleton of the hypothesised function(s) by calling the openlore MCP tool `get_function_skeleton` with:
137
+ ```json
138
+ {
139
+ "directory": "$PROJECT_ROOT",
140
+ "filePath": "$TARGET_FILE"
141
+ }
142
+ ```
143
+
144
+ Then read the full function body if needed.
145
+
146
+ | Result | Action |
147
+ |---|---|
148
+ | Hypothesis confirmed | Proceed to Step 6 |
149
+ | Hypothesis refuted | Return to Step 4 with a revised hypothesis (max 3 iterations before asking the user for more context) |
150
+ | Cause is in a caller, not the function itself | Extend `analyze_impact` one level up, revise hypothesis |
151
+
152
+ Document the confirmed hypothesis explicitly before writing any fix.
153
+
154
+ ---
155
+
156
+ ## Step 6 — Fix
157
+
158
+ Apply the **minimal fix** that resolves the confirmed hypothesis.
159
+
160
+ Do not modify functions outside the scope identified in Steps 2–5 without
161
+ re-running the gate (`orient` + `analyze_impact`) on the new scope.
162
+
163
+ **Small model constraint**: each edit must touch a contiguous block of at most
164
+ 50 lines. Split larger fixes into sequential edits.
165
+
166
+ Do not refactor, rename, or clean up unrelated code while fixing the bug.
167
+
168
+ ---
169
+
170
+ ## Step 7 — Verify
171
+
172
+ **RED first (if no existing test covers this case):**
173
+
174
+ Write a test that reproduces the bug using `$REPRO_STEPS`. Run it. It must fail
175
+ (RED) — confirming the bug is real and the test is meaningful.
176
+
177
+ **Apply the fix**, then run the test again. It must pass (GREEN).
178
+
179
+ **Full suite:**
180
+
181
+ Run the full test suite. If any pre-existing test breaks, fix the regression
182
+ before closing the bug.
183
+
184
+ | Situation | Action |
185
+ |---|---|
186
+ | New test RED → fix → GREEN, suite green | Proceed to Step 8 |
187
+ | Cannot reproduce in a test | Note it, apply fix, confirm manually, add a note in the story/issue |
188
+ | Suite regression introduced | Fix regression. Do not proceed. |
189
+
190
+ ---
191
+
192
+ ## Step 8 — Drift check
193
+
194
+ Only if the fix changes a documented behaviour:
195
+
196
+ Call the openlore MCP tool `check_spec_drift` with `{"directory": "$PROJECT_ROOT"}`.
197
+
198
+ | Drift type | Resolution |
199
+ |---|---|
200
+ | `gap` on modified function | The spec described expected behaviour that changed — update the spec |
201
+ | `stale` | Fix the stale reference |
202
+ | `uncovered` | Not caused by this fix — note it, propose `openlore generate` |
203
+ | No drift | Proceed to Step 9 |
204
+
205
+ ---
206
+
207
+ ## Step 9 — Spec invariant feedback
208
+
209
+ Every real bug reveals an invariant that was not documented. Capture it so future
210
+ agents benefit from this discovery via `search_specs`.
211
+
212
+ **9a — Identify the invariant**
213
+
214
+ State the invariant that was violated, in one sentence:
215
+
216
+ > "`$FUNCTION` must always `$CONDITION` when `$TRIGGER` — violating this causes
217
+ > `$OBSERVED_SYMPTOM`."
218
+
219
+ If the bug was caused by a missing guard, a wrong assumption about caller order,
220
+ or an undocumented state constraint — that is the invariant.
221
+
222
+ **9b — Locate the spec**
223
+
224
+ Call the openlore MCP tool `get_spec` with:
225
+ ```json
226
+ {
227
+ "directory": "$PROJECT_ROOT",
228
+ "domain": "$DOMAIN_AFFECTED"
229
+ }
230
+ ```
231
+
232
+ **9c — Add the invariant**
233
+
234
+ Append to the relevant domain spec under a `### Known Invariants` section
235
+ (create it if absent). Wrap the section in `<!-- manual -->` / `<!-- /manual -->`
236
+ markers so `openlore generate` preserves it on re-generation:
237
+
238
+ ```markdown
239
+ <!-- manual -->
240
+ ### Known Invariants
241
+
242
+ - `$FUNCTION`: $INVARIANT_STATEMENT
243
+ — discovered via bug fix on $DATE, root cause: $ROOT_CAUSE_SUMMARY
244
+ <!-- /manual -->
245
+ ```
246
+
247
+ If the domain spec does not exist yet (`uncovered` from Step 8), note the
248
+ invariant in the story/issue instead and flag it for the next `openlore generate` run.
249
+
250
+ **9d — Evaluate cross-cutting scope**
251
+
252
+ Ask: is this bug an instance of a general failure pattern, or specific to this domain?
253
+
254
+ | Signal | Cross-cutting antipattern? |
255
+ |---|---|
256
+ | Bug involves an assumption about external state, ordering, or caller contract | Yes |
257
+ | Bug is reproducible in other domains with the same pattern | Yes |
258
+ | Bug is specific to a data invariant in `$DOMAIN` | No — domain spec only |
259
+
260
+ If cross-cutting, append to `.claude/antipatterns.md` (if absent, create it with the
261
+ header from the antipatterns template):
262
+
263
+ ```markdown
264
+ ## AP-{NNN} — {pattern name}
265
+
266
+ - **Class**: {state | concurrency | boundary | assumption | resource | ordering}
267
+ - **Symptom**: {what broke — one sentence}
268
+ - **Rule**: {detection rule — "When X, always verify Y"}
269
+ - **Discovered**: $DATE via $BUG_DESCRIPTION
270
+ ```
271
+
272
+ **9e — Inform the user**
273
+
274
+ > "Invariant added to `openspec/specs/$DOMAIN/spec.md`."
275
+
276
+ If an antipattern was added:
277
+ > "Cross-cutting antipattern AP-{NNN} added to `.claude/antipatterns.md`.
278
+ > Future brainstorm and implementation sessions will check this rule."
279
+
280
+ ---
281
+
282
+ ## Absolute constraints
283
+
284
+ - Do not read source code before forming a hypothesis in Step 4
285
+ - Hypothesis is mandatory — even when the cause seems obvious
286
+ - Do not skip Step 1 (reproduction) — a fix without reproduction is speculation
287
+ - Do not touch functions outside the confirmed scope without re-running the gate
288
+ - Do not run `check_spec_drift` before tests are green
289
+ - Each edit ≤ 50 lines on small models
290
+ - Do not skip Step 9 — every bug fix must produce a documented invariant or an
291
+ explicit note explaining why no invariant applies