@codemcp/workflows 5.3.0 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -0
- package/package.json +78 -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/cli/resources/agents/architect.yaml +61 -0
- package/packages/cli/resources/agents/business-analyst.yaml +60 -0
- package/packages/cli/resources/agents/developer.yaml +61 -0
- package/packages/cli/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
- package/packages/cli/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
- package/packages/cli/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
- package/packages/cli/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
- package/packages/cli/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
- package/packages/cli/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
- package/packages/cli/resources/templates/architecture/c4.md +224 -0
- package/packages/cli/resources/templates/architecture/freestyle.md +53 -0
- package/packages/cli/resources/templates/architecture/game.md +250 -0
- package/packages/cli/resources/templates/architecture/none.md +17 -0
- package/packages/cli/resources/templates/design/comprehensive.md +207 -0
- package/packages/cli/resources/templates/design/freestyle.md +37 -0
- package/packages/cli/resources/templates/design/game.md +66 -0
- package/packages/cli/resources/templates/design/none.md +17 -0
- package/packages/cli/resources/templates/requirements/ears.md +90 -0
- package/packages/cli/resources/templates/requirements/freestyle.md +42 -0
- package/packages/cli/resources/templates/requirements/game.md +162 -0
- package/packages/cli/resources/templates/requirements/none.md +17 -0
- package/packages/cli/resources/templates/skills/POWER.md +23 -0
- package/packages/cli/resources/templates/skills/SKILL.md +19 -0
- package/packages/cli/resources/workflows/adr.yaml +157 -0
- package/packages/cli/resources/workflows/big-bang-conversion.yaml +592 -0
- package/packages/cli/resources/workflows/boundary-testing.yaml +376 -0
- package/packages/cli/resources/workflows/bugfix.yaml +177 -0
- package/packages/cli/resources/workflows/business-analysis.yaml +597 -0
- package/packages/cli/resources/workflows/c4-analysis.yaml +471 -0
- package/packages/cli/resources/workflows/epcc.yaml +183 -0
- package/packages/cli/resources/workflows/game-beginner.yaml +434 -0
- package/packages/cli/resources/workflows/greenfield.yaml +201 -0
- package/packages/cli/resources/workflows/minor.yaml +138 -0
- package/packages/cli/resources/workflows/posts.yaml +193 -0
- package/packages/cli/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
- package/packages/cli/resources/workflows/sdd-bugfix.yaml +381 -0
- package/packages/cli/resources/workflows/sdd-feature-crowd.yaml +713 -0
- package/packages/cli/resources/workflows/sdd-feature.yaml +471 -0
- package/packages/cli/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
- package/packages/cli/resources/workflows/sdd-greenfield.yaml +463 -0
- package/packages/cli/resources/workflows/slides.yaml +237 -0
- package/packages/cli/resources/workflows/tdd.yaml +160 -0
- package/packages/cli/resources/workflows/waterfall.yaml +209 -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/core/resources/agents/architect.yaml +61 -0
- package/packages/core/resources/agents/business-analyst.yaml +60 -0
- package/packages/core/resources/agents/developer.yaml +61 -0
- package/packages/core/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
- package/packages/core/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
- package/packages/core/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
- package/packages/core/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
- package/packages/core/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
- package/packages/core/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
- package/packages/core/resources/templates/architecture/c4.md +224 -0
- package/packages/core/resources/templates/architecture/freestyle.md +53 -0
- package/packages/core/resources/templates/architecture/game.md +250 -0
- package/packages/core/resources/templates/architecture/none.md +17 -0
- package/packages/core/resources/templates/design/comprehensive.md +207 -0
- package/packages/core/resources/templates/design/freestyle.md +37 -0
- package/packages/core/resources/templates/design/game.md +66 -0
- package/packages/core/resources/templates/design/none.md +17 -0
- package/packages/core/resources/templates/requirements/ears.md +90 -0
- package/packages/core/resources/templates/requirements/freestyle.md +42 -0
- package/packages/core/resources/templates/requirements/game.md +162 -0
- package/packages/core/resources/templates/requirements/none.md +17 -0
- package/packages/core/resources/templates/skills/POWER.md +23 -0
- package/packages/core/resources/templates/skills/SKILL.md +19 -0
- package/packages/core/resources/workflows/adr.yaml +157 -0
- package/packages/core/resources/workflows/big-bang-conversion.yaml +592 -0
- package/packages/core/resources/workflows/boundary-testing.yaml +376 -0
- package/packages/core/resources/workflows/bugfix.yaml +177 -0
- package/packages/core/resources/workflows/business-analysis.yaml +597 -0
- package/packages/core/resources/workflows/c4-analysis.yaml +471 -0
- package/packages/core/resources/workflows/epcc.yaml +183 -0
- package/packages/core/resources/workflows/game-beginner.yaml +434 -0
- package/packages/core/resources/workflows/greenfield.yaml +201 -0
- package/packages/core/resources/workflows/minor.yaml +138 -0
- package/packages/core/resources/workflows/posts.yaml +193 -0
- package/packages/core/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
- package/packages/core/resources/workflows/sdd-bugfix.yaml +381 -0
- package/packages/core/resources/workflows/sdd-feature-crowd.yaml +713 -0
- package/packages/core/resources/workflows/sdd-feature.yaml +471 -0
- package/packages/core/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
- package/packages/core/resources/workflows/sdd-greenfield.yaml +463 -0
- package/packages/core/resources/workflows/slides.yaml +237 -0
- package/packages/core/resources/workflows/tdd.yaml +160 -0
- package/packages/core/resources/workflows/waterfall.yaml +209 -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/mcp-server/resources/agents/architect.yaml +61 -0
- package/packages/mcp-server/resources/agents/business-analyst.yaml +60 -0
- package/packages/mcp-server/resources/agents/developer.yaml +61 -0
- package/packages/mcp-server/resources/templates/architecture/arc42/arc42-template-EN.md +1077 -0
- package/packages/mcp-server/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio-2023.png +0 -0
- package/packages/mcp-server/resources/templates/architecture/arc42/images/01_2_iso-25010-topics-EN.drawio.png +0 -0
- package/packages/mcp-server/resources/templates/architecture/arc42/images/05_building_blocks-EN.png +0 -0
- package/packages/mcp-server/resources/templates/architecture/arc42/images/08-concepts-EN.drawio.png +0 -0
- package/packages/mcp-server/resources/templates/architecture/arc42/images/arc42-logo.png +0 -0
- package/packages/mcp-server/resources/templates/architecture/c4.md +224 -0
- package/packages/mcp-server/resources/templates/architecture/freestyle.md +53 -0
- package/packages/mcp-server/resources/templates/architecture/game.md +250 -0
- package/packages/mcp-server/resources/templates/architecture/none.md +17 -0
- package/packages/mcp-server/resources/templates/design/comprehensive.md +207 -0
- package/packages/mcp-server/resources/templates/design/freestyle.md +37 -0
- package/packages/mcp-server/resources/templates/design/game.md +66 -0
- package/packages/mcp-server/resources/templates/design/none.md +17 -0
- package/packages/mcp-server/resources/templates/requirements/ears.md +90 -0
- package/packages/mcp-server/resources/templates/requirements/freestyle.md +42 -0
- package/packages/mcp-server/resources/templates/requirements/game.md +162 -0
- package/packages/mcp-server/resources/templates/requirements/none.md +17 -0
- package/packages/mcp-server/resources/templates/skills/POWER.md +23 -0
- package/packages/mcp-server/resources/templates/skills/SKILL.md +19 -0
- package/packages/mcp-server/resources/workflows/adr.yaml +157 -0
- package/packages/mcp-server/resources/workflows/big-bang-conversion.yaml +592 -0
- package/packages/mcp-server/resources/workflows/boundary-testing.yaml +376 -0
- package/packages/mcp-server/resources/workflows/bugfix.yaml +177 -0
- package/packages/mcp-server/resources/workflows/business-analysis.yaml +597 -0
- package/packages/mcp-server/resources/workflows/c4-analysis.yaml +471 -0
- package/packages/mcp-server/resources/workflows/epcc.yaml +183 -0
- package/packages/mcp-server/resources/workflows/game-beginner.yaml +434 -0
- package/packages/mcp-server/resources/workflows/greenfield.yaml +201 -0
- package/packages/mcp-server/resources/workflows/minor.yaml +138 -0
- package/packages/mcp-server/resources/workflows/posts.yaml +193 -0
- package/packages/mcp-server/resources/workflows/sdd-bugfix-crowd.yaml +608 -0
- package/packages/mcp-server/resources/workflows/sdd-bugfix.yaml +381 -0
- package/packages/mcp-server/resources/workflows/sdd-feature-crowd.yaml +713 -0
- package/packages/mcp-server/resources/workflows/sdd-feature.yaml +471 -0
- package/packages/mcp-server/resources/workflows/sdd-greenfield-crowd.yaml +336 -0
- package/packages/mcp-server/resources/workflows/sdd-greenfield.yaml +463 -0
- package/packages/mcp-server/resources/workflows/slides.yaml +237 -0
- package/packages/mcp-server/resources/workflows/tdd.yaml +160 -0
- package/packages/mcp-server/resources/workflows/waterfall.yaml +209 -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,35 @@
|
|
|
1
|
+
import { workflowList } from './workflow-list';
|
|
2
|
+
|
|
3
|
+
// Bundled workflows configuration - imported from generated list
|
|
4
|
+
const bundledWorkflows = workflowList;
|
|
5
|
+
|
|
6
|
+
export function getBundledWorkflowNames(): string[] {
|
|
7
|
+
return bundledWorkflows;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function getBundledWorkflow(name: string): string {
|
|
11
|
+
if (!bundledWorkflows.includes(name)) {
|
|
12
|
+
throw new Error(`Workflow '${name}' not found in bundled workflows`);
|
|
13
|
+
}
|
|
14
|
+
return `/workflows/${name}.yaml`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function getBundledWorkflowMetadata(name?: string) {
|
|
18
|
+
if (name) {
|
|
19
|
+
if (!bundledWorkflows.includes(name)) {
|
|
20
|
+
throw new Error(`Workflow '${name}' not found in bundled workflows`);
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
name,
|
|
24
|
+
path: `/workflows/${name}.yaml`,
|
|
25
|
+
bundled: true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return bundledWorkflows.map(name => ({
|
|
29
|
+
name,
|
|
30
|
+
path: `/workflows/${name}.yaml`,
|
|
31
|
+
bundled: true,
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default bundledWorkflows;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File upload handling service
|
|
3
|
+
* Manages file upload UI interactions and validation
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { YamlStateMachine, AppError } from '../types/ui-types';
|
|
7
|
+
import { WorkflowLoader } from './WorkflowLoader';
|
|
8
|
+
|
|
9
|
+
export class FileUploadHandler {
|
|
10
|
+
private readonly workflowLoader: WorkflowLoader;
|
|
11
|
+
private readonly fileInput: HTMLInputElement;
|
|
12
|
+
private readonly boundHandleFileSelection: (event: Event) => void;
|
|
13
|
+
|
|
14
|
+
constructor(
|
|
15
|
+
fileInputElement: HTMLInputElement,
|
|
16
|
+
workflowLoader: WorkflowLoader
|
|
17
|
+
) {
|
|
18
|
+
this.workflowLoader = workflowLoader;
|
|
19
|
+
this.fileInput = fileInputElement;
|
|
20
|
+
this.boundHandleFileSelection = this.handleFileSelection.bind(this);
|
|
21
|
+
this.setupEventListeners();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Set up event listeners for file upload
|
|
26
|
+
*/
|
|
27
|
+
private setupEventListeners(): void {
|
|
28
|
+
this.fileInput.addEventListener('change', this.boundHandleFileSelection);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Handle file selection from input
|
|
33
|
+
*/
|
|
34
|
+
private async handleFileSelection(event: Event): Promise<void> {
|
|
35
|
+
const target = event.target as HTMLInputElement;
|
|
36
|
+
const files = target.files;
|
|
37
|
+
|
|
38
|
+
if (!files || files.length === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const file = files[0];
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const workflow = await this.processUploadedFile(file);
|
|
46
|
+
this.onWorkflowLoaded(workflow, file.name);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
this.onUploadError(error as AppError);
|
|
49
|
+
} finally {
|
|
50
|
+
// Clear the input so the same file can be uploaded again
|
|
51
|
+
target.value = '';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Process an uploaded file and return the parsed workflow
|
|
57
|
+
*/
|
|
58
|
+
public async processUploadedFile(file: File): Promise<YamlStateMachine> {
|
|
59
|
+
console.log(`Processing uploaded file: ${file.name} (${file.size} bytes)`);
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
const workflow = await this.workflowLoader.loadUploadedWorkflow(file);
|
|
63
|
+
console.log(`Successfully processed uploaded workflow: ${workflow.name}`);
|
|
64
|
+
return workflow;
|
|
65
|
+
} catch (error) {
|
|
66
|
+
console.error(`Error processing uploaded file:`, error);
|
|
67
|
+
// Re-throw with additional context
|
|
68
|
+
if (error instanceof Error) {
|
|
69
|
+
throw this.createUploadError(`Upload failed: ${error.message}`);
|
|
70
|
+
}
|
|
71
|
+
throw this.createUploadError(`Upload failed: ${String(error)}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Validate file before processing
|
|
77
|
+
*/
|
|
78
|
+
public validateFile(file: File): void {
|
|
79
|
+
// Check file type
|
|
80
|
+
if (!this.isValidFileType(file)) {
|
|
81
|
+
throw this.createUploadError(
|
|
82
|
+
'Invalid file type. Please select a .yaml or .yml file.'
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Check file size (1MB limit)
|
|
87
|
+
const maxSizeBytes = 1024 * 1024;
|
|
88
|
+
if (file.size > maxSizeBytes) {
|
|
89
|
+
throw this.createUploadError(
|
|
90
|
+
`File too large. Maximum size is ${maxSizeBytes / 1024 / 1024}MB.`
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Check if file is empty
|
|
95
|
+
if (file.size === 0) {
|
|
96
|
+
throw this.createUploadError('File is empty.');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Check if file type is valid
|
|
102
|
+
*/
|
|
103
|
+
private isValidFileType(file: File): boolean {
|
|
104
|
+
const validExtensions = ['.yaml', '.yml'];
|
|
105
|
+
const fileName = file.name.toLowerCase();
|
|
106
|
+
|
|
107
|
+
return validExtensions.some(ext => fileName.endsWith(ext));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Handle successful workflow loading
|
|
112
|
+
* This method should be overridden by the consumer
|
|
113
|
+
*/
|
|
114
|
+
public onWorkflowLoaded: (
|
|
115
|
+
workflow: YamlStateMachine,
|
|
116
|
+
fileName: string
|
|
117
|
+
) => void = () => {
|
|
118
|
+
console.log('FileUploadHandler: onWorkflowLoaded not implemented');
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Handle upload errors
|
|
123
|
+
* This method should be overridden by the consumer
|
|
124
|
+
*/
|
|
125
|
+
public onUploadError: (error: AppError) => void = () => {
|
|
126
|
+
console.error('FileUploadHandler: onUploadError not implemented');
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Programmatically trigger file selection dialog
|
|
131
|
+
*/
|
|
132
|
+
public triggerFileSelection(): void {
|
|
133
|
+
this.fileInput.click();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Get the current file input element
|
|
138
|
+
*/
|
|
139
|
+
public getFileInput(): HTMLInputElement {
|
|
140
|
+
return this.fileInput;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Reset the file input
|
|
145
|
+
*/
|
|
146
|
+
public resetFileInput(): void {
|
|
147
|
+
this.fileInput.value = '';
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Create an upload error
|
|
152
|
+
*/
|
|
153
|
+
private createUploadError(message: string): AppError {
|
|
154
|
+
return {
|
|
155
|
+
type: 'validation',
|
|
156
|
+
message: message,
|
|
157
|
+
} as AppError;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Destroy the handler and clean up event listeners
|
|
162
|
+
*/
|
|
163
|
+
public destroy(): void {
|
|
164
|
+
this.fileInput.removeEventListener('change', this.boundHandleFileSelection);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow loading service
|
|
3
|
+
* Handles loading workflows from built-in resources and uploaded files
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
YamlStateMachine,
|
|
8
|
+
WorkflowMetadata,
|
|
9
|
+
AppError,
|
|
10
|
+
} from '../types/ui-types';
|
|
11
|
+
import { YamlParser } from './YamlParser';
|
|
12
|
+
import {
|
|
13
|
+
getBundledWorkflow,
|
|
14
|
+
getBundledWorkflowNames,
|
|
15
|
+
getBundledWorkflowMetadata,
|
|
16
|
+
} from './BundledWorkflows';
|
|
17
|
+
|
|
18
|
+
export class WorkflowLoader {
|
|
19
|
+
private readonly yamlParser: YamlParser;
|
|
20
|
+
|
|
21
|
+
constructor() {
|
|
22
|
+
this.yamlParser = new YamlParser();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get list of available built-in workflows (dynamically generated)
|
|
27
|
+
*/
|
|
28
|
+
public getAvailableWorkflows(): WorkflowMetadata[] {
|
|
29
|
+
const workflowNames = getBundledWorkflowNames();
|
|
30
|
+
|
|
31
|
+
return workflowNames.map(name => {
|
|
32
|
+
// Use pre-parsed metadata from build time
|
|
33
|
+
const metadata = getBundledWorkflowMetadata(name);
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
name,
|
|
37
|
+
displayName: this.formatDisplayName(name),
|
|
38
|
+
source: 'builtin' as const,
|
|
39
|
+
domain: metadata?.domain,
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Format a workflow name into a display name
|
|
46
|
+
*/
|
|
47
|
+
private formatDisplayName(name: string): string {
|
|
48
|
+
return name
|
|
49
|
+
.split(/[-_]/)
|
|
50
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
51
|
+
.join(' ');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Load a built-in workflow by name
|
|
56
|
+
*/
|
|
57
|
+
public async loadBuiltinWorkflow(
|
|
58
|
+
workflowName: string
|
|
59
|
+
): Promise<YamlStateMachine> {
|
|
60
|
+
const availableWorkflows = this.getAvailableWorkflows();
|
|
61
|
+
const workflowMetadata = availableWorkflows.find(
|
|
62
|
+
w => w.name === workflowName
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
if (!workflowMetadata) {
|
|
66
|
+
throw this.createNetworkError(`Unknown workflow: ${workflowName}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
const yamlContent = getBundledWorkflow(workflowName);
|
|
71
|
+
|
|
72
|
+
if (!yamlContent) {
|
|
73
|
+
throw this.createNetworkError(
|
|
74
|
+
`Bundled workflow "${workflowName}" not found`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (!yamlContent.trim()) {
|
|
79
|
+
throw this.createNetworkError(
|
|
80
|
+
`Workflow file "${workflowName}" is empty`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const workflow = this.yamlParser.parseWorkflow(yamlContent);
|
|
85
|
+
|
|
86
|
+
return workflow;
|
|
87
|
+
} catch (error) {
|
|
88
|
+
if (error instanceof Error && error.message.includes('validation')) {
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (error instanceof Error && error.message.includes('parsing')) {
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
throw this.createNetworkError(
|
|
97
|
+
`Failed to load workflow "${workflowName}": ${String(error)}`
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Load a workflow from an uploaded file
|
|
104
|
+
*/
|
|
105
|
+
public async loadUploadedWorkflow(file: File): Promise<YamlStateMachine> {
|
|
106
|
+
try {
|
|
107
|
+
// Validate file type
|
|
108
|
+
if (!this.isValidYamlFile(file)) {
|
|
109
|
+
throw this.createValidationError(
|
|
110
|
+
'Invalid file type. Please upload a .yaml or .yml file.'
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Validate file size (limit to 1MB)
|
|
115
|
+
const maxSizeBytes = 1024 * 1024; // 1MB
|
|
116
|
+
if (file.size > maxSizeBytes) {
|
|
117
|
+
throw this.createValidationError(
|
|
118
|
+
`File too large. Maximum size is ${maxSizeBytes / 1024 / 1024}MB.`
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Read file content
|
|
123
|
+
const yamlContent = await this.readFileAsText(file);
|
|
124
|
+
|
|
125
|
+
if (!yamlContent.trim()) {
|
|
126
|
+
throw this.createValidationError('Uploaded file is empty');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Parse and validate the workflow
|
|
130
|
+
return this.yamlParser.parseWorkflow(yamlContent);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
if (error instanceof Error && error.message.includes('validation')) {
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (error instanceof Error && error.message.includes('parsing')) {
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
throw this.createNetworkError(
|
|
141
|
+
`Failed to process uploaded file: ${String(error)}`
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Check if the uploaded file is a valid YAML file
|
|
148
|
+
*/
|
|
149
|
+
private isValidYamlFile(file: File): boolean {
|
|
150
|
+
const validExtensions = ['.yaml', '.yml'];
|
|
151
|
+
const fileName = file.name.toLowerCase();
|
|
152
|
+
|
|
153
|
+
return validExtensions.some(ext => fileName.endsWith(ext));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Read file content as text
|
|
158
|
+
*/
|
|
159
|
+
private readFileAsText(file: File): Promise<string> {
|
|
160
|
+
return new Promise((resolve, reject) => {
|
|
161
|
+
const reader = new FileReader();
|
|
162
|
+
|
|
163
|
+
reader.onload = (event: ProgressEvent<FileReader>) => {
|
|
164
|
+
if (event.target?.result) {
|
|
165
|
+
resolve(event.target.result as string);
|
|
166
|
+
} else {
|
|
167
|
+
reject(new Error('Failed to read file content'));
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
reader.onerror = () => {
|
|
172
|
+
reject(new Error('Error reading file'));
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
reader.readAsText(file);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Create a validation error
|
|
181
|
+
*/
|
|
182
|
+
private createValidationError(message: string): AppError {
|
|
183
|
+
return {
|
|
184
|
+
type: 'validation',
|
|
185
|
+
message: message,
|
|
186
|
+
} as AppError;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Create a network error
|
|
191
|
+
*/
|
|
192
|
+
private createNetworkError(message: string): AppError {
|
|
193
|
+
return {
|
|
194
|
+
type: 'network',
|
|
195
|
+
message: message,
|
|
196
|
+
} as AppError;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML parsing and validation service
|
|
3
|
+
* Handles parsing YAML content and validating workflow structure
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as yaml from 'js-yaml';
|
|
7
|
+
import { YamlStateMachine, YamlState, YamlTransition } from '../types/ui-types';
|
|
8
|
+
import { AppError } from '../types/ui-types';
|
|
9
|
+
|
|
10
|
+
export class YamlParser {
|
|
11
|
+
/**
|
|
12
|
+
* Parse YAML content into a workflow state machine
|
|
13
|
+
*/
|
|
14
|
+
public parseWorkflow(yamlContent: string): YamlStateMachine {
|
|
15
|
+
try {
|
|
16
|
+
const parsed = yaml.load(yamlContent) as unknown;
|
|
17
|
+
|
|
18
|
+
if (!parsed) {
|
|
19
|
+
throw this.createValidationError('Empty YAML content');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const workflow = this.validateWorkflowStructure(parsed);
|
|
23
|
+
return workflow;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
if (error instanceof yaml.YAMLException) {
|
|
26
|
+
throw this.createParsingError(`YAML syntax error: ${error.message}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (error instanceof Error && error.message.includes('validation')) {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
throw this.createParsingError(`Failed to parse YAML: ${String(error)}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Validate the structure of a parsed workflow object
|
|
39
|
+
*/
|
|
40
|
+
private validateWorkflowStructure(parsed: unknown): YamlStateMachine {
|
|
41
|
+
// Check required top-level fields
|
|
42
|
+
this.validateRequiredField(parsed, 'name', 'string');
|
|
43
|
+
this.validateRequiredField(parsed, 'description', 'string');
|
|
44
|
+
this.validateRequiredField(parsed, 'initial_state', 'string');
|
|
45
|
+
this.validateRequiredField(parsed, 'states', 'object');
|
|
46
|
+
|
|
47
|
+
// Cast parsed to unknown for property access
|
|
48
|
+
const parsedData = parsed as Record<string, unknown>;
|
|
49
|
+
|
|
50
|
+
// Validate states structure
|
|
51
|
+
const states = this.validateStates(parsedData.states);
|
|
52
|
+
|
|
53
|
+
// Validate initial state exists
|
|
54
|
+
if (!states[parsedData.initial_state as string]) {
|
|
55
|
+
throw this.createValidationError(
|
|
56
|
+
`Initial state "${parsedData.initial_state}" not found in states`
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Validate state transitions reference valid states
|
|
61
|
+
this.validateStateReferences(states);
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
name: parsedData.name as string,
|
|
65
|
+
description: parsedData.description as string,
|
|
66
|
+
initial_state: parsedData.initial_state as string,
|
|
67
|
+
states: states,
|
|
68
|
+
metadata: parsedData.metadata as YamlStateMachine['metadata'],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Validate states object structure
|
|
74
|
+
*/
|
|
75
|
+
private validateStates(statesObj: unknown): Record<string, YamlState> {
|
|
76
|
+
if (!statesObj || typeof statesObj !== 'object') {
|
|
77
|
+
throw this.createValidationError('States must be an object');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const validatedStates: Record<string, YamlState> = {};
|
|
81
|
+
|
|
82
|
+
for (const [stateName, stateValue] of Object.entries(statesObj)) {
|
|
83
|
+
if (!stateValue || typeof stateValue !== 'object') {
|
|
84
|
+
throw this.createValidationError(
|
|
85
|
+
`State "${stateName}" must be an object`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const state = stateValue as unknown;
|
|
90
|
+
|
|
91
|
+
// Validate required state fields
|
|
92
|
+
this.validateRequiredField(
|
|
93
|
+
state,
|
|
94
|
+
'description',
|
|
95
|
+
'string',
|
|
96
|
+
`State "${stateName}"`
|
|
97
|
+
);
|
|
98
|
+
this.validateRequiredField(
|
|
99
|
+
state,
|
|
100
|
+
'default_instructions',
|
|
101
|
+
'string',
|
|
102
|
+
`State "${stateName}"`
|
|
103
|
+
);
|
|
104
|
+
// Cast state to Record for property access
|
|
105
|
+
const stateData = state as Record<string, unknown>;
|
|
106
|
+
|
|
107
|
+
this.validateRequiredField(
|
|
108
|
+
stateData,
|
|
109
|
+
'transitions',
|
|
110
|
+
'object',
|
|
111
|
+
`State "${stateName}"`
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
// Validate transitions
|
|
115
|
+
const transitions = this.validateTransitions(
|
|
116
|
+
stateData.transitions,
|
|
117
|
+
stateName
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
validatedStates[stateName] = {
|
|
121
|
+
description: stateData.description as string,
|
|
122
|
+
default_instructions: stateData.default_instructions as string,
|
|
123
|
+
transitions: transitions,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return validatedStates;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Validate transitions array structure
|
|
132
|
+
*/
|
|
133
|
+
private validateTransitions(
|
|
134
|
+
transitionsArray: unknown,
|
|
135
|
+
stateName: string
|
|
136
|
+
): YamlTransition[] {
|
|
137
|
+
if (!Array.isArray(transitionsArray)) {
|
|
138
|
+
throw this.createValidationError(
|
|
139
|
+
`Transitions for state "${stateName}" must be an array`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return transitionsArray.map((transition: unknown, index: number) => {
|
|
144
|
+
if (!transition || typeof transition !== 'object') {
|
|
145
|
+
throw this.createValidationError(
|
|
146
|
+
`Transition ${index} in state "${stateName}" must be an object`
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Cast transition to Record for property access
|
|
151
|
+
const transitionData = transition as Record<string, unknown>;
|
|
152
|
+
|
|
153
|
+
// Validate required transition fields
|
|
154
|
+
this.validateRequiredField(
|
|
155
|
+
transitionData,
|
|
156
|
+
'trigger',
|
|
157
|
+
'string',
|
|
158
|
+
`Transition ${index} in state "${stateName}"`
|
|
159
|
+
);
|
|
160
|
+
this.validateRequiredField(
|
|
161
|
+
transitionData,
|
|
162
|
+
'to',
|
|
163
|
+
'string',
|
|
164
|
+
`Transition ${index} in state "${stateName}"`
|
|
165
|
+
);
|
|
166
|
+
this.validateRequiredField(
|
|
167
|
+
transitionData,
|
|
168
|
+
'transition_reason',
|
|
169
|
+
'string',
|
|
170
|
+
`Transition ${index} in state "${stateName}"`
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
return {
|
|
174
|
+
trigger: transitionData.trigger as string,
|
|
175
|
+
to: transitionData.to as string,
|
|
176
|
+
instructions: transitionData.instructions as string,
|
|
177
|
+
additional_instructions:
|
|
178
|
+
transitionData.additional_instructions as string,
|
|
179
|
+
transition_reason: transitionData.transition_reason as string,
|
|
180
|
+
review_perspectives: transitionData.review_perspectives as Array<{
|
|
181
|
+
perspective: string;
|
|
182
|
+
prompt: string;
|
|
183
|
+
}>,
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Validate that all transition targets reference valid states
|
|
190
|
+
*/
|
|
191
|
+
private validateStateReferences(states: Record<string, YamlState>): void {
|
|
192
|
+
const stateNames = Object.keys(states);
|
|
193
|
+
|
|
194
|
+
for (const [stateName, state] of Object.entries(states)) {
|
|
195
|
+
for (const transition of state.transitions) {
|
|
196
|
+
if (!stateNames.includes(transition.to)) {
|
|
197
|
+
throw this.createValidationError(
|
|
198
|
+
`Transition in state "${stateName}" references unknown state "${transition.to}"`
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Validate that a required field exists and has the correct type
|
|
207
|
+
*/
|
|
208
|
+
private validateRequiredField(
|
|
209
|
+
obj: unknown,
|
|
210
|
+
fieldName: string,
|
|
211
|
+
expectedType: string,
|
|
212
|
+
context: string = 'Workflow'
|
|
213
|
+
): void {
|
|
214
|
+
const objData = obj as Record<string, unknown>;
|
|
215
|
+
if (!(fieldName in objData)) {
|
|
216
|
+
throw this.createValidationError(
|
|
217
|
+
`${context}: Missing required field "${fieldName}"`
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const actualType = typeof objData[fieldName];
|
|
222
|
+
if (actualType !== expectedType) {
|
|
223
|
+
throw this.createValidationError(
|
|
224
|
+
`${context}: Field "${fieldName}" must be ${expectedType}, got ${actualType}`
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Create a validation error
|
|
231
|
+
*/
|
|
232
|
+
private createValidationError(message: string): AppError {
|
|
233
|
+
return {
|
|
234
|
+
type: 'validation',
|
|
235
|
+
message: `Validation error: ${message}`,
|
|
236
|
+
} as AppError;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Create a parsing error
|
|
241
|
+
*/
|
|
242
|
+
private createParsingError(message: string): AppError {
|
|
243
|
+
return {
|
|
244
|
+
type: 'parsing',
|
|
245
|
+
message: message,
|
|
246
|
+
} as AppError;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Auto-generated workflow list
|
|
2
|
+
export const workflowList = [
|
|
3
|
+
'adr',
|
|
4
|
+
'big-bang-conversion',
|
|
5
|
+
'boundary-testing',
|
|
6
|
+
'bugfix',
|
|
7
|
+
'business-analysis',
|
|
8
|
+
'c4-analysis',
|
|
9
|
+
'epcc',
|
|
10
|
+
'game-beginner',
|
|
11
|
+
'greenfield',
|
|
12
|
+
'minor',
|
|
13
|
+
'posts',
|
|
14
|
+
'sdd-bugfix',
|
|
15
|
+
'sdd-bugfix-crowd',
|
|
16
|
+
'sdd-feature',
|
|
17
|
+
'sdd-feature-crowd',
|
|
18
|
+
'sdd-greenfield',
|
|
19
|
+
'sdd-greenfield-crowd',
|
|
20
|
+
'slides',
|
|
21
|
+
'tdd',
|
|
22
|
+
'waterfall',
|
|
23
|
+
];
|