@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.
- package/README.md +91 -0
- package/package.json +77 -17
- package/packages/cli/dist/chunk-R5U7XKVJ.js +16 -0
- package/packages/cli/dist/chunk-RTDQR2KY.js +6718 -0
- package/packages/cli/dist/cli-CZ4FMSWR.js +1421 -0
- package/packages/cli/dist/dist-KZOA4GL5.js +65 -0
- package/packages/cli/dist/dist-UGVUJIDN.js +14475 -0
- package/packages/cli/dist/index.js +21 -0
- package/packages/cli/package.json +28 -0
- package/packages/core/dist/beads-integration.d.ts +50 -0
- package/packages/core/dist/beads-integration.js +387 -0
- package/packages/core/dist/beads-integration.js.map +1 -0
- package/packages/core/dist/beads-state-manager.d.ts +58 -0
- package/packages/core/dist/beads-state-manager.js +212 -0
- package/packages/core/dist/beads-state-manager.js.map +1 -0
- package/packages/core/dist/config-manager.d.ts +24 -0
- package/packages/core/dist/config-manager.js +68 -0
- package/packages/core/dist/config-manager.js.map +1 -0
- package/packages/core/dist/conversation-manager.d.ts +98 -0
- package/packages/core/dist/conversation-manager.js +382 -0
- package/packages/core/dist/conversation-manager.js.map +1 -0
- package/packages/core/dist/file-detection-manager.d.ts +53 -0
- package/packages/core/dist/file-detection-manager.js +221 -0
- package/packages/core/dist/file-detection-manager.js.map +1 -0
- package/packages/core/dist/file-storage.d.ts +93 -0
- package/packages/core/dist/file-storage.js +301 -0
- package/packages/core/dist/file-storage.js.map +1 -0
- package/packages/core/dist/git-manager.d.ts +22 -0
- package/packages/core/dist/git-manager.js +123 -0
- package/packages/core/dist/git-manager.js.map +1 -0
- package/packages/core/dist/index.d.ts +24 -0
- package/packages/core/dist/index.js +31 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/instruction-generator.d.ts +40 -0
- package/packages/core/dist/instruction-generator.js +89 -0
- package/packages/core/dist/instruction-generator.js.map +1 -0
- package/packages/core/dist/interaction-logger.d.ts +37 -0
- package/packages/core/dist/interaction-logger.js +87 -0
- package/packages/core/dist/interaction-logger.js.map +1 -0
- package/packages/core/dist/interfaces/index.d.ts +9 -0
- package/packages/core/dist/interfaces/index.js +10 -0
- package/packages/core/dist/interfaces/index.js.map +1 -0
- package/packages/core/dist/interfaces/instruction-generator.interface.d.ts +41 -0
- package/packages/core/dist/interfaces/instruction-generator.interface.js +8 -0
- package/packages/core/dist/interfaces/instruction-generator.interface.js.map +1 -0
- package/packages/core/dist/interfaces/plan-manager.interface.d.ts +55 -0
- package/packages/core/dist/interfaces/plan-manager.interface.js +8 -0
- package/packages/core/dist/interfaces/plan-manager.interface.js.map +1 -0
- package/packages/core/dist/interfaces/task-backend-client.interface.d.ts +52 -0
- package/packages/core/dist/interfaces/task-backend-client.interface.js +8 -0
- package/packages/core/dist/interfaces/task-backend-client.interface.js.map +1 -0
- package/packages/core/dist/logger.d.ts +64 -0
- package/packages/core/dist/logger.js +283 -0
- package/packages/core/dist/logger.js.map +1 -0
- package/packages/core/dist/path-validation-utils.d.ts +75 -0
- package/packages/core/dist/path-validation-utils.js +238 -0
- package/packages/core/dist/path-validation-utils.js.map +1 -0
- package/packages/core/dist/persistence-interface.d.ts +91 -0
- package/packages/core/dist/persistence-interface.js +9 -0
- package/packages/core/dist/persistence-interface.js.map +1 -0
- package/{dist/components/beads/beads-plan-manager.d.ts → packages/core/dist/plan-manager.d.ts} +15 -15
- package/{dist/components/beads/beads-plan-manager.js → packages/core/dist/plan-manager.js} +66 -50
- package/packages/core/dist/plan-manager.js.map +1 -0
- package/packages/core/dist/project-docs-manager.d.ts +119 -0
- package/packages/core/dist/project-docs-manager.js +366 -0
- package/packages/core/dist/project-docs-manager.js.map +1 -0
- package/packages/core/dist/state-machine-loader.d.ts +61 -0
- package/packages/core/dist/state-machine-loader.js +273 -0
- package/packages/core/dist/state-machine-loader.js.map +1 -0
- package/packages/core/dist/state-machine-types.d.ts +64 -0
- package/packages/core/dist/state-machine-types.js +7 -0
- package/packages/core/dist/state-machine-types.js.map +1 -0
- package/packages/core/dist/state-machine.d.ts +52 -0
- package/packages/core/dist/state-machine.js +256 -0
- package/packages/core/dist/state-machine.js.map +1 -0
- package/packages/core/dist/system-prompt-generator.d.ts +14 -0
- package/packages/core/dist/system-prompt-generator.js +42 -0
- package/packages/core/dist/system-prompt-generator.js.map +1 -0
- package/packages/core/dist/task-backend.d.ts +45 -0
- package/packages/core/dist/task-backend.js +176 -0
- package/packages/core/dist/task-backend.js.map +1 -0
- package/packages/core/dist/template-manager.d.ts +61 -0
- package/packages/core/dist/template-manager.js +231 -0
- package/packages/core/dist/template-manager.js.map +1 -0
- package/packages/core/dist/transition-engine.d.ts +77 -0
- package/packages/core/dist/transition-engine.js +244 -0
- package/packages/core/dist/transition-engine.js.map +1 -0
- package/packages/core/dist/types.d.ts +54 -0
- package/packages/core/dist/types.js +5 -0
- package/packages/core/dist/workflow-manager.d.ts +89 -0
- package/packages/core/dist/workflow-manager.js +468 -0
- package/packages/core/dist/workflow-manager.js.map +1 -0
- package/packages/core/package.json +33 -0
- package/packages/docs/.vitepress/dist/.gitignore +2 -0
- package/packages/docs/.vitepress/dist/404.html +23 -0
- package/packages/docs/.vitepress/dist/assets/app.Dz3lZH3M.js +1 -0
- package/packages/docs/.vitepress/dist/assets/chunks/framework.DZS7lpav.js +19 -0
- package/packages/docs/.vitepress/dist/assets/chunks/theme.q5Ewb3F1.js +206 -0
- package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.js +130 -0
- package/packages/docs/.vitepress/dist/assets/dev_ARCHITECTURE.md.da_vFDwM.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.js +72 -0
- package/packages/docs/.vitepress/dist/assets/dev_DEVELOPMENT.md.DWl9cccE.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.js +34 -0
- package/packages/docs/.vitepress/dist/assets/dev_LOGGING.md.BebvbW7z.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.js +1 -0
- package/packages/docs/.vitepress/dist/assets/dev_PUBLISHING.md.CQqbiIOF.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.js +2 -0
- package/packages/docs/.vitepress/dist/assets/index.md.D6ROLohf.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/packages/docs/.vitepress/dist/assets/mcp-interaction-pattern.VdvOPuTt.png +0 -0
- package/packages/docs/.vitepress/dist/assets/placeholder-demo-greenfield.B8lG_tBI.png +0 -0
- package/packages/docs/.vitepress/dist/assets/style.CAgdBzOq.css +1 -0
- package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.js +50 -0
- package/packages/docs/.vitepress/dist/assets/user_advanced-engineering.md.MkETYNtq.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.js +24 -0
- package/packages/docs/.vitepress/dist/assets/user_agent-setup.md.B54OLL2H.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.js +15 -0
- package/packages/docs/.vitepress/dist/assets/user_beads-integration.md.BzdR5Fif.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.js +157 -0
- package/packages/docs/.vitepress/dist/assets/user_crowd-mcp-integration.md.C15kSdIJ.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.js +143 -0
- package/packages/docs/.vitepress/dist/assets/user_custom-workflows.md.Cz4IYCXa.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_git-commit-feature.md.UcTvDR-O.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.js +23 -0
- package/packages/docs/.vitepress/dist/assets/user_how-it-works.md.DiOXNgaL.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.js +43 -0
- package/packages/docs/.vitepress/dist/assets/user_long-term-memory.md.DZh0tjNa.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.js +2 -0
- package/packages/docs/.vitepress/dist/assets/user_packaged-workflows.md.s1HT89ZU.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.js +3 -0
- package/packages/docs/.vitepress/dist/assets/user_tutorial.md.Dmj8zLB2.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.js +7 -0
- package/packages/docs/.vitepress/dist/assets/user_workflow-selection.md.CrPGw9Hr.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows.md.Bm5sGt3u.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_adr.md.DEaXkbRp.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_big-bang-conversion.md.BA5R1LxZ.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_boundary-testing.md.DBcYnMhx.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_bugfix.md.CZRCL0Hp.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_business-analysis.md.fGLml8Hw.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_c4-analysis.md.Dnssqzuf.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_epcc.md.M6DnIhpp.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_game-beginner.md.CNxzWLtd.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_greenfield.md.vx_g-WOe.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_minor.md.DdnfwMf4.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_posts.md.SOldXvq7.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix-crowd.md.-lSf42gJ.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-bugfix.md.oRAsEVbc.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature-crowd.md.DAtnfCAd.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-feature.md.Ce3-H_g3.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield-crowd.md.8DUvcmLe.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_sdd-greenfield.md.eEN6U0J4.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_slides.md.Cqt-19_1.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_tdd.md.BjVC69tu.lean.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_waterfall.md.CL6jTZP9.lean.js +1 -0
- package/packages/docs/.vitepress/dist/dev/ARCHITECTURE.html +155 -0
- package/packages/docs/.vitepress/dist/dev/DEVELOPMENT.html +97 -0
- package/packages/docs/.vitepress/dist/dev/LOGGING.html +59 -0
- package/packages/docs/.vitepress/dist/dev/PUBLISHING.html +30 -0
- package/packages/docs/.vitepress/dist/hashmap.json +1 -0
- package/packages/docs/.vitepress/dist/index.html +27 -0
- package/packages/docs/.vitepress/dist/user/advanced-engineering.html +75 -0
- package/packages/docs/.vitepress/dist/user/agent-setup.html +49 -0
- package/packages/docs/.vitepress/dist/user/beads-integration.html +40 -0
- package/packages/docs/.vitepress/dist/user/crowd-mcp-integration.html +182 -0
- package/packages/docs/.vitepress/dist/user/custom-workflows.html +168 -0
- package/packages/docs/.vitepress/dist/user/git-commit-feature.html +30 -0
- package/packages/docs/.vitepress/dist/user/how-it-works.html +48 -0
- package/packages/docs/.vitepress/dist/user/long-term-memory.html +68 -0
- package/packages/docs/.vitepress/dist/user/packaged-workflows.html +27 -0
- package/packages/docs/.vitepress/dist/user/tutorial.html +28 -0
- package/packages/docs/.vitepress/dist/user/workflow-selection.html +32 -0
- package/packages/docs/.vitepress/dist/vp-icons.css +0 -0
- package/packages/docs/.vitepress/dist/workflows/adr.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/adr.yaml +157 -0
- package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.yaml +592 -0
- package/packages/docs/.vitepress/dist/workflows/boundary-testing.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/boundary-testing.yaml +376 -0
- package/packages/docs/.vitepress/dist/workflows/bugfix.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/bugfix.yaml +177 -0
- package/packages/docs/.vitepress/dist/workflows/business-analysis.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/business-analysis.yaml +597 -0
- package/packages/docs/.vitepress/dist/workflows/c4-analysis.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/c4-analysis.yaml +471 -0
- package/packages/docs/.vitepress/dist/workflows/epcc.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/epcc.yaml +183 -0
- package/packages/docs/.vitepress/dist/workflows/game-beginner.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/game-beginner.yaml +434 -0
- package/packages/docs/.vitepress/dist/workflows/greenfield.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/greenfield.yaml +201 -0
- package/packages/docs/.vitepress/dist/workflows/minor.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/minor.yaml +138 -0
- package/packages/docs/.vitepress/dist/workflows/posts.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/posts.yaml +193 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.yaml +608 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.yaml +381 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.yaml +713 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-feature.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-feature.yaml +471 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.yaml +336 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.yaml +463 -0
- package/packages/docs/.vitepress/dist/workflows/slides.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/slides.yaml +237 -0
- package/packages/docs/.vitepress/dist/workflows/tdd.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/tdd.yaml +160 -0
- package/packages/docs/.vitepress/dist/workflows/waterfall.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/waterfall.yaml +209 -0
- package/packages/docs/.vitepress/dist/workflows.html +26 -0
- package/packages/docs/package.json +32 -0
- package/packages/mcp-server/dist/index.js +10546 -0
- package/packages/mcp-server/package.json +41 -0
- package/packages/visualizer/dist/WorkflowVisualizer.vue +1147 -0
- package/packages/visualizer/dist/index.ts +17 -0
- package/packages/visualizer/dist/main.ts +673 -0
- package/packages/visualizer/dist/services/BundledWorkflows.ts +35 -0
- package/packages/visualizer/dist/services/FileUploadHandler.ts +166 -0
- package/packages/visualizer/dist/services/WorkflowLoader.ts +198 -0
- package/packages/visualizer/dist/services/YamlParser.ts +248 -0
- package/packages/visualizer/dist/services/workflow-list.ts +23 -0
- package/packages/visualizer/dist/types/ui-types.ts +84 -0
- package/packages/visualizer/dist/types/visualization-types.ts +95 -0
- package/packages/visualizer/dist/types/vite-env.d.ts +12 -0
- package/packages/visualizer/dist/utils/DomHelpers.ts +206 -0
- package/packages/visualizer/dist/utils/ErrorHandler.ts +170 -0
- package/packages/visualizer/dist/utils/PlantUMLEncoder.ts +121 -0
- package/packages/visualizer/dist/visualization/DiagramRenderer.ts +430 -0
- package/packages/visualizer/dist/visualization/LayoutEngine.ts +339 -0
- package/packages/visualizer/dist/visualization/PlantUMLRenderer.ts +507 -0
- package/packages/visualizer/dist/visualization/StateRenderer.ts +339 -0
- package/packages/visualizer/dist/visualization/TransitionRenderer.ts +432 -0
- package/packages/visualizer/package.json +39 -0
- package/resources/.DS_Store +0 -0
- package/resources/agents/architect.yaml +61 -0
- package/resources/agents/business-analyst.yaml +60 -0
- package/resources/agents/developer.yaml +61 -0
- package/resources/state-machine-schema.json +114 -0
- package/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
- package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
- package/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
- package/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
- package/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
- package/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
- package/resources/templates/architecture/c4.md +224 -0
- package/resources/templates/architecture/freestyle.md +53 -0
- package/resources/templates/architecture/game.md +250 -0
- package/resources/templates/architecture/none.md +17 -0
- package/resources/templates/design/comprehensive.md +207 -0
- package/resources/templates/design/freestyle.md +37 -0
- package/resources/templates/design/game.md +66 -0
- package/resources/templates/design/none.md +17 -0
- package/resources/templates/requirements/ears.md +90 -0
- package/resources/templates/requirements/freestyle.md +42 -0
- package/resources/templates/requirements/game.md +162 -0
- package/resources/templates/requirements/none.md +17 -0
- package/resources/templates/skills/POWER.md +23 -0
- package/resources/templates/skills/SKILL.md +19 -0
- package/resources/workflows/adr.yaml +157 -0
- package/resources/workflows/big-bang-conversion.yaml +592 -0
- package/resources/workflows/boundary-testing.yaml +376 -0
- package/resources/workflows/bugfix.yaml +177 -0
- package/resources/workflows/business-analysis.yaml +597 -0
- package/resources/workflows/c4-analysis.yaml +471 -0
- package/resources/workflows/epcc.yaml +183 -0
- package/resources/workflows/game-beginner.yaml +434 -0
- package/resources/workflows/greenfield.yaml +201 -0
- package/resources/workflows/minor.yaml +138 -0
- package/resources/workflows/posts.yaml +193 -0
- package/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
- package/resources/workflows/sdd-bugfix.yaml +381 -0
- package/resources/workflows/sdd-feature-crowd.yaml +713 -0
- package/resources/workflows/sdd-feature.yaml +471 -0
- package/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
- package/resources/workflows/sdd-greenfield.yaml +463 -0
- package/resources/workflows/slides.yaml +237 -0
- package/resources/workflows/tdd.yaml +160 -0
- package/resources/workflows/waterfall.yaml +209 -0
- package/dist/components/beads/beads-instruction-generator.d.ts +0 -44
- package/dist/components/beads/beads-instruction-generator.d.ts.map +0 -1
- package/dist/components/beads/beads-instruction-generator.js +0 -160
- package/dist/components/beads/beads-instruction-generator.js.map +0 -1
- package/dist/components/beads/beads-plan-manager.d.ts.map +0 -1
- package/dist/components/beads/beads-plan-manager.js.map +0 -1
- package/dist/components/beads/beads-task-backend-client.d.ts +0 -43
- package/dist/components/beads/beads-task-backend-client.d.ts.map +0 -1
- package/dist/components/beads/beads-task-backend-client.js +0 -175
- package/dist/components/beads/beads-task-backend-client.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -74
- package/dist/index.js.map +0 -1
- package/dist/notification-service.d.ts +0 -14
- package/dist/notification-service.d.ts.map +0 -1
- package/dist/notification-service.js +0 -18
- package/dist/notification-service.js.map +0 -1
- package/dist/plugin-system/beads-plugin.d.ts +0 -71
- package/dist/plugin-system/beads-plugin.d.ts.map +0 -1
- package/dist/plugin-system/beads-plugin.js +0 -465
- package/dist/plugin-system/beads-plugin.js.map +0 -1
- package/dist/plugin-system/commit-plugin.d.ts +0 -40
- package/dist/plugin-system/commit-plugin.d.ts.map +0 -1
- package/dist/plugin-system/commit-plugin.js +0 -204
- package/dist/plugin-system/commit-plugin.js.map +0 -1
- package/dist/plugin-system/index.d.ts +0 -9
- package/dist/plugin-system/index.d.ts.map +0 -1
- package/dist/plugin-system/index.js +0 -9
- package/dist/plugin-system/index.js.map +0 -1
- package/dist/plugin-system/plugin-interfaces.d.ts +0 -98
- package/dist/plugin-system/plugin-interfaces.d.ts.map +0 -1
- package/dist/plugin-system/plugin-interfaces.js +0 -9
- package/dist/plugin-system/plugin-interfaces.js.map +0 -1
- package/dist/plugin-system/plugin-registry.d.ts +0 -44
- package/dist/plugin-system/plugin-registry.d.ts.map +0 -1
- package/dist/plugin-system/plugin-registry.js +0 -132
- package/dist/plugin-system/plugin-registry.js.map +0 -1
- package/dist/resource-handlers/conversation-state.d.ts +0 -15
- package/dist/resource-handlers/conversation-state.d.ts.map +0 -1
- package/dist/resource-handlers/conversation-state.js +0 -40
- package/dist/resource-handlers/conversation-state.js.map +0 -1
- package/dist/resource-handlers/development-plan.d.ts +0 -14
- package/dist/resource-handlers/development-plan.d.ts.map +0 -1
- package/dist/resource-handlers/development-plan.js +0 -31
- package/dist/resource-handlers/development-plan.js.map +0 -1
- package/dist/resource-handlers/index.d.ts +0 -24
- package/dist/resource-handlers/index.d.ts.map +0 -1
- package/dist/resource-handlers/index.js +0 -62
- package/dist/resource-handlers/index.js.map +0 -1
- package/dist/resource-handlers/system-prompt.d.ts +0 -15
- package/dist/resource-handlers/system-prompt.d.ts.map +0 -1
- package/dist/resource-handlers/system-prompt.js +0 -40
- package/dist/resource-handlers/system-prompt.js.map +0 -1
- package/dist/resource-handlers/workflow-resource.d.ts +0 -15
- package/dist/resource-handlers/workflow-resource.d.ts.map +0 -1
- package/dist/resource-handlers/workflow-resource.js +0 -85
- package/dist/resource-handlers/workflow-resource.js.map +0 -1
- package/dist/response-renderer.d.ts +0 -30
- package/dist/response-renderer.d.ts.map +0 -1
- package/dist/response-renderer.js +0 -94
- package/dist/response-renderer.js.map +0 -1
- package/dist/server-config.d.ts +0 -34
- package/dist/server-config.d.ts.map +0 -1
- package/dist/server-config.js +0 -503
- package/dist/server-config.js.map +0 -1
- package/dist/server-helpers.d.ts +0 -70
- package/dist/server-helpers.d.ts.map +0 -1
- package/dist/server-helpers.js +0 -171
- package/dist/server-helpers.js.map +0 -1
- package/dist/server-implementation.d.ts +0 -74
- package/dist/server-implementation.d.ts.map +0 -1
- package/dist/server-implementation.js +0 -201
- package/dist/server-implementation.js.map +0 -1
- package/dist/server.d.ts +0 -6
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -5
- package/dist/server.js.map +0 -1
- package/dist/tool-handlers/base-tool-handler.d.ts +0 -50
- package/dist/tool-handlers/base-tool-handler.d.ts.map +0 -1
- package/dist/tool-handlers/base-tool-handler.js +0 -81
- package/dist/tool-handlers/base-tool-handler.js.map +0 -1
- package/dist/tool-handlers/conduct-review.d.ts +0 -49
- package/dist/tool-handlers/conduct-review.d.ts.map +0 -1
- package/dist/tool-handlers/conduct-review.js +0 -104
- package/dist/tool-handlers/conduct-review.js.map +0 -1
- package/dist/tool-handlers/get-tool-info.d.ts +0 -75
- package/dist/tool-handlers/get-tool-info.d.ts.map +0 -1
- package/dist/tool-handlers/get-tool-info.js +0 -168
- package/dist/tool-handlers/get-tool-info.js.map +0 -1
- package/dist/tool-handlers/index.d.ts +0 -41
- package/dist/tool-handlers/index.d.ts.map +0 -1
- package/dist/tool-handlers/index.js +0 -71
- package/dist/tool-handlers/index.js.map +0 -1
- package/dist/tool-handlers/list-workflows.d.ts +0 -35
- package/dist/tool-handlers/list-workflows.d.ts.map +0 -1
- package/dist/tool-handlers/list-workflows.js +0 -43
- package/dist/tool-handlers/list-workflows.js.map +0 -1
- package/dist/tool-handlers/no-idea.d.ts +0 -41
- package/dist/tool-handlers/no-idea.d.ts.map +0 -1
- package/dist/tool-handlers/no-idea.js +0 -29
- package/dist/tool-handlers/no-idea.js.map +0 -1
- package/dist/tool-handlers/proceed-to-phase.d.ts +0 -41
- package/dist/tool-handlers/proceed-to-phase.d.ts.map +0 -1
- package/dist/tool-handlers/proceed-to-phase.js +0 -165
- package/dist/tool-handlers/proceed-to-phase.js.map +0 -1
- package/dist/tool-handlers/reset-development.d.ts +0 -31
- package/dist/tool-handlers/reset-development.d.ts.map +0 -1
- package/dist/tool-handlers/reset-development.js +0 -48
- package/dist/tool-handlers/reset-development.js.map +0 -1
- package/dist/tool-handlers/resume-workflow.d.ts +0 -87
- package/dist/tool-handlers/resume-workflow.d.ts.map +0 -1
- package/dist/tool-handlers/resume-workflow.js +0 -212
- package/dist/tool-handlers/resume-workflow.js.map +0 -1
- package/dist/tool-handlers/setup-project-docs.d.ts +0 -37
- package/dist/tool-handlers/setup-project-docs.d.ts.map +0 -1
- package/dist/tool-handlers/setup-project-docs.js +0 -138
- package/dist/tool-handlers/setup-project-docs.js.map +0 -1
- package/dist/tool-handlers/start-development.d.ts +0 -79
- package/dist/tool-handlers/start-development.d.ts.map +0 -1
- package/dist/tool-handlers/start-development.js +0 -484
- package/dist/tool-handlers/start-development.js.map +0 -1
- package/dist/tool-handlers/whats-next.d.ts +0 -41
- package/dist/tool-handlers/whats-next.d.ts.map +0 -1
- package/dist/tool-handlers/whats-next.js +0 -123
- package/dist/tool-handlers/whats-next.js.map +0 -1
- package/dist/types.d.ts +0 -119
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -5
- package/dist/version-info.d.ts +0 -30
- package/dist/version-info.d.ts.map +0 -1
- package/dist/version-info.js +0 -178
- package/dist/version-info.js.map +0 -1
- package/skill/SKILL.md +0 -28
- /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
|
+
}
|