claude-code-workflow 6.0.0
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/.claude/agents/action-planning-agent.md +778 -0
- package/.claude/agents/cli-execution-agent.md +270 -0
- package/.claude/agents/cli-explore-agent.md +182 -0
- package/.claude/agents/cli-lite-planning-agent.md +396 -0
- package/.claude/agents/cli-planning-agent.md +558 -0
- package/.claude/agents/code-developer.md +310 -0
- package/.claude/agents/conceptual-planning-agent.md +308 -0
- package/.claude/agents/context-search-agent.md +582 -0
- package/.claude/agents/doc-generator.md +330 -0
- package/.claude/agents/memory-bridge.md +94 -0
- package/.claude/agents/test-context-search-agent.md +399 -0
- package/.claude/agents/test-fix-agent.md +343 -0
- package/.claude/agents/ui-design-agent.md +593 -0
- package/.claude/agents/universal-executor.md +131 -0
- package/.claude/commands/cli/cli-init.md +440 -0
- package/.claude/commands/enhance-prompt.md +93 -0
- package/.claude/commands/memory/code-map-memory.md +687 -0
- package/.claude/commands/memory/docs-full-cli.md +471 -0
- package/.claude/commands/memory/docs-related-cli.md +386 -0
- package/.claude/commands/memory/docs.md +615 -0
- package/.claude/commands/memory/load-skill-memory.md +182 -0
- package/.claude/commands/memory/load.md +240 -0
- package/.claude/commands/memory/skill-memory.md +525 -0
- package/.claude/commands/memory/style-skill-memory.md +396 -0
- package/.claude/commands/memory/tech-research.md +477 -0
- package/.claude/commands/memory/update-full.md +332 -0
- package/.claude/commands/memory/update-related.md +332 -0
- package/.claude/commands/memory/workflow-skill-memory.md +517 -0
- package/.claude/commands/task/breakdown.md +204 -0
- package/.claude/commands/task/create.md +152 -0
- package/.claude/commands/task/execute.md +270 -0
- package/.claude/commands/task/replan.md +437 -0
- package/.claude/commands/version.md +254 -0
- package/.claude/commands/workflow/action-plan-verify.md +447 -0
- package/.claude/commands/workflow/brainstorm/api-designer.md +585 -0
- package/.claude/commands/workflow/brainstorm/artifacts.md +452 -0
- package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -0
- package/.claude/commands/workflow/brainstorm/data-architect.md +220 -0
- package/.claude/commands/workflow/brainstorm/product-manager.md +200 -0
- package/.claude/commands/workflow/brainstorm/product-owner.md +200 -0
- package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -0
- package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -0
- package/.claude/commands/workflow/brainstorm/synthesis.md +398 -0
- package/.claude/commands/workflow/brainstorm/system-architect.md +387 -0
- package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -0
- package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -0
- package/.claude/commands/workflow/execute.md +460 -0
- package/.claude/commands/workflow/init.md +164 -0
- package/.claude/commands/workflow/lite-execute.md +686 -0
- package/.claude/commands/workflow/lite-fix.md +621 -0
- package/.claude/commands/workflow/lite-plan.md +592 -0
- package/.claude/commands/workflow/plan.md +551 -0
- package/.claude/commands/workflow/replan.md +515 -0
- package/.claude/commands/workflow/review-fix.md +646 -0
- package/.claude/commands/workflow/review-module-cycle.md +795 -0
- package/.claude/commands/workflow/review-session-cycle.md +805 -0
- package/.claude/commands/workflow/review.md +291 -0
- package/.claude/commands/workflow/session/complete.md +500 -0
- package/.claude/commands/workflow/session/list.md +96 -0
- package/.claude/commands/workflow/session/resume.md +61 -0
- package/.claude/commands/workflow/session/start.md +200 -0
- package/.claude/commands/workflow/status.md +352 -0
- package/.claude/commands/workflow/tdd-plan.md +460 -0
- package/.claude/commands/workflow/tdd-verify.md +386 -0
- package/.claude/commands/workflow/test-cycle-execute.md +498 -0
- package/.claude/commands/workflow/test-fix-gen.md +699 -0
- package/.claude/commands/workflow/test-gen.md +529 -0
- package/.claude/commands/workflow/tools/conflict-resolution.md +680 -0
- package/.claude/commands/workflow/tools/context-gather.md +434 -0
- package/.claude/commands/workflow/tools/task-generate-agent.md +291 -0
- package/.claude/commands/workflow/tools/task-generate-tdd.md +518 -0
- package/.claude/commands/workflow/tools/tdd-coverage-analysis.md +309 -0
- package/.claude/commands/workflow/tools/test-concept-enhanced.md +163 -0
- package/.claude/commands/workflow/tools/test-context-gather.md +235 -0
- package/.claude/commands/workflow/tools/test-task-generate.md +256 -0
- package/.claude/commands/workflow/ui-design/animation-extract.md +1150 -0
- package/.claude/commands/workflow/ui-design/codify-style.md +652 -0
- package/.claude/commands/workflow/ui-design/design-sync.md +454 -0
- package/.claude/commands/workflow/ui-design/explore-auto.md +678 -0
- package/.claude/commands/workflow/ui-design/generate.md +504 -0
- package/.claude/commands/workflow/ui-design/imitate-auto.md +745 -0
- package/.claude/commands/workflow/ui-design/import-from-code.md +537 -0
- package/.claude/commands/workflow/ui-design/layout-extract.md +788 -0
- package/.claude/commands/workflow/ui-design/reference-page-generator.md +356 -0
- package/.claude/commands/workflow/ui-design/style-extract.md +773 -0
- package/.claude/scripts/classify-folders.sh +35 -0
- package/.claude/scripts/convert_tokens_to_css.sh +225 -0
- package/.claude/scripts/detect_changed_modules.sh +157 -0
- package/.claude/scripts/discover-design-files.sh +83 -0
- package/.claude/scripts/extract-animations.js +243 -0
- package/.claude/scripts/extract-computed-styles.js +118 -0
- package/.claude/scripts/extract-layout-structure.js +411 -0
- package/.claude/scripts/generate_module_docs.sh +713 -0
- package/.claude/scripts/get_modules_by_depth.sh +166 -0
- package/.claude/scripts/ui-generate-preview.sh +391 -0
- package/.claude/scripts/ui-instantiate-prototypes.sh +811 -0
- package/.claude/scripts/update_module_claude.sh +333 -0
- package/.claude/skills/command-guide/SKILL.md +388 -0
- package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +592 -0
- package/.claude/skills/command-guide/guides/cli-tools-guide.md +410 -0
- package/.claude/skills/command-guide/guides/examples.md +537 -0
- package/.claude/skills/command-guide/guides/getting-started.md +242 -0
- package/.claude/skills/command-guide/guides/implementation-details.md +1010 -0
- package/.claude/skills/command-guide/guides/index-structure.md +326 -0
- package/.claude/skills/command-guide/guides/troubleshooting.md +92 -0
- package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +316 -0
- package/.claude/skills/command-guide/guides/workflow-patterns.md +662 -0
- package/.claude/skills/command-guide/index/all-commands.json +783 -0
- package/.claude/skills/command-guide/index/by-category.json +811 -0
- package/.claude/skills/command-guide/index/by-use-case.json +797 -0
- package/.claude/skills/command-guide/index/command-relationships.json +307 -0
- package/.claude/skills/command-guide/index/essential-commands.json +123 -0
- package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +722 -0
- package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +270 -0
- package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +182 -0
- package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +396 -0
- package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +558 -0
- package/.claude/skills/command-guide/reference/agents/code-developer.md +310 -0
- package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +328 -0
- package/.claude/skills/command-guide/reference/agents/context-search-agent.md +577 -0
- package/.claude/skills/command-guide/reference/agents/doc-generator.md +330 -0
- package/.claude/skills/command-guide/reference/agents/memory-bridge.md +94 -0
- package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +399 -0
- package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +343 -0
- package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +593 -0
- package/.claude/skills/command-guide/reference/agents/universal-executor.md +131 -0
- package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +440 -0
- package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +93 -0
- package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +687 -0
- package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -0
- package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -0
- package/.claude/skills/command-guide/reference/commands/memory/docs.md +610 -0
- package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +182 -0
- package/.claude/skills/command-guide/reference/commands/memory/load.md +240 -0
- package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +525 -0
- package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +396 -0
- package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +477 -0
- package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -0
- package/.claude/skills/command-guide/reference/commands/memory/update-related.md +332 -0
- package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +517 -0
- package/.claude/skills/command-guide/reference/commands/task/breakdown.md +204 -0
- package/.claude/skills/command-guide/reference/commands/task/create.md +152 -0
- package/.claude/skills/command-guide/reference/commands/task/execute.md +270 -0
- package/.claude/skills/command-guide/reference/commands/task/replan.md +437 -0
- package/.claude/skills/command-guide/reference/commands/version.md +254 -0
- package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +447 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +604 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +466 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +496 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -0
- package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -0
- package/.claude/skills/command-guide/reference/commands/workflow/execute.md +460 -0
- package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -0
- package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +634 -0
- package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +602 -0
- package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +582 -0
- package/.claude/skills/command-guide/reference/commands/workflow/plan.md +551 -0
- package/.claude/skills/command-guide/reference/commands/workflow/replan.md +515 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +646 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +795 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +805 -0
- package/.claude/skills/command-guide/reference/commands/workflow/review.md +291 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +500 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +96 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +61 -0
- package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +180 -0
- package/.claude/skills/command-guide/reference/commands/workflow/status.md +352 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +460 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +386 -0
- package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +498 -0
- package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -0
- package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +529 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +680 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +151 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +518 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +309 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +163 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +235 -0
- package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +256 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +1150 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +652 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +454 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +678 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +504 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +745 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +537 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +788 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +356 -0
- package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +773 -0
- package/.claude/skills/command-guide/scripts/analyze_commands.py +502 -0
- package/.claude/skills/command-guide/scripts/update-index.sh +130 -0
- package/.claude/skills/command-guide/templates/issue-bug.md +104 -0
- package/.claude/skills/command-guide/templates/issue-diagnosis.md +275 -0
- package/.claude/skills/command-guide/templates/issue-feature.md +97 -0
- package/.claude/skills/command-guide/templates/issue-question.md +141 -0
- package/.claude/skills/prompt-enhancer/SKILL.md +124 -0
- package/.claude/workflows/_template-compare-matrix.html +692 -0
- package/.claude/workflows/cli-templates/fix-plan-template.json +75 -0
- package/.claude/workflows/cli-templates/fix-progress-template.json +48 -0
- package/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md +299 -0
- package/.claude/workflows/cli-templates/planning-roles/data-architect.md +120 -0
- package/.claude/workflows/cli-templates/planning-roles/product-manager.md +119 -0
- package/.claude/workflows/cli-templates/planning-roles/product-owner.md +261 -0
- package/.claude/workflows/cli-templates/planning-roles/scrum-master.md +186 -0
- package/.claude/workflows/cli-templates/planning-roles/subject-matter-expert.md +281 -0
- package/.claude/workflows/cli-templates/planning-roles/synthesis-role.md +414 -0
- package/.claude/workflows/cli-templates/planning-roles/system-architect.md +106 -0
- package/.claude/workflows/cli-templates/planning-roles/test-strategist.md +124 -0
- package/.claude/workflows/cli-templates/planning-roles/ui-designer.md +379 -0
- package/.claude/workflows/cli-templates/planning-roles/ux-expert.md +240 -0
- package/.claude/workflows/cli-templates/prompts/analysis/01-diagnose-bug-root-cause.txt +127 -0
- package/.claude/workflows/cli-templates/prompts/analysis/01-trace-code-execution.txt +115 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt +37 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-technical-document.txt +33 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-review-architecture.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/analysis/02-review-code-quality.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/analysis/03-analyze-performance.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/analysis/03-assess-security-risks.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/analysis/03-review-quality-standards.txt +29 -0
- package/.claude/workflows/cli-templates/prompts/development/02-generate-tests.txt +70 -0
- package/.claude/workflows/cli-templates/prompts/development/02-implement-component-ui.txt +55 -0
- package/.claude/workflows/cli-templates/prompts/development/02-implement-feature.txt +58 -0
- package/.claude/workflows/cli-templates/prompts/development/02-refactor-codebase.txt +55 -0
- package/.claude/workflows/cli-templates/prompts/development/03-debug-runtime-issues.txt +55 -0
- package/.claude/workflows/cli-templates/prompts/documentation/api.txt +15 -0
- package/.claude/workflows/cli-templates/prompts/documentation/folder-navigation.txt +27 -0
- package/.claude/workflows/cli-templates/prompts/documentation/module-readme.txt +49 -0
- package/.claude/workflows/cli-templates/prompts/documentation/project-architecture.txt +41 -0
- package/.claude/workflows/cli-templates/prompts/documentation/project-examples.txt +35 -0
- package/.claude/workflows/cli-templates/prompts/documentation/project-readme.txt +35 -0
- package/.claude/workflows/cli-templates/prompts/memory/02-document-module-structure.txt +165 -0
- package/.claude/workflows/cli-templates/prompts/planning/01-plan-architecture-design.txt +109 -0
- package/.claude/workflows/cli-templates/prompts/planning/02-breakdown-task-steps.txt +30 -0
- package/.claude/workflows/cli-templates/prompts/planning/02-design-component-spec.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/planning/03-evaluate-concept-feasibility.txt +127 -0
- package/.claude/workflows/cli-templates/prompts/planning/03-plan-migration-strategy.txt +30 -0
- package/.claude/workflows/cli-templates/prompts/tech/tech-module-format.txt +359 -0
- package/.claude/workflows/cli-templates/prompts/tech/tech-skill-index.txt +185 -0
- package/.claude/workflows/cli-templates/prompts/test/test-concept-analysis.txt +179 -0
- package/.claude/workflows/cli-templates/prompts/universal/00-universal-creative-style.txt +95 -0
- package/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt +92 -0
- package/.claude/workflows/cli-templates/prompts/verification/codex-technical.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/verification/cross-validation.txt +28 -0
- package/.claude/workflows/cli-templates/prompts/verification/gemini-strategic.txt +27 -0
- package/.claude/workflows/cli-templates/prompts/workflow/analysis-results-structure.txt +224 -0
- package/.claude/workflows/cli-templates/prompts/workflow/codex-feasibility-validation.txt +176 -0
- package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -0
- package/.claude/workflows/cli-templates/prompts/workflow/impl-plan-template.txt +286 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-aggregation.txt +172 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +98 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-index.txt +224 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +98 -0
- package/.claude/workflows/cli-templates/prompts/workflow/skill-sessions-timeline.txt +53 -0
- package/.claude/workflows/cli-templates/prompts/workflow/task-json-agent-mode.txt +123 -0
- package/.claude/workflows/cli-templates/prompts/workflow/task-json-cli-mode.txt +182 -0
- package/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json +234 -0
- package/.claude/workflows/cli-templates/schemas/explore-json-schema.json +124 -0
- package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +273 -0
- package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +219 -0
- package/.claude/workflows/cli-templates/schemas/project-json-schema.json +221 -0
- package/.claude/workflows/cli-templates/schemas/review-deep-dive-results-schema.json +82 -0
- package/.claude/workflows/cli-templates/schemas/review-dimension-results-schema.json +51 -0
- package/.claude/workflows/cli-templates/tech-stacks/go-dev.md +91 -0
- package/.claude/workflows/cli-templates/tech-stacks/java-dev.md +107 -0
- package/.claude/workflows/cli-templates/tech-stacks/javascript-dev.md +58 -0
- package/.claude/workflows/cli-templates/tech-stacks/python-dev.md +79 -0
- package/.claude/workflows/cli-templates/tech-stacks/react-dev.md +103 -0
- package/.claude/workflows/cli-templates/tech-stacks/typescript-dev.md +83 -0
- package/.claude/workflows/cli-templates/ui-design/systems/animation-tokens.json +247 -0
- package/.claude/workflows/cli-templates/ui-design/systems/design-tokens.json +342 -0
- package/.claude/workflows/cli-templates/ui-design/systems/layout-templates.json +145 -0
- package/.claude/workflows/context-search-strategy.md +77 -0
- package/.claude/workflows/intelligent-tools-strategy.md +662 -0
- package/.claude/workflows/review-directory-specification.md +336 -0
- package/.claude/workflows/task-core.md +214 -0
- package/.claude/workflows/tool-strategy.md +71 -0
- package/.claude/workflows/workflow-architecture.md +942 -0
- package/.codex/AGENTS.md +330 -0
- package/.gemini/GEMINI.md +164 -0
- package/.qwen/QWEN.md +164 -0
- package/CLAUDE.md +91 -0
- package/LICENSE +21 -0
- package/README.md +219 -0
- package/ccw/README.md +121 -0
- package/ccw/bin/ccw.js +10 -0
- package/ccw/src/cli.js +100 -0
- package/ccw/src/commands/install.js +324 -0
- package/ccw/src/commands/list.js +37 -0
- package/ccw/src/commands/serve.js +67 -0
- package/ccw/src/commands/uninstall.js +238 -0
- package/ccw/src/commands/upgrade.js +307 -0
- package/ccw/src/commands/view.js +14 -0
- package/ccw/src/core/dashboard-generator-patch.js +29 -0
- package/ccw/src/core/dashboard-generator.js +667 -0
- package/ccw/src/core/data-aggregator.js +409 -0
- package/ccw/src/core/lite-scanner.js +290 -0
- package/ccw/src/core/manifest.js +201 -0
- package/ccw/src/core/server.js +1327 -0
- package/ccw/src/core/server.js.bak +385 -0
- package/ccw/src/core/server_original.bak +385 -0
- package/ccw/src/core/session-scanner.js +235 -0
- package/ccw/src/index.js +9 -0
- package/ccw/src/templates/dashboard-js/api.js +200 -0
- package/ccw/src/templates/dashboard-js/components/_conflict_tab.js +112 -0
- package/ccw/src/templates/dashboard-js/components/_exp_helpers.js +54 -0
- package/ccw/src/templates/dashboard-js/components/_review_tab.js +640 -0
- package/ccw/src/templates/dashboard-js/components/carousel.js +398 -0
- package/ccw/src/templates/dashboard-js/components/flowchart.js +493 -0
- package/ccw/src/templates/dashboard-js/components/hook-manager.js +273 -0
- package/ccw/src/templates/dashboard-js/components/mcp-manager.js +506 -0
- package/ccw/src/templates/dashboard-js/components/modals.js +260 -0
- package/ccw/src/templates/dashboard-js/components/navigation.js +239 -0
- package/ccw/src/templates/dashboard-js/components/notifications.js +194 -0
- package/ccw/src/templates/dashboard-js/components/sidebar.js +31 -0
- package/ccw/src/templates/dashboard-js/components/tabs-context.js +1093 -0
- package/ccw/src/templates/dashboard-js/components/tabs-other.js +273 -0
- package/ccw/src/templates/dashboard-js/components/task-drawer-core.js +477 -0
- package/ccw/src/templates/dashboard-js/components/task-drawer-renderers.js +447 -0
- package/ccw/src/templates/dashboard-js/components/theme.js +21 -0
- package/ccw/src/templates/dashboard-js/main.js +57 -0
- package/ccw/src/templates/dashboard-js/state.js +37 -0
- package/ccw/src/templates/dashboard-js/utils.js +153 -0
- package/ccw/src/templates/dashboard-js/views/fix-session.js +180 -0
- package/ccw/src/templates/dashboard-js/views/home.js +193 -0
- package/ccw/src/templates/dashboard-js/views/hook-manager.js +387 -0
- package/ccw/src/templates/dashboard-js/views/lite-tasks.js +390 -0
- package/ccw/src/templates/dashboard-js/views/mcp-manager.js +271 -0
- package/ccw/src/templates/dashboard-js/views/project-overview.js +246 -0
- package/ccw/src/templates/dashboard-js/views/review-session.js +711 -0
- package/ccw/src/templates/dashboard-js/views/session-detail.js +770 -0
- package/ccw/src/templates/dashboard.css +7660 -0
- package/ccw/src/templates/dashboard.html +630 -0
- package/ccw/src/templates/dashboard_tailwind.html +42 -0
- package/ccw/src/templates/dashboard_test.html +37 -0
- package/ccw/src/templates/review-cycle-dashboard.html +1930 -0
- package/ccw/src/templates/tailwind-base.css +212 -0
- package/ccw/src/templates/workflow-dashboard.html +401 -0
- package/ccw/src/utils/browser-launcher.js +49 -0
- package/ccw/src/utils/file-utils.js +48 -0
- package/ccw/src/utils/path-resolver.js +279 -0
- package/ccw/src/utils/ui.js +148 -0
- package/package.json +66 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { readFileSync, existsSync, writeFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Safely read a JSON file
|
|
6
|
+
* @param {string} filePath - Path to JSON file
|
|
7
|
+
* @returns {Object|null} - Parsed JSON or null on error
|
|
8
|
+
*/
|
|
9
|
+
export function readJsonFile(filePath) {
|
|
10
|
+
if (!existsSync(filePath)) return null;
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(readFileSync(filePath, 'utf8'));
|
|
13
|
+
} catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Safely read a text file
|
|
20
|
+
* @param {string} filePath - Path to text file
|
|
21
|
+
* @returns {string|null} - File contents or null on error
|
|
22
|
+
*/
|
|
23
|
+
export function readTextFile(filePath) {
|
|
24
|
+
if (!existsSync(filePath)) return null;
|
|
25
|
+
try {
|
|
26
|
+
return readFileSync(filePath, 'utf8');
|
|
27
|
+
} catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Write content to a file
|
|
34
|
+
* @param {string} filePath - Path to file
|
|
35
|
+
* @param {string} content - Content to write
|
|
36
|
+
*/
|
|
37
|
+
export function writeTextFile(filePath, content) {
|
|
38
|
+
writeFileSync(filePath, content, 'utf8');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Check if a path exists
|
|
43
|
+
* @param {string} filePath - Path to check
|
|
44
|
+
* @returns {boolean}
|
|
45
|
+
*/
|
|
46
|
+
export function pathExists(filePath) {
|
|
47
|
+
return existsSync(filePath);
|
|
48
|
+
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { resolve, join, relative, isAbsolute } from 'path';
|
|
2
|
+
import { existsSync, mkdirSync, realpathSync, statSync, readFileSync, writeFileSync } from 'fs';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a path, handling ~ for home directory
|
|
7
|
+
* @param {string} inputPath - Path to resolve
|
|
8
|
+
* @returns {string} - Absolute path
|
|
9
|
+
*/
|
|
10
|
+
export function resolvePath(inputPath) {
|
|
11
|
+
if (!inputPath) return process.cwd();
|
|
12
|
+
|
|
13
|
+
// Handle ~ for home directory
|
|
14
|
+
if (inputPath.startsWith('~')) {
|
|
15
|
+
return join(homedir(), inputPath.slice(1));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return resolve(inputPath);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Validate and sanitize a user-provided path
|
|
23
|
+
* Prevents path traversal attacks and validates path is within allowed boundaries
|
|
24
|
+
* @param {string} inputPath - User-provided path
|
|
25
|
+
* @param {Object} options - Validation options
|
|
26
|
+
* @param {string} options.baseDir - Base directory to restrict paths within (optional)
|
|
27
|
+
* @param {boolean} options.mustExist - Whether path must exist (default: false)
|
|
28
|
+
* @param {boolean} options.allowHome - Whether to allow home directory paths (default: true)
|
|
29
|
+
* @returns {Object} - { valid: boolean, path: string|null, error: string|null }
|
|
30
|
+
*/
|
|
31
|
+
export function validatePath(inputPath, options = {}) {
|
|
32
|
+
const { baseDir = null, mustExist = false, allowHome = true } = options;
|
|
33
|
+
|
|
34
|
+
// Check for empty/null input
|
|
35
|
+
if (!inputPath || typeof inputPath !== 'string') {
|
|
36
|
+
return { valid: false, path: null, error: 'Path is required' };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Trim whitespace
|
|
40
|
+
const trimmedPath = inputPath.trim();
|
|
41
|
+
|
|
42
|
+
// Check for suspicious patterns (null bytes, control characters)
|
|
43
|
+
if (/[\x00-\x1f]/.test(trimmedPath)) {
|
|
44
|
+
return { valid: false, path: null, error: 'Path contains invalid characters' };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Resolve the path
|
|
48
|
+
let resolvedPath;
|
|
49
|
+
try {
|
|
50
|
+
resolvedPath = resolvePath(trimmedPath);
|
|
51
|
+
} catch (err) {
|
|
52
|
+
return { valid: false, path: null, error: `Invalid path: ${err.message}` };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check if path exists when required
|
|
56
|
+
if (mustExist && !existsSync(resolvedPath)) {
|
|
57
|
+
return { valid: false, path: null, error: `Path does not exist: ${resolvedPath}` };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Get real path if it exists (resolves symlinks)
|
|
61
|
+
let realPath = resolvedPath;
|
|
62
|
+
if (existsSync(resolvedPath)) {
|
|
63
|
+
try {
|
|
64
|
+
realPath = realpathSync(resolvedPath);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
return { valid: false, path: null, error: `Cannot resolve path: ${err.message}` };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Check if within base directory when specified
|
|
71
|
+
if (baseDir) {
|
|
72
|
+
const resolvedBase = resolvePath(baseDir);
|
|
73
|
+
const relativePath = relative(resolvedBase, realPath);
|
|
74
|
+
|
|
75
|
+
// Path traversal detection: relative path should not start with '..'
|
|
76
|
+
if (relativePath.startsWith('..') || isAbsolute(relativePath)) {
|
|
77
|
+
return {
|
|
78
|
+
valid: false,
|
|
79
|
+
path: null,
|
|
80
|
+
error: `Path must be within ${resolvedBase}`
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Check home directory restriction
|
|
86
|
+
if (!allowHome) {
|
|
87
|
+
const home = homedir();
|
|
88
|
+
if (realPath === home || realPath.startsWith(home + '/') || realPath.startsWith(home + '\\')) {
|
|
89
|
+
// This is fine, we're just checking if it's explicitly the home dir itself
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return { valid: true, path: realPath, error: null };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Validate output file path for writing
|
|
98
|
+
* @param {string} outputPath - Output file path
|
|
99
|
+
* @param {string} defaultDir - Default directory if path is relative
|
|
100
|
+
* @returns {Object} - { valid: boolean, path: string|null, error: string|null }
|
|
101
|
+
*/
|
|
102
|
+
export function validateOutputPath(outputPath, defaultDir = process.cwd()) {
|
|
103
|
+
if (!outputPath || typeof outputPath !== 'string') {
|
|
104
|
+
return { valid: false, path: null, error: 'Output path is required' };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const trimmedPath = outputPath.trim();
|
|
108
|
+
|
|
109
|
+
// Check for suspicious patterns
|
|
110
|
+
if (/[\x00-\x1f]/.test(trimmedPath)) {
|
|
111
|
+
return { valid: false, path: null, error: 'Output path contains invalid characters' };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Resolve the path
|
|
115
|
+
let resolvedPath;
|
|
116
|
+
try {
|
|
117
|
+
resolvedPath = isAbsolute(trimmedPath) ? trimmedPath : join(defaultDir, trimmedPath);
|
|
118
|
+
resolvedPath = resolve(resolvedPath);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
return { valid: false, path: null, error: `Invalid output path: ${err.message}` };
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Ensure it's not a directory
|
|
124
|
+
if (existsSync(resolvedPath)) {
|
|
125
|
+
try {
|
|
126
|
+
const stat = statSync(resolvedPath);
|
|
127
|
+
if (stat.isDirectory()) {
|
|
128
|
+
return { valid: false, path: null, error: 'Output path is a directory, expected a file' };
|
|
129
|
+
}
|
|
130
|
+
} catch {
|
|
131
|
+
// Ignore stat errors
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return { valid: true, path: resolvedPath, error: null };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Get potential template locations
|
|
140
|
+
* @returns {string[]} - Array of existing template directories
|
|
141
|
+
*/
|
|
142
|
+
export function getTemplateLocations() {
|
|
143
|
+
const locations = [
|
|
144
|
+
join(homedir(), '.claude', 'templates'),
|
|
145
|
+
join(process.cwd(), '.claude', 'templates')
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
return locations.filter(loc => existsSync(loc));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Find a template file in known locations
|
|
153
|
+
* @param {string} templateName - Name of template file (e.g., 'workflow-dashboard.html')
|
|
154
|
+
* @returns {string|null} - Path to template or null if not found
|
|
155
|
+
*/
|
|
156
|
+
export function findTemplate(templateName) {
|
|
157
|
+
const locations = getTemplateLocations();
|
|
158
|
+
|
|
159
|
+
for (const loc of locations) {
|
|
160
|
+
const templatePath = join(loc, templateName);
|
|
161
|
+
if (existsSync(templatePath)) {
|
|
162
|
+
return templatePath;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Ensure directory exists, creating if necessary
|
|
171
|
+
* @param {string} dirPath - Directory path to ensure
|
|
172
|
+
*/
|
|
173
|
+
export function ensureDir(dirPath) {
|
|
174
|
+
if (!existsSync(dirPath)) {
|
|
175
|
+
mkdirSync(dirPath, { recursive: true });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Get the .workflow directory path from project path
|
|
181
|
+
* @param {string} projectPath - Path to project
|
|
182
|
+
* @returns {string} - Path to .workflow directory
|
|
183
|
+
*/
|
|
184
|
+
export function getWorkflowDir(projectPath) {
|
|
185
|
+
return join(resolvePath(projectPath), '.workflow');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Normalize path for display (handle Windows backslashes)
|
|
190
|
+
* @param {string} filePath - Path to normalize
|
|
191
|
+
* @returns {string}
|
|
192
|
+
*/
|
|
193
|
+
export function normalizePathForDisplay(filePath) {
|
|
194
|
+
return filePath.replace(/\\/g, '/');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Recent paths storage file
|
|
198
|
+
const RECENT_PATHS_FILE = join(homedir(), '.ccw-recent-paths.json');
|
|
199
|
+
const MAX_RECENT_PATHS = 10;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Get recent project paths
|
|
203
|
+
* @returns {string[]} - Array of recent paths
|
|
204
|
+
*/
|
|
205
|
+
export function getRecentPaths() {
|
|
206
|
+
try {
|
|
207
|
+
if (existsSync(RECENT_PATHS_FILE)) {
|
|
208
|
+
const content = readFileSync(RECENT_PATHS_FILE, 'utf8');
|
|
209
|
+
const data = JSON.parse(content);
|
|
210
|
+
return Array.isArray(data.paths) ? data.paths : [];
|
|
211
|
+
}
|
|
212
|
+
} catch {
|
|
213
|
+
// Ignore errors, return empty array
|
|
214
|
+
}
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Track a project path (add to recent paths)
|
|
220
|
+
* @param {string} projectPath - Path to track
|
|
221
|
+
*/
|
|
222
|
+
export function trackRecentPath(projectPath) {
|
|
223
|
+
try {
|
|
224
|
+
const normalized = normalizePathForDisplay(resolvePath(projectPath));
|
|
225
|
+
let paths = getRecentPaths();
|
|
226
|
+
|
|
227
|
+
// Remove if already exists (will be added to front)
|
|
228
|
+
paths = paths.filter(p => normalizePathForDisplay(p) !== normalized);
|
|
229
|
+
|
|
230
|
+
// Add to front
|
|
231
|
+
paths.unshift(normalized);
|
|
232
|
+
|
|
233
|
+
// Limit to max
|
|
234
|
+
paths = paths.slice(0, MAX_RECENT_PATHS);
|
|
235
|
+
|
|
236
|
+
// Save
|
|
237
|
+
writeFileSync(RECENT_PATHS_FILE, JSON.stringify({ paths }, null, 2), 'utf8');
|
|
238
|
+
} catch {
|
|
239
|
+
// Ignore errors
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Clear recent paths
|
|
245
|
+
*/
|
|
246
|
+
export function clearRecentPaths() {
|
|
247
|
+
try {
|
|
248
|
+
if (existsSync(RECENT_PATHS_FILE)) {
|
|
249
|
+
writeFileSync(RECENT_PATHS_FILE, JSON.stringify({ paths: [] }, null, 2), 'utf8');
|
|
250
|
+
}
|
|
251
|
+
} catch {
|
|
252
|
+
// Ignore errors
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Remove a specific path from recent paths
|
|
258
|
+
* @param {string} pathToRemove - Path to remove
|
|
259
|
+
* @returns {boolean} - True if removed, false if not found
|
|
260
|
+
*/
|
|
261
|
+
export function removeRecentPath(pathToRemove) {
|
|
262
|
+
try {
|
|
263
|
+
const normalized = normalizePathForDisplay(resolvePath(pathToRemove));
|
|
264
|
+
let paths = getRecentPaths();
|
|
265
|
+
const originalLength = paths.length;
|
|
266
|
+
|
|
267
|
+
// Filter out the path to remove
|
|
268
|
+
paths = paths.filter(p => normalizePathForDisplay(p) !== normalized);
|
|
269
|
+
|
|
270
|
+
if (paths.length < originalLength) {
|
|
271
|
+
// Save updated list
|
|
272
|
+
writeFileSync(RECENT_PATHS_FILE, JSON.stringify({ paths }, null, 2), 'utf8');
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
} catch {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import figlet from 'figlet';
|
|
3
|
+
import boxen from 'boxen';
|
|
4
|
+
import gradient from 'gradient-string';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
|
|
7
|
+
// Custom gradient colors
|
|
8
|
+
const claudeGradient = gradient(['#00d4ff', '#00ff88']);
|
|
9
|
+
const codeGradient = gradient(['#00ff88', '#ffff00']);
|
|
10
|
+
const workflowGradient = gradient(['#ffff00', '#ff8800']);
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Display ASCII art banner
|
|
14
|
+
*/
|
|
15
|
+
export function showBanner() {
|
|
16
|
+
console.log('');
|
|
17
|
+
|
|
18
|
+
// CLAUDE in cyan gradient
|
|
19
|
+
try {
|
|
20
|
+
const claudeText = figlet.textSync('Claude', { font: 'Standard' });
|
|
21
|
+
console.log(claudeGradient(claudeText));
|
|
22
|
+
} catch {
|
|
23
|
+
console.log(chalk.cyan.bold(' Claude'));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// CODE in green gradient
|
|
27
|
+
try {
|
|
28
|
+
const codeText = figlet.textSync('Code', { font: 'Standard' });
|
|
29
|
+
console.log(codeGradient(codeText));
|
|
30
|
+
} catch {
|
|
31
|
+
console.log(chalk.green.bold(' Code'));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// WORKFLOW in yellow gradient
|
|
35
|
+
try {
|
|
36
|
+
const workflowText = figlet.textSync('Workflow', { font: 'Standard' });
|
|
37
|
+
console.log(workflowGradient(workflowText));
|
|
38
|
+
} catch {
|
|
39
|
+
console.log(chalk.yellow.bold(' Workflow'));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
console.log('');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Display header with version info
|
|
47
|
+
* @param {string} version - Version number
|
|
48
|
+
* @param {string} mode - Installation mode
|
|
49
|
+
*/
|
|
50
|
+
export function showHeader(version, mode = '') {
|
|
51
|
+
showBanner();
|
|
52
|
+
|
|
53
|
+
const versionText = version ? `v${version}` : '';
|
|
54
|
+
const modeText = mode ? ` (${mode})` : '';
|
|
55
|
+
|
|
56
|
+
console.log(boxen(
|
|
57
|
+
chalk.cyan.bold('Claude Code Workflow System') + '\n' +
|
|
58
|
+
chalk.gray(`Installer ${versionText}${modeText}`) + '\n\n' +
|
|
59
|
+
chalk.white('Unified workflow system with comprehensive coordination'),
|
|
60
|
+
{
|
|
61
|
+
padding: 1,
|
|
62
|
+
margin: { top: 0, bottom: 1, left: 2, right: 2 },
|
|
63
|
+
borderStyle: 'round',
|
|
64
|
+
borderColor: 'cyan'
|
|
65
|
+
}
|
|
66
|
+
));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Create a spinner
|
|
71
|
+
* @param {string} text - Spinner text
|
|
72
|
+
* @returns {ora.Ora}
|
|
73
|
+
*/
|
|
74
|
+
export function createSpinner(text) {
|
|
75
|
+
return ora({
|
|
76
|
+
text,
|
|
77
|
+
color: 'cyan',
|
|
78
|
+
spinner: 'dots'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Display success message
|
|
84
|
+
* @param {string} message
|
|
85
|
+
*/
|
|
86
|
+
export function success(message) {
|
|
87
|
+
console.log(chalk.green('✓') + ' ' + chalk.green(message));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Display info message
|
|
92
|
+
* @param {string} message
|
|
93
|
+
*/
|
|
94
|
+
export function info(message) {
|
|
95
|
+
console.log(chalk.cyan('ℹ') + ' ' + chalk.cyan(message));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Display warning message
|
|
100
|
+
* @param {string} message
|
|
101
|
+
*/
|
|
102
|
+
export function warning(message) {
|
|
103
|
+
console.log(chalk.yellow('⚠') + ' ' + chalk.yellow(message));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Display error message
|
|
108
|
+
* @param {string} message
|
|
109
|
+
*/
|
|
110
|
+
export function error(message) {
|
|
111
|
+
console.log(chalk.red('✖') + ' ' + chalk.red(message));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Display step message
|
|
116
|
+
* @param {number} step - Step number
|
|
117
|
+
* @param {number} total - Total steps
|
|
118
|
+
* @param {string} message - Step message
|
|
119
|
+
*/
|
|
120
|
+
export function step(stepNum, total, message) {
|
|
121
|
+
console.log(chalk.gray(`[${stepNum}/${total}]`) + ' ' + chalk.white(message));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Display summary box
|
|
126
|
+
* @param {Object} options
|
|
127
|
+
* @param {string} options.title - Box title
|
|
128
|
+
* @param {string[]} options.lines - Content lines
|
|
129
|
+
* @param {string} options.borderColor - Border color
|
|
130
|
+
*/
|
|
131
|
+
export function summaryBox({ title, lines, borderColor = 'green' }) {
|
|
132
|
+
const content = lines.join('\n');
|
|
133
|
+
console.log(boxen(content, {
|
|
134
|
+
title,
|
|
135
|
+
titleAlignment: 'center',
|
|
136
|
+
padding: 1,
|
|
137
|
+
margin: { top: 1, bottom: 1, left: 2, right: 2 },
|
|
138
|
+
borderStyle: 'round',
|
|
139
|
+
borderColor
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Display a divider line
|
|
145
|
+
*/
|
|
146
|
+
export function divider() {
|
|
147
|
+
console.log(chalk.gray('─'.repeat(60)));
|
|
148
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-code-workflow",
|
|
3
|
+
"version": "6.0.0",
|
|
4
|
+
"description": "JSON-driven multi-agent development framework with intelligent CLI orchestration (Gemini/Qwen/Codex), context-first architecture, and automated workflow execution",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "ccw/src/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ccw": "./ccw/bin/ccw.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "node ccw/bin/ccw.js",
|
|
12
|
+
"test": "node --test",
|
|
13
|
+
"prepublishOnly": "echo 'Ready to publish @dyw/claude-code-workflow'"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"claude",
|
|
17
|
+
"workflow",
|
|
18
|
+
"ai",
|
|
19
|
+
"cli",
|
|
20
|
+
"dashboard",
|
|
21
|
+
"code-review",
|
|
22
|
+
"automation",
|
|
23
|
+
"development"
|
|
24
|
+
],
|
|
25
|
+
"author": "dyw",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=16.0.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"commander": "^11.0.0",
|
|
32
|
+
"open": "^9.1.0",
|
|
33
|
+
"chalk": "^5.3.0",
|
|
34
|
+
"glob": "^10.3.0",
|
|
35
|
+
"inquirer": "^9.2.0",
|
|
36
|
+
"ora": "^7.0.0",
|
|
37
|
+
"figlet": "^1.7.0",
|
|
38
|
+
"boxen": "^7.1.0",
|
|
39
|
+
"gradient-string": "^2.0.2"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"ccw/bin/",
|
|
43
|
+
"ccw/src/",
|
|
44
|
+
".claude/agents/",
|
|
45
|
+
".claude/commands/",
|
|
46
|
+
".claude/output-styles/",
|
|
47
|
+
".claude/workflows/",
|
|
48
|
+
".claude/scripts/",
|
|
49
|
+
".claude/prompt-templates/",
|
|
50
|
+
".claude/python_script/",
|
|
51
|
+
".claude/skills/",
|
|
52
|
+
".codex/",
|
|
53
|
+
".gemini/",
|
|
54
|
+
".qwen/",
|
|
55
|
+
"CLAUDE.md",
|
|
56
|
+
"README.md"
|
|
57
|
+
],
|
|
58
|
+
"repository": {
|
|
59
|
+
"type": "git",
|
|
60
|
+
"url": "git+https://github.com/catlog22/Claude-Code-Workflow.git"
|
|
61
|
+
},
|
|
62
|
+
"bugs": {
|
|
63
|
+
"url": "https://github.com/catlog22/Claude-Code-Workflow/issues"
|
|
64
|
+
},
|
|
65
|
+
"homepage": "https://github.com/catlog22/Claude-Code-Workflow#readme"
|
|
66
|
+
}
|