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,1678 @@
1
+ /* ========================================
2
+ * Graph Explorer Module Styles
3
+ * Interactive code graph visualization with tabs
4
+ * ======================================== */
5
+
6
+ /* ========================================
7
+ * Graph Explorer Layout
8
+ * ======================================== */
9
+ .graph-explorer-view {
10
+ display: flex;
11
+ flex-direction: column;
12
+ height: calc(100vh - 150px);
13
+ min-height: 600px;
14
+ overflow: hidden;
15
+ }
16
+
17
+ .graph-explorer-view.loading {
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: center;
21
+ justify-content: center;
22
+ }
23
+
24
+ /* ========================================
25
+ * Graph Explorer Header with Tabs
26
+ * ======================================== */
27
+ .graph-explorer-header {
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: space-between;
31
+ padding: 0.75rem 0;
32
+ margin-bottom: 1rem;
33
+ border-bottom: 1px solid hsl(var(--border));
34
+ flex-shrink: 0;
35
+ }
36
+
37
+ .graph-explorer-header h2 {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 0.5rem;
41
+ font-size: 1.125rem;
42
+ font-weight: 600;
43
+ color: hsl(var(--foreground));
44
+ margin: 0;
45
+ }
46
+
47
+ .graph-explorer-header-left {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 1rem;
51
+ }
52
+
53
+ .graph-explorer-header-right {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 0.5rem;
57
+ }
58
+
59
+ /* Graph Tabs */
60
+ .graph-tabs {
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 0.25rem;
64
+ padding-left: 1rem;
65
+ border-left: 1px solid hsl(var(--border));
66
+ }
67
+
68
+ .graph-tab {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 0.375rem;
72
+ padding: 0.5rem 1rem;
73
+ font-size: 0.875rem;
74
+ font-weight: 500;
75
+ color: hsl(var(--muted-foreground));
76
+ background: transparent;
77
+ border: 1px solid hsl(var(--border));
78
+ border-radius: 0.375rem;
79
+ cursor: pointer;
80
+ transition: all 0.15s ease;
81
+ }
82
+
83
+ .graph-tab:hover {
84
+ background: hsl(var(--hover));
85
+ color: hsl(var(--foreground));
86
+ }
87
+
88
+ .graph-tab.active {
89
+ background: hsl(var(--primary));
90
+ color: hsl(var(--primary-foreground));
91
+ border-color: hsl(var(--primary));
92
+ }
93
+
94
+ .graph-tab i {
95
+ font-size: 0.875rem;
96
+ }
97
+
98
+ /* Graph Controls */
99
+ .graph-controls {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 0.5rem;
103
+ }
104
+
105
+ /* Filter Dropdown */
106
+ .filter-dropdown {
107
+ position: relative;
108
+ display: inline-block;
109
+ }
110
+
111
+ .filter-dropdown-btn {
112
+ display: flex;
113
+ align-items: center;
114
+ gap: 0.375rem;
115
+ padding: 0.5rem 0.875rem;
116
+ font-size: 0.8125rem;
117
+ font-weight: 500;
118
+ color: hsl(var(--foreground));
119
+ background: hsl(var(--background));
120
+ border: 1px solid hsl(var(--border));
121
+ border-radius: 0.375rem;
122
+ cursor: pointer;
123
+ transition: all 0.15s ease;
124
+ }
125
+
126
+ .filter-dropdown-btn:hover {
127
+ background: hsl(var(--hover));
128
+ border-color: hsl(var(--primary) / 0.3);
129
+ }
130
+
131
+ .filter-dropdown-btn i {
132
+ font-size: 0.75rem;
133
+ color: hsl(var(--muted-foreground));
134
+ }
135
+
136
+ .filter-dropdown-menu {
137
+ position: absolute;
138
+ top: calc(100% + 0.5rem);
139
+ right: 0;
140
+ min-width: 200px;
141
+ background: hsl(var(--card));
142
+ border: 1px solid hsl(var(--border));
143
+ border-radius: 0.5rem;
144
+ box-shadow: 0 4px 12px hsl(var(--foreground) / 0.15);
145
+ z-index: 100;
146
+ display: none;
147
+ overflow: hidden;
148
+ }
149
+
150
+ .filter-dropdown.open .filter-dropdown-menu {
151
+ display: block;
152
+ animation: dropdownFadeIn 0.2s ease;
153
+ }
154
+
155
+ @keyframes dropdownFadeIn {
156
+ from {
157
+ opacity: 0;
158
+ transform: translateY(-8px);
159
+ }
160
+ to {
161
+ opacity: 1;
162
+ transform: translateY(0);
163
+ }
164
+ }
165
+
166
+ .filter-item {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 0.5rem;
170
+ padding: 0.625rem 0.875rem;
171
+ font-size: 0.8125rem;
172
+ color: hsl(var(--foreground));
173
+ cursor: pointer;
174
+ transition: background 0.15s ease;
175
+ }
176
+
177
+ .filter-item:hover {
178
+ background: hsl(var(--hover));
179
+ }
180
+
181
+ .filter-item input[type="checkbox"] {
182
+ width: 14px;
183
+ height: 14px;
184
+ cursor: pointer;
185
+ }
186
+
187
+ .filter-item label {
188
+ flex: 1;
189
+ cursor: pointer;
190
+ user-select: none;
191
+ }
192
+
193
+ /* Note: .graph-main and .cytoscape-container styles are defined in the Additional Classes section below */
194
+
195
+ #cy {
196
+ width: 100%;
197
+ height: 100%;
198
+ }
199
+
200
+ /* Graph Empty State */
201
+ .graph-empty-state {
202
+ display: flex;
203
+ flex-direction: column;
204
+ align-items: center;
205
+ justify-content: center;
206
+ height: 100%;
207
+ padding: 2rem;
208
+ text-align: center;
209
+ color: hsl(var(--muted-foreground));
210
+ }
211
+
212
+ .graph-empty-state i {
213
+ font-size: 3rem;
214
+ opacity: 0.3;
215
+ margin-bottom: 1rem;
216
+ }
217
+
218
+ .graph-empty-state h3 {
219
+ font-size: 1rem;
220
+ font-weight: 600;
221
+ color: hsl(var(--foreground));
222
+ margin-bottom: 0.5rem;
223
+ }
224
+
225
+ .graph-empty-state p {
226
+ font-size: 0.875rem;
227
+ max-width: 300px;
228
+ }
229
+
230
+ /* Graph Error State */
231
+ .graph-error {
232
+ display: flex;
233
+ flex-direction: column;
234
+ align-items: center;
235
+ justify-content: center;
236
+ height: 100%;
237
+ padding: 2rem;
238
+ text-align: center;
239
+ color: hsl(0 84% 60%);
240
+ }
241
+
242
+ .graph-error i {
243
+ font-size: 3rem;
244
+ opacity: 0.5;
245
+ margin-bottom: 1rem;
246
+ }
247
+
248
+ .graph-error h3 {
249
+ font-size: 1rem;
250
+ font-weight: 600;
251
+ margin-bottom: 0.5rem;
252
+ }
253
+
254
+ .graph-error p {
255
+ font-size: 0.875rem;
256
+ color: hsl(var(--muted-foreground));
257
+ max-width: 300px;
258
+ }
259
+
260
+ /* ========================================
261
+ * Node Details Panel (Right Sidebar)
262
+ * ======================================== */
263
+ .node-details-panel {
264
+ width: 320px;
265
+ flex-direction: column;
266
+ background: hsl(var(--card));
267
+ border: 1px solid hsl(var(--border));
268
+ border-left: none;
269
+ border-radius: 0 0.75rem 0.75rem 0;
270
+ overflow: hidden;
271
+ max-height: 100%;
272
+ }
273
+
274
+ .node-details-panel.hidden {
275
+ display: none;
276
+ }
277
+
278
+ .node-details-panel:not(.hidden) {
279
+ display: flex;
280
+ animation: slideInRight 0.3s ease;
281
+ }
282
+
283
+ @keyframes slideInRight {
284
+ from {
285
+ opacity: 0;
286
+ transform: translateX(20px);
287
+ }
288
+ to {
289
+ opacity: 1;
290
+ transform: translateX(0);
291
+ }
292
+ }
293
+
294
+ /* Node Detail Header */
295
+ .node-detail-header {
296
+ display: flex;
297
+ align-items: flex-start;
298
+ gap: 0.75rem;
299
+ padding: 1rem;
300
+ border-bottom: 1px solid hsl(var(--border));
301
+ background: hsl(var(--muted) / 0.3);
302
+ }
303
+
304
+ .node-detail-icon {
305
+ display: flex;
306
+ align-items: center;
307
+ justify-content: center;
308
+ width: 2.5rem;
309
+ height: 2.5rem;
310
+ border-radius: 0.5rem;
311
+ flex-shrink: 0;
312
+ }
313
+
314
+ .node-detail-icon.module {
315
+ background: hsl(267 84% 95%);
316
+ color: hsl(267 84% 50%);
317
+ }
318
+
319
+ .node-detail-icon.class {
320
+ background: hsl(var(--primary) / 0.1);
321
+ color: hsl(var(--primary));
322
+ }
323
+
324
+ .node-detail-icon.function {
325
+ background: hsl(142 71% 92%);
326
+ color: hsl(142 71% 40%);
327
+ }
328
+
329
+ .node-detail-icon.method {
330
+ background: hsl(38 92% 90%);
331
+ color: hsl(38 92% 35%);
332
+ }
333
+
334
+ .node-detail-icon.variable {
335
+ background: hsl(204 71% 92%);
336
+ color: hsl(204 71% 40%);
337
+ }
338
+
339
+ .node-detail-info {
340
+ flex: 1;
341
+ min-width: 0;
342
+ }
343
+
344
+ .node-detail-name {
345
+ font-size: 0.9375rem;
346
+ font-weight: 600;
347
+ color: hsl(var(--foreground));
348
+ margin-bottom: 0.25rem;
349
+ word-break: break-word;
350
+ }
351
+
352
+ .node-detail-type {
353
+ display: inline-flex;
354
+ align-items: center;
355
+ gap: 0.25rem;
356
+ padding: 0.125rem 0.5rem;
357
+ font-size: 0.6875rem;
358
+ font-weight: 600;
359
+ color: hsl(var(--primary));
360
+ background: hsl(var(--primary) / 0.1);
361
+ border-radius: 0.25rem;
362
+ text-transform: uppercase;
363
+ letter-spacing: 0.025em;
364
+ }
365
+
366
+ .node-detail-close {
367
+ padding: 0.375rem;
368
+ background: transparent;
369
+ border: none;
370
+ color: hsl(var(--muted-foreground));
371
+ cursor: pointer;
372
+ border-radius: 0.375rem;
373
+ transition: all 0.15s ease;
374
+ flex-shrink: 0;
375
+ }
376
+
377
+ .node-detail-close:hover {
378
+ background: hsl(var(--muted));
379
+ color: hsl(var(--foreground));
380
+ }
381
+
382
+ /* Node Detail Body */
383
+ .node-detail-body {
384
+ flex: 1;
385
+ overflow-y: auto;
386
+ padding: 1rem;
387
+ min-height: 0;
388
+ }
389
+
390
+ .node-detail-section {
391
+ margin-bottom: 1.5rem;
392
+ }
393
+
394
+ .node-detail-section:last-child {
395
+ margin-bottom: 0;
396
+ }
397
+
398
+ .node-detail-section h4 {
399
+ display: flex;
400
+ align-items: center;
401
+ gap: 0.375rem;
402
+ font-size: 0.8125rem;
403
+ font-weight: 600;
404
+ color: hsl(var(--foreground));
405
+ margin: 0 0 0.75rem 0;
406
+ padding-bottom: 0.5rem;
407
+ border-bottom: 1px solid hsl(var(--border));
408
+ }
409
+
410
+ .node-detail-section h4 i {
411
+ font-size: 0.75rem;
412
+ color: hsl(var(--primary));
413
+ }
414
+
415
+ /* Location Info */
416
+ .location-info {
417
+ display: flex;
418
+ flex-direction: column;
419
+ gap: 0.5rem;
420
+ }
421
+
422
+ .location-item {
423
+ display: flex;
424
+ align-items: flex-start;
425
+ gap: 0.5rem;
426
+ font-size: 0.75rem;
427
+ }
428
+
429
+ .location-item i {
430
+ color: hsl(var(--muted-foreground));
431
+ margin-top: 0.125rem;
432
+ flex-shrink: 0;
433
+ }
434
+
435
+ .location-item span {
436
+ color: hsl(var(--foreground));
437
+ font-family: var(--font-mono);
438
+ word-break: break-all;
439
+ }
440
+
441
+ /* Docstring Info */
442
+ .docstring-content {
443
+ padding: 0.75rem;
444
+ background: hsl(var(--muted) / 0.3);
445
+ border-radius: 0.5rem;
446
+ font-size: 0.75rem;
447
+ color: hsl(var(--foreground));
448
+ line-height: 1.6;
449
+ white-space: pre-wrap;
450
+ word-wrap: break-word;
451
+ max-height: 200px;
452
+ overflow-y: auto;
453
+ }
454
+
455
+ .no-docstring {
456
+ font-size: 0.75rem;
457
+ color: hsl(var(--muted-foreground));
458
+ font-style: italic;
459
+ }
460
+
461
+ /* Connections List */
462
+ .connections-list {
463
+ display: flex;
464
+ flex-direction: column;
465
+ gap: 0.5rem;
466
+ }
467
+
468
+ .connection-item {
469
+ display: flex;
470
+ align-items: center;
471
+ gap: 0.625rem;
472
+ padding: 0.625rem;
473
+ background: hsl(var(--background));
474
+ border: 1px solid hsl(var(--border));
475
+ border-radius: 0.375rem;
476
+ cursor: pointer;
477
+ transition: all 0.15s ease;
478
+ }
479
+
480
+ .connection-item:hover {
481
+ background: hsl(var(--hover));
482
+ border-color: hsl(var(--primary) / 0.3);
483
+ }
484
+
485
+ .connection-icon {
486
+ display: flex;
487
+ align-items: center;
488
+ justify-content: center;
489
+ width: 1.5rem;
490
+ height: 1.5rem;
491
+ border-radius: 0.375rem;
492
+ flex-shrink: 0;
493
+ }
494
+
495
+ .connection-icon.caller {
496
+ background: hsl(142 71% 92%);
497
+ color: hsl(142 71% 40%);
498
+ }
499
+
500
+ .connection-icon.callee {
501
+ background: hsl(38 92% 90%);
502
+ color: hsl(38 92% 35%);
503
+ }
504
+
505
+ .connection-icon.import {
506
+ background: hsl(204 71% 92%);
507
+ color: hsl(204 71% 40%);
508
+ }
509
+
510
+ .connection-icon.export {
511
+ background: hsl(267 84% 95%);
512
+ color: hsl(267 84% 50%);
513
+ }
514
+
515
+ .connection-info {
516
+ flex: 1;
517
+ min-width: 0;
518
+ }
519
+
520
+ .connection-name {
521
+ font-size: 0.8125rem;
522
+ font-weight: 500;
523
+ color: hsl(var(--foreground));
524
+ white-space: nowrap;
525
+ overflow: hidden;
526
+ text-overflow: ellipsis;
527
+ }
528
+
529
+ .connection-meta {
530
+ font-size: 0.6875rem;
531
+ color: hsl(var(--muted-foreground));
532
+ margin-top: 0.125rem;
533
+ }
534
+
535
+ .no-connections {
536
+ padding: 1rem;
537
+ text-align: center;
538
+ color: hsl(var(--muted-foreground));
539
+ font-size: 0.75rem;
540
+ font-style: italic;
541
+ }
542
+
543
+ /* Node Detail Actions */
544
+ .node-detail-actions {
545
+ display: flex;
546
+ align-items: center;
547
+ gap: 0.5rem;
548
+ padding: 1rem;
549
+ border-top: 1px solid hsl(var(--border));
550
+ background: hsl(var(--muted) / 0.15);
551
+ }
552
+
553
+ .node-detail-actions .btn {
554
+ flex: 1;
555
+ display: flex;
556
+ align-items: center;
557
+ justify-content: center;
558
+ gap: 0.375rem;
559
+ padding: 0.5rem 0.875rem;
560
+ font-size: 0.8125rem;
561
+ font-weight: 500;
562
+ border-radius: 0.375rem;
563
+ cursor: pointer;
564
+ transition: all 0.15s ease;
565
+ }
566
+
567
+ .btn-impact {
568
+ background: hsl(var(--primary) / 0.1);
569
+ border: 1px solid hsl(var(--primary) / 0.3);
570
+ color: hsl(var(--primary));
571
+ }
572
+
573
+ .btn-impact:hover {
574
+ background: hsl(var(--primary) / 0.2);
575
+ border-color: hsl(var(--primary));
576
+ }
577
+
578
+ .btn-expand {
579
+ background: hsl(var(--muted));
580
+ border: 1px solid hsl(var(--border));
581
+ color: hsl(var(--foreground));
582
+ }
583
+
584
+ .btn-expand:hover {
585
+ background: hsl(var(--hover));
586
+ border-color: hsl(var(--primary) / 0.3);
587
+ }
588
+
589
+ /* ========================================
590
+ * Graph Legend
591
+ * ======================================== */
592
+ .graph-legend {
593
+ display: flex;
594
+ align-items: center;
595
+ justify-content: space-between;
596
+ padding: 0.625rem 1rem;
597
+ border-top: 1px solid hsl(var(--border));
598
+ background: hsl(var(--muted) / 0.15);
599
+ flex-shrink: 0;
600
+ }
601
+
602
+ .legend-group {
603
+ display: flex;
604
+ align-items: center;
605
+ gap: 1rem;
606
+ }
607
+
608
+ .legend-group-title {
609
+ font-size: 0.6875rem;
610
+ font-weight: 600;
611
+ color: hsl(var(--muted-foreground));
612
+ text-transform: uppercase;
613
+ letter-spacing: 0.05em;
614
+ }
615
+
616
+ .legend-items {
617
+ display: flex;
618
+ align-items: center;
619
+ gap: 1rem;
620
+ }
621
+
622
+ .legend-item {
623
+ display: flex;
624
+ align-items: center;
625
+ gap: 0.375rem;
626
+ font-size: 0.75rem;
627
+ color: hsl(var(--foreground));
628
+ cursor: pointer;
629
+ transition: opacity 0.15s ease;
630
+ }
631
+
632
+ .legend-item:hover {
633
+ opacity: 0.7;
634
+ }
635
+
636
+ .legend-item.disabled {
637
+ opacity: 0.4;
638
+ }
639
+
640
+ /* Legend Dots (for node types) */
641
+ .legend-dot {
642
+ width: 10px;
643
+ height: 10px;
644
+ border-radius: 50%;
645
+ flex-shrink: 0;
646
+ }
647
+
648
+ .legend-dot.module {
649
+ background: hsl(267 84% 65%);
650
+ border: 2px solid hsl(267 84% 50%);
651
+ }
652
+
653
+ .legend-dot.class {
654
+ background: hsl(var(--primary));
655
+ border: 2px solid hsl(var(--primary));
656
+ }
657
+
658
+ .legend-dot.function {
659
+ background: hsl(142 71% 45%);
660
+ border: 2px solid hsl(142 71% 40%);
661
+ }
662
+
663
+ .legend-dot.method {
664
+ background: hsl(38 92% 50%);
665
+ border: 2px solid hsl(38 92% 40%);
666
+ }
667
+
668
+ .legend-dot.variable {
669
+ background: hsl(204 71% 50%);
670
+ border: 2px solid hsl(204 71% 40%);
671
+ }
672
+
673
+ /* Legend Lines (for edge types) */
674
+ .legend-line {
675
+ width: 20px;
676
+ height: 2px;
677
+ flex-shrink: 0;
678
+ }
679
+
680
+ .legend-line.calls {
681
+ background: hsl(var(--primary));
682
+ }
683
+
684
+ .legend-line.imports {
685
+ background: hsl(142 71% 45%);
686
+ }
687
+
688
+ .legend-line.exports {
689
+ background: hsl(204 71% 50%);
690
+ }
691
+
692
+ .legend-line.inherits {
693
+ background: hsl(267 84% 65%);
694
+ background-image: linear-gradient(90deg, transparent 50%, hsl(var(--background)) 50%);
695
+ background-size: 8px 2px;
696
+ }
697
+
698
+ /* ========================================
699
+ * Search Process Tab
700
+ * ======================================== */
701
+ .search-process-container {
702
+ display: flex;
703
+ flex-direction: column;
704
+ gap: 1.5rem;
705
+ padding: 1.5rem;
706
+ overflow-y: auto;
707
+ }
708
+
709
+ /* Pipeline Stages */
710
+ .pipeline-stages {
711
+ display: flex;
712
+ align-items: stretch;
713
+ gap: 0;
714
+ padding: 1rem;
715
+ background: hsl(var(--card));
716
+ border: 1px solid hsl(var(--border));
717
+ border-radius: 0.75rem;
718
+ overflow-x: auto;
719
+ }
720
+
721
+ .pipeline-stage {
722
+ display: flex;
723
+ flex-direction: column;
724
+ min-width: 200px;
725
+ padding: 1rem;
726
+ background: hsl(var(--background));
727
+ border: 1px solid hsl(var(--border));
728
+ border-radius: 0.5rem;
729
+ flex: 1;
730
+ }
731
+
732
+ .pipeline-stage-header {
733
+ display: flex;
734
+ align-items: center;
735
+ gap: 0.5rem;
736
+ margin-bottom: 0.75rem;
737
+ }
738
+
739
+ .stage-number {
740
+ display: flex;
741
+ align-items: center;
742
+ justify-content: center;
743
+ width: 1.75rem;
744
+ height: 1.75rem;
745
+ font-size: 0.875rem;
746
+ font-weight: 700;
747
+ color: hsl(var(--primary-foreground));
748
+ background: hsl(var(--primary));
749
+ border-radius: 50%;
750
+ flex-shrink: 0;
751
+ }
752
+
753
+ .stage-title {
754
+ font-size: 0.875rem;
755
+ font-weight: 600;
756
+ color: hsl(var(--foreground));
757
+ }
758
+
759
+ .stage-description {
760
+ font-size: 0.75rem;
761
+ color: hsl(var(--muted-foreground));
762
+ line-height: 1.5;
763
+ }
764
+
765
+ .stage-arrow {
766
+ display: flex;
767
+ align-items: center;
768
+ justify-content: center;
769
+ min-width: 2rem;
770
+ color: hsl(var(--muted-foreground));
771
+ }
772
+
773
+ .stage-arrow i {
774
+ font-size: 1.25rem;
775
+ }
776
+
777
+ /* Chunk Hierarchy */
778
+ .chunk-hierarchy {
779
+ padding: 1rem;
780
+ background: hsl(var(--card));
781
+ border: 1px solid hsl(var(--border));
782
+ border-radius: 0.75rem;
783
+ }
784
+
785
+ .chunk-hierarchy-header {
786
+ display: flex;
787
+ align-items: center;
788
+ gap: 0.5rem;
789
+ margin-bottom: 1rem;
790
+ padding-bottom: 0.75rem;
791
+ border-bottom: 1px solid hsl(var(--border));
792
+ }
793
+
794
+ .chunk-hierarchy-header h3 {
795
+ display: flex;
796
+ align-items: center;
797
+ gap: 0.5rem;
798
+ font-size: 0.9375rem;
799
+ font-weight: 600;
800
+ color: hsl(var(--foreground));
801
+ margin: 0;
802
+ }
803
+
804
+ .chunk-hierarchy-header h3 i {
805
+ color: hsl(var(--primary));
806
+ }
807
+
808
+ .chunk-tree {
809
+ display: flex;
810
+ flex-direction: column;
811
+ gap: 0.5rem;
812
+ }
813
+
814
+ .chunk-node {
815
+ display: flex;
816
+ flex-direction: column;
817
+ padding: 0.75rem;
818
+ background: hsl(var(--background));
819
+ border: 1px solid hsl(var(--border));
820
+ border-left: 3px solid hsl(var(--primary));
821
+ border-radius: 0.5rem;
822
+ transition: all 0.15s ease;
823
+ }
824
+
825
+ .chunk-node:hover {
826
+ background: hsl(var(--hover));
827
+ border-color: hsl(var(--primary) / 0.3);
828
+ }
829
+
830
+ .chunk-node-header {
831
+ display: flex;
832
+ align-items: center;
833
+ gap: 0.5rem;
834
+ margin-bottom: 0.375rem;
835
+ }
836
+
837
+ .chunk-node-type {
838
+ padding: 0.125rem 0.5rem;
839
+ font-size: 0.6875rem;
840
+ font-weight: 600;
841
+ color: hsl(var(--primary));
842
+ background: hsl(var(--primary) / 0.1);
843
+ border-radius: 0.25rem;
844
+ text-transform: uppercase;
845
+ }
846
+
847
+ .chunk-node-name {
848
+ font-size: 0.8125rem;
849
+ font-weight: 500;
850
+ color: hsl(var(--foreground));
851
+ font-family: var(--font-mono);
852
+ }
853
+
854
+ .chunk-node-details {
855
+ font-size: 0.75rem;
856
+ color: hsl(var(--muted-foreground));
857
+ margin-top: 0.25rem;
858
+ }
859
+
860
+ .chunk-node-children {
861
+ margin-left: 1.5rem;
862
+ margin-top: 0.5rem;
863
+ display: flex;
864
+ flex-direction: column;
865
+ gap: 0.5rem;
866
+ }
867
+
868
+ /* Callers and Callees */
869
+ .callers-callees {
870
+ display: grid;
871
+ grid-template-columns: 1fr 1fr;
872
+ gap: 1.5rem;
873
+ }
874
+
875
+ .callers-section,
876
+ .callees-section {
877
+ padding: 1rem;
878
+ background: hsl(var(--card));
879
+ border: 1px solid hsl(var(--border));
880
+ border-radius: 0.75rem;
881
+ }
882
+
883
+ .callers-section h3,
884
+ .callees-section h3 {
885
+ display: flex;
886
+ align-items: center;
887
+ gap: 0.5rem;
888
+ font-size: 0.9375rem;
889
+ font-weight: 600;
890
+ color: hsl(var(--foreground));
891
+ margin: 0 0 1rem 0;
892
+ padding-bottom: 0.75rem;
893
+ border-bottom: 1px solid hsl(var(--border));
894
+ }
895
+
896
+ .callers-section h3 i,
897
+ .callees-section h3 i {
898
+ color: hsl(var(--primary));
899
+ }
900
+
901
+ .caller-item,
902
+ .callee-item {
903
+ display: flex;
904
+ align-items: center;
905
+ gap: 0.625rem;
906
+ padding: 0.625rem;
907
+ margin-bottom: 0.5rem;
908
+ background: hsl(var(--background));
909
+ border: 1px solid hsl(var(--border));
910
+ border-radius: 0.375rem;
911
+ cursor: pointer;
912
+ transition: all 0.15s ease;
913
+ }
914
+
915
+ .caller-item:hover,
916
+ .callee-item:hover {
917
+ background: hsl(var(--hover));
918
+ border-color: hsl(var(--primary) / 0.3);
919
+ }
920
+
921
+ .caller-item:last-child,
922
+ .callee-item:last-child {
923
+ margin-bottom: 0;
924
+ }
925
+
926
+ .caller-icon,
927
+ .callee-icon {
928
+ display: flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ width: 1.5rem;
932
+ height: 1.5rem;
933
+ border-radius: 0.375rem;
934
+ background: hsl(var(--primary) / 0.1);
935
+ color: hsl(var(--primary));
936
+ flex-shrink: 0;
937
+ }
938
+
939
+ .caller-name,
940
+ .callee-name {
941
+ flex: 1;
942
+ font-size: 0.8125rem;
943
+ font-weight: 500;
944
+ color: hsl(var(--foreground));
945
+ font-family: var(--font-mono);
946
+ white-space: nowrap;
947
+ overflow: hidden;
948
+ text-overflow: ellipsis;
949
+ }
950
+
951
+ /* ========================================
952
+ * Responsive Design
953
+ * ======================================== */
954
+ @media (max-width: 1400px) {
955
+ .node-details-panel {
956
+ width: 280px;
957
+ }
958
+ }
959
+
960
+ @media (max-width: 1024px) {
961
+ .graph-explorer-header {
962
+ flex-direction: column;
963
+ align-items: flex-start;
964
+ gap: 1rem;
965
+ }
966
+
967
+ .graph-tabs {
968
+ padding-left: 0;
969
+ border-left: none;
970
+ border-top: 1px solid hsl(var(--border));
971
+ padding-top: 0.75rem;
972
+ width: 100%;
973
+ }
974
+
975
+ .graph-main {
976
+ flex-direction: column;
977
+ }
978
+
979
+ .node-details-panel {
980
+ width: 100%;
981
+ max-height: 400px;
982
+ border-left: 1px solid hsl(var(--border));
983
+ border-radius: 0.75rem 0.75rem 0 0;
984
+ }
985
+
986
+ .node-details-panel.visible {
987
+ animation: slideInBottom 0.3s ease;
988
+ }
989
+
990
+ @keyframes slideInBottom {
991
+ from {
992
+ opacity: 0;
993
+ transform: translateY(20px);
994
+ }
995
+ to {
996
+ opacity: 1;
997
+ transform: translateY(0);
998
+ }
999
+ }
1000
+
1001
+ .callers-callees {
1002
+ grid-template-columns: 1fr;
1003
+ }
1004
+ }
1005
+
1006
+ @media (max-width: 768px) {
1007
+ .graph-explorer-view {
1008
+ height: auto;
1009
+ min-height: 500px;
1010
+ }
1011
+
1012
+ .graph-tabs {
1013
+ flex-direction: column;
1014
+ align-items: stretch;
1015
+ }
1016
+
1017
+ .graph-tab {
1018
+ justify-content: center;
1019
+ }
1020
+
1021
+ .graph-controls {
1022
+ flex-direction: column;
1023
+ align-items: stretch;
1024
+ }
1025
+
1026
+ .filter-dropdown {
1027
+ width: 100%;
1028
+ }
1029
+
1030
+ .filter-dropdown-btn {
1031
+ width: 100%;
1032
+ justify-content: space-between;
1033
+ }
1034
+
1035
+ .pipeline-stages {
1036
+ flex-direction: column;
1037
+ gap: 0.5rem;
1038
+ }
1039
+
1040
+ .pipeline-stage {
1041
+ min-width: 0;
1042
+ }
1043
+
1044
+ .stage-arrow {
1045
+ display: none;
1046
+ }
1047
+
1048
+ .graph-legend {
1049
+ flex-direction: column;
1050
+ align-items: flex-start;
1051
+ gap: 0.75rem;
1052
+ }
1053
+
1054
+ .legend-group {
1055
+ flex-direction: column;
1056
+ align-items: flex-start;
1057
+ gap: 0.5rem;
1058
+ width: 100%;
1059
+ }
1060
+
1061
+ .legend-items {
1062
+ flex-wrap: wrap;
1063
+ gap: 0.75rem;
1064
+ }
1065
+ }
1066
+
1067
+ /* ========================================
1068
+ * Animations
1069
+ * ======================================== */
1070
+ @keyframes fadeIn {
1071
+ from {
1072
+ opacity: 0;
1073
+ transform: translateY(8px);
1074
+ }
1075
+ to {
1076
+ opacity: 1;
1077
+ transform: translateY(0);
1078
+ }
1079
+ }
1080
+
1081
+ .connection-item,
1082
+ .chunk-node,
1083
+ .caller-item,
1084
+ .callee-item {
1085
+ animation: fadeIn 0.3s ease;
1086
+ }
1087
+
1088
+ /* Loading State */
1089
+ .graph-loading {
1090
+ display: flex;
1091
+ flex-direction: column;
1092
+ align-items: center;
1093
+ justify-content: center;
1094
+ height: 100%;
1095
+ padding: 2rem;
1096
+ text-align: center;
1097
+ color: hsl(var(--muted-foreground));
1098
+ }
1099
+
1100
+ .graph-loading i {
1101
+ font-size: 2.5rem;
1102
+ opacity: 0.5;
1103
+ margin-bottom: 1rem;
1104
+ animation: spin 1s linear infinite;
1105
+ }
1106
+
1107
+ @keyframes spin {
1108
+ from {
1109
+ transform: rotate(0deg);
1110
+ }
1111
+ to {
1112
+ transform: rotate(360deg);
1113
+ }
1114
+ }
1115
+
1116
+ .graph-loading p {
1117
+ font-size: 0.875rem;
1118
+ margin: 0;
1119
+ }
1120
+
1121
+ /* ========================================
1122
+ * Additional Classes for JS Compatibility
1123
+ * ======================================== */
1124
+
1125
+ /* Explorer Tabs */
1126
+ .graph-explorer-tabs {
1127
+ display: flex;
1128
+ align-items: center;
1129
+ gap: 0.5rem;
1130
+ }
1131
+
1132
+ .tab-btn {
1133
+ display: flex;
1134
+ align-items: center;
1135
+ gap: 0.375rem;
1136
+ padding: 0.5rem 1rem;
1137
+ font-size: 0.875rem;
1138
+ font-weight: 500;
1139
+ color: hsl(var(--muted-foreground));
1140
+ background: transparent;
1141
+ border: 1px solid hsl(var(--border));
1142
+ border-radius: 0.375rem;
1143
+ cursor: pointer;
1144
+ transition: all 0.15s ease;
1145
+ }
1146
+
1147
+ .tab-btn:hover {
1148
+ background: hsl(var(--hover));
1149
+ color: hsl(var(--foreground));
1150
+ }
1151
+
1152
+ .tab-btn.active {
1153
+ background: hsl(var(--primary));
1154
+ color: hsl(var(--primary-foreground));
1155
+ border-color: hsl(var(--primary));
1156
+ }
1157
+
1158
+ /* Tab Content */
1159
+ .graph-explorer-content {
1160
+ display: flex;
1161
+ flex: 1;
1162
+ min-height: 0;
1163
+ overflow: hidden;
1164
+ }
1165
+
1166
+ .tab-content {
1167
+ display: none;
1168
+ width: 100%;
1169
+ height: 100%;
1170
+ }
1171
+
1172
+ .tab-content.active {
1173
+ display: flex;
1174
+ }
1175
+
1176
+ /* Graph View Layout */
1177
+ .graph-view {
1178
+ display: flex;
1179
+ width: 100%;
1180
+ height: 100%;
1181
+ gap: 1rem;
1182
+ padding: 0;
1183
+ }
1184
+
1185
+ .graph-sidebar {
1186
+ width: 280px;
1187
+ min-width: 280px;
1188
+ flex-shrink: 0;
1189
+ display: flex;
1190
+ flex-direction: column;
1191
+ gap: 0;
1192
+ overflow-y: auto;
1193
+ padding: 0.5rem 1.25rem 0.5rem 0;
1194
+ border-right: 1px solid hsl(var(--border));
1195
+ margin-right: 1rem;
1196
+ }
1197
+
1198
+ .graph-main {
1199
+ flex: 1;
1200
+ display: flex;
1201
+ flex-direction: column;
1202
+ min-width: 0;
1203
+ height: 100%;
1204
+ }
1205
+
1206
+ .graph-controls-section,
1207
+ .graph-legend-section {
1208
+ padding: 0;
1209
+ }
1210
+
1211
+ .graph-controls-section h3,
1212
+ .graph-legend-section h3 {
1213
+ font-size: 0.75rem;
1214
+ font-weight: 600;
1215
+ color: hsl(var(--muted-foreground));
1216
+ margin: 0 0 1rem 0;
1217
+ text-transform: uppercase;
1218
+ letter-spacing: 0.05em;
1219
+ }
1220
+
1221
+ .graph-legend-section {
1222
+ border-top: 1px solid hsl(var(--border));
1223
+ padding-top: 1.5rem;
1224
+ margin-top: 1.5rem;
1225
+ }
1226
+
1227
+ /* Graph Legend */
1228
+ .graph-legend {
1229
+ display: flex;
1230
+ flex-direction: column;
1231
+ gap: 0.75rem;
1232
+ }
1233
+
1234
+ .legend-title {
1235
+ font-size: 0.75rem;
1236
+ font-weight: 600;
1237
+ color: hsl(var(--muted-foreground));
1238
+ text-transform: uppercase;
1239
+ letter-spacing: 0.05em;
1240
+ margin-bottom: 0.5rem;
1241
+ margin-top: 0.5rem;
1242
+ }
1243
+
1244
+ .legend-dot {
1245
+ width: 10px;
1246
+ height: 10px;
1247
+ border-radius: 50%;
1248
+ flex-shrink: 0;
1249
+ }
1250
+
1251
+ .legend-line {
1252
+ width: 20px;
1253
+ height: 3px;
1254
+ border-radius: 2px;
1255
+ flex-shrink: 0;
1256
+ }
1257
+
1258
+ .filter-color {
1259
+ width: 10px;
1260
+ height: 10px;
1261
+ border-radius: 50%;
1262
+ flex-shrink: 0;
1263
+ }
1264
+
1265
+ /* Graph Toolbar */
1266
+ .graph-toolbar {
1267
+ display: flex;
1268
+ align-items: center;
1269
+ justify-content: space-between;
1270
+ padding: 0.5rem 0.75rem;
1271
+ background: hsl(var(--card));
1272
+ border: 1px solid hsl(var(--border));
1273
+ border-radius: 0.5rem 0.5rem 0 0;
1274
+ border-bottom: none;
1275
+ }
1276
+
1277
+ .graph-toolbar-left,
1278
+ .graph-toolbar-right {
1279
+ display: flex;
1280
+ align-items: center;
1281
+ gap: 0.75rem;
1282
+ }
1283
+
1284
+ .graph-stats {
1285
+ display: flex;
1286
+ align-items: center;
1287
+ gap: 0.375rem;
1288
+ font-size: 0.8125rem;
1289
+ color: hsl(var(--muted-foreground));
1290
+ }
1291
+
1292
+ /* Data Source Selector */
1293
+ .data-source-select {
1294
+ padding: 0.375rem 0.75rem;
1295
+ font-size: 0.8125rem;
1296
+ font-weight: 500;
1297
+ color: hsl(var(--foreground));
1298
+ background: hsl(var(--background));
1299
+ border: 1px solid hsl(var(--border));
1300
+ border-radius: 0.375rem;
1301
+ cursor: pointer;
1302
+ transition: all 0.15s ease;
1303
+ outline: none;
1304
+ }
1305
+
1306
+ .data-source-select:hover {
1307
+ background: hsl(var(--hover));
1308
+ border-color: hsl(var(--primary) / 0.3);
1309
+ }
1310
+
1311
+ .data-source-select:focus {
1312
+ border-color: hsl(var(--primary));
1313
+ box-shadow: 0 0 0 2px hsl(var(--primary) / 0.1);
1314
+ }
1315
+
1316
+ .btn-icon {
1317
+ display: flex;
1318
+ align-items: center;
1319
+ justify-content: center;
1320
+ width: 32px;
1321
+ height: 32px;
1322
+ padding: 0;
1323
+ background: transparent;
1324
+ border: 1px solid hsl(var(--border));
1325
+ border-radius: 0.375rem;
1326
+ color: hsl(var(--muted-foreground));
1327
+ cursor: pointer;
1328
+ transition: all 0.15s ease;
1329
+ }
1330
+
1331
+ .btn-icon:hover {
1332
+ background: hsl(var(--hover));
1333
+ color: hsl(var(--foreground));
1334
+ border-color: hsl(var(--primary) / 0.3);
1335
+ }
1336
+
1337
+ /* Filter Checkboxes */
1338
+ .filter-dropdowns {
1339
+ display: flex;
1340
+ flex-direction: column;
1341
+ gap: 1.5rem;
1342
+ }
1343
+
1344
+ .filter-group {
1345
+ display: flex;
1346
+ flex-direction: column;
1347
+ gap: 0.75rem;
1348
+ }
1349
+
1350
+ .filter-group > label {
1351
+ font-size: 0.75rem;
1352
+ font-weight: 600;
1353
+ color: hsl(var(--muted-foreground));
1354
+ text-transform: uppercase;
1355
+ letter-spacing: 0.05em;
1356
+ margin-bottom: 0.25rem;
1357
+ }
1358
+
1359
+ .filter-checkbox {
1360
+ display: flex;
1361
+ align-items: center;
1362
+ gap: 0.625rem;
1363
+ padding: 0.5rem 0;
1364
+ font-size: 0.8125rem;
1365
+ color: hsl(var(--foreground));
1366
+ cursor: pointer;
1367
+ transition: background 0.15s ease;
1368
+ border-radius: 0.25rem;
1369
+ }
1370
+
1371
+ .filter-checkbox:hover {
1372
+ background: hsl(var(--hover));
1373
+ padding-left: 0.375rem;
1374
+ padding-right: 0.375rem;
1375
+ }
1376
+
1377
+ .filter-checkbox input[type="checkbox"] {
1378
+ width: 16px;
1379
+ height: 16px;
1380
+ cursor: pointer;
1381
+ accent-color: hsl(var(--primary));
1382
+ flex-shrink: 0;
1383
+ }
1384
+
1385
+ .filter-checkbox span {
1386
+ flex: 1;
1387
+ user-select: none;
1388
+ }
1389
+
1390
+ /* Scope Filter */
1391
+ .scope-filter {
1392
+ padding-bottom: 1rem;
1393
+ border-bottom: 1px solid hsl(var(--border));
1394
+ margin-bottom: 0.5rem;
1395
+ }
1396
+
1397
+ .scope-selector {
1398
+ display: flex;
1399
+ flex-direction: column;
1400
+ gap: 0.625rem;
1401
+ margin-top: 0.5rem;
1402
+ }
1403
+
1404
+ .filter-radio {
1405
+ display: flex;
1406
+ align-items: center;
1407
+ gap: 0.625rem;
1408
+ padding: 0.5rem 0;
1409
+ font-size: 0.8125rem;
1410
+ color: hsl(var(--foreground));
1411
+ cursor: pointer;
1412
+ transition: background 0.15s ease;
1413
+ border-radius: 0.25rem;
1414
+ }
1415
+
1416
+ .filter-radio:hover {
1417
+ background: hsl(var(--hover));
1418
+ padding-left: 0.375rem;
1419
+ padding-right: 0.375rem;
1420
+ }
1421
+
1422
+ .filter-radio input[type="radio"] {
1423
+ width: 16px;
1424
+ height: 16px;
1425
+ cursor: pointer;
1426
+ accent-color: hsl(var(--primary));
1427
+ flex-shrink: 0;
1428
+ }
1429
+
1430
+ .filter-radio span {
1431
+ flex: 1;
1432
+ user-select: none;
1433
+ }
1434
+
1435
+ /* Filter Select Dropdown */
1436
+ .filter-select {
1437
+ width: 100%;
1438
+ padding: 0.625rem 0.75rem;
1439
+ margin-top: 0.5rem;
1440
+ font-size: 0.8125rem;
1441
+ font-weight: 400;
1442
+ color: hsl(var(--foreground));
1443
+ background: hsl(var(--background));
1444
+ border: 1px solid hsl(var(--border));
1445
+ border-radius: 0.375rem;
1446
+ cursor: pointer;
1447
+ transition: all 0.15s ease;
1448
+ outline: none;
1449
+ }
1450
+
1451
+ .filter-select:hover {
1452
+ background: hsl(var(--hover));
1453
+ border-color: hsl(var(--primary) / 0.3);
1454
+ }
1455
+
1456
+ .filter-select:focus {
1457
+ border-color: hsl(var(--primary));
1458
+ box-shadow: 0 0 0 3px hsl(var(--primary) / 0.1);
1459
+ }
1460
+
1461
+ .filter-select option {
1462
+ padding: 0.5rem;
1463
+ }
1464
+
1465
+ /* Legend Items */
1466
+ .legend-section {
1467
+ display: flex;
1468
+ flex-direction: column;
1469
+ gap: 0.625rem;
1470
+ }
1471
+
1472
+ .legend-section-title {
1473
+ font-size: 0.75rem;
1474
+ font-weight: 600;
1475
+ color: hsl(var(--muted-foreground));
1476
+ margin-bottom: 0.375rem;
1477
+ margin-top: 0.5rem;
1478
+ }
1479
+
1480
+ .legend-item {
1481
+ display: flex;
1482
+ align-items: center;
1483
+ gap: 0.625rem;
1484
+ padding: 0.375rem 0;
1485
+ font-size: 0.8125rem;
1486
+ color: hsl(var(--foreground));
1487
+ }
1488
+
1489
+ .legend-color {
1490
+ width: 12px;
1491
+ height: 12px;
1492
+ border-radius: 50%;
1493
+ flex-shrink: 0;
1494
+ }
1495
+
1496
+ /* Search Process View */
1497
+ .search-process-view {
1498
+ display: flex;
1499
+ flex-direction: column;
1500
+ width: 100%;
1501
+ height: 100%;
1502
+ gap: 1rem;
1503
+ padding: 1rem;
1504
+ overflow-y: auto;
1505
+ }
1506
+
1507
+ .search-process-header {
1508
+ text-align: center;
1509
+ padding: 1rem;
1510
+ }
1511
+
1512
+ .search-process-header h3 {
1513
+ font-size: 1rem;
1514
+ font-weight: 600;
1515
+ color: hsl(var(--foreground));
1516
+ margin: 0 0 0.5rem 0;
1517
+ }
1518
+
1519
+ .search-process-header p {
1520
+ font-size: 0.875rem;
1521
+ color: hsl(var(--muted-foreground));
1522
+ margin: 0;
1523
+ }
1524
+
1525
+ .search-empty-state {
1526
+ display: flex;
1527
+ flex-direction: column;
1528
+ align-items: center;
1529
+ justify-content: center;
1530
+ flex: 1;
1531
+ text-align: center;
1532
+ color: hsl(var(--muted-foreground));
1533
+ }
1534
+
1535
+ .search-empty-state i {
1536
+ margin-bottom: 1rem;
1537
+ opacity: 0.5;
1538
+ }
1539
+
1540
+ /* Search Process Empty State */
1541
+ .search-process-empty {
1542
+ display: flex;
1543
+ flex-direction: column;
1544
+ align-items: center;
1545
+ justify-content: center;
1546
+ width: 100%;
1547
+ height: 100%;
1548
+ text-align: center;
1549
+ color: hsl(var(--muted-foreground));
1550
+ padding: 2rem;
1551
+ }
1552
+
1553
+ .search-process-empty i {
1554
+ margin-bottom: 1rem;
1555
+ opacity: 0.5;
1556
+ }
1557
+
1558
+ .search-process-empty p {
1559
+ font-size: 0.875rem;
1560
+ margin: 0;
1561
+ }
1562
+
1563
+ /* Search Process Timeline */
1564
+ .search-process-timeline {
1565
+ display: flex;
1566
+ flex-direction: column;
1567
+ gap: 1rem;
1568
+ }
1569
+
1570
+ .search-step {
1571
+ display: flex;
1572
+ gap: 1rem;
1573
+ padding: 1rem;
1574
+ background: hsl(var(--card));
1575
+ border: 1px solid hsl(var(--border));
1576
+ border-radius: 0.5rem;
1577
+ }
1578
+
1579
+ .search-step-number {
1580
+ display: flex;
1581
+ align-items: center;
1582
+ justify-content: center;
1583
+ width: 32px;
1584
+ height: 32px;
1585
+ background: hsl(var(--primary));
1586
+ color: hsl(var(--primary-foreground));
1587
+ border-radius: 50%;
1588
+ font-weight: 600;
1589
+ font-size: 0.875rem;
1590
+ flex-shrink: 0;
1591
+ }
1592
+
1593
+ .search-step-content {
1594
+ flex: 1;
1595
+ }
1596
+
1597
+ .search-step-content h4 {
1598
+ font-size: 0.875rem;
1599
+ font-weight: 600;
1600
+ color: hsl(var(--foreground));
1601
+ margin: 0 0 0.25rem 0;
1602
+ }
1603
+
1604
+ .search-step-content p {
1605
+ font-size: 0.8125rem;
1606
+ color: hsl(var(--muted-foreground));
1607
+ margin: 0;
1608
+ }
1609
+
1610
+ .search-step-results {
1611
+ margin-top: 0.5rem;
1612
+ }
1613
+
1614
+ .result-count {
1615
+ font-size: 0.75rem;
1616
+ color: hsl(var(--primary));
1617
+ font-weight: 500;
1618
+ }
1619
+
1620
+ /* Cytoscape Container */
1621
+ .cytoscape-container {
1622
+ flex: 1;
1623
+ min-height: 400px;
1624
+ background: hsl(var(--card));
1625
+ border: 1px solid hsl(var(--border));
1626
+ border-radius: 0.5rem;
1627
+ position: relative;
1628
+ }
1629
+
1630
+ /* Cytoscape Empty State */
1631
+ .cytoscape-empty {
1632
+ display: flex;
1633
+ flex-direction: column;
1634
+ align-items: center;
1635
+ justify-content: center;
1636
+ width: 100%;
1637
+ height: 100%;
1638
+ min-height: 400px;
1639
+ text-align: center;
1640
+ color: hsl(var(--muted-foreground));
1641
+ }
1642
+
1643
+ .cytoscape-empty i {
1644
+ margin-bottom: 1rem;
1645
+ opacity: 0.5;
1646
+ }
1647
+
1648
+ .cytoscape-empty p {
1649
+ font-size: 0.875rem;
1650
+ margin: 0;
1651
+ }
1652
+
1653
+ /* Graph Empty State */
1654
+ .graph-empty-state {
1655
+ display: flex;
1656
+ flex-direction: column;
1657
+ align-items: center;
1658
+ justify-content: center;
1659
+ width: 100%;
1660
+ height: 100%;
1661
+ text-align: center;
1662
+ color: hsl(var(--muted-foreground));
1663
+ }
1664
+
1665
+ .graph-empty-state i {
1666
+ margin-bottom: 1rem;
1667
+ opacity: 0.5;
1668
+ }
1669
+
1670
+ .graph-empty-state p {
1671
+ font-size: 0.875rem;
1672
+ margin: 0;
1673
+ }
1674
+
1675
+ /* Hidden class */
1676
+ .hidden {
1677
+ display: none !important;
1678
+ }