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