claude-code-workflow 7.2.19 → 7.2.20

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 (196) hide show
  1. package/.claude/commands/workflow/analyze-with-file.md +33 -8
  2. package/.codex/skills/analyze-with-file/SKILL.md +55 -8
  3. package/ccw/frontend/dist/assets/{AlertDialog-zDuLRyN3.js → AlertDialog-Cukb0xv2.js} +2 -2
  4. package/ccw/frontend/dist/assets/{AlertDialog-zDuLRyN3.js.map → AlertDialog-Cukb0xv2.js.map} +1 -1
  5. package/ccw/frontend/dist/assets/{AnalysisPage-DGCGwIZY.js → AnalysisPage-Ddmv0J4x.js} +2 -2
  6. package/ccw/frontend/dist/assets/{AnalysisPage-DGCGwIZY.js.map → AnalysisPage-Ddmv0J4x.js.map} +1 -1
  7. package/ccw/frontend/dist/assets/{ApiSettingsPage-CgclCqmv.js → ApiSettingsPage-DMkrTZDX.js} +2 -2
  8. package/ccw/frontend/dist/assets/{ApiSettingsPage-CgclCqmv.js.map → ApiSettingsPage-DMkrTZDX.js.map} +1 -1
  9. package/ccw/frontend/dist/assets/{CliModeToggle-CbGH7qO4.js → CliModeToggle-DXenjpbe.js} +2 -2
  10. package/ccw/frontend/dist/assets/{CliModeToggle-CbGH7qO4.js.map → CliModeToggle-DXenjpbe.js.map} +1 -1
  11. package/ccw/frontend/dist/assets/{CliSessionSharePage-CJGlwyDw.js → CliSessionSharePage-B-ZIMqmX.js} +2 -2
  12. package/ccw/frontend/dist/assets/{CliSessionSharePage-CJGlwyDw.js.map → CliSessionSharePage-B-ZIMqmX.js.map} +1 -1
  13. package/ccw/frontend/dist/assets/{CliViewerPage-D-MHYyDt.js → CliViewerPage-9YxGyLxh.js} +2 -2
  14. package/ccw/frontend/dist/assets/{CliViewerPage-D-MHYyDt.js.map → CliViewerPage-9YxGyLxh.js.map} +1 -1
  15. package/ccw/frontend/dist/assets/{CodexLensPage-z6miX68P.js → CodexLensPage-B_uv5wdn.js} +2 -2
  16. package/ccw/frontend/dist/assets/{CodexLensPage-z6miX68P.js.map → CodexLensPage-B_uv5wdn.js.map} +1 -1
  17. package/ccw/frontend/dist/assets/{Collapsible-D5zS2wef.js → Collapsible-C2qk3yV0.js} +2 -2
  18. package/ccw/frontend/dist/assets/{Collapsible-D5zS2wef.js.map → Collapsible-C2qk3yV0.js.map} +1 -1
  19. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChcTwmAn.js → CommandsManagerPage-DBtaWxLB.js} +2 -2
  20. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChcTwmAn.js.map → CommandsManagerPage-DBtaWxLB.js.map} +1 -1
  21. package/ccw/frontend/dist/assets/{DeepWikiPage-Cv5LifSi.js → DeepWikiPage-d9K4_TgG.js} +2 -2
  22. package/ccw/frontend/dist/assets/{DeepWikiPage-Cv5LifSi.js.map → DeepWikiPage-d9K4_TgG.js.map} +1 -1
  23. package/ccw/frontend/dist/assets/{EndpointsPage-BcyNmqIa.js → EndpointsPage-DhW6hYrI.js} +2 -2
  24. package/ccw/frontend/dist/assets/{EndpointsPage-BcyNmqIa.js.map → EndpointsPage-DhW6hYrI.js.map} +1 -1
  25. package/ccw/frontend/dist/assets/{ExplorerPage-DfHtqeQM.js → ExplorerPage-DYYpCvtB.js} +2 -2
  26. package/ccw/frontend/dist/assets/{ExplorerPage-DfHtqeQM.js.map → ExplorerPage-DYYpCvtB.js.map} +1 -1
  27. package/ccw/frontend/dist/assets/{FixSessionPage-CbvZApeF.js → FixSessionPage-CSmiT5SE.js} +2 -2
  28. package/ccw/frontend/dist/assets/{FixSessionPage-CbvZApeF.js.map → FixSessionPage-CSmiT5SE.js.map} +1 -1
  29. package/ccw/frontend/dist/assets/{FloatingFileBrowser-DLz85cw9.js → FloatingFileBrowser-DvMsXLdP.js} +2 -2
  30. package/ccw/frontend/dist/assets/{FloatingFileBrowser-DLz85cw9.js.map → FloatingFileBrowser-DvMsXLdP.js.map} +1 -1
  31. package/ccw/frontend/dist/assets/{FloatingPanel-DrUTmgtV.js → FloatingPanel-sqezhSI8.js} +2 -2
  32. package/ccw/frontend/dist/assets/{FloatingPanel-DrUTmgtV.js.map → FloatingPanel-sqezhSI8.js.map} +1 -1
  33. package/ccw/frontend/dist/assets/{GraphExplorerPage-C439yLvH.js → GraphExplorerPage-DS8ghMFM.js} +2 -2
  34. package/ccw/frontend/dist/assets/{GraphExplorerPage-C439yLvH.js.map → GraphExplorerPage-DS8ghMFM.js.map} +1 -1
  35. package/ccw/frontend/dist/assets/{HistoryPage-BClJJMEy.js → HistoryPage-B-x1RyHu.js} +2 -2
  36. package/ccw/frontend/dist/assets/{HistoryPage-BClJJMEy.js.map → HistoryPage-B-x1RyHu.js.map} +1 -1
  37. package/ccw/frontend/dist/assets/{HookManagerPage-DI-2QDLJ.js → HookManagerPage-BbxpDb68.js} +2 -2
  38. package/ccw/frontend/dist/assets/{HookManagerPage-DI-2QDLJ.js.map → HookManagerPage-BbxpDb68.js.map} +1 -1
  39. package/ccw/frontend/dist/assets/{InstallationsPage-DKlz1ypL.js → InstallationsPage-3bShz_Ai.js} +2 -2
  40. package/ccw/frontend/dist/assets/{InstallationsPage-DKlz1ypL.js.map → InstallationsPage-3bShz_Ai.js.map} +1 -1
  41. package/ccw/frontend/dist/assets/{IssueHubPage--6DduN4j.js → IssueHubPage-BQY_Hh3e.js} +2 -2
  42. package/ccw/frontend/dist/assets/{IssueHubPage--6DduN4j.js.map → IssueHubPage-BQY_Hh3e.js.map} +1 -1
  43. package/ccw/frontend/dist/assets/{LiteTasksPage-39j6xEeL.js → LiteTasksPage-vD_8fQcR.js} +2 -2
  44. package/ccw/frontend/dist/assets/{LiteTasksPage-39j6xEeL.js.map → LiteTasksPage-vD_8fQcR.js.map} +1 -1
  45. package/ccw/frontend/dist/assets/{McpManagerPage-D00C9RVN.js → McpManagerPage-CI5ZzB8A.js} +2 -2
  46. package/ccw/frontend/dist/assets/{McpManagerPage-D00C9RVN.js.map → McpManagerPage-CI5ZzB8A.js.map} +1 -1
  47. package/ccw/frontend/dist/assets/{MemoryPage-BXWKdTyM.js → MemoryPage-CNuj2eNg.js} +2 -2
  48. package/ccw/frontend/dist/assets/{MemoryPage-BXWKdTyM.js.map → MemoryPage-CNuj2eNg.js.map} +1 -1
  49. package/ccw/frontend/dist/assets/{NotFoundPage-h5o3I7cF.js → NotFoundPage-BrnAXkb1.js} +2 -2
  50. package/ccw/frontend/dist/assets/{NotFoundPage-h5o3I7cF.js.map → NotFoundPage-BrnAXkb1.js.map} +1 -1
  51. package/ccw/frontend/dist/assets/{OrchestratorPage-jkyjmiI1.js → OrchestratorPage-CH81PGt4.js} +2 -2
  52. package/ccw/frontend/dist/assets/{OrchestratorPage-jkyjmiI1.js.map → OrchestratorPage-CH81PGt4.js.map} +1 -1
  53. package/ccw/frontend/dist/assets/{ProjectOverviewPage-C2bE5eb2.js → ProjectOverviewPage-dwiEXl2O.js} +2 -2
  54. package/ccw/frontend/dist/assets/{ProjectOverviewPage-C2bE5eb2.js.map → ProjectOverviewPage-dwiEXl2O.js.map} +1 -1
  55. package/ccw/frontend/dist/assets/{PromptHistoryPage-DzmPK4GZ.js → PromptHistoryPage-CabgLjJU.js} +2 -2
  56. package/ccw/frontend/dist/assets/{PromptHistoryPage-DzmPK4GZ.js.map → PromptHistoryPage-CabgLjJU.js.map} +1 -1
  57. package/ccw/frontend/dist/assets/{ReviewSessionPage-CVMH1K6G.js → ReviewSessionPage-DAMrNFn8.js} +2 -2
  58. package/ccw/frontend/dist/assets/{ReviewSessionPage-CVMH1K6G.js.map → ReviewSessionPage-DAMrNFn8.js.map} +1 -1
  59. package/ccw/frontend/dist/assets/{RulesManagerPage-BDZco-r2.js → RulesManagerPage-4jzmxPn0.js} +2 -2
  60. package/ccw/frontend/dist/assets/{RulesManagerPage-BDZco-r2.js.map → RulesManagerPage-4jzmxPn0.js.map} +1 -1
  61. package/ccw/frontend/dist/assets/{SessionDetailPage-D5cM-8Kk.js → SessionDetailPage-C5Btktmp.js} +2 -2
  62. package/ccw/frontend/dist/assets/{SessionDetailPage-D5cM-8Kk.js.map → SessionDetailPage-C5Btktmp.js.map} +1 -1
  63. package/ccw/frontend/dist/assets/{SessionsPage-BFy74ye3.js → SessionsPage-CQIB4E8m.js} +2 -2
  64. package/ccw/frontend/dist/assets/{SessionsPage-BFy74ye3.js.map → SessionsPage-CQIB4E8m.js.map} +1 -1
  65. package/ccw/frontend/dist/assets/SettingsPage-Yi9UAfm7.js +150 -0
  66. package/ccw/frontend/dist/assets/SettingsPage-Yi9UAfm7.js.map +1 -0
  67. package/ccw/frontend/dist/assets/{SkillsManagerPage-8Dsq4AUD.js → SkillsManagerPage-BqfvYSkT.js} +2 -2
  68. package/ccw/frontend/dist/assets/{SkillsManagerPage-8Dsq4AUD.js.map → SkillsManagerPage-BqfvYSkT.js.map} +1 -1
  69. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CG77iAYQ.js → SpecsSettingsPage-BdVPM5R6.js} +2 -2
  70. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CG77iAYQ.js.map → SpecsSettingsPage-BdVPM5R6.js.map} +1 -1
  71. package/ccw/frontend/dist/assets/{Switch-BbuvVsX-.js → Switch-BG929kV0.js} +2 -2
  72. package/ccw/frontend/dist/assets/{Switch-BbuvVsX-.js.map → Switch-BG929kV0.js.map} +1 -1
  73. package/ccw/frontend/dist/assets/{TabsNavigation-SGJhC8-P.js → TabsNavigation-Bol1y09b.js} +2 -2
  74. package/ccw/frontend/dist/assets/{TabsNavigation-SGJhC8-P.js.map → TabsNavigation-Bol1y09b.js.map} +1 -1
  75. package/ccw/frontend/dist/assets/{TaskDrawer-p51jeScU.js → TaskDrawer-Dwutrn8_.js} +2 -2
  76. package/ccw/frontend/dist/assets/{TaskDrawer-p51jeScU.js.map → TaskDrawer-Dwutrn8_.js.map} +1 -1
  77. package/ccw/frontend/dist/assets/{TeamPage-CvZBThbr.js → TeamPage-CpCSwpxD.js} +2 -2
  78. package/ccw/frontend/dist/assets/{TeamPage-CvZBThbr.js.map → TeamPage-CpCSwpxD.js.map} +1 -1
  79. package/ccw/frontend/dist/assets/{TerminalDashboardPage-uhM7kGKI.js → TerminalDashboardPage-DODKjOeK.js} +2 -2
  80. package/ccw/frontend/dist/assets/{TerminalDashboardPage-uhM7kGKI.js.map → TerminalDashboardPage-DODKjOeK.js.map} +1 -1
  81. package/ccw/frontend/dist/assets/{archive-D6ySrtHC.js → archive-CQw634kD.js} +2 -2
  82. package/ccw/frontend/dist/assets/{archive-D6ySrtHC.js.map → archive-CQw634kD.js.map} +1 -1
  83. package/ccw/frontend/dist/assets/{archive-restore-C1uI-5TY.js → archive-restore-B-_EG6wE.js} +2 -2
  84. package/ccw/frontend/dist/assets/{archive-restore-C1uI-5TY.js.map → archive-restore-B-_EG6wE.js.map} +1 -1
  85. package/ccw/frontend/dist/assets/{arrow-right-qE5-FMG8.js → arrow-right-CcQtxBrU.js} +2 -2
  86. package/ccw/frontend/dist/assets/{arrow-right-qE5-FMG8.js.map → arrow-right-CcQtxBrU.js.map} +1 -1
  87. package/ccw/frontend/dist/assets/{bookmark-plus-DL4iL38T.js → bookmark-plus-Cl-BbcpR.js} +2 -2
  88. package/ccw/frontend/dist/assets/{bookmark-plus-DL4iL38T.js.map → bookmark-plus-Cl-BbcpR.js.map} +1 -1
  89. package/ccw/frontend/dist/assets/{bot-CZzIeEkg.js → bot-CLSNSkW_.js} +2 -2
  90. package/ccw/frontend/dist/assets/{bot-CZzIeEkg.js.map → bot-CLSNSkW_.js.map} +1 -1
  91. package/ccw/frontend/dist/assets/{braces-MEPRT2LN.js → braces-DWwkaDS6.js} +2 -2
  92. package/ccw/frontend/dist/assets/{braces-MEPRT2LN.js.map → braces-DWwkaDS6.js.map} +1 -1
  93. package/ccw/frontend/dist/assets/{circle-stop-GQcecSUg.js → circle-stop-DiS7e6ma.js} +2 -2
  94. package/ccw/frontend/dist/assets/{circle-stop-GQcecSUg.js.map → circle-stop-DiS7e6ma.js.map} +1 -1
  95. package/ccw/frontend/dist/assets/{cpu-CzxYMs1Y.js → cpu-CuvHUVXO.js} +2 -2
  96. package/ccw/frontend/dist/assets/{cpu-CzxYMs1Y.js.map → cpu-CuvHUVXO.js.map} +1 -1
  97. package/ccw/frontend/dist/assets/{ellipsis-vertical-DZMfiFKo.js → ellipsis-vertical-BoVlINSw.js} +2 -2
  98. package/ccw/frontend/dist/assets/{ellipsis-vertical-DZMfiFKo.js.map → ellipsis-vertical-BoVlINSw.js.map} +1 -1
  99. package/ccw/frontend/dist/assets/{eye-BXfPoClW.js → eye-BEMOdcAN.js} +2 -2
  100. package/ccw/frontend/dist/assets/{eye-BXfPoClW.js.map → eye-BEMOdcAN.js.map} +1 -1
  101. package/ccw/frontend/dist/assets/{eye-off-CyaKXmAk.js → eye-off-C5HS4Ytm.js} +2 -2
  102. package/ccw/frontend/dist/assets/{eye-off-CyaKXmAk.js.map → eye-off-C5HS4Ytm.js.map} +1 -1
  103. package/ccw/frontend/dist/assets/{file-json-B4LbFfTU.js → file-json-DQ9XLq0B.js} +2 -2
  104. package/ccw/frontend/dist/assets/{file-json-B4LbFfTU.js.map → file-json-DQ9XLq0B.js.map} +1 -1
  105. package/ccw/frontend/dist/assets/{file-text-CIWG7Xgj.js → file-text-TGs_qCbw.js} +2 -2
  106. package/ccw/frontend/dist/assets/{file-text-CIWG7Xgj.js.map → file-text-TGs_qCbw.js.map} +1 -1
  107. package/ccw/frontend/dist/assets/{filter-CNBjjvBX.js → filter-CIuCqnDB.js} +2 -2
  108. package/ccw/frontend/dist/assets/{filter-CNBjjvBX.js.map → filter-CIuCqnDB.js.map} +1 -1
  109. package/ccw/frontend/dist/assets/{folder-DT_XOYw9.js → folder-BkivHBwn.js} +2 -2
  110. package/ccw/frontend/dist/assets/{folder-DT_XOYw9.js.map → folder-BkivHBwn.js.map} +1 -1
  111. package/ccw/frontend/dist/assets/{gauge-mvQWOG3S.js → gauge-CtM68fVY.js} +2 -2
  112. package/ccw/frontend/dist/assets/{gauge-mvQWOG3S.js.map → gauge-CtM68fVY.js.map} +1 -1
  113. package/ccw/frontend/dist/assets/{globe-B25jraBz.js → globe-DpnrINqP.js} +2 -2
  114. package/ccw/frontend/dist/assets/{globe-B25jraBz.js.map → globe-DpnrINqP.js.map} +1 -1
  115. package/ccw/frontend/dist/assets/{grid-3x3-CptugI_Z.js → grid-3x3-SjX0a5JH.js} +2 -2
  116. package/ccw/frontend/dist/assets/{grid-3x3-CptugI_Z.js.map → grid-3x3-SjX0a5JH.js.map} +1 -1
  117. package/ccw/frontend/dist/assets/{hard-drive-BUK9Wcoz.js → hard-drive-ByAmnoEg.js} +2 -2
  118. package/ccw/frontend/dist/assets/{hard-drive-BUK9Wcoz.js.map → hard-drive-ByAmnoEg.js.map} +1 -1
  119. package/ccw/frontend/dist/assets/{hash-dddMDYK7.js → hash-DbLc3VOZ.js} +2 -2
  120. package/ccw/frontend/dist/assets/{hash-dddMDYK7.js.map → hash-DbLc3VOZ.js.map} +1 -1
  121. package/ccw/frontend/dist/assets/{history-BdDj8MtC.js → history-Botz5Z5d.js} +2 -2
  122. package/ccw/frontend/dist/assets/{history-BdDj8MtC.js.map → history-Botz5Z5d.js.map} +1 -1
  123. package/ccw/frontend/dist/assets/{index-CcxBnbbQ.js → index-BGvyf4-9.js} +2 -2
  124. package/ccw/frontend/dist/assets/{index-CcxBnbbQ.js.map → index-BGvyf4-9.js.map} +1 -1
  125. package/ccw/frontend/dist/assets/index-BoqylFO4.css +39 -0
  126. package/ccw/frontend/dist/assets/{index-DZGHdspr.js → index-DP_mTJI8.js} +3 -3
  127. package/ccw/frontend/dist/assets/{index-DZGHdspr.js.map → index-DP_mTJI8.js.map} +1 -1
  128. package/ccw/frontend/dist/assets/{index-B6UfIzhR.js → index-MkgdhX7a.js} +2 -2
  129. package/ccw/frontend/dist/assets/{index-B6UfIzhR.js.map → index-MkgdhX7a.js.map} +1 -1
  130. package/ccw/frontend/dist/assets/{index-EFcT7h67.js → index-ni-tG9rm.js} +2 -2
  131. package/ccw/frontend/dist/assets/{index-EFcT7h67.js.map → index-ni-tG9rm.js.map} +1 -1
  132. package/ccw/frontend/dist/assets/{layout-grid-BVlT1oI7.js → layout-grid-11E4bGJz.js} +2 -2
  133. package/ccw/frontend/dist/assets/{layout-grid-BVlT1oI7.js.map → layout-grid-11E4bGJz.js.map} +1 -1
  134. package/ccw/frontend/dist/assets/{lightbulb-Mt3Tlwh4.js → lightbulb-8KrKY82b.js} +2 -2
  135. package/ccw/frontend/dist/assets/{lightbulb-Mt3Tlwh4.js.map → lightbulb-8KrKY82b.js.map} +1 -1
  136. package/ccw/frontend/dist/assets/{link-2-DXqT64qo.js → link-2-BUn6RILb.js} +2 -2
  137. package/ccw/frontend/dist/assets/{link-2-DXqT64qo.js.map → link-2-BUn6RILb.js.map} +1 -1
  138. package/ccw/frontend/dist/assets/{link-CBMtrpcI.js → link-CmP254Ai.js} +2 -2
  139. package/ccw/frontend/dist/assets/{link-CBMtrpcI.js.map → link-CmP254Ai.js.map} +1 -1
  140. package/ccw/frontend/dist/assets/{list-DDyEM4AO.js → list-BAwzl4a2.js} +2 -2
  141. package/ccw/frontend/dist/assets/{list-DDyEM4AO.js.map → list-BAwzl4a2.js.map} +1 -1
  142. package/ccw/frontend/dist/assets/{map-pin-B2FxBKfk.js → map-pin-gi342rqk.js} +2 -2
  143. package/ccw/frontend/dist/assets/{map-pin-B2FxBKfk.js.map → map-pin-gi342rqk.js.map} +1 -1
  144. package/ccw/frontend/dist/assets/{messages-square-zJfTY9pq.js → messages-square-C1Lh8q8b.js} +2 -2
  145. package/ccw/frontend/dist/assets/{messages-square-zJfTY9pq.js.map → messages-square-C1Lh8q8b.js.map} +1 -1
  146. package/ccw/frontend/dist/assets/{minimize-2-DnhGZj79.js → minimize-2-OgWNLKdq.js} +2 -2
  147. package/ccw/frontend/dist/assets/{minimize-2-DnhGZj79.js.map → minimize-2-OgWNLKdq.js.map} +1 -1
  148. package/ccw/frontend/dist/assets/{package-DYzAybhU.js → package-Djsvs5qp.js} +2 -2
  149. package/ccw/frontend/dist/assets/{package-DYzAybhU.js.map → package-Djsvs5qp.js.map} +1 -1
  150. package/ccw/frontend/dist/assets/{plug-B3kKHsu1.js → plug-DvSZP2cp.js} +2 -2
  151. package/ccw/frontend/dist/assets/{plug-B3kKHsu1.js.map → plug-DvSZP2cp.js.map} +1 -1
  152. package/ccw/frontend/dist/assets/{power-BPNNZgLy.js → power-BY7vTLmU.js} +2 -2
  153. package/ccw/frontend/dist/assets/{power-BPNNZgLy.js.map → power-BY7vTLmU.js.map} +1 -1
  154. package/ccw/frontend/dist/assets/{save-Cwry93p-.js → save-DXfqv84T.js} +2 -2
  155. package/ccw/frontend/dist/assets/{save-Cwry93p-.js.map → save-DXfqv84T.js.map} +1 -1
  156. package/ccw/frontend/dist/assets/{send-DuWWy2J8.js → send-E2o2LZSX.js} +2 -2
  157. package/ccw/frontend/dist/assets/{send-DuWWy2J8.js.map → send-E2o2LZSX.js.map} +1 -1
  158. package/ccw/frontend/dist/assets/{settings-2-C3U1eSK6.js → settings-2-ChD1LFHH.js} +2 -2
  159. package/ccw/frontend/dist/assets/{settings-2-C3U1eSK6.js.map → settings-2-ChD1LFHH.js.map} +1 -1
  160. package/ccw/frontend/dist/assets/{square-check-big-CrG1ejFB.js → square-check-big-CBymuqmD.js} +2 -2
  161. package/ccw/frontend/dist/assets/{square-check-big-CrG1ejFB.js.map → square-check-big-CBymuqmD.js.map} +1 -1
  162. package/ccw/frontend/dist/assets/{square-pen-eLWlCgZ5.js → square-pen-BfaiJgOX.js} +2 -2
  163. package/ccw/frontend/dist/assets/{square-pen-eLWlCgZ5.js.map → square-pen-BfaiJgOX.js.map} +1 -1
  164. package/ccw/frontend/dist/assets/{star-sveo4KRn.js → star-DHMWqZ09.js} +2 -2
  165. package/ccw/frontend/dist/assets/{star-sveo4KRn.js.map → star-DHMWqZ09.js.map} +1 -1
  166. package/ccw/frontend/dist/assets/{style-CRdAX7Cu.js → style-wvcOEAiM.js} +2 -2
  167. package/ccw/frontend/dist/assets/{style-CRdAX7Cu.js.map → style-wvcOEAiM.js.map} +1 -1
  168. package/ccw/frontend/dist/assets/{target-Oz1-z8Zu.js → target-B8AMmf_N.js} +2 -2
  169. package/ccw/frontend/dist/assets/{target-Oz1-z8Zu.js.map → target-B8AMmf_N.js.map} +1 -1
  170. package/ccw/frontend/dist/assets/{test-tube-BozkZKD6.js → test-tube-BpDeTJi1.js} +2 -2
  171. package/ccw/frontend/dist/assets/{test-tube-BozkZKD6.js.map → test-tube-BpDeTJi1.js.map} +1 -1
  172. package/ccw/frontend/dist/assets/{upload-CTlUsxyh.js → upload-pflkdIDG.js} +2 -2
  173. package/ccw/frontend/dist/assets/{upload-CTlUsxyh.js.map → upload-pflkdIDG.js.map} +1 -1
  174. package/ccw/frontend/dist/assets/{useApiSettings-D6WfgFYj.js → useApiSettings-BPx4DyKT.js} +2 -2
  175. package/ccw/frontend/dist/assets/{useApiSettings-D6WfgFYj.js.map → useApiSettings-BPx4DyKT.js.map} +1 -1
  176. package/ccw/frontend/dist/assets/{useCli-CgGVNN5I.js → useCli-D1jfH3XA.js} +2 -2
  177. package/ccw/frontend/dist/assets/{useCli-CgGVNN5I.js.map → useCli-D1jfH3XA.js.map} +1 -1
  178. package/ccw/frontend/dist/assets/{useCommands-o5CKv-10.js → useCommands-DhR71vpa.js} +2 -2
  179. package/ccw/frontend/dist/assets/{useCommands-o5CKv-10.js.map → useCommands-DhR71vpa.js.map} +1 -1
  180. package/ccw/frontend/dist/assets/{useDebounce-rKo_bCBK.js → useDebounce-a6Yyer3m.js} +2 -2
  181. package/ccw/frontend/dist/assets/{useDebounce-rKo_bCBK.js.map → useDebounce-a6Yyer3m.js.map} +1 -1
  182. package/ccw/frontend/dist/assets/{useFileExplorer-WeE4t9Hg.js → useFileExplorer-B8W2JTj2.js} +2 -2
  183. package/ccw/frontend/dist/assets/{useFileExplorer-WeE4t9Hg.js.map → useFileExplorer-B8W2JTj2.js.map} +1 -1
  184. package/ccw/frontend/dist/assets/{useLocale-BS0tTC-_.js → useLocale-aMHdQIL_.js} +2 -2
  185. package/ccw/frontend/dist/assets/{useLocale-BS0tTC-_.js.map → useLocale-aMHdQIL_.js.map} +1 -1
  186. package/ccw/frontend/dist/assets/{useSkills-BUgAhw6r.js → useSkills-BHpc2LtN.js} +3 -3
  187. package/ccw/frontend/dist/assets/{useSkills-BUgAhw6r.js.map → useSkills-BHpc2LtN.js.map} +1 -1
  188. package/ccw/frontend/dist/assets/{useSystemSettings-CLhmINg1.js → useSystemSettings-BFD0SvEF.js} +2 -2
  189. package/ccw/frontend/dist/assets/{useSystemSettings-CLhmINg1.js.map → useSystemSettings-BFD0SvEF.js.map} +1 -1
  190. package/ccw/frontend/dist/assets/{wand-sparkles-BUHKJH1X.js → wand-sparkles-dYtI2IKM.js} +2 -2
  191. package/ccw/frontend/dist/assets/{wand-sparkles-BUHKJH1X.js.map → wand-sparkles-dYtI2IKM.js.map} +1 -1
  192. package/ccw/frontend/dist/index.html +2 -2
  193. package/package.json +1 -1
  194. package/ccw/frontend/dist/assets/SettingsPage-Qj0fFDjX.js +0 -150
  195. package/ccw/frontend/dist/assets/SettingsPage-Qj0fFDjX.js.map +0 -1
  196. package/ccw/frontend/dist/assets/index-nU0QYi1y.css +0 -39
@@ -1,2 +1,2 @@
1
- import{u as H,j as e,ap as q,ao as J,c as j,B as $,a9 as Y,aa as ee,r as d,bZ as se,b_ as te,x as ae,y as re,z as ne,A as oe,E as le,bu as D,aS as Q,af as ie,U as de,I as G,e as f,aU as ce,N as U,M as me,K,bO as xe,av as he,G as pe,o as R,s as ue,aP as Z,a7 as je,R as ge,m as fe,C as T,k as ve,b as be}from"./index-DZGHdspr.js";import{T as Ne}from"./TabsNavigation-SGJhC8-P.js";import{u as we,a as ye}from"./useCommands-o5CKv-10.js";import{S as X}from"./Switch-BbuvVsX-.js";import{C as Ce,a as ke,b as Se}from"./Collapsible-D5zS2wef.js";import{F as Le}from"./FloatingFileBrowser-DLz85cw9.js";import{F as _}from"./folder-DT_XOYw9.js";import{M as Me,a as Ie}from"./minimize-2-DnhGZj79.js";import{E as Pe}from"./eye-BXfPoClW.js";import{E as Fe}from"./eye-off-CyaKXmAk.js";import"./errorSanitizer-IY9pf5g4.js";import"./FloatingPanel-DrUTmgtV.js";import"./useFileExplorer-WeE4t9Hg.js";function De(s){const n={cli:"terminal",workflow:"git-branch",memory:"brain",task:"clipboard-list",issue:"alert-circle",loop:"repeat",skill:"sparkles",other:"folder"},a=s.split("/")[0];return n[a]||"folder"}function Ee(s){const n={cli:"text-primary bg-primary/10",workflow:"text-success bg-success/10",memory:"text-indigo bg-indigo/10",task:"text-warning bg-warning/10",issue:"text-destructive bg-destructive/10",loop:"text-purple bg-purple/10",skill:"text-pink bg-pink/10",other:"text-muted-foreground bg-muted"},a=s.split("/")[0];return n[a]||"text-muted-foreground bg-muted"}function Ae(s){return s.includes("/")?s.split("/").map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" > "):s}function Be(s){const n={terminal:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("polyline",{points:"4 17 10 11 4 5"}),e.jsx("line",{x1:"12",y1:"19",x2:"20",y2:"19"})]}),"git-branch":({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("line",{x1:"6",y1:"3",x2:"6",y2:"15"}),e.jsx("circle",{cx:"18",cy:"6",r:"3"}),e.jsx("circle",{cx:"6",cy:"18",r:"3"}),e.jsx("path",{d:"M18 9a9 9 0 0 1-9 9"})]}),brain:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("path",{d:"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z"}),e.jsx("path",{d:"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z"})]}),"clipboard-list":({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}),e.jsx("path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}),e.jsx("path",{d:"M12 11h4"}),e.jsx("path",{d:"M12 16h4"}),e.jsx("path",{d:"M8 11h.01"}),e.jsx("path",{d:"M8 16h.01"})]}),"alert-circle":({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),e.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),repeat:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("path",{d:"m17 2 4 4-4 4"}),e.jsx("path",{d:"M3 11V9a4 4 0 0 1 4-4h14"}),e.jsx("path",{d:"m7 22-4-4 4-4"}),e.jsx("path",{d:"M21 13v2a4 4 0 0 1-4 4H3"})]}),sparkles:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"}),e.jsx("path",{d:"M5 3v4"}),e.jsx("path",{d:"M19 17v4"}),e.jsx("path",{d:"M3 5h4"}),e.jsx("path",{d:"M17 19h4"})]}),folder:({className:a})=>e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:e.jsx("path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"})})};return n[s]||n.folder}function Te({groupName:s,commands:n,isExpanded:a,onToggleExpand:p,onToggleCommand:t,onToggleGroup:v,isToggling:l,showDisabled:b=!1}){const{formatMessage:m}=H(),N=n.filter(h=>h.enabled),c=N.length===n.length&&n.length>0,u=b?n:N,k=De(s),I=Ee(s),i=Ae(s),x=Be(k),g=(s.match(/\//g)||[]).length,y=h=>{v(s,h)};return e.jsx("div",{className:j("mb-4",g>0&&"ml-5"),style:g>0?{marginLeft:`${g*20}px`}:void 0,children:e.jsxs(Ce,{open:a,onOpenChange:()=>p(s),children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-card border border-border rounded-lg hover:bg-muted/50 transition-colors",children:[e.jsx(ke,{asChild:!0,children:e.jsxs("div",{className:"flex items-center gap-3 flex-1 cursor-pointer",children:[a?e.jsx(q,{className:"w-5 h-5 text-muted-foreground transition-transform"}):e.jsx(J,{className:"w-5 h-5 text-muted-foreground transition-transform"}),e.jsx("div",{className:j("w-8 h-8 rounded-lg flex items-center justify-center",I),children:e.jsx(x,{className:"w-4 h-4"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:i}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[N.length,"/",n.length," ",m({id:"commands.group.enabled"})]})]})]})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(X,{checked:c,onCheckedChange:y,disabled:l||n.length===0,className:j("data-[state=checked]:bg-success"),title:m(c?{id:"commands.group.clickToDisableAll"}:{id:"commands.group.clickToEnableAll"})}),e.jsx($,{variant:"secondary",className:"text-xs",children:n.length})]})]}),e.jsx(Se,{className:"mt-3",children:e.jsx("div",{className:"bg-card border border-border rounded-lg overflow-hidden",children:e.jsxs("table",{className:"w-full",style:{tableLayout:"fixed"},children:[e.jsxs("colgroup",{children:[e.jsx("col",{style:{width:"200px"}}),e.jsx("col",{style:{width:"auto"}}),e.jsx("col",{style:{width:"100px"}}),e.jsx("col",{style:{width:"80px"}})]}),e.jsx("thead",{className:"bg-muted/30 border-b border-border",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.name"})}),e.jsx("th",{className:"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.description"})}),e.jsx("th",{className:"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.scope"})}),e.jsx("th",{className:"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.status"})})]})}),e.jsxs("tbody",{className:"divide-y divide-border",children:[u.map(h=>e.jsx(Ge,{command:h,onToggle:t,disabled:l},`${h.name}-${h.location||"default"}`)),u.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:4,className:"px-4 py-8 text-center text-sm text-muted-foreground",children:m(b?{id:"commands.group.noCommands"}:{id:"commands.group.noEnabledCommands"})})})]})]})})})]})})}function Ge({command:s,onToggle:n,disabled:a}){const{formatMessage:p}=H(),t=!s.enabled;return e.jsxs("tr",{className:j("hover:bg-muted/20 transition-colors",t&&"opacity-60"),children:[e.jsx("td",{className:"px-4 py-3 text-sm font-medium text-foreground",children:e.jsxs("code",{className:"break-words",children:["/",s.name]})}),e.jsx("td",{className:"px-4 py-3 text-sm text-muted-foreground",children:e.jsx("div",{className:"line-clamp-2 break-words",children:s.description||p({id:"commands.card.noDescription"})})}),e.jsx("td",{className:"px-4 py-3 text-center text-xs text-muted-foreground",children:e.jsx("span",{className:"whitespace-nowrap",children:s.location||"project"})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(X,{checked:s.enabled,onCheckedChange:v=>n(s.name,v),disabled:a,className:"data-[state=checked]:bg-primary"})})})]})}function He({open:s,onOpenChange:n,onCreated:a,cliType:p="claude"}){const{formatMessage:t}=H(),v=Y(ee),[l,b]=d.useState("import"),[m,N]=d.useState("project"),[c,u]=d.useState(""),[k,I]=d.useState(""),[i,x]=d.useState(null),[g,y]=d.useState(!1),[h,A]=d.useState(""),[S,E]=d.useState(""),[w,L]=d.useState(!1),[O,P]=d.useState(!1),C=d.useCallback(()=>{b("import"),N("project"),u(""),I(""),x(null),y(!1),A(""),E(""),L(!1),P(!1)},[]),F=d.useCallback(r=>{r||C(),n(r)},[n,C]),W=d.useCallback(async()=>{if(c.trim()){y(!0),x(null);try{const r=await se(c.trim());x(r)}catch(r){x({valid:!1,errors:[r instanceof Error?r.message:String(r)]})}finally{y(!1)}}},[c]),z=d.useCallback(async()=>{if(l==="import"){if(!c.trim()||!(i!=null&&i.valid))return}else if(!h.trim()||!S.trim())return;L(!0);try{await te({mode:l,location:m,sourcePath:l==="import"?c.trim():void 0,commandName:l==="import"?k.trim()||void 0:h.trim(),description:l==="cli-generate"?S.trim():void 0,generationType:l==="cli-generate"?"description":void 0,projectPath:v,cliType:p}),F(!1),a()}catch(r){console.error("Failed to create command:",r),l==="import"&&x({valid:!1,errors:[r instanceof Error?r.message:t({id:"commands.create.createError"})]})}finally{L(!1)}},[l,m,c,k,h,S,i,v,F,a,t]),V=l==="import"?c.trim()&&(i==null?void 0:i.valid)&&!w:h.trim()&&S.trim()&&!w;return e.jsxs(ae,{open:s,onOpenChange:F,children:[e.jsxs(re,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(ne,{children:[e.jsx(oe,{children:t({id:"commands.create.title"})}),e.jsx(le,{children:t({id:"commands.description"})})]}),e.jsxs("div",{className:"space-y-5 py-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{children:t({id:"commands.create.location"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",m==="project"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>N("project"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(_,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.locationProject"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:`.${p}/commands/`})]})]})}),e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",m==="user"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>N("user"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Q,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.locationUser"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:`~/.${p}/commands/`})]})]})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{children:t({id:"commands.create.mode"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",l==="import"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>b("import"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.modeImport"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.modeImportHint"})})]})]})}),e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",l==="cli-generate"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>b("cli-generate"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(de,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.modeGenerate"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.modeGenerateHint"})})]})]})})]})]}),l==="import"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{htmlFor:"sourcePath",children:t({id:"commands.create.sourcePath"})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(G,{id:"sourcePath",value:c,onChange:r=>{u(r.target.value),x(null)},placeholder:t({id:"commands.create.sourcePathPlaceholder"}),className:"font-mono text-sm flex-1"}),e.jsx(f,{type:"button",variant:"outline",size:"icon",onClick:()=>P(!0),title:t({id:"commands.create.browseFile"}),children:e.jsx(ce,{className:"w-4 h-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.sourcePathHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{htmlFor:"customName",children:[t({id:"commands.create.customName"}),e.jsxs("span",{className:"text-muted-foreground ml-1",children:["(",t({id:"commands.create.customNameHint"}),")"]})]}),e.jsx(G,{id:"customName",value:k,onChange:r=>I(r.target.value),placeholder:t({id:"commands.create.customNamePlaceholder"})})]}),g&&e.jsxs("div",{className:"flex items-center gap-2 p-3 bg-muted/50 rounded-lg",children:[e.jsx(U,{className:"w-4 h-4 animate-spin"}),e.jsx("span",{className:"text-sm text-muted-foreground",children:t({id:"commands.create.validating"})})]}),i&&!g&&(i.valid?e.jsxs("div",{className:"p-4 bg-green-500/10 border border-green-500/20 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-2 text-green-600 mb-2",children:[e.jsx(me,{className:"w-5 h-5"}),e.jsx("span",{className:"font-medium",children:t({id:"commands.create.validCommand"})})]}),i.commandInfo&&e.jsxs("div",{className:"space-y-1 text-sm",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[t({id:"commands.card.name"}),": "]}),e.jsx("span",{children:i.commandInfo.name})]}),i.commandInfo.description&&e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[t({id:"commands.card.description"}),": "]}),e.jsx("span",{children:i.commandInfo.description})]}),i.commandInfo.usage&&e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[t({id:"commands.card.usage"}),": "]}),e.jsx("span",{children:i.commandInfo.usage})]})]})]}):e.jsxs("div",{className:"p-4 bg-destructive/10 border border-destructive/20 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-2 text-destructive mb-2",children:[e.jsx(K,{className:"w-5 h-5"}),e.jsx("span",{className:"font-medium",children:t({id:"commands.create.invalidCommand"})})]}),i.errors&&e.jsx("ul",{className:"space-y-1 text-sm",children:i.errors.map((r,o)=>e.jsx("li",{className:"text-destructive",children:r},o))})]}))]}),l==="cli-generate"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{htmlFor:"commandName",children:[t({id:"commands.create.commandName"})," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(G,{id:"commandName",value:h,onChange:r=>A(r.target.value),placeholder:t({id:"commands.create.commandNamePlaceholder"})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.commandNameHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{htmlFor:"description",children:[t({id:"commands.create.descriptionLabel"})," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(xe,{id:"description",value:S,onChange:r=>E(r.target.value),placeholder:t({id:"commands.create.descriptionPlaceholder"}),rows:6}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.descriptionHint"})})]}),e.jsx("div",{className:"p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(he,{className:"w-4 h-4 text-blue-600 mt-0.5"}),e.jsxs("div",{className:"text-sm text-blue-600",children:[e.jsx("p",{className:"font-medium",children:t({id:"commands.create.generateInfo"})}),e.jsx("p",{className:"text-xs mt-1",children:t({id:"commands.create.generateTimeHint"})})]})]})})]})]}),e.jsxs(pe,{className:"gap-2",children:[e.jsx(f,{variant:"outline",onClick:()=>F(!1),disabled:w,children:t({id:"commands.actions.cancel"})}),l==="import"&&e.jsxs(f,{variant:"outline",onClick:W,disabled:!c.trim()||g||w,children:[g&&e.jsx(U,{className:"w-4 h-4 mr-2 animate-spin"}),t({id:"commands.create.validate"})]}),e.jsxs(f,{onClick:z,disabled:!V,children:[w&&e.jsx(U,{className:"w-4 h-4 mr-2 animate-spin"}),t(w?{id:"commands.create.creating"}:l==="import"?{id:"commands.create.import"}:{id:"commands.create.generate"})]})]})]}),e.jsx(Le,{isOpen:O,onClose:()=>P(!1),rootPath:v,onInsertPath:r=>{u(r),x(null),P(!1)},initialSelectedPath:c||null})]})}function Je(){const{formatMessage:s}=H(),[n,a]=d.useState("project"),[p,t]=d.useState(!1),[v,l]=d.useState(new Set(["cli","workflow"])),[b,m]=d.useState(""),[N,c]=d.useState(!1),u=R(ue),k=R(o=>o.toggleImmersiveMode),{commands:I,groupedCommands:i,groups:x,enabledCount:g,disabledCount:y,projectCount:h,userCount:A,isLoading:S,isFetching:E,error:w,refetch:L}=we({filter:{location:n,showDisabled:p,search:b||void 0}}),{toggleCommand:O,toggleGroup:P,isToggling:C}=ye(),F=o=>{l(M=>{const B=new Set(M);return B.has(o)?B.delete(o):B.add(o),B})},W=()=>{l(new Set(x))},z=()=>{l(new Set)},V=(o,M)=>{O(o,M,n)},r=(o,M)=>{P(o,M,n)};return e.jsxs("div",{className:j("space-y-6",u&&"h-screen overflow-hidden"),children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold text-foreground flex items-center gap-2",children:[e.jsx(Z,{className:"w-6 h-6 text-primary"}),s({id:"commands.title"})]}),e.jsx("p",{className:"text-muted-foreground mt-1",children:s({id:"commands.description"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{onClick:()=>c(!0),disabled:C,children:[e.jsx(je,{className:"w-4 h-4 mr-2"}),s({id:"commands.actions.create"})]}),e.jsx("button",{onClick:k,className:j("p-2 rounded-md transition-colors",u?"bg-primary/10 text-primary":"text-muted-foreground hover:text-foreground hover:bg-muted"),title:u?"Exit Fullscreen":"Fullscreen",children:u?e.jsx(Me,{className:"w-4 h-4"}):e.jsx(Ie,{className:"w-4 h-4"})}),e.jsxs(f,{variant:"outline",onClick:()=>L(),disabled:E,children:[e.jsx(ge,{className:j("w-4 h-4 mr-2",E&&"animate-spin")}),s({id:"common.actions.refresh"})]})]})]}),w&&e.jsxs("div",{className:"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive",children:[e.jsx(fe,{className:"h-5 w-5 flex-shrink-0"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium",children:s({id:"common.errors.loadFailed"})}),e.jsx("p",{className:"text-xs mt-0.5",children:w.message})]}),e.jsx(f,{variant:"outline",size:"sm",onClick:()=>L(),children:s({id:"home.errors.retry"})})]}),e.jsx(Ne,{value:n,onValueChange:o=>a(o),tabs:[{value:"project",label:s({id:"commands.location.project"}),icon:e.jsx(_,{className:"h-4 w-4"}),badge:e.jsx($,{variant:"secondary",className:"ml-2",children:h}),disabled:C},{value:"user",label:s({id:"commands.location.user"}),icon:e.jsx(Q,{className:"h-4 w-4"}),badge:e.jsx($,{variant:"secondary",className:"ml-2",children:A}),disabled:C}]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Z,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"text-2xl font-bold",children:I.length})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s({id:"commands.stats.total"})})]}),e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ve,{className:"w-5 h-5 text-success"}),e.jsx("span",{className:"text-2xl font-bold",children:g})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s({id:"commands.stats.enabled"})})]}),e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{className:"w-5 h-5 text-muted-foreground"}),e.jsx("span",{className:"text-2xl font-bold",children:y})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s({id:"commands.stats.disabled"})})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(be,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(G,{placeholder:s({id:"commands.filters.searchPlaceholder"}),value:b,onChange:o=>m(o.target.value),className:"pl-9"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{variant:p?"default":"outline",size:"sm",onClick:()=>t(o=>!o),disabled:C,children:[p?e.jsx(Pe,{className:"w-4 h-4 mr-2"}):e.jsx(Fe,{className:"w-4 h-4 mr-2"}),s(p?{id:"commands.actions.hideDisabled"}:{id:"commands.actions.showDisabled"}),e.jsxs("span",{className:"ml-1 text-xs opacity-70",children:["(",y,")"]})]}),e.jsx(f,{variant:"outline",size:"sm",onClick:W,disabled:x.length===0,children:s({id:"commands.actions.expandAll"})}),e.jsx(f,{variant:"outline",size:"sm",onClick:z,disabled:x.length===0,children:s({id:"commands.actions.collapseAll"})})]})]}),S?e.jsx("div",{className:"space-y-4",children:[1,2,3,4,5].map(o=>e.jsx("div",{className:"h-32 bg-muted animate-pulse rounded-lg"},o))}):x.length===0?e.jsxs(T,{className:"p-8 text-center",children:[e.jsx(Z,{className:"w-12 h-12 mx-auto text-muted-foreground/50"}),e.jsx("h3",{className:"mt-4 text-lg font-medium text-foreground",children:s({id:"commands.emptyState.title"})}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:s({id:"commands.emptyState.message"})})]}):e.jsx("div",{className:"commands-accordion",children:x.map(o=>{const M=i[o]||[];return e.jsx(Te,{groupName:o,commands:M,isExpanded:v.has(o),onToggleExpand:F,onToggleCommand:V,onToggleGroup:r,isToggling:C,showDisabled:p},o)})}),e.jsx(He,{open:N,onOpenChange:c,onCreated:()=>{c(!1),L()}})]})}export{Je as CommandsManagerPage,Je as default};
2
- //# sourceMappingURL=CommandsManagerPage-ChcTwmAn.js.map
1
+ import{u as H,j as e,ap as q,ao as J,c as j,B as $,a9 as Y,aa as ee,r as d,bZ as se,b_ as te,x as ae,y as re,z as ne,A as oe,E as le,bu as D,aS as Q,af as ie,U as de,I as G,e as f,aU as ce,N as U,M as me,K,bO as xe,av as he,G as pe,o as R,s as ue,aP as Z,a7 as je,R as ge,m as fe,C as T,k as ve,b as be}from"./index-DP_mTJI8.js";import{T as Ne}from"./TabsNavigation-Bol1y09b.js";import{u as we,a as ye}from"./useCommands-DhR71vpa.js";import{S as X}from"./Switch-BG929kV0.js";import{C as Ce,a as ke,b as Se}from"./Collapsible-C2qk3yV0.js";import{F as Le}from"./FloatingFileBrowser-DvMsXLdP.js";import{F as _}from"./folder-BkivHBwn.js";import{M as Me,a as Ie}from"./minimize-2-OgWNLKdq.js";import{E as Pe}from"./eye-BEMOdcAN.js";import{E as Fe}from"./eye-off-C5HS4Ytm.js";import"./errorSanitizer-IY9pf5g4.js";import"./FloatingPanel-sqezhSI8.js";import"./useFileExplorer-B8W2JTj2.js";function De(s){const n={cli:"terminal",workflow:"git-branch",memory:"brain",task:"clipboard-list",issue:"alert-circle",loop:"repeat",skill:"sparkles",other:"folder"},a=s.split("/")[0];return n[a]||"folder"}function Ee(s){const n={cli:"text-primary bg-primary/10",workflow:"text-success bg-success/10",memory:"text-indigo bg-indigo/10",task:"text-warning bg-warning/10",issue:"text-destructive bg-destructive/10",loop:"text-purple bg-purple/10",skill:"text-pink bg-pink/10",other:"text-muted-foreground bg-muted"},a=s.split("/")[0];return n[a]||"text-muted-foreground bg-muted"}function Ae(s){return s.includes("/")?s.split("/").map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" > "):s}function Be(s){const n={terminal:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("polyline",{points:"4 17 10 11 4 5"}),e.jsx("line",{x1:"12",y1:"19",x2:"20",y2:"19"})]}),"git-branch":({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("line",{x1:"6",y1:"3",x2:"6",y2:"15"}),e.jsx("circle",{cx:"18",cy:"6",r:"3"}),e.jsx("circle",{cx:"6",cy:"18",r:"3"}),e.jsx("path",{d:"M18 9a9 9 0 0 1-9 9"})]}),brain:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("path",{d:"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z"}),e.jsx("path",{d:"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z"})]}),"clipboard-list":({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}),e.jsx("path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}),e.jsx("path",{d:"M12 11h4"}),e.jsx("path",{d:"M12 16h4"}),e.jsx("path",{d:"M8 11h.01"}),e.jsx("path",{d:"M8 16h.01"})]}),"alert-circle":({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),e.jsx("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]}),repeat:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("path",{d:"m17 2 4 4-4 4"}),e.jsx("path",{d:"M3 11V9a4 4 0 0 1 4-4h14"}),e.jsx("path",{d:"m7 22-4-4 4-4"}),e.jsx("path",{d:"M21 13v2a4 4 0 0 1-4 4H3"})]}),sparkles:({className:a})=>e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:[e.jsx("path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"}),e.jsx("path",{d:"M5 3v4"}),e.jsx("path",{d:"M19 17v4"}),e.jsx("path",{d:"M3 5h4"}),e.jsx("path",{d:"M17 19h4"})]}),folder:({className:a})=>e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:a,children:e.jsx("path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"})})};return n[s]||n.folder}function Te({groupName:s,commands:n,isExpanded:a,onToggleExpand:p,onToggleCommand:t,onToggleGroup:v,isToggling:l,showDisabled:b=!1}){const{formatMessage:m}=H(),N=n.filter(h=>h.enabled),c=N.length===n.length&&n.length>0,u=b?n:N,k=De(s),I=Ee(s),i=Ae(s),x=Be(k),g=(s.match(/\//g)||[]).length,y=h=>{v(s,h)};return e.jsx("div",{className:j("mb-4",g>0&&"ml-5"),style:g>0?{marginLeft:`${g*20}px`}:void 0,children:e.jsxs(Ce,{open:a,onOpenChange:()=>p(s),children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-card border border-border rounded-lg hover:bg-muted/50 transition-colors",children:[e.jsx(ke,{asChild:!0,children:e.jsxs("div",{className:"flex items-center gap-3 flex-1 cursor-pointer",children:[a?e.jsx(q,{className:"w-5 h-5 text-muted-foreground transition-transform"}):e.jsx(J,{className:"w-5 h-5 text-muted-foreground transition-transform"}),e.jsx("div",{className:j("w-8 h-8 rounded-lg flex items-center justify-center",I),children:e.jsx(x,{className:"w-4 h-4"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:i}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[N.length,"/",n.length," ",m({id:"commands.group.enabled"})]})]})]})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(X,{checked:c,onCheckedChange:y,disabled:l||n.length===0,className:j("data-[state=checked]:bg-success"),title:m(c?{id:"commands.group.clickToDisableAll"}:{id:"commands.group.clickToEnableAll"})}),e.jsx($,{variant:"secondary",className:"text-xs",children:n.length})]})]}),e.jsx(Se,{className:"mt-3",children:e.jsx("div",{className:"bg-card border border-border rounded-lg overflow-hidden",children:e.jsxs("table",{className:"w-full",style:{tableLayout:"fixed"},children:[e.jsxs("colgroup",{children:[e.jsx("col",{style:{width:"200px"}}),e.jsx("col",{style:{width:"auto"}}),e.jsx("col",{style:{width:"100px"}}),e.jsx("col",{style:{width:"80px"}})]}),e.jsx("thead",{className:"bg-muted/30 border-b border-border",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.name"})}),e.jsx("th",{className:"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.description"})}),e.jsx("th",{className:"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.scope"})}),e.jsx("th",{className:"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase",children:m({id:"commands.table.status"})})]})}),e.jsxs("tbody",{className:"divide-y divide-border",children:[u.map(h=>e.jsx(Ge,{command:h,onToggle:t,disabled:l},`${h.name}-${h.location||"default"}`)),u.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:4,className:"px-4 py-8 text-center text-sm text-muted-foreground",children:m(b?{id:"commands.group.noCommands"}:{id:"commands.group.noEnabledCommands"})})})]})]})})})]})})}function Ge({command:s,onToggle:n,disabled:a}){const{formatMessage:p}=H(),t=!s.enabled;return e.jsxs("tr",{className:j("hover:bg-muted/20 transition-colors",t&&"opacity-60"),children:[e.jsx("td",{className:"px-4 py-3 text-sm font-medium text-foreground",children:e.jsxs("code",{className:"break-words",children:["/",s.name]})}),e.jsx("td",{className:"px-4 py-3 text-sm text-muted-foreground",children:e.jsx("div",{className:"line-clamp-2 break-words",children:s.description||p({id:"commands.card.noDescription"})})}),e.jsx("td",{className:"px-4 py-3 text-center text-xs text-muted-foreground",children:e.jsx("span",{className:"whitespace-nowrap",children:s.location||"project"})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(X,{checked:s.enabled,onCheckedChange:v=>n(s.name,v),disabled:a,className:"data-[state=checked]:bg-primary"})})})]})}function He({open:s,onOpenChange:n,onCreated:a,cliType:p="claude"}){const{formatMessage:t}=H(),v=Y(ee),[l,b]=d.useState("import"),[m,N]=d.useState("project"),[c,u]=d.useState(""),[k,I]=d.useState(""),[i,x]=d.useState(null),[g,y]=d.useState(!1),[h,A]=d.useState(""),[S,E]=d.useState(""),[w,L]=d.useState(!1),[O,P]=d.useState(!1),C=d.useCallback(()=>{b("import"),N("project"),u(""),I(""),x(null),y(!1),A(""),E(""),L(!1),P(!1)},[]),F=d.useCallback(r=>{r||C(),n(r)},[n,C]),W=d.useCallback(async()=>{if(c.trim()){y(!0),x(null);try{const r=await se(c.trim());x(r)}catch(r){x({valid:!1,errors:[r instanceof Error?r.message:String(r)]})}finally{y(!1)}}},[c]),z=d.useCallback(async()=>{if(l==="import"){if(!c.trim()||!(i!=null&&i.valid))return}else if(!h.trim()||!S.trim())return;L(!0);try{await te({mode:l,location:m,sourcePath:l==="import"?c.trim():void 0,commandName:l==="import"?k.trim()||void 0:h.trim(),description:l==="cli-generate"?S.trim():void 0,generationType:l==="cli-generate"?"description":void 0,projectPath:v,cliType:p}),F(!1),a()}catch(r){console.error("Failed to create command:",r),l==="import"&&x({valid:!1,errors:[r instanceof Error?r.message:t({id:"commands.create.createError"})]})}finally{L(!1)}},[l,m,c,k,h,S,i,v,F,a,t]),V=l==="import"?c.trim()&&(i==null?void 0:i.valid)&&!w:h.trim()&&S.trim()&&!w;return e.jsxs(ae,{open:s,onOpenChange:F,children:[e.jsxs(re,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(ne,{children:[e.jsx(oe,{children:t({id:"commands.create.title"})}),e.jsx(le,{children:t({id:"commands.description"})})]}),e.jsxs("div",{className:"space-y-5 py-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{children:t({id:"commands.create.location"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",m==="project"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>N("project"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(_,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.locationProject"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:`.${p}/commands/`})]})]})}),e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",m==="user"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>N("user"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Q,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.locationUser"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:`~/.${p}/commands/`})]})]})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{children:t({id:"commands.create.mode"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",l==="import"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>b("import"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.modeImport"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.modeImportHint"})})]})]})}),e.jsx("button",{type:"button",className:j("px-4 py-3 text-left border-2 rounded-lg transition-all",l==="cli-generate"?"border-primary bg-primary/10":"border-border hover:border-primary/50"),onClick:()=>b("cli-generate"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(de,{className:"w-5 h-5"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium text-sm",children:t({id:"commands.create.modeGenerate"})}),e.jsx("div",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.modeGenerateHint"})})]})]})})]})]}),l==="import"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{htmlFor:"sourcePath",children:t({id:"commands.create.sourcePath"})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(G,{id:"sourcePath",value:c,onChange:r=>{u(r.target.value),x(null)},placeholder:t({id:"commands.create.sourcePathPlaceholder"}),className:"font-mono text-sm flex-1"}),e.jsx(f,{type:"button",variant:"outline",size:"icon",onClick:()=>P(!0),title:t({id:"commands.create.browseFile"}),children:e.jsx(ce,{className:"w-4 h-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.sourcePathHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{htmlFor:"customName",children:[t({id:"commands.create.customName"}),e.jsxs("span",{className:"text-muted-foreground ml-1",children:["(",t({id:"commands.create.customNameHint"}),")"]})]}),e.jsx(G,{id:"customName",value:k,onChange:r=>I(r.target.value),placeholder:t({id:"commands.create.customNamePlaceholder"})})]}),g&&e.jsxs("div",{className:"flex items-center gap-2 p-3 bg-muted/50 rounded-lg",children:[e.jsx(U,{className:"w-4 h-4 animate-spin"}),e.jsx("span",{className:"text-sm text-muted-foreground",children:t({id:"commands.create.validating"})})]}),i&&!g&&(i.valid?e.jsxs("div",{className:"p-4 bg-green-500/10 border border-green-500/20 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-2 text-green-600 mb-2",children:[e.jsx(me,{className:"w-5 h-5"}),e.jsx("span",{className:"font-medium",children:t({id:"commands.create.validCommand"})})]}),i.commandInfo&&e.jsxs("div",{className:"space-y-1 text-sm",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[t({id:"commands.card.name"}),": "]}),e.jsx("span",{children:i.commandInfo.name})]}),i.commandInfo.description&&e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[t({id:"commands.card.description"}),": "]}),e.jsx("span",{children:i.commandInfo.description})]}),i.commandInfo.usage&&e.jsxs("div",{children:[e.jsxs("span",{className:"text-muted-foreground",children:[t({id:"commands.card.usage"}),": "]}),e.jsx("span",{children:i.commandInfo.usage})]})]})]}):e.jsxs("div",{className:"p-4 bg-destructive/10 border border-destructive/20 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-2 text-destructive mb-2",children:[e.jsx(K,{className:"w-5 h-5"}),e.jsx("span",{className:"font-medium",children:t({id:"commands.create.invalidCommand"})})]}),i.errors&&e.jsx("ul",{className:"space-y-1 text-sm",children:i.errors.map((r,o)=>e.jsx("li",{className:"text-destructive",children:r},o))})]}))]}),l==="cli-generate"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{htmlFor:"commandName",children:[t({id:"commands.create.commandName"})," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(G,{id:"commandName",value:h,onChange:r=>A(r.target.value),placeholder:t({id:"commands.create.commandNamePlaceholder"})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.commandNameHint"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{htmlFor:"description",children:[t({id:"commands.create.descriptionLabel"})," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(xe,{id:"description",value:S,onChange:r=>E(r.target.value),placeholder:t({id:"commands.create.descriptionPlaceholder"}),rows:6}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t({id:"commands.create.descriptionHint"})})]}),e.jsx("div",{className:"p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(he,{className:"w-4 h-4 text-blue-600 mt-0.5"}),e.jsxs("div",{className:"text-sm text-blue-600",children:[e.jsx("p",{className:"font-medium",children:t({id:"commands.create.generateInfo"})}),e.jsx("p",{className:"text-xs mt-1",children:t({id:"commands.create.generateTimeHint"})})]})]})})]})]}),e.jsxs(pe,{className:"gap-2",children:[e.jsx(f,{variant:"outline",onClick:()=>F(!1),disabled:w,children:t({id:"commands.actions.cancel"})}),l==="import"&&e.jsxs(f,{variant:"outline",onClick:W,disabled:!c.trim()||g||w,children:[g&&e.jsx(U,{className:"w-4 h-4 mr-2 animate-spin"}),t({id:"commands.create.validate"})]}),e.jsxs(f,{onClick:z,disabled:!V,children:[w&&e.jsx(U,{className:"w-4 h-4 mr-2 animate-spin"}),t(w?{id:"commands.create.creating"}:l==="import"?{id:"commands.create.import"}:{id:"commands.create.generate"})]})]})]}),e.jsx(Le,{isOpen:O,onClose:()=>P(!1),rootPath:v,onInsertPath:r=>{u(r),x(null),P(!1)},initialSelectedPath:c||null})]})}function Je(){const{formatMessage:s}=H(),[n,a]=d.useState("project"),[p,t]=d.useState(!1),[v,l]=d.useState(new Set(["cli","workflow"])),[b,m]=d.useState(""),[N,c]=d.useState(!1),u=R(ue),k=R(o=>o.toggleImmersiveMode),{commands:I,groupedCommands:i,groups:x,enabledCount:g,disabledCount:y,projectCount:h,userCount:A,isLoading:S,isFetching:E,error:w,refetch:L}=we({filter:{location:n,showDisabled:p,search:b||void 0}}),{toggleCommand:O,toggleGroup:P,isToggling:C}=ye(),F=o=>{l(M=>{const B=new Set(M);return B.has(o)?B.delete(o):B.add(o),B})},W=()=>{l(new Set(x))},z=()=>{l(new Set)},V=(o,M)=>{O(o,M,n)},r=(o,M)=>{P(o,M,n)};return e.jsxs("div",{className:j("space-y-6",u&&"h-screen overflow-hidden"),children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold text-foreground flex items-center gap-2",children:[e.jsx(Z,{className:"w-6 h-6 text-primary"}),s({id:"commands.title"})]}),e.jsx("p",{className:"text-muted-foreground mt-1",children:s({id:"commands.description"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{onClick:()=>c(!0),disabled:C,children:[e.jsx(je,{className:"w-4 h-4 mr-2"}),s({id:"commands.actions.create"})]}),e.jsx("button",{onClick:k,className:j("p-2 rounded-md transition-colors",u?"bg-primary/10 text-primary":"text-muted-foreground hover:text-foreground hover:bg-muted"),title:u?"Exit Fullscreen":"Fullscreen",children:u?e.jsx(Me,{className:"w-4 h-4"}):e.jsx(Ie,{className:"w-4 h-4"})}),e.jsxs(f,{variant:"outline",onClick:()=>L(),disabled:E,children:[e.jsx(ge,{className:j("w-4 h-4 mr-2",E&&"animate-spin")}),s({id:"common.actions.refresh"})]})]})]}),w&&e.jsxs("div",{className:"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive",children:[e.jsx(fe,{className:"h-5 w-5 flex-shrink-0"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium",children:s({id:"common.errors.loadFailed"})}),e.jsx("p",{className:"text-xs mt-0.5",children:w.message})]}),e.jsx(f,{variant:"outline",size:"sm",onClick:()=>L(),children:s({id:"home.errors.retry"})})]}),e.jsx(Ne,{value:n,onValueChange:o=>a(o),tabs:[{value:"project",label:s({id:"commands.location.project"}),icon:e.jsx(_,{className:"h-4 w-4"}),badge:e.jsx($,{variant:"secondary",className:"ml-2",children:h}),disabled:C},{value:"user",label:s({id:"commands.location.user"}),icon:e.jsx(Q,{className:"h-4 w-4"}),badge:e.jsx($,{variant:"secondary",className:"ml-2",children:A}),disabled:C}]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Z,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"text-2xl font-bold",children:I.length})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s({id:"commands.stats.total"})})]}),e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ve,{className:"w-5 h-5 text-success"}),e.jsx("span",{className:"text-2xl font-bold",children:g})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s({id:"commands.stats.enabled"})})]}),e.jsxs(T,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{className:"w-5 h-5 text-muted-foreground"}),e.jsx("span",{className:"text-2xl font-bold",children:y})]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:s({id:"commands.stats.disabled"})})]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(be,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(G,{placeholder:s({id:"commands.filters.searchPlaceholder"}),value:b,onChange:o=>m(o.target.value),className:"pl-9"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(f,{variant:p?"default":"outline",size:"sm",onClick:()=>t(o=>!o),disabled:C,children:[p?e.jsx(Pe,{className:"w-4 h-4 mr-2"}):e.jsx(Fe,{className:"w-4 h-4 mr-2"}),s(p?{id:"commands.actions.hideDisabled"}:{id:"commands.actions.showDisabled"}),e.jsxs("span",{className:"ml-1 text-xs opacity-70",children:["(",y,")"]})]}),e.jsx(f,{variant:"outline",size:"sm",onClick:W,disabled:x.length===0,children:s({id:"commands.actions.expandAll"})}),e.jsx(f,{variant:"outline",size:"sm",onClick:z,disabled:x.length===0,children:s({id:"commands.actions.collapseAll"})})]})]}),S?e.jsx("div",{className:"space-y-4",children:[1,2,3,4,5].map(o=>e.jsx("div",{className:"h-32 bg-muted animate-pulse rounded-lg"},o))}):x.length===0?e.jsxs(T,{className:"p-8 text-center",children:[e.jsx(Z,{className:"w-12 h-12 mx-auto text-muted-foreground/50"}),e.jsx("h3",{className:"mt-4 text-lg font-medium text-foreground",children:s({id:"commands.emptyState.title"})}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:s({id:"commands.emptyState.message"})})]}):e.jsx("div",{className:"commands-accordion",children:x.map(o=>{const M=i[o]||[];return e.jsx(Te,{groupName:o,commands:M,isExpanded:v.has(o),onToggleExpand:F,onToggleCommand:V,onToggleGroup:r,isToggling:C,showDisabled:p},o)})}),e.jsx(He,{open:N,onOpenChange:c,onCreated:()=>{c(!1),L()}})]})}export{Je as CommandsManagerPage,Je as default};
2
+ //# sourceMappingURL=CommandsManagerPage-DBtaWxLB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandsManagerPage-ChcTwmAn.js","sources":["../../src/components/commands/CommandGroupAccordion.tsx","../../src/components/shared/CommandCreateDialog.tsx","../../src/pages/CommandsManagerPage.tsx"],"sourcesContent":["// ========================================\n// CommandGroupAccordion Component\n// ========================================\n// Accordion component for displaying command groups with toggle switches\n\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/ui/Badge';\nimport { Switch } from '@/components/ui/Switch';\nimport {\n Collapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n} from '@/components/ui/Collapsible';\nimport type { Command } from '@/lib/api';\n\nexport interface CommandGroupAccordionProps {\n /** Group name (e.g., 'cli', 'workflow', 'workflow/review') */\n groupName: string;\n /** Commands in this group */\n commands: Command[];\n /** Is this group expanded */\n isExpanded: boolean;\n /** Toggle expand/collapse */\n onToggleExpand: (groupName: string) => void;\n /** Toggle individual command enabled state */\n onToggleCommand: (name: string, enabled: boolean) => void;\n /** Toggle all commands in group */\n onToggleGroup: (groupName: string, enable: boolean) => void;\n /** Is toggling in progress */\n isToggling: boolean;\n /** Show disabled commands */\n showDisabled?: boolean;\n}\n\n/**\n * Get icon for a command group\n * Uses top-level parent's icon for nested groups\n */\nfunction getGroupIcon(groupName: string): string {\n const groupIcons: Record<string, string> = {\n cli: 'terminal',\n workflow: 'git-branch',\n memory: 'brain',\n task: 'clipboard-list',\n issue: 'alert-circle',\n loop: 'repeat',\n skill: 'sparkles',\n other: 'folder',\n };\n\n const topLevel = groupName.split('/')[0];\n return groupIcons[topLevel] || 'folder';\n}\n\n/**\n * Get color class for a command group\n * Uses top-level parent's color for nested groups\n */\nfunction getGroupColorClass(groupName: string): string {\n const groupColors: Record<string, string> = {\n cli: 'text-primary bg-primary/10',\n workflow: 'text-success bg-success/10',\n memory: 'text-indigo bg-indigo/10',\n task: 'text-warning bg-warning/10',\n issue: 'text-destructive bg-destructive/10',\n loop: 'text-purple bg-purple/10',\n skill: 'text-pink bg-pink/10',\n other: 'text-muted-foreground bg-muted',\n };\n\n const topLevel = groupName.split('/')[0];\n return groupColors[topLevel] || 'text-muted-foreground bg-muted';\n}\n\n/**\n * Format group name for display\n * Converts nested paths like 'workflow/review' -> 'Workflow > Review'\n */\nfunction formatGroupName(groupName: string): string {\n if (!groupName.includes('/')) {\n return groupName;\n }\n\n const parts = groupName.split('/');\n return parts.map(part => part.charAt(0).toUpperCase() + part.slice(1)).join(' > ');\n}\n\n/**\n * Get Lucide icon component by name\n */\nfunction getIconComponent(iconName: string): React.ComponentType<{ className?: string }> {\n const iconMap: Record<string, React.ComponentType<{ className?: string }>> = {\n terminal: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </svg>\n ),\n 'git-branch': ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n ),\n brain: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z\" />\n </svg>\n ),\n 'clipboard-list': ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </svg>\n ),\n 'alert-circle': ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ),\n repeat: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m17 2 4 4-4 4\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <path d=\"m7 22-4-4 4-4\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </svg>\n ),\n sparkles: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n <path d=\"M5 3v4\" />\n <path d=\"M19 17v4\" />\n <path d=\"M3 5h4\" />\n <path d=\"M17 19h4\" />\n </svg>\n ),\n folder: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z\" />\n </svg>\n ),\n };\n\n return iconMap[iconName] || iconMap.folder;\n}\n\n/**\n * CommandGroupAccordion component\n * Displays a collapsible group of commands with toggle switches\n */\nexport function CommandGroupAccordion({\n groupName,\n commands,\n isExpanded,\n onToggleExpand,\n onToggleCommand,\n onToggleGroup,\n isToggling,\n showDisabled = false,\n}: CommandGroupAccordionProps) {\n const { formatMessage } = useIntl();\n\n const enabledCommands = commands.filter((cmd) => cmd.enabled);\n const allEnabled = enabledCommands.length === commands.length && commands.length > 0;\n\n // Filter commands based on showDisabled setting\n const visibleCommands = showDisabled ? commands : enabledCommands;\n\n const iconName = getGroupIcon(groupName);\n const colorClass = getGroupColorClass(groupName);\n const displayName = formatGroupName(groupName);\n const IconComponent = getIconComponent(iconName);\n const indentLevel = (groupName.match(/\\//g) || []).length;\n\n const handleToggleGroup = (checked: boolean) => {\n onToggleGroup(groupName, checked);\n };\n\n return (\n <div className={cn('mb-4', indentLevel > 0 && 'ml-5')} style={indentLevel > 0 ? { marginLeft: `${indentLevel * 20}px` } : undefined}>\n <Collapsible open={isExpanded} onOpenChange={() => onToggleExpand(groupName)}>\n {/* Group Header */}\n <div className=\"flex items-center justify-between px-4 py-3 bg-card border border-border rounded-lg hover:bg-muted/50 transition-colors\">\n <CollapsibleTrigger asChild>\n <div className=\"flex items-center gap-3 flex-1 cursor-pointer\">\n {isExpanded ? (\n <ChevronDown className=\"w-5 h-5 text-muted-foreground transition-transform\" />\n ) : (\n <ChevronRight className=\"w-5 h-5 text-muted-foreground transition-transform\" />\n )}\n <div className={cn('w-8 h-8 rounded-lg flex items-center justify-center', colorClass)}>\n <IconComponent className=\"w-4 h-4\" />\n </div>\n <div>\n <h3 className=\"text-base font-semibold text-foreground\">{displayName}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {enabledCommands.length}/{commands.length} {formatMessage({ id: 'commands.group.enabled' })}\n </p>\n </div>\n </div>\n </CollapsibleTrigger>\n\n <div className=\"flex items-center gap-3\">\n {/* Group Toggle Switch */}\n <Switch\n checked={allEnabled}\n onCheckedChange={handleToggleGroup}\n disabled={isToggling || commands.length === 0}\n className={cn('data-[state=checked]:bg-success')}\n title={\n allEnabled\n ? formatMessage({ id: 'commands.group.clickToDisableAll' })\n : formatMessage({ id: 'commands.group.clickToEnableAll' })\n }\n />\n <Badge variant=\"secondary\" className=\"text-xs\">\n {commands.length}\n </Badge>\n </div>\n </div>\n\n {/* Group Content - Commands Table */}\n <CollapsibleContent className=\"mt-3\">\n <div className=\"bg-card border border-border rounded-lg overflow-hidden\">\n <table className=\"w-full\" style={{ tableLayout: 'fixed' }}>\n <colgroup>\n <col style={{ width: '200px' }} />\n <col style={{ width: 'auto' }} />\n <col style={{ width: '100px' }} />\n <col style={{ width: '80px' }} />\n </colgroup>\n <thead className=\"bg-muted/30 border-b border-border\">\n <tr>\n <th className=\"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.name' })}\n </th>\n <th className=\"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.description' })}\n </th>\n <th className=\"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.scope' })}\n </th>\n <th className=\"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.status' })}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {visibleCommands.map((command) => (\n <CommandRow\n key={`${command.name}-${command.location || 'default'}`}\n command={command}\n onToggle={onToggleCommand}\n disabled={isToggling}\n />\n ))}\n {visibleCommands.length === 0 && (\n <tr>\n <td colSpan={4} className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n {showDisabled\n ? formatMessage({ id: 'commands.group.noCommands' })\n : formatMessage({ id: 'commands.group.noEnabledCommands' })}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n );\n}\n\n/**\n * CommandRow component - Internal component for table row\n */\ninterface CommandRowProps {\n command: Command;\n onToggle: (name: string, enabled: boolean) => void;\n disabled?: boolean;\n}\n\nfunction CommandRow({ command, onToggle, disabled }: CommandRowProps) {\n const { formatMessage } = useIntl();\n const isDisabled = !command.enabled;\n\n return (\n <tr className={cn('hover:bg-muted/20 transition-colors', isDisabled && 'opacity-60')}>\n <td className=\"px-4 py-3 text-sm font-medium text-foreground\">\n <code className=\"break-words\">/{command.name}</code>\n </td>\n <td className=\"px-4 py-3 text-sm text-muted-foreground\">\n <div className=\"line-clamp-2 break-words\">\n {command.description || formatMessage({ id: 'commands.card.noDescription' })}\n </div>\n </td>\n <td className=\"px-4 py-3 text-center text-xs text-muted-foreground\">\n <span className=\"whitespace-nowrap\">{command.location || 'project'}</span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex justify-center\">\n <Switch\n checked={command.enabled}\n onCheckedChange={(checked) => onToggle(command.name, checked)}\n disabled={disabled}\n className=\"data-[state=checked]:bg-primary\"\n />\n </div>\n </td>\n </tr>\n );\n}\n\nexport default CommandGroupAccordion;\n","// ========================================\r\n// Command Create Dialog Component\r\n// ========================================\r\n// Modal dialog for creating/importing commands with two modes:\r\n// - Import: import existing command file\r\n// - CLI Generate: AI-generated command from description\r\n\r\nimport { useState, useCallback } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Folder,\r\n User,\r\n FileCode,\r\n Sparkles,\r\n CheckCircle,\r\n XCircle,\r\n Loader2,\r\n Info,\r\n FolderOpen,\r\n} from 'lucide-react';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n} from '@/components/ui/Dialog';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Textarea } from '@/components/ui/Textarea';\r\nimport { Label } from '@/components/ui/Label';\r\nimport { validateCommandImport, createCommand } from '@/lib/api';\r\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\r\nimport { FloatingFileBrowser } from '@/components/terminal-dashboard/FloatingFileBrowser';\r\nimport { cn } from '@/lib/utils';\r\n\r\nexport interface CommandCreateDialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n onCreated: () => void;\r\n cliType?: 'claude' | 'codex';\r\n}\r\n\r\ntype CreateMode = 'import' | 'cli-generate';\r\ntype CommandLocation = 'project' | 'user';\r\n\r\ninterface ValidationResult {\r\n valid: boolean;\r\n errors?: string[];\r\n commandInfo?: { name: string; description: string; usage?: string };\r\n}\r\n\r\nexport function CommandCreateDialog({ open, onOpenChange, onCreated, cliType = 'claude' }: CommandCreateDialogProps) {\r\n const { formatMessage } = useIntl();\r\n const projectPath = useWorkflowStore(selectProjectPath);\r\n\r\n const [mode, setMode] = useState<CreateMode>('import');\r\n const [location, setLocation] = useState<CommandLocation>('project');\r\n\r\n // Import mode state\r\n const [sourcePath, setSourcePath] = useState('');\r\n const [customName, setCustomName] = useState('');\r\n const [validationResult, setValidationResult] = useState<ValidationResult | null>(null);\r\n const [isValidating, setIsValidating] = useState(false);\r\n\r\n // CLI Generate mode state\r\n const [commandName, setCommandName] = useState('');\r\n const [description, setDescription] = useState('');\r\n\r\n const [isCreating, setIsCreating] = useState(false);\r\n\r\n // File browser state\r\n const [isFileBrowserOpen, setIsFileBrowserOpen] = useState(false);\r\n\r\n const resetState = useCallback(() => {\r\n setMode('import');\r\n setLocation('project');\r\n setSourcePath('');\r\n setCustomName('');\r\n setValidationResult(null);\r\n setIsValidating(false);\r\n setCommandName('');\r\n setDescription('');\r\n setIsCreating(false);\r\n setIsFileBrowserOpen(false);\r\n }, []);\r\n\r\n const handleOpenChange = useCallback((open: boolean) => {\r\n if (!open) {\r\n resetState();\r\n }\r\n onOpenChange(open);\r\n }, [onOpenChange, resetState]);\r\n\r\n const handleValidate = useCallback(async () => {\r\n if (!sourcePath.trim()) return;\r\n\r\n setIsValidating(true);\r\n setValidationResult(null);\r\n\r\n try {\r\n const result = await validateCommandImport(sourcePath.trim());\r\n setValidationResult(result);\r\n } catch (err) {\r\n setValidationResult({\r\n valid: false,\r\n errors: [err instanceof Error ? err.message : String(err)],\r\n });\r\n } finally {\r\n setIsValidating(false);\r\n }\r\n }, [sourcePath]);\r\n\r\n const handleCreate = useCallback(async () => {\r\n if (mode === 'import') {\r\n if (!sourcePath.trim()) return;\r\n if (!validationResult?.valid) return;\r\n } else {\r\n if (!commandName.trim()) return;\r\n if (!description.trim()) return;\r\n }\r\n\r\n setIsCreating(true);\r\n\r\n try {\r\n await createCommand({\r\n mode,\r\n location,\r\n sourcePath: mode === 'import' ? sourcePath.trim() : undefined,\r\n commandName: mode === 'import' ? (customName.trim() || undefined) : commandName.trim(),\r\n description: mode === 'cli-generate' ? description.trim() : undefined,\r\n generationType: mode === 'cli-generate' ? 'description' : undefined,\r\n projectPath,\r\n cliType,\r\n });\r\n\r\n handleOpenChange(false);\r\n onCreated();\r\n } catch (err) {\r\n console.error('Failed to create command:', err);\r\n if (mode === 'import') {\r\n setValidationResult({\r\n valid: false,\r\n errors: [err instanceof Error ? err.message : formatMessage({ id: 'commands.create.createError' })],\r\n });\r\n }\r\n } finally {\r\n setIsCreating(false);\r\n }\r\n }, [mode, location, sourcePath, customName, commandName, description, validationResult, projectPath, handleOpenChange, onCreated, formatMessage]);\r\n\r\n const canCreate = mode === 'import'\r\n ? sourcePath.trim() && validationResult?.valid && !isCreating\r\n : commandName.trim() && description.trim() && !isCreating;\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={handleOpenChange}>\r\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\r\n <DialogHeader>\r\n <DialogTitle>{formatMessage({ id: 'commands.create.title' })}</DialogTitle>\r\n <DialogDescription>\r\n {formatMessage({ id: 'commands.description' })}\r\n </DialogDescription>\r\n </DialogHeader>\r\n\r\n <div className=\"space-y-5 py-2\">\r\n {/* Location Selection */}\r\n <div className=\"space-y-2\">\r\n <Label>{formatMessage({ id: 'commands.create.location' })}</Label>\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n location === 'project'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setLocation('project')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <Folder className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.locationProject' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{`.${cliType}/commands/`}</div>\r\n </div>\r\n </div>\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n location === 'user'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setLocation('user')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <User className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.locationUser' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{`~/.${cliType}/commands/`}</div>\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Mode Selection */}\r\n <div className=\"space-y-2\">\r\n <Label>{formatMessage({ id: 'commands.create.mode' })}</Label>\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n mode === 'import'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setMode('import')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <FileCode className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.modeImport' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.modeImportHint' })}</div>\r\n </div>\r\n </div>\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n mode === 'cli-generate'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setMode('cli-generate')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <Sparkles className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.modeGenerate' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.modeGenerateHint' })}</div>\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Import Mode Content */}\r\n {mode === 'import' && (\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"sourcePath\">{formatMessage({ id: 'commands.create.sourcePath' })}</Label>\r\n <div className=\"flex gap-2\">\r\n <Input\r\n id=\"sourcePath\"\r\n value={sourcePath}\r\n onChange={(e) => {\r\n setSourcePath(e.target.value);\r\n setValidationResult(null);\r\n }}\r\n placeholder={formatMessage({ id: 'commands.create.sourcePathPlaceholder' })}\r\n className=\"font-mono text-sm flex-1\"\r\n />\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={() => setIsFileBrowserOpen(true)}\r\n title={formatMessage({ id: 'commands.create.browseFile' })}\r\n >\r\n <FolderOpen className=\"w-4 h-4\" />\r\n </Button>\r\n </div>\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.sourcePathHint' })}</p>\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"customName\">\r\n {formatMessage({ id: 'commands.create.customName' })}\r\n <span className=\"text-muted-foreground ml-1\">({formatMessage({ id: 'commands.create.customNameHint' })})</span>\r\n </Label>\r\n <Input\r\n id=\"customName\"\r\n value={customName}\r\n onChange={(e) => setCustomName(e.target.value)}\r\n placeholder={formatMessage({ id: 'commands.create.customNamePlaceholder' })}\r\n />\r\n </div>\r\n\r\n {/* Validation Result */}\r\n {isValidating && (\r\n <div className=\"flex items-center gap-2 p-3 bg-muted/50 rounded-lg\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span className=\"text-sm text-muted-foreground\">{formatMessage({ id: 'commands.create.validating' })}</span>\r\n </div>\r\n )}\r\n {validationResult && !isValidating && (\r\n validationResult.valid ? (\r\n <div className=\"p-4 bg-green-500/10 border border-green-500/20 rounded-lg\">\r\n <div className=\"flex items-center gap-2 text-green-600 mb-2\">\r\n <CheckCircle className=\"w-5 h-5\" />\r\n <span className=\"font-medium\">{formatMessage({ id: 'commands.create.validCommand' })}</span>\r\n </div>\r\n {validationResult.commandInfo && (\r\n <div className=\"space-y-1 text-sm\">\r\n <div>\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'commands.card.name' })}: </span>\r\n <span>{validationResult.commandInfo.name}</span>\r\n </div>\r\n {validationResult.commandInfo.description && (\r\n <div>\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'commands.card.description' })}: </span>\r\n <span>{validationResult.commandInfo.description}</span>\r\n </div>\r\n )}\r\n {validationResult.commandInfo.usage && (\r\n <div>\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'commands.card.usage' })}: </span>\r\n <span>{validationResult.commandInfo.usage}</span>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"p-4 bg-destructive/10 border border-destructive/20 rounded-lg\">\r\n <div className=\"flex items-center gap-2 text-destructive mb-2\">\r\n <XCircle className=\"w-5 h-5\" />\r\n <span className=\"font-medium\">{formatMessage({ id: 'commands.create.invalidCommand' })}</span>\r\n </div>\r\n {validationResult.errors && (\r\n <ul className=\"space-y-1 text-sm\">\r\n {validationResult.errors.map((error, i) => (\r\n <li key={i} className=\"text-destructive\">{error}</li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n )\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* CLI Generate Mode Content */}\r\n {mode === 'cli-generate' && (\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"commandName\">\r\n {formatMessage({ id: 'commands.create.commandName' })} <span className=\"text-destructive\">*</span>\r\n </Label>\r\n <Input\r\n id=\"commandName\"\r\n value={commandName}\r\n onChange={(e) => setCommandName(e.target.value)}\r\n placeholder={formatMessage({ id: 'commands.create.commandNamePlaceholder' })}\r\n />\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.commandNameHint' })}</p>\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"description\">\r\n {formatMessage({ id: 'commands.create.descriptionLabel' })} <span className=\"text-destructive\">*</span>\r\n </Label>\r\n <Textarea\r\n id=\"description\"\r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n placeholder={formatMessage({ id: 'commands.create.descriptionPlaceholder' })}\r\n rows={6}\r\n />\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.descriptionHint' })}</p>\r\n </div>\r\n\r\n <div className=\"p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg\">\r\n <div className=\"flex items-start gap-2\">\r\n <Info className=\"w-4 h-4 text-blue-600 mt-0.5\" />\r\n <div className=\"text-sm text-blue-600\">\r\n <p className=\"font-medium\">{formatMessage({ id: 'commands.create.generateInfo' })}</p>\r\n <p className=\"text-xs mt-1\">{formatMessage({ id: 'commands.create.generateTimeHint' })}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <DialogFooter className=\"gap-2\">\r\n <Button variant=\"outline\" onClick={() => handleOpenChange(false)} disabled={isCreating}>\r\n {formatMessage({ id: 'commands.actions.cancel' })}\r\n </Button>\r\n {mode === 'import' && (\r\n <Button\r\n variant=\"outline\"\r\n onClick={handleValidate}\r\n disabled={!sourcePath.trim() || isValidating || isCreating}\r\n >\r\n {isValidating && <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />}\r\n {formatMessage({ id: 'commands.create.validate' })}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={handleCreate}\r\n disabled={!canCreate}\r\n >\r\n {isCreating && <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />}\r\n {isCreating\r\n ? formatMessage({ id: 'commands.create.creating' })\r\n : mode === 'import'\r\n ? formatMessage({ id: 'commands.create.import' })\r\n : formatMessage({ id: 'commands.create.generate' })\r\n }\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n\r\n {/* File Browser for selecting source file */}\r\n <FloatingFileBrowser\r\n isOpen={isFileBrowserOpen}\r\n onClose={() => setIsFileBrowserOpen(false)}\r\n rootPath={projectPath}\r\n onInsertPath={(path) => {\r\n setSourcePath(path);\r\n setValidationResult(null);\r\n setIsFileBrowserOpen(false);\r\n }}\r\n initialSelectedPath={sourcePath || null}\r\n />\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default CommandCreateDialog;\r\n","// ========================================\n// Commands Manager Page\n// ========================================\n// Manage custom slash commands with search/filter\n\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n Terminal,\n Search,\n RefreshCw,\n Eye,\n EyeOff,\n CheckCircle2,\n XCircle,\n Folder,\n User,\n AlertCircle,\n Maximize2,\n Minimize2,\n Plus,\n} from 'lucide-react';\nimport { useAppStore, selectIsImmersiveMode } from '@/stores/appStore';\nimport { Card } from '@/components/ui/Card';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { Badge } from '@/components/ui/Badge';\nimport { TabsNavigation } from '@/components/ui/TabsNavigation';\nimport { useCommands, useCommandMutations } from '@/hooks';\nimport { CommandGroupAccordion } from '@/components/commands/CommandGroupAccordion';\nimport { CommandCreateDialog } from '@/components/shared/CommandCreateDialog';\nimport { cn } from '@/lib/utils';\n\n// ========== Main Page Component ==========\n\nexport function CommandsManagerPage() {\n const { formatMessage } = useIntl();\n\n // Location filter state\n const [locationFilter, setLocationFilter] = useState<'project' | 'user'>('project');\n // Show disabled commands state\n const [showDisabledCommands, setShowDisabledCommands] = useState(false);\n // Expanded groups state (default cli and workflow expanded)\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set(['cli', 'workflow']));\n // Search state\n const [searchQuery, setSearchQuery] = useState('');\n // Create dialog state\n const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);\n\n // Immersive mode state\n const isImmersiveMode = useAppStore(selectIsImmersiveMode);\n const toggleImmersiveMode = useAppStore((s) => s.toggleImmersiveMode);\n\n const {\n commands,\n groupedCommands,\n groups,\n enabledCount,\n disabledCount,\n projectCount,\n userCount,\n isLoading,\n isFetching,\n error,\n refetch,\n } = useCommands({\n filter: {\n location: locationFilter,\n showDisabled: showDisabledCommands,\n search: searchQuery || undefined,\n },\n });\n\n const { toggleCommand, toggleGroup, isToggling } = useCommandMutations();\n\n // Toggle group expand/collapse\n const toggleGroupExpand = (groupName: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupName)) {\n next.delete(groupName);\n } else {\n next.add(groupName);\n }\n return next;\n });\n };\n\n // Expand all groups\n const expandAll = () => {\n setExpandedGroups(new Set(groups));\n };\n\n // Collapse all groups\n const collapseAll = () => {\n setExpandedGroups(new Set());\n };\n\n // Toggle individual command\n const handleToggleCommand = (name: string, enabled: boolean) => {\n toggleCommand(name, enabled, locationFilter);\n };\n\n // Toggle all commands in a group\n const handleToggleGroup = (groupName: string, enable: boolean) => {\n toggleGroup(groupName, enable, locationFilter);\n };\n\n return (\n <div className={cn(\"space-y-6\", isImmersiveMode && \"h-screen overflow-hidden\")}>\n {/* Page Header */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold text-foreground flex items-center gap-2\">\n <Terminal className=\"w-6 h-6 text-primary\" />\n {formatMessage({ id: 'commands.title' })}\n </h1>\n <p className=\"text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.description' })}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button onClick={() => setIsCreateDialogOpen(true)} disabled={isToggling}>\n <Plus className=\"w-4 h-4 mr-2\" />\n {formatMessage({ id: 'commands.actions.create' })}\n </Button>\n <button\n onClick={toggleImmersiveMode}\n className={cn(\n 'p-2 rounded-md transition-colors',\n isImmersiveMode\n ? 'bg-primary/10 text-primary'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n title={isImmersiveMode ? 'Exit Fullscreen' : 'Fullscreen'}\n >\n {isImmersiveMode ? <Minimize2 className=\"w-4 h-4\" /> : <Maximize2 className=\"w-4 h-4\" />}\n </button>\n <Button variant=\"outline\" onClick={() => refetch()} disabled={isFetching}>\n <RefreshCw className={cn('w-4 h-4 mr-2', isFetching && 'animate-spin')} />\n {formatMessage({ id: 'common.actions.refresh' })}\n </Button>\n </div>\n </div>\n\n {/* Error alert */}\n {error && (\n <div className=\"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive\">\n <AlertCircle className=\"h-5 w-5 flex-shrink-0\" />\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{formatMessage({ id: 'common.errors.loadFailed' })}</p>\n <p className=\"text-xs mt-0.5\">{error.message}</p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\n {formatMessage({ id: 'home.errors.retry' })}\n </Button>\n </div>\n )}\n\n {/* Location Tabs - styled like LiteTasksPage */}\n <TabsNavigation\n value={locationFilter}\n onValueChange={(v) => setLocationFilter(v as 'project' | 'user')}\n tabs={[\n {\n value: 'project',\n label: formatMessage({ id: 'commands.location.project' }),\n icon: <Folder className=\"h-4 w-4\" />,\n badge: <Badge variant=\"secondary\" className=\"ml-2\">{projectCount}</Badge>,\n disabled: isToggling,\n },\n {\n value: 'user',\n label: formatMessage({ id: 'commands.location.user' }),\n icon: <User className=\"h-4 w-4\" />,\n badge: <Badge variant=\"secondary\" className=\"ml-2\">{userCount}</Badge>,\n disabled: isToggling,\n },\n ]}\n />\n\n </div>\n\n {/* Summary Stats */}\n <div className=\"grid grid-cols-3 gap-4\">\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <Terminal className=\"w-5 h-5 text-primary\" />\n <span className=\"text-2xl font-bold\">{commands.length}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.stats.total' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle2 className=\"w-5 h-5 text-success\" />\n <span className=\"text-2xl font-bold\">{enabledCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.stats.enabled' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <XCircle className=\"w-5 h-5 text-muted-foreground\" />\n <span className=\"text-2xl font-bold\">{disabledCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.stats.disabled' })}\n </p>\n </Card>\n </div>\n\n {/* Search and Expand/Collapse Controls */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder={formatMessage({ id: 'commands.filters.searchPlaceholder' })}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant={showDisabledCommands ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setShowDisabledCommands((prev) => !prev)}\n disabled={isToggling}\n >\n {showDisabledCommands ? (\n <Eye className=\"w-4 h-4 mr-2\" />\n ) : (\n <EyeOff className=\"w-4 h-4 mr-2\" />\n )}\n {showDisabledCommands\n ? formatMessage({ id: 'commands.actions.hideDisabled' })\n : formatMessage({ id: 'commands.actions.showDisabled' })}\n <span className=\"ml-1 text-xs opacity-70\">({disabledCount})</span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={expandAll} disabled={groups.length === 0}>\n {formatMessage({ id: 'commands.actions.expandAll' })}\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={collapseAll} disabled={groups.length === 0}>\n {formatMessage({ id: 'commands.actions.collapseAll' })}\n </Button>\n </div>\n </div>\n\n {/* Command Groups Accordion */}\n {isLoading ? (\n <div className=\"space-y-4\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"h-32 bg-muted animate-pulse rounded-lg\" />\n ))}\n </div>\n ) : groups.length === 0 ? (\n <Card className=\"p-8 text-center\">\n <Terminal className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\n {formatMessage({ id: 'commands.emptyState.title' })}\n </h3>\n <p className=\"mt-2 text-muted-foreground\">\n {formatMessage({ id: 'commands.emptyState.message' })}\n </p>\n </Card>\n ) : (\n <div className=\"commands-accordion\">\n {groups.map((groupName) => {\n const groupCommands = groupedCommands[groupName] || [];\n return (\n <CommandGroupAccordion\n key={groupName}\n groupName={groupName}\n commands={groupCommands}\n isExpanded={expandedGroups.has(groupName)}\n onToggleExpand={toggleGroupExpand}\n onToggleCommand={handleToggleCommand}\n onToggleGroup={handleToggleGroup}\n isToggling={isToggling}\n showDisabled={showDisabledCommands}\n />\n );\n })}\n </div>\n )}\n\n {/* Command Create Dialog */}\n <CommandCreateDialog\n open={isCreateDialogOpen}\n onOpenChange={setIsCreateDialogOpen}\n onCreated={() => {\n setIsCreateDialogOpen(false);\n refetch();\n }}\n />\n </div>\n );\n}\n\nexport default CommandsManagerPage;\n"],"names":["getGroupIcon","groupName","groupIcons","topLevel","getGroupColorClass","groupColors","formatGroupName","part","getIconComponent","iconName","iconMap","className","jsxs","jsx","CommandGroupAccordion","commands","isExpanded","onToggleExpand","onToggleCommand","onToggleGroup","isToggling","showDisabled","formatMessage","useIntl","enabledCommands","cmd","allEnabled","visibleCommands","colorClass","displayName","IconComponent","indentLevel","handleToggleGroup","checked","cn","Collapsible","CollapsibleTrigger","ChevronDown","ChevronRight","Switch","Badge","CollapsibleContent","command","CommandRow","onToggle","disabled","isDisabled","CommandCreateDialog","open","onOpenChange","onCreated","cliType","projectPath","useWorkflowStore","selectProjectPath","mode","setMode","useState","location","setLocation","sourcePath","setSourcePath","customName","setCustomName","validationResult","setValidationResult","isValidating","setIsValidating","commandName","setCommandName","description","setDescription","isCreating","setIsCreating","isFileBrowserOpen","setIsFileBrowserOpen","resetState","useCallback","handleOpenChange","handleValidate","result","validateCommandImport","err","handleCreate","createCommand","canCreate","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","Folder","User","FileCode","Sparkles","Input","e","Button","FolderOpen","Loader2","CheckCircle","XCircle","error","i","Textarea","Info","DialogFooter","FloatingFileBrowser","path","CommandsManagerPage","locationFilter","setLocationFilter","showDisabledCommands","setShowDisabledCommands","expandedGroups","setExpandedGroups","searchQuery","setSearchQuery","isCreateDialogOpen","setIsCreateDialogOpen","isImmersiveMode","useAppStore","selectIsImmersiveMode","toggleImmersiveMode","s","groupedCommands","groups","enabledCount","disabledCount","projectCount","userCount","isLoading","isFetching","refetch","useCommands","toggleCommand","toggleGroup","useCommandMutations","toggleGroupExpand","prev","next","expandAll","collapseAll","handleToggleCommand","name","enabled","enable","Terminal","Plus","Minimize2","Maximize2","RefreshCw","AlertCircle","TabsNavigation","v","Card","CheckCircle2","Search","Eye","EyeOff","groupCommands"],"mappings":"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"}
1
+ {"version":3,"file":"CommandsManagerPage-DBtaWxLB.js","sources":["../../src/components/commands/CommandGroupAccordion.tsx","../../src/components/shared/CommandCreateDialog.tsx","../../src/pages/CommandsManagerPage.tsx"],"sourcesContent":["// ========================================\n// CommandGroupAccordion Component\n// ========================================\n// Accordion component for displaying command groups with toggle switches\n\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Badge } from '@/components/ui/Badge';\nimport { Switch } from '@/components/ui/Switch';\nimport {\n Collapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n} from '@/components/ui/Collapsible';\nimport type { Command } from '@/lib/api';\n\nexport interface CommandGroupAccordionProps {\n /** Group name (e.g., 'cli', 'workflow', 'workflow/review') */\n groupName: string;\n /** Commands in this group */\n commands: Command[];\n /** Is this group expanded */\n isExpanded: boolean;\n /** Toggle expand/collapse */\n onToggleExpand: (groupName: string) => void;\n /** Toggle individual command enabled state */\n onToggleCommand: (name: string, enabled: boolean) => void;\n /** Toggle all commands in group */\n onToggleGroup: (groupName: string, enable: boolean) => void;\n /** Is toggling in progress */\n isToggling: boolean;\n /** Show disabled commands */\n showDisabled?: boolean;\n}\n\n/**\n * Get icon for a command group\n * Uses top-level parent's icon for nested groups\n */\nfunction getGroupIcon(groupName: string): string {\n const groupIcons: Record<string, string> = {\n cli: 'terminal',\n workflow: 'git-branch',\n memory: 'brain',\n task: 'clipboard-list',\n issue: 'alert-circle',\n loop: 'repeat',\n skill: 'sparkles',\n other: 'folder',\n };\n\n const topLevel = groupName.split('/')[0];\n return groupIcons[topLevel] || 'folder';\n}\n\n/**\n * Get color class for a command group\n * Uses top-level parent's color for nested groups\n */\nfunction getGroupColorClass(groupName: string): string {\n const groupColors: Record<string, string> = {\n cli: 'text-primary bg-primary/10',\n workflow: 'text-success bg-success/10',\n memory: 'text-indigo bg-indigo/10',\n task: 'text-warning bg-warning/10',\n issue: 'text-destructive bg-destructive/10',\n loop: 'text-purple bg-purple/10',\n skill: 'text-pink bg-pink/10',\n other: 'text-muted-foreground bg-muted',\n };\n\n const topLevel = groupName.split('/')[0];\n return groupColors[topLevel] || 'text-muted-foreground bg-muted';\n}\n\n/**\n * Format group name for display\n * Converts nested paths like 'workflow/review' -> 'Workflow > Review'\n */\nfunction formatGroupName(groupName: string): string {\n if (!groupName.includes('/')) {\n return groupName;\n }\n\n const parts = groupName.split('/');\n return parts.map(part => part.charAt(0).toUpperCase() + part.slice(1)).join(' > ');\n}\n\n/**\n * Get Lucide icon component by name\n */\nfunction getIconComponent(iconName: string): React.ComponentType<{ className?: string }> {\n const iconMap: Record<string, React.ComponentType<{ className?: string }>> = {\n terminal: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </svg>\n ),\n 'git-branch': ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n ),\n brain: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z\" />\n </svg>\n ),\n 'clipboard-list': ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </svg>\n ),\n 'alert-circle': ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ),\n repeat: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m17 2 4 4-4 4\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <path d=\"m7 22-4-4 4-4\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </svg>\n ),\n sparkles: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n <path d=\"M5 3v4\" />\n <path d=\"M19 17v4\" />\n <path d=\"M3 5h4\" />\n <path d=\"M17 19h4\" />\n </svg>\n ),\n folder: ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z\" />\n </svg>\n ),\n };\n\n return iconMap[iconName] || iconMap.folder;\n}\n\n/**\n * CommandGroupAccordion component\n * Displays a collapsible group of commands with toggle switches\n */\nexport function CommandGroupAccordion({\n groupName,\n commands,\n isExpanded,\n onToggleExpand,\n onToggleCommand,\n onToggleGroup,\n isToggling,\n showDisabled = false,\n}: CommandGroupAccordionProps) {\n const { formatMessage } = useIntl();\n\n const enabledCommands = commands.filter((cmd) => cmd.enabled);\n const allEnabled = enabledCommands.length === commands.length && commands.length > 0;\n\n // Filter commands based on showDisabled setting\n const visibleCommands = showDisabled ? commands : enabledCommands;\n\n const iconName = getGroupIcon(groupName);\n const colorClass = getGroupColorClass(groupName);\n const displayName = formatGroupName(groupName);\n const IconComponent = getIconComponent(iconName);\n const indentLevel = (groupName.match(/\\//g) || []).length;\n\n const handleToggleGroup = (checked: boolean) => {\n onToggleGroup(groupName, checked);\n };\n\n return (\n <div className={cn('mb-4', indentLevel > 0 && 'ml-5')} style={indentLevel > 0 ? { marginLeft: `${indentLevel * 20}px` } : undefined}>\n <Collapsible open={isExpanded} onOpenChange={() => onToggleExpand(groupName)}>\n {/* Group Header */}\n <div className=\"flex items-center justify-between px-4 py-3 bg-card border border-border rounded-lg hover:bg-muted/50 transition-colors\">\n <CollapsibleTrigger asChild>\n <div className=\"flex items-center gap-3 flex-1 cursor-pointer\">\n {isExpanded ? (\n <ChevronDown className=\"w-5 h-5 text-muted-foreground transition-transform\" />\n ) : (\n <ChevronRight className=\"w-5 h-5 text-muted-foreground transition-transform\" />\n )}\n <div className={cn('w-8 h-8 rounded-lg flex items-center justify-center', colorClass)}>\n <IconComponent className=\"w-4 h-4\" />\n </div>\n <div>\n <h3 className=\"text-base font-semibold text-foreground\">{displayName}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {enabledCommands.length}/{commands.length} {formatMessage({ id: 'commands.group.enabled' })}\n </p>\n </div>\n </div>\n </CollapsibleTrigger>\n\n <div className=\"flex items-center gap-3\">\n {/* Group Toggle Switch */}\n <Switch\n checked={allEnabled}\n onCheckedChange={handleToggleGroup}\n disabled={isToggling || commands.length === 0}\n className={cn('data-[state=checked]:bg-success')}\n title={\n allEnabled\n ? formatMessage({ id: 'commands.group.clickToDisableAll' })\n : formatMessage({ id: 'commands.group.clickToEnableAll' })\n }\n />\n <Badge variant=\"secondary\" className=\"text-xs\">\n {commands.length}\n </Badge>\n </div>\n </div>\n\n {/* Group Content - Commands Table */}\n <CollapsibleContent className=\"mt-3\">\n <div className=\"bg-card border border-border rounded-lg overflow-hidden\">\n <table className=\"w-full\" style={{ tableLayout: 'fixed' }}>\n <colgroup>\n <col style={{ width: '200px' }} />\n <col style={{ width: 'auto' }} />\n <col style={{ width: '100px' }} />\n <col style={{ width: '80px' }} />\n </colgroup>\n <thead className=\"bg-muted/30 border-b border-border\">\n <tr>\n <th className=\"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.name' })}\n </th>\n <th className=\"px-4 py-2 text-left text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.description' })}\n </th>\n <th className=\"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.scope' })}\n </th>\n <th className=\"px-4 py-2 text-center text-xs font-medium text-muted-foreground uppercase\">\n {formatMessage({ id: 'commands.table.status' })}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {visibleCommands.map((command) => (\n <CommandRow\n key={`${command.name}-${command.location || 'default'}`}\n command={command}\n onToggle={onToggleCommand}\n disabled={isToggling}\n />\n ))}\n {visibleCommands.length === 0 && (\n <tr>\n <td colSpan={4} className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n {showDisabled\n ? formatMessage({ id: 'commands.group.noCommands' })\n : formatMessage({ id: 'commands.group.noEnabledCommands' })}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n );\n}\n\n/**\n * CommandRow component - Internal component for table row\n */\ninterface CommandRowProps {\n command: Command;\n onToggle: (name: string, enabled: boolean) => void;\n disabled?: boolean;\n}\n\nfunction CommandRow({ command, onToggle, disabled }: CommandRowProps) {\n const { formatMessage } = useIntl();\n const isDisabled = !command.enabled;\n\n return (\n <tr className={cn('hover:bg-muted/20 transition-colors', isDisabled && 'opacity-60')}>\n <td className=\"px-4 py-3 text-sm font-medium text-foreground\">\n <code className=\"break-words\">/{command.name}</code>\n </td>\n <td className=\"px-4 py-3 text-sm text-muted-foreground\">\n <div className=\"line-clamp-2 break-words\">\n {command.description || formatMessage({ id: 'commands.card.noDescription' })}\n </div>\n </td>\n <td className=\"px-4 py-3 text-center text-xs text-muted-foreground\">\n <span className=\"whitespace-nowrap\">{command.location || 'project'}</span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex justify-center\">\n <Switch\n checked={command.enabled}\n onCheckedChange={(checked) => onToggle(command.name, checked)}\n disabled={disabled}\n className=\"data-[state=checked]:bg-primary\"\n />\n </div>\n </td>\n </tr>\n );\n}\n\nexport default CommandGroupAccordion;\n","// ========================================\r\n// Command Create Dialog Component\r\n// ========================================\r\n// Modal dialog for creating/importing commands with two modes:\r\n// - Import: import existing command file\r\n// - CLI Generate: AI-generated command from description\r\n\r\nimport { useState, useCallback } from 'react';\r\nimport { useIntl } from 'react-intl';\r\nimport {\r\n Folder,\r\n User,\r\n FileCode,\r\n Sparkles,\r\n CheckCircle,\r\n XCircle,\r\n Loader2,\r\n Info,\r\n FolderOpen,\r\n} from 'lucide-react';\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n} from '@/components/ui/Dialog';\r\nimport { Button } from '@/components/ui/Button';\r\nimport { Input } from '@/components/ui/Input';\r\nimport { Textarea } from '@/components/ui/Textarea';\r\nimport { Label } from '@/components/ui/Label';\r\nimport { validateCommandImport, createCommand } from '@/lib/api';\r\nimport { useWorkflowStore, selectProjectPath } from '@/stores/workflowStore';\r\nimport { FloatingFileBrowser } from '@/components/terminal-dashboard/FloatingFileBrowser';\r\nimport { cn } from '@/lib/utils';\r\n\r\nexport interface CommandCreateDialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n onCreated: () => void;\r\n cliType?: 'claude' | 'codex';\r\n}\r\n\r\ntype CreateMode = 'import' | 'cli-generate';\r\ntype CommandLocation = 'project' | 'user';\r\n\r\ninterface ValidationResult {\r\n valid: boolean;\r\n errors?: string[];\r\n commandInfo?: { name: string; description: string; usage?: string };\r\n}\r\n\r\nexport function CommandCreateDialog({ open, onOpenChange, onCreated, cliType = 'claude' }: CommandCreateDialogProps) {\r\n const { formatMessage } = useIntl();\r\n const projectPath = useWorkflowStore(selectProjectPath);\r\n\r\n const [mode, setMode] = useState<CreateMode>('import');\r\n const [location, setLocation] = useState<CommandLocation>('project');\r\n\r\n // Import mode state\r\n const [sourcePath, setSourcePath] = useState('');\r\n const [customName, setCustomName] = useState('');\r\n const [validationResult, setValidationResult] = useState<ValidationResult | null>(null);\r\n const [isValidating, setIsValidating] = useState(false);\r\n\r\n // CLI Generate mode state\r\n const [commandName, setCommandName] = useState('');\r\n const [description, setDescription] = useState('');\r\n\r\n const [isCreating, setIsCreating] = useState(false);\r\n\r\n // File browser state\r\n const [isFileBrowserOpen, setIsFileBrowserOpen] = useState(false);\r\n\r\n const resetState = useCallback(() => {\r\n setMode('import');\r\n setLocation('project');\r\n setSourcePath('');\r\n setCustomName('');\r\n setValidationResult(null);\r\n setIsValidating(false);\r\n setCommandName('');\r\n setDescription('');\r\n setIsCreating(false);\r\n setIsFileBrowserOpen(false);\r\n }, []);\r\n\r\n const handleOpenChange = useCallback((open: boolean) => {\r\n if (!open) {\r\n resetState();\r\n }\r\n onOpenChange(open);\r\n }, [onOpenChange, resetState]);\r\n\r\n const handleValidate = useCallback(async () => {\r\n if (!sourcePath.trim()) return;\r\n\r\n setIsValidating(true);\r\n setValidationResult(null);\r\n\r\n try {\r\n const result = await validateCommandImport(sourcePath.trim());\r\n setValidationResult(result);\r\n } catch (err) {\r\n setValidationResult({\r\n valid: false,\r\n errors: [err instanceof Error ? err.message : String(err)],\r\n });\r\n } finally {\r\n setIsValidating(false);\r\n }\r\n }, [sourcePath]);\r\n\r\n const handleCreate = useCallback(async () => {\r\n if (mode === 'import') {\r\n if (!sourcePath.trim()) return;\r\n if (!validationResult?.valid) return;\r\n } else {\r\n if (!commandName.trim()) return;\r\n if (!description.trim()) return;\r\n }\r\n\r\n setIsCreating(true);\r\n\r\n try {\r\n await createCommand({\r\n mode,\r\n location,\r\n sourcePath: mode === 'import' ? sourcePath.trim() : undefined,\r\n commandName: mode === 'import' ? (customName.trim() || undefined) : commandName.trim(),\r\n description: mode === 'cli-generate' ? description.trim() : undefined,\r\n generationType: mode === 'cli-generate' ? 'description' : undefined,\r\n projectPath,\r\n cliType,\r\n });\r\n\r\n handleOpenChange(false);\r\n onCreated();\r\n } catch (err) {\r\n console.error('Failed to create command:', err);\r\n if (mode === 'import') {\r\n setValidationResult({\r\n valid: false,\r\n errors: [err instanceof Error ? err.message : formatMessage({ id: 'commands.create.createError' })],\r\n });\r\n }\r\n } finally {\r\n setIsCreating(false);\r\n }\r\n }, [mode, location, sourcePath, customName, commandName, description, validationResult, projectPath, handleOpenChange, onCreated, formatMessage]);\r\n\r\n const canCreate = mode === 'import'\r\n ? sourcePath.trim() && validationResult?.valid && !isCreating\r\n : commandName.trim() && description.trim() && !isCreating;\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={handleOpenChange}>\r\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\r\n <DialogHeader>\r\n <DialogTitle>{formatMessage({ id: 'commands.create.title' })}</DialogTitle>\r\n <DialogDescription>\r\n {formatMessage({ id: 'commands.description' })}\r\n </DialogDescription>\r\n </DialogHeader>\r\n\r\n <div className=\"space-y-5 py-2\">\r\n {/* Location Selection */}\r\n <div className=\"space-y-2\">\r\n <Label>{formatMessage({ id: 'commands.create.location' })}</Label>\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n location === 'project'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setLocation('project')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <Folder className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.locationProject' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{`.${cliType}/commands/`}</div>\r\n </div>\r\n </div>\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n location === 'user'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setLocation('user')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <User className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.locationUser' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{`~/.${cliType}/commands/`}</div>\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Mode Selection */}\r\n <div className=\"space-y-2\">\r\n <Label>{formatMessage({ id: 'commands.create.mode' })}</Label>\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n mode === 'import'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setMode('import')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <FileCode className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.modeImport' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.modeImportHint' })}</div>\r\n </div>\r\n </div>\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n 'px-4 py-3 text-left border-2 rounded-lg transition-all',\r\n mode === 'cli-generate'\r\n ? 'border-primary bg-primary/10'\r\n : 'border-border hover:border-primary/50'\r\n )}\r\n onClick={() => setMode('cli-generate')}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <Sparkles className=\"w-5 h-5\" />\r\n <div>\r\n <div className=\"font-medium text-sm\">{formatMessage({ id: 'commands.create.modeGenerate' })}</div>\r\n <div className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.modeGenerateHint' })}</div>\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Import Mode Content */}\r\n {mode === 'import' && (\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"sourcePath\">{formatMessage({ id: 'commands.create.sourcePath' })}</Label>\r\n <div className=\"flex gap-2\">\r\n <Input\r\n id=\"sourcePath\"\r\n value={sourcePath}\r\n onChange={(e) => {\r\n setSourcePath(e.target.value);\r\n setValidationResult(null);\r\n }}\r\n placeholder={formatMessage({ id: 'commands.create.sourcePathPlaceholder' })}\r\n className=\"font-mono text-sm flex-1\"\r\n />\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={() => setIsFileBrowserOpen(true)}\r\n title={formatMessage({ id: 'commands.create.browseFile' })}\r\n >\r\n <FolderOpen className=\"w-4 h-4\" />\r\n </Button>\r\n </div>\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.sourcePathHint' })}</p>\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"customName\">\r\n {formatMessage({ id: 'commands.create.customName' })}\r\n <span className=\"text-muted-foreground ml-1\">({formatMessage({ id: 'commands.create.customNameHint' })})</span>\r\n </Label>\r\n <Input\r\n id=\"customName\"\r\n value={customName}\r\n onChange={(e) => setCustomName(e.target.value)}\r\n placeholder={formatMessage({ id: 'commands.create.customNamePlaceholder' })}\r\n />\r\n </div>\r\n\r\n {/* Validation Result */}\r\n {isValidating && (\r\n <div className=\"flex items-center gap-2 p-3 bg-muted/50 rounded-lg\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span className=\"text-sm text-muted-foreground\">{formatMessage({ id: 'commands.create.validating' })}</span>\r\n </div>\r\n )}\r\n {validationResult && !isValidating && (\r\n validationResult.valid ? (\r\n <div className=\"p-4 bg-green-500/10 border border-green-500/20 rounded-lg\">\r\n <div className=\"flex items-center gap-2 text-green-600 mb-2\">\r\n <CheckCircle className=\"w-5 h-5\" />\r\n <span className=\"font-medium\">{formatMessage({ id: 'commands.create.validCommand' })}</span>\r\n </div>\r\n {validationResult.commandInfo && (\r\n <div className=\"space-y-1 text-sm\">\r\n <div>\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'commands.card.name' })}: </span>\r\n <span>{validationResult.commandInfo.name}</span>\r\n </div>\r\n {validationResult.commandInfo.description && (\r\n <div>\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'commands.card.description' })}: </span>\r\n <span>{validationResult.commandInfo.description}</span>\r\n </div>\r\n )}\r\n {validationResult.commandInfo.usage && (\r\n <div>\r\n <span className=\"text-muted-foreground\">{formatMessage({ id: 'commands.card.usage' })}: </span>\r\n <span>{validationResult.commandInfo.usage}</span>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n ) : (\r\n <div className=\"p-4 bg-destructive/10 border border-destructive/20 rounded-lg\">\r\n <div className=\"flex items-center gap-2 text-destructive mb-2\">\r\n <XCircle className=\"w-5 h-5\" />\r\n <span className=\"font-medium\">{formatMessage({ id: 'commands.create.invalidCommand' })}</span>\r\n </div>\r\n {validationResult.errors && (\r\n <ul className=\"space-y-1 text-sm\">\r\n {validationResult.errors.map((error, i) => (\r\n <li key={i} className=\"text-destructive\">{error}</li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n )\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* CLI Generate Mode Content */}\r\n {mode === 'cli-generate' && (\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"commandName\">\r\n {formatMessage({ id: 'commands.create.commandName' })} <span className=\"text-destructive\">*</span>\r\n </Label>\r\n <Input\r\n id=\"commandName\"\r\n value={commandName}\r\n onChange={(e) => setCommandName(e.target.value)}\r\n placeholder={formatMessage({ id: 'commands.create.commandNamePlaceholder' })}\r\n />\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.commandNameHint' })}</p>\r\n </div>\r\n\r\n <div className=\"space-y-2\">\r\n <Label htmlFor=\"description\">\r\n {formatMessage({ id: 'commands.create.descriptionLabel' })} <span className=\"text-destructive\">*</span>\r\n </Label>\r\n <Textarea\r\n id=\"description\"\r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n placeholder={formatMessage({ id: 'commands.create.descriptionPlaceholder' })}\r\n rows={6}\r\n />\r\n <p className=\"text-xs text-muted-foreground\">{formatMessage({ id: 'commands.create.descriptionHint' })}</p>\r\n </div>\r\n\r\n <div className=\"p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg\">\r\n <div className=\"flex items-start gap-2\">\r\n <Info className=\"w-4 h-4 text-blue-600 mt-0.5\" />\r\n <div className=\"text-sm text-blue-600\">\r\n <p className=\"font-medium\">{formatMessage({ id: 'commands.create.generateInfo' })}</p>\r\n <p className=\"text-xs mt-1\">{formatMessage({ id: 'commands.create.generateTimeHint' })}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <DialogFooter className=\"gap-2\">\r\n <Button variant=\"outline\" onClick={() => handleOpenChange(false)} disabled={isCreating}>\r\n {formatMessage({ id: 'commands.actions.cancel' })}\r\n </Button>\r\n {mode === 'import' && (\r\n <Button\r\n variant=\"outline\"\r\n onClick={handleValidate}\r\n disabled={!sourcePath.trim() || isValidating || isCreating}\r\n >\r\n {isValidating && <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />}\r\n {formatMessage({ id: 'commands.create.validate' })}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={handleCreate}\r\n disabled={!canCreate}\r\n >\r\n {isCreating && <Loader2 className=\"w-4 h-4 mr-2 animate-spin\" />}\r\n {isCreating\r\n ? formatMessage({ id: 'commands.create.creating' })\r\n : mode === 'import'\r\n ? formatMessage({ id: 'commands.create.import' })\r\n : formatMessage({ id: 'commands.create.generate' })\r\n }\r\n </Button>\r\n </DialogFooter>\r\n </DialogContent>\r\n\r\n {/* File Browser for selecting source file */}\r\n <FloatingFileBrowser\r\n isOpen={isFileBrowserOpen}\r\n onClose={() => setIsFileBrowserOpen(false)}\r\n rootPath={projectPath}\r\n onInsertPath={(path) => {\r\n setSourcePath(path);\r\n setValidationResult(null);\r\n setIsFileBrowserOpen(false);\r\n }}\r\n initialSelectedPath={sourcePath || null}\r\n />\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport default CommandCreateDialog;\r\n","// ========================================\n// Commands Manager Page\n// ========================================\n// Manage custom slash commands with search/filter\n\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\nimport {\n Terminal,\n Search,\n RefreshCw,\n Eye,\n EyeOff,\n CheckCircle2,\n XCircle,\n Folder,\n User,\n AlertCircle,\n Maximize2,\n Minimize2,\n Plus,\n} from 'lucide-react';\nimport { useAppStore, selectIsImmersiveMode } from '@/stores/appStore';\nimport { Card } from '@/components/ui/Card';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { Badge } from '@/components/ui/Badge';\nimport { TabsNavigation } from '@/components/ui/TabsNavigation';\nimport { useCommands, useCommandMutations } from '@/hooks';\nimport { CommandGroupAccordion } from '@/components/commands/CommandGroupAccordion';\nimport { CommandCreateDialog } from '@/components/shared/CommandCreateDialog';\nimport { cn } from '@/lib/utils';\n\n// ========== Main Page Component ==========\n\nexport function CommandsManagerPage() {\n const { formatMessage } = useIntl();\n\n // Location filter state\n const [locationFilter, setLocationFilter] = useState<'project' | 'user'>('project');\n // Show disabled commands state\n const [showDisabledCommands, setShowDisabledCommands] = useState(false);\n // Expanded groups state (default cli and workflow expanded)\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set(['cli', 'workflow']));\n // Search state\n const [searchQuery, setSearchQuery] = useState('');\n // Create dialog state\n const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);\n\n // Immersive mode state\n const isImmersiveMode = useAppStore(selectIsImmersiveMode);\n const toggleImmersiveMode = useAppStore((s) => s.toggleImmersiveMode);\n\n const {\n commands,\n groupedCommands,\n groups,\n enabledCount,\n disabledCount,\n projectCount,\n userCount,\n isLoading,\n isFetching,\n error,\n refetch,\n } = useCommands({\n filter: {\n location: locationFilter,\n showDisabled: showDisabledCommands,\n search: searchQuery || undefined,\n },\n });\n\n const { toggleCommand, toggleGroup, isToggling } = useCommandMutations();\n\n // Toggle group expand/collapse\n const toggleGroupExpand = (groupName: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupName)) {\n next.delete(groupName);\n } else {\n next.add(groupName);\n }\n return next;\n });\n };\n\n // Expand all groups\n const expandAll = () => {\n setExpandedGroups(new Set(groups));\n };\n\n // Collapse all groups\n const collapseAll = () => {\n setExpandedGroups(new Set());\n };\n\n // Toggle individual command\n const handleToggleCommand = (name: string, enabled: boolean) => {\n toggleCommand(name, enabled, locationFilter);\n };\n\n // Toggle all commands in a group\n const handleToggleGroup = (groupName: string, enable: boolean) => {\n toggleGroup(groupName, enable, locationFilter);\n };\n\n return (\n <div className={cn(\"space-y-6\", isImmersiveMode && \"h-screen overflow-hidden\")}>\n {/* Page Header */}\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold text-foreground flex items-center gap-2\">\n <Terminal className=\"w-6 h-6 text-primary\" />\n {formatMessage({ id: 'commands.title' })}\n </h1>\n <p className=\"text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.description' })}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button onClick={() => setIsCreateDialogOpen(true)} disabled={isToggling}>\n <Plus className=\"w-4 h-4 mr-2\" />\n {formatMessage({ id: 'commands.actions.create' })}\n </Button>\n <button\n onClick={toggleImmersiveMode}\n className={cn(\n 'p-2 rounded-md transition-colors',\n isImmersiveMode\n ? 'bg-primary/10 text-primary'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n title={isImmersiveMode ? 'Exit Fullscreen' : 'Fullscreen'}\n >\n {isImmersiveMode ? <Minimize2 className=\"w-4 h-4\" /> : <Maximize2 className=\"w-4 h-4\" />}\n </button>\n <Button variant=\"outline\" onClick={() => refetch()} disabled={isFetching}>\n <RefreshCw className={cn('w-4 h-4 mr-2', isFetching && 'animate-spin')} />\n {formatMessage({ id: 'common.actions.refresh' })}\n </Button>\n </div>\n </div>\n\n {/* Error alert */}\n {error && (\n <div className=\"flex items-center gap-2 p-4 rounded-lg bg-destructive/10 border border-destructive/30 text-destructive\">\n <AlertCircle className=\"h-5 w-5 flex-shrink-0\" />\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{formatMessage({ id: 'common.errors.loadFailed' })}</p>\n <p className=\"text-xs mt-0.5\">{error.message}</p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => refetch()}>\n {formatMessage({ id: 'home.errors.retry' })}\n </Button>\n </div>\n )}\n\n {/* Location Tabs - styled like LiteTasksPage */}\n <TabsNavigation\n value={locationFilter}\n onValueChange={(v) => setLocationFilter(v as 'project' | 'user')}\n tabs={[\n {\n value: 'project',\n label: formatMessage({ id: 'commands.location.project' }),\n icon: <Folder className=\"h-4 w-4\" />,\n badge: <Badge variant=\"secondary\" className=\"ml-2\">{projectCount}</Badge>,\n disabled: isToggling,\n },\n {\n value: 'user',\n label: formatMessage({ id: 'commands.location.user' }),\n icon: <User className=\"h-4 w-4\" />,\n badge: <Badge variant=\"secondary\" className=\"ml-2\">{userCount}</Badge>,\n disabled: isToggling,\n },\n ]}\n />\n\n </div>\n\n {/* Summary Stats */}\n <div className=\"grid grid-cols-3 gap-4\">\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <Terminal className=\"w-5 h-5 text-primary\" />\n <span className=\"text-2xl font-bold\">{commands.length}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.stats.total' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle2 className=\"w-5 h-5 text-success\" />\n <span className=\"text-2xl font-bold\">{enabledCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.stats.enabled' })}\n </p>\n </Card>\n <Card className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <XCircle className=\"w-5 h-5 text-muted-foreground\" />\n <span className=\"text-2xl font-bold\">{disabledCount}</span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {formatMessage({ id: 'commands.stats.disabled' })}\n </p>\n </Card>\n </div>\n\n {/* Search and Expand/Collapse Controls */}\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder={formatMessage({ id: 'commands.filters.searchPlaceholder' })}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant={showDisabledCommands ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setShowDisabledCommands((prev) => !prev)}\n disabled={isToggling}\n >\n {showDisabledCommands ? (\n <Eye className=\"w-4 h-4 mr-2\" />\n ) : (\n <EyeOff className=\"w-4 h-4 mr-2\" />\n )}\n {showDisabledCommands\n ? formatMessage({ id: 'commands.actions.hideDisabled' })\n : formatMessage({ id: 'commands.actions.showDisabled' })}\n <span className=\"ml-1 text-xs opacity-70\">({disabledCount})</span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={expandAll} disabled={groups.length === 0}>\n {formatMessage({ id: 'commands.actions.expandAll' })}\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={collapseAll} disabled={groups.length === 0}>\n {formatMessage({ id: 'commands.actions.collapseAll' })}\n </Button>\n </div>\n </div>\n\n {/* Command Groups Accordion */}\n {isLoading ? (\n <div className=\"space-y-4\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"h-32 bg-muted animate-pulse rounded-lg\" />\n ))}\n </div>\n ) : groups.length === 0 ? (\n <Card className=\"p-8 text-center\">\n <Terminal className=\"w-12 h-12 mx-auto text-muted-foreground/50\" />\n <h3 className=\"mt-4 text-lg font-medium text-foreground\">\n {formatMessage({ id: 'commands.emptyState.title' })}\n </h3>\n <p className=\"mt-2 text-muted-foreground\">\n {formatMessage({ id: 'commands.emptyState.message' })}\n </p>\n </Card>\n ) : (\n <div className=\"commands-accordion\">\n {groups.map((groupName) => {\n const groupCommands = groupedCommands[groupName] || [];\n return (\n <CommandGroupAccordion\n key={groupName}\n groupName={groupName}\n commands={groupCommands}\n isExpanded={expandedGroups.has(groupName)}\n onToggleExpand={toggleGroupExpand}\n onToggleCommand={handleToggleCommand}\n onToggleGroup={handleToggleGroup}\n isToggling={isToggling}\n showDisabled={showDisabledCommands}\n />\n );\n })}\n </div>\n )}\n\n {/* Command Create Dialog */}\n <CommandCreateDialog\n open={isCreateDialogOpen}\n onOpenChange={setIsCreateDialogOpen}\n onCreated={() => {\n setIsCreateDialogOpen(false);\n refetch();\n }}\n />\n </div>\n );\n}\n\nexport default CommandsManagerPage;\n"],"names":["getGroupIcon","groupName","groupIcons","topLevel","getGroupColorClass","groupColors","formatGroupName","part","getIconComponent","iconName","iconMap","className","jsxs","jsx","CommandGroupAccordion","commands","isExpanded","onToggleExpand","onToggleCommand","onToggleGroup","isToggling","showDisabled","formatMessage","useIntl","enabledCommands","cmd","allEnabled","visibleCommands","colorClass","displayName","IconComponent","indentLevel","handleToggleGroup","checked","cn","Collapsible","CollapsibleTrigger","ChevronDown","ChevronRight","Switch","Badge","CollapsibleContent","command","CommandRow","onToggle","disabled","isDisabled","CommandCreateDialog","open","onOpenChange","onCreated","cliType","projectPath","useWorkflowStore","selectProjectPath","mode","setMode","useState","location","setLocation","sourcePath","setSourcePath","customName","setCustomName","validationResult","setValidationResult","isValidating","setIsValidating","commandName","setCommandName","description","setDescription","isCreating","setIsCreating","isFileBrowserOpen","setIsFileBrowserOpen","resetState","useCallback","handleOpenChange","handleValidate","result","validateCommandImport","err","handleCreate","createCommand","canCreate","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","Folder","User","FileCode","Sparkles","Input","e","Button","FolderOpen","Loader2","CheckCircle","XCircle","error","i","Textarea","Info","DialogFooter","FloatingFileBrowser","path","CommandsManagerPage","locationFilter","setLocationFilter","showDisabledCommands","setShowDisabledCommands","expandedGroups","setExpandedGroups","searchQuery","setSearchQuery","isCreateDialogOpen","setIsCreateDialogOpen","isImmersiveMode","useAppStore","selectIsImmersiveMode","toggleImmersiveMode","s","groupedCommands","groups","enabledCount","disabledCount","projectCount","userCount","isLoading","isFetching","refetch","useCommands","toggleCommand","toggleGroup","useCommandMutations","toggleGroupExpand","prev","next","expandAll","collapseAll","handleToggleCommand","name","enabled","enable","Terminal","Plus","Minimize2","Maximize2","RefreshCw","AlertCircle","TabsNavigation","v","Card","CheckCircle2","Search","Eye","EyeOff","groupCommands"],"mappings":"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"}