@shepai/cli 1.173.0 → 1.174.0-pr531.0f666b7

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 (407) hide show
  1. package/apis/json-schema/Repository.yaml +6 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +3 -1
  3. package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +28 -0
  5. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +2 -0
  7. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +47 -0
  8. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +12 -0
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts +67 -0
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.js +125 -0
  13. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +13 -4
  14. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +54 -10
  16. package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts +30 -0
  17. package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts.map +1 -0
  18. package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.js +50 -0
  19. package/dist/packages/core/src/domain/generated/output.d.ts +8 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  22. package/dist/packages/core/src/infrastructure/di/container.js +10 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +2 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.js +4 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts +12 -0
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts.map +1 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.js +26 -0
  29. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +2 -1
  30. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +14 -0
  32. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +4 -1
  33. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +55 -1
  35. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +5 -0
  36. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +32 -0
  38. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  39. package/dist/src/presentation/cli/commands/feat/new.command.js +32 -6
  40. package/dist/src/presentation/cli/commands/repo/index.d.ts.map +1 -1
  41. package/dist/src/presentation/cli/commands/repo/index.js +3 -1
  42. package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts +15 -0
  43. package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts.map +1 -0
  44. package/dist/src/presentation/cli/commands/repo/init-remote.command.js +44 -0
  45. package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts +31 -0
  46. package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts.map +1 -0
  47. package/dist/src/presentation/web/app/actions/create-feature-from-remote.js +69 -0
  48. package/dist/src/presentation/web/app/actions/import-github-repository.d.ts +1 -0
  49. package/dist/src/presentation/web/app/actions/import-github-repository.d.ts.map +1 -1
  50. package/dist/src/presentation/web/app/actions/import-github-repository.js +1 -1
  51. package/dist/src/presentation/web/app/features/feature-tree-page-client.d.ts +7 -1
  52. package/dist/src/presentation/web/app/features/feature-tree-page-client.d.ts.map +1 -1
  53. package/dist/src/presentation/web/app/features/feature-tree-page-client.js +142 -3
  54. package/dist/src/presentation/web/app/features/get-feature-tree-data.d.ts.map +1 -1
  55. package/dist/src/presentation/web/app/features/get-feature-tree-data.js +4 -1
  56. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  57. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
  59. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +2 -0
  60. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.js +22 -0
  62. package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.d.ts +21 -5
  63. package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.js +169 -87
  65. package/dist/src/presentation/web/components/features/feature-tree-table/index.d.ts +2 -2
  66. package/dist/src/presentation/web/components/features/feature-tree-table/index.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/feature-tree-table/index.js +1 -1
  68. package/dist/src/presentation/web/lib/feature-flags.js +1 -1
  69. package/dist/translations/ar/cli.json +12 -0
  70. package/dist/translations/de/cli.json +12 -0
  71. package/dist/translations/en/cli.json +12 -0
  72. package/dist/translations/es/cli.json +12 -0
  73. package/dist/translations/fr/cli.json +12 -0
  74. package/dist/translations/he/cli.json +12 -0
  75. package/dist/translations/pt/cli.json +12 -0
  76. package/dist/translations/ru/cli.json +12 -0
  77. package/dist/tsconfig.build.tsbuildinfo +1 -1
  78. package/package.json +1 -1
  79. package/web/.next/BUILD_ID +1 -1
  80. package/web/.next/build-manifest.json +4 -4
  81. package/web/.next/fallback-build-manifest.json +2 -2
  82. package/web/.next/prerender-manifest.json +3 -3
  83. package/web/.next/required-server-files.js +3 -3
  84. package/web/.next/required-server-files.json +3 -3
  85. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +2 -2
  86. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  87. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +2 -2
  91. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  92. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +2 -1
  93. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  96. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  97. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -1
  98. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  101. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  102. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
  103. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  104. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  105. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  106. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
  107. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
  108. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  109. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  111. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  112. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +2 -1
  113. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  114. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  116. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  117. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -1
  118. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  119. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +2 -2
  121. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  122. package/web/.next/server/app/(dashboard)/chat/page.js +2 -1
  123. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  124. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  126. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  127. package/web/.next/server/app/(dashboard)/create/page.js +2 -1
  128. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  129. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  131. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
  132. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
  133. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  134. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  136. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
  137. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
  138. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  139. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  141. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  142. package/web/.next/server/app/(dashboard)/page.js +2 -1
  143. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +2 -2
  146. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  147. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +2 -1
  148. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  149. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  151. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  152. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -1
  153. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  154. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  155. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  156. package/web/.next/server/app/_global-error.html +2 -2
  157. package/web/.next/server/app/_global-error.rsc +1 -1
  158. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  159. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  160. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  161. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  162. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  163. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  164. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  165. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  166. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  168. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  169. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  170. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  171. package/web/.next/server/app/features/page/build-manifest.json +2 -2
  172. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  173. package/web/.next/server/app/features/page.js.nft.json +1 -1
  174. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  175. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  176. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  177. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  178. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  179. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  180. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  181. package/web/.next/server/app/skills/page.js +2 -1
  182. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  183. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  184. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  185. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  186. package/web/.next/server/app/tools/page.js +2 -1
  187. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  188. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  190. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  191. package/web/.next/server/app/version/page.js.nft.json +1 -1
  192. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  193. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  194. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  195. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +1 -1
  197. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_ceb2fa1e._.js +1 -1
  198. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +3 -0
  199. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +1 -0
  200. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +3 -0
  201. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +1 -0
  202. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +3 -0
  203. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +1 -0
  204. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  205. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  207. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__08c912ab._.js +1 -1
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__08c912ab._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__0c5452c3._.js +1 -1
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js +3 -0
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +3 -0
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b020c17d._.js → [root-of-the-server]__540c615f._.js} +3 -3
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +3 -0
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +1 -0
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__851f6adb._.js +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +3 -0
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +1 -0
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +3 -0
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  235. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/_073183f4._.js +3 -0
  237. package/web/.next/server/chunks/ssr/_073183f4._.js.map +1 -0
  238. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  239. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
  241. package/web/.next/server/chunks/ssr/_1b7dae9a._.js +1 -1
  242. package/web/.next/server/chunks/ssr/{_cd92091d._.js → _1c627e53._.js} +3 -3
  243. package/web/.next/server/chunks/ssr/{_cd92091d._.js.map → _1c627e53._.js.map} +1 -1
  244. package/web/.next/server/chunks/ssr/{_5119a3df._.js → _295fffde._.js} +2 -2
  245. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -0
  246. package/web/.next/server/chunks/ssr/{_817ddf8a._.js → _398f5019._.js} +3 -3
  247. package/web/.next/server/chunks/ssr/{_817ddf8a._.js.map → _398f5019._.js.map} +1 -1
  248. package/web/.next/server/chunks/ssr/_43ba79e7._.js +1 -1
  249. package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
  250. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/{_6f35fb9a._.js → _49b8d085._.js} +2 -2
  252. package/web/.next/server/chunks/ssr/{_6f35fb9a._.js.map → _49b8d085._.js.map} +1 -1
  253. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  254. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  256. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/_6abfa39e._.js +3 -0
  258. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/_7476c702._.js +3 -0
  260. package/web/.next/server/chunks/ssr/_7476c702._.js.map +1 -0
  261. package/web/.next/server/chunks/ssr/_7cb0396e._.js +3 -0
  262. package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +1 -0
  263. package/web/.next/server/chunks/ssr/_bb09579b._.js +1 -1
  264. package/web/.next/server/chunks/ssr/{_0020fddd._.js → _d9c0a97a._.js} +3 -3
  265. package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +1 -0
  266. package/web/.next/server/chunks/ssr/_e680c57c._.js +9 -0
  267. package/web/.next/server/chunks/ssr/_e680c57c._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/_f080a56e._.js +3 -0
  269. package/web/.next/server/chunks/ssr/_f080a56e._.js.map +1 -0
  270. package/web/.next/server/chunks/ssr/_f8c55130._.js +4 -0
  271. package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -0
  272. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  273. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_global-chat-drawer-client_tsx_158c4b12._.js +1 -1
  275. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  276. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  277. package/web/.next/server/chunks/ssr/node_modules__pnpm_63d47a3e._.js +3 -0
  278. package/web/.next/server/chunks/ssr/node_modules__pnpm_63d47a3e._.js.map +1 -0
  279. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js +3 -0
  280. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +1 -0
  281. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +1 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +3 -0
  283. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +1 -0
  284. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +5 -0
  285. package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +1 -0
  286. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +5 -0
  287. package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +3 -0
  289. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +1 -0
  290. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +3 -0
  291. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +3 -0
  293. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -0
  294. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +3 -0
  295. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -0
  296. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +2 -2
  298. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js.map +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_components_a5e6c910._.js +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_select_tsx_45d6b8ae._.js +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +3 -0
  309. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +1 -0
  310. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +3 -0
  311. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +1 -0
  312. package/web/.next/server/middleware-build-manifest.js +2 -2
  313. package/web/.next/server/pages/500.html +2 -2
  314. package/web/.next/server/server-reference-manifest.js +1 -1
  315. package/web/.next/server/server-reference-manifest.json +50 -50
  316. package/web/.next/static/chunks/{ab5970241b29b648.js → 041bbd573f24c747.js} +1 -1
  317. package/web/.next/static/chunks/{0658f5f58d5b60c5.js → 273d92d4c2d7785c.js} +1 -1
  318. package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
  319. package/web/.next/static/chunks/46e2693dbc9262fd.js +5 -0
  320. package/web/.next/static/chunks/{51bb2fb93740d2cb.js → 53fc463b54ef2b4b.js} +2 -2
  321. package/web/.next/static/chunks/{641583aadf11b219.js → 6129f01524593835.js} +1 -1
  322. package/web/.next/static/chunks/{e5c06df7f30a05b9.js → 659ee5c3bcd5908a.js} +1 -1
  323. package/web/.next/static/chunks/{96b63a24ad83be21.js → 6adf506943611449.js} +1 -1
  324. package/web/.next/static/chunks/{a1f976e9c8b07306.js → 79b8efa054660be8.js} +1 -1
  325. package/web/.next/static/chunks/7e50572eaeede7f0.js +3 -0
  326. package/web/.next/static/chunks/8492d8e0b5f9a4e8.js +1 -0
  327. package/web/.next/static/chunks/88192bc55f93b89e.js +1 -0
  328. package/web/.next/static/chunks/98e3a7cf58fc912a.js +1 -0
  329. package/web/.next/static/chunks/9f5327851ad07bdf.js +7 -0
  330. package/web/.next/static/chunks/a20f2d6f76f469b7.css +1 -0
  331. package/web/.next/static/chunks/ad7590436eef8a9e.js +1 -0
  332. package/web/.next/static/chunks/{819d8097ac0ca319.js → ae65839330ff1113.js} +1 -1
  333. package/web/.next/static/chunks/b49ab0b290e9342d.js +1 -0
  334. package/web/.next/static/chunks/b88dd71478d03b6a.js +1 -0
  335. package/web/.next/static/chunks/bb479c31b5b53bac.js +8 -0
  336. package/web/.next/static/chunks/c10c0d6d458453bc.js +1 -0
  337. package/web/.next/static/chunks/{4161d4663009140f.js → dbaa2ef826fd65d6.js} +1 -1
  338. package/web/.next/static/chunks/{185e4f36cb6efb24.js → eb1ca1b0a34166f5.js} +1 -1
  339. package/web/.next/static/chunks/fc0232384ec2b48d.js +1 -0
  340. package/web/.next/static/chunks/{turbopack-b38a68b1b1c41a87.js → turbopack-fa58b7ea4a4b26e7.js} +1 -1
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +0 -4
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +0 -1
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +0 -4
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +0 -1
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js +0 -4
  346. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +0 -1
  347. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +0 -1
  348. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +0 -4
  349. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +0 -1
  350. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +0 -4
  351. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +0 -1
  352. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js +0 -3
  353. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
  355. package/web/.next/server/chunks/ssr/_02e01240._.js +0 -4
  356. package/web/.next/server/chunks/ssr/_02e01240._.js.map +0 -1
  357. package/web/.next/server/chunks/ssr/_068492bf._.js +0 -3
  358. package/web/.next/server/chunks/ssr/_068492bf._.js.map +0 -1
  359. package/web/.next/server/chunks/ssr/_18886033._.js +0 -4
  360. package/web/.next/server/chunks/ssr/_18886033._.js.map +0 -1
  361. package/web/.next/server/chunks/ssr/_22e00a14._.js +0 -4
  362. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +0 -1
  363. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +0 -1
  364. package/web/.next/server/chunks/ssr/_560f2971._.js +0 -3
  365. package/web/.next/server/chunks/ssr/_560f2971._.js.map +0 -1
  366. package/web/.next/server/chunks/ssr/_a5a5901d._.js +0 -4
  367. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +0 -1
  368. package/web/.next/server/chunks/ssr/_a963dd3c._.js +0 -3
  369. package/web/.next/server/chunks/ssr/_a963dd3c._.js.map +0 -1
  370. package/web/.next/server/chunks/ssr/_ad09f271._.js +0 -4
  371. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +0 -1
  372. package/web/.next/server/chunks/ssr/_c3f595c6._.js +0 -4
  373. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +0 -1
  374. package/web/.next/server/chunks/ssr/_df737cce._.js +0 -3
  375. package/web/.next/server/chunks/ssr/_df737cce._.js.map +0 -1
  376. package/web/.next/server/chunks/ssr/_e3f14907._.js +0 -9
  377. package/web/.next/server/chunks/ssr/_e3f14907._.js.map +0 -1
  378. package/web/.next/server/chunks/ssr/_ea9e1556._.js +0 -4
  379. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +0 -1
  380. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +0 -6
  381. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +0 -1
  382. package/web/.next/server/chunks/ssr/_f33cd07e._.js +0 -6
  383. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +0 -1
  384. package/web/.next/server/chunks/ssr/_f535d854._.js +0 -3
  385. package/web/.next/server/chunks/ssr/_f535d854._.js.map +0 -1
  386. package/web/.next/server/chunks/ssr/_f8b45233._.js +0 -4
  387. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +0 -1
  388. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
  389. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
  390. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_page-header_index_ts_bdf4db0b._.js +0 -3
  391. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_page-header_index_ts_bdf4db0b._.js.map +0 -1
  392. package/web/.next/static/chunks/3e393d6a78b2ade4.js +0 -1
  393. package/web/.next/static/chunks/453ad57269a1004f.js +0 -1
  394. package/web/.next/static/chunks/4559a403ee40dd19.js +0 -7
  395. package/web/.next/static/chunks/4855528484f00bd6.js +0 -1
  396. package/web/.next/static/chunks/4bacc77e3952f063.js +0 -3
  397. package/web/.next/static/chunks/5ed47e998707b519.js +0 -8
  398. package/web/.next/static/chunks/9f59ea29d6034111.js +0 -1
  399. package/web/.next/static/chunks/bb5400da64270df6.js +0 -1
  400. package/web/.next/static/chunks/cc5fe8d1d9e1e519.js +0 -5
  401. package/web/.next/static/chunks/d5366257d6b9f855.js +0 -1
  402. package/web/.next/static/chunks/dcf8bb4389557a76.css +0 -1
  403. package/web/.next/static/chunks/f37a5e031a5d0f75.js +0 -1
  404. package/web/.next/static/chunks/f998b42b5cddafd6.js +0 -1
  405. /package/web/.next/static/{1awQPFeGEuNwpeu1Kgpxd → UWgKy2y_bjIYkCFOMl8Am}/_buildManifest.js +0 -0
  406. /package/web/.next/static/{1awQPFeGEuNwpeu1Kgpxd → UWgKy2y_bjIYkCFOMl8Am}/_clientMiddlewareManifest.json +0 -0
  407. /package/web/.next/static/{1awQPFeGEuNwpeu1Kgpxd → UWgKy2y_bjIYkCFOMl8Am}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[228,a=>{"use strict";var b=a.i(10973);a.i(78454);var c=a.i(24255),d=a.i(2824),e=a.i(58339),f=a.i(13126),g=a.i(3195);function h({skill:a,onClose:h}){return(0,b.jsx)(c.BaseDrawer,{open:null!==a,onClose:h,size:"sm",modal:!0,"data-testid":"skill-detail-drawer",header:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.DrawerTitle,{children:a.displayName}),(0,b.jsx)(d.DrawerDescription,{children:a.name})]}):void 0,children:a?(0,b.jsxs)("div",{className:"px-4 pb-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),(0,b.jsxs)("div",{className:"mt-4 flex flex-wrap items-center gap-1.5",children:[(0,b.jsx)(e.Badge,{variant:"project"===a.source?"secondary":"outline",children:"project"===a.source?"Project":"Global"}),(0,b.jsx)(e.Badge,{variant:"outline",children:a.category}),a.context?(0,b.jsx)(e.Badge,{variant:"outline",children:a.context}):null]}),a.allowedTools?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.Separator,{className:"my-4"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold",children:"Allowed Tools"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1 text-sm",children:a.allowedTools})]})]}):null,a.resources.length>0?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.Separator,{className:"my-4"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold",children:"Resources"}),(0,b.jsx)("ul",{className:"mt-2 space-y-1.5",children:a.resources.map(a=>(0,b.jsxs)("li",{className:"text-muted-foreground flex items-center gap-2 text-sm",children:[(0,b.jsx)(g.FolderOpen,{className:"size-3.5 shrink-0"}),(0,b.jsxs)("span",{children:[a.name,"/ — ",a.fileCount," ",1===a.fileCount?"file":"files"]})]},a.name))})]})]}):null,a.body?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.Separator,{className:"my-4"}),(0,b.jsx)("pre",{className:"text-muted-foreground text-sm leading-relaxed whitespace-pre-wrap",children:a.body})]}):null]}):null})}a.s(["SkillDetailDrawer",()=>h])},74468,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(31378),e=a.i(67424),f=a.i(90920),g=a.i(18948);a.i(14095);var h=a.i(75550);a.i(38702);var i=a.i(16223),j=a.i(84117),k=a.i(58339),l=a.i(3195);function m({skill:a,onSelect:c}){return(0,b.jsxs)(j.Card,{className:"hover:border-primary/50 cursor-pointer transition-colors",role:"button",tabIndex:0,onClick:()=>c(a),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),c(a))},"data-testid":`skill-card-${a.name}`,children:[(0,b.jsxs)(j.CardHeader,{className:"pb-3",children:[(0,b.jsx)(j.CardTitle,{className:"text-base",children:a.displayName}),(0,b.jsx)("p",{className:"text-muted-foreground font-mono text-xs",children:a.name})]}),(0,b.jsxs)(j.CardContent,{className:"space-y-3",children:[(0,b.jsx)("p",{className:"text-muted-foreground line-clamp-2 text-sm",children:a.description}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,b.jsx)(k.Badge,{variant:"project"===a.source?"secondary":"outline",children:"project"===a.source?"Project":"Global"}),a.context?(0,b.jsx)(k.Badge,{variant:"outline",children:a.context}):null,a.allowedTools?(0,b.jsx)(k.Badge,{variant:"outline",children:"Tools"}):null,a.resources.length>0?(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-center gap-1 text-xs",children:[(0,b.jsx)(l.FolderOpen,{className:"size-3"}),a.resources.length," ",1===a.resources.length?"resource":"resources"]}):null]})]})]})}let n=["Workflow","Code Generation","Analysis","Reference"];function o({skills:a,onSkillSelect:c}){let d=function(a){let b=new Map;for(let c of a){let a=b.get(c.category)??[];a.push(c),b.set(c.category,a)}return b}(a);return(0,b.jsx)("div",{className:"space-y-8",children:n.map(a=>{let e=d.get(a);return e&&0!==e.length?(0,b.jsxs)("section",{children:[(0,b.jsxs)("h2",{className:"mb-4 text-lg font-semibold",children:[a," ",(0,b.jsxs)("span",{className:"text-muted-foreground text-sm font-normal",children:["(",e.length,")"]})]}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",children:e.map(a=>(0,b.jsx)(m,{skill:a,onSelect:c},a.name))})]},a):null})})}let p=[{label:"All",value:null},{label:"Workflow",value:"Workflow"},{label:"Code Generation",value:"Code Generation"},{label:"Analysis",value:"Analysis"},{label:"Reference",value:"Reference"}];function q({activeCategory:a,onCategoryChange:c,counts:d}){return(0,b.jsx)("div",{className:"flex flex-wrap gap-2",role:"group","aria-label":"Filter by category",children:p.map(({label:e,value:f})=>(0,b.jsxs)(g.Button,{variant:a===f?"default":"outline",size:"sm",onClick:()=>c(f),children:[e,d&&f?(0,b.jsxs)("span",{className:"ms-1 text-xs opacity-70",children:["(",d[f],")"]}):null]},e))})}var r=a.i(228),s=a.i(13126),t=a.i(69845),u=a.i(67837),v=a.i(2807),w=a.i(52313),x=a.i(25674);let y=(0,x.createServerReference)("4059784c93ef7c462fe0cfbbd55f2ed5ac8e3a8f78",x.callServer,void 0,x.findSourceMapURL,"removeInjectedSkill");var z=a.i(45670),A=a.i(584),B=a.i(41305);let C=(0,x.createServerReference)("40d08fce9c3dd5534cad4c5c71c88526048334dc49",x.callServer,void 0,x.findSourceMapURL,"addInjectedSkill");function D({open:a,onOpenChange:d,onAdded:e,discoveredSkills:h,existingSkillNames:i}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(""),[n,o]=(0,c.useState)(""),[p,q]=(0,c.useState)(""),r=h.filter(a=>!i.includes(a.name)),s=async a=>{k(!0);let b=await C({name:a.name,type:"local",source:`.claude/skills/${a.name}`});(k(!1),b.success)?(w.toast.success(`Added "${a.name}" to feature skills`),e()):w.toast.error(b.error??"Failed to add skill")},t=async()=>{if(!l.trim()||!n.trim())return void w.toast.error("Name and source are required");k(!0);let a=await C({name:l.trim(),type:"remote",source:n.trim(),...p.trim()&&{remoteSkillName:p.trim()}});(k(!1),a.success)?(w.toast.success(`Added "${l.trim()}" to feature skills`),m(""),o(""),q(""),e()):w.toast.error(a.error??"Failed to add skill")};return(0,b.jsx)(z.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(z.DialogContent,{className:"sm:max-w-md","data-testid":"add-skill-dialog",children:[(0,b.jsx)(z.DialogHeader,{children:(0,b.jsx)(z.DialogTitle,{children:"Add Skill to Features"})}),(0,b.jsxs)(B.Tabs,{defaultValue:"local",children:[(0,b.jsxs)(B.TabsList,{className:"w-full",children:[(0,b.jsx)(B.TabsTrigger,{value:"local",className:"flex-1",children:"Local"}),(0,b.jsx)(B.TabsTrigger,{value:"remote",className:"flex-1",children:"Remote"})]}),(0,b.jsx)(B.TabsContent,{value:"local",className:"mt-4",children:0===r.length?(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:"All discovered skills are already configured."}):(0,b.jsx)("div",{className:"flex max-h-60 flex-col gap-2 overflow-y-auto",children:r.map(a=>(0,b.jsxs)("button",{type:"button",className:"hover:bg-accent flex flex-col gap-0.5 rounded-md border p-3 text-left transition-colors",onClick:()=>s(a),disabled:j,"data-testid":`add-local-skill-${a.name}`,children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:a.displayName}),(0,b.jsx)("span",{className:"text-muted-foreground line-clamp-1 text-xs",children:a.description})]},a.name))})}),(0,b.jsx)(B.TabsContent,{value:"remote",className:"mt-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(A.Label,{htmlFor:"remote-name",children:"Name"}),(0,b.jsx)(f.Input,{id:"remote-name",placeholder:"e.g. remotion-best-practices",value:l,onChange:a=>m(a.target.value),"data-testid":"remote-skill-name"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(A.Label,{htmlFor:"remote-source",children:"Source (npm package or URL)"}),(0,b.jsx)(f.Input,{id:"remote-source",placeholder:"e.g. @anthropic/remotion-skills",value:n,onChange:a=>o(a.target.value),"data-testid":"remote-skill-source"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(A.Label,{htmlFor:"remote-skill-name",children:"Skill Name (optional)"}),(0,b.jsx)(f.Input,{id:"remote-skill-name",placeholder:"e.g. remotion-best-practices",value:p,onChange:a=>q(a.target.value),"data-testid":"remote-skill-skill-name"})]}),(0,b.jsx)(z.DialogFooter,{children:(0,b.jsx)(g.Button,{onClick:t,disabled:j||!l.trim()||!n.trim(),"data-testid":"add-remote-skill-submit",children:"Add Remote Skill"})})]})})]})]})})}function E({config:a,discoveredSkills:d}){let e=(0,t.useRouter)(),[f,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(null),k=(0,c.useMemo)(()=>{let a=new Map;for(let b of d)a.set(b.name,b.description);return a},[d]),l=async a=>{j(a);let b=await y(a);(j(null),b.success)?(w.toast.success(`Removed "${a}" from feature skills`),e.refresh()):w.toast.error(b.error??"Failed to remove skill")};return(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-base font-semibold",children:"Feature Skills"}),(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:"Curated skills included in new feature worktrees to guide the agent"})]}),a.skills.length>0?(0,b.jsx)("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:a.skills.map(a=>(0,b.jsx)(F,{skill:a,description:k.get(a.name),onRemove:()=>l(a.name),isRemoving:i===a.name},a.name))}):(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:"No skills configured. Add skills to guide the agent when working on new features."}),(0,b.jsx)("div",{children:(0,b.jsxs)(g.Button,{variant:"outline",size:"sm",onClick:()=>h(!0),"data-testid":"add-injected-skill-button",children:[(0,b.jsx)(u.Plus,{className:"mr-1.5 size-4"}),"Add Skill"]})}),(0,b.jsx)(D,{open:f,onOpenChange:h,onAdded:()=>{h(!1),e.refresh()},discoveredSkills:d,existingSkillNames:a.skills.map(a=>a.name)})]})}function F({skill:a,description:c,onRemove:d,isRemoving:e}){return(0,b.jsxs)(j.Card,{"data-testid":`injected-skill-${a.name}`,children:[(0,b.jsxs)(j.CardHeader,{className:"flex flex-row items-start justify-between gap-2 pb-2",children:[(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)(j.CardTitle,{className:"truncate text-sm",children:a.name})}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-sm",className:"shrink-0",onClick:d,disabled:e,"aria-label":`Remove ${a.name}`,"data-testid":`remove-injected-skill-${a.name}`,children:(0,b.jsx)(v.X,{className:"size-4"})})]}),(0,b.jsxs)(j.CardContent,{className:"space-y-2 pt-0",children:[c?(0,b.jsx)("p",{className:"text-muted-foreground line-clamp-2 text-xs",children:c}):null,(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)(k.Badge,{variant:"local"===a.type?"secondary":"outline",className:"text-xs",children:"local"===a.type?"Local":"Remote"}),(0,b.jsx)("span",{className:"text-muted-foreground max-w-37.5 truncate text-xs",children:a.source})]})]})]})}function G({skills:a,injectionConfig:j}){let[k,l]=(0,c.useState)(""),[m,n]=(0,c.useState)(null),[p,t]=(0,c.useState)(null),u=(0,c.useMemo)(()=>(function(a){let b={Workflow:0,"Code Generation":0,Analysis:0,Reference:0};for(let c of a)b[c.category]++;return b})(a),[a]),v=(0,c.useMemo)(()=>{let b=k.toLowerCase();return a.filter(a=>{if(m&&a.category!==m)return!1;if(b){let c=a.name.toLowerCase().includes(b),d=a.description.toLowerCase().includes(b);if(!c&&!d)return!1}return!0})},[a,k,m]);return 0===a.length?(0,b.jsxs)("div",{className:"flex flex-col gap-6 p-6",children:[(0,b.jsx)(h.PageHeader,{title:"Skills",description:"Claude Code skills available to this project"}),(0,b.jsx)(E,{config:j,discoveredSkills:a}),(0,b.jsx)(s.Separator,{}),(0,b.jsx)(i.EmptyState,{icon:(0,b.jsx)(e.Puzzle,{className:"size-10"}),title:"No skills found",description:"No Claude Code skills are installed. Add skills to .claude/skills/ to get started."})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-6 p-6",children:[(0,b.jsx)(h.PageHeader,{title:"Skills",description:"Claude Code skills available to this project"}),(0,b.jsx)(E,{config:j,discoveredSkills:a}),(0,b.jsx)(s.Separator,{}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(d.Search,{className:"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2"}),(0,b.jsx)(f.Input,{placeholder:"Search skills...",value:k,onChange:a=>l(a.target.value),className:"ps-9"})]}),(0,b.jsx)(q,{activeCategory:m,onCategoryChange:n,counts:u}),v.length>0?(0,b.jsx)(o,{skills:v,onSkillSelect:t}):(0,b.jsx)(i.EmptyState,{icon:(0,b.jsx)(d.Search,{className:"size-10"}),title:"No matching skills",description:"No skills match your current search and filter criteria.",action:(0,b.jsx)(g.Button,{variant:"outline",onClick:()=>{l(""),n(null)},children:"Clear filters"})}),(0,b.jsx)(r.SkillDetailDrawer,{skill:p,onClose:()=>t(null)})]})}a.s(["SkillsPageClient",()=>G],74468)}];
1
+ module.exports=[228,a=>{"use strict";var b=a.i(12656);a.i(78454);var c=a.i(24255),d=a.i(2824),e=a.i(58339),f=a.i(13126),g=a.i(3195);function h({skill:a,onClose:h}){return(0,b.jsx)(c.BaseDrawer,{open:null!==a,onClose:h,size:"sm",modal:!0,"data-testid":"skill-detail-drawer",header:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(d.DrawerTitle,{children:a.displayName}),(0,b.jsx)(d.DrawerDescription,{children:a.name})]}):void 0,children:a?(0,b.jsxs)("div",{className:"px-4 pb-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),(0,b.jsxs)("div",{className:"mt-4 flex flex-wrap items-center gap-1.5",children:[(0,b.jsx)(e.Badge,{variant:"project"===a.source?"secondary":"outline",children:"project"===a.source?"Project":"Global"}),(0,b.jsx)(e.Badge,{variant:"outline",children:a.category}),a.context?(0,b.jsx)(e.Badge,{variant:"outline",children:a.context}):null]}),a.allowedTools?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.Separator,{className:"my-4"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold",children:"Allowed Tools"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1 text-sm",children:a.allowedTools})]})]}):null,a.resources.length>0?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.Separator,{className:"my-4"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-semibold",children:"Resources"}),(0,b.jsx)("ul",{className:"mt-2 space-y-1.5",children:a.resources.map(a=>(0,b.jsxs)("li",{className:"text-muted-foreground flex items-center gap-2 text-sm",children:[(0,b.jsx)(g.FolderOpen,{className:"size-3.5 shrink-0"}),(0,b.jsxs)("span",{children:[a.name,"/ — ",a.fileCount," ",1===a.fileCount?"file":"files"]})]},a.name))})]})]}):null,a.body?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.Separator,{className:"my-4"}),(0,b.jsx)("pre",{className:"text-muted-foreground text-sm leading-relaxed whitespace-pre-wrap",children:a.body})]}):null]}):null})}a.s(["SkillDetailDrawer",()=>h])},74468,a=>{"use strict";var b=a.i(12656),c=a.i(96960),d=a.i(31378),e=a.i(67424),f=a.i(90920),g=a.i(18948);a.i(55135);var h=a.i(75550);a.i(38702);var i=a.i(16223),j=a.i(84117),k=a.i(58339),l=a.i(3195);function m({skill:a,onSelect:c}){return(0,b.jsxs)(j.Card,{className:"hover:border-primary/50 cursor-pointer transition-colors",role:"button",tabIndex:0,onClick:()=>c(a),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),c(a))},"data-testid":`skill-card-${a.name}`,children:[(0,b.jsxs)(j.CardHeader,{className:"pb-3",children:[(0,b.jsx)(j.CardTitle,{className:"text-base",children:a.displayName}),(0,b.jsx)("p",{className:"text-muted-foreground font-mono text-xs",children:a.name})]}),(0,b.jsxs)(j.CardContent,{className:"space-y-3",children:[(0,b.jsx)("p",{className:"text-muted-foreground line-clamp-2 text-sm",children:a.description}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,b.jsx)(k.Badge,{variant:"project"===a.source?"secondary":"outline",children:"project"===a.source?"Project":"Global"}),a.context?(0,b.jsx)(k.Badge,{variant:"outline",children:a.context}):null,a.allowedTools?(0,b.jsx)(k.Badge,{variant:"outline",children:"Tools"}):null,a.resources.length>0?(0,b.jsxs)("span",{className:"text-muted-foreground inline-flex items-center gap-1 text-xs",children:[(0,b.jsx)(l.FolderOpen,{className:"size-3"}),a.resources.length," ",1===a.resources.length?"resource":"resources"]}):null]})]})]})}let n=["Workflow","Code Generation","Analysis","Reference"];function o({skills:a,onSkillSelect:c}){let d=function(a){let b=new Map;for(let c of a){let a=b.get(c.category)??[];a.push(c),b.set(c.category,a)}return b}(a);return(0,b.jsx)("div",{className:"space-y-8",children:n.map(a=>{let e=d.get(a);return e&&0!==e.length?(0,b.jsxs)("section",{children:[(0,b.jsxs)("h2",{className:"mb-4 text-lg font-semibold",children:[a," ",(0,b.jsxs)("span",{className:"text-muted-foreground text-sm font-normal",children:["(",e.length,")"]})]}),(0,b.jsx)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3",children:e.map(a=>(0,b.jsx)(m,{skill:a,onSelect:c},a.name))})]},a):null})})}let p=[{label:"All",value:null},{label:"Workflow",value:"Workflow"},{label:"Code Generation",value:"Code Generation"},{label:"Analysis",value:"Analysis"},{label:"Reference",value:"Reference"}];function q({activeCategory:a,onCategoryChange:c,counts:d}){return(0,b.jsx)("div",{className:"flex flex-wrap gap-2",role:"group","aria-label":"Filter by category",children:p.map(({label:e,value:f})=>(0,b.jsxs)(g.Button,{variant:a===f?"default":"outline",size:"sm",onClick:()=>c(f),children:[e,d&&f?(0,b.jsxs)("span",{className:"ms-1 text-xs opacity-70",children:["(",d[f],")"]}):null]},e))})}var r=a.i(228),s=a.i(13126),t=a.i(69845),u=a.i(67837),v=a.i(2807),w=a.i(52313),x=a.i(25674);let y=(0,x.createServerReference)("40a8bab6ef46eb495ffbab98913858a033a0e81577",x.callServer,void 0,x.findSourceMapURL,"removeInjectedSkill");var z=a.i(45670),A=a.i(584),B=a.i(41305);let C=(0,x.createServerReference)("406e32eaf907ca16386916d102319adca9204d0e04",x.callServer,void 0,x.findSourceMapURL,"addInjectedSkill");function D({open:a,onOpenChange:d,onAdded:e,discoveredSkills:h,existingSkillNames:i}){let[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(""),[n,o]=(0,c.useState)(""),[p,q]=(0,c.useState)(""),r=h.filter(a=>!i.includes(a.name)),s=async a=>{k(!0);let b=await C({name:a.name,type:"local",source:`.claude/skills/${a.name}`});(k(!1),b.success)?(w.toast.success(`Added "${a.name}" to feature skills`),e()):w.toast.error(b.error??"Failed to add skill")},t=async()=>{if(!l.trim()||!n.trim())return void w.toast.error("Name and source are required");k(!0);let a=await C({name:l.trim(),type:"remote",source:n.trim(),...p.trim()&&{remoteSkillName:p.trim()}});(k(!1),a.success)?(w.toast.success(`Added "${l.trim()}" to feature skills`),m(""),o(""),q(""),e()):w.toast.error(a.error??"Failed to add skill")};return(0,b.jsx)(z.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(z.DialogContent,{className:"sm:max-w-md","data-testid":"add-skill-dialog",children:[(0,b.jsx)(z.DialogHeader,{children:(0,b.jsx)(z.DialogTitle,{children:"Add Skill to Features"})}),(0,b.jsxs)(B.Tabs,{defaultValue:"local",children:[(0,b.jsxs)(B.TabsList,{className:"w-full",children:[(0,b.jsx)(B.TabsTrigger,{value:"local",className:"flex-1",children:"Local"}),(0,b.jsx)(B.TabsTrigger,{value:"remote",className:"flex-1",children:"Remote"})]}),(0,b.jsx)(B.TabsContent,{value:"local",className:"mt-4",children:0===r.length?(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:"All discovered skills are already configured."}):(0,b.jsx)("div",{className:"flex max-h-60 flex-col gap-2 overflow-y-auto",children:r.map(a=>(0,b.jsxs)("button",{type:"button",className:"hover:bg-accent flex flex-col gap-0.5 rounded-md border p-3 text-left transition-colors",onClick:()=>s(a),disabled:j,"data-testid":`add-local-skill-${a.name}`,children:[(0,b.jsx)("span",{className:"text-sm font-medium",children:a.displayName}),(0,b.jsx)("span",{className:"text-muted-foreground line-clamp-1 text-xs",children:a.description})]},a.name))})}),(0,b.jsx)(B.TabsContent,{value:"remote",className:"mt-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(A.Label,{htmlFor:"remote-name",children:"Name"}),(0,b.jsx)(f.Input,{id:"remote-name",placeholder:"e.g. remotion-best-practices",value:l,onChange:a=>m(a.target.value),"data-testid":"remote-skill-name"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(A.Label,{htmlFor:"remote-source",children:"Source (npm package or URL)"}),(0,b.jsx)(f.Input,{id:"remote-source",placeholder:"e.g. @anthropic/remotion-skills",value:n,onChange:a=>o(a.target.value),"data-testid":"remote-skill-source"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(A.Label,{htmlFor:"remote-skill-name",children:"Skill Name (optional)"}),(0,b.jsx)(f.Input,{id:"remote-skill-name",placeholder:"e.g. remotion-best-practices",value:p,onChange:a=>q(a.target.value),"data-testid":"remote-skill-skill-name"})]}),(0,b.jsx)(z.DialogFooter,{children:(0,b.jsx)(g.Button,{onClick:t,disabled:j||!l.trim()||!n.trim(),"data-testid":"add-remote-skill-submit",children:"Add Remote Skill"})})]})})]})]})})}function E({config:a,discoveredSkills:d}){let e=(0,t.useRouter)(),[f,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(null),k=(0,c.useMemo)(()=>{let a=new Map;for(let b of d)a.set(b.name,b.description);return a},[d]),l=async a=>{j(a);let b=await y(a);(j(null),b.success)?(w.toast.success(`Removed "${a}" from feature skills`),e.refresh()):w.toast.error(b.error??"Failed to remove skill")};return(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-base font-semibold",children:"Feature Skills"}),(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:"Curated skills included in new feature worktrees to guide the agent"})]}),a.skills.length>0?(0,b.jsx)("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:a.skills.map(a=>(0,b.jsx)(F,{skill:a,description:k.get(a.name),onRemove:()=>l(a.name),isRemoving:i===a.name},a.name))}):(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:"No skills configured. Add skills to guide the agent when working on new features."}),(0,b.jsx)("div",{children:(0,b.jsxs)(g.Button,{variant:"outline",size:"sm",onClick:()=>h(!0),"data-testid":"add-injected-skill-button",children:[(0,b.jsx)(u.Plus,{className:"mr-1.5 size-4"}),"Add Skill"]})}),(0,b.jsx)(D,{open:f,onOpenChange:h,onAdded:()=>{h(!1),e.refresh()},discoveredSkills:d,existingSkillNames:a.skills.map(a=>a.name)})]})}function F({skill:a,description:c,onRemove:d,isRemoving:e}){return(0,b.jsxs)(j.Card,{"data-testid":`injected-skill-${a.name}`,children:[(0,b.jsxs)(j.CardHeader,{className:"flex flex-row items-start justify-between gap-2 pb-2",children:[(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)(j.CardTitle,{className:"truncate text-sm",children:a.name})}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-sm",className:"shrink-0",onClick:d,disabled:e,"aria-label":`Remove ${a.name}`,"data-testid":`remove-injected-skill-${a.name}`,children:(0,b.jsx)(v.X,{className:"size-4"})})]}),(0,b.jsxs)(j.CardContent,{className:"space-y-2 pt-0",children:[c?(0,b.jsx)("p",{className:"text-muted-foreground line-clamp-2 text-xs",children:c}):null,(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)(k.Badge,{variant:"local"===a.type?"secondary":"outline",className:"text-xs",children:"local"===a.type?"Local":"Remote"}),(0,b.jsx)("span",{className:"text-muted-foreground max-w-37.5 truncate text-xs",children:a.source})]})]})]})}function G({skills:a,injectionConfig:j}){let[k,l]=(0,c.useState)(""),[m,n]=(0,c.useState)(null),[p,t]=(0,c.useState)(null),u=(0,c.useMemo)(()=>(function(a){let b={Workflow:0,"Code Generation":0,Analysis:0,Reference:0};for(let c of a)b[c.category]++;return b})(a),[a]),v=(0,c.useMemo)(()=>{let b=k.toLowerCase();return a.filter(a=>{if(m&&a.category!==m)return!1;if(b){let c=a.name.toLowerCase().includes(b),d=a.description.toLowerCase().includes(b);if(!c&&!d)return!1}return!0})},[a,k,m]);return 0===a.length?(0,b.jsxs)("div",{className:"flex flex-col gap-6 p-6",children:[(0,b.jsx)(h.PageHeader,{title:"Skills",description:"Claude Code skills available to this project"}),(0,b.jsx)(E,{config:j,discoveredSkills:a}),(0,b.jsx)(s.Separator,{}),(0,b.jsx)(i.EmptyState,{icon:(0,b.jsx)(e.Puzzle,{className:"size-10"}),title:"No skills found",description:"No Claude Code skills are installed. Add skills to .claude/skills/ to get started."})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-6 p-6",children:[(0,b.jsx)(h.PageHeader,{title:"Skills",description:"Claude Code skills available to this project"}),(0,b.jsx)(E,{config:j,discoveredSkills:a}),(0,b.jsx)(s.Separator,{}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(d.Search,{className:"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2"}),(0,b.jsx)(f.Input,{placeholder:"Search skills...",value:k,onChange:a=>l(a.target.value),className:"ps-9"})]}),(0,b.jsx)(q,{activeCategory:m,onCategoryChange:n,counts:u}),v.length>0?(0,b.jsx)(o,{skills:v,onSkillSelect:t}):(0,b.jsx)(i.EmptyState,{icon:(0,b.jsx)(d.Search,{className:"size-10"}),title:"No matching skills",description:"No skills match your current search and filter criteria.",action:(0,b.jsx)(g.Button,{variant:"outline",onClick:()=>{l(""),n(null)},children:"Clear filters"})}),(0,b.jsx)(r.SkillDetailDrawer,{skill:p,onClose:()=>t(null)})]})}a.s(["SkillsPageClient",()=>G],74468)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_components_features_skills_8a174cac._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/components/features/skills/skill-detail-drawer.tsx","../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx","../../../../../../../src/presentation/web/components/features/skills/skill-card.tsx","../../../../../../../src/presentation/web/components/features/skills/skill-list.tsx","../../../../../../../src/presentation/web/components/features/skills/category-filter.tsx","../../../../../../../src/presentation/web/components/features/skills/auto-injected-skills-section.tsx","../../../../../../../src/presentation/web/app/actions/data%3A01094e%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/skills/add-skill-dialog.tsx","../../../../../../../src/presentation/web/app/actions/data%3Ab20b39%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Badge } from '@/components/ui/badge';\nimport { Separator } from '@/components/ui/separator';\nimport { FolderOpen } from 'lucide-react';\nimport type { SkillData } from '@/lib/skills';\n\nexport interface SkillDetailDrawerProps {\n skill: SkillData | null;\n onClose: () => void;\n}\n\nexport function SkillDetailDrawer({ skill, onClose }: SkillDetailDrawerProps) {\n return (\n <BaseDrawer\n open={skill !== null}\n onClose={onClose}\n size=\"sm\"\n modal\n data-testid=\"skill-detail-drawer\"\n header={\n skill ? (\n <>\n <DrawerTitle>{skill.displayName}</DrawerTitle>\n <DrawerDescription>{skill.name}</DrawerDescription>\n </>\n ) : undefined\n }\n >\n {skill ? (\n <div className=\"px-4 pb-4\">\n {/* Description */}\n <p className=\"text-muted-foreground text-sm\">{skill.description}</p>\n\n {/* Badges */}\n <div className=\"mt-4 flex flex-wrap items-center gap-1.5\">\n <Badge variant={skill.source === 'project' ? 'secondary' : 'outline'}>\n {skill.source === 'project' ? 'Project' : 'Global'}\n </Badge>\n <Badge variant=\"outline\">{skill.category}</Badge>\n {skill.context ? <Badge variant=\"outline\">{skill.context}</Badge> : null}\n </div>\n\n {/* Allowed Tools */}\n {skill.allowedTools ? (\n <>\n <Separator className=\"my-4\" />\n <div>\n <h3 className=\"text-sm font-semibold\">Allowed Tools</h3>\n <p className=\"text-muted-foreground mt-1 text-sm\">{skill.allowedTools}</p>\n </div>\n </>\n ) : null}\n\n {/* Resources */}\n {skill.resources.length > 0 ? (\n <>\n <Separator className=\"my-4\" />\n <div>\n <h3 className=\"text-sm font-semibold\">Resources</h3>\n <ul className=\"mt-2 space-y-1.5\">\n {skill.resources.map((resource) => (\n <li\n key={resource.name}\n className=\"text-muted-foreground flex items-center gap-2 text-sm\"\n >\n <FolderOpen className=\"size-3.5 shrink-0\" />\n <span>\n {resource.name}/ — {resource.fileCount}{' '}\n {resource.fileCount === 1 ? 'file' : 'files'}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </>\n ) : null}\n\n {/* Body */}\n {skill.body ? (\n <>\n <Separator className=\"my-4\" />\n <pre className=\"text-muted-foreground text-sm leading-relaxed whitespace-pre-wrap\">\n {skill.body}\n </pre>\n </>\n ) : null}\n </div>\n ) : null}\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { Search, Puzzle } from 'lucide-react';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { PageHeader } from '@/components/common/page-header';\nimport { EmptyState } from '@/components/common/empty-state';\nimport { SkillList } from './skill-list';\nimport { CategoryFilter } from './category-filter';\nimport { SkillDetailDrawer } from './skill-detail-drawer';\nimport type { SkillInjectionConfig } from '@shepai/core/domain/generated/output';\nimport { Separator } from '@/components/ui/separator';\nimport { AutoInjectedSkillsSection } from './auto-injected-skills-section';\nimport type { SkillCategory, SkillData } from '@/lib/skills';\n\nexport interface SkillsPageClientProps {\n skills: SkillData[];\n injectionConfig: SkillInjectionConfig;\n}\n\nfunction computeCategoryCounts(skills: SkillData[]): Record<SkillCategory, number> {\n const counts: Record<SkillCategory, number> = {\n Workflow: 0,\n 'Code Generation': 0,\n Analysis: 0,\n Reference: 0,\n };\n for (const skill of skills) {\n counts[skill.category]++;\n }\n return counts;\n}\n\nexport function SkillsPageClient({ skills, injectionConfig }: SkillsPageClientProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [activeCategory, setActiveCategory] = useState<SkillCategory | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<SkillData | null>(null);\n\n const categoryCounts = useMemo(() => computeCategoryCounts(skills), [skills]);\n\n const filteredSkills = useMemo(() => {\n const query = searchQuery.toLowerCase();\n return skills.filter((skill) => {\n if (activeCategory && skill.category !== activeCategory) return false;\n if (query) {\n const matchesName = skill.name.toLowerCase().includes(query);\n const matchesDescription = skill.description.toLowerCase().includes(query);\n if (!matchesName && !matchesDescription) return false;\n }\n return true;\n });\n }, [skills, searchQuery, activeCategory]);\n\n const clearFilters = () => {\n setSearchQuery('');\n setActiveCategory(null);\n };\n\n // No skills installed at all\n if (skills.length === 0) {\n return (\n <div className=\"flex flex-col gap-6 p-6\">\n <PageHeader title=\"Skills\" description=\"Claude Code skills available to this project\" />\n <AutoInjectedSkillsSection config={injectionConfig} discoveredSkills={skills} />\n <Separator />\n <EmptyState\n icon={<Puzzle className=\"size-10\" />}\n title=\"No skills found\"\n description=\"No Claude Code skills are installed. Add skills to .claude/skills/ to get started.\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-6 p-6\">\n <PageHeader title=\"Skills\" description=\"Claude Code skills available to this project\" />\n\n {/* Feature Skills */}\n <AutoInjectedSkillsSection config={injectionConfig} discoveredSkills={skills} />\n <Separator />\n\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2\" />\n <Input\n placeholder=\"Search skills...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"ps-9\"\n />\n </div>\n\n {/* Category Filter */}\n <CategoryFilter\n activeCategory={activeCategory}\n onCategoryChange={setActiveCategory}\n counts={categoryCounts}\n />\n\n {/* Skill List or Empty Filter State */}\n {filteredSkills.length > 0 ? (\n <SkillList skills={filteredSkills} onSkillSelect={setSelectedSkill} />\n ) : (\n <EmptyState\n icon={<Search className=\"size-10\" />}\n title=\"No matching skills\"\n description=\"No skills match your current search and filter criteria.\"\n action={\n <Button variant=\"outline\" onClick={clearFilters}>\n Clear filters\n </Button>\n }\n />\n )}\n\n {/* Skill Detail Drawer */}\n <SkillDetailDrawer skill={selectedSkill} onClose={() => setSelectedSkill(null)} />\n </div>\n );\n}\n","import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Badge } from '@/components/ui/badge';\nimport type { SkillData } from '@/lib/skills';\nimport { FolderOpen } from 'lucide-react';\n\nexport interface SkillCardProps {\n skill: SkillData;\n onSelect: (skill: SkillData) => void;\n}\n\nexport function SkillCard({ skill, onSelect }: SkillCardProps) {\n return (\n <Card\n className=\"hover:border-primary/50 cursor-pointer transition-colors\"\n role=\"button\"\n tabIndex={0}\n onClick={() => onSelect(skill)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(skill);\n }\n }}\n data-testid={`skill-card-${skill.name}`}\n >\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base\">{skill.displayName}</CardTitle>\n <p className=\"text-muted-foreground font-mono text-xs\">{skill.name}</p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-muted-foreground line-clamp-2 text-sm\">{skill.description}</p>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge variant={skill.source === 'project' ? 'secondary' : 'outline'}>\n {skill.source === 'project' ? 'Project' : 'Global'}\n </Badge>\n {skill.context ? <Badge variant=\"outline\">{skill.context}</Badge> : null}\n {skill.allowedTools ? <Badge variant=\"outline\">Tools</Badge> : null}\n {skill.resources.length > 0 ? (\n <span className=\"text-muted-foreground inline-flex items-center gap-1 text-xs\">\n <FolderOpen className=\"size-3\" />\n {skill.resources.length} {skill.resources.length === 1 ? 'resource' : 'resources'}\n </span>\n ) : null}\n </div>\n </CardContent>\n </Card>\n );\n}\n","import { SkillCard } from './skill-card';\nimport type { SkillCategory, SkillData } from '@/lib/skills';\n\nconst CATEGORY_ORDER: SkillCategory[] = ['Workflow', 'Code Generation', 'Analysis', 'Reference'];\n\nexport interface SkillListProps {\n skills: SkillData[];\n onSkillSelect: (skill: SkillData) => void;\n}\n\nfunction groupByCategory(skills: SkillData[]): Map<SkillCategory, SkillData[]> {\n const groups = new Map<SkillCategory, SkillData[]>();\n for (const skill of skills) {\n const group = groups.get(skill.category) ?? [];\n group.push(skill);\n groups.set(skill.category, group);\n }\n return groups;\n}\n\nexport function SkillList({ skills, onSkillSelect }: SkillListProps) {\n const groups = groupByCategory(skills);\n\n return (\n <div className=\"space-y-8\">\n {CATEGORY_ORDER.map((category) => {\n const categorySkills = groups.get(category);\n if (!categorySkills || categorySkills.length === 0) return null;\n\n return (\n <section key={category}>\n <h2 className=\"mb-4 text-lg font-semibold\">\n {category}{' '}\n <span className=\"text-muted-foreground text-sm font-normal\">\n ({categorySkills.length})\n </span>\n </h2>\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {categorySkills.map((skill) => (\n <SkillCard key={skill.name} skill={skill} onSelect={onSkillSelect} />\n ))}\n </div>\n </section>\n );\n })}\n </div>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport type { SkillCategory } from '@/lib/skills';\n\nconst CATEGORIES: { label: string; value: SkillCategory | null }[] = [\n { label: 'All', value: null },\n { label: 'Workflow', value: 'Workflow' },\n { label: 'Code Generation', value: 'Code Generation' },\n { label: 'Analysis', value: 'Analysis' },\n { label: 'Reference', value: 'Reference' },\n];\n\nexport interface CategoryFilterProps {\n activeCategory: SkillCategory | null;\n onCategoryChange: (category: SkillCategory | null) => void;\n counts?: Record<SkillCategory, number>;\n}\n\nexport function CategoryFilter({ activeCategory, onCategoryChange, counts }: CategoryFilterProps) {\n return (\n <div className=\"flex flex-wrap gap-2\" role=\"group\" aria-label=\"Filter by category\">\n {CATEGORIES.map(({ label, value }) => (\n <Button\n key={label}\n variant={activeCategory === value ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => onCategoryChange(value)}\n >\n {label}\n {counts && value ? (\n <span className=\"ms-1 text-xs opacity-70\">({counts[value]})</span>\n ) : null}\n </Button>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { Plus, X } from 'lucide-react';\nimport { toast } from 'sonner';\nimport type { SkillInjectionConfig, SkillSource } from '@shepai/core/domain/generated/output';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { removeInjectedSkill } from '@/app/actions/remove-injected-skill';\nimport { AddSkillDialog } from './add-skill-dialog';\nimport type { SkillData } from '@/lib/skills';\n\nexport interface AutoInjectedSkillsSectionProps {\n config: SkillInjectionConfig;\n discoveredSkills: SkillData[];\n}\n\nexport function AutoInjectedSkillsSection({\n config,\n discoveredSkills,\n}: AutoInjectedSkillsSectionProps) {\n const router = useRouter();\n const [addDialogOpen, setAddDialogOpen] = useState(false);\n const [removingSkill, setRemovingSkill] = useState<string | null>(null);\n\n const skillDescriptions = useMemo(() => {\n const map = new Map<string, string>();\n for (const s of discoveredSkills) {\n map.set(s.name, s.description);\n }\n return map;\n }, [discoveredSkills]);\n\n const handleRemove = async (skillName: string) => {\n setRemovingSkill(skillName);\n const result = await removeInjectedSkill(skillName);\n setRemovingSkill(null);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to remove skill');\n return;\n }\n toast.success(`Removed \"${skillName}\" from feature skills`);\n router.refresh();\n };\n\n const handleAdded = () => {\n setAddDialogOpen(false);\n router.refresh();\n };\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div>\n <h2 className=\"text-base font-semibold\">Feature Skills</h2>\n <p className=\"text-muted-foreground text-sm\">\n Curated skills included in new feature worktrees to guide the agent\n </p>\n </div>\n {config.skills.length > 0 ? (\n <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-3\">\n {config.skills.map((skill) => (\n <InjectedSkillCard\n key={skill.name}\n skill={skill}\n description={skillDescriptions.get(skill.name)}\n onRemove={() => handleRemove(skill.name)}\n isRemoving={removingSkill === skill.name}\n />\n ))}\n </div>\n ) : (\n <p className=\"text-muted-foreground text-sm\">\n No skills configured. Add skills to guide the agent when working on new features.\n </p>\n )}\n <div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setAddDialogOpen(true)}\n data-testid=\"add-injected-skill-button\"\n >\n <Plus className=\"mr-1.5 size-4\" />\n Add Skill\n </Button>\n </div>\n <AddSkillDialog\n open={addDialogOpen}\n onOpenChange={setAddDialogOpen}\n onAdded={handleAdded}\n discoveredSkills={discoveredSkills}\n existingSkillNames={config.skills.map((s) => s.name)}\n />\n </div>\n );\n}\n\nfunction InjectedSkillCard({\n skill,\n description,\n onRemove,\n isRemoving,\n}: {\n skill: SkillSource;\n description?: string;\n onRemove: () => void;\n isRemoving: boolean;\n}) {\n return (\n <Card data-testid={`injected-skill-${skill.name}`}>\n <CardHeader className=\"flex flex-row items-start justify-between gap-2 pb-2\">\n <div className=\"min-w-0\">\n <CardTitle className=\"truncate text-sm\">{skill.name}</CardTitle>\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"shrink-0\"\n onClick={onRemove}\n disabled={isRemoving}\n aria-label={`Remove ${skill.name}`}\n data-testid={`remove-injected-skill-${skill.name}`}\n >\n <X className=\"size-4\" />\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-2 pt-0\">\n {description ? (\n <p className=\"text-muted-foreground line-clamp-2 text-xs\">{description}</p>\n ) : null}\n <div className=\"flex items-center gap-1.5\">\n <Badge variant={skill.type === 'local' ? 'secondary' : 'outline'} className=\"text-xs\">\n {skill.type === 'local' ? 'Local' : 'Remote'}\n </Badge>\n <span className=\"text-muted-foreground max-w-37.5 truncate text-xs\">{skill.source}</span>\n </div>\n </CardContent>\n </Card>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4059784c93ef7c462fe0cfbbd55f2ed5ac8e3a8f78\":\"removeInjectedSkill\"},\"src/presentation/web/app/actions/remove-injected-skill.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4059784c93ef7c462fe0cfbbd55f2ed5ac8e3a8f78\",callServer,void 0,findSourceMapURL,\"removeInjectedSkill\");export{$$RSC_SERVER_ACTION_0 as removeInjectedSkill};","'use client';\n\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport type { SkillSourceType } from '@shepai/core/domain/generated/output';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { addInjectedSkill } from '@/app/actions/add-injected-skill';\nimport type { SkillData } from '@/lib/skills';\n\nexport interface AddSkillDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onAdded: () => void;\n discoveredSkills: SkillData[];\n existingSkillNames: string[];\n}\n\nexport function AddSkillDialog({\n open,\n onOpenChange,\n onAdded,\n discoveredSkills,\n existingSkillNames,\n}: AddSkillDialogProps) {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [remoteName, setRemoteName] = useState('');\n const [remoteSource, setRemoteSource] = useState('');\n const [remoteSkillName, setRemoteSkillName] = useState('');\n\n const availableSkills = discoveredSkills.filter((s) => !existingSkillNames.includes(s.name));\n\n const handleAddLocal = async (skill: SkillData) => {\n setIsSubmitting(true);\n const result = await addInjectedSkill({\n name: skill.name,\n type: 'local' as SkillSourceType,\n source: `.claude/skills/${skill.name}`,\n });\n setIsSubmitting(false);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to add skill');\n return;\n }\n toast.success(`Added \"${skill.name}\" to feature skills`);\n onAdded();\n };\n\n const handleAddRemote = async () => {\n if (!remoteName.trim() || !remoteSource.trim()) {\n toast.error('Name and source are required');\n return;\n }\n setIsSubmitting(true);\n const result = await addInjectedSkill({\n name: remoteName.trim(),\n type: 'remote' as SkillSourceType,\n source: remoteSource.trim(),\n ...(remoteSkillName.trim() && { remoteSkillName: remoteSkillName.trim() }),\n });\n setIsSubmitting(false);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to add skill');\n return;\n }\n toast.success(`Added \"${remoteName.trim()}\" to feature skills`);\n setRemoteName('');\n setRemoteSource('');\n setRemoteSkillName('');\n onAdded();\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"add-skill-dialog\">\n <DialogHeader>\n <DialogTitle>Add Skill to Features</DialogTitle>\n </DialogHeader>\n <Tabs defaultValue=\"local\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"local\" className=\"flex-1\">\n Local\n </TabsTrigger>\n <TabsTrigger value=\"remote\" className=\"flex-1\">\n Remote\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"local\" className=\"mt-4\">\n {availableSkills.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">\n All discovered skills are already configured.\n </p>\n ) : (\n <div className=\"flex max-h-60 flex-col gap-2 overflow-y-auto\">\n {availableSkills.map((skill) => (\n <button\n key={skill.name}\n type=\"button\"\n className=\"hover:bg-accent flex flex-col gap-0.5 rounded-md border p-3 text-left transition-colors\"\n onClick={() => handleAddLocal(skill)}\n disabled={isSubmitting}\n data-testid={`add-local-skill-${skill.name}`}\n >\n <span className=\"text-sm font-medium\">{skill.displayName}</span>\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {skill.description}\n </span>\n </button>\n ))}\n </div>\n )}\n </TabsContent>\n <TabsContent value=\"remote\" className=\"mt-4\">\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"remote-name\">Name</Label>\n <Input\n id=\"remote-name\"\n placeholder=\"e.g. remotion-best-practices\"\n value={remoteName}\n onChange={(e) => setRemoteName(e.target.value)}\n data-testid=\"remote-skill-name\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"remote-source\">Source (npm package or URL)</Label>\n <Input\n id=\"remote-source\"\n placeholder=\"e.g. @anthropic/remotion-skills\"\n value={remoteSource}\n onChange={(e) => setRemoteSource(e.target.value)}\n data-testid=\"remote-skill-source\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"remote-skill-name\">Skill Name (optional)</Label>\n <Input\n id=\"remote-skill-name\"\n placeholder=\"e.g. remotion-best-practices\"\n value={remoteSkillName}\n onChange={(e) => setRemoteSkillName(e.target.value)}\n data-testid=\"remote-skill-skill-name\"\n />\n </div>\n <DialogFooter>\n <Button\n onClick={handleAddRemote}\n disabled={isSubmitting || !remoteName.trim() || !remoteSource.trim()}\n data-testid=\"add-remote-skill-submit\"\n >\n Add Remote Skill\n </Button>\n </DialogFooter>\n </div>\n </TabsContent>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40d08fce9c3dd5534cad4c5c71c88526048334dc49\":\"addInjectedSkill\"},\"src/presentation/web/app/actions/add-injected-skill.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d08fce9c3dd5534cad4c5c71c88526048334dc49\",callServer,void 0,findSourceMapURL,\"addInjectedSkill\");export{$$RSC_SERVER_ACTION_0 as addInjectedSkill};"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/components/features/skills/skill-detail-drawer.tsx","../../../../../../../src/presentation/web/components/features/skills/skills-page-client.tsx","../../../../../../../src/presentation/web/components/features/skills/skill-card.tsx","../../../../../../../src/presentation/web/components/features/skills/skill-list.tsx","../../../../../../../src/presentation/web/components/features/skills/category-filter.tsx","../../../../../../../src/presentation/web/components/features/skills/auto-injected-skills-section.tsx","../../../../../../../src/presentation/web/app/actions/data%3A7e0cef%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/skills/add-skill-dialog.tsx","../../../../../../../src/presentation/web/app/actions/data%3A07344f%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Badge } from '@/components/ui/badge';\nimport { Separator } from '@/components/ui/separator';\nimport { FolderOpen } from 'lucide-react';\nimport type { SkillData } from '@/lib/skills';\n\nexport interface SkillDetailDrawerProps {\n skill: SkillData | null;\n onClose: () => void;\n}\n\nexport function SkillDetailDrawer({ skill, onClose }: SkillDetailDrawerProps) {\n return (\n <BaseDrawer\n open={skill !== null}\n onClose={onClose}\n size=\"sm\"\n modal\n data-testid=\"skill-detail-drawer\"\n header={\n skill ? (\n <>\n <DrawerTitle>{skill.displayName}</DrawerTitle>\n <DrawerDescription>{skill.name}</DrawerDescription>\n </>\n ) : undefined\n }\n >\n {skill ? (\n <div className=\"px-4 pb-4\">\n {/* Description */}\n <p className=\"text-muted-foreground text-sm\">{skill.description}</p>\n\n {/* Badges */}\n <div className=\"mt-4 flex flex-wrap items-center gap-1.5\">\n <Badge variant={skill.source === 'project' ? 'secondary' : 'outline'}>\n {skill.source === 'project' ? 'Project' : 'Global'}\n </Badge>\n <Badge variant=\"outline\">{skill.category}</Badge>\n {skill.context ? <Badge variant=\"outline\">{skill.context}</Badge> : null}\n </div>\n\n {/* Allowed Tools */}\n {skill.allowedTools ? (\n <>\n <Separator className=\"my-4\" />\n <div>\n <h3 className=\"text-sm font-semibold\">Allowed Tools</h3>\n <p className=\"text-muted-foreground mt-1 text-sm\">{skill.allowedTools}</p>\n </div>\n </>\n ) : null}\n\n {/* Resources */}\n {skill.resources.length > 0 ? (\n <>\n <Separator className=\"my-4\" />\n <div>\n <h3 className=\"text-sm font-semibold\">Resources</h3>\n <ul className=\"mt-2 space-y-1.5\">\n {skill.resources.map((resource) => (\n <li\n key={resource.name}\n className=\"text-muted-foreground flex items-center gap-2 text-sm\"\n >\n <FolderOpen className=\"size-3.5 shrink-0\" />\n <span>\n {resource.name}/ — {resource.fileCount}{' '}\n {resource.fileCount === 1 ? 'file' : 'files'}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </>\n ) : null}\n\n {/* Body */}\n {skill.body ? (\n <>\n <Separator className=\"my-4\" />\n <pre className=\"text-muted-foreground text-sm leading-relaxed whitespace-pre-wrap\">\n {skill.body}\n </pre>\n </>\n ) : null}\n </div>\n ) : null}\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { Search, Puzzle } from 'lucide-react';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { PageHeader } from '@/components/common/page-header';\nimport { EmptyState } from '@/components/common/empty-state';\nimport { SkillList } from './skill-list';\nimport { CategoryFilter } from './category-filter';\nimport { SkillDetailDrawer } from './skill-detail-drawer';\nimport type { SkillInjectionConfig } from '@shepai/core/domain/generated/output';\nimport { Separator } from '@/components/ui/separator';\nimport { AutoInjectedSkillsSection } from './auto-injected-skills-section';\nimport type { SkillCategory, SkillData } from '@/lib/skills';\n\nexport interface SkillsPageClientProps {\n skills: SkillData[];\n injectionConfig: SkillInjectionConfig;\n}\n\nfunction computeCategoryCounts(skills: SkillData[]): Record<SkillCategory, number> {\n const counts: Record<SkillCategory, number> = {\n Workflow: 0,\n 'Code Generation': 0,\n Analysis: 0,\n Reference: 0,\n };\n for (const skill of skills) {\n counts[skill.category]++;\n }\n return counts;\n}\n\nexport function SkillsPageClient({ skills, injectionConfig }: SkillsPageClientProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [activeCategory, setActiveCategory] = useState<SkillCategory | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<SkillData | null>(null);\n\n const categoryCounts = useMemo(() => computeCategoryCounts(skills), [skills]);\n\n const filteredSkills = useMemo(() => {\n const query = searchQuery.toLowerCase();\n return skills.filter((skill) => {\n if (activeCategory && skill.category !== activeCategory) return false;\n if (query) {\n const matchesName = skill.name.toLowerCase().includes(query);\n const matchesDescription = skill.description.toLowerCase().includes(query);\n if (!matchesName && !matchesDescription) return false;\n }\n return true;\n });\n }, [skills, searchQuery, activeCategory]);\n\n const clearFilters = () => {\n setSearchQuery('');\n setActiveCategory(null);\n };\n\n // No skills installed at all\n if (skills.length === 0) {\n return (\n <div className=\"flex flex-col gap-6 p-6\">\n <PageHeader title=\"Skills\" description=\"Claude Code skills available to this project\" />\n <AutoInjectedSkillsSection config={injectionConfig} discoveredSkills={skills} />\n <Separator />\n <EmptyState\n icon={<Puzzle className=\"size-10\" />}\n title=\"No skills found\"\n description=\"No Claude Code skills are installed. Add skills to .claude/skills/ to get started.\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-6 p-6\">\n <PageHeader title=\"Skills\" description=\"Claude Code skills available to this project\" />\n\n {/* Feature Skills */}\n <AutoInjectedSkillsSection config={injectionConfig} discoveredSkills={skills} />\n <Separator />\n\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2\" />\n <Input\n placeholder=\"Search skills...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"ps-9\"\n />\n </div>\n\n {/* Category Filter */}\n <CategoryFilter\n activeCategory={activeCategory}\n onCategoryChange={setActiveCategory}\n counts={categoryCounts}\n />\n\n {/* Skill List or Empty Filter State */}\n {filteredSkills.length > 0 ? (\n <SkillList skills={filteredSkills} onSkillSelect={setSelectedSkill} />\n ) : (\n <EmptyState\n icon={<Search className=\"size-10\" />}\n title=\"No matching skills\"\n description=\"No skills match your current search and filter criteria.\"\n action={\n <Button variant=\"outline\" onClick={clearFilters}>\n Clear filters\n </Button>\n }\n />\n )}\n\n {/* Skill Detail Drawer */}\n <SkillDetailDrawer skill={selectedSkill} onClose={() => setSelectedSkill(null)} />\n </div>\n );\n}\n","import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Badge } from '@/components/ui/badge';\nimport type { SkillData } from '@/lib/skills';\nimport { FolderOpen } from 'lucide-react';\n\nexport interface SkillCardProps {\n skill: SkillData;\n onSelect: (skill: SkillData) => void;\n}\n\nexport function SkillCard({ skill, onSelect }: SkillCardProps) {\n return (\n <Card\n className=\"hover:border-primary/50 cursor-pointer transition-colors\"\n role=\"button\"\n tabIndex={0}\n onClick={() => onSelect(skill)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(skill);\n }\n }}\n data-testid={`skill-card-${skill.name}`}\n >\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base\">{skill.displayName}</CardTitle>\n <p className=\"text-muted-foreground font-mono text-xs\">{skill.name}</p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-muted-foreground line-clamp-2 text-sm\">{skill.description}</p>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge variant={skill.source === 'project' ? 'secondary' : 'outline'}>\n {skill.source === 'project' ? 'Project' : 'Global'}\n </Badge>\n {skill.context ? <Badge variant=\"outline\">{skill.context}</Badge> : null}\n {skill.allowedTools ? <Badge variant=\"outline\">Tools</Badge> : null}\n {skill.resources.length > 0 ? (\n <span className=\"text-muted-foreground inline-flex items-center gap-1 text-xs\">\n <FolderOpen className=\"size-3\" />\n {skill.resources.length} {skill.resources.length === 1 ? 'resource' : 'resources'}\n </span>\n ) : null}\n </div>\n </CardContent>\n </Card>\n );\n}\n","import { SkillCard } from './skill-card';\nimport type { SkillCategory, SkillData } from '@/lib/skills';\n\nconst CATEGORY_ORDER: SkillCategory[] = ['Workflow', 'Code Generation', 'Analysis', 'Reference'];\n\nexport interface SkillListProps {\n skills: SkillData[];\n onSkillSelect: (skill: SkillData) => void;\n}\n\nfunction groupByCategory(skills: SkillData[]): Map<SkillCategory, SkillData[]> {\n const groups = new Map<SkillCategory, SkillData[]>();\n for (const skill of skills) {\n const group = groups.get(skill.category) ?? [];\n group.push(skill);\n groups.set(skill.category, group);\n }\n return groups;\n}\n\nexport function SkillList({ skills, onSkillSelect }: SkillListProps) {\n const groups = groupByCategory(skills);\n\n return (\n <div className=\"space-y-8\">\n {CATEGORY_ORDER.map((category) => {\n const categorySkills = groups.get(category);\n if (!categorySkills || categorySkills.length === 0) return null;\n\n return (\n <section key={category}>\n <h2 className=\"mb-4 text-lg font-semibold\">\n {category}{' '}\n <span className=\"text-muted-foreground text-sm font-normal\">\n ({categorySkills.length})\n </span>\n </h2>\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {categorySkills.map((skill) => (\n <SkillCard key={skill.name} skill={skill} onSelect={onSkillSelect} />\n ))}\n </div>\n </section>\n );\n })}\n </div>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport type { SkillCategory } from '@/lib/skills';\n\nconst CATEGORIES: { label: string; value: SkillCategory | null }[] = [\n { label: 'All', value: null },\n { label: 'Workflow', value: 'Workflow' },\n { label: 'Code Generation', value: 'Code Generation' },\n { label: 'Analysis', value: 'Analysis' },\n { label: 'Reference', value: 'Reference' },\n];\n\nexport interface CategoryFilterProps {\n activeCategory: SkillCategory | null;\n onCategoryChange: (category: SkillCategory | null) => void;\n counts?: Record<SkillCategory, number>;\n}\n\nexport function CategoryFilter({ activeCategory, onCategoryChange, counts }: CategoryFilterProps) {\n return (\n <div className=\"flex flex-wrap gap-2\" role=\"group\" aria-label=\"Filter by category\">\n {CATEGORIES.map(({ label, value }) => (\n <Button\n key={label}\n variant={activeCategory === value ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => onCategoryChange(value)}\n >\n {label}\n {counts && value ? (\n <span className=\"ms-1 text-xs opacity-70\">({counts[value]})</span>\n ) : null}\n </Button>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { Plus, X } from 'lucide-react';\nimport { toast } from 'sonner';\nimport type { SkillInjectionConfig, SkillSource } from '@shepai/core/domain/generated/output';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { removeInjectedSkill } from '@/app/actions/remove-injected-skill';\nimport { AddSkillDialog } from './add-skill-dialog';\nimport type { SkillData } from '@/lib/skills';\n\nexport interface AutoInjectedSkillsSectionProps {\n config: SkillInjectionConfig;\n discoveredSkills: SkillData[];\n}\n\nexport function AutoInjectedSkillsSection({\n config,\n discoveredSkills,\n}: AutoInjectedSkillsSectionProps) {\n const router = useRouter();\n const [addDialogOpen, setAddDialogOpen] = useState(false);\n const [removingSkill, setRemovingSkill] = useState<string | null>(null);\n\n const skillDescriptions = useMemo(() => {\n const map = new Map<string, string>();\n for (const s of discoveredSkills) {\n map.set(s.name, s.description);\n }\n return map;\n }, [discoveredSkills]);\n\n const handleRemove = async (skillName: string) => {\n setRemovingSkill(skillName);\n const result = await removeInjectedSkill(skillName);\n setRemovingSkill(null);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to remove skill');\n return;\n }\n toast.success(`Removed \"${skillName}\" from feature skills`);\n router.refresh();\n };\n\n const handleAdded = () => {\n setAddDialogOpen(false);\n router.refresh();\n };\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div>\n <h2 className=\"text-base font-semibold\">Feature Skills</h2>\n <p className=\"text-muted-foreground text-sm\">\n Curated skills included in new feature worktrees to guide the agent\n </p>\n </div>\n {config.skills.length > 0 ? (\n <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-3\">\n {config.skills.map((skill) => (\n <InjectedSkillCard\n key={skill.name}\n skill={skill}\n description={skillDescriptions.get(skill.name)}\n onRemove={() => handleRemove(skill.name)}\n isRemoving={removingSkill === skill.name}\n />\n ))}\n </div>\n ) : (\n <p className=\"text-muted-foreground text-sm\">\n No skills configured. Add skills to guide the agent when working on new features.\n </p>\n )}\n <div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setAddDialogOpen(true)}\n data-testid=\"add-injected-skill-button\"\n >\n <Plus className=\"mr-1.5 size-4\" />\n Add Skill\n </Button>\n </div>\n <AddSkillDialog\n open={addDialogOpen}\n onOpenChange={setAddDialogOpen}\n onAdded={handleAdded}\n discoveredSkills={discoveredSkills}\n existingSkillNames={config.skills.map((s) => s.name)}\n />\n </div>\n );\n}\n\nfunction InjectedSkillCard({\n skill,\n description,\n onRemove,\n isRemoving,\n}: {\n skill: SkillSource;\n description?: string;\n onRemove: () => void;\n isRemoving: boolean;\n}) {\n return (\n <Card data-testid={`injected-skill-${skill.name}`}>\n <CardHeader className=\"flex flex-row items-start justify-between gap-2 pb-2\">\n <div className=\"min-w-0\">\n <CardTitle className=\"truncate text-sm\">{skill.name}</CardTitle>\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"shrink-0\"\n onClick={onRemove}\n disabled={isRemoving}\n aria-label={`Remove ${skill.name}`}\n data-testid={`remove-injected-skill-${skill.name}`}\n >\n <X className=\"size-4\" />\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-2 pt-0\">\n {description ? (\n <p className=\"text-muted-foreground line-clamp-2 text-xs\">{description}</p>\n ) : null}\n <div className=\"flex items-center gap-1.5\">\n <Badge variant={skill.type === 'local' ? 'secondary' : 'outline'} className=\"text-xs\">\n {skill.type === 'local' ? 'Local' : 'Remote'}\n </Badge>\n <span className=\"text-muted-foreground max-w-37.5 truncate text-xs\">{skill.source}</span>\n </div>\n </CardContent>\n </Card>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40a8bab6ef46eb495ffbab98913858a033a0e81577\":\"removeInjectedSkill\"},\"src/presentation/web/app/actions/remove-injected-skill.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40a8bab6ef46eb495ffbab98913858a033a0e81577\",callServer,void 0,findSourceMapURL,\"removeInjectedSkill\");export{$$RSC_SERVER_ACTION_0 as removeInjectedSkill};","'use client';\n\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport type { SkillSourceType } from '@shepai/core/domain/generated/output';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { addInjectedSkill } from '@/app/actions/add-injected-skill';\nimport type { SkillData } from '@/lib/skills';\n\nexport interface AddSkillDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onAdded: () => void;\n discoveredSkills: SkillData[];\n existingSkillNames: string[];\n}\n\nexport function AddSkillDialog({\n open,\n onOpenChange,\n onAdded,\n discoveredSkills,\n existingSkillNames,\n}: AddSkillDialogProps) {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [remoteName, setRemoteName] = useState('');\n const [remoteSource, setRemoteSource] = useState('');\n const [remoteSkillName, setRemoteSkillName] = useState('');\n\n const availableSkills = discoveredSkills.filter((s) => !existingSkillNames.includes(s.name));\n\n const handleAddLocal = async (skill: SkillData) => {\n setIsSubmitting(true);\n const result = await addInjectedSkill({\n name: skill.name,\n type: 'local' as SkillSourceType,\n source: `.claude/skills/${skill.name}`,\n });\n setIsSubmitting(false);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to add skill');\n return;\n }\n toast.success(`Added \"${skill.name}\" to feature skills`);\n onAdded();\n };\n\n const handleAddRemote = async () => {\n if (!remoteName.trim() || !remoteSource.trim()) {\n toast.error('Name and source are required');\n return;\n }\n setIsSubmitting(true);\n const result = await addInjectedSkill({\n name: remoteName.trim(),\n type: 'remote' as SkillSourceType,\n source: remoteSource.trim(),\n ...(remoteSkillName.trim() && { remoteSkillName: remoteSkillName.trim() }),\n });\n setIsSubmitting(false);\n if (!result.success) {\n toast.error(result.error ?? 'Failed to add skill');\n return;\n }\n toast.success(`Added \"${remoteName.trim()}\" to feature skills`);\n setRemoteName('');\n setRemoteSource('');\n setRemoteSkillName('');\n onAdded();\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-md\" data-testid=\"add-skill-dialog\">\n <DialogHeader>\n <DialogTitle>Add Skill to Features</DialogTitle>\n </DialogHeader>\n <Tabs defaultValue=\"local\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"local\" className=\"flex-1\">\n Local\n </TabsTrigger>\n <TabsTrigger value=\"remote\" className=\"flex-1\">\n Remote\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"local\" className=\"mt-4\">\n {availableSkills.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">\n All discovered skills are already configured.\n </p>\n ) : (\n <div className=\"flex max-h-60 flex-col gap-2 overflow-y-auto\">\n {availableSkills.map((skill) => (\n <button\n key={skill.name}\n type=\"button\"\n className=\"hover:bg-accent flex flex-col gap-0.5 rounded-md border p-3 text-left transition-colors\"\n onClick={() => handleAddLocal(skill)}\n disabled={isSubmitting}\n data-testid={`add-local-skill-${skill.name}`}\n >\n <span className=\"text-sm font-medium\">{skill.displayName}</span>\n <span className=\"text-muted-foreground line-clamp-1 text-xs\">\n {skill.description}\n </span>\n </button>\n ))}\n </div>\n )}\n </TabsContent>\n <TabsContent value=\"remote\" className=\"mt-4\">\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"remote-name\">Name</Label>\n <Input\n id=\"remote-name\"\n placeholder=\"e.g. remotion-best-practices\"\n value={remoteName}\n onChange={(e) => setRemoteName(e.target.value)}\n data-testid=\"remote-skill-name\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"remote-source\">Source (npm package or URL)</Label>\n <Input\n id=\"remote-source\"\n placeholder=\"e.g. @anthropic/remotion-skills\"\n value={remoteSource}\n onChange={(e) => setRemoteSource(e.target.value)}\n data-testid=\"remote-skill-source\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"remote-skill-name\">Skill Name (optional)</Label>\n <Input\n id=\"remote-skill-name\"\n placeholder=\"e.g. remotion-best-practices\"\n value={remoteSkillName}\n onChange={(e) => setRemoteSkillName(e.target.value)}\n data-testid=\"remote-skill-skill-name\"\n />\n </div>\n <DialogFooter>\n <Button\n onClick={handleAddRemote}\n disabled={isSubmitting || !remoteName.trim() || !remoteSource.trim()}\n data-testid=\"add-remote-skill-submit\"\n >\n Add Remote Skill\n </Button>\n </DialogFooter>\n </div>\n </TabsContent>\n </Tabs>\n </DialogContent>\n </Dialog>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"406e32eaf907ca16386916d102319adca9204d0e04\":\"addInjectedSkill\"},\"src/presentation/web/app/actions/add-injected-skill.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"406e32eaf907ca16386916d102319adca9204d0e04\",callServer,void 0,findSourceMapURL,\"addInjectedSkill\");export{$$RSC_SERVER_ACTION_0 as addInjectedSkill};"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[92163,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(17300),e=a.i(41305),f=a.i(85536),g=a.i(88064),h=a.i(87926),i=a.i(9955);let j=(0,a.i(25700).default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var k=a.i(63698),l=a.i(53170),m=a.i(56926),n=a.i(4019),o=a.i(67075),p=a.i(21084),q=a.i(18948),r=a.i(82934),s=a.i(98410),t=a.i(72016),u=a.i(71238),v=a.i(24255);let w={linux:"Linux",darwin:"macOS",win32:"Windows"},x={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function y({status:a}){return"available"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400",children:[(0,b.jsx)(t.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===a?(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400",children:"Error"}):(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400",children:"Missing"})}function z({tool:a,open:d,onClose:e,onRefresh:f,autoStart:k}){let[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),{logs:r,status:z,startInstall:A}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)("idle"),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useCallback)(()=>{i.current&&(i.current.close(),i.current=null)},[]);return(0,c.useEffect)(()=>j,[j]),{logs:b,status:e,result:g,startInstall:(0,c.useCallback)(()=>{j(),d([]),h(null),f("streaming");let b=new EventSource(`/api/tools/${a}/install/stream`);i.current=b,b.onmessage=a=>{d(b=>[...b,a.data])},b.addEventListener("done",a=>{let b=JSON.parse(a.data);h(b),f("error"===b.status?"error":"done"),j()}),b.onerror=()=>{f("error"),j()}},[a,j])}}(a.id),B=(0,c.useRef)(null),C=(0,c.useRef)(!0),D=(0,c.useRef)(!1),E="available"===a.status.status,F="error"===a.status.status,G=E&&!!a.openDirectory,H=!E&&!F&&a.autoInstall;async function I(){o(!0);try{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})}finally{o(!1)}}(0,c.useEffect)(()=>{d&&k&&H&&"idle"===z&&!D.current&&(D.current=!0,A()),d||(D.current=!1)},[d,k,H,z,A]);let J=(0,c.useCallback)(()=>{let a=B.current;a&&(C.current=a.scrollTop+a.clientHeight>=a.scrollHeight-50)},[]);(0,c.useEffect)(()=>{C.current&&B.current&&(B.current.scrollTop=B.current.scrollHeight)},[r,z]),(0,c.useEffect)(()=>{"done"===z&&f&&f()},[z,f]);let K=(0,b.jsxs)("div",{className:"flex flex-col gap-1.5 pe-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,b.jsx)("h2",{className:"text-base font-bold",children:a.name}),(0,b.jsx)(y,{status:a.status.status})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:a.tags.map(a=>{let c=x[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,b.jsx)(d,{className:"h-3 w-3"}),c.label]},a)})})]});return(0,b.jsx)(v.BaseDrawer,{open:d,onClose:e,size:"md",modal:!0,title:a.name,header:K,"data-testid":"tool-detail-drawer",children:(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),a.author||a.platforms?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[a.author?(0,b.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",a.website?(0,b.jsx)("a",{href:a.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:a.author}):(0,b.jsx)("span",{className:"text-foreground",children:a.author})]}):null,a.platforms&&a.platforms.length>0?(0,b.jsx)("span",{className:"text-muted-foreground",children:a.platforms.map(a=>w[a]??a).join(" · ")}):null]}):null,a.installCommand?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,b.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,b.jsx)("pre",{className:"overflow-x-auto px-3 py-2.5 pe-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap",children:(0,b.jsx)("code",{children:a.installCommand})}),(0,b.jsxs)(q.Button,{variant:"ghost",size:"sm",className:"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100",onClick:function(){a.installCommand&&navigator.clipboard.writeText(a.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":l?"Copied!":"Copy install command",children:[l?(0,b.jsx)(t.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,b.jsx)(s.Copy,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"ms-1 text-[10px]",children:l?"Copied!":"Copy"})]})]})]}):null,(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[H?(0,b.jsxs)(q.Button,{size:"sm",onClick:A,disabled:"streaming"===z,"aria-label":`Install ${a.name}`,className:"cursor-pointer",children:["streaming"===z?(0,b.jsx)(g.Loader2,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(i.Download,{className:"me-1.5 h-3.5 w-3.5"}),"streaming"===z?"Installing...":"Install"]}):null,G?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:()=>void I(),disabled:n,"aria-label":`Launch ${a.name}`,className:"cursor-pointer",children:[n?(0,b.jsx)(g.Loader2,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1.5 h-3.5 w-3.5"}),"Launch"]}):null,a.documentationUrl?(0,b.jsx)(q.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,b.jsxs)("a",{href:a.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,b.jsx)(u.ExternalLink,{className:"ms-1 h-3 w-3"})]})}):null]}),("streaming"===z||"done"===z||"error"===z)&&r.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,b.jsxs)("div",{ref:B,onScroll:J,className:"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100","data-testid":"tool-install-log",children:[r.map((a,c)=>(0,b.jsx)("div",{className:"break-all whitespace-pre-wrap",children:a},c)),"done"===z?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===z?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let A={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function B({tool:a,onRefresh:d,className:e}){let[k,l]=(0,c.useState)(!1),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useTransition)(),w="available"===a.status.status,x="error"===a.status.status,y=w&&!!a.openDirectory;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{"data-testid":"tool-card",onClick:function(){t(!1),l(!0)},className:(0,f.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",e),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:a.name})]}),(0,b.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:a.tags.map(a=>{let c=A[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,b.jsx)(d,{className:"h-2.5 w-2.5"}),c.label]},a)})})]}),(0,b.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:a.summary}),(0,b.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[x&&"error"===a.status.status?(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:a.status.errorMessage,children:[(0,b.jsx)(m.CircleX,{className:"h-3 w-3 shrink-0"}),a.status.errorMessage??"Error"]}):w?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(o.CheckCircle2,{className:"h-3 w-3"}),"Installed"]}):(0,b.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,b.jsx)(n.Circle,{className:"h-3 w-3"}),"Not installed"]}),a.required?(0,b.jsx)(r.TooltipProvider,{children:(0,b.jsxs)(r.Tooltip,{children:[(0,b.jsx)(r.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400",children:"Required"})}),(0,b.jsx)(r.TooltipContent,{side:"top",children:"This tool is required for Shep to function properly"})]})}):null]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:w&&y?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:function(b){b.stopPropagation(),v(async()=>{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})})},disabled:u,"aria-label":`Launch ${a.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[u?(0,b.jsx)(g.Loader2,{className:"me-1 h-3 w-3 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1 h-3 w-3"}),"Launch"]}):w||x?null:(0,b.jsxs)(q.Button,{size:"sm",variant:"default",onClick:function(b){b.stopPropagation(),t(a.autoInstall),l(!0)},"aria-label":`Install ${a.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,b.jsx)(i.Download,{className:"me-1 h-3 w-3"}),"Install"]})})]})]}),(0,b.jsx)(z,{tool:a,open:k,onClose:()=>l(!1),onRefresh:d,autoStart:s})]})}let C={all:()=>!0,ide:a=>a.tags.includes("ide"),"cli-agent":a=>a.tags.includes("cli-agent"),vcs:a=>a.tags.includes("vcs"),terminal:a=>a.tags.includes("terminal")};function D({tools:a,className:g}){let[h,i]=(0,c.useState)(a),[j,k]=(0,c.useState)("all"),l=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/tools");if(a.ok){let b=await a.json();i(b)}}catch{}},[]),m=h.filter(C[j]);return(0,b.jsxs)("div",{"data-testid":"tools-page-client",className:(0,f.cn)("space-y-4",g),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(d.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,b.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[h.filter(a=>"available"===a.status.status).length,"/",h.length," installed"]})]}),(0,b.jsxs)(e.Tabs,{value:j,onValueChange:a=>k(a),"data-testid":"tools-page-tabs",children:[(0,b.jsxs)(e.TabsList,{className:"h-7",children:[(0,b.jsx)(e.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,b.jsx)(e.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,b.jsx)(e.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,b.jsx)(e.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,b.jsx)(e.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,b.jsx)(e.TabsContent,{value:j,className:"mt-3",children:0===m.length?(0,b.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,b.jsx)(d.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,b.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,b.jsx)("div",{"data-testid":"tools-page-grid",className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:m.map(a=>(0,b.jsx)(B,{tool:a,onRefresh:l},a.id))})})]})]})}a.s(["ToolsPageClient",()=>D],92163)}];
1
+ module.exports=[92163,a=>{"use strict";var b=a.i(12656),c=a.i(96960),d=a.i(17300),e=a.i(41305),f=a.i(85536),g=a.i(88064),h=a.i(87926),i=a.i(9955);let j=(0,a.i(25700).default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var k=a.i(63698),l=a.i(53170),m=a.i(56926),n=a.i(4019),o=a.i(67075),p=a.i(21084),q=a.i(18948),r=a.i(82934),s=a.i(98410),t=a.i(72016),u=a.i(71238),v=a.i(24255);let w={linux:"Linux",darwin:"macOS",win32:"Windows"},x={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function y({status:a}){return"available"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400",children:[(0,b.jsx)(t.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===a?(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400",children:"Error"}):(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400",children:"Missing"})}function z({tool:a,open:d,onClose:e,onRefresh:f,autoStart:k}){let[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),{logs:r,status:z,startInstall:A}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)("idle"),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useCallback)(()=>{i.current&&(i.current.close(),i.current=null)},[]);return(0,c.useEffect)(()=>j,[j]),{logs:b,status:e,result:g,startInstall:(0,c.useCallback)(()=>{j(),d([]),h(null),f("streaming");let b=new EventSource(`/api/tools/${a}/install/stream`);i.current=b,b.onmessage=a=>{d(b=>[...b,a.data])},b.addEventListener("done",a=>{let b=JSON.parse(a.data);h(b),f("error"===b.status?"error":"done"),j()}),b.onerror=()=>{f("error"),j()}},[a,j])}}(a.id),B=(0,c.useRef)(null),C=(0,c.useRef)(!0),D=(0,c.useRef)(!1),E="available"===a.status.status,F="error"===a.status.status,G=E&&!!a.openDirectory,H=!E&&!F&&a.autoInstall;async function I(){o(!0);try{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})}finally{o(!1)}}(0,c.useEffect)(()=>{d&&k&&H&&"idle"===z&&!D.current&&(D.current=!0,A()),d||(D.current=!1)},[d,k,H,z,A]);let J=(0,c.useCallback)(()=>{let a=B.current;a&&(C.current=a.scrollTop+a.clientHeight>=a.scrollHeight-50)},[]);(0,c.useEffect)(()=>{C.current&&B.current&&(B.current.scrollTop=B.current.scrollHeight)},[r,z]),(0,c.useEffect)(()=>{"done"===z&&f&&f()},[z,f]);let K=(0,b.jsxs)("div",{className:"flex flex-col gap-1.5 pe-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,b.jsx)("h2",{className:"text-base font-bold",children:a.name}),(0,b.jsx)(y,{status:a.status.status})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:a.tags.map(a=>{let c=x[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,b.jsx)(d,{className:"h-3 w-3"}),c.label]},a)})})]});return(0,b.jsx)(v.BaseDrawer,{open:d,onClose:e,size:"md",modal:!0,title:a.name,header:K,"data-testid":"tool-detail-drawer",children:(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),a.author||a.platforms?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[a.author?(0,b.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",a.website?(0,b.jsx)("a",{href:a.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:a.author}):(0,b.jsx)("span",{className:"text-foreground",children:a.author})]}):null,a.platforms&&a.platforms.length>0?(0,b.jsx)("span",{className:"text-muted-foreground",children:a.platforms.map(a=>w[a]??a).join(" · ")}):null]}):null,a.installCommand?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,b.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,b.jsx)("pre",{className:"overflow-x-auto px-3 py-2.5 pe-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap",children:(0,b.jsx)("code",{children:a.installCommand})}),(0,b.jsxs)(q.Button,{variant:"ghost",size:"sm",className:"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100",onClick:function(){a.installCommand&&navigator.clipboard.writeText(a.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":l?"Copied!":"Copy install command",children:[l?(0,b.jsx)(t.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,b.jsx)(s.Copy,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"ms-1 text-[10px]",children:l?"Copied!":"Copy"})]})]})]}):null,(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[H?(0,b.jsxs)(q.Button,{size:"sm",onClick:A,disabled:"streaming"===z,"aria-label":`Install ${a.name}`,className:"cursor-pointer",children:["streaming"===z?(0,b.jsx)(g.Loader2,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(i.Download,{className:"me-1.5 h-3.5 w-3.5"}),"streaming"===z?"Installing...":"Install"]}):null,G?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:()=>void I(),disabled:n,"aria-label":`Launch ${a.name}`,className:"cursor-pointer",children:[n?(0,b.jsx)(g.Loader2,{className:"me-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1.5 h-3.5 w-3.5"}),"Launch"]}):null,a.documentationUrl?(0,b.jsx)(q.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,b.jsxs)("a",{href:a.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,b.jsx)(u.ExternalLink,{className:"ms-1 h-3 w-3"})]})}):null]}),("streaming"===z||"done"===z||"error"===z)&&r.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,b.jsxs)("div",{ref:B,onScroll:J,className:"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100","data-testid":"tool-install-log",children:[r.map((a,c)=>(0,b.jsx)("div",{className:"break-all whitespace-pre-wrap",children:a},c)),"done"===z?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===z?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let A={ide:{label:"IDE",icon:j},"cli-agent":{label:"CLI Agent",icon:k.Terminal},vcs:{label:"VCS",icon:l.GitBranch},terminal:{label:"Terminal",icon:k.Terminal}};function B({tool:a,onRefresh:d,className:e}){let[k,l]=(0,c.useState)(!1),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useTransition)(),w="available"===a.status.status,x="error"===a.status.status,y=w&&!!a.openDirectory;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{"data-testid":"tool-card",onClick:function(){t(!1),l(!0)},className:(0,f.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",e),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,b.jsx)(p.Package,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:a.name})]}),(0,b.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:a.tags.map(a=>{let c=A[a]??{label:a,icon:j},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,b.jsx)(d,{className:"h-2.5 w-2.5"}),c.label]},a)})})]}),(0,b.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:a.summary}),(0,b.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[x&&"error"===a.status.status?(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:a.status.errorMessage,children:[(0,b.jsx)(m.CircleX,{className:"h-3 w-3 shrink-0"}),a.status.errorMessage??"Error"]}):w?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(o.CheckCircle2,{className:"h-3 w-3"}),"Installed"]}):(0,b.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,b.jsx)(n.Circle,{className:"h-3 w-3"}),"Not installed"]}),a.required?(0,b.jsx)(r.TooltipProvider,{children:(0,b.jsxs)(r.Tooltip,{children:[(0,b.jsx)(r.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400",children:"Required"})}),(0,b.jsx)(r.TooltipContent,{side:"top",children:"This tool is required for Shep to function properly"})]})}):null]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:w&&y?(0,b.jsxs)(q.Button,{size:"sm",variant:"outline",onClick:function(b){b.stopPropagation(),v(async()=>{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})})},disabled:u,"aria-label":`Launch ${a.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[u?(0,b.jsx)(g.Loader2,{className:"me-1 h-3 w-3 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"me-1 h-3 w-3"}),"Launch"]}):w||x?null:(0,b.jsxs)(q.Button,{size:"sm",variant:"default",onClick:function(b){b.stopPropagation(),t(a.autoInstall),l(!0)},"aria-label":`Install ${a.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,b.jsx)(i.Download,{className:"me-1 h-3 w-3"}),"Install"]})})]})]}),(0,b.jsx)(z,{tool:a,open:k,onClose:()=>l(!1),onRefresh:d,autoStart:s})]})}let C={all:()=>!0,ide:a=>a.tags.includes("ide"),"cli-agent":a=>a.tags.includes("cli-agent"),vcs:a=>a.tags.includes("vcs"),terminal:a=>a.tags.includes("terminal")};function D({tools:a,className:g}){let[h,i]=(0,c.useState)(a),[j,k]=(0,c.useState)("all"),l=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/tools");if(a.ok){let b=await a.json();i(b)}}catch{}},[]),m=h.filter(C[j]);return(0,b.jsxs)("div",{"data-testid":"tools-page-client",className:(0,f.cn)("space-y-4",g),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(d.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,b.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[h.filter(a=>"available"===a.status.status).length,"/",h.length," installed"]})]}),(0,b.jsxs)(e.Tabs,{value:j,onValueChange:a=>k(a),"data-testid":"tools-page-tabs",children:[(0,b.jsxs)(e.TabsList,{className:"h-7",children:[(0,b.jsx)(e.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,b.jsx)(e.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,b.jsx)(e.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,b.jsx)(e.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,b.jsx)(e.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,b.jsx)(e.TabsContent,{value:j,className:"mt-3",children:0===m.length?(0,b.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,b.jsx)(d.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,b.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,b.jsx)("div",{"data-testid":"tools-page-grid",className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:m.map(a=>(0,b.jsx)(B,{tool:a,onRefresh:l},a.id))})})]})]})}a.s(["ToolsPageClient",()=>D],92163)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[59175,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(55690),e=a.i(48972),f=a.i(59653),g=a.i(63496),h=a.i(6175),i=a.i(7420),j=a.i(48939),k=a.i(58761),l=a.i(51473),m=a.i(59675),n=a.i(5472),o=a.i(75988),p=a.i(80930),q=a.i(66873),r=a.i(90986),s=a.i(79406),t=a.i(17329),u=a.i(61476),v=a.i(64005),w=a.i(50049),x=a.i(16164),y=a.i(45291),z=[" ","Enter","ArrowUp","ArrowDown"],A=[" ","Enter"],B="Select",[C,D,E]=(0,g.createCollection)(B),[F,G]=(0,i.createContextScope)(B,[E,o.createPopperScope]),H=(0,o.createPopperScope)(),[I,J]=F(B),[K,L]=F(B),M=a=>{let{__scopeSelect:d,children:e,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:k,onValueChange:l,dir:m,name:p,autoComplete:q,disabled:r,required:s,form:u}=a,v=H(d),[w,x]=c.useState(null),[y,z]=c.useState(null),[A,D]=c.useState(!1),E=(0,j.useDirection)(m),[F,G]=(0,t.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:B}),[J,L]=(0,t.useControllableState)({prop:i,defaultProp:k,onChange:l,caller:B}),M=c.useRef(null),N=!w||u||!!w.closest("form"),[O,P]=c.useState(new Set),Q=Array.from(O).map(a=>a.props.value).join(";");return(0,b.jsx)(o.Root,{...v,children:(0,b.jsxs)(I,{required:s,scope:d,trigger:w,onTriggerChange:x,valueNode:y,onValueNodeChange:z,valueNodeHasChildren:A,onValueNodeHasChildrenChange:D,contentId:(0,n.useId)(),value:J,onValueChange:L,open:F,onOpenChange:G,dir:E,triggerPointerDownPosRef:M,disabled:r,children:[(0,b.jsx)(C.Provider,{scope:d,children:(0,b.jsx)(K,{scope:a.__scopeSelect,onNativeOptionAdd:c.useCallback(a=>{P(b=>new Set(b).add(a))},[]),onNativeOptionRemove:c.useCallback(a=>{P(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:e})}),N?(0,b.jsxs)(az,{"aria-hidden":!0,required:s,tabIndex:-1,name:p,autoComplete:q,value:J,onChange:a=>L(a.target.value),disabled:r,form:u,children:[void 0===J?(0,b.jsx)("option",{value:""}):null,Array.from(O)]},Q):null]})})};M.displayName=B;var N="SelectTrigger",O=c.forwardRef((a,d)=>{let{__scopeSelect:e,disabled:g=!1,...i}=a,j=H(e),k=J(N,e),l=k.disabled||g,m=(0,h.useComposedRefs)(d,k.onTriggerChange),n=D(e),p=c.useRef("touch"),[r,s,t]=aB(a=>{let b=n().filter(a=>!a.disabled),c=b.find(a=>a.value===k.value),d=aC(b,a,c);void 0!==d&&k.onValueChange(d.value)}),u=a=>{l||(k.onOpenChange(!0),t()),a&&(k.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,b.jsx)(o.Anchor,{asChild:!0,...j,children:(0,b.jsx)(q.Primitive.button,{type:"button",role:"combobox","aria-controls":k.contentId,"aria-expanded":k.open,"aria-required":k.required,"aria-autocomplete":"none",dir:k.dir,"data-state":k.open?"open":"closed",disabled:l,"data-disabled":l?"":void 0,"data-placeholder":aA(k.value)?"":void 0,...i,ref:m,onClick:(0,f.composeEventHandlers)(i.onClick,a=>{a.currentTarget.focus(),"mouse"!==p.current&&u(a)}),onPointerDown:(0,f.composeEventHandlers)(i.onPointerDown,a=>{p.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(u(a),a.preventDefault())}),onKeyDown:(0,f.composeEventHandlers)(i.onKeyDown,a=>{let b=""!==r.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||s(a.key),(!b||" "!==a.key)&&z.includes(a.key)&&(u(),a.preventDefault())})})})});O.displayName=N;var P="SelectValue",Q=c.forwardRef((a,c)=>{let{__scopeSelect:d,className:e,style:f,children:g,placeholder:i="",...j}=a,k=J(P,d),{onValueNodeHasChildrenChange:l}=k,m=void 0!==g,n=(0,h.useComposedRefs)(c,k.onValueNodeChange);return(0,u.useLayoutEffect)(()=>{l(m)},[l,m]),(0,b.jsx)(q.Primitive.span,{...j,ref:n,style:{pointerEvents:"none"},children:aA(k.value)?(0,b.jsx)(b.Fragment,{children:i}):g})});Q.displayName=P;var R=c.forwardRef((a,c)=>{let{__scopeSelect:d,children:e,...f}=a;return(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...f,ref:c,children:e||"▼"})});R.displayName="SelectIcon";var S=a=>(0,b.jsx)(p.Portal,{asChild:!0,...a});S.displayName="SelectPortal";var T="SelectContent",U=c.forwardRef((a,e)=>{let f=J(T,a.__scopeSelect),[g,h]=c.useState();return((0,u.useLayoutEffect)(()=>{h(new DocumentFragment)},[]),f.open)?(0,b.jsx)(Y,{...a,ref:e}):g?d.createPortal((0,b.jsx)(V,{scope:a.__scopeSelect,children:(0,b.jsx)(C.Slot,{scope:a.__scopeSelect,children:(0,b.jsx)("div",{children:a.children})})}),g):null});U.displayName=T;var[V,W]=F(T),X=(0,r.createSlot)("SelectContent.RemoveScroll"),Y=c.forwardRef((a,d)=>{let{__scopeSelect:e,position:g="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:j,onPointerDownOutside:n,side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z,...A}=a,B=J(T,e),[C,E]=c.useState(null),[F,G]=c.useState(null),H=(0,h.useComposedRefs)(d,a=>E(a)),[I,K]=c.useState(null),[L,M]=c.useState(null),N=D(e),[O,P]=c.useState(!1),Q=c.useRef(!1);c.useEffect(()=>{if(C)return(0,x.hideOthers)(C)},[C]),(0,l.useFocusGuards)();let R=c.useCallback(a=>{let[b,...c]=N().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&F&&(F.scrollTop=0),c===d&&F&&(F.scrollTop=F.scrollHeight),c?.focus(),document.activeElement!==e))return},[N,F]),S=c.useCallback(()=>R([I,C]),[R,I,C]);c.useEffect(()=>{O&&S()},[O,S]);let{onOpenChange:U,triggerPointerDownPosRef:W}=B;c.useEffect(()=>{if(C){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(W.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(W.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():C.contains(c.target)||U(!1),document.removeEventListener("pointermove",b),W.current=null};return null!==W.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[C,U,W]),c.useEffect(()=>{let a=()=>U(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[U]);let[Y,_]=aB(a=>{let b=N().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aC(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),aa=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&(K(a),d&&(Q.current=!0))},[B.value]),ab=c.useCallback(()=>C?.focus(),[C]),ac=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&M(a)},[B.value]),ad="popper"===g?$:Z,ae=ad===$?{side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z}:{};return(0,b.jsx)(V,{scope:e,content:C,viewport:F,onViewportChange:G,itemRefCallback:aa,selectedItem:I,onItemLeave:ab,itemTextRefCallback:ac,focusSelectedItem:S,selectedItemText:L,position:g,isPositioned:O,searchRef:Y,children:(0,b.jsx)(y.RemoveScroll,{as:X,allowPinchZoom:!0,children:(0,b.jsx)(m.FocusScope,{asChild:!0,trapped:B.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,f.composeEventHandlers)(i,a=>{B.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,b.jsx)(k.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:j,onPointerDownOutside:n,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>B.onOpenChange(!1),children:(0,b.jsx)(ad,{role:"listbox",id:B.contentId,"data-state":B.open?"open":"closed",dir:B.dir,onContextMenu:a=>a.preventDefault(),...A,...ae,onPlaced:()=>P(!0),ref:H,style:{display:"flex",flexDirection:"column",outline:"none",...A.style},onKeyDown:(0,f.composeEventHandlers)(A.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||_(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=N().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>R(b)),a.preventDefault()}})})})})})})});Y.displayName="SelectContentImpl";var Z=c.forwardRef((a,d)=>{let{__scopeSelect:f,onPlaced:g,...i}=a,j=J(T,f),k=W(T,f),[l,m]=c.useState(null),[n,o]=c.useState(null),p=(0,h.useComposedRefs)(d,a=>o(a)),r=D(f),s=c.useRef(!1),t=c.useRef(!0),{viewport:v,selectedItem:w,selectedItemText:x,focusSelectedItem:y}=k,z=c.useCallback(()=>{if(j.trigger&&j.valueNode&&l&&n&&v&&w&&x){let a=j.trigger.getBoundingClientRect(),b=n.getBoundingClientRect(),c=j.valueNode.getBoundingClientRect(),d=x.getBoundingClientRect();if("rtl"!==j.dir){let f=d.left-b.left,g=c.left-f,h=a.left-g,i=a.width+h,j=Math.max(i,b.width),k=window.innerWidth-10,m=(0,e.clamp)(g,[10,Math.max(10,k-j)]);l.style.minWidth=i+"px",l.style.left=m+"px"}else{let f=b.right-d.right,g=window.innerWidth-c.right-f,h=window.innerWidth-a.right-g,i=a.width+h,j=Math.max(i,b.width),k=window.innerWidth-10,m=(0,e.clamp)(g,[10,Math.max(10,k-j)]);l.style.minWidth=i+"px",l.style.right=m+"px"}let f=r(),h=window.innerHeight-20,i=v.scrollHeight,k=window.getComputedStyle(n),m=parseInt(k.borderTopWidth,10),o=parseInt(k.paddingTop,10),p=parseInt(k.borderBottomWidth,10),q=m+o+i+parseInt(k.paddingBottom,10)+p,t=Math.min(5*w.offsetHeight,q),u=window.getComputedStyle(v),y=parseInt(u.paddingTop,10),z=parseInt(u.paddingBottom,10),A=a.top+a.height/2-10,B=w.offsetHeight/2,C=m+o+(w.offsetTop+B);if(C<=A){let a=f.length>0&&w===f[f.length-1].ref.current;l.style.bottom="0px";let b=Math.max(h-A,B+(a?z:0)+(n.clientHeight-v.offsetTop-v.offsetHeight)+p);l.style.height=C+b+"px"}else{let a=f.length>0&&w===f[0].ref.current;l.style.top="0px";let b=Math.max(A,m+v.offsetTop+(a?y:0)+B);l.style.height=b+(q-C)+"px",v.scrollTop=C-A+v.offsetTop}l.style.margin="10px 0",l.style.minHeight=t+"px",l.style.maxHeight=h+"px",g?.(),requestAnimationFrame(()=>s.current=!0)}},[r,j.trigger,j.valueNode,l,n,v,w,x,j.dir,g]);(0,u.useLayoutEffect)(()=>z(),[z]);let[A,B]=c.useState();(0,u.useLayoutEffect)(()=>{n&&B(window.getComputedStyle(n).zIndex)},[n]);let C=c.useCallback(a=>{a&&!0===t.current&&(z(),y?.(),t.current=!1)},[z,y]);return(0,b.jsx)(_,{scope:f,contentWrapper:l,shouldExpandOnScrollRef:s,onScrollButtonChange:C,children:(0,b.jsx)("div",{ref:m,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:A},children:(0,b.jsx)(q.Primitive.div,{...i,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});Z.displayName="SelectItemAlignedPosition";var $=c.forwardRef((a,c)=>{let{__scopeSelect:d,align:e="start",collisionPadding:f=10,...g}=a,h=H(d);return(0,b.jsx)(o.Content,{...h,...g,ref:c,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});$.displayName="SelectPopperPosition";var[_,aa]=F(T,{}),ab="SelectViewport",ac=c.forwardRef((a,d)=>{let{__scopeSelect:e,nonce:g,...i}=a,j=W(ab,e),k=aa(ab,e),l=(0,h.useComposedRefs)(d,j.onViewportChange),m=c.useRef(0);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:g}),(0,b.jsx)(C.Slot,{scope:e,children:(0,b.jsx)(q.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:l,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:(0,f.composeEventHandlers)(i.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=k;if(d?.current&&c){let a=Math.abs(m.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}m.current=b.scrollTop})})})]})});ac.displayName=ab;var ad="SelectGroup",[ae,af]=F(ad),ag=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=(0,n.useId)();return(0,b.jsx)(ae,{scope:d,id:f,children:(0,b.jsx)(q.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:c})})});ag.displayName=ad;var ah="SelectLabel",ai=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=af(ah,d);return(0,b.jsx)(q.Primitive.div,{id:f.id,...e,ref:c})});ai.displayName=ah;var aj="SelectItem",[ak,al]=F(aj),am=c.forwardRef((a,d)=>{let{__scopeSelect:e,value:g,disabled:i=!1,textValue:j,...k}=a,l=J(aj,e),m=W(aj,e),o=l.value===g,[p,r]=c.useState(j??""),[s,t]=c.useState(!1),u=(0,h.useComposedRefs)(d,a=>m.itemRefCallback?.(a,g,i)),v=(0,n.useId)(),w=c.useRef("touch"),x=()=>{i||(l.onValueChange(g),l.onOpenChange(!1))};if(""===g)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,b.jsx)(ak,{scope:e,value:g,disabled:i,textId:v,isSelected:o,onItemTextChange:c.useCallback(a=>{r(b=>b||(a?.textContent??"").trim())},[]),children:(0,b.jsx)(C.ItemSlot,{scope:e,value:g,disabled:i,textValue:p,children:(0,b.jsx)(q.Primitive.div,{role:"option","aria-labelledby":v,"data-highlighted":s?"":void 0,"aria-selected":o&&s,"data-state":o?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...k,ref:u,onFocus:(0,f.composeEventHandlers)(k.onFocus,()=>t(!0)),onBlur:(0,f.composeEventHandlers)(k.onBlur,()=>t(!1)),onClick:(0,f.composeEventHandlers)(k.onClick,()=>{"mouse"!==w.current&&x()}),onPointerUp:(0,f.composeEventHandlers)(k.onPointerUp,()=>{"mouse"===w.current&&x()}),onPointerDown:(0,f.composeEventHandlers)(k.onPointerDown,a=>{w.current=a.pointerType}),onPointerMove:(0,f.composeEventHandlers)(k.onPointerMove,a=>{w.current=a.pointerType,i?m.onItemLeave?.():"mouse"===w.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,f.composeEventHandlers)(k.onPointerLeave,a=>{a.currentTarget===document.activeElement&&m.onItemLeave?.()}),onKeyDown:(0,f.composeEventHandlers)(k.onKeyDown,a=>{(m.searchRef?.current===""||" "!==a.key)&&(A.includes(a.key)&&x()," "===a.key&&a.preventDefault())})})})})});am.displayName=aj;var an="SelectItemText",ao=c.forwardRef((a,e)=>{let{__scopeSelect:f,className:g,style:i,...j}=a,k=J(an,f),l=W(an,f),m=al(an,f),n=L(an,f),[o,p]=c.useState(null),r=(0,h.useComposedRefs)(e,a=>p(a),m.onItemTextChange,a=>l.itemTextRefCallback?.(a,m.value,m.disabled)),s=o?.textContent,t=c.useMemo(()=>(0,b.jsx)("option",{value:m.value,disabled:m.disabled,children:s},m.value),[m.disabled,m.value,s]),{onNativeOptionAdd:v,onNativeOptionRemove:w}=n;return(0,u.useLayoutEffect)(()=>(v(t),()=>w(t)),[v,w,t]),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(q.Primitive.span,{id:m.textId,...j,ref:r}),m.isSelected&&k.valueNode&&!k.valueNodeHasChildren?d.createPortal(j.children,k.valueNode):null]})});ao.displayName=an;var ap="SelectItemIndicator",aq=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return al(ap,d).isSelected?(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...e,ref:c}):null});aq.displayName=ap;var ar="SelectScrollUpButton",as=c.forwardRef((a,d)=>{let e=W(ar,a.__scopeSelect),f=aa(ar,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){i(b.scrollTop>0)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});as.displayName=ar;var at="SelectScrollDownButton",au=c.forwardRef((a,d)=>{let e=W(at,a.__scopeSelect),f=aa(at,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;i(Math.ceil(b.scrollTop)<a)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});au.displayName=at;var av=c.forwardRef((a,d)=>{let{__scopeSelect:e,onAutoScroll:g,...h}=a,i=W("SelectScrollButton",e),j=c.useRef(null),k=D(e),l=c.useCallback(()=>{null!==j.current&&(window.clearInterval(j.current),j.current=null)},[]);return c.useEffect(()=>()=>l(),[l]),(0,u.useLayoutEffect)(()=>{let a=k().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[k]),(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...h,ref:d,style:{flexShrink:0,...h.style},onPointerDown:(0,f.composeEventHandlers)(h.onPointerDown,()=>{null===j.current&&(j.current=window.setInterval(g,50))}),onPointerMove:(0,f.composeEventHandlers)(h.onPointerMove,()=>{i.onItemLeave?.(),null===j.current&&(j.current=window.setInterval(g,50))}),onPointerLeave:(0,f.composeEventHandlers)(h.onPointerLeave,()=>{l()})})}),aw=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...e,ref:c})});aw.displayName="SelectSeparator";var ax="SelectArrow",ay=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=H(d),g=J(ax,d),h=W(ax,d);return g.open&&"popper"===h.position?(0,b.jsx)(o.Arrow,{...f,...e,ref:c}):null});ay.displayName=ax;var az=c.forwardRef(({__scopeSelect:a,value:d,...e},f)=>{let g=c.useRef(null),i=(0,h.useComposedRefs)(f,g),j=(0,v.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(j!==d&&b){let c=new Event("change",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[j,d]),(0,b.jsx)(q.Primitive.select,{...e,style:{...w.VISUALLY_HIDDEN_STYLES,...e.style},ref:i,defaultValue:d})});function aA(a){return""===a||void 0===a}function aB(a){let b=(0,s.useCallbackRef)(a),d=c.useRef(""),e=c.useRef(0),f=c.useCallback(a=>{let c=d.current+a;b(c),function a(b){d.current=b,window.clearTimeout(e.current),""!==b&&(e.current=window.setTimeout(()=>a(""),1e3))}(c)},[b]),g=c.useCallback(()=>{d.current="",window.clearTimeout(e.current)},[]);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),[d,f,g]}function aC(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}az.displayName="SelectBubbleInput",a.s(["Arrow",()=>ay,"Content",()=>U,"Group",()=>ag,"Icon",()=>R,"Item",()=>am,"ItemIndicator",()=>aq,"ItemText",()=>ao,"Label",()=>ai,"Portal",()=>S,"Root",()=>M,"ScrollDownButton",()=>au,"ScrollUpButton",()=>as,"Select",()=>M,"SelectArrow",()=>ay,"SelectContent",()=>U,"SelectGroup",()=>ag,"SelectIcon",()=>R,"SelectItem",()=>am,"SelectItemIndicator",()=>aq,"SelectItemText",()=>ao,"SelectLabel",()=>ai,"SelectPortal",()=>S,"SelectScrollDownButton",()=>au,"SelectScrollUpButton",()=>as,"SelectSeparator",()=>aw,"SelectTrigger",()=>O,"SelectValue",()=>Q,"SelectViewport",()=>ac,"Separator",()=>aw,"Trigger",()=>O,"Value",()=>Q,"Viewport",()=>ac,"createSelectScope",()=>G],16252);var aD=a.i(16252),aD=aD,aE=a.i(72016),aF=a.i(71716),aG=a.i(19880),aH=a.i(85536);let aI=aD.Root;aD.Group;let aJ=aD.Value,aK=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Trigger,{ref:e,className:(0,aH.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...d,children:[c,(0,b.jsx)(aD.Icon,{asChild:!0,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));aK.displayName=aD.Trigger.displayName;let aL=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollUpButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aG.ChevronUp,{className:"h-4 w-4"})}));aL.displayName=aD.ScrollUpButton.displayName;let aM=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollDownButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4"})}));aM.displayName=aD.ScrollDownButton.displayName;let aN=c.forwardRef(({className:a,children:c,position:d="popper",...e},f)=>(0,b.jsx)(aD.Portal,{children:(0,b.jsxs)(aD.Content,{ref:f,className:(0,aH.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===d&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:d,...e,children:[(0,b.jsx)(aL,{}),(0,b.jsx)(aD.Viewport,{className:(0,aH.cn)("p-1","popper"===d&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:c}),(0,b.jsx)(aM,{})]})}));aN.displayName=aD.Content.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Label,{ref:d,className:(0,aH.cn)("px-2 py-1.5 text-sm font-semibold",a),...c})).displayName=aD.Label.displayName;let aO=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Item,{ref:e,className:(0,aH.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 ps-2 pe-8 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute end-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(aD.ItemIndicator,{children:(0,b.jsx)(aE.Check,{className:"h-4 w-4"})})}),(0,b.jsx)(aD.ItemText,{children:c})]}));aO.displayName=aD.Item.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Separator,{ref:d,className:(0,aH.cn)("bg-muted -mx-1 my-1 h-px",a),...c})).displayName=aD.Separator.displayName,a.s(["Select",()=>aI,"SelectContent",()=>aN,"SelectItem",()=>aO,"SelectTrigger",()=>aK,"SelectValue",()=>aJ],59175)}];
1
+ module.exports=[59175,a=>{"use strict";var b=a.i(12656),c=a.i(96960),d=a.i(55690),e=a.i(48972),f=a.i(59653),g=a.i(63496),h=a.i(6175),i=a.i(7420),j=a.i(48939),k=a.i(58761),l=a.i(51473),m=a.i(59675),n=a.i(5472),o=a.i(75988),p=a.i(80930),q=a.i(66873),r=a.i(90986),s=a.i(79406),t=a.i(17329),u=a.i(61476),v=a.i(64005),w=a.i(50049),x=a.i(16164),y=a.i(45291),z=[" ","Enter","ArrowUp","ArrowDown"],A=[" ","Enter"],B="Select",[C,D,E]=(0,g.createCollection)(B),[F,G]=(0,i.createContextScope)(B,[E,o.createPopperScope]),H=(0,o.createPopperScope)(),[I,J]=F(B),[K,L]=F(B),M=a=>{let{__scopeSelect:d,children:e,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:k,onValueChange:l,dir:m,name:p,autoComplete:q,disabled:r,required:s,form:u}=a,v=H(d),[w,x]=c.useState(null),[y,z]=c.useState(null),[A,D]=c.useState(!1),E=(0,j.useDirection)(m),[F,G]=(0,t.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:B}),[J,L]=(0,t.useControllableState)({prop:i,defaultProp:k,onChange:l,caller:B}),M=c.useRef(null),N=!w||u||!!w.closest("form"),[O,P]=c.useState(new Set),Q=Array.from(O).map(a=>a.props.value).join(";");return(0,b.jsx)(o.Root,{...v,children:(0,b.jsxs)(I,{required:s,scope:d,trigger:w,onTriggerChange:x,valueNode:y,onValueNodeChange:z,valueNodeHasChildren:A,onValueNodeHasChildrenChange:D,contentId:(0,n.useId)(),value:J,onValueChange:L,open:F,onOpenChange:G,dir:E,triggerPointerDownPosRef:M,disabled:r,children:[(0,b.jsx)(C.Provider,{scope:d,children:(0,b.jsx)(K,{scope:a.__scopeSelect,onNativeOptionAdd:c.useCallback(a=>{P(b=>new Set(b).add(a))},[]),onNativeOptionRemove:c.useCallback(a=>{P(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:e})}),N?(0,b.jsxs)(az,{"aria-hidden":!0,required:s,tabIndex:-1,name:p,autoComplete:q,value:J,onChange:a=>L(a.target.value),disabled:r,form:u,children:[void 0===J?(0,b.jsx)("option",{value:""}):null,Array.from(O)]},Q):null]})})};M.displayName=B;var N="SelectTrigger",O=c.forwardRef((a,d)=>{let{__scopeSelect:e,disabled:g=!1,...i}=a,j=H(e),k=J(N,e),l=k.disabled||g,m=(0,h.useComposedRefs)(d,k.onTriggerChange),n=D(e),p=c.useRef("touch"),[r,s,t]=aB(a=>{let b=n().filter(a=>!a.disabled),c=b.find(a=>a.value===k.value),d=aC(b,a,c);void 0!==d&&k.onValueChange(d.value)}),u=a=>{l||(k.onOpenChange(!0),t()),a&&(k.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,b.jsx)(o.Anchor,{asChild:!0,...j,children:(0,b.jsx)(q.Primitive.button,{type:"button",role:"combobox","aria-controls":k.contentId,"aria-expanded":k.open,"aria-required":k.required,"aria-autocomplete":"none",dir:k.dir,"data-state":k.open?"open":"closed",disabled:l,"data-disabled":l?"":void 0,"data-placeholder":aA(k.value)?"":void 0,...i,ref:m,onClick:(0,f.composeEventHandlers)(i.onClick,a=>{a.currentTarget.focus(),"mouse"!==p.current&&u(a)}),onPointerDown:(0,f.composeEventHandlers)(i.onPointerDown,a=>{p.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(u(a),a.preventDefault())}),onKeyDown:(0,f.composeEventHandlers)(i.onKeyDown,a=>{let b=""!==r.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||s(a.key),(!b||" "!==a.key)&&z.includes(a.key)&&(u(),a.preventDefault())})})})});O.displayName=N;var P="SelectValue",Q=c.forwardRef((a,c)=>{let{__scopeSelect:d,className:e,style:f,children:g,placeholder:i="",...j}=a,k=J(P,d),{onValueNodeHasChildrenChange:l}=k,m=void 0!==g,n=(0,h.useComposedRefs)(c,k.onValueNodeChange);return(0,u.useLayoutEffect)(()=>{l(m)},[l,m]),(0,b.jsx)(q.Primitive.span,{...j,ref:n,style:{pointerEvents:"none"},children:aA(k.value)?(0,b.jsx)(b.Fragment,{children:i}):g})});Q.displayName=P;var R=c.forwardRef((a,c)=>{let{__scopeSelect:d,children:e,...f}=a;return(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...f,ref:c,children:e||"▼"})});R.displayName="SelectIcon";var S=a=>(0,b.jsx)(p.Portal,{asChild:!0,...a});S.displayName="SelectPortal";var T="SelectContent",U=c.forwardRef((a,e)=>{let f=J(T,a.__scopeSelect),[g,h]=c.useState();return((0,u.useLayoutEffect)(()=>{h(new DocumentFragment)},[]),f.open)?(0,b.jsx)(Y,{...a,ref:e}):g?d.createPortal((0,b.jsx)(V,{scope:a.__scopeSelect,children:(0,b.jsx)(C.Slot,{scope:a.__scopeSelect,children:(0,b.jsx)("div",{children:a.children})})}),g):null});U.displayName=T;var[V,W]=F(T),X=(0,r.createSlot)("SelectContent.RemoveScroll"),Y=c.forwardRef((a,d)=>{let{__scopeSelect:e,position:g="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:j,onPointerDownOutside:n,side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z,...A}=a,B=J(T,e),[C,E]=c.useState(null),[F,G]=c.useState(null),H=(0,h.useComposedRefs)(d,a=>E(a)),[I,K]=c.useState(null),[L,M]=c.useState(null),N=D(e),[O,P]=c.useState(!1),Q=c.useRef(!1);c.useEffect(()=>{if(C)return(0,x.hideOthers)(C)},[C]),(0,l.useFocusGuards)();let R=c.useCallback(a=>{let[b,...c]=N().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&F&&(F.scrollTop=0),c===d&&F&&(F.scrollTop=F.scrollHeight),c?.focus(),document.activeElement!==e))return},[N,F]),S=c.useCallback(()=>R([I,C]),[R,I,C]);c.useEffect(()=>{O&&S()},[O,S]);let{onOpenChange:U,triggerPointerDownPosRef:W}=B;c.useEffect(()=>{if(C){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(W.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(W.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():C.contains(c.target)||U(!1),document.removeEventListener("pointermove",b),W.current=null};return null!==W.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[C,U,W]),c.useEffect(()=>{let a=()=>U(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[U]);let[Y,_]=aB(a=>{let b=N().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aC(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),aa=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&(K(a),d&&(Q.current=!0))},[B.value]),ab=c.useCallback(()=>C?.focus(),[C]),ac=c.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&M(a)},[B.value]),ad="popper"===g?$:Z,ae=ad===$?{side:o,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:z}:{};return(0,b.jsx)(V,{scope:e,content:C,viewport:F,onViewportChange:G,itemRefCallback:aa,selectedItem:I,onItemLeave:ab,itemTextRefCallback:ac,focusSelectedItem:S,selectedItemText:L,position:g,isPositioned:O,searchRef:Y,children:(0,b.jsx)(y.RemoveScroll,{as:X,allowPinchZoom:!0,children:(0,b.jsx)(m.FocusScope,{asChild:!0,trapped:B.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,f.composeEventHandlers)(i,a=>{B.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,b.jsx)(k.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:j,onPointerDownOutside:n,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>B.onOpenChange(!1),children:(0,b.jsx)(ad,{role:"listbox",id:B.contentId,"data-state":B.open?"open":"closed",dir:B.dir,onContextMenu:a=>a.preventDefault(),...A,...ae,onPlaced:()=>P(!0),ref:H,style:{display:"flex",flexDirection:"column",outline:"none",...A.style},onKeyDown:(0,f.composeEventHandlers)(A.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||_(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=N().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>R(b)),a.preventDefault()}})})})})})})});Y.displayName="SelectContentImpl";var Z=c.forwardRef((a,d)=>{let{__scopeSelect:f,onPlaced:g,...i}=a,j=J(T,f),k=W(T,f),[l,m]=c.useState(null),[n,o]=c.useState(null),p=(0,h.useComposedRefs)(d,a=>o(a)),r=D(f),s=c.useRef(!1),t=c.useRef(!0),{viewport:v,selectedItem:w,selectedItemText:x,focusSelectedItem:y}=k,z=c.useCallback(()=>{if(j.trigger&&j.valueNode&&l&&n&&v&&w&&x){let a=j.trigger.getBoundingClientRect(),b=n.getBoundingClientRect(),c=j.valueNode.getBoundingClientRect(),d=x.getBoundingClientRect();if("rtl"!==j.dir){let f=d.left-b.left,g=c.left-f,h=a.left-g,i=a.width+h,j=Math.max(i,b.width),k=window.innerWidth-10,m=(0,e.clamp)(g,[10,Math.max(10,k-j)]);l.style.minWidth=i+"px",l.style.left=m+"px"}else{let f=b.right-d.right,g=window.innerWidth-c.right-f,h=window.innerWidth-a.right-g,i=a.width+h,j=Math.max(i,b.width),k=window.innerWidth-10,m=(0,e.clamp)(g,[10,Math.max(10,k-j)]);l.style.minWidth=i+"px",l.style.right=m+"px"}let f=r(),h=window.innerHeight-20,i=v.scrollHeight,k=window.getComputedStyle(n),m=parseInt(k.borderTopWidth,10),o=parseInt(k.paddingTop,10),p=parseInt(k.borderBottomWidth,10),q=m+o+i+parseInt(k.paddingBottom,10)+p,t=Math.min(5*w.offsetHeight,q),u=window.getComputedStyle(v),y=parseInt(u.paddingTop,10),z=parseInt(u.paddingBottom,10),A=a.top+a.height/2-10,B=w.offsetHeight/2,C=m+o+(w.offsetTop+B);if(C<=A){let a=f.length>0&&w===f[f.length-1].ref.current;l.style.bottom="0px";let b=Math.max(h-A,B+(a?z:0)+(n.clientHeight-v.offsetTop-v.offsetHeight)+p);l.style.height=C+b+"px"}else{let a=f.length>0&&w===f[0].ref.current;l.style.top="0px";let b=Math.max(A,m+v.offsetTop+(a?y:0)+B);l.style.height=b+(q-C)+"px",v.scrollTop=C-A+v.offsetTop}l.style.margin="10px 0",l.style.minHeight=t+"px",l.style.maxHeight=h+"px",g?.(),requestAnimationFrame(()=>s.current=!0)}},[r,j.trigger,j.valueNode,l,n,v,w,x,j.dir,g]);(0,u.useLayoutEffect)(()=>z(),[z]);let[A,B]=c.useState();(0,u.useLayoutEffect)(()=>{n&&B(window.getComputedStyle(n).zIndex)},[n]);let C=c.useCallback(a=>{a&&!0===t.current&&(z(),y?.(),t.current=!1)},[z,y]);return(0,b.jsx)(_,{scope:f,contentWrapper:l,shouldExpandOnScrollRef:s,onScrollButtonChange:C,children:(0,b.jsx)("div",{ref:m,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:A},children:(0,b.jsx)(q.Primitive.div,{...i,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});Z.displayName="SelectItemAlignedPosition";var $=c.forwardRef((a,c)=>{let{__scopeSelect:d,align:e="start",collisionPadding:f=10,...g}=a,h=H(d);return(0,b.jsx)(o.Content,{...h,...g,ref:c,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});$.displayName="SelectPopperPosition";var[_,aa]=F(T,{}),ab="SelectViewport",ac=c.forwardRef((a,d)=>{let{__scopeSelect:e,nonce:g,...i}=a,j=W(ab,e),k=aa(ab,e),l=(0,h.useComposedRefs)(d,j.onViewportChange),m=c.useRef(0);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:g}),(0,b.jsx)(C.Slot,{scope:e,children:(0,b.jsx)(q.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:l,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:(0,f.composeEventHandlers)(i.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=k;if(d?.current&&c){let a=Math.abs(m.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}m.current=b.scrollTop})})})]})});ac.displayName=ab;var ad="SelectGroup",[ae,af]=F(ad),ag=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=(0,n.useId)();return(0,b.jsx)(ae,{scope:d,id:f,children:(0,b.jsx)(q.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:c})})});ag.displayName=ad;var ah="SelectLabel",ai=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=af(ah,d);return(0,b.jsx)(q.Primitive.div,{id:f.id,...e,ref:c})});ai.displayName=ah;var aj="SelectItem",[ak,al]=F(aj),am=c.forwardRef((a,d)=>{let{__scopeSelect:e,value:g,disabled:i=!1,textValue:j,...k}=a,l=J(aj,e),m=W(aj,e),o=l.value===g,[p,r]=c.useState(j??""),[s,t]=c.useState(!1),u=(0,h.useComposedRefs)(d,a=>m.itemRefCallback?.(a,g,i)),v=(0,n.useId)(),w=c.useRef("touch"),x=()=>{i||(l.onValueChange(g),l.onOpenChange(!1))};if(""===g)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,b.jsx)(ak,{scope:e,value:g,disabled:i,textId:v,isSelected:o,onItemTextChange:c.useCallback(a=>{r(b=>b||(a?.textContent??"").trim())},[]),children:(0,b.jsx)(C.ItemSlot,{scope:e,value:g,disabled:i,textValue:p,children:(0,b.jsx)(q.Primitive.div,{role:"option","aria-labelledby":v,"data-highlighted":s?"":void 0,"aria-selected":o&&s,"data-state":o?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...k,ref:u,onFocus:(0,f.composeEventHandlers)(k.onFocus,()=>t(!0)),onBlur:(0,f.composeEventHandlers)(k.onBlur,()=>t(!1)),onClick:(0,f.composeEventHandlers)(k.onClick,()=>{"mouse"!==w.current&&x()}),onPointerUp:(0,f.composeEventHandlers)(k.onPointerUp,()=>{"mouse"===w.current&&x()}),onPointerDown:(0,f.composeEventHandlers)(k.onPointerDown,a=>{w.current=a.pointerType}),onPointerMove:(0,f.composeEventHandlers)(k.onPointerMove,a=>{w.current=a.pointerType,i?m.onItemLeave?.():"mouse"===w.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,f.composeEventHandlers)(k.onPointerLeave,a=>{a.currentTarget===document.activeElement&&m.onItemLeave?.()}),onKeyDown:(0,f.composeEventHandlers)(k.onKeyDown,a=>{(m.searchRef?.current===""||" "!==a.key)&&(A.includes(a.key)&&x()," "===a.key&&a.preventDefault())})})})})});am.displayName=aj;var an="SelectItemText",ao=c.forwardRef((a,e)=>{let{__scopeSelect:f,className:g,style:i,...j}=a,k=J(an,f),l=W(an,f),m=al(an,f),n=L(an,f),[o,p]=c.useState(null),r=(0,h.useComposedRefs)(e,a=>p(a),m.onItemTextChange,a=>l.itemTextRefCallback?.(a,m.value,m.disabled)),s=o?.textContent,t=c.useMemo(()=>(0,b.jsx)("option",{value:m.value,disabled:m.disabled,children:s},m.value),[m.disabled,m.value,s]),{onNativeOptionAdd:v,onNativeOptionRemove:w}=n;return(0,u.useLayoutEffect)(()=>(v(t),()=>w(t)),[v,w,t]),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(q.Primitive.span,{id:m.textId,...j,ref:r}),m.isSelected&&k.valueNode&&!k.valueNodeHasChildren?d.createPortal(j.children,k.valueNode):null]})});ao.displayName=an;var ap="SelectItemIndicator",aq=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return al(ap,d).isSelected?(0,b.jsx)(q.Primitive.span,{"aria-hidden":!0,...e,ref:c}):null});aq.displayName=ap;var ar="SelectScrollUpButton",as=c.forwardRef((a,d)=>{let e=W(ar,a.__scopeSelect),f=aa(ar,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){i(b.scrollTop>0)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});as.displayName=ar;var at="SelectScrollDownButton",au=c.forwardRef((a,d)=>{let e=W(at,a.__scopeSelect),f=aa(at,a.__scopeSelect),[g,i]=c.useState(!1),j=(0,h.useComposedRefs)(d,f.onScrollButtonChange);return(0,u.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;i(Math.ceil(b.scrollTop)<a)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(av,{...a,ref:j,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});au.displayName=at;var av=c.forwardRef((a,d)=>{let{__scopeSelect:e,onAutoScroll:g,...h}=a,i=W("SelectScrollButton",e),j=c.useRef(null),k=D(e),l=c.useCallback(()=>{null!==j.current&&(window.clearInterval(j.current),j.current=null)},[]);return c.useEffect(()=>()=>l(),[l]),(0,u.useLayoutEffect)(()=>{let a=k().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[k]),(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...h,ref:d,style:{flexShrink:0,...h.style},onPointerDown:(0,f.composeEventHandlers)(h.onPointerDown,()=>{null===j.current&&(j.current=window.setInterval(g,50))}),onPointerMove:(0,f.composeEventHandlers)(h.onPointerMove,()=>{i.onItemLeave?.(),null===j.current&&(j.current=window.setInterval(g,50))}),onPointerLeave:(0,f.composeEventHandlers)(h.onPointerLeave,()=>{l()})})}),aw=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return(0,b.jsx)(q.Primitive.div,{"aria-hidden":!0,...e,ref:c})});aw.displayName="SelectSeparator";var ax="SelectArrow",ay=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=H(d),g=J(ax,d),h=W(ax,d);return g.open&&"popper"===h.position?(0,b.jsx)(o.Arrow,{...f,...e,ref:c}):null});ay.displayName=ax;var az=c.forwardRef(({__scopeSelect:a,value:d,...e},f)=>{let g=c.useRef(null),i=(0,h.useComposedRefs)(f,g),j=(0,v.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(j!==d&&b){let c=new Event("change",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[j,d]),(0,b.jsx)(q.Primitive.select,{...e,style:{...w.VISUALLY_HIDDEN_STYLES,...e.style},ref:i,defaultValue:d})});function aA(a){return""===a||void 0===a}function aB(a){let b=(0,s.useCallbackRef)(a),d=c.useRef(""),e=c.useRef(0),f=c.useCallback(a=>{let c=d.current+a;b(c),function a(b){d.current=b,window.clearTimeout(e.current),""!==b&&(e.current=window.setTimeout(()=>a(""),1e3))}(c)},[b]),g=c.useCallback(()=>{d.current="",window.clearTimeout(e.current)},[]);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),[d,f,g]}function aC(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}az.displayName="SelectBubbleInput",a.s(["Arrow",()=>ay,"Content",()=>U,"Group",()=>ag,"Icon",()=>R,"Item",()=>am,"ItemIndicator",()=>aq,"ItemText",()=>ao,"Label",()=>ai,"Portal",()=>S,"Root",()=>M,"ScrollDownButton",()=>au,"ScrollUpButton",()=>as,"Select",()=>M,"SelectArrow",()=>ay,"SelectContent",()=>U,"SelectGroup",()=>ag,"SelectIcon",()=>R,"SelectItem",()=>am,"SelectItemIndicator",()=>aq,"SelectItemText",()=>ao,"SelectLabel",()=>ai,"SelectPortal",()=>S,"SelectScrollDownButton",()=>au,"SelectScrollUpButton",()=>as,"SelectSeparator",()=>aw,"SelectTrigger",()=>O,"SelectValue",()=>Q,"SelectViewport",()=>ac,"Separator",()=>aw,"Trigger",()=>O,"Value",()=>Q,"Viewport",()=>ac,"createSelectScope",()=>G],16252);var aD=a.i(16252),aD=aD,aE=a.i(72016),aF=a.i(71716),aG=a.i(19880),aH=a.i(85536);let aI=aD.Root;aD.Group;let aJ=aD.Value,aK=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Trigger,{ref:e,className:(0,aH.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...d,children:[c,(0,b.jsx)(aD.Icon,{asChild:!0,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));aK.displayName=aD.Trigger.displayName;let aL=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollUpButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aG.ChevronUp,{className:"h-4 w-4"})}));aL.displayName=aD.ScrollUpButton.displayName;let aM=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.ScrollDownButton,{ref:d,className:(0,aH.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(aF.ChevronDown,{className:"h-4 w-4"})}));aM.displayName=aD.ScrollDownButton.displayName;let aN=c.forwardRef(({className:a,children:c,position:d="popper",...e},f)=>(0,b.jsx)(aD.Portal,{children:(0,b.jsxs)(aD.Content,{ref:f,className:(0,aH.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===d&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:d,...e,children:[(0,b.jsx)(aL,{}),(0,b.jsx)(aD.Viewport,{className:(0,aH.cn)("p-1","popper"===d&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:c}),(0,b.jsx)(aM,{})]})}));aN.displayName=aD.Content.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Label,{ref:d,className:(0,aH.cn)("px-2 py-1.5 text-sm font-semibold",a),...c})).displayName=aD.Label.displayName;let aO=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(aD.Item,{ref:e,className:(0,aH.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 ps-2 pe-8 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute end-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(aD.ItemIndicator,{children:(0,b.jsx)(aE.Check,{className:"h-4 w-4"})})}),(0,b.jsx)(aD.ItemText,{children:c})]}));aO.displayName=aD.Item.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(aD.Separator,{ref:d,className:(0,aH.cn)("bg-muted -mx-1 my-1 h-px",a),...c})).displayName=aD.Separator.displayName,a.s(["Select",()=>aI,"SelectContent",()=>aN,"SelectItem",()=>aO,"SelectTrigger",()=>aK,"SelectValue",()=>aJ],59175)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_components_ui_select_tsx_45d6b8ae._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[35556,a=>{"use strict";var b=a.i(92658),c=a.i(74533),d=a.i(12057),e=a.i(12581);let f=(0,d.promisify)(c.execFile);async function g(a,b){let{stdout:c}=await f("git",b,{cwd:a,timeout:5e3});return c.trim()}async function h(a,b=8){if(!a.trim())return{commits:[],branches:[],remotes:[],tags:[],stashCount:0,currentBranch:"",diffStats:null,workingTree:{staged:0,modified:0,untracked:0},error:"Repository path is required"};let c=await Promise.allSettled([g(a,["log",`--max-count=${b}`,"--format=%H%x00%h%x00%s%x00%an%x00%cr","--no-color"]),g(a,["branch","--show-current"]),g(a,["branch","--sort=-committerdate","--format=%(HEAD)%(refname:short)%00%(committerdate:relative)","--no-color"]),g(a,["remote","-v"]),g(a,["tag","--sort=-creatordate","-l","--format=%(refname:short)"]),g(a,["stash","list"]),g(a,["status","--porcelain"]),g(a,["diff","--shortstat"])]),d=a=>"fulfilled"===c[a].status?c[a].value:"",e=d(0).split("\n").filter(Boolean).map(a=>{let[b,c,d,e,f]=a.split("\0");return{hash:b,shortHash:c,subject:d,author:e,relativeDate:f}}),f=d(1);e.length>0&&f&&(e[0].branch=f);let i=d(2).split("\n").filter(Boolean).slice(0,10).map(a=>{let b=a.startsWith("*"),[c,d]=(b?a.slice(1):a).split("\0");return{name:c.trim(),isCurrent:b,lastCommitDate:d?.trim()??""}}),j=new Map;d(3).split("\n").filter(Boolean).forEach(a=>{let b=a.match(/^(\S+)\s+(\S+)\s+\(fetch\)/);if(b){let a=b[2].replace(/\/\/[^@]+@/,"//").replace(/x-access-token:[^@]+@/,"");j.set(b[1],a)}});let k=Array.from(j,([a,b])=>({name:a,url:b})),l=d(4).split("\n").filter(Boolean).slice(0,5),m=d(5).split("\n").filter(Boolean).length,n=d(6).split("\n").filter(Boolean),o={staged:0,modified:0,untracked:0};for(let a of n){let b=a[0],c=a[1];"?"===b&&"?"===c?o.untracked++:" "!==b&&"?"!==b&&o.staged++," "!==c&&"?"!==c&&o.modified++}let p=null,q=d(7);if(q){let a=q.match(/(\d+) file/),b=q.match(/(\d+) insertion/),c=q.match(/(\d+) deletion/);p={filesChanged:a?parseInt(a[1],10):0,insertions:b?parseInt(b[1],10):0,deletions:c?parseInt(c[1],10):0}}return{commits:e,branches:i,remotes:k,tags:l,stashCount:m,currentBranch:f,diffStats:p,workingTree:o}}async function i(a,b=10){let c=await h(a,b);return{entries:c.commits,error:c.error}}(0,e.ensureServerEntryExports)([h,i]),(0,b.registerServerReference)(h,"6016d32a7fcc1eaef7cc5c347598d9c0f356154d1c",null),(0,b.registerServerReference)(i,"602a87ab845da0fe47bb667ce8732a11a0e8699f27",null),a.s(["getGitRepoInfo",()=>h])},3531,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),t=a.i(10528),u=a.i(50845),v=a.i(26604),w=a.i(54723),x=a.i(18942),y=a.i(42886),z=a.i(49560),A=a.i(39353),B=a.i(29207),C=a.i(35556);a.s([],22768),a.i(22768),a.s(["000590ba10a289f69ef7346668a94092029db09d19",()=>r.checkAgentAuth,"004e351b31209f435c7dbe30641b427c045b24f500",()=>f.listGitHubOrganizations,"008723d0022a480ad850258f4b4a0a65104336f53f",()=>d.pickFolder,"008c50387d6164523086509c47a4ec6e70842ea4b8",()=>q.isAgentSetupComplete,"00b180d011490b1ccf4fc15d0270e25ee7da2b75e3",()=>b.getAllAgentModels,"00f988729506fa2c1769e9ac45512b2ec0c0e69997",()=>s.checkToolStatus,"4012d31287012f8a8f7a1f59595f20e126128a7b0d",()=>p.getDeploymentLogs,"4019dac7161470354dfa0bfa2782dc1eac1ba42507",()=>z.addRepository,"4026b868f0f4c785ff0985545b508d21d97b86f431",()=>y.unarchiveFeature,"402ebb0a39003bfc2596c3a6a40f8c6889113eb253",()=>o.syncRepository,"40330505d44b924f37036d9765747931f6fe91e9d8",()=>v.resumeFeature,"4045be845b4825585b911344c630459ff491aa6f1b",()=>k.getDeploymentStatus,"4052e581e36a17ba4d0c0e087b76853d7e2fc2fba6",()=>m.openShell,"4053150c9d3be3414b8faf1b5879180427986efbd7",()=>i.deployRepository,"40686db5898f8076055de49256f65eec7b9314df24",()=>x.stopFeature,"4072c166c340699eeacdd542186db91d55021d8237",()=>g.importGitHubRepository,"407d82d5ab063f7cfd7e994be147d7f8d0270cdef9",()=>t.archiveFeature,"407fe9068fcacfd9ce619c5081ff4e3fbd0d3d59f9",()=>l.openIde,"408e3399381e0aef7cebdffaece430465484c3566e",()=>e.listGitHubRepositories,"4095b1e52c5ca823b33b0aba1d786488651cea47c9",()=>w.startFeature,"40992a6e84a0446871e82bc98138bcf6d8531691fd",()=>B.getFeatureMetadata,"40a7bc23d19822ec40496d45f48e80a87979cd4c9b",()=>n.openFolder,"40d05f22b2e6d8db7fa0251fb2cecd5b893f6fe2e4",()=>h.deployFeature,"40fa3d9780de6717c6a5fcc904ee15e78d0577f63e",()=>A.deleteRepository,"40fce4a3e760ccf1d33cc0e12870160afad7554b0c",()=>j.stopDeployment,"6016d32a7fcc1eaef7cc5c347598d9c0f356154d1c",()=>C.getGitRepoInfo,"60a9fbfebbe9768829b0f32c5c6f1c4238587f373c",()=>c.updateAgentAndModel,"78f67770a07233a94389161b94eb3f102b67307d61",()=>u.deleteFeature],3531)}];
2
+
3
+ //# sourceMappingURL=src_presentation_web_e1cd1869._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/get-git-log.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/repository/%5BrepositoryId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, { cwd, timeout: 5000 });\n return stdout.trim();\n}\n\nexport interface GitLogEntry {\n hash: string;\n shortHash: string;\n subject: string;\n author: string;\n relativeDate: string;\n branch?: string;\n}\n\nexport interface GitBranchInfo {\n name: string;\n isCurrent: boolean;\n lastCommitDate: string;\n}\n\nexport interface GitRemoteInfo {\n name: string;\n url: string;\n}\n\nexport interface GitWorkingTreeStatus {\n staged: number;\n modified: number;\n untracked: number;\n}\n\nexport interface GitDiffStats {\n filesChanged: number;\n insertions: number;\n deletions: number;\n}\n\nexport interface GitRepoInfo {\n commits: GitLogEntry[];\n branches: GitBranchInfo[];\n remotes: GitRemoteInfo[];\n tags: string[];\n stashCount: number;\n currentBranch: string;\n diffStats: GitDiffStats | null;\n workingTree: GitWorkingTreeStatus;\n error?: string;\n}\n\nexport async function getGitRepoInfo(\n repositoryPath: string,\n commitLimit = 8\n): Promise<GitRepoInfo> {\n const empty: GitRepoInfo = {\n commits: [],\n branches: [],\n remotes: [],\n tags: [],\n stashCount: 0,\n currentBranch: '',\n diffStats: null,\n workingTree: { staged: 0, modified: 0, untracked: 0 },\n };\n\n if (!repositoryPath.trim()) {\n return { ...empty, error: 'Repository path is required' };\n }\n\n const results = await Promise.allSettled([\n // 0: commits\n git(repositoryPath, [\n 'log',\n `--max-count=${commitLimit}`,\n '--format=%H%x00%h%x00%s%x00%an%x00%cr',\n '--no-color',\n ]),\n // 1: current branch\n git(repositoryPath, ['branch', '--show-current']),\n // 2: branches with dates\n git(repositoryPath, [\n 'branch',\n '--sort=-committerdate',\n '--format=%(HEAD)%(refname:short)%00%(committerdate:relative)',\n '--no-color',\n ]),\n // 3: remotes\n git(repositoryPath, ['remote', '-v']),\n // 4: tags (recent 5)\n git(repositoryPath, ['tag', '--sort=-creatordate', '-l', '--format=%(refname:short)']),\n // 5: stash count\n git(repositoryPath, ['stash', 'list']),\n // 6: working tree status\n git(repositoryPath, ['status', '--porcelain']),\n // 7: diff stats (uncommitted)\n git(repositoryPath, ['diff', '--shortstat']),\n ]);\n\n const val = (i: number) => (results[i].status === 'fulfilled' ? results[i].value : '');\n\n // Parse commits\n const commits: GitLogEntry[] = val(0)\n .split('\\n')\n .filter(Boolean)\n .map((line: string) => {\n const [hash, shortHash, subject, author, relativeDate] = line.split('\\0');\n return { hash, shortHash, subject, author, relativeDate };\n });\n\n const currentBranch = val(1);\n if (commits.length > 0 && currentBranch) {\n commits[0].branch = currentBranch;\n }\n\n // Parse branches\n const branches: GitBranchInfo[] = val(2)\n .split('\\n')\n .filter(Boolean)\n .slice(0, 10)\n .map((line: string) => {\n const isCurrent = line.startsWith('*');\n const clean = isCurrent ? line.slice(1) : line;\n const [name, lastCommitDate] = clean.split('\\0');\n return { name: name.trim(), isCurrent, lastCommitDate: lastCommitDate?.trim() ?? '' };\n });\n\n // Parse remotes (dedup fetch/push)\n const remoteMap = new Map<string, string>();\n val(3)\n .split('\\n')\n .filter(Boolean)\n .forEach((line: string) => {\n const match = line.match(/^(\\S+)\\s+(\\S+)\\s+\\(fetch\\)/);\n if (match) {\n // Strip credentials/tokens from URL before sending to client\n const sanitized = match[2].replace(/\\/\\/[^@]+@/, '//').replace(/x-access-token:[^@]+@/, '');\n remoteMap.set(match[1], sanitized);\n }\n });\n const remotes: GitRemoteInfo[] = Array.from(remoteMap, ([name, url]) => ({ name, url }));\n\n // Parse tags (top 5)\n const tags = val(4).split('\\n').filter(Boolean).slice(0, 5);\n\n // Stash count\n const stashCount = val(5).split('\\n').filter(Boolean).length;\n\n // Working tree status\n const statusLines = val(6).split('\\n').filter(Boolean);\n const workingTree: GitWorkingTreeStatus = { staged: 0, modified: 0, untracked: 0 };\n for (const line of statusLines) {\n const x = line[0];\n const y = line[1];\n if (x === '?' && y === '?') workingTree.untracked++;\n else if (x !== ' ' && x !== '?') workingTree.staged++;\n if (y !== ' ' && y !== '?') workingTree.modified++;\n }\n\n // Diff stats\n let diffStats: GitDiffStats | null = null;\n const diffLine = val(7);\n if (diffLine) {\n const files = diffLine.match(/(\\d+) file/);\n const ins = diffLine.match(/(\\d+) insertion/);\n const del = diffLine.match(/(\\d+) deletion/);\n diffStats = {\n filesChanged: files ? parseInt(files[1], 10) : 0,\n insertions: ins ? parseInt(ins[1], 10) : 0,\n deletions: del ? parseInt(del[1], 10) : 0,\n };\n }\n\n return { commits, branches, remotes, tags, stashCount, currentBranch, diffStats, workingTree };\n}\n\n// Keep backward compat\nexport async function getGitLog(\n repositoryPath: string,\n limit = 10\n): Promise<{ entries: GitLogEntry[]; error?: string }> {\n const info = await getGitRepoInfo(repositoryPath, limit);\n return { entries: info.commits, error: info.error };\n}\n","export {getAllAgentModels as '00b180d011490b1ccf4fc15d0270e25ee7da2b75e3'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '60a9fbfebbe9768829b0f32c5c6f1c4238587f373c'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '008723d0022a480ad850258f4b4a0a65104336f53f'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '408e3399381e0aef7cebdffaece430465484c3566e'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '004e351b31209f435c7dbe30641b427c045b24f500'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '4072c166c340699eeacdd542186db91d55021d8237'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '40d05f22b2e6d8db7fa0251fb2cecd5b893f6fe2e4'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '4053150c9d3be3414b8faf1b5879180427986efbd7'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '40fce4a3e760ccf1d33cc0e12870160afad7554b0c'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '4045be845b4825585b911344c630459ff491aa6f1b'} from 'ACTIONS_MODULE9'\nexport {openIde as '407fe9068fcacfd9ce619c5081ff4e3fbd0d3d59f9'} from 'ACTIONS_MODULE10'\nexport {openShell as '4052e581e36a17ba4d0c0e087b76853d7e2fc2fba6'} from 'ACTIONS_MODULE11'\nexport {openFolder as '40a7bc23d19822ec40496d45f48e80a87979cd4c9b'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '402ebb0a39003bfc2596c3a6a40f8c6889113eb253'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '4012d31287012f8a8f7a1f59595f20e126128a7b0d'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '008c50387d6164523086509c47a4ec6e70842ea4b8'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '000590ba10a289f69ef7346668a94092029db09d19'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00f988729506fa2c1769e9ac45512b2ec0c0e69997'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '407d82d5ab063f7cfd7e994be147d7f8d0270cdef9'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '78f67770a07233a94389161b94eb3f102b67307d61'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '40330505d44b924f37036d9765747931f6fe91e9d8'} from 'ACTIONS_MODULE20'\nexport {startFeature as '4095b1e52c5ca823b33b0aba1d786488651cea47c9'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '40686db5898f8076055de49256f65eec7b9314df24'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '4026b868f0f4c785ff0985545b508d21d97b86f431'} from 'ACTIONS_MODULE23'\nexport {addRepository as '4019dac7161470354dfa0bfa2782dc1eac1ba42507'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '40fa3d9780de6717c6a5fcc904ee15e78d0577f63e'} from 'ACTIONS_MODULE25'\nexport {getFeatureMetadata as '40992a6e84a0446871e82bc98138bcf6d8531691fd'} from 'ACTIONS_MODULE26'\nexport {getGitRepoInfo as '6016d32a7fcc1eaef7cc5c347598d9c0f356154d1c'} from 'ACTIONS_MODULE27'\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ module.exports=[35556,a=>{"use strict";var b=a.i(92658),c=a.i(74533),d=a.i(12057),e=a.i(12581);let f=(0,d.promisify)(c.execFile);async function g(a,b){let{stdout:c}=await f("git",b,{cwd:a,timeout:5e3});return c.trim()}async function h(a,b=8){if(!a.trim())return{commits:[],branches:[],remotes:[],tags:[],stashCount:0,currentBranch:"",diffStats:null,workingTree:{staged:0,modified:0,untracked:0},error:"Repository path is required"};let c=await Promise.allSettled([g(a,["log",`--max-count=${b}`,"--format=%H%x00%h%x00%s%x00%an%x00%cr","--no-color"]),g(a,["branch","--show-current"]),g(a,["branch","--sort=-committerdate","--format=%(HEAD)%(refname:short)%00%(committerdate:relative)","--no-color"]),g(a,["remote","-v"]),g(a,["tag","--sort=-creatordate","-l","--format=%(refname:short)"]),g(a,["stash","list"]),g(a,["status","--porcelain"]),g(a,["diff","--shortstat"])]),d=a=>"fulfilled"===c[a].status?c[a].value:"",e=d(0).split("\n").filter(Boolean).map(a=>{let[b,c,d,e,f]=a.split("\0");return{hash:b,shortHash:c,subject:d,author:e,relativeDate:f}}),f=d(1);e.length>0&&f&&(e[0].branch=f);let i=d(2).split("\n").filter(Boolean).slice(0,10).map(a=>{let b=a.startsWith("*"),[c,d]=(b?a.slice(1):a).split("\0");return{name:c.trim(),isCurrent:b,lastCommitDate:d?.trim()??""}}),j=new Map;d(3).split("\n").filter(Boolean).forEach(a=>{let b=a.match(/^(\S+)\s+(\S+)\s+\(fetch\)/);if(b){let a=b[2].replace(/\/\/[^@]+@/,"//").replace(/x-access-token:[^@]+@/,"");j.set(b[1],a)}});let k=Array.from(j,([a,b])=>({name:a,url:b})),l=d(4).split("\n").filter(Boolean).slice(0,5),m=d(5).split("\n").filter(Boolean).length,n=d(6).split("\n").filter(Boolean),o={staged:0,modified:0,untracked:0};for(let a of n){let b=a[0],c=a[1];"?"===b&&"?"===c?o.untracked++:" "!==b&&"?"!==b&&o.staged++," "!==c&&"?"!==c&&o.modified++}let p=null,q=d(7);if(q){let a=q.match(/(\d+) file/),b=q.match(/(\d+) insertion/),c=q.match(/(\d+) deletion/);p={filesChanged:a?parseInt(a[1],10):0,insertions:b?parseInt(b[1],10):0,deletions:c?parseInt(c[1],10):0}}return{commits:e,branches:i,remotes:k,tags:l,stashCount:m,currentBranch:f,diffStats:p,workingTree:o}}async function i(a,b=10){let c=await h(a,b);return{entries:c.commits,error:c.error}}(0,e.ensureServerEntryExports)([h,i]),(0,b.registerServerReference)(h,"6016d32a7fcc1eaef7cc5c347598d9c0f356154d1c",null),(0,b.registerServerReference)(i,"602a87ab845da0fe47bb667ce8732a11a0e8699f27",null),a.s(["getGitRepoInfo",()=>h])},81799,a=>{"use strict";var b=a.i(23504),c=a.i(27900),d=a.i(12513),e=a.i(73101),f=a.i(54775),g=a.i(65324),h=a.i(33841),i=a.i(46646),j=a.i(68670),k=a.i(85321),l=a.i(84095),m=a.i(56799),n=a.i(80496),o=a.i(93225),p=a.i(94691),q=a.i(41872),r=a.i(9959),s=a.i(79124),t=a.i(10528),u=a.i(50845),v=a.i(26604),w=a.i(54723),x=a.i(18942),y=a.i(42886),z=a.i(49560),A=a.i(39353),B=a.i(29207),C=a.i(35556);a.s([],4251),a.i(4251),a.s(["000590ba10a289f69ef7346668a94092029db09d19",()=>r.checkAgentAuth,"004e351b31209f435c7dbe30641b427c045b24f500",()=>f.listGitHubOrganizations,"008723d0022a480ad850258f4b4a0a65104336f53f",()=>d.pickFolder,"008c50387d6164523086509c47a4ec6e70842ea4b8",()=>q.isAgentSetupComplete,"00b180d011490b1ccf4fc15d0270e25ee7da2b75e3",()=>b.getAllAgentModels,"00f988729506fa2c1769e9ac45512b2ec0c0e69997",()=>s.checkToolStatus,"4012d31287012f8a8f7a1f59595f20e126128a7b0d",()=>p.getDeploymentLogs,"4019dac7161470354dfa0bfa2782dc1eac1ba42507",()=>z.addRepository,"4026b868f0f4c785ff0985545b508d21d97b86f431",()=>y.unarchiveFeature,"402ebb0a39003bfc2596c3a6a40f8c6889113eb253",()=>o.syncRepository,"40330505d44b924f37036d9765747931f6fe91e9d8",()=>v.resumeFeature,"4045be845b4825585b911344c630459ff491aa6f1b",()=>k.getDeploymentStatus,"4052e581e36a17ba4d0c0e087b76853d7e2fc2fba6",()=>m.openShell,"4053150c9d3be3414b8faf1b5879180427986efbd7",()=>i.deployRepository,"40686db5898f8076055de49256f65eec7b9314df24",()=>x.stopFeature,"4072c166c340699eeacdd542186db91d55021d8237",()=>g.importGitHubRepository,"407d82d5ab063f7cfd7e994be147d7f8d0270cdef9",()=>t.archiveFeature,"407fe9068fcacfd9ce619c5081ff4e3fbd0d3d59f9",()=>l.openIde,"408e3399381e0aef7cebdffaece430465484c3566e",()=>e.listGitHubRepositories,"4095b1e52c5ca823b33b0aba1d786488651cea47c9",()=>w.startFeature,"40992a6e84a0446871e82bc98138bcf6d8531691fd",()=>B.getFeatureMetadata,"40a7bc23d19822ec40496d45f48e80a87979cd4c9b",()=>n.openFolder,"40d05f22b2e6d8db7fa0251fb2cecd5b893f6fe2e4",()=>h.deployFeature,"40fa3d9780de6717c6a5fcc904ee15e78d0577f63e",()=>A.deleteRepository,"40fce4a3e760ccf1d33cc0e12870160afad7554b0c",()=>j.stopDeployment,"6016d32a7fcc1eaef7cc5c347598d9c0f356154d1c",()=>C.getGitRepoInfo,"60a9fbfebbe9768829b0f32c5c6f1c4238587f373c",()=>c.updateAgentAndModel,"78f67770a07233a94389161b94eb3f102b67307d61",()=>u.deleteFeature],81799)}];
2
+
3
+ //# sourceMappingURL=src_presentation_web_e3a30e30._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/get-git-log.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/repository/%5BrepositoryId%5D/%5Btab%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execFileAsync = promisify(execFile);\n\nasync function git(cwd: string, args: string[]): Promise<string> {\n const { stdout } = await execFileAsync('git', args, { cwd, timeout: 5000 });\n return stdout.trim();\n}\n\nexport interface GitLogEntry {\n hash: string;\n shortHash: string;\n subject: string;\n author: string;\n relativeDate: string;\n branch?: string;\n}\n\nexport interface GitBranchInfo {\n name: string;\n isCurrent: boolean;\n lastCommitDate: string;\n}\n\nexport interface GitRemoteInfo {\n name: string;\n url: string;\n}\n\nexport interface GitWorkingTreeStatus {\n staged: number;\n modified: number;\n untracked: number;\n}\n\nexport interface GitDiffStats {\n filesChanged: number;\n insertions: number;\n deletions: number;\n}\n\nexport interface GitRepoInfo {\n commits: GitLogEntry[];\n branches: GitBranchInfo[];\n remotes: GitRemoteInfo[];\n tags: string[];\n stashCount: number;\n currentBranch: string;\n diffStats: GitDiffStats | null;\n workingTree: GitWorkingTreeStatus;\n error?: string;\n}\n\nexport async function getGitRepoInfo(\n repositoryPath: string,\n commitLimit = 8\n): Promise<GitRepoInfo> {\n const empty: GitRepoInfo = {\n commits: [],\n branches: [],\n remotes: [],\n tags: [],\n stashCount: 0,\n currentBranch: '',\n diffStats: null,\n workingTree: { staged: 0, modified: 0, untracked: 0 },\n };\n\n if (!repositoryPath.trim()) {\n return { ...empty, error: 'Repository path is required' };\n }\n\n const results = await Promise.allSettled([\n // 0: commits\n git(repositoryPath, [\n 'log',\n `--max-count=${commitLimit}`,\n '--format=%H%x00%h%x00%s%x00%an%x00%cr',\n '--no-color',\n ]),\n // 1: current branch\n git(repositoryPath, ['branch', '--show-current']),\n // 2: branches with dates\n git(repositoryPath, [\n 'branch',\n '--sort=-committerdate',\n '--format=%(HEAD)%(refname:short)%00%(committerdate:relative)',\n '--no-color',\n ]),\n // 3: remotes\n git(repositoryPath, ['remote', '-v']),\n // 4: tags (recent 5)\n git(repositoryPath, ['tag', '--sort=-creatordate', '-l', '--format=%(refname:short)']),\n // 5: stash count\n git(repositoryPath, ['stash', 'list']),\n // 6: working tree status\n git(repositoryPath, ['status', '--porcelain']),\n // 7: diff stats (uncommitted)\n git(repositoryPath, ['diff', '--shortstat']),\n ]);\n\n const val = (i: number) => (results[i].status === 'fulfilled' ? results[i].value : '');\n\n // Parse commits\n const commits: GitLogEntry[] = val(0)\n .split('\\n')\n .filter(Boolean)\n .map((line: string) => {\n const [hash, shortHash, subject, author, relativeDate] = line.split('\\0');\n return { hash, shortHash, subject, author, relativeDate };\n });\n\n const currentBranch = val(1);\n if (commits.length > 0 && currentBranch) {\n commits[0].branch = currentBranch;\n }\n\n // Parse branches\n const branches: GitBranchInfo[] = val(2)\n .split('\\n')\n .filter(Boolean)\n .slice(0, 10)\n .map((line: string) => {\n const isCurrent = line.startsWith('*');\n const clean = isCurrent ? line.slice(1) : line;\n const [name, lastCommitDate] = clean.split('\\0');\n return { name: name.trim(), isCurrent, lastCommitDate: lastCommitDate?.trim() ?? '' };\n });\n\n // Parse remotes (dedup fetch/push)\n const remoteMap = new Map<string, string>();\n val(3)\n .split('\\n')\n .filter(Boolean)\n .forEach((line: string) => {\n const match = line.match(/^(\\S+)\\s+(\\S+)\\s+\\(fetch\\)/);\n if (match) {\n // Strip credentials/tokens from URL before sending to client\n const sanitized = match[2].replace(/\\/\\/[^@]+@/, '//').replace(/x-access-token:[^@]+@/, '');\n remoteMap.set(match[1], sanitized);\n }\n });\n const remotes: GitRemoteInfo[] = Array.from(remoteMap, ([name, url]) => ({ name, url }));\n\n // Parse tags (top 5)\n const tags = val(4).split('\\n').filter(Boolean).slice(0, 5);\n\n // Stash count\n const stashCount = val(5).split('\\n').filter(Boolean).length;\n\n // Working tree status\n const statusLines = val(6).split('\\n').filter(Boolean);\n const workingTree: GitWorkingTreeStatus = { staged: 0, modified: 0, untracked: 0 };\n for (const line of statusLines) {\n const x = line[0];\n const y = line[1];\n if (x === '?' && y === '?') workingTree.untracked++;\n else if (x !== ' ' && x !== '?') workingTree.staged++;\n if (y !== ' ' && y !== '?') workingTree.modified++;\n }\n\n // Diff stats\n let diffStats: GitDiffStats | null = null;\n const diffLine = val(7);\n if (diffLine) {\n const files = diffLine.match(/(\\d+) file/);\n const ins = diffLine.match(/(\\d+) insertion/);\n const del = diffLine.match(/(\\d+) deletion/);\n diffStats = {\n filesChanged: files ? parseInt(files[1], 10) : 0,\n insertions: ins ? parseInt(ins[1], 10) : 0,\n deletions: del ? parseInt(del[1], 10) : 0,\n };\n }\n\n return { commits, branches, remotes, tags, stashCount, currentBranch, diffStats, workingTree };\n}\n\n// Keep backward compat\nexport async function getGitLog(\n repositoryPath: string,\n limit = 10\n): Promise<{ entries: GitLogEntry[]; error?: string }> {\n const info = await getGitRepoInfo(repositoryPath, limit);\n return { entries: info.commits, error: info.error };\n}\n","export {getAllAgentModels as '00b180d011490b1ccf4fc15d0270e25ee7da2b75e3'} from 'ACTIONS_MODULE0'\nexport {updateAgentAndModel as '60a9fbfebbe9768829b0f32c5c6f1c4238587f373c'} from 'ACTIONS_MODULE1'\nexport {pickFolder as '008723d0022a480ad850258f4b4a0a65104336f53f'} from 'ACTIONS_MODULE2'\nexport {listGitHubRepositories as '408e3399381e0aef7cebdffaece430465484c3566e'} from 'ACTIONS_MODULE3'\nexport {listGitHubOrganizations as '004e351b31209f435c7dbe30641b427c045b24f500'} from 'ACTIONS_MODULE4'\nexport {importGitHubRepository as '4072c166c340699eeacdd542186db91d55021d8237'} from 'ACTIONS_MODULE5'\nexport {deployFeature as '40d05f22b2e6d8db7fa0251fb2cecd5b893f6fe2e4'} from 'ACTIONS_MODULE6'\nexport {deployRepository as '4053150c9d3be3414b8faf1b5879180427986efbd7'} from 'ACTIONS_MODULE7'\nexport {stopDeployment as '40fce4a3e760ccf1d33cc0e12870160afad7554b0c'} from 'ACTIONS_MODULE8'\nexport {getDeploymentStatus as '4045be845b4825585b911344c630459ff491aa6f1b'} from 'ACTIONS_MODULE9'\nexport {openIde as '407fe9068fcacfd9ce619c5081ff4e3fbd0d3d59f9'} from 'ACTIONS_MODULE10'\nexport {openShell as '4052e581e36a17ba4d0c0e087b76853d7e2fc2fba6'} from 'ACTIONS_MODULE11'\nexport {openFolder as '40a7bc23d19822ec40496d45f48e80a87979cd4c9b'} from 'ACTIONS_MODULE12'\nexport {syncRepository as '402ebb0a39003bfc2596c3a6a40f8c6889113eb253'} from 'ACTIONS_MODULE13'\nexport {getDeploymentLogs as '4012d31287012f8a8f7a1f59595f20e126128a7b0d'} from 'ACTIONS_MODULE14'\nexport {isAgentSetupComplete as '008c50387d6164523086509c47a4ec6e70842ea4b8'} from 'ACTIONS_MODULE15'\nexport {checkAgentAuth as '000590ba10a289f69ef7346668a94092029db09d19'} from 'ACTIONS_MODULE16'\nexport {checkToolStatus as '00f988729506fa2c1769e9ac45512b2ec0c0e69997'} from 'ACTIONS_MODULE17'\nexport {archiveFeature as '407d82d5ab063f7cfd7e994be147d7f8d0270cdef9'} from 'ACTIONS_MODULE18'\nexport {deleteFeature as '78f67770a07233a94389161b94eb3f102b67307d61'} from 'ACTIONS_MODULE19'\nexport {resumeFeature as '40330505d44b924f37036d9765747931f6fe91e9d8'} from 'ACTIONS_MODULE20'\nexport {startFeature as '4095b1e52c5ca823b33b0aba1d786488651cea47c9'} from 'ACTIONS_MODULE21'\nexport {stopFeature as '40686db5898f8076055de49256f65eec7b9314df24'} from 'ACTIONS_MODULE22'\nexport {unarchiveFeature as '4026b868f0f4c785ff0985545b508d21d97b86f431'} from 'ACTIONS_MODULE23'\nexport {addRepository as '4019dac7161470354dfa0bfa2782dc1eac1ba42507'} from 'ACTIONS_MODULE24'\nexport {deleteRepository as '40fa3d9780de6717c6a5fcc904ee15e78d0577f63e'} from 'ACTIONS_MODULE25'\nexport {getFeatureMetadata as '40992a6e84a0446871e82bc98138bcf6d8531691fd'} from 'ACTIONS_MODULE26'\nexport {getGitRepoInfo as '6016d32a7fcc1eaef7cc5c347598d9c0f356154d1c'} from 'ACTIONS_MODULE27'\n"],"names":[],"mappings":"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"}