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,640 @@
1
+ // ==========================================
2
+ // Enhanced Review Tab with Multi-Select & Preview
3
+ // ==========================================
4
+
5
+ // Review tab state
6
+ let reviewTabState = {
7
+ allFindings: [],
8
+ filteredFindings: [],
9
+ selectedFindings: new Set(),
10
+ currentFilters: {
11
+ dimension: 'all',
12
+ severities: new Set(),
13
+ search: ''
14
+ },
15
+ sortConfig: {
16
+ field: 'severity',
17
+ order: 'desc'
18
+ },
19
+ previewFinding: null,
20
+ sessionPath: null,
21
+ sessionId: null
22
+ };
23
+
24
+ // ==========================================
25
+ // Main Review Tab Render
26
+ // ==========================================
27
+
28
+ function renderReviewContent(review) {
29
+ if (!review || !review.dimensions) {
30
+ return `
31
+ <div class="tab-empty-state">
32
+ <div class="empty-icon">🔍</div>
33
+ <div class="empty-title">No Review Data</div>
34
+ <div class="empty-text">No review findings in .review/</div>
35
+ </div>
36
+ `;
37
+ }
38
+
39
+ // Convert dimensions object to flat findings array
40
+ const findings = [];
41
+ let findingIndex = 0;
42
+
43
+ Object.entries(review.dimensions).forEach(([dim, rawFindings]) => {
44
+ let dimFindings = [];
45
+ if (Array.isArray(rawFindings)) {
46
+ dimFindings = rawFindings;
47
+ } else if (rawFindings && typeof rawFindings === 'object') {
48
+ if (Array.isArray(rawFindings.findings)) {
49
+ dimFindings = rawFindings.findings;
50
+ }
51
+ }
52
+
53
+ dimFindings.forEach(f => {
54
+ findings.push({
55
+ id: f.id || `finding-${findingIndex++}`,
56
+ title: f.title || 'Finding',
57
+ description: f.description || '',
58
+ severity: (f.severity || 'medium').toLowerCase(),
59
+ dimension: dim,
60
+ category: f.category || '',
61
+ file: f.file || '',
62
+ line: f.line || '',
63
+ code_context: f.code_context || f.snippet || '',
64
+ recommendations: f.recommendations || (f.recommendation ? [f.recommendation] : []),
65
+ root_cause: f.root_cause || '',
66
+ impact: f.impact || '',
67
+ references: f.references || [],
68
+ metadata: f.metadata || {}
69
+ });
70
+ });
71
+ });
72
+
73
+ if (findings.length === 0) {
74
+ return `
75
+ <div class="tab-empty-state">
76
+ <div class="empty-icon">🔍</div>
77
+ <div class="empty-title">No Findings</div>
78
+ <div class="empty-text">No review findings found.</div>
79
+ </div>
80
+ `;
81
+ }
82
+
83
+ // Store findings in state
84
+ reviewTabState.allFindings = findings;
85
+ reviewTabState.filteredFindings = [...findings];
86
+ reviewTabState.selectedFindings.clear();
87
+ reviewTabState.previewFinding = null;
88
+
89
+ // Get dimensions for tabs
90
+ const dimensions = [...new Set(findings.map(f => f.dimension))];
91
+
92
+ // Count by severity
93
+ const severityCounts = {
94
+ critical: findings.filter(f => f.severity === 'critical').length,
95
+ high: findings.filter(f => f.severity === 'high').length,
96
+ medium: findings.filter(f => f.severity === 'medium').length,
97
+ low: findings.filter(f => f.severity === 'low').length
98
+ };
99
+
100
+ return `
101
+ <div class="review-enhanced-container">
102
+ <!-- Header with Stats & Controls -->
103
+ <div class="review-header-bar">
104
+ <div class="review-severity-stats">
105
+ <span class="severity-stat critical" onclick="filterReviewBySeverity('critical')" title="Filter Critical">
106
+ 🔴 ${severityCounts.critical}
107
+ </span>
108
+ <span class="severity-stat high" onclick="filterReviewBySeverity('high')" title="Filter High">
109
+ 🟠 ${severityCounts.high}
110
+ </span>
111
+ <span class="severity-stat medium" onclick="filterReviewBySeverity('medium')" title="Filter Medium">
112
+ 🟡 ${severityCounts.medium}
113
+ </span>
114
+ <span class="severity-stat low" onclick="filterReviewBySeverity('low')" title="Filter Low">
115
+ 🟢 ${severityCounts.low}
116
+ </span>
117
+ </div>
118
+
119
+ <div class="review-search-box">
120
+ <input type="text"
121
+ id="reviewSearchInput"
122
+ placeholder="Search findings..."
123
+ oninput="onReviewSearch(this.value)">
124
+ </div>
125
+
126
+ <div class="review-selection-controls">
127
+ <span class="selection-counter" id="reviewSelectionCounter">0 selected</span>
128
+ <button class="btn-mini" onclick="selectAllReviewFindings()">Select All</button>
129
+ <button class="btn-mini" onclick="selectVisibleReviewFindings()">Select Visible</button>
130
+ <button class="btn-mini" onclick="clearReviewSelection()">Clear</button>
131
+ </div>
132
+
133
+ <button class="btn-export-fix" id="exportFixBtn" onclick="exportReviewFixJson()" disabled>
134
+ 🔧 Export Fix JSON
135
+ </button>
136
+ </div>
137
+
138
+ <!-- Filter Bar -->
139
+ <div class="review-filter-bar">
140
+ <div class="filter-group">
141
+ <span class="filter-label">Severity:</span>
142
+ <div class="filter-chips">
143
+ <label class="filter-chip" id="filter-critical">
144
+ <input type="checkbox" onchange="toggleReviewSeverityFilter('critical')">
145
+ <span>Critical</span>
146
+ </label>
147
+ <label class="filter-chip" id="filter-high">
148
+ <input type="checkbox" onchange="toggleReviewSeverityFilter('high')">
149
+ <span>High</span>
150
+ </label>
151
+ <label class="filter-chip" id="filter-medium">
152
+ <input type="checkbox" onchange="toggleReviewSeverityFilter('medium')">
153
+ <span>Medium</span>
154
+ </label>
155
+ <label class="filter-chip" id="filter-low">
156
+ <input type="checkbox" onchange="toggleReviewSeverityFilter('low')">
157
+ <span>Low</span>
158
+ </label>
159
+ </div>
160
+ </div>
161
+
162
+ <div class="filter-group">
163
+ <span class="filter-label">Sort:</span>
164
+ <select id="reviewSortSelect" class="sort-select" onchange="sortReviewFindings()">
165
+ <option value="severity">By Severity</option>
166
+ <option value="dimension">By Dimension</option>
167
+ <option value="file">By File</option>
168
+ </select>
169
+ <button class="btn-sort-order" id="reviewSortOrderBtn" onclick="toggleReviewSortOrder()">
170
+ <span id="reviewSortOrderIcon">↓</span>
171
+ </button>
172
+ </div>
173
+
174
+ <button class="btn-mini" onclick="resetReviewFilters()">Reset Filters</button>
175
+ </div>
176
+
177
+ <!-- Dimension Tabs -->
178
+ <div class="review-dimension-tabs">
179
+ <button class="dim-tab active" data-dimension="all" onclick="filterReviewByDimension('all')">
180
+ All (${findings.length})
181
+ </button>
182
+ ${dimensions.map(dim => `
183
+ <button class="dim-tab" data-dimension="${dim}" onclick="filterReviewByDimension('${dim}')">
184
+ ${escapeHtml(dim)} (${findings.filter(f => f.dimension === dim).length})
185
+ </button>
186
+ `).join('')}
187
+ </div>
188
+
189
+ <!-- Split Panel: List + Preview -->
190
+ <div class="review-split-panel">
191
+ <!-- Left: Findings List -->
192
+ <div class="review-findings-panel">
193
+ <div class="findings-list-header">
194
+ <span id="reviewFindingsCount">${findings.length} findings</span>
195
+ </div>
196
+ <div class="review-findings-list" id="reviewFindingsList">
197
+ ${renderReviewFindingsList(findings)}
198
+ </div>
199
+ </div>
200
+
201
+ <!-- Right: Preview Panel -->
202
+ <div class="review-preview-panel" id="reviewPreviewPanel">
203
+ <div class="preview-empty-state">
204
+ <div class="preview-icon">👆</div>
205
+ <div class="preview-text">Click on a finding to preview details</div>
206
+ </div>
207
+ </div>
208
+ </div>
209
+ </div>
210
+ `;
211
+ }
212
+
213
+ // ==========================================
214
+ // Findings List Rendering
215
+ // ==========================================
216
+
217
+ function renderReviewFindingsList(findings) {
218
+ if (findings.length === 0) {
219
+ return `
220
+ <div class="findings-empty">
221
+ <span class="empty-icon">✨</span>
222
+ <span>No findings match your filters</span>
223
+ </div>
224
+ `;
225
+ }
226
+
227
+ return findings.map(finding => `
228
+ <div class="review-finding-item ${finding.severity} ${reviewTabState.selectedFindings.has(finding.id) ? 'selected' : ''}"
229
+ data-finding-id="${finding.id}"
230
+ onclick="previewReviewFinding('${finding.id}')">
231
+ <input type="checkbox"
232
+ class="finding-checkbox"
233
+ ${reviewTabState.selectedFindings.has(finding.id) ? 'checked' : ''}
234
+ onclick="toggleReviewFindingSelection('${finding.id}', event)">
235
+ <div class="finding-content">
236
+ <div class="finding-top-row">
237
+ <span class="severity-badge ${finding.severity}">${finding.severity}</span>
238
+ <span class="dimension-badge">${escapeHtml(finding.dimension)}</span>
239
+ </div>
240
+ <div class="finding-title">${escapeHtml(finding.title)}</div>
241
+ ${finding.file ? `<div class="finding-file">📄 ${escapeHtml(finding.file)}${finding.line ? ':' + finding.line : ''}</div>` : ''}
242
+ </div>
243
+ </div>
244
+ `).join('');
245
+ }
246
+
247
+ // ==========================================
248
+ // Preview Panel Rendering
249
+ // ==========================================
250
+
251
+ function previewReviewFinding(findingId) {
252
+ const finding = reviewTabState.allFindings.find(f => f.id === findingId);
253
+ if (!finding) return;
254
+
255
+ reviewTabState.previewFinding = finding;
256
+
257
+ // Update active state in list
258
+ document.querySelectorAll('.review-finding-item').forEach(item => {
259
+ item.classList.toggle('previewing', item.dataset.findingId === findingId);
260
+ });
261
+
262
+ const previewPanel = document.getElementById('reviewPreviewPanel');
263
+ if (!previewPanel) return;
264
+
265
+ previewPanel.innerHTML = `
266
+ <div class="preview-content">
267
+ <div class="preview-header">
268
+ <div class="preview-badges">
269
+ <span class="severity-badge ${finding.severity}">${finding.severity}</span>
270
+ <span class="dimension-badge">${escapeHtml(finding.dimension)}</span>
271
+ ${finding.category ? `<span class="category-badge">${escapeHtml(finding.category)}</span>` : ''}
272
+ </div>
273
+ <button class="btn-select-finding ${reviewTabState.selectedFindings.has(finding.id) ? 'selected' : ''}"
274
+ onclick="toggleReviewFindingSelection('${finding.id}', event)">
275
+ ${reviewTabState.selectedFindings.has(finding.id) ? '✓ Selected' : '+ Select for Fix'}
276
+ </button>
277
+ </div>
278
+
279
+ <h3 class="preview-title">${escapeHtml(finding.title)}</h3>
280
+
281
+ ${finding.file ? `
282
+ <div class="preview-section">
283
+ <div class="preview-section-title">📄 Location</div>
284
+ <div class="preview-location">
285
+ <code>${escapeHtml(finding.file)}${finding.line ? ':' + finding.line : ''}</code>
286
+ </div>
287
+ </div>
288
+ ` : ''}
289
+
290
+ <div class="preview-section">
291
+ <div class="preview-section-title">📝 Description</div>
292
+ <div class="preview-description">${escapeHtml(finding.description)}</div>
293
+ </div>
294
+
295
+ ${finding.code_context ? `
296
+ <div class="preview-section">
297
+ <div class="preview-section-title">💻 Code Context</div>
298
+ <pre class="preview-code">${escapeHtml(finding.code_context)}</pre>
299
+ </div>
300
+ ` : ''}
301
+
302
+ ${finding.recommendations && finding.recommendations.length > 0 ? `
303
+ <div class="preview-section">
304
+ <div class="preview-section-title">✅ Recommendations</div>
305
+ <ul class="preview-recommendations">
306
+ ${finding.recommendations.map(r => `<li>${escapeHtml(r)}</li>`).join('')}
307
+ </ul>
308
+ </div>
309
+ ` : ''}
310
+
311
+ ${finding.root_cause ? `
312
+ <div class="preview-section">
313
+ <div class="preview-section-title">🔍 Root Cause</div>
314
+ <div class="preview-root-cause">${escapeHtml(finding.root_cause)}</div>
315
+ </div>
316
+ ` : ''}
317
+
318
+ ${finding.impact ? `
319
+ <div class="preview-section">
320
+ <div class="preview-section-title">⚠️ Impact</div>
321
+ <div class="preview-impact">${escapeHtml(finding.impact)}</div>
322
+ </div>
323
+ ` : ''}
324
+
325
+ ${finding.references && finding.references.length > 0 ? `
326
+ <div class="preview-section">
327
+ <div class="preview-section-title">🔗 References</div>
328
+ <ul class="preview-references">
329
+ ${finding.references.map(ref => {
330
+ const isUrl = ref.startsWith('http');
331
+ return `<li>${isUrl ? `<a href="${ref}" target="_blank">${ref}</a>` : ref}</li>`;
332
+ }).join('')}
333
+ </ul>
334
+ </div>
335
+ ` : ''}
336
+
337
+ ${finding.metadata && Object.keys(finding.metadata).length > 0 ? `
338
+ <div class="preview-section">
339
+ <div class="preview-section-title">ℹ️ Metadata</div>
340
+ <div class="preview-metadata">
341
+ ${Object.entries(finding.metadata).map(([key, value]) => `
342
+ <div class="metadata-item">
343
+ <span class="meta-key">${escapeHtml(key)}:</span>
344
+ <span class="meta-value">${escapeHtml(String(value))}</span>
345
+ </div>
346
+ `).join('')}
347
+ </div>
348
+ </div>
349
+ ` : ''}
350
+ </div>
351
+ `;
352
+ }
353
+
354
+ // ==========================================
355
+ // Selection Management
356
+ // ==========================================
357
+
358
+ function toggleReviewFindingSelection(findingId, event) {
359
+ if (event) {
360
+ event.stopPropagation();
361
+ }
362
+
363
+ if (reviewTabState.selectedFindings.has(findingId)) {
364
+ reviewTabState.selectedFindings.delete(findingId);
365
+ } else {
366
+ reviewTabState.selectedFindings.add(findingId);
367
+ }
368
+
369
+ updateReviewSelectionUI();
370
+
371
+ // Update preview panel button if this finding is being previewed
372
+ if (reviewTabState.previewFinding && reviewTabState.previewFinding.id === findingId) {
373
+ previewReviewFinding(findingId);
374
+ }
375
+ }
376
+
377
+ function selectAllReviewFindings() {
378
+ reviewTabState.allFindings.forEach(f => reviewTabState.selectedFindings.add(f.id));
379
+ updateReviewSelectionUI();
380
+ }
381
+
382
+ function selectVisibleReviewFindings() {
383
+ reviewTabState.filteredFindings.forEach(f => reviewTabState.selectedFindings.add(f.id));
384
+ updateReviewSelectionUI();
385
+ }
386
+
387
+ function selectReviewBySeverity(severity) {
388
+ reviewTabState.allFindings
389
+ .filter(f => f.severity === severity)
390
+ .forEach(f => reviewTabState.selectedFindings.add(f.id));
391
+ updateReviewSelectionUI();
392
+ }
393
+
394
+ function clearReviewSelection() {
395
+ reviewTabState.selectedFindings.clear();
396
+ updateReviewSelectionUI();
397
+ }
398
+
399
+ function updateReviewSelectionUI() {
400
+ // Update counter
401
+ const counter = document.getElementById('reviewSelectionCounter');
402
+ if (counter) {
403
+ counter.textContent = `${reviewTabState.selectedFindings.size} selected`;
404
+ }
405
+
406
+ // Update export button
407
+ const exportBtn = document.getElementById('exportFixBtn');
408
+ if (exportBtn) {
409
+ exportBtn.disabled = reviewTabState.selectedFindings.size === 0;
410
+ }
411
+
412
+ // Update checkbox states in list
413
+ document.querySelectorAll('.review-finding-item').forEach(item => {
414
+ const findingId = item.dataset.findingId;
415
+ const isSelected = reviewTabState.selectedFindings.has(findingId);
416
+ item.classList.toggle('selected', isSelected);
417
+ const checkbox = item.querySelector('.finding-checkbox');
418
+ if (checkbox) {
419
+ checkbox.checked = isSelected;
420
+ }
421
+ });
422
+ }
423
+
424
+ // ==========================================
425
+ // Filtering & Sorting
426
+ // ==========================================
427
+
428
+ function filterReviewByDimension(dimension) {
429
+ reviewTabState.currentFilters.dimension = dimension;
430
+
431
+ // Update tab active state
432
+ document.querySelectorAll('.dim-tab').forEach(tab => {
433
+ tab.classList.toggle('active', tab.dataset.dimension === dimension);
434
+ });
435
+
436
+ applyReviewFilters();
437
+ }
438
+
439
+ function filterReviewBySeverity(severity) {
440
+ // Toggle the severity filter
441
+ if (reviewTabState.currentFilters.severities.has(severity)) {
442
+ reviewTabState.currentFilters.severities.delete(severity);
443
+ } else {
444
+ reviewTabState.currentFilters.severities.add(severity);
445
+ }
446
+
447
+ // Update filter chip UI
448
+ const filterChip = document.getElementById(`filter-${severity}`);
449
+ if (filterChip) {
450
+ filterChip.classList.toggle('active', reviewTabState.currentFilters.severities.has(severity));
451
+ const checkbox = filterChip.querySelector('input[type="checkbox"]');
452
+ if (checkbox) {
453
+ checkbox.checked = reviewTabState.currentFilters.severities.has(severity);
454
+ }
455
+ }
456
+
457
+ applyReviewFilters();
458
+ }
459
+
460
+ function toggleReviewSeverityFilter(severity) {
461
+ filterReviewBySeverity(severity);
462
+ }
463
+
464
+ function onReviewSearch(searchText) {
465
+ reviewTabState.currentFilters.search = searchText.toLowerCase();
466
+ applyReviewFilters();
467
+ }
468
+
469
+ function applyReviewFilters() {
470
+ reviewTabState.filteredFindings = reviewTabState.allFindings.filter(finding => {
471
+ // Dimension filter
472
+ if (reviewTabState.currentFilters.dimension !== 'all') {
473
+ if (finding.dimension !== reviewTabState.currentFilters.dimension) {
474
+ return false;
475
+ }
476
+ }
477
+
478
+ // Severity filter (multi-select)
479
+ if (reviewTabState.currentFilters.severities.size > 0) {
480
+ if (!reviewTabState.currentFilters.severities.has(finding.severity)) {
481
+ return false;
482
+ }
483
+ }
484
+
485
+ // Search filter
486
+ if (reviewTabState.currentFilters.search) {
487
+ const searchText = `${finding.title} ${finding.description} ${finding.file} ${finding.category}`.toLowerCase();
488
+ if (!searchText.includes(reviewTabState.currentFilters.search)) {
489
+ return false;
490
+ }
491
+ }
492
+
493
+ return true;
494
+ });
495
+
496
+ sortReviewFindings();
497
+ }
498
+
499
+ function sortReviewFindings() {
500
+ const sortBy = document.getElementById('reviewSortSelect')?.value || 'severity';
501
+ reviewTabState.sortConfig.field = sortBy;
502
+
503
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
504
+
505
+ reviewTabState.filteredFindings.sort((a, b) => {
506
+ let comparison = 0;
507
+
508
+ if (sortBy === 'severity') {
509
+ comparison = severityOrder[a.severity] - severityOrder[b.severity];
510
+ } else if (sortBy === 'dimension') {
511
+ comparison = a.dimension.localeCompare(b.dimension);
512
+ } else if (sortBy === 'file') {
513
+ comparison = (a.file || '').localeCompare(b.file || '');
514
+ }
515
+
516
+ return reviewTabState.sortConfig.order === 'asc' ? comparison : -comparison;
517
+ });
518
+
519
+ renderFilteredReviewFindings();
520
+ }
521
+
522
+ function toggleReviewSortOrder() {
523
+ reviewTabState.sortConfig.order = reviewTabState.sortConfig.order === 'asc' ? 'desc' : 'asc';
524
+
525
+ const icon = document.getElementById('reviewSortOrderIcon');
526
+ if (icon) {
527
+ icon.textContent = reviewTabState.sortConfig.order === 'asc' ? '↑' : '↓';
528
+ }
529
+
530
+ sortReviewFindings();
531
+ }
532
+
533
+ function resetReviewFilters() {
534
+ // Reset state
535
+ reviewTabState.currentFilters.dimension = 'all';
536
+ reviewTabState.currentFilters.severities.clear();
537
+ reviewTabState.currentFilters.search = '';
538
+ reviewTabState.sortConfig.field = 'severity';
539
+ reviewTabState.sortConfig.order = 'desc';
540
+
541
+ // Reset UI
542
+ document.querySelectorAll('.dim-tab').forEach(tab => {
543
+ tab.classList.toggle('active', tab.dataset.dimension === 'all');
544
+ });
545
+
546
+ document.querySelectorAll('.filter-chip').forEach(chip => {
547
+ chip.classList.remove('active');
548
+ const checkbox = chip.querySelector('input[type="checkbox"]');
549
+ if (checkbox) checkbox.checked = false;
550
+ });
551
+
552
+ const searchInput = document.getElementById('reviewSearchInput');
553
+ if (searchInput) searchInput.value = '';
554
+
555
+ const sortSelect = document.getElementById('reviewSortSelect');
556
+ if (sortSelect) sortSelect.value = 'severity';
557
+
558
+ const sortIcon = document.getElementById('reviewSortOrderIcon');
559
+ if (sortIcon) sortIcon.textContent = '↓';
560
+
561
+ // Re-apply filters
562
+ reviewTabState.filteredFindings = [...reviewTabState.allFindings];
563
+ sortReviewFindings();
564
+ }
565
+
566
+ function renderFilteredReviewFindings() {
567
+ const listContainer = document.getElementById('reviewFindingsList');
568
+ const countEl = document.getElementById('reviewFindingsCount');
569
+
570
+ if (listContainer) {
571
+ listContainer.innerHTML = renderReviewFindingsList(reviewTabState.filteredFindings);
572
+ }
573
+
574
+ if (countEl) {
575
+ countEl.textContent = `${reviewTabState.filteredFindings.length} findings`;
576
+ }
577
+ }
578
+
579
+ // ==========================================
580
+ // Export Fix JSON
581
+ // ==========================================
582
+
583
+ function exportReviewFixJson() {
584
+ if (reviewTabState.selectedFindings.size === 0) {
585
+ showToast('Please select at least one finding to export', 'error');
586
+ return;
587
+ }
588
+
589
+ const selectedFindingsData = reviewTabState.allFindings.filter(f =>
590
+ reviewTabState.selectedFindings.has(f.id)
591
+ );
592
+
593
+ const session = sessionDataStore[currentSessionDetailKey];
594
+ const sessionId = session?.session_id || 'unknown';
595
+ const exportId = `fix-${Date.now()}`;
596
+
597
+ const exportData = {
598
+ export_id: exportId,
599
+ export_timestamp: new Date().toISOString(),
600
+ review_id: `review-${sessionId}`,
601
+ session_id: sessionId,
602
+ findings_count: selectedFindingsData.length,
603
+ findings: selectedFindingsData.map(f => ({
604
+ id: f.id,
605
+ title: f.title,
606
+ description: f.description,
607
+ severity: f.severity,
608
+ dimension: f.dimension,
609
+ category: f.category || 'uncategorized',
610
+ file: f.file,
611
+ line: f.line,
612
+ code_context: f.code_context || null,
613
+ recommendations: f.recommendations || [],
614
+ root_cause: f.root_cause || null
615
+ }))
616
+ };
617
+
618
+ // Convert to JSON and download
619
+ const jsonStr = JSON.stringify(exportData, null, 2);
620
+ const blob = new Blob([jsonStr], { type: 'application/json' });
621
+ const url = URL.createObjectURL(blob);
622
+ const a = document.createElement('a');
623
+ const filename = `fix-export-${exportId}.json`;
624
+ a.href = url;
625
+ a.download = filename;
626
+ document.body.appendChild(a);
627
+ a.click();
628
+ document.body.removeChild(a);
629
+ URL.revokeObjectURL(url);
630
+
631
+ // Show success notification
632
+ const severityCounts = {
633
+ critical: selectedFindingsData.filter(f => f.severity === 'critical').length,
634
+ high: selectedFindingsData.filter(f => f.severity === 'high').length,
635
+ medium: selectedFindingsData.filter(f => f.severity === 'medium').length,
636
+ low: selectedFindingsData.filter(f => f.severity === 'low').length
637
+ };
638
+
639
+ showToast(`Exported ${selectedFindingsData.length} findings for fixing (Critical: ${severityCounts.critical}, High: ${severityCounts.high}, Medium: ${severityCounts.medium}, Low: ${severityCounts.low})`, 'success');
640
+ }