@codemcp/workflows 5.2.4 → 6.0.1

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 (451) hide show
  1. package/README.md +91 -0
  2. package/package.json +77 -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/core/dist/beads-integration.d.ts +50 -0
  11. package/packages/core/dist/beads-integration.js +387 -0
  12. package/packages/core/dist/beads-integration.js.map +1 -0
  13. package/packages/core/dist/beads-state-manager.d.ts +58 -0
  14. package/packages/core/dist/beads-state-manager.js +212 -0
  15. package/packages/core/dist/beads-state-manager.js.map +1 -0
  16. package/packages/core/dist/config-manager.d.ts +24 -0
  17. package/packages/core/dist/config-manager.js +68 -0
  18. package/packages/core/dist/config-manager.js.map +1 -0
  19. package/packages/core/dist/conversation-manager.d.ts +98 -0
  20. package/packages/core/dist/conversation-manager.js +382 -0
  21. package/packages/core/dist/conversation-manager.js.map +1 -0
  22. package/packages/core/dist/file-detection-manager.d.ts +53 -0
  23. package/packages/core/dist/file-detection-manager.js +221 -0
  24. package/packages/core/dist/file-detection-manager.js.map +1 -0
  25. package/packages/core/dist/file-storage.d.ts +93 -0
  26. package/packages/core/dist/file-storage.js +301 -0
  27. package/packages/core/dist/file-storage.js.map +1 -0
  28. package/packages/core/dist/git-manager.d.ts +22 -0
  29. package/packages/core/dist/git-manager.js +123 -0
  30. package/packages/core/dist/git-manager.js.map +1 -0
  31. package/packages/core/dist/index.d.ts +24 -0
  32. package/packages/core/dist/index.js +31 -0
  33. package/packages/core/dist/index.js.map +1 -0
  34. package/packages/core/dist/instruction-generator.d.ts +40 -0
  35. package/packages/core/dist/instruction-generator.js +89 -0
  36. package/packages/core/dist/instruction-generator.js.map +1 -0
  37. package/packages/core/dist/interaction-logger.d.ts +37 -0
  38. package/packages/core/dist/interaction-logger.js +87 -0
  39. package/packages/core/dist/interaction-logger.js.map +1 -0
  40. package/packages/core/dist/interfaces/index.d.ts +9 -0
  41. package/packages/core/dist/interfaces/index.js +10 -0
  42. package/packages/core/dist/interfaces/index.js.map +1 -0
  43. package/packages/core/dist/interfaces/instruction-generator.interface.d.ts +41 -0
  44. package/packages/core/dist/interfaces/instruction-generator.interface.js +8 -0
  45. package/packages/core/dist/interfaces/instruction-generator.interface.js.map +1 -0
  46. package/packages/core/dist/interfaces/plan-manager.interface.d.ts +55 -0
  47. package/packages/core/dist/interfaces/plan-manager.interface.js +8 -0
  48. package/packages/core/dist/interfaces/plan-manager.interface.js.map +1 -0
  49. package/packages/core/dist/interfaces/task-backend-client.interface.d.ts +52 -0
  50. package/packages/core/dist/interfaces/task-backend-client.interface.js +8 -0
  51. package/packages/core/dist/interfaces/task-backend-client.interface.js.map +1 -0
  52. package/packages/core/dist/logger.d.ts +64 -0
  53. package/packages/core/dist/logger.js +283 -0
  54. package/packages/core/dist/logger.js.map +1 -0
  55. package/packages/core/dist/path-validation-utils.d.ts +75 -0
  56. package/packages/core/dist/path-validation-utils.js +238 -0
  57. package/packages/core/dist/path-validation-utils.js.map +1 -0
  58. package/packages/core/dist/persistence-interface.d.ts +91 -0
  59. package/packages/core/dist/persistence-interface.js +9 -0
  60. package/packages/core/dist/persistence-interface.js.map +1 -0
  61. package/{dist/components/beads/beads-plan-manager.d.ts → packages/core/dist/plan-manager.d.ts} +15 -15
  62. package/{dist/components/beads/beads-plan-manager.js → packages/core/dist/plan-manager.js} +66 -50
  63. package/packages/core/dist/plan-manager.js.map +1 -0
  64. package/packages/core/dist/project-docs-manager.d.ts +119 -0
  65. package/packages/core/dist/project-docs-manager.js +366 -0
  66. package/packages/core/dist/project-docs-manager.js.map +1 -0
  67. package/packages/core/dist/state-machine-loader.d.ts +61 -0
  68. package/packages/core/dist/state-machine-loader.js +273 -0
  69. package/packages/core/dist/state-machine-loader.js.map +1 -0
  70. package/packages/core/dist/state-machine-types.d.ts +64 -0
  71. package/packages/core/dist/state-machine-types.js +7 -0
  72. package/packages/core/dist/state-machine-types.js.map +1 -0
  73. package/packages/core/dist/state-machine.d.ts +52 -0
  74. package/packages/core/dist/state-machine.js +256 -0
  75. package/packages/core/dist/state-machine.js.map +1 -0
  76. package/packages/core/dist/system-prompt-generator.d.ts +14 -0
  77. package/packages/core/dist/system-prompt-generator.js +42 -0
  78. package/packages/core/dist/system-prompt-generator.js.map +1 -0
  79. package/packages/core/dist/task-backend.d.ts +45 -0
  80. package/packages/core/dist/task-backend.js +176 -0
  81. package/packages/core/dist/task-backend.js.map +1 -0
  82. package/packages/core/dist/template-manager.d.ts +61 -0
  83. package/packages/core/dist/template-manager.js +231 -0
  84. package/packages/core/dist/template-manager.js.map +1 -0
  85. package/packages/core/dist/transition-engine.d.ts +77 -0
  86. package/packages/core/dist/transition-engine.js +244 -0
  87. package/packages/core/dist/transition-engine.js.map +1 -0
  88. package/packages/core/dist/types.d.ts +54 -0
  89. package/packages/core/dist/types.js +5 -0
  90. package/packages/core/dist/workflow-manager.d.ts +89 -0
  91. package/packages/core/dist/workflow-manager.js +468 -0
  92. package/packages/core/dist/workflow-manager.js.map +1 -0
  93. package/packages/core/package.json +33 -0
  94. package/packages/docs/.vitepress/dist/.gitignore +2 -0
  95. package/packages/docs/.vitepress/dist/404.html +23 -0
  96. package/packages/docs/.vitepress/dist/assets/app.Dz3lZH3M.js +1 -0
  97. package/packages/docs/.vitepress/dist/assets/chunks/framework.DZS7lpav.js +19 -0
  98. package/packages/docs/.vitepress/dist/assets/chunks/theme.q5Ewb3F1.js +206 -0
  99. package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.js +130 -0
  100. package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.lean.js +1 -0
  101. package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.js +72 -0
  102. package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.lean.js +1 -0
  103. package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.js +34 -0
  104. package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.lean.js +1 -0
  105. package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.js +1 -0
  106. package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.lean.js +1 -0
  107. package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.js +2 -0
  108. package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.lean.js +1 -0
  109. package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  110. package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  111. package/packages/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  112. package/packages/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  113. package/packages/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  114. package/packages/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  115. package/packages/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  116. package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  117. package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  118. package/packages/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  119. package/packages/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  120. package/packages/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  121. package/packages/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  122. package/packages/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  123. package/packages/docs/.vitepress/dist/assets/mcp-interaction-pattern.VdvOPuTt.png +0 -0
  124. package/packages/docs/.vitepress/dist/assets/placeholder-demo-greenfield.B8lG_tBI.png +0 -0
  125. package/packages/docs/.vitepress/dist/assets/style.CAgdBzOq.css +1 -0
  126. package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.js +50 -0
  127. package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.lean.js +1 -0
  128. package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.js +24 -0
  129. package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.lean.js +1 -0
  130. package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.js +15 -0
  131. package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.lean.js +1 -0
  132. package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.js +157 -0
  133. package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.lean.js +1 -0
  134. package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.js +143 -0
  135. package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.lean.js +1 -0
  136. package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.js +1 -0
  137. package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.lean.js +1 -0
  138. package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.js +23 -0
  139. package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.lean.js +1 -0
  140. package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.js +43 -0
  141. package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.lean.js +1 -0
  142. package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.js +2 -0
  143. package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.lean.js +1 -0
  144. package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.js +3 -0
  145. package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.lean.js +1 -0
  146. package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.js +7 -0
  147. package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.lean.js +1 -0
  148. package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.js +1 -0
  149. package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.lean.js +1 -0
  150. package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.js +1 -0
  151. package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.lean.js +1 -0
  152. package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.js +1 -0
  153. package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.lean.js +1 -0
  154. package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.js +1 -0
  155. package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.lean.js +1 -0
  156. package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.js +1 -0
  157. package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.lean.js +1 -0
  158. package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.js +1 -0
  159. package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.lean.js +1 -0
  160. package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.js +1 -0
  161. package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.lean.js +1 -0
  162. package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.js +1 -0
  163. package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.lean.js +1 -0
  164. package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.js +1 -0
  165. package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.lean.js +1 -0
  166. package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.js +1 -0
  167. package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.lean.js +1 -0
  168. package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.js +1 -0
  169. package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.lean.js +1 -0
  170. package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.js +1 -0
  171. package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.lean.js +1 -0
  172. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.js +1 -0
  173. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.lean.js +1 -0
  174. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.js +1 -0
  175. package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.lean.js +1 -0
  176. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.js +1 -0
  177. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.lean.js +1 -0
  178. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.js +1 -0
  179. package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.lean.js +1 -0
  180. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.js +1 -0
  181. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.lean.js +1 -0
  182. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.js +1 -0
  183. package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.lean.js +1 -0
  184. package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.js +1 -0
  185. package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.lean.js +1 -0
  186. package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.js +1 -0
  187. package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.lean.js +1 -0
  188. package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.js +1 -0
  189. package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.lean.js +1 -0
  190. package/packages/docs/.vitepress/dist/dev/ARCHITECTURE.html +155 -0
  191. package/packages/docs/.vitepress/dist/dev/DEVELOPMENT.html +97 -0
  192. package/packages/docs/.vitepress/dist/dev/LOGGING.html +59 -0
  193. package/packages/docs/.vitepress/dist/dev/PUBLISHING.html +30 -0
  194. package/packages/docs/.vitepress/dist/hashmap.json +1 -0
  195. package/packages/docs/.vitepress/dist/index.html +27 -0
  196. package/packages/docs/.vitepress/dist/user/advanced-engineering.html +75 -0
  197. package/packages/docs/.vitepress/dist/user/agent-setup.html +49 -0
  198. package/packages/docs/.vitepress/dist/user/beads-integration.html +40 -0
  199. package/packages/docs/.vitepress/dist/user/crowd-mcp-integration.html +182 -0
  200. package/packages/docs/.vitepress/dist/user/custom-workflows.html +168 -0
  201. package/packages/docs/.vitepress/dist/user/git-commit-feature.html +30 -0
  202. package/packages/docs/.vitepress/dist/user/how-it-works.html +48 -0
  203. package/packages/docs/.vitepress/dist/user/long-term-memory.html +68 -0
  204. package/packages/docs/.vitepress/dist/user/packaged-workflows.html +27 -0
  205. package/packages/docs/.vitepress/dist/user/tutorial.html +28 -0
  206. package/packages/docs/.vitepress/dist/user/workflow-selection.html +32 -0
  207. package/packages/docs/.vitepress/dist/vp-icons.css +0 -0
  208. package/packages/docs/.vitepress/dist/workflows/adr.html +26 -0
  209. package/packages/docs/.vitepress/dist/workflows/adr.yaml +157 -0
  210. package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.html +26 -0
  211. package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.yaml +592 -0
  212. package/packages/docs/.vitepress/dist/workflows/boundary-testing.html +26 -0
  213. package/packages/docs/.vitepress/dist/workflows/boundary-testing.yaml +376 -0
  214. package/packages/docs/.vitepress/dist/workflows/bugfix.html +26 -0
  215. package/packages/docs/.vitepress/dist/workflows/bugfix.yaml +177 -0
  216. package/packages/docs/.vitepress/dist/workflows/business-analysis.html +26 -0
  217. package/packages/docs/.vitepress/dist/workflows/business-analysis.yaml +597 -0
  218. package/packages/docs/.vitepress/dist/workflows/c4-analysis.html +26 -0
  219. package/packages/docs/.vitepress/dist/workflows/c4-analysis.yaml +471 -0
  220. package/packages/docs/.vitepress/dist/workflows/epcc.html +26 -0
  221. package/packages/docs/.vitepress/dist/workflows/epcc.yaml +183 -0
  222. package/packages/docs/.vitepress/dist/workflows/game-beginner.html +26 -0
  223. package/packages/docs/.vitepress/dist/workflows/game-beginner.yaml +434 -0
  224. package/packages/docs/.vitepress/dist/workflows/greenfield.html +26 -0
  225. package/packages/docs/.vitepress/dist/workflows/greenfield.yaml +201 -0
  226. package/packages/docs/.vitepress/dist/workflows/minor.html +26 -0
  227. package/packages/docs/.vitepress/dist/workflows/minor.yaml +138 -0
  228. package/packages/docs/.vitepress/dist/workflows/posts.html +26 -0
  229. package/packages/docs/.vitepress/dist/workflows/posts.yaml +193 -0
  230. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.html +26 -0
  231. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.yaml +608 -0
  232. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.html +26 -0
  233. package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.yaml +381 -0
  234. package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.html +26 -0
  235. package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.yaml +713 -0
  236. package/packages/docs/.vitepress/dist/workflows/sdd-feature.html +26 -0
  237. package/packages/docs/.vitepress/dist/workflows/sdd-feature.yaml +471 -0
  238. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.html +26 -0
  239. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.yaml +336 -0
  240. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.html +26 -0
  241. package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.yaml +463 -0
  242. package/packages/docs/.vitepress/dist/workflows/slides.html +26 -0
  243. package/packages/docs/.vitepress/dist/workflows/slides.yaml +237 -0
  244. package/packages/docs/.vitepress/dist/workflows/tdd.html +26 -0
  245. package/packages/docs/.vitepress/dist/workflows/tdd.yaml +160 -0
  246. package/packages/docs/.vitepress/dist/workflows/waterfall.html +26 -0
  247. package/packages/docs/.vitepress/dist/workflows/waterfall.yaml +209 -0
  248. package/packages/docs/.vitepress/dist/workflows.html +26 -0
  249. package/packages/docs/package.json +32 -0
  250. package/packages/mcp-server/dist/index.js +10546 -0
  251. package/packages/mcp-server/package.json +41 -0
  252. package/packages/visualizer/dist/WorkflowVisualizer.vue +1147 -0
  253. package/packages/visualizer/dist/index.ts +17 -0
  254. package/packages/visualizer/dist/main.ts +673 -0
  255. package/packages/visualizer/dist/services/BundledWorkflows.ts +35 -0
  256. package/packages/visualizer/dist/services/FileUploadHandler.ts +166 -0
  257. package/packages/visualizer/dist/services/WorkflowLoader.ts +198 -0
  258. package/packages/visualizer/dist/services/YamlParser.ts +248 -0
  259. package/packages/visualizer/dist/services/workflow-list.ts +23 -0
  260. package/packages/visualizer/dist/types/ui-types.ts +84 -0
  261. package/packages/visualizer/dist/types/visualization-types.ts +95 -0
  262. package/packages/visualizer/dist/types/vite-env.d.ts +12 -0
  263. package/packages/visualizer/dist/utils/DomHelpers.ts +206 -0
  264. package/packages/visualizer/dist/utils/ErrorHandler.ts +170 -0
  265. package/packages/visualizer/dist/utils/PlantUMLEncoder.ts +121 -0
  266. package/packages/visualizer/dist/visualization/DiagramRenderer.ts +430 -0
  267. package/packages/visualizer/dist/visualization/LayoutEngine.ts +339 -0
  268. package/packages/visualizer/dist/visualization/PlantUMLRenderer.ts +507 -0
  269. package/packages/visualizer/dist/visualization/StateRenderer.ts +339 -0
  270. package/packages/visualizer/dist/visualization/TransitionRenderer.ts +432 -0
  271. package/packages/visualizer/package.json +39 -0
  272. package/resources/.DS_Store +0 -0
  273. package/resources/agents/architect.yaml +61 -0
  274. package/resources/agents/business-analyst.yaml +60 -0
  275. package/resources/agents/developer.yaml +61 -0
  276. package/resources/state-machine-schema.json +114 -0
  277. package/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
  278. package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
  279. package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
  280. package/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
  281. package/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
  282. package/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
  283. package/resources/templates/architecture/c4.md +224 -0
  284. package/resources/templates/architecture/freestyle.md +53 -0
  285. package/resources/templates/architecture/game.md +250 -0
  286. package/resources/templates/architecture/none.md +17 -0
  287. package/resources/templates/design/comprehensive.md +207 -0
  288. package/resources/templates/design/freestyle.md +37 -0
  289. package/resources/templates/design/game.md +66 -0
  290. package/resources/templates/design/none.md +17 -0
  291. package/resources/templates/requirements/ears.md +90 -0
  292. package/resources/templates/requirements/freestyle.md +42 -0
  293. package/resources/templates/requirements/game.md +162 -0
  294. package/resources/templates/requirements/none.md +17 -0
  295. package/resources/templates/skills/POWER.md +23 -0
  296. package/resources/templates/skills/SKILL.md +19 -0
  297. package/resources/workflows/adr.yaml +157 -0
  298. package/resources/workflows/big-bang-conversion.yaml +592 -0
  299. package/resources/workflows/boundary-testing.yaml +376 -0
  300. package/resources/workflows/bugfix.yaml +177 -0
  301. package/resources/workflows/business-analysis.yaml +597 -0
  302. package/resources/workflows/c4-analysis.yaml +471 -0
  303. package/resources/workflows/epcc.yaml +183 -0
  304. package/resources/workflows/game-beginner.yaml +434 -0
  305. package/resources/workflows/greenfield.yaml +201 -0
  306. package/resources/workflows/minor.yaml +138 -0
  307. package/resources/workflows/posts.yaml +193 -0
  308. package/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
  309. package/resources/workflows/sdd-bugfix.yaml +381 -0
  310. package/resources/workflows/sdd-feature-crowd.yaml +713 -0
  311. package/resources/workflows/sdd-feature.yaml +471 -0
  312. package/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
  313. package/resources/workflows/sdd-greenfield.yaml +463 -0
  314. package/resources/workflows/slides.yaml +237 -0
  315. package/resources/workflows/tdd.yaml +160 -0
  316. package/resources/workflows/waterfall.yaml +209 -0
  317. package/dist/components/beads/beads-instruction-generator.d.ts +0 -44
  318. package/dist/components/beads/beads-instruction-generator.d.ts.map +0 -1
  319. package/dist/components/beads/beads-instruction-generator.js +0 -160
  320. package/dist/components/beads/beads-instruction-generator.js.map +0 -1
  321. package/dist/components/beads/beads-plan-manager.d.ts.map +0 -1
  322. package/dist/components/beads/beads-plan-manager.js.map +0 -1
  323. package/dist/components/beads/beads-task-backend-client.d.ts +0 -43
  324. package/dist/components/beads/beads-task-backend-client.d.ts.map +0 -1
  325. package/dist/components/beads/beads-task-backend-client.js +0 -175
  326. package/dist/components/beads/beads-task-backend-client.js.map +0 -1
  327. package/dist/index.d.ts +0 -9
  328. package/dist/index.d.ts.map +0 -1
  329. package/dist/index.js +0 -74
  330. package/dist/index.js.map +0 -1
  331. package/dist/notification-service.d.ts +0 -14
  332. package/dist/notification-service.d.ts.map +0 -1
  333. package/dist/notification-service.js +0 -18
  334. package/dist/notification-service.js.map +0 -1
  335. package/dist/plugin-system/beads-plugin.d.ts +0 -71
  336. package/dist/plugin-system/beads-plugin.d.ts.map +0 -1
  337. package/dist/plugin-system/beads-plugin.js +0 -465
  338. package/dist/plugin-system/beads-plugin.js.map +0 -1
  339. package/dist/plugin-system/commit-plugin.d.ts +0 -40
  340. package/dist/plugin-system/commit-plugin.d.ts.map +0 -1
  341. package/dist/plugin-system/commit-plugin.js +0 -204
  342. package/dist/plugin-system/commit-plugin.js.map +0 -1
  343. package/dist/plugin-system/index.d.ts +0 -9
  344. package/dist/plugin-system/index.d.ts.map +0 -1
  345. package/dist/plugin-system/index.js +0 -9
  346. package/dist/plugin-system/index.js.map +0 -1
  347. package/dist/plugin-system/plugin-interfaces.d.ts +0 -98
  348. package/dist/plugin-system/plugin-interfaces.d.ts.map +0 -1
  349. package/dist/plugin-system/plugin-interfaces.js +0 -9
  350. package/dist/plugin-system/plugin-interfaces.js.map +0 -1
  351. package/dist/plugin-system/plugin-registry.d.ts +0 -44
  352. package/dist/plugin-system/plugin-registry.d.ts.map +0 -1
  353. package/dist/plugin-system/plugin-registry.js +0 -132
  354. package/dist/plugin-system/plugin-registry.js.map +0 -1
  355. package/dist/resource-handlers/conversation-state.d.ts +0 -15
  356. package/dist/resource-handlers/conversation-state.d.ts.map +0 -1
  357. package/dist/resource-handlers/conversation-state.js +0 -40
  358. package/dist/resource-handlers/conversation-state.js.map +0 -1
  359. package/dist/resource-handlers/development-plan.d.ts +0 -14
  360. package/dist/resource-handlers/development-plan.d.ts.map +0 -1
  361. package/dist/resource-handlers/development-plan.js +0 -31
  362. package/dist/resource-handlers/development-plan.js.map +0 -1
  363. package/dist/resource-handlers/index.d.ts +0 -24
  364. package/dist/resource-handlers/index.d.ts.map +0 -1
  365. package/dist/resource-handlers/index.js +0 -62
  366. package/dist/resource-handlers/index.js.map +0 -1
  367. package/dist/resource-handlers/system-prompt.d.ts +0 -15
  368. package/dist/resource-handlers/system-prompt.d.ts.map +0 -1
  369. package/dist/resource-handlers/system-prompt.js +0 -40
  370. package/dist/resource-handlers/system-prompt.js.map +0 -1
  371. package/dist/resource-handlers/workflow-resource.d.ts +0 -15
  372. package/dist/resource-handlers/workflow-resource.d.ts.map +0 -1
  373. package/dist/resource-handlers/workflow-resource.js +0 -85
  374. package/dist/resource-handlers/workflow-resource.js.map +0 -1
  375. package/dist/response-renderer.d.ts +0 -30
  376. package/dist/response-renderer.d.ts.map +0 -1
  377. package/dist/response-renderer.js +0 -94
  378. package/dist/response-renderer.js.map +0 -1
  379. package/dist/server-config.d.ts +0 -34
  380. package/dist/server-config.d.ts.map +0 -1
  381. package/dist/server-config.js +0 -503
  382. package/dist/server-config.js.map +0 -1
  383. package/dist/server-helpers.d.ts +0 -70
  384. package/dist/server-helpers.d.ts.map +0 -1
  385. package/dist/server-helpers.js +0 -171
  386. package/dist/server-helpers.js.map +0 -1
  387. package/dist/server-implementation.d.ts +0 -74
  388. package/dist/server-implementation.d.ts.map +0 -1
  389. package/dist/server-implementation.js +0 -201
  390. package/dist/server-implementation.js.map +0 -1
  391. package/dist/server.d.ts +0 -6
  392. package/dist/server.d.ts.map +0 -1
  393. package/dist/server.js +0 -5
  394. package/dist/server.js.map +0 -1
  395. package/dist/tool-handlers/base-tool-handler.d.ts +0 -50
  396. package/dist/tool-handlers/base-tool-handler.d.ts.map +0 -1
  397. package/dist/tool-handlers/base-tool-handler.js +0 -81
  398. package/dist/tool-handlers/base-tool-handler.js.map +0 -1
  399. package/dist/tool-handlers/conduct-review.d.ts +0 -49
  400. package/dist/tool-handlers/conduct-review.d.ts.map +0 -1
  401. package/dist/tool-handlers/conduct-review.js +0 -104
  402. package/dist/tool-handlers/conduct-review.js.map +0 -1
  403. package/dist/tool-handlers/get-tool-info.d.ts +0 -75
  404. package/dist/tool-handlers/get-tool-info.d.ts.map +0 -1
  405. package/dist/tool-handlers/get-tool-info.js +0 -168
  406. package/dist/tool-handlers/get-tool-info.js.map +0 -1
  407. package/dist/tool-handlers/index.d.ts +0 -41
  408. package/dist/tool-handlers/index.d.ts.map +0 -1
  409. package/dist/tool-handlers/index.js +0 -71
  410. package/dist/tool-handlers/index.js.map +0 -1
  411. package/dist/tool-handlers/list-workflows.d.ts +0 -35
  412. package/dist/tool-handlers/list-workflows.d.ts.map +0 -1
  413. package/dist/tool-handlers/list-workflows.js +0 -43
  414. package/dist/tool-handlers/list-workflows.js.map +0 -1
  415. package/dist/tool-handlers/no-idea.d.ts +0 -41
  416. package/dist/tool-handlers/no-idea.d.ts.map +0 -1
  417. package/dist/tool-handlers/no-idea.js +0 -29
  418. package/dist/tool-handlers/no-idea.js.map +0 -1
  419. package/dist/tool-handlers/proceed-to-phase.d.ts +0 -41
  420. package/dist/tool-handlers/proceed-to-phase.d.ts.map +0 -1
  421. package/dist/tool-handlers/proceed-to-phase.js +0 -165
  422. package/dist/tool-handlers/proceed-to-phase.js.map +0 -1
  423. package/dist/tool-handlers/reset-development.d.ts +0 -31
  424. package/dist/tool-handlers/reset-development.d.ts.map +0 -1
  425. package/dist/tool-handlers/reset-development.js +0 -48
  426. package/dist/tool-handlers/reset-development.js.map +0 -1
  427. package/dist/tool-handlers/resume-workflow.d.ts +0 -87
  428. package/dist/tool-handlers/resume-workflow.d.ts.map +0 -1
  429. package/dist/tool-handlers/resume-workflow.js +0 -212
  430. package/dist/tool-handlers/resume-workflow.js.map +0 -1
  431. package/dist/tool-handlers/setup-project-docs.d.ts +0 -37
  432. package/dist/tool-handlers/setup-project-docs.d.ts.map +0 -1
  433. package/dist/tool-handlers/setup-project-docs.js +0 -138
  434. package/dist/tool-handlers/setup-project-docs.js.map +0 -1
  435. package/dist/tool-handlers/start-development.d.ts +0 -79
  436. package/dist/tool-handlers/start-development.d.ts.map +0 -1
  437. package/dist/tool-handlers/start-development.js +0 -484
  438. package/dist/tool-handlers/start-development.js.map +0 -1
  439. package/dist/tool-handlers/whats-next.d.ts +0 -41
  440. package/dist/tool-handlers/whats-next.d.ts.map +0 -1
  441. package/dist/tool-handlers/whats-next.js +0 -123
  442. package/dist/tool-handlers/whats-next.js.map +0 -1
  443. package/dist/types.d.ts +0 -119
  444. package/dist/types.d.ts.map +0 -1
  445. package/dist/types.js +0 -5
  446. package/dist/version-info.d.ts +0 -30
  447. package/dist/version-info.d.ts.map +0 -1
  448. package/dist/version-info.js +0 -178
  449. package/dist/version-info.js.map +0 -1
  450. package/skill/SKILL.md +0 -28
  451. /package/{dist → packages/core/dist}/types.js.map +0 -0
@@ -0,0 +1,35 @@
1
+ import { workflowList } from './workflow-list';
2
+
3
+ // Bundled workflows configuration - imported from generated list
4
+ const bundledWorkflows = workflowList;
5
+
6
+ export function getBundledWorkflowNames(): string[] {
7
+ return bundledWorkflows;
8
+ }
9
+
10
+ export function getBundledWorkflow(name: string): string {
11
+ if (!bundledWorkflows.includes(name)) {
12
+ throw new Error(`Workflow '${name}' not found in bundled workflows`);
13
+ }
14
+ return `/workflows/${name}.yaml`;
15
+ }
16
+
17
+ export function getBundledWorkflowMetadata(name?: string) {
18
+ if (name) {
19
+ if (!bundledWorkflows.includes(name)) {
20
+ throw new Error(`Workflow '${name}' not found in bundled workflows`);
21
+ }
22
+ return {
23
+ name,
24
+ path: `/workflows/${name}.yaml`,
25
+ bundled: true,
26
+ };
27
+ }
28
+ return bundledWorkflows.map(name => ({
29
+ name,
30
+ path: `/workflows/${name}.yaml`,
31
+ bundled: true,
32
+ }));
33
+ }
34
+
35
+ export default bundledWorkflows;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * File upload handling service
3
+ * Manages file upload UI interactions and validation
4
+ */
5
+
6
+ import { YamlStateMachine, AppError } from '../types/ui-types';
7
+ import { WorkflowLoader } from './WorkflowLoader';
8
+
9
+ export class FileUploadHandler {
10
+ private readonly workflowLoader: WorkflowLoader;
11
+ private readonly fileInput: HTMLInputElement;
12
+ private readonly boundHandleFileSelection: (event: Event) => void;
13
+
14
+ constructor(
15
+ fileInputElement: HTMLInputElement,
16
+ workflowLoader: WorkflowLoader
17
+ ) {
18
+ this.workflowLoader = workflowLoader;
19
+ this.fileInput = fileInputElement;
20
+ this.boundHandleFileSelection = this.handleFileSelection.bind(this);
21
+ this.setupEventListeners();
22
+ }
23
+
24
+ /**
25
+ * Set up event listeners for file upload
26
+ */
27
+ private setupEventListeners(): void {
28
+ this.fileInput.addEventListener('change', this.boundHandleFileSelection);
29
+ }
30
+
31
+ /**
32
+ * Handle file selection from input
33
+ */
34
+ private async handleFileSelection(event: Event): Promise<void> {
35
+ const target = event.target as HTMLInputElement;
36
+ const files = target.files;
37
+
38
+ if (!files || files.length === 0) {
39
+ return;
40
+ }
41
+
42
+ const file = files[0];
43
+
44
+ try {
45
+ const workflow = await this.processUploadedFile(file);
46
+ this.onWorkflowLoaded(workflow, file.name);
47
+ } catch (error) {
48
+ this.onUploadError(error as AppError);
49
+ } finally {
50
+ // Clear the input so the same file can be uploaded again
51
+ target.value = '';
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Process an uploaded file and return the parsed workflow
57
+ */
58
+ public async processUploadedFile(file: File): Promise<YamlStateMachine> {
59
+ console.log(`Processing uploaded file: ${file.name} (${file.size} bytes)`);
60
+
61
+ try {
62
+ const workflow = await this.workflowLoader.loadUploadedWorkflow(file);
63
+ console.log(`Successfully processed uploaded workflow: ${workflow.name}`);
64
+ return workflow;
65
+ } catch (error) {
66
+ console.error(`Error processing uploaded file:`, error);
67
+ // Re-throw with additional context
68
+ if (error instanceof Error) {
69
+ throw this.createUploadError(`Upload failed: ${error.message}`);
70
+ }
71
+ throw this.createUploadError(`Upload failed: ${String(error)}`);
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Validate file before processing
77
+ */
78
+ public validateFile(file: File): void {
79
+ // Check file type
80
+ if (!this.isValidFileType(file)) {
81
+ throw this.createUploadError(
82
+ 'Invalid file type. Please select a .yaml or .yml file.'
83
+ );
84
+ }
85
+
86
+ // Check file size (1MB limit)
87
+ const maxSizeBytes = 1024 * 1024;
88
+ if (file.size > maxSizeBytes) {
89
+ throw this.createUploadError(
90
+ `File too large. Maximum size is ${maxSizeBytes / 1024 / 1024}MB.`
91
+ );
92
+ }
93
+
94
+ // Check if file is empty
95
+ if (file.size === 0) {
96
+ throw this.createUploadError('File is empty.');
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Check if file type is valid
102
+ */
103
+ private isValidFileType(file: File): boolean {
104
+ const validExtensions = ['.yaml', '.yml'];
105
+ const fileName = file.name.toLowerCase();
106
+
107
+ return validExtensions.some(ext => fileName.endsWith(ext));
108
+ }
109
+
110
+ /**
111
+ * Handle successful workflow loading
112
+ * This method should be overridden by the consumer
113
+ */
114
+ public onWorkflowLoaded: (
115
+ workflow: YamlStateMachine,
116
+ fileName: string
117
+ ) => void = () => {
118
+ console.log('FileUploadHandler: onWorkflowLoaded not implemented');
119
+ };
120
+
121
+ /**
122
+ * Handle upload errors
123
+ * This method should be overridden by the consumer
124
+ */
125
+ public onUploadError: (error: AppError) => void = () => {
126
+ console.error('FileUploadHandler: onUploadError not implemented');
127
+ };
128
+
129
+ /**
130
+ * Programmatically trigger file selection dialog
131
+ */
132
+ public triggerFileSelection(): void {
133
+ this.fileInput.click();
134
+ }
135
+
136
+ /**
137
+ * Get the current file input element
138
+ */
139
+ public getFileInput(): HTMLInputElement {
140
+ return this.fileInput;
141
+ }
142
+
143
+ /**
144
+ * Reset the file input
145
+ */
146
+ public resetFileInput(): void {
147
+ this.fileInput.value = '';
148
+ }
149
+
150
+ /**
151
+ * Create an upload error
152
+ */
153
+ private createUploadError(message: string): AppError {
154
+ return {
155
+ type: 'validation',
156
+ message: message,
157
+ } as AppError;
158
+ }
159
+
160
+ /**
161
+ * Destroy the handler and clean up event listeners
162
+ */
163
+ public destroy(): void {
164
+ this.fileInput.removeEventListener('change', this.boundHandleFileSelection);
165
+ }
166
+ }
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Workflow loading service
3
+ * Handles loading workflows from built-in resources and uploaded files
4
+ */
5
+
6
+ import {
7
+ YamlStateMachine,
8
+ WorkflowMetadata,
9
+ AppError,
10
+ } from '../types/ui-types';
11
+ import { YamlParser } from './YamlParser';
12
+ import {
13
+ getBundledWorkflow,
14
+ getBundledWorkflowNames,
15
+ getBundledWorkflowMetadata,
16
+ } from './BundledWorkflows';
17
+
18
+ export class WorkflowLoader {
19
+ private readonly yamlParser: YamlParser;
20
+
21
+ constructor() {
22
+ this.yamlParser = new YamlParser();
23
+ }
24
+
25
+ /**
26
+ * Get list of available built-in workflows (dynamically generated)
27
+ */
28
+ public getAvailableWorkflows(): WorkflowMetadata[] {
29
+ const workflowNames = getBundledWorkflowNames();
30
+
31
+ return workflowNames.map(name => {
32
+ // Use pre-parsed metadata from build time
33
+ const metadata = getBundledWorkflowMetadata(name);
34
+
35
+ return {
36
+ name,
37
+ displayName: this.formatDisplayName(name),
38
+ source: 'builtin' as const,
39
+ domain: metadata?.domain,
40
+ };
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Format a workflow name into a display name
46
+ */
47
+ private formatDisplayName(name: string): string {
48
+ return name
49
+ .split(/[-_]/)
50
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
51
+ .join(' ');
52
+ }
53
+
54
+ /**
55
+ * Load a built-in workflow by name
56
+ */
57
+ public async loadBuiltinWorkflow(
58
+ workflowName: string
59
+ ): Promise<YamlStateMachine> {
60
+ const availableWorkflows = this.getAvailableWorkflows();
61
+ const workflowMetadata = availableWorkflows.find(
62
+ w => w.name === workflowName
63
+ );
64
+
65
+ if (!workflowMetadata) {
66
+ throw this.createNetworkError(`Unknown workflow: ${workflowName}`);
67
+ }
68
+
69
+ try {
70
+ const yamlContent = getBundledWorkflow(workflowName);
71
+
72
+ if (!yamlContent) {
73
+ throw this.createNetworkError(
74
+ `Bundled workflow "${workflowName}" not found`
75
+ );
76
+ }
77
+
78
+ if (!yamlContent.trim()) {
79
+ throw this.createNetworkError(
80
+ `Workflow file "${workflowName}" is empty`
81
+ );
82
+ }
83
+
84
+ const workflow = this.yamlParser.parseWorkflow(yamlContent);
85
+
86
+ return workflow;
87
+ } catch (error) {
88
+ if (error instanceof Error && error.message.includes('validation')) {
89
+ throw error;
90
+ }
91
+
92
+ if (error instanceof Error && error.message.includes('parsing')) {
93
+ throw error;
94
+ }
95
+
96
+ throw this.createNetworkError(
97
+ `Failed to load workflow "${workflowName}": ${String(error)}`
98
+ );
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Load a workflow from an uploaded file
104
+ */
105
+ public async loadUploadedWorkflow(file: File): Promise<YamlStateMachine> {
106
+ try {
107
+ // Validate file type
108
+ if (!this.isValidYamlFile(file)) {
109
+ throw this.createValidationError(
110
+ 'Invalid file type. Please upload a .yaml or .yml file.'
111
+ );
112
+ }
113
+
114
+ // Validate file size (limit to 1MB)
115
+ const maxSizeBytes = 1024 * 1024; // 1MB
116
+ if (file.size > maxSizeBytes) {
117
+ throw this.createValidationError(
118
+ `File too large. Maximum size is ${maxSizeBytes / 1024 / 1024}MB.`
119
+ );
120
+ }
121
+
122
+ // Read file content
123
+ const yamlContent = await this.readFileAsText(file);
124
+
125
+ if (!yamlContent.trim()) {
126
+ throw this.createValidationError('Uploaded file is empty');
127
+ }
128
+
129
+ // Parse and validate the workflow
130
+ return this.yamlParser.parseWorkflow(yamlContent);
131
+ } catch (error) {
132
+ if (error instanceof Error && error.message.includes('validation')) {
133
+ throw error;
134
+ }
135
+
136
+ if (error instanceof Error && error.message.includes('parsing')) {
137
+ throw error;
138
+ }
139
+
140
+ throw this.createNetworkError(
141
+ `Failed to process uploaded file: ${String(error)}`
142
+ );
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Check if the uploaded file is a valid YAML file
148
+ */
149
+ private isValidYamlFile(file: File): boolean {
150
+ const validExtensions = ['.yaml', '.yml'];
151
+ const fileName = file.name.toLowerCase();
152
+
153
+ return validExtensions.some(ext => fileName.endsWith(ext));
154
+ }
155
+
156
+ /**
157
+ * Read file content as text
158
+ */
159
+ private readFileAsText(file: File): Promise<string> {
160
+ return new Promise((resolve, reject) => {
161
+ const reader = new FileReader();
162
+
163
+ reader.onload = (event: ProgressEvent<FileReader>) => {
164
+ if (event.target?.result) {
165
+ resolve(event.target.result as string);
166
+ } else {
167
+ reject(new Error('Failed to read file content'));
168
+ }
169
+ };
170
+
171
+ reader.onerror = () => {
172
+ reject(new Error('Error reading file'));
173
+ };
174
+
175
+ reader.readAsText(file);
176
+ });
177
+ }
178
+
179
+ /**
180
+ * Create a validation error
181
+ */
182
+ private createValidationError(message: string): AppError {
183
+ return {
184
+ type: 'validation',
185
+ message: message,
186
+ } as AppError;
187
+ }
188
+
189
+ /**
190
+ * Create a network error
191
+ */
192
+ private createNetworkError(message: string): AppError {
193
+ return {
194
+ type: 'network',
195
+ message: message,
196
+ } as AppError;
197
+ }
198
+ }
@@ -0,0 +1,248 @@
1
+ /**
2
+ * YAML parsing and validation service
3
+ * Handles parsing YAML content and validating workflow structure
4
+ */
5
+
6
+ import * as yaml from 'js-yaml';
7
+ import { YamlStateMachine, YamlState, YamlTransition } from '../types/ui-types';
8
+ import { AppError } from '../types/ui-types';
9
+
10
+ export class YamlParser {
11
+ /**
12
+ * Parse YAML content into a workflow state machine
13
+ */
14
+ public parseWorkflow(yamlContent: string): YamlStateMachine {
15
+ try {
16
+ const parsed = yaml.load(yamlContent) as unknown;
17
+
18
+ if (!parsed) {
19
+ throw this.createValidationError('Empty YAML content');
20
+ }
21
+
22
+ const workflow = this.validateWorkflowStructure(parsed);
23
+ return workflow;
24
+ } catch (error) {
25
+ if (error instanceof yaml.YAMLException) {
26
+ throw this.createParsingError(`YAML syntax error: ${error.message}`);
27
+ }
28
+
29
+ if (error instanceof Error && error.message.includes('validation')) {
30
+ throw error;
31
+ }
32
+
33
+ throw this.createParsingError(`Failed to parse YAML: ${String(error)}`);
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Validate the structure of a parsed workflow object
39
+ */
40
+ private validateWorkflowStructure(parsed: unknown): YamlStateMachine {
41
+ // Check required top-level fields
42
+ this.validateRequiredField(parsed, 'name', 'string');
43
+ this.validateRequiredField(parsed, 'description', 'string');
44
+ this.validateRequiredField(parsed, 'initial_state', 'string');
45
+ this.validateRequiredField(parsed, 'states', 'object');
46
+
47
+ // Cast parsed to unknown for property access
48
+ const parsedData = parsed as Record<string, unknown>;
49
+
50
+ // Validate states structure
51
+ const states = this.validateStates(parsedData.states);
52
+
53
+ // Validate initial state exists
54
+ if (!states[parsedData.initial_state as string]) {
55
+ throw this.createValidationError(
56
+ `Initial state "${parsedData.initial_state}" not found in states`
57
+ );
58
+ }
59
+
60
+ // Validate state transitions reference valid states
61
+ this.validateStateReferences(states);
62
+
63
+ return {
64
+ name: parsedData.name as string,
65
+ description: parsedData.description as string,
66
+ initial_state: parsedData.initial_state as string,
67
+ states: states,
68
+ metadata: parsedData.metadata as YamlStateMachine['metadata'],
69
+ };
70
+ }
71
+
72
+ /**
73
+ * Validate states object structure
74
+ */
75
+ private validateStates(statesObj: unknown): Record<string, YamlState> {
76
+ if (!statesObj || typeof statesObj !== 'object') {
77
+ throw this.createValidationError('States must be an object');
78
+ }
79
+
80
+ const validatedStates: Record<string, YamlState> = {};
81
+
82
+ for (const [stateName, stateValue] of Object.entries(statesObj)) {
83
+ if (!stateValue || typeof stateValue !== 'object') {
84
+ throw this.createValidationError(
85
+ `State "${stateName}" must be an object`
86
+ );
87
+ }
88
+
89
+ const state = stateValue as unknown;
90
+
91
+ // Validate required state fields
92
+ this.validateRequiredField(
93
+ state,
94
+ 'description',
95
+ 'string',
96
+ `State "${stateName}"`
97
+ );
98
+ this.validateRequiredField(
99
+ state,
100
+ 'default_instructions',
101
+ 'string',
102
+ `State "${stateName}"`
103
+ );
104
+ // Cast state to Record for property access
105
+ const stateData = state as Record<string, unknown>;
106
+
107
+ this.validateRequiredField(
108
+ stateData,
109
+ 'transitions',
110
+ 'object',
111
+ `State "${stateName}"`
112
+ );
113
+
114
+ // Validate transitions
115
+ const transitions = this.validateTransitions(
116
+ stateData.transitions,
117
+ stateName
118
+ );
119
+
120
+ validatedStates[stateName] = {
121
+ description: stateData.description as string,
122
+ default_instructions: stateData.default_instructions as string,
123
+ transitions: transitions,
124
+ };
125
+ }
126
+
127
+ return validatedStates;
128
+ }
129
+
130
+ /**
131
+ * Validate transitions array structure
132
+ */
133
+ private validateTransitions(
134
+ transitionsArray: unknown,
135
+ stateName: string
136
+ ): YamlTransition[] {
137
+ if (!Array.isArray(transitionsArray)) {
138
+ throw this.createValidationError(
139
+ `Transitions for state "${stateName}" must be an array`
140
+ );
141
+ }
142
+
143
+ return transitionsArray.map((transition: unknown, index: number) => {
144
+ if (!transition || typeof transition !== 'object') {
145
+ throw this.createValidationError(
146
+ `Transition ${index} in state "${stateName}" must be an object`
147
+ );
148
+ }
149
+
150
+ // Cast transition to Record for property access
151
+ const transitionData = transition as Record<string, unknown>;
152
+
153
+ // Validate required transition fields
154
+ this.validateRequiredField(
155
+ transitionData,
156
+ 'trigger',
157
+ 'string',
158
+ `Transition ${index} in state "${stateName}"`
159
+ );
160
+ this.validateRequiredField(
161
+ transitionData,
162
+ 'to',
163
+ 'string',
164
+ `Transition ${index} in state "${stateName}"`
165
+ );
166
+ this.validateRequiredField(
167
+ transitionData,
168
+ 'transition_reason',
169
+ 'string',
170
+ `Transition ${index} in state "${stateName}"`
171
+ );
172
+
173
+ return {
174
+ trigger: transitionData.trigger as string,
175
+ to: transitionData.to as string,
176
+ instructions: transitionData.instructions as string,
177
+ additional_instructions:
178
+ transitionData.additional_instructions as string,
179
+ transition_reason: transitionData.transition_reason as string,
180
+ review_perspectives: transitionData.review_perspectives as Array<{
181
+ perspective: string;
182
+ prompt: string;
183
+ }>,
184
+ };
185
+ });
186
+ }
187
+
188
+ /**
189
+ * Validate that all transition targets reference valid states
190
+ */
191
+ private validateStateReferences(states: Record<string, YamlState>): void {
192
+ const stateNames = Object.keys(states);
193
+
194
+ for (const [stateName, state] of Object.entries(states)) {
195
+ for (const transition of state.transitions) {
196
+ if (!stateNames.includes(transition.to)) {
197
+ throw this.createValidationError(
198
+ `Transition in state "${stateName}" references unknown state "${transition.to}"`
199
+ );
200
+ }
201
+ }
202
+ }
203
+ }
204
+
205
+ /**
206
+ * Validate that a required field exists and has the correct type
207
+ */
208
+ private validateRequiredField(
209
+ obj: unknown,
210
+ fieldName: string,
211
+ expectedType: string,
212
+ context: string = 'Workflow'
213
+ ): void {
214
+ const objData = obj as Record<string, unknown>;
215
+ if (!(fieldName in objData)) {
216
+ throw this.createValidationError(
217
+ `${context}: Missing required field "${fieldName}"`
218
+ );
219
+ }
220
+
221
+ const actualType = typeof objData[fieldName];
222
+ if (actualType !== expectedType) {
223
+ throw this.createValidationError(
224
+ `${context}: Field "${fieldName}" must be ${expectedType}, got ${actualType}`
225
+ );
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Create a validation error
231
+ */
232
+ private createValidationError(message: string): AppError {
233
+ return {
234
+ type: 'validation',
235
+ message: `Validation error: ${message}`,
236
+ } as AppError;
237
+ }
238
+
239
+ /**
240
+ * Create a parsing error
241
+ */
242
+ private createParsingError(message: string): AppError {
243
+ return {
244
+ type: 'parsing',
245
+ message: message,
246
+ } as AppError;
247
+ }
248
+ }
@@ -0,0 +1,23 @@
1
+ // Auto-generated workflow list
2
+ export const workflowList = [
3
+ 'adr',
4
+ 'big-bang-conversion',
5
+ 'boundary-testing',
6
+ 'bugfix',
7
+ 'business-analysis',
8
+ 'c4-analysis',
9
+ 'epcc',
10
+ 'game-beginner',
11
+ 'greenfield',
12
+ 'minor',
13
+ 'posts',
14
+ 'sdd-bugfix',
15
+ 'sdd-bugfix-crowd',
16
+ 'sdd-feature',
17
+ 'sdd-feature-crowd',
18
+ 'sdd-greenfield',
19
+ 'sdd-greenfield-crowd',
20
+ 'slides',
21
+ 'tdd',
22
+ 'waterfall',
23
+ ];