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,692 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>UI Design Matrix Comparison - {{run_id}}</title>
7
+ <style>
8
+ :root {
9
+ --color-primary: #2563eb;
10
+ --color-bg: #f9fafb;
11
+ --color-surface: #ffffff;
12
+ --color-border: #e5e7eb;
13
+ --color-text: #1f2937;
14
+ --color-text-secondary: #6b7280;
15
+ }
16
+
17
+ * {
18
+ margin: 0;
19
+ padding: 0;
20
+ box-sizing: border-box;
21
+ }
22
+
23
+ body {
24
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
25
+ background: var(--color-bg);
26
+ color: var(--color-text);
27
+ line-height: 1.6;
28
+ }
29
+
30
+ .container {
31
+ max-width: 1600px;
32
+ margin: 0 auto;
33
+ padding: 2rem;
34
+ }
35
+
36
+ header {
37
+ background: var(--color-surface);
38
+ padding: 1.5rem 2rem;
39
+ border-radius: 0.5rem;
40
+ margin-bottom: 2rem;
41
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
42
+ }
43
+
44
+ h1 {
45
+ color: var(--color-primary);
46
+ font-size: 1.875rem;
47
+ margin-bottom: 0.5rem;
48
+ }
49
+
50
+ .meta {
51
+ color: var(--color-text-secondary);
52
+ font-size: 0.875rem;
53
+ }
54
+
55
+ .controls {
56
+ background: var(--color-surface);
57
+ padding: 1.5rem;
58
+ border-radius: 0.5rem;
59
+ margin-bottom: 2rem;
60
+ display: flex;
61
+ gap: 1.5rem;
62
+ align-items: center;
63
+ flex-wrap: wrap;
64
+ }
65
+
66
+ .control-group {
67
+ display: flex;
68
+ flex-direction: column;
69
+ gap: 0.5rem;
70
+ }
71
+
72
+ label {
73
+ font-size: 0.875rem;
74
+ font-weight: 500;
75
+ color: var(--color-text-secondary);
76
+ }
77
+
78
+ select, button {
79
+ padding: 0.5rem 1rem;
80
+ border: 1px solid var(--color-border);
81
+ border-radius: 0.375rem;
82
+ font-size: 0.875rem;
83
+ background: white;
84
+ cursor: pointer;
85
+ }
86
+
87
+ select:focus, button:focus {
88
+ outline: 2px solid var(--color-primary);
89
+ outline-offset: 2px;
90
+ }
91
+
92
+ button {
93
+ background: var(--color-primary);
94
+ color: white;
95
+ border: none;
96
+ font-weight: 500;
97
+ transition: background 0.2s;
98
+ }
99
+
100
+ button:hover {
101
+ background: #1d4ed8;
102
+ }
103
+
104
+ .matrix-container {
105
+ background: var(--color-surface);
106
+ border-radius: 0.5rem;
107
+ overflow: hidden;
108
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
109
+ }
110
+
111
+ .matrix-table {
112
+ width: 100%;
113
+ border-collapse: collapse;
114
+ }
115
+
116
+ .matrix-table th,
117
+ .matrix-table td {
118
+ border: 1px solid var(--color-border);
119
+ padding: 0.75rem;
120
+ text-align: center;
121
+ }
122
+
123
+ .matrix-table th {
124
+ background: #f3f4f6;
125
+ font-weight: 600;
126
+ color: var(--color-text);
127
+ }
128
+
129
+ .matrix-table thead th {
130
+ background: var(--color-primary);
131
+ color: white;
132
+ }
133
+
134
+ .matrix-table tbody th {
135
+ background: #f9fafb;
136
+ font-weight: 600;
137
+ }
138
+
139
+ .prototype-cell {
140
+ position: relative;
141
+ padding: 0;
142
+ height: 400px;
143
+ vertical-align: top;
144
+ }
145
+
146
+ .prototype-wrapper {
147
+ height: 100%;
148
+ display: flex;
149
+ flex-direction: column;
150
+ }
151
+
152
+ .prototype-header {
153
+ padding: 0.5rem;
154
+ background: #f9fafb;
155
+ border-bottom: 1px solid var(--color-border);
156
+ display: flex;
157
+ justify-content: space-between;
158
+ align-items: center;
159
+ flex-shrink: 0;
160
+ }
161
+
162
+ .prototype-title {
163
+ font-size: 0.75rem;
164
+ font-weight: 500;
165
+ color: var(--color-text-secondary);
166
+ }
167
+
168
+ .prototype-actions {
169
+ display: flex;
170
+ gap: 0.25rem;
171
+ }
172
+
173
+ .icon-btn {
174
+ width: 24px;
175
+ height: 24px;
176
+ padding: 0;
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ background: transparent;
181
+ border: none;
182
+ color: var(--color-text-secondary);
183
+ cursor: pointer;
184
+ border-radius: 0.25rem;
185
+ }
186
+
187
+ .icon-btn:hover {
188
+ background: #e5e7eb;
189
+ color: var(--color-text);
190
+ }
191
+
192
+ .icon-btn.selected {
193
+ background: var(--color-primary);
194
+ color: white;
195
+ }
196
+
197
+ .prototype-iframe-container {
198
+ flex: 1;
199
+ position: relative;
200
+ overflow: hidden;
201
+ }
202
+
203
+ .prototype-iframe {
204
+ width: 100%;
205
+ height: 100%;
206
+ border: none;
207
+ transform-origin: top left;
208
+ }
209
+
210
+ .zoom-info {
211
+ position: absolute;
212
+ bottom: 0.5rem;
213
+ right: 0.5rem;
214
+ background: rgba(0,0,0,0.7);
215
+ color: white;
216
+ padding: 0.25rem 0.5rem;
217
+ border-radius: 0.25rem;
218
+ font-size: 0.75rem;
219
+ pointer-events: none;
220
+ }
221
+
222
+ .tabs {
223
+ display: flex;
224
+ gap: 0.5rem;
225
+ margin-bottom: 1rem;
226
+ border-bottom: 2px solid var(--color-border);
227
+ }
228
+
229
+ .tab {
230
+ padding: 0.75rem 1.5rem;
231
+ background: transparent;
232
+ border: none;
233
+ border-bottom: 2px solid transparent;
234
+ cursor: pointer;
235
+ font-weight: 500;
236
+ color: var(--color-text-secondary);
237
+ margin-bottom: -2px;
238
+ }
239
+
240
+ .tab.active {
241
+ color: var(--color-primary);
242
+ border-bottom-color: var(--color-primary);
243
+ }
244
+
245
+ .tab-content {
246
+ display: none;
247
+ }
248
+
249
+ .tab-content.active {
250
+ display: block;
251
+ }
252
+
253
+ .fullscreen-overlay {
254
+ display: none;
255
+ position: fixed;
256
+ top: 0;
257
+ left: 0;
258
+ right: 0;
259
+ bottom: 0;
260
+ background: rgba(0,0,0,0.95);
261
+ z-index: 1000;
262
+ padding: 2rem;
263
+ }
264
+
265
+ .fullscreen-overlay.active {
266
+ display: flex;
267
+ flex-direction: column;
268
+ }
269
+
270
+ .fullscreen-header {
271
+ color: white;
272
+ margin-bottom: 1rem;
273
+ display: flex;
274
+ justify-content: space-between;
275
+ align-items: center;
276
+ }
277
+
278
+ .fullscreen-iframe {
279
+ flex: 1;
280
+ border: none;
281
+ background: white;
282
+ border-radius: 0.5rem;
283
+ }
284
+
285
+ .close-btn {
286
+ background: rgba(255,255,255,0.2);
287
+ color: white;
288
+ border: none;
289
+ padding: 0.5rem 1rem;
290
+ border-radius: 0.375rem;
291
+ cursor: pointer;
292
+ }
293
+
294
+ .close-btn:hover {
295
+ background: rgba(255,255,255,0.3);
296
+ }
297
+
298
+ .selection-summary {
299
+ background: #fef3c7;
300
+ border-left: 4px solid #f59e0b;
301
+ padding: 1rem;
302
+ margin-bottom: 2rem;
303
+ border-radius: 0.375rem;
304
+ }
305
+
306
+ .selection-summary h3 {
307
+ color: #92400e;
308
+ margin-bottom: 0.5rem;
309
+ font-size: 1rem;
310
+ }
311
+
312
+ .selection-list {
313
+ list-style: none;
314
+ color: #78350f;
315
+ font-size: 0.875rem;
316
+ }
317
+
318
+ .selection-list li {
319
+ padding: 0.25rem 0;
320
+ }
321
+
322
+ @media (max-width: 1200px) {
323
+ .prototype-cell {
324
+ height: 300px;
325
+ }
326
+ }
327
+ </style>
328
+ </head>
329
+ <body>
330
+ <div class="container">
331
+ <header>
332
+ <h1>🎨 UI Design Matrix Comparison</h1>
333
+ <div class="meta">
334
+ <strong>Run ID:</strong> {{run_id}} |
335
+ <strong>Session:</strong> {{session_id}} |
336
+ <strong>Generated:</strong> {{timestamp}}
337
+ </div>
338
+ </header>
339
+
340
+ <div class="controls">
341
+ <div class="control-group">
342
+ <label for="page-select">Page:</label>
343
+ <select id="page-select">
344
+ <!-- Populated by JavaScript -->
345
+ </select>
346
+ </div>
347
+
348
+ <div class="control-group">
349
+ <label for="zoom-level">Zoom:</label>
350
+ <select id="zoom-level">
351
+ <option value="0.25">25%</option>
352
+ <option value="0.5">50%</option>
353
+ <option value="0.75">75%</option>
354
+ <option value="1" selected>100%</option>
355
+ </select>
356
+ </div>
357
+
358
+ <div class="control-group">
359
+ <label>&nbsp;</label>
360
+ <button id="sync-scroll-toggle">🔗 Sync Scroll: ON</button>
361
+ </div>
362
+
363
+ <div class="control-group">
364
+ <label>&nbsp;</label>
365
+ <button id="export-selection">📥 Export Selection</button>
366
+ </div>
367
+ </div>
368
+
369
+ <div id="selection-summary" class="selection-summary" style="display:none">
370
+ <h3>Selected Prototypes (<span id="selection-count">0</span>)</h3>
371
+ <ul id="selection-list" class="selection-list"></ul>
372
+ </div>
373
+
374
+ <div class="tabs">
375
+ <button class="tab active" data-tab="matrix">Matrix View</button>
376
+ <button class="tab" data-tab="comparison">Side-by-Side</button>
377
+ <button class="tab" data-tab="runs">Compare Runs</button>
378
+ </div>
379
+
380
+ <div class="tab-content active" data-content="matrix">
381
+ <div class="matrix-container">
382
+ <table class="matrix-table">
383
+ <thead>
384
+ <tr>
385
+ <th>Style ↓ / Layout →</th>
386
+ <th>Layout 1</th>
387
+ <th>Layout 2</th>
388
+ <th>Layout 3</th>
389
+ </tr>
390
+ </thead>
391
+ <tbody id="matrix-body">
392
+ <!-- Populated by JavaScript -->
393
+ </tbody>
394
+ </table>
395
+ </div>
396
+ </div>
397
+
398
+ <div class="tab-content" data-content="comparison">
399
+ <p>Select two prototypes from the matrix to compare side-by-side.</p>
400
+ <div id="comparison-view"></div>
401
+ </div>
402
+
403
+ <div class="tab-content" data-content="runs">
404
+ <p>Compare the same prototype across different runs.</p>
405
+ <div id="runs-comparison"></div>
406
+ </div>
407
+ </div>
408
+
409
+ <div id="fullscreen-overlay" class="fullscreen-overlay">
410
+ <div class="fullscreen-header">
411
+ <h2 id="fullscreen-title"></h2>
412
+ <button class="close-btn" onclick="closeFullscreen()">✕ Close</button>
413
+ </div>
414
+ <iframe id="fullscreen-iframe" class="fullscreen-iframe"></iframe>
415
+ </div>
416
+
417
+ <script>
418
+ // Configuration - Replace with actual values during generation
419
+ const CONFIG = {
420
+ runId: "{{run_id}}",
421
+ sessionId: "{{session_id}}",
422
+ styleVariants: {{style_variants}}, // e.g., 3
423
+ layoutVariants: {{layout_variants}}, // e.g., 3
424
+ pages: {{pages_json}}, // e.g., ["dashboard", "auth"]
425
+ basePath: "." // Relative path to prototypes
426
+ };
427
+
428
+ // State
429
+ let state = {
430
+ currentPage: CONFIG.pages[0],
431
+ zoomLevel: 1,
432
+ syncScroll: true,
433
+ selected: new Set(),
434
+ fullscreenSrc: null
435
+ };
436
+
437
+ // Initialize
438
+ document.addEventListener('DOMContentLoaded', () => {
439
+ populatePageSelect();
440
+ renderMatrix();
441
+ setupEventListeners();
442
+ loadSelectionFromStorage();
443
+ });
444
+
445
+ function populatePageSelect() {
446
+ const select = document.getElementById('page-select');
447
+ CONFIG.pages.forEach(page => {
448
+ const option = document.createElement('option');
449
+ option.value = page;
450
+ option.textContent = capitalize(page);
451
+ select.appendChild(option);
452
+ });
453
+ }
454
+
455
+ function renderMatrix() {
456
+ const tbody = document.getElementById('matrix-body');
457
+ tbody.innerHTML = '';
458
+
459
+ for (let s = 1; s <= CONFIG.styleVariants; s++) {
460
+ const row = document.createElement('tr');
461
+
462
+ // Style header cell
463
+ const headerCell = document.createElement('th');
464
+ headerCell.textContent = `Style ${s}`;
465
+ row.appendChild(headerCell);
466
+
467
+ // Prototype cells for each layout
468
+ for (let l = 1; l <= CONFIG.layoutVariants; l++) {
469
+ const cell = document.createElement('td');
470
+ cell.className = 'prototype-cell';
471
+
472
+ const filename = `${state.currentPage}-style-${s}-layout-${l}.html`;
473
+ const id = `${state.currentPage}-s${s}-l${l}`;
474
+
475
+ cell.innerHTML = `
476
+ <div class="prototype-wrapper">
477
+ <div class="prototype-header">
478
+ <span class="prototype-title">S${s}L${l}</span>
479
+ <div class="prototype-actions">
480
+ <button class="icon-btn select-btn" data-id="${id}" title="Select">
481
+ ${state.selected.has(id) ? '★' : '☆'}
482
+ </button>
483
+ <button class="icon-btn" onclick="openFullscreen('${filename}', 'Style ${s} Layout ${l}')" title="Fullscreen">
484
+ â›¶
485
+ </button>
486
+ <button class="icon-btn" onclick="openInNewTab('${filename}')" title="Open in new tab">
487
+ ↗
488
+ </button>
489
+ </div>
490
+ </div>
491
+ <div class="prototype-iframe-container">
492
+ <iframe
493
+ class="prototype-iframe"
494
+ src="${filename}"
495
+ data-cell="s${s}-l${l}"
496
+ style="transform: scale(${state.zoomLevel});"
497
+ ></iframe>
498
+ <div class="zoom-info">${Math.round(state.zoomLevel * 100)}%</div>
499
+ </div>
500
+ </div>
501
+ `;
502
+
503
+ row.appendChild(cell);
504
+ }
505
+
506
+ tbody.appendChild(row);
507
+ }
508
+
509
+ // Re-attach selection event listeners
510
+ document.querySelectorAll('.select-btn').forEach(btn => {
511
+ btn.addEventListener('click', (e) => toggleSelection(e.target.dataset.id, e.target));
512
+ });
513
+
514
+ // Setup scroll sync
515
+ if (state.syncScroll) {
516
+ setupScrollSync();
517
+ }
518
+ }
519
+
520
+ function setupScrollSync() {
521
+ const iframes = document.querySelectorAll('.prototype-iframe');
522
+ let isScrolling = false;
523
+
524
+ iframes.forEach(iframe => {
525
+ iframe.addEventListener('load', () => {
526
+ const iframeWindow = iframe.contentWindow;
527
+
528
+ iframe.contentDocument.addEventListener('scroll', (e) => {
529
+ if (!state.syncScroll || isScrolling) return;
530
+
531
+ isScrolling = true;
532
+ const scrollTop = iframe.contentDocument.documentElement.scrollTop;
533
+ const scrollLeft = iframe.contentDocument.documentElement.scrollLeft;
534
+
535
+ iframes.forEach(otherIframe => {
536
+ if (otherIframe !== iframe && otherIframe.contentDocument) {
537
+ otherIframe.contentDocument.documentElement.scrollTop = scrollTop;
538
+ otherIframe.contentDocument.documentElement.scrollLeft = scrollLeft;
539
+ }
540
+ });
541
+
542
+ setTimeout(() => { isScrolling = false; }, 50);
543
+ });
544
+ });
545
+ });
546
+ }
547
+
548
+ function setupEventListeners() {
549
+ // Page selector
550
+ document.getElementById('page-select').addEventListener('change', (e) => {
551
+ state.currentPage = e.target.value;
552
+ renderMatrix();
553
+ });
554
+
555
+ // Zoom level
556
+ document.getElementById('zoom-level').addEventListener('change', (e) => {
557
+ state.zoomLevel = parseFloat(e.target.value);
558
+ renderMatrix();
559
+ });
560
+
561
+ // Sync scroll toggle
562
+ document.getElementById('sync-scroll-toggle').addEventListener('click', (e) => {
563
+ state.syncScroll = !state.syncScroll;
564
+ e.target.textContent = `🔗 Sync Scroll: ${state.syncScroll ? 'ON' : 'OFF'}`;
565
+ if (state.syncScroll) setupScrollSync();
566
+ });
567
+
568
+ // Export selection
569
+ document.getElementById('export-selection').addEventListener('click', exportSelection);
570
+
571
+ // Tab switching
572
+ document.querySelectorAll('.tab').forEach(tab => {
573
+ tab.addEventListener('click', (e) => {
574
+ const tabName = e.target.dataset.tab;
575
+ switchTab(tabName);
576
+ });
577
+ });
578
+ }
579
+
580
+ function toggleSelection(id, btn) {
581
+ if (state.selected.has(id)) {
582
+ state.selected.delete(id);
583
+ btn.textContent = '☆';
584
+ btn.classList.remove('selected');
585
+ } else {
586
+ state.selected.add(id);
587
+ btn.textContent = '★';
588
+ btn.classList.add('selected');
589
+ }
590
+
591
+ updateSelectionSummary();
592
+ saveSelectionToStorage();
593
+ }
594
+
595
+ function updateSelectionSummary() {
596
+ const summary = document.getElementById('selection-summary');
597
+ const count = document.getElementById('selection-count');
598
+ const list = document.getElementById('selection-list');
599
+
600
+ count.textContent = state.selected.size;
601
+
602
+ if (state.selected.size > 0) {
603
+ summary.style.display = 'block';
604
+ list.innerHTML = Array.from(state.selected)
605
+ .map(id => `<li>${id}</li>`)
606
+ .join('');
607
+ } else {
608
+ summary.style.display = 'none';
609
+ }
610
+ }
611
+
612
+ function saveSelectionToStorage() {
613
+ localStorage.setItem(`selection-${CONFIG.runId}`, JSON.stringify(Array.from(state.selected)));
614
+ }
615
+
616
+ function loadSelectionFromStorage() {
617
+ const stored = localStorage.getItem(`selection-${CONFIG.runId}`);
618
+ if (stored) {
619
+ state.selected = new Set(JSON.parse(stored));
620
+ updateSelectionSummary();
621
+ }
622
+ }
623
+
624
+ function exportSelection() {
625
+ const report = {
626
+ runId: CONFIG.runId,
627
+ sessionId: CONFIG.sessionId,
628
+ timestamp: new Date().toISOString(),
629
+ selections: Array.from(state.selected).map(id => ({
630
+ id,
631
+ file: `${id.replace(/-s(\d+)-l(\d+)/, '-style-$1-layout-$2')}.html`
632
+ }))
633
+ };
634
+
635
+ const blob = new Blob([JSON.stringify(report, null, 2)], { type: 'application/json' });
636
+ const url = URL.createObjectURL(blob);
637
+ const a = document.createElement('a');
638
+ a.href = url;
639
+ a.download = `selection-${CONFIG.runId}.json`;
640
+ a.click();
641
+ URL.revokeObjectURL(url);
642
+
643
+ alert(`Exported ${state.selected.size} selections to selection-${CONFIG.runId}.json`);
644
+ }
645
+
646
+ function openFullscreen(src, title) {
647
+ const overlay = document.getElementById('fullscreen-overlay');
648
+ const iframe = document.getElementById('fullscreen-iframe');
649
+ const titleEl = document.getElementById('fullscreen-title');
650
+
651
+ iframe.src = src;
652
+ titleEl.textContent = title;
653
+ overlay.classList.add('active');
654
+ state.fullscreenSrc = src;
655
+ }
656
+
657
+ function closeFullscreen() {
658
+ const overlay = document.getElementById('fullscreen-overlay');
659
+ const iframe = document.getElementById('fullscreen-iframe');
660
+
661
+ overlay.classList.remove('active');
662
+ iframe.src = '';
663
+ state.fullscreenSrc = null;
664
+ }
665
+
666
+ function openInNewTab(src) {
667
+ window.open(src, '_blank');
668
+ }
669
+
670
+ function switchTab(tabName) {
671
+ document.querySelectorAll('.tab').forEach(tab => {
672
+ tab.classList.toggle('active', tab.dataset.tab === tabName);
673
+ });
674
+
675
+ document.querySelectorAll('.tab-content').forEach(content => {
676
+ content.classList.toggle('active', content.dataset.content === tabName);
677
+ });
678
+ }
679
+
680
+ function capitalize(str) {
681
+ return str.charAt(0).toUpperCase() + str.slice(1);
682
+ }
683
+
684
+ // Close fullscreen on ESC key
685
+ document.addEventListener('keydown', (e) => {
686
+ if (e.key === 'Escape' && state.fullscreenSrc) {
687
+ closeFullscreen();
688
+ }
689
+ });
690
+ </script>
691
+ </body>
692
+ </html>