@shepai/cli 1.177.0 → 1.178.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/json-schema/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/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/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/{_3fc2374c._.js → _49b9ba41._.js} +2 -2
- package/web/.next/server/chunks/ssr/_49b9ba41._.js.map +1 -0
- 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/_64efdf53._.js +3 -0
- package/web/.next/server/chunks/ssr/_64efdf53._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
- package/web/.next/server/chunks/ssr/{_19a779c6._.js → _83e1c526._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_19a779c6._.js.map → _83e1c526._.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/{18f429029d702545.js → 0b7251e5d717dd17.js} +1 -1
- package/web/.next/static/chunks/0fd39d549d277843.js +1 -0
- package/web/.next/static/chunks/124b79a5d2a760fb.css +1 -0
- package/web/.next/static/chunks/{b5a916fec4cdc897.js → 25a0d3f50b0a26c1.js} +1 -1
- package/web/.next/static/chunks/{829d2f8ef2715f2f.js → 2cc487403c107f3f.js} +3 -3
- package/web/.next/static/chunks/{0d0e2661bd167e0f.js → 35bf9838f21d1818.js} +1 -1
- package/web/.next/static/chunks/{b5d355eb59916926.js → 36e3d626ed8defca.js} +2 -2
- package/web/.next/static/chunks/4052a4971fbbac9c.js +1 -0
- package/web/.next/static/chunks/{c0e4cd44851a9293.js → 5df9da8b40e298ee.js} +1 -1
- package/web/.next/static/chunks/{efd57b6ffc7cbd54.js → 5f57f0d80d3db147.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/{eaa1b979d63d322b.js → 8286914ac835a1cc.js} +1 -1
- package/web/.next/static/chunks/{0a706f8508eae0a8.js → 8777b2a0a2e85fd1.js} +2 -2
- package/web/.next/static/chunks/{77d6506c7d1f711f.js → 9e9cddf8e38342e8.js} +1 -1
- package/web/.next/static/chunks/ac586c86d71187fc.js +1 -0
- package/web/.next/static/chunks/{ef897f150084ef85.js → c6fdd161a9e5b554.js} +1 -1
- package/web/.next/static/chunks/{4c20d4cd4786a0c8.js → e167803ac69c66c7.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 → sfBZvlx-erv7S1C49vRSU}/_buildManifest.js +0 -0
- /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → sfBZvlx-erv7S1C49vRSU}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{UZ2czjiAnEl1RF-HTzHyA → sfBZvlx-erv7S1C49vRSU}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-agent-auth-detector.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6EAA6E,CAAC;AAuB7H,qBACa,gCAAiC,YAAW,yBAAyB;IAC1E,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxF;;;OAGG;IACH,OAAO,CAAC,cAAc;IA2CtB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAqCxB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform Agent Auth Detector Service
|
|
3
|
+
*
|
|
4
|
+
* Concrete adapter for IAgentAuthDetectorService. Detects whether the user
|
|
5
|
+
* is authenticated with a given AI coding agent using a two-tier strategy:
|
|
6
|
+
*
|
|
7
|
+
* Tier 1 (instant, ~5ms): env vars + credentials file existence + macOS
|
|
8
|
+
* Keychain entry. No subprocess.
|
|
9
|
+
*
|
|
10
|
+
* Tier 2 (subprocess, ~200ms): runs the agent's `auth status` subcommand
|
|
11
|
+
* when one exists. Skipped for Claude Code (no non-interactive auth
|
|
12
|
+
* subcommand — interactive `claude auth status` hangs and gets killed).
|
|
13
|
+
*
|
|
14
|
+
* Conservative by design: any detection failure returns false rather than
|
|
15
|
+
* throwing, so the UI can show "needs auth" instead of crashing.
|
|
16
|
+
*
|
|
17
|
+
* Cross-platform: macOS uses Keychain via `security`, Linux/Windows fall
|
|
18
|
+
* back to the file-based credential location.
|
|
19
|
+
*/
|
|
20
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
21
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
23
|
+
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;
|
|
24
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
25
|
+
};
|
|
26
|
+
import { execFile, execFileSync } from 'node:child_process';
|
|
27
|
+
import { existsSync } from 'node:fs';
|
|
28
|
+
import { homedir, platform } from 'node:os';
|
|
29
|
+
import { join } from 'node:path';
|
|
30
|
+
import { injectable } from 'tsyringe';
|
|
31
|
+
import { AgentType } from '../../../domain/generated/output.js';
|
|
32
|
+
import { IS_WINDOWS } from '../../platform.js';
|
|
33
|
+
const IS_MACOS = platform() === 'darwin';
|
|
34
|
+
/**
|
|
35
|
+
* On macOS, Claude Code stores OAuth credentials in the Keychain under the
|
|
36
|
+
* service name "Claude Code-credentials" (not in ~/.claude/.credentials.json).
|
|
37
|
+
* Use `security find-generic-password` to detect the entry without reading it.
|
|
38
|
+
*/
|
|
39
|
+
function macKeychainHasClaudeCreds() {
|
|
40
|
+
if (!IS_MACOS)
|
|
41
|
+
return false;
|
|
42
|
+
try {
|
|
43
|
+
execFileSync('security', ['find-generic-password', '-s', 'Claude Code-credentials'], {
|
|
44
|
+
stdio: 'ignore',
|
|
45
|
+
timeout: 1500,
|
|
46
|
+
});
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
let PlatformAgentAuthDetectorService = class PlatformAgentAuthDetectorService {
|
|
54
|
+
async isAuthenticated(agentType, binaryName) {
|
|
55
|
+
// Tier 1: instant heuristics
|
|
56
|
+
if (!this.tier1AuthCheck(agentType)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
// Tier 2: optional subprocess verify (best-effort, ~200ms)
|
|
60
|
+
if (binaryName) {
|
|
61
|
+
return this.tier2AuthVerify(agentType, binaryName);
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Instant credential/env check (~5ms, no subprocess).
|
|
67
|
+
* Returns true if credentials likely exist for this agent type.
|
|
68
|
+
*/
|
|
69
|
+
tier1AuthCheck(agentType) {
|
|
70
|
+
const home = homedir();
|
|
71
|
+
switch (agentType) {
|
|
72
|
+
case AgentType.ClaudeCode: {
|
|
73
|
+
if (process.env['ANTHROPIC_API_KEY'])
|
|
74
|
+
return true;
|
|
75
|
+
if (process.env['CLAUDE_CODE_USE_BEDROCK'])
|
|
76
|
+
return true;
|
|
77
|
+
if (process.env['CLAUDE_CODE_USE_VERTEX'])
|
|
78
|
+
return true;
|
|
79
|
+
if (process.env['CLAUDE_CODE_OAUTH_TOKEN'])
|
|
80
|
+
return true;
|
|
81
|
+
// macOS: credentials live in Keychain (no .credentials.json on disk).
|
|
82
|
+
if (macKeychainHasClaudeCreds())
|
|
83
|
+
return true;
|
|
84
|
+
// Linux / Windows: file-based credentials.
|
|
85
|
+
const credPath = join(home, '.claude', '.credentials.json');
|
|
86
|
+
return existsSync(credPath);
|
|
87
|
+
}
|
|
88
|
+
case AgentType.Cursor: {
|
|
89
|
+
if (process.env['CURSOR_API_KEY'])
|
|
90
|
+
return true;
|
|
91
|
+
// Cursor Agent stores creds after `agent login` — check common locations
|
|
92
|
+
const cursorDir = join(home, '.cursor');
|
|
93
|
+
return existsSync(cursorDir);
|
|
94
|
+
}
|
|
95
|
+
case AgentType.GeminiCli: {
|
|
96
|
+
if (process.env['GEMINI_API_KEY'])
|
|
97
|
+
return true;
|
|
98
|
+
if (process.env['GOOGLE_API_KEY'])
|
|
99
|
+
return true;
|
|
100
|
+
if (process.env['GOOGLE_APPLICATION_CREDENTIALS'])
|
|
101
|
+
return true;
|
|
102
|
+
const accountsPath = join(home, '.gemini', 'google_accounts.json');
|
|
103
|
+
return existsSync(accountsPath);
|
|
104
|
+
}
|
|
105
|
+
case AgentType.CopilotCli: {
|
|
106
|
+
if (process.env['GITHUB_TOKEN'])
|
|
107
|
+
return true;
|
|
108
|
+
if (process.env['GH_TOKEN'])
|
|
109
|
+
return true;
|
|
110
|
+
if (process.env['GITHUB_AUTH_TOKEN'])
|
|
111
|
+
return true;
|
|
112
|
+
// GitHub CLI stores creds after `gh auth login` — check common locations
|
|
113
|
+
const ghDir = IS_WINDOWS ? join(home, '.copilot') : join(home, '.config', 'gh');
|
|
114
|
+
return existsSync(ghDir);
|
|
115
|
+
}
|
|
116
|
+
default:
|
|
117
|
+
// dev, aider, continue, codex-cli — assume no auth needed
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Subprocess verification (~200ms). Only called if tier 1 passes, to
|
|
123
|
+
* confirm tokens aren't expired.
|
|
124
|
+
*/
|
|
125
|
+
tier2AuthVerify(agentType, binaryName) {
|
|
126
|
+
return new Promise((resolveAuth) => {
|
|
127
|
+
let cmd;
|
|
128
|
+
let args;
|
|
129
|
+
switch (agentType) {
|
|
130
|
+
case AgentType.ClaudeCode:
|
|
131
|
+
// Claude Code has no non-interactive `auth status` subcommand. Running
|
|
132
|
+
// `claude auth status` launches an interactive session that hangs and
|
|
133
|
+
// gets killed by the timeout, producing a false negative. Trust tier 1
|
|
134
|
+
// (env vars / Keychain on macOS / .credentials.json elsewhere).
|
|
135
|
+
resolveAuth(true);
|
|
136
|
+
return;
|
|
137
|
+
case AgentType.Cursor:
|
|
138
|
+
cmd = binaryName;
|
|
139
|
+
args = ['status'];
|
|
140
|
+
break;
|
|
141
|
+
case AgentType.CopilotCli:
|
|
142
|
+
cmd = 'gh';
|
|
143
|
+
args = ['auth', 'status'];
|
|
144
|
+
break;
|
|
145
|
+
default:
|
|
146
|
+
// No tier 2 command available — trust tier 1
|
|
147
|
+
resolveAuth(true);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };
|
|
152
|
+
execFile(cmd, args, opts, (error) => {
|
|
153
|
+
resolveAuth(!error);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
resolveAuth(false);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
PlatformAgentAuthDetectorService = __decorate([
|
|
163
|
+
injectable()
|
|
164
|
+
], PlatformAgentAuthDetectorService);
|
|
165
|
+
export { PlatformAgentAuthDetectorService };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File System Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Concrete adapter for IFileSystemService backed by node:fs/promises.
|
|
5
|
+
*/
|
|
6
|
+
import type { IFileSystemService } from '../../application/ports/output/services/file-system-service.interface.js';
|
|
7
|
+
export declare class FileSystemService implements IFileSystemService {
|
|
8
|
+
removeDirectory(dirPath: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=file-system.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.service.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/services/file-system.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0EAA0E,CAAC;AAEnH,qBACa,iBAAkB,YAAW,kBAAkB;IACpD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File System Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Concrete adapter for IFileSystemService backed by node:fs/promises.
|
|
5
|
+
*/
|
|
6
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
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;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
};
|
|
12
|
+
import { rm } from 'node:fs/promises';
|
|
13
|
+
import { injectable } from 'tsyringe';
|
|
14
|
+
let FileSystemService = class FileSystemService {
|
|
15
|
+
async removeDirectory(dirPath) {
|
|
16
|
+
await rm(dirPath, { recursive: true, force: true });
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
FileSystemService = __decorate([
|
|
20
|
+
injectable()
|
|
21
|
+
], FileSystemService);
|
|
22
|
+
export { FileSystemService };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Project Scaffold Service
|
|
3
|
+
*
|
|
4
|
+
* Concrete adapter for IProjectScaffoldService. Owns "where projects live"
|
|
5
|
+
* ($SHEP_HOME/projects) and how they are bootstrapped: mkdir + git init +
|
|
6
|
+
* empty initial commit so the canvas can resolve a real HEAD immediately.
|
|
7
|
+
*
|
|
8
|
+
* Cross-platform: uses path.join (no hardcoded separators), windowsHide on
|
|
9
|
+
* spawned processes, and normalizes the returned path to forward slashes.
|
|
10
|
+
*/
|
|
11
|
+
import type { IProjectScaffoldService, ScaffoldProjectInput, ScaffoldProjectResult } from '../../../application/ports/output/services/project-scaffold-service.interface.js';
|
|
12
|
+
export declare class FsProjectScaffoldService implements IProjectScaffoldService {
|
|
13
|
+
/**
|
|
14
|
+
* Resolve the projects root lazily so test isolation via SHEP_HOME works
|
|
15
|
+
* even when this adapter is constructed before the env var is set.
|
|
16
|
+
*/
|
|
17
|
+
private getProjectsRoot;
|
|
18
|
+
private getProjectPath;
|
|
19
|
+
projectExists(slug: string): Promise<boolean>;
|
|
20
|
+
scaffoldProject(input: ScaffoldProjectInput): Promise<ScaffoldProjectResult>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=fs-project-scaffold.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-project-scaffold.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/project-scaffold/fs-project-scaffold.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,kFAAkF,CAAC;AAM1F,qBACa,wBAAyB,YAAW,uBAAuB;IACtE;;;OAGG;IACH,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;IAIhB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAoCnF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Project Scaffold Service
|
|
3
|
+
*
|
|
4
|
+
* Concrete adapter for IProjectScaffoldService. Owns "where projects live"
|
|
5
|
+
* ($SHEP_HOME/projects) and how they are bootstrapped: mkdir + git init +
|
|
6
|
+
* empty initial commit so the canvas can resolve a real HEAD immediately.
|
|
7
|
+
*
|
|
8
|
+
* Cross-platform: uses path.join (no hardcoded separators), windowsHide on
|
|
9
|
+
* spawned processes, and normalizes the returned path to forward slashes.
|
|
10
|
+
*/
|
|
11
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
12
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
13
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
14
|
+
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;
|
|
15
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
16
|
+
};
|
|
17
|
+
import { execFile } from 'node:child_process';
|
|
18
|
+
import { existsSync } from 'node:fs';
|
|
19
|
+
import { mkdir } from 'node:fs/promises';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
import { promisify } from 'node:util';
|
|
22
|
+
import { injectable } from 'tsyringe';
|
|
23
|
+
import { IS_WINDOWS } from '../../platform.js';
|
|
24
|
+
import { getShepHomeDir } from '../filesystem/shep-directory.service.js';
|
|
25
|
+
const execFileAsync = promisify(execFile);
|
|
26
|
+
let FsProjectScaffoldService = class FsProjectScaffoldService {
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the projects root lazily so test isolation via SHEP_HOME works
|
|
29
|
+
* even when this adapter is constructed before the env var is set.
|
|
30
|
+
*/
|
|
31
|
+
getProjectsRoot() {
|
|
32
|
+
return join(getShepHomeDir(), 'projects');
|
|
33
|
+
}
|
|
34
|
+
getProjectPath(slug) {
|
|
35
|
+
return join(this.getProjectsRoot(), slug);
|
|
36
|
+
}
|
|
37
|
+
async projectExists(slug) {
|
|
38
|
+
return existsSync(this.getProjectPath(slug));
|
|
39
|
+
}
|
|
40
|
+
async scaffoldProject(input) {
|
|
41
|
+
const projectPath = this.getProjectPath(input.slug);
|
|
42
|
+
await mkdir(projectPath, { recursive: true });
|
|
43
|
+
// Initialise git so the canvas can resolve a real HEAD immediately
|
|
44
|
+
// (otherwise `git rev-parse HEAD` fails and the repo node is stuck in
|
|
45
|
+
// the "loading" skeleton state). Pass user.name/user.email as command-
|
|
46
|
+
// level config so the empty commit works regardless of whether the user
|
|
47
|
+
// has configured global git identity. Tolerate failures: the folder
|
|
48
|
+
// still exists, so the caller can continue.
|
|
49
|
+
try {
|
|
50
|
+
const opts = IS_WINDOWS ? { cwd: projectPath, windowsHide: true } : { cwd: projectPath };
|
|
51
|
+
await execFileAsync('git', ['init', '-b', 'main'], opts);
|
|
52
|
+
await execFileAsync('git', [
|
|
53
|
+
'-c',
|
|
54
|
+
'user.name=Shep',
|
|
55
|
+
'-c',
|
|
56
|
+
'user.email=shep@local',
|
|
57
|
+
'commit',
|
|
58
|
+
'--allow-empty',
|
|
59
|
+
'-m',
|
|
60
|
+
'Initial commit',
|
|
61
|
+
], opts);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
// eslint-disable-next-line no-console -- adapter: surface git init failures in dev logs
|
|
65
|
+
console.warn('[FsProjectScaffoldService] git init failed:', err);
|
|
66
|
+
}
|
|
67
|
+
// Normalise to forward slashes per the cross-platform path rule.
|
|
68
|
+
return { path: projectPath.replace(/\\/g, '/') };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
FsProjectScaffoldService = __decorate([
|
|
72
|
+
injectable()
|
|
73
|
+
], FsProjectScaffoldService);
|
|
74
|
+
export { FsProjectScaffoldService };
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result shape for the agent auth checklist on the onboarding empty state.
|
|
3
|
+
* Matches CheckAgentAuthResult from the use case 1:1 — kept locally so the
|
|
4
|
+
* web type stays serializable through the Server Actions boundary.
|
|
5
|
+
*/
|
|
1
6
|
export interface AgentAuthStatus {
|
|
2
7
|
agentType: string;
|
|
3
8
|
/** Whether the CLI tool binary is installed */
|
|
@@ -14,8 +19,11 @@ export interface AgentAuthStatus {
|
|
|
14
19
|
authCommand: string | null;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
22
|
+
* Thin server-action wrapper around CheckAgentAuthUseCase. All agent-type
|
|
23
|
+
* mapping, tool lookup, and platform credential detection live in:
|
|
24
|
+
*
|
|
25
|
+
* packages/core/src/application/use-cases/agents/check-agent-auth.use-case.ts
|
|
26
|
+
* packages/core/src/infrastructure/services/agent-auth-detector/platform-agent-auth-detector.service.ts
|
|
19
27
|
*/
|
|
20
28
|
export declare function checkAgentAuth(): Promise<AgentAuthStatus>;
|
|
21
29
|
//# sourceMappingURL=check-agent-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAG/D"}
|
|
@@ -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' &&
|