@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,17 @@
1
+ export { default } from './WorkflowVisualizer.vue';
2
+ export { default as WorkflowVisualizer } from './WorkflowVisualizer.vue';
3
+
4
+ // Export types for consumers
5
+ export interface WorkflowDefinition {
6
+ name: string;
7
+ displayName?: string;
8
+ domain?: string;
9
+ path: string;
10
+ }
11
+
12
+ // Export utility classes (though these may not be needed by consumers anymore)
13
+ export { WorkflowLoader } from './services/WorkflowLoader';
14
+ export { FileUploadHandler } from './services/FileUploadHandler';
15
+ export { ErrorHandler } from './utils/ErrorHandler';
16
+ export { PlantUMLRenderer } from './visualization/PlantUMLRenderer';
17
+ export { getRequiredElement } from './utils/DomHelpers';
@@ -0,0 +1,673 @@
1
+ /**
2
+ * Main application entry point
3
+ * Initializes the workflow visualizer application
4
+ */
5
+
6
+ import { WorkflowLoader } from './services/WorkflowLoader';
7
+ import { FileUploadHandler } from './services/FileUploadHandler';
8
+ import { ErrorHandler } from './utils/ErrorHandler';
9
+ import { PlantUMLRenderer } from './visualization/PlantUMLRenderer';
10
+ import { getRequiredElement } from './utils/DomHelpers';
11
+ import type { InteractionEvent } from './types/ui-types';
12
+ import {
13
+ YamlStateMachine,
14
+ YamlState,
15
+ YamlTransition,
16
+ AppState,
17
+ TransitionData,
18
+ AppError,
19
+ } from './types/ui-types';
20
+
21
+ class WorkflowVisualizerApp {
22
+ private readonly workflowLoader: WorkflowLoader;
23
+ private readonly fileUploadHandler: FileUploadHandler;
24
+ private readonly errorHandler: ErrorHandler;
25
+ private readonly plantUMLRenderer: PlantUMLRenderer;
26
+
27
+ // DOM elements
28
+ private readonly workflowSelector: HTMLSelectElement;
29
+ private readonly fileUploadInput: HTMLInputElement;
30
+ private readonly diagramCanvas: HTMLElement;
31
+ private readonly sidePanelContent: HTMLElement;
32
+ private readonly sidePanelHeader: HTMLElement;
33
+
34
+ // Application state
35
+ private appState: AppState;
36
+
37
+ constructor() {
38
+ // Initialize services
39
+ this.workflowLoader = new WorkflowLoader();
40
+ this.errorHandler = new ErrorHandler();
41
+
42
+ // Get DOM elements
43
+ this.workflowSelector =
44
+ getRequiredElement<HTMLSelectElement>('#workflow-selector');
45
+ this.fileUploadInput = getRequiredElement<HTMLInputElement>('#file-upload');
46
+ this.diagramCanvas = getRequiredElement('#diagram-canvas');
47
+ this.sidePanelContent = getRequiredElement('.side-panel-content');
48
+ this.sidePanelHeader = getRequiredElement('.side-panel-header');
49
+
50
+ // Initialize PlantUML renderer
51
+ this.plantUMLRenderer = new PlantUMLRenderer(this.diagramCanvas);
52
+
53
+ // Set up click handler for interactive elements
54
+ this.plantUMLRenderer.setClickHandler((elementType, elementId, data) => {
55
+ if (elementType === 'state') {
56
+ this.handleElementClick({
57
+ elementType: 'node',
58
+ elementId: elementId,
59
+ data: data as YamlState,
60
+ });
61
+ } else if (elementType === 'transition') {
62
+ this.handleElementClick({
63
+ elementType: 'transition',
64
+ elementId: elementId,
65
+ data: data as TransitionData,
66
+ });
67
+ } else if (elementType === 'clear-selection') {
68
+ this.clearSelection();
69
+ }
70
+ });
71
+
72
+ // Initialize file upload handler
73
+ this.fileUploadHandler = new FileUploadHandler(
74
+ this.fileUploadInput,
75
+ this.workflowLoader
76
+ );
77
+
78
+ // Initialize application state
79
+ this.appState = {
80
+ currentWorkflow: null,
81
+ selectedElement: null,
82
+ highlightedPath: null,
83
+ isLoading: false,
84
+ error: null,
85
+ parentState: null,
86
+ };
87
+
88
+ this.initialize();
89
+ }
90
+
91
+ /**
92
+ * Initialize the application
93
+ */
94
+ private async initialize(): Promise<void> {
95
+ try {
96
+ // Set up event listeners
97
+ this.setupEventListeners();
98
+
99
+ // Populate workflow selector
100
+ await this.populateWorkflowSelector();
101
+ } catch (error) {
102
+ console.error('Failed to initialize application:', error);
103
+ this.errorHandler.showError(
104
+ this.errorHandler.createUserFriendlyError(error)
105
+ );
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Set up event listeners
111
+ */
112
+ private setupEventListeners(): void {
113
+ // Workflow selector change
114
+ this.workflowSelector.addEventListener(
115
+ 'change',
116
+ this.handleWorkflowSelection.bind(this)
117
+ );
118
+
119
+ // File upload handlers
120
+ this.fileUploadHandler.onWorkflowLoaded =
121
+ this.handleWorkflowLoaded.bind(this);
122
+ this.fileUploadHandler.onUploadError = this.handleUploadError.bind(this);
123
+
124
+ // Note: PlantUML renderer doesn't need interaction handlers
125
+ // Interactions will be handled through the side panel
126
+ }
127
+
128
+ /**
129
+ * Populate the workflow selector with built-in workflows
130
+ */
131
+ private async populateWorkflowSelector(): Promise<void> {
132
+ try {
133
+ const workflows = this.workflowLoader.getAvailableWorkflows();
134
+
135
+ // Clear existing options (except the first placeholder)
136
+ while (this.workflowSelector.children.length > 1) {
137
+ const lastChild = this.workflowSelector.lastChild;
138
+ if (lastChild) {
139
+ this.workflowSelector.removeChild(lastChild);
140
+ }
141
+ }
142
+
143
+ // Add workflow options
144
+ for (const workflow of workflows) {
145
+ const option = document.createElement('option');
146
+ option.value = workflow.name;
147
+ // Include domain in option text if available
148
+ const domainText = workflow.domain ? ` [${workflow.domain}]` : '';
149
+ option.textContent = `${workflow.displayName}${domainText}`;
150
+ this.workflowSelector.appendChild(option);
151
+ }
152
+ } catch (error) {
153
+ console.error('Failed to populate workflow selector:', error);
154
+ this.errorHandler.showError('Failed to load available workflows');
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Handle workflow selection from dropdown
160
+ */
161
+ private async handleWorkflowSelection(event: Event): Promise<void> {
162
+ const target = event.target as HTMLSelectElement;
163
+ const workflowName = target.value;
164
+
165
+ if (!workflowName) {
166
+ this.clearVisualization();
167
+ return;
168
+ }
169
+
170
+ try {
171
+ this.setLoadingState(true);
172
+
173
+ const workflow =
174
+ await this.workflowLoader.loadBuiltinWorkflow(workflowName);
175
+ await this.handleWorkflowLoaded(workflow);
176
+ } catch (error) {
177
+ console.error(`Failed to load workflow ${workflowName}:`, error);
178
+ this.errorHandler.showError(
179
+ this.errorHandler.createUserFriendlyError(error)
180
+ );
181
+ } finally {
182
+ this.setLoadingState(false);
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Handle successful workflow loading
188
+ */
189
+ private async handleWorkflowLoaded(
190
+ workflow: YamlStateMachine
191
+ ): Promise<void> {
192
+ this.appState.currentWorkflow = workflow;
193
+ this.appState.selectedElement = null;
194
+ this.appState.highlightedPath = null;
195
+
196
+ // Render the workflow using PlantUML
197
+ await this.plantUMLRenderer.renderWorkflow(workflow);
198
+
199
+ // Show metadata by default when workflow loads
200
+ this.updateSidePanel();
201
+ }
202
+
203
+ /**
204
+ * Handle file upload errors
205
+ */
206
+ private handleUploadError(error: AppError): void {
207
+ console.error('File upload error:', error);
208
+ this.errorHandler.showError(error);
209
+ }
210
+
211
+ /**
212
+ * Handle element clicks in the diagram
213
+ */
214
+ private handleElementClick(event: InteractionEvent): void {
215
+ if (event.elementType === 'node' && event.data && event.elementId) {
216
+ this.selectState(event.elementId, event.data);
217
+ } else if (
218
+ event.elementType === 'transition' &&
219
+ event.data &&
220
+ event.elementId
221
+ ) {
222
+ this.selectTransition(event.elementId, event.data);
223
+ }
224
+ }
225
+
226
+ /**
227
+ /**
228
+ * Select a state node
229
+ */
230
+ private selectState(stateId: string, _nodeData: unknown): void {
231
+ const workflow = this.appState.currentWorkflow;
232
+ if (!workflow || !workflow.states[stateId]) return;
233
+
234
+ const state = workflow.states[stateId];
235
+
236
+ this.appState.selectedElement = {
237
+ type: 'state',
238
+ id: stateId,
239
+ data: state,
240
+ };
241
+
242
+ // Update side panel to show selected state details
243
+ this.updateSidePanel();
244
+ }
245
+
246
+ /**
247
+ * Select a transition link
248
+ */
249
+ private selectTransition(transitionId: string, linkData: unknown): void {
250
+ const workflow = this.appState.currentWorkflow;
251
+ if (!workflow) return;
252
+
253
+ // Cast linkData to TransitionData for type safety
254
+ const transitionInfo = linkData as TransitionData;
255
+
256
+ // Use the linkData passed from the PlantUML renderer
257
+ if (
258
+ transitionInfo &&
259
+ transitionInfo.from &&
260
+ transitionInfo.to &&
261
+ transitionInfo.trigger
262
+ ) {
263
+ const transitionData: TransitionData = {
264
+ trigger: transitionInfo.trigger,
265
+ from: transitionInfo.from,
266
+ to: transitionInfo.to,
267
+ instructions: transitionInfo.instructions || '',
268
+ additional_instructions: transitionInfo.additional_instructions || '',
269
+ transition_reason: transitionInfo.transition_reason || '',
270
+ review_perspectives: transitionInfo.review_perspectives || [],
271
+ };
272
+
273
+ this.appState.selectedElement = {
274
+ type: 'transition',
275
+ id: transitionId,
276
+ data: transitionData,
277
+ };
278
+
279
+ // Update side panel to show selected transition details
280
+ this.updateSidePanel();
281
+ }
282
+ }
283
+
284
+ /**
285
+ * Update the side panel content
286
+ */
287
+ private updateSidePanel(): void {
288
+ console.log('updateSidePanel called', {
289
+ hasWorkflow: !!this.appState.currentWorkflow,
290
+ hasSelectedElement: !!this.appState.selectedElement,
291
+ });
292
+
293
+ if (!this.appState.currentWorkflow) {
294
+ this.sidePanelHeader.innerHTML = '<h2>Details</h2>';
295
+ this.sidePanelContent.innerHTML =
296
+ '<div class="empty-state">Select a workflow to see details</div>';
297
+ return;
298
+ }
299
+
300
+ if (this.appState.selectedElement) {
301
+ console.log('Rendering selected element details');
302
+ this.renderSelectedElementDetails();
303
+ } else {
304
+ console.log('Rendering metadata details (default)');
305
+ // Show workflow metadata by default when no element is selected
306
+ this.renderMetadataDetails();
307
+ }
308
+ }
309
+
310
+ /**
311
+ * Render workflow metadata in side panel
312
+ */
313
+ private renderMetadataDetails(): void {
314
+ const workflow = this.appState.currentWorkflow;
315
+ if (!workflow) return;
316
+ const metadata = workflow.metadata;
317
+
318
+ // Update header
319
+ this.sidePanelHeader.innerHTML = '<h2>Workflow Info</h2>';
320
+
321
+ // Render metadata content
322
+ this.sidePanelContent.innerHTML = `
323
+ <div class="detail-section">
324
+ <h3 class="detail-title">${workflow.name} Workflow</h3>
325
+ <p class="detail-content">${workflow.description || 'No description available'}</p>
326
+ </div>
327
+
328
+ ${
329
+ metadata?.complexity
330
+ ? `
331
+ <div class="detail-section one-line">
332
+ <h4 class="detail-subtitle">Complexity</h4>
333
+ <span class="badge badge-${metadata.complexity}">${metadata.complexity.toUpperCase()}</span>
334
+ </div>
335
+ `
336
+ : ''
337
+ }
338
+
339
+ ${
340
+ metadata?.bestFor?.length
341
+ ? `
342
+ <div class="detail-section">
343
+ <h4 class="detail-subtitle">Best For</h4>
344
+ <ul class="metadata-list">
345
+ ${metadata.bestFor.map(item => `<li>${item}</li>`).join('')}
346
+ </ul>
347
+ </div>
348
+ `
349
+ : ''
350
+ }
351
+
352
+ ${
353
+ metadata?.useCases?.length
354
+ ? `
355
+ <div class="detail-section">
356
+ <h4 class="detail-subtitle">Use Cases</h4>
357
+ <ul class="metadata-list">
358
+ ${metadata.useCases.map(item => `<li>${item}</li>`).join('')}
359
+ </ul>
360
+ </div>
361
+ `
362
+ : ''
363
+ }
364
+
365
+ ${
366
+ metadata?.examples?.length
367
+ ? `
368
+ <div class="detail-section">
369
+ <h4 class="detail-subtitle">Examples</h4>
370
+ <ul class="metadata-list">
371
+ ${metadata.examples.map(item => `<li>${item}</li>`).join('')}
372
+ </ul>
373
+ </div>
374
+ `
375
+ : ''
376
+ }
377
+
378
+ <div class="detail-section">
379
+ <p class="detail-hint">Click on states or transitions to see detailed information.</p>
380
+ </div>
381
+ `;
382
+ }
383
+
384
+ /**
385
+ * Render selected element details in side panel
386
+ */
387
+ private renderSelectedElementDetails(): void {
388
+ const element = this.appState.selectedElement;
389
+ if (!element) return;
390
+
391
+ if (element.type === 'state' && element.data) {
392
+ // Type guard to ensure data is YamlState
393
+ const stateData = element.data as YamlState;
394
+ this.renderStateDetailsWithHeader(element.id, stateData);
395
+ } else if (element.type === 'transition') {
396
+ this.renderTransitionDetailsWithHeader(element.data as TransitionData);
397
+ }
398
+ }
399
+
400
+ /**
401
+ * Render state details with back button in header
402
+ */
403
+ private renderStateDetailsWithHeader(
404
+ stateId: string,
405
+ stateData: YamlState
406
+ ): void {
407
+ const workflow = this.appState.currentWorkflow;
408
+ if (!workflow) return;
409
+ const isInitial = stateId === workflow.initial_state;
410
+
411
+ // Update header with back button
412
+ this.sidePanelHeader.innerHTML = `
413
+ <button class="back-button" style="
414
+ background: none;
415
+ border: none;
416
+ color: #6b7280;
417
+ cursor: pointer;
418
+ font-size: 18px;
419
+ padding: 4px;
420
+ margin-right: 8px;
421
+ border-radius: 4px;
422
+ transition: all 0.2s ease;
423
+ " title="Back to Overview">←</button>
424
+ <h2>State: ${stateId}</h2>
425
+ `;
426
+
427
+ const backButton = this.sidePanelHeader.querySelector('.back-button');
428
+ backButton?.addEventListener('click', () => {
429
+ this.clearSelection();
430
+ });
431
+
432
+ backButton?.addEventListener('mouseenter', () => {
433
+ (backButton as HTMLElement).style.backgroundColor = '#f3f4f6';
434
+ });
435
+
436
+ backButton?.addEventListener('mouseleave', () => {
437
+ (backButton as HTMLElement).style.backgroundColor = 'transparent';
438
+ });
439
+
440
+ // Render state content
441
+ this.sidePanelContent.innerHTML = `
442
+ <div class="detail-section">
443
+ <h3 class="detail-title">
444
+ ${stateId}
445
+ ${isInitial ? '<span class="badge badge-success">Initial</span>' : ''}
446
+ </h3>
447
+ <p class="detail-content">${stateData.description}</p>
448
+ </div>
449
+
450
+ <div class="detail-section">
451
+ <h4 class="detail-subtitle">Default Instructions</h4>
452
+ <div class="code-block">${stateData.default_instructions}</div>
453
+ </div>
454
+
455
+ <div class="detail-section">
456
+ <h4 class="detail-subtitle">Transitions (${stateData.transitions.length})</h4>
457
+ <ul class="transitions-list">
458
+ ${stateData.transitions
459
+ .map(
460
+ (transition: YamlTransition) => `
461
+ <li class="transition-item clickable-transition" data-from="${stateId}" data-to="${transition.to}" data-trigger="${transition.trigger}">
462
+ <div class="transition-trigger">${transition.trigger}</div>
463
+ <div class="transition-target">→ ${transition.to}</div>
464
+ <div class="transition-reason">${transition.transition_reason}</div>
465
+ </li>
466
+ `
467
+ )
468
+ .join('')}
469
+ </ul>
470
+ </div>
471
+ `;
472
+
473
+ // Add click handlers to transitions
474
+ const transitionItems = this.sidePanelContent.querySelectorAll(
475
+ '.clickable-transition'
476
+ );
477
+ for (const item of transitionItems) {
478
+ item.addEventListener('click', e => {
479
+ e.stopPropagation();
480
+ const fromState = item.getAttribute('data-from');
481
+ const toState = item.getAttribute('data-to');
482
+ const trigger = item.getAttribute('data-trigger');
483
+
484
+ if (fromState && toState && trigger) {
485
+ // Find the full transition data
486
+ const fullTransition = stateData.transitions.find(
487
+ (t: YamlTransition) => t.to === toState && t.trigger === trigger
488
+ );
489
+
490
+ if (fullTransition) {
491
+ // Store the parent state for back navigation
492
+ this.appState.parentState = { id: stateId, data: stateData };
493
+
494
+ this.selectTransition(`${fromState}->${toState}`, {
495
+ from: fromState,
496
+ to: toState,
497
+ trigger: trigger,
498
+ instructions: fullTransition.instructions,
499
+ additional_instructions: fullTransition.additional_instructions,
500
+ transition_reason: fullTransition.transition_reason,
501
+ });
502
+ }
503
+ }
504
+ });
505
+
506
+ // Add hover effects
507
+ item.addEventListener('mouseenter', () => {
508
+ (item as HTMLElement).style.backgroundColor = '#f0f9ff';
509
+ (item as HTMLElement).style.cursor = 'pointer';
510
+ });
511
+
512
+ item.addEventListener('mouseleave', () => {
513
+ (item as HTMLElement).style.backgroundColor = '';
514
+ (item as HTMLElement).style.cursor = '';
515
+ });
516
+ }
517
+ }
518
+
519
+ /**
520
+ * Render transition details with back button in header
521
+ */
522
+ private renderTransitionDetailsWithHeader(
523
+ transitionData: TransitionData
524
+ ): void {
525
+ // Update header with back button
526
+ this.sidePanelHeader.innerHTML = `
527
+ <button class="back-button" style="
528
+ background: none;
529
+ border: none;
530
+ color: #6b7280;
531
+ cursor: pointer;
532
+ font-size: 18px;
533
+ padding: 4px;
534
+ margin-right: 8px;
535
+ border-radius: 4px;
536
+ transition: all 0.2s ease;
537
+ " title="Back to State">←</button>
538
+ <h2>Transition: ${transitionData.trigger}</h2>
539
+ `;
540
+
541
+ const backButton = this.sidePanelHeader.querySelector('.back-button');
542
+ backButton?.addEventListener('click', () => {
543
+ this.goBackToParentState();
544
+ });
545
+
546
+ backButton?.addEventListener('mouseenter', () => {
547
+ (backButton as HTMLElement).style.backgroundColor = '#f3f4f6';
548
+ });
549
+
550
+ backButton?.addEventListener('mouseleave', () => {
551
+ (backButton as HTMLElement).style.backgroundColor = 'transparent';
552
+ });
553
+
554
+ // Render transition content
555
+ this.sidePanelContent.innerHTML = `
556
+ <div class="detail-section">
557
+ <h3 class="detail-title">Transition: ${transitionData.trigger}</h3>
558
+ <p class="detail-content">
559
+ <strong>${transitionData.from}</strong> → <strong>${transitionData.to}</strong>
560
+ </p>
561
+ </div>
562
+
563
+ <div class="detail-section">
564
+ <h4 class="detail-subtitle">Reason</h4>
565
+ <p class="detail-content">${transitionData.transition_reason}</p>
566
+ </div>
567
+
568
+ ${
569
+ transitionData.instructions
570
+ ? `
571
+ <div class="detail-section">
572
+ <h4 class="detail-subtitle">Instructions</h4>
573
+ <div class="code-block">${transitionData.instructions}</div>
574
+ </div>
575
+ `
576
+ : ''
577
+ }
578
+
579
+ ${
580
+ transitionData.additional_instructions
581
+ ? `
582
+ <div class="detail-section">
583
+ <h4 class="detail-subtitle">Additional Instructions</h4>
584
+ <div class="code-block">${transitionData.additional_instructions}</div>
585
+ </div>
586
+ `
587
+ : ''
588
+ }
589
+
590
+ ${
591
+ transitionData.review_perspectives?.length
592
+ ? `
593
+ <div class="detail-section">
594
+ <h4 class="detail-subtitle">Review Perspectives (${transitionData.review_perspectives.length})</h4>
595
+ ${transitionData.review_perspectives
596
+ .map(
597
+ review => `
598
+ <div class="review-perspective">
599
+ <h5 class="review-role">${review.perspective.replace(/_/g, ' ').toUpperCase()}</h5>
600
+ <p class="review-prompt">${review.prompt}</p>
601
+ </div>
602
+ `
603
+ )
604
+ .join('')}
605
+ </div>
606
+ `
607
+ : `<!-- No review perspectives found -->`
608
+ }
609
+ `;
610
+ }
611
+
612
+ /**
613
+ * Go back to parent state from transition view
614
+ */
615
+ private goBackToParentState(): void {
616
+ if (this.appState.parentState) {
617
+ this.appState.selectedElement = {
618
+ type: 'state',
619
+ id: this.appState.parentState.id,
620
+ data: this.appState.parentState.data,
621
+ };
622
+ this.appState.parentState = null;
623
+ this.updateSidePanel();
624
+ } else {
625
+ this.clearSelection();
626
+ }
627
+ }
628
+
629
+ /**
630
+ * Clear selection and return to overview
631
+ */
632
+ private clearSelection(): void {
633
+ this.appState.selectedElement = null;
634
+ this.appState.parentState = null;
635
+
636
+ // Reset header
637
+ this.sidePanelHeader.innerHTML = '<h2>Details</h2>';
638
+
639
+ this.updateSidePanel();
640
+ }
641
+
642
+ /**
643
+ /**
644
+ * Clear the visualization
645
+ */
646
+ private clearVisualization(): void {
647
+ this.appState.currentWorkflow = null;
648
+ this.appState.selectedElement = null;
649
+ this.appState.highlightedPath = null;
650
+
651
+ this.diagramCanvas.innerHTML =
652
+ '<div class="loading-message">Select a workflow to visualize</div>';
653
+ this.updateSidePanel();
654
+ }
655
+
656
+ /**
657
+ * Set loading state
658
+ */
659
+ private setLoadingState(isLoading: boolean): void {
660
+ this.appState.isLoading = isLoading;
661
+
662
+ if (isLoading) {
663
+ this.diagramCanvas.innerHTML =
664
+ '<div class="loading-message">Loading workflow...</div>';
665
+ }
666
+ // Note: When not loading, the PlantUMLRenderer will clear the canvas and render the visualization
667
+ }
668
+ }
669
+
670
+ // Initialize the application when DOM is loaded
671
+ document.addEventListener('DOMContentLoaded', () => {
672
+ new WorkflowVisualizerApp();
673
+ });