@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,1147 @@
1
+ <template>
2
+ <div id="workflow-visualizer-app" :class="{ fullscreen: !showSidebar }">
3
+ <header class="app-header" v-if="!hideHeader">
4
+ <h1>Workflow Visualizer</h1>
5
+ <div class="workflow-controls">
6
+ <select id="workflow-selector" class="workflow-selector">
7
+ <option value="">Select a workflow...</option>
8
+ </select>
9
+ <input
10
+ type="file"
11
+ id="file-upload"
12
+ accept=".yaml,.yml"
13
+ class="file-upload"
14
+ />
15
+ <label for="file-upload" class="file-upload-label">Upload YAML</label>
16
+ </div>
17
+ </header>
18
+
19
+ <main class="app-main" :class="{ 'no-sidebar': !showSidebar }">
20
+ <div class="diagram-container">
21
+ <div id="diagram-canvas" class="diagram-canvas">
22
+ <div class="loading-message">
23
+ {{
24
+ initialWorkflow
25
+ ? 'Loading workflow...'
26
+ : 'Select a workflow to visualize'
27
+ }}
28
+ </div>
29
+ </div>
30
+ </div>
31
+
32
+ <aside v-if="showSidebar" class="side-panel">
33
+ <div class="side-panel-header">
34
+ <h2>Details</h2>
35
+ </div>
36
+ <div class="side-panel-content">
37
+ <div class="empty-state">
38
+ Click on a state or transition to see details
39
+ </div>
40
+ </div>
41
+ </aside>
42
+ </main>
43
+
44
+ <div id="error-container" class="error-container hidden">
45
+ <div class="error-message">
46
+ <span class="error-text"></span>
47
+ <button class="error-close">&times;</button>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </template>
52
+
53
+ <script setup lang="ts">
54
+ import { onMounted, onUnmounted, watch } from 'vue';
55
+ import { load as parseYaml } from 'js-yaml';
56
+ import { marked } from 'marked';
57
+ import { FileUploadHandler } from './services/FileUploadHandler';
58
+ import { ErrorHandler } from './utils/ErrorHandler';
59
+ import { PlantUMLRenderer } from './visualization/PlantUMLRenderer';
60
+ import { getRequiredElement } from './utils/DomHelpers';
61
+
62
+ // Configure marked for GitHub Flavored Markdown
63
+ marked.setOptions({
64
+ gfm: true,
65
+ breaks: true,
66
+ });
67
+
68
+ // Render markdown content to HTML
69
+ function renderMarkdown(content: string): string {
70
+ if (!content) return '';
71
+ return marked(content);
72
+ }
73
+
74
+ // Component props
75
+ interface WorkflowDefinition {
76
+ name: string;
77
+ displayName?: string;
78
+ domain?: string;
79
+ path: string;
80
+ }
81
+
82
+ interface Props {
83
+ showSidebar?: boolean;
84
+ hideHeader?: boolean;
85
+ initialWorkflow?: string;
86
+ workflows?: WorkflowDefinition[];
87
+ }
88
+
89
+ const props = withDefaults(defineProps<Props>(), {
90
+ showSidebar: true,
91
+ hideHeader: false,
92
+ initialWorkflow: '',
93
+ workflows: () => [],
94
+ });
95
+
96
+ interface WorkflowVisualizerApp {
97
+ plantUMLRenderer: unknown;
98
+ fileUploadHandler: unknown;
99
+ errorHandler: unknown;
100
+ }
101
+
102
+ interface AppState {
103
+ currentWorkflow: unknown;
104
+ selectedElement: unknown;
105
+ highlightedPath: unknown;
106
+ isLoading: boolean;
107
+ error: unknown;
108
+ parentState: unknown;
109
+ }
110
+
111
+ let workflowVisualizerApp: WorkflowVisualizerApp | null = null;
112
+ let appState: AppState = {
113
+ currentWorkflow: null,
114
+ selectedElement: null,
115
+ highlightedPath: null,
116
+ isLoading: false,
117
+ error: null,
118
+ parentState: null,
119
+ };
120
+
121
+ // Function to populate workflow selector
122
+ const populateWorkflowSelector = () => {
123
+ // Check if we're in browser environment (not SSR)
124
+ if (typeof document === 'undefined') return;
125
+
126
+ const workflowSelector =
127
+ document.querySelector<HTMLSelectElement>('#workflow-selector');
128
+ if (!workflowSelector || props.workflows.length === 0) return;
129
+
130
+ // Clear existing options except the first one
131
+ while (workflowSelector.children.length > 1) {
132
+ const lastChild = workflowSelector.lastChild;
133
+ if (lastChild) {
134
+ workflowSelector.removeChild(lastChild);
135
+ }
136
+ }
137
+
138
+ // Add workflow options
139
+ for (const workflow of props.workflows) {
140
+ const option = document.createElement('option');
141
+ option.value = workflow.name;
142
+ const domainText = workflow.domain ? ` [${workflow.domain}]` : '';
143
+ const displayName = workflow.displayName || workflow.name;
144
+ option.textContent = `${displayName}${domainText}`;
145
+ workflowSelector.appendChild(option);
146
+ }
147
+ };
148
+
149
+ // Watch for changes in workflows prop (only in browser)
150
+ watch(
151
+ () => props.workflows,
152
+ () => {
153
+ populateWorkflowSelector();
154
+ },
155
+ { immediate: true }
156
+ );
157
+
158
+ // Helper functions for handling interactions
159
+ function handleElementClick(event: {
160
+ elementType: string;
161
+ elementId: string;
162
+ data: unknown;
163
+ }): void {
164
+ if (event.elementType === 'node' && event.data) {
165
+ selectState(event.elementId, event.data);
166
+ } else if (event.elementType === 'transition' && event.data) {
167
+ selectTransition(event.elementId, event.data);
168
+ }
169
+ }
170
+
171
+ function selectState(stateId: string, nodeData: unknown): void {
172
+ const workflow = appState.currentWorkflow;
173
+ if (!workflow || !workflow.states[stateId]) return;
174
+
175
+ const state = workflow.states[stateId];
176
+
177
+ appState.selectedElement = {
178
+ type: 'state',
179
+ id: stateId,
180
+ data: state,
181
+ };
182
+
183
+ updateSidePanel();
184
+ }
185
+
186
+ function selectTransition(transitionId: string, linkData: unknown): void {
187
+ const workflow = appState.currentWorkflow;
188
+ if (!workflow) return;
189
+
190
+ if (linkData && linkData.from && linkData.to && linkData.trigger) {
191
+ const transitionData = {
192
+ trigger: linkData.trigger,
193
+ from: linkData.from,
194
+ to: linkData.to,
195
+ instructions: linkData.instructions || '',
196
+ additional_instructions: linkData.additional_instructions || '',
197
+ transition_reason: linkData.transition_reason || '',
198
+ review_perspectives: linkData.review_perspectives || [],
199
+ };
200
+
201
+ appState.selectedElement = {
202
+ type: 'transition',
203
+ id: transitionId,
204
+ data: transitionData,
205
+ };
206
+
207
+ updateSidePanel();
208
+ }
209
+ }
210
+
211
+ function clearSelectionAndShowMetadata(): void {
212
+ appState.selectedElement = null;
213
+ appState.parentState = null;
214
+ updateSidePanel();
215
+ }
216
+
217
+ function updateSidePanel(): void {
218
+ // Check if we're in browser environment (not SSR)
219
+ if (typeof document === 'undefined') return;
220
+
221
+ const sidePanelContent = document.querySelector('.side-panel-content');
222
+ const sidePanelHeader = document.querySelector('.side-panel-header');
223
+
224
+ if (!sidePanelContent || !sidePanelHeader) return; // Side panel not visible
225
+
226
+ if (!appState.currentWorkflow) {
227
+ sidePanelHeader.innerHTML = '<h2>Details</h2>';
228
+ sidePanelContent.innerHTML =
229
+ '<div class="empty-state">Select a workflow to see details</div>';
230
+ return;
231
+ }
232
+
233
+ if (appState.selectedElement) {
234
+ renderSelectedElementDetails();
235
+ } else {
236
+ // Show workflow metadata when no element is selected
237
+ renderMetadataDetails();
238
+ }
239
+ }
240
+
241
+ function renderSelectedElementDetails(): void {
242
+ const element = appState.selectedElement;
243
+
244
+ if (element.type === 'state') {
245
+ renderStateDetailsWithHeader(element.id, element.data);
246
+ } else if (element.type === 'transition') {
247
+ renderTransitionDetailsWithHeader(element.data);
248
+ }
249
+ }
250
+
251
+ function renderStateDetailsWithHeader(
252
+ stateId: string,
253
+ stateData: unknown
254
+ ): void {
255
+ // Check if we're in browser environment (not SSR)
256
+ if (typeof document === 'undefined') return;
257
+
258
+ const workflow = appState.currentWorkflow;
259
+ const isInitial = stateId === workflow.initial_state;
260
+ const sidePanelHeader = document.querySelector('.side-panel-header');
261
+ const sidePanelContent = document.querySelector('.side-panel-content');
262
+
263
+ if (!sidePanelHeader || !sidePanelContent) return;
264
+
265
+ // Update header with back button
266
+ sidePanelHeader.innerHTML = `
267
+ <button class="back-button" title="Back to Overview">←</button>
268
+ <h2>State: ${stateId}</h2>
269
+ `;
270
+
271
+ const backButton = sidePanelHeader.querySelector('.back-button');
272
+ backButton?.addEventListener('click', () => {
273
+ clearSelection();
274
+ });
275
+
276
+ // Render state content
277
+ sidePanelContent.innerHTML = `
278
+ <div class="detail-section">
279
+ <h3 class="detail-title">
280
+ ${stateId}
281
+ ${isInitial ? '<span class="badge badge-success">Initial</span>' : ''}
282
+ </h3>
283
+ <p class="detail-content">${stateData.description}</p>
284
+ </div>
285
+
286
+ <div class="detail-section">
287
+ <h4 class="detail-subtitle">Default Instructions</h4>
288
+ <div class="code-block">${renderMarkdown(stateData.default_instructions)}</div>
289
+ </div>
290
+
291
+ <div class="detail-section">
292
+ <h4 class="detail-subtitle">Transitions (${stateData.transitions.length})</h4>
293
+ <ul class="transitions-list">
294
+ ${(
295
+ stateData as {
296
+ transitions: Array<{
297
+ to: string;
298
+ trigger: string;
299
+ transition_reason: string;
300
+ }>;
301
+ }
302
+ ).transitions
303
+ .map(
304
+ transition => `
305
+ <li class="transition-item clickable-transition" data-from="${stateId}" data-to="${transition.to}" data-trigger="${transition.trigger}">
306
+ <div class="transition-trigger">${transition.trigger}</div>
307
+ <div class="transition-target">→ ${transition.to}</div>
308
+ <div class="transition-reason">${transition.transition_reason}</div>
309
+ </li>
310
+ `
311
+ )
312
+ .join('')}
313
+ </ul>
314
+ </div>
315
+ `;
316
+
317
+ // Add click handlers to transitions
318
+ const transitionItems = sidePanelContent.querySelectorAll(
319
+ '.clickable-transition'
320
+ );
321
+ for (const item of transitionItems) {
322
+ item.addEventListener('click', e => {
323
+ e.stopPropagation();
324
+ const fromState = item.getAttribute('data-from');
325
+ const toState = item.getAttribute('data-to');
326
+ const trigger = item.getAttribute('data-trigger');
327
+
328
+ if (fromState && toState && trigger) {
329
+ const fullTransition = (
330
+ stateData as {
331
+ transitions: Array<{
332
+ to: string;
333
+ trigger: string;
334
+ instructions?: string;
335
+ additional_instructions?: string;
336
+ transition_reason?: string;
337
+ }>;
338
+ }
339
+ ).transitions.find(t => t.to === toState && t.trigger === trigger);
340
+
341
+ if (fullTransition) {
342
+ appState.parentState = { id: stateId, data: stateData };
343
+
344
+ selectTransition(`${fromState}->${toState}`, {
345
+ from: fromState,
346
+ to: toState,
347
+ trigger: trigger,
348
+ instructions: fullTransition.instructions,
349
+ additional_instructions: fullTransition.additional_instructions,
350
+ transition_reason: fullTransition.transition_reason,
351
+ });
352
+ }
353
+ }
354
+ });
355
+ }
356
+ }
357
+
358
+ function renderTransitionDetailsWithHeader(transitionData: unknown): void {
359
+ // Check if we're in browser environment (not SSR)
360
+ if (typeof document === 'undefined') return;
361
+
362
+ const sidePanelHeader = document.querySelector('.side-panel-header');
363
+ const sidePanelContent = document.querySelector('.side-panel-content');
364
+
365
+ if (!sidePanelHeader || !sidePanelContent) return;
366
+
367
+ // Update header with back button
368
+ sidePanelHeader.innerHTML = `
369
+ <button class="back-button" title="Back to State">←</button>
370
+ <h2>Transition: ${transitionData.trigger}</h2>
371
+ `;
372
+
373
+ const backButton = sidePanelHeader.querySelector('.back-button');
374
+ backButton?.addEventListener('click', () => {
375
+ goBackToParentState();
376
+ });
377
+
378
+ const transition = transitionData as {
379
+ trigger: string;
380
+ from: string;
381
+ to: string;
382
+ transition_reason?: string;
383
+ instructions?: string;
384
+ additional_instructions?: string;
385
+ review_perspectives?: Array<{ perspective: string; prompt: string }>;
386
+ };
387
+
388
+ // Render transition content
389
+ sidePanelContent.innerHTML = `
390
+ <div class="detail-section">
391
+ <h3 class="detail-title">Transition: ${transition.trigger}</h3>
392
+ <p class="detail-content">
393
+ <strong>${transition.from}</strong> → <strong>${transition.to}</strong>
394
+ </p>
395
+ </div>
396
+
397
+ <div class="detail-section">
398
+ <h4 class="detail-subtitle">Reason</h4>
399
+ <p class="detail-content">${transition.transition_reason || ''}</p>
400
+ </div>
401
+
402
+ ${
403
+ transition.instructions
404
+ ? `
405
+ <div class="detail-section">
406
+ <h4 class="detail-subtitle">Instructions</h4>
407
+ <div class="code-block">${renderMarkdown(transition.instructions)}</div>
408
+ </div>
409
+ `
410
+ : ''
411
+ }
412
+
413
+ ${
414
+ transition.additional_instructions
415
+ ? `
416
+ <div class="detail-section">
417
+ <h4 class="detail-subtitle">Additional Instructions</h4>
418
+ <div class="code-block">${renderMarkdown(transition.additional_instructions)}</div>
419
+ </div>
420
+ `
421
+ : ''
422
+ }
423
+
424
+ ${
425
+ transition.review_perspectives?.length
426
+ ? `
427
+ <div class="detail-section">
428
+ <h4 class="detail-subtitle">Review Perspectives (${transition.review_perspectives.length})</h4>
429
+ ${transition.review_perspectives
430
+ .map(
431
+ review => `
432
+ <div class="review-perspective">
433
+ <h5 class="review-role">${review.perspective.replace(/_/g, ' ').toUpperCase()}</h5>
434
+ <p class="review-prompt">${review.prompt}</p>
435
+ </div>
436
+ `
437
+ )
438
+ .join('')}
439
+ </div>
440
+ `
441
+ : ''
442
+ }
443
+ `;
444
+ }
445
+
446
+ function renderMetadataDetails(): void {
447
+ // Check if we're in browser environment (not SSR)
448
+ if (typeof document === 'undefined') return;
449
+
450
+ const workflow = appState.currentWorkflow as {
451
+ name: string;
452
+ description: string;
453
+ metadata?: Record<string, unknown>;
454
+ } | null;
455
+ if (!workflow) return;
456
+
457
+ const metadata = workflow.metadata;
458
+
459
+ const sidePanelHeader = document.querySelector('.side-panel-header');
460
+ const sidePanelContent = document.querySelector('.side-panel-content');
461
+
462
+ if (!sidePanelHeader || !sidePanelContent) return;
463
+
464
+ // Update header
465
+ sidePanelHeader.innerHTML = '<h2>Workflow Info</h2>';
466
+
467
+ // Render metadata content
468
+ sidePanelContent.innerHTML = `
469
+ <div class="detail-section">
470
+ <h3 class="detail-title">${workflow.name}</h3>
471
+ <p class="detail-content">${workflow.description}</p>
472
+ </div>
473
+
474
+ ${
475
+ metadata
476
+ ? `
477
+ <div class="detail-section">
478
+ ${Object.entries(metadata)
479
+ .map(
480
+ ([key, value]) => `
481
+ <div class="metadata-item">
482
+ <strong>${key.replace(/_/g, ' ').toUpperCase()}:</strong>
483
+ ${
484
+ Array.isArray(value)
485
+ ? `
486
+ <ul>
487
+ ${value.map(item => `<li>${item}</li>`).join('')}
488
+ </ul>
489
+ `
490
+ : `<span>${value}</span>`
491
+ }
492
+ </div>
493
+ `
494
+ )
495
+ .join('')}
496
+ </div>
497
+ `
498
+ : ''
499
+ }
500
+ `;
501
+ }
502
+
503
+ function goBackToParentState(): void {
504
+ if (appState.parentState) {
505
+ appState.selectedElement = {
506
+ type: 'state',
507
+ id: appState.parentState.id,
508
+ data: appState.parentState.data,
509
+ };
510
+ appState.parentState = null;
511
+ updateSidePanel();
512
+ } else {
513
+ clearSelection();
514
+ }
515
+ }
516
+
517
+ function clearSelection(): void {
518
+ appState.selectedElement = null;
519
+ appState.parentState = null;
520
+
521
+ // Check if we're in browser environment (not SSR)
522
+ if (typeof document === 'undefined') return;
523
+
524
+ const sidePanelHeader = document.querySelector('.side-panel-header');
525
+ if (sidePanelHeader) {
526
+ sidePanelHeader.innerHTML = '<h2>Details</h2>';
527
+ }
528
+
529
+ updateSidePanel();
530
+ }
531
+
532
+ onMounted(async () => {
533
+ try {
534
+ // Initialize the workflow visualizer
535
+ const errorHandler = new ErrorHandler();
536
+
537
+ // Get DOM elements (some may not exist if header is hidden)
538
+ const workflowSelector =
539
+ document.querySelector<HTMLSelectElement>('#workflow-selector');
540
+ const fileUploadInput =
541
+ document.querySelector<HTMLInputElement>('#file-upload');
542
+ const diagramCanvas = getRequiredElement('#diagram-canvas');
543
+ const sidePanelContent = document.querySelector('.side-panel-content');
544
+ const sidePanelHeader = document.querySelector('.side-panel-header');
545
+
546
+ // Initialize PlantUML renderer
547
+ const plantUMLRenderer = new PlantUMLRenderer(diagramCanvas);
548
+
549
+ // Set up click handler for interactive elements
550
+ plantUMLRenderer.setClickHandler((elementType, elementId, data) => {
551
+ if (elementType === 'state') {
552
+ handleElementClick({
553
+ elementType: 'node',
554
+ elementId: elementId,
555
+ data: data,
556
+ });
557
+ } else if (elementType === 'transition') {
558
+ handleElementClick({
559
+ elementType: 'transition',
560
+ elementId: elementId,
561
+ data: data,
562
+ });
563
+ } else if (elementType === 'clear-selection') {
564
+ clearSelectionAndShowMetadata();
565
+ }
566
+ });
567
+
568
+ // Simple workflow loading function
569
+ const loadWorkflow = async (workflowName: string) => {
570
+ const workflow = props.workflows.find(w => w.name === workflowName);
571
+ if (!workflow) {
572
+ throw new Error(`Workflow '${workflowName}' not found`);
573
+ }
574
+
575
+ const response = await fetch(workflow.path);
576
+ if (!response.ok) {
577
+ throw new Error(`Failed to load workflow: ${response.statusText}`);
578
+ }
579
+
580
+ const yamlContent = await response.text();
581
+ const parsedWorkflow = parseYaml(yamlContent);
582
+
583
+ return parsedWorkflow;
584
+ };
585
+
586
+ // Initialize file upload handler (only if element exists)
587
+ let fileUploadHandler = null;
588
+ if (fileUploadInput) {
589
+ // Simple file upload handler that matches the new architecture
590
+ fileUploadHandler = {
591
+ setupEventListeners: () => {
592
+ fileUploadInput.addEventListener('change', async event => {
593
+ const target = event.target as HTMLInputElement;
594
+ const files = target.files;
595
+
596
+ if (!files || files.length === 0) {
597
+ return;
598
+ }
599
+
600
+ const file = files[0];
601
+
602
+ try {
603
+ // Validate file type
604
+ const validExtensions = ['.yaml', '.yml'];
605
+ const fileName = file.name.toLowerCase();
606
+ const isValidType = validExtensions.some(ext =>
607
+ fileName.endsWith(ext)
608
+ );
609
+
610
+ if (!isValidType) {
611
+ throw new Error(
612
+ 'Invalid file type. Please select a .yaml or .yml file.'
613
+ );
614
+ }
615
+
616
+ // Validate file size (1MB limit)
617
+ const maxSizeBytes = 1024 * 1024;
618
+ if (file.size > maxSizeBytes) {
619
+ throw new Error(
620
+ `File too large. Maximum size is ${maxSizeBytes / 1024 / 1024}MB.`
621
+ );
622
+ }
623
+
624
+ if (file.size === 0) {
625
+ throw new Error('File is empty.');
626
+ }
627
+
628
+ // Read file content
629
+ const yamlContent = await new Promise<string>(
630
+ (resolve, reject) => {
631
+ const reader = new FileReader();
632
+ reader.onload = e => {
633
+ if (e.target?.result) {
634
+ resolve(e.target.result as string);
635
+ } else {
636
+ reject(new Error('Failed to read file content'));
637
+ }
638
+ };
639
+ reader.onerror = () =>
640
+ reject(new Error('Error reading file'));
641
+ reader.readAsText(file);
642
+ }
643
+ );
644
+
645
+ if (!yamlContent.trim()) {
646
+ throw new Error('Uploaded file is empty');
647
+ }
648
+
649
+ // Parse and render the workflow
650
+ diagramCanvas.innerHTML =
651
+ '<div class="loading-message">Loading uploaded workflow...</div>';
652
+ const workflow = parseYaml(yamlContent);
653
+ appState.currentWorkflow = workflow;
654
+ appState.selectedElement = null;
655
+ appState.highlightedPath = null;
656
+ await plantUMLRenderer.renderWorkflow(workflow);
657
+
658
+ // Clear workflow selector since this is an uploaded workflow
659
+ if (workflowSelector) {
660
+ workflowSelector.value = '';
661
+ }
662
+
663
+ updateSidePanel();
664
+ console.log(
665
+ `Successfully loaded uploaded workflow: ${workflow.name || 'Unnamed'}`
666
+ );
667
+ } catch (error) {
668
+ console.error('Failed to load uploaded workflow:', error);
669
+ diagramCanvas.innerHTML = `<div class="loading-message">Failed to load workflow: ${error.message}</div>`;
670
+ } finally {
671
+ // Clear the input so the same file can be uploaded again
672
+ target.value = '';
673
+ }
674
+ });
675
+ },
676
+ };
677
+
678
+ fileUploadHandler.setupEventListeners();
679
+ }
680
+
681
+ // Set up event listeners and populate workflow selector (only if selector exists)
682
+ if (workflowSelector) {
683
+ console.log('Setting up workflow selector, workflows:', props.workflows);
684
+
685
+ // Populate the workflow selector with available workflows
686
+ populateWorkflowSelector();
687
+
688
+ workflowSelector.addEventListener('change', async event => {
689
+ const target = event.target as HTMLSelectElement;
690
+ const workflowName = target.value;
691
+
692
+ if (!workflowName) {
693
+ diagramCanvas.innerHTML =
694
+ '<div class="loading-message">Select a workflow to visualize</div>';
695
+ return;
696
+ }
697
+
698
+ try {
699
+ diagramCanvas.innerHTML =
700
+ '<div class="loading-message">Loading workflow...</div>';
701
+ const workflow = await loadWorkflow(workflowName);
702
+ appState.currentWorkflow = workflow;
703
+ appState.selectedElement = null;
704
+ appState.highlightedPath = null;
705
+ await plantUMLRenderer.renderWorkflow(workflow);
706
+ updateSidePanel();
707
+ } catch (error) {
708
+ console.error('Failed to load workflow:', error);
709
+ diagramCanvas.innerHTML =
710
+ '<div class="loading-message">Failed to load workflow</div>';
711
+ }
712
+ });
713
+ }
714
+
715
+ // Load initial workflow if specified
716
+ if (props.initialWorkflow) {
717
+ try {
718
+ const workflow = await loadWorkflow(props.initialWorkflow);
719
+ appState.currentWorkflow = workflow;
720
+ appState.selectedElement = null;
721
+ appState.highlightedPath = null;
722
+ await plantUMLRenderer.renderWorkflow(workflow);
723
+ // Only update selector if it exists (when header is visible)
724
+ if (workflowSelector) {
725
+ workflowSelector.value = props.initialWorkflow;
726
+ }
727
+ updateSidePanel();
728
+ } catch (error) {
729
+ console.error('Failed to load initial workflow:', error);
730
+ diagramCanvas.innerHTML =
731
+ '<div class="loading-message">Failed to load workflow</div>';
732
+ }
733
+ }
734
+
735
+ workflowVisualizerApp = {
736
+ plantUMLRenderer,
737
+ fileUploadHandler,
738
+ errorHandler,
739
+ };
740
+ } catch (error) {
741
+ console.error('Failed to load WorkflowVisualizerApp:', error);
742
+
743
+ // Fallback: show error message
744
+ const errorContainer = document.getElementById('error-container');
745
+ const errorText = document.querySelector('.error-text');
746
+ if (errorContainer && errorText) {
747
+ errorText.textContent = 'Failed to load workflow visualizer';
748
+ errorContainer.classList.remove('hidden');
749
+ }
750
+ }
751
+ });
752
+
753
+ onUnmounted(() => {
754
+ // Clean up any resources
755
+ workflowVisualizerApp = null;
756
+ });
757
+ </script>
758
+
759
+ <style>
760
+ /* Workflow Visualizer styles - adapted from original CSS files */
761
+
762
+ /* CSS Variables */
763
+ #workflow-visualizer-app {
764
+ --color-primary: #2563eb;
765
+ --color-primary-hover: #1d4ed8;
766
+ --color-secondary: #64748b;
767
+ --color-success: #059669;
768
+ --color-warning: #d97706;
769
+ --color-error: #dc2626;
770
+
771
+ --color-white: #ffffff;
772
+ --color-gray-50: #f8fafc;
773
+ --color-gray-100: #f1f5f9;
774
+ --color-gray-200: #e2e8f0;
775
+ --color-gray-300: #cbd5e1;
776
+ --color-gray-400: #94a3b8;
777
+ --color-gray-500: #64748b;
778
+ --color-gray-600: #475569;
779
+ --color-gray-700: #334155;
780
+ --color-gray-800: #1e293b;
781
+ --color-gray-900: #0f172a;
782
+
783
+ --font-family-sans:
784
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',
785
+ Arial, sans-serif;
786
+ --font-family-mono:
787
+ 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New',
788
+ monospace;
789
+
790
+ --spacing-xs: 0.25rem;
791
+ --spacing-sm: 0.5rem;
792
+ --spacing-md: 1rem;
793
+ --spacing-lg: 1.5rem;
794
+ --spacing-xl: 2rem;
795
+
796
+ --radius-sm: 0.25rem;
797
+ --radius-md: 0.375rem;
798
+ --radius-lg: 0.5rem;
799
+
800
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
801
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
802
+ --shadow-lg:
803
+ 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
804
+ }
805
+
806
+ /* Container for the entire visualizer */
807
+ #workflow-visualizer-app {
808
+ width: 100%;
809
+ height: 100%;
810
+ background: var(--color-white);
811
+ border-radius: var(--radius-lg);
812
+ box-shadow: var(--shadow-lg);
813
+ overflow: hidden;
814
+ font-family: var(--font-family-sans);
815
+ font-size: 14px;
816
+ line-height: 1.5;
817
+ color: var(--color-gray-900);
818
+ }
819
+
820
+ /* Ensure proper scoping within VitePress */
821
+ #workflow-visualizer-app * {
822
+ box-sizing: border-box;
823
+ }
824
+
825
+ /* App Header */
826
+ #workflow-visualizer-app .app-header {
827
+ background: var(--color-gray-50);
828
+ border-bottom: 1px solid var(--color-gray-200);
829
+ padding: var(--spacing-lg);
830
+ }
831
+
832
+ #workflow-visualizer-app .app-header h1 {
833
+ margin: 0 0 var(--spacing-md) 0;
834
+ color: var(--color-gray-900);
835
+ font-size: 1.5rem;
836
+ font-weight: 600;
837
+ line-height: 1.2;
838
+ }
839
+
840
+ #workflow-visualizer-app .workflow-controls {
841
+ display: flex;
842
+ gap: var(--spacing-md);
843
+ align-items: center;
844
+ flex-wrap: wrap;
845
+ }
846
+
847
+ #workflow-visualizer-app .workflow-selector {
848
+ flex: 1;
849
+ min-width: 200px;
850
+ padding: var(--spacing-sm);
851
+ border: 1px solid var(--color-gray-300);
852
+ border-radius: var(--radius-md);
853
+ background: var(--color-white);
854
+ font-family: inherit;
855
+ font-size: inherit;
856
+ color: var(--color-gray-900);
857
+ }
858
+
859
+ #workflow-visualizer-app .file-upload {
860
+ display: none;
861
+ }
862
+
863
+ #workflow-visualizer-app .file-upload-label {
864
+ padding: var(--spacing-sm) var(--spacing-md);
865
+ background: var(--color-primary);
866
+ color: var(--color-white);
867
+ border-radius: var(--radius-md);
868
+ cursor: pointer;
869
+ font-weight: 500;
870
+ transition: background-color 0.2s;
871
+ border: none;
872
+ font-family: inherit;
873
+ font-size: inherit;
874
+ }
875
+
876
+ #workflow-visualizer-app .file-upload-label:hover {
877
+ background: var(--color-primary-hover);
878
+ }
879
+
880
+ /* Main Layout */
881
+ #workflow-visualizer-app .app-main {
882
+ display: flex;
883
+ height: 100%;
884
+ }
885
+
886
+ #workflow-visualizer-app.fullscreen .app-main {
887
+ height: 80vh;
888
+ }
889
+
890
+ #workflow-visualizer-app .diagram-container {
891
+ flex: 1;
892
+ position: relative;
893
+ overflow: hidden;
894
+ background: var(--color-white);
895
+ }
896
+
897
+ #workflow-visualizer-app .diagram-canvas {
898
+ width: 100%;
899
+ height: 100%;
900
+ overflow: auto;
901
+ position: relative;
902
+ }
903
+
904
+ #workflow-visualizer-app .loading-message {
905
+ display: flex;
906
+ align-items: center;
907
+ justify-content: center;
908
+ height: 100%;
909
+ color: var(--color-gray-500);
910
+ font-size: 1rem;
911
+ font-style: italic;
912
+ }
913
+
914
+ /* Side Panel */
915
+ #workflow-visualizer-app .side-panel {
916
+ width: 35%;
917
+ border-left: 1px solid var(--color-gray-200);
918
+ background: var(--color-gray-50);
919
+ display: flex;
920
+ flex-direction: column;
921
+ }
922
+
923
+ #workflow-visualizer-app .side-panel .metadata-item {
924
+ margin-bottom: 8px;
925
+ }
926
+
927
+ #workflow-visualizer-app .side-panel .metadata-item ul {
928
+ list-style: circle;
929
+ padding: 0;
930
+ margin-bottom: var(--spacing-sm);
931
+ }
932
+
933
+ #workflow-visualizer-app .side-panel .metadata-item ul li {
934
+ padding-bottom: var(--spacing-sm);
935
+ margin-left: var(--spacing-lg);
936
+ }
937
+
938
+ #workflow-visualizer-app .side-panel-header {
939
+ padding: var(--spacing-lg);
940
+ border-bottom: 1px solid var(--color-gray-200);
941
+ background: var(--color-white);
942
+ display: flex;
943
+ align-items: center;
944
+ }
945
+
946
+ #workflow-visualizer-app .side-panel-header h2 {
947
+ margin: 0;
948
+ color: var(--color-gray-900);
949
+ font-size: 1.125rem;
950
+ font-weight: 600;
951
+ line-height: 1.2;
952
+ }
953
+
954
+ #workflow-visualizer-app .side-panel-content {
955
+ flex: 1;
956
+ padding: var(--spacing-lg);
957
+ overflow-y: auto;
958
+ }
959
+
960
+ #workflow-visualizer-app .empty-state {
961
+ color: var(--color-gray-500);
962
+ text-align: center;
963
+ font-style: italic;
964
+ padding: var(--spacing-xl) 0;
965
+ }
966
+
967
+ /* Detail sections */
968
+ #workflow-visualizer-app .detail-section {
969
+ margin-bottom: var(--spacing-lg);
970
+ padding-bottom: var(--spacing-lg);
971
+ border-bottom: 1px solid var(--color-gray-200);
972
+ }
973
+
974
+ #workflow-visualizer-app .detail-section:last-child {
975
+ border-bottom: none;
976
+ margin-bottom: 0;
977
+ padding-bottom: 0;
978
+ }
979
+
980
+ #workflow-visualizer-app .detail-title {
981
+ font-size: 1.125rem;
982
+ font-weight: 600;
983
+ color: var(--color-gray-900);
984
+ margin-bottom: var(--spacing-sm);
985
+ }
986
+
987
+ #workflow-visualizer-app .detail-subtitle {
988
+ font-size: 1rem;
989
+ font-weight: 500;
990
+ color: var(--color-gray-800);
991
+ margin-bottom: var(--spacing-sm);
992
+ }
993
+
994
+ #workflow-visualizer-app .detail-content {
995
+ color: var(--color-gray-700);
996
+ line-height: 1.6;
997
+ margin: 0;
998
+ }
999
+
1000
+ #workflow-visualizer-app .code-block {
1001
+ background-color: var(--color-gray-100);
1002
+ border: 1px solid var(--color-gray-200);
1003
+ border-radius: var(--radius-md);
1004
+ padding: var(--spacing-md);
1005
+ font-family: var(--font-family-mono);
1006
+ font-size: 0.875rem;
1007
+ color: var(--color-gray-800);
1008
+ overflow-x: auto;
1009
+ white-space: pre-wrap;
1010
+ word-break: break-word;
1011
+ margin: var(--spacing-sm) 0;
1012
+ }
1013
+
1014
+ /* Badges */
1015
+ #workflow-visualizer-app .badge {
1016
+ display: inline-flex;
1017
+ align-items: center;
1018
+ padding: 0.25rem 0.5rem;
1019
+ border-radius: var(--radius-sm);
1020
+ font-size: 0.75rem;
1021
+ font-weight: 500;
1022
+ text-transform: uppercase;
1023
+ letter-spacing: 0.025em;
1024
+ margin-left: var(--spacing-sm);
1025
+ }
1026
+
1027
+ #workflow-visualizer-app .badge-success {
1028
+ background-color: var(--color-success);
1029
+ color: var(--color-white);
1030
+ }
1031
+
1032
+ /* Transitions list */
1033
+ #workflow-visualizer-app .transitions-list {
1034
+ list-style: none;
1035
+ padding: 0;
1036
+ margin: 0;
1037
+ }
1038
+
1039
+ #workflow-visualizer-app .transition-item {
1040
+ background: var(--color-white);
1041
+ border: 1px solid var(--color-gray-200);
1042
+ border-radius: var(--radius-md);
1043
+ padding: var(--spacing-md);
1044
+ margin-bottom: var(--spacing-sm);
1045
+ transition: all 0.2s ease;
1046
+ }
1047
+
1048
+ #workflow-visualizer-app .transition-item:hover {
1049
+ border-color: var(--color-primary);
1050
+ box-shadow: var(--shadow-sm);
1051
+ }
1052
+
1053
+ #workflow-visualizer-app .transition-trigger {
1054
+ font-weight: 600;
1055
+ color: var(--color-gray-900);
1056
+ margin-bottom: 0.25rem;
1057
+ }
1058
+
1059
+ #workflow-visualizer-app .transition-target {
1060
+ color: var(--color-primary);
1061
+ font-weight: 500;
1062
+ margin-bottom: 0.25rem;
1063
+ }
1064
+
1065
+ #workflow-visualizer-app .transition-reason {
1066
+ color: var(--color-gray-600);
1067
+ font-size: 0.875rem;
1068
+ }
1069
+
1070
+ /* Error container */
1071
+ #workflow-visualizer-app .error-container {
1072
+ position: absolute;
1073
+ bottom: var(--spacing-lg);
1074
+ right: var(--spacing-lg);
1075
+ z-index: 1000;
1076
+ }
1077
+
1078
+ #workflow-visualizer-app .error-container.hidden {
1079
+ display: none;
1080
+ }
1081
+
1082
+ #workflow-visualizer-app .error-message {
1083
+ background: #fef2f2;
1084
+ border: 1px solid #fecaca;
1085
+ color: var(--color-error);
1086
+ padding: var(--spacing-md);
1087
+ border-radius: var(--radius-md);
1088
+ display: flex;
1089
+ align-items: center;
1090
+ gap: var(--spacing-sm);
1091
+ max-width: 300px;
1092
+ box-shadow: var(--shadow-md);
1093
+ }
1094
+
1095
+ #workflow-visualizer-app .error-close {
1096
+ background: none;
1097
+ border: none;
1098
+ color: var(--color-error);
1099
+ cursor: pointer;
1100
+ font-size: 1.25rem;
1101
+ line-height: 1;
1102
+ padding: 0;
1103
+ }
1104
+
1105
+ /* Buttons */
1106
+ #workflow-visualizer-app button {
1107
+ cursor: pointer;
1108
+ font-family: inherit;
1109
+ }
1110
+
1111
+ #workflow-visualizer-app select {
1112
+ cursor: pointer;
1113
+ }
1114
+
1115
+ /* Back button */
1116
+ #workflow-visualizer-app .back-button {
1117
+ background: none;
1118
+ border: none;
1119
+ color: var(--color-gray-500);
1120
+ cursor: pointer;
1121
+ font-size: 18px;
1122
+ padding: 4px;
1123
+ margin-right: 8px;
1124
+ border-radius: 4px;
1125
+ transition: all 0.2s ease;
1126
+ }
1127
+
1128
+ #workflow-visualizer-app .back-button:hover {
1129
+ background-color: var(--color-gray-100);
1130
+ }
1131
+
1132
+ /* PlantUML diagram styles */
1133
+ #workflow-visualizer-app .diagram-canvas svg {
1134
+ max-width: 100%;
1135
+ height: auto;
1136
+ }
1137
+
1138
+ /* Clickable elements in diagrams */
1139
+ #workflow-visualizer-app .clickable-transition {
1140
+ cursor: pointer;
1141
+ transition: background-color 0.2s ease;
1142
+ }
1143
+
1144
+ #workflow-visualizer-app .clickable-transition:hover {
1145
+ background-color: #f0f9ff;
1146
+ }
1147
+ </style>