@shepai/cli 1.72.7-pr187.86f6440 → 1.72.8-pr216.7a0cb6c

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 (261) hide show
  1. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts +3 -0
  2. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.js +3 -0
  4. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +6 -0
  5. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
  6. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +3 -0
  7. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +3 -0
  8. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +4 -1
  9. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -0
  10. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +3 -0
  11. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gemini-cli.json +3 -0
  12. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +3 -0
  13. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +3 -0
  14. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/iterm2.json +3 -0
  15. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/kitty.json +3 -0
  16. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/tmux.json +3 -0
  17. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +3 -0
  18. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -0
  19. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +3 -0
  20. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -0
  21. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +2 -1
  22. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  23. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +3 -3
  24. package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/features/tools/tool-card.js +16 -11
  26. package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/features/tools/tool-card.stories.js +18 -0
  28. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +12 -5
  30. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts.map +1 -1
  31. package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.js +3 -0
  32. package/dist/src/presentation/web/components/features/tools/tools-page-client.js +3 -3
  33. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.js +15 -0
  35. package/dist/tsconfig.build.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/web/.next/BUILD_ID +1 -1
  38. package/web/.next/build-manifest.json +2 -2
  39. package/web/.next/cache/.previewinfo +1 -1
  40. package/web/.next/cache/.rscinfo +1 -1
  41. package/web/.next/cache/.tsbuildinfo +1 -1
  42. package/web/.next/cache/config.json +3 -3
  43. package/web/.next/fallback-build-manifest.json +2 -2
  44. package/web/.next/prerender-manifest.json +3 -3
  45. package/web/.next/required-server-files.js +1 -1
  46. package/web/.next/required-server-files.json +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
  48. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
  51. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  52. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  54. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
  57. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  58. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  59. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
  60. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  61. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
  63. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  64. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  66. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  67. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/app/_global-error.html +2 -2
  69. package/web/.next/server/app/_global-error.rsc +1 -1
  70. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  71. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  72. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  73. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  74. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  75. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  76. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  77. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  79. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  80. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  82. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  83. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  85. package/web/.next/server/app/version/page.js.nft.json +1 -1
  86. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  88. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  89. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
  90. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
  92. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  94. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
  95. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js +3 -0
  106. package/web/.next/server/chunks/ssr/{[root-of-the-server]__c04c8ff2._.js.map → [root-of-the-server]__cbae9863._.js.map} +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js.map +1 -0
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js +3 -0
  110. package/web/.next/server/chunks/ssr/{[root-of-the-server]__c134fc13._.js.map → [root-of-the-server]__e5e09f72._.js.map} +1 -1
  111. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  112. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/_1978f325._.js +7 -0
  114. package/web/.next/server/chunks/ssr/_1978f325._.js.map +1 -0
  115. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  116. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/{_a2a86eed._.js → _6ac9e55f._.js} +2 -2
  118. package/web/.next/server/chunks/ssr/{_a2a86eed._.js.map → _6ac9e55f._.js.map} +1 -1
  119. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  120. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
  122. package/web/.next/server/chunks/ssr/{_797dbf60._.js.map → _9f940437._.js.map} +1 -1
  123. package/web/.next/server/chunks/ssr/{_dd1c549f._.js → _e806976d._.js} +2 -2
  124. package/web/.next/server/chunks/ssr/_e806976d._.js.map +1 -0
  125. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
  126. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
  128. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
  130. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
  132. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
  134. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  136. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  137. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -1
  139. package/web/.next/server/pages/500.html +2 -2
  140. package/web/.next/server/server-reference-manifest.js +1 -1
  141. package/web/.next/server/server-reference-manifest.json +20 -20
  142. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  143. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  144. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  145. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  146. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
  147. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  148. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  149. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
  150. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  151. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  152. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  153. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  154. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  181. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  182. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  184. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  186. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
  188. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  190. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  191. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  192. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  193. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  194. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  195. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  196. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js +3 -0
  197. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
  198. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js +3 -0
  199. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_1978f325._.js +7 -0
  201. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_a2a86eed._.js → _6ac9e55f._.js} +2 -2
  203. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  204. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
  205. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_dd1c549f._.js → _e806976d._.js} +2 -2
  206. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
  207. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
  208. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
  209. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
  210. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
  211. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  212. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
  213. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  214. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  215. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +20 -20
  216. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +13 -1
  217. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.stories.tsx +18 -0
  218. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.tsx +41 -29
  219. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.stories.tsx +3 -0
  220. package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.tsx +59 -23
  221. package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.stories.tsx +15 -0
  222. package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.tsx +3 -3
  223. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  224. package/web/.next/static/chunks/18b3e6363932ceed.js +1 -0
  225. package/web/.next/static/chunks/413d5b4c398afa48.js +1 -0
  226. package/web/.next/static/chunks/4a3b3cfcc85e7254.js +1 -0
  227. package/web/.next/static/chunks/67f2a7a5e8dc358a.css +2 -0
  228. package/web/.next/static/chunks/7ddf197e0f8808c0.js +1 -0
  229. package/web/.next/static/chunks/9215b6fb973482c5.js +1 -0
  230. package/web/.next/static/chunks/{bc08901495944d5d.js → 98a60f18dcc90e7a.js} +1 -1
  231. package/web/.next/static/chunks/{c81a2c46730b4afb.js → b33b0a2215d5bd3d.js} +1 -1
  232. package/web/.next/static/chunks/{3969f00d871743f5.js → b857f025c4af5811.js} +1 -1
  233. package/web/.next/static/chunks/{fe2a7112664de6d7.js → c3de2fd85ba568fb.js} +1 -1
  234. package/web/.next/static/chunks/{f5a543a8ccb7e8b9.js → c8ec2825197a1344.js} +1 -1
  235. package/web/.next/static/chunks/c92e1360ada8ca94.js +5 -0
  236. package/web/.next/static/chunks/{ccdb4b72cf686304.js → ed8e7bd6ac46b54e.js} +1 -1
  237. package/web/.next/trace +1 -1
  238. package/web/.next/trace-build +1 -1
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__aef6b3cd._.js +0 -3
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__aef6b3cd._.js.map +0 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__c04c8ff2._.js +0 -3
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__c134fc13._.js +0 -3
  243. package/web/.next/server/chunks/ssr/_4e5db14b._.js +0 -7
  244. package/web/.next/server/chunks/ssr/_4e5db14b._.js.map +0 -1
  245. package/web/.next/server/chunks/ssr/_797dbf60._.js +0 -3
  246. package/web/.next/server/chunks/ssr/_dd1c549f._.js.map +0 -1
  247. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aef6b3cd._.js +0 -3
  248. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c04c8ff2._.js +0 -3
  249. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c134fc13._.js +0 -3
  250. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4e5db14b._.js +0 -7
  251. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_797dbf60._.js +0 -3
  252. package/web/.next/static/chunks/603dfc7302d69eea.js +0 -1
  253. package/web/.next/static/chunks/6059a88955f582cc.js +0 -1
  254. package/web/.next/static/chunks/6a97d80f8c80abea.js +0 -5
  255. package/web/.next/static/chunks/938c21b0cefb2b1d.js +0 -1
  256. package/web/.next/static/chunks/b1ac668fe8c3cfe7.css +0 -2
  257. package/web/.next/static/chunks/bfa8014b2e37a6e3.js +0 -1
  258. package/web/.next/static/chunks/f089dd8f35a6d79c.js +0 -1
  259. /package/web/.next/static/{5-_wERRI1P-m4Tl0xR0UI → ZxFxAjRomx2WjLl0dOQ3Y}/_buildManifest.js +0 -0
  260. /package/web/.next/static/{5-_wERRI1P-m4Tl0xR0UI → ZxFxAjRomx2WjLl0dOQ3Y}/_clientMiddlewareManifest.json +0 -0
  261. /package/web/.next/static/{5-_wERRI1P-m4Tl0xR0UI → ZxFxAjRomx2WjLl0dOQ3Y}/_ssgManifest.js +0 -0
@@ -21,6 +21,9 @@ export interface ToolItem {
21
21
  documentationUrl: string;
22
22
  installCommand: string | undefined;
23
23
  status: ToolInstallationStatus;
24
+ author: string | undefined;
25
+ website: string | undefined;
26
+ platforms: ('linux' | 'darwin' | 'win32')[] | undefined;
24
27
  }
25
28
  export type ListToolsResult = ToolItem[];
26
29
  export declare class ListToolsUseCase {
@@ -1 +1 @@
1
- {"version":3,"file":"list-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/tools/list-tools.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC;AAWzC,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,qBAAqB;IAGxD,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;CAgC1C"}
1
+ {"version":3,"file":"list-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/tools/list-tools.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;CACzD;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC;AAWzC,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,qBAAqB;IAGxD,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;CAmC1C"}
@@ -57,6 +57,9 @@ let ListToolsUseCase = class ListToolsUseCase {
57
57
  documentationUrl: metadata.documentationUrl,
58
58
  installCommand: metadata.commands[currentPlatform],
59
59
  status,
60
+ author: metadata.author,
61
+ website: metadata.website,
62
+ platforms: metadata.platforms,
60
63
  };
61
64
  }));
62
65
  return results;
@@ -16,6 +16,12 @@ export interface ToolMetadata {
16
16
  description: string;
17
17
  /** Tool tags for grouping in listings. A tool can belong to multiple categories. */
18
18
  tags: ('ide' | 'cli-agent' | 'vcs' | 'terminal')[];
19
+ /** Company or developer name */
20
+ author?: string;
21
+ /** Main website/homepage URL (separate from documentation) */
22
+ website?: string;
23
+ /** Supported platforms (os.platform() values) */
24
+ platforms?: ('linux' | 'darwin' | 'win32')[];
19
25
  /** URL to the tool's icon/logo image */
20
26
  iconUrl?: string;
21
27
  /** Binary name to check with 'which' command (string or per-platform map) */
@@ -1 +1 @@
1
- {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
1
+ {"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAE7C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAmDD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
@@ -3,6 +3,9 @@
3
3
  "summary": "GPU-accelerated terminal emulator",
4
4
  "description": "Alacritty is a modern, GPU-accelerated terminal emulator focused on simplicity and performance. Cross-platform (macOS and Linux). On older Linux distributions, you may need to add a PPA before installing via apt.",
5
5
  "tags": ["terminal"],
6
+ "author": "Alacritty Contributors",
7
+ "website": "https://alacritty.org",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/alacritty",
7
10
  "binary": "alacritty",
8
11
  "packageManager": "brew",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered agentic development platform",
4
4
  "description": "Google Antigravity is an AI-powered platform that enables agentic development workflows, helping developers build intelligent applications with autonomous agents.",
5
5
  "tags": ["ide"],
6
+ "author": "Google",
7
+ "website": "https://antigravity.google",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/google",
7
10
  "binary": {
8
11
  "linux": "antigravity",
@@ -2,7 +2,10 @@
2
2
  "name": "Claude Code",
3
3
  "summary": "AI-powered code assistant from Anthropic",
4
4
  "description": "Claude Code is an AI-powered code assistant from Anthropic that helps you write, understand, and debug code with advanced AI capabilities.",
5
- "tags": ["ide", "cli-agent"],
5
+ "tags": ["cli-agent"],
6
+ "author": "Anthropic",
7
+ "website": "https://claude.ai/code",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/claude",
7
10
  "binary": "claude",
8
11
  "packageManager": "curl",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered terminal coding agent",
4
4
  "description": "Cursor CLI is a terminal-based AI coding agent that brings conversational AI assistance directly to your command line for any IDE or terminal.",
5
5
  "tags": ["cli-agent"],
6
+ "author": "Anysphere",
7
+ "website": "https://cursor.com",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/cursor",
7
10
  "binary": "cursor-agent",
8
11
  "packageManager": "curl",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered code editor for efficient development",
4
4
  "description": "Cursor is an AI-powered code editor built on VS Code, designed to streamline development workflows with advanced AI-assisted coding capabilities.",
5
5
  "tags": ["ide"],
6
+ "author": "Anysphere",
7
+ "website": "https://cursor.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/cursor",
7
10
  "binary": "cursor",
8
11
  "packageManager": "manual",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered coding agent from Google",
4
4
  "description": "Gemini CLI is an open-source AI coding agent from Google that brings the power of Gemini directly to your terminal for code generation, debugging, and development workflows.",
5
5
  "tags": ["cli-agent"],
6
+ "author": "Google",
7
+ "website": "https://github.com/google-gemini/gemini-cli",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/googlegemini",
7
10
  "binary": "gemini",
8
11
  "packageManager": "npm",
@@ -3,6 +3,9 @@
3
3
  "summary": "GitHub's official command-line tool",
4
4
  "description": "GitHub CLI brings GitHub to your terminal. Manage pull requests, issues, repositories, workflows, and more without leaving the command line.",
5
5
  "tags": ["vcs"],
6
+ "author": "GitHub",
7
+ "website": "https://cli.github.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/github",
7
10
  "binary": "gh",
8
11
  "packageManager": "apt",
@@ -3,6 +3,9 @@
3
3
  "summary": "Distributed version control system",
4
4
  "description": "Git is a free and open-source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.",
5
5
  "tags": ["vcs"],
6
+ "author": "Git Community",
7
+ "website": "https://git-scm.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/git",
7
10
  "binary": "git",
8
11
  "packageManager": "apt",
@@ -3,6 +3,9 @@
3
3
  "summary": "macOS terminal replacement",
4
4
  "description": "iTerm2 is a feature-rich replacement for the default macOS Terminal.app with split panes, search, autocomplete, and extensive customization. macOS only. Verified by checking for the iTerm.app bundle in /Applications.",
5
5
  "tags": ["terminal"],
6
+ "author": "George Nachman",
7
+ "website": "https://iterm2.com",
8
+ "platforms": ["darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/iterm2",
7
10
  "binary": "iterm2",
8
11
  "packageManager": "brew",
@@ -3,6 +3,9 @@
3
3
  "summary": "Fast, GPU-based terminal emulator",
4
4
  "description": "Kitty is a fast, feature-rich, GPU-based terminal emulator with advanced graphics support, extensibility via kittens, and modern rendering. Cross-platform (macOS and Linux).",
5
5
  "tags": ["terminal"],
6
+ "author": "Kovid Goyal",
7
+ "website": "https://sw.kovidgoyal.net/kitty",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://raw.githubusercontent.com/kovidgoyal/kitty/master/logo/kitty.svg",
7
10
  "binary": "kitty",
8
11
  "packageManager": "brew",
@@ -3,6 +3,9 @@
3
3
  "summary": "Terminal multiplexer for session management",
4
4
  "description": "tmux is a terminal multiplexer that lets you create, manage, and switch between multiple terminal sessions. Ideal for remote development, persistent sessions, and multi-pane workflows. Cross-platform (macOS and Linux).",
5
5
  "tags": ["terminal"],
6
+ "author": "tmux Contributors",
7
+ "website": "https://tmux.github.io",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/tmux",
7
10
  "binary": "tmux",
8
11
  "packageManager": "brew",
@@ -3,6 +3,9 @@
3
3
  "summary": "Lightweight but powerful source code editor",
4
4
  "description": "Microsoft Visual Studio Code is a free, open-source code editor with built-in support for debugging, version control, and extensions for enhanced development workflows.",
5
5
  "tags": ["ide"],
6
+ "author": "Microsoft",
7
+ "website": "https://code.visualstudio.com",
8
+ "platforms": ["linux", "darwin", "win32"],
6
9
  "iconUrl": "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg",
7
10
  "binary": "code",
8
11
  "packageManager": "apt",
@@ -3,6 +3,9 @@
3
3
  "summary": "Modern terminal with AI features",
4
4
  "description": "Warp is a modern terminal with AI-powered features, intelligent command suggestions, and a collaborative workflow. macOS only — Linux users can install manually via AppImage from https://www.warp.dev/.",
5
5
  "tags": ["terminal"],
6
+ "author": "Warp",
7
+ "website": "https://www.warp.dev",
8
+ "platforms": ["darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/warp",
7
10
  "binary": "warp",
8
11
  "packageManager": "brew",
@@ -3,6 +3,9 @@
3
3
  "summary": "AI-powered code editor by Codeium",
4
4
  "description": "Windsurf is an AI-powered code editor by Codeium that provides intelligent code assistance and automation features for modern development.",
5
5
  "tags": ["ide"],
6
+ "author": "Codeium",
7
+ "website": "https://codeium.com/windsurf",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/windsurf",
7
10
  "binary": "windsurf",
8
11
  "packageManager": "apt",
@@ -3,6 +3,9 @@
3
3
  "summary": "High-performance code editor written in Rust",
4
4
  "description": "Zed is a high-performance code editor written in Rust, designed for speed and collaboration with modern developer workflows.",
5
5
  "tags": ["ide"],
6
+ "author": "Zed Industries",
7
+ "website": "https://zed.dev",
8
+ "platforms": ["linux", "darwin"],
6
9
  "iconUrl": "https://cdn.simpleicons.org/zedindustries",
7
10
  "binary": "zed",
8
11
  "packageManager": "curl",
@@ -9,6 +9,7 @@ export interface BaseDrawerProps extends VariantProps<typeof drawerVariants> {
9
9
  modal?: boolean;
10
10
  /** When true, clicking anywhere outside the drawer closes it, ignoring `data-no-drawer-close` guards. */
11
11
  dismissOnOutsideClick?: boolean;
12
+ title?: string;
12
13
  header?: React.ReactNode;
13
14
  children: React.ReactNode;
14
15
  footer?: React.ReactNode;
@@ -16,6 +17,6 @@ export interface BaseDrawerProps extends VariantProps<typeof drawerVariants> {
16
17
  'data-testid'?: string;
17
18
  deployTarget?: DeployActionInput;
18
19
  }
19
- export declare function BaseDrawer({ open, onClose, modal, dismissOnOutsideClick, size, header, children, footer, className, 'data-testid': testId, deployTarget, }: BaseDrawerProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function BaseDrawer({ open, onClose, modal, dismissOnOutsideClick, title, size, header, children, footer, className, 'data-testid': testId, deployTarget, }: BaseDrawerProps): import("react/jsx-runtime").JSX.Element;
20
21
  export {};
21
22
  //# sourceMappingURL=base-drawer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAalE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAUlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,2CA6EjB"}
1
+ {"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAelE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAUlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,2CAqFjB"}
@@ -6,7 +6,7 @@ import { cva } from 'class-variance-authority';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { ActionButton } from '../../common/action-button/index.js';
8
8
  import { DeploymentStatusBadge } from '../../common/deployment-status-badge/index.js';
9
- import { Drawer, DrawerContent, DrawerHeader, DrawerFooter, DrawerOverlay, } from '../../ui/drawer.js';
9
+ import { Drawer, DrawerContent, DrawerHeader, DrawerFooter, DrawerOverlay, DrawerTitle, DrawerDescription, } from '../../ui/drawer.js';
10
10
  import { Separator } from '../../ui/separator.js';
11
11
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
12
12
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
@@ -22,7 +22,7 @@ const drawerVariants = cva('', {
22
22
  size: 'sm',
23
23
  },
24
24
  });
25
- export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick = false, size, header, children, footer, className, 'data-testid': testId, deployTarget, }) {
25
+ export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick = false, title = 'Drawer', size, header, children, footer, className, 'data-testid': testId, deployTarget, }) {
26
26
  const contentRef = useRef(null);
27
27
  // Close when clicking outside the drawer panel (no overlay needed — canvas stays draggable).
28
28
  // Uses `click` (not `pointerdown`) so canvas drags don't trigger this.
@@ -53,7 +53,7 @@ export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick
53
53
  return (_jsxs(Drawer, { direction: "right", modal: modal, handleOnly: true, open: open, onOpenChange: (isOpen) => {
54
54
  if (!isOpen)
55
55
  onClose();
56
- }, children: [modal ? _jsx(DrawerOverlay, {}) : null, _jsxs(DrawerContent, { ref: contentRef, direction: "right", showCloseButton: false, className: cn(drawerVariants({ size }), className), "data-testid": testId, onInteractOutside: (e) => e.preventDefault(), children: [_jsxs("button", { type: "button", "aria-label": "Close", onClick: onClose, className: "ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden", "data-testid": testId ? `${testId}-close-button` : undefined, children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] }), header ? _jsx(DrawerHeader, { className: "shrink-0", children: header }) : null, header ? _jsx(Separator, {}) : null, featureFlags.envDeploy && deployTarget ? _jsx(DeployBar, { deployTarget: deployTarget }) : null, _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: children }), footer ? _jsx(DrawerFooter, { className: "shrink-0", children: footer }) : null] })] }));
56
+ }, children: [modal ? _jsx(DrawerOverlay, {}) : null, _jsxs(DrawerContent, { ref: contentRef, direction: "right", showCloseButton: false, className: cn(drawerVariants({ size }), className), "data-testid": testId, onInteractOutside: modal ? undefined : (e) => e.preventDefault(), children: [_jsx(DrawerTitle, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(DrawerDescription, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsxs("button", { type: "button", "aria-label": "Close", onClick: onClose, className: "ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden", "data-testid": testId ? `${testId}-close-button` : undefined, children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] }), header ? _jsx(DrawerHeader, { className: "shrink-0", children: header }) : null, header ? _jsx(Separator, {}) : null, featureFlags.envDeploy && deployTarget ? _jsx(DeployBar, { deployTarget: deployTarget }) : null, _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: children }), footer ? _jsx(DrawerFooter, { className: "shrink-0", children: footer }) : null] })] }));
57
57
  }
58
58
  function DeployBar({ deployTarget }) {
59
59
  const deployAction = useDeployAction(deployTarget);
@@ -1 +1 @@
1
- {"version":3,"file":"tool-card.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-card.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAE7F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,aAAa,2CAuJrE"}
1
+ {"version":3,"file":"tool-card.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-card.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAE7F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,aAAa,2CAkKrE"}
@@ -1,8 +1,9 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useTransition } from 'react';
4
- import { Info, Loader2, Rocket, Download, Monitor, Terminal, GitBranch, CircleX, Check, Package, } from 'lucide-react';
4
+ import { Loader2, Rocket, Download, Monitor, Terminal, GitBranch, CircleX, Circle, CheckCircle2, Package, } from 'lucide-react';
5
5
  import { Button } from '../../ui/button.js';
6
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
6
7
  import { cn } from '../../../lib/utils.js';
7
8
  import { ToolDetailDrawer } from './tool-detail-drawer.js';
8
9
  const TAG_CONFIG = {
@@ -18,22 +19,26 @@ export function ToolCard({ tool, onRefresh, className }) {
18
19
  const isInstalled = tool.status.status === 'available';
19
20
  const isError = tool.status.status === 'error';
20
21
  const canLaunch = isInstalled && Boolean(tool.openDirectory);
21
- function handleLaunch() {
22
+ function handleLaunch(e) {
23
+ e.stopPropagation();
22
24
  startTransition(async () => {
23
25
  await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });
24
26
  });
25
27
  }
26
- return (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "tool-card", className: cn('bg-card group flex h-30 w-full flex-col rounded-lg border p-3 shadow-sm transition-shadow hover:shadow-md', className), children: [_jsxs("div", { className: "mb-2 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [tool.iconUrl ? (
28
+ function handleCardClick() {
29
+ setAutoStartInstall(false);
30
+ setDrawerOpen(true);
31
+ }
32
+ function handleInstallClick(e) {
33
+ e.stopPropagation();
34
+ setAutoStartInstall(tool.autoInstall);
35
+ setDrawerOpen(true);
36
+ }
37
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "tool-card", onClick: handleCardClick, className: cn('bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md', className), children: [_jsxs("div", { className: "mb-2 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [tool.iconUrl ? (
27
38
  /* eslint-disable-next-line @next/next/no-img-element */
28
39
  _jsx("img", { src: tool.iconUrl, alt: "", width: 20, height: 20, className: "shrink-0 dark:invert" })) : (_jsx(Package, { className: "text-muted-foreground h-5 w-5 shrink-0" })), _jsx("h3", { "data-testid": "tool-card-name", className: "truncate text-sm font-bold", children: tool.name })] }), _jsx("div", { "data-testid": "tool-card-tags", className: "flex shrink-0 items-center gap-1", children: tool.tags.map((tag) => {
29
40
  const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };
30
41
  const TagIcon = config.icon;
31
- return (_jsxs("span", { className: "bg-muted text-muted-foreground inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium", children: [_jsx(TagIcon, { className: "h-2.5 w-2.5" }), config.label] }, tag));
32
- }) })] }), _jsx("p", { "data-testid": "tool-card-summary", className: "text-muted-foreground mt-1 truncate text-xs", children: tool.summary }), _jsxs("div", { className: "mt-auto flex items-center justify-between pt-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [isError && tool.status.status === 'error' ? (_jsxs("span", { className: "flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400", title: tool.status.errorMessage, children: [_jsx(CircleX, { className: "h-3 w-3 shrink-0" }), tool.status.errorMessage ?? 'Error'] })) : isInstalled ? (_jsxs("span", { className: "flex items-center gap-1 text-[11px] text-emerald-600 dark:text-emerald-400", children: [_jsx(Check, { className: "h-3 w-3" }), "Installed"] })) : (_jsx("span", { className: "text-muted-foreground text-[10px]", children: "Not installed" })), tool.required ? (_jsx("span", { className: "text-muted-foreground text-[10px] italic", children: "Required" })) : null] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Button, { size: "sm", variant: "ghost", onClick: () => {
33
- setAutoStartInstall(false);
34
- setDrawerOpen(true);
35
- }, "aria-label": `View details for ${tool.name}`, "data-testid": "tool-card-info-button", className: "h-7 w-7 cursor-pointer rounded-md p-0", children: _jsx(Info, { className: "h-3.5 w-3.5" }) }), isInstalled && canLaunch ? (_jsxs(Button, { size: "sm", variant: "ghost", onClick: handleLaunch, disabled: isPending, "aria-label": `Launch ${tool.name}`, "data-testid": "tool-card-launch-button", className: "hover:bg-primary hover:text-primary-foreground h-7 cursor-pointer rounded-md px-3 text-xs", children: [isPending ? (_jsx(Loader2, { className: "mr-1 h-3 w-3 animate-spin" })) : (_jsx(Rocket, { className: "mr-1 h-3 w-3" })), "Launch"] })) : !isInstalled && !isError ? (_jsxs(Button, { size: "sm", variant: tool.autoInstall ? 'default' : 'outline', onClick: () => {
36
- setAutoStartInstall(tool.autoInstall);
37
- setDrawerOpen(true);
38
- }, "aria-label": `Install ${tool.name}`, "data-testid": "tool-card-install-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [_jsx(Download, { className: "mr-1 h-3 w-3" }), "Install"] })) : null] })] })] }), _jsx(ToolDetailDrawer, { tool: tool, open: drawerOpen, onClose: () => setDrawerOpen(false), onRefresh: onRefresh, autoStart: autoStartInstall })] }));
42
+ return (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]", children: [_jsx(TagIcon, { className: "h-2.5 w-2.5" }), config.label] }, tag));
43
+ }) })] }), _jsx("p", { "data-testid": "tool-card-summary", className: "text-muted-foreground mt-1 truncate text-xs", children: tool.summary }), _jsxs("div", { className: "mt-auto flex items-center justify-between pt-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [isError && tool.status.status === 'error' ? (_jsxs("span", { className: "flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400", title: tool.status.errorMessage, children: [_jsx(CircleX, { className: "h-3 w-3 shrink-0" }), tool.status.errorMessage ?? 'Error'] })) : isInstalled ? (_jsxs("span", { className: "flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400", children: [_jsx(CheckCircle2, { className: "h-3 w-3" }), "Installed"] })) : (_jsxs("span", { className: "text-muted-foreground flex items-center gap-1 text-[10px]", children: [_jsx(Circle, { className: "h-3 w-3" }), "Not installed"] })), tool.required ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _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" }) }), _jsx(TooltipContent, { side: "top", children: "This tool is required for Shep to function properly" })] }) })) : null] }), _jsx("div", { className: "flex items-center gap-1", children: isInstalled && canLaunch ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: handleLaunch, disabled: isPending, "aria-label": `Launch ${tool.name}`, "data-testid": "tool-card-launch-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [isPending ? (_jsx(Loader2, { className: "mr-1 h-3 w-3 animate-spin" })) : (_jsx(Rocket, { className: "mr-1 h-3 w-3" })), "Launch"] })) : !isInstalled && !isError ? (_jsxs(Button, { size: "sm", variant: "default", onClick: handleInstallClick, "aria-label": `Install ${tool.name}`, "data-testid": "tool-card-install-button", className: "h-7 cursor-pointer rounded-md px-3 text-xs", children: [_jsx(Download, { className: "mr-1 h-3 w-3" }), "Install"] })) : null })] })] }), _jsx(ToolDetailDrawer, { tool: tool, open: drawerOpen, onClose: () => setDrawerOpen(false), onRefresh: onRefresh, autoStart: autoStartInstall })] }));
39
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-card.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmGvC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAc/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAEjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAEhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAElC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAwBvB,CAAC"}
1
+ {"version":3,"file":"tool-card.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqHvC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAc/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KAEjC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAEhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAElC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAwBvB,CAAC"}
@@ -13,6 +13,9 @@ const installedIdeTool = {
13
13
  documentationUrl: 'https://cursor.sh',
14
14
  installCommand: 'brew install --cask cursor',
15
15
  status: { status: 'available', toolName: 'cursor' },
16
+ author: 'Anysphere',
17
+ website: 'https://cursor.com',
18
+ platforms: ['linux', 'darwin', 'win32'],
16
19
  };
17
20
  const installedNoLaunchTool = {
18
21
  id: 'claude-code',
@@ -27,6 +30,9 @@ const installedNoLaunchTool = {
27
30
  documentationUrl: 'https://claude.ai',
28
31
  installCommand: 'npm install -g @anthropic-ai/claude-code',
29
32
  status: { status: 'available', toolName: 'claude-code' },
33
+ author: 'Anthropic',
34
+ website: 'https://claude.ai/code',
35
+ platforms: ['linux', 'darwin'],
30
36
  };
31
37
  const missingAutoInstallTool = {
32
38
  id: 'aider',
@@ -41,6 +47,9 @@ const missingAutoInstallTool = {
41
47
  documentationUrl: 'https://aider.chat',
42
48
  installCommand: 'pip install aider-chat',
43
49
  status: { status: 'missing', toolName: 'aider' },
50
+ author: 'Paul Gauthier',
51
+ website: 'https://aider.chat',
52
+ platforms: ['linux', 'darwin', 'win32'],
44
53
  };
45
54
  const missingManualTool = {
46
55
  id: 'vscode',
@@ -55,6 +64,9 @@ const missingManualTool = {
55
64
  documentationUrl: 'https://code.visualstudio.com',
56
65
  installCommand: 'brew install --cask visual-studio-code',
57
66
  status: { status: 'missing', toolName: 'vscode' },
67
+ author: 'Microsoft',
68
+ website: 'https://code.visualstudio.com',
69
+ platforms: ['linux', 'darwin', 'win32'],
58
70
  };
59
71
  const cliAgentTool = {
60
72
  id: 'cursor-cli',
@@ -69,6 +81,9 @@ const cliAgentTool = {
69
81
  documentationUrl: 'https://cursor.sh',
70
82
  installCommand: 'curl https://cursor.com/install -fsS | bash',
71
83
  status: { status: 'available', toolName: 'cursor-cli' },
84
+ author: 'Anysphere',
85
+ website: 'https://cursor.com',
86
+ platforms: ['linux', 'darwin', 'win32'],
72
87
  };
73
88
  const vcsTool = {
74
89
  id: 'gh',
@@ -83,6 +98,9 @@ const vcsTool = {
83
98
  documentationUrl: 'https://cli.github.com/manual/',
84
99
  installCommand: 'brew install gh',
85
100
  status: { status: 'available', toolName: 'gh' },
101
+ author: 'GitHub',
102
+ website: 'https://cli.github.com',
103
+ platforms: ['linux', 'darwin', 'win32'],
86
104
  };
87
105
  const meta = {
88
106
  title: 'Features/ToolCard',
@@ -1 +1 @@
1
- {"version":3,"file":"tool-detail-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAE7F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAkCD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,EACT,SAAS,GACV,EAAE,qBAAqB,2CAkNvB"}
1
+ {"version":3,"file":"tool-detail-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAQ7F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAkCD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,EACT,SAAS,GACV,EAAE,qBAAqB,2CAgPvB"}
@@ -5,6 +5,11 @@ import { Copy, Check, ExternalLink, Download, Rocket, Loader2, Monitor, Terminal
5
5
  import { Button } from '../../ui/button.js';
6
6
  import { BaseDrawer } from '../../common/base-drawer/base-drawer.js';
7
7
  import { useToolInstallStream } from '../../../hooks/use-tool-install-stream.js';
8
+ const PLATFORM_LABELS = {
9
+ linux: 'Linux',
10
+ darwin: 'macOS',
11
+ win32: 'Windows',
12
+ };
8
13
  const TAG_CONFIG = {
9
14
  ide: { label: 'IDE', icon: Monitor },
10
15
  'cli-agent': { label: 'CLI Agent', icon: Terminal },
@@ -70,19 +75,21 @@ export function ToolDetailDrawer({ tool, open, onClose, onRefresh, autoStart, })
70
75
  if (isAtBottomRef.current && logRef.current) {
71
76
  logRef.current.scrollTop = logRef.current.scrollHeight;
72
77
  }
73
- }, [logs]);
78
+ }, [logs, status]);
74
79
  // Refresh tool status after install completes
75
80
  useEffect(() => {
76
81
  if (status === 'done' && onRefresh) {
77
82
  void onRefresh();
78
83
  }
79
84
  }, [status, onRefresh]);
80
- const header = (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [tool.iconUrl ? (
85
+ const header = (_jsxs("div", { className: "flex flex-col gap-1.5 pr-6", children: [_jsxs("div", { className: "flex items-center gap-2", children: [tool.iconUrl ? (
81
86
  /* eslint-disable-next-line @next/next/no-img-element */
82
- _jsx("img", { src: tool.iconUrl, alt: "", width: 24, height: 24, className: "shrink-0 dark:invert" })) : (_jsx(Package, { className: "text-muted-foreground h-6 w-6 shrink-0" })), _jsx("h2", { className: "text-base font-bold", children: tool.name }), _jsx(StatusBadge, { status: tool.status.status })] }), _jsx("div", { className: "flex items-center gap-1", children: tool.tags.map((tag) => {
87
+ _jsx("img", { src: tool.iconUrl, alt: "", width: 24, height: 24, className: "shrink-0 dark:invert" })) : (_jsx(Package, { className: "text-muted-foreground h-6 w-6 shrink-0" })), _jsx("h2", { className: "text-base font-bold", children: tool.name }), _jsx(StatusBadge, { status: tool.status.status })] }), _jsx("div", { className: "flex items-center gap-2", children: tool.tags.map((tag) => {
83
88
  const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };
84
89
  const TagIcon = config.icon;
85
- return (_jsxs("span", { className: "bg-muted text-muted-foreground inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium", children: [_jsx(TagIcon, { className: "h-2.5 w-2.5" }), config.label] }, tag));
90
+ return (_jsxs("span", { className: "text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]", children: [_jsx(TagIcon, { className: "h-3 w-3" }), config.label] }, tag));
86
91
  }) })] }));
87
- return (_jsx(BaseDrawer, { open: open, onClose: onClose, size: "md", modal: false, header: header, "data-testid": "tool-detail-drawer", children: _jsxs("div", { className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4", children: [_jsx("div", { children: _jsx("p", { className: "text-muted-foreground text-sm", children: tool.description }) }), tool.installCommand ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Install command" }), _jsxs("div", { className: "relative rounded-md bg-zinc-900 text-zinc-100", children: [_jsx("pre", { className: "overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap", children: _jsx("code", { children: tool.installCommand }) }), _jsxs(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: handleCopy, "aria-label": copied ? 'Copied!' : 'Copy install command', children: [copied ? (_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-500" })) : (_jsx(Copy, { className: "h-3.5 w-3.5" })), _jsx("span", { className: "ml-1 text-[10px]", children: copied ? 'Copied!' : 'Copy' })] })] })] })) : null, _jsxs("div", { className: "flex items-center gap-2", children: [canInstall ? (_jsxs(Button, { size: "sm", onClick: startInstall, disabled: status === 'streaming', "aria-label": `Install ${tool.name}`, className: "cursor-pointer", children: [status === 'streaming' ? (_jsx(Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" })) : (_jsx(Download, { className: "mr-1.5 h-3.5 w-3.5" })), status === 'streaming' ? 'Installing...' : 'Install'] })) : null, canLaunch ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => void handleLaunch(), disabled: isLaunching, "aria-label": `Launch ${tool.name}`, className: "cursor-pointer", children: [isLaunching ? (_jsx(Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" })) : (_jsx(Rocket, { className: "mr-1.5 h-3.5 w-3.5" })), "Launch"] })) : null] }), (status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Install log" }), _jsxs("div", { ref: logRef, onScroll: handleScroll, 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: [logs.map((line) => (_jsx("div", { className: "break-all whitespace-pre-wrap", children: line }, line))), status === 'done' ? (_jsx("div", { className: "mt-2 border-t border-zinc-700 pt-2 text-emerald-400", children: "Installation complete" })) : null, status === 'error' ? (_jsx("div", { className: "mt-2 border-t border-zinc-700 pt-2 text-red-400", children: "Installation failed" })) : null] })] })) : null, tool.documentationUrl ? (_jsx(Button, { variant: "outline", size: "sm", className: "w-fit cursor-pointer", asChild: true, children: _jsxs("a", { href: tool.documentationUrl, target: "_blank", rel: "noopener noreferrer", children: ["Documentation", _jsx(ExternalLink, { className: "ml-1.5 h-3.5 w-3.5" })] }) })) : null] }) }));
92
+ return (_jsx(BaseDrawer, { open: open, onClose: onClose, size: "md", modal: true, title: tool.name, header: header, "data-testid": "tool-detail-drawer", children: _jsxs("div", { className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: tool.description }), tool.author || tool.platforms ? (_jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs", children: [tool.author ? (_jsxs("span", { className: "text-muted-foreground", children: ["by", ' ', tool.website ? (_jsx("a", { href: tool.website, target: "_blank", rel: "noopener noreferrer", className: "text-foreground hover:underline", children: tool.author })) : (_jsx("span", { className: "text-foreground", children: tool.author }))] })) : null, tool.platforms && tool.platforms.length > 0 ? (_jsx("span", { className: "text-muted-foreground", children: tool.platforms.map((p) => PLATFORM_LABELS[p] ?? p).join(' · ') })) : null] })) : null, tool.installCommand ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-semibold tracking-wide uppercase", children: "Install command" }), _jsxs("div", { className: "relative rounded-md bg-zinc-900 text-zinc-100", children: [_jsx("pre", { className: "overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap", children: _jsx("code", { children: tool.installCommand }) }), _jsxs(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: handleCopy, "aria-label": copied ? 'Copied!' : 'Copy install command', children: [copied ? (_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-500" })) : (_jsx(Copy, { className: "h-3.5 w-3.5" })), _jsx("span", { className: "ml-1 text-[10px]", children: copied ? 'Copied!' : 'Copy' })] })] })] })) : null, _jsxs("div", { className: "flex items-center gap-2", children: [canInstall ? (_jsxs(Button, { size: "sm", onClick: startInstall, disabled: status === 'streaming', "aria-label": `Install ${tool.name}`, className: "cursor-pointer", children: [status === 'streaming' ? (_jsx(Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" })) : (_jsx(Download, { className: "mr-1.5 h-3.5 w-3.5" })), status === 'streaming' ? 'Installing...' : 'Install'] })) : null, canLaunch ? (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => void handleLaunch(), disabled: isLaunching, "aria-label": `Launch ${tool.name}`, className: "cursor-pointer", children: [isLaunching ? (_jsx(Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" })) : (_jsx(Rocket, { className: "mr-1.5 h-3.5 w-3.5" })), "Launch"] })) : null, tool.documentationUrl ? (_jsx(Button, { variant: "outline", size: "sm", className: "cursor-pointer", asChild: true, children: _jsxs("a", { href: tool.documentationUrl, target: "_blank", rel: "noopener noreferrer", children: ["Docs", _jsx(ExternalLink, { className: "ml-1 h-3 w-3" })] }) })) : null] }), (status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-semibold tracking-wide uppercase", children: "Install log" }), _jsxs("div", { ref: logRef, onScroll: handleScroll, 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: [logs.map((line, idx) => (
93
+ // eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder
94
+ _jsx("div", { className: "break-all whitespace-pre-wrap", children: line }, idx))), status === 'done' ? (_jsx("div", { className: "mt-2 border-t border-zinc-700 pt-2 text-emerald-400", children: "Installation complete" })) : null, status === 'error' ? (_jsx("div", { className: "mt-2 border-t border-zinc-700 pt-2 text-red-400", children: "Installation failed" })) : null] })] })) : null] }) }));
88
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-detail-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAmBxD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAYvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAShC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAYnB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAqBtB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAsB1B,CAAC"}
1
+ {"version":3,"file":"tool-detail-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAsBxD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAYvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAShC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAYnB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAqBtB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAsB1B,CAAC"}
@@ -12,6 +12,9 @@ const baseTool = {
12
12
  documentationUrl: 'https://github.com/tmux/tmux/wiki',
13
13
  installCommand: 'sudo apt-get install -y tmux',
14
14
  status: { status: 'missing', toolName: 'tmux' },
15
+ author: 'tmux team',
16
+ website: 'https://tmux.github.io',
17
+ platforms: ['linux', 'darwin'],
15
18
  };
16
19
  const meta = {
17
20
  title: 'Features/ToolDetailDrawer',
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from 'react';
3
+ import { useState, useCallback } from 'react';
4
4
  import { Wrench } from 'lucide-react';
5
5
  import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs.js';
6
6
  import { cn } from '../../../lib/utils.js';
@@ -15,7 +15,7 @@ const TAB_FILTER = {
15
15
  export function ToolsPageClient({ tools: initialTools, className }) {
16
16
  const [tools, setTools] = useState(initialTools);
17
17
  const [activeTab, setActiveTab] = useState('all');
18
- async function refreshTools() {
18
+ const refreshTools = useCallback(async () => {
19
19
  try {
20
20
  const res = await fetch('/api/tools');
21
21
  if (res.ok) {
@@ -26,7 +26,7 @@ export function ToolsPageClient({ tools: initialTools, className }) {
26
26
  catch {
27
27
  // Silently ignore refresh errors; user can re-navigate to refresh
28
28
  }
29
- }
29
+ }, []);
30
30
  const filtered = tools.filter(TAB_FILTER[activeTab]);
31
31
  return (_jsxs("div", { "data-testid": "tools-page-client", className: cn('space-y-4', className), children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Wrench, { className: "text-muted-foreground h-4 w-4" }), _jsx("h1", { className: "text-sm font-bold tracking-tight", children: "Tools" }), _jsxs("span", { className: "text-muted-foreground text-[10px]", children: [tools.filter((t) => t.status.status === 'available').length, "/", tools.length, " installed"] })] }), _jsxs(Tabs, { value: activeTab, onValueChange: (value) => setActiveTab(value), "data-testid": "tools-page-tabs", children: [_jsxs(TabsList, { className: "h-7", children: [_jsx(TabsTrigger, { value: "all", "data-testid": "tools-tab-all", className: "px-2.5 text-xs", children: "All" }), _jsx(TabsTrigger, { value: "ide", "data-testid": "tools-tab-ide", className: "px-2.5 text-xs", children: "IDEs" }), _jsx(TabsTrigger, { value: "cli-agent", "data-testid": "tools-tab-cli-agent", className: "px-2.5 text-xs", children: "CLI Agents" }), _jsx(TabsTrigger, { value: "vcs", "data-testid": "tools-tab-vcs", className: "px-2.5 text-xs", children: "Version Control" }), _jsx(TabsTrigger, { value: "terminal", "data-testid": "tools-tab-terminal", className: "px-2.5 text-xs", children: "Terminals" })] }), _jsx(TabsContent, { value: activeTab, className: "mt-3", children: filtered.length === 0 ? (_jsxs("div", { "data-testid": "tools-page-empty", className: "text-muted-foreground flex flex-col items-center justify-center py-12 text-center", children: [_jsx(Wrench, { className: "mb-2 h-6 w-6 opacity-20" }), _jsx("p", { className: "text-xs", children: "No tools in this category." })] })) : (_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: filtered.map((tool) => (_jsx(ToolCard, { tool: tool, onRefresh: refreshTools }, tool.id))) })) })] })] }));
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tools-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tools-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAoFtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAOtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAItB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC"}
1
+ {"version":3,"file":"tools-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/tools/tools-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAmGtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAOtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAItB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAI3B,CAAC"}
@@ -13,6 +13,9 @@ const mockTools = [
13
13
  documentationUrl: 'https://cursor.sh',
14
14
  installCommand: 'brew install --cask cursor',
15
15
  status: { status: 'available', toolName: 'cursor' },
16
+ author: 'Anysphere',
17
+ website: 'https://cursor.com',
18
+ platforms: ['linux', 'darwin', 'win32'],
16
19
  },
17
20
  {
18
21
  id: 'vscode',
@@ -27,6 +30,9 @@ const mockTools = [
27
30
  documentationUrl: 'https://code.visualstudio.com',
28
31
  installCommand: 'brew install --cask visual-studio-code',
29
32
  status: { status: 'missing', toolName: 'vscode' },
33
+ author: 'Microsoft',
34
+ website: 'https://code.visualstudio.com',
35
+ platforms: ['linux', 'darwin', 'win32'],
30
36
  },
31
37
  {
32
38
  id: 'claude-code',
@@ -41,6 +47,9 @@ const mockTools = [
41
47
  documentationUrl: 'https://claude.ai/code',
42
48
  installCommand: 'npm install -g @anthropic-ai/claude-code',
43
49
  status: { status: 'available', toolName: 'claude-code' },
50
+ author: 'Anthropic',
51
+ website: 'https://claude.ai/code',
52
+ platforms: ['linux', 'darwin'],
44
53
  },
45
54
  {
46
55
  id: 'aider',
@@ -55,6 +64,9 @@ const mockTools = [
55
64
  documentationUrl: 'https://aider.chat',
56
65
  installCommand: 'pip install aider-chat',
57
66
  status: { status: 'missing', toolName: 'aider' },
67
+ author: 'Paul Gauthier',
68
+ website: 'https://aider.chat',
69
+ platforms: ['linux', 'darwin', 'win32'],
58
70
  },
59
71
  {
60
72
  id: 'goose',
@@ -69,6 +81,9 @@ const mockTools = [
69
81
  documentationUrl: 'https://block.github.io/goose',
70
82
  installCommand: 'pip install goose-ai',
71
83
  status: { status: 'missing', toolName: 'goose' },
84
+ author: 'Block',
85
+ website: 'https://block.github.io/goose',
86
+ platforms: ['linux', 'darwin', 'win32'],
72
87
  },
73
88
  ];
74
89
  const ideOnlyTools = mockTools.filter((t) => t.tags.includes('ide'));