@shepai/cli 1.72.7 → 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.
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts +3 -0
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.js +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +9 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +6 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +5 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/alacritty.json +5 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +4 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gemini-cli.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/iterm2.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/kitty.json +5 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/tmux.json +4 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +4 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/warp.json +3 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +4 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +3 -0
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.js +9 -4
- package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.d.ts +7 -0
- package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.js +32 -0
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +2 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +3 -3
- package/dist/src/presentation/web/components/features/index.d.ts +1 -1
- package/dist/src/presentation/web/components/features/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/index.js +1 -1
- package/dist/src/presentation/web/components/features/tools/index.d.ts +1 -1
- package/dist/src/presentation/web/components/features/tools/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/index.js +1 -1
- package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/tool-card.js +18 -14
- package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/tool-card.stories.js +18 -0
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.d.ts +10 -0
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +95 -0
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.stories.js +119 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.js +3 -3
- package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.js +15 -0
- package/dist/src/presentation/web/hooks/use-tool-install-stream.d.ts +10 -0
- package/dist/src/presentation/web/hooks/use-tool-install-stream.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-tool-install-stream.js +38 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +7 -7
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/server/app/api/tools/[id]/install/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/tools/[id]/install/stream/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/tools/[id]/install/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/tools/[id]/install/stream/route.js +6 -0
- package/web/.next/server/app/api/tools/[id]/install/stream/route.js.map +5 -0
- package/web/.next/server/app/api/tools/[id]/install/stream/route.js.nft.json +1 -0
- package/web/.next/server/app/api/tools/[id]/install/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/skills/page/build-manifest.json +5 -5
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +5 -5
- package/web/.next/server/app/tools/page/server-reference-manifest.json +77 -2
- package/web/.next/server/app/tools/page.js +2 -2
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +5 -5
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +11 -0
- package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js.map +1 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_tools_[id]_install_stream_route_actions_1fe5bd5d.js +3 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_tools_[id]_install_stream_route_actions_1fe5bd5d.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js → server/chunks/ssr/[root-of-the-server]__45dbf93d._.js} +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__07385073._.js.map → [root-of-the-server]__45dbf93d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js → server/chunks/ssr/[root-of-the-server]__6cbc1149._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +3 -0
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1978f325._.js +7 -0
- package/web/.next/server/chunks/ssr/_1978f325._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_3197d5cb._.js +3 -0
- package/web/.next/server/chunks/ssr/_3197d5cb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_61351ed3._.js +3 -0
- package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_7215bb0f._.js → server/chunks/ssr/_6ac9e55f._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_7215bb0f._.js.map → _6ac9e55f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js +3 -0
- package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
- package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a29296f0._.js +3 -0
- package/web/.next/server/chunks/ssr/_a29296f0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e806976d._.js +3 -0
- package/web/.next/server/chunks/ssr/_e806976d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +5 -5
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +61 -26
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +7 -7
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +8 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +17 -17
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +17 -17
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +12 -12
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +12 -12
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route/build-manifest.json +11 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +77 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +11 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/f3a1f__next-internal_server_app_api_tools_[id]_install_stream_route_actions_1fe5bd5d.js +3 -0
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__07385073._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__8fcb9132._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_1978f325._.js +7 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_3197d5cb._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +3 -0
- package/web/.next/{server/chunks/ssr/_7215bb0f._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_6ac9e55f._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a29296f0._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e806976d._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +1 -1
- 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
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +61 -26
- package/web/.next/standalone/src/presentation/web/app/api/tools/[id]/install/route.ts +14 -6
- package/web/.next/standalone/src/presentation/web/app/api/tools/[id]/install/stream/route.ts +42 -0
- package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +13 -1
- package/web/.next/standalone/src/presentation/web/components/features/index.ts +1 -1
- package/web/.next/standalone/src/presentation/web/components/features/tools/index.ts +1 -1
- package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.stories.tsx +18 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.tsx +75 -67
- package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.stories.tsx +132 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.tsx +313 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.stories.tsx +15 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.tsx +3 -3
- package/web/.next/standalone/src/presentation/web/hooks/use-tool-install-stream.ts +58 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/18b3e6363932ceed.js +1 -0
- package/web/.next/static/chunks/413d5b4c398afa48.js +1 -0
- package/web/.next/static/chunks/4a3b3cfcc85e7254.js +1 -0
- package/web/.next/static/chunks/5d0a6417c4e4e545.js +1 -0
- package/web/.next/static/chunks/67f2a7a5e8dc358a.css +2 -0
- package/web/.next/static/chunks/7ddf197e0f8808c0.js +1 -0
- package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
- package/web/.next/static/chunks/9215b6fb973482c5.js +1 -0
- package/web/.next/static/chunks/98a60f18dcc90e7a.js +1 -0
- package/web/.next/static/chunks/{fe83a799663fd3cc.js → b33b0a2215d5bd3d.js} +1 -1
- package/web/.next/static/chunks/b857f025c4af5811.js +1 -0
- package/web/.next/static/chunks/{585ae19c520e8b72.js → c3de2fd85ba568fb.js} +1 -1
- package/web/.next/static/chunks/c8ec2825197a1344.js +1 -0
- package/web/.next/static/chunks/c92e1360ada8ca94.js +5 -0
- package/web/.next/static/chunks/{b45344579a43cbb8.js → ed8e7bd6ac46b54e.js} +1 -1
- package/web/.next/static/chunks/edbd674102e897b4.js +1 -0
- package/web/.next/static/chunks/{turbopack-3a8fe0e18e69b0ab.js → turbopack-05820f781f3ffc22.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/link.d.ts +1 -0
- package/web/.next/types/routes.d.ts +2 -1
- package/web/.next/types/validator.ts +9 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.d.ts +0 -9
- package/dist/src/presentation/web/components/features/tools/install-instructions.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/tools/install-instructions.js +0 -19
- package/dist/src/presentation/web/components/features/tools/install-instructions.stories.d.ts +0 -12
- package/dist/src/presentation/web/components/features/tools/install-instructions.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/tools/install-instructions.stories.js +0 -77
- package/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9d14479b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9d14479b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_00e6c698._.js +0 -3
- package/web/.next/server/chunks/ssr/_00e6c698._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_13566ff3._.js +0 -3
- package/web/.next/server/chunks/ssr/_13566ff3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_26129e04._.js +0 -3
- package/web/.next/server/chunks/ssr/_26129e04._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_34a58db8._.js +0 -3
- package/web/.next/server/chunks/ssr/_34a58db8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_37259405._.js +0 -3
- package/web/.next/server/chunks/ssr/_37259405._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_63bfa7dd._.js +0 -3
- package/web/.next/server/chunks/ssr/_63bfa7dd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cb5b3951._.js +0 -3
- package/web/.next/server/chunks/ssr/_cb5b3951._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_fc3a6895._.js +0 -3
- package/web/.next/server/chunks/ssr/_fc3a6895._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js +0 -7
- package/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9d14479b._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_00e6c698._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_13566ff3._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_26129e04._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_34a58db8._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_37259405._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_63bfa7dd._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_cb5b3951._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_fc3a6895._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js +0 -7
- package/web/.next/standalone/src/presentation/web/components/features/tools/install-instructions.stories.tsx +0 -89
- package/web/.next/standalone/src/presentation/web/components/features/tools/install-instructions.tsx +0 -109
- package/web/.next/static/chunks/07fcc6d17357e905.js +0 -1
- package/web/.next/static/chunks/304c8593d0a6525d.js +0 -1
- package/web/.next/static/chunks/3e1227e02ef8bcc6.js +0 -5
- package/web/.next/static/chunks/4558d1663c6f4d2c.js +0 -1
- package/web/.next/static/chunks/4df07e765b233622.js +0 -1
- package/web/.next/static/chunks/64d73952a0291431.js +0 -1
- package/web/.next/static/chunks/6e14d8bd5c005e6e.js +0 -1
- package/web/.next/static/chunks/8a1eb93510e54db0.js +0 -1
- package/web/.next/static/chunks/938c21b0cefb2b1d.js +0 -1
- package/web/.next/static/chunks/b143c7d78a6888e9.js +0 -1
- package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
- package/web/.next/static/chunks/dec13bccb136ef7c.css +0 -2
- package/web/.next/static/chunks/e4522f7d3134eefe.js +0 -1
- /package/web/.next/static/{9bO_bJBssG0NRxEG03iM5 → ZxFxAjRomx2WjLl0dOQ3Y}/_buildManifest.js +0 -0
- /package/web/.next/static/{9bO_bJBssG0NRxEG03iM5 → ZxFxAjRomx2WjLl0dOQ3Y}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{9bO_bJBssG0NRxEG03iM5 → ZxFxAjRomx2WjLl0dOQ3Y}/_ssgManifest.js +0 -0
package/web/.next/standalone/src/presentation/web/components/features/tools/tool-detail-drawer.tsx
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
4
|
+
import {
|
|
5
|
+
Copy,
|
|
6
|
+
Check,
|
|
7
|
+
ExternalLink,
|
|
8
|
+
Download,
|
|
9
|
+
Rocket,
|
|
10
|
+
Loader2,
|
|
11
|
+
Monitor,
|
|
12
|
+
Terminal,
|
|
13
|
+
GitBranch,
|
|
14
|
+
Package,
|
|
15
|
+
} from 'lucide-react';
|
|
16
|
+
import { Button } from '@/components/ui/button';
|
|
17
|
+
import { BaseDrawer } from '@/components/common/base-drawer/base-drawer';
|
|
18
|
+
import { useToolInstallStream } from '@/hooks/use-tool-install-stream';
|
|
19
|
+
import type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';
|
|
20
|
+
|
|
21
|
+
const PLATFORM_LABELS: Record<string, string> = {
|
|
22
|
+
linux: 'Linux',
|
|
23
|
+
darwin: 'macOS',
|
|
24
|
+
win32: 'Windows',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export interface ToolDetailDrawerProps {
|
|
28
|
+
tool: ToolItem;
|
|
29
|
+
open: boolean;
|
|
30
|
+
onClose: () => void;
|
|
31
|
+
onRefresh?: () => Promise<void>;
|
|
32
|
+
autoStart?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {
|
|
36
|
+
ide: { label: 'IDE', icon: Monitor },
|
|
37
|
+
'cli-agent': { label: 'CLI Agent', icon: Terminal },
|
|
38
|
+
vcs: { label: 'VCS', icon: GitBranch },
|
|
39
|
+
terminal: { label: 'Terminal', icon: Terminal },
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const AUTO_SCROLL_THRESHOLD = 50;
|
|
43
|
+
|
|
44
|
+
function StatusBadge({ status }: { status: string }) {
|
|
45
|
+
if (status === 'available') {
|
|
46
|
+
return (
|
|
47
|
+
<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">
|
|
48
|
+
<Check className="h-3 w-3" />
|
|
49
|
+
Installed
|
|
50
|
+
</span>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
if (status === 'error') {
|
|
54
|
+
return (
|
|
55
|
+
<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">
|
|
56
|
+
Error
|
|
57
|
+
</span>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
return (
|
|
61
|
+
<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">
|
|
62
|
+
Missing
|
|
63
|
+
</span>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function ToolDetailDrawer({
|
|
68
|
+
tool,
|
|
69
|
+
open,
|
|
70
|
+
onClose,
|
|
71
|
+
onRefresh,
|
|
72
|
+
autoStart,
|
|
73
|
+
}: ToolDetailDrawerProps) {
|
|
74
|
+
const [copied, setCopied] = useState(false);
|
|
75
|
+
const [isLaunching, setIsLaunching] = useState(false);
|
|
76
|
+
const { logs, status, startInstall } = useToolInstallStream(tool.id);
|
|
77
|
+
const logRef = useRef<HTMLDivElement>(null);
|
|
78
|
+
const isAtBottomRef = useRef(true);
|
|
79
|
+
const autoStartedRef = useRef(false);
|
|
80
|
+
|
|
81
|
+
const isInstalled = tool.status.status === 'available';
|
|
82
|
+
const isError = tool.status.status === 'error';
|
|
83
|
+
const canLaunch = isInstalled && Boolean(tool.openDirectory);
|
|
84
|
+
const canInstall = !isInstalled && !isError && tool.autoInstall;
|
|
85
|
+
|
|
86
|
+
// Auto-start install when drawer opens with autoStart flag
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (open && autoStart && canInstall && status === 'idle' && !autoStartedRef.current) {
|
|
89
|
+
autoStartedRef.current = true;
|
|
90
|
+
startInstall();
|
|
91
|
+
}
|
|
92
|
+
if (!open) {
|
|
93
|
+
autoStartedRef.current = false;
|
|
94
|
+
}
|
|
95
|
+
}, [open, autoStart, canInstall, status, startInstall]);
|
|
96
|
+
|
|
97
|
+
function handleCopy() {
|
|
98
|
+
if (!tool.installCommand) return;
|
|
99
|
+
void navigator.clipboard.writeText(tool.installCommand).then(() => {
|
|
100
|
+
setCopied(true);
|
|
101
|
+
setTimeout(() => setCopied(false), 2000);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async function handleLaunch() {
|
|
106
|
+
setIsLaunching(true);
|
|
107
|
+
try {
|
|
108
|
+
await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });
|
|
109
|
+
} finally {
|
|
110
|
+
setIsLaunching(false);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const handleScroll = useCallback(() => {
|
|
115
|
+
const el = logRef.current;
|
|
116
|
+
if (!el) return;
|
|
117
|
+
isAtBottomRef.current =
|
|
118
|
+
el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;
|
|
119
|
+
}, []);
|
|
120
|
+
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
if (isAtBottomRef.current && logRef.current) {
|
|
123
|
+
logRef.current.scrollTop = logRef.current.scrollHeight;
|
|
124
|
+
}
|
|
125
|
+
}, [logs, status]);
|
|
126
|
+
|
|
127
|
+
// Refresh tool status after install completes
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
if (status === 'done' && onRefresh) {
|
|
130
|
+
void onRefresh();
|
|
131
|
+
}
|
|
132
|
+
}, [status, onRefresh]);
|
|
133
|
+
|
|
134
|
+
const header = (
|
|
135
|
+
<div className="flex flex-col gap-1.5 pr-6">
|
|
136
|
+
<div className="flex items-center gap-2">
|
|
137
|
+
{tool.iconUrl ? (
|
|
138
|
+
/* eslint-disable-next-line @next/next/no-img-element */
|
|
139
|
+
<img src={tool.iconUrl} alt="" width={24} height={24} className="shrink-0 dark:invert" />
|
|
140
|
+
) : (
|
|
141
|
+
<Package className="text-muted-foreground h-6 w-6 shrink-0" />
|
|
142
|
+
)}
|
|
143
|
+
<h2 className="text-base font-bold">{tool.name}</h2>
|
|
144
|
+
<StatusBadge status={tool.status.status} />
|
|
145
|
+
</div>
|
|
146
|
+
<div className="flex items-center gap-2">
|
|
147
|
+
{tool.tags.map((tag) => {
|
|
148
|
+
const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };
|
|
149
|
+
const TagIcon = config.icon;
|
|
150
|
+
return (
|
|
151
|
+
<span
|
|
152
|
+
key={tag}
|
|
153
|
+
className="text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]"
|
|
154
|
+
>
|
|
155
|
+
<TagIcon className="h-3 w-3" />
|
|
156
|
+
{config.label}
|
|
157
|
+
</span>
|
|
158
|
+
);
|
|
159
|
+
})}
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<BaseDrawer
|
|
166
|
+
open={open}
|
|
167
|
+
onClose={onClose}
|
|
168
|
+
size="md"
|
|
169
|
+
modal
|
|
170
|
+
title={tool.name}
|
|
171
|
+
header={header}
|
|
172
|
+
data-testid="tool-detail-drawer"
|
|
173
|
+
>
|
|
174
|
+
<div className="flex flex-1 flex-col gap-4 overflow-y-auto p-4">
|
|
175
|
+
{/* Description */}
|
|
176
|
+
<p className="text-muted-foreground text-sm">{tool.description}</p>
|
|
177
|
+
|
|
178
|
+
{/* Meta info row: author + platforms */}
|
|
179
|
+
{tool.author || tool.platforms ? (
|
|
180
|
+
<div className="flex flex-wrap items-center gap-x-4 gap-y-1 text-xs">
|
|
181
|
+
{tool.author ? (
|
|
182
|
+
<span className="text-muted-foreground">
|
|
183
|
+
by{' '}
|
|
184
|
+
{tool.website ? (
|
|
185
|
+
<a
|
|
186
|
+
href={tool.website}
|
|
187
|
+
target="_blank"
|
|
188
|
+
rel="noopener noreferrer"
|
|
189
|
+
className="text-foreground hover:underline"
|
|
190
|
+
>
|
|
191
|
+
{tool.author}
|
|
192
|
+
</a>
|
|
193
|
+
) : (
|
|
194
|
+
<span className="text-foreground">{tool.author}</span>
|
|
195
|
+
)}
|
|
196
|
+
</span>
|
|
197
|
+
) : null}
|
|
198
|
+
{tool.platforms && tool.platforms.length > 0 ? (
|
|
199
|
+
<span className="text-muted-foreground">
|
|
200
|
+
{tool.platforms.map((p) => PLATFORM_LABELS[p] ?? p).join(' · ')}
|
|
201
|
+
</span>
|
|
202
|
+
) : null}
|
|
203
|
+
</div>
|
|
204
|
+
) : null}
|
|
205
|
+
|
|
206
|
+
{/* Install Command */}
|
|
207
|
+
{tool.installCommand ? (
|
|
208
|
+
<div className="flex flex-col gap-1.5">
|
|
209
|
+
<span className="text-muted-foreground text-xs font-semibold tracking-wide uppercase">
|
|
210
|
+
Install command
|
|
211
|
+
</span>
|
|
212
|
+
<div className="relative rounded-md bg-zinc-900 text-zinc-100">
|
|
213
|
+
<pre className="overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap">
|
|
214
|
+
<code>{tool.installCommand}</code>
|
|
215
|
+
</pre>
|
|
216
|
+
<Button
|
|
217
|
+
variant="ghost"
|
|
218
|
+
size="sm"
|
|
219
|
+
className="absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100"
|
|
220
|
+
onClick={handleCopy}
|
|
221
|
+
aria-label={copied ? 'Copied!' : 'Copy install command'}
|
|
222
|
+
>
|
|
223
|
+
{copied ? (
|
|
224
|
+
<Check className="h-3.5 w-3.5 text-emerald-500" />
|
|
225
|
+
) : (
|
|
226
|
+
<Copy className="h-3.5 w-3.5" />
|
|
227
|
+
)}
|
|
228
|
+
<span className="ml-1 text-[10px]">{copied ? 'Copied!' : 'Copy'}</span>
|
|
229
|
+
</Button>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
) : null}
|
|
233
|
+
|
|
234
|
+
{/* Action Bar */}
|
|
235
|
+
<div className="flex items-center gap-2">
|
|
236
|
+
{canInstall ? (
|
|
237
|
+
<Button
|
|
238
|
+
size="sm"
|
|
239
|
+
onClick={startInstall}
|
|
240
|
+
disabled={status === 'streaming'}
|
|
241
|
+
aria-label={`Install ${tool.name}`}
|
|
242
|
+
className="cursor-pointer"
|
|
243
|
+
>
|
|
244
|
+
{status === 'streaming' ? (
|
|
245
|
+
<Loader2 className="mr-1.5 h-3.5 w-3.5 animate-spin" />
|
|
246
|
+
) : (
|
|
247
|
+
<Download className="mr-1.5 h-3.5 w-3.5" />
|
|
248
|
+
)}
|
|
249
|
+
{status === 'streaming' ? 'Installing...' : 'Install'}
|
|
250
|
+
</Button>
|
|
251
|
+
) : null}
|
|
252
|
+
{canLaunch ? (
|
|
253
|
+
<Button
|
|
254
|
+
size="sm"
|
|
255
|
+
variant="outline"
|
|
256
|
+
onClick={() => void handleLaunch()}
|
|
257
|
+
disabled={isLaunching}
|
|
258
|
+
aria-label={`Launch ${tool.name}`}
|
|
259
|
+
className="cursor-pointer"
|
|
260
|
+
>
|
|
261
|
+
{isLaunching ? (
|
|
262
|
+
<Loader2 className="mr-1.5 h-3.5 w-3.5 animate-spin" />
|
|
263
|
+
) : (
|
|
264
|
+
<Rocket className="mr-1.5 h-3.5 w-3.5" />
|
|
265
|
+
)}
|
|
266
|
+
Launch
|
|
267
|
+
</Button>
|
|
268
|
+
) : null}
|
|
269
|
+
{tool.documentationUrl ? (
|
|
270
|
+
<Button variant="outline" size="sm" className="cursor-pointer" asChild>
|
|
271
|
+
<a href={tool.documentationUrl} target="_blank" rel="noopener noreferrer">
|
|
272
|
+
Docs
|
|
273
|
+
<ExternalLink className="ml-1 h-3 w-3" />
|
|
274
|
+
</a>
|
|
275
|
+
</Button>
|
|
276
|
+
) : null}
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
{/* Install Log */}
|
|
280
|
+
{(status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (
|
|
281
|
+
<div className="flex flex-col gap-1.5">
|
|
282
|
+
<span className="text-muted-foreground text-xs font-semibold tracking-wide uppercase">
|
|
283
|
+
Install log
|
|
284
|
+
</span>
|
|
285
|
+
<div
|
|
286
|
+
ref={logRef}
|
|
287
|
+
onScroll={handleScroll}
|
|
288
|
+
className="max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100"
|
|
289
|
+
data-testid="tool-install-log"
|
|
290
|
+
>
|
|
291
|
+
{logs.map((line, idx) => (
|
|
292
|
+
// eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder
|
|
293
|
+
<div key={idx} className="break-all whitespace-pre-wrap">
|
|
294
|
+
{line}
|
|
295
|
+
</div>
|
|
296
|
+
))}
|
|
297
|
+
{status === 'done' ? (
|
|
298
|
+
<div className="mt-2 border-t border-zinc-700 pt-2 text-emerald-400">
|
|
299
|
+
Installation complete
|
|
300
|
+
</div>
|
|
301
|
+
) : null}
|
|
302
|
+
{status === 'error' ? (
|
|
303
|
+
<div className="mt-2 border-t border-zinc-700 pt-2 text-red-400">
|
|
304
|
+
Installation failed
|
|
305
|
+
</div>
|
|
306
|
+
) : null}
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
) : null}
|
|
310
|
+
</div>
|
|
311
|
+
</BaseDrawer>
|
|
312
|
+
);
|
|
313
|
+
}
|
|
@@ -17,6 +17,9 @@ const mockTools: ToolItem[] = [
|
|
|
17
17
|
documentationUrl: 'https://cursor.sh',
|
|
18
18
|
installCommand: 'brew install --cask cursor',
|
|
19
19
|
status: { status: 'available', toolName: 'cursor' },
|
|
20
|
+
author: 'Anysphere',
|
|
21
|
+
website: 'https://cursor.com',
|
|
22
|
+
platforms: ['linux', 'darwin', 'win32'],
|
|
20
23
|
},
|
|
21
24
|
{
|
|
22
25
|
id: 'vscode',
|
|
@@ -32,6 +35,9 @@ const mockTools: ToolItem[] = [
|
|
|
32
35
|
documentationUrl: 'https://code.visualstudio.com',
|
|
33
36
|
installCommand: 'brew install --cask visual-studio-code',
|
|
34
37
|
status: { status: 'missing', toolName: 'vscode' },
|
|
38
|
+
author: 'Microsoft',
|
|
39
|
+
website: 'https://code.visualstudio.com',
|
|
40
|
+
platforms: ['linux', 'darwin', 'win32'],
|
|
35
41
|
},
|
|
36
42
|
{
|
|
37
43
|
id: 'claude-code',
|
|
@@ -47,6 +53,9 @@ const mockTools: ToolItem[] = [
|
|
|
47
53
|
documentationUrl: 'https://claude.ai/code',
|
|
48
54
|
installCommand: 'npm install -g @anthropic-ai/claude-code',
|
|
49
55
|
status: { status: 'available', toolName: 'claude-code' },
|
|
56
|
+
author: 'Anthropic',
|
|
57
|
+
website: 'https://claude.ai/code',
|
|
58
|
+
platforms: ['linux', 'darwin'],
|
|
50
59
|
},
|
|
51
60
|
{
|
|
52
61
|
id: 'aider',
|
|
@@ -62,6 +71,9 @@ const mockTools: ToolItem[] = [
|
|
|
62
71
|
documentationUrl: 'https://aider.chat',
|
|
63
72
|
installCommand: 'pip install aider-chat',
|
|
64
73
|
status: { status: 'missing', toolName: 'aider' },
|
|
74
|
+
author: 'Paul Gauthier',
|
|
75
|
+
website: 'https://aider.chat',
|
|
76
|
+
platforms: ['linux', 'darwin', 'win32'],
|
|
65
77
|
},
|
|
66
78
|
{
|
|
67
79
|
id: 'goose',
|
|
@@ -77,6 +89,9 @@ const mockTools: ToolItem[] = [
|
|
|
77
89
|
documentationUrl: 'https://block.github.io/goose',
|
|
78
90
|
installCommand: 'pip install goose-ai',
|
|
79
91
|
status: { status: 'missing', toolName: 'goose' },
|
|
92
|
+
author: 'Block',
|
|
93
|
+
website: 'https://block.github.io/goose',
|
|
94
|
+
platforms: ['linux', 'darwin', 'win32'],
|
|
80
95
|
},
|
|
81
96
|
];
|
|
82
97
|
|
package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
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 '@/components/ui/tabs';
|
|
6
6
|
import { cn } from '@/lib/utils';
|
|
@@ -26,7 +26,7 @@ export function ToolsPageClient({ tools: initialTools, className }: ToolsPageCli
|
|
|
26
26
|
const [tools, setTools] = useState<ToolItem[]>(initialTools);
|
|
27
27
|
const [activeTab, setActiveTab] = useState<TabValue>('all');
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
const refreshTools = useCallback(async () => {
|
|
30
30
|
try {
|
|
31
31
|
const res = await fetch('/api/tools');
|
|
32
32
|
if (res.ok) {
|
|
@@ -36,7 +36,7 @@ export function ToolsPageClient({ tools: initialTools, className }: ToolsPageCli
|
|
|
36
36
|
} catch {
|
|
37
37
|
// Silently ignore refresh errors; user can re-navigate to refresh
|
|
38
38
|
}
|
|
39
|
-
}
|
|
39
|
+
}, []);
|
|
40
40
|
|
|
41
41
|
const filtered = tools.filter(TAB_FILTER[activeTab]);
|
|
42
42
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
4
|
+
import type { ToolInstallationStatus } from '@shepai/core/domain/generated/output';
|
|
5
|
+
|
|
6
|
+
export type InstallStreamStatus = 'idle' | 'streaming' | 'done' | 'error';
|
|
7
|
+
|
|
8
|
+
export interface UseToolInstallStreamResult {
|
|
9
|
+
logs: string[];
|
|
10
|
+
status: InstallStreamStatus;
|
|
11
|
+
result: ToolInstallationStatus | null;
|
|
12
|
+
startInstall: () => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function useToolInstallStream(toolId: string): UseToolInstallStreamResult {
|
|
16
|
+
const [logs, setLogs] = useState<string[]>([]);
|
|
17
|
+
const [status, setStatus] = useState<InstallStreamStatus>('idle');
|
|
18
|
+
const [result, setResult] = useState<ToolInstallationStatus | null>(null);
|
|
19
|
+
const esRef = useRef<EventSource | null>(null);
|
|
20
|
+
|
|
21
|
+
const cleanup = useCallback(() => {
|
|
22
|
+
if (esRef.current) {
|
|
23
|
+
esRef.current.close();
|
|
24
|
+
esRef.current = null;
|
|
25
|
+
}
|
|
26
|
+
}, []);
|
|
27
|
+
|
|
28
|
+
// Cleanup on unmount
|
|
29
|
+
useEffect(() => cleanup, [cleanup]);
|
|
30
|
+
|
|
31
|
+
const startInstall = useCallback(() => {
|
|
32
|
+
cleanup();
|
|
33
|
+
setLogs([]);
|
|
34
|
+
setResult(null);
|
|
35
|
+
setStatus('streaming');
|
|
36
|
+
|
|
37
|
+
const es = new EventSource(`/api/tools/${toolId}/install/stream`);
|
|
38
|
+
esRef.current = es;
|
|
39
|
+
|
|
40
|
+
es.onmessage = (event: MessageEvent) => {
|
|
41
|
+
setLogs((prev) => [...prev, event.data]);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
es.addEventListener('done', (event: MessageEvent) => {
|
|
45
|
+
const installResult: ToolInstallationStatus = JSON.parse(event.data);
|
|
46
|
+
setResult(installResult);
|
|
47
|
+
setStatus(installResult.status === 'error' ? 'error' : 'done');
|
|
48
|
+
cleanup();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
es.onerror = () => {
|
|
52
|
+
setStatus('error');
|
|
53
|
+
cleanup();
|
|
54
|
+
};
|
|
55
|
+
}, [toolId, cleanup]);
|
|
56
|
+
|
|
57
|
+
return { logs, status, result, startInstall };
|
|
58
|
+
}
|
|
@@ -15,7 +15,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
15
15
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
16
16
|
|
|
17
17
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
18
|
-
const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.72.
|
|
18
|
+
const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.72.8","NEXT_PUBLIC_SHEP_PACKAGE_NAME":"@shepai/cli","NEXT_PUBLIC_SHEP_DESCRIPTION":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":true,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/cli/cli","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/runner/work/cli/cli"},"serverExternalPackages":["tsyringe","reflect-metadata","better-sqlite3","node:os","node:child_process","node:fs"],"distDirRoot":".next"}
|
|
19
19
|
|
|
20
20
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
21
21
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,24270,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},98127,e=>{"use strict";var t=e.i(20314),r=e.i(31777);function n({className:e,type:n,...o}){return(0,t.jsx)("input",{type:n,"data-slot":"input",className:(0,r.cn)("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",e),...o})}e.s(["Input",()=>n])},66033,e=>{"use strict";var t=e.i(79054);e.i(20314);var r=t.createContext(void 0);function n(e){let n=t.useContext(r);return e||n||"ltr"}e.s(["useDirection",()=>n])},81975,e=>{"use strict";let t=(0,e.i(3645).default)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]);e.s(["Wrench",()=>t],81975)},80986,e=>{"use strict";let t=(0,e.i(3645).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["default",()=>t])},12103,e=>{"use strict";let t=(0,e.i(3645).default)("puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]);e.s(["Puzzle",()=>t],12103)},31406,(e,t,r)=>{t.exports=e.r(67013)},80764,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return o}});let n=e.r(79054);function o(e,t){let r=(0,n.useRef)(null),o=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=o.current;t&&(o.current=null,t())}else e&&(r.current=i(e,n)),t&&(o.current=i(t,n))},[e,t])}function i(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},3214,10942,e=>{"use strict";var t=e.i(91891);e.s(["Plus",()=>t.default],3214);var r=e.i(80986);e.s(["CircleCheck",()=>r.default],10942)},39443,e=>{"use strict";var t=e.i(20314),r=e.i(79054);function n(e,t,r,n){if("u"<typeof EventSource)return()=>{};let o=null,i=!1,a=1e3,u=null,s=null;return!function l(){i||(o=new EventSource(e?`/api/agent-events?runId=${encodeURIComponent(e)}`:"/api/agent-events"),n("connecting"),o.onopen=()=>{n("connected"),s=setTimeout(()=>{s=null,a=1e3},5e3)},o.onerror=()=>{o?.close(),o=null,n("disconnected"),null!==s&&(clearTimeout(s),s=null);let e=a;a=Math.min(2*e,3e4),u=setTimeout(()=>{u=null,l()},e)},o.addEventListener("notification",e=>{let n=JSON.parse(e.data);t(e=>[...e,n]),r(n)}))}(),()=>{i=!0,null!==u&&(clearTimeout(u),u=null),null!==s&&(clearTimeout(s),s=null),o&&(o.close(),o=null)}}let o=(0,r.createContext)(null);function i({children:e,runId:i}){let a=function(e){let[t,o]=(0,r.useState)([]),[i,a]=(0,r.useState)(null),[u,s]=(0,r.useState)("disconnected"),l=e?.runId,c=(0,r.useRef)(null),d=(0,r.useCallback)(e=>{let t=e.data;if(t&&"object"==typeof t)if("notification"===t.type){let e=t.data;o(t=>[...t,e]),a(e)}else"status"===t.type&&s(t.status)},[]);return(0,r.useEffect)(()=>{let e="u">typeof location&&new URLSearchParams(location.search).has("sse");if(!navigator.serviceWorker||e)return n(l,o,a,s);let t=!1,r={current:void 0};function i(e){t||(c.current=e,e.postMessage({type:"subscribe",runId:l}),s("connecting"))}function u(){if(t)return;let e=navigator.serviceWorker.controller;e&&(c.current=e,e.postMessage({type:"subscribe",runId:l}),s("connecting"))}return navigator.serviceWorker.addEventListener("message",d),navigator.serviceWorker.addEventListener("controllerchange",u),navigator.serviceWorker.register("/agent-events-sw.js",{scope:"/"}).then(e=>{if(t)return;let u=e.active??e.installing??e.waiting;if(!u){r.current=n(l,o,a,s);return}"activated"===u.state?i(u):u.addEventListener("statechange",()=>{"activated"===u.state&&i(u)})}).catch(()=>{t||(r.current=n(l,o,a,s))}),()=>{t=!0,navigator.serviceWorker.removeEventListener("message",d),navigator.serviceWorker.removeEventListener("controllerchange",u),c.current?.postMessage({type:"unsubscribe"}),c.current=null,r.current?.()}},[l,d]),{events:t,lastEvent:i,connectionStatus:u}}({runId:i});return(0,t.jsx)(o.Provider,{value:a,children:e})}function a(){let e=(0,r.useContext)(o);if(!e)throw Error("useAgentEventsContext must be used within an <AgentEventsProvider>");return e}e.s(["AgentEventsProvider",()=>i,"useAgentEventsContext",()=>a],39443)},1354,78986,1963,17845,5147,e=>{"use strict";var t=e.i(20314),r=e.i(79054),n=e.i(3214),o=e.i(83428),i=e.i(21023);let a=(0,i.createServerReference)("009d4d8bf83a9b09441de6d259e3f48136e1018073",i.callServer,void 0,i.findSourceMapURL,"pickFolder");async function u(){let e=await a();if(e.error)throw Error(e.error);return e.path}function s({data:e}){let[i,a]=(0,r.useState)(!1);async function s(){if(!i){a(!0);try{let t=await u();t&&e.onSelect?.(t)}finally{a(!1)}}}return(0,t.jsx)("div",{className:"group",children:(0,t.jsxs)("button",{type:"button","data-testid":"add-repository-node-card",onClick:s,disabled:i,className:"nodrag border-muted-foreground/30 flex w-56 cursor-pointer items-center gap-3 rounded-full border-2 border-dashed px-4 py-3 transition-colors hover:border-blue-500 hover:text-blue-500 disabled:cursor-wait disabled:opacity-60",children:[i?(0,t.jsx)(o.Loader2,{className:"h-5 w-5 shrink-0 animate-spin"}):(0,t.jsx)(n.Plus,{className:"h-5 w-5 shrink-0"}),(0,t.jsx)("span",{"data-testid":"add-repository-node-label",className:"text-sm font-medium",children:i?"Opening...":"Add Repository"})]})})}e.s(["pickFolder",()=>u],78986),e.s(["AddRepositoryNode",()=>s],1963);let l=(0,e.i(3645).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);var c=e.i(35364),d=e.i(2828);function f({onSelect:e}){let[n,i]=(0,r.useState)(!1);async function a(){if(!n){i(!0);try{let t=await u();t&&e?.(t)}finally{i(!1)}}}return(0,t.jsx)(d.TooltipProvider,{children:(0,t.jsxs)(d.Tooltip,{children:[(0,t.jsx)(d.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(c.Button,{variant:"ghost",size:"icon","aria-label":"Add Repository","data-testid":"add-repository-button",onClick:a,disabled:n,children:n?(0,t.jsx)(o.Loader2,{className:"h-5 w-5 animate-spin"}):(0,t.jsx)(l,{className:"h-5 w-5"})})}),(0,t.jsx)(d.TooltipContent,{children:"Add Repository"})]})})}e.s(["AddRepositoryButton",()=>f],17845),e.s([],1354);let p={"action-required":"action-needed",running:"in-progress",done:"done",blocked:"in-progress",error:"in-progress",creating:null};function h(e){return p[e]}let g=(0,r.createContext)(null);function y({children:e}){let[n,o]=(0,r.useState)([]),i=(0,r.useMemo)(()=>({features:n,setFeatures:o}),[n]);return(0,t.jsx)(g.Provider,{value:i,children:e})}function v(){let e=(0,r.useContext)(g);if(!e)throw Error("useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>");return e}e.s(["SidebarFeaturesProvider",()=>y,"mapNodeStateToSidebarStatus",()=>h,"useSidebarFeaturesContext",()=>v],5147)},76314,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return s},searchParamsToUrlQuery:function(){return i},urlQueryToSearchParams:function(){return u}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});function i(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function a(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function u(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,a(e));else t.set(r,a(n));return t}function s(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},95889,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return u},formatWithValidation:function(){return l},urlObjectKeys:function(){return s}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(44066)._(e.r(76314)),a=/https?|ftp|gopher|file/;function u(e){let{auth:t,hostname:r}=e,n=e.protocol||"",o=e.pathname||"",u=e.hash||"",s=e.query||"",l=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?l=t+e.host:r&&(l=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(l+=":"+e.port)),s&&"object"==typeof s&&(s=String(i.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||a.test(n))&&!1!==l?(l="//"+(l||""),o&&"/"!==o[0]&&(o="/"+o)):l||(l=""),u&&"#"!==u[0]&&(u="#"+u),c&&"?"!==c[0]&&(c="?"+c),o=o.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${l}${o}${c}${u}`}let s=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function l(e){return u(e)}},58464,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return v},MiddlewareNotFoundError:function(){return P},MissingStaticPage:function(){return x},NormalizeError:function(){return b},PageNotFoundError:function(){return m},SP:function(){return g},ST:function(){return y},WEB_VITALS:function(){return i},execOnce:function(){return a},getDisplayName:function(){return d},getLocationOrigin:function(){return l},getURL:function(){return c},isAbsoluteUrl:function(){return s},isResSent:function(){return f},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return E}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=["CLS","FCP","FID","INP","LCP","TTFB"];function a(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let u=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,s=e=>u.test(e);function l(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=l();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let g="u">typeof performance,y=g&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class v extends Error{}class b extends Error{}class m extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class x extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class P extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function E(e){return JSON.stringify({message:e.message,stack:e.stack})}},51380,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return i}});let n=e.r(58464),o=e.r(53626);function i(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,o.hasBasePath)(r.pathname)}catch(e){return!1}}},38670,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},24035,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return v},useLinkStatus:function(){return m}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=e.r(44066),a=e.r(20314),u=i._(e.r(79054)),s=e.r(95889),l=e.r(18152),c=e.r(80764),d=e.r(58464),f=e.r(99267);e.r(24270);let p=e.r(59624),h=e.r(51380),g=e.r(95555);function y(e){return"string"==typeof e?e:(0,s.formatUrl)(e)}function v(t){var r;let n,o,i,[s,v]=(0,u.useOptimistic)(p.IDLE_LINK_STATUS),m=(0,u.useRef)(null),{href:x,as:P,children:E,prefetch:j=null,passHref:S,replace:w,shallow:C,scroll:k,onClick:O,onMouseEnter:T,onTouchStart:_,legacyBehavior:R=!1,onNavigate:L,ref:N,unstable_dynamicOnHover:M,...A}=t;n=E,R&&("string"==typeof n||"number"==typeof n)&&(n=(0,a.jsx)("a",{children:n}));let U=u.default.useContext(l.AppRouterContext),I=!1!==j,$=!1!==j?null===(r=j)||"auto"===r?g.FetchStrategy.PPR:g.FetchStrategy.Full:g.FetchStrategy.PPR,{href:F,as:z}=u.default.useMemo(()=>{let e=y(x);return{href:e,as:P?y(P):e}},[x,P]);if(R){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=u.default.Children.only(n)}let B=R?o&&"object"==typeof o&&o.ref:N,D=u.default.useCallback(e=>(null!==U&&(m.current=(0,p.mountLinkInstance)(e,F,U,$,I,v)),()=>{m.current&&((0,p.unmountLinkForCurrentNavigation)(m.current),m.current=null),(0,p.unmountPrefetchableInstance)(e)}),[I,F,U,$,v]),W={ref:(0,c.useMergedRef)(D,B),onClick(t){R||"function"!=typeof O||O(t),R&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(t),!U||t.defaultPrevented||function(t,r,n,o,i,a,s){if("u">typeof window){let l,{nodeName:c}=t.currentTarget;if("A"===c.toUpperCase()&&((l=t.currentTarget.getAttribute("target"))&&"_self"!==l||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,h.isLocalURL)(r)){i&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),s){let e=!1;if(s({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:d}=e.r(81574);u.default.startTransition(()=>{d(n||r,i?"replace":"push",a??!0,o.current)})}}(t,F,z,m,w,k,L)},onMouseEnter(e){R||"function"!=typeof T||T(e),R&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),U&&I&&(0,p.onNavigationIntent)(e.currentTarget,!0===M)},onTouchStart:function(e){R||"function"!=typeof _||_(e),R&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),U&&I&&(0,p.onNavigationIntent)(e.currentTarget,!0===M)}};return(0,d.isAbsoluteUrl)(z)?W.href=z:R&&!S&&("a"!==o.type||"href"in o.props)||(W.href=(0,f.addBasePath)(z)),i=R?u.default.cloneElement(o,W):(0,a.jsx)("a",{...A,...W,children:n}),(0,a.jsx)(b.Provider,{value:s,children:i})}e.r(38670);let b=(0,u.createContext)(p.IDLE_LINK_STATUS),m=()=>(0,u.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,30090,e=>{"use strict";let t=(0,e.i(3645).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["default",()=>t])},54277,e=>{"use strict";var t=e.i(30090);e.s(["CircleX",()=>t.default])},33548,23925,e=>{"use strict";let t=(0,e.i(3645).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["Copy",()=>t],33548);var r=e.i(1012);e.s(["Check",()=>r.default],23925)},1012,e=>{"use strict";let t=(0,e.i(3645).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",()=>t])},16298,e=>{"use strict";let t=(0,e.i(3645).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["default",()=>t])},69512,e=>{"use strict";let t=(0,e.i(3645).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);e.s(["default",()=>t])},54793,7729,e=>{"use strict";var t=e.i(20314),r=e.i(31777);function a({icon:e,title:a,description:l,action:c,className:s,...u}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",s),...u,children:[e?(0,t.jsx)("div",{className:"text-muted-foreground",children:e}):null,(0,t.jsx)("h3",{className:"text-lg font-semibold",children:a}),l?(0,t.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:l}):null,c?(0,t.jsx)("div",{className:"mt-2",children:c}):null]})}e.s(["EmptyState",()=>a],7729),e.s([],54793)},81846,e=>{"use strict";var t=e.i(20314),r=e.i(94237),a=e.i(31777);let l=(0,r.cva)("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function c({className:e,variant:r,...c}){return(0,t.jsx)("div",{className:(0,a.cn)(l({variant:r}),e),...c})}e.s(["Badge",()=>c])},1650,e=>{"use strict";e.i(11495),e.s([])},19933,e=>{"use strict";let t=(0,e.i(3645).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",()=>t],19933)},8986,61898,96324,48585,e=>{"use strict";let t=(0,e.i(3645).default)("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);e.s(["Code2",()=>t],8986);var r=e.i(21023);let a=(0,r.createServerReference)("40955bb4efe6903c9e90ac024a892fadc04ea508fa",r.callServer,void 0,r.findSourceMapURL,"openIde");e.s(["openIde",()=>a],61898);let l=(0,r.createServerReference)("405cbae49c55ff33ea309f033457efdff2b6453c09",r.callServer,void 0,r.findSourceMapURL,"openShell");e.s(["openShell",()=>l],96324);let c=(0,r.createServerReference)("400ad7465f26bda26dbacef5f0efe13db6ff67af0b",r.callServer,void 0,r.findSourceMapURL,"openFolder");e.s(["openFolder",()=>c],48585)},76852,e=>{"use strict";var t=e.i(79054),r=e.i(61898),a=e.i(96324),l=e.i(48585);function c(e){let[c,s]=(0,t.useState)(!1),[u,n]=(0,t.useState)(!1),[o,i]=(0,t.useState)(!1),[d,f]=(0,t.useState)(null),[p,h]=(0,t.useState)(null),[y,m]=(0,t.useState)(null),v=(0,t.useRef)(null),x=(0,t.useRef)(null),b=(0,t.useRef)(null);(0,t.useEffect)(()=>{let e=v.current,t=x.current,r=b.current;return()=>{e&&clearTimeout(e),t&&clearTimeout(t),r&&clearTimeout(r)}},[]);let g=(0,t.useCallback)(async(t,r,a,l,c)=>{if(e&&!c){l.current&&clearTimeout(l.current),r(!0),a(null);try{let r=await t({repositoryPath:e.repositoryPath});if(!r.success){let e=r.error??"An unexpected error occurred";a(e),l.current=setTimeout(()=>a(null),5e3)}}catch(e){a(e instanceof Error?e.message:"An unexpected error occurred"),l.current=setTimeout(()=>a(null),5e3)}finally{r(!1)}}},[e]),k=(0,t.useCallback)(async(t,r,a,l,c)=>{if(e&&!c){l.current&&clearTimeout(l.current),r(!0),a(null);try{let r=await t(e.repositoryPath);if(!r.success){let e=r.error??"An unexpected error occurred";a(e),l.current=setTimeout(()=>a(null),5e3)}}catch(e){a(e instanceof Error?e.message:"An unexpected error occurred"),l.current=setTimeout(()=>a(null),5e3)}finally{r(!1)}}},[e]);return{openInIde:(0,t.useCallback)(()=>g(r.openIde,s,f,v,c),[g,c]),openInShell:(0,t.useCallback)(()=>g(a.openShell,n,h,x,u),[g,u]),openFolder:(0,t.useCallback)(()=>k(l.openFolder,i,m,b,o),[k,o]),ideLoading:c,shellLoading:u,folderLoading:o,ideError:d,shellError:p,folderError:y}}e.s(["useRepositoryActions",()=>c])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,68304,87342,51080,e=>{"use strict";var t=e.i(20314),s=e.i(79054),r=e.i(91967),a=e.i(22528),i=e.i(5978),l=e.i(86874);function n(e){let r=e+"CollectionProvider",[n,o]=(0,a.createContextScope)(r),[c,d]=n(r,{collectionRef:{current:null},itemMap:new Map}),u=e=>{let{scope:r,children:a}=e,i=s.default.useRef(null),l=s.default.useRef(new Map).current;return(0,t.jsx)(c,{scope:r,itemMap:l,collectionRef:i,children:a})};u.displayName=r;let m=e+"CollectionSlot",f=(0,l.createSlot)(m),h=s.default.forwardRef((e,s)=>{let{scope:r,children:a}=e,l=d(m,r),n=(0,i.useComposedRefs)(s,l.collectionRef);return(0,t.jsx)(f,{ref:n,children:a})});h.displayName=m;let x=e+"CollectionItemSlot",p="data-radix-collection-item",g=(0,l.createSlot)(x),v=s.default.forwardRef((e,r)=>{let{scope:a,children:l,...n}=e,o=s.default.useRef(null),c=(0,i.useComposedRefs)(r,o),u=d(x,a);return s.default.useEffect(()=>(u.itemMap.set(o,{ref:o,...n}),()=>void u.itemMap.delete(o))),(0,t.jsx)(g,{...{[p]:""},ref:c,children:l})});return v.displayName=x,[{Provider:u,Slot:h,ItemSlot:v},function(t){let r=d(e+"CollectionConsumer",t);return s.default.useCallback(()=>{let e=r.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${p}]`));return Array.from(r.itemMap.values()).sort((e,s)=>t.indexOf(e.ref.current)-t.indexOf(s.ref.current))},[r.collectionRef,r.itemMap])},o]}var o=new WeakMap;function c(e,t){var s,r;let a,i,l;if("at"in Array.prototype)return Array.prototype.at.call(e,t);let n=(s=e,r=t,a=s.length,(l=(i=d(r))>=0?i:a+i)<0||l>=a?-1:l);return -1===n?void 0:e[n]}function d(e){return e!=e||0===e?0:Math.trunc(e)}(class e extends Map{#e;constructor(e){super(e),this.#e=[...super.keys()],o.set(this,!0)}set(e,t){return o.get(this)&&(this.has(e)?this.#e[this.#e.indexOf(e)]=e:this.#e.push(e)),super.set(e,t),this}insert(e,t,s){let r,a=this.has(t),i=this.#e.length,l=d(e),n=l>=0?l:i+l,o=n<0||n>=i?-1:n;if(o===this.size||a&&o===this.size-1||-1===o)return this.set(t,s),this;let c=this.size+ +!a;l<0&&n++;let u=[...this.#e],m=!1;for(let e=n;e<c;e++)if(n===e){let i=u[e];u[e]===t&&(i=u[e+1]),a&&this.delete(t),r=this.get(i),this.set(t,s)}else{m||u[e-1]!==t||(m=!0);let s=u[m?e:e-1],a=r;r=this.get(s),this.delete(s),this.set(s,a)}return this}with(t,s,r){let a=new e(this);return a.insert(t,s,r),a}before(e){let t=this.#e.indexOf(e)-1;if(!(t<0))return this.entryAt(t)}setBefore(e,t,s){let r=this.#e.indexOf(e);return -1===r?this:this.insert(r,t,s)}after(e){let t=this.#e.indexOf(e);if(-1!==(t=-1===t||t===this.size-1?-1:t+1))return this.entryAt(t)}setAfter(e,t,s){let r=this.#e.indexOf(e);return -1===r?this:this.insert(r+1,t,s)}first(){return this.entryAt(0)}last(){return this.entryAt(-1)}clear(){return this.#e=[],super.clear()}delete(e){let t=super.delete(e);return t&&this.#e.splice(this.#e.indexOf(e),1),t}deleteAt(e){let t=this.keyAt(e);return void 0!==t&&this.delete(t)}at(e){let t=c(this.#e,e);if(void 0!==t)return this.get(t)}entryAt(e){let t=c(this.#e,e);if(void 0!==t)return[t,this.get(t)]}indexOf(e){return this.#e.indexOf(e)}keyAt(e){return c(this.#e,e)}from(e,t){let s=this.indexOf(e);if(-1===s)return;let r=s+t;return r<0&&(r=0),r>=this.size&&(r=this.size-1),this.at(r)}keyFrom(e,t){let s=this.indexOf(e);if(-1===s)return;let r=s+t;return r<0&&(r=0),r>=this.size&&(r=this.size-1),this.keyAt(r)}find(e,t){let s=0;for(let r of this){if(Reflect.apply(e,t,[r,s,this]))return r;s++}}findIndex(e,t){let s=0;for(let r of this){if(Reflect.apply(e,t,[r,s,this]))return s;s++}return -1}filter(t,s){let r=[],a=0;for(let e of this)Reflect.apply(t,s,[e,a,this])&&r.push(e),a++;return new e(r)}map(t,s){let r=[],a=0;for(let e of this)r.push([e[0],Reflect.apply(t,s,[e,a,this])]),a++;return new e(r)}reduce(...e){let[t,s]=e,r=0,a=s??this.at(0);for(let s of this)a=0===r&&1===e.length?s:Reflect.apply(t,this,[a,s,r,this]),r++;return a}reduceRight(...e){let[t,s]=e,r=s??this.at(-1);for(let s=this.size-1;s>=0;s--){let a=this.at(s);r=s===this.size-1&&1===e.length?a:Reflect.apply(t,this,[r,a,s,this])}return r}toSorted(t){return new e([...this.entries()].sort(t))}toReversed(){let t=new e;for(let e=this.size-1;e>=0;e--){let s=this.keyAt(e),r=this.get(s);t.set(s,r)}return t}toSpliced(...t){let s=[...this.entries()];return s.splice(...t),new e(s)}slice(t,s){let r=new e,a=this.size-1;if(void 0===t)return r;t<0&&(t+=this.size),void 0!==s&&s>0&&(a=s-1);for(let e=t;e<=a;e++){let t=this.keyAt(e),s=this.get(t);r.set(t,s)}return r}every(e,t){let s=0;for(let r of this){if(!Reflect.apply(e,t,[r,s,this]))return!1;s++}return!0}some(e,t){let s=0;for(let r of this){if(Reflect.apply(e,t,[r,s,this]))return!0;s++}return!1}}),e.s(["createCollection",()=>n],87342);var u=e.i(13123),m=e.i(87620),f=e.i(29297),h=e.i(36589),x=e.i(66033),p="rovingFocusGroup.onEntryFocus",g={bubbles:!1,cancelable:!0},v="RovingFocusGroup",[b,y,j]=n(v),[w,k]=(0,a.createContextScope)(v,[j]),[N,C]=w(v),T=s.forwardRef((e,s)=>(0,t.jsx)(b.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,t.jsx)(b.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,t.jsx)(R,{...e,ref:s})})}));T.displayName=v;var R=s.forwardRef((e,a)=>{let{__scopeRovingFocusGroup:l,orientation:n,loop:o=!1,dir:c,currentTabStopId:d,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:b,onEntryFocus:j,preventScrollOnEntryFocus:w=!1,...k}=e,C=s.useRef(null),T=(0,i.useComposedRefs)(a,C),R=(0,x.useDirection)(c),[I,S]=(0,h.useControllableState)({prop:d,defaultProp:u??null,onChange:b,caller:v}),[A,E]=s.useState(!1),M=(0,f.useCallbackRef)(j),D=y(l),L=s.useRef(!1),[P,F]=s.useState(0);return s.useEffect(()=>{let e=C.current;if(e)return e.addEventListener(p,M),()=>e.removeEventListener(p,M)},[M]),(0,t.jsx)(N,{scope:l,orientation:n,dir:R,loop:o,currentTabStopId:I,onItemFocus:s.useCallback(e=>S(e),[S]),onItemShiftTab:s.useCallback(()=>E(!0),[]),onFocusableItemAdd:s.useCallback(()=>F(e=>e+1),[]),onFocusableItemRemove:s.useCallback(()=>F(e=>e-1),[]),children:(0,t.jsx)(m.Primitive.div,{tabIndex:A||0===P?-1:0,"data-orientation":n,...k,ref:T,style:{outline:"none",...e.style},onMouseDown:(0,r.composeEventHandlers)(e.onMouseDown,()=>{L.current=!0}),onFocus:(0,r.composeEventHandlers)(e.onFocus,e=>{let t=!L.current;if(e.target===e.currentTarget&&t&&!A){let t=new CustomEvent(p,g);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=D().filter(e=>e.focusable);z([e.find(e=>e.active),e.find(e=>e.id===I),...e].filter(Boolean).map(e=>e.ref.current),w)}}L.current=!1}),onBlur:(0,r.composeEventHandlers)(e.onBlur,()=>E(!1))})})}),I="RovingFocusGroupItem",S=s.forwardRef((e,a)=>{let{__scopeRovingFocusGroup:i,focusable:l=!0,active:n=!1,tabStopId:o,children:c,...d}=e,f=(0,u.useId)(),h=o||f,x=C(I,i),p=x.currentTabStopId===h,g=y(i),{onFocusableItemAdd:v,onFocusableItemRemove:j,currentTabStopId:w}=x;return s.useEffect(()=>{if(l)return v(),()=>j()},[l,v,j]),(0,t.jsx)(b.ItemSlot,{scope:i,id:h,focusable:l,active:n,children:(0,t.jsx)(m.Primitive.span,{tabIndex:p?0:-1,"data-orientation":x.orientation,...d,ref:a,onMouseDown:(0,r.composeEventHandlers)(e.onMouseDown,e=>{l?x.onItemFocus(h):e.preventDefault()}),onFocus:(0,r.composeEventHandlers)(e.onFocus,()=>x.onItemFocus(h)),onKeyDown:(0,r.composeEventHandlers)(e.onKeyDown,e=>{if("Tab"===e.key&&e.shiftKey)return void x.onItemShiftTab();if(e.target!==e.currentTarget)return;let t=function(e,t,s){var r;let a=(r=e.key,"rtl"!==s?r:"ArrowLeft"===r?"ArrowRight":"ArrowRight"===r?"ArrowLeft":r);if(!("vertical"===t&&["ArrowLeft","ArrowRight"].includes(a))&&!("horizontal"===t&&["ArrowUp","ArrowDown"].includes(a)))return A[a]}(e,x.orientation,x.dir);if(void 0!==t){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let a=g().filter(e=>e.focusable).map(e=>e.ref.current);if("last"===t)a.reverse();else if("prev"===t||"next"===t){var s,r;"prev"===t&&a.reverse();let i=a.indexOf(e.currentTarget);a=x.loop?(s=a,r=i+1,s.map((e,t)=>s[(r+t)%s.length])):a.slice(i+1)}setTimeout(()=>z(a))}}),children:"function"==typeof c?c({isCurrentTabStop:p,hasTabStop:null!=w}):c})})});S.displayName=I;var A={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function z(e,t=!1){let s=document.activeElement;for(let r of e)if(r===s||(r.focus({preventScroll:t}),document.activeElement!==s))return}e.s(["Item",()=>S,"Root",()=>T,"createRovingFocusGroupScope",()=>k],51080);var E=e.i(85995),M="Tabs",[D,L]=(0,a.createContextScope)(M,[k]),P=k(),[F,O]=D(M),B=s.forwardRef((e,s)=>{let{__scopeTabs:r,value:a,onValueChange:i,defaultValue:l,orientation:n="horizontal",dir:o,activationMode:c="automatic",...d}=e,f=(0,x.useDirection)(o),[p,g]=(0,h.useControllableState)({prop:a,onChange:i,defaultProp:l??"",caller:M});return(0,t.jsx)(F,{scope:r,baseId:(0,u.useId)(),value:p,onValueChange:g,orientation:n,dir:f,activationMode:c,children:(0,t.jsx)(m.Primitive.div,{dir:f,"data-orientation":n,...d,ref:s})})});B.displayName=M;var H="TabsList",V=s.forwardRef((e,s)=>{let{__scopeTabs:r,loop:a=!0,...i}=e,l=O(H,r),n=P(r);return(0,t.jsx)(T,{asChild:!0,...n,orientation:l.orientation,dir:l.dir,loop:a,children:(0,t.jsx)(m.Primitive.div,{role:"tablist","aria-orientation":l.orientation,...i,ref:s})})});V.displayName=H;var q="TabsTrigger",K=s.forwardRef((e,s)=>{let{__scopeTabs:a,value:i,disabled:l=!1,...n}=e,o=O(q,a),c=P(a),d=G(o.baseId,i),u=_(o.baseId,i),f=i===o.value;return(0,t.jsx)(S,{asChild:!0,...c,focusable:!l,active:f,children:(0,t.jsx)(m.Primitive.button,{type:"button",role:"tab","aria-selected":f,"aria-controls":u,"data-state":f?"active":"inactive","data-disabled":l?"":void 0,disabled:l,id:d,...n,ref:s,onMouseDown:(0,r.composeEventHandlers)(e.onMouseDown,e=>{l||0!==e.button||!1!==e.ctrlKey?e.preventDefault():o.onValueChange(i)}),onKeyDown:(0,r.composeEventHandlers)(e.onKeyDown,e=>{[" ","Enter"].includes(e.key)&&o.onValueChange(i)}),onFocus:(0,r.composeEventHandlers)(e.onFocus,()=>{let e="manual"!==o.activationMode;f||l||!e||o.onValueChange(i)})})})});K.displayName=q;var $="TabsContent",U=s.forwardRef((e,r)=>{let{__scopeTabs:a,value:i,forceMount:l,children:n,...o}=e,c=O($,a),d=G(c.baseId,i),u=_(c.baseId,i),f=i===c.value,h=s.useRef(f);return s.useEffect(()=>{let e=requestAnimationFrame(()=>h.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,t.jsx)(E.Presence,{present:l||f,children:({present:s})=>(0,t.jsx)(m.Primitive.div,{"data-state":f?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":d,hidden:!s,id:u,tabIndex:0,...o,ref:r,style:{...e.style,animationDuration:h.current?"0s":void 0},children:s&&n})})});function G(e,t){return`${e}-trigger-${t}`}function _(e,t){return`${e}-content-${t}`}U.displayName=$,e.s(["Content",()=>U,"List",()=>V,"Root",()=>B,"Tabs",()=>B,"TabsContent",()=>U,"TabsList",()=>V,"TabsTrigger",()=>K,"Trigger",()=>K,"createTabsScope",()=>L],43133);var W=e.i(43133),W=W,X=e.i(31777);let J=W.Root,Q=s.forwardRef(({className:e,...s},r)=>(0,t.jsx)(W.List,{ref:r,className:(0,X.cn)("bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1",e),...s}));Q.displayName=W.List.displayName;let Y=s.forwardRef(({className:e,...s},r)=>(0,t.jsx)(W.Trigger,{ref:r,className:(0,X.cn)("ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow",e),...s}));Y.displayName=W.Trigger.displayName;let Z=s.forwardRef(({className:e,...s},r)=>(0,t.jsx)(W.Content,{ref:r,className:(0,X.cn)("ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",e),...s}));Z.displayName=W.Content.displayName,e.s(["Tabs",()=>J,"TabsContent",()=>Z,"TabsList",()=>Q,"TabsTrigger",()=>Y],68304)},81846,e=>{"use strict";var t=e.i(20314),s=e.i(94237),r=e.i(31777);let a=(0,s.cva)("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-none",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function i({className:e,variant:s,...i}){return(0,t.jsx)("div",{className:(0,r.cn)(a({variant:s}),e),...i})}e.s(["Badge",()=>i])},1012,e=>{"use strict";let t=(0,e.i(3645).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",()=>t])},30090,e=>{"use strict";let t=(0,e.i(3645).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["default",()=>t])},54277,e=>{"use strict";var t=e.i(30090);e.s(["CircleX",()=>t.default])},33548,23925,e=>{"use strict";let t=(0,e.i(3645).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["Copy",()=>t],33548);var s=e.i(1012);e.s(["Check",()=>s.default],23925)},49228,e=>{"use strict";let t=(0,e.i(3645).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>t],49228)},95812,e=>{"use strict";let t=(0,e.i(3645).default)("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["Circle",()=>t],95812)},35e3,e=>{"use strict";var t=e.i(80986);e.s(["CheckCircle2",()=>t.default])},44412,e=>{"use strict";var t=e.i(20314),s=e.i(79054),r=e.i(81975),a=e.i(68304),i=e.i(31777),l=e.i(83428),n=e.i(3645);let o=(0,n.default)("rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]),c=(0,n.default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),d=(0,n.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 u=e.i(38573),m=e.i(49228),f=e.i(54277),h=e.i(95812),x=e.i(35e3);let p=(0,n.default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);var g=e.i(35364),v=e.i(2828),b=e.i(33548),y=e.i(23925),j=e.i(30702),w=e.i(11495);let k={linux:"Linux",darwin:"macOS",win32:"Windows"},N={ide:{label:"IDE",icon:d},"cli-agent":{label:"CLI Agent",icon:u.Terminal},vcs:{label:"VCS",icon:m.GitBranch},terminal:{label:"Terminal",icon:u.Terminal}};function C({status:e}){return"available"===e?(0,t.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,t.jsx)(y.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===e?(0,t.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,t.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 T({tool:e,open:r,onClose:a,onRefresh:i,autoStart:n}){let[u,m]=(0,s.useState)(!1),[f,h]=(0,s.useState)(!1),{logs:x,status:v,startInstall:T}=function(e){let[t,r]=(0,s.useState)([]),[a,i]=(0,s.useState)("idle"),[l,n]=(0,s.useState)(null),o=(0,s.useRef)(null),c=(0,s.useCallback)(()=>{o.current&&(o.current.close(),o.current=null)},[]);return(0,s.useEffect)(()=>c,[c]),{logs:t,status:a,result:l,startInstall:(0,s.useCallback)(()=>{c(),r([]),n(null),i("streaming");let t=new EventSource(`/api/tools/${e}/install/stream`);o.current=t,t.onmessage=e=>{r(t=>[...t,e.data])},t.addEventListener("done",e=>{let t=JSON.parse(e.data);n(t),i("error"===t.status?"error":"done"),c()}),t.onerror=()=>{i("error"),c()}},[e,c])}}(e.id),R=(0,s.useRef)(null),I=(0,s.useRef)(!0),S=(0,s.useRef)(!1),A="available"===e.status.status,z="error"===e.status.status,E=A&&!!e.openDirectory,M=!A&&!z&&e.autoInstall;async function D(){h(!0);try{await fetch(`/api/tools/${e.id}/launch`,{method:"POST"})}finally{h(!1)}}(0,s.useEffect)(()=>{r&&n&&M&&"idle"===v&&!S.current&&(S.current=!0,T()),r||(S.current=!1)},[r,n,M,v,T]);let L=(0,s.useCallback)(()=>{let e=R.current;e&&(I.current=e.scrollTop+e.clientHeight>=e.scrollHeight-50)},[]);(0,s.useEffect)(()=>{I.current&&R.current&&(R.current.scrollTop=R.current.scrollHeight)},[x,v]),(0,s.useEffect)(()=>{"done"===v&&i&&i()},[v,i]);let P=(0,t.jsxs)("div",{className:"flex flex-col gap-1.5 pr-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[e.iconUrl?(0,t.jsx)("img",{src:e.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,t.jsx)(p,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,t.jsx)("h2",{className:"text-base font-bold",children:e.name}),(0,t.jsx)(C,{status:e.status.status})]}),(0,t.jsx)("div",{className:"flex items-center gap-2",children:e.tags.map(e=>{let s=N[e]??{label:e,icon:d},r=s.icon;return(0,t.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,t.jsx)(r,{className:"h-3 w-3"}),s.label]},e)})})]});return(0,t.jsx)(w.BaseDrawer,{open:r,onClose:a,size:"md",modal:!0,title:e.name,header:P,"data-testid":"tool-detail-drawer",children:(0,t.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,t.jsx)("p",{className:"text-muted-foreground text-sm",children:e.description}),e.author||e.platforms?(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[e.author?(0,t.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",e.website?(0,t.jsx)("a",{href:e.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:e.author}):(0,t.jsx)("span",{className:"text-foreground",children:e.author})]}):null,e.platforms&&e.platforms.length>0?(0,t.jsx)("span",{className:"text-muted-foreground",children:e.platforms.map(e=>k[e]??e).join(" · ")}):null]}):null,e.installCommand?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,t.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,t.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:(0,t.jsx)("code",{children:e.installCommand})}),(0,t.jsxs)(g.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(){e.installCommand&&navigator.clipboard.writeText(e.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":u?"Copied!":"Copy install command",children:[u?(0,t.jsx)(y.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,t.jsx)(b.Copy,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{className:"ml-1 text-[10px]",children:u?"Copied!":"Copy"})]})]})]}):null,(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[M?(0,t.jsxs)(g.Button,{size:"sm",onClick:T,disabled:"streaming"===v,"aria-label":`Install ${e.name}`,className:"cursor-pointer",children:["streaming"===v?(0,t.jsx)(l.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}):(0,t.jsx)(c,{className:"mr-1.5 h-3.5 w-3.5"}),"streaming"===v?"Installing...":"Install"]}):null,E?(0,t.jsxs)(g.Button,{size:"sm",variant:"outline",onClick:()=>void D(),disabled:f,"aria-label":`Launch ${e.name}`,className:"cursor-pointer",children:[f?(0,t.jsx)(l.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}):(0,t.jsx)(o,{className:"mr-1.5 h-3.5 w-3.5"}),"Launch"]}):null,e.documentationUrl?(0,t.jsx)(g.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,t.jsxs)("a",{href:e.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,t.jsx)(j.ExternalLink,{className:"ml-1 h-3 w-3"})]})}):null]}),("streaming"===v||"done"===v||"error"===v)&&x.length>0?(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,t.jsxs)("div",{ref:R,onScroll:L,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:[x.map((e,s)=>(0,t.jsx)("div",{className:"break-all whitespace-pre-wrap",children:e},s)),"done"===v?(0,t.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===v?(0,t.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let R={ide:{label:"IDE",icon:d},"cli-agent":{label:"CLI Agent",icon:u.Terminal},vcs:{label:"VCS",icon:m.GitBranch},terminal:{label:"Terminal",icon:u.Terminal}};function I({tool:e,onRefresh:r,className:a}){let[n,u]=(0,s.useState)(!1),[m,b]=(0,s.useState)(!1),[y,j]=(0,s.useTransition)(),w="available"===e.status.status,k="error"===e.status.status,N=w&&!!e.openDirectory;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{"data-testid":"tool-card",onClick:function(){b(!1),u(!0)},className:(0,i.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",a),children:[(0,t.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,t.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[e.iconUrl?(0,t.jsx)("img",{src:e.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,t.jsx)(p,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,t.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:e.name})]}),(0,t.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:e.tags.map(e=>{let s=R[e]??{label:e,icon:d},r=s.icon;return(0,t.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,t.jsx)(r,{className:"h-2.5 w-2.5"}),s.label]},e)})})]}),(0,t.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:e.summary}),(0,t.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[k&&"error"===e.status.status?(0,t.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:e.status.errorMessage,children:[(0,t.jsx)(f.CircleX,{className:"h-3 w-3 shrink-0"}),e.status.errorMessage??"Error"]}):w?(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,t.jsx)(x.CheckCircle2,{className:"h-3 w-3"}),"Installed"]}):(0,t.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,t.jsx)(h.Circle,{className:"h-3 w-3"}),"Not installed"]}),e.required?(0,t.jsx)(v.TooltipProvider,{children:(0,t.jsxs)(v.Tooltip,{children:[(0,t.jsx)(v.TooltipTrigger,{asChild:!0,children:(0,t.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,t.jsx)(v.TooltipContent,{side:"top",children:"This tool is required for Shep to function properly"})]})}):null]}),(0,t.jsx)("div",{className:"flex items-center gap-1",children:w&&N?(0,t.jsxs)(g.Button,{size:"sm",variant:"outline",onClick:function(t){t.stopPropagation(),j(async()=>{await fetch(`/api/tools/${e.id}/launch`,{method:"POST"})})},disabled:y,"aria-label":`Launch ${e.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[y?(0,t.jsx)(l.Loader2,{className:"mr-1 h-3 w-3 animate-spin"}):(0,t.jsx)(o,{className:"mr-1 h-3 w-3"}),"Launch"]}):w||k?null:(0,t.jsxs)(g.Button,{size:"sm",variant:"default",onClick:function(t){t.stopPropagation(),b(e.autoInstall),u(!0)},"aria-label":`Install ${e.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,t.jsx)(c,{className:"mr-1 h-3 w-3"}),"Install"]})})]})]}),(0,t.jsx)(T,{tool:e,open:n,onClose:()=>u(!1),onRefresh:r,autoStart:m})]})}let S={all:()=>!0,ide:e=>e.tags.includes("ide"),"cli-agent":e=>e.tags.includes("cli-agent"),vcs:e=>e.tags.includes("vcs"),terminal:e=>e.tags.includes("terminal")};function A({tools:e,className:l}){let[n,o]=(0,s.useState)(e),[c,d]=(0,s.useState)("all"),u=(0,s.useCallback)(async()=>{try{let e=await fetch("/api/tools");if(e.ok){let t=await e.json();o(t)}}catch{}},[]),m=n.filter(S[c]);return(0,t.jsxs)("div",{"data-testid":"tools-page-client",className:(0,i.cn)("space-y-4",l),children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(r.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,t.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,t.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[n.filter(e=>"available"===e.status.status).length,"/",n.length," installed"]})]}),(0,t.jsxs)(a.Tabs,{value:c,onValueChange:e=>d(e),"data-testid":"tools-page-tabs",children:[(0,t.jsxs)(a.TabsList,{className:"h-7",children:[(0,t.jsx)(a.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,t.jsx)(a.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,t.jsx)(a.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,t.jsx)(a.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,t.jsx)(a.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,t.jsx)(a.TabsContent,{value:c,className:"mt-3",children:0===m.length?(0,t.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,t.jsx)(r.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,t.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,t.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(e=>(0,t.jsx)(I,{tool:e,onRefresh:u},e.id))})})]})]})}e.s(["ToolsPageClient",()=>A],44412)}]);
|