@shepai/cli 1.55.2 → 1.56.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/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/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/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/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/index.js +2 -0
- package/dist/src/presentation/web/app/actions/open-folder.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-folder.js +17 -17
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +17 -17
- 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/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/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/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]__2d1a8e37._.js.map +1 -1
- 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/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/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/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/actions/open-folder.ts +19 -16
- package/web/.next/standalone/src/presentation/web/app/actions/open-shell.ts +19 -16
- 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/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/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/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/{bf551f1aa44c2133.js → 62eba5d9a5e28761.js} +5 -5
- package/web/.next/static/chunks/7138c478667158d0.js +1 -0
- package/web/.next/static/chunks/a9c2b889c8749a94.js +1 -0
- package/web/.next/static/chunks/ca4bb930b4a3f3a9.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/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/f9519a5c455143e6.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/{YfN7Hg9rumm97Ou6lHF9d → TNUev4cyuW_BghWxcCTOD}/_buildManifest.js +0 -0
- /package/web/.next/static/{YfN7Hg9rumm97Ou6lHF9d → TNUev4cyuW_BghWxcCTOD}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{YfN7Hg9rumm97Ou6lHF9d → TNUev4cyuW_BghWxcCTOD}/_ssgManifest.js +0 -0
package/dist/packages/core/src/application/ports/output/services/ide-launcher-service.interface.d.ts
CHANGED
|
@@ -52,7 +52,9 @@ export interface IIdeLauncherService {
|
|
|
52
52
|
* @param directoryPath - Absolute path to open in the editor
|
|
53
53
|
* @returns Launch result indicating success or failure with error details
|
|
54
54
|
*/
|
|
55
|
-
launch(editorId: string, directoryPath: string
|
|
55
|
+
launch(editorId: string, directoryPath: string, options?: {
|
|
56
|
+
headless?: boolean;
|
|
57
|
+
}): Promise<LaunchIdeResult>;
|
|
56
58
|
/**
|
|
57
59
|
* Check whether an editor's binary is available on the system PATH.
|
|
58
60
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ide-launcher-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/ide-launcher-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,KAAK,CAAC;IACV,wDAAwD;IACxD,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,eAAe,CAAC;IAChE,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,MAAM,
|
|
1
|
+
{"version":3,"file":"ide-launcher-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/ide-launcher-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,KAAK,CAAC;IACV,wDAAwD;IACxD,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,eAAe,CAAC;IAChE,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LaunchToolUseCase
|
|
3
|
+
*
|
|
4
|
+
* Launches a tool in a target directory by delegating to IIdeLauncherService.
|
|
5
|
+
* Validates tool existence and openDirectory capability before launching.
|
|
6
|
+
* Returns a typed discriminated union result.
|
|
7
|
+
*/
|
|
8
|
+
import type { IIdeLauncherService } from '../../ports/output/services/ide-launcher-service.interface.js';
|
|
9
|
+
export interface LaunchToolInput {
|
|
10
|
+
toolId: string;
|
|
11
|
+
directoryPath: string;
|
|
12
|
+
/** When true, CLI agents open in a new terminal window instead of inheriting stdio. */
|
|
13
|
+
headless?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type LaunchToolResult = {
|
|
16
|
+
ok: true;
|
|
17
|
+
editorName: string;
|
|
18
|
+
path: string;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
code: 'tool_not_found' | 'not_launchable' | 'launch_failed';
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
export declare class LaunchToolUseCase {
|
|
25
|
+
private readonly ideLauncherService;
|
|
26
|
+
constructor(ideLauncherService: IIdeLauncherService);
|
|
27
|
+
execute({ toolId, directoryPath, headless }: LaunchToolInput): Promise<LaunchToolResult>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=launch-tool.use-case.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-tool.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/tools/launch-tool.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+DAA+D,CAAC;AAGzG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAWhG,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,mBAAmB;IAGpD,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB/F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LaunchToolUseCase
|
|
3
|
+
*
|
|
4
|
+
* Launches a tool in a target directory by delegating to IIdeLauncherService.
|
|
5
|
+
* Validates tool existence and openDirectory capability before launching.
|
|
6
|
+
* Returns a typed discriminated union result.
|
|
7
|
+
*/
|
|
8
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
9
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
10
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
11
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
};
|
|
14
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
16
|
+
};
|
|
17
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
18
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
19
|
+
};
|
|
20
|
+
import { injectable, inject } from 'tsyringe';
|
|
21
|
+
import { platform } from 'node:os';
|
|
22
|
+
import { TOOL_METADATA } from '../../../infrastructure/services/tool-installer/tool-metadata.js';
|
|
23
|
+
function resolvePlatformString(value, currentPlatform) {
|
|
24
|
+
if (value == null)
|
|
25
|
+
return undefined;
|
|
26
|
+
if (typeof value === 'string')
|
|
27
|
+
return value;
|
|
28
|
+
return value[currentPlatform];
|
|
29
|
+
}
|
|
30
|
+
let LaunchToolUseCase = class LaunchToolUseCase {
|
|
31
|
+
ideLauncherService;
|
|
32
|
+
constructor(ideLauncherService) {
|
|
33
|
+
this.ideLauncherService = ideLauncherService;
|
|
34
|
+
}
|
|
35
|
+
async execute({ toolId, directoryPath, headless }) {
|
|
36
|
+
const metadata = TOOL_METADATA[toolId];
|
|
37
|
+
if (!metadata) {
|
|
38
|
+
return { ok: false, code: 'tool_not_found', message: `Tool '${toolId}' not found` };
|
|
39
|
+
}
|
|
40
|
+
const openDirectory = resolvePlatformString(metadata.openDirectory, platform());
|
|
41
|
+
if (!openDirectory) {
|
|
42
|
+
return {
|
|
43
|
+
ok: false,
|
|
44
|
+
code: 'not_launchable',
|
|
45
|
+
message: `Tool '${toolId}' has no openDirectory command for this platform`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const result = await this.ideLauncherService.launch(toolId, directoryPath, { headless });
|
|
49
|
+
if (!result.ok) {
|
|
50
|
+
return { ok: false, code: 'launch_failed', message: result.message };
|
|
51
|
+
}
|
|
52
|
+
return { ok: true, editorName: result.editorName, path: directoryPath };
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
LaunchToolUseCase = __decorate([
|
|
56
|
+
injectable(),
|
|
57
|
+
__param(0, inject('IIdeLauncherService')),
|
|
58
|
+
__metadata("design:paramtypes", [Object])
|
|
59
|
+
], LaunchToolUseCase);
|
|
60
|
+
export { LaunchToolUseCase };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ListToolsUseCase
|
|
3
|
+
*
|
|
4
|
+
* Returns all tools from the JSON source of truth, each enriched with
|
|
5
|
+
* live ToolInstallationStatus via IToolInstallerService.checkAvailability().
|
|
6
|
+
* Platform-specific fields (openDirectory, installCommand) are pre-resolved
|
|
7
|
+
* so the DTO is fully serialisable with no union types.
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolInstallationStatus } from '../../../domain/generated/output.js';
|
|
10
|
+
import type { IToolInstallerService } from '../../ports/output/services/index.js';
|
|
11
|
+
export interface ToolItem {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
summary: string;
|
|
15
|
+
description: string;
|
|
16
|
+
tags: ('ide' | 'cli-agent' | 'vcs')[];
|
|
17
|
+
iconUrl: string | undefined;
|
|
18
|
+
autoInstall: boolean;
|
|
19
|
+
required: boolean;
|
|
20
|
+
openDirectory: string | undefined;
|
|
21
|
+
documentationUrl: string;
|
|
22
|
+
installCommand: string | undefined;
|
|
23
|
+
status: ToolInstallationStatus;
|
|
24
|
+
}
|
|
25
|
+
export type ListToolsResult = ToolItem[];
|
|
26
|
+
export declare class ListToolsUseCase {
|
|
27
|
+
private readonly toolInstallerService;
|
|
28
|
+
constructor(toolInstallerService: IToolInstallerService);
|
|
29
|
+
execute(): Promise<ListToolsResult>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=list-tools.use-case.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/tools/list-tools.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC;AAWzC,qBACa,gBAAgB;IAGzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,qBAAqB;IAGxD,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;CAgC1C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ListToolsUseCase
|
|
3
|
+
*
|
|
4
|
+
* Returns all tools from the JSON source of truth, each enriched with
|
|
5
|
+
* live ToolInstallationStatus via IToolInstallerService.checkAvailability().
|
|
6
|
+
* Platform-specific fields (openDirectory, installCommand) are pre-resolved
|
|
7
|
+
* so the DTO is fully serialisable with no union types.
|
|
8
|
+
*/
|
|
9
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
10
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
12
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
13
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
14
|
+
};
|
|
15
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
16
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
17
|
+
};
|
|
18
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
19
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
20
|
+
};
|
|
21
|
+
import { injectable, inject } from 'tsyringe';
|
|
22
|
+
import { platform } from 'node:os';
|
|
23
|
+
import { TOOL_METADATA } from '../../../infrastructure/services/tool-installer/tool-metadata.js';
|
|
24
|
+
function resolvePlatformString(value, currentPlatform) {
|
|
25
|
+
if (value == null)
|
|
26
|
+
return undefined;
|
|
27
|
+
if (typeof value === 'string')
|
|
28
|
+
return value;
|
|
29
|
+
return value[currentPlatform];
|
|
30
|
+
}
|
|
31
|
+
let ListToolsUseCase = class ListToolsUseCase {
|
|
32
|
+
toolInstallerService;
|
|
33
|
+
constructor(toolInstallerService) {
|
|
34
|
+
this.toolInstallerService = toolInstallerService;
|
|
35
|
+
}
|
|
36
|
+
async execute() {
|
|
37
|
+
const entries = Object.entries(TOOL_METADATA);
|
|
38
|
+
const currentPlatform = platform();
|
|
39
|
+
const results = await Promise.all(entries.map(async ([id, metadata]) => {
|
|
40
|
+
let status;
|
|
41
|
+
try {
|
|
42
|
+
status = await this.toolInstallerService.checkAvailability(id);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
status = { status: 'error', toolName: id, errorMessage: 'Availability check failed' };
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
id,
|
|
49
|
+
name: metadata.name,
|
|
50
|
+
summary: metadata.summary,
|
|
51
|
+
description: metadata.description,
|
|
52
|
+
tags: metadata.tags,
|
|
53
|
+
iconUrl: metadata.iconUrl,
|
|
54
|
+
autoInstall: metadata.autoInstall ?? true,
|
|
55
|
+
required: metadata.required ?? false,
|
|
56
|
+
openDirectory: resolvePlatformString(metadata.openDirectory, currentPlatform),
|
|
57
|
+
documentationUrl: metadata.documentationUrl,
|
|
58
|
+
installCommand: metadata.commands[currentPlatform],
|
|
59
|
+
status,
|
|
60
|
+
};
|
|
61
|
+
}));
|
|
62
|
+
return results;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
ListToolsUseCase = __decorate([
|
|
66
|
+
injectable(),
|
|
67
|
+
__param(0, inject('IToolInstallerService')),
|
|
68
|
+
__metadata("design:paramtypes", [Object])
|
|
69
|
+
], ListToolsUseCase);
|
|
70
|
+
export { ListToolsUseCase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA+GrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAkQrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -67,6 +67,8 @@ import { GetResearchArtifactUseCase } from '../../application/use-cases/features
|
|
|
67
67
|
import { GetPlanArtifactUseCase } from '../../application/use-cases/features/get-plan-artifact.use-case.js';
|
|
68
68
|
import { ValidateToolAvailabilityUseCase } from '../../application/use-cases/tools/validate-tool-availability.use-case.js';
|
|
69
69
|
import { InstallToolUseCase } from '../../application/use-cases/tools/install-tool.use-case.js';
|
|
70
|
+
import { ListToolsUseCase } from '../../application/use-cases/tools/list-tools.use-case.js';
|
|
71
|
+
import { LaunchToolUseCase } from '../../application/use-cases/tools/launch-tool.use-case.js';
|
|
70
72
|
import { LaunchIdeUseCase } from '../../application/use-cases/ide/launch-ide.use-case.js';
|
|
71
73
|
import { AddRepositoryUseCase } from '../../application/use-cases/repositories/add-repository.use-case.js';
|
|
72
74
|
import { ListRepositoriesUseCase } from '../../application/use-cases/repositories/list-repositories.use-case.js';
|
|
@@ -239,6 +241,8 @@ export async function initializeContainer() {
|
|
|
239
241
|
container.registerSingleton(GetPlanArtifactUseCase);
|
|
240
242
|
container.registerSingleton(ValidateToolAvailabilityUseCase);
|
|
241
243
|
container.registerSingleton(InstallToolUseCase);
|
|
244
|
+
container.registerSingleton(ListToolsUseCase);
|
|
245
|
+
container.registerSingleton(LaunchToolUseCase);
|
|
242
246
|
container.registerSingleton(LaunchIdeUseCase);
|
|
243
247
|
container.registerSingleton(AddRepositoryUseCase);
|
|
244
248
|
container.registerSingleton(ListRepositoriesUseCase);
|
|
@@ -286,6 +290,15 @@ export async function initializeContainer() {
|
|
|
286
290
|
container.register('GetPlanArtifactUseCase', {
|
|
287
291
|
useFactory: (c) => c.resolve(GetPlanArtifactUseCase),
|
|
288
292
|
});
|
|
293
|
+
container.register('InstallToolUseCase', {
|
|
294
|
+
useFactory: (c) => c.resolve(InstallToolUseCase),
|
|
295
|
+
});
|
|
296
|
+
container.register('ListToolsUseCase', {
|
|
297
|
+
useFactory: (c) => c.resolve(ListToolsUseCase),
|
|
298
|
+
});
|
|
299
|
+
container.register('LaunchToolUseCase', {
|
|
300
|
+
useFactory: (c) => c.resolve(LaunchToolUseCase),
|
|
301
|
+
});
|
|
289
302
|
container.register('LaunchIdeUseCase', {
|
|
290
303
|
useFactory: (c) => c.resolve(LaunchIdeUseCase),
|
|
291
304
|
});
|
|
@@ -17,7 +17,9 @@ export declare function resolvePlatformValue(value: string | Record<string, stri
|
|
|
17
17
|
export declare class JsonDrivenIdeLauncherService implements IIdeLauncherService {
|
|
18
18
|
private readonly editors;
|
|
19
19
|
constructor();
|
|
20
|
-
launch(editorId: string, directoryPath: string
|
|
20
|
+
launch(editorId: string, directoryPath: string, options?: {
|
|
21
|
+
headless?: boolean;
|
|
22
|
+
}): Promise<LaunchIdeResult>;
|
|
21
23
|
checkAvailability(editorId: string): Promise<boolean>;
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=json-driven-ide-launcher.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-driven-ide-launcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAChB,MAAM,8EAA8E,CAAC;
|
|
1
|
+
{"version":3,"file":"json-driven-ide-launcher.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAChB,MAAM,8EAA8E,CAAC;AAetF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAGnF;AAED,qBACa,4BAA6B,YAAW,mBAAmB;IACtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;;IAiB1C,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,eAAe,CAAC;IA8D3B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAWtD"}
|
|
@@ -40,12 +40,13 @@ let JsonDrivenIdeLauncherService = class JsonDrivenIdeLauncherService {
|
|
|
40
40
|
name: meta.name,
|
|
41
41
|
binary: meta.binary,
|
|
42
42
|
openDirectory: meta.openDirectory,
|
|
43
|
+
terminalCommand: meta.terminalCommand,
|
|
43
44
|
spawnOptions: meta.spawnOptions,
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
async launch(editorId, directoryPath) {
|
|
49
|
+
async launch(editorId, directoryPath, options) {
|
|
49
50
|
const entry = this.editors.get(editorId);
|
|
50
51
|
if (!entry) {
|
|
51
52
|
const available = [...this.editors.keys()].join(', ');
|
|
@@ -55,7 +56,11 @@ let JsonDrivenIdeLauncherService = class JsonDrivenIdeLauncherService {
|
|
|
55
56
|
message: `No launcher found for editor: ${editorId}. Available: ${available}`,
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
+
// In headless mode (web UI), use terminalCommand to open CLI agents
|
|
60
|
+
// in a new terminal window instead of inheriting the server's stdio.
|
|
61
|
+
const useTerminal = options?.headless === true && entry.terminalCommand != null;
|
|
62
|
+
const cmdSource = useTerminal ? entry.terminalCommand : entry.openDirectory;
|
|
63
|
+
const openCmd = resolvePlatformValue(cmdSource);
|
|
59
64
|
if (!openCmd.includes('{dir}')) {
|
|
60
65
|
return {
|
|
61
66
|
ok: false,
|
|
@@ -64,10 +69,11 @@ let JsonDrivenIdeLauncherService = class JsonDrivenIdeLauncherService {
|
|
|
64
69
|
};
|
|
65
70
|
}
|
|
66
71
|
const resolved = openCmd.replace('{dir}', directoryPath);
|
|
67
|
-
|
|
72
|
+
// Terminal commands always use shell mode and detach
|
|
73
|
+
const useShell = useTerminal || entry.spawnOptions?.shell === true;
|
|
68
74
|
const opts = {
|
|
69
|
-
detached: entry.spawnOptions?.detached ?? !useShell,
|
|
70
|
-
stdio: (entry.spawnOptions?.stdio ?? 'ignore'),
|
|
75
|
+
detached: useTerminal ? true : (entry.spawnOptions?.detached ?? !useShell),
|
|
76
|
+
stdio: (useTerminal ? 'ignore' : (entry.spawnOptions?.stdio ?? 'ignore')),
|
|
71
77
|
shell: useShell,
|
|
72
78
|
};
|
|
73
79
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sEAAsE,CAAC;AAClH,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA6C7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA4B1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAuElC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js
CHANGED
|
@@ -33,12 +33,25 @@ function resolveBinary(metadata) {
|
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* Check if a binary exists in the system PATH using 'which' command.
|
|
36
|
-
*
|
|
36
|
+
*
|
|
37
|
+
* `which` exits with code 1 when the binary is simply not in PATH.
|
|
38
|
+
* Node's execFile wraps that as an Error, but it's a normal "not found"
|
|
39
|
+
* result. Only truly unexpected failures (ENOENT for `which` itself,
|
|
40
|
+
* EACCES, signals, etc.) are surfaced via the `error` field.
|
|
37
41
|
*/
|
|
38
42
|
const checkBinaryExists = (binary) => {
|
|
39
43
|
return new Promise((resolve) => {
|
|
40
44
|
execFile('which', [binary], (err) => {
|
|
41
|
-
|
|
45
|
+
if (!err)
|
|
46
|
+
return resolve({ found: true });
|
|
47
|
+
// execFile errors from a non-zero exit code have a numeric `code` property.
|
|
48
|
+
// That's the normal "binary not found in PATH" case.
|
|
49
|
+
const code = err.code;
|
|
50
|
+
if (code === undefined || typeof code === 'number') {
|
|
51
|
+
return resolve({ found: false, notInPath: true });
|
|
52
|
+
}
|
|
53
|
+
// Anything else (ENOENT for `which` itself, EACCES, etc.) is a real error.
|
|
54
|
+
resolve({ found: false, error: err });
|
|
42
55
|
});
|
|
43
56
|
});
|
|
44
57
|
};
|
|
@@ -56,15 +69,13 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
|
|
|
56
69
|
if (result.found) {
|
|
57
70
|
return createAvailableStatus(toolName);
|
|
58
71
|
}
|
|
59
|
-
|
|
60
|
-
if (result.error?.message.includes('not found')) {
|
|
61
|
-
// Binary doesn't exist in PATH - create suggestions for installation
|
|
72
|
+
if (result.notInPath) {
|
|
62
73
|
const suggestions = this.createInstallationSuggestions(metadata);
|
|
63
74
|
return createMissingStatus(toolName, suggestions);
|
|
64
75
|
}
|
|
65
|
-
//
|
|
76
|
+
// Genuine error (e.g. `which` binary missing, permission denied)
|
|
66
77
|
const errorMessage = result.error?.message ?? 'Unknown error checking availability';
|
|
67
|
-
return createErrorStatus(toolName,
|
|
78
|
+
return createErrorStatus(toolName, errorMessage);
|
|
68
79
|
}
|
|
69
80
|
catch (error) {
|
|
70
81
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
@@ -15,7 +15,9 @@ export interface ToolMetadata {
|
|
|
15
15
|
/** Detailed description */
|
|
16
16
|
description: string;
|
|
17
17
|
/** Tool tags for grouping in listings. A tool can belong to multiple categories. */
|
|
18
|
-
tags: ('ide' | 'cli-agent')[];
|
|
18
|
+
tags: ('ide' | 'cli-agent' | 'vcs')[];
|
|
19
|
+
/** URL to the tool's icon/logo image */
|
|
20
|
+
iconUrl?: string;
|
|
19
21
|
/** Binary name to check with 'which' command (string or per-platform map) */
|
|
20
22
|
binary: string | Record<string, string>;
|
|
21
23
|
/** Package manager or installation method */
|
|
@@ -30,6 +32,8 @@ export interface ToolMetadata {
|
|
|
30
32
|
verifyCommand: string;
|
|
31
33
|
/** Whether the tool supports automated installation (default: true) */
|
|
32
34
|
autoInstall?: boolean;
|
|
35
|
+
/** Whether this tool is required for the platform to function (default: false) */
|
|
36
|
+
required?: boolean;
|
|
33
37
|
/** Command to open a directory in this tool.
|
|
34
38
|
* String format: "code {dir}" — single command for all platforms.
|
|
35
39
|
* Object format: { "linux": "antigravity {dir}", "darwin": "agy {dir}" } — per-platform commands. */
|
|
@@ -42,6 +46,12 @@ export interface ToolMetadata {
|
|
|
42
46
|
stdio?: 'ignore' | 'inherit' | 'pipe';
|
|
43
47
|
detached?: boolean;
|
|
44
48
|
};
|
|
49
|
+
/** Platform-specific command to launch this tool in a new terminal window.
|
|
50
|
+
* Used when launching from the web UI where no terminal is available.
|
|
51
|
+
* When set, the launcher spawns a new terminal window with this command.
|
|
52
|
+
* Supports {dir} placeholder like openDirectory.
|
|
53
|
+
* Example: "x-terminal-emulator -e bash -c 'cd {dir} && claude'" */
|
|
54
|
+
terminalCommand?: string | Record<string, string>;
|
|
45
55
|
}
|
|
46
56
|
export declare const TOOL_METADATA: Record<string, ToolMetadata>;
|
|
47
57
|
/**
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-metadata.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oFAAoF;IACpF,IAAI,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;IAEtC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;yGAEqG;IACrG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD;;iGAE6F;IAC7F,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAEF;;;;wEAIoE;IACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AA8CD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAsB,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAExD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Tool JSON Definitions
|
|
2
|
+
|
|
3
|
+
Each `.json` file defines a development tool that shep can install, verify, and launch.
|
|
4
|
+
Files are loaded dynamically by `tool-metadata.ts` — the filename (minus `.json`) becomes the tool ID.
|
|
5
|
+
|
|
6
|
+
## Schema
|
|
7
|
+
|
|
8
|
+
| Field | Type | Required | Description |
|
|
9
|
+
| ------------------ | --------------------------------- | -------- | ------------------------------------------------------------------------ |
|
|
10
|
+
| `name` | `string` | Yes | Human-readable display name |
|
|
11
|
+
| `summary` | `string` | Yes | One-line description |
|
|
12
|
+
| `description` | `string` | Yes | Detailed description |
|
|
13
|
+
| `tags` | `("ide"\|"cli-agent"\|"vcs")[]` | Yes | Categories for filtering in UI and CLI |
|
|
14
|
+
| `iconUrl` | `string` | No | URL to SVG/PNG icon (use cdn.simpleicons.org when possible) |
|
|
15
|
+
| `binary` | `string \| Record<string,string>` | Yes | Binary name for `which` check. Per-platform map if differs |
|
|
16
|
+
| `packageManager` | `string` | Yes | Install method label (apt, brew, curl, manual, download) |
|
|
17
|
+
| `commands` | `Record<string,string>` | Yes | Platform-keyed install commands (`linux`, `darwin`) |
|
|
18
|
+
| `timeout` | `number` | Yes | Install timeout in ms (typically 300000) |
|
|
19
|
+
| `documentationUrl` | `string` | Yes | Official docs URL |
|
|
20
|
+
| `verifyCommand` | `string` | Yes | Command to verify installation (e.g. `git --version`) |
|
|
21
|
+
| `autoInstall` | `boolean` | No | `true` (default) = run commands automatically. `false` = manual download |
|
|
22
|
+
| `required` | `boolean` | No | `true` = tool is required for platform to function |
|
|
23
|
+
| `openDirectory` | `string \| Record<string,string>` | No | Command to open a directory. Use `{dir}` placeholder |
|
|
24
|
+
| `spawnOptions` | `object` | No | Override spawn behavior (see below) |
|
|
25
|
+
| `terminalCommand` | `string \| Record<string,string>` | No | Command to open tool in a **new terminal window** from web UI |
|
|
26
|
+
|
|
27
|
+
## Spawn Options
|
|
28
|
+
|
|
29
|
+
GUI tools (IDEs) use defaults: `{ detached: true, stdio: "ignore" }` — fire and forget.
|
|
30
|
+
CLI agents need: `{ shell: true, stdio: "inherit", detached: false }` — run in current terminal.
|
|
31
|
+
|
|
32
|
+
## Terminal Command
|
|
33
|
+
|
|
34
|
+
CLI agents launched from the web UI have no terminal to inherit. The `terminalCommand` field
|
|
35
|
+
provides a platform-specific command that opens a new terminal window:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
"terminalCommand": {
|
|
39
|
+
"linux": "x-terminal-emulator -e bash -c 'cd {dir} && exec claude'",
|
|
40
|
+
"darwin": "open -a Terminal.app bash -c 'cd {dir} && exec claude'"
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The launcher auto-detects TTY: CLI launch uses `openDirectory`, web launch uses `terminalCommand`.
|
|
45
|
+
|
|
46
|
+
## Adding a New Tool
|
|
47
|
+
|
|
48
|
+
1. Create `<tool-id>.json` in this directory
|
|
49
|
+
2. Fill all required fields
|
|
50
|
+
3. Validate icon URL returns 200: `curl -sI <url> | head -1`
|
|
51
|
+
4. For manual-install tools: set `autoInstall: false`, use plain text in `commands` (no `echo`)
|
|
52
|
+
5. For CLI agents: add `spawnOptions` + `terminalCommand`
|
|
53
|
+
6. Run `pnpm build && pnpm test:unit` to verify
|
|
54
|
+
|
|
55
|
+
## Tags
|
|
56
|
+
|
|
57
|
+
| Tag | Meaning | Examples |
|
|
58
|
+
| ----------- | ------------------------------ | ----------------------- |
|
|
59
|
+
| `ide` | GUI code editor | VS Code, Cursor, Zed |
|
|
60
|
+
| `cli-agent` | Terminal-based AI coding agent | Claude Code, Cursor CLI |
|
|
61
|
+
| `vcs` | Version control tool | Git, GitHub CLI |
|
|
62
|
+
|
|
63
|
+
Tools can have multiple tags. A tool appears in all matching filter tabs in the UI.
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
"summary": "AI-powered agentic development platform",
|
|
4
4
|
"description": "Google Antigravity is an AI-powered platform that enables agentic development workflows, helping developers build intelligent applications with autonomous agents.",
|
|
5
5
|
"tags": ["ide"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/google",
|
|
6
7
|
"binary": {
|
|
7
8
|
"linux": "antigravity",
|
|
8
9
|
"darwin": "agy"
|
|
9
10
|
},
|
|
10
11
|
"packageManager": "download",
|
|
11
12
|
"commands": {
|
|
12
|
-
"linux": "
|
|
13
|
-
"darwin": "
|
|
13
|
+
"linux": "Download from https://antigravity.google/download and install manually",
|
|
14
|
+
"darwin": "Download from https://antigravity.google/download and install manually"
|
|
14
15
|
},
|
|
15
16
|
"timeout": 300000,
|
|
16
17
|
"documentationUrl": "https://codelabs.developers.google.com/getting-started-google-antigravity",
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "AI-powered code assistant from Anthropic",
|
|
4
4
|
"description": "Claude Code is an AI-powered code assistant from Anthropic that helps you write, understand, and debug code with advanced AI capabilities.",
|
|
5
5
|
"tags": ["ide", "cli-agent"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/claude",
|
|
6
7
|
"binary": "claude",
|
|
7
8
|
"packageManager": "curl",
|
|
8
9
|
"commands": {
|
|
@@ -18,5 +19,9 @@
|
|
|
18
19
|
"shell": true,
|
|
19
20
|
"stdio": "inherit",
|
|
20
21
|
"detached": false
|
|
22
|
+
},
|
|
23
|
+
"terminalCommand": {
|
|
24
|
+
"linux": "x-terminal-emulator -e bash -c 'cd {dir} && exec claude'",
|
|
25
|
+
"darwin": "open -a Terminal.app bash -c 'cd {dir} && exec claude'"
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
"name": "Cursor CLI",
|
|
3
3
|
"summary": "AI-powered terminal coding agent",
|
|
4
4
|
"description": "Cursor CLI is a terminal-based AI coding agent that brings conversational AI assistance directly to your command line for any IDE or terminal.",
|
|
5
|
-
"tags": ["
|
|
5
|
+
"tags": ["cli-agent"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/cursor",
|
|
6
7
|
"binary": "cursor-agent",
|
|
7
8
|
"packageManager": "curl",
|
|
8
9
|
"commands": {
|
|
@@ -18,5 +19,9 @@
|
|
|
18
19
|
"shell": true,
|
|
19
20
|
"stdio": "inherit",
|
|
20
21
|
"detached": false
|
|
22
|
+
},
|
|
23
|
+
"terminalCommand": {
|
|
24
|
+
"linux": "x-terminal-emulator -e bash -c 'cd {dir} && exec cursor-agent'",
|
|
25
|
+
"darwin": "open -a Terminal.app bash -c 'cd {dir} && exec cursor-agent'"
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "AI-powered code editor for efficient development",
|
|
4
4
|
"description": "Cursor is an AI-powered code editor built on VS Code, designed to streamline development workflows with advanced AI-assisted coding capabilities.",
|
|
5
5
|
"tags": ["ide"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/cursor",
|
|
6
7
|
"binary": "cursor",
|
|
7
8
|
"packageManager": "manual",
|
|
8
9
|
"commands": {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Gemini CLI",
|
|
3
|
+
"summary": "AI-powered coding agent from Google",
|
|
4
|
+
"description": "Gemini CLI is an open-source AI coding agent from Google that brings the power of Gemini directly to your terminal for code generation, debugging, and development workflows.",
|
|
5
|
+
"tags": ["cli-agent"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/googlegemini",
|
|
7
|
+
"binary": "gemini",
|
|
8
|
+
"packageManager": "npm",
|
|
9
|
+
"commands": {
|
|
10
|
+
"linux": "npm install -g @google/gemini-cli",
|
|
11
|
+
"darwin": "npm install -g @google/gemini-cli"
|
|
12
|
+
},
|
|
13
|
+
"timeout": 300000,
|
|
14
|
+
"documentationUrl": "https://github.com/google-gemini/gemini-cli",
|
|
15
|
+
"verifyCommand": "gemini --version",
|
|
16
|
+
"autoInstall": true,
|
|
17
|
+
"openDirectory": "cd {dir} && exec gemini",
|
|
18
|
+
"spawnOptions": {
|
|
19
|
+
"shell": true,
|
|
20
|
+
"stdio": "inherit",
|
|
21
|
+
"detached": false
|
|
22
|
+
},
|
|
23
|
+
"terminalCommand": {
|
|
24
|
+
"linux": "x-terminal-emulator -e bash -c 'cd {dir} && exec gemini'",
|
|
25
|
+
"darwin": "open -a Terminal.app bash -c 'cd {dir} && exec gemini'"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "GitHub CLI",
|
|
3
|
+
"summary": "GitHub's official command-line tool",
|
|
4
|
+
"description": "GitHub CLI brings GitHub to your terminal. Manage pull requests, issues, repositories, workflows, and more without leaving the command line.",
|
|
5
|
+
"tags": ["vcs"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/github",
|
|
7
|
+
"binary": "gh",
|
|
8
|
+
"packageManager": "apt",
|
|
9
|
+
"commands": {
|
|
10
|
+
"linux": "(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) && sudo mkdir -p -m 755 /etc/apt/keyrings && out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg && cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg && echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main\" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null && sudo apt update && sudo apt install gh -y",
|
|
11
|
+
"darwin": "brew install gh"
|
|
12
|
+
},
|
|
13
|
+
"timeout": 300000,
|
|
14
|
+
"documentationUrl": "https://cli.github.com/manual/",
|
|
15
|
+
"verifyCommand": "gh --version",
|
|
16
|
+
"autoInstall": true,
|
|
17
|
+
"required": true
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Git",
|
|
3
|
+
"summary": "Distributed version control system",
|
|
4
|
+
"description": "Git is a free and open-source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.",
|
|
5
|
+
"tags": ["vcs"],
|
|
6
|
+
"iconUrl": "https://cdn.simpleicons.org/git",
|
|
7
|
+
"binary": "git",
|
|
8
|
+
"packageManager": "apt",
|
|
9
|
+
"commands": {
|
|
10
|
+
"linux": "sudo apt-get update && sudo apt-get install -y git",
|
|
11
|
+
"darwin": "xcode-select --install"
|
|
12
|
+
},
|
|
13
|
+
"timeout": 300000,
|
|
14
|
+
"documentationUrl": "https://git-scm.com/doc",
|
|
15
|
+
"verifyCommand": "git --version",
|
|
16
|
+
"autoInstall": true,
|
|
17
|
+
"required": true
|
|
18
|
+
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "Lightweight but powerful source code editor",
|
|
4
4
|
"description": "Microsoft Visual Studio Code is a free, open-source code editor with built-in support for debugging, version control, and extensions for enhanced development workflows.",
|
|
5
5
|
"tags": ["ide"],
|
|
6
|
+
"iconUrl": "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg",
|
|
6
7
|
"binary": "code",
|
|
7
8
|
"packageManager": "apt",
|
|
8
9
|
"commands": {
|