@codemcp/workflows 5.3.0 → 6.0.2

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 (580) hide show
  1. package/README.md +91 -0
  2. package/package.json +78 -17
  3. package/packages/cli/dist/chunk-R5U7XKVJ.js +16 -0
  4. package/packages/cli/dist/chunk-RTDQR2KY.js +6718 -0
  5. package/packages/cli/dist/cli-CZ4FMSWR.js +1421 -0
  6. package/packages/cli/dist/dist-KZOA4GL5.js +65 -0
  7. package/packages/cli/dist/dist-UGVUJIDN.js +14475 -0
  8. package/packages/cli/dist/index.js +21 -0
  9. package/packages/cli/package.json +28 -0
  10. package/packages/cli/resources/agents/architect.yaml +61 -0
  11. package/packages/cli/resources/agents/business-analyst.yaml +60 -0
  12. package/packages/cli/resources/agents/developer.yaml +61 -0
  13. package/packages/cli/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
  14. package/packages/cli/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
  15. package/packages/cli/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
  16. package/packages/cli/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
  17. package/packages/cli/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
  18. package/packages/cli/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
  19. package/packages/cli/resources/templates/architecture/c4.md +224 -0
  20. package/packages/cli/resources/templates/architecture/freestyle.md +53 -0
  21. package/packages/cli/resources/templates/architecture/game.md +250 -0
  22. package/packages/cli/resources/templates/architecture/none.md +17 -0
  23. package/packages/cli/resources/templates/design/comprehensive.md +207 -0
  24. package/packages/cli/resources/templates/design/freestyle.md +37 -0
  25. package/packages/cli/resources/templates/design/game.md +66 -0
  26. package/packages/cli/resources/templates/design/none.md +17 -0
  27. package/packages/cli/resources/templates/requirements/ears.md +90 -0
  28. package/packages/cli/resources/templates/requirements/freestyle.md +42 -0
  29. package/packages/cli/resources/templates/requirements/game.md +162 -0
  30. package/packages/cli/resources/templates/requirements/none.md +17 -0
  31. package/packages/cli/resources/templates/skills/POWER.md +23 -0
  32. package/packages/cli/resources/templates/skills/SKILL.md +19 -0
  33. package/packages/cli/resources/workflows/adr.yaml +157 -0
  34. package/packages/cli/resources/workflows/big-bang-conversion.yaml +592 -0
  35. package/packages/cli/resources/workflows/boundary-testing.yaml +376 -0
  36. package/packages/cli/resources/workflows/bugfix.yaml +177 -0
  37. package/packages/cli/resources/workflows/business-analysis.yaml +597 -0
  38. package/packages/cli/resources/workflows/c4-analysis.yaml +471 -0
  39. package/packages/cli/resources/workflows/epcc.yaml +183 -0
  40. package/packages/cli/resources/workflows/game-beginner.yaml +434 -0
  41. package/packages/cli/resources/workflows/greenfield.yaml +201 -0
  42. package/packages/cli/resources/workflows/minor.yaml +138 -0
  43. package/packages/cli/resources/workflows/posts.yaml +193 -0
  44. package/packages/cli/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
  45. package/packages/cli/resources/workflows/sdd-bugfix.yaml +381 -0
  46. package/packages/cli/resources/workflows/sdd-feature-crowd.yaml +713 -0
  47. package/packages/cli/resources/workflows/sdd-feature.yaml +471 -0
  48. package/packages/cli/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
  49. package/packages/cli/resources/workflows/sdd-greenfield.yaml +463 -0
  50. package/packages/cli/resources/workflows/slides.yaml +237 -0
  51. package/packages/cli/resources/workflows/tdd.yaml +160 -0
  52. package/packages/cli/resources/workflows/waterfall.yaml +209 -0
  53. package/packages/core/dist/beads-integration.d.ts +50 -0
  54. package/packages/core/dist/beads-integration.js +387 -0
  55. package/packages/core/dist/beads-integration.js.map +1 -0
  56. package/packages/core/dist/beads-state-manager.d.ts +58 -0
  57. package/packages/core/dist/beads-state-manager.js +212 -0
  58. package/packages/core/dist/beads-state-manager.js.map +1 -0
  59. package/packages/core/dist/config-manager.d.ts +24 -0
  60. package/packages/core/dist/config-manager.js +68 -0
  61. package/packages/core/dist/config-manager.js.map +1 -0
  62. package/packages/core/dist/conversation-manager.d.ts +98 -0
  63. package/packages/core/dist/conversation-manager.js +382 -0
  64. package/packages/core/dist/conversation-manager.js.map +1 -0
  65. package/packages/core/dist/file-detection-manager.d.ts +53 -0
  66. package/packages/core/dist/file-detection-manager.js +221 -0
  67. package/packages/core/dist/file-detection-manager.js.map +1 -0
  68. package/packages/core/dist/file-storage.d.ts +93 -0
  69. package/packages/core/dist/file-storage.js +301 -0
  70. package/packages/core/dist/file-storage.js.map +1 -0
  71. package/packages/core/dist/git-manager.d.ts +22 -0
  72. package/packages/core/dist/git-manager.js +123 -0
  73. package/packages/core/dist/git-manager.js.map +1 -0
  74. package/packages/core/dist/index.d.ts +24 -0
  75. package/packages/core/dist/index.js +31 -0
  76. package/packages/core/dist/index.js.map +1 -0
  77. package/packages/core/dist/instruction-generator.d.ts +40 -0
  78. package/packages/core/dist/instruction-generator.js +89 -0
  79. package/packages/core/dist/instruction-generator.js.map +1 -0
  80. package/packages/core/dist/interaction-logger.d.ts +37 -0
  81. package/packages/core/dist/interaction-logger.js +87 -0
  82. package/packages/core/dist/interaction-logger.js.map +1 -0
  83. package/packages/core/dist/interfaces/index.d.ts +9 -0
  84. package/packages/core/dist/interfaces/index.js +10 -0
  85. package/packages/core/dist/interfaces/index.js.map +1 -0
  86. package/packages/core/dist/interfaces/instruction-generator.interface.d.ts +41 -0
  87. package/packages/core/dist/interfaces/instruction-generator.interface.js +8 -0
  88. package/packages/core/dist/interfaces/instruction-generator.interface.js.map +1 -0
  89. package/packages/core/dist/interfaces/plan-manager.interface.d.ts +55 -0
  90. package/packages/core/dist/interfaces/plan-manager.interface.js +8 -0
  91. package/packages/core/dist/interfaces/plan-manager.interface.js.map +1 -0
  92. package/packages/core/dist/interfaces/task-backend-client.interface.d.ts +52 -0
  93. package/packages/core/dist/interfaces/task-backend-client.interface.js +8 -0
  94. package/packages/core/dist/interfaces/task-backend-client.interface.js.map +1 -0
  95. package/packages/core/dist/logger.d.ts +64 -0
  96. package/packages/core/dist/logger.js +283 -0
  97. package/packages/core/dist/logger.js.map +1 -0
  98. package/packages/core/dist/path-validation-utils.d.ts +75 -0
  99. package/packages/core/dist/path-validation-utils.js +238 -0
  100. package/packages/core/dist/path-validation-utils.js.map +1 -0
  101. package/packages/core/dist/persistence-interface.d.ts +91 -0
  102. package/packages/core/dist/persistence-interface.js +9 -0
  103. package/packages/core/dist/persistence-interface.js.map +1 -0
  104. package/{dist/components/beads/beads-plan-manager.d.ts → packages/core/dist/plan-manager.d.ts} +15 -15
  105. package/{dist/components/beads/beads-plan-manager.js → packages/core/dist/plan-manager.js} +66 -50
  106. package/packages/core/dist/plan-manager.js.map +1 -0
  107. package/packages/core/dist/project-docs-manager.d.ts +119 -0
  108. package/packages/core/dist/project-docs-manager.js +366 -0
  109. package/packages/core/dist/project-docs-manager.js.map +1 -0
  110. package/packages/core/dist/state-machine-loader.d.ts +61 -0
  111. package/packages/core/dist/state-machine-loader.js +273 -0
  112. package/packages/core/dist/state-machine-loader.js.map +1 -0
  113. package/packages/core/dist/state-machine-types.d.ts +64 -0
  114. package/packages/core/dist/state-machine-types.js +7 -0
  115. package/packages/core/dist/state-machine-types.js.map +1 -0
  116. package/packages/core/dist/state-machine.d.ts +52 -0
  117. package/packages/core/dist/state-machine.js +256 -0
  118. package/packages/core/dist/state-machine.js.map +1 -0
  119. package/packages/core/dist/system-prompt-generator.d.ts +14 -0
  120. package/packages/core/dist/system-prompt-generator.js +42 -0
  121. package/packages/core/dist/system-prompt-generator.js.map +1 -0
  122. package/packages/core/dist/task-backend.d.ts +45 -0
  123. package/packages/core/dist/task-backend.js +176 -0
  124. package/packages/core/dist/task-backend.js.map +1 -0
  125. package/packages/core/dist/template-manager.d.ts +61 -0
  126. package/packages/core/dist/template-manager.js +231 -0
  127. package/packages/core/dist/template-manager.js.map +1 -0
  128. package/packages/core/dist/transition-engine.d.ts +77 -0
  129. package/packages/core/dist/transition-engine.js +244 -0
  130. package/packages/core/dist/transition-engine.js.map +1 -0
  131. package/packages/core/dist/types.d.ts +54 -0
  132. package/packages/core/dist/types.js +5 -0
  133. package/packages/core/dist/workflow-manager.d.ts +89 -0
  134. package/packages/core/dist/workflow-manager.js +468 -0
  135. package/packages/core/dist/workflow-manager.js.map +1 -0
  136. package/packages/core/package.json +33 -0
  137. package/packages/core/resources/agents/architect.yaml +61 -0
  138. package/packages/core/resources/agents/business-analyst.yaml +60 -0
  139. package/packages/core/resources/agents/developer.yaml +61 -0
  140. package/packages/core/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
  141. package/packages/core/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
  142. package/packages/core/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
  143. package/packages/core/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
  144. package/packages/core/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
  145. package/packages/core/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
  146. package/packages/core/resources/templates/architecture/c4.md +224 -0
  147. package/packages/core/resources/templates/architecture/freestyle.md +53 -0
  148. package/packages/core/resources/templates/architecture/game.md +250 -0
  149. package/packages/core/resources/templates/architecture/none.md +17 -0
  150. package/packages/core/resources/templates/design/comprehensive.md +207 -0
  151. package/packages/core/resources/templates/design/freestyle.md +37 -0
  152. package/packages/core/resources/templates/design/game.md +66 -0
  153. package/packages/core/resources/templates/design/none.md +17 -0
  154. package/packages/core/resources/templates/requirements/ears.md +90 -0
  155. package/packages/core/resources/templates/requirements/freestyle.md +42 -0
  156. package/packages/core/resources/templates/requirements/game.md +162 -0
  157. package/packages/core/resources/templates/requirements/none.md +17 -0
  158. package/packages/core/resources/templates/skills/POWER.md +23 -0
  159. package/packages/core/resources/templates/skills/SKILL.md +19 -0
  160. package/packages/core/resources/workflows/adr.yaml +157 -0
  161. package/packages/core/resources/workflows/big-bang-conversion.yaml +592 -0
  162. package/packages/core/resources/workflows/boundary-testing.yaml +376 -0
  163. package/packages/core/resources/workflows/bugfix.yaml +177 -0
  164. package/packages/core/resources/workflows/business-analysis.yaml +597 -0
  165. package/packages/core/resources/workflows/c4-analysis.yaml +471 -0
  166. package/packages/core/resources/workflows/epcc.yaml +183 -0
  167. package/packages/core/resources/workflows/game-beginner.yaml +434 -0
  168. package/packages/core/resources/workflows/greenfield.yaml +201 -0
  169. package/packages/core/resources/workflows/minor.yaml +138 -0
  170. package/packages/core/resources/workflows/posts.yaml +193 -0
  171. package/packages/core/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
  172. package/packages/core/resources/workflows/sdd-bugfix.yaml +381 -0
  173. package/packages/core/resources/workflows/sdd-feature-crowd.yaml +713 -0
  174. package/packages/core/resources/workflows/sdd-feature.yaml +471 -0
  175. package/packages/core/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
  176. package/packages/core/resources/workflows/sdd-greenfield.yaml +463 -0
  177. package/packages/core/resources/workflows/slides.yaml +237 -0
  178. package/packages/core/resources/workflows/tdd.yaml +160 -0
  179. package/packages/core/resources/workflows/waterfall.yaml +209 -0
  180. package/packages/docs/.vitepress/dist/.gitignore +2 -0
  181. package/packages/docs/.vitepress/dist/404.html +23 -0
  182. package/packages/docs/.vitepress/dist/assets/app.Dz3lZH3M.js +1 -0
  183. package/packages/docs/.vitepress/dist/assets/chunks/framework.DZS7lpav.js +19 -0
  184. package/packages/docs/.vitepress/dist/assets/chunks/theme.q5Ewb3F1.js +206 -0
  185. package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.js +130 -0
  186. package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.lean.js +1 -0
  187. package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.js +72 -0
  188. package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.lean.js +1 -0
  189. package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.js +34 -0
  190. package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.lean.js +1 -0
  191. package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.js +1 -0
  192. package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.lean.js +1 -0
  193. package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.js +2 -0
  194. package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.lean.js +1 -0
  195. package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  196. package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  197. package/packages/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  198. package/packages/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  199. package/packages/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  200. package/packages/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  201. package/packages/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  202. package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  203. package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  204. package/packages/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  205. package/packages/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  206. package/packages/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  207. package/packages/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  208. package/packages/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  209. package/packages/docs/.vitepress/dist/assets/mcp-interaction-pattern.VdvOPuTt.png +0 -0
  210. package/packages/docs/.vitepress/dist/assets/placeholder-demo-greenfield.B8lG_tBI.png +0 -0
  211. package/packages/docs/.vitepress/dist/assets/style.CAgdBzOq.css +1 -0
  212. package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.js +50 -0
  213. package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.lean.js +1 -0
  214. package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.js +24 -0
  215. package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.lean.js +1 -0
  216. package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.js +15 -0
  217. package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.lean.js +1 -0
  218. package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.js +157 -0
  219. package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.lean.js +1 -0
  220. package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.js +143 -0
  221. package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.lean.js +1 -0
  222. package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.js +1 -0
  223. package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.lean.js +1 -0
  224. package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.js +23 -0
  225. package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.lean.js +1 -0
  226. package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.js +43 -0
  227. package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.lean.js +1 -0
  228. package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.js +2 -0
  229. package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.lean.js +1 -0
  230. package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.js +3 -0
  231. package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.lean.js +1 -0
  232. package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.js +7 -0
  233. package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.lean.js +1 -0
  234. package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.js +1 -0
  235. package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.lean.js +1 -0
  236. package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.js +1 -0
  237. package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.lean.js +1 -0
  238. package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.js +1 -0
  239. package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.lean.js +1 -0
  240. package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.js +1 -0
  241. package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.lean.js +1 -0
  242. package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.js +1 -0
  243. package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.lean.js +1 -0
  244. package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.js +1 -0
  245. package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.lean.js +1 -0
  246. package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.js +1 -0
  247. package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.lean.js +1 -0
  248. package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.js +1 -0
  249. package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.lean.js +1 -0
  250. package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.js +1 -0
  251. package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.lean.js +1 -0
  252. package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.js +1 -0
  253. package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.lean.js +1 -0
  254. package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.js +1 -0
  255. package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.lean.js +1 -0
  256. package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.js +1 -0
  257. package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.lean.js +1 -0
  258. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.js +1 -0
  259. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.lean.js +1 -0
  260. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.js +1 -0
  261. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.lean.js +1 -0
  262. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.js +1 -0
  263. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.lean.js +1 -0
  264. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.js +1 -0
  265. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.lean.js +1 -0
  266. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.js +1 -0
  267. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.lean.js +1 -0
  268. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.js +1 -0
  269. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.lean.js +1 -0
  270. package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.js +1 -0
  271. package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.lean.js +1 -0
  272. package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.js +1 -0
  273. package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.lean.js +1 -0
  274. package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.js +1 -0
  275. package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.lean.js +1 -0
  276. package/packages/docs/.vitepress/dist/dev/ARCHITECTURE.html +155 -0
  277. package/packages/docs/.vitepress/dist/dev/DEVELOPMENT.html +97 -0
  278. package/packages/docs/.vitepress/dist/dev/LOGGING.html +59 -0
  279. package/packages/docs/.vitepress/dist/dev/PUBLISHING.html +30 -0
  280. package/packages/docs/.vitepress/dist/hashmap.json +1 -0
  281. package/packages/docs/.vitepress/dist/index.html +27 -0
  282. package/packages/docs/.vitepress/dist/user/advanced-engineering.html +75 -0
  283. package/packages/docs/.vitepress/dist/user/agent-setup.html +49 -0
  284. package/packages/docs/.vitepress/dist/user/beads-integration.html +40 -0
  285. package/packages/docs/.vitepress/dist/user/crowd-mcp-integration.html +182 -0
  286. package/packages/docs/.vitepress/dist/user/custom-workflows.html +168 -0
  287. package/packages/docs/.vitepress/dist/user/git-commit-feature.html +30 -0
  288. package/packages/docs/.vitepress/dist/user/how-it-works.html +48 -0
  289. package/packages/docs/.vitepress/dist/user/long-term-memory.html +68 -0
  290. package/packages/docs/.vitepress/dist/user/packaged-workflows.html +27 -0
  291. package/packages/docs/.vitepress/dist/user/tutorial.html +28 -0
  292. package/packages/docs/.vitepress/dist/user/workflow-selection.html +32 -0
  293. package/packages/docs/.vitepress/dist/vp-icons.css +0 -0
  294. package/packages/docs/.vitepress/dist/workflows/adr.html +26 -0
  295. package/packages/docs/.vitepress/dist/workflows/adr.yaml +157 -0
  296. package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.html +26 -0
  297. package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.yaml +592 -0
  298. package/packages/docs/.vitepress/dist/workflows/boundary-testing.html +26 -0
  299. package/packages/docs/.vitepress/dist/workflows/boundary-testing.yaml +376 -0
  300. package/packages/docs/.vitepress/dist/workflows/bugfix.html +26 -0
  301. package/packages/docs/.vitepress/dist/workflows/bugfix.yaml +177 -0
  302. package/packages/docs/.vitepress/dist/workflows/business-analysis.html +26 -0
  303. package/packages/docs/.vitepress/dist/workflows/business-analysis.yaml +597 -0
  304. package/packages/docs/.vitepress/dist/workflows/c4-analysis.html +26 -0
  305. package/packages/docs/.vitepress/dist/workflows/c4-analysis.yaml +471 -0
  306. package/packages/docs/.vitepress/dist/workflows/epcc.html +26 -0
  307. package/packages/docs/.vitepress/dist/workflows/epcc.yaml +183 -0
  308. package/packages/docs/.vitepress/dist/workflows/game-beginner.html +26 -0
  309. package/packages/docs/.vitepress/dist/workflows/game-beginner.yaml +434 -0
  310. package/packages/docs/.vitepress/dist/workflows/greenfield.html +26 -0
  311. package/packages/docs/.vitepress/dist/workflows/greenfield.yaml +201 -0
  312. package/packages/docs/.vitepress/dist/workflows/minor.html +26 -0
  313. package/packages/docs/.vitepress/dist/workflows/minor.yaml +138 -0
  314. package/packages/docs/.vitepress/dist/workflows/posts.html +26 -0
  315. package/packages/docs/.vitepress/dist/workflows/posts.yaml +193 -0
  316. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.html +26 -0
  317. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.yaml +608 -0
  318. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.html +26 -0
  319. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.yaml +381 -0
  320. package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.html +26 -0
  321. package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.yaml +713 -0
  322. package/packages/docs/.vitepress/dist/workflows/sdd-feature.html +26 -0
  323. package/packages/docs/.vitepress/dist/workflows/sdd-feature.yaml +471 -0
  324. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.html +26 -0
  325. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.yaml +336 -0
  326. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.html +26 -0
  327. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.yaml +463 -0
  328. package/packages/docs/.vitepress/dist/workflows/slides.html +26 -0
  329. package/packages/docs/.vitepress/dist/workflows/slides.yaml +237 -0
  330. package/packages/docs/.vitepress/dist/workflows/tdd.html +26 -0
  331. package/packages/docs/.vitepress/dist/workflows/tdd.yaml +160 -0
  332. package/packages/docs/.vitepress/dist/workflows/waterfall.html +26 -0
  333. package/packages/docs/.vitepress/dist/workflows/waterfall.yaml +209 -0
  334. package/packages/docs/.vitepress/dist/workflows.html +26 -0
  335. package/packages/docs/package.json +32 -0
  336. package/packages/mcp-server/dist/index.js +10546 -0
  337. package/packages/mcp-server/package.json +41 -0
  338. package/packages/mcp-server/resources/agents/architect.yaml +61 -0
  339. package/packages/mcp-server/resources/agents/business-analyst.yaml +60 -0
  340. package/packages/mcp-server/resources/agents/developer.yaml +61 -0
  341. package/packages/mcp-server/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
  342. package/packages/mcp-server/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
  343. package/packages/mcp-server/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
  344. package/packages/mcp-server/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
  345. package/packages/mcp-server/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
  346. package/packages/mcp-server/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
  347. package/packages/mcp-server/resources/templates/architecture/c4.md +224 -0
  348. package/packages/mcp-server/resources/templates/architecture/freestyle.md +53 -0
  349. package/packages/mcp-server/resources/templates/architecture/game.md +250 -0
  350. package/packages/mcp-server/resources/templates/architecture/none.md +17 -0
  351. package/packages/mcp-server/resources/templates/design/comprehensive.md +207 -0
  352. package/packages/mcp-server/resources/templates/design/freestyle.md +37 -0
  353. package/packages/mcp-server/resources/templates/design/game.md +66 -0
  354. package/packages/mcp-server/resources/templates/design/none.md +17 -0
  355. package/packages/mcp-server/resources/templates/requirements/ears.md +90 -0
  356. package/packages/mcp-server/resources/templates/requirements/freestyle.md +42 -0
  357. package/packages/mcp-server/resources/templates/requirements/game.md +162 -0
  358. package/packages/mcp-server/resources/templates/requirements/none.md +17 -0
  359. package/packages/mcp-server/resources/templates/skills/POWER.md +23 -0
  360. package/packages/mcp-server/resources/templates/skills/SKILL.md +19 -0
  361. package/packages/mcp-server/resources/workflows/adr.yaml +157 -0
  362. package/packages/mcp-server/resources/workflows/big-bang-conversion.yaml +592 -0
  363. package/packages/mcp-server/resources/workflows/boundary-testing.yaml +376 -0
  364. package/packages/mcp-server/resources/workflows/bugfix.yaml +177 -0
  365. package/packages/mcp-server/resources/workflows/business-analysis.yaml +597 -0
  366. package/packages/mcp-server/resources/workflows/c4-analysis.yaml +471 -0
  367. package/packages/mcp-server/resources/workflows/epcc.yaml +183 -0
  368. package/packages/mcp-server/resources/workflows/game-beginner.yaml +434 -0
  369. package/packages/mcp-server/resources/workflows/greenfield.yaml +201 -0
  370. package/packages/mcp-server/resources/workflows/minor.yaml +138 -0
  371. package/packages/mcp-server/resources/workflows/posts.yaml +193 -0
  372. package/packages/mcp-server/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
  373. package/packages/mcp-server/resources/workflows/sdd-bugfix.yaml +381 -0
  374. package/packages/mcp-server/resources/workflows/sdd-feature-crowd.yaml +713 -0
  375. package/packages/mcp-server/resources/workflows/sdd-feature.yaml +471 -0
  376. package/packages/mcp-server/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
  377. package/packages/mcp-server/resources/workflows/sdd-greenfield.yaml +463 -0
  378. package/packages/mcp-server/resources/workflows/slides.yaml +237 -0
  379. package/packages/mcp-server/resources/workflows/tdd.yaml +160 -0
  380. package/packages/mcp-server/resources/workflows/waterfall.yaml +209 -0
  381. package/packages/visualizer/dist/WorkflowVisualizer.vue +1147 -0
  382. package/packages/visualizer/dist/index.ts +17 -0
  383. package/packages/visualizer/dist/main.ts +673 -0
  384. package/packages/visualizer/dist/services/BundledWorkflows.ts +35 -0
  385. package/packages/visualizer/dist/services/FileUploadHandler.ts +166 -0
  386. package/packages/visualizer/dist/services/WorkflowLoader.ts +198 -0
  387. package/packages/visualizer/dist/services/YamlParser.ts +248 -0
  388. package/packages/visualizer/dist/services/workflow-list.ts +23 -0
  389. package/packages/visualizer/dist/types/ui-types.ts +84 -0
  390. package/packages/visualizer/dist/types/visualization-types.ts +95 -0
  391. package/packages/visualizer/dist/types/vite-env.d.ts +12 -0
  392. package/packages/visualizer/dist/utils/DomHelpers.ts +206 -0
  393. package/packages/visualizer/dist/utils/ErrorHandler.ts +170 -0
  394. package/packages/visualizer/dist/utils/PlantUMLEncoder.ts +121 -0
  395. package/packages/visualizer/dist/visualization/DiagramRenderer.ts +430 -0
  396. package/packages/visualizer/dist/visualization/LayoutEngine.ts +339 -0
  397. package/packages/visualizer/dist/visualization/PlantUMLRenderer.ts +507 -0
  398. package/packages/visualizer/dist/visualization/StateRenderer.ts +339 -0
  399. package/packages/visualizer/dist/visualization/TransitionRenderer.ts +432 -0
  400. package/packages/visualizer/package.json +39 -0
  401. package/resources/.DS_Store +0 -0
  402. package/resources/agents/architect.yaml +61 -0
  403. package/resources/agents/business-analyst.yaml +60 -0
  404. package/resources/agents/developer.yaml +61 -0
  405. package/resources/state-machine-schema.json +114 -0
  406. package/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
  407. package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
  408. package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
  409. package/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
  410. package/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
  411. package/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
  412. package/resources/templates/architecture/c4.md +224 -0
  413. package/resources/templates/architecture/freestyle.md +53 -0
  414. package/resources/templates/architecture/game.md +250 -0
  415. package/resources/templates/architecture/none.md +17 -0
  416. package/resources/templates/design/comprehensive.md +207 -0
  417. package/resources/templates/design/freestyle.md +37 -0
  418. package/resources/templates/design/game.md +66 -0
  419. package/resources/templates/design/none.md +17 -0
  420. package/resources/templates/requirements/ears.md +90 -0
  421. package/resources/templates/requirements/freestyle.md +42 -0
  422. package/resources/templates/requirements/game.md +162 -0
  423. package/resources/templates/requirements/none.md +17 -0
  424. package/resources/templates/skills/POWER.md +23 -0
  425. package/resources/templates/skills/SKILL.md +19 -0
  426. package/resources/workflows/adr.yaml +157 -0
  427. package/resources/workflows/big-bang-conversion.yaml +592 -0
  428. package/resources/workflows/boundary-testing.yaml +376 -0
  429. package/resources/workflows/bugfix.yaml +177 -0
  430. package/resources/workflows/business-analysis.yaml +597 -0
  431. package/resources/workflows/c4-analysis.yaml +471 -0
  432. package/resources/workflows/epcc.yaml +183 -0
  433. package/resources/workflows/game-beginner.yaml +434 -0
  434. package/resources/workflows/greenfield.yaml +201 -0
  435. package/resources/workflows/minor.yaml +138 -0
  436. package/resources/workflows/posts.yaml +193 -0
  437. package/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
  438. package/resources/workflows/sdd-bugfix.yaml +381 -0
  439. package/resources/workflows/sdd-feature-crowd.yaml +713 -0
  440. package/resources/workflows/sdd-feature.yaml +471 -0
  441. package/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
  442. package/resources/workflows/sdd-greenfield.yaml +463 -0
  443. package/resources/workflows/slides.yaml +237 -0
  444. package/resources/workflows/tdd.yaml +160 -0
  445. package/resources/workflows/waterfall.yaml +209 -0
  446. package/dist/components/beads/beads-instruction-generator.d.ts +0 -44
  447. package/dist/components/beads/beads-instruction-generator.d.ts.map +0 -1
  448. package/dist/components/beads/beads-instruction-generator.js +0 -160
  449. package/dist/components/beads/beads-instruction-generator.js.map +0 -1
  450. package/dist/components/beads/beads-plan-manager.d.ts.map +0 -1
  451. package/dist/components/beads/beads-plan-manager.js.map +0 -1
  452. package/dist/components/beads/beads-task-backend-client.d.ts +0 -43
  453. package/dist/components/beads/beads-task-backend-client.d.ts.map +0 -1
  454. package/dist/components/beads/beads-task-backend-client.js +0 -175
  455. package/dist/components/beads/beads-task-backend-client.js.map +0 -1
  456. package/dist/index.d.ts +0 -9
  457. package/dist/index.d.ts.map +0 -1
  458. package/dist/index.js +0 -74
  459. package/dist/index.js.map +0 -1
  460. package/dist/notification-service.d.ts +0 -14
  461. package/dist/notification-service.d.ts.map +0 -1
  462. package/dist/notification-service.js +0 -18
  463. package/dist/notification-service.js.map +0 -1
  464. package/dist/plugin-system/beads-plugin.d.ts +0 -71
  465. package/dist/plugin-system/beads-plugin.d.ts.map +0 -1
  466. package/dist/plugin-system/beads-plugin.js +0 -465
  467. package/dist/plugin-system/beads-plugin.js.map +0 -1
  468. package/dist/plugin-system/commit-plugin.d.ts +0 -40
  469. package/dist/plugin-system/commit-plugin.d.ts.map +0 -1
  470. package/dist/plugin-system/commit-plugin.js +0 -204
  471. package/dist/plugin-system/commit-plugin.js.map +0 -1
  472. package/dist/plugin-system/index.d.ts +0 -9
  473. package/dist/plugin-system/index.d.ts.map +0 -1
  474. package/dist/plugin-system/index.js +0 -9
  475. package/dist/plugin-system/index.js.map +0 -1
  476. package/dist/plugin-system/plugin-interfaces.d.ts +0 -98
  477. package/dist/plugin-system/plugin-interfaces.d.ts.map +0 -1
  478. package/dist/plugin-system/plugin-interfaces.js +0 -9
  479. package/dist/plugin-system/plugin-interfaces.js.map +0 -1
  480. package/dist/plugin-system/plugin-registry.d.ts +0 -44
  481. package/dist/plugin-system/plugin-registry.d.ts.map +0 -1
  482. package/dist/plugin-system/plugin-registry.js +0 -132
  483. package/dist/plugin-system/plugin-registry.js.map +0 -1
  484. package/dist/resource-handlers/conversation-state.d.ts +0 -15
  485. package/dist/resource-handlers/conversation-state.d.ts.map +0 -1
  486. package/dist/resource-handlers/conversation-state.js +0 -40
  487. package/dist/resource-handlers/conversation-state.js.map +0 -1
  488. package/dist/resource-handlers/development-plan.d.ts +0 -14
  489. package/dist/resource-handlers/development-plan.d.ts.map +0 -1
  490. package/dist/resource-handlers/development-plan.js +0 -31
  491. package/dist/resource-handlers/development-plan.js.map +0 -1
  492. package/dist/resource-handlers/index.d.ts +0 -24
  493. package/dist/resource-handlers/index.d.ts.map +0 -1
  494. package/dist/resource-handlers/index.js +0 -62
  495. package/dist/resource-handlers/index.js.map +0 -1
  496. package/dist/resource-handlers/system-prompt.d.ts +0 -15
  497. package/dist/resource-handlers/system-prompt.d.ts.map +0 -1
  498. package/dist/resource-handlers/system-prompt.js +0 -40
  499. package/dist/resource-handlers/system-prompt.js.map +0 -1
  500. package/dist/resource-handlers/workflow-resource.d.ts +0 -15
  501. package/dist/resource-handlers/workflow-resource.d.ts.map +0 -1
  502. package/dist/resource-handlers/workflow-resource.js +0 -85
  503. package/dist/resource-handlers/workflow-resource.js.map +0 -1
  504. package/dist/response-renderer.d.ts +0 -30
  505. package/dist/response-renderer.d.ts.map +0 -1
  506. package/dist/response-renderer.js +0 -94
  507. package/dist/response-renderer.js.map +0 -1
  508. package/dist/server-config.d.ts +0 -34
  509. package/dist/server-config.d.ts.map +0 -1
  510. package/dist/server-config.js +0 -503
  511. package/dist/server-config.js.map +0 -1
  512. package/dist/server-helpers.d.ts +0 -70
  513. package/dist/server-helpers.d.ts.map +0 -1
  514. package/dist/server-helpers.js +0 -171
  515. package/dist/server-helpers.js.map +0 -1
  516. package/dist/server-implementation.d.ts +0 -74
  517. package/dist/server-implementation.d.ts.map +0 -1
  518. package/dist/server-implementation.js +0 -201
  519. package/dist/server-implementation.js.map +0 -1
  520. package/dist/server.d.ts +0 -6
  521. package/dist/server.d.ts.map +0 -1
  522. package/dist/server.js +0 -5
  523. package/dist/server.js.map +0 -1
  524. package/dist/tool-handlers/base-tool-handler.d.ts +0 -50
  525. package/dist/tool-handlers/base-tool-handler.d.ts.map +0 -1
  526. package/dist/tool-handlers/base-tool-handler.js +0 -81
  527. package/dist/tool-handlers/base-tool-handler.js.map +0 -1
  528. package/dist/tool-handlers/conduct-review.d.ts +0 -49
  529. package/dist/tool-handlers/conduct-review.d.ts.map +0 -1
  530. package/dist/tool-handlers/conduct-review.js +0 -104
  531. package/dist/tool-handlers/conduct-review.js.map +0 -1
  532. package/dist/tool-handlers/get-tool-info.d.ts +0 -75
  533. package/dist/tool-handlers/get-tool-info.d.ts.map +0 -1
  534. package/dist/tool-handlers/get-tool-info.js +0 -168
  535. package/dist/tool-handlers/get-tool-info.js.map +0 -1
  536. package/dist/tool-handlers/index.d.ts +0 -41
  537. package/dist/tool-handlers/index.d.ts.map +0 -1
  538. package/dist/tool-handlers/index.js +0 -71
  539. package/dist/tool-handlers/index.js.map +0 -1
  540. package/dist/tool-handlers/list-workflows.d.ts +0 -35
  541. package/dist/tool-handlers/list-workflows.d.ts.map +0 -1
  542. package/dist/tool-handlers/list-workflows.js +0 -43
  543. package/dist/tool-handlers/list-workflows.js.map +0 -1
  544. package/dist/tool-handlers/no-idea.d.ts +0 -41
  545. package/dist/tool-handlers/no-idea.d.ts.map +0 -1
  546. package/dist/tool-handlers/no-idea.js +0 -29
  547. package/dist/tool-handlers/no-idea.js.map +0 -1
  548. package/dist/tool-handlers/proceed-to-phase.d.ts +0 -41
  549. package/dist/tool-handlers/proceed-to-phase.d.ts.map +0 -1
  550. package/dist/tool-handlers/proceed-to-phase.js +0 -165
  551. package/dist/tool-handlers/proceed-to-phase.js.map +0 -1
  552. package/dist/tool-handlers/reset-development.d.ts +0 -31
  553. package/dist/tool-handlers/reset-development.d.ts.map +0 -1
  554. package/dist/tool-handlers/reset-development.js +0 -48
  555. package/dist/tool-handlers/reset-development.js.map +0 -1
  556. package/dist/tool-handlers/resume-workflow.d.ts +0 -87
  557. package/dist/tool-handlers/resume-workflow.d.ts.map +0 -1
  558. package/dist/tool-handlers/resume-workflow.js +0 -212
  559. package/dist/tool-handlers/resume-workflow.js.map +0 -1
  560. package/dist/tool-handlers/setup-project-docs.d.ts +0 -37
  561. package/dist/tool-handlers/setup-project-docs.d.ts.map +0 -1
  562. package/dist/tool-handlers/setup-project-docs.js +0 -138
  563. package/dist/tool-handlers/setup-project-docs.js.map +0 -1
  564. package/dist/tool-handlers/start-development.d.ts +0 -79
  565. package/dist/tool-handlers/start-development.d.ts.map +0 -1
  566. package/dist/tool-handlers/start-development.js +0 -484
  567. package/dist/tool-handlers/start-development.js.map +0 -1
  568. package/dist/tool-handlers/whats-next.d.ts +0 -41
  569. package/dist/tool-handlers/whats-next.d.ts.map +0 -1
  570. package/dist/tool-handlers/whats-next.js +0 -123
  571. package/dist/tool-handlers/whats-next.js.map +0 -1
  572. package/dist/types.d.ts +0 -119
  573. package/dist/types.d.ts.map +0 -1
  574. package/dist/types.js +0 -5
  575. package/dist/version-info.d.ts +0 -30
  576. package/dist/version-info.d.ts.map +0 -1
  577. package/dist/version-info.js +0 -178
  578. package/dist/version-info.js.map +0 -1
  579. package/skill/SKILL.md +0 -28
  580. /package/{dist → packages/core/dist}/types.js.map +0 -0
@@ -0,0 +1,221 @@
1
+ /**
2
+ * File Detection Manager
3
+ *
4
+ * Handles pattern-based file discovery and suggestions for existing documentation files.
5
+ * Supports auto-detection of common documentation patterns in projects.
6
+ */
7
+ import { readdir, access } from 'node:fs/promises';
8
+ import { join, basename } from 'node:path';
9
+ import { createLogger } from './logger.js';
10
+ import { PathValidationUtils } from './path-validation-utils.js';
11
+ const logger = createLogger('FileDetectionManager');
12
+ export class FileDetectionManager {
13
+ projectPath;
14
+ constructor(projectPath) {
15
+ this.projectPath = projectPath;
16
+ }
17
+ /**
18
+ * Detect existing documentation files in the project
19
+ */
20
+ async detectDocumentationFiles() {
21
+ logger.debug('Starting documentation file detection', {
22
+ projectPath: this.projectPath,
23
+ });
24
+ const searchLocations = this.getSearchLocations();
25
+ const patterns = PathValidationUtils.getCommonDocumentationPatterns();
26
+ const result = {
27
+ architecture: [],
28
+ requirements: [],
29
+ design: [],
30
+ };
31
+ // Search in each location
32
+ for (const location of searchLocations) {
33
+ try {
34
+ await access(location);
35
+ const files = await this.scanLocation(location);
36
+ // Match files against patterns
37
+ for (const file of files) {
38
+ const matches = this.matchFileToPatterns(file, patterns);
39
+ for (const match of matches) {
40
+ result[match.type].push({
41
+ path: file.path,
42
+ relativePath: file.relativePath,
43
+ type: match.type,
44
+ confidence: match.confidence,
45
+ });
46
+ }
47
+ }
48
+ }
49
+ catch (error) {
50
+ logger.debug('Search location not accessible', {
51
+ location,
52
+ error: error instanceof Error ? error.message : 'Unknown error',
53
+ });
54
+ }
55
+ }
56
+ // Sort by confidence and remove duplicates
57
+ result.architecture = this.sortAndDeduplicate(result.architecture);
58
+ result.requirements = this.sortAndDeduplicate(result.requirements);
59
+ result.design = this.sortAndDeduplicate(result.design);
60
+ logger.info('Documentation file detection completed', {
61
+ found: {
62
+ architecture: result.architecture.length,
63
+ requirements: result.requirements.length,
64
+ design: result.design.length,
65
+ },
66
+ });
67
+ return result;
68
+ }
69
+ /**
70
+ * Get search locations for documentation files
71
+ */
72
+ getSearchLocations() {
73
+ return [
74
+ this.projectPath, // Project root
75
+ join(this.projectPath, 'docs'), // docs/ folder
76
+ join(this.projectPath, 'doc'), // doc/ folder
77
+ join(this.projectPath, '.vibe', 'docs'), // .vibe/docs/ folder
78
+ join(this.projectPath, 'documentation'), // documentation/ folder
79
+ ];
80
+ }
81
+ /**
82
+ * Scan a location for files
83
+ */
84
+ async scanLocation(location) {
85
+ try {
86
+ const entries = await readdir(location, { withFileTypes: true });
87
+ const files = [];
88
+ for (const entry of entries) {
89
+ if (entry.isFile()) {
90
+ const fullPath = join(location, entry.name);
91
+ const relativePath = fullPath.replace(this.projectPath + '/', '');
92
+ files.push({
93
+ path: fullPath,
94
+ relativePath,
95
+ });
96
+ }
97
+ }
98
+ return files;
99
+ }
100
+ catch (error) {
101
+ logger.debug('Failed to scan location', {
102
+ location,
103
+ error: error instanceof Error ? error.message : 'Unknown error',
104
+ });
105
+ return [];
106
+ }
107
+ }
108
+ /**
109
+ * Match a file against documentation patterns
110
+ */
111
+ matchFileToPatterns(file, patterns) {
112
+ const fileName = basename(file.path).toLowerCase();
113
+ const relativePath = file.relativePath.toLowerCase();
114
+ const matches = [];
115
+ // Check architecture patterns
116
+ if (this.matchesPatterns(fileName, relativePath, patterns.architecture)) {
117
+ const confidence = this.getConfidence(fileName, 'architecture');
118
+ matches.push({ type: 'architecture', confidence });
119
+ }
120
+ // Check requirements patterns
121
+ if (this.matchesPatterns(fileName, relativePath, patterns.requirements)) {
122
+ const confidence = this.getConfidence(fileName, 'requirements');
123
+ matches.push({ type: 'requirements', confidence });
124
+ }
125
+ // Check design patterns
126
+ if (this.matchesPatterns(fileName, relativePath, patterns.design)) {
127
+ const confidence = this.getConfidence(fileName, 'design');
128
+ matches.push({ type: 'design', confidence });
129
+ }
130
+ return matches;
131
+ }
132
+ /**
133
+ * Check if file matches any of the patterns
134
+ */
135
+ matchesPatterns(fileName, relativePath, patterns) {
136
+ return patterns.some(pattern => {
137
+ const normalizedPattern = pattern.toLowerCase();
138
+ // Exact filename match
139
+ if (fileName === normalizedPattern) {
140
+ return true;
141
+ }
142
+ // Relative path match
143
+ if (relativePath === normalizedPattern) {
144
+ return true;
145
+ }
146
+ // Pattern matching with wildcards
147
+ if (normalizedPattern.includes('*')) {
148
+ const regex = new RegExp(normalizedPattern.replace(/\*/g, '.*'));
149
+ return regex.test(fileName) || regex.test(relativePath);
150
+ }
151
+ return false;
152
+ });
153
+ }
154
+ /**
155
+ * Determine confidence level for a match
156
+ */
157
+ getConfidence(fileName, type) {
158
+ // High confidence for exact type matches
159
+ if (fileName.includes(type.toLowerCase())) {
160
+ return 'high';
161
+ }
162
+ // Medium confidence for README files (could contain any type)
163
+ if (fileName.includes('readme')) {
164
+ return 'medium';
165
+ }
166
+ // Low confidence for other matches
167
+ return 'low';
168
+ }
169
+ /**
170
+ * Sort by confidence and remove duplicates
171
+ */
172
+ sortAndDeduplicate(files) {
173
+ // Remove duplicates by path
174
+ const unique = files.filter((file, index, array) => array.findIndex(f => f.path === file.path) === index);
175
+ // Sort by confidence (high first) and then by path length (shorter first)
176
+ return unique.sort((a, b) => {
177
+ const confidenceOrder = { high: 0, medium: 1, low: 2 };
178
+ const confidenceDiff = confidenceOrder[a.confidence] - confidenceOrder[b.confidence];
179
+ if (confidenceDiff !== 0) {
180
+ return confidenceDiff;
181
+ }
182
+ return a.relativePath.length - b.relativePath.length;
183
+ });
184
+ }
185
+ /**
186
+ * Format file suggestions for LLM responses
187
+ */
188
+ formatSuggestions(detectionResult) {
189
+ const suggestions = [];
190
+ if (detectionResult.architecture.length > 0) {
191
+ suggestions.push(`**Architecture files found:**`);
192
+ for (const file of detectionResult.architecture.slice(0, 3)) {
193
+ suggestions.push(` - ${file.relativePath} (${file.confidence} confidence)`);
194
+ }
195
+ }
196
+ if (detectionResult.requirements.length > 0) {
197
+ suggestions.push(`**Requirements files found:**`);
198
+ for (const file of detectionResult.requirements.slice(0, 3)) {
199
+ suggestions.push(` - ${file.relativePath} (${file.confidence} confidence)`);
200
+ }
201
+ }
202
+ if (detectionResult.design.length > 0) {
203
+ suggestions.push(`**Design files found:**`);
204
+ for (const file of detectionResult.design.slice(0, 3)) {
205
+ suggestions.push(` - ${file.relativePath} (${file.confidence} confidence)`);
206
+ }
207
+ }
208
+ if (suggestions.length === 0) {
209
+ return 'No existing documentation files detected.';
210
+ }
211
+ return [
212
+ 'Existing documentation files detected:',
213
+ '',
214
+ ...suggestions,
215
+ '',
216
+ 'You can use these files with `setup_project_docs` by providing the file paths instead of template names.',
217
+ 'Example: `setup_project_docs({ architecture: "README.md", requirements: "docs/requirements.md", design: "freestyle" })`',
218
+ ].join('\n');
219
+ }
220
+ }
221
+ //# sourceMappingURL=file-detection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-detection-manager.js","sourceRoot":"","sources":["../src/file-detection-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,MAAM,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAepD,MAAM,OAAO,oBAAoB;IACvB,WAAW,CAAS;IAE5B,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB;QAC5B,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;YACpD,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,8BAA8B,EAAE,CAAC;QAEtE,MAAM,MAAM,GAAwB;YAClC,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,0BAA0B;QAC1B,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEhD,+BAA+B;gBAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAEzD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;4BACtB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,UAAU,EAAE,KAAK,CAAC,UAAU;yBAC7B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBAC7C,QAAQ;oBACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;YACpD,KAAK,EAAE;gBACL,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;gBACxC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;gBACxC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;aAC7B;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,OAAO;YACL,IAAI,CAAC,WAAW,EAAE,eAAe;YACjC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,eAAe;YAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,cAAc;YAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,qBAAqB;YAC9D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,wBAAwB;SAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,QAAgB;QAEhB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,KAAK,GAAkD,EAAE,CAAC;YAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;oBAElE,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,QAAQ;wBACd,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBACtC,QAAQ;gBACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,IAA4C,EAC5C,QAEC;QAKD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,GAGR,EAAE,CAAC;QAER,8BAA8B;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,QAAgB,EAChB,YAAoB,EACpB,QAAkB;QAElB,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC7B,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAEhD,uBAAuB;YACvB,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,sBAAsB;YACtB,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBACjE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,QAAgB,EAChB,IAAY;QAEZ,yCAAyC;QACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,8DAA8D;QAC9D,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,mCAAmC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAqB;QAC9C,4BAA4B;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CACzB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CACrB,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CACvD,CAAC;QAEF,0EAA0E;QAC1E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACvD,MAAM,cAAc,GAClB,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAEhE,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,eAAoC;QACpD,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,eAAe,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5D,WAAW,CAAC,IAAI,CACd,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,cAAc,CAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,eAAe,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5D,WAAW,CAAC,IAAI,CACd,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,cAAc,CAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,WAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtD,WAAW,CAAC,IAAI,CACd,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,cAAc,CAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,2CAA2C,CAAC;QACrD,CAAC;QAED,OAAO;YACL,wCAAwC;YACxC,EAAE;YACF,GAAG,WAAW;YACd,EAAE;YACF,0GAA0G;YAC1G,yHAAyH;SAC1H,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * File-Based Storage Implementation
3
+ *
4
+ * Implements the IPersistence interface using a file-based approach with
5
+ * directory-per-conversation structure. Provides transparent, human-readable
6
+ * persistence.
7
+ *
8
+ * Directory Structure:
9
+ * .vibe/conversations/{conversationId}/
10
+ * state.json - ConversationState data
11
+ * interactions.jsonl - Append-only interaction logs (one JSON per line)
12
+ */
13
+ import type { IPersistence } from './persistence-interface.js';
14
+ import type { ConversationState, InteractionLog } from './types.js';
15
+ /**
16
+ * File-based persistence implementation
17
+ */
18
+ export declare class FileStorage implements IPersistence {
19
+ private conversationsDir;
20
+ private basePath;
21
+ /**
22
+ * @param basePath - Path to the storage location (e.g., .vibe/conversations)
23
+ */
24
+ constructor(basePath: string);
25
+ /**
26
+ * Initialize file-based storage
27
+ * Creates the conversations directory if it doesn't exist
28
+ */
29
+ initialize(): Promise<void>;
30
+ /**
31
+ * Get the directory path for a conversation
32
+ */
33
+ private getConversationDir;
34
+ /**
35
+ * Get the state file path for a conversation
36
+ */
37
+ private getStateFilePath;
38
+ /**
39
+ * Get the interactions file path for a conversation
40
+ */
41
+ private getInteractionsFilePath;
42
+ /**
43
+ * Write data atomically using temp file + rename
44
+ * Uses unique temp file names to prevent concurrent write collisions
45
+ */
46
+ private writeAtomic;
47
+ /**
48
+ * Save or update a conversation state
49
+ */
50
+ saveConversationState(state: ConversationState): Promise<void>;
51
+ /**
52
+ * Get a conversation state by ID
53
+ * Returns null if not found or corrupted
54
+ */
55
+ getConversationState(conversationId: string): Promise<ConversationState | null>;
56
+ /**
57
+ * Get all conversation states
58
+ * Skips corrupted state files
59
+ */
60
+ getAllConversationStates(): Promise<ConversationState[]>;
61
+ /**
62
+ * Delete a conversation state
63
+ * Returns true if deleted, false if not found
64
+ */
65
+ deleteConversationState(conversationId: string): Promise<boolean>;
66
+ /**
67
+ * Log an interaction
68
+ * Appends to interactions.jsonl file
69
+ */
70
+ logInteraction(log: InteractionLog): Promise<void>;
71
+ /**
72
+ * Get interaction logs for a conversation
73
+ * Skips corrupted JSONL lines, returns empty array if file doesn't exist
74
+ */
75
+ getInteractionLogs(conversationId: string): Promise<InteractionLog[]>;
76
+ /**
77
+ * Get interaction logs by conversation ID (alias for compatibility)
78
+ */
79
+ getInteractionsByConversationId(conversationId: string): Promise<InteractionLog[]>;
80
+ /**
81
+ * Soft delete interaction logs
82
+ * Actually performs hard delete (removes interactions.jsonl file)
83
+ */
84
+ softDeleteInteractionLogs(conversationId: string): Promise<void>;
85
+ /**
86
+ * Reset conversation state (update timestamp)
87
+ */
88
+ resetConversationState(conversationId: string): Promise<void>;
89
+ /**
90
+ * Close file storage (no-op for file-based storage)
91
+ */
92
+ close(): Promise<void>;
93
+ }
@@ -0,0 +1,301 @@
1
+ /**
2
+ * File-Based Storage Implementation
3
+ *
4
+ * Implements the IPersistence interface using a file-based approach with
5
+ * directory-per-conversation structure. Provides transparent, human-readable
6
+ * persistence.
7
+ *
8
+ * Directory Structure:
9
+ * .vibe/conversations/{conversationId}/
10
+ * state.json - ConversationState data
11
+ * interactions.jsonl - Append-only interaction logs (one JSON per line)
12
+ */
13
+ import { promises as fs } from 'node:fs';
14
+ import { join, dirname } from 'node:path';
15
+ import { createLogger } from './logger.js';
16
+ const logger = createLogger('FileStorage');
17
+ /**
18
+ * File-based persistence implementation
19
+ */
20
+ export class FileStorage {
21
+ conversationsDir;
22
+ basePath;
23
+ /**
24
+ * @param basePath - Path to the storage location (e.g., .vibe/conversations)
25
+ */
26
+ constructor(basePath) {
27
+ this.basePath = basePath;
28
+ this.conversationsDir = join(dirname(basePath), 'conversations');
29
+ }
30
+ /**
31
+ * Initialize file-based storage
32
+ * Creates the conversations directory if it doesn't exist
33
+ */
34
+ async initialize() {
35
+ try {
36
+ // Create conversations directory
37
+ await fs.mkdir(this.conversationsDir, { recursive: true });
38
+ logger.debug('FileStorage initialized', {
39
+ conversationsDir: this.conversationsDir,
40
+ });
41
+ }
42
+ catch (error) {
43
+ logger.error('Failed to initialize FileStorage', error);
44
+ throw error;
45
+ }
46
+ }
47
+ /**
48
+ * Get the directory path for a conversation
49
+ */
50
+ getConversationDir(conversationId) {
51
+ return join(this.conversationsDir, conversationId);
52
+ }
53
+ /**
54
+ * Get the state file path for a conversation
55
+ */
56
+ getStateFilePath(conversationId) {
57
+ return join(this.getConversationDir(conversationId), 'state.json');
58
+ }
59
+ /**
60
+ * Get the interactions file path for a conversation
61
+ */
62
+ getInteractionsFilePath(conversationId) {
63
+ return join(this.getConversationDir(conversationId), 'interactions.jsonl');
64
+ }
65
+ /**
66
+ * Write data atomically using temp file + rename
67
+ * Uses unique temp file names to prevent concurrent write collisions
68
+ */
69
+ async writeAtomic(filePath, data) {
70
+ // Use timestamp + random suffix to ensure unique temp file names for concurrent operations
71
+ const uniqueSuffix = `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
72
+ const tempPath = `${filePath}.tmp.${uniqueSuffix}`;
73
+ try {
74
+ await fs.writeFile(tempPath, data, 'utf-8');
75
+ await fs.rename(tempPath, filePath);
76
+ }
77
+ catch (error) {
78
+ // Clean up temp file if it exists
79
+ try {
80
+ await fs.unlink(tempPath);
81
+ }
82
+ catch {
83
+ // Ignore cleanup errors
84
+ }
85
+ throw error;
86
+ }
87
+ }
88
+ /**
89
+ * Save or update a conversation state
90
+ */
91
+ async saveConversationState(state) {
92
+ const conversationDir = this.getConversationDir(state.conversationId);
93
+ const stateFilePath = this.getStateFilePath(state.conversationId);
94
+ try {
95
+ // Ensure conversation directory exists
96
+ await fs.mkdir(conversationDir, { recursive: true });
97
+ // Write state atomically
98
+ const stateJson = JSON.stringify(state, null, 2);
99
+ await this.writeAtomic(stateFilePath, stateJson);
100
+ logger.debug('Conversation state saved', {
101
+ conversationId: state.conversationId,
102
+ currentPhase: state.currentPhase,
103
+ });
104
+ }
105
+ catch (error) {
106
+ logger.error('Failed to save conversation state', error, {
107
+ conversationId: state.conversationId,
108
+ });
109
+ throw error;
110
+ }
111
+ }
112
+ /**
113
+ * Get a conversation state by ID
114
+ * Returns null if not found or corrupted
115
+ */
116
+ async getConversationState(conversationId) {
117
+ const stateFilePath = this.getStateFilePath(conversationId);
118
+ try {
119
+ const stateJson = await fs.readFile(stateFilePath, 'utf-8');
120
+ const state = JSON.parse(stateJson);
121
+ return state;
122
+ }
123
+ catch (error) {
124
+ if (error.code === 'ENOENT') {
125
+ // File doesn't exist - return null (expected for non-existent conversations)
126
+ return null;
127
+ }
128
+ // JSON parse error or other error - log warning and return null
129
+ logger.warn('Failed to read conversation state, returning null', {
130
+ conversationId,
131
+ error: error.message,
132
+ });
133
+ return null;
134
+ }
135
+ }
136
+ /**
137
+ * Get all conversation states
138
+ * Skips corrupted state files
139
+ */
140
+ async getAllConversationStates() {
141
+ try {
142
+ const entries = await fs.readdir(this.conversationsDir, {
143
+ withFileTypes: true,
144
+ });
145
+ const states = [];
146
+ for (const entry of entries) {
147
+ if (entry.isDirectory()) {
148
+ const conversationId = entry.name;
149
+ const state = await this.getConversationState(conversationId);
150
+ if (state) {
151
+ states.push(state);
152
+ }
153
+ // Corrupted states are already logged and skipped by getConversationState
154
+ }
155
+ }
156
+ // Sort by updatedAt DESC (most recent first)
157
+ states.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
158
+ return states;
159
+ }
160
+ catch (error) {
161
+ if (error.code === 'ENOENT') {
162
+ // Conversations directory doesn't exist yet - return empty array
163
+ return [];
164
+ }
165
+ logger.error('Failed to get all conversation states', error);
166
+ throw error;
167
+ }
168
+ }
169
+ /**
170
+ * Delete a conversation state
171
+ * Returns true if deleted, false if not found
172
+ */
173
+ async deleteConversationState(conversationId) {
174
+ const conversationDir = this.getConversationDir(conversationId);
175
+ try {
176
+ await fs.rm(conversationDir, { recursive: true, force: true });
177
+ logger.debug('Conversation state deleted', { conversationId });
178
+ return true;
179
+ }
180
+ catch (error) {
181
+ if (error.code === 'ENOENT') {
182
+ // Directory doesn't exist - return false
183
+ return false;
184
+ }
185
+ logger.error('Failed to delete conversation state', error, {
186
+ conversationId,
187
+ });
188
+ throw error;
189
+ }
190
+ }
191
+ /**
192
+ * Log an interaction
193
+ * Appends to interactions.jsonl file
194
+ */
195
+ async logInteraction(log) {
196
+ const interactionsFilePath = this.getInteractionsFilePath(log.conversationId);
197
+ const conversationDir = this.getConversationDir(log.conversationId);
198
+ try {
199
+ // Ensure conversation directory exists
200
+ await fs.mkdir(conversationDir, { recursive: true });
201
+ // Append to JSONL file (one JSON per line)
202
+ const logLine = JSON.stringify(log) + '\n';
203
+ await fs.appendFile(interactionsFilePath, logLine, 'utf-8');
204
+ logger.debug('Interaction logged', {
205
+ conversationId: log.conversationId,
206
+ toolName: log.toolName,
207
+ });
208
+ }
209
+ catch (error) {
210
+ logger.error('Failed to log interaction', error, {
211
+ conversationId: log.conversationId,
212
+ toolName: log.toolName,
213
+ });
214
+ throw error;
215
+ }
216
+ }
217
+ /**
218
+ * Get interaction logs for a conversation
219
+ * Skips corrupted JSONL lines, returns empty array if file doesn't exist
220
+ */
221
+ async getInteractionLogs(conversationId) {
222
+ const interactionsFilePath = this.getInteractionsFilePath(conversationId);
223
+ try {
224
+ const content = await fs.readFile(interactionsFilePath, 'utf-8');
225
+ const lines = content.split('\n').filter(line => line.trim());
226
+ const logs = [];
227
+ for (const line of lines) {
228
+ try {
229
+ const log = JSON.parse(line);
230
+ logs.push(log);
231
+ }
232
+ catch {
233
+ // Skip corrupted line, log warning
234
+ logger.warn('Skipping corrupted interaction log line', {
235
+ conversationId,
236
+ });
237
+ }
238
+ }
239
+ return logs;
240
+ }
241
+ catch (error) {
242
+ if (error.code === 'ENOENT') {
243
+ // File doesn't exist - return empty array
244
+ return [];
245
+ }
246
+ logger.error('Failed to get interaction logs', error, {
247
+ conversationId,
248
+ });
249
+ throw error;
250
+ }
251
+ }
252
+ /**
253
+ * Get interaction logs by conversation ID (alias for compatibility)
254
+ */
255
+ async getInteractionsByConversationId(conversationId) {
256
+ return this.getInteractionLogs(conversationId);
257
+ }
258
+ /**
259
+ * Soft delete interaction logs
260
+ * Actually performs hard delete (removes interactions.jsonl file)
261
+ */
262
+ async softDeleteInteractionLogs(conversationId) {
263
+ const interactionsFilePath = this.getInteractionsFilePath(conversationId);
264
+ try {
265
+ await fs.unlink(interactionsFilePath);
266
+ logger.debug('Interaction logs deleted', { conversationId });
267
+ }
268
+ catch (error) {
269
+ if (error.code === 'ENOENT') {
270
+ // File doesn't exist - nothing to delete
271
+ return;
272
+ }
273
+ logger.warn('Failed to delete interaction logs', {
274
+ conversationId,
275
+ error: error.message,
276
+ });
277
+ }
278
+ }
279
+ /**
280
+ * Reset conversation state (update timestamp)
281
+ */
282
+ async resetConversationState(conversationId) {
283
+ const state = await this.getConversationState(conversationId);
284
+ if (!state) {
285
+ throw new Error(`Conversation state not found for ID: ${conversationId}`);
286
+ }
287
+ const updatedState = {
288
+ ...state,
289
+ updatedAt: new Date().toISOString(),
290
+ };
291
+ await this.saveConversationState(updatedState);
292
+ logger.debug('Conversation state reset', { conversationId });
293
+ }
294
+ /**
295
+ * Close file storage (no-op for file-based storage)
296
+ */
297
+ async close() {
298
+ logger.debug('FileStorage closed');
299
+ }
300
+ }
301
+ //# sourceMappingURL=file-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare class GitManager {
2
+ /**
3
+ * Check if a directory is a git repository
4
+ */
5
+ static isGitRepository(projectPath: string): boolean;
6
+ /**
7
+ * Get the current git branch for a project
8
+ */
9
+ static getCurrentBranch(projectPath: string): string;
10
+ /**
11
+ * Get the current HEAD commit hash (for tracking start of development)
12
+ */
13
+ static getCurrentCommitHash(projectPath: string): string | null;
14
+ /**
15
+ * Create a commit with the given message
16
+ */
17
+ static createCommit(message: string, projectPath: string): boolean;
18
+ /**
19
+ * Check if there are uncommitted changes
20
+ */
21
+ static hasUncommittedChanges(projectPath: string): boolean;
22
+ }