claude-code-workflow 7.2.15 → 7.2.16

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 (526) hide show
  1. package/.ccw/workflows/cli-templates/schemas/team-tasks-schema.json +255 -0
  2. package/.codex/agents/team-supervisor.toml +39 -0
  3. package/.codex/agents/team-worker.toml +46 -0
  4. package/.codex/skills/team-arch-opt/SKILL.md +151 -698
  5. package/.codex/skills/team-arch-opt/roles/analyzer/role.md +78 -0
  6. package/.codex/skills/team-arch-opt/roles/coordinator/commands/analyze.md +57 -0
  7. package/.codex/skills/team-arch-opt/roles/coordinator/commands/dispatch.md +287 -0
  8. package/.codex/skills/team-arch-opt/roles/coordinator/commands/monitor.md +204 -0
  9. package/.codex/skills/team-arch-opt/roles/coordinator/role.md +162 -0
  10. package/.codex/skills/team-arch-opt/roles/designer/role.md +115 -0
  11. package/.codex/skills/team-arch-opt/roles/refactorer/role.md +102 -0
  12. package/.codex/skills/team-arch-opt/roles/reviewer/role.md +111 -0
  13. package/.codex/skills/team-arch-opt/roles/validator/role.md +115 -0
  14. package/.codex/skills/team-arch-opt/specs/pipelines.md +102 -0
  15. package/.codex/skills/team-arch-opt/specs/team-config.json +263 -0
  16. package/.codex/skills/team-brainstorm/SKILL.md +167 -724
  17. package/.codex/skills/team-brainstorm/roles/challenger/role.md +61 -0
  18. package/.codex/skills/team-brainstorm/roles/coordinator/commands/analyze.md +58 -0
  19. package/.codex/skills/team-brainstorm/roles/coordinator/commands/dispatch.md +162 -0
  20. package/.codex/skills/team-brainstorm/roles/coordinator/commands/monitor.md +171 -0
  21. package/.codex/skills/team-brainstorm/roles/coordinator/role.md +140 -0
  22. package/.codex/skills/team-brainstorm/roles/evaluator/role.md +56 -0
  23. package/.codex/skills/team-brainstorm/roles/ideator/role.md +69 -0
  24. package/.codex/skills/team-brainstorm/roles/synthesizer/role.md +57 -0
  25. package/.codex/skills/team-brainstorm/specs/pipelines.md +72 -0
  26. package/.codex/skills/team-brainstorm/specs/team-config.json +86 -0
  27. package/.codex/skills/team-coordinate/SKILL.md +267 -667
  28. package/.codex/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +247 -0
  29. package/.codex/skills/team-coordinate/roles/coordinator/commands/dispatch.md +126 -0
  30. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +327 -0
  31. package/.codex/skills/team-coordinate/roles/coordinator/role.md +361 -0
  32. package/.codex/skills/team-coordinate/specs/knowledge-transfer.md +111 -0
  33. package/.codex/skills/team-coordinate/specs/pipelines.md +97 -0
  34. package/.codex/skills/team-coordinate/specs/quality-gates.md +112 -0
  35. package/.codex/skills/team-coordinate/specs/role-spec-template.md +192 -0
  36. package/.codex/skills/team-designer/SKILL.md +153 -691
  37. package/.codex/skills/team-designer/phases/01-requirements-analysis.md +250 -0
  38. package/.codex/skills/team-designer/phases/02-scaffold-generation.md +228 -0
  39. package/.codex/skills/team-designer/phases/03-content-generation.md +330 -0
  40. package/.codex/skills/team-designer/phases/04-validation.md +320 -0
  41. package/.codex/skills/team-executor/SKILL.md +191 -515
  42. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +280 -0
  43. package/.codex/skills/team-executor/roles/executor/role.md +170 -0
  44. package/.codex/skills/team-executor/specs/session-schema.md +264 -0
  45. package/.codex/skills/team-frontend/SKILL.md +129 -750
  46. package/.codex/skills/team-frontend/roles/analyst/role.md +92 -0
  47. package/.codex/skills/team-frontend/roles/architect/role.md +86 -0
  48. package/.codex/skills/team-frontend/roles/coordinator/commands/analyze.md +52 -0
  49. package/.codex/skills/team-frontend/roles/coordinator/commands/dispatch.md +151 -0
  50. package/.codex/skills/team-frontend/roles/coordinator/commands/monitor.md +188 -0
  51. package/.codex/skills/team-frontend/roles/coordinator/role.md +157 -0
  52. package/.codex/skills/team-frontend/roles/developer/role.md +93 -0
  53. package/.codex/skills/team-frontend/roles/qa/role.md +79 -0
  54. package/.codex/skills/team-frontend/specs/pipelines.md +76 -0
  55. package/.codex/skills/team-frontend/specs/team-config.json +84 -0
  56. package/.codex/skills/team-frontend-debug/SKILL.md +191 -821
  57. package/.codex/skills/team-frontend-debug/roles/analyzer/role.md +208 -0
  58. package/.codex/skills/team-frontend-debug/roles/coordinator/commands/analyze.md +174 -0
  59. package/.codex/skills/team-frontend-debug/roles/coordinator/commands/dispatch.md +198 -0
  60. package/.codex/skills/team-frontend-debug/roles/coordinator/commands/monitor.md +143 -0
  61. package/.codex/skills/team-frontend-debug/roles/coordinator/role.md +131 -0
  62. package/.codex/skills/team-frontend-debug/roles/fixer/role.md +147 -0
  63. package/.codex/skills/team-frontend-debug/roles/reproducer/role.md +147 -0
  64. package/.codex/skills/team-frontend-debug/roles/tester/role.md +231 -0
  65. package/.codex/skills/team-frontend-debug/roles/verifier/role.md +172 -0
  66. package/.codex/skills/team-frontend-debug/specs/debug-tools.md +215 -0
  67. package/.codex/skills/team-frontend-debug/specs/pipelines.md +94 -0
  68. package/.codex/skills/team-issue/SKILL.md +166 -751
  69. package/.codex/skills/team-issue/roles/coordinator/commands/analyze.md +64 -0
  70. package/.codex/skills/team-issue/roles/coordinator/commands/dispatch.md +273 -0
  71. package/.codex/skills/team-issue/roles/coordinator/commands/monitor.md +194 -0
  72. package/.codex/skills/team-issue/roles/coordinator/role.md +175 -0
  73. package/.codex/skills/team-issue/roles/explorer/role.md +94 -0
  74. package/.codex/skills/team-issue/roles/implementer/role.md +87 -0
  75. package/.codex/skills/team-issue/roles/integrator/role.md +84 -0
  76. package/.codex/skills/team-issue/roles/planner/role.md +81 -0
  77. package/.codex/skills/team-issue/roles/reviewer/role.md +86 -0
  78. package/.codex/skills/team-issue/specs/pipelines.md +124 -0
  79. package/.codex/skills/team-issue/specs/team-config.json +70 -0
  80. package/.codex/skills/team-iterdev/SKILL.md +134 -825
  81. package/.codex/skills/team-iterdev/roles/architect/role.md +65 -0
  82. package/.codex/skills/team-iterdev/roles/coordinator/commands/analyze.md +62 -0
  83. package/.codex/skills/team-iterdev/roles/coordinator/commands/dispatch.md +187 -0
  84. package/.codex/skills/team-iterdev/roles/coordinator/commands/monitor.md +186 -0
  85. package/.codex/skills/team-iterdev/roles/coordinator/role.md +161 -0
  86. package/.codex/skills/team-iterdev/roles/developer/role.md +74 -0
  87. package/.codex/skills/team-iterdev/roles/reviewer/role.md +66 -0
  88. package/.codex/skills/team-iterdev/roles/tester/role.md +88 -0
  89. package/.codex/skills/team-iterdev/specs/pipelines.md +94 -0
  90. package/.codex/skills/team-iterdev/specs/team-config.json +172 -0
  91. package/.codex/skills/team-lifecycle-v4/MIGRATION-PLAN.md +512 -0
  92. package/.codex/skills/team-lifecycle-v4/SKILL.md +166 -723
  93. package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +104 -0
  94. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/analyze.md +56 -0
  95. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +61 -0
  96. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +177 -0
  97. package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +152 -0
  98. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/fix.md +35 -0
  99. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +63 -0
  100. package/.codex/skills/team-lifecycle-v4/roles/executor/role.md +89 -0
  101. package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +108 -0
  102. package/.codex/skills/team-lifecycle-v4/roles/reviewer/commands/review-code.md +57 -0
  103. package/.codex/skills/team-lifecycle-v4/roles/reviewer/commands/review-spec.md +44 -0
  104. package/.codex/skills/team-lifecycle-v4/roles/reviewer/role.md +98 -0
  105. package/.codex/skills/team-lifecycle-v4/roles/supervisor/role.md +210 -0
  106. package/.codex/skills/team-lifecycle-v4/roles/tester/role.md +126 -0
  107. package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +125 -0
  108. package/.codex/skills/team-lifecycle-v4/schemas/tasks-schema.md +82 -160
  109. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +136 -0
  110. package/.codex/skills/team-lifecycle-v4/specs/pipelines.md +125 -0
  111. package/.codex/skills/team-lifecycle-v4/specs/quality-gates.md +130 -0
  112. package/.codex/skills/team-perf-opt/SKILL.md +169 -697
  113. package/.codex/skills/team-perf-opt/roles/benchmarker/role.md +89 -0
  114. package/.codex/skills/team-perf-opt/roles/coordinator/commands/analyze.md +61 -0
  115. package/.codex/skills/team-perf-opt/roles/coordinator/commands/dispatch.md +262 -0
  116. package/.codex/skills/team-perf-opt/roles/coordinator/commands/monitor.md +320 -0
  117. package/.codex/skills/team-perf-opt/roles/coordinator/role.md +147 -0
  118. package/.codex/skills/team-perf-opt/roles/optimizer/role.md +97 -0
  119. package/.codex/skills/team-perf-opt/roles/profiler/role.md +73 -0
  120. package/.codex/skills/team-perf-opt/roles/reviewer/role.md +75 -0
  121. package/.codex/skills/team-perf-opt/roles/strategist/role.md +94 -0
  122. package/.codex/skills/team-perf-opt/specs/pipelines.md +65 -0
  123. package/.codex/skills/team-perf-opt/specs/team-config.json +246 -0
  124. package/.codex/skills/team-planex/SKILL.md +103 -477
  125. package/.codex/skills/team-planex/roles/coordinator/commands/analyze.md +52 -0
  126. package/.codex/skills/team-planex/roles/coordinator/commands/dispatch.md +80 -0
  127. package/.codex/skills/team-planex/roles/coordinator/commands/monitor.md +164 -0
  128. package/.codex/skills/team-planex/roles/coordinator/role.md +140 -0
  129. package/.codex/skills/team-planex/roles/executor/role.md +91 -0
  130. package/.codex/skills/team-planex/roles/planner/role.md +112 -0
  131. package/.codex/skills/team-planex/specs/pipelines.md +93 -0
  132. package/.codex/skills/team-quality-assurance/SKILL.md +148 -813
  133. package/.codex/skills/team-quality-assurance/roles/analyst/role.md +80 -0
  134. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/analyze.md +72 -0
  135. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +108 -0
  136. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +209 -0
  137. package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +143 -0
  138. package/.codex/skills/team-quality-assurance/roles/executor/role.md +66 -0
  139. package/.codex/skills/team-quality-assurance/roles/generator/role.md +68 -0
  140. package/.codex/skills/team-quality-assurance/roles/scout/role.md +67 -0
  141. package/.codex/skills/team-quality-assurance/roles/strategist/role.md +71 -0
  142. package/.codex/skills/team-quality-assurance/specs/pipelines.md +115 -0
  143. package/.codex/skills/team-quality-assurance/specs/team-config.json +131 -0
  144. package/.codex/skills/team-review/SKILL.md +148 -533
  145. package/.codex/skills/team-review/roles/coordinator/commands/analyze.md +71 -0
  146. package/.codex/skills/team-review/roles/coordinator/commands/dispatch.md +90 -0
  147. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +185 -0
  148. package/.codex/skills/team-review/roles/coordinator/role.md +142 -0
  149. package/.codex/skills/team-review/roles/fixer/role.md +76 -0
  150. package/.codex/skills/team-review/roles/reviewer/role.md +68 -0
  151. package/.codex/skills/team-review/roles/scanner/role.md +71 -0
  152. package/.codex/skills/team-review/specs/dimensions.md +82 -0
  153. package/.codex/skills/team-review/specs/finding-schema.json +82 -0
  154. package/.codex/skills/team-review/specs/pipelines.md +102 -0
  155. package/.codex/skills/team-review/specs/team-config.json +27 -0
  156. package/.codex/skills/team-roadmap-dev/SKILL.md +162 -683
  157. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/analyze.md +61 -0
  158. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/dispatch.md +241 -0
  159. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/monitor.md +468 -0
  160. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/pause.md +90 -0
  161. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/resume.md +137 -0
  162. package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/roadmap-discuss.md +243 -0
  163. package/.codex/skills/team-roadmap-dev/roles/coordinator/role.md +303 -0
  164. package/.codex/skills/team-roadmap-dev/roles/executor/role.md +71 -0
  165. package/.codex/skills/team-roadmap-dev/roles/planner/role.md +76 -0
  166. package/.codex/skills/team-roadmap-dev/roles/verifier/role.md +74 -0
  167. package/.codex/skills/team-roadmap-dev/specs/pipelines.md +93 -0
  168. package/.codex/skills/team-roadmap-dev/specs/team-config.json +95 -0
  169. package/.codex/skills/team-tech-debt/SKILL.md +129 -708
  170. package/.codex/skills/team-tech-debt/roles/assessor/role.md +69 -0
  171. package/.codex/skills/team-tech-debt/roles/coordinator/commands/analyze.md +47 -0
  172. package/.codex/skills/team-tech-debt/roles/coordinator/commands/dispatch.md +163 -0
  173. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +231 -0
  174. package/.codex/skills/team-tech-debt/roles/coordinator/role.md +141 -0
  175. package/.codex/skills/team-tech-debt/roles/executor/role.md +76 -0
  176. package/.codex/skills/team-tech-debt/roles/planner/role.md +69 -0
  177. package/.codex/skills/team-tech-debt/roles/scanner/role.md +82 -0
  178. package/.codex/skills/team-tech-debt/roles/validator/role.md +75 -0
  179. package/.codex/skills/team-tech-debt/specs/pipelines.md +47 -0
  180. package/.codex/skills/team-tech-debt/specs/team-config.json +129 -0
  181. package/.codex/skills/team-testing/SKILL.md +144 -769
  182. package/.codex/skills/team-testing/roles/analyst/role.md +95 -0
  183. package/.codex/skills/team-testing/roles/coordinator/commands/analyze.md +70 -0
  184. package/.codex/skills/team-testing/roles/coordinator/commands/dispatch.md +106 -0
  185. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +242 -0
  186. package/.codex/skills/team-testing/roles/coordinator/role.md +151 -0
  187. package/.codex/skills/team-testing/roles/executor/role.md +96 -0
  188. package/.codex/skills/team-testing/roles/generator/role.md +95 -0
  189. package/.codex/skills/team-testing/roles/strategist/role.md +83 -0
  190. package/.codex/skills/team-testing/specs/pipelines.md +101 -0
  191. package/.codex/skills/team-testing/specs/team-config.json +93 -0
  192. package/.codex/skills/team-uidesign/SKILL.md +133 -767
  193. package/.codex/skills/team-uidesign/roles/coordinator/commands/analyze.md +59 -0
  194. package/.codex/skills/team-uidesign/roles/coordinator/commands/dispatch.md +156 -0
  195. package/.codex/skills/team-uidesign/roles/coordinator/commands/monitor.md +194 -0
  196. package/.codex/skills/team-uidesign/roles/coordinator/role.md +179 -0
  197. package/.codex/skills/team-uidesign/roles/designer/role.md +69 -0
  198. package/.codex/skills/team-uidesign/roles/implementer/role.md +72 -0
  199. package/.codex/skills/team-uidesign/roles/researcher/role.md +82 -0
  200. package/.codex/skills/team-uidesign/roles/reviewer/role.md +67 -0
  201. package/.codex/skills/team-uidesign/specs/pipelines.md +76 -0
  202. package/.codex/skills/team-uidesign/specs/team-config.json +107 -0
  203. package/.codex/skills/team-ultra-analyze/SKILL.md +166 -786
  204. package/.codex/skills/team-ultra-analyze/roles/analyst/role.md +90 -0
  205. package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/analyze.md +73 -0
  206. package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/dispatch.md +225 -0
  207. package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/monitor.md +327 -0
  208. package/.codex/skills/team-ultra-analyze/roles/coordinator/role.md +223 -0
  209. package/.codex/skills/team-ultra-analyze/roles/discussant/role.md +104 -0
  210. package/.codex/skills/team-ultra-analyze/roles/explorer/role.md +74 -0
  211. package/.codex/skills/team-ultra-analyze/roles/synthesizer/role.md +78 -0
  212. package/.codex/skills/team-ultra-analyze/specs/pipelines.md +64 -0
  213. package/.codex/skills/team-ultra-analyze/specs/team-config.json +129 -0
  214. package/.codex/skills/team-ux-improve/SKILL.md +142 -638
  215. package/.codex/skills/team-ux-improve/roles/coordinator/commands/analyze.md +62 -0
  216. package/.codex/skills/team-ux-improve/roles/coordinator/commands/dispatch.md +233 -0
  217. package/.codex/skills/team-ux-improve/roles/coordinator/commands/monitor.md +160 -0
  218. package/.codex/skills/team-ux-improve/roles/coordinator/role.md +138 -0
  219. package/.codex/skills/team-ux-improve/roles/designer/role.md +122 -0
  220. package/.codex/skills/team-ux-improve/roles/diagnoser/role.md +93 -0
  221. package/.codex/skills/team-ux-improve/roles/explorer/role.md +77 -0
  222. package/.codex/skills/team-ux-improve/roles/implementer/role.md +102 -0
  223. package/.codex/skills/team-ux-improve/roles/scanner/role.md +93 -0
  224. package/.codex/skills/team-ux-improve/roles/tester/role.md +84 -0
  225. package/.codex/skills/team-ux-improve/specs/pipelines.md +54 -0
  226. package/.codex/skills/team-ux-improve/specs/team-config.json +181 -0
  227. package/.codex/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +17 -0
  228. package/.codex/skills/team-ux-improve/wisdom/contributions/.gitkeep +0 -0
  229. package/.codex/skills/team-ux-improve/wisdom/patterns/state-management.md +14 -0
  230. package/.codex/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +16 -0
  231. package/.codex/skills/team-ux-improve/wisdom/principles/general-ux.md +16 -0
  232. package/ccw/dist/core/routes/cli-settings-routes.d.ts.map +1 -1
  233. package/ccw/dist/core/routes/cli-settings-routes.js +135 -133
  234. package/ccw/dist/core/routes/cli-settings-routes.js.map +1 -1
  235. package/ccw/frontend/dist/assets/{AlertDialog-BW9jiZ-p.js → AlertDialog-CnpjWAGm.js} +2 -2
  236. package/ccw/frontend/dist/assets/{AlertDialog-BW9jiZ-p.js.map → AlertDialog-CnpjWAGm.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{AnalysisPage-ds-w_nVO.js → AnalysisPage-BT2rDDUD.js} +2 -2
  238. package/ccw/frontend/dist/assets/{AnalysisPage-ds-w_nVO.js.map → AnalysisPage-BT2rDDUD.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{ApiSettingsPage-DlCbXxTz.js → ApiSettingsPage-DGpjiNVu.js} +2 -2
  240. package/ccw/frontend/dist/assets/{ApiSettingsPage-DlCbXxTz.js.map → ApiSettingsPage-DGpjiNVu.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{CliModeToggle-Dq3nL4fF.js → CliModeToggle-BqUadHn3.js} +2 -2
  242. package/ccw/frontend/dist/assets/{CliModeToggle-Dq3nL4fF.js.map → CliModeToggle-BqUadHn3.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{CliSessionSharePage-BNDkEE4u.js → CliSessionSharePage-C3AdsDkm.js} +2 -2
  244. package/ccw/frontend/dist/assets/{CliSessionSharePage-BNDkEE4u.js.map → CliSessionSharePage-C3AdsDkm.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{CliViewerPage-ChM-uNx_.js → CliViewerPage-BZXpgY0N.js} +2 -2
  246. package/ccw/frontend/dist/assets/{CliViewerPage-ChM-uNx_.js.map → CliViewerPage-BZXpgY0N.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{CodexLensPage-DOcsYNQk.js → CodexLensPage-CePoJz-u.js} +2 -2
  248. package/ccw/frontend/dist/assets/{CodexLensPage-DOcsYNQk.js.map → CodexLensPage-CePoJz-u.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{Collapsible-CRNbykXN.js → Collapsible-DXVzWwmb.js} +2 -2
  250. package/ccw/frontend/dist/assets/{Collapsible-CRNbykXN.js.map → Collapsible-DXVzWwmb.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{CommandsManagerPage-C2JWcemF.js → CommandsManagerPage-B6wJYF0z.js} +2 -2
  252. package/ccw/frontend/dist/assets/{CommandsManagerPage-C2JWcemF.js.map → CommandsManagerPage-B6wJYF0z.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{DeepWikiPage-CvleOtJy.js → DeepWikiPage-D55fcvSk.js} +2 -2
  254. package/ccw/frontend/dist/assets/{DeepWikiPage-CvleOtJy.js.map → DeepWikiPage-D55fcvSk.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{EndpointsPage-CMOWQG64.js → EndpointsPage-DcGziJ5t.js} +2 -2
  256. package/ccw/frontend/dist/assets/{EndpointsPage-CMOWQG64.js.map → EndpointsPage-DcGziJ5t.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{ExplorerPage-DaFPRlNo.js → ExplorerPage-C4eKzn7F.js} +2 -2
  258. package/ccw/frontend/dist/assets/{ExplorerPage-DaFPRlNo.js.map → ExplorerPage-C4eKzn7F.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{FixSessionPage-CC4p04Az.js → FixSessionPage-BUHh954A.js} +2 -2
  260. package/ccw/frontend/dist/assets/{FixSessionPage-CC4p04Az.js.map → FixSessionPage-BUHh954A.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{FloatingFileBrowser-DROn1xZ5.js → FloatingFileBrowser-C3GF_u1C.js} +2 -2
  262. package/ccw/frontend/dist/assets/{FloatingFileBrowser-DROn1xZ5.js.map → FloatingFileBrowser-C3GF_u1C.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{FloatingPanel-CmL_yhDv.js → FloatingPanel-Cn-q9PyJ.js} +2 -2
  264. package/ccw/frontend/dist/assets/{FloatingPanel-CmL_yhDv.js.map → FloatingPanel-Cn-q9PyJ.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{GraphExplorerPage-DCV5ybKE.js → GraphExplorerPage-DIpqgvoU.js} +2 -2
  266. package/ccw/frontend/dist/assets/{GraphExplorerPage-DCV5ybKE.js.map → GraphExplorerPage-DIpqgvoU.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{HistoryPage-D0fYQZgc.js → HistoryPage-DzSvEAFe.js} +2 -2
  268. package/ccw/frontend/dist/assets/{HistoryPage-D0fYQZgc.js.map → HistoryPage-DzSvEAFe.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{HookManagerPage-D2FuJfsM.js → HookManagerPage-C6LDhWrH.js} +2 -2
  270. package/ccw/frontend/dist/assets/{HookManagerPage-D2FuJfsM.js.map → HookManagerPage-C6LDhWrH.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{InstallationsPage-tjklillZ.js → InstallationsPage-D9ct9xFV.js} +2 -2
  272. package/ccw/frontend/dist/assets/{InstallationsPage-tjklillZ.js.map → InstallationsPage-D9ct9xFV.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{IssueHubPage-E4JVrhO1.js → IssueHubPage-CXgDC8pS.js} +2 -2
  274. package/ccw/frontend/dist/assets/{IssueHubPage-E4JVrhO1.js.map → IssueHubPage-CXgDC8pS.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{LiteTasksPage-aJuRoyLt.js → LiteTasksPage-DMkauCwG.js} +2 -2
  276. package/ccw/frontend/dist/assets/{LiteTasksPage-aJuRoyLt.js.map → LiteTasksPage-DMkauCwG.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{McpManagerPage-BJeuWJv1.js → McpManagerPage-DhLDydgc.js} +2 -2
  278. package/ccw/frontend/dist/assets/{McpManagerPage-BJeuWJv1.js.map → McpManagerPage-DhLDydgc.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{MemoryPage-BI4FAXhs.js → MemoryPage-Be3nhq40.js} +2 -2
  280. package/ccw/frontend/dist/assets/{MemoryPage-BI4FAXhs.js.map → MemoryPage-Be3nhq40.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{NotFoundPage-DD2svchp.js → NotFoundPage-0yGnCePd.js} +2 -2
  282. package/ccw/frontend/dist/assets/{NotFoundPage-DD2svchp.js.map → NotFoundPage-0yGnCePd.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{OrchestratorPage-FC__7yYa.js → OrchestratorPage-_SmXZcGl.js} +2 -2
  284. package/ccw/frontend/dist/assets/{OrchestratorPage-FC__7yYa.js.map → OrchestratorPage-_SmXZcGl.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/{ProjectOverviewPage-DBB_-FzV.js → ProjectOverviewPage-BeXTMsdo.js} +2 -2
  286. package/ccw/frontend/dist/assets/{ProjectOverviewPage-DBB_-FzV.js.map → ProjectOverviewPage-BeXTMsdo.js.map} +1 -1
  287. package/ccw/frontend/dist/assets/{PromptHistoryPage-BwOAvCH8.js → PromptHistoryPage-DS6ycuAv.js} +2 -2
  288. package/ccw/frontend/dist/assets/{PromptHistoryPage-BwOAvCH8.js.map → PromptHistoryPage-DS6ycuAv.js.map} +1 -1
  289. package/ccw/frontend/dist/assets/{ReviewSessionPage-Dd1-g_gp.js → ReviewSessionPage-BoqyjhPo.js} +2 -2
  290. package/ccw/frontend/dist/assets/{ReviewSessionPage-Dd1-g_gp.js.map → ReviewSessionPage-BoqyjhPo.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{RulesManagerPage-B3RGdsKD.js → RulesManagerPage-DMAwkKlc.js} +2 -2
  292. package/ccw/frontend/dist/assets/{RulesManagerPage-B3RGdsKD.js.map → RulesManagerPage-DMAwkKlc.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{SessionDetailPage-DM-W5R8K.js → SessionDetailPage-BgJRHIF4.js} +2 -2
  294. package/ccw/frontend/dist/assets/{SessionDetailPage-DM-W5R8K.js.map → SessionDetailPage-BgJRHIF4.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{SessionsPage-BVz1KCc7.js → SessionsPage-DBPdWlji.js} +2 -2
  296. package/ccw/frontend/dist/assets/{SessionsPage-BVz1KCc7.js.map → SessionsPage-DBPdWlji.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{SettingsPage-ComW7EZS.js → SettingsPage-BY3QiJhm.js} +4 -4
  298. package/ccw/frontend/dist/assets/{SettingsPage-ComW7EZS.js.map → SettingsPage-BY3QiJhm.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{SkillsManagerPage-CKom9XwV.js → SkillsManagerPage-DS101Adm.js} +2 -2
  300. package/ccw/frontend/dist/assets/{SkillsManagerPage-CKom9XwV.js.map → SkillsManagerPage-DS101Adm.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DQz7WP2s.js → SpecsSettingsPage-BcsLu1qq.js} +2 -2
  302. package/ccw/frontend/dist/assets/{SpecsSettingsPage-DQz7WP2s.js.map → SpecsSettingsPage-BcsLu1qq.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{Switch-BPMdND9H.js → Switch-BL9AmNPC.js} +2 -2
  304. package/ccw/frontend/dist/assets/{Switch-BPMdND9H.js.map → Switch-BL9AmNPC.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{TabsNavigation-qqt70VYL.js → TabsNavigation-BUcjsLeE.js} +2 -2
  306. package/ccw/frontend/dist/assets/{TabsNavigation-qqt70VYL.js.map → TabsNavigation-BUcjsLeE.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{TaskDrawer-BqK_qiHX.js → TaskDrawer-BNvfS6dq.js} +2 -2
  308. package/ccw/frontend/dist/assets/{TaskDrawer-BqK_qiHX.js.map → TaskDrawer-BNvfS6dq.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{TeamPage-u5_i0Rgh.js → TeamPage-CT-zNCrF.js} +2 -2
  310. package/ccw/frontend/dist/assets/{TeamPage-u5_i0Rgh.js.map → TeamPage-CT-zNCrF.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{TerminalDashboardPage-rUtC9e40.js → TerminalDashboardPage-DfZFGs8g.js} +2 -2
  312. package/ccw/frontend/dist/assets/{TerminalDashboardPage-rUtC9e40.js.map → TerminalDashboardPage-DfZFGs8g.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{archive-C3u8YNQF.js → archive-Cev1SaQq.js} +2 -2
  314. package/ccw/frontend/dist/assets/{archive-C3u8YNQF.js.map → archive-Cev1SaQq.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{archive-restore-DfQ998g5.js → archive-restore-BIVluaHZ.js} +2 -2
  316. package/ccw/frontend/dist/assets/{archive-restore-DfQ998g5.js.map → archive-restore-BIVluaHZ.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{arrow-right-BshJM9Po.js → arrow-right-DrivbS5j.js} +2 -2
  318. package/ccw/frontend/dist/assets/{arrow-right-BshJM9Po.js.map → arrow-right-DrivbS5j.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{bookmark-plus-D03qJyOZ.js → bookmark-plus-DKyzL0Xg.js} +2 -2
  320. package/ccw/frontend/dist/assets/{bookmark-plus-D03qJyOZ.js.map → bookmark-plus-DKyzL0Xg.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{bot-CyzWuwq0.js → bot-GBUkPAe3.js} +2 -2
  322. package/ccw/frontend/dist/assets/{bot-CyzWuwq0.js.map → bot-GBUkPAe3.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{braces-BPgtyjsG.js → braces-BWhm2c4g.js} +2 -2
  324. package/ccw/frontend/dist/assets/{braces-BPgtyjsG.js.map → braces-BWhm2c4g.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{circle-stop-Dix1AOmw.js → circle-stop-CBcZSKNp.js} +2 -2
  326. package/ccw/frontend/dist/assets/{circle-stop-Dix1AOmw.js.map → circle-stop-CBcZSKNp.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{cpu-CCQ4Q0Zh.js → cpu-CzNmuTZD.js} +2 -2
  328. package/ccw/frontend/dist/assets/{cpu-CCQ4Q0Zh.js.map → cpu-CzNmuTZD.js.map} +1 -1
  329. package/ccw/frontend/dist/assets/{ellipsis-vertical-BpTysg-Y.js → ellipsis-vertical-BoIyQKaI.js} +2 -2
  330. package/ccw/frontend/dist/assets/{ellipsis-vertical-BpTysg-Y.js.map → ellipsis-vertical-BoIyQKaI.js.map} +1 -1
  331. package/ccw/frontend/dist/assets/{eye-DGY1rAZs.js → eye-BqxyhxQq.js} +2 -2
  332. package/ccw/frontend/dist/assets/{eye-DGY1rAZs.js.map → eye-BqxyhxQq.js.map} +1 -1
  333. package/ccw/frontend/dist/assets/{eye-off-D8t3JfWG.js → eye-off-D9dTZP1A.js} +2 -2
  334. package/ccw/frontend/dist/assets/{eye-off-D8t3JfWG.js.map → eye-off-D9dTZP1A.js.map} +1 -1
  335. package/ccw/frontend/dist/assets/{file-json-BAdJb0n8.js → file-json-CLYEUI6e.js} +2 -2
  336. package/ccw/frontend/dist/assets/{file-json-BAdJb0n8.js.map → file-json-CLYEUI6e.js.map} +1 -1
  337. package/ccw/frontend/dist/assets/{file-text-DrJFiOUB.js → file-text-D5j9C5XC.js} +2 -2
  338. package/ccw/frontend/dist/assets/{file-text-DrJFiOUB.js.map → file-text-D5j9C5XC.js.map} +1 -1
  339. package/ccw/frontend/dist/assets/{filter-CKqzYbz7.js → filter-CEUK5jsA.js} +2 -2
  340. package/ccw/frontend/dist/assets/{filter-CKqzYbz7.js.map → filter-CEUK5jsA.js.map} +1 -1
  341. package/ccw/frontend/dist/assets/{folder-CV8511y9.js → folder-BEOY8txM.js} +2 -2
  342. package/ccw/frontend/dist/assets/{folder-CV8511y9.js.map → folder-BEOY8txM.js.map} +1 -1
  343. package/ccw/frontend/dist/assets/{gauge-XKvmu_uU.js → gauge-CbumHmVn.js} +2 -2
  344. package/ccw/frontend/dist/assets/{gauge-XKvmu_uU.js.map → gauge-CbumHmVn.js.map} +1 -1
  345. package/ccw/frontend/dist/assets/{globe-C56cDUzX.js → globe-D8_IB9gV.js} +2 -2
  346. package/ccw/frontend/dist/assets/{globe-C56cDUzX.js.map → globe-D8_IB9gV.js.map} +1 -1
  347. package/ccw/frontend/dist/assets/{grid-3x3-Bya-suFW.js → grid-3x3-BpzWmYF5.js} +2 -2
  348. package/ccw/frontend/dist/assets/{grid-3x3-Bya-suFW.js.map → grid-3x3-BpzWmYF5.js.map} +1 -1
  349. package/ccw/frontend/dist/assets/{hard-drive-CmuTZpsB.js → hard-drive-QIHpGln7.js} +2 -2
  350. package/ccw/frontend/dist/assets/{hard-drive-CmuTZpsB.js.map → hard-drive-QIHpGln7.js.map} +1 -1
  351. package/ccw/frontend/dist/assets/{hash-CRPT_tJQ.js → hash-CP0YRHVs.js} +2 -2
  352. package/ccw/frontend/dist/assets/{hash-CRPT_tJQ.js.map → hash-CP0YRHVs.js.map} +1 -1
  353. package/ccw/frontend/dist/assets/{history-C1pJZQCL.js → history-hOjgVKax.js} +2 -2
  354. package/ccw/frontend/dist/assets/{history-C1pJZQCL.js.map → history-hOjgVKax.js.map} +1 -1
  355. package/ccw/frontend/dist/assets/{index-Dmt9OiEf.js → index-B_ysvdnP.js} +2 -2
  356. package/ccw/frontend/dist/assets/{index-Dmt9OiEf.js.map → index-B_ysvdnP.js.map} +1 -1
  357. package/ccw/frontend/dist/assets/{index-dWT2M6Ef.js → index-C5Oqx2xI.js} +3 -3
  358. package/ccw/frontend/dist/assets/{index-dWT2M6Ef.js.map → index-C5Oqx2xI.js.map} +1 -1
  359. package/ccw/frontend/dist/assets/{index-CI8-rBff.js → index-CJi0bWL-.js} +2 -2
  360. package/ccw/frontend/dist/assets/{index-CI8-rBff.js.map → index-CJi0bWL-.js.map} +1 -1
  361. package/ccw/frontend/dist/assets/{index-anSMmEF8.js → index-CdQpo1x0.js} +2 -2
  362. package/ccw/frontend/dist/assets/{index-anSMmEF8.js.map → index-CdQpo1x0.js.map} +1 -1
  363. package/ccw/frontend/dist/assets/{layout-grid-TSO0BFQE.js → layout-grid-C38fQyLs.js} +2 -2
  364. package/ccw/frontend/dist/assets/{layout-grid-TSO0BFQE.js.map → layout-grid-C38fQyLs.js.map} +1 -1
  365. package/ccw/frontend/dist/assets/{lightbulb-Caj6fIQD.js → lightbulb-CClbCUzu.js} +2 -2
  366. package/ccw/frontend/dist/assets/{lightbulb-Caj6fIQD.js.map → lightbulb-CClbCUzu.js.map} +1 -1
  367. package/ccw/frontend/dist/assets/{link-2-DE9lMxa-.js → link-2-CB-LKbI0.js} +2 -2
  368. package/ccw/frontend/dist/assets/{link-2-DE9lMxa-.js.map → link-2-CB-LKbI0.js.map} +1 -1
  369. package/ccw/frontend/dist/assets/{link-BZtPgLW0.js → link-BK6SBzHS.js} +2 -2
  370. package/ccw/frontend/dist/assets/{link-BZtPgLW0.js.map → link-BK6SBzHS.js.map} +1 -1
  371. package/ccw/frontend/dist/assets/{list-DubWyY-U.js → list-BME_WOA_.js} +2 -2
  372. package/ccw/frontend/dist/assets/{list-DubWyY-U.js.map → list-BME_WOA_.js.map} +1 -1
  373. package/ccw/frontend/dist/assets/{map-pin-DwN_48AF.js → map-pin-ADsnCyjJ.js} +2 -2
  374. package/ccw/frontend/dist/assets/{map-pin-DwN_48AF.js.map → map-pin-ADsnCyjJ.js.map} +1 -1
  375. package/ccw/frontend/dist/assets/{messages-square-bjxvaiM9.js → messages-square-CLflB1Cq.js} +2 -2
  376. package/ccw/frontend/dist/assets/{messages-square-bjxvaiM9.js.map → messages-square-CLflB1Cq.js.map} +1 -1
  377. package/ccw/frontend/dist/assets/{minimize-2-CGfBKD_V.js → minimize-2-B3ZNzfGr.js} +2 -2
  378. package/ccw/frontend/dist/assets/{minimize-2-CGfBKD_V.js.map → minimize-2-B3ZNzfGr.js.map} +1 -1
  379. package/ccw/frontend/dist/assets/{package-nzWY6ilt.js → package-CByPhtMG.js} +2 -2
  380. package/ccw/frontend/dist/assets/{package-nzWY6ilt.js.map → package-CByPhtMG.js.map} +1 -1
  381. package/ccw/frontend/dist/assets/{plug-CiLce49C.js → plug-BggRzPX9.js} +2 -2
  382. package/ccw/frontend/dist/assets/{plug-CiLce49C.js.map → plug-BggRzPX9.js.map} +1 -1
  383. package/ccw/frontend/dist/assets/{power-CFLmB-U9.js → power-CWuxQSJK.js} +2 -2
  384. package/ccw/frontend/dist/assets/{power-CFLmB-U9.js.map → power-CWuxQSJK.js.map} +1 -1
  385. package/ccw/frontend/dist/assets/{save-DuO6OF0C.js → save-BdJ6EX4Q.js} +2 -2
  386. package/ccw/frontend/dist/assets/{save-DuO6OF0C.js.map → save-BdJ6EX4Q.js.map} +1 -1
  387. package/ccw/frontend/dist/assets/{send-CZk9p0mM.js → send-Ce9wuY7Q.js} +2 -2
  388. package/ccw/frontend/dist/assets/{send-CZk9p0mM.js.map → send-Ce9wuY7Q.js.map} +1 -1
  389. package/ccw/frontend/dist/assets/{square-check-big-BY_1YQQg.js → square-check-big-D6jItkfw.js} +2 -2
  390. package/ccw/frontend/dist/assets/{square-check-big-BY_1YQQg.js.map → square-check-big-D6jItkfw.js.map} +1 -1
  391. package/ccw/frontend/dist/assets/{square-pen-CnZgm6g-.js → square-pen-Byxq21zp.js} +2 -2
  392. package/ccw/frontend/dist/assets/{square-pen-CnZgm6g-.js.map → square-pen-Byxq21zp.js.map} +1 -1
  393. package/ccw/frontend/dist/assets/{star-Cn1F0qy7.js → star-Codj9dvK.js} +2 -2
  394. package/ccw/frontend/dist/assets/{star-Cn1F0qy7.js.map → star-Codj9dvK.js.map} +1 -1
  395. package/ccw/frontend/dist/assets/{style-Dxs1iXCV.js → style-4bYpUGcc.js} +2 -2
  396. package/ccw/frontend/dist/assets/{style-Dxs1iXCV.js.map → style-4bYpUGcc.js.map} +1 -1
  397. package/ccw/frontend/dist/assets/{target-Bz1fLRKH.js → target-DKBoDNCn.js} +2 -2
  398. package/ccw/frontend/dist/assets/{target-Bz1fLRKH.js.map → target-DKBoDNCn.js.map} +1 -1
  399. package/ccw/frontend/dist/assets/{test-tube-C6qCYlDr.js → test-tube-DTqZcBtA.js} +2 -2
  400. package/ccw/frontend/dist/assets/{test-tube-C6qCYlDr.js.map → test-tube-DTqZcBtA.js.map} +1 -1
  401. package/ccw/frontend/dist/assets/{upload-C71kd4Qs.js → upload-DlUl-e6b.js} +2 -2
  402. package/ccw/frontend/dist/assets/{upload-C71kd4Qs.js.map → upload-DlUl-e6b.js.map} +1 -1
  403. package/ccw/frontend/dist/assets/{useApiSettings-CqP2BAJ7.js → useApiSettings-D4zhKKT-.js} +2 -2
  404. package/ccw/frontend/dist/assets/{useApiSettings-CqP2BAJ7.js.map → useApiSettings-D4zhKKT-.js.map} +1 -1
  405. package/ccw/frontend/dist/assets/{useCli-PCoPoVeM.js → useCli-D-qDwsAH.js} +2 -2
  406. package/ccw/frontend/dist/assets/{useCli-PCoPoVeM.js.map → useCli-D-qDwsAH.js.map} +1 -1
  407. package/ccw/frontend/dist/assets/{useCommands-3OfPQPw4.js → useCommands-B0sidbbW.js} +2 -2
  408. package/ccw/frontend/dist/assets/{useCommands-3OfPQPw4.js.map → useCommands-B0sidbbW.js.map} +1 -1
  409. package/ccw/frontend/dist/assets/{useDebounce-bXiFhQx9.js → useDebounce-eTtbKevt.js} +2 -2
  410. package/ccw/frontend/dist/assets/{useDebounce-bXiFhQx9.js.map → useDebounce-eTtbKevt.js.map} +1 -1
  411. package/ccw/frontend/dist/assets/{useFileExplorer-DEyUm46_.js → useFileExplorer-MGSK0h33.js} +2 -2
  412. package/ccw/frontend/dist/assets/{useFileExplorer-DEyUm46_.js.map → useFileExplorer-MGSK0h33.js.map} +1 -1
  413. package/ccw/frontend/dist/assets/{useLocale-sXTrdxcJ.js → useLocale-DDNxU7pJ.js} +2 -2
  414. package/ccw/frontend/dist/assets/{useLocale-sXTrdxcJ.js.map → useLocale-DDNxU7pJ.js.map} +1 -1
  415. package/ccw/frontend/dist/assets/{useSkills-D0W0kXYm.js → useSkills-CZCRBtMY.js} +3 -3
  416. package/ccw/frontend/dist/assets/{useSkills-D0W0kXYm.js.map → useSkills-CZCRBtMY.js.map} +1 -1
  417. package/ccw/frontend/dist/assets/{useSystemSettings-DZ-8lZsG.js → useSystemSettings-DfQEFXSD.js} +2 -2
  418. package/ccw/frontend/dist/assets/{useSystemSettings-DZ-8lZsG.js.map → useSystemSettings-DfQEFXSD.js.map} +1 -1
  419. package/ccw/frontend/dist/assets/{wand-sparkles-83GmAYuw.js → wand-sparkles-DCLvfgl1.js} +2 -2
  420. package/ccw/frontend/dist/assets/{wand-sparkles-83GmAYuw.js.map → wand-sparkles-DCLvfgl1.js.map} +1 -1
  421. package/ccw/frontend/dist/index.html +1 -1
  422. package/package.json +1 -1
  423. package/.codex/skills/team-arch-opt/agents/completion-handler.md +0 -138
  424. package/.codex/skills/team-arch-opt/agents/fix-cycle-handler.md +0 -146
  425. package/.codex/skills/team-arch-opt/agents/plan-reviewer.md +0 -150
  426. package/.codex/skills/team-arch-opt/instructions/agent-instruction.md +0 -114
  427. package/.codex/skills/team-arch-opt/schemas/tasks-schema.md +0 -174
  428. package/.codex/skills/team-brainstorm/agents/gc-controller.md +0 -122
  429. package/.codex/skills/team-brainstorm/agents/topic-clarifier.md +0 -126
  430. package/.codex/skills/team-brainstorm/instructions/agent-instruction.md +0 -105
  431. package/.codex/skills/team-brainstorm/schemas/tasks-schema.md +0 -171
  432. package/.codex/skills/team-coordinate/agents/completion-handler.md +0 -127
  433. package/.codex/skills/team-coordinate/agents/plan-reviewer.md +0 -145
  434. package/.codex/skills/team-coordinate/instructions/agent-instruction.md +0 -184
  435. package/.codex/skills/team-coordinate/schemas/tasks-schema.md +0 -165
  436. package/.codex/skills/team-designer/agents/requirement-clarifier.md +0 -247
  437. package/.codex/skills/team-designer/agents/validation-reporter.md +0 -186
  438. package/.codex/skills/team-designer/instructions/agent-instruction.md +0 -163
  439. package/.codex/skills/team-designer/schemas/tasks-schema.md +0 -180
  440. package/.codex/skills/team-executor/instructions/agent-instruction.md +0 -62
  441. package/.codex/skills/team-executor/schemas/tasks-schema.md +0 -141
  442. package/.codex/skills/team-frontend/agents/completion-handler.md +0 -131
  443. package/.codex/skills/team-frontend/agents/qa-gate-reviewer.md +0 -153
  444. package/.codex/skills/team-frontend/instructions/agent-instruction.md +0 -197
  445. package/.codex/skills/team-frontend/schemas/tasks-schema.md +0 -188
  446. package/.codex/skills/team-frontend-debug/agents/completion-handler.md +0 -142
  447. package/.codex/skills/team-frontend-debug/agents/conditional-skip-gate.md +0 -130
  448. package/.codex/skills/team-frontend-debug/agents/iteration-handler.md +0 -120
  449. package/.codex/skills/team-frontend-debug/instructions/agent-instruction.md +0 -272
  450. package/.codex/skills/team-frontend-debug/schemas/tasks-schema.md +0 -198
  451. package/.codex/skills/team-issue/agents/reviewer.md +0 -204
  452. package/.codex/skills/team-issue/instructions/agent-instruction.md +0 -198
  453. package/.codex/skills/team-issue/schemas/tasks-schema.md +0 -198
  454. package/.codex/skills/team-iterdev/agents/gc-controller.md +0 -193
  455. package/.codex/skills/team-iterdev/agents/task-analyzer.md +0 -206
  456. package/.codex/skills/team-iterdev/instructions/agent-instruction.md +0 -118
  457. package/.codex/skills/team-iterdev/schemas/tasks-schema.md +0 -174
  458. package/.codex/skills/team-lifecycle/SKILL.md +0 -906
  459. package/.codex/skills/team-lifecycle/agents/analyst.md +0 -424
  460. package/.codex/skills/team-lifecycle/agents/architect.md +0 -274
  461. package/.codex/skills/team-lifecycle/agents/discuss-agent.md +0 -422
  462. package/.codex/skills/team-lifecycle/agents/executor.md +0 -423
  463. package/.codex/skills/team-lifecycle/agents/explore-agent.md +0 -471
  464. package/.codex/skills/team-lifecycle/agents/fe-developer.md +0 -239
  465. package/.codex/skills/team-lifecycle/agents/fe-qa.md +0 -357
  466. package/.codex/skills/team-lifecycle/agents/planner.md +0 -437
  467. package/.codex/skills/team-lifecycle/agents/reviewer.md +0 -483
  468. package/.codex/skills/team-lifecycle/agents/tester.md +0 -423
  469. package/.codex/skills/team-lifecycle/agents/writer.md +0 -502
  470. package/.codex/skills/team-lifecycle/phases/01-requirement-clarification.md +0 -209
  471. package/.codex/skills/team-lifecycle/phases/02-team-initialization.md +0 -263
  472. package/.codex/skills/team-lifecycle/phases/03-task-chain-creation.md +0 -251
  473. package/.codex/skills/team-lifecycle/phases/04-pipeline-coordination.md +0 -831
  474. package/.codex/skills/team-lifecycle/phases/05-completion-report.md +0 -309
  475. package/.codex/skills/team-lifecycle/specs/document-standards.md +0 -192
  476. package/.codex/skills/team-lifecycle/specs/quality-gates.md +0 -207
  477. package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +0 -165
  478. package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +0 -163
  479. package/.codex/skills/team-lifecycle-v4/agents/supervisor.md +0 -182
  480. package/.codex/skills/team-perf-opt/agents/completion-handler.md +0 -141
  481. package/.codex/skills/team-perf-opt/agents/fix-cycle-handler.md +0 -156
  482. package/.codex/skills/team-perf-opt/agents/plan-reviewer.md +0 -150
  483. package/.codex/skills/team-perf-opt/instructions/agent-instruction.md +0 -122
  484. package/.codex/skills/team-perf-opt/schemas/tasks-schema.md +0 -174
  485. package/.codex/skills/team-planex/instructions/agent-instruction.md +0 -301
  486. package/.codex/skills/team-planex/schemas/tasks-schema.md +0 -198
  487. package/.codex/skills/team-planex-v2/SKILL.md +0 -652
  488. package/.codex/skills/team-planex-v2/instructions/agent-instruction.md +0 -193
  489. package/.codex/skills/team-planex-v2/schemas/tasks-schema.md +0 -206
  490. package/.codex/skills/team-quality-assurance/agents/executor.md +0 -192
  491. package/.codex/skills/team-quality-assurance/agents/gc-loop-handler.md +0 -163
  492. package/.codex/skills/team-quality-assurance/instructions/agent-instruction.md +0 -185
  493. package/.codex/skills/team-quality-assurance/schemas/tasks-schema.md +0 -190
  494. package/.codex/skills/team-review/agents/fixer.md +0 -360
  495. package/.codex/skills/team-review/instructions/agent-instruction.md +0 -102
  496. package/.codex/skills/team-review/schemas/tasks-schema.md +0 -143
  497. package/.codex/skills/team-roadmap-dev/agents/roadmap-discusser.md +0 -176
  498. package/.codex/skills/team-roadmap-dev/agents/roadmap-planner.md +0 -194
  499. package/.codex/skills/team-roadmap-dev/agents/roadmap-verifier.md +0 -221
  500. package/.codex/skills/team-roadmap-dev/instructions/executor-instruction.md +0 -55
  501. package/.codex/skills/team-roadmap-dev/schemas/tasks-schema.md +0 -144
  502. package/.codex/skills/team-tech-debt/agents/gc-loop-manager.md +0 -130
  503. package/.codex/skills/team-tech-debt/agents/plan-approver.md +0 -151
  504. package/.codex/skills/team-tech-debt/instructions/agent-instruction.md +0 -390
  505. package/.codex/skills/team-tech-debt/schemas/tasks-schema.md +0 -196
  506. package/.codex/skills/team-testing/agents/executor.md +0 -195
  507. package/.codex/skills/team-testing/agents/gc-loop-handler.md +0 -155
  508. package/.codex/skills/team-testing/instructions/agent-instruction.md +0 -142
  509. package/.codex/skills/team-testing/schemas/tasks-schema.md +0 -172
  510. package/.codex/skills/team-uidesign/agents/completion-handler.md +0 -177
  511. package/.codex/skills/team-uidesign/agents/gc-loop-handler.md +0 -162
  512. package/.codex/skills/team-uidesign/instructions/agent-instruction.md +0 -509
  513. package/.codex/skills/team-uidesign/schemas/tasks-schema.md +0 -187
  514. package/.codex/skills/team-ultra-analyze/agents/discussion-feedback.md +0 -155
  515. package/.codex/skills/team-ultra-analyze/agents/topic-analyzer.md +0 -153
  516. package/.codex/skills/team-ultra-analyze/instructions/agent-instruction.md +0 -169
  517. package/.codex/skills/team-ultra-analyze/schemas/tasks-schema.md +0 -180
  518. package/.codex/skills/team-ux-improve/agents/ux-designer.md +0 -136
  519. package/.codex/skills/team-ux-improve/agents/ux-explorer.md +0 -158
  520. package/.codex/skills/team-ux-improve/agents/ux-tester.md +0 -174
  521. package/.codex/skills/team-ux-improve/instructions/ux-worker-instruction.md +0 -55
  522. package/.codex/skills/team-ux-improve/schemas/tasks-schema.md +0 -87
  523. /package/.codex/skills/{team-lifecycle/templates/architecture-doc.md → team-lifecycle-v4/templates/architecture.md} +0 -0
  524. /package/.codex/skills/{team-lifecycle/templates/epics-template.md → team-lifecycle-v4/templates/epics.md} +0 -0
  525. /package/.codex/skills/{team-lifecycle → team-lifecycle-v4}/templates/product-brief.md +0 -0
  526. /package/.codex/skills/{team-lifecycle/templates/requirements-prd.md → team-lifecycle-v4/templates/requirements.md} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"GraphExplorerPage-DCV5ybKE.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/maximize.js","../../../../node_modules/lucide-react/dist/esm/icons/network.js","../../../../node_modules/lucide-react/dist/esm/icons/square-function.js","../../../../node_modules/lucide-react/dist/esm/icons/variable.js","../../src/components/shared/GraphToolbar.tsx","../../src/components/shared/GraphSidebar.tsx","../../src/hooks/useGraphData.ts","../../src/pages/graph-explorer/nodes/ModuleNode.tsx","../../src/pages/graph-explorer/nodes/ClassNode.tsx","../../src/pages/graph-explorer/nodes/FunctionNode.tsx","../../src/pages/graph-explorer/nodes/VariableNode.tsx","../../src/pages/graph-explorer/nodes/index.ts","../../src/pages/graph-explorer/edges/ImportsEdge.tsx","../../src/pages/graph-explorer/edges/CallsEdge.tsx","../../src/pages/graph-explorer/edges/InheritsEdge.tsx","../../src/pages/graph-explorer/edges/index.ts","../../src/pages/GraphExplorerPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Maximize = createLucideIcon(\"Maximize\", [\n [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n]);\n\nexport { Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Network = createLucideIcon(\"Network\", [\n [\"rect\", { x: \"16\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"4q2zg0\" }],\n [\"rect\", { x: \"2\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"8cvhb9\" }],\n [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"6\", rx: \"1\", key: \"1egb70\" }],\n [\"path\", { d: \"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\", key: \"1jsf9p\" }],\n [\"path\", { d: \"M12 12V8\", key: \"2874zd\" }]\n]);\n\nexport { Network as default };\n//# sourceMappingURL=network.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquareFunction = createLucideIcon(\"SquareFunction\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"path\", { d: \"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3\", key: \"m1af9g\" }],\n [\"path\", { d: \"M9 11.2h5.7\", key: \"3zgcl2\" }]\n]);\n\nexport { SquareFunction as default };\n//# sourceMappingURL=square-function.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Variable = createLucideIcon(\"Variable\", [\n [\"path\", { d: \"M8 21s-4-3-4-9 4-9 4-9\", key: \"uto9ud\" }],\n [\"path\", { d: \"M16 3s4 3 4 9-4 9-4 9\", key: \"4w2vsq\" }],\n [\"line\", { x1: \"15\", x2: \"9\", y1: \"9\", y2: \"15\", key: \"f7djnv\" }],\n [\"line\", { x1: \"9\", x2: \"15\", y1: \"9\", y2: \"15\", key: \"1shsy8\" }]\n]);\n\nexport { Variable as default };\n//# sourceMappingURL=variable.js.map\n","// ========================================\n// Graph Toolbar Component\n// ========================================\n// Toolbar with filters and actions for Graph Explorer\n\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n Filter,\n Maximize,\n RefreshCw,\n ChevronDown,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuTrigger,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n} from '@/components/ui/Dropdown';\nimport { Badge } from '@/components/ui/Badge';\nimport type { GraphFilters, NodeType, EdgeType } from '@/types/graph-explorer';\n\nexport interface GraphToolbarProps {\n /** Current filters */\n filters: GraphFilters;\n /** On filters change callback */\n onFiltersChange: (filters: GraphFilters) => void;\n /** On fit view callback */\n onFitView: () => void;\n /** On refresh callback */\n onRefresh: () => void;\n /** On reset filters callback */\n onResetFilters: () => void;\n /** Node type counts for badges */\n nodeTypeCounts?: Partial<Record<NodeType, number>>;\n /** Edge type counts for badges */\n edgeTypeCounts?: Partial<Record<EdgeType, number>>;\n}\n\n/**\n * Graph toolbar component\n */\nexport function GraphToolbar({\n filters,\n onFiltersChange,\n onFitView,\n onRefresh,\n onResetFilters,\n nodeTypeCounts,\n edgeTypeCounts,\n}: GraphToolbarProps) {\n const { formatMessage } = useIntl();\n const [localFilters, setLocalFilters] = useState<GraphFilters>(filters);\n\n const nodeTypeLabels: Record<NodeType, string> = {\n component: formatMessage({ id: 'graph.nodeTypes.component' }),\n module: formatMessage({ id: 'graph.nodeTypes.module' }),\n function: formatMessage({ id: 'graph.nodeTypes.function' }),\n class: formatMessage({ id: 'graph.nodeTypes.class' }),\n interface: formatMessage({ id: 'graph.nodeTypes.interface' }),\n variable: formatMessage({ id: 'graph.nodeTypes.variable' }),\n file: formatMessage({ id: 'graph.nodeTypes.file' }),\n folder: formatMessage({ id: 'graph.nodeTypes.folder' }),\n dependency: formatMessage({ id: 'graph.nodeTypes.dependency' }),\n api: formatMessage({ id: 'graph.nodeTypes.api' }),\n database: formatMessage({ id: 'graph.nodeTypes.database' }),\n service: formatMessage({ id: 'graph.nodeTypes.service' }),\n hook: formatMessage({ id: 'graph.nodeTypes.hook' }),\n utility: formatMessage({ id: 'graph.nodeTypes.utility' }),\n unknown: formatMessage({ id: 'graph.nodeTypes.unknown' }),\n };\n\n const edgeTypeLabels: Record<EdgeType, string> = {\n imports: formatMessage({ id: 'graph.edgeTypes.imports' }),\n exports: formatMessage({ id: 'graph.edgeTypes.exports' }),\n extends: formatMessage({ id: 'graph.edgeTypes.extends' }),\n implements: formatMessage({ id: 'graph.edgeTypes.implements' }),\n uses: formatMessage({ id: 'graph.edgeTypes.uses' }),\n 'depends-on': formatMessage({ id: 'graph.edgeTypes.dependsOn' }),\n calls: formatMessage({ id: 'graph.edgeTypes.calls' }),\n instantiates: formatMessage({ id: 'graph.edgeTypes.instantiates' }),\n contains: formatMessage({ id: 'graph.edgeTypes.contains' }),\n 'related-to': formatMessage({ id: 'graph.edgeTypes.relatedTo' }),\n 'data-flow': formatMessage({ id: 'graph.edgeTypes.dataFlow' }),\n event: formatMessage({ id: 'graph.edgeTypes.event' }),\n unknown: formatMessage({ id: 'graph.edgeTypes.unknown' }),\n };\n\n const handleNodeTypeToggle = (nodeType: NodeType) => {\n const current = localFilters.nodeTypes || [];\n const updated = current.includes(nodeType)\n ? current.filter(t => t !== nodeType)\n : [...current, nodeType];\n const newFilters = { ...localFilters, nodeTypes: updated };\n setLocalFilters(newFilters);\n onFiltersChange(newFilters);\n };\n\n const handleEdgeTypeToggle = (edgeType: EdgeType) => {\n const current = localFilters.edgeTypes || [];\n const updated = current.includes(edgeType)\n ? current.filter(t => t !== edgeType)\n : [...current, edgeType];\n const newFilters = { ...localFilters, edgeTypes: updated };\n setLocalFilters(newFilters);\n onFiltersChange(newFilters);\n };\n\n const hasActiveFilters =\n (localFilters.nodeTypes && localFilters.nodeTypes.length < Object.keys(nodeTypeLabels).length) ||\n (localFilters.edgeTypes && localFilters.edgeTypes.length < Object.keys(edgeTypeLabels).length) ||\n localFilters.searchQuery ||\n localFilters.showOnlyIssues;\n\n return (\n <div className=\"flex items-center gap-2 p-3 bg-card border-b border-border\">\n {/* Node types filter */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-2\">\n <Filter className=\"w-4 h-4\" />\n {formatMessage({ id: 'graph.filters.nodeTypes' })}\n <Badge variant=\"secondary\" className=\"ml-1\">\n {localFilters.nodeTypes?.length || 0}\n </Badge>\n <ChevronDown className=\"w-4 h-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel>{formatMessage({ id: 'graph.filters.selectNodeTypes' })}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {Object.entries(nodeTypeLabels).map(([type, label]) => {\n const count = nodeTypeCounts?.[type as NodeType] || 0;\n const isChecked = localFilters.nodeTypes?.includes(type as NodeType);\n return (\n <DropdownMenuCheckboxItem\n key={type}\n checked={isChecked}\n onCheckedChange={() => handleNodeTypeToggle(type as NodeType)}\n disabled={count === 0}\n >\n <span className=\"flex-1\">{label}</span>\n {count > 0 && (\n <Badge variant=\"outline\" className=\"ml-2 text-xs\">\n {count}\n </Badge>\n )}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* Edge types filter */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-2\">\n <Filter className=\"w-4 h-4\" />\n {formatMessage({ id: 'graph.filters.edgeTypes' })}\n <Badge variant=\"secondary\" className=\"ml-1\">\n {localFilters.edgeTypes?.length || 0}\n </Badge>\n <ChevronDown className=\"w-4 h-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel>{formatMessage({ id: 'graph.filters.selectEdgeTypes' })}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {Object.entries(edgeTypeLabels).map(([type, label]) => {\n const count = edgeTypeCounts?.[type as EdgeType] || 0;\n const isChecked = localFilters.edgeTypes?.includes(type as EdgeType);\n return (\n <DropdownMenuCheckboxItem\n key={type}\n checked={isChecked}\n onCheckedChange={() => handleEdgeTypeToggle(type as EdgeType)}\n disabled={count === 0}\n >\n <span className=\"flex-1\">{label}</span>\n {count > 0 && (\n <Badge variant=\"outline\" className=\"ml-2 text-xs\">\n {count}\n </Badge>\n )}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* Separator */}\n <div className=\"w-px h-6 bg-border\" />\n\n {/* Zoom and view controls */}\n <Button variant=\"ghost\" size=\"sm\" onClick={onFitView} title={formatMessage({ id: 'graph.actions.fitView' })}>\n <Maximize className=\"w-4 h-4\" />\n </Button>\n\n {/* Separator */}\n <div className=\"w-px h-6 bg-border\" />\n\n {/* Actions */}\n <Button variant=\"ghost\" size=\"sm\" onClick={onRefresh} title={formatMessage({ id: 'graph.actions.refresh' })}>\n <RefreshCw className=\"w-4 h-4\" />\n </Button>\n\n {/* Reset filters button (only show when active filters) */}\n {hasActiveFilters && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onResetFilters}\n className=\"text-amber-600 dark:text-amber-400\"\n title={formatMessage({ id: 'graph.actions.resetFilters' })}\n >\n <Filter className=\"w-4 h-4 mr-2\" />\n {formatMessage({ id: 'graph.actions.reset' })}\n </Button>\n )}\n </div>\n );\n}\n","// ========================================\n// Graph Sidebar Component\n// ========================================\n// Sidebar with legend and node details for Graph Explorer\n\nimport { useIntl } from 'react-intl';\nimport { X, Info, Network, FileText, GitBranch, Zap } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button';\nimport { Badge } from '@/components/ui/Badge';\nimport type { GraphNode, NodeType, EdgeType } from '@/types/graph-explorer';\n\nexport interface GraphSidebarProps {\n /** Selected node */\n selectedNode: GraphNode | null;\n /** Legend visibility */\n showLegend?: boolean;\n /** On close callback */\n onClose: () => void;\n}\n\n/**\n * Node type legend item\n */\ninterface LegendItem {\n type: NodeType;\n label: string;\n color: string;\n icon: React.ElementType;\n}\n\n/**\n * Graph sidebar component\n */\nexport function GraphSidebar({ selectedNode, showLegend = true, onClose }: GraphSidebarProps) {\n const { formatMessage } = useIntl();\n\n const legendItems: LegendItem[] = [\n {\n type: 'component',\n label: formatMessage({ id: 'graph.legend.component' }),\n color: 'bg-blue-500',\n icon: Network,\n },\n {\n type: 'module',\n label: formatMessage({ id: 'graph.legend.module' }),\n color: 'bg-blue-500',\n icon: FileText,\n },\n {\n type: 'class',\n label: formatMessage({ id: 'graph.legend.class' }),\n color: 'bg-green-500',\n icon: GitBranch,\n },\n {\n type: 'function',\n label: formatMessage({ id: 'graph.legend.function' }),\n color: 'bg-orange-500',\n icon: Zap,\n },\n {\n type: 'variable',\n label: formatMessage({ id: 'graph.legend.variable' }),\n color: 'bg-cyan-500',\n icon: Info,\n },\n ];\n\n const edgeLegendItems = [\n {\n type: 'imports' as EdgeType,\n label: formatMessage({ id: 'graph.legend.imports' }),\n color: 'stroke-gray-500',\n dashArray: '',\n },\n {\n type: 'calls' as EdgeType,\n label: formatMessage({ id: 'graph.legend.calls' }),\n color: 'stroke-green-500',\n dashArray: '',\n },\n {\n type: 'extends' as EdgeType,\n label: formatMessage({ id: 'graph.legend.extends' }),\n color: 'stroke-purple-500',\n dashArray: 'stroke-dasharray',\n },\n ];\n\n return (\n <div className=\"w-80 bg-card border-l border-border flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <h2 className=\"font-semibold text-sm\">\n {selectedNode\n ? formatMessage({ id: 'graph.sidebar.nodeDetails' })\n : formatMessage({ id: 'graph.sidebar.title' })}\n </h2>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose}>\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto\">\n {/* Node details */}\n {selectedNode ? (\n <div className=\"p-4 space-y-4\">\n {/* Node header */}\n <div>\n <div className=\"flex items-center gap-2 mb-2\">\n <Badge variant=\"outline\">{selectedNode.type}</Badge>\n {selectedNode.data.hasIssues && (\n <Badge variant=\"destructive\">\n {formatMessage({ id: 'graph.sidebar.hasIssues' })}\n </Badge>\n )}\n </div>\n <h3 className=\"text-lg font-semibold\">{selectedNode.data.label}</h3>\n </div>\n\n {/* File path */}\n {selectedNode.data.filePath && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.filePath' })}\n </label>\n <p className=\"text-sm font-mono mt-1 break-all\">{selectedNode.data.filePath}</p>\n </div>\n )}\n\n {/* Line number */}\n {selectedNode.data.lineNumber && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.lineNumber' })}\n </label>\n <p className=\"text-sm mt-1\">{selectedNode.data.lineNumber}</p>\n </div>\n )}\n\n {/* Category */}\n {selectedNode.data.category && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.category' })}\n </label>\n <p className=\"text-sm mt-1 capitalize\">{selectedNode.data.category}</p>\n </div>\n )}\n\n {/* Line count */}\n {selectedNode.data.lineCount && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.lineCount' })}\n </label>\n <p className=\"text-sm mt-1\">{selectedNode.data.lineCount} lines</p>\n </div>\n )}\n\n {/* Documentation */}\n {selectedNode.data.documentation && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.documentation' })}\n </label>\n <p className=\"text-sm mt-1 text-muted-foreground\">{selectedNode.data.documentation}</p>\n </div>\n )}\n\n {/* Tags */}\n {selectedNode.data.tags && selectedNode.data.tags.length > 0 && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.tags' })}\n </label>\n <div className=\"flex flex-wrap gap-1 mt-2\">\n {selectedNode.data.tags.map(tag => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Issues */}\n {selectedNode.data.issues && selectedNode.data.issues.length > 0 && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.issues' })}\n </label>\n <ul className=\"mt-2 space-y-1\">\n {selectedNode.data.issues.map((issue, idx) => (\n <li key={idx} className=\"text-sm text-red-600 dark:text-red-400\">\n • {issue}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-4 space-y-6\">\n {/* Node types legend */}\n {showLegend && (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase mb-3\">\n {formatMessage({ id: 'graph.legend.nodeTypes' })}\n </h3>\n <div className=\"space-y-2\">\n {legendItems.map(item => {\n const Icon = item.icon;\n return (\n <div key={item.type} className=\"flex items-center gap-2\">\n <div className={cn('w-4 h-4 rounded', item.color)} />\n <Icon className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm\">{item.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Edge types legend */}\n {showLegend && (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase mb-3\">\n {formatMessage({ id: 'graph.legend.edgeTypes' })}\n </h3>\n <div className=\"space-y-2\">\n {edgeLegendItems.map(item => (\n <div key={item.type} className=\"flex items-center gap-2\">\n <div className={cn('w-8 h-0.5', item.color, item.dashArray)} />\n <span className=\"text-sm\">{item.label}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Instructions */}\n <div className=\"p-3 bg-muted rounded-lg\">\n <p className=\"text-xs text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.instructions' })}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","// ========================================\n// useGraphData Hook\n// ========================================\n// TanStack Query hooks for Graph Explorer with data transformation\n\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n fetchGraphDependencies,\n fetchGraphImpact,\n type GraphDependenciesRequest,\n type GraphDependenciesResponse,\n} from '../lib/api';\nimport type {\n GraphData,\n GraphFilters,\n NodeType,\n EdgeType,\n} from '../types/graph-explorer';\n\n// Query key factory\nexport const graphKeys = {\n all: ['graph'] as const,\n dependencies: () => [...graphKeys.all, 'dependencies'] as const,\n dependency: (request: GraphDependenciesRequest) => [...graphKeys.dependencies(), request] as const,\n impact: (nodeId: string) => [...graphKeys.all, 'impact', nodeId] as const,\n};\n\n// Default stale time: 5 minutes (graph data doesn't change frequently)\nconst STALE_TIME = 5 * 60 * 1000;\n\nexport interface UseGraphDataOptions {\n /** Override default stale time (ms) */\n staleTime?: number;\n /** Enable/disable the query */\n enabled?: boolean;\n /** Root path for analysis */\n rootPath?: string;\n /** Maximum depth for traversal */\n maxDepth?: number;\n /** Filter by node types */\n nodeTypes?: NodeType[];\n /** Filter by edge types */\n edgeTypes?: EdgeType[];\n}\n\nexport interface UseGraphDataReturn {\n /** Graph data with nodes and edges */\n graphData: GraphData | undefined;\n /** Loading state for initial fetch */\n isLoading: boolean;\n /** Fetching state (initial or refetch) */\n isFetching: boolean;\n /** Error object if query failed */\n error: Error | null;\n /** Manually refetch data */\n refetch: () => Promise<void>;\n /** Invalidate and refetch graph data */\n invalidate: () => Promise<void>;\n /** Apply filters to graph data */\n applyFilters: (filters: GraphFilters) => GraphData | undefined;\n}\n\n/**\n * Transform API response to GraphData format\n */\nfunction transformToGraphData(response: GraphDependenciesResponse): GraphData {\n return {\n nodes: response.nodes,\n edges: response.edges,\n metadata: response.metadata,\n };\n}\n\n/**\n * Apply filters to graph data\n */\nfunction filterGraphData(\n graphData: GraphData | undefined,\n filters: GraphFilters\n): GraphData | undefined {\n if (!graphData) return undefined;\n\n let filteredNodes = [...graphData.nodes];\n let filteredEdges = [...graphData.edges];\n\n // Filter by node types\n if (filters.nodeTypes && filters.nodeTypes.length > 0) {\n const nodeTypeSet = new Set(filters.nodeTypes);\n filteredNodes = filteredNodes.filter(node => node.type && nodeTypeSet.has(node.type));\n }\n\n // Filter by edge types\n if (filters.edgeTypes && filters.edgeTypes.length > 0) {\n const edgeTypeSet = new Set(filters.edgeTypes);\n filteredEdges = filteredEdges.filter(edge => edge.data?.edgeType && edgeTypeSet.has(edge.data.edgeType));\n }\n\n // Filter by search query\n if (filters.searchQuery) {\n const query = filters.searchQuery.toLowerCase();\n filteredNodes = filteredNodes.filter(node =>\n node.data.label.toLowerCase().includes(query) ||\n node.data.filePath?.toLowerCase().includes(query)\n );\n }\n\n // Filter by file path pattern\n if (filters.filePathPattern) {\n const pattern = new RegExp(filters.filePathPattern, 'i');\n filteredNodes = filteredNodes.filter(node =>\n node.data.filePath?.match(pattern)\n );\n }\n\n // Filter by categories\n if (filters.categories && filters.categories.length > 0) {\n const categorySet = new Set(filters.categories);\n filteredNodes = filteredNodes.filter(node =>\n node.data.category && categorySet.has(node.data.category)\n );\n }\n\n // Filter only nodes with issues\n if (filters.showOnlyIssues) {\n filteredNodes = filteredNodes.filter(node => node.data.hasIssues);\n }\n\n // Filter by minimum complexity\n if (filters.minComplexity !== undefined) {\n filteredNodes = filteredNodes.filter(_node => {\n // This would require complexity data to be available\n // For now, we'll skip this filter\n return true;\n });\n }\n\n // Filter by tags\n if (filters.tags && filters.tags.length > 0) {\n const tagSet = new Set(filters.tags);\n filteredNodes = filteredNodes.filter(node =>\n node.data.tags?.some(tag => tagSet.has(tag))\n );\n }\n\n // Exclude tags\n if (filters.excludeTags && filters.excludeTags.length > 0) {\n const excludeTagSet = new Set(filters.excludeTags);\n filteredNodes = filteredNodes.filter(node =>\n !node.data.tags?.some(tag => excludeTagSet.has(tag))\n );\n }\n\n // Show/hide isolated nodes\n if (!filters.showIsolatedNodes) {\n const connectedNodeIds = new Set<string>();\n filteredEdges.forEach(edge => {\n connectedNodeIds.add(edge.source);\n connectedNodeIds.add(edge.target);\n });\n filteredNodes = filteredNodes.filter(node => connectedNodeIds.has(node.id));\n }\n\n // Build set of visible node IDs\n const visibleNodeIds = new Set(filteredNodes.map(node => node.id));\n\n // Filter edges to only include edges between visible nodes\n filteredEdges = filteredEdges.filter(edge =>\n visibleNodeIds.has(edge.source) && visibleNodeIds.has(edge.target)\n );\n\n // Apply max depth filter (focus on specific node)\n if (filters.focusNodeId) {\n const focusNode = filteredNodes.find(n => n.id === filters.focusNodeId);\n if (focusNode) {\n // Collect nodes within max depth\n const nodesWithinDepth = new Set<string>([filters.focusNodeId]);\n const visited = new Set<string>();\n\n const traverse = (nodeId: string, depth: number) => {\n if (depth > (filters.maxDepth || 3)) return;\n if (visited.has(nodeId)) return;\n visited.add(nodeId);\n\n filteredEdges.forEach(edge => {\n if (edge.source === nodeId && !nodesWithinDepth.has(edge.target)) {\n nodesWithinDepth.add(edge.target);\n traverse(edge.target, depth + 1);\n }\n if (edge.target === nodeId && !nodesWithinDepth.has(edge.source)) {\n nodesWithinDepth.add(edge.source);\n traverse(edge.source, depth + 1);\n }\n });\n };\n\n traverse(filters.focusNodeId, 0);\n\n filteredNodes = filteredNodes.filter(node => nodesWithinDepth.has(node.id));\n const depthNodeIds = new Set(nodesWithinDepth);\n filteredEdges = filteredEdges.filter(edge =>\n depthNodeIds.has(edge.source) && depthNodeIds.has(edge.target)\n );\n }\n }\n\n return {\n nodes: filteredNodes,\n edges: filteredEdges,\n metadata: graphData.metadata,\n };\n}\n\n/**\n * Hook for fetching and filtering graph data\n *\n * @example\n * ```tsx\n * const { graphData, isLoading, applyFilters } = useGraphData({\n * rootPath: '/src',\n * maxDepth: 3\n * });\n *\n * // Apply filters\n * const filteredData = applyFilters({\n * nodeTypes: ['component', 'hook'],\n * edgeTypes: ['imports', 'uses']\n * });\n * ```\n */\nexport function useGraphData(options: UseGraphDataOptions = {}): UseGraphDataReturn {\n const {\n staleTime = STALE_TIME,\n enabled = true,\n rootPath,\n maxDepth,\n nodeTypes,\n } = options;\n\n const queryClient = useQueryClient();\n\n const request: GraphDependenciesRequest = {\n rootPath,\n maxDepth,\n includeTypes: nodeTypes,\n };\n\n const query = useQuery({\n queryKey: graphKeys.dependency(request),\n queryFn: () => fetchGraphDependencies(request),\n staleTime,\n enabled,\n retry: 2,\n select: transformToGraphData,\n });\n\n const refetch = async () => {\n await query.refetch();\n };\n\n const invalidate = async () => {\n await queryClient.invalidateQueries({ queryKey: graphKeys.all });\n };\n\n const applyFilters = (filters: GraphFilters) => {\n return filterGraphData(query.data, filters);\n };\n\n return {\n graphData: query.data,\n isLoading: query.isLoading,\n isFetching: query.isFetching,\n error: query.error as Error | null,\n refetch,\n invalidate,\n applyFilters,\n };\n}\n\n/**\n * Hook for fetching impact analysis for a specific node\n */\nexport function useGraphImpact(\n nodeId: string | null,\n options: {\n direction?: 'upstream' | 'downstream' | 'both';\n maxDepth?: number;\n enabled?: boolean;\n } = {}\n) {\n const { direction = 'both', maxDepth = 3, enabled = true } = options;\n\n return useQuery({\n queryKey: graphKeys.impact(nodeId || ''),\n queryFn: () => {\n if (!nodeId) throw new Error('Node ID is required');\n return fetchGraphImpact({ nodeId, direction, maxDepth });\n },\n enabled: enabled && !!nodeId,\n staleTime: STALE_TIME,\n retry: 1,\n });\n}\n","// ========================================\n// Module Node Component\n// ========================================\n// Custom node for file/module visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { File, Package } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Module node component - represents files, modules, or packages\n */\nexport const ModuleNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-gray-300 dark:border-gray-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-gray-400\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className={`\n flex-shrink-0 w-8 h-8 rounded flex items-center justify-center\n ${nodeData.category === 'external' ? 'bg-purple-100 dark:bg-purple-900/30' : 'bg-blue-100 dark:bg-blue-900/30'}\n `}>\n {nodeData.category === 'external' ? (\n <Package className=\"w-4 h-4 text-purple-600 dark:text-purple-400\" />\n ) : (\n <File className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" />\n )}\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineCount && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n {nodeData.lineCount} lines\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Tags */}\n {nodeData.tags && nodeData.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-2\">\n {nodeData.tags.slice(0, 3).map((tag: string) => (\n <span\n key={tag}\n className=\"px-1.5 py-0.5 text-xs bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 rounded\"\n >\n {tag}\n </span>\n ))}\n {nodeData.tags.length > 3 && (\n <span className=\"px-1.5 py-0.5 text-xs text-muted-foreground\">\n +{nodeData.tags.length - 3}\n </span>\n )}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-gray-400\" />\n </div>\n );\n});\n\nModuleNode.displayName = 'ModuleNode';\n","// ========================================\n// Class Node Component\n// ========================================\n// Custom node for class visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { Braces } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Class node component - represents class definitions\n */\nexport const ClassNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-green-500 dark:border-green-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-green-500\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className=\"flex-shrink-0 w-8 h-8 rounded flex items-center justify-center bg-green-100 dark:bg-green-900/30\">\n <Braces className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineNumber && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n Line {nodeData.lineNumber}\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Documentation/Tooltip */}\n {nodeData.documentation && (\n <div className=\"mt-2 text-xs text-muted-foreground line-clamp-2\" title={nodeData.documentation}>\n {nodeData.documentation}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-green-500\" />\n </div>\n );\n});\n\nClassNode.displayName = 'ClassNode';\n","// ========================================\n// Function Node Component\n// ========================================\n// Custom node for function/method visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { FunctionSquare } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Function node component - represents functions and methods\n */\nexport const FunctionNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-orange-500 dark:border-orange-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-orange-500\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className=\"flex-shrink-0 w-8 h-8 rounded flex items-center justify-center bg-orange-100 dark:bg-orange-900/30\">\n <FunctionSquare className=\"w-4 h-4 text-orange-600 dark:text-orange-400\" />\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineNumber && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n Line {nodeData.lineNumber}\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Documentation/Tooltip */}\n {nodeData.documentation && (\n <div className=\"mt-2 text-xs text-muted-foreground line-clamp-2\" title={nodeData.documentation}>\n {nodeData.documentation}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-orange-500\" />\n </div>\n );\n});\n\nFunctionNode.displayName = 'FunctionNode';\n","// ========================================\n// Variable Node Component\n// ========================================\n// Custom node for variable/constant visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { Variable } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Variable node component - represents variables and constants\n */\nexport const VariableNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-cyan-500 dark:border-cyan-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-cyan-500\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className=\"flex-shrink-0 w-8 h-8 rounded flex items-center justify-center bg-cyan-100 dark:bg-cyan-900/30\">\n <Variable className=\"w-4 h-4 text-cyan-600 dark:text-cyan-400\" />\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineNumber && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n Line {nodeData.lineNumber}\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Type annotation */}\n {nodeData.documentation && (\n <div className=\"mt-2 text-xs text-muted-foreground font-mono\" title={nodeData.documentation}>\n {nodeData.documentation}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-cyan-500\" />\n </div>\n );\n});\n\nVariableNode.displayName = 'VariableNode';\n","// ========================================\n// Node Components Barrel Export\n// ========================================\n\nexport { ModuleNode } from './ModuleNode';\nexport { ClassNode } from './ClassNode';\nexport { FunctionNode } from './FunctionNode';\nexport { VariableNode } from './VariableNode';\n\nimport { ModuleNode } from './ModuleNode';\nimport { ClassNode } from './ClassNode';\nimport { FunctionNode } from './FunctionNode';\nimport { VariableNode } from './VariableNode';\n\n// Node types map for React Flow registration\nexport const nodeTypes = {\n module: ModuleNode,\n class: ClassNode,\n function: FunctionNode,\n variable: VariableNode,\n component: ModuleNode, // Reuse ModuleNode for components\n interface: ClassNode, // Reuse ClassNode for interfaces\n file: ModuleNode, // Reuse ModuleNode for files\n folder: ModuleNode, // Reuse ModuleNode for folders\n dependency: ModuleNode, // Reuse ModuleNode for dependencies\n api: ModuleNode, // Reuse ModuleNode for APIs\n database: ModuleNode, // Reuse ModuleNode for databases\n service: ModuleNode, // Reuse ModuleNode for services\n hook: FunctionNode, // Reuse FunctionNode for hooks\n utility: FunctionNode, // Reuse FunctionNode for utilities\n unknown: ModuleNode, // Reuse ModuleNode for unknown types\n};\n","// ========================================\n// Imports Edge Component\n// ========================================\n// Custom edge for import relationship visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport {\n EdgeProps,\n getBezierPath,\n EdgeLabelRenderer,\n BaseEdge,\n} from '@xyflow/react';\nimport type { GraphEdgeData } from '@/types/graph-explorer';\n\n/**\n * Imports edge component - represents import/requires relationships\n */\nexport const ImportsEdge = memo((props: EdgeProps) => {\n const {\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n style,\n markerEnd,\n } = props;\n const data = props.data as GraphEdgeData | undefined;\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n const edgeStyle = {\n ...style,\n stroke: selected ? '#3b82f6' : '#64748b',\n strokeWidth: selected ? 2 : 1.5,\n strokeDasharray: data?.importType === 'dynamic' ? '5,5' : undefined,\n };\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={edgeStyle}\n markerEnd={markerEnd}\n />\n {data?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: 'absolute',\n transform: `translate(-50%, -50%) translate(${(sourceX + targetX) / 2}px, ${(sourceY + targetY) / 2}px)`,\n pointerEvents: 'all',\n }}\n className=\"px-2 py-1 text-xs bg-white dark:bg-gray-800 rounded shadow border border-gray-200 dark:border-gray-700\"\n >\n {data.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n});\n\nImportsEdge.displayName = 'ImportsEdge';\n","// ========================================\n// Calls Edge Component\n// ========================================\n// Custom edge for function/method call visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport {\n EdgeProps,\n getBezierPath,\n EdgeLabelRenderer,\n BaseEdge,\n} from '@xyflow/react';\nimport type { GraphEdgeData } from '@/types/graph-explorer';\n\n/**\n * Calls edge component - represents function/method call relationships\n */\nexport const CallsEdge = memo((props: EdgeProps) => {\n const {\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n style,\n markerEnd,\n } = props;\n const data = props.data as GraphEdgeData | undefined;\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n const edgeStyle = {\n ...style,\n stroke: selected ? '#10b981' : '#22c55e',\n strokeWidth: selected ? 2 : 1.5,\n };\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={edgeStyle}\n markerEnd={markerEnd}\n />\n {data?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: 'absolute',\n transform: `translate(-50%, -50%) translate(${(sourceX + targetX) / 2}px, ${(sourceY + targetY) / 2}px)`,\n pointerEvents: 'all',\n }}\n className=\"px-2 py-1 text-xs bg-white dark:bg-gray-800 rounded shadow border border-green-200 dark:border-green-700\"\n >\n {data.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n});\n\nCallsEdge.displayName = 'CallsEdge';\n","// ========================================\n// Inherits Edge Component\n// ========================================\n// Custom edge for inheritance relationship visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport {\n EdgeProps,\n getSmoothStepPath,\n EdgeLabelRenderer,\n BaseEdge,\n} from '@xyflow/react';\nimport type { GraphEdgeData } from '@/types/graph-explorer';\n\n/**\n * Inherits edge component - represents inheritance/implementation relationships\n */\nexport const InheritsEdge = memo((props: EdgeProps) => {\n const {\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n style,\n markerEnd,\n } = props;\n const data = props.data as GraphEdgeData | undefined;\n const [edgePath] = getSmoothStepPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n borderRadius: 20,\n });\n\n const edgeStyle = {\n ...style,\n stroke: selected ? '#f59e0b' : '#a855f7',\n strokeWidth: selected ? 2 : 2,\n strokeDasharray: '4,4',\n };\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={edgeStyle}\n markerEnd={markerEnd}\n />\n {data?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: 'absolute',\n transform: `translate(-50%, -50%) translate(${(sourceX + targetX) / 2}px, ${(sourceY + targetY) / 2}px)`,\n pointerEvents: 'all',\n }}\n className=\"px-2 py-1 text-xs bg-white dark:bg-gray-800 rounded shadow border border-purple-200 dark:border-purple-700\"\n >\n {data.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n});\n\nInheritsEdge.displayName = 'InheritsEdge';\n","// ========================================\n// Edge Components Barrel Export\n// ========================================\n\nexport { ImportsEdge } from './ImportsEdge';\nexport { CallsEdge } from './CallsEdge';\nexport { InheritsEdge } from './InheritsEdge';\n\nimport { ImportsEdge } from './ImportsEdge';\nimport { CallsEdge } from './CallsEdge';\nimport { InheritsEdge } from './InheritsEdge';\n\n// Edge types map for React Flow registration\nexport const edgeTypes = {\n imports: ImportsEdge,\n calls: CallsEdge,\n extends: InheritsEdge,\n implements: InheritsEdge,\n};\n","// ========================================\n// Graph Explorer Page\n// ========================================\n// Main page for code dependency graph visualization\n\nimport { useCallback, useState, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n ReactFlow,\n Background,\n BackgroundVariant,\n Controls,\n MiniMap,\n useReactFlow,\n Panel,\n ReactFlowProvider,\n} from '@xyflow/react';\nimport '@xyflow/react/dist/style.css';\nimport { useGraphData } from '@/hooks/useGraphData';\nimport { GraphToolbar } from '@/components/shared/GraphToolbar';\nimport { GraphSidebar } from '@/components/shared/GraphSidebar';\nimport { Loader2 } from 'lucide-react';\nimport { Card } from '@/components/ui/Card';\nimport { AlertCircle } from 'lucide-react';\nimport type { GraphNode, GraphFilters, NodeType, EdgeType } from '@/types/graph-explorer';\nimport { nodeTypes } from './graph-explorer/nodes';\nimport { edgeTypes } from './graph-explorer/edges';\n\n/**\n * Inner Graph Explorer Page Component (wrapped with ReactFlowProvider)\n */\nfunction GraphExplorerPageInner() {\n const { formatMessage } = useIntl();\n const { fitView } = useReactFlow();\n\n // State\n const [selectedNode, setSelectedNode] = useState<GraphNode | null>(null);\n const [isSidebarOpen, setIsSidebarOpen] = useState(true);\n const [filters, setFilters] = useState<GraphFilters>({\n nodeTypes: ['component', 'module', 'class', 'function', 'variable', 'interface', 'hook'],\n edgeTypes: ['imports', 'exports', 'extends', 'implements', 'uses', 'calls', 'depends-on'],\n showIsolatedNodes: false,\n });\n\n // Fetch graph data\n const { graphData, isLoading, isFetching, error, refetch, applyFilters } = useGraphData({\n rootPath: '/src',\n maxDepth: 3,\n enabled: true,\n });\n\n // Apply filters to graph data\n const filteredGraphData = useMemo(() => {\n return applyFilters(filters) || { nodes: [], edges: [], metadata: undefined };\n }, [graphData, filters, applyFilters]);\n\n // Calculate node/edge type counts for badges\n const nodeTypeCounts = useMemo(() => {\n const counts: Partial<Record<NodeType, number>> = {};\n graphData?.nodes.forEach(node => {\n counts[node.type as NodeType] = (counts[node.type as NodeType] || 0) + 1;\n });\n return counts;\n }, [graphData]);\n\n const edgeTypeCounts = useMemo(() => {\n const counts: Partial<Record<EdgeType, number>> = {};\n graphData?.edges.forEach(edge => {\n const type = edge.data?.edgeType as EdgeType;\n if (type) {\n counts[type] = (counts[type] || 0) + 1;\n }\n });\n return counts;\n }, [graphData]);\n\n // Event handlers\n const handleNodeClick = useCallback((_event: React.MouseEvent, node: GraphNode) => {\n setSelectedNode(node);\n setIsSidebarOpen(true);\n }, []);\n\n const handlePaneClick = useCallback(() => {\n setSelectedNode(null);\n }, []);\n\n const handleFitView = useCallback(() => {\n fitView({ padding: 0.2, duration: 300 });\n }, [fitView]);\n\n const handleRefresh = useCallback(async () => {\n await refetch();\n }, [refetch]);\n\n const handleFiltersChange = useCallback((newFilters: GraphFilters) => {\n setFilters(newFilters);\n }, []);\n\n const handleResetFilters = useCallback(() => {\n setFilters({\n nodeTypes: ['component', 'module', 'class', 'function', 'variable', 'interface', 'hook'],\n edgeTypes: ['imports', 'exports', 'extends', 'implements', 'uses', 'calls', 'depends-on'],\n showIsolatedNodes: false,\n });\n }, []);\n\n const handleSidebarClose = useCallback(() => {\n setIsSidebarOpen(false);\n setSelectedNode(null);\n }, []);\n\n // Loading state\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Loader2 className=\"w-8 h-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full p-6\">\n <Card className=\"p-6 border-red-200 dark:border-red-800\">\n <div className=\"flex items-center gap-3\">\n <AlertCircle className=\"w-5 h-5 text-red-500\" />\n <p className=\"text-sm text-red-600 dark:text-red-400\">\n {formatMessage({ id: 'graph.error.loading' }, { message: error.message })}\n </p>\n </div>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (!graphData || graphData.nodes.length === 0) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Card className=\"p-6\">\n <div className=\"flex items-center gap-3\">\n <AlertCircle className=\"w-5 h-5 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n {formatMessage({ id: 'graph.empty' })}\n </p>\n </div>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Toolbar */}\n <GraphToolbar\n filters={filters}\n onFiltersChange={handleFiltersChange}\n onFitView={handleFitView}\n onRefresh={handleRefresh}\n onResetFilters={handleResetFilters}\n nodeTypeCounts={nodeTypeCounts}\n edgeTypeCounts={edgeTypeCounts}\n />\n\n {/* Main content area */}\n <div className=\"flex-1 flex overflow-hidden\">\n {/* Graph canvas */}\n <div className=\"flex-1 relative\">\n <ReactFlow\n nodes={filteredGraphData.nodes}\n edges={filteredGraphData.edges}\n onNodeClick={handleNodeClick}\n onPaneClick={handlePaneClick}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n fitView\n defaultViewport={{ x: 0, y: 0, zoom: 0.8 }}\n minZoom={0.1}\n maxZoom={2}\n className=\"bg-background\"\n >\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} />\n <Controls />\n <MiniMap\n nodeColor={(node) => {\n switch (node.type) {\n case 'component':\n case 'module':\n return '#3b82f6';\n case 'class':\n return '#22c55e';\n case 'function':\n return '#f97316';\n case 'variable':\n return '#06b6d4';\n default:\n return '#6b7280';\n }\n }}\n maskColor=\"rgba(0, 0, 0, 0.1)\"\n />\n\n {/* Status panel */}\n <Panel position=\"top-left\" className=\"bg-card/90 backdrop-blur border border-border rounded-lg p-3 shadow-lg\">\n <div className=\"text-xs space-y-1\">\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"text-muted-foreground\">\n {formatMessage({ id: 'graph.status.nodes' })}\n </span>\n <span className=\"font-medium\">{filteredGraphData.nodes.length}</span>\n </div>\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"text-muted-foreground\">\n {formatMessage({ id: 'graph.status.edges' })}\n </span>\n <span className=\"font-medium\">{filteredGraphData.edges.length}</span>\n </div>\n {isFetching && (\n <div className=\"text-xs text-muted-foreground\">\n {formatMessage({ id: 'graph.status.updating' })}\n </div>\n )}\n </div>\n </Panel>\n </ReactFlow>\n </div>\n\n {/* Sidebar */}\n {isSidebarOpen && (\n <GraphSidebar\n selectedNode={selectedNode}\n showLegend={!selectedNode}\n onClose={handleSidebarClose}\n />\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Graph Explorer Page Component (with ReactFlowProvider wrapper)\n */\nexport function GraphExplorerPage() {\n return (\n <ReactFlowProvider>\n <GraphExplorerPageInner />\n </ReactFlowProvider>\n );\n}\n\nexport default GraphExplorerPage;\n"],"names":["Maximize","createLucideIcon","Network","SquareFunction","Variable","GraphToolbar","filters","onFiltersChange","onFitView","onRefresh","onResetFilters","nodeTypeCounts","edgeTypeCounts","formatMessage","useIntl","localFilters","setLocalFilters","useState","nodeTypeLabels","edgeTypeLabels","handleNodeTypeToggle","nodeType","current","updated","t","newFilters","handleEdgeTypeToggle","edgeType","hasActiveFilters","jsxs","DropdownMenu","jsx","DropdownMenuTrigger","Button","Filter","Badge","_a","ChevronDown","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","type","label","count","isChecked","DropdownMenuCheckboxItem","_b","RefreshCw","GraphSidebar","selectedNode","showLegend","onClose","legendItems","FileText","GitBranch","Zap","Info","edgeLegendItems","X","tag","issue","idx","item","Icon","cn","graphKeys","request","nodeId","STALE_TIME","transformToGraphData","response","filterGraphData","graphData","filteredNodes","filteredEdges","nodeTypeSet","node","edgeTypeSet","edge","query","pattern","categorySet","_node","tagSet","excludeTagSet","connectedNodeIds","visibleNodeIds","n","nodesWithinDepth","visited","traverse","depth","depthNodeIds","useGraphData","options","staleTime","enabled","rootPath","maxDepth","nodeTypes","queryClient","useQueryClient","useQuery","fetchGraphDependencies","refetch","invalidate","applyFilters","ModuleNode","memo","props","data","selected","nodeData","hasIssues","severity","getBorderColor","getBackgroundColor","Handle","Position","Package","File","ClassNode","Braces","FunctionNode","FunctionSquare","VariableNode","ImportsEdge","id","sourceX","sourceY","targetX","targetY","sourcePosition","targetPosition","style","markerEnd","edgePath","getBezierPath","edgeStyle","Fragment","BaseEdge","EdgeLabelRenderer","CallsEdge","InheritsEdge","getSmoothStepPath","edgeTypes","GraphExplorerPageInner","fitView","useReactFlow","setSelectedNode","isSidebarOpen","setIsSidebarOpen","setFilters","isLoading","isFetching","error","filteredGraphData","useMemo","counts","handleNodeClick","useCallback","_event","handlePaneClick","handleFitView","handleRefresh","handleFiltersChange","handleResetFilters","handleSidebarClose","Loader2","Card","AlertCircle","ReactFlow","Background","BackgroundVariant","Controls","MiniMap","Panel","GraphExplorerPage","ReactFlowProvider"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"GraphExplorerPage-DIpqgvoU.js","sources":["../../../../node_modules/lucide-react/dist/esm/icons/maximize.js","../../../../node_modules/lucide-react/dist/esm/icons/network.js","../../../../node_modules/lucide-react/dist/esm/icons/square-function.js","../../../../node_modules/lucide-react/dist/esm/icons/variable.js","../../src/components/shared/GraphToolbar.tsx","../../src/components/shared/GraphSidebar.tsx","../../src/hooks/useGraphData.ts","../../src/pages/graph-explorer/nodes/ModuleNode.tsx","../../src/pages/graph-explorer/nodes/ClassNode.tsx","../../src/pages/graph-explorer/nodes/FunctionNode.tsx","../../src/pages/graph-explorer/nodes/VariableNode.tsx","../../src/pages/graph-explorer/nodes/index.ts","../../src/pages/graph-explorer/edges/ImportsEdge.tsx","../../src/pages/graph-explorer/edges/CallsEdge.tsx","../../src/pages/graph-explorer/edges/InheritsEdge.tsx","../../src/pages/graph-explorer/edges/index.ts","../../src/pages/GraphExplorerPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Maximize = createLucideIcon(\"Maximize\", [\n [\"path\", { d: \"M8 3H5a2 2 0 0 0-2 2v3\", key: \"1dcmit\" }],\n [\"path\", { d: \"M21 8V5a2 2 0 0 0-2-2h-3\", key: \"1e4gt3\" }],\n [\"path\", { d: \"M3 16v3a2 2 0 0 0 2 2h3\", key: \"wsl5sc\" }],\n [\"path\", { d: \"M16 21h3a2 2 0 0 0 2-2v-3\", key: \"18trek\" }]\n]);\n\nexport { Maximize as default };\n//# sourceMappingURL=maximize.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Network = createLucideIcon(\"Network\", [\n [\"rect\", { x: \"16\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"4q2zg0\" }],\n [\"rect\", { x: \"2\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"8cvhb9\" }],\n [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"6\", rx: \"1\", key: \"1egb70\" }],\n [\"path\", { d: \"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\", key: \"1jsf9p\" }],\n [\"path\", { d: \"M12 12V8\", key: \"2874zd\" }]\n]);\n\nexport { Network as default };\n//# sourceMappingURL=network.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SquareFunction = createLucideIcon(\"SquareFunction\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"path\", { d: \"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3\", key: \"m1af9g\" }],\n [\"path\", { d: \"M9 11.2h5.7\", key: \"3zgcl2\" }]\n]);\n\nexport { SquareFunction as default };\n//# sourceMappingURL=square-function.js.map\n","/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Variable = createLucideIcon(\"Variable\", [\n [\"path\", { d: \"M8 21s-4-3-4-9 4-9 4-9\", key: \"uto9ud\" }],\n [\"path\", { d: \"M16 3s4 3 4 9-4 9-4 9\", key: \"4w2vsq\" }],\n [\"line\", { x1: \"15\", x2: \"9\", y1: \"9\", y2: \"15\", key: \"f7djnv\" }],\n [\"line\", { x1: \"9\", x2: \"15\", y1: \"9\", y2: \"15\", key: \"1shsy8\" }]\n]);\n\nexport { Variable as default };\n//# sourceMappingURL=variable.js.map\n","// ========================================\n// Graph Toolbar Component\n// ========================================\n// Toolbar with filters and actions for Graph Explorer\n\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n Filter,\n Maximize,\n RefreshCw,\n ChevronDown,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuTrigger,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n} from '@/components/ui/Dropdown';\nimport { Badge } from '@/components/ui/Badge';\nimport type { GraphFilters, NodeType, EdgeType } from '@/types/graph-explorer';\n\nexport interface GraphToolbarProps {\n /** Current filters */\n filters: GraphFilters;\n /** On filters change callback */\n onFiltersChange: (filters: GraphFilters) => void;\n /** On fit view callback */\n onFitView: () => void;\n /** On refresh callback */\n onRefresh: () => void;\n /** On reset filters callback */\n onResetFilters: () => void;\n /** Node type counts for badges */\n nodeTypeCounts?: Partial<Record<NodeType, number>>;\n /** Edge type counts for badges */\n edgeTypeCounts?: Partial<Record<EdgeType, number>>;\n}\n\n/**\n * Graph toolbar component\n */\nexport function GraphToolbar({\n filters,\n onFiltersChange,\n onFitView,\n onRefresh,\n onResetFilters,\n nodeTypeCounts,\n edgeTypeCounts,\n}: GraphToolbarProps) {\n const { formatMessage } = useIntl();\n const [localFilters, setLocalFilters] = useState<GraphFilters>(filters);\n\n const nodeTypeLabels: Record<NodeType, string> = {\n component: formatMessage({ id: 'graph.nodeTypes.component' }),\n module: formatMessage({ id: 'graph.nodeTypes.module' }),\n function: formatMessage({ id: 'graph.nodeTypes.function' }),\n class: formatMessage({ id: 'graph.nodeTypes.class' }),\n interface: formatMessage({ id: 'graph.nodeTypes.interface' }),\n variable: formatMessage({ id: 'graph.nodeTypes.variable' }),\n file: formatMessage({ id: 'graph.nodeTypes.file' }),\n folder: formatMessage({ id: 'graph.nodeTypes.folder' }),\n dependency: formatMessage({ id: 'graph.nodeTypes.dependency' }),\n api: formatMessage({ id: 'graph.nodeTypes.api' }),\n database: formatMessage({ id: 'graph.nodeTypes.database' }),\n service: formatMessage({ id: 'graph.nodeTypes.service' }),\n hook: formatMessage({ id: 'graph.nodeTypes.hook' }),\n utility: formatMessage({ id: 'graph.nodeTypes.utility' }),\n unknown: formatMessage({ id: 'graph.nodeTypes.unknown' }),\n };\n\n const edgeTypeLabels: Record<EdgeType, string> = {\n imports: formatMessage({ id: 'graph.edgeTypes.imports' }),\n exports: formatMessage({ id: 'graph.edgeTypes.exports' }),\n extends: formatMessage({ id: 'graph.edgeTypes.extends' }),\n implements: formatMessage({ id: 'graph.edgeTypes.implements' }),\n uses: formatMessage({ id: 'graph.edgeTypes.uses' }),\n 'depends-on': formatMessage({ id: 'graph.edgeTypes.dependsOn' }),\n calls: formatMessage({ id: 'graph.edgeTypes.calls' }),\n instantiates: formatMessage({ id: 'graph.edgeTypes.instantiates' }),\n contains: formatMessage({ id: 'graph.edgeTypes.contains' }),\n 'related-to': formatMessage({ id: 'graph.edgeTypes.relatedTo' }),\n 'data-flow': formatMessage({ id: 'graph.edgeTypes.dataFlow' }),\n event: formatMessage({ id: 'graph.edgeTypes.event' }),\n unknown: formatMessage({ id: 'graph.edgeTypes.unknown' }),\n };\n\n const handleNodeTypeToggle = (nodeType: NodeType) => {\n const current = localFilters.nodeTypes || [];\n const updated = current.includes(nodeType)\n ? current.filter(t => t !== nodeType)\n : [...current, nodeType];\n const newFilters = { ...localFilters, nodeTypes: updated };\n setLocalFilters(newFilters);\n onFiltersChange(newFilters);\n };\n\n const handleEdgeTypeToggle = (edgeType: EdgeType) => {\n const current = localFilters.edgeTypes || [];\n const updated = current.includes(edgeType)\n ? current.filter(t => t !== edgeType)\n : [...current, edgeType];\n const newFilters = { ...localFilters, edgeTypes: updated };\n setLocalFilters(newFilters);\n onFiltersChange(newFilters);\n };\n\n const hasActiveFilters =\n (localFilters.nodeTypes && localFilters.nodeTypes.length < Object.keys(nodeTypeLabels).length) ||\n (localFilters.edgeTypes && localFilters.edgeTypes.length < Object.keys(edgeTypeLabels).length) ||\n localFilters.searchQuery ||\n localFilters.showOnlyIssues;\n\n return (\n <div className=\"flex items-center gap-2 p-3 bg-card border-b border-border\">\n {/* Node types filter */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-2\">\n <Filter className=\"w-4 h-4\" />\n {formatMessage({ id: 'graph.filters.nodeTypes' })}\n <Badge variant=\"secondary\" className=\"ml-1\">\n {localFilters.nodeTypes?.length || 0}\n </Badge>\n <ChevronDown className=\"w-4 h-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel>{formatMessage({ id: 'graph.filters.selectNodeTypes' })}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {Object.entries(nodeTypeLabels).map(([type, label]) => {\n const count = nodeTypeCounts?.[type as NodeType] || 0;\n const isChecked = localFilters.nodeTypes?.includes(type as NodeType);\n return (\n <DropdownMenuCheckboxItem\n key={type}\n checked={isChecked}\n onCheckedChange={() => handleNodeTypeToggle(type as NodeType)}\n disabled={count === 0}\n >\n <span className=\"flex-1\">{label}</span>\n {count > 0 && (\n <Badge variant=\"outline\" className=\"ml-2 text-xs\">\n {count}\n </Badge>\n )}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* Edge types filter */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-2\">\n <Filter className=\"w-4 h-4\" />\n {formatMessage({ id: 'graph.filters.edgeTypes' })}\n <Badge variant=\"secondary\" className=\"ml-1\">\n {localFilters.edgeTypes?.length || 0}\n </Badge>\n <ChevronDown className=\"w-4 h-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel>{formatMessage({ id: 'graph.filters.selectEdgeTypes' })}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {Object.entries(edgeTypeLabels).map(([type, label]) => {\n const count = edgeTypeCounts?.[type as EdgeType] || 0;\n const isChecked = localFilters.edgeTypes?.includes(type as EdgeType);\n return (\n <DropdownMenuCheckboxItem\n key={type}\n checked={isChecked}\n onCheckedChange={() => handleEdgeTypeToggle(type as EdgeType)}\n disabled={count === 0}\n >\n <span className=\"flex-1\">{label}</span>\n {count > 0 && (\n <Badge variant=\"outline\" className=\"ml-2 text-xs\">\n {count}\n </Badge>\n )}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {/* Separator */}\n <div className=\"w-px h-6 bg-border\" />\n\n {/* Zoom and view controls */}\n <Button variant=\"ghost\" size=\"sm\" onClick={onFitView} title={formatMessage({ id: 'graph.actions.fitView' })}>\n <Maximize className=\"w-4 h-4\" />\n </Button>\n\n {/* Separator */}\n <div className=\"w-px h-6 bg-border\" />\n\n {/* Actions */}\n <Button variant=\"ghost\" size=\"sm\" onClick={onRefresh} title={formatMessage({ id: 'graph.actions.refresh' })}>\n <RefreshCw className=\"w-4 h-4\" />\n </Button>\n\n {/* Reset filters button (only show when active filters) */}\n {hasActiveFilters && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onResetFilters}\n className=\"text-amber-600 dark:text-amber-400\"\n title={formatMessage({ id: 'graph.actions.resetFilters' })}\n >\n <Filter className=\"w-4 h-4 mr-2\" />\n {formatMessage({ id: 'graph.actions.reset' })}\n </Button>\n )}\n </div>\n );\n}\n","// ========================================\n// Graph Sidebar Component\n// ========================================\n// Sidebar with legend and node details for Graph Explorer\n\nimport { useIntl } from 'react-intl';\nimport { X, Info, Network, FileText, GitBranch, Zap } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/Button';\nimport { Badge } from '@/components/ui/Badge';\nimport type { GraphNode, NodeType, EdgeType } from '@/types/graph-explorer';\n\nexport interface GraphSidebarProps {\n /** Selected node */\n selectedNode: GraphNode | null;\n /** Legend visibility */\n showLegend?: boolean;\n /** On close callback */\n onClose: () => void;\n}\n\n/**\n * Node type legend item\n */\ninterface LegendItem {\n type: NodeType;\n label: string;\n color: string;\n icon: React.ElementType;\n}\n\n/**\n * Graph sidebar component\n */\nexport function GraphSidebar({ selectedNode, showLegend = true, onClose }: GraphSidebarProps) {\n const { formatMessage } = useIntl();\n\n const legendItems: LegendItem[] = [\n {\n type: 'component',\n label: formatMessage({ id: 'graph.legend.component' }),\n color: 'bg-blue-500',\n icon: Network,\n },\n {\n type: 'module',\n label: formatMessage({ id: 'graph.legend.module' }),\n color: 'bg-blue-500',\n icon: FileText,\n },\n {\n type: 'class',\n label: formatMessage({ id: 'graph.legend.class' }),\n color: 'bg-green-500',\n icon: GitBranch,\n },\n {\n type: 'function',\n label: formatMessage({ id: 'graph.legend.function' }),\n color: 'bg-orange-500',\n icon: Zap,\n },\n {\n type: 'variable',\n label: formatMessage({ id: 'graph.legend.variable' }),\n color: 'bg-cyan-500',\n icon: Info,\n },\n ];\n\n const edgeLegendItems = [\n {\n type: 'imports' as EdgeType,\n label: formatMessage({ id: 'graph.legend.imports' }),\n color: 'stroke-gray-500',\n dashArray: '',\n },\n {\n type: 'calls' as EdgeType,\n label: formatMessage({ id: 'graph.legend.calls' }),\n color: 'stroke-green-500',\n dashArray: '',\n },\n {\n type: 'extends' as EdgeType,\n label: formatMessage({ id: 'graph.legend.extends' }),\n color: 'stroke-purple-500',\n dashArray: 'stroke-dasharray',\n },\n ];\n\n return (\n <div className=\"w-80 bg-card border-l border-border flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <h2 className=\"font-semibold text-sm\">\n {selectedNode\n ? formatMessage({ id: 'graph.sidebar.nodeDetails' })\n : formatMessage({ id: 'graph.sidebar.title' })}\n </h2>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose}>\n <X className=\"w-4 h-4\" />\n </Button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto\">\n {/* Node details */}\n {selectedNode ? (\n <div className=\"p-4 space-y-4\">\n {/* Node header */}\n <div>\n <div className=\"flex items-center gap-2 mb-2\">\n <Badge variant=\"outline\">{selectedNode.type}</Badge>\n {selectedNode.data.hasIssues && (\n <Badge variant=\"destructive\">\n {formatMessage({ id: 'graph.sidebar.hasIssues' })}\n </Badge>\n )}\n </div>\n <h3 className=\"text-lg font-semibold\">{selectedNode.data.label}</h3>\n </div>\n\n {/* File path */}\n {selectedNode.data.filePath && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.filePath' })}\n </label>\n <p className=\"text-sm font-mono mt-1 break-all\">{selectedNode.data.filePath}</p>\n </div>\n )}\n\n {/* Line number */}\n {selectedNode.data.lineNumber && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.lineNumber' })}\n </label>\n <p className=\"text-sm mt-1\">{selectedNode.data.lineNumber}</p>\n </div>\n )}\n\n {/* Category */}\n {selectedNode.data.category && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.category' })}\n </label>\n <p className=\"text-sm mt-1 capitalize\">{selectedNode.data.category}</p>\n </div>\n )}\n\n {/* Line count */}\n {selectedNode.data.lineCount && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.lineCount' })}\n </label>\n <p className=\"text-sm mt-1\">{selectedNode.data.lineCount} lines</p>\n </div>\n )}\n\n {/* Documentation */}\n {selectedNode.data.documentation && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.documentation' })}\n </label>\n <p className=\"text-sm mt-1 text-muted-foreground\">{selectedNode.data.documentation}</p>\n </div>\n )}\n\n {/* Tags */}\n {selectedNode.data.tags && selectedNode.data.tags.length > 0 && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.tags' })}\n </label>\n <div className=\"flex flex-wrap gap-1 mt-2\">\n {selectedNode.data.tags.map(tag => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Issues */}\n {selectedNode.data.issues && selectedNode.data.issues.length > 0 && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.issues' })}\n </label>\n <ul className=\"mt-2 space-y-1\">\n {selectedNode.data.issues.map((issue, idx) => (\n <li key={idx} className=\"text-sm text-red-600 dark:text-red-400\">\n • {issue}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n <div className=\"p-4 space-y-6\">\n {/* Node types legend */}\n {showLegend && (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase mb-3\">\n {formatMessage({ id: 'graph.legend.nodeTypes' })}\n </h3>\n <div className=\"space-y-2\">\n {legendItems.map(item => {\n const Icon = item.icon;\n return (\n <div key={item.type} className=\"flex items-center gap-2\">\n <div className={cn('w-4 h-4 rounded', item.color)} />\n <Icon className=\"w-4 h-4 text-muted-foreground\" />\n <span className=\"text-sm\">{item.label}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Edge types legend */}\n {showLegend && (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase mb-3\">\n {formatMessage({ id: 'graph.legend.edgeTypes' })}\n </h3>\n <div className=\"space-y-2\">\n {edgeLegendItems.map(item => (\n <div key={item.type} className=\"flex items-center gap-2\">\n <div className={cn('w-8 h-0.5', item.color, item.dashArray)} />\n <span className=\"text-sm\">{item.label}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Instructions */}\n <div className=\"p-3 bg-muted rounded-lg\">\n <p className=\"text-xs text-muted-foreground\">\n {formatMessage({ id: 'graph.sidebar.instructions' })}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","// ========================================\n// useGraphData Hook\n// ========================================\n// TanStack Query hooks for Graph Explorer with data transformation\n\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport {\n fetchGraphDependencies,\n fetchGraphImpact,\n type GraphDependenciesRequest,\n type GraphDependenciesResponse,\n} from '../lib/api';\nimport type {\n GraphData,\n GraphFilters,\n NodeType,\n EdgeType,\n} from '../types/graph-explorer';\n\n// Query key factory\nexport const graphKeys = {\n all: ['graph'] as const,\n dependencies: () => [...graphKeys.all, 'dependencies'] as const,\n dependency: (request: GraphDependenciesRequest) => [...graphKeys.dependencies(), request] as const,\n impact: (nodeId: string) => [...graphKeys.all, 'impact', nodeId] as const,\n};\n\n// Default stale time: 5 minutes (graph data doesn't change frequently)\nconst STALE_TIME = 5 * 60 * 1000;\n\nexport interface UseGraphDataOptions {\n /** Override default stale time (ms) */\n staleTime?: number;\n /** Enable/disable the query */\n enabled?: boolean;\n /** Root path for analysis */\n rootPath?: string;\n /** Maximum depth for traversal */\n maxDepth?: number;\n /** Filter by node types */\n nodeTypes?: NodeType[];\n /** Filter by edge types */\n edgeTypes?: EdgeType[];\n}\n\nexport interface UseGraphDataReturn {\n /** Graph data with nodes and edges */\n graphData: GraphData | undefined;\n /** Loading state for initial fetch */\n isLoading: boolean;\n /** Fetching state (initial or refetch) */\n isFetching: boolean;\n /** Error object if query failed */\n error: Error | null;\n /** Manually refetch data */\n refetch: () => Promise<void>;\n /** Invalidate and refetch graph data */\n invalidate: () => Promise<void>;\n /** Apply filters to graph data */\n applyFilters: (filters: GraphFilters) => GraphData | undefined;\n}\n\n/**\n * Transform API response to GraphData format\n */\nfunction transformToGraphData(response: GraphDependenciesResponse): GraphData {\n return {\n nodes: response.nodes,\n edges: response.edges,\n metadata: response.metadata,\n };\n}\n\n/**\n * Apply filters to graph data\n */\nfunction filterGraphData(\n graphData: GraphData | undefined,\n filters: GraphFilters\n): GraphData | undefined {\n if (!graphData) return undefined;\n\n let filteredNodes = [...graphData.nodes];\n let filteredEdges = [...graphData.edges];\n\n // Filter by node types\n if (filters.nodeTypes && filters.nodeTypes.length > 0) {\n const nodeTypeSet = new Set(filters.nodeTypes);\n filteredNodes = filteredNodes.filter(node => node.type && nodeTypeSet.has(node.type));\n }\n\n // Filter by edge types\n if (filters.edgeTypes && filters.edgeTypes.length > 0) {\n const edgeTypeSet = new Set(filters.edgeTypes);\n filteredEdges = filteredEdges.filter(edge => edge.data?.edgeType && edgeTypeSet.has(edge.data.edgeType));\n }\n\n // Filter by search query\n if (filters.searchQuery) {\n const query = filters.searchQuery.toLowerCase();\n filteredNodes = filteredNodes.filter(node =>\n node.data.label.toLowerCase().includes(query) ||\n node.data.filePath?.toLowerCase().includes(query)\n );\n }\n\n // Filter by file path pattern\n if (filters.filePathPattern) {\n const pattern = new RegExp(filters.filePathPattern, 'i');\n filteredNodes = filteredNodes.filter(node =>\n node.data.filePath?.match(pattern)\n );\n }\n\n // Filter by categories\n if (filters.categories && filters.categories.length > 0) {\n const categorySet = new Set(filters.categories);\n filteredNodes = filteredNodes.filter(node =>\n node.data.category && categorySet.has(node.data.category)\n );\n }\n\n // Filter only nodes with issues\n if (filters.showOnlyIssues) {\n filteredNodes = filteredNodes.filter(node => node.data.hasIssues);\n }\n\n // Filter by minimum complexity\n if (filters.minComplexity !== undefined) {\n filteredNodes = filteredNodes.filter(_node => {\n // This would require complexity data to be available\n // For now, we'll skip this filter\n return true;\n });\n }\n\n // Filter by tags\n if (filters.tags && filters.tags.length > 0) {\n const tagSet = new Set(filters.tags);\n filteredNodes = filteredNodes.filter(node =>\n node.data.tags?.some(tag => tagSet.has(tag))\n );\n }\n\n // Exclude tags\n if (filters.excludeTags && filters.excludeTags.length > 0) {\n const excludeTagSet = new Set(filters.excludeTags);\n filteredNodes = filteredNodes.filter(node =>\n !node.data.tags?.some(tag => excludeTagSet.has(tag))\n );\n }\n\n // Show/hide isolated nodes\n if (!filters.showIsolatedNodes) {\n const connectedNodeIds = new Set<string>();\n filteredEdges.forEach(edge => {\n connectedNodeIds.add(edge.source);\n connectedNodeIds.add(edge.target);\n });\n filteredNodes = filteredNodes.filter(node => connectedNodeIds.has(node.id));\n }\n\n // Build set of visible node IDs\n const visibleNodeIds = new Set(filteredNodes.map(node => node.id));\n\n // Filter edges to only include edges between visible nodes\n filteredEdges = filteredEdges.filter(edge =>\n visibleNodeIds.has(edge.source) && visibleNodeIds.has(edge.target)\n );\n\n // Apply max depth filter (focus on specific node)\n if (filters.focusNodeId) {\n const focusNode = filteredNodes.find(n => n.id === filters.focusNodeId);\n if (focusNode) {\n // Collect nodes within max depth\n const nodesWithinDepth = new Set<string>([filters.focusNodeId]);\n const visited = new Set<string>();\n\n const traverse = (nodeId: string, depth: number) => {\n if (depth > (filters.maxDepth || 3)) return;\n if (visited.has(nodeId)) return;\n visited.add(nodeId);\n\n filteredEdges.forEach(edge => {\n if (edge.source === nodeId && !nodesWithinDepth.has(edge.target)) {\n nodesWithinDepth.add(edge.target);\n traverse(edge.target, depth + 1);\n }\n if (edge.target === nodeId && !nodesWithinDepth.has(edge.source)) {\n nodesWithinDepth.add(edge.source);\n traverse(edge.source, depth + 1);\n }\n });\n };\n\n traverse(filters.focusNodeId, 0);\n\n filteredNodes = filteredNodes.filter(node => nodesWithinDepth.has(node.id));\n const depthNodeIds = new Set(nodesWithinDepth);\n filteredEdges = filteredEdges.filter(edge =>\n depthNodeIds.has(edge.source) && depthNodeIds.has(edge.target)\n );\n }\n }\n\n return {\n nodes: filteredNodes,\n edges: filteredEdges,\n metadata: graphData.metadata,\n };\n}\n\n/**\n * Hook for fetching and filtering graph data\n *\n * @example\n * ```tsx\n * const { graphData, isLoading, applyFilters } = useGraphData({\n * rootPath: '/src',\n * maxDepth: 3\n * });\n *\n * // Apply filters\n * const filteredData = applyFilters({\n * nodeTypes: ['component', 'hook'],\n * edgeTypes: ['imports', 'uses']\n * });\n * ```\n */\nexport function useGraphData(options: UseGraphDataOptions = {}): UseGraphDataReturn {\n const {\n staleTime = STALE_TIME,\n enabled = true,\n rootPath,\n maxDepth,\n nodeTypes,\n } = options;\n\n const queryClient = useQueryClient();\n\n const request: GraphDependenciesRequest = {\n rootPath,\n maxDepth,\n includeTypes: nodeTypes,\n };\n\n const query = useQuery({\n queryKey: graphKeys.dependency(request),\n queryFn: () => fetchGraphDependencies(request),\n staleTime,\n enabled,\n retry: 2,\n select: transformToGraphData,\n });\n\n const refetch = async () => {\n await query.refetch();\n };\n\n const invalidate = async () => {\n await queryClient.invalidateQueries({ queryKey: graphKeys.all });\n };\n\n const applyFilters = (filters: GraphFilters) => {\n return filterGraphData(query.data, filters);\n };\n\n return {\n graphData: query.data,\n isLoading: query.isLoading,\n isFetching: query.isFetching,\n error: query.error as Error | null,\n refetch,\n invalidate,\n applyFilters,\n };\n}\n\n/**\n * Hook for fetching impact analysis for a specific node\n */\nexport function useGraphImpact(\n nodeId: string | null,\n options: {\n direction?: 'upstream' | 'downstream' | 'both';\n maxDepth?: number;\n enabled?: boolean;\n } = {}\n) {\n const { direction = 'both', maxDepth = 3, enabled = true } = options;\n\n return useQuery({\n queryKey: graphKeys.impact(nodeId || ''),\n queryFn: () => {\n if (!nodeId) throw new Error('Node ID is required');\n return fetchGraphImpact({ nodeId, direction, maxDepth });\n },\n enabled: enabled && !!nodeId,\n staleTime: STALE_TIME,\n retry: 1,\n });\n}\n","// ========================================\n// Module Node Component\n// ========================================\n// Custom node for file/module visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { File, Package } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Module node component - represents files, modules, or packages\n */\nexport const ModuleNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-gray-300 dark:border-gray-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-gray-400\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className={`\n flex-shrink-0 w-8 h-8 rounded flex items-center justify-center\n ${nodeData.category === 'external' ? 'bg-purple-100 dark:bg-purple-900/30' : 'bg-blue-100 dark:bg-blue-900/30'}\n `}>\n {nodeData.category === 'external' ? (\n <Package className=\"w-4 h-4 text-purple-600 dark:text-purple-400\" />\n ) : (\n <File className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" />\n )}\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineCount && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n {nodeData.lineCount} lines\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Tags */}\n {nodeData.tags && nodeData.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-2\">\n {nodeData.tags.slice(0, 3).map((tag: string) => (\n <span\n key={tag}\n className=\"px-1.5 py-0.5 text-xs bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 rounded\"\n >\n {tag}\n </span>\n ))}\n {nodeData.tags.length > 3 && (\n <span className=\"px-1.5 py-0.5 text-xs text-muted-foreground\">\n +{nodeData.tags.length - 3}\n </span>\n )}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-gray-400\" />\n </div>\n );\n});\n\nModuleNode.displayName = 'ModuleNode';\n","// ========================================\n// Class Node Component\n// ========================================\n// Custom node for class visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { Braces } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Class node component - represents class definitions\n */\nexport const ClassNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-green-500 dark:border-green-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-green-500\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className=\"flex-shrink-0 w-8 h-8 rounded flex items-center justify-center bg-green-100 dark:bg-green-900/30\">\n <Braces className=\"w-4 h-4 text-green-600 dark:text-green-400\" />\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineNumber && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n Line {nodeData.lineNumber}\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Documentation/Tooltip */}\n {nodeData.documentation && (\n <div className=\"mt-2 text-xs text-muted-foreground line-clamp-2\" title={nodeData.documentation}>\n {nodeData.documentation}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-green-500\" />\n </div>\n );\n});\n\nClassNode.displayName = 'ClassNode';\n","// ========================================\n// Function Node Component\n// ========================================\n// Custom node for function/method visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { FunctionSquare } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Function node component - represents functions and methods\n */\nexport const FunctionNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-orange-500 dark:border-orange-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-orange-500\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className=\"flex-shrink-0 w-8 h-8 rounded flex items-center justify-center bg-orange-100 dark:bg-orange-900/30\">\n <FunctionSquare className=\"w-4 h-4 text-orange-600 dark:text-orange-400\" />\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineNumber && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n Line {nodeData.lineNumber}\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Documentation/Tooltip */}\n {nodeData.documentation && (\n <div className=\"mt-2 text-xs text-muted-foreground line-clamp-2\" title={nodeData.documentation}>\n {nodeData.documentation}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-orange-500\" />\n </div>\n );\n});\n\nFunctionNode.displayName = 'FunctionNode';\n","// ========================================\n// Variable Node Component\n// ========================================\n// Custom node for variable/constant visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport { Handle, Position, NodeProps } from '@xyflow/react';\nimport { Variable } from 'lucide-react';\nimport type { GraphNodeData } from '@/types/graph-explorer';\n\n/**\n * Variable node component - represents variables and constants\n */\nexport const VariableNode = memo((props: NodeProps) => {\n const { data, selected } = props;\n const nodeData = data as GraphNodeData;\n const hasIssues = nodeData.hasIssues;\n const severity = nodeData.severity;\n\n // Color coding based on severity\n const getBorderColor = () => {\n if (severity === 'error') return 'border-red-500';\n if (severity === 'warning') return 'border-amber-500';\n if (severity === 'info') return 'border-blue-500';\n return 'border-cyan-500 dark:border-cyan-600';\n };\n\n const getBackgroundColor = () => {\n if (severity === 'error') return 'bg-red-50 dark:bg-red-900/20';\n if (severity === 'warning') return 'bg-amber-50 dark:bg-amber-900/20';\n if (severity === 'info') return 'bg-blue-50 dark:bg-blue-900/20';\n return 'bg-white dark:bg-gray-800';\n };\n\n return (\n <div\n className={`\n px-4 py-3 rounded-lg shadow-md border-2 min-w-[180px] max-w-[240px]\n ${getBackgroundColor()} ${getBorderColor()}\n ${selected ? 'ring-2 ring-primary ring-offset-2' : ''}\n transition-all duration-200\n `}\n >\n {/* Input handle */}\n <Handle type=\"target\" position={Position.Top} className=\"!bg-cyan-500\" />\n\n {/* Node content */}\n <div className=\"flex items-start gap-2\">\n {/* Icon */}\n <div className=\"flex-shrink-0 w-8 h-8 rounded flex items-center justify-center bg-cyan-100 dark:bg-cyan-900/30\">\n <Variable className=\"w-4 h-4 text-cyan-600 dark:text-cyan-400\" />\n </div>\n\n {/* Label and info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm text-foreground truncate\" title={nodeData.label}>\n {nodeData.label}\n </div>\n {nodeData.filePath && (\n <div className=\"text-xs text-muted-foreground truncate mt-1\" title={nodeData.filePath}>\n {nodeData.filePath}\n </div>\n )}\n {nodeData.lineNumber && (\n <div className=\"text-xs text-muted-foreground mt-1\">\n Line {nodeData.lineNumber}\n </div>\n )}\n </div>\n\n {/* Issue indicator */}\n {hasIssues && (\n <div className={`\n flex-shrink-0 w-2 h-2 rounded-full\n ${severity === 'error' ? 'bg-red-500' : severity === 'warning' ? 'bg-amber-500' : 'bg-blue-500'}\n `} />\n )}\n </div>\n\n {/* Type annotation */}\n {nodeData.documentation && (\n <div className=\"mt-2 text-xs text-muted-foreground font-mono\" title={nodeData.documentation}>\n {nodeData.documentation}\n </div>\n )}\n\n {/* Output handle */}\n <Handle type=\"source\" position={Position.Bottom} className=\"!bg-cyan-500\" />\n </div>\n );\n});\n\nVariableNode.displayName = 'VariableNode';\n","// ========================================\n// Node Components Barrel Export\n// ========================================\n\nexport { ModuleNode } from './ModuleNode';\nexport { ClassNode } from './ClassNode';\nexport { FunctionNode } from './FunctionNode';\nexport { VariableNode } from './VariableNode';\n\nimport { ModuleNode } from './ModuleNode';\nimport { ClassNode } from './ClassNode';\nimport { FunctionNode } from './FunctionNode';\nimport { VariableNode } from './VariableNode';\n\n// Node types map for React Flow registration\nexport const nodeTypes = {\n module: ModuleNode,\n class: ClassNode,\n function: FunctionNode,\n variable: VariableNode,\n component: ModuleNode, // Reuse ModuleNode for components\n interface: ClassNode, // Reuse ClassNode for interfaces\n file: ModuleNode, // Reuse ModuleNode for files\n folder: ModuleNode, // Reuse ModuleNode for folders\n dependency: ModuleNode, // Reuse ModuleNode for dependencies\n api: ModuleNode, // Reuse ModuleNode for APIs\n database: ModuleNode, // Reuse ModuleNode for databases\n service: ModuleNode, // Reuse ModuleNode for services\n hook: FunctionNode, // Reuse FunctionNode for hooks\n utility: FunctionNode, // Reuse FunctionNode for utilities\n unknown: ModuleNode, // Reuse ModuleNode for unknown types\n};\n","// ========================================\n// Imports Edge Component\n// ========================================\n// Custom edge for import relationship visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport {\n EdgeProps,\n getBezierPath,\n EdgeLabelRenderer,\n BaseEdge,\n} from '@xyflow/react';\nimport type { GraphEdgeData } from '@/types/graph-explorer';\n\n/**\n * Imports edge component - represents import/requires relationships\n */\nexport const ImportsEdge = memo((props: EdgeProps) => {\n const {\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n style,\n markerEnd,\n } = props;\n const data = props.data as GraphEdgeData | undefined;\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n const edgeStyle = {\n ...style,\n stroke: selected ? '#3b82f6' : '#64748b',\n strokeWidth: selected ? 2 : 1.5,\n strokeDasharray: data?.importType === 'dynamic' ? '5,5' : undefined,\n };\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={edgeStyle}\n markerEnd={markerEnd}\n />\n {data?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: 'absolute',\n transform: `translate(-50%, -50%) translate(${(sourceX + targetX) / 2}px, ${(sourceY + targetY) / 2}px)`,\n pointerEvents: 'all',\n }}\n className=\"px-2 py-1 text-xs bg-white dark:bg-gray-800 rounded shadow border border-gray-200 dark:border-gray-700\"\n >\n {data.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n});\n\nImportsEdge.displayName = 'ImportsEdge';\n","// ========================================\n// Calls Edge Component\n// ========================================\n// Custom edge for function/method call visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport {\n EdgeProps,\n getBezierPath,\n EdgeLabelRenderer,\n BaseEdge,\n} from '@xyflow/react';\nimport type { GraphEdgeData } from '@/types/graph-explorer';\n\n/**\n * Calls edge component - represents function/method call relationships\n */\nexport const CallsEdge = memo((props: EdgeProps) => {\n const {\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n style,\n markerEnd,\n } = props;\n const data = props.data as GraphEdgeData | undefined;\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n const edgeStyle = {\n ...style,\n stroke: selected ? '#10b981' : '#22c55e',\n strokeWidth: selected ? 2 : 1.5,\n };\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={edgeStyle}\n markerEnd={markerEnd}\n />\n {data?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: 'absolute',\n transform: `translate(-50%, -50%) translate(${(sourceX + targetX) / 2}px, ${(sourceY + targetY) / 2}px)`,\n pointerEvents: 'all',\n }}\n className=\"px-2 py-1 text-xs bg-white dark:bg-gray-800 rounded shadow border border-green-200 dark:border-green-700\"\n >\n {data.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n});\n\nCallsEdge.displayName = 'CallsEdge';\n","// ========================================\n// Inherits Edge Component\n// ========================================\n// Custom edge for inheritance relationship visualization in Graph Explorer\n\nimport { memo } from 'react';\nimport {\n EdgeProps,\n getSmoothStepPath,\n EdgeLabelRenderer,\n BaseEdge,\n} from '@xyflow/react';\nimport type { GraphEdgeData } from '@/types/graph-explorer';\n\n/**\n * Inherits edge component - represents inheritance/implementation relationships\n */\nexport const InheritsEdge = memo((props: EdgeProps) => {\n const {\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n style,\n markerEnd,\n } = props;\n const data = props.data as GraphEdgeData | undefined;\n const [edgePath] = getSmoothStepPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n borderRadius: 20,\n });\n\n const edgeStyle = {\n ...style,\n stroke: selected ? '#f59e0b' : '#a855f7',\n strokeWidth: selected ? 2 : 2,\n strokeDasharray: '4,4',\n };\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={edgeStyle}\n markerEnd={markerEnd}\n />\n {data?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: 'absolute',\n transform: `translate(-50%, -50%) translate(${(sourceX + targetX) / 2}px, ${(sourceY + targetY) / 2}px)`,\n pointerEvents: 'all',\n }}\n className=\"px-2 py-1 text-xs bg-white dark:bg-gray-800 rounded shadow border border-purple-200 dark:border-purple-700\"\n >\n {data.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n});\n\nInheritsEdge.displayName = 'InheritsEdge';\n","// ========================================\n// Edge Components Barrel Export\n// ========================================\n\nexport { ImportsEdge } from './ImportsEdge';\nexport { CallsEdge } from './CallsEdge';\nexport { InheritsEdge } from './InheritsEdge';\n\nimport { ImportsEdge } from './ImportsEdge';\nimport { CallsEdge } from './CallsEdge';\nimport { InheritsEdge } from './InheritsEdge';\n\n// Edge types map for React Flow registration\nexport const edgeTypes = {\n imports: ImportsEdge,\n calls: CallsEdge,\n extends: InheritsEdge,\n implements: InheritsEdge,\n};\n","// ========================================\n// Graph Explorer Page\n// ========================================\n// Main page for code dependency graph visualization\n\nimport { useCallback, useState, useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n ReactFlow,\n Background,\n BackgroundVariant,\n Controls,\n MiniMap,\n useReactFlow,\n Panel,\n ReactFlowProvider,\n} from '@xyflow/react';\nimport '@xyflow/react/dist/style.css';\nimport { useGraphData } from '@/hooks/useGraphData';\nimport { GraphToolbar } from '@/components/shared/GraphToolbar';\nimport { GraphSidebar } from '@/components/shared/GraphSidebar';\nimport { Loader2 } from 'lucide-react';\nimport { Card } from '@/components/ui/Card';\nimport { AlertCircle } from 'lucide-react';\nimport type { GraphNode, GraphFilters, NodeType, EdgeType } from '@/types/graph-explorer';\nimport { nodeTypes } from './graph-explorer/nodes';\nimport { edgeTypes } from './graph-explorer/edges';\n\n/**\n * Inner Graph Explorer Page Component (wrapped with ReactFlowProvider)\n */\nfunction GraphExplorerPageInner() {\n const { formatMessage } = useIntl();\n const { fitView } = useReactFlow();\n\n // State\n const [selectedNode, setSelectedNode] = useState<GraphNode | null>(null);\n const [isSidebarOpen, setIsSidebarOpen] = useState(true);\n const [filters, setFilters] = useState<GraphFilters>({\n nodeTypes: ['component', 'module', 'class', 'function', 'variable', 'interface', 'hook'],\n edgeTypes: ['imports', 'exports', 'extends', 'implements', 'uses', 'calls', 'depends-on'],\n showIsolatedNodes: false,\n });\n\n // Fetch graph data\n const { graphData, isLoading, isFetching, error, refetch, applyFilters } = useGraphData({\n rootPath: '/src',\n maxDepth: 3,\n enabled: true,\n });\n\n // Apply filters to graph data\n const filteredGraphData = useMemo(() => {\n return applyFilters(filters) || { nodes: [], edges: [], metadata: undefined };\n }, [graphData, filters, applyFilters]);\n\n // Calculate node/edge type counts for badges\n const nodeTypeCounts = useMemo(() => {\n const counts: Partial<Record<NodeType, number>> = {};\n graphData?.nodes.forEach(node => {\n counts[node.type as NodeType] = (counts[node.type as NodeType] || 0) + 1;\n });\n return counts;\n }, [graphData]);\n\n const edgeTypeCounts = useMemo(() => {\n const counts: Partial<Record<EdgeType, number>> = {};\n graphData?.edges.forEach(edge => {\n const type = edge.data?.edgeType as EdgeType;\n if (type) {\n counts[type] = (counts[type] || 0) + 1;\n }\n });\n return counts;\n }, [graphData]);\n\n // Event handlers\n const handleNodeClick = useCallback((_event: React.MouseEvent, node: GraphNode) => {\n setSelectedNode(node);\n setIsSidebarOpen(true);\n }, []);\n\n const handlePaneClick = useCallback(() => {\n setSelectedNode(null);\n }, []);\n\n const handleFitView = useCallback(() => {\n fitView({ padding: 0.2, duration: 300 });\n }, [fitView]);\n\n const handleRefresh = useCallback(async () => {\n await refetch();\n }, [refetch]);\n\n const handleFiltersChange = useCallback((newFilters: GraphFilters) => {\n setFilters(newFilters);\n }, []);\n\n const handleResetFilters = useCallback(() => {\n setFilters({\n nodeTypes: ['component', 'module', 'class', 'function', 'variable', 'interface', 'hook'],\n edgeTypes: ['imports', 'exports', 'extends', 'implements', 'uses', 'calls', 'depends-on'],\n showIsolatedNodes: false,\n });\n }, []);\n\n const handleSidebarClose = useCallback(() => {\n setIsSidebarOpen(false);\n setSelectedNode(null);\n }, []);\n\n // Loading state\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Loader2 className=\"w-8 h-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"flex items-center justify-center h-full p-6\">\n <Card className=\"p-6 border-red-200 dark:border-red-800\">\n <div className=\"flex items-center gap-3\">\n <AlertCircle className=\"w-5 h-5 text-red-500\" />\n <p className=\"text-sm text-red-600 dark:text-red-400\">\n {formatMessage({ id: 'graph.error.loading' }, { message: error.message })}\n </p>\n </div>\n </Card>\n </div>\n );\n }\n\n // Empty state\n if (!graphData || graphData.nodes.length === 0) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Card className=\"p-6\">\n <div className=\"flex items-center gap-3\">\n <AlertCircle className=\"w-5 h-5 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n {formatMessage({ id: 'graph.empty' })}\n </p>\n </div>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Toolbar */}\n <GraphToolbar\n filters={filters}\n onFiltersChange={handleFiltersChange}\n onFitView={handleFitView}\n onRefresh={handleRefresh}\n onResetFilters={handleResetFilters}\n nodeTypeCounts={nodeTypeCounts}\n edgeTypeCounts={edgeTypeCounts}\n />\n\n {/* Main content area */}\n <div className=\"flex-1 flex overflow-hidden\">\n {/* Graph canvas */}\n <div className=\"flex-1 relative\">\n <ReactFlow\n nodes={filteredGraphData.nodes}\n edges={filteredGraphData.edges}\n onNodeClick={handleNodeClick}\n onPaneClick={handlePaneClick}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n fitView\n defaultViewport={{ x: 0, y: 0, zoom: 0.8 }}\n minZoom={0.1}\n maxZoom={2}\n className=\"bg-background\"\n >\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} />\n <Controls />\n <MiniMap\n nodeColor={(node) => {\n switch (node.type) {\n case 'component':\n case 'module':\n return '#3b82f6';\n case 'class':\n return '#22c55e';\n case 'function':\n return '#f97316';\n case 'variable':\n return '#06b6d4';\n default:\n return '#6b7280';\n }\n }}\n maskColor=\"rgba(0, 0, 0, 0.1)\"\n />\n\n {/* Status panel */}\n <Panel position=\"top-left\" className=\"bg-card/90 backdrop-blur border border-border rounded-lg p-3 shadow-lg\">\n <div className=\"text-xs space-y-1\">\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"text-muted-foreground\">\n {formatMessage({ id: 'graph.status.nodes' })}\n </span>\n <span className=\"font-medium\">{filteredGraphData.nodes.length}</span>\n </div>\n <div className=\"flex items-center justify-between gap-4\">\n <span className=\"text-muted-foreground\">\n {formatMessage({ id: 'graph.status.edges' })}\n </span>\n <span className=\"font-medium\">{filteredGraphData.edges.length}</span>\n </div>\n {isFetching && (\n <div className=\"text-xs text-muted-foreground\">\n {formatMessage({ id: 'graph.status.updating' })}\n </div>\n )}\n </div>\n </Panel>\n </ReactFlow>\n </div>\n\n {/* Sidebar */}\n {isSidebarOpen && (\n <GraphSidebar\n selectedNode={selectedNode}\n showLegend={!selectedNode}\n onClose={handleSidebarClose}\n />\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Graph Explorer Page Component (with ReactFlowProvider wrapper)\n */\nexport function GraphExplorerPage() {\n return (\n <ReactFlowProvider>\n <GraphExplorerPageInner />\n </ReactFlowProvider>\n );\n}\n\nexport default GraphExplorerPage;\n"],"names":["Maximize","createLucideIcon","Network","SquareFunction","Variable","GraphToolbar","filters","onFiltersChange","onFitView","onRefresh","onResetFilters","nodeTypeCounts","edgeTypeCounts","formatMessage","useIntl","localFilters","setLocalFilters","useState","nodeTypeLabels","edgeTypeLabels","handleNodeTypeToggle","nodeType","current","updated","t","newFilters","handleEdgeTypeToggle","edgeType","hasActiveFilters","jsxs","DropdownMenu","jsx","DropdownMenuTrigger","Button","Filter","Badge","_a","ChevronDown","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","type","label","count","isChecked","DropdownMenuCheckboxItem","_b","RefreshCw","GraphSidebar","selectedNode","showLegend","onClose","legendItems","FileText","GitBranch","Zap","Info","edgeLegendItems","X","tag","issue","idx","item","Icon","cn","graphKeys","request","nodeId","STALE_TIME","transformToGraphData","response","filterGraphData","graphData","filteredNodes","filteredEdges","nodeTypeSet","node","edgeTypeSet","edge","query","pattern","categorySet","_node","tagSet","excludeTagSet","connectedNodeIds","visibleNodeIds","n","nodesWithinDepth","visited","traverse","depth","depthNodeIds","useGraphData","options","staleTime","enabled","rootPath","maxDepth","nodeTypes","queryClient","useQueryClient","useQuery","fetchGraphDependencies","refetch","invalidate","applyFilters","ModuleNode","memo","props","data","selected","nodeData","hasIssues","severity","getBorderColor","getBackgroundColor","Handle","Position","Package","File","ClassNode","Braces","FunctionNode","FunctionSquare","VariableNode","ImportsEdge","id","sourceX","sourceY","targetX","targetY","sourcePosition","targetPosition","style","markerEnd","edgePath","getBezierPath","edgeStyle","Fragment","BaseEdge","EdgeLabelRenderer","CallsEdge","InheritsEdge","getSmoothStepPath","edgeTypes","GraphExplorerPageInner","fitView","useReactFlow","setSelectedNode","isSidebarOpen","setIsSidebarOpen","setFilters","isLoading","isFetching","error","filteredGraphData","useMemo","counts","handleNodeClick","useCallback","_event","handlePaneClick","handleFitView","handleRefresh","handleFiltersChange","handleResetFilters","handleSidebarClose","Loader2","Card","AlertCircle","ReactFlow","Background","BackgroundVariant","Controls","MiniMap","Panel","GraphExplorerPage","ReactFlowProvider"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}