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.
Files changed (350) hide show
  1. package/.claude/agents/action-planning-agent.md +778 -0
  2. package/.claude/agents/cli-execution-agent.md +270 -0
  3. package/.claude/agents/cli-explore-agent.md +182 -0
  4. package/.claude/agents/cli-lite-planning-agent.md +396 -0
  5. package/.claude/agents/cli-planning-agent.md +558 -0
  6. package/.claude/agents/code-developer.md +310 -0
  7. package/.claude/agents/conceptual-planning-agent.md +308 -0
  8. package/.claude/agents/context-search-agent.md +582 -0
  9. package/.claude/agents/doc-generator.md +330 -0
  10. package/.claude/agents/memory-bridge.md +94 -0
  11. package/.claude/agents/test-context-search-agent.md +399 -0
  12. package/.claude/agents/test-fix-agent.md +343 -0
  13. package/.claude/agents/ui-design-agent.md +593 -0
  14. package/.claude/agents/universal-executor.md +131 -0
  15. package/.claude/commands/cli/cli-init.md +440 -0
  16. package/.claude/commands/enhance-prompt.md +93 -0
  17. package/.claude/commands/memory/code-map-memory.md +687 -0
  18. package/.claude/commands/memory/docs-full-cli.md +471 -0
  19. package/.claude/commands/memory/docs-related-cli.md +386 -0
  20. package/.claude/commands/memory/docs.md +615 -0
  21. package/.claude/commands/memory/load-skill-memory.md +182 -0
  22. package/.claude/commands/memory/load.md +240 -0
  23. package/.claude/commands/memory/skill-memory.md +525 -0
  24. package/.claude/commands/memory/style-skill-memory.md +396 -0
  25. package/.claude/commands/memory/tech-research.md +477 -0
  26. package/.claude/commands/memory/update-full.md +332 -0
  27. package/.claude/commands/memory/update-related.md +332 -0
  28. package/.claude/commands/memory/workflow-skill-memory.md +517 -0
  29. package/.claude/commands/task/breakdown.md +204 -0
  30. package/.claude/commands/task/create.md +152 -0
  31. package/.claude/commands/task/execute.md +270 -0
  32. package/.claude/commands/task/replan.md +437 -0
  33. package/.claude/commands/version.md +254 -0
  34. package/.claude/commands/workflow/action-plan-verify.md +447 -0
  35. package/.claude/commands/workflow/brainstorm/api-designer.md +585 -0
  36. package/.claude/commands/workflow/brainstorm/artifacts.md +452 -0
  37. package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -0
  38. package/.claude/commands/workflow/brainstorm/data-architect.md +220 -0
  39. package/.claude/commands/workflow/brainstorm/product-manager.md +200 -0
  40. package/.claude/commands/workflow/brainstorm/product-owner.md +200 -0
  41. package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -0
  42. package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -0
  43. package/.claude/commands/workflow/brainstorm/synthesis.md +398 -0
  44. package/.claude/commands/workflow/brainstorm/system-architect.md +387 -0
  45. package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -0
  46. package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -0
  47. package/.claude/commands/workflow/execute.md +460 -0
  48. package/.claude/commands/workflow/init.md +164 -0
  49. package/.claude/commands/workflow/lite-execute.md +686 -0
  50. package/.claude/commands/workflow/lite-fix.md +621 -0
  51. package/.claude/commands/workflow/lite-plan.md +592 -0
  52. package/.claude/commands/workflow/plan.md +551 -0
  53. package/.claude/commands/workflow/replan.md +515 -0
  54. package/.claude/commands/workflow/review-fix.md +646 -0
  55. package/.claude/commands/workflow/review-module-cycle.md +795 -0
  56. package/.claude/commands/workflow/review-session-cycle.md +805 -0
  57. package/.claude/commands/workflow/review.md +291 -0
  58. package/.claude/commands/workflow/session/complete.md +500 -0
  59. package/.claude/commands/workflow/session/list.md +96 -0
  60. package/.claude/commands/workflow/session/resume.md +61 -0
  61. package/.claude/commands/workflow/session/start.md +200 -0
  62. package/.claude/commands/workflow/status.md +352 -0
  63. package/.claude/commands/workflow/tdd-plan.md +460 -0
  64. package/.claude/commands/workflow/tdd-verify.md +386 -0
  65. package/.claude/commands/workflow/test-cycle-execute.md +498 -0
  66. package/.claude/commands/workflow/test-fix-gen.md +699 -0
  67. package/.claude/commands/workflow/test-gen.md +529 -0
  68. package/.claude/commands/workflow/tools/conflict-resolution.md +680 -0
  69. package/.claude/commands/workflow/tools/context-gather.md +434 -0
  70. package/.claude/commands/workflow/tools/task-generate-agent.md +291 -0
  71. package/.claude/commands/workflow/tools/task-generate-tdd.md +518 -0
  72. package/.claude/commands/workflow/tools/tdd-coverage-analysis.md +309 -0
  73. package/.claude/commands/workflow/tools/test-concept-enhanced.md +163 -0
  74. package/.claude/commands/workflow/tools/test-context-gather.md +235 -0
  75. package/.claude/commands/workflow/tools/test-task-generate.md +256 -0
  76. package/.claude/commands/workflow/ui-design/animation-extract.md +1150 -0
  77. package/.claude/commands/workflow/ui-design/codify-style.md +652 -0
  78. package/.claude/commands/workflow/ui-design/design-sync.md +454 -0
  79. package/.claude/commands/workflow/ui-design/explore-auto.md +678 -0
  80. package/.claude/commands/workflow/ui-design/generate.md +504 -0
  81. package/.claude/commands/workflow/ui-design/imitate-auto.md +745 -0
  82. package/.claude/commands/workflow/ui-design/import-from-code.md +537 -0
  83. package/.claude/commands/workflow/ui-design/layout-extract.md +788 -0
  84. package/.claude/commands/workflow/ui-design/reference-page-generator.md +356 -0
  85. package/.claude/commands/workflow/ui-design/style-extract.md +773 -0
  86. package/.claude/scripts/classify-folders.sh +35 -0
  87. package/.claude/scripts/convert_tokens_to_css.sh +225 -0
  88. package/.claude/scripts/detect_changed_modules.sh +157 -0
  89. package/.claude/scripts/discover-design-files.sh +83 -0
  90. package/.claude/scripts/extract-animations.js +243 -0
  91. package/.claude/scripts/extract-computed-styles.js +118 -0
  92. package/.claude/scripts/extract-layout-structure.js +411 -0
  93. package/.claude/scripts/generate_module_docs.sh +713 -0
  94. package/.claude/scripts/get_modules_by_depth.sh +166 -0
  95. package/.claude/scripts/ui-generate-preview.sh +391 -0
  96. package/.claude/scripts/ui-instantiate-prototypes.sh +811 -0
  97. package/.claude/scripts/update_module_claude.sh +333 -0
  98. package/.claude/skills/command-guide/SKILL.md +388 -0
  99. package/.claude/skills/command-guide/UPDATE-GUIDELINE.md +592 -0
  100. package/.claude/skills/command-guide/guides/cli-tools-guide.md +410 -0
  101. package/.claude/skills/command-guide/guides/examples.md +537 -0
  102. package/.claude/skills/command-guide/guides/getting-started.md +242 -0
  103. package/.claude/skills/command-guide/guides/implementation-details.md +1010 -0
  104. package/.claude/skills/command-guide/guides/index-structure.md +326 -0
  105. package/.claude/skills/command-guide/guides/troubleshooting.md +92 -0
  106. package/.claude/skills/command-guide/guides/ui-design-workflow-guide.md +316 -0
  107. package/.claude/skills/command-guide/guides/workflow-patterns.md +662 -0
  108. package/.claude/skills/command-guide/index/all-commands.json +783 -0
  109. package/.claude/skills/command-guide/index/by-category.json +811 -0
  110. package/.claude/skills/command-guide/index/by-use-case.json +797 -0
  111. package/.claude/skills/command-guide/index/command-relationships.json +307 -0
  112. package/.claude/skills/command-guide/index/essential-commands.json +123 -0
  113. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +722 -0
  114. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +270 -0
  115. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +182 -0
  116. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +396 -0
  117. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +558 -0
  118. package/.claude/skills/command-guide/reference/agents/code-developer.md +310 -0
  119. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +328 -0
  120. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +577 -0
  121. package/.claude/skills/command-guide/reference/agents/doc-generator.md +330 -0
  122. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +94 -0
  123. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +399 -0
  124. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +343 -0
  125. package/.claude/skills/command-guide/reference/agents/ui-design-agent.md +593 -0
  126. package/.claude/skills/command-guide/reference/agents/universal-executor.md +131 -0
  127. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +440 -0
  128. package/.claude/skills/command-guide/reference/commands/enhance-prompt.md +93 -0
  129. package/.claude/skills/command-guide/reference/commands/memory/code-map-memory.md +687 -0
  130. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -0
  131. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -0
  132. package/.claude/skills/command-guide/reference/commands/memory/docs.md +610 -0
  133. package/.claude/skills/command-guide/reference/commands/memory/load-skill-memory.md +182 -0
  134. package/.claude/skills/command-guide/reference/commands/memory/load.md +240 -0
  135. package/.claude/skills/command-guide/reference/commands/memory/skill-memory.md +525 -0
  136. package/.claude/skills/command-guide/reference/commands/memory/style-skill-memory.md +396 -0
  137. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +477 -0
  138. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -0
  139. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +332 -0
  140. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +517 -0
  141. package/.claude/skills/command-guide/reference/commands/task/breakdown.md +204 -0
  142. package/.claude/skills/command-guide/reference/commands/task/create.md +152 -0
  143. package/.claude/skills/command-guide/reference/commands/task/execute.md +270 -0
  144. package/.claude/skills/command-guide/reference/commands/task/replan.md +437 -0
  145. package/.claude/skills/command-guide/reference/commands/version.md +254 -0
  146. package/.claude/skills/command-guide/reference/commands/workflow/action-plan-verify.md +447 -0
  147. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -0
  148. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +604 -0
  149. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +466 -0
  150. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -0
  151. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -0
  152. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -0
  153. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -0
  154. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -0
  155. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +496 -0
  156. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -0
  157. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -0
  158. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -0
  159. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +460 -0
  160. package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -0
  161. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +634 -0
  162. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +602 -0
  163. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +582 -0
  164. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +551 -0
  165. package/.claude/skills/command-guide/reference/commands/workflow/replan.md +515 -0
  166. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +646 -0
  167. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +795 -0
  168. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +805 -0
  169. package/.claude/skills/command-guide/reference/commands/workflow/review.md +291 -0
  170. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +500 -0
  171. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +96 -0
  172. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +61 -0
  173. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +180 -0
  174. package/.claude/skills/command-guide/reference/commands/workflow/status.md +352 -0
  175. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +460 -0
  176. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +386 -0
  177. package/.claude/skills/command-guide/reference/commands/workflow/test-cycle-execute.md +498 -0
  178. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -0
  179. package/.claude/skills/command-guide/reference/commands/workflow/test-gen.md +529 -0
  180. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +680 -0
  181. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -0
  182. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +151 -0
  183. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +518 -0
  184. package/.claude/skills/command-guide/reference/commands/workflow/tools/tdd-coverage-analysis.md +309 -0
  185. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +163 -0
  186. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-context-gather.md +235 -0
  187. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +256 -0
  188. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/animation-extract.md +1150 -0
  189. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/codify-style.md +652 -0
  190. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/design-sync.md +454 -0
  191. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/explore-auto.md +678 -0
  192. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +504 -0
  193. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/imitate-auto.md +745 -0
  194. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +537 -0
  195. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/layout-extract.md +788 -0
  196. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/reference-page-generator.md +356 -0
  197. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/style-extract.md +773 -0
  198. package/.claude/skills/command-guide/scripts/analyze_commands.py +502 -0
  199. package/.claude/skills/command-guide/scripts/update-index.sh +130 -0
  200. package/.claude/skills/command-guide/templates/issue-bug.md +104 -0
  201. package/.claude/skills/command-guide/templates/issue-diagnosis.md +275 -0
  202. package/.claude/skills/command-guide/templates/issue-feature.md +97 -0
  203. package/.claude/skills/command-guide/templates/issue-question.md +141 -0
  204. package/.claude/skills/prompt-enhancer/SKILL.md +124 -0
  205. package/.claude/workflows/_template-compare-matrix.html +692 -0
  206. package/.claude/workflows/cli-templates/fix-plan-template.json +75 -0
  207. package/.claude/workflows/cli-templates/fix-progress-template.json +48 -0
  208. package/.claude/workflows/cli-templates/memory/style-skill-memory/skill-md-template.md +299 -0
  209. package/.claude/workflows/cli-templates/planning-roles/data-architect.md +120 -0
  210. package/.claude/workflows/cli-templates/planning-roles/product-manager.md +119 -0
  211. package/.claude/workflows/cli-templates/planning-roles/product-owner.md +261 -0
  212. package/.claude/workflows/cli-templates/planning-roles/scrum-master.md +186 -0
  213. package/.claude/workflows/cli-templates/planning-roles/subject-matter-expert.md +281 -0
  214. package/.claude/workflows/cli-templates/planning-roles/synthesis-role.md +414 -0
  215. package/.claude/workflows/cli-templates/planning-roles/system-architect.md +106 -0
  216. package/.claude/workflows/cli-templates/planning-roles/test-strategist.md +124 -0
  217. package/.claude/workflows/cli-templates/planning-roles/ui-designer.md +379 -0
  218. package/.claude/workflows/cli-templates/planning-roles/ux-expert.md +240 -0
  219. package/.claude/workflows/cli-templates/prompts/analysis/01-diagnose-bug-root-cause.txt +127 -0
  220. package/.claude/workflows/cli-templates/prompts/analysis/01-trace-code-execution.txt +115 -0
  221. package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt +37 -0
  222. package/.claude/workflows/cli-templates/prompts/analysis/02-analyze-technical-document.txt +33 -0
  223. package/.claude/workflows/cli-templates/prompts/analysis/02-review-architecture.txt +29 -0
  224. package/.claude/workflows/cli-templates/prompts/analysis/02-review-code-quality.txt +28 -0
  225. package/.claude/workflows/cli-templates/prompts/analysis/03-analyze-performance.txt +29 -0
  226. package/.claude/workflows/cli-templates/prompts/analysis/03-assess-security-risks.txt +29 -0
  227. package/.claude/workflows/cli-templates/prompts/analysis/03-review-quality-standards.txt +29 -0
  228. package/.claude/workflows/cli-templates/prompts/development/02-generate-tests.txt +70 -0
  229. package/.claude/workflows/cli-templates/prompts/development/02-implement-component-ui.txt +55 -0
  230. package/.claude/workflows/cli-templates/prompts/development/02-implement-feature.txt +58 -0
  231. package/.claude/workflows/cli-templates/prompts/development/02-refactor-codebase.txt +55 -0
  232. package/.claude/workflows/cli-templates/prompts/development/03-debug-runtime-issues.txt +55 -0
  233. package/.claude/workflows/cli-templates/prompts/documentation/api.txt +15 -0
  234. package/.claude/workflows/cli-templates/prompts/documentation/folder-navigation.txt +27 -0
  235. package/.claude/workflows/cli-templates/prompts/documentation/module-readme.txt +49 -0
  236. package/.claude/workflows/cli-templates/prompts/documentation/project-architecture.txt +41 -0
  237. package/.claude/workflows/cli-templates/prompts/documentation/project-examples.txt +35 -0
  238. package/.claude/workflows/cli-templates/prompts/documentation/project-readme.txt +35 -0
  239. package/.claude/workflows/cli-templates/prompts/memory/02-document-module-structure.txt +165 -0
  240. package/.claude/workflows/cli-templates/prompts/planning/01-plan-architecture-design.txt +109 -0
  241. package/.claude/workflows/cli-templates/prompts/planning/02-breakdown-task-steps.txt +30 -0
  242. package/.claude/workflows/cli-templates/prompts/planning/02-design-component-spec.txt +28 -0
  243. package/.claude/workflows/cli-templates/prompts/planning/03-evaluate-concept-feasibility.txt +127 -0
  244. package/.claude/workflows/cli-templates/prompts/planning/03-plan-migration-strategy.txt +30 -0
  245. package/.claude/workflows/cli-templates/prompts/tech/tech-module-format.txt +359 -0
  246. package/.claude/workflows/cli-templates/prompts/tech/tech-skill-index.txt +185 -0
  247. package/.claude/workflows/cli-templates/prompts/test/test-concept-analysis.txt +179 -0
  248. package/.claude/workflows/cli-templates/prompts/universal/00-universal-creative-style.txt +95 -0
  249. package/.claude/workflows/cli-templates/prompts/universal/00-universal-rigorous-style.txt +92 -0
  250. package/.claude/workflows/cli-templates/prompts/verification/codex-technical.txt +28 -0
  251. package/.claude/workflows/cli-templates/prompts/verification/cross-validation.txt +28 -0
  252. package/.claude/workflows/cli-templates/prompts/verification/gemini-strategic.txt +27 -0
  253. package/.claude/workflows/cli-templates/prompts/workflow/analysis-results-structure.txt +224 -0
  254. package/.claude/workflows/cli-templates/prompts/workflow/codex-feasibility-validation.txt +176 -0
  255. package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -0
  256. package/.claude/workflows/cli-templates/prompts/workflow/impl-plan-template.txt +286 -0
  257. package/.claude/workflows/cli-templates/prompts/workflow/skill-aggregation.txt +172 -0
  258. package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +98 -0
  259. package/.claude/workflows/cli-templates/prompts/workflow/skill-index.txt +224 -0
  260. package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +98 -0
  261. package/.claude/workflows/cli-templates/prompts/workflow/skill-sessions-timeline.txt +53 -0
  262. package/.claude/workflows/cli-templates/prompts/workflow/task-json-agent-mode.txt +123 -0
  263. package/.claude/workflows/cli-templates/prompts/workflow/task-json-cli-mode.txt +182 -0
  264. package/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json +234 -0
  265. package/.claude/workflows/cli-templates/schemas/explore-json-schema.json +124 -0
  266. package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +273 -0
  267. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +219 -0
  268. package/.claude/workflows/cli-templates/schemas/project-json-schema.json +221 -0
  269. package/.claude/workflows/cli-templates/schemas/review-deep-dive-results-schema.json +82 -0
  270. package/.claude/workflows/cli-templates/schemas/review-dimension-results-schema.json +51 -0
  271. package/.claude/workflows/cli-templates/tech-stacks/go-dev.md +91 -0
  272. package/.claude/workflows/cli-templates/tech-stacks/java-dev.md +107 -0
  273. package/.claude/workflows/cli-templates/tech-stacks/javascript-dev.md +58 -0
  274. package/.claude/workflows/cli-templates/tech-stacks/python-dev.md +79 -0
  275. package/.claude/workflows/cli-templates/tech-stacks/react-dev.md +103 -0
  276. package/.claude/workflows/cli-templates/tech-stacks/typescript-dev.md +83 -0
  277. package/.claude/workflows/cli-templates/ui-design/systems/animation-tokens.json +247 -0
  278. package/.claude/workflows/cli-templates/ui-design/systems/design-tokens.json +342 -0
  279. package/.claude/workflows/cli-templates/ui-design/systems/layout-templates.json +145 -0
  280. package/.claude/workflows/context-search-strategy.md +77 -0
  281. package/.claude/workflows/intelligent-tools-strategy.md +662 -0
  282. package/.claude/workflows/review-directory-specification.md +336 -0
  283. package/.claude/workflows/task-core.md +214 -0
  284. package/.claude/workflows/tool-strategy.md +71 -0
  285. package/.claude/workflows/workflow-architecture.md +942 -0
  286. package/.codex/AGENTS.md +330 -0
  287. package/.gemini/GEMINI.md +164 -0
  288. package/.qwen/QWEN.md +164 -0
  289. package/CLAUDE.md +91 -0
  290. package/LICENSE +21 -0
  291. package/README.md +219 -0
  292. package/ccw/README.md +121 -0
  293. package/ccw/bin/ccw.js +10 -0
  294. package/ccw/src/cli.js +100 -0
  295. package/ccw/src/commands/install.js +324 -0
  296. package/ccw/src/commands/list.js +37 -0
  297. package/ccw/src/commands/serve.js +67 -0
  298. package/ccw/src/commands/uninstall.js +238 -0
  299. package/ccw/src/commands/upgrade.js +307 -0
  300. package/ccw/src/commands/view.js +14 -0
  301. package/ccw/src/core/dashboard-generator-patch.js +29 -0
  302. package/ccw/src/core/dashboard-generator.js +667 -0
  303. package/ccw/src/core/data-aggregator.js +409 -0
  304. package/ccw/src/core/lite-scanner.js +290 -0
  305. package/ccw/src/core/manifest.js +201 -0
  306. package/ccw/src/core/server.js +1327 -0
  307. package/ccw/src/core/server.js.bak +385 -0
  308. package/ccw/src/core/server_original.bak +385 -0
  309. package/ccw/src/core/session-scanner.js +235 -0
  310. package/ccw/src/index.js +9 -0
  311. package/ccw/src/templates/dashboard-js/api.js +200 -0
  312. package/ccw/src/templates/dashboard-js/components/_conflict_tab.js +112 -0
  313. package/ccw/src/templates/dashboard-js/components/_exp_helpers.js +54 -0
  314. package/ccw/src/templates/dashboard-js/components/_review_tab.js +640 -0
  315. package/ccw/src/templates/dashboard-js/components/carousel.js +398 -0
  316. package/ccw/src/templates/dashboard-js/components/flowchart.js +493 -0
  317. package/ccw/src/templates/dashboard-js/components/hook-manager.js +273 -0
  318. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +506 -0
  319. package/ccw/src/templates/dashboard-js/components/modals.js +260 -0
  320. package/ccw/src/templates/dashboard-js/components/navigation.js +239 -0
  321. package/ccw/src/templates/dashboard-js/components/notifications.js +194 -0
  322. package/ccw/src/templates/dashboard-js/components/sidebar.js +31 -0
  323. package/ccw/src/templates/dashboard-js/components/tabs-context.js +1093 -0
  324. package/ccw/src/templates/dashboard-js/components/tabs-other.js +273 -0
  325. package/ccw/src/templates/dashboard-js/components/task-drawer-core.js +477 -0
  326. package/ccw/src/templates/dashboard-js/components/task-drawer-renderers.js +447 -0
  327. package/ccw/src/templates/dashboard-js/components/theme.js +21 -0
  328. package/ccw/src/templates/dashboard-js/main.js +57 -0
  329. package/ccw/src/templates/dashboard-js/state.js +37 -0
  330. package/ccw/src/templates/dashboard-js/utils.js +153 -0
  331. package/ccw/src/templates/dashboard-js/views/fix-session.js +180 -0
  332. package/ccw/src/templates/dashboard-js/views/home.js +193 -0
  333. package/ccw/src/templates/dashboard-js/views/hook-manager.js +387 -0
  334. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +390 -0
  335. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +271 -0
  336. package/ccw/src/templates/dashboard-js/views/project-overview.js +246 -0
  337. package/ccw/src/templates/dashboard-js/views/review-session.js +711 -0
  338. package/ccw/src/templates/dashboard-js/views/session-detail.js +770 -0
  339. package/ccw/src/templates/dashboard.css +7660 -0
  340. package/ccw/src/templates/dashboard.html +630 -0
  341. package/ccw/src/templates/dashboard_tailwind.html +42 -0
  342. package/ccw/src/templates/dashboard_test.html +37 -0
  343. package/ccw/src/templates/review-cycle-dashboard.html +1930 -0
  344. package/ccw/src/templates/tailwind-base.css +212 -0
  345. package/ccw/src/templates/workflow-dashboard.html +401 -0
  346. package/ccw/src/utils/browser-launcher.js +49 -0
  347. package/ccw/src/utils/file-utils.js +48 -0
  348. package/ccw/src/utils/path-resolver.js +279 -0
  349. package/ccw/src/utils/ui.js +148 -0
  350. package/package.json +66 -0
@@ -0,0 +1,153 @@
1
+ // ========================================
2
+ // Utility Functions
3
+ // ========================================
4
+ // General-purpose helper functions used across the application
5
+
6
+ // ========== HTML/Text Processing ==========
7
+
8
+ /**
9
+ * Escape HTML special characters to prevent XSS attacks
10
+ * @param {string} str - String to escape
11
+ * @returns {string} Escaped string safe for HTML insertion
12
+ */
13
+ function escapeHtml(str) {
14
+ if (typeof str !== 'string') return str;
15
+ return str
16
+ .replace(/&/g, '&')
17
+ .replace(/</g, '&lt;')
18
+ .replace(/>/g, '&gt;')
19
+ .replace(/"/g, '&quot;')
20
+ .replace(/'/g, '&#039;');
21
+ }
22
+
23
+ /**
24
+ * Truncate text to specified maximum length
25
+ * @param {string} text - Text to truncate
26
+ * @param {number} maxLen - Maximum length (including ellipsis)
27
+ * @returns {string} Truncated text with '...' if needed
28
+ */
29
+ function truncateText(text, maxLen) {
30
+ if (!text) return '';
31
+ return text.length > maxLen ? text.substring(0, maxLen - 3) + '...' : text;
32
+ }
33
+
34
+ /**
35
+ * Normalize line endings in content
36
+ * Handles both literal \r\n escape sequences and actual newlines
37
+ * @param {string} content - Content to normalize
38
+ * @returns {string} Content with normalized line endings (LF only)
39
+ */
40
+ function normalizeLineEndings(content) {
41
+ if (!content) return '';
42
+ let normalized = content;
43
+ // If content has literal \r\n or \n as text (escaped), convert to actual newlines
44
+ if (normalized.includes('\\r\\n')) {
45
+ normalized = normalized.replace(/\\r\\n/g, '\n');
46
+ } else if (normalized.includes('\\n')) {
47
+ normalized = normalized.replace(/\\n/g, '\n');
48
+ }
49
+ // Normalize CRLF to LF for consistent rendering
50
+ normalized = normalized.replace(/\r\n/g, '\n');
51
+ return normalized;
52
+ }
53
+
54
+ // ========== Date/Time Formatting ==========
55
+
56
+ /**
57
+ * Format ISO date string to human-readable format
58
+ * @param {string} dateStr - ISO date string
59
+ * @returns {string} Formatted date string (YYYY/MM/DD HH:mm) or '-' if invalid
60
+ */
61
+ function formatDate(dateStr) {
62
+ if (!dateStr) return '-';
63
+ try {
64
+ const date = new Date(dateStr);
65
+ // Check if date is valid
66
+ if (isNaN(date.getTime())) return '-';
67
+ // Format: YYYY/MM/DD HH:mm
68
+ const year = date.getFullYear();
69
+ const month = String(date.getMonth() + 1).padStart(2, '0');
70
+ const day = String(date.getDate()).padStart(2, '0');
71
+ const hours = String(date.getHours()).padStart(2, '0');
72
+ const minutes = String(date.getMinutes()).padStart(2, '0');
73
+ return `${year}/${month}/${day} ${hours}:${minutes}`;
74
+ } catch (e) {
75
+ return '-';
76
+ }
77
+ }
78
+
79
+ // ========== UI Helpers ==========
80
+
81
+ /**
82
+ * Get color for relevance score visualization
83
+ * @param {number} score - Relevance score (0-1)
84
+ * @returns {string} CSS color value
85
+ */
86
+ function getRelevanceColor(score) {
87
+ if (score >= 0.95) return '#10b981';
88
+ if (score >= 0.90) return '#3b82f6';
89
+ if (score >= 0.80) return '#f59e0b';
90
+ return '#6b7280';
91
+ }
92
+
93
+ /**
94
+ * Get CSS class for role badge styling
95
+ * @param {string} role - Role identifier
96
+ * @returns {string} CSS class name
97
+ */
98
+ function getRoleBadgeClass(role) {
99
+ const roleMap = {
100
+ 'core-hook': 'primary',
101
+ 'api-client': 'success',
102
+ 'api-router': 'info',
103
+ 'service-layer': 'warning',
104
+ 'pydantic-schemas': 'secondary',
105
+ 'orm-model': 'secondary',
106
+ 'typescript-types': 'info'
107
+ };
108
+ return roleMap[role] || 'secondary';
109
+ }
110
+
111
+ /**
112
+ * Toggle collapsible section visibility
113
+ * @param {HTMLElement} header - Section header element
114
+ */
115
+ function toggleSection(header) {
116
+ const content = header.nextElementSibling;
117
+ const icon = header.querySelector('.collapse-icon');
118
+ const isCollapsed = content.classList.contains('collapsed');
119
+
120
+ content.classList.toggle('collapsed');
121
+ header.classList.toggle('expanded');
122
+ icon.textContent = isCollapsed ? '▼' : '▶';
123
+
124
+ // Render flowchart if expanding flow_control section
125
+ if (isCollapsed && header.querySelector('.section-label')?.textContent === 'flow_control') {
126
+ const taskId = content.closest('[data-task-id]')?.dataset.taskId;
127
+ if (taskId) {
128
+ const task = taskJsonStore[taskId];
129
+ if (task?.flow_control) {
130
+ setTimeout(() => renderFullFlowchart(task.flow_control), 100);
131
+ }
132
+ }
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Initialize collapsible sections within a container
138
+ * @param {HTMLElement} container - Container element to search within
139
+ */
140
+ function initCollapsibleSections(container) {
141
+ setTimeout(() => {
142
+ const headers = container.querySelectorAll('.collapsible-header');
143
+ headers.forEach(header => {
144
+ if (!header._clickBound) {
145
+ header._clickBound = true;
146
+ header.addEventListener('click', function(e) {
147
+ e.stopPropagation();
148
+ toggleSection(this);
149
+ });
150
+ }
151
+ });
152
+ }, 100);
153
+ }
@@ -0,0 +1,180 @@
1
+ // ============================================
2
+ // FIX SESSION VIEW
3
+ // ============================================
4
+ // Fix session detail page rendering
5
+
6
+ function renderFixSessionDetailPage(session) {
7
+ const isActive = session._isActive !== false;
8
+ const tasks = session.tasks || [];
9
+
10
+ // Calculate fix statistics
11
+ const totalTasks = tasks.length;
12
+ const fixedCount = tasks.filter(t => t.status === 'completed' && t.result === 'fixed').length;
13
+ const failedCount = tasks.filter(t => t.status === 'completed' && t.result === 'failed').length;
14
+ const pendingCount = tasks.filter(t => t.status === 'pending').length;
15
+ const inProgressCount = tasks.filter(t => t.status === 'in_progress').length;
16
+ const percentComplete = totalTasks > 0 ? ((fixedCount + failedCount) / totalTasks * 100) : 0;
17
+
18
+ return `
19
+ <div class="session-detail-page session-type-fix">
20
+ <!-- Header -->
21
+ <div class="detail-header">
22
+ <button class="btn-back" onclick="goBackToSessions()">
23
+ <span class="back-icon">←</span>
24
+ <span>Back to Sessions</span>
25
+ </button>
26
+ <div class="detail-title-row">
27
+ <h2 class="detail-session-id">🔧 ${escapeHtml(session.session_id)}</h2>
28
+ <div class="detail-badges">
29
+ <span class="session-type-badge test-fix">Fix</span>
30
+ <span class="session-status ${isActive ? 'active' : 'archived'}">
31
+ ${isActive ? 'ACTIVE' : 'ARCHIVED'}
32
+ </span>
33
+ </div>
34
+ </div>
35
+ </div>
36
+
37
+ <!-- Fix Progress Section -->
38
+ <div class="fix-progress-section">
39
+ <div class="fix-progress-header">
40
+ <h3>🔧 Fix Progress</h3>
41
+ <span class="phase-badge ${session.phase || 'execution'}">${session.phase || 'Execution'}</span>
42
+ </div>
43
+
44
+ <!-- Progress Bar -->
45
+ <div class="fix-progress-bar">
46
+ <div class="fix-progress-bar-fill" style="width: ${percentComplete}%"></div>
47
+ </div>
48
+ <div class="progress-text">
49
+ <strong>${fixedCount + failedCount}/${totalTasks}</strong> completed (${percentComplete.toFixed(1)}%)
50
+ </div>
51
+
52
+ <!-- Summary Cards -->
53
+ <div class="fix-summary-grid">
54
+ <div class="summary-card">
55
+ <div class="summary-icon">📊</div>
56
+ <div class="summary-value">${totalTasks}</div>
57
+ <div class="summary-label">Total Tasks</div>
58
+ </div>
59
+ <div class="summary-card fixed">
60
+ <div class="summary-icon">✅</div>
61
+ <div class="summary-value">${fixedCount}</div>
62
+ <div class="summary-label">Fixed</div>
63
+ </div>
64
+ <div class="summary-card failed">
65
+ <div class="summary-icon">❌</div>
66
+ <div class="summary-value">${failedCount}</div>
67
+ <div class="summary-label">Failed</div>
68
+ </div>
69
+ <div class="summary-card pending">
70
+ <div class="summary-icon">⏳</div>
71
+ <div class="summary-value">${pendingCount}</div>
72
+ <div class="summary-label">Pending</div>
73
+ </div>
74
+ </div>
75
+
76
+ <!-- Stage Timeline (if available) -->
77
+ ${session.stages && session.stages.length > 0 ? `
78
+ <div class="stage-timeline">
79
+ ${session.stages.map((stage, idx) => `
80
+ <div class="stage-item ${stage.status || 'pending'}">
81
+ <div class="stage-number">Stage ${idx + 1}</div>
82
+ <div class="stage-mode">${stage.execution_mode === 'parallel' ? '⚡ Parallel' : '➡️ Serial'}</div>
83
+ <div class="stage-groups">${stage.groups?.length || 0} groups</div>
84
+ </div>
85
+ `).join('')}
86
+ </div>
87
+ ` : ''}
88
+ </div>
89
+
90
+ <!-- Fix Tasks Grid -->
91
+ <div class="fix-tasks-section">
92
+ <div class="tasks-header">
93
+ <h3>📋 Fix Tasks</h3>
94
+ <div class="task-filters">
95
+ <button class="filter-btn active" data-status="all" onclick="filterFixTasks('all')">All</button>
96
+ <button class="filter-btn" data-status="pending" onclick="filterFixTasks('pending')">Pending</button>
97
+ <button class="filter-btn" data-status="in_progress" onclick="filterFixTasks('in_progress')">In Progress</button>
98
+ <button class="filter-btn" data-status="fixed" onclick="filterFixTasks('fixed')">Fixed</button>
99
+ <button class="filter-btn" data-status="failed" onclick="filterFixTasks('failed')">Failed</button>
100
+ </div>
101
+ </div>
102
+ <div class="fix-tasks-grid" id="fixTasksGrid">
103
+ ${renderFixTasksGrid(tasks)}
104
+ </div>
105
+ </div>
106
+
107
+ <!-- Session Info -->
108
+ <div class="detail-info-bar">
109
+ <div class="info-item">
110
+ <span class="info-label">Created:</span>
111
+ <span class="info-value">${formatDate(session.created_at)}</span>
112
+ </div>
113
+ ${session.archived_at ? `
114
+ <div class="info-item">
115
+ <span class="info-label">Archived:</span>
116
+ <span class="info-value">${formatDate(session.archived_at)}</span>
117
+ </div>
118
+ ` : ''}
119
+ <div class="info-item">
120
+ <span class="info-label">Project:</span>
121
+ <span class="info-value">${escapeHtml(session.project || '-')}</span>
122
+ </div>
123
+ </div>
124
+ </div>
125
+ `;
126
+ }
127
+
128
+ function renderFixTasksGrid(tasks) {
129
+ if (!tasks || tasks.length === 0) {
130
+ return `
131
+ <div class="empty-state">
132
+ <div class="empty-icon">📋</div>
133
+ <div class="empty-text">No fix tasks found</div>
134
+ </div>
135
+ `;
136
+ }
137
+
138
+ return tasks.map(task => {
139
+ const statusClass = task.status === 'completed' ? (task.result || 'completed') : task.status;
140
+ const statusText = task.status === 'completed' ? (task.result || 'completed') : task.status;
141
+
142
+ return `
143
+ <div class="fix-task-card status-${statusClass}" data-status="${statusClass}">
144
+ <div class="task-card-header">
145
+ <span class="task-id-badge">${escapeHtml(task.task_id || task.id || 'N/A')}</span>
146
+ <span class="task-status-badge ${statusClass}">${statusText}</span>
147
+ </div>
148
+ <div class="task-card-title">${escapeHtml(task.title || 'Untitled Task')}</div>
149
+ ${task.finding_title ? `<div class="task-finding">${escapeHtml(task.finding_title)}</div>` : ''}
150
+ ${task.file ? `<div class="task-file">📄 ${escapeHtml(task.file)}${task.line ? ':' + task.line : ''}</div>` : ''}
151
+ <div class="task-card-meta">
152
+ ${task.dimension ? `<span class="task-dimension">${escapeHtml(task.dimension)}</span>` : ''}
153
+ ${task.attempts && task.attempts > 1 ? `<span class="task-attempts">🔄 ${task.attempts} attempts</span>` : ''}
154
+ ${task.commit_hash ? `<span class="task-commit">💾 ${task.commit_hash.substring(0, 7)}</span>` : ''}
155
+ </div>
156
+ </div>
157
+ `;
158
+ }).join('');
159
+ }
160
+
161
+ function initFixSessionPage(session) {
162
+ // Initialize event handlers for fix session page
163
+ // Filter handlers are inline onclick
164
+ }
165
+
166
+ function filterFixTasks(status) {
167
+ // Update filter buttons
168
+ document.querySelectorAll('.task-filters .filter-btn').forEach(btn => {
169
+ btn.classList.toggle('active', btn.dataset.status === status);
170
+ });
171
+
172
+ // Filter task cards
173
+ document.querySelectorAll('.fix-task-card').forEach(card => {
174
+ if (status === 'all' || card.dataset.status === status) {
175
+ card.style.display = '';
176
+ } else {
177
+ card.style.display = 'none';
178
+ }
179
+ });
180
+ }
@@ -0,0 +1,193 @@
1
+ // ==========================================
2
+ // HOME VIEW - Dashboard Homepage
3
+ // ==========================================
4
+
5
+ function renderDashboard() {
6
+ // Show stats grid and search (may be hidden by MCP view)
7
+ showStatsAndSearch();
8
+
9
+ updateStats();
10
+ updateBadges();
11
+ updateCarousel();
12
+ renderSessions();
13
+ document.getElementById('generatedAt').textContent = workflowData.generatedAt || new Date().toISOString();
14
+ }
15
+
16
+ function showStatsAndSearch() {
17
+ const statsGrid = document.getElementById('statsGrid');
18
+ const searchInput = document.getElementById('searchInput');
19
+ if (statsGrid) statsGrid.style.display = '';
20
+ if (searchInput) searchInput.parentElement.style.display = '';
21
+ }
22
+
23
+ function hideStatsAndCarousel() {
24
+ const statsGrid = document.getElementById('statsGrid');
25
+ const searchInput = document.getElementById('searchInput');
26
+ if (statsGrid) statsGrid.style.display = 'none';
27
+ if (searchInput) searchInput.parentElement.style.display = 'none';
28
+ }
29
+
30
+ function updateStats() {
31
+ const stats = workflowData.statistics || {};
32
+ document.getElementById('statTotalSessions').textContent = stats.totalSessions || 0;
33
+ document.getElementById('statActiveSessions').textContent = stats.activeSessions || 0;
34
+ document.getElementById('statTotalTasks').textContent = stats.totalTasks || 0;
35
+ document.getElementById('statCompletedTasks').textContent = stats.completedTasks || 0;
36
+ }
37
+
38
+ function updateBadges() {
39
+ const active = workflowData.activeSessions || [];
40
+ const archived = workflowData.archivedSessions || [];
41
+
42
+ document.getElementById('badgeAll').textContent = active.length + archived.length;
43
+ document.getElementById('badgeActive').textContent = active.length;
44
+ document.getElementById('badgeArchived').textContent = archived.length;
45
+
46
+ // Lite Tasks badges
47
+ const liteTasks = workflowData.liteTasks || {};
48
+ document.getElementById('badgeLitePlan').textContent = liteTasks.litePlan?.length || 0;
49
+ document.getElementById('badgeLiteFix').textContent = liteTasks.liteFix?.length || 0;
50
+
51
+ // MCP badge - load async if needed
52
+ if (typeof loadMcpConfig === 'function') {
53
+ loadMcpConfig().then(() => {
54
+ if (typeof updateMcpBadge === 'function') {
55
+ updateMcpBadge();
56
+ }
57
+ }).catch(e => console.error('MCP badge update failed:', e));
58
+ }
59
+ }
60
+
61
+ function renderSessions() {
62
+ const container = document.getElementById('mainContent');
63
+
64
+ let sessions = [];
65
+
66
+ if (currentFilter === 'all' || currentFilter === 'active') {
67
+ sessions = sessions.concat((workflowData.activeSessions || []).map(s => ({ ...s, _isActive: true })));
68
+ }
69
+ if (currentFilter === 'all' || currentFilter === 'archived') {
70
+ sessions = sessions.concat((workflowData.archivedSessions || []).map(s => ({ ...s, _isActive: false })));
71
+ }
72
+
73
+ if (sessions.length === 0) {
74
+ container.innerHTML = `
75
+ <div class="empty-state" style="grid-column: 1/-1;">
76
+ <div class="empty-icon">📭</div>
77
+ <div class="empty-title">No Sessions Found</div>
78
+ <div class="empty-text">No workflow sessions match your current filter.</div>
79
+ </div>
80
+ `;
81
+ return;
82
+ }
83
+
84
+ container.innerHTML = `<div class="sessions-grid">${sessions.map(session => renderSessionCard(session)).join('')}</div>`;
85
+ }
86
+
87
+ function renderSessionCard(session) {
88
+ const tasks = session.tasks || [];
89
+ const taskCount = session.taskCount || tasks.length;
90
+ const completed = tasks.filter(t => t.status === 'completed').length;
91
+ const progress = taskCount > 0 ? Math.round((completed / taskCount) * 100) : 0;
92
+
93
+ // Use _isActive flag set during rendering, default to true
94
+ const isActive = session._isActive !== false;
95
+ const date = session.created_at;
96
+
97
+ // Get session type badge
98
+ const sessionType = session.type || 'workflow';
99
+ const typeBadge = sessionType !== 'workflow' ? `<span class="session-type-badge ${sessionType}">${sessionType}</span>` : '';
100
+
101
+ // Store session data for modal
102
+ const sessionKey = `session-${session.session_id}`.replace(/[^a-zA-Z0-9-]/g, '-');
103
+ sessionDataStore[sessionKey] = session;
104
+
105
+ // Special rendering for review sessions
106
+ if (sessionType === 'review') {
107
+ return renderReviewSessionCard(session, sessionKey, typeBadge, isActive, date);
108
+ }
109
+
110
+ return `
111
+ <div class="session-card" onclick="showSessionDetailPage('${sessionKey}')">
112
+ <div class="session-header">
113
+ <div class="session-title">${escapeHtml(session.session_id || 'Unknown')}</div>
114
+ <div class="session-badges">
115
+ ${typeBadge}
116
+ <span class="session-status ${isActive ? 'active' : 'archived'}">
117
+ ${isActive ? 'ACTIVE' : 'ARCHIVED'}
118
+ </span>
119
+ </div>
120
+ </div>
121
+ <div class="session-body">
122
+ <div class="session-meta">
123
+ <span class="session-meta-item">📅 ${formatDate(date)}</span>
124
+ <span class="session-meta-item">📋 ${taskCount} tasks</span>
125
+ </div>
126
+ ${taskCount > 0 ? `
127
+ <div class="progress-container">
128
+ <span class="progress-label">Progress</span>
129
+ <div class="progress-bar-wrapper">
130
+ <div class="progress-bar">
131
+ <div class="progress-fill" style="width: ${progress}%"></div>
132
+ </div>
133
+ <span class="progress-text">${completed}/${taskCount} (${progress}%)</span>
134
+ </div>
135
+ </div>
136
+ ` : ''}
137
+ </div>
138
+ </div>
139
+ `;
140
+ }
141
+
142
+ // Special card rendering for review sessions
143
+ function renderReviewSessionCard(session, sessionKey, typeBadge, isActive, date) {
144
+ // Calculate findings stats from reviewDimensions
145
+ const dimensions = session.reviewDimensions || [];
146
+ let totalFindings = 0;
147
+ let criticalCount = 0;
148
+ let highCount = 0;
149
+ let mediumCount = 0;
150
+ let lowCount = 0;
151
+
152
+ dimensions.forEach(dim => {
153
+ const findings = dim.findings || [];
154
+ totalFindings += findings.length;
155
+ criticalCount += findings.filter(f => f.severity === 'critical').length;
156
+ highCount += findings.filter(f => f.severity === 'high').length;
157
+ mediumCount += findings.filter(f => f.severity === 'medium').length;
158
+ lowCount += findings.filter(f => f.severity === 'low').length;
159
+ });
160
+
161
+ return `
162
+ <div class="session-card" onclick="showSessionDetailPage('${sessionKey}')">
163
+ <div class="session-header">
164
+ <div class="session-title">${escapeHtml(session.session_id || 'Unknown')}</div>
165
+ <div class="session-badges">
166
+ ${typeBadge}
167
+ <span class="session-status ${isActive ? 'active' : 'archived'}">
168
+ ${isActive ? 'ACTIVE' : 'ARCHIVED'}
169
+ </span>
170
+ </div>
171
+ </div>
172
+ <div class="session-body">
173
+ <div class="session-meta">
174
+ <span class="session-meta-item">📅 ${formatDate(date)}</span>
175
+ <span class="session-meta-item">🔍 ${totalFindings} findings</span>
176
+ </div>
177
+ ${totalFindings > 0 ? `
178
+ <div class="review-findings-summary">
179
+ <div class="findings-severity-row">
180
+ ${criticalCount > 0 ? `<span class="finding-count critical">🔴 ${criticalCount}</span>` : ''}
181
+ ${highCount > 0 ? `<span class="finding-count high">🟠 ${highCount}</span>` : ''}
182
+ ${mediumCount > 0 ? `<span class="finding-count medium">🟡 ${mediumCount}</span>` : ''}
183
+ ${lowCount > 0 ? `<span class="finding-count low">🟢 ${lowCount}</span>` : ''}
184
+ </div>
185
+ <div class="dimensions-info">
186
+ ${dimensions.length} dimensions
187
+ </div>
188
+ </div>
189
+ ` : ''}
190
+ </div>
191
+ </div>
192
+ `;
193
+ }