@codemcp/workflows 5.3.0 → 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,84 @@
1
+ /**
2
+ * UI-specific type definitions for the workflow visualizer
3
+ */
4
+
5
+ // Import existing types from the main project
6
+ import type {
7
+ YamlStateMachine,
8
+ YamlState,
9
+ YamlTransition,
10
+ } from '@codemcp/workflows-core';
11
+
12
+ // Re-export for convenience
13
+ export type { YamlStateMachine, YamlState, YamlTransition };
14
+
15
+ /**
16
+ * Interaction event for diagram elements
17
+ */
18
+ export interface InteractionEvent {
19
+ elementType: 'node' | 'edge' | 'transition';
20
+ elementId?: string;
21
+ data?: YamlState | TransitionData;
22
+ originalEvent?: Event;
23
+ }
24
+
25
+ /**
26
+ * Application state interface
27
+ */
28
+ export interface AppState {
29
+ currentWorkflow: YamlStateMachine | null;
30
+ selectedElement: SelectedElement | null;
31
+ highlightedPath: string[] | null;
32
+ isLoading: boolean;
33
+ error: string | null;
34
+ parentState: { id: string; data: YamlState } | null;
35
+ }
36
+
37
+ /**
38
+ * Selected element in the diagram
39
+ */
40
+ export interface SelectedElement {
41
+ type: 'state' | 'transition';
42
+ id: string;
43
+ data: YamlState | TransitionData;
44
+ }
45
+
46
+ /**
47
+ * Transition data with additional metadata
48
+ */
49
+ export interface TransitionData {
50
+ trigger: string;
51
+ from: string;
52
+ to: string;
53
+ instructions?: string;
54
+ additional_instructions?: string;
55
+ transition_reason: string;
56
+ review_perspectives?: Array<{
57
+ perspective: string;
58
+ prompt: string;
59
+ }>;
60
+ }
61
+
62
+ /**
63
+ * Workflow metadata for the selector
64
+ */
65
+ export interface WorkflowMetadata {
66
+ name: string;
67
+ displayName: string;
68
+ source: 'builtin' | 'uploaded';
69
+ domain?: string;
70
+ }
71
+
72
+ /**
73
+ * Error types for user feedback
74
+ */
75
+ export interface AppError {
76
+ type: 'validation' | 'network' | 'parsing' | 'unknown';
77
+ message: string;
78
+ details?: string;
79
+ }
80
+
81
+ /**
82
+ * Loading states
83
+ */
84
+ export type LoadingState = 'idle' | 'loading' | 'success' | 'error';
@@ -0,0 +1,95 @@
1
+ /**
2
+ * D3.js and visualization-specific type definitions
3
+ */
4
+
5
+ import * as d3 from 'd3';
6
+ import { YamlState, YamlTransition } from './ui-types';
7
+
8
+ /**
9
+ * Node data for D3.js force simulation
10
+ */
11
+ export interface DiagramNode extends d3.SimulationNodeDatum {
12
+ id: string;
13
+ label: string;
14
+ state: YamlState;
15
+ isInitial: boolean;
16
+ x?: number;
17
+ y?: number;
18
+ fx?: number | null;
19
+ fy?: number | null;
20
+ }
21
+
22
+ /**
23
+ * Link data for D3.js force simulation
24
+ */
25
+ export interface DiagramLink extends d3.SimulationLinkDatum<DiagramNode> {
26
+ id: string;
27
+ source: string | DiagramNode;
28
+ target: string | DiagramNode;
29
+ transition: YamlTransition;
30
+ label: string;
31
+ isSelfLoop: boolean;
32
+ }
33
+
34
+ /**
35
+ * Diagram dimensions and layout configuration
36
+ */
37
+ export interface DiagramConfig {
38
+ width: number;
39
+ height: number;
40
+ nodeRadius: number;
41
+ linkDistance: number;
42
+ chargeStrength: number;
43
+ padding: {
44
+ top: number;
45
+ right: number;
46
+ bottom: number;
47
+ left: number;
48
+ };
49
+ }
50
+
51
+ /**
52
+ * Visual styling configuration
53
+ */
54
+ export interface DiagramStyle {
55
+ node: {
56
+ fill: string;
57
+ stroke: string;
58
+ strokeWidth: number;
59
+ selectedFill: string;
60
+ selectedStroke: string;
61
+ initialFill: string;
62
+ };
63
+ link: {
64
+ stroke: string;
65
+ strokeWidth: number;
66
+ selectedStroke: string;
67
+ selectedStrokeWidth: number;
68
+ arrowSize: number;
69
+ };
70
+ text: {
71
+ fontSize: string;
72
+ fontFamily: string;
73
+ fill: string;
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Interaction event data
79
+ */
80
+ export interface InteractionEvent {
81
+ type: 'click' | 'hover' | 'unhover';
82
+ elementType: 'node' | 'link' | 'background';
83
+ elementId?: string;
84
+ data?: DiagramNode | DiagramLink;
85
+ originalEvent: Event;
86
+ }
87
+
88
+ /**
89
+ * Layout algorithm options
90
+ */
91
+ export interface LayoutOptions {
92
+ algorithm: 'force' | 'hierarchical' | 'circular';
93
+ iterations: number;
94
+ stabilizationThreshold: number;
95
+ }
@@ -0,0 +1,12 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ // Declare raw imports for YAML files
4
+ declare module '*.yaml?raw' {
5
+ const content: string;
6
+ export default content;
7
+ }
8
+
9
+ declare module '*.yml?raw' {
10
+ const content: string;
11
+ export default content;
12
+ }
@@ -0,0 +1,206 @@
1
+ /**
2
+ * DOM manipulation utility functions
3
+ * Provides helper functions for common DOM operations
4
+ */
5
+
6
+ /**
7
+ * Get a required DOM element with type safety
8
+ */
9
+ export function getRequiredElement<T extends HTMLElement>(
10
+ selector: string,
11
+ context: Document | HTMLElement = document
12
+ ): T {
13
+ const element = context.querySelector(selector) as T;
14
+
15
+ if (!element) {
16
+ throw new Error(`Required element not found: ${selector}`);
17
+ }
18
+
19
+ return element;
20
+ }
21
+
22
+ /**
23
+ * Get an optional DOM element with type safety
24
+ */
25
+ export function getOptionalElement<T extends HTMLElement>(
26
+ selector: string,
27
+ context: Document | HTMLElement = document
28
+ ): T | null {
29
+ return context.querySelector(selector) as T | null;
30
+ }
31
+
32
+ /**
33
+ * Get all elements matching a selector with type safety
34
+ */
35
+ export function getAllElements<T extends HTMLElement>(
36
+ selector: string,
37
+ context: Document | HTMLElement = document
38
+ ): T[] {
39
+ return Array.from(context.querySelectorAll(selector)) as T[];
40
+ }
41
+
42
+ /**
43
+ * Create an element with attributes and content
44
+ */
45
+ export function createElement<K extends keyof HTMLElementTagNameMap>(
46
+ tagName: K,
47
+ attributes: Record<string, string> = {},
48
+ textContent?: string
49
+ ): HTMLElementTagNameMap[K] {
50
+ const element = document.createElement(tagName);
51
+
52
+ // Set attributes
53
+ for (const [key, value] of Object.entries(attributes)) {
54
+ element.setAttribute(key, value);
55
+ }
56
+
57
+ // Set text content if provided
58
+ if (textContent !== undefined) {
59
+ element.textContent = textContent;
60
+ }
61
+
62
+ return element;
63
+ }
64
+
65
+ /**
66
+ * Add CSS classes to an element
67
+ */
68
+ export function addClasses(
69
+ element: HTMLElement,
70
+ ...classNames: string[]
71
+ ): void {
72
+ element.classList.add(...classNames);
73
+ }
74
+
75
+ /**
76
+ * Remove CSS classes from an element
77
+ */
78
+ export function removeClasses(
79
+ element: HTMLElement,
80
+ ...classNames: string[]
81
+ ): void {
82
+ element.classList.remove(...classNames);
83
+ }
84
+
85
+ /**
86
+ * Toggle CSS classes on an element
87
+ */
88
+ export function toggleClasses(
89
+ element: HTMLElement,
90
+ ...classNames: string[]
91
+ ): void {
92
+ for (const className of classNames) {
93
+ element.classList.toggle(className);
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Check if element has a CSS class
99
+ */
100
+ export function hasClass(element: HTMLElement, className: string): boolean {
101
+ return element.classList.contains(className);
102
+ }
103
+
104
+ /**
105
+ * Set multiple CSS styles on an element
106
+ */
107
+ export function setStyles(
108
+ element: HTMLElement,
109
+ styles: Record<string, string>
110
+ ): void {
111
+ for (const [property, value] of Object.entries(styles)) {
112
+ element.style.setProperty(property, value);
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Clear all children from an element
118
+ */
119
+ export function clearChildren(element: HTMLElement): void {
120
+ while (element.firstChild) {
121
+ element.removeChild(element.firstChild);
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Append multiple children to an element
127
+ */
128
+ export function appendChildren(
129
+ parent: HTMLElement,
130
+ ...children: HTMLElement[]
131
+ ): void {
132
+ for (const child of children) {
133
+ parent.appendChild(child);
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Show an element by removing 'hidden' class
139
+ */
140
+ export function showElement(element: HTMLElement): void {
141
+ element.classList.remove('hidden');
142
+ element.style.display = '';
143
+ }
144
+
145
+ /**
146
+ * Hide an element by adding 'hidden' class
147
+ */
148
+ export function hideElement(element: HTMLElement): void {
149
+ element.classList.add('hidden');
150
+ }
151
+
152
+ /**
153
+ * Check if an element is visible
154
+ */
155
+ export function isElementVisible(element: HTMLElement): boolean {
156
+ return (
157
+ !element.classList.contains('hidden') &&
158
+ element.style.display !== 'none' &&
159
+ element.offsetParent !== null
160
+ );
161
+ }
162
+
163
+ /**
164
+ * Safely set innerHTML with basic XSS protection
165
+ */
166
+ export function setSafeInnerHTML(element: HTMLElement, html: string): void {
167
+ // Basic sanitization - remove script tags and event handlers
168
+ const sanitized = html
169
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
170
+ .replace(/\son\w+\s*=\s*["'][^"']*["']/gi, '');
171
+
172
+ element.innerHTML = sanitized;
173
+ }
174
+
175
+ /**
176
+ * Debounce a function call
177
+ */
178
+ export function debounce<T extends (...args: unknown[]) => unknown>(
179
+ func: T,
180
+ delay: number
181
+ ): (...args: Parameters<T>) => void {
182
+ let timeoutId: number;
183
+
184
+ return (...args: Parameters<T>) => {
185
+ clearTimeout(timeoutId);
186
+ timeoutId = window.setTimeout(() => func(...args), delay);
187
+ };
188
+ }
189
+
190
+ /**
191
+ * Throttle a function call
192
+ */
193
+ export function throttle<T extends (...args: unknown[]) => unknown>(
194
+ func: T,
195
+ delay: number
196
+ ): (...args: Parameters<T>) => void {
197
+ let lastCall = 0;
198
+
199
+ return (...args: Parameters<T>) => {
200
+ const now = Date.now();
201
+ if (now - lastCall >= delay) {
202
+ lastCall = now;
203
+ func(...args);
204
+ }
205
+ };
206
+ }
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Error handling and user feedback utility
3
+ * Manages error display and user notifications
4
+ */
5
+
6
+ import { AppError } from '../types/ui-types';
7
+
8
+ export class ErrorHandler {
9
+ private readonly errorContainer: HTMLElement;
10
+ private readonly errorText: HTMLElement;
11
+ private readonly errorClose: HTMLElement;
12
+ private currentTimeout: number | null = null;
13
+ private readonly boundHideError: (event: Event) => void;
14
+
15
+ constructor() {
16
+ this.errorContainer = this.getRequiredElement('#error-container');
17
+ this.errorText = this.getRequiredElement('.error-text');
18
+ this.errorClose = this.getRequiredElement('.error-close');
19
+ this.boundHideError = this.hideError.bind(this);
20
+
21
+ this.setupEventListeners();
22
+ }
23
+
24
+ /**
25
+ * Set up event listeners for error handling
26
+ */
27
+ private setupEventListeners(): void {
28
+ this.errorClose.addEventListener('click', this.boundHideError);
29
+
30
+ // Hide error when clicking outside
31
+ this.errorContainer.addEventListener('click', (event: Event) => {
32
+ if (event.target === this.errorContainer) {
33
+ this.hideError();
34
+ }
35
+ });
36
+ }
37
+
38
+ /**
39
+ * Display an error message to the user
40
+ */
41
+ public showError(error: AppError | string): void {
42
+ const errorMessage = typeof error === 'string' ? error : error.message;
43
+ const errorType = typeof error === 'string' ? 'unknown' : error.type;
44
+
45
+ // Clear any existing timeout
46
+ if (this.currentTimeout) {
47
+ clearTimeout(this.currentTimeout);
48
+ this.currentTimeout = null;
49
+ }
50
+
51
+ // Update error content
52
+ this.errorText.textContent = errorMessage;
53
+
54
+ // Add error type class for styling
55
+ this.errorContainer.className = `error-container error-${errorType}`;
56
+
57
+ // Show error container
58
+ this.errorContainer.classList.remove('hidden');
59
+
60
+ // Auto-hide after 10 seconds for non-critical errors
61
+ if (errorType !== 'validation') {
62
+ this.currentTimeout = window.setTimeout(() => {
63
+ this.hideError();
64
+ }, 10000);
65
+ }
66
+
67
+ // Log error for debugging
68
+ console.error('ErrorHandler:', error);
69
+ }
70
+
71
+ /**
72
+ * Hide the error message
73
+ */
74
+ public hideError(): void {
75
+ this.errorContainer.classList.add('hidden');
76
+
77
+ if (this.currentTimeout) {
78
+ clearTimeout(this.currentTimeout);
79
+ this.currentTimeout = null;
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Show a success message
85
+ */
86
+ public showSuccess(message: string): void {
87
+ // For now, just log success messages
88
+ // Could be extended to show success notifications
89
+ console.log('Success:', message);
90
+ }
91
+
92
+ /**
93
+ * Show a loading message
94
+ */
95
+ public showLoading(message: string): void {
96
+ // For now, just log loading messages
97
+ // Could be extended to show loading indicators
98
+ console.log('Loading:', message);
99
+ }
100
+
101
+ /**
102
+ * Create a user-friendly error message based on error type
103
+ */
104
+ public createUserFriendlyError(error: unknown): AppError {
105
+ if (error instanceof Error) {
106
+ // Check for specific error patterns
107
+ if (error.message.includes('fetch')) {
108
+ return {
109
+ type: 'network',
110
+ message:
111
+ 'Failed to load workflow. Please check your connection and try again.',
112
+ details: error.message,
113
+ };
114
+ }
115
+
116
+ if (error.message.includes('YAML') || error.message.includes('parsing')) {
117
+ return {
118
+ type: 'parsing',
119
+ message: 'Invalid YAML format. Please check your workflow file.',
120
+ details: error.message,
121
+ };
122
+ }
123
+
124
+ if (error.message.includes('validation')) {
125
+ return {
126
+ type: 'validation',
127
+ message: error.message,
128
+ details: error.message,
129
+ };
130
+ }
131
+
132
+ return {
133
+ type: 'unknown',
134
+ message: error.message || 'An unexpected error occurred.',
135
+ details: error.message,
136
+ };
137
+ }
138
+
139
+ return {
140
+ type: 'unknown',
141
+ message: 'An unexpected error occurred.',
142
+ details: String(error),
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Get a required DOM element with error handling
148
+ */
149
+ private getRequiredElement(selector: string): HTMLElement {
150
+ const element = document.querySelector(selector) as HTMLElement;
151
+
152
+ if (!element) {
153
+ throw new Error(`Required element not found: ${selector}`);
154
+ }
155
+
156
+ return element;
157
+ }
158
+
159
+ /**
160
+ * Clean up event listeners
161
+ */
162
+ public destroy(): void {
163
+ this.errorClose.removeEventListener('click', this.boundHideError);
164
+
165
+ if (this.currentTimeout) {
166
+ clearTimeout(this.currentTimeout);
167
+ this.currentTimeout = null;
168
+ }
169
+ }
170
+ }
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Browser-compatible PlantUML encoder
3
+ * Uses native JavaScript compression instead of pako
4
+ */
5
+
6
+ /**
7
+ * Encode PlantUML code using native compression
8
+ */
9
+ export async function encodePlantUML(plantUMLCode: string): Promise<string> {
10
+ try {
11
+ // Convert string to UTF-8 bytes
12
+ const utf8Bytes = new TextEncoder().encode(plantUMLCode);
13
+
14
+ // Use native compression if available
15
+ if ('CompressionStream' in window) {
16
+ const stream = new CompressionStream('deflate-raw');
17
+ const writer = stream.writable.getWriter();
18
+ const reader = stream.readable.getReader();
19
+
20
+ writer.write(utf8Bytes);
21
+ writer.close();
22
+
23
+ const chunks = [];
24
+ let done = false;
25
+ while (!done) {
26
+ const { value, done: readerDone } = await reader.read();
27
+ done = readerDone;
28
+ if (value) chunks.push(value);
29
+ }
30
+
31
+ const compressed = new Uint8Array(
32
+ chunks.reduce((acc, chunk) => acc + chunk.length, 0)
33
+ );
34
+ let offset = 0;
35
+ for (const chunk of chunks) {
36
+ compressed.set(chunk, offset);
37
+ offset += chunk.length;
38
+ }
39
+
40
+ return encode64(compressed);
41
+ } else {
42
+ // Fallback to base64 encoding
43
+ return encodePlantUMLFallback(plantUMLCode);
44
+ }
45
+ } catch (error) {
46
+ console.error('Failed to encode PlantUML:', error);
47
+ return encodePlantUMLFallback(plantUMLCode);
48
+ }
49
+ }
50
+
51
+ /**
52
+ * PlantUML's custom base64-like encoding
53
+ */
54
+ function encode64(data: Uint8Array): string {
55
+ let r = '';
56
+ for (let i = 0; i < data.length; i += 3) {
57
+ if (i + 2 === data.length) {
58
+ r += append3bytes(data[i], data[i + 1], 0);
59
+ } else if (i + 1 === data.length) {
60
+ r += append3bytes(data[i], 0, 0);
61
+ } else {
62
+ r += append3bytes(data[i], data[i + 1], data[i + 2]);
63
+ }
64
+ }
65
+ return r;
66
+ }
67
+
68
+ /**
69
+ * Helper function for PlantUML's custom encoding
70
+ */
71
+ function append3bytes(b1: number, b2: number, b3: number): string {
72
+ const c1 = b1 >> 2;
73
+ const c2 = ((b1 & 0x3) << 4) | (b2 >> 4);
74
+ const c3 = ((b2 & 0xf) << 2) | (b3 >> 6);
75
+ const c4 = b3 & 0x3f;
76
+ let r = '';
77
+ r += encode6bit(c1 & 0x3f);
78
+ r += encode6bit(c2 & 0x3f);
79
+ r += encode6bit(c3 & 0x3f);
80
+ r += encode6bit(c4 & 0x3f);
81
+ return r;
82
+ }
83
+
84
+ /**
85
+ * PlantUML's custom 6-bit encoding
86
+ */
87
+ function encode6bit(b: number): string {
88
+ if (b < 10) {
89
+ return String.fromCharCode(48 + b);
90
+ }
91
+ b -= 10;
92
+ if (b < 26) {
93
+ return String.fromCharCode(65 + b);
94
+ }
95
+ b -= 26;
96
+ if (b < 26) {
97
+ return String.fromCharCode(97 + b);
98
+ }
99
+ b -= 26;
100
+ if (b === 0) {
101
+ return '-';
102
+ }
103
+ if (b === 1) {
104
+ return '_';
105
+ }
106
+ return '?';
107
+ }
108
+
109
+ /**
110
+ * Fallback encoder using base64 with ~1 header
111
+ */
112
+ export function encodePlantUMLFallback(plantUMLCode: string): string {
113
+ try {
114
+ const utf8String = unescape(encodeURIComponent(plantUMLCode));
115
+ const base64 = btoa(utf8String);
116
+ return '~1' + base64;
117
+ } catch (error) {
118
+ console.error('Failed to encode PlantUML (fallback):', error);
119
+ throw new Error('PlantUML fallback encoding failed');
120
+ }
121
+ }