@shepai/cli 1.55.3 → 1.57.0
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/apis/json-schema/NotificationEventConfig.yaml +20 -0
- package/apis/json-schema/NotificationEventType.yaml +4 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +22 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/ide-launcher-service.interface.d.ts +3 -1
- package/dist/packages/core/src/application/ports/output/services/ide-launcher-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/tools/launch-tool.use-case.d.ts +29 -0
- package/dist/packages/core/src/application/use-cases/tools/launch-tool.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/tools/launch-tool.use-case.js +60 -0
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts +31 -0
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/tools/list-tools.use-case.js +70 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +4 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +21 -1
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +4 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +13 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +8 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +18 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +28 -0
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +11 -5
- package/dist/packages/core/src/infrastructure/services/notifications/notification.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/notifications/notification.service.js +4 -0
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts +61 -0
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +286 -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 +18 -7
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +11 -1
- 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/tools/CLAUDE.md +63 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +3 -2
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +5 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +6 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gemini-cli.json +27 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/gh.json +18 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/git.json +18 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/vscode.json +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/windsurf.json +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zed.json +1 -0
- package/dist/src/presentation/cli/commands/install.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/install.command.js +6 -13
- package/dist/src/presentation/cli/commands/tools.command.d.ts +14 -0
- package/dist/src/presentation/cli/commands/tools.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/tools.command.js +36 -0
- package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/ui.command.js +6 -0
- package/dist/src/presentation/cli/index.js +2 -0
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.d.ts +7 -0
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.js +18 -0
- package/dist/src/presentation/web/app/api/tools/[id]/launch/route.d.ts +7 -0
- package/dist/src/presentation/web/app/api/tools/[id]/launch/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/tools/[id]/launch/route.js +28 -0
- package/dist/src/presentation/web/app/api/tools/route.d.ts +3 -0
- package/dist/src/presentation/web/app/api/tools/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/tools/route.js +13 -0
- package/dist/src/presentation/web/app/tools/page.d.ts +4 -0
- package/dist/src/presentation/web/app/tools/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/tools/page.js +10 -0
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +6 -0
- package/dist/src/presentation/web/components/features/index.d.ts +3 -0
- package/dist/src/presentation/web/components/features/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/index.js +3 -0
- package/dist/src/presentation/web/components/features/tools/index.d.ts +4 -0
- package/dist/src/presentation/web/components/features/tools/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/index.js +3 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.d.ts +9 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.js +19 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/install-instructions.stories.js +77 -0
- package/dist/src/presentation/web/components/features/tools/tool-card.d.ts +8 -0
- package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/tool-card.js +39 -0
- package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts +15 -0
- package/dist/src/presentation/web/components/features/tools/tool-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/tool-card.stories.js +136 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.d.ts +7 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.js +31 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts +13 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/tools/tools-page-client.stories.js +122 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/dev-server.js +11 -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 +4 -0
- package/web/.next/build-manifest.json +5 -5
- 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 +30 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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 +3 -3
- package/web/.next/server/app/_not-found/page.js +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/dialog/pick-files/route.js +2 -2
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/tools/[id]/install/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/tools/[id]/install/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/tools/[id]/install/route.js +7 -0
- package/web/.next/server/app/api/tools/[id]/install/route.js.map +5 -0
- package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -0
- package/web/.next/server/app/api/tools/[id]/install/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/tools/[id]/launch/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/tools/[id]/launch/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/tools/[id]/launch/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/tools/[id]/launch/route.js +7 -0
- package/web/.next/server/app/api/tools/[id]/launch/route.js.map +5 -0
- package/web/.next/server/app/api/tools/[id]/launch/route.js.nft.json +1 -0
- package/web/.next/server/app/api/tools/[id]/launch/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/tools/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/tools/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/tools/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/tools/route.js +7 -0
- package/web/.next/server/app/api/tools/route.js.map +5 -0
- package/web/.next/server/app/api/tools/route.js.nft.json +1 -0
- package/web/.next/server/app/api/tools/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/page/build-manifest.json +3 -3
- package/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/page.js +2 -2
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/tools/page/build-manifest.json +17 -0
- package/web/.next/server/app/tools/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/tools/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/tools/page/server-reference-manifest.json +4 -0
- package/web/.next/server/app/tools/page.js +15 -0
- package/web/.next/server/app/tools/page.js.map +5 -0
- package/web/.next/server/app/tools/page.js.nft.json +1 -0
- package/web/.next/server/app/tools/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/server/app/version/page.js +2 -2
- 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 +4 -0
- package/web/.next/server/chunks/{403f9_next_435614de._.js → 403f9_next_567de315._.js} +6 -7
- package/web/.next/server/chunks/403f9_next_567de315._.js.map +1 -0
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_tools_[id]_install_route_actions_ad71fb5e.js +3 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_tools_[id]_launch_route_actions_0501a9ac.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js +4 -0
- package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__bb619083._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__bb619083._.js.map +1 -0
- package/web/.next/server/chunks/src_presentation_web__next-internal_server_app_api_tools_route_actions_b8d6f9a0.js +3 -0
- package/web/.next/server/chunks/src_presentation_web__next-internal_server_app_api_tools_route_actions_b8d6f9a0.js.map +1 -0
- package/web/.next/server/chunks/ssr/6769f_@radix-ui_react-roving-focus_dist_index_mjs_b3be3d8e._.js +3 -0
- package/web/.next/server/chunks/ssr/6769f_@radix-ui_react-roving-focus_dist_index_mjs_b3be3d8e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1efeb0eb._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1efeb0eb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__48c68a96._.js +12 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__48c68a96._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__32472b89._.js → [root-of-the-server]__685eaa45._.js} +2 -2
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f47a461b._.js → server/chunks/ssr/[root-of-the-server]__757c7912._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__950afd5e._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d8fbe735._.js.map → [root-of-the-server]__950afd5e._.js.map} +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e1c44885._.js → server/chunks/ssr/[root-of-the-server]__dbd220d2._.js} +2 -2
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6e8b5181._.js → server/chunks/ssr/[root-of-the-server]__fbc89707._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0e2c2b4f._.js +6 -0
- package/web/.next/server/chunks/ssr/_0e2c2b4f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_2900ed94._.js +3 -0
- package/web/.next/server/chunks/ssr/_2900ed94._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ad8a094f._.js +4 -0
- package/web/.next/server/chunks/ssr/_ad8a094f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e242b954._.js +3 -0
- package/web/.next/server/chunks/ssr/_e242b954._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js +7 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_f1dd7791.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_f1dd7791.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- 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 +15 -15
- 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 +4 -0
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
- 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 +30 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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 +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js +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/dialog/pick-files/route.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route/build-manifest.json +11 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +7 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route/build-manifest.json +11 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route.js +7 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/launch/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route/build-manifest.json +11 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route.js +7 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +17 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/next-font-manifest.json +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js +15 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.map +5 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +2 -2
- 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 +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/{403f9_next_435614de._.js → 403f9_next_567de315._.js} +6 -7
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_tools_[id]_install_route_actions_ad71fb5e.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_tools_[id]_launch_route_actions_0501a9ac.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__bb619083._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/src_presentation_web__next-internal_server_app_api_tools_route_actions_b8d6f9a0.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/6769f_@radix-ui_react-roving-focus_dist_index_mjs_b3be3d8e._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__1efeb0eb._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__48c68a96._.js +12 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__32472b89._.js → [root-of-the-server]__685eaa45._.js} +2 -2
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__f47a461b._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__757c7912._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__950afd5e._.js +3 -0
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__e1c44885._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__dbd220d2._.js} +2 -2
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__6e8b5181._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e2c2b4f._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_2900ed94._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ad8a094f._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e242b954._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_d26a7485._.js +7 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_f1dd7791.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ec3b0a65._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
- 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 +15 -15
- package/web/.next/standalone/src/presentation/web/app/api/tools/[id]/install/route.ts +24 -0
- package/web/.next/standalone/src/presentation/web/app/api/tools/[id]/launch/route.ts +38 -0
- package/web/.next/standalone/src/presentation/web/app/api/tools/route.ts +14 -0
- package/web/.next/standalone/src/presentation/web/app/tools/page.tsx +17 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +6 -0
- package/web/.next/standalone/src/presentation/web/components/features/index.ts +3 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/index.ts +3 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/install-instructions.stories.tsx +89 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/install-instructions.tsx +109 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.stories.tsx +181 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tool-card.tsx +188 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.stories.tsx +141 -0
- package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.tsx +100 -0
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +5 -5
- package/web/.next/standalone/src/presentation/web/dev-server.ts +15 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/0cd7c513169faee3.js +1 -0
- package/web/.next/static/chunks/1887af4ad3781531.js +2 -0
- package/web/.next/static/chunks/225de19e886a62ab.js +10 -0
- package/web/.next/static/chunks/35f41ba0a6d626d7.js +1 -0
- package/web/.next/static/chunks/3d4dcf0be654a331.js +5 -0
- package/web/.next/static/chunks/4651f20be1a3b7d7.css +2 -0
- package/web/.next/static/chunks/7138c478667158d0.js +1 -0
- package/web/.next/static/chunks/a1f2befd62b321c0.js +1 -0
- package/web/.next/static/chunks/a9c2b889c8749a94.js +1 -0
- package/web/.next/static/chunks/cda11a2491d519fc.js +1 -0
- package/web/.next/static/chunks/ef237b70209d9853.js +1 -0
- package/web/.next/static/chunks/{turbopack-35ff53de4dab1e56.js → turbopack-6a11f2f1634ff6e0.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/link.d.ts +5 -1
- package/web/.next/types/routes.d.ts +6 -2
- package/web/.next/types/validator.ts +36 -0
- package/web/.next/server/chunks/403f9_next_435614de._.js.map +0 -1
- package/web/.next/server/chunks/[externals]__ba6223e5._.js +0 -3
- package/web/.next/server/chunks/ssr/[externals]_node:path_d28a9bfe._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +0 -12
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d8fbe735._.js +0 -3
- package/web/.next/server/chunks/ssr/_1632a21f._.js +0 -10
- package/web/.next/server/chunks/ssr/_1632a21f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a35f2870._.js +0 -3
- package/web/.next/server/chunks/ssr/_a35f2870._.js.map +0 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +0 -3
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/[externals]__ba6223e5._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[externals]_node:path_d28a9bfe._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +0 -12
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d8fbe735._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_1632a21f._.js +0 -10
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a35f2870._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_version_version-page-client_tsx_fe9db753._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ui_badge_tsx_964c2a3b._.js +0 -3
- package/web/.next/static/chunks/00f6ac2dde225eb7.js +0 -1
- package/web/.next/static/chunks/084314470f2144d2.js +0 -2
- package/web/.next/static/chunks/1f13bc20e938335c.css +0 -2
- package/web/.next/static/chunks/8f4461aee9a05741.js +0 -5
- package/web/.next/static/chunks/958c51856b8d6ed7.js +0 -10
- package/web/.next/static/chunks/9a82d8c76f175235.js +0 -1
- package/web/.next/static/chunks/b13aa397579082e7.js +0 -1
- package/web/.next/static/chunks/e21d644e5a584136.js +0 -1
- package/web/.next/static/chunks/f023fd36b47a5baa.js +0 -1
- /package/web/.next/server/chunks/{[externals]__ba6223e5._.js.map → 744ca_web__next-internal_server_app_api_tools_[id]_install_route_actions_ad71fb5e.js.map} +0 -0
- /package/web/.next/server/chunks/{ssr/[externals]_node:path_d28a9bfe._.js.map → 744ca_web__next-internal_server_app_api_tools_[id]_launch_route_actions_0501a9ac.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__32472b89._.js.map → [root-of-the-server]__685eaa45._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f47a461b._.js.map → [root-of-the-server]__757c7912._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__e1c44885._.js.map → [root-of-the-server]__dbd220d2._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__6e8b5181._.js.map → [root-of-the-server]__fbc89707._.js.map} +0 -0
- /package/web/.next/static/{cqDB25f0Vxmh-LBw_64mT → V2579MPjpJ_hqKjPsmMlR}/_buildManifest.js +0 -0
- /package/web/.next/static/{cqDB25f0Vxmh-LBw_64mT → V2579MPjpJ_hqKjPsmMlR}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{cqDB25f0Vxmh-LBw_64mT → V2579MPjpJ_hqKjPsmMlR}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ToolsPageClient } from './tools-page-client';
|
|
3
|
+
import type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';
|
|
4
|
+
|
|
5
|
+
const mockTools: ToolItem[] = [
|
|
6
|
+
{
|
|
7
|
+
id: 'cursor',
|
|
8
|
+
name: 'Cursor',
|
|
9
|
+
summary: 'AI-powered code editor built on VS Code',
|
|
10
|
+
description:
|
|
11
|
+
'Cursor is an AI-first code editor that integrates AI models deeply into the development workflow.',
|
|
12
|
+
tags: ['ide'],
|
|
13
|
+
iconUrl: 'https://cdn.simpleicons.org/cursor',
|
|
14
|
+
autoInstall: false,
|
|
15
|
+
required: false,
|
|
16
|
+
openDirectory: '/usr/bin/cursor',
|
|
17
|
+
documentationUrl: 'https://cursor.sh',
|
|
18
|
+
installCommand: 'brew install --cask cursor',
|
|
19
|
+
status: { status: 'available', toolName: 'cursor' },
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'vscode',
|
|
23
|
+
name: 'VS Code',
|
|
24
|
+
summary: 'Lightweight but powerful source code editor',
|
|
25
|
+
description:
|
|
26
|
+
'Visual Studio Code is a lightweight but powerful source code editor from Microsoft with support for debugging, Git, syntax highlighting, and intelligent code completion.',
|
|
27
|
+
tags: ['ide'],
|
|
28
|
+
iconUrl: 'https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg',
|
|
29
|
+
autoInstall: false,
|
|
30
|
+
required: false,
|
|
31
|
+
openDirectory: '/usr/bin/code',
|
|
32
|
+
documentationUrl: 'https://code.visualstudio.com',
|
|
33
|
+
installCommand: 'brew install --cask visual-studio-code',
|
|
34
|
+
status: { status: 'missing', toolName: 'vscode' },
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'claude-code',
|
|
38
|
+
name: 'Claude Code',
|
|
39
|
+
summary: 'Anthropic AI coding agent for the terminal',
|
|
40
|
+
description:
|
|
41
|
+
'Claude Code is an agentic coding tool by Anthropic that lives in your terminal, understands your codebase, and helps you ship features faster.',
|
|
42
|
+
tags: ['cli-agent'],
|
|
43
|
+
iconUrl: 'https://cdn.simpleicons.org/claude',
|
|
44
|
+
autoInstall: true,
|
|
45
|
+
required: false,
|
|
46
|
+
openDirectory: undefined,
|
|
47
|
+
documentationUrl: 'https://claude.ai/code',
|
|
48
|
+
installCommand: 'npm install -g @anthropic-ai/claude-code',
|
|
49
|
+
status: { status: 'available', toolName: 'claude-code' },
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'aider',
|
|
53
|
+
name: 'Aider',
|
|
54
|
+
summary: 'AI pair programming in your terminal',
|
|
55
|
+
description:
|
|
56
|
+
'Aider lets you pair program with LLMs to edit code in your local git repository. It works best with Claude 3.5 Sonnet and GPT-4o.',
|
|
57
|
+
tags: ['cli-agent'],
|
|
58
|
+
iconUrl: undefined,
|
|
59
|
+
autoInstall: true,
|
|
60
|
+
required: false,
|
|
61
|
+
openDirectory: undefined,
|
|
62
|
+
documentationUrl: 'https://aider.chat',
|
|
63
|
+
installCommand: 'pip install aider-chat',
|
|
64
|
+
status: { status: 'missing', toolName: 'aider' },
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'goose',
|
|
68
|
+
name: 'Goose',
|
|
69
|
+
summary: 'Open-source AI coding agent by Block',
|
|
70
|
+
description:
|
|
71
|
+
'Goose is a developer agent by Block that autonomously handles complex engineering tasks through conversation and code execution.',
|
|
72
|
+
tags: ['cli-agent'],
|
|
73
|
+
iconUrl: undefined,
|
|
74
|
+
autoInstall: true,
|
|
75
|
+
required: false,
|
|
76
|
+
openDirectory: undefined,
|
|
77
|
+
documentationUrl: 'https://block.github.io/goose',
|
|
78
|
+
installCommand: 'pip install goose-ai',
|
|
79
|
+
status: { status: 'missing', toolName: 'goose' },
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
const ideOnlyTools = mockTools.filter((t) => t.tags.includes('ide'));
|
|
84
|
+
const cliOnlyTools = mockTools.filter((t) => t.tags.includes('cli-agent'));
|
|
85
|
+
|
|
86
|
+
const meta: Meta<typeof ToolsPageClient> = {
|
|
87
|
+
title: 'Features/ToolsPageClient',
|
|
88
|
+
component: ToolsPageClient,
|
|
89
|
+
parameters: {
|
|
90
|
+
layout: 'padded',
|
|
91
|
+
},
|
|
92
|
+
tags: ['autodocs'],
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export default meta;
|
|
96
|
+
type Story = StoryObj<typeof meta>;
|
|
97
|
+
|
|
98
|
+
export const Default: Story = {
|
|
99
|
+
args: {
|
|
100
|
+
tools: mockTools,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const AllToolsMix: Story = {
|
|
105
|
+
args: {
|
|
106
|
+
tools: mockTools,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export const IDEsOnly: Story = {
|
|
111
|
+
args: {
|
|
112
|
+
tools: ideOnlyTools,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export const CLIAgentsOnly: Story = {
|
|
117
|
+
args: {
|
|
118
|
+
tools: cliOnlyTools,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export const EmptyList: Story = {
|
|
123
|
+
args: {
|
|
124
|
+
tools: [],
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export const AllInstalled: Story = {
|
|
129
|
+
args: {
|
|
130
|
+
tools: mockTools.map((t) => ({
|
|
131
|
+
...t,
|
|
132
|
+
status: { status: 'available' as const, toolName: t.id },
|
|
133
|
+
})),
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const NoneInstalled: Story = {
|
|
138
|
+
args: {
|
|
139
|
+
tools: mockTools.map((t) => ({ ...t, status: { status: 'missing' as const, toolName: t.id } })),
|
|
140
|
+
},
|
|
141
|
+
};
|
package/web/.next/standalone/src/presentation/web/components/features/tools/tools-page-client.tsx
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Wrench } from 'lucide-react';
|
|
5
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
|
6
|
+
import { cn } from '@/lib/utils';
|
|
7
|
+
import { ToolCard } from './tool-card';
|
|
8
|
+
import type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';
|
|
9
|
+
|
|
10
|
+
export interface ToolsPageClientProps {
|
|
11
|
+
tools: ToolItem[];
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type TabValue = 'all' | 'ide' | 'cli-agent' | 'vcs';
|
|
16
|
+
|
|
17
|
+
const TAB_FILTER: Record<TabValue, (tool: ToolItem) => boolean> = {
|
|
18
|
+
all: () => true,
|
|
19
|
+
ide: (tool) => tool.tags.includes('ide'),
|
|
20
|
+
'cli-agent': (tool) => tool.tags.includes('cli-agent'),
|
|
21
|
+
vcs: (tool) => tool.tags.includes('vcs'),
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export function ToolsPageClient({ tools: initialTools, className }: ToolsPageClientProps) {
|
|
25
|
+
const [tools, setTools] = useState<ToolItem[]>(initialTools);
|
|
26
|
+
const [activeTab, setActiveTab] = useState<TabValue>('all');
|
|
27
|
+
|
|
28
|
+
async function refreshTools() {
|
|
29
|
+
try {
|
|
30
|
+
const res = await fetch('/api/tools');
|
|
31
|
+
if (res.ok) {
|
|
32
|
+
const updated = (await res.json()) as ToolItem[];
|
|
33
|
+
setTools(updated);
|
|
34
|
+
}
|
|
35
|
+
} catch {
|
|
36
|
+
// Silently ignore refresh errors; user can re-navigate to refresh
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const filtered = tools.filter(TAB_FILTER[activeTab]);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div data-testid="tools-page-client" className={cn('space-y-4', className)}>
|
|
44
|
+
{/* Compact header */}
|
|
45
|
+
<div className="flex items-center gap-2">
|
|
46
|
+
<Wrench className="text-muted-foreground h-4 w-4" />
|
|
47
|
+
<h1 className="text-sm font-bold tracking-tight">Tools</h1>
|
|
48
|
+
<span className="text-muted-foreground text-[10px]">
|
|
49
|
+
{tools.filter((t) => t.status.status === 'available').length}/{tools.length} installed
|
|
50
|
+
</span>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<Tabs
|
|
54
|
+
value={activeTab}
|
|
55
|
+
onValueChange={(value) => setActiveTab(value as TabValue)}
|
|
56
|
+
data-testid="tools-page-tabs"
|
|
57
|
+
>
|
|
58
|
+
<TabsList className="h-7">
|
|
59
|
+
<TabsTrigger value="all" data-testid="tools-tab-all" className="px-2.5 text-xs">
|
|
60
|
+
All
|
|
61
|
+
</TabsTrigger>
|
|
62
|
+
<TabsTrigger value="ide" data-testid="tools-tab-ide" className="px-2.5 text-xs">
|
|
63
|
+
IDEs
|
|
64
|
+
</TabsTrigger>
|
|
65
|
+
<TabsTrigger
|
|
66
|
+
value="cli-agent"
|
|
67
|
+
data-testid="tools-tab-cli-agent"
|
|
68
|
+
className="px-2.5 text-xs"
|
|
69
|
+
>
|
|
70
|
+
CLI Agents
|
|
71
|
+
</TabsTrigger>
|
|
72
|
+
<TabsTrigger value="vcs" data-testid="tools-tab-vcs" className="px-2.5 text-xs">
|
|
73
|
+
Version Control
|
|
74
|
+
</TabsTrigger>
|
|
75
|
+
</TabsList>
|
|
76
|
+
|
|
77
|
+
<TabsContent value={activeTab} className="mt-3">
|
|
78
|
+
{filtered.length === 0 ? (
|
|
79
|
+
<div
|
|
80
|
+
data-testid="tools-page-empty"
|
|
81
|
+
className="text-muted-foreground flex flex-col items-center justify-center py-12 text-center"
|
|
82
|
+
>
|
|
83
|
+
<Wrench className="mb-2 h-6 w-6 opacity-20" />
|
|
84
|
+
<p className="text-xs">No tools in this category.</p>
|
|
85
|
+
</div>
|
|
86
|
+
) : (
|
|
87
|
+
<div
|
|
88
|
+
data-testid="tools-page-grid"
|
|
89
|
+
className="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
|
|
90
|
+
>
|
|
91
|
+
{filtered.map((tool) => (
|
|
92
|
+
<ToolCard key={tool.id} tool={tool} onRefresh={refreshTools} />
|
|
93
|
+
))}
|
|
94
|
+
</div>
|
|
95
|
+
)}
|
|
96
|
+
</TabsContent>
|
|
97
|
+
</Tabs>
|
|
98
|
+
</div>
|
|
99
|
+
);
|
|
100
|
+
}
|
package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { usePathname } from 'next/navigation';
|
|
4
|
-
import { Home,
|
|
4
|
+
import { Home, Wrench, Plus } from 'lucide-react';
|
|
5
5
|
import {
|
|
6
6
|
Sidebar,
|
|
7
7
|
SidebarHeader,
|
|
@@ -82,10 +82,10 @@ export function AppSidebar({
|
|
|
82
82
|
|
|
83
83
|
<SidebarNavItem icon={Home} label="Control Center" href="/" active={pathname === '/'} />
|
|
84
84
|
<SidebarNavItem
|
|
85
|
-
icon={
|
|
86
|
-
label="
|
|
87
|
-
href="/
|
|
88
|
-
active={pathname === '/
|
|
85
|
+
icon={Wrench}
|
|
86
|
+
label="Tools"
|
|
87
|
+
href="/tools"
|
|
88
|
+
active={pathname === '/tools'}
|
|
89
89
|
/>
|
|
90
90
|
</SidebarMenu>
|
|
91
91
|
</SidebarHeader>
|
|
@@ -28,6 +28,11 @@ import {
|
|
|
28
28
|
initializeNotificationWatcher,
|
|
29
29
|
getNotificationWatcher,
|
|
30
30
|
} from '@/infrastructure/services/notifications/notification-watcher.service.js';
|
|
31
|
+
import type { IGitPrService } from '@/application/ports/output/services/git-pr-service.interface.js';
|
|
32
|
+
import {
|
|
33
|
+
initializePrSyncWatcher,
|
|
34
|
+
getPrSyncWatcher,
|
|
35
|
+
} from '@/infrastructure/services/pr-sync/pr-sync-watcher.service.js';
|
|
31
36
|
|
|
32
37
|
const DEFAULT_PORT = 3000;
|
|
33
38
|
|
|
@@ -78,6 +83,11 @@ async function main() {
|
|
|
78
83
|
const notificationService = container.resolve<INotificationService>('INotificationService');
|
|
79
84
|
initializeNotificationWatcher(runRepo, phaseTimingRepo, featureRepo, notificationService);
|
|
80
85
|
getNotificationWatcher().start();
|
|
86
|
+
|
|
87
|
+
// Start PR sync watcher to detect PR/CI status transitions on GitHub
|
|
88
|
+
const gitPrService = container.resolve<IGitPrService>('IGitPrService');
|
|
89
|
+
initializePrSyncWatcher(featureRepo, runRepo, gitPrService, notificationService);
|
|
90
|
+
getPrSyncWatcher().start();
|
|
81
91
|
} catch (error) {
|
|
82
92
|
console.warn('[dev-server] DI initialization failed — features will be empty:', error);
|
|
83
93
|
}
|
|
@@ -125,6 +135,11 @@ async function main() {
|
|
|
125
135
|
} catch {
|
|
126
136
|
/* not initialized */
|
|
127
137
|
}
|
|
138
|
+
try {
|
|
139
|
+
getPrSyncWatcher().stop();
|
|
140
|
+
} catch {
|
|
141
|
+
/* not initialized */
|
|
142
|
+
}
|
|
128
143
|
server.closeAllConnections();
|
|
129
144
|
await Promise.all([
|
|
130
145
|
new Promise<void>((resolve) => server.close(() => resolve())),
|
|
@@ -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.
|
|
18
|
+
const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.56.0","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,68304,e=>{"use strict";var t=e.i(20314),r=e.i(79054),s=e.i(91967),i=e.i(22528),n=e.i(51080),a=e.i(85995),l=e.i(87620),o=e.i(66033),c=e.i(36589),d=e.i(13123),u="Tabs",[f,h]=(0,i.createContextScope)(u,[n.createRovingFocusGroupScope]),p=(0,n.createRovingFocusGroupScope)(),[m,v]=f(u),x=r.forwardRef((e,r)=>{let{__scopeTabs:s,value:i,onValueChange:n,defaultValue:a,orientation:f="horizontal",dir:h,activationMode:p="automatic",...v}=e,x=(0,o.useDirection)(h),[g,y]=(0,c.useControllableState)({prop:i,onChange:n,defaultProp:a??"",caller:u});return(0,t.jsx)(m,{scope:s,baseId:(0,d.useId)(),value:g,onValueChange:y,orientation:f,dir:x,activationMode:p,children:(0,t.jsx)(l.Primitive.div,{dir:x,"data-orientation":f,...v,ref:r})})});x.displayName=u;var g="TabsList",y=r.forwardRef((e,r)=>{let{__scopeTabs:s,loop:i=!0,...a}=e,o=v(g,s),c=p(s);return(0,t.jsx)(n.Root,{asChild:!0,...c,orientation:o.orientation,dir:o.dir,loop:i,children:(0,t.jsx)(l.Primitive.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:r})})});y.displayName=g;var b="TabsTrigger",j=r.forwardRef((e,r)=>{let{__scopeTabs:i,value:a,disabled:o=!1,...c}=e,d=v(b,i),u=p(i),f=C(d.baseId,a),h=N(d.baseId,a),m=a===d.value;return(0,t.jsx)(n.Item,{asChild:!0,...u,focusable:!o,active:m,children:(0,t.jsx)(l.Primitive.button,{type:"button",role:"tab","aria-selected":m,"aria-controls":h,"data-state":m?"active":"inactive","data-disabled":o?"":void 0,disabled:o,id:f,...c,ref:r,onMouseDown:(0,s.composeEventHandlers)(e.onMouseDown,e=>{o||0!==e.button||!1!==e.ctrlKey?e.preventDefault():d.onValueChange(a)}),onKeyDown:(0,s.composeEventHandlers)(e.onKeyDown,e=>{[" ","Enter"].includes(e.key)&&d.onValueChange(a)}),onFocus:(0,s.composeEventHandlers)(e.onFocus,()=>{let e="manual"!==d.activationMode;m||o||!e||d.onValueChange(a)})})})});j.displayName=b;var w="TabsContent",R=r.forwardRef((e,s)=>{let{__scopeTabs:i,value:n,forceMount:o,children:c,...d}=e,u=v(w,i),f=C(u.baseId,n),h=N(u.baseId,n),p=n===u.value,m=r.useRef(p);return r.useEffect(()=>{let e=requestAnimationFrame(()=>m.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,t.jsx)(a.Presence,{present:o||p,children:({present:r})=>(0,t.jsx)(l.Primitive.div,{"data-state":p?"active":"inactive","data-orientation":u.orientation,role:"tabpanel","aria-labelledby":f,hidden:!r,id:h,tabIndex:0,...d,ref:s,style:{...e.style,animationDuration:m.current?"0s":void 0},children:r&&c})})});function C(e,t){return`${e}-trigger-${t}`}function N(e,t){return`${e}-content-${t}`}R.displayName=w,e.s(["Content",()=>R,"List",()=>y,"Root",()=>x,"Tabs",()=>x,"TabsContent",()=>R,"TabsList",()=>y,"TabsTrigger",()=>j,"Trigger",()=>j,"createTabsScope",()=>h],43133);var T=e.i(43133),T=T,k=e.i(31777);let A=T.Root,I=r.forwardRef(({className:e,...r},s)=>(0,t.jsx)(T.List,{ref:s,className:(0,k.cn)("bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1",e),...r}));I.displayName=T.List.displayName;let S=r.forwardRef(({className:e,...r},s)=>(0,t.jsx)(T.Trigger,{ref:s,className:(0,k.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),...r}));S.displayName=T.Trigger.displayName;let F=r.forwardRef(({className:e,...r},s)=>(0,t.jsx)(T.Content,{ref:s,className:(0,k.cn)("ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",e),...r}));F.displayName=T.Content.displayName,e.s(["Tabs",()=>A,"TabsContent",()=>F,"TabsList",()=>I,"TabsTrigger",()=>S],68304)},51080,87342,e=>{"use strict";var t=e.i(79054),r=e.i(91967),s=e.i(22528),i=e.i(5978),n=e.i(86874),a=e.i(20314);function l(e){let r=e+"CollectionProvider",[l,o]=(0,s.createContextScope)(r),[c,d]=l(r,{collectionRef:{current:null},itemMap:new Map}),u=e=>{let{scope:r,children:s}=e,i=t.default.useRef(null),n=t.default.useRef(new Map).current;return(0,a.jsx)(c,{scope:r,itemMap:n,collectionRef:i,children:s})};u.displayName=r;let f=e+"CollectionSlot",h=(0,n.createSlot)(f),p=t.default.forwardRef((e,t)=>{let{scope:r,children:s}=e,n=d(f,r),l=(0,i.useComposedRefs)(t,n.collectionRef);return(0,a.jsx)(h,{ref:l,children:s})});p.displayName=f;let m=e+"CollectionItemSlot",v="data-radix-collection-item",x=(0,n.createSlot)(m),g=t.default.forwardRef((e,r)=>{let{scope:s,children:n,...l}=e,o=t.default.useRef(null),c=(0,i.useComposedRefs)(r,o),u=d(m,s);return t.default.useEffect(()=>(u.itemMap.set(o,{ref:o,...l}),()=>void u.itemMap.delete(o))),(0,a.jsx)(x,{...{[v]:""},ref:c,children:n})});return g.displayName=m,[{Provider:u,Slot:p,ItemSlot:g},function(r){let s=d(e+"CollectionConsumer",r);return t.default.useCallback(()=>{let e=s.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${v}]`));return Array.from(s.itemMap.values()).sort((e,r)=>t.indexOf(e.ref.current)-t.indexOf(r.ref.current))},[s.collectionRef,s.itemMap])},o]}var o=new WeakMap;function c(e,t){var r,s;let i,n,a;if("at"in Array.prototype)return Array.prototype.at.call(e,t);let l=(r=e,s=t,i=r.length,(a=(n=d(s))>=0?n:i+n)<0||a>=i?-1:a);return -1===l?void 0:e[l]}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,r){let s,i=this.has(t),n=this.#e.length,a=d(e),l=a>=0?a:n+a,o=l<0||l>=n?-1:l;if(o===this.size||i&&o===this.size-1||-1===o)return this.set(t,r),this;let c=this.size+ +!i;a<0&&l++;let u=[...this.#e],f=!1;for(let e=l;e<c;e++)if(l===e){let n=u[e];u[e]===t&&(n=u[e+1]),i&&this.delete(t),s=this.get(n),this.set(t,r)}else{f||u[e-1]!==t||(f=!0);let r=u[f?e:e-1],i=s;s=this.get(r),this.delete(r),this.set(r,i)}return this}with(t,r,s){let i=new e(this);return i.insert(t,r,s),i}before(e){let t=this.#e.indexOf(e)-1;if(!(t<0))return this.entryAt(t)}setBefore(e,t,r){let s=this.#e.indexOf(e);return -1===s?this:this.insert(s,t,r)}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,r){let s=this.#e.indexOf(e);return -1===s?this:this.insert(s+1,t,r)}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 r=this.indexOf(e);if(-1===r)return;let s=r+t;return s<0&&(s=0),s>=this.size&&(s=this.size-1),this.at(s)}keyFrom(e,t){let r=this.indexOf(e);if(-1===r)return;let s=r+t;return s<0&&(s=0),s>=this.size&&(s=this.size-1),this.keyAt(s)}find(e,t){let r=0;for(let s of this){if(Reflect.apply(e,t,[s,r,this]))return s;r++}}findIndex(e,t){let r=0;for(let s of this){if(Reflect.apply(e,t,[s,r,this]))return r;r++}return -1}filter(t,r){let s=[],i=0;for(let e of this)Reflect.apply(t,r,[e,i,this])&&s.push(e),i++;return new e(s)}map(t,r){let s=[],i=0;for(let e of this)s.push([e[0],Reflect.apply(t,r,[e,i,this])]),i++;return new e(s)}reduce(...e){let[t,r]=e,s=0,i=r??this.at(0);for(let r of this)i=0===s&&1===e.length?r:Reflect.apply(t,this,[i,r,s,this]),s++;return i}reduceRight(...e){let[t,r]=e,s=r??this.at(-1);for(let r=this.size-1;r>=0;r--){let i=this.at(r);s=r===this.size-1&&1===e.length?i:Reflect.apply(t,this,[s,i,r,this])}return s}toSorted(t){return new e([...this.entries()].sort(t))}toReversed(){let t=new e;for(let e=this.size-1;e>=0;e--){let r=this.keyAt(e),s=this.get(r);t.set(r,s)}return t}toSpliced(...t){let r=[...this.entries()];return r.splice(...t),new e(r)}slice(t,r){let s=new e,i=this.size-1;if(void 0===t)return s;t<0&&(t+=this.size),void 0!==r&&r>0&&(i=r-1);for(let e=t;e<=i;e++){let t=this.keyAt(e),r=this.get(t);s.set(t,r)}return s}every(e,t){let r=0;for(let s of this){if(!Reflect.apply(e,t,[s,r,this]))return!1;r++}return!0}some(e,t){let r=0;for(let s of this){if(Reflect.apply(e,t,[s,r,this]))return!0;r++}return!1}}),e.s(["createCollection",()=>l],87342);var u=e.i(13123),f=e.i(87620),h=e.i(29297),p=e.i(36589),m=e.i(66033),v="rovingFocusGroup.onEntryFocus",x={bubbles:!1,cancelable:!0},g="RovingFocusGroup",[y,b,j]=l(g),[w,R]=(0,s.createContextScope)(g,[j]),[C,N]=w(g),T=t.forwardRef((e,t)=>(0,a.jsx)(y.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,a.jsx)(y.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,a.jsx)(k,{...e,ref:t})})}));T.displayName=g;var k=t.forwardRef((e,s)=>{let{__scopeRovingFocusGroup:n,orientation:l,loop:o=!1,dir:c,currentTabStopId:d,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:y,onEntryFocus:j,preventScrollOnEntryFocus:w=!1,...R}=e,N=t.useRef(null),T=(0,i.useComposedRefs)(s,N),k=(0,m.useDirection)(c),[A,I]=(0,p.useControllableState)({prop:d,defaultProp:u??null,onChange:y,caller:g}),[S,D]=t.useState(!1),E=(0,h.useCallbackRef)(j),P=b(n),M=t.useRef(!1),[L,B]=t.useState(0);return t.useEffect(()=>{let e=N.current;if(e)return e.addEventListener(v,E),()=>e.removeEventListener(v,E)},[E]),(0,a.jsx)(C,{scope:n,orientation:l,dir:k,loop:o,currentTabStopId:A,onItemFocus:t.useCallback(e=>I(e),[I]),onItemShiftTab:t.useCallback(()=>D(!0),[]),onFocusableItemAdd:t.useCallback(()=>B(e=>e+1),[]),onFocusableItemRemove:t.useCallback(()=>B(e=>e-1),[]),children:(0,a.jsx)(f.Primitive.div,{tabIndex:S||0===L?-1:0,"data-orientation":l,...R,ref:T,style:{outline:"none",...e.style},onMouseDown:(0,r.composeEventHandlers)(e.onMouseDown,()=>{M.current=!0}),onFocus:(0,r.composeEventHandlers)(e.onFocus,e=>{let t=!M.current;if(e.target===e.currentTarget&&t&&!S){let t=new CustomEvent(v,x);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=P().filter(e=>e.focusable);F([e.find(e=>e.active),e.find(e=>e.id===A),...e].filter(Boolean).map(e=>e.ref.current),w)}}M.current=!1}),onBlur:(0,r.composeEventHandlers)(e.onBlur,()=>D(!1))})})}),A="RovingFocusGroupItem",I=t.forwardRef((e,s)=>{let{__scopeRovingFocusGroup:i,focusable:n=!0,active:l=!1,tabStopId:o,children:c,...d}=e,h=(0,u.useId)(),p=o||h,m=N(A,i),v=m.currentTabStopId===p,x=b(i),{onFocusableItemAdd:g,onFocusableItemRemove:j,currentTabStopId:w}=m;return t.useEffect(()=>{if(n)return g(),()=>j()},[n,g,j]),(0,a.jsx)(y.ItemSlot,{scope:i,id:p,focusable:n,active:l,children:(0,a.jsx)(f.Primitive.span,{tabIndex:v?0:-1,"data-orientation":m.orientation,...d,ref:s,onMouseDown:(0,r.composeEventHandlers)(e.onMouseDown,e=>{n?m.onItemFocus(p):e.preventDefault()}),onFocus:(0,r.composeEventHandlers)(e.onFocus,()=>m.onItemFocus(p)),onKeyDown:(0,r.composeEventHandlers)(e.onKeyDown,e=>{if("Tab"===e.key&&e.shiftKey)return void m.onItemShiftTab();if(e.target!==e.currentTarget)return;let t=function(e,t,r){var s;let i=(s=e.key,"rtl"!==r?s:"ArrowLeft"===s?"ArrowRight":"ArrowRight"===s?"ArrowLeft":s);if(!("vertical"===t&&["ArrowLeft","ArrowRight"].includes(i))&&!("horizontal"===t&&["ArrowUp","ArrowDown"].includes(i)))return S[i]}(e,m.orientation,m.dir);if(void 0!==t){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let i=x().filter(e=>e.focusable).map(e=>e.ref.current);if("last"===t)i.reverse();else if("prev"===t||"next"===t){var r,s;"prev"===t&&i.reverse();let n=i.indexOf(e.currentTarget);i=m.loop?(r=i,s=n+1,r.map((e,t)=>r[(s+t)%r.length])):i.slice(n+1)}setTimeout(()=>F(i))}}),children:"function"==typeof c?c({isCurrentTabStop:v,hasTabStop:null!=w}):c})})});I.displayName=A;var S={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function F(e,t=!1){let r=document.activeElement;for(let s of e)if(s===r||(s.focus({preventScroll:t}),document.activeElement!==r))return}e.s(["Item",()=>I,"Root",()=>T,"createRovingFocusGroupScope",()=>R],51080)},81846,e=>{"use strict";var t=e.i(20314),r=e.i(94237),s=e.i(31777);let i=(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 n({className:e,variant:r,...n}){return(0,t.jsx)("div",{className:(0,s.cn)(i({variant:r}),e),...n})}e.s(["Badge",()=>n])},1699,e=>{"use strict";var t=e.i(20314),r=e.i(24035),s=e.i(79054),i=e.i(31777);let n=s.forwardRef(({className:e,...r},s)=>(0,t.jsx)("div",{ref:s,className:(0,i.cn)("bg-card text-card-foreground rounded-xl border shadow",e),...r}));n.displayName="Card";let a=s.forwardRef(({className:e,...r},s)=>(0,t.jsx)("div",{ref:s,className:(0,i.cn)("flex flex-col space-y-1.5 p-6",e),...r}));a.displayName="CardHeader";let l=s.forwardRef(({className:e,...r},s)=>(0,t.jsx)("div",{ref:s,className:(0,i.cn)("leading-none font-semibold tracking-tight",e),...r}));l.displayName="CardTitle";let o=s.forwardRef(({className:e,...r},s)=>(0,t.jsx)("div",{ref:s,className:(0,i.cn)("text-muted-foreground text-sm",e),...r}));o.displayName="CardDescription";let c=s.forwardRef(({className:e,...r},s)=>(0,t.jsx)("div",{ref:s,className:(0,i.cn)("p-6 pt-0",e),...r}));c.displayName="CardContent",s.forwardRef(({className:e,...r},s)=>(0,t.jsx)("div",{ref:s,className:(0,i.cn)("flex items-center p-6 pt-0",e),...r})).displayName="CardFooter";var d=e.i(81846),u=e.i(35364),f=e.i(68304);function h({label:e,value:r,badge:s,badgeVariant:i="secondary"}){return(0,t.jsxs)("div",{className:"flex items-center justify-between py-2",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-sm",children:e}),s?(0,t.jsx)(d.Badge,{variant:i,children:r}):(0,t.jsx)("span",{className:"font-mono text-sm",children:r})]})}function p({versionInfo:e,systemInfo:s}){return(0,t.jsx)("div",{className:"flex flex-col items-center justify-center p-4",children:(0,t.jsxs)("div",{className:"w-full max-w-2xl space-y-6",children:[(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:e.name}),(0,t.jsx)("p",{className:"text-muted-foreground mt-2",children:e.description}),(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsxs)(d.Badge,{variant:"default","data-testid":"version-badge",children:["v",e.version]})})]}),(0,t.jsxs)(f.Tabs,{defaultValue:"overview",className:"w-full",children:[(0,t.jsxs)(f.TabsList,{className:"grid w-full grid-cols-3",children:[(0,t.jsx)(f.TabsTrigger,{value:"overview",children:"Overview"}),(0,t.jsx)(f.TabsTrigger,{value:"system",children:"System"}),(0,t.jsx)(f.TabsTrigger,{value:"features",children:"Features"})]}),(0,t.jsx)(f.TabsContent,{value:"overview",children:(0,t.jsxs)(n,{children:[(0,t.jsxs)(a,{children:[(0,t.jsx)(l,{children:"Package Information"}),(0,t.jsx)(o,{children:"Details about the Shep AI CLI package"})]}),(0,t.jsxs)(c,{className:"space-y-1",children:[(0,t.jsx)(h,{label:"Package",value:e.name}),(0,t.jsx)(h,{label:"Version",value:`v${e.version}`,badge:!0,badgeVariant:"default"}),(0,t.jsx)(h,{label:"License",value:"MIT",badge:!0,badgeVariant:"outline"}),(0,t.jsx)(h,{label:"Author",value:"Shep AI"})]})]})}),(0,t.jsx)(f.TabsContent,{value:"system",children:(0,t.jsxs)(n,{children:[(0,t.jsxs)(a,{children:[(0,t.jsx)(l,{children:"System Information"}),(0,t.jsx)(o,{children:"Runtime environment details"})]}),(0,t.jsxs)(c,{className:"space-y-1",children:[(0,t.jsx)(h,{label:"Node.js",value:s.nodeVersion,badge:!0,badgeVariant:"secondary"}),(0,t.jsx)(h,{label:"Platform",value:`${s.platform} ${s.arch}`})]})]})}),(0,t.jsx)(f.TabsContent,{value:"features",children:(0,t.jsxs)(n,{children:[(0,t.jsxs)(a,{children:[(0,t.jsx)(l,{children:"Key Features"}),(0,t.jsx)(o,{children:"What Shep AI can do for you"})]}),(0,t.jsx)(c,{children:(0,t.jsxs)("ul",{className:"space-y-2 text-sm",children:[(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.Badge,{variant:"outline",children:"AI"}),(0,t.jsx)("span",{children:"Autonomous code generation"})]}),(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.Badge,{variant:"outline",children:"SDLC"}),(0,t.jsx)("span",{children:"Full development lifecycle automation"})]}),(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.Badge,{variant:"outline",children:"CLI"}),(0,t.jsx)("span",{children:"Powerful command-line interface"})]}),(0,t.jsxs)("li",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.Badge,{variant:"outline",children:"Web"}),(0,t.jsx)("span",{children:"Modern web UI dashboard"})]})]})})]})})]}),(0,t.jsxs)("div",{className:"flex justify-center gap-4",children:[(0,t.jsx)(u.Button,{asChild:!0,variant:"outline",children:(0,t.jsx)(r.default,{href:"/",children:"Back to Home"})}),(0,t.jsx)(u.Button,{asChild:!0,children:(0,t.jsx)("a",{href:"https://github.com/shep-ai/cli",target:"_blank",rel:"noopener noreferrer",children:"View on GitHub"})})]})]})})}e.s(["default",()=>p],1699)}]);
|