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,212 @@
|
|
|
1
|
+
/* Tailwind Base Styles with Design Tokens */
|
|
2
|
+
|
|
3
|
+
@tailwind base;
|
|
4
|
+
@tailwind components;
|
|
5
|
+
@tailwind utilities;
|
|
6
|
+
|
|
7
|
+
@layer base {
|
|
8
|
+
/* CSS Custom Properties - Light Mode (Default) */
|
|
9
|
+
:root {
|
|
10
|
+
/* Base Colors */
|
|
11
|
+
--color-background: 0 0% 100%; /* oklch(1 0 0) -> white */
|
|
12
|
+
--color-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
|
|
13
|
+
--color-card: 0 0% 100%; /* oklch(1 0 0) -> white */
|
|
14
|
+
--color-card-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
|
|
15
|
+
--color-border: 0 0% 90%; /* oklch(0.9 0 0) -> light gray */
|
|
16
|
+
--color-input: 0 0% 90%; /* oklch(0.9 0 0) -> light gray */
|
|
17
|
+
--color-ring: 220 65% 50%; /* oklch(0.5 0.15 250) -> primary blue */
|
|
18
|
+
|
|
19
|
+
/* Interactive Colors - Primary */
|
|
20
|
+
--color-interactive-primary-default: 220 65% 50%; /* oklch(0.5 0.15 250) -> #4066bf */
|
|
21
|
+
--color-interactive-primary-hover: 220 65% 55%; /* oklch(0.55 0.15 250) -> lighter blue */
|
|
22
|
+
--color-interactive-primary-active: 220 65% 45%; /* oklch(0.45 0.15 250) -> darker blue */
|
|
23
|
+
--color-interactive-primary-disabled: 220 30% 70%; /* oklch(0.7 0.05 250) -> muted blue */
|
|
24
|
+
--color-interactive-primary-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
|
|
25
|
+
|
|
26
|
+
/* Interactive Colors - Secondary */
|
|
27
|
+
--color-interactive-secondary-default: 220 60% 65%; /* oklch(0.65 0.12 250) -> #6b8ccc */
|
|
28
|
+
--color-interactive-secondary-hover: 220 60% 70%; /* oklch(0.7 0.12 250) -> lighter */
|
|
29
|
+
--color-interactive-secondary-active: 220 60% 60%; /* oklch(0.6 0.12 250) -> darker */
|
|
30
|
+
--color-interactive-secondary-disabled: 220 30% 80%; /* oklch(0.8 0.05 250) -> muted */
|
|
31
|
+
--color-interactive-secondary-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
|
|
32
|
+
|
|
33
|
+
/* Interactive Colors - Accent */
|
|
34
|
+
--color-interactive-accent-default: 220 40% 95%; /* oklch(0.95 0.02 250) -> #eef3fa */
|
|
35
|
+
--color-interactive-accent-hover: 220 45% 92%; /* oklch(0.92 0.03 250) -> slightly darker */
|
|
36
|
+
--color-interactive-accent-active: 220 35% 97%; /* oklch(0.97 0.02 250) -> slightly lighter */
|
|
37
|
+
--color-interactive-accent-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
|
|
38
|
+
|
|
39
|
+
/* Interactive Colors - Destructive */
|
|
40
|
+
--color-interactive-destructive-default: 8 75% 55%; /* oklch(0.55 0.22 25) -> #d93025 */
|
|
41
|
+
--color-interactive-destructive-hover: 8 75% 60%; /* oklch(0.6 0.22 25) -> lighter red */
|
|
42
|
+
--color-interactive-destructive-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
|
|
43
|
+
|
|
44
|
+
/* Semantic Colors */
|
|
45
|
+
--color-muted: 0 0% 97%; /* oklch(0.97 0 0) -> very light gray */
|
|
46
|
+
--color-muted-foreground: 0 0% 50%; /* oklch(0.5 0 0) -> medium gray */
|
|
47
|
+
|
|
48
|
+
/* Sidebar Colors */
|
|
49
|
+
--color-sidebar-background: 0 0% 97.5%; /* oklch(0.975 0 0) -> #f8f8f8 */
|
|
50
|
+
--color-sidebar-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
|
|
51
|
+
--color-sidebar-primary: 220 65% 50%; /* oklch(0.5 0.15 250) -> primary blue */
|
|
52
|
+
--color-sidebar-primary-foreground: 0 0% 100%; /* oklch(1 0 0) -> white */
|
|
53
|
+
--color-sidebar-accent: 220 40% 95%; /* oklch(0.95 0.02 250) -> light blue */
|
|
54
|
+
--color-sidebar-accent-foreground: 0 0% 25%; /* oklch(0.25 0 0) -> dark gray */
|
|
55
|
+
--color-sidebar-border: 0 0% 90%; /* oklch(0.9 0 0) -> light gray */
|
|
56
|
+
|
|
57
|
+
/* Typography */
|
|
58
|
+
--font-sans: 'Inter', system-ui, -apple-system, sans-serif;
|
|
59
|
+
--font-mono: 'Consolas', 'Monaco', 'Courier New', monospace;
|
|
60
|
+
|
|
61
|
+
--font-size-xs: 0.75rem; /* 12px */
|
|
62
|
+
--font-size-sm: 0.875rem; /* 14px */
|
|
63
|
+
--font-size-base: 1rem; /* 16px */
|
|
64
|
+
--font-size-lg: 1.125rem; /* 18px */
|
|
65
|
+
--font-size-xl: 1.25rem; /* 20px */
|
|
66
|
+
--font-size-2xl: 1.5rem; /* 24px */
|
|
67
|
+
--font-size-3xl: 1.875rem; /* 30px */
|
|
68
|
+
--font-size-4xl: 2.25rem; /* 36px */
|
|
69
|
+
|
|
70
|
+
--line-height-tight: 1.25;
|
|
71
|
+
--line-height-normal: 1.5;
|
|
72
|
+
--line-height-relaxed: 1.75;
|
|
73
|
+
|
|
74
|
+
--letter-spacing-tight: -0.025em;
|
|
75
|
+
--letter-spacing-normal: 0;
|
|
76
|
+
--letter-spacing-wide: 0.025em;
|
|
77
|
+
|
|
78
|
+
/* Spacing */
|
|
79
|
+
--spacing-0: 0;
|
|
80
|
+
--spacing-1: 0.25rem; /* 4px */
|
|
81
|
+
--spacing-2: 0.5rem; /* 8px */
|
|
82
|
+
--spacing-3: 0.75rem; /* 12px */
|
|
83
|
+
--spacing-4: 1rem; /* 16px */
|
|
84
|
+
--spacing-6: 1.5rem; /* 24px */
|
|
85
|
+
--spacing-8: 2rem; /* 32px */
|
|
86
|
+
--spacing-12: 3rem; /* 48px */
|
|
87
|
+
--spacing-16: 4rem; /* 64px */
|
|
88
|
+
|
|
89
|
+
/* Effects */
|
|
90
|
+
--opacity-disabled: 0.5;
|
|
91
|
+
--opacity-hover: 0.8;
|
|
92
|
+
--opacity-active: 1;
|
|
93
|
+
|
|
94
|
+
/* Shadows */
|
|
95
|
+
--shadow-2xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
96
|
+
--shadow-xs: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
|
97
|
+
--shadow-sm: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
98
|
+
--shadow-md: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
99
|
+
--shadow-lg: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
|
|
100
|
+
--shadow-xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
|
|
101
|
+
|
|
102
|
+
/* Border Radius */
|
|
103
|
+
--border-radius-sm: calc(0.375rem - 4px); /* 2px */
|
|
104
|
+
--border-radius-md: calc(0.375rem - 2px); /* 4px */
|
|
105
|
+
--border-radius-lg: 0.375rem; /* 6px */
|
|
106
|
+
--border-radius-xl: calc(0.375rem + 4px); /* 10px */
|
|
107
|
+
--border-radius-default: 0.375rem; /* 6px */
|
|
108
|
+
|
|
109
|
+
/* Animations */
|
|
110
|
+
--duration-instant: 0ms;
|
|
111
|
+
--duration-fast: 150ms;
|
|
112
|
+
--duration-normal: 200ms;
|
|
113
|
+
--duration-medium: 300ms;
|
|
114
|
+
--duration-slow: 500ms;
|
|
115
|
+
|
|
116
|
+
--easing-linear: linear;
|
|
117
|
+
--easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
118
|
+
--easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
119
|
+
--easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
120
|
+
--easing-spring: cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Dark Mode Theme */
|
|
124
|
+
[data-theme="dark"] {
|
|
125
|
+
/* Base Colors - Dark Mode */
|
|
126
|
+
--color-background: 0 0% 10%; /* Dark background */
|
|
127
|
+
--color-foreground: 0 0% 90%; /* Light text */
|
|
128
|
+
--color-card: 0 0% 15%; /* Dark card background */
|
|
129
|
+
--color-card-foreground: 0 0% 90%; /* Light card text */
|
|
130
|
+
--color-border: 0 0% 25%; /* Dark border */
|
|
131
|
+
--color-input: 0 0% 25%; /* Dark input border */
|
|
132
|
+
--color-ring: 220 65% 60%; /* Brighter ring for dark mode */
|
|
133
|
+
|
|
134
|
+
/* Interactive Colors - Primary (Dark Mode) */
|
|
135
|
+
--color-interactive-primary-default: 220 70% 60%; /* Brighter blue for dark mode */
|
|
136
|
+
--color-interactive-primary-hover: 220 70% 65%; /* Even brighter on hover */
|
|
137
|
+
--color-interactive-primary-active: 220 70% 55%; /* Slightly darker on active */
|
|
138
|
+
--color-interactive-primary-disabled: 220 30% 40%; /* Muted blue for dark mode */
|
|
139
|
+
--color-interactive-primary-foreground: 0 0% 100%; /* White text */
|
|
140
|
+
|
|
141
|
+
/* Interactive Colors - Secondary (Dark Mode) */
|
|
142
|
+
--color-interactive-secondary-default: 220 60% 70%; /* Brighter secondary */
|
|
143
|
+
--color-interactive-secondary-hover: 220 60% 75%; /* Brighter on hover */
|
|
144
|
+
--color-interactive-secondary-active: 220 60% 65%; /* Slightly darker on active */
|
|
145
|
+
--color-interactive-secondary-disabled: 220 30% 50%; /* Muted */
|
|
146
|
+
--color-interactive-secondary-foreground: 0 0% 100%; /* White text */
|
|
147
|
+
|
|
148
|
+
/* Interactive Colors - Accent (Dark Mode) */
|
|
149
|
+
--color-interactive-accent-default: 220 30% 25%; /* Dark accent */
|
|
150
|
+
--color-interactive-accent-hover: 220 35% 30%; /* Slightly lighter on hover */
|
|
151
|
+
--color-interactive-accent-active: 220 25% 20%; /* Darker on active */
|
|
152
|
+
--color-interactive-accent-foreground: 0 0% 90%; /* Light text */
|
|
153
|
+
|
|
154
|
+
/* Interactive Colors - Destructive (Dark Mode) */
|
|
155
|
+
--color-interactive-destructive-default: 8 75% 60%; /* Brighter red for visibility */
|
|
156
|
+
--color-interactive-destructive-hover: 8 75% 65%; /* Even brighter on hover */
|
|
157
|
+
--color-interactive-destructive-foreground: 0 0% 100%; /* White text */
|
|
158
|
+
|
|
159
|
+
/* Semantic Colors (Dark Mode) */
|
|
160
|
+
--color-muted: 0 0% 20%; /* Dark muted background */
|
|
161
|
+
--color-muted-foreground: 0 0% 60%; /* Lighter muted text */
|
|
162
|
+
|
|
163
|
+
/* Sidebar Colors (Dark Mode) */
|
|
164
|
+
--color-sidebar-background: 0 0% 12%; /* Slightly lighter than background */
|
|
165
|
+
--color-sidebar-foreground: 0 0% 90%; /* Light text */
|
|
166
|
+
--color-sidebar-primary: 220 70% 60%; /* Brighter blue */
|
|
167
|
+
--color-sidebar-primary-foreground: 0 0% 100%; /* White text */
|
|
168
|
+
--color-sidebar-accent: 220 30% 25%; /* Dark accent */
|
|
169
|
+
--color-sidebar-accent-foreground: 0 0% 90%; /* Light text */
|
|
170
|
+
--color-sidebar-border: 0 0% 25%; /* Dark border */
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* Base typography */
|
|
174
|
+
* {
|
|
175
|
+
box-sizing: border-box;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
body {
|
|
179
|
+
@apply bg-background text-foreground font-sans leading-normal;
|
|
180
|
+
margin: 0;
|
|
181
|
+
padding: 0;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* Focus styles */
|
|
185
|
+
*:focus-visible {
|
|
186
|
+
outline: 2px solid hsl(var(--color-ring));
|
|
187
|
+
outline-offset: 2px;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@layer utilities {
|
|
192
|
+
/* Custom utility classes */
|
|
193
|
+
.text-balance {
|
|
194
|
+
text-wrap: balance;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.transition-default {
|
|
198
|
+
transition: all var(--duration-normal) var(--easing-ease-out);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.transition-fast {
|
|
202
|
+
transition: all var(--duration-fast) var(--easing-ease-out);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.transition-medium {
|
|
206
|
+
transition: all var(--duration-medium) var(--easing-ease-in-out);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.transition-slow {
|
|
210
|
+
transition: all var(--duration-slow) var(--easing-ease-in-out);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="light">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Workflow Dashboard - Task Board</title>
|
|
7
|
+
<!-- Google Fonts: Inter -->
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
11
|
+
<!-- Tailwind CSS CDN -->
|
|
12
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
13
|
+
<script>
|
|
14
|
+
tailwind.config = {
|
|
15
|
+
darkMode: ['class', '[data-theme="dark"]'],
|
|
16
|
+
safelist: [
|
|
17
|
+
'bg-card', 'bg-background', 'bg-hover', 'bg-accent', 'bg-muted', 'bg-primary', 'bg-success', 'bg-warning',
|
|
18
|
+
'bg-success-light', 'bg-warning-light', 'text-foreground', 'text-muted-foreground', 'text-primary',
|
|
19
|
+
'text-success', 'text-warning', 'text-primary-foreground', 'border', 'border-border', 'border-primary',
|
|
20
|
+
'border-l-success', 'border-l-warning', 'border-l-muted-foreground', 'rounded', 'rounded-lg', 'rounded-full',
|
|
21
|
+
'shadow', 'shadow-sm', 'shadow-md', 'p-2', 'p-3', 'p-4', 'p-5', 'px-3', 'px-4', 'py-2', 'py-3',
|
|
22
|
+
'mb-2', 'mb-3', 'mb-4', 'mt-2', 'mt-4', 'mx-auto', 'gap-2', 'gap-3', 'gap-4', 'space-y-2',
|
|
23
|
+
'flex', 'flex-1', 'flex-col', 'flex-wrap', 'items-center', 'items-start', 'justify-between', 'justify-center',
|
|
24
|
+
'grid', 'w-full', 'w-5', 'h-2', 'h-5', 'text-xs', 'text-sm', 'text-lg', 'text-xl', 'text-2xl', 'text-3xl',
|
|
25
|
+
'font-medium', 'font-semibold', 'font-bold', 'font-mono', 'truncate', 'uppercase',
|
|
26
|
+
'hover:shadow-md', 'hover:bg-hover', 'hover:-translate-y-1', 'hover:text-foreground', 'hover:opacity-90',
|
|
27
|
+
'hover:scale-110', 'transition-all', 'duration-200', 'duration-300', 'cursor-pointer',
|
|
28
|
+
'opacity-50', 'hidden', 'block', 'relative', 'absolute', 'fixed', 'z-50', 'overflow-hidden',
|
|
29
|
+
'col-span-full', 'text-center', 'min-h-screen', 'max-w-7xl',
|
|
30
|
+
],
|
|
31
|
+
theme: {
|
|
32
|
+
extend: {
|
|
33
|
+
colors: {
|
|
34
|
+
background: 'hsl(var(--background))',
|
|
35
|
+
foreground: 'hsl(var(--foreground))',
|
|
36
|
+
card: 'hsl(var(--card))',
|
|
37
|
+
'card-foreground': 'hsl(var(--card-foreground))',
|
|
38
|
+
border: 'hsl(var(--border))',
|
|
39
|
+
primary: 'hsl(var(--primary))',
|
|
40
|
+
'primary-foreground': 'hsl(var(--primary-foreground))',
|
|
41
|
+
accent: 'hsl(var(--accent))',
|
|
42
|
+
'accent-foreground': 'hsl(var(--accent-foreground))',
|
|
43
|
+
muted: 'hsl(var(--muted))',
|
|
44
|
+
'muted-foreground': 'hsl(var(--muted-foreground))',
|
|
45
|
+
hover: 'hsl(var(--hover))',
|
|
46
|
+
success: 'hsl(var(--success))',
|
|
47
|
+
'success-light': 'hsl(var(--success-light))',
|
|
48
|
+
warning: 'hsl(var(--warning))',
|
|
49
|
+
'warning-light': 'hsl(var(--warning-light))',
|
|
50
|
+
},
|
|
51
|
+
fontFamily: {
|
|
52
|
+
sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
</script>
|
|
58
|
+
<style>
|
|
59
|
+
/* CSS Custom Properties - Light Mode */
|
|
60
|
+
:root {
|
|
61
|
+
--background: 0 0% 98%;
|
|
62
|
+
--foreground: 0 0% 13%;
|
|
63
|
+
--card: 0 0% 100%;
|
|
64
|
+
--card-foreground: 0 0% 13%;
|
|
65
|
+
--border: 0 0% 90%;
|
|
66
|
+
--primary: 220 65% 50%;
|
|
67
|
+
--primary-foreground: 0 0% 100%;
|
|
68
|
+
--accent: 220 40% 95%;
|
|
69
|
+
--accent-foreground: 0 0% 13%;
|
|
70
|
+
--muted: 0 0% 96%;
|
|
71
|
+
--muted-foreground: 0 0% 45%;
|
|
72
|
+
--hover: 0 0% 93%;
|
|
73
|
+
--success: 142 71% 45%;
|
|
74
|
+
--success-light: 142 76% 90%;
|
|
75
|
+
--warning: 38 92% 50%;
|
|
76
|
+
--warning-light: 48 96% 89%;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Dark Mode */
|
|
80
|
+
[data-theme="dark"] {
|
|
81
|
+
--background: 220 13% 10%;
|
|
82
|
+
--foreground: 0 0% 90%;
|
|
83
|
+
--card: 220 13% 14%;
|
|
84
|
+
--card-foreground: 0 0% 90%;
|
|
85
|
+
--border: 220 13% 20%;
|
|
86
|
+
--primary: 220 65% 55%;
|
|
87
|
+
--primary-foreground: 0 0% 100%;
|
|
88
|
+
--accent: 220 30% 20%;
|
|
89
|
+
--accent-foreground: 0 0% 90%;
|
|
90
|
+
--muted: 220 13% 18%;
|
|
91
|
+
--muted-foreground: 0 0% 55%;
|
|
92
|
+
--hover: 220 13% 22%;
|
|
93
|
+
--success: 142 71% 40%;
|
|
94
|
+
--success-light: 142 50% 20%;
|
|
95
|
+
--warning: 38 85% 45%;
|
|
96
|
+
--warning-light: 40 50% 20%;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* Progress bar gradient */
|
|
100
|
+
.progress-fill {
|
|
101
|
+
background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--success)));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Task checkbox pseudo-elements */
|
|
105
|
+
.task-checkbox.completed::after { content: '✓'; }
|
|
106
|
+
.task-checkbox.in_progress::after { content: '⟳'; }
|
|
107
|
+
</style>
|
|
108
|
+
</head>
|
|
109
|
+
<body class="font-sans bg-background text-foreground leading-normal min-h-screen">
|
|
110
|
+
<div class="max-w-7xl mx-auto px-5 py-5">
|
|
111
|
+
<!-- Header -->
|
|
112
|
+
<header class="bg-card shadow rounded-lg p-5 mb-7 border border-border">
|
|
113
|
+
<h1 class="text-2xl font-bold text-primary mb-2">🚀 Workflow Dashboard</h1>
|
|
114
|
+
<p class="text-muted-foreground">Task Board - Active and Archived Sessions</p>
|
|
115
|
+
|
|
116
|
+
<div class="flex flex-wrap gap-4 items-center mt-4">
|
|
117
|
+
<!-- Search Box -->
|
|
118
|
+
<div class="flex-1 min-w-[250px] relative">
|
|
119
|
+
<input type="text" id="searchInput" placeholder="🔍 Search tasks or sessions..."
|
|
120
|
+
class="w-full px-4 py-2.5 border border-border rounded-lg bg-background text-foreground text-sm focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all" />
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<!-- Filter Buttons -->
|
|
124
|
+
<div class="flex gap-2 flex-wrap">
|
|
125
|
+
<button class="btn px-5 py-2.5 border border-border rounded-lg text-sm font-medium bg-primary text-primary-foreground hover:opacity-90 transition-all" data-filter="all">All</button>
|
|
126
|
+
<button class="btn px-5 py-2.5 border border-border rounded-lg text-sm font-medium bg-card text-foreground hover:bg-hover transition-all" data-filter="active">Active</button>
|
|
127
|
+
<button class="btn px-5 py-2.5 border border-border rounded-lg text-sm font-medium bg-card text-foreground hover:bg-hover transition-all" data-filter="archived">Archived</button>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</header>
|
|
131
|
+
|
|
132
|
+
<!-- Stats Grid -->
|
|
133
|
+
<div class="grid grid-cols-[repeat(auto-fit,minmax(200px,1fr))] gap-5 mb-7">
|
|
134
|
+
<div class="bg-card p-5 rounded-lg border border-border shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200">
|
|
135
|
+
<div class="text-3xl font-bold text-primary" id="totalSessions">0</div>
|
|
136
|
+
<div class="text-sm text-muted-foreground mt-1">Total Sessions</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="bg-card p-5 rounded-lg border border-border shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200">
|
|
139
|
+
<div class="text-3xl font-bold text-primary" id="activeSessionsCount">0</div>
|
|
140
|
+
<div class="text-sm text-muted-foreground mt-1">Active Sessions</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="bg-card p-5 rounded-lg border border-border shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200">
|
|
143
|
+
<div class="text-3xl font-bold text-primary" id="totalTasks">0</div>
|
|
144
|
+
<div class="text-sm text-muted-foreground mt-1">Total Tasks</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="bg-card p-5 rounded-lg border border-border shadow-sm hover:shadow-md hover:-translate-y-0.5 transition-all duration-200">
|
|
147
|
+
<div class="text-3xl font-bold text-primary" id="completedTasks">0</div>
|
|
148
|
+
<div class="text-sm text-muted-foreground mt-1">Completed Tasks</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<!-- Active Sessions Section -->
|
|
153
|
+
<div class="mb-10" id="activeSectionContainer">
|
|
154
|
+
<div class="flex justify-between items-center mb-5">
|
|
155
|
+
<h2 class="text-xl font-semibold text-foreground">📋 Active Sessions</h2>
|
|
156
|
+
</div>
|
|
157
|
+
<div class="grid grid-cols-[repeat(auto-fill,minmax(350px,1fr))] gap-5" id="activeSessionsGrid"></div>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<!-- Archived Sessions Section -->
|
|
161
|
+
<div class="mb-10" id="archivedSectionContainer">
|
|
162
|
+
<div class="flex justify-between items-center mb-5">
|
|
163
|
+
<h2 class="text-xl font-semibold text-foreground">📦 Archived Sessions</h2>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="grid grid-cols-[repeat(auto-fill,minmax(350px,1fr))] gap-5" id="archivedSessionsGrid"></div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<!-- Theme Toggle Button -->
|
|
170
|
+
<button class="fixed bottom-7 right-7 w-14 h-14 rounded-full bg-primary text-primary-foreground text-2xl shadow-lg hover:scale-110 transition-all duration-200 z-50" id="themeToggle">🌙</button>
|
|
171
|
+
|
|
172
|
+
<!-- Workflow data injected by dashboard-generator -->
|
|
173
|
+
<script id="workflow-data" type="application/json">{{WORKFLOW_DATA}}</script>
|
|
174
|
+
|
|
175
|
+
<script>
|
|
176
|
+
// Parse workflow data from JSON script tag, with fallback for direct file access
|
|
177
|
+
let workflowData;
|
|
178
|
+
try {
|
|
179
|
+
const dataScript = document.getElementById('workflow-data');
|
|
180
|
+
const rawData = dataScript ? dataScript.textContent.trim() : '';
|
|
181
|
+
// Check if placeholder was replaced (doesn't start with '{{')
|
|
182
|
+
if (rawData && !rawData.startsWith('{{')) {
|
|
183
|
+
workflowData = JSON.parse(rawData);
|
|
184
|
+
} else {
|
|
185
|
+
throw new Error('Data not injected');
|
|
186
|
+
}
|
|
187
|
+
} catch (e) {
|
|
188
|
+
console.warn('Workflow data not injected, using empty defaults');
|
|
189
|
+
workflowData = { activeSessions: [], archivedSessions: [] };
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Theme management
|
|
193
|
+
function initTheme() {
|
|
194
|
+
const savedTheme = localStorage.getItem('theme') || 'light';
|
|
195
|
+
document.documentElement.setAttribute('data-theme', savedTheme);
|
|
196
|
+
updateThemeIcon(savedTheme);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function toggleTheme() {
|
|
200
|
+
const currentTheme = document.documentElement.getAttribute('data-theme');
|
|
201
|
+
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
|
202
|
+
document.documentElement.setAttribute('data-theme', newTheme);
|
|
203
|
+
localStorage.setItem('theme', newTheme);
|
|
204
|
+
updateThemeIcon(newTheme);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function updateThemeIcon(theme) {
|
|
208
|
+
document.getElementById('themeToggle').textContent = theme === 'dark' ? '☀️' : '🌙';
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Statistics calculation
|
|
212
|
+
function updateStatistics() {
|
|
213
|
+
const stats = {
|
|
214
|
+
totalSessions: workflowData.activeSessions.length + workflowData.archivedSessions.length,
|
|
215
|
+
activeSessions: workflowData.activeSessions.length,
|
|
216
|
+
totalTasks: 0,
|
|
217
|
+
completedTasks: 0
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
workflowData.activeSessions.forEach(session => {
|
|
221
|
+
stats.totalTasks += session.tasks.length;
|
|
222
|
+
stats.completedTasks += session.tasks.filter(t => t.status === 'completed').length;
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
workflowData.archivedSessions.forEach(session => {
|
|
226
|
+
stats.totalTasks += session.taskCount || 0;
|
|
227
|
+
stats.completedTasks += session.taskCount || 0;
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
document.getElementById('totalSessions').textContent = stats.totalSessions;
|
|
231
|
+
document.getElementById('activeSessionsCount').textContent = stats.activeSessions;
|
|
232
|
+
document.getElementById('totalTasks').textContent = stats.totalTasks;
|
|
233
|
+
document.getElementById('completedTasks').textContent = stats.completedTasks;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Render session card with Tailwind classes
|
|
237
|
+
function createSessionCard(session, isActive) {
|
|
238
|
+
const card = document.createElement('div');
|
|
239
|
+
card.className = 'bg-card rounded-lg border border-border shadow-sm p-5 transition-all duration-300 hover:-translate-y-1 hover:shadow-md';
|
|
240
|
+
card.dataset.sessionType = isActive ? 'active' : 'archived';
|
|
241
|
+
|
|
242
|
+
const completedTasks = isActive
|
|
243
|
+
? session.tasks.filter(t => t.status === 'completed').length
|
|
244
|
+
: (session.taskCount || 0);
|
|
245
|
+
const totalTasks = isActive ? session.tasks.length : (session.taskCount || 0);
|
|
246
|
+
const progress = totalTasks > 0 ? (completedTasks / totalTasks * 100) : 0;
|
|
247
|
+
|
|
248
|
+
let tasksHtml = '';
|
|
249
|
+
if (isActive && session.tasks.length > 0) {
|
|
250
|
+
tasksHtml = `
|
|
251
|
+
<div class="mt-4 space-y-2">
|
|
252
|
+
${session.tasks.map(task => {
|
|
253
|
+
const statusClasses = {
|
|
254
|
+
completed: 'border-l-success bg-success-light/30',
|
|
255
|
+
in_progress: 'border-l-warning bg-warning-light/30',
|
|
256
|
+
pending: 'border-l-muted-foreground bg-muted/30'
|
|
257
|
+
};
|
|
258
|
+
const checkboxClasses = {
|
|
259
|
+
completed: 'bg-success border-success text-white',
|
|
260
|
+
in_progress: 'border-warning text-warning',
|
|
261
|
+
pending: 'border-border'
|
|
262
|
+
};
|
|
263
|
+
return `
|
|
264
|
+
<div class="flex items-center gap-3 p-2.5 rounded border-l-[3px] ${statusClasses[task.status] || statusClasses.pending}">
|
|
265
|
+
<div class="task-checkbox w-5 h-5 rounded-full border-2 flex items-center justify-center text-xs font-bold flex-shrink-0 ${checkboxClasses[task.status] || checkboxClasses.pending} ${task.status}"></div>
|
|
266
|
+
<div class="flex-1 text-sm text-foreground">${task.title || 'Untitled Task'}</div>
|
|
267
|
+
<span class="text-xs font-mono text-muted-foreground">${task.task_id || ''}</span>
|
|
268
|
+
</div>
|
|
269
|
+
`;
|
|
270
|
+
}).join('')}
|
|
271
|
+
</div>
|
|
272
|
+
`;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const statusBadgeClass = isActive
|
|
276
|
+
? 'bg-success-light text-success'
|
|
277
|
+
: 'bg-hover text-muted-foreground';
|
|
278
|
+
|
|
279
|
+
card.innerHTML = `
|
|
280
|
+
<div class="flex justify-between items-start mb-4">
|
|
281
|
+
<div>
|
|
282
|
+
<h3 class="text-lg font-semibold text-foreground">${session.session_id || 'Unknown Session'}</h3>
|
|
283
|
+
<div class="text-sm text-muted-foreground mt-1">${session.project || ''}</div>
|
|
284
|
+
</div>
|
|
285
|
+
<span class="px-3 py-1 text-xs font-semibold uppercase rounded-full ${statusBadgeClass}">
|
|
286
|
+
${isActive ? 'Active' : 'Archived'}
|
|
287
|
+
</span>
|
|
288
|
+
</div>
|
|
289
|
+
|
|
290
|
+
<div class="flex gap-4 text-sm text-muted-foreground mb-3">
|
|
291
|
+
<span>📅 ${session.created_at || session.archived_at || 'N/A'}</span>
|
|
292
|
+
<span>📊 ${completedTasks}/${totalTasks} tasks</span>
|
|
293
|
+
</div>
|
|
294
|
+
|
|
295
|
+
${totalTasks > 0 ? `
|
|
296
|
+
<div class="h-2 bg-hover rounded overflow-hidden my-4">
|
|
297
|
+
<div class="progress-fill h-full rounded transition-all duration-300" style="width: ${progress}%"></div>
|
|
298
|
+
</div>
|
|
299
|
+
<div class="text-center text-sm text-muted-foreground">${Math.round(progress)}% Complete</div>
|
|
300
|
+
` : ''}
|
|
301
|
+
|
|
302
|
+
${tasksHtml}
|
|
303
|
+
|
|
304
|
+
${!isActive && session.archive_path ? `
|
|
305
|
+
<div class="mt-4 pt-4 border-t border-border text-sm text-muted-foreground">
|
|
306
|
+
📁 Archive: ${session.archive_path}
|
|
307
|
+
</div>
|
|
308
|
+
` : ''}
|
|
309
|
+
`;
|
|
310
|
+
|
|
311
|
+
return card;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Render all sessions
|
|
315
|
+
function renderSessions(filter = 'all') {
|
|
316
|
+
const activeContainer = document.getElementById('activeSessionsGrid');
|
|
317
|
+
const archivedContainer = document.getElementById('archivedSessionsGrid');
|
|
318
|
+
|
|
319
|
+
activeContainer.innerHTML = '';
|
|
320
|
+
archivedContainer.innerHTML = '';
|
|
321
|
+
|
|
322
|
+
if (filter === 'all' || filter === 'active') {
|
|
323
|
+
if (workflowData.activeSessions.length === 0) {
|
|
324
|
+
activeContainer.innerHTML = `
|
|
325
|
+
<div class="text-center py-16 text-muted-foreground col-span-full">
|
|
326
|
+
<div class="text-5xl mb-4 opacity-50">📭</div>
|
|
327
|
+
<p>No active sessions</p>
|
|
328
|
+
</div>
|
|
329
|
+
`;
|
|
330
|
+
} else {
|
|
331
|
+
workflowData.activeSessions.forEach(session => {
|
|
332
|
+
activeContainer.appendChild(createSessionCard(session, true));
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (filter === 'all' || filter === 'archived') {
|
|
338
|
+
if (workflowData.archivedSessions.length === 0) {
|
|
339
|
+
archivedContainer.innerHTML = `
|
|
340
|
+
<div class="text-center py-16 text-muted-foreground col-span-full">
|
|
341
|
+
<div class="text-5xl mb-4 opacity-50">📦</div>
|
|
342
|
+
<p>No archived sessions</p>
|
|
343
|
+
</div>
|
|
344
|
+
`;
|
|
345
|
+
} else {
|
|
346
|
+
workflowData.archivedSessions.forEach(session => {
|
|
347
|
+
archivedContainer.appendChild(createSessionCard(session, false));
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Show/hide sections
|
|
353
|
+
document.getElementById('activeSectionContainer').style.display =
|
|
354
|
+
(filter === 'all' || filter === 'active') ? 'block' : 'none';
|
|
355
|
+
document.getElementById('archivedSectionContainer').style.display =
|
|
356
|
+
(filter === 'all' || filter === 'archived') ? 'block' : 'none';
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Search functionality
|
|
360
|
+
function setupSearch() {
|
|
361
|
+
const searchInput = document.getElementById('searchInput');
|
|
362
|
+
searchInput.addEventListener('input', (e) => {
|
|
363
|
+
const query = e.target.value.toLowerCase();
|
|
364
|
+
const cards = document.querySelectorAll('[data-session-type]');
|
|
365
|
+
|
|
366
|
+
cards.forEach(card => {
|
|
367
|
+
const text = card.textContent.toLowerCase();
|
|
368
|
+
card.style.display = text.includes(query) ? 'block' : 'none';
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Filter functionality
|
|
374
|
+
function setupFilters() {
|
|
375
|
+
const filterButtons = document.querySelectorAll('[data-filter]');
|
|
376
|
+
filterButtons.forEach(btn => {
|
|
377
|
+
btn.addEventListener('click', () => {
|
|
378
|
+
filterButtons.forEach(b => {
|
|
379
|
+
b.classList.remove('bg-primary', 'text-primary-foreground');
|
|
380
|
+
b.classList.add('bg-card', 'text-foreground');
|
|
381
|
+
});
|
|
382
|
+
btn.classList.remove('bg-card', 'text-foreground');
|
|
383
|
+
btn.classList.add('bg-primary', 'text-primary-foreground');
|
|
384
|
+
renderSessions(btn.dataset.filter);
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// Initialize
|
|
390
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
391
|
+
initTheme();
|
|
392
|
+
updateStatistics();
|
|
393
|
+
renderSessions();
|
|
394
|
+
setupSearch();
|
|
395
|
+
setupFilters();
|
|
396
|
+
|
|
397
|
+
document.getElementById('themeToggle').addEventListener('click', toggleTheme);
|
|
398
|
+
});
|
|
399
|
+
</script>
|
|
400
|
+
</body>
|
|
401
|
+
</html>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import open from 'open';
|
|
2
|
+
import { platform } from 'os';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Launch a file in the default browser
|
|
7
|
+
* Cross-platform compatible (Windows/macOS/Linux)
|
|
8
|
+
* @param {string} filePath - Path to HTML file
|
|
9
|
+
* @returns {Promise<void>}
|
|
10
|
+
*/
|
|
11
|
+
export async function launchBrowser(filePath) {
|
|
12
|
+
const absolutePath = resolve(filePath);
|
|
13
|
+
|
|
14
|
+
// Construct file:// URL based on platform
|
|
15
|
+
let url;
|
|
16
|
+
if (platform() === 'win32') {
|
|
17
|
+
// Windows: file:///C:/path/to/file.html
|
|
18
|
+
url = `file:///${absolutePath.replace(/\\/g, '/')}`;
|
|
19
|
+
} else {
|
|
20
|
+
// Unix: file:///path/to/file.html
|
|
21
|
+
url = `file://${absolutePath}`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
// Use the 'open' package which handles cross-platform browser launching
|
|
26
|
+
await open(url);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
// Fallback: try opening the file path directly
|
|
29
|
+
try {
|
|
30
|
+
await open(absolutePath);
|
|
31
|
+
} catch (fallbackError) {
|
|
32
|
+
throw new Error(`Failed to open browser: ${error.message}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Check if we're running in a headless/CI environment
|
|
39
|
+
* @returns {boolean}
|
|
40
|
+
*/
|
|
41
|
+
export function isHeadlessEnvironment() {
|
|
42
|
+
return !!(
|
|
43
|
+
process.env.CI ||
|
|
44
|
+
process.env.CONTINUOUS_INTEGRATION ||
|
|
45
|
+
process.env.GITHUB_ACTIONS ||
|
|
46
|
+
process.env.GITLAB_CI ||
|
|
47
|
+
process.env.JENKINS_URL
|
|
48
|
+
);
|
|
49
|
+
}
|