claude-code-workflow 6.1.4 → 6.2.2

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 (437) hide show
  1. package/.claude/CLAUDE.md +10 -0
  2. package/.claude/agents/action-planning-agent.md +857 -778
  3. package/.claude/agents/cli-execution-agent.md +266 -269
  4. package/.claude/agents/cli-explore-agent.md +2 -2
  5. package/.claude/agents/cli-lite-planning-agent.md +142 -92
  6. package/.claude/agents/cli-planning-agent.md +4 -4
  7. package/.claude/agents/code-developer.md +7 -6
  8. package/.claude/agents/conceptual-planning-agent.md +2 -2
  9. package/.claude/agents/context-search-agent.md +31 -32
  10. package/.claude/agents/doc-generator.md +4 -4
  11. package/.claude/agents/memory-bridge.md +93 -93
  12. package/.claude/agents/test-context-search-agent.md +8 -7
  13. package/.claude/agents/test-fix-agent.md +7 -6
  14. package/.claude/commands/clean.md +516 -0
  15. package/.claude/commands/memory/compact.md +383 -0
  16. package/.claude/commands/memory/docs-full-cli.md +471 -471
  17. package/.claude/commands/memory/docs-related-cli.md +386 -386
  18. package/.claude/commands/memory/docs.md +615 -615
  19. package/.claude/commands/memory/load.md +5 -5
  20. package/.claude/commands/memory/tech-research-rules.md +310 -0
  21. package/.claude/commands/memory/update-full.md +332 -332
  22. package/.claude/commands/memory/workflow-skill-memory.md +4 -4
  23. package/.claude/commands/task/create.md +151 -151
  24. package/.claude/commands/version.md +254 -254
  25. package/.claude/commands/workflow/brainstorm/api-designer.md +587 -585
  26. package/.claude/commands/workflow/brainstorm/artifacts.md +1 -0
  27. package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -443
  28. package/.claude/commands/workflow/brainstorm/data-architect.md +220 -220
  29. package/.claude/commands/workflow/brainstorm/product-manager.md +200 -200
  30. package/.claude/commands/workflow/brainstorm/product-owner.md +200 -200
  31. package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -200
  32. package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  33. package/.claude/commands/workflow/brainstorm/system-architect.md +389 -387
  34. package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -221
  35. package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -221
  36. package/.claude/commands/workflow/debug.md +321 -0
  37. package/.claude/commands/workflow/execute.md +13 -0
  38. package/.claude/commands/workflow/init.md +165 -164
  39. package/.claude/commands/workflow/lite-execute.md +119 -13
  40. package/.claude/commands/workflow/lite-fix.md +623 -621
  41. package/.claude/commands/workflow/lite-plan.md +610 -592
  42. package/.claude/commands/workflow/plan.md +5 -5
  43. package/.claude/commands/workflow/review-module-cycle.md +2 -0
  44. package/.claude/commands/workflow/review-session-cycle.md +2 -0
  45. package/.claude/commands/workflow/review.md +297 -291
  46. package/.claude/commands/workflow/session/complete.md +153 -500
  47. package/.claude/commands/workflow/session/list.md +95 -95
  48. package/.claude/commands/workflow/session/resume.md +60 -60
  49. package/.claude/commands/workflow/session/start.md +199 -199
  50. package/.claude/commands/workflow/tdd-plan.md +3 -3
  51. package/.claude/commands/workflow/tdd-verify.md +23 -9
  52. package/.claude/commands/workflow/test-cycle-execute.md +2 -0
  53. package/.claude/commands/workflow/test-fix-gen.md +699 -699
  54. package/.claude/commands/workflow/tools/conflict-resolution.md +104 -18
  55. package/.claude/commands/workflow/tools/context-gather.md +436 -434
  56. package/.claude/commands/workflow/tools/task-generate-agent.md +490 -291
  57. package/.claude/commands/workflow/tools/task-generate-tdd.md +18 -10
  58. package/.claude/commands/workflow/tools/test-concept-enhanced.md +2 -1
  59. package/.claude/commands/workflow/tools/test-context-gather.md +1 -0
  60. package/.claude/commands/workflow/tools/test-task-generate.md +1 -0
  61. package/.claude/commands/workflow/ui-design/import-from-code.md +9 -6
  62. package/.claude/skills/command-guide/SKILL.md +5 -5
  63. package/.claude/skills/command-guide/index/all-commands.json +1 -1
  64. package/.claude/skills/command-guide/index/by-category.json +1 -1
  65. package/.claude/skills/command-guide/index/by-use-case.json +1 -1
  66. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +857 -778
  67. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +266 -269
  68. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +2 -2
  69. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +142 -92
  70. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +4 -4
  71. package/.claude/skills/command-guide/reference/agents/code-developer.md +7 -6
  72. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +2 -2
  73. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +31 -32
  74. package/.claude/skills/command-guide/reference/agents/doc-generator.md +4 -4
  75. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
  76. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +8 -7
  77. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +7 -6
  78. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
  79. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
  80. package/.claude/skills/command-guide/reference/commands/memory/docs.md +17 -16
  81. package/.claude/skills/command-guide/reference/commands/memory/load.md +5 -5
  82. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +194 -357
  83. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
  84. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +4 -4
  85. package/.claude/skills/command-guide/reference/commands/task/create.md +151 -151
  86. package/.claude/skills/command-guide/reference/commands/version.md +254 -254
  87. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -585
  88. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +443 -443
  89. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -220
  90. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -200
  91. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -200
  92. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -200
  93. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  94. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -387
  95. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -221
  96. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -221
  97. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +25 -20
  98. package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -164
  99. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +748 -686
  100. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +664 -621
  101. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +645 -592
  102. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +5 -5
  103. package/.claude/skills/command-guide/reference/commands/workflow/review.md +25 -18
  104. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +547 -500
  105. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +45 -27
  106. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +35 -19
  107. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +90 -33
  108. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +3 -3
  109. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +23 -9
  110. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -699
  111. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +103 -17
  112. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
  113. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +487 -291
  114. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +17 -10
  115. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +1 -1
  116. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +6 -6
  117. package/.claude/workflows/chinese-response.md +38 -0
  118. package/.claude/workflows/cli-templates/prompts/rules/rule-api.txt +122 -0
  119. package/.claude/workflows/cli-templates/prompts/rules/rule-components.txt +122 -0
  120. package/.claude/workflows/cli-templates/prompts/rules/rule-config.txt +89 -0
  121. package/.claude/workflows/cli-templates/prompts/rules/rule-core.txt +60 -0
  122. package/.claude/workflows/cli-templates/prompts/rules/rule-patterns.txt +70 -0
  123. package/.claude/workflows/cli-templates/prompts/rules/rule-testing.txt +81 -0
  124. package/.claude/workflows/cli-templates/prompts/rules/tech-rules-agent-prompt.txt +89 -0
  125. package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -131
  126. package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +5 -9
  127. package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +5 -9
  128. package/.claude/workflows/cli-templates/protocols/analysis-protocol.md +112 -0
  129. package/.claude/workflows/cli-templates/protocols/write-protocol.md +201 -0
  130. package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +137 -0
  131. package/.claude/workflows/cli-templates/schemas/debug-log-json-schema.json +127 -0
  132. package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +25 -0
  133. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +25 -0
  134. package/.claude/workflows/cli-tools-usage.md +526 -0
  135. package/{CLAUDE.md → .claude/workflows/coding-philosophy.md} +24 -45
  136. package/.claude/workflows/context-tools.md +84 -0
  137. package/.claude/workflows/file-modification.md +64 -0
  138. package/.claude/workflows/tool-strategy.md +216 -79
  139. package/.claude/workflows/windows-platform.md +16 -0
  140. package/.claude/workflows/workflow-architecture.md +942 -942
  141. package/.codex/AGENTS.md +63 -330
  142. package/.codex/prompts/debug.md +318 -0
  143. package/.codex/prompts/execute.md +273 -0
  144. package/.codex/prompts/lite-execute.md +164 -0
  145. package/.codex/prompts/lite-plan.md +469 -0
  146. package/.codex/prompts.zip +0 -0
  147. package/.gemini/GEMINI.md +25 -164
  148. package/.qwen/QWEN.md +0 -139
  149. package/README.md +29 -9
  150. package/ccw/README.md +30 -6
  151. package/ccw/bin/ccw-mcp.js +7 -0
  152. package/ccw/bin/ccw.js +9 -9
  153. package/ccw/package.json +65 -47
  154. package/ccw/src/.workflow/.cli-history/history.db +0 -0
  155. package/ccw/src/.workflow/.cli-history/history.db-shm +0 -0
  156. package/ccw/src/.workflow/.cli-history/history.db-wal +0 -0
  157. package/ccw/src/cli.ts +244 -0
  158. package/ccw/src/commands/cli.ts +740 -0
  159. package/ccw/src/commands/core-memory.ts +770 -0
  160. package/ccw/src/commands/hook.ts +315 -0
  161. package/ccw/src/commands/install.ts +519 -0
  162. package/ccw/src/commands/{list.js → list.ts} +1 -1
  163. package/ccw/src/commands/memory.ts +1090 -0
  164. package/ccw/src/commands/{serve.js → serve.ts} +14 -5
  165. package/ccw/src/commands/session-path-resolver.ts +372 -0
  166. package/ccw/src/commands/session.ts +1141 -0
  167. package/ccw/src/commands/{stop.js → stop.ts} +16 -6
  168. package/ccw/src/commands/tool.ts +201 -0
  169. package/ccw/src/commands/{uninstall.js → uninstall.ts} +89 -40
  170. package/ccw/src/commands/{upgrade.js → upgrade.ts} +68 -23
  171. package/ccw/src/commands/{view.js → view.ts} +22 -8
  172. package/ccw/src/config/storage-paths.ts +670 -0
  173. package/ccw/src/core/cache-manager.ts +294 -0
  174. package/ccw/src/core/claude-freshness.ts +319 -0
  175. package/ccw/src/core/core-memory-store.ts +1528 -0
  176. package/ccw/src/core/{dashboard-generator-patch.js → dashboard-generator-patch.ts} +18 -0
  177. package/ccw/src/core/{dashboard-generator.js → dashboard-generator.ts} +69 -12
  178. package/ccw/src/core/data-aggregator.ts +584 -0
  179. package/ccw/src/core/history-importer.ts +625 -0
  180. package/ccw/src/core/{lite-scanner.js → lite-scanner-complete.ts} +162 -66
  181. package/ccw/src/core/lite-scanner.ts +469 -0
  182. package/ccw/src/core/{manifest.js → manifest.ts} +104 -34
  183. package/ccw/src/core/memory-embedder-bridge.ts +262 -0
  184. package/ccw/src/core/memory-store.ts +978 -0
  185. package/ccw/src/core/routes/ccw-routes.ts +96 -0
  186. package/ccw/src/core/routes/claude-routes.ts +1183 -0
  187. package/ccw/src/core/routes/cli-routes.ts +561 -0
  188. package/ccw/src/core/routes/codexlens-routes.ts +806 -0
  189. package/ccw/src/core/routes/core-memory-routes.ts +605 -0
  190. package/ccw/src/core/routes/files-routes.ts +428 -0
  191. package/ccw/src/core/routes/graph-routes.md +164 -0
  192. package/ccw/src/core/routes/graph-routes.ts +626 -0
  193. package/ccw/src/core/routes/help-routes.ts +308 -0
  194. package/ccw/src/core/routes/hooks-routes.ts +405 -0
  195. package/ccw/src/core/routes/mcp-routes.ts +1271 -0
  196. package/ccw/src/core/routes/mcp-routes.ts.backup +550 -0
  197. package/ccw/src/core/routes/mcp-templates-db.ts +268 -0
  198. package/ccw/src/core/routes/memory-routes.ts +1206 -0
  199. package/ccw/src/core/routes/rules-routes.ts +526 -0
  200. package/ccw/src/core/routes/session-routes.ts +467 -0
  201. package/ccw/src/core/routes/skills-routes.ts +599 -0
  202. package/ccw/src/core/routes/status-routes.ts +57 -0
  203. package/ccw/src/core/routes/system-routes.ts +427 -0
  204. package/ccw/src/core/server.ts +431 -0
  205. package/ccw/src/core/session-clustering-service.ts +1258 -0
  206. package/ccw/src/core/session-scanner.ts +283 -0
  207. package/ccw/src/core/websocket.ts +190 -0
  208. package/ccw/src/{index.js → index.ts} +1 -0
  209. package/ccw/src/mcp-server/index.ts +186 -0
  210. package/ccw/src/templates/assets/css/github-dark.min.css +10 -0
  211. package/ccw/src/templates/assets/css/github.min.css +10 -0
  212. package/ccw/src/templates/assets/js/cytoscape.min.js +32 -0
  213. package/ccw/src/templates/assets/js/d3.min.js +2 -0
  214. package/ccw/src/templates/assets/js/highlight.min.js +1244 -0
  215. package/ccw/src/templates/assets/js/lucide.min.js +12 -0
  216. package/ccw/src/templates/assets/js/marked.min.js +69 -0
  217. package/ccw/src/templates/assets/js/tailwind.js +83 -0
  218. package/ccw/src/templates/dashboard-css/01-base.css +11 -0
  219. package/ccw/src/templates/dashboard-css/02-session.css +22 -0
  220. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +10 -0
  221. package/ccw/src/templates/dashboard-css/06-cards.css +10 -4
  222. package/ccw/src/templates/dashboard-css/07-managers.css +1178 -7
  223. package/ccw/src/templates/dashboard-css/09-explorer.css +23 -12
  224. package/ccw/src/templates/dashboard-css/10-cli-status.css +337 -0
  225. package/ccw/src/templates/dashboard-css/11-cli-history.css +271 -0
  226. package/ccw/src/templates/dashboard-css/12-cli-legacy.css +796 -0
  227. package/ccw/src/templates/dashboard-css/13-cli-ccw.css +199 -0
  228. package/ccw/src/templates/dashboard-css/14-cli-modals.css +258 -0
  229. package/ccw/src/templates/dashboard-css/15-cli-endpoints.css +305 -0
  230. package/ccw/src/templates/dashboard-css/16-cli-session.css +241 -0
  231. package/ccw/src/templates/dashboard-css/17-cli-conversation.css +283 -0
  232. package/ccw/src/templates/dashboard-css/18-cli-settings.css +160 -0
  233. package/ccw/src/templates/dashboard-css/19-cli-native-session.css +496 -0
  234. package/ccw/src/templates/dashboard-css/20-cli-taskqueue.css +188 -0
  235. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +310 -0
  236. package/ccw/src/templates/dashboard-css/22-cli-semantic.css +240 -0
  237. package/ccw/src/templates/dashboard-css/23-memory.css +2390 -0
  238. package/ccw/src/templates/dashboard-css/24-prompt-history.css +1089 -0
  239. package/ccw/src/templates/dashboard-css/25-skills-rules.css +326 -0
  240. package/ccw/src/templates/dashboard-css/26-claude-manager.css +908 -0
  241. package/ccw/src/templates/dashboard-css/27-graph-explorer.css +1678 -0
  242. package/ccw/src/templates/dashboard-css/28-mcp-manager.css +748 -0
  243. package/ccw/src/templates/dashboard-css/29-help.css +264 -0
  244. package/ccw/src/templates/dashboard-css/30-core-memory.css +1700 -0
  245. package/ccw/src/templates/dashboard-js/api.js +162 -142
  246. package/ccw/src/templates/dashboard-js/components/carousel.js +4 -4
  247. package/ccw/src/templates/dashboard-js/components/cli-history.js +876 -0
  248. package/ccw/src/templates/dashboard-js/components/cli-status.js +978 -0
  249. package/ccw/src/templates/dashboard-js/components/global-notifications.js +508 -219
  250. package/ccw/src/templates/dashboard-js/components/hook-manager.js +1277 -282
  251. package/ccw/src/templates/dashboard-js/components/index-manager.js +302 -0
  252. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +718 -27
  253. package/ccw/src/templates/dashboard-js/components/modals.js +66 -0
  254. package/ccw/src/templates/dashboard-js/components/navigation.js +80 -12
  255. package/ccw/src/templates/dashboard-js/components/notifications.js +758 -194
  256. package/ccw/src/templates/dashboard-js/components/storage-manager.js +478 -0
  257. package/ccw/src/templates/dashboard-js/components/tabs-other.js +157 -6
  258. package/ccw/src/templates/dashboard-js/components/task-queue-sidebar.js +716 -0
  259. package/ccw/src/templates/dashboard-js/help-i18n.js +272 -0
  260. package/ccw/src/templates/dashboard-js/i18n.js +2807 -0
  261. package/ccw/src/templates/dashboard-js/main.js +15 -0
  262. package/ccw/src/templates/dashboard-js/state.js +243 -42
  263. package/ccw/src/templates/dashboard-js/utils.js +47 -1
  264. package/ccw/src/templates/dashboard-js/views/claude-manager.js +912 -0
  265. package/ccw/src/templates/dashboard-js/views/cli-manager.js +2272 -0
  266. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +964 -0
  267. package/ccw/src/templates/dashboard-js/views/core-memory-clusters.js +503 -0
  268. package/ccw/src/templates/dashboard-js/views/core-memory.js +782 -0
  269. package/ccw/src/templates/dashboard-js/views/explorer.js +888 -852
  270. package/ccw/src/templates/dashboard-js/views/graph-explorer.js +1157 -0
  271. package/ccw/src/templates/dashboard-js/views/help.js +856 -0
  272. package/ccw/src/templates/dashboard-js/views/history.js +337 -0
  273. package/ccw/src/templates/dashboard-js/views/home.js +61 -15
  274. package/ccw/src/templates/dashboard-js/views/hook-manager.js +311 -43
  275. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +204 -28
  276. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +2187 -411
  277. package/ccw/src/templates/dashboard-js/views/mcp-manager.js.backup +1729 -0
  278. package/ccw/src/templates/dashboard-js/views/mcp-manager.js.new +928 -0
  279. package/ccw/src/templates/dashboard-js/views/memory.js +1221 -0
  280. package/ccw/src/templates/dashboard-js/views/prompt-history.js +713 -0
  281. package/ccw/src/templates/dashboard-js/views/rules-manager.js +828 -0
  282. package/ccw/src/templates/dashboard-js/views/session-detail.js +54 -53
  283. package/ccw/src/templates/dashboard-js/views/skills-manager.js +819 -0
  284. package/ccw/src/templates/dashboard.html +185 -85
  285. package/ccw/src/templates/hooks-config-example.json +60 -0
  286. package/ccw/src/tools/classify-folders.ts +245 -0
  287. package/ccw/src/tools/cli-config-manager.ts +268 -0
  288. package/ccw/src/tools/cli-executor.ts +2014 -0
  289. package/ccw/src/tools/cli-history-store.ts +1195 -0
  290. package/ccw/src/tools/codex-lens.ts +1141 -0
  291. package/ccw/src/tools/{convert-tokens-to-css.js → convert-tokens-to-css.ts} +73 -23
  292. package/ccw/src/tools/core-memory.ts +444 -0
  293. package/ccw/src/tools/detect-changed-modules.ts +325 -0
  294. package/ccw/src/tools/{discover-design-files.js → discover-design-files.ts} +74 -24
  295. package/ccw/src/tools/edit-file.ts +568 -0
  296. package/ccw/src/tools/{generate-module-docs.js → generate-module-docs.ts} +207 -185
  297. package/ccw/src/tools/{get-modules-by-depth.js → get-modules-by-depth.ts} +120 -79
  298. package/ccw/src/tools/index.ts +370 -0
  299. package/ccw/src/tools/native-session-discovery.ts +795 -0
  300. package/ccw/src/tools/notifier.ts +129 -0
  301. package/ccw/src/tools/read-file.ts +410 -0
  302. package/ccw/src/tools/resume-strategy.ts +345 -0
  303. package/ccw/src/tools/session-content-parser.ts +619 -0
  304. package/ccw/src/tools/session-manager.ts +1026 -0
  305. package/ccw/src/tools/smart-context.ts +228 -0
  306. package/ccw/src/tools/smart-search.ts +2065 -0
  307. package/ccw/src/tools/smart-search.ts.backup +1233 -0
  308. package/ccw/src/tools/storage-manager.ts +455 -0
  309. package/ccw/src/tools/write-file.ts +222 -0
  310. package/ccw/src/types/config.ts +11 -0
  311. package/ccw/src/types/index.ts +3 -0
  312. package/ccw/src/types/session.ts +25 -0
  313. package/ccw/src/types/tool.ts +41 -0
  314. package/ccw/src/utils/{browser-launcher.js → browser-launcher.ts} +10 -8
  315. package/ccw/src/utils/file-utils.ts +48 -0
  316. package/ccw/src/utils/{path-resolver.js → path-resolver.ts} +114 -78
  317. package/ccw/src/utils/path-validator.ts +153 -0
  318. package/ccw/src/utils/{ui.js → ui.ts} +32 -25
  319. package/codex-lens/pyproject.toml +48 -0
  320. package/codex-lens/src/codexlens/.workflow/.cli-history/history.db +0 -0
  321. package/codex-lens/src/codexlens/__init__.py +28 -0
  322. package/codex-lens/src/codexlens/__main__.py +14 -0
  323. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-313.pyc +0 -0
  324. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-313.pyc +0 -0
  325. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  326. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  327. package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
  328. package/codex-lens/src/codexlens/cli/__init__.py +27 -0
  329. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  330. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  331. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  332. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  333. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-313.pyc +0 -0
  334. package/codex-lens/src/codexlens/cli/commands.py +1931 -0
  335. package/codex-lens/src/codexlens/cli/embedding_manager.py +620 -0
  336. package/codex-lens/src/codexlens/cli/model_manager.py +289 -0
  337. package/codex-lens/src/codexlens/cli/output.py +124 -0
  338. package/codex-lens/src/codexlens/config.py +201 -0
  339. package/codex-lens/src/codexlens/entities.py +121 -0
  340. package/codex-lens/src/codexlens/errors.py +55 -0
  341. package/codex-lens/src/codexlens/indexing/README.md +77 -0
  342. package/codex-lens/src/codexlens/indexing/__init__.py +4 -0
  343. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  344. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  345. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +243 -0
  346. package/codex-lens/src/codexlens/parsers/__init__.py +8 -0
  347. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
  348. package/codex-lens/src/codexlens/parsers/__pycache__/encoding.cpython-313.pyc +0 -0
  349. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  350. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-313.pyc +0 -0
  351. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  352. package/codex-lens/src/codexlens/parsers/encoding.py +202 -0
  353. package/codex-lens/src/codexlens/parsers/factory.py +256 -0
  354. package/codex-lens/src/codexlens/parsers/tokenizer.py +98 -0
  355. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +335 -0
  356. package/codex-lens/src/codexlens/search/__init__.py +15 -0
  357. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
  358. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  359. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  360. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  361. package/codex-lens/src/codexlens/search/__pycache__/query_parser.cpython-313.pyc +0 -0
  362. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  363. package/codex-lens/src/codexlens/search/chain_search.py +647 -0
  364. package/codex-lens/src/codexlens/search/enrichment.py +150 -0
  365. package/codex-lens/src/codexlens/search/hybrid_search.py +313 -0
  366. package/codex-lens/src/codexlens/search/query_parser.py +242 -0
  367. package/codex-lens/src/codexlens/search/ranking.py +274 -0
  368. package/codex-lens/src/codexlens/semantic/__init__.py +39 -0
  369. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
  370. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  371. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  372. package/codex-lens/src/codexlens/semantic/__pycache__/code_extractor.cpython-313.pyc +0 -0
  373. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
  374. package/codex-lens/src/codexlens/semantic/__pycache__/graph_analyzer.cpython-313.pyc +0 -0
  375. package/codex-lens/src/codexlens/semantic/__pycache__/llm_enhancer.cpython-313.pyc +0 -0
  376. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  377. package/codex-lens/src/codexlens/semantic/ann_index.py +414 -0
  378. package/codex-lens/src/codexlens/semantic/chunker.py +448 -0
  379. package/codex-lens/src/codexlens/semantic/code_extractor.py +274 -0
  380. package/codex-lens/src/codexlens/semantic/embedder.py +185 -0
  381. package/codex-lens/src/codexlens/semantic/vector_store.py +955 -0
  382. package/codex-lens/src/codexlens/storage/__init__.py +29 -0
  383. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  384. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  385. package/codex-lens/src/codexlens/storage/__pycache__/file_cache.cpython-313.pyc +0 -0
  386. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  387. package/codex-lens/src/codexlens/storage/__pycache__/migration_manager.cpython-313.pyc +0 -0
  388. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-313.pyc +0 -0
  389. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-313.pyc +0 -0
  390. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  391. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-313.pyc +0 -0
  392. package/codex-lens/src/codexlens/storage/dir_index.py +1850 -0
  393. package/codex-lens/src/codexlens/storage/file_cache.py +32 -0
  394. package/codex-lens/src/codexlens/storage/index_tree.py +776 -0
  395. package/codex-lens/src/codexlens/storage/migration_manager.py +154 -0
  396. package/codex-lens/src/codexlens/storage/migrations/__init__.py +1 -0
  397. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
  398. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_001_normalize_keywords.cpython-313.pyc +0 -0
  399. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_002_add_token_metadata.cpython-313.pyc +0 -0
  400. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_003_code_relationships.cpython-313.pyc +0 -0
  401. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_004_dual_fts.cpython-313.pyc +0 -0
  402. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_005_cleanup_unused_fields.cpython-313.pyc +0 -0
  403. package/codex-lens/src/codexlens/storage/migrations/migration_001_normalize_keywords.py +123 -0
  404. package/codex-lens/src/codexlens/storage/migrations/migration_002_add_token_metadata.py +48 -0
  405. package/codex-lens/src/codexlens/storage/migrations/migration_004_dual_fts.py +232 -0
  406. package/codex-lens/src/codexlens/storage/migrations/migration_005_cleanup_unused_fields.py +196 -0
  407. package/codex-lens/src/codexlens/storage/path_mapper.py +274 -0
  408. package/codex-lens/src/codexlens/storage/registry.py +670 -0
  409. package/codex-lens/src/codexlens/storage/sqlite_store.py +576 -0
  410. package/codex-lens/src/codexlens/storage/sqlite_utils.py +64 -0
  411. package/package.json +4 -1
  412. package/.claude/commands/memory/tech-research.md +0 -477
  413. package/.claude/scripts/classify-folders.sh +0 -39
  414. package/.claude/scripts/convert_tokens_to_css.sh +0 -229
  415. package/.claude/scripts/detect_changed_modules.sh +0 -161
  416. package/.claude/scripts/discover-design-files.sh +0 -87
  417. package/.claude/scripts/extract-animations.js +0 -243
  418. package/.claude/scripts/extract-computed-styles.js +0 -118
  419. package/.claude/scripts/extract-layout-structure.js +0 -411
  420. package/.claude/scripts/generate_module_docs.sh +0 -717
  421. package/.claude/scripts/get_modules_by_depth.sh +0 -170
  422. package/.claude/scripts/ui-generate-preview.sh +0 -395
  423. package/.claude/scripts/ui-instantiate-prototypes.sh +0 -815
  424. package/.claude/scripts/update_module_claude.sh +0 -337
  425. package/.claude/workflows/context-search-strategy.md +0 -77
  426. package/.claude/workflows/intelligent-tools-strategy.md +0 -662
  427. package/ccw/src/cli.js +0 -119
  428. package/ccw/src/commands/install.js +0 -324
  429. package/ccw/src/commands/tool.js +0 -138
  430. package/ccw/src/core/data-aggregator.js +0 -409
  431. package/ccw/src/core/server.js +0 -2063
  432. package/ccw/src/core/session-scanner.js +0 -235
  433. package/ccw/src/tools/classify-folders.js +0 -204
  434. package/ccw/src/tools/detect-changed-modules.js +0 -288
  435. package/ccw/src/tools/edit-file.js +0 -266
  436. package/ccw/src/tools/index.js +0 -176
  437. package/ccw/src/utils/file-utils.js +0 -48
@@ -0,0 +1,337 @@
1
+ // CLI History View
2
+ // Standalone view for CLI execution history with batch delete support
3
+
4
+ // ========== Multi-Select State ==========
5
+ var selectedExecutions = new Set();
6
+ var isMultiSelectMode = false;
7
+
8
+ // ========== Rendering ==========
9
+ async function renderCliHistoryView() {
10
+ var container = document.getElementById('mainContent');
11
+ if (!container) return;
12
+
13
+ // Hide stats grid and search for History view
14
+ var statsGrid = document.getElementById('statsGrid');
15
+ var searchInput = document.getElementById('searchInput');
16
+ if (statsGrid) statsGrid.style.display = 'none';
17
+ if (searchInput) searchInput.parentElement.style.display = 'none';
18
+
19
+ // Load history data
20
+ await loadCliHistory();
21
+
22
+ // Filter by search query
23
+ var filteredHistory = cliHistorySearch
24
+ ? cliExecutionHistory.filter(function(exec) {
25
+ return exec.prompt_preview.toLowerCase().includes(cliHistorySearch.toLowerCase()) ||
26
+ exec.tool.toLowerCase().includes(cliHistorySearch.toLowerCase());
27
+ })
28
+ : cliExecutionHistory;
29
+
30
+ var historyHtml = '';
31
+
32
+ if (cliExecutionHistory.length === 0) {
33
+ historyHtml = '<div class="history-empty-state">' +
34
+ '<i data-lucide="terminal" class="w-12 h-12"></i>' +
35
+ '<h3>No executions yet</h3>' +
36
+ '<p>CLI execution history will appear here</p>' +
37
+ '</div>';
38
+ } else if (filteredHistory.length === 0) {
39
+ historyHtml = '<div class="history-empty-state">' +
40
+ '<i data-lucide="search-x" class="w-10 h-10"></i>' +
41
+ '<h3>No matching results</h3>' +
42
+ '<p>Try adjusting your search or filter</p>' +
43
+ '</div>';
44
+ } else {
45
+ historyHtml = '<div class="history-list">';
46
+ for (var i = 0; i < filteredHistory.length; i++) {
47
+ var exec = filteredHistory[i];
48
+ var statusIcon = exec.status === 'success' ? 'check-circle' :
49
+ exec.status === 'timeout' ? 'clock' : 'x-circle';
50
+ var statusClass = exec.status === 'success' ? 'success' :
51
+ exec.status === 'timeout' ? 'warning' : 'error';
52
+ var duration = formatDuration(exec.duration_ms);
53
+ var timeAgo = getTimeAgo(new Date(exec.timestamp));
54
+ var isSelected = selectedExecutions.has(exec.id);
55
+
56
+ // Turn count badge for multi-turn conversations
57
+ var turnBadge = exec.turn_count && exec.turn_count > 1
58
+ ? '<span class="history-turn-badge"><i data-lucide="messages-square" class="w-3 h-3"></i> ' + exec.turn_count + '</span>'
59
+ : '';
60
+
61
+ var sourceDirHtml = exec.sourceDir && exec.sourceDir !== '.'
62
+ ? '<span class="history-source-dir"><i data-lucide="folder" class="w-3 h-3"></i> ' + escapeHtml(exec.sourceDir) + '</span>'
63
+ : '';
64
+
65
+ // Multi-select checkbox
66
+ var checkboxHtml = isMultiSelectMode
67
+ ? '<div class="history-checkbox-wrapper" onclick="event.stopPropagation(); toggleExecutionSelection(\'' + exec.id + '\')">' +
68
+ '<input type="checkbox" class="history-checkbox" ' + (isSelected ? 'checked' : '') + ' tabindex="-1">' +
69
+ '</div>'
70
+ : '';
71
+
72
+ historyHtml += '<div class="history-item' + (isSelected ? ' history-item-selected' : '') + '" ' +
73
+ 'onclick="' + (isMultiSelectMode ? 'toggleExecutionSelection(\'' + exec.id + '\')' : 'showExecutionDetail(\'' + exec.id + (exec.sourceDir ? '\',\'' + escapeHtml(exec.sourceDir) : '') + '\')') + '">' +
74
+ checkboxHtml +
75
+ '<div class="history-item-main">' +
76
+ '<div class="history-item-header">' +
77
+ '<span class="history-tool-tag tool-' + exec.tool + '">' + exec.tool + '</span>' +
78
+ '<span class="history-mode-tag">' + (exec.mode || 'analysis') + '</span>' +
79
+ turnBadge +
80
+ sourceDirHtml +
81
+ '<span class="history-status ' + statusClass + '">' +
82
+ '<i data-lucide="' + statusIcon + '" class="w-3.5 h-3.5"></i>' +
83
+ exec.status +
84
+ '</span>' +
85
+ '</div>' +
86
+ '<div class="history-item-prompt">' + escapeHtml(exec.prompt_preview) + '</div>' +
87
+ '<div class="history-item-meta">' +
88
+ '<span class="history-time"><i data-lucide="clock" class="w-3 h-3"></i> ' + timeAgo + '</span>' +
89
+ '<span class="history-duration"><i data-lucide="timer" class="w-3 h-3"></i> ' + duration + '</span>' +
90
+ '<span class="history-id"><i data-lucide="hash" class="w-3 h-3"></i> ' + exec.id.split('-')[0] + '</span>' +
91
+ '</div>' +
92
+ '</div>' +
93
+ '<div class="history-item-actions">' +
94
+ '<button class="btn-icon" onclick="event.stopPropagation(); showExecutionDetail(\'' + exec.id + '\')" title="View Details">' +
95
+ '<i data-lucide="eye" class="w-4 h-4"></i>' +
96
+ '</button>' +
97
+ '<button class="btn-icon btn-danger" onclick="event.stopPropagation(); confirmDeleteExecution(\'' + exec.id + (exec.sourceDir ? '\',\'' + escapeHtml(exec.sourceDir) : '') + '\')" title="Delete">' +
98
+ '<i data-lucide="trash-2" class="w-4 h-4"></i>' +
99
+ '</button>' +
100
+ '</div>' +
101
+ '</div>';
102
+ }
103
+ historyHtml += '</div>';
104
+ }
105
+
106
+ // Build batch actions bar
107
+ var batchActionsHtml = '';
108
+ if (isMultiSelectMode) {
109
+ batchActionsHtml = '<div class="history-batch-actions">' +
110
+ '<span class="batch-select-count">' + selectedExecutions.size + ' selected</span>' +
111
+ '<button class="btn btn-sm btn-outline" onclick="selectAllExecutions()">' +
112
+ '<i data-lucide="check-square" class="w-3.5 h-3.5"></i> Select All' +
113
+ '</button>' +
114
+ '<button class="btn btn-sm btn-outline" onclick="clearExecutionSelection()">' +
115
+ '<i data-lucide="square" class="w-3.5 h-3.5"></i> Clear' +
116
+ '</button>' +
117
+ '<button class="btn btn-sm btn-danger" onclick="confirmBatchDelete()" ' + (selectedExecutions.size === 0 ? 'disabled' : '') + '>' +
118
+ '<i data-lucide="trash-2" class="w-3.5 h-3.5"></i> Delete Selected' +
119
+ '</button>' +
120
+ '<button class="btn btn-sm btn-outline" onclick="exitMultiSelectMode()">' +
121
+ '<i data-lucide="x" class="w-3.5 h-3.5"></i> Cancel' +
122
+ '</button>' +
123
+ '</div>';
124
+ }
125
+
126
+ container.innerHTML = '<div class="history-view">' +
127
+ '<div class="history-header">' +
128
+ '<div class="history-header-left">' +
129
+ '<span class="history-count">' + cliExecutionHistory.length + ' execution' + (cliExecutionHistory.length !== 1 ? 's' : '') + '</span>' +
130
+ '</div>' +
131
+ '<div class="history-header-right">' +
132
+ '<div class="history-search-wrapper">' +
133
+ '<i data-lucide="search" class="w-4 h-4"></i>' +
134
+ '<input type="text" class="history-search-input" placeholder="Search executions..." ' +
135
+ 'value="' + escapeHtml(cliHistorySearch) + '" ' +
136
+ 'onkeyup="searchCliHistoryView(this.value)" oninput="searchCliHistoryView(this.value)">' +
137
+ '</div>' +
138
+ '<select class="history-filter-select" onchange="filterCliHistoryView(this.value)">' +
139
+ '<option value=""' + (cliHistoryFilter === null ? ' selected' : '') + '>All Tools</option>' +
140
+ '<option value="gemini"' + (cliHistoryFilter === 'gemini' ? ' selected' : '') + '>Gemini</option>' +
141
+ '<option value="qwen"' + (cliHistoryFilter === 'qwen' ? ' selected' : '') + '>Qwen</option>' +
142
+ '<option value="codex"' + (cliHistoryFilter === 'codex' ? ' selected' : '') + '>Codex</option>' +
143
+ '</select>' +
144
+ // Batch delete dropdown
145
+ '<div class="history-delete-dropdown">' +
146
+ '<button class="btn-icon" onclick="toggleDeleteDropdown(event)" title="Delete Options">' +
147
+ '<i data-lucide="trash" class="w-4 h-4"></i>' +
148
+ '</button>' +
149
+ '<div class="delete-dropdown-menu" id="deleteDropdownMenu">' +
150
+ '<button onclick="enterMultiSelectMode()">' +
151
+ '<i data-lucide="check-square" class="w-3.5 h-3.5"></i> Multi-select Delete' +
152
+ '</button>' +
153
+ '<button onclick="confirmDeleteByTool(\'gemini\')">' +
154
+ '<i data-lucide="trash-2" class="w-3.5 h-3.5"></i> Delete All Gemini' +
155
+ '</button>' +
156
+ '<button onclick="confirmDeleteByTool(\'qwen\')">' +
157
+ '<i data-lucide="trash-2" class="w-3.5 h-3.5"></i> Delete All Qwen' +
158
+ '</button>' +
159
+ '<button onclick="confirmDeleteByTool(\'codex\')">' +
160
+ '<i data-lucide="trash-2" class="w-3.5 h-3.5"></i> Delete All Codex' +
161
+ '</button>' +
162
+ '<div class="dropdown-divider"></div>' +
163
+ '<button class="delete-all-btn" onclick="confirmDeleteAll()">' +
164
+ '<i data-lucide="alert-triangle" class="w-3.5 h-3.5"></i> Delete All History' +
165
+ '</button>' +
166
+ '</div>' +
167
+ '</div>' +
168
+ '<button class="btn-icon" onclick="refreshCliHistoryView()" title="Refresh">' +
169
+ '<i data-lucide="refresh-cw" class="w-4 h-4"></i>' +
170
+ '</button>' +
171
+ '</div>' +
172
+ '</div>' +
173
+ batchActionsHtml +
174
+ historyHtml +
175
+ '</div>';
176
+
177
+ // Initialize Lucide icons
178
+ if (window.lucide) lucide.createIcons();
179
+ }
180
+
181
+ // ========== Actions ==========
182
+ async function filterCliHistoryView(tool) {
183
+ cliHistoryFilter = tool || null;
184
+ await loadCliHistory();
185
+ renderCliHistoryView();
186
+ }
187
+
188
+ function searchCliHistoryView(query) {
189
+ cliHistorySearch = query;
190
+ renderCliHistoryView();
191
+ // Preserve focus and cursor position
192
+ var searchInput = document.querySelector('.history-search-input');
193
+ if (searchInput) {
194
+ searchInput.focus();
195
+ searchInput.setSelectionRange(query.length, query.length);
196
+ }
197
+ }
198
+
199
+ async function refreshCliHistoryView() {
200
+ await loadCliHistory();
201
+ renderCliHistoryView();
202
+ showRefreshToast('History refreshed', 'success');
203
+ }
204
+
205
+ // ========== Multi-Select Functions ==========
206
+ function toggleDeleteDropdown(event) {
207
+ event.stopPropagation();
208
+ var menu = document.getElementById('deleteDropdownMenu');
209
+ if (menu) {
210
+ menu.classList.toggle('show');
211
+ // Close on outside click
212
+ if (menu.classList.contains('show')) {
213
+ setTimeout(function() {
214
+ document.addEventListener('click', closeDeleteDropdown);
215
+ }, 0);
216
+ }
217
+ }
218
+ }
219
+
220
+ function closeDeleteDropdown() {
221
+ var menu = document.getElementById('deleteDropdownMenu');
222
+ if (menu) menu.classList.remove('show');
223
+ document.removeEventListener('click', closeDeleteDropdown);
224
+ }
225
+
226
+ function enterMultiSelectMode() {
227
+ closeDeleteDropdown();
228
+ isMultiSelectMode = true;
229
+ selectedExecutions.clear();
230
+ renderCliHistoryView();
231
+ }
232
+
233
+ function exitMultiSelectMode() {
234
+ isMultiSelectMode = false;
235
+ selectedExecutions.clear();
236
+ renderCliHistoryView();
237
+ }
238
+
239
+ function toggleExecutionSelection(executionId) {
240
+ if (selectedExecutions.has(executionId)) {
241
+ selectedExecutions.delete(executionId);
242
+ } else {
243
+ selectedExecutions.add(executionId);
244
+ }
245
+ renderCliHistoryView();
246
+ }
247
+
248
+ function selectAllExecutions() {
249
+ var filteredHistory = cliHistorySearch
250
+ ? cliExecutionHistory.filter(function(exec) {
251
+ return exec.prompt_preview.toLowerCase().includes(cliHistorySearch.toLowerCase()) ||
252
+ exec.tool.toLowerCase().includes(cliHistorySearch.toLowerCase());
253
+ })
254
+ : cliExecutionHistory;
255
+
256
+ filteredHistory.forEach(function(exec) {
257
+ selectedExecutions.add(exec.id);
258
+ });
259
+ renderCliHistoryView();
260
+ }
261
+
262
+ function clearExecutionSelection() {
263
+ selectedExecutions.clear();
264
+ renderCliHistoryView();
265
+ }
266
+
267
+ // ========== Batch Delete Functions ==========
268
+ function confirmBatchDelete() {
269
+ var count = selectedExecutions.size;
270
+ if (count === 0) return;
271
+
272
+ if (confirm('Delete ' + count + ' selected execution' + (count > 1 ? 's' : '') + '? This action cannot be undone.')) {
273
+ batchDeleteExecutions(Array.from(selectedExecutions));
274
+ }
275
+ }
276
+
277
+ function confirmDeleteByTool(tool) {
278
+ closeDeleteDropdown();
279
+ var toolExecutions = cliExecutionHistory.filter(function(exec) { return exec.tool === tool; });
280
+ var count = toolExecutions.length;
281
+
282
+ if (count === 0) {
283
+ showRefreshToast('No ' + tool + ' executions to delete', 'info');
284
+ return;
285
+ }
286
+
287
+ if (confirm('Delete all ' + count + ' ' + tool + ' execution' + (count > 1 ? 's' : '') + '? This action cannot be undone.')) {
288
+ var ids = toolExecutions.map(function(exec) { return exec.id; });
289
+ batchDeleteExecutions(ids);
290
+ }
291
+ }
292
+
293
+ function confirmDeleteAll() {
294
+ closeDeleteDropdown();
295
+ var count = cliExecutionHistory.length;
296
+
297
+ if (count === 0) {
298
+ showRefreshToast('No executions to delete', 'info');
299
+ return;
300
+ }
301
+
302
+ if (confirm('Delete ALL ' + count + ' execution' + (count > 1 ? 's' : '') + '? This action cannot be undone.')) {
303
+ var ids = cliExecutionHistory.map(function(exec) { return exec.id; });
304
+ batchDeleteExecutions(ids);
305
+ }
306
+ }
307
+
308
+ async function batchDeleteExecutions(ids) {
309
+ showRefreshToast('Deleting ' + ids.length + ' executions...', 'info');
310
+
311
+ try {
312
+ var response = await fetch('/api/cli/batch-delete', {
313
+ method: 'POST',
314
+ headers: { 'Content-Type': 'application/json' },
315
+ body: JSON.stringify({
316
+ path: projectPath,
317
+ ids: ids
318
+ })
319
+ });
320
+
321
+ var result = await response.json();
322
+
323
+ if (result.success) {
324
+ showRefreshToast('Deleted ' + result.deleted + ' execution' + (result.deleted > 1 ? 's' : ''), 'success');
325
+ // Exit multi-select mode and refresh
326
+ isMultiSelectMode = false;
327
+ selectedExecutions.clear();
328
+ await loadCliHistory();
329
+ renderCliHistoryView();
330
+ } else {
331
+ showRefreshToast('Delete failed: ' + (result.error || 'Unknown error'), 'error');
332
+ }
333
+ } catch (err) {
334
+ console.error('Batch delete failed:', err);
335
+ showRefreshToast('Delete failed: ' + err.message, 'error');
336
+ }
337
+ }
@@ -6,6 +6,10 @@ function renderDashboard() {
6
6
  // Show stats grid and search (may be hidden by MCP view)
7
7
  showStatsAndSearch();
8
8
 
9
+ // Hide storage card (only shown in CLI Manager view)
10
+ const storageCard = document.getElementById('storageCard');
11
+ if (storageCard) storageCard.style.display = 'none';
12
+
9
13
  updateStats();
10
14
  updateBadges();
11
15
  updateCarousel();
@@ -74,8 +78,8 @@ function renderSessions() {
74
78
  container.innerHTML = `
75
79
  <div class="empty-state" style="grid-column: 1/-1;">
76
80
  <div class="empty-icon"><i data-lucide="inbox" class="w-12 h-12"></i></div>
77
- <div class="empty-title">No Sessions Found</div>
78
- <div class="empty-text">No workflow sessions match your current filter.</div>
81
+ <div class="empty-title">${t('empty.noSessions')}</div>
82
+ <div class="empty-text">${t('empty.noSessionsText')}</div>
79
83
  </div>
80
84
  `;
81
85
  if (typeof lucide !== 'undefined') lucide.createIcons();
@@ -98,38 +102,63 @@ function renderSessionCard(session) {
98
102
  const isActive = session._isActive !== false;
99
103
  const date = session.created_at;
100
104
 
105
+ // Get session status from metadata (default to 'planning' for new sessions)
106
+ // 3 states: planning → active → completed (archived)
107
+ const sessionStatus = session.status || 'planning';
108
+ const isPlanning = sessionStatus === 'planning';
109
+
101
110
  // Get session type badge
102
111
  const sessionType = session.type || 'workflow';
103
112
  const typeBadge = sessionType !== 'workflow' ? `<span class="session-type-badge ${sessionType}">${sessionType}</span>` : '';
104
113
 
114
+ // Determine status badge class and text
115
+ // Priority: archived location > planning status > active status
116
+ let statusClass, statusText;
117
+ if (!isActive) {
118
+ // Archived sessions (completed) always show as ARCHIVED
119
+ statusClass = 'archived';
120
+ statusText = t('session.status.archived');
121
+ } else if (isPlanning) {
122
+ // Planning state - session created but not yet executed
123
+ statusClass = 'planning';
124
+ statusText = t('session.status.planning');
125
+ } else {
126
+ // Active state - session is being executed
127
+ statusClass = 'active';
128
+ statusText = t('session.status.active');
129
+ }
130
+
105
131
  // Store session data for modal
106
132
  const sessionKey = `session-${session.session_id}`.replace(/[^a-zA-Z0-9-]/g, '-');
107
133
  sessionDataStore[sessionKey] = session;
108
134
 
109
135
  // Special rendering for review sessions
110
136
  if (sessionType === 'review') {
111
- return renderReviewSessionCard(session, sessionKey, typeBadge, isActive, date);
137
+ return renderReviewSessionCard(session, sessionKey, typeBadge, isActive, isPlanning, date);
112
138
  }
113
139
 
140
+ // Card class includes planning modifier for special styling (only for active sessions)
141
+ const cardClass = isActive && isPlanning ? 'session-card planning' : 'session-card';
142
+
114
143
  return `
115
- <div class="session-card" onclick="showSessionDetailPage('${sessionKey}')">
144
+ <div class="${cardClass}" onclick="showSessionDetailPage('${sessionKey}')">
116
145
  <div class="session-header">
117
146
  <div class="session-title">${escapeHtml(session.session_id || 'Unknown')}</div>
118
147
  <div class="session-badges">
119
148
  ${typeBadge}
120
- <span class="session-status ${isActive ? 'active' : 'archived'}">
121
- ${isActive ? 'ACTIVE' : 'ARCHIVED'}
149
+ <span class="session-status ${statusClass}">
150
+ ${statusText}
122
151
  </span>
123
152
  </div>
124
153
  </div>
125
154
  <div class="session-body">
126
155
  <div class="session-meta">
127
156
  <span class="session-meta-item"><i data-lucide="calendar" class="w-3.5 h-3.5 inline mr-1"></i>${formatDate(date)}</span>
128
- <span class="session-meta-item"><i data-lucide="list-checks" class="w-3.5 h-3.5 inline mr-1"></i>${taskCount} tasks</span>
157
+ <span class="session-meta-item"><i data-lucide="list-checks" class="w-3.5 h-3.5 inline mr-1"></i>${taskCount} ${t('session.tasks')}</span>
129
158
  </div>
130
- ${taskCount > 0 ? `
159
+ ${taskCount > 0 && !isPlanning ? `
131
160
  <div class="progress-container">
132
- <span class="progress-label">Progress</span>
161
+ <span class="progress-label">${t('session.progress')}</span>
133
162
  <div class="progress-bar-wrapper">
134
163
  <div class="progress-bar">
135
164
  <div class="progress-fill" style="width: ${progress}%"></div>
@@ -144,7 +173,7 @@ function renderSessionCard(session) {
144
173
  }
145
174
 
146
175
  // Special card rendering for review sessions
147
- function renderReviewSessionCard(session, sessionKey, typeBadge, isActive, date) {
176
+ function renderReviewSessionCard(session, sessionKey, typeBadge, isActive, isPlanning, date) {
148
177
  // Calculate findings stats from reviewDimensions
149
178
  const dimensions = session.reviewDimensions || [];
150
179
  let totalFindings = 0;
@@ -162,21 +191,38 @@ function renderReviewSessionCard(session, sessionKey, typeBadge, isActive, date)
162
191
  lowCount += findings.filter(f => f.severity === 'low').length;
163
192
  });
164
193
 
194
+ // Determine status badge class and text
195
+ // Priority: archived > planning > active
196
+ let statusClass, statusText;
197
+ if (!isActive) {
198
+ statusClass = 'archived';
199
+ statusText = t('session.status.archived');
200
+ } else if (isPlanning) {
201
+ statusClass = 'planning';
202
+ statusText = t('session.status.planning');
203
+ } else {
204
+ statusClass = 'active';
205
+ statusText = t('session.status.active');
206
+ }
207
+
208
+ // Card class includes planning modifier for special styling (only for active sessions)
209
+ const cardClass = isActive && isPlanning ? 'session-card planning' : 'session-card';
210
+
165
211
  return `
166
- <div class="session-card" onclick="showSessionDetailPage('${sessionKey}')">
212
+ <div class="${cardClass}" onclick="showSessionDetailPage('${sessionKey}')">
167
213
  <div class="session-header">
168
214
  <div class="session-title">${escapeHtml(session.session_id || 'Unknown')}</div>
169
215
  <div class="session-badges">
170
216
  ${typeBadge}
171
- <span class="session-status ${isActive ? 'active' : 'archived'}">
172
- ${isActive ? 'ACTIVE' : 'ARCHIVED'}
217
+ <span class="session-status ${statusClass}">
218
+ ${statusText}
173
219
  </span>
174
220
  </div>
175
221
  </div>
176
222
  <div class="session-body">
177
223
  <div class="session-meta">
178
224
  <span class="session-meta-item"><i data-lucide="calendar" class="w-3.5 h-3.5 inline mr-1"></i>${formatDate(date)}</span>
179
- <span class="session-meta-item"><i data-lucide="search" class="w-3.5 h-3.5 inline mr-1"></i>${totalFindings} findings</span>
225
+ <span class="session-meta-item"><i data-lucide="search" class="w-3.5 h-3.5 inline mr-1"></i>${totalFindings} ${t('session.findings')}</span>
180
226
  </div>
181
227
  ${totalFindings > 0 ? `
182
228
  <div class="review-findings-summary">
@@ -187,7 +233,7 @@ function renderReviewSessionCard(session, sessionKey, typeBadge, isActive, date)
187
233
  ${lowCount > 0 ? `<span class="finding-count low"><i data-lucide="check-circle" class="w-3 h-3 inline"></i> ${lowCount}</span>` : ''}
188
234
  </div>
189
235
  <div class="dimensions-info">
190
- ${dimensions.length} dimensions
236
+ ${dimensions.length} ${t('session.dimensions')}
191
237
  </div>
192
238
  </div>
193
239
  ` : ''}