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,447 @@
|
|
|
1
|
+
// ==========================================
|
|
2
|
+
// TASK DRAWER RENDERERS
|
|
3
|
+
// ==========================================
|
|
4
|
+
// Detailed content renderers and helper functions for task drawer
|
|
5
|
+
|
|
6
|
+
function renderPreAnalysisSteps(preAnalysis) {
|
|
7
|
+
if (!Array.isArray(preAnalysis) || preAnalysis.length === 0) {
|
|
8
|
+
return '<div class="empty-section">No pre-analysis steps</div>';
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return `
|
|
12
|
+
<div class="lite-card">
|
|
13
|
+
<div class="lite-card-header">
|
|
14
|
+
<span class="lite-card-icon">🔍</span>
|
|
15
|
+
<h4 class="lite-card-title">Pre-Analysis Steps</h4>
|
|
16
|
+
<span class="lite-count-badge">${preAnalysis.length}</span>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="lite-card-body">
|
|
19
|
+
<div class="lite-impl-steps">
|
|
20
|
+
${preAnalysis.map((item, idx) => `
|
|
21
|
+
<div class="lite-impl-step">
|
|
22
|
+
<div class="lite-step-num">${idx + 1}</div>
|
|
23
|
+
<div class="lite-step-content">
|
|
24
|
+
<p class="lite-step-text">${escapeHtml(item.step || item.action || 'Step ' + (idx + 1))}</p>
|
|
25
|
+
${item.action && item.action !== item.step ? `
|
|
26
|
+
<div class="lite-step-meta">
|
|
27
|
+
<span class="lite-step-label">Action:</span>
|
|
28
|
+
<span class="lite-step-value">${escapeHtml(item.action)}</span>
|
|
29
|
+
</div>
|
|
30
|
+
` : ''}
|
|
31
|
+
${item.commands?.length ? `
|
|
32
|
+
<div class="lite-step-commands">
|
|
33
|
+
${item.commands.map(c => `<code class="lite-cmd-tag">${escapeHtml(typeof c === 'string' ? c : JSON.stringify(c))}</code>`).join('')}
|
|
34
|
+
</div>
|
|
35
|
+
` : ''}
|
|
36
|
+
${item.output_to ? `
|
|
37
|
+
<div class="lite-step-meta">
|
|
38
|
+
<span class="lite-step-label">Output:</span>
|
|
39
|
+
<code class="lite-file-tag">${escapeHtml(item.output_to)}</code>
|
|
40
|
+
</div>
|
|
41
|
+
` : ''}
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
`).join('')}
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
`;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function renderImplementationStepsList(steps) {
|
|
52
|
+
if (!Array.isArray(steps) || steps.length === 0) {
|
|
53
|
+
return '<div class="empty-section">No implementation steps</div>';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return `
|
|
57
|
+
<div class="lite-card">
|
|
58
|
+
<div class="lite-card-header">
|
|
59
|
+
<span class="lite-card-icon">📋</span>
|
|
60
|
+
<h4 class="lite-card-title">Implementation Approach</h4>
|
|
61
|
+
<span class="lite-count-badge">${steps.length}</span>
|
|
62
|
+
</div>
|
|
63
|
+
<div class="lite-card-body">
|
|
64
|
+
<div class="session-impl-steps">
|
|
65
|
+
${steps.map((step, idx) => {
|
|
66
|
+
const hasMods = step.modification_points?.length;
|
|
67
|
+
const hasFlow = step.logic_flow?.length;
|
|
68
|
+
|
|
69
|
+
return `
|
|
70
|
+
<div class="session-impl-step">
|
|
71
|
+
<div class="session-step-header">
|
|
72
|
+
<div class="lite-step-num">${step.step || idx + 1}</div>
|
|
73
|
+
<div class="session-step-title">${escapeHtml(step.title || 'Untitled Step')}</div>
|
|
74
|
+
</div>
|
|
75
|
+
${step.description ? `<div class="session-step-desc">${escapeHtml(step.description)}</div>` : ''}
|
|
76
|
+
${hasMods ? `
|
|
77
|
+
<div class="session-step-section">
|
|
78
|
+
<div class="session-section-label">
|
|
79
|
+
<span class="session-section-icon">🔧</span>
|
|
80
|
+
<span>Modifications</span>
|
|
81
|
+
<span class="lite-count-badge">${step.modification_points.length}</span>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="session-mods-list">
|
|
84
|
+
${step.modification_points.map(mp => `
|
|
85
|
+
<div class="session-mod-item">
|
|
86
|
+
${typeof mp === 'string' ? `<code class="lite-file-tag">${escapeHtml(mp)}</code>` : `
|
|
87
|
+
<code class="lite-file-tag">${escapeHtml(mp.file || mp.path || '')}</code>
|
|
88
|
+
${mp.changes ? `<span class="session-mod-change">${escapeHtml(mp.changes)}</span>` : ''}
|
|
89
|
+
`}
|
|
90
|
+
</div>
|
|
91
|
+
`).join('')}
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
` : ''}
|
|
95
|
+
${hasFlow ? `
|
|
96
|
+
<div class="session-step-section">
|
|
97
|
+
<div class="session-section-label">
|
|
98
|
+
<span class="session-section-icon">⚡</span>
|
|
99
|
+
<span>Logic Flow</span>
|
|
100
|
+
<span class="lite-count-badge">${step.logic_flow.length}</span>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="session-flow-list">
|
|
103
|
+
${step.logic_flow.map((lf, lfIdx) => `
|
|
104
|
+
<div class="session-flow-item">
|
|
105
|
+
<span class="session-flow-num">${lfIdx + 1}</span>
|
|
106
|
+
<span class="session-flow-text">${escapeHtml(typeof lf === 'string' ? lf : lf.action || JSON.stringify(lf))}</span>
|
|
107
|
+
</div>
|
|
108
|
+
`).join('')}
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
` : ''}
|
|
112
|
+
${step.depends_on?.length ? `
|
|
113
|
+
<div class="session-step-deps">
|
|
114
|
+
<span class="session-deps-label">Dependencies:</span>
|
|
115
|
+
<div class="lite-deps-tags">
|
|
116
|
+
${step.depends_on.map(d => `<span class="lite-dep-tag">${escapeHtml(d)}</span>`).join('')}
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
` : ''}
|
|
120
|
+
</div>
|
|
121
|
+
`}).join('')}
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function renderTargetFiles(files) {
|
|
129
|
+
if (!Array.isArray(files) || files.length === 0) {
|
|
130
|
+
return '<div class="empty-section">No target files</div>';
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Get current project path for building full paths
|
|
134
|
+
const projectPath = window.currentProjectPath || '';
|
|
135
|
+
|
|
136
|
+
return `
|
|
137
|
+
<div class="lite-card">
|
|
138
|
+
<div class="lite-card-header">
|
|
139
|
+
<span class="lite-card-icon">📁</span>
|
|
140
|
+
<h4 class="lite-card-title">Target Files</h4>
|
|
141
|
+
<span class="lite-count-badge">${files.length}</span>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="lite-card-body">
|
|
144
|
+
<div class="session-files-list">
|
|
145
|
+
${files.map(f => {
|
|
146
|
+
const filePath = typeof f === 'string' ? f : (f.path || JSON.stringify(f));
|
|
147
|
+
// Build full path for vscode link
|
|
148
|
+
const fullPath = filePath.startsWith('/') || filePath.includes(':')
|
|
149
|
+
? filePath
|
|
150
|
+
: (projectPath ? `${projectPath}/${filePath}` : filePath);
|
|
151
|
+
const vscodeUri = `vscode://file/${fullPath.replace(/\\/g, '/')}`;
|
|
152
|
+
|
|
153
|
+
return `
|
|
154
|
+
<a href="${vscodeUri}" class="session-file-item" title="Open in VS Code: ${escapeHtml(fullPath)}">
|
|
155
|
+
<span class="session-file-icon">📄</span>
|
|
156
|
+
<code class="session-file-path">${escapeHtml(filePath)}</code>
|
|
157
|
+
<span class="session-file-action">↗</span>
|
|
158
|
+
</a>
|
|
159
|
+
`;
|
|
160
|
+
}).join('')}
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
`;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function renderTestCommands(testCommands) {
|
|
168
|
+
if (!testCommands || typeof testCommands !== 'object') return '';
|
|
169
|
+
|
|
170
|
+
const entries = Object.entries(testCommands);
|
|
171
|
+
if (entries.length === 0) return '';
|
|
172
|
+
|
|
173
|
+
return `
|
|
174
|
+
<div class="lite-card">
|
|
175
|
+
<div class="lite-card-header">
|
|
176
|
+
<span class="lite-card-icon">🧪</span>
|
|
177
|
+
<h4 class="lite-card-title">Test Commands</h4>
|
|
178
|
+
<span class="lite-count-badge">${entries.length}</span>
|
|
179
|
+
</div>
|
|
180
|
+
<div class="lite-card-body">
|
|
181
|
+
<div class="session-test-commands">
|
|
182
|
+
${entries.map(([key, val]) => `
|
|
183
|
+
<div class="session-test-item">
|
|
184
|
+
<span class="session-test-label">${escapeHtml(key)}</span>
|
|
185
|
+
<code class="session-test-cmd">${escapeHtml(typeof val === 'string' ? val : JSON.stringify(val))}</code>
|
|
186
|
+
</div>
|
|
187
|
+
`).join('')}
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function renderTaskDetail(sessionId, task) {
|
|
195
|
+
// Get raw task data for JSON view
|
|
196
|
+
const rawTask = task._raw || task;
|
|
197
|
+
const taskJsonId = `task-json-${sessionId}-${task.id}`.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
198
|
+
|
|
199
|
+
// Store JSON in memory instead of inline script tag
|
|
200
|
+
taskJsonStore[taskJsonId] = rawTask;
|
|
201
|
+
|
|
202
|
+
return `
|
|
203
|
+
<div class="task-detail" id="task-${sessionId}-${task.id}">
|
|
204
|
+
<div class="task-detail-header">
|
|
205
|
+
<span class="task-id-badge">${escapeHtml(task.id)}</span>
|
|
206
|
+
<span class="task-title">${escapeHtml(task.title || 'Untitled')}</span>
|
|
207
|
+
<span class="task-status-badge ${task.status}">${task.status}</span>
|
|
208
|
+
<div class="task-header-actions">
|
|
209
|
+
<button class="btn-view-json" onclick="showJsonModal('${taskJsonId}', '${escapeHtml(task.id)}')">{ } JSON</button>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
<!-- Collapsible: Meta -->
|
|
214
|
+
<div class="collapsible-section">
|
|
215
|
+
<div class="collapsible-header">
|
|
216
|
+
<span class="collapse-icon">▶</span>
|
|
217
|
+
<span class="section-label">meta</span>
|
|
218
|
+
<span class="section-preview">${escapeHtml((task.meta?.type || task.meta?.action || '') + (task.meta?.scope ? ' | ' + task.meta.scope : ''))}</span>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="collapsible-content collapsed">
|
|
221
|
+
${renderDynamicFields(task.meta || rawTask, ['type', 'action', 'agent', 'scope', 'module', 'execution_group'])}
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
<!-- Collapsible: Context -->
|
|
226
|
+
<div class="collapsible-section">
|
|
227
|
+
<div class="collapsible-header">
|
|
228
|
+
<span class="collapse-icon">▶</span>
|
|
229
|
+
<span class="section-label">context</span>
|
|
230
|
+
<span class="section-preview">${escapeHtml(getContextPreview(task.context, rawTask))}</span>
|
|
231
|
+
</div>
|
|
232
|
+
<div class="collapsible-content collapsed">
|
|
233
|
+
${renderContextFields(task.context, rawTask)}
|
|
234
|
+
</div>
|
|
235
|
+
</div>
|
|
236
|
+
|
|
237
|
+
<!-- Collapsible: Flow Control (with Flowchart) -->
|
|
238
|
+
<div class="collapsible-section">
|
|
239
|
+
<div class="collapsible-header">
|
|
240
|
+
<span class="collapse-icon">▶</span>
|
|
241
|
+
<span class="section-label">flow_control</span>
|
|
242
|
+
<span class="section-preview">${escapeHtml(getFlowControlPreview(task.flow_control, rawTask))}</span>
|
|
243
|
+
</div>
|
|
244
|
+
<div class="collapsible-content collapsed">
|
|
245
|
+
<div class="flowchart-container" id="flowchart-${sessionId}-${task.id}"></div>
|
|
246
|
+
${renderFlowControlDetails(task.flow_control, rawTask)}
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
`;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function getContextPreview(context, rawTask) {
|
|
254
|
+
const items = [];
|
|
255
|
+
if (context?.requirements?.length) items.push(`${context.requirements.length} reqs`);
|
|
256
|
+
if (context?.acceptance?.length) items.push(`${context.acceptance.length} acceptance`);
|
|
257
|
+
if (context?.focus_paths?.length) items.push(`${context.focus_paths.length} paths`);
|
|
258
|
+
if (rawTask?.modification_points?.length) items.push(`${rawTask.modification_points.length} mods`);
|
|
259
|
+
return items.join(' | ') || 'No context';
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
function getFlowControlPreview(flowControl, rawTask) {
|
|
263
|
+
const steps = flowControl?.implementation_approach?.length || rawTask?.implementation?.length || 0;
|
|
264
|
+
return steps > 0 ? `${steps} steps` : 'No steps';
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function renderDynamicFields(obj, priorityKeys = []) {
|
|
268
|
+
if (!obj || typeof obj !== 'object') return '<div class="field-value json-value-null">null</div>';
|
|
269
|
+
|
|
270
|
+
const entries = Object.entries(obj).filter(([k, v]) => v !== null && v !== undefined && k !== '_raw');
|
|
271
|
+
if (entries.length === 0) return '<div class="field-value json-value-null">Empty</div>';
|
|
272
|
+
|
|
273
|
+
// Sort: priority keys first, then alphabetically
|
|
274
|
+
entries.sort(([a], [b]) => {
|
|
275
|
+
const aIdx = priorityKeys.indexOf(a);
|
|
276
|
+
const bIdx = priorityKeys.indexOf(b);
|
|
277
|
+
if (aIdx !== -1 && bIdx !== -1) return aIdx - bIdx;
|
|
278
|
+
if (aIdx !== -1) return -1;
|
|
279
|
+
if (bIdx !== -1) return 1;
|
|
280
|
+
return a.localeCompare(b);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
return `<div class="field-group">${entries.map(([key, value]) => renderFieldRow(key, value)).join('')}</div>`;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function renderFieldRow(key, value) {
|
|
287
|
+
return `
|
|
288
|
+
<div class="field-row">
|
|
289
|
+
<span class="field-label">${escapeHtml(key)}:</span>
|
|
290
|
+
<div class="field-value">${renderFieldValue(key, value)}</div>
|
|
291
|
+
</div>
|
|
292
|
+
`;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function renderFieldValue(key, value) {
|
|
296
|
+
if (value === null || value === undefined) {
|
|
297
|
+
return '<span class="json-value-null">null</span>';
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (typeof value === 'boolean') {
|
|
301
|
+
return `<span class="json-value-boolean">${value}</span>`;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (typeof value === 'number') {
|
|
305
|
+
return `<span class="json-value-number">${value}</span>`;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (typeof value === 'string') {
|
|
309
|
+
// Check if it's a path
|
|
310
|
+
if (key.includes('path') || key.includes('file') || value.includes('/') || value.includes('\\')) {
|
|
311
|
+
return `<span class="array-item path-item">${escapeHtml(value)}</span>`;
|
|
312
|
+
}
|
|
313
|
+
return `<span class="json-value-string">${escapeHtml(value)}</span>`;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (Array.isArray(value)) {
|
|
317
|
+
if (value.length === 0) return '<span class="json-value-null">[]</span>';
|
|
318
|
+
|
|
319
|
+
// Check if array contains objects or strings
|
|
320
|
+
if (typeof value[0] === 'object') {
|
|
321
|
+
return `<div class="nested-array">${value.map((item, i) => `
|
|
322
|
+
<div class="array-object">
|
|
323
|
+
<div class="array-object-header">[${i + 1}]</div>
|
|
324
|
+
${renderDynamicFields(item)}
|
|
325
|
+
</div>
|
|
326
|
+
`).join('')}</div>`;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Array of strings/primitives
|
|
330
|
+
const isPathArray = key.includes('path') || key.includes('file');
|
|
331
|
+
return `<div class="array-value">${value.map(v =>
|
|
332
|
+
`<span class="array-item ${isPathArray ? 'path-item' : ''}">${escapeHtml(String(v))}</span>`
|
|
333
|
+
).join('')}</div>`;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
if (typeof value === 'object') {
|
|
337
|
+
return renderDynamicFields(value);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return escapeHtml(String(value));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function renderContextFields(context, rawTask) {
|
|
344
|
+
const sections = [];
|
|
345
|
+
|
|
346
|
+
// Requirements / Description
|
|
347
|
+
const requirements = context?.requirements || [];
|
|
348
|
+
const description = rawTask?.description;
|
|
349
|
+
if (requirements.length > 0 || description) {
|
|
350
|
+
sections.push(`
|
|
351
|
+
<div class="context-field">
|
|
352
|
+
<label>requirements:</label>
|
|
353
|
+
${description ? `<p style="margin-bottom: 8px;">${escapeHtml(description)}</p>` : ''}
|
|
354
|
+
${requirements.length > 0 ? `<ul>${requirements.map(r => `<li>${escapeHtml(r)}</li>`).join('')}</ul>` : ''}
|
|
355
|
+
</div>
|
|
356
|
+
`);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Focus paths / Modification points
|
|
360
|
+
const focusPaths = context?.focus_paths || [];
|
|
361
|
+
const modPoints = rawTask?.modification_points || [];
|
|
362
|
+
if (focusPaths.length > 0 || modPoints.length > 0) {
|
|
363
|
+
sections.push(`
|
|
364
|
+
<div class="context-field">
|
|
365
|
+
<label>${modPoints.length > 0 ? 'modification_points:' : 'focus_paths:'}</label>
|
|
366
|
+
${modPoints.length > 0 ? `
|
|
367
|
+
<div class="mod-points">
|
|
368
|
+
${modPoints.map(m => `
|
|
369
|
+
<div class="mod-point">
|
|
370
|
+
<span class="array-item path-item">${escapeHtml(m.file || m)}</span>
|
|
371
|
+
${m.target ? `<span class="mod-target">→ ${escapeHtml(m.target)}</span>` : ''}
|
|
372
|
+
${m.change ? `<p class="mod-change">${escapeHtml(m.change)}</p>` : ''}
|
|
373
|
+
</div>
|
|
374
|
+
`).join('')}
|
|
375
|
+
</div>
|
|
376
|
+
` : `
|
|
377
|
+
<div class="path-tags">${focusPaths.map(p => `<span class="path-tag">${escapeHtml(p)}</span>`).join('')}</div>
|
|
378
|
+
`}
|
|
379
|
+
</div>
|
|
380
|
+
`);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Acceptance criteria
|
|
384
|
+
const acceptance = context?.acceptance || rawTask?.acceptance || [];
|
|
385
|
+
if (acceptance.length > 0) {
|
|
386
|
+
sections.push(`
|
|
387
|
+
<div class="context-field">
|
|
388
|
+
<label>acceptance:</label>
|
|
389
|
+
<ul>${acceptance.map(a => `<li>${escapeHtml(a)}</li>`).join('')}</ul>
|
|
390
|
+
</div>
|
|
391
|
+
`);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Dependencies
|
|
395
|
+
const depends = context?.depends_on || rawTask?.depends_on || [];
|
|
396
|
+
if (depends.length > 0) {
|
|
397
|
+
sections.push(`
|
|
398
|
+
<div class="context-field">
|
|
399
|
+
<label>depends_on:</label>
|
|
400
|
+
<div class="path-tags">${depends.map(d => `<span class="array-item depends-badge">${escapeHtml(d)}</span>`).join('')}</div>
|
|
401
|
+
</div>
|
|
402
|
+
`);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Reference
|
|
406
|
+
const reference = rawTask?.reference;
|
|
407
|
+
if (reference) {
|
|
408
|
+
sections.push(`
|
|
409
|
+
<div class="context-field">
|
|
410
|
+
<label>reference:</label>
|
|
411
|
+
${renderDynamicFields(reference)}
|
|
412
|
+
</div>
|
|
413
|
+
`);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return sections.length > 0
|
|
417
|
+
? `<div class="context-fields">${sections.join('')}</div>`
|
|
418
|
+
: '<div class="field-value json-value-null">No context data</div>';
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
function renderFlowControlDetails(flowControl, rawTask) {
|
|
422
|
+
const sections = [];
|
|
423
|
+
|
|
424
|
+
// Pre-analysis
|
|
425
|
+
const preAnalysis = flowControl?.pre_analysis || rawTask?.pre_analysis || [];
|
|
426
|
+
if (preAnalysis.length > 0) {
|
|
427
|
+
sections.push(`
|
|
428
|
+
<div class="context-field" style="margin-top: 16px;">
|
|
429
|
+
<label>pre_analysis:</label>
|
|
430
|
+
<ul>${preAnalysis.map(p => `<li>${escapeHtml(p)}</li>`).join('')}</ul>
|
|
431
|
+
</div>
|
|
432
|
+
`);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Target files
|
|
436
|
+
const targetFiles = flowControl?.target_files || rawTask?.target_files || [];
|
|
437
|
+
if (targetFiles.length > 0) {
|
|
438
|
+
sections.push(`
|
|
439
|
+
<div class="context-field">
|
|
440
|
+
<label>target_files:</label>
|
|
441
|
+
<div class="path-tags">${targetFiles.map(f => `<span class="path-tag">${escapeHtml(f)}</span>`).join('')}</div>
|
|
442
|
+
</div>
|
|
443
|
+
`);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return sections.join('');
|
|
447
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// ==========================================
|
|
2
|
+
// THEME MANAGEMENT
|
|
3
|
+
// ==========================================
|
|
4
|
+
|
|
5
|
+
function initTheme() {
|
|
6
|
+
const saved = localStorage.getItem('theme') || 'light';
|
|
7
|
+
document.documentElement.setAttribute('data-theme', saved);
|
|
8
|
+
updateThemeIcon(saved);
|
|
9
|
+
|
|
10
|
+
document.getElementById('themeToggle').addEventListener('click', () => {
|
|
11
|
+
const current = document.documentElement.getAttribute('data-theme');
|
|
12
|
+
const next = current === 'light' ? 'dark' : 'light';
|
|
13
|
+
document.documentElement.setAttribute('data-theme', next);
|
|
14
|
+
localStorage.setItem('theme', next);
|
|
15
|
+
updateThemeIcon(next);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function updateThemeIcon(theme) {
|
|
20
|
+
document.getElementById('themeToggle').textContent = theme === 'light' ? '🌙' : '☀️';
|
|
21
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Application Entry Point
|
|
2
|
+
// Initializes all components and sets up global event handlers
|
|
3
|
+
|
|
4
|
+
document.addEventListener('DOMContentLoaded', async () => {
|
|
5
|
+
// Initialize components with error handling to prevent cascading failures
|
|
6
|
+
try { initTheme(); } catch (e) { console.error('Theme init failed:', e); }
|
|
7
|
+
try { initSidebar(); } catch (e) { console.error('Sidebar init failed:', e); }
|
|
8
|
+
try { initPathSelector(); } catch (e) { console.error('Path selector init failed:', e); }
|
|
9
|
+
try { initNavigation(); } catch (e) { console.error('Navigation init failed:', e); }
|
|
10
|
+
try { initSearch(); } catch (e) { console.error('Search init failed:', e); }
|
|
11
|
+
try { initRefreshButton(); } catch (e) { console.error('Refresh button init failed:', e); }
|
|
12
|
+
try { initCarousel(); } catch (e) { console.error('Carousel init failed:', e); }
|
|
13
|
+
try { initMcpManager(); } catch (e) { console.error('MCP Manager init failed:', e); }
|
|
14
|
+
try { initHookManager(); } catch (e) { console.error('Hook Manager init failed:', e); }
|
|
15
|
+
|
|
16
|
+
// Initialize real-time features (WebSocket + auto-refresh)
|
|
17
|
+
try { initWebSocket(); } catch (e) { console.log('WebSocket not available:', e.message); }
|
|
18
|
+
try { initAutoRefresh(); } catch (e) { console.error('Auto-refresh init failed:', e); }
|
|
19
|
+
|
|
20
|
+
// Server mode: load data from API
|
|
21
|
+
try {
|
|
22
|
+
if (window.SERVER_MODE) {
|
|
23
|
+
await switchToPath(window.INITIAL_PATH || projectPath);
|
|
24
|
+
} else {
|
|
25
|
+
renderDashboard();
|
|
26
|
+
}
|
|
27
|
+
} catch (e) {
|
|
28
|
+
console.error('Dashboard render failed:', e);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Global Escape key handler for modals
|
|
32
|
+
document.addEventListener('keydown', (e) => {
|
|
33
|
+
if (e.key === 'Escape') {
|
|
34
|
+
closeMarkdownModal();
|
|
35
|
+
|
|
36
|
+
// Close JSON modal if exists
|
|
37
|
+
const jsonModal = document.querySelector('.json-modal-overlay');
|
|
38
|
+
if (jsonModal) {
|
|
39
|
+
const closeBtn = jsonModal.querySelector('.json-modal-close');
|
|
40
|
+
if (closeBtn) closeJsonModal(closeBtn);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Close path modal if exists
|
|
44
|
+
closePathModal();
|
|
45
|
+
|
|
46
|
+
// Close MCP create modal if exists
|
|
47
|
+
if (typeof closeMcpCreateModal === 'function') {
|
|
48
|
+
closeMcpCreateModal();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Close Hook create modal if exists
|
|
52
|
+
if (typeof closeHookCreateModal === 'function') {
|
|
53
|
+
closeHookCreateModal();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ========================================
|
|
2
|
+
// State Management
|
|
3
|
+
// ========================================
|
|
4
|
+
// Global state variables and template placeholders
|
|
5
|
+
// This module must be loaded first as other modules depend on these variables
|
|
6
|
+
|
|
7
|
+
// ========== Data Placeholders ==========
|
|
8
|
+
// These placeholders are replaced by the dashboard generator at build time
|
|
9
|
+
let workflowData = {{WORKFLOW_DATA}};
|
|
10
|
+
let projectPath = '{{PROJECT_PATH}}';
|
|
11
|
+
let recentPaths = {{RECENT_PATHS}};
|
|
12
|
+
|
|
13
|
+
// ========== Application State ==========
|
|
14
|
+
// Current filter for session list view ('all', 'active', 'archived')
|
|
15
|
+
let currentFilter = 'all';
|
|
16
|
+
|
|
17
|
+
// Current lite task type ('lite-plan', 'lite-fix', or null)
|
|
18
|
+
let currentLiteType = null;
|
|
19
|
+
|
|
20
|
+
// Current view mode ('sessions', 'liteTasks', 'project-overview', 'sessionDetail', 'liteTaskDetail')
|
|
21
|
+
let currentView = 'sessions';
|
|
22
|
+
|
|
23
|
+
// Current session detail key (null when not in detail view)
|
|
24
|
+
let currentSessionDetailKey = null;
|
|
25
|
+
|
|
26
|
+
// ========== Data Stores ==========
|
|
27
|
+
// Store session data for modal/detail access
|
|
28
|
+
// Key: session key, Value: session data object
|
|
29
|
+
const sessionDataStore = {};
|
|
30
|
+
|
|
31
|
+
// Store lite task session data for detail page access
|
|
32
|
+
// Key: session key, Value: lite session data object
|
|
33
|
+
const liteTaskDataStore = {};
|
|
34
|
+
|
|
35
|
+
// Store task JSON data in a global map instead of inline script tags
|
|
36
|
+
// Key: unique task ID, Value: raw task JSON data
|
|
37
|
+
const taskJsonStore = {};
|