@shepai/cli 1.177.0 → 1.178.1
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/Language.yaml +1 -0
- package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.d.ts +23 -0
- package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.js +13 -0
- package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.d.ts +18 -0
- package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.js +7 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +3 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/project-scaffold-service.interface.d.ts +33 -0
- package/dist/packages/core/src/application/ports/output/services/project-scaffold-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/project-scaffold-service.interface.js +9 -0
- package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.d.ts +42 -0
- package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.js +134 -0
- package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.d.ts +43 -0
- package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.js +84 -0
- package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts +13 -2
- package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.js +14 -3
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +16 -0
- package/dist/packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.d.ts +35 -0
- package/dist/packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.js +165 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +31 -5
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts +14 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +63 -0
- package/dist/packages/core/src/infrastructure/services/file-system.service.d.ts +10 -0
- package/dist/packages/core/src/infrastructure/services/file-system.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/file-system.service.js +22 -0
- 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 +57 -10
- package/dist/packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.d.ts +22 -0
- package/dist/packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.js +74 -0
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +10 -2
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +7 -199
- package/dist/src/presentation/web/app/actions/create-project-folder.d.ts +16 -0
- package/dist/src/presentation/web/app/actions/create-project-folder.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-project-folder.js +18 -0
- package/dist/src/presentation/web/app/actions/delete-repository.d.ts +4 -1
- package/dist/src/presentation/web/app/actions/delete-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/delete-repository.js +2 -2
- package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -2
- package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +13 -4
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +5 -3
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +134 -124
- package/dist/src/presentation/web/components/features/control-center/new-project-dialog.d.ts +8 -0
- package/dist/src/presentation/web/components/features/control-center/new-project-dialog.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/control-center/new-project-dialog.js +43 -0
- package/dist/src/presentation/web/components/features/control-center/use-canvas-event-listeners.d.ts +27 -0
- package/dist/src/presentation/web/components/features/control-center/use-canvas-event-listeners.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/control-center/use-canvas-event-listeners.js +84 -0
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +3 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +4 -2
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts +21 -0
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.js +70 -0
- package/dist/src/presentation/web/components/features/control-center/use-workspace-fit-view.d.ts +27 -0
- package/dist/src/presentation/web/components/features/control-center/use-workspace-fit-view.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/control-center/use-workspace-fit-view.js +48 -0
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +8 -1
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +3 -1
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +3 -3
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/manage-workspace-dialog.d.ts +15 -0
- package/dist/src/presentation/web/components/features/features-canvas/manage-workspace-dialog.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/features-canvas/manage-workspace-dialog.js +74 -0
- package/dist/src/presentation/web/components/features/features-canvas/workspace-name-dialog.d.ts +11 -0
- package/dist/src/presentation/web/components/features/features-canvas/workspace-name-dialog.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/features-canvas/workspace-name-dialog.js +22 -0
- package/dist/src/presentation/web/components/features/features-canvas/workspace-selector.d.ts +13 -0
- package/dist/src/presentation/web/components/features/features-canvas/workspace-selector.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/features-canvas/workspace-selector.js +21 -0
- package/dist/src/presentation/web/hooks/use-workspaces.d.ts +37 -0
- package/dist/src/presentation/web/hooks/use-workspaces.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-workspaces.js +219 -0
- package/dist/src/presentation/web/lib/derive-graph.d.ts +3 -1
- package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
- package/dist/translations/ar/web.json +4 -1
- package/dist/translations/de/web.json +4 -1
- package/dist/translations/en/web.json +4 -1
- package/dist/translations/es/web.json +4 -1
- package/dist/translations/fr/web.json +4 -1
- package/dist/translations/he/web.json +4 -1
- package/dist/translations/pt/web.json +4 -1
- package/dist/translations/ru/web.json +4 -1
- package/dist/translations/uk/web.json +3 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +73 -58
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +69 -54
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +75 -60
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +91 -76
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +91 -76
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +71 -56
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +71 -56
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +69 -54
- package/web/.next/server/app/(dashboard)/chat/page.js +1 -2
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +75 -60
- package/web/.next/server/app/(dashboard)/create/page.js +1 -2
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +91 -76
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +91 -76
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +69 -54
- package/web/.next/server/app/(dashboard)/page.js +1 -2
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +71 -56
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +71 -56
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.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/server-reference-manifest.json +6 -6
- 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/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/features/page.js.nft.json +1 -1
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- 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/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_35b56ded._.js +3 -0
- package/web/.next/server/chunks/ssr/_35b56ded._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_4cbb7f95._.js → _496c9117._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4cbb7f95._.js.map → _496c9117._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
- package/web/.next/server/chunks/ssr/_79a4a04a._.js +3 -0
- package/web/.next/server/chunks/ssr/_79a4a04a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_3fc2374c._.js → _a1cc5e68._.js} +2 -2
- package/web/.next/server/chunks/ssr/_a1cc5e68._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_19a779c6._.js → _a2e317b3._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_19a779c6._.js.map → _a2e317b3._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- 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 +590 -484
- package/web/.next/static/chunks/{b5d355eb59916926.js → 0b6c8ca8403db859.js} +2 -2
- package/web/.next/static/chunks/{eaa1b979d63d322b.js → 0ff97e3b2c05f514.js} +1 -1
- package/web/.next/static/chunks/124b79a5d2a760fb.css +1 -0
- package/web/.next/static/chunks/{829d2f8ef2715f2f.js → 27b1e99ab97bdf52.js} +3 -3
- package/web/.next/static/chunks/28ad440cbb92bebe.js +1 -0
- package/web/.next/static/chunks/{4c20d4cd4786a0c8.js → 2ce798babf8adbc5.js} +1 -1
- package/web/.next/static/chunks/{ef897f150084ef85.js → 374e00e5b4ab142e.js} +1 -1
- package/web/.next/static/chunks/4052a4971fbbac9c.js +1 -0
- package/web/.next/static/chunks/{0a706f8508eae0a8.js → 44dc686d971c7513.js} +3 -3
- package/web/.next/static/chunks/{0d0e2661bd167e0f.js → 64a765a6eec07603.js} +1 -1
- package/web/.next/static/chunks/{bb479c31b5b53bac.js → 74c37f189bc83156.js} +2 -2
- package/web/.next/static/chunks/8057357cf1f9b4ef.js +1 -0
- package/web/.next/static/chunks/{b5a916fec4cdc897.js → 8ecdaada8068211c.js} +1 -1
- package/web/.next/static/chunks/b2c52514837b4fc4.js +1 -0
- package/web/.next/static/chunks/{efd57b6ffc7cbd54.js → b567f6c06cc7013a.js} +1 -1
- package/web/.next/static/chunks/{c0e4cd44851a9293.js → bbc95353509ede89.js} +1 -1
- package/web/.next/static/chunks/{77d6506c7d1f711f.js → f2ec6318c5ff73b8.js} +1 -1
- package/web/.next/static/chunks/{18f429029d702545.js → f7741bf45b42ac62.js} +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_073183f4._.js +0 -3
- package/web/.next/server/chunks/ssr/_073183f4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3fc2374c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_57b1af27._.js +0 -3
- package/web/.next/server/chunks/ssr/_57b1af27._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +0 -1
- package/web/.next/static/chunks/3fc5b2287f192799.js +0 -1
- package/web/.next/static/chunks/a20f2d6f76f469b7.css +0 -1
- package/web/.next/static/chunks/ddd34e939acc204f.js +0 -1
- package/web/.next/static/chunks/f9d948464ed409cb.js +0 -1
- package/web/.next/static/chunks/fc0232384ec2b48d.js +0 -1
- /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → d9JsHxuahs7UrJKwH-FGH}/_buildManifest.js +0 -0
- /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → d9JsHxuahs7UrJKwH-FGH}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → d9JsHxuahs7UrJKwH-FGH}/_ssgManifest.js +0 -0
|
@@ -1,205 +1,13 @@
|
|
|
1
1
|
'use server';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
|
-
import { execFile } from 'node:child_process';
|
|
6
|
-
import { IS_WINDOWS } from '../../../../../packages/core/src/infrastructure/platform.js';
|
|
7
|
-
import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
|
|
8
2
|
import { resolve } from '../../lib/server-container.js';
|
|
9
|
-
const AGENT_LABELS = {
|
|
10
|
-
'claude-code': 'Claude Code',
|
|
11
|
-
cursor: 'Cursor Agent',
|
|
12
|
-
'gemini-cli': 'Gemini CLI',
|
|
13
|
-
aider: 'Aider',
|
|
14
|
-
copilot: 'Copilot CLI',
|
|
15
|
-
continue: 'Continue',
|
|
16
|
-
dev: 'Demo',
|
|
17
|
-
};
|
|
18
|
-
const AGENT_TOOL_MAP = {
|
|
19
|
-
'claude-code': 'claude-code',
|
|
20
|
-
cursor: 'cursor-cli',
|
|
21
|
-
'gemini-cli': 'gemini-cli',
|
|
22
|
-
copilot: 'copilot-cli',
|
|
23
|
-
};
|
|
24
|
-
const AGENT_BINARY_MAP = {
|
|
25
|
-
'claude-code': 'claude',
|
|
26
|
-
cursor: 'cursor-agent',
|
|
27
|
-
'gemini-cli': 'gemini',
|
|
28
|
-
copilot: 'copilot',
|
|
29
|
-
};
|
|
30
3
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
switch (agentType) {
|
|
37
|
-
case 'claude-code': {
|
|
38
|
-
if (process.env['ANTHROPIC_API_KEY'])
|
|
39
|
-
return true;
|
|
40
|
-
if (process.env['CLAUDE_CODE_USE_BEDROCK'])
|
|
41
|
-
return true;
|
|
42
|
-
if (process.env['CLAUDE_CODE_USE_VERTEX'])
|
|
43
|
-
return true;
|
|
44
|
-
if (process.env['CLAUDE_CODE_OAUTH_TOKEN'])
|
|
45
|
-
return true;
|
|
46
|
-
const credPath = join(home, '.claude', '.credentials.json');
|
|
47
|
-
return existsSync(credPath);
|
|
48
|
-
}
|
|
49
|
-
case 'cursor': {
|
|
50
|
-
if (process.env['CURSOR_API_KEY'])
|
|
51
|
-
return true;
|
|
52
|
-
// Cursor Agent stores creds after `agent login` — check common locations
|
|
53
|
-
const cursorDir = join(home, '.cursor');
|
|
54
|
-
return existsSync(cursorDir);
|
|
55
|
-
}
|
|
56
|
-
case 'gemini-cli': {
|
|
57
|
-
if (process.env['GEMINI_API_KEY'])
|
|
58
|
-
return true;
|
|
59
|
-
if (process.env['GOOGLE_API_KEY'])
|
|
60
|
-
return true;
|
|
61
|
-
if (process.env['GOOGLE_APPLICATION_CREDENTIALS'])
|
|
62
|
-
return true;
|
|
63
|
-
const accountsPath = join(home, '.gemini', 'google_accounts.json');
|
|
64
|
-
return existsSync(accountsPath);
|
|
65
|
-
}
|
|
66
|
-
case 'copilot-cli': {
|
|
67
|
-
if (process.env['GITHUB_TOKEN'])
|
|
68
|
-
return true;
|
|
69
|
-
if (process.env['GH_TOKEN'])
|
|
70
|
-
return true;
|
|
71
|
-
if (process.env['GITHUB_AUTH_TOKEN'])
|
|
72
|
-
return true;
|
|
73
|
-
// GitHub CLI stores creds after `gh auth login` — check common locations
|
|
74
|
-
const ghDir = IS_WINDOWS ? join(home, '.copilot') : join(home, '.config', 'gh');
|
|
75
|
-
return existsSync(ghDir);
|
|
76
|
-
}
|
|
77
|
-
default:
|
|
78
|
-
// dev, aider, continue — assume no auth needed
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Tier 2: Subprocess verification (~200ms).
|
|
84
|
-
* Only called if tier 1 passes, to confirm tokens aren't expired.
|
|
85
|
-
*/
|
|
86
|
-
function tier2AuthVerify(agentType, binaryName) {
|
|
87
|
-
return new Promise((resolve) => {
|
|
88
|
-
let cmd;
|
|
89
|
-
let args;
|
|
90
|
-
switch (agentType) {
|
|
91
|
-
case 'claude-code':
|
|
92
|
-
cmd = binaryName;
|
|
93
|
-
args = ['auth', 'status'];
|
|
94
|
-
break;
|
|
95
|
-
case 'cursor':
|
|
96
|
-
cmd = binaryName;
|
|
97
|
-
args = ['status'];
|
|
98
|
-
break;
|
|
99
|
-
case 'copilot-cli':
|
|
100
|
-
cmd = 'gh';
|
|
101
|
-
args = ['auth', 'status'];
|
|
102
|
-
break;
|
|
103
|
-
default:
|
|
104
|
-
// No tier 2 command available — trust tier 1
|
|
105
|
-
resolve(true);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };
|
|
110
|
-
execFile(cmd, args, opts, (error) => {
|
|
111
|
-
resolve(!error);
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
resolve(false);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Check agent tool installation + auth status.
|
|
121
|
-
* Uses two-tier detection: instant file/env check, then optional subprocess verify.
|
|
4
|
+
* Thin server-action wrapper around CheckAgentAuthUseCase. All agent-type
|
|
5
|
+
* mapping, tool lookup, and platform credential detection live in:
|
|
6
|
+
*
|
|
7
|
+
* packages/core/src/application/use-cases/agents/check-agent-auth.use-case.ts
|
|
8
|
+
* packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.ts
|
|
122
9
|
*/
|
|
123
10
|
export async function checkAgentAuth() {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
agentType = getSettings().agent.type;
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
return {
|
|
130
|
-
agentType: 'unknown',
|
|
131
|
-
installed: false,
|
|
132
|
-
authenticated: false,
|
|
133
|
-
label: 'Unknown',
|
|
134
|
-
binaryName: null,
|
|
135
|
-
installCommand: null,
|
|
136
|
-
authCommand: null,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
const label = AGENT_LABELS[agentType] ?? agentType;
|
|
140
|
-
const toolId = AGENT_TOOL_MAP[agentType] ?? null;
|
|
141
|
-
const binaryName = AGENT_BINARY_MAP[agentType] ?? null;
|
|
142
|
-
// Dev/demo agents — always good
|
|
143
|
-
if (!toolId) {
|
|
144
|
-
return {
|
|
145
|
-
agentType,
|
|
146
|
-
installed: true,
|
|
147
|
-
authenticated: true,
|
|
148
|
-
label,
|
|
149
|
-
binaryName: null,
|
|
150
|
-
installCommand: null,
|
|
151
|
-
authCommand: null,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
// Check if tool is installed (also grab install command from metadata)
|
|
155
|
-
let installed = false;
|
|
156
|
-
let installCommand = null;
|
|
157
|
-
try {
|
|
158
|
-
const useCase = resolve('ListToolsUseCase');
|
|
159
|
-
const tools = await useCase.execute();
|
|
160
|
-
const tool = tools.find((t) => t.id === toolId);
|
|
161
|
-
installed = tool?.status.status === 'available';
|
|
162
|
-
installCommand = tool?.installCommand ?? null;
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
installed = false;
|
|
166
|
-
}
|
|
167
|
-
if (!installed) {
|
|
168
|
-
return {
|
|
169
|
-
agentType,
|
|
170
|
-
installed: false,
|
|
171
|
-
authenticated: false,
|
|
172
|
-
label,
|
|
173
|
-
binaryName,
|
|
174
|
-
installCommand,
|
|
175
|
-
authCommand: binaryName ? `Install ${label} first` : null,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
// Tier 1: instant file/env check
|
|
179
|
-
const tier1 = tier1AuthCheck(agentType);
|
|
180
|
-
if (!tier1) {
|
|
181
|
-
return {
|
|
182
|
-
agentType,
|
|
183
|
-
installed: true,
|
|
184
|
-
authenticated: false,
|
|
185
|
-
label,
|
|
186
|
-
binaryName,
|
|
187
|
-
installCommand,
|
|
188
|
-
authCommand: binaryName,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
// Tier 2: subprocess verify (best effort, ~200ms)
|
|
192
|
-
let authenticated = true;
|
|
193
|
-
if (binaryName) {
|
|
194
|
-
authenticated = await tier2AuthVerify(agentType, binaryName);
|
|
195
|
-
}
|
|
196
|
-
return {
|
|
197
|
-
agentType,
|
|
198
|
-
installed: true,
|
|
199
|
-
authenticated,
|
|
200
|
-
label,
|
|
201
|
-
binaryName,
|
|
202
|
-
installCommand,
|
|
203
|
-
authCommand: authenticated ? null : binaryName,
|
|
204
|
-
};
|
|
11
|
+
const useCase = resolve('CheckAgentAuthUseCase');
|
|
12
|
+
return useCase.execute();
|
|
205
13
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CreateProjectFolderResult {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
/** Absolute path to the created folder, normalized to forward slashes. */
|
|
4
|
+
path?: string;
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Thin server-action wrapper around CreateProjectUseCase. All slug rules,
|
|
9
|
+
* existence checks, filesystem mutations, and git bootstrapping live in the
|
|
10
|
+
* use case + IProjectScaffoldService adapter — see:
|
|
11
|
+
*
|
|
12
|
+
* packages/core/src/application/use-cases/projects/create-project.use-case.ts
|
|
13
|
+
* packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.ts
|
|
14
|
+
*/
|
|
15
|
+
export declare function createProjectFolder(name: string): Promise<CreateProjectFolderResult>;
|
|
16
|
+
//# sourceMappingURL=create-project-folder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project-folder.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-project-folder.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAO1F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
/**
|
|
4
|
+
* Thin server-action wrapper around CreateProjectUseCase. All slug rules,
|
|
5
|
+
* existence checks, filesystem mutations, and git bootstrapping live in the
|
|
6
|
+
* use case + IProjectScaffoldService adapter — see:
|
|
7
|
+
*
|
|
8
|
+
* packages/core/src/application/use-cases/projects/create-project.use-case.ts
|
|
9
|
+
* packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.ts
|
|
10
|
+
*/
|
|
11
|
+
export async function createProjectFolder(name) {
|
|
12
|
+
const useCase = resolve('CreateProjectUseCase');
|
|
13
|
+
const result = await useCase.execute({ name });
|
|
14
|
+
if (!result.ok) {
|
|
15
|
+
return { ok: false, error: result.error };
|
|
16
|
+
}
|
|
17
|
+
return { ok: true, path: result.path };
|
|
18
|
+
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface DeleteRepositoryActionOptions {
|
|
2
|
+
deleteFromDisk?: boolean;
|
|
3
|
+
}
|
|
4
|
+
export declare function deleteRepository(repositoryId: string, options?: DeleteRepositoryActionOptions): Promise<{
|
|
2
5
|
success: boolean;
|
|
3
6
|
error?: string;
|
|
4
7
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-repository.ts"],"names":[],"mappings":"AAKA,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"delete-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-repository.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,6BAA6B;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,6BAA6B,GACtC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { resolve } from '../../lib/server-container.js';
|
|
3
|
-
export async function deleteRepository(repositoryId) {
|
|
3
|
+
export async function deleteRepository(repositoryId, options) {
|
|
4
4
|
if (!repositoryId?.trim()) {
|
|
5
5
|
return { success: false, error: 'id is required' };
|
|
6
6
|
}
|
|
7
7
|
try {
|
|
8
8
|
const useCase = resolve('DeleteRepositoryUseCase');
|
|
9
|
-
await useCase.execute(repositoryId);
|
|
9
|
+
await useCase.execute(repositoryId, { deleteFromDisk: options?.deleteFromDisk === true });
|
|
10
10
|
return { success: true };
|
|
11
11
|
}
|
|
12
12
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,
|
|
1
|
+
{"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA6nBA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
5
5
|
import { useRouter } from 'next/navigation';
|
|
6
6
|
import { Handle, Position } from '@xyflow/react';
|
|
7
7
|
import { Plus, Trash2, Zap, ClipboardList, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
|
|
@@ -103,7 +103,7 @@ export function FeatureNode({ data, selected, }) {
|
|
|
103
103
|
}, isDeleting: false, featureName: data.name ?? 'this feature', featureId: data.featureId, hasChildren: data.hasChildren, hasOpenPr: !!data.pr && data.pr.status === 'Open' })) : null, data.onArchive &&
|
|
104
104
|
data.featureId &&
|
|
105
105
|
data.state !== 'deleting' &&
|
|
106
|
-
data.state !== 'archived' ? (_jsx(AlertDialog, { open: archiveConfirmOpen, onOpenChange: setArchiveConfirmOpen, children: _jsxs(AlertDialogContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t('featureNode.archiveConfirmTitle') }), _jsx(AlertDialogDescription, { children: t
|
|
106
|
+
data.state !== 'archived' ? (_jsx(AlertDialog, { open: archiveConfirmOpen, onOpenChange: setArchiveConfirmOpen, children: _jsxs(AlertDialogContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t('featureNode.archiveConfirmTitle') }), _jsx(AlertDialogDescription, { children: _jsx(Trans, { t: t, i18nKey: "featureNode.archiveConfirmDescription", values: { name: data.name }, components: { strong: _jsx("strong", {}) } }) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: () => setArchiveConfirmOpen(false), children: t('featureNode.cancel') }), _jsx(AlertDialogAction, { onClick: () => {
|
|
107
107
|
setArchiveConfirmOpen(false);
|
|
108
108
|
data.onArchive?.(data.featureId);
|
|
109
109
|
}, children: t('featureNode.archive') })] })] }) })) : null, _jsxs("div", { "data-testid": "feature-node-card", "aria-busy": data.state === 'creating' || data.state === 'deleting' ? 'true' : undefined, className: cn('bg-card flex min-h-35 w-97 cursor-pointer flex-col rounded-lg border p-3 shadow-sm transition-[border-color] duration-200 dark:bg-neutral-800/80', data.state === 'action-required' &&
|
package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts
CHANGED
|
@@ -21,7 +21,9 @@ export interface RepositoryNodeData {
|
|
|
21
21
|
gitInfoStatus?: 'loading' | 'ready' | 'not-a-repo';
|
|
22
22
|
onClick?: () => void;
|
|
23
23
|
onAdd?: () => void;
|
|
24
|
-
onDelete?: (repositoryId: string
|
|
24
|
+
onDelete?: (repositoryId: string, options?: {
|
|
25
|
+
deleteFromDisk?: boolean;
|
|
26
|
+
}) => void;
|
|
25
27
|
showHandles?: boolean;
|
|
26
28
|
/** When true, the "+" add-feature button shows a pulse attention animation. */
|
|
27
29
|
pulseAdd?: boolean;
|
package/dist/src/presentation/web/components/common/repository-node/repository-node-config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"repository-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,qEAAqE;IACrE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC"}
|
package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAueA"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
4
4
|
import { Handle, Position } from '@xyflow/react';
|
|
5
5
|
import { useRouter } from 'next/navigation';
|
|
6
6
|
import { Github, Plus, Code2, Terminal, FolderOpen, Trash2, Play, Square, GitBranch, GitCommitHorizontal, ArrowDown, User, RotateCcw, MessageSquare, } from 'lucide-react';
|
|
7
|
-
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
8
8
|
import { cn } from '../../../lib/utils.js';
|
|
9
9
|
import { ActionButton } from '../../common/action-button/index.js';
|
|
10
10
|
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
|
|
11
11
|
import { Button } from '../../ui/button.js';
|
|
12
|
+
import { Checkbox } from '../../ui/checkbox.js';
|
|
13
|
+
import { Label } from '../../ui/label.js';
|
|
12
14
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
|
|
13
15
|
import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
14
16
|
import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
@@ -24,6 +26,11 @@ export function RepositoryNode({ data, selected, }) {
|
|
|
24
26
|
const sourceHandlePos = isRtl ? Position.Left : Position.Right;
|
|
25
27
|
const featureFlags = useFeatureFlags();
|
|
26
28
|
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
29
|
+
const [deleteFromDisk, setDeleteFromDisk] = useState(false);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (confirmOpen)
|
|
32
|
+
setDeleteFromDisk(false);
|
|
33
|
+
}, [confirmOpen]);
|
|
27
34
|
const repoScopeId = data.id ? `repo-${data.id}` : `repo-${data.name}`;
|
|
28
35
|
const chatTurnStatus = useTurnStatus(repoScopeId);
|
|
29
36
|
const actions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
|
|
@@ -68,9 +75,11 @@ export function RepositoryNode({ data, selected, }) {
|
|
|
68
75
|
return (_jsxs("div", { className: cn('group relative', data.onDelete && data.id && 'ps-10'), style: { direction: isRtl ? 'rtl' : 'ltr' }, children: [data.showHandles ? (_jsx(Handle, { type: "target", position: targetHandlePos, isConnectable: false, className: "opacity-0!", style: { top: 70 } })) : null, data.onDelete && data.id ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute -start-3 top-1/2 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": t('repositoryNode.removeRepository'), "data-testid": "repository-node-delete-button", onClick: (e) => {
|
|
69
76
|
e.stopPropagation();
|
|
70
77
|
setConfirmOpen(true);
|
|
71
|
-
}, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: t('repositoryNode.removeRepository') })] }) }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-
|
|
78
|
+
}, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: t('repositoryNode.removeRepository') })] }) }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-sm", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('repositoryNode.removeConfirmTitle') }), _jsxs(DialogDescription, { children: [_jsx(Trans, { t: t, i18nKey: "repositoryNode.removeConfirmDescription", values: { name: data.name }, components: { strong: _jsx("strong", {}) } }), ' ', deleteFromDisk
|
|
79
|
+
? t('repositoryNode.removeConfirmDescriptionDeleteFiles')
|
|
80
|
+
: t('repositoryNode.removeConfirmDescriptionKeepFiles')] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Checkbox, { id: "repository-delete-from-disk", checked: deleteFromDisk, onCheckedChange: (checked) => setDeleteFromDisk(checked === true), "data-testid": "repository-node-delete-from-disk-checkbox", "aria-label": t('repositoryNode.deleteFromDiskLabel') }), _jsx(Label, { htmlFor: "repository-delete-from-disk", className: "cursor-pointer text-sm font-normal", children: t('repositoryNode.deleteFromDiskLabel') })] }), _jsxs(DialogFooter, { className: "grid grid-cols-2 gap-2 sm:flex-none", children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: t('repositoryNode.cancel') }) }), _jsx(Button, { variant: "destructive", "data-testid": "repository-node-delete-confirm-button", onClick: () => {
|
|
72
81
|
setConfirmOpen(false);
|
|
73
|
-
data.onDelete?.(data.id);
|
|
82
|
+
data.onDelete?.(data.id, { deleteFromDisk });
|
|
74
83
|
}, children: t('repositoryNode.remove') })] })] }) })] })) : null, _jsxs("div", { role: "button", tabIndex: 0, "data-testid": "repository-node-card", "data-repo-name": data.name, onClick: (e) => {
|
|
75
84
|
e.stopPropagation();
|
|
76
85
|
data.onClick?.();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AA4BA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAsN9B"}
|
package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useCallback, useEffect } from 'react';
|
|
4
|
-
import { FolderOpen, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown, ExternalLink, } from 'lucide-react';
|
|
4
|
+
import { FolderOpen, FolderPlus, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown, ExternalLink, } from 'lucide-react';
|
|
5
5
|
import { useTranslation } from 'react-i18next';
|
|
6
6
|
import { cn } from '../../../lib/utils.js';
|
|
7
7
|
import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
|
|
@@ -11,6 +11,7 @@ import { isAgentSetupComplete } from '../../../app/actions/agent-setup-flag.js';
|
|
|
11
11
|
import { checkAgentAuth } from '../../../app/actions/check-agent-auth.js';
|
|
12
12
|
import { checkToolStatus } from '../../../app/actions/check-tool-status.js';
|
|
13
13
|
import { WelcomeAgentSetup } from './welcome-agent-setup.js';
|
|
14
|
+
import { NewProjectDialog } from './new-project-dialog.js';
|
|
14
15
|
const commands = ['cd ~/my-repo', 'shep feat new "sleek dashboard"'];
|
|
15
16
|
export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
16
17
|
const { t } = useTranslation('web');
|
|
@@ -21,6 +22,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
21
22
|
const [authStatus, setAuthStatus] = useState(null);
|
|
22
23
|
const [cliExpanded, setCliExpanded] = useState(false);
|
|
23
24
|
const [toolStatus, setToolStatus] = useState(null);
|
|
25
|
+
const [newProjectOpen, setNewProjectOpen] = useState(false);
|
|
24
26
|
const { reactFileManager: useReactFileManager } = useFeatureFlags();
|
|
25
27
|
useEffect(() => {
|
|
26
28
|
isAgentSetupComplete().then((done) => {
|
|
@@ -79,14 +81,14 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
79
81
|
/* Agent setup wizard — owns its own hero */
|
|
80
82
|
_jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (
|
|
81
83
|
/* Repository step — fade in to match wizard transitions */
|
|
82
|
-
_jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
|
|
84
|
+
_jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsxs("button", { type: "button", "data-testid": "empty-state-new-project", onClick: () => setNewProjectOpen(true), disabled: loading, className: "border-foreground/15 text-foreground/80 hover:bg-foreground/5 hover:border-foreground/25 mt-3 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl border px-6 py-3.5 text-sm font-medium transition-all duration-200 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(FolderPlus, { className: "h-4 w-4" }), "New Project"] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
|
|
83
85
|
animationDelay: '400ms',
|
|
84
86
|
animationDuration: '600ms',
|
|
85
87
|
animationFillMode: 'both',
|
|
86
88
|
}, children: [_jsxs("button", { type: "button", onClick: () => setCliExpanded(!cliExpanded), className: "text-muted-foreground hover:text-foreground flex cursor-pointer items-center gap-1.5 transition-colors duration-200", children: [_jsx(Terminal, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-sm", children: t('emptyState.orUseCli') }), _jsx(ChevronDown, { className: cn('h-3.5 w-3.5 transition-transform duration-200', cliExpanded ? '' : 'rotate-180') })] }), cliExpanded ? (_jsx("div", { className: "animate-in fade-in slide-in-from-top-1 mt-3 w-80 duration-200", children: _jsxs("div", { "data-testid": "cli-code-block", className: "relative rounded-xl bg-zinc-900 px-5 py-4 font-mono text-[13px] leading-relaxed text-zinc-400", children: [_jsx("button", { type: "button", "data-testid": "cli-code-block-copy", onClick: handleCopy, className: "absolute top-3 right-3 cursor-pointer rounded-md p-1.5 text-zinc-600 transition-colors hover:bg-zinc-800 hover:text-zinc-300", "aria-label": t('emptyState.copyCommands'), children: copied ? (_jsx(Check, { className: "h-3.5 w-3.5 text-emerald-400" })) : (_jsx(Copy, { className: "h-3.5 w-3.5" })) }), _jsx("div", { className: "space-y-1", children: commands.map((cmd) => (_jsxs("div", { className: "whitespace-nowrap", children: [_jsx("span", { className: "text-zinc-600 select-none", children: "$ " }), _jsx("span", { className: "text-zinc-300", children: cmd })] }, cmd))) })] }) })) : null] })) : null, _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (open) => {
|
|
87
89
|
if (!open)
|
|
88
90
|
setShowReactPicker(false);
|
|
89
|
-
}, onSelect: handleReactPickerSelect })] }));
|
|
91
|
+
}, onSelect: handleReactPickerSelect }), _jsx(NewProjectDialog, { open: newProjectOpen, onOpenChange: setNewProjectOpen, onCreated: (path) => onRepositorySelect?.(path) })] }));
|
|
90
92
|
}
|
|
91
93
|
/** Status row for the AI agent (Claude Code, etc.) */
|
|
92
94
|
function AgentAuthBanner({ status, onRetry, }) {
|
package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AAoBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAoC5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CA2iBzF"}
|