@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
package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Auth Detector Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for detecting whether the user is authenticated with a given
|
|
5
|
+
* AI coding agent (Claude Code, Cursor, Gemini CLI, Copilot CLI, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Implementations are platform-specific: they may inspect environment
|
|
8
|
+
* variables, credentials files, the macOS Keychain, or call agent-specific
|
|
9
|
+
* `auth status` subcommands. Keeping this behind an output port keeps the
|
|
10
|
+
* application layer free of node:fs / child_process / keychain imports and
|
|
11
|
+
* lets tests substitute a fake.
|
|
12
|
+
*/
|
|
13
|
+
import type { AgentType } from '../../../../domain/generated/output.js';
|
|
14
|
+
export interface IAgentAuthDetectorService {
|
|
15
|
+
/**
|
|
16
|
+
* Returns true if the user appears to be authenticated with the given
|
|
17
|
+
* agent. Implementations should be best-effort and conservative: prefer
|
|
18
|
+
* fast heuristics (env vars, file existence) over slow subprocess calls,
|
|
19
|
+
* and tolerate detection failures by returning false rather than throwing.
|
|
20
|
+
*/
|
|
21
|
+
isAuthenticated(agentType: AgentType, binaryName: string | null): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=agent-auth-detector.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-auth-detector.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/agent-auth-detector.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAExE,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF"}
|
package/dist/packages/core/src/application/ports/output/services/agent-auth-detector.interface.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Auth Detector Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for detecting whether the user is authenticated with a given
|
|
5
|
+
* AI coding agent (Claude Code, Cursor, Gemini CLI, Copilot CLI, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Implementations are platform-specific: they may inspect environment
|
|
8
|
+
* variables, credentials files, the macOS Keychain, or call agent-specific
|
|
9
|
+
* `auth status` subcommands. Keeping this behind an output port keeps the
|
|
10
|
+
* application layer free of node:fs / child_process / keychain imports and
|
|
11
|
+
* lets tests substitute a fake.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
package/dist/packages/core/src/application/ports/output/services/file-system-service.interface.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File System Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for filesystem mutations performed by use cases.
|
|
5
|
+
* Keeps the application layer free of direct `node:fs` imports.
|
|
6
|
+
*/
|
|
7
|
+
export interface IFileSystemService {
|
|
8
|
+
/**
|
|
9
|
+
* Recursively remove a directory and all its contents.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: succeeds silently if the path does not exist.
|
|
12
|
+
*
|
|
13
|
+
* @param dirPath - Absolute path to the directory to remove
|
|
14
|
+
* @throws Error if removal fails for reasons other than non-existence
|
|
15
|
+
*/
|
|
16
|
+
removeDirectory(dirPath: string): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=file-system-service.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/file-system-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
|
|
@@ -21,6 +21,9 @@ export type { IGitHubRepositoryService, GitHubRepo, GitHubOrganization, ListUser
|
|
|
21
21
|
export { GitHubAuthError, GitHubCloneError, GitHubUrlParseError, GitHubRepoListError, } from './github-repository-service.interface.js';
|
|
22
22
|
export type { IInteractiveSessionService, StreamChunk, UnsubscribeFn, ChatState, } from './interactive-session-service.interface.js';
|
|
23
23
|
export type { ISkillInjectorService, SkillInjectionResult } from './skill-injector.interface.js';
|
|
24
|
+
export type { IFileSystemService } from './file-system-service.interface.js';
|
|
25
|
+
export type { IProjectScaffoldService, ScaffoldProjectInput, ScaffoldProjectResult, } from './project-scaffold-service.interface.js';
|
|
26
|
+
export type { IAgentAuthDetectorService } from './agent-auth-detector.interface.js';
|
|
24
27
|
export type { IDesktopNotifier } from './i-desktop-notifier.js';
|
|
25
28
|
export type { IBrowserOpener } from './i-browser-opener.js';
|
|
26
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,YAAY,EACZ,eAAe,GAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,4CAA4C,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACjG,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,YAAY,EACZ,eAAe,GAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAClD,YAAY,EACV,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,4CAA4C,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACjG,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Scaffold Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for creating brand-new project folders on the filesystem.
|
|
5
|
+
* The adapter owns "where projects live" (e.g. $SHEP_HOME/projects) and
|
|
6
|
+
* how they are bootstrapped (mkdir + git init + initial commit) so the
|
|
7
|
+
* application layer stays free of node:fs / child_process imports.
|
|
8
|
+
*/
|
|
9
|
+
export interface ScaffoldProjectInput {
|
|
10
|
+
/** Filesystem-safe slug derived from the user-supplied project name. */
|
|
11
|
+
slug: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ScaffoldProjectResult {
|
|
14
|
+
/** Absolute path to the created folder, normalized to forward slashes. */
|
|
15
|
+
path: string;
|
|
16
|
+
}
|
|
17
|
+
export interface IProjectScaffoldService {
|
|
18
|
+
/**
|
|
19
|
+
* Check whether a project folder with the given slug already exists.
|
|
20
|
+
* Used by the use case to fail fast without overwriting user data.
|
|
21
|
+
*/
|
|
22
|
+
projectExists(slug: string): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Create the project folder under the configured projects root, initialise
|
|
25
|
+
* git, and commit an empty initial commit so the canvas can resolve a real
|
|
26
|
+
* HEAD immediately. Implementations should be cross-platform safe.
|
|
27
|
+
*
|
|
28
|
+
* @throws Error if the directory cannot be created. Git init failures
|
|
29
|
+
* should be tolerated (the folder still exists) but logged.
|
|
30
|
+
*/
|
|
31
|
+
scaffoldProject(input: ScaffoldProjectInput): Promise<ScaffoldProjectResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=project-scaffold-service.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-scaffold-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/project-scaffold-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C;;;;;;;OAOG;IACH,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC9E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Scaffold Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for creating brand-new project folders on the filesystem.
|
|
5
|
+
* The adapter owns "where projects live" (e.g. $SHEP_HOME/projects) and
|
|
6
|
+
* how they are bootstrapped (mkdir + git init + initial commit) so the
|
|
7
|
+
* application layer stays free of node:fs / child_process imports.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check Agent Auth Use Case
|
|
3
|
+
*
|
|
4
|
+
* Reports the install + auth status of the currently selected AI coding
|
|
5
|
+
* agent. Used by the onboarding empty state to drive the "Ready / Not
|
|
6
|
+
* installed / Needs auth" checklist.
|
|
7
|
+
*
|
|
8
|
+
* Owns:
|
|
9
|
+
* - Reading the active agent type from settings
|
|
10
|
+
* - Mapping agent type → user-facing label, tool id, binary name
|
|
11
|
+
* - Looking up tool installation status via ListToolsUseCase
|
|
12
|
+
* - Delegating credential detection to IAgentAuthDetectorService
|
|
13
|
+
*
|
|
14
|
+
* Presentation-agnostic: callable from CLI, TUI, and Web identically.
|
|
15
|
+
* The shape returned mirrors what the web UI consumes today; CLI/TUI may
|
|
16
|
+
* project a subset.
|
|
17
|
+
*/
|
|
18
|
+
import type { IAgentAuthDetectorService } from '../../ports/output/services/agent-auth-detector.interface.js';
|
|
19
|
+
import { ListToolsUseCase } from '../tools/list-tools.use-case.js';
|
|
20
|
+
export interface CheckAgentAuthResult {
|
|
21
|
+
/** Raw agent type string (matches AgentType enum values, or 'unknown'). */
|
|
22
|
+
agentType: string;
|
|
23
|
+
/** Whether the CLI tool binary is installed. */
|
|
24
|
+
installed: boolean;
|
|
25
|
+
/** Whether credentials / auth appear valid. */
|
|
26
|
+
authenticated: boolean;
|
|
27
|
+
/** Human-readable label for the agent (e.g. "Claude Code"). */
|
|
28
|
+
label: string;
|
|
29
|
+
/** CLI binary name (e.g. "claude", "gemini"). */
|
|
30
|
+
binaryName: string | null;
|
|
31
|
+
/** Shell command to install the tool, resolved for the current platform. */
|
|
32
|
+
installCommand: string | null;
|
|
33
|
+
/** Hint to show the user when not authenticated (typically the binary name). */
|
|
34
|
+
authCommand: string | null;
|
|
35
|
+
}
|
|
36
|
+
export declare class CheckAgentAuthUseCase {
|
|
37
|
+
private readonly listToolsUseCase;
|
|
38
|
+
private readonly authDetector;
|
|
39
|
+
constructor(listToolsUseCase: ListToolsUseCase, authDetector: IAgentAuthDetectorService);
|
|
40
|
+
execute(): Promise<CheckAgentAuthResult>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=check-agent-auth.use-case.d.ts.map
|
package/dist/packages/core/src/application/use-cases/agents/check-agent-auth.use-case.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-agent-auth.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/agents/check-agent-auth.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8DAA8D,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4EAA4E;IAC5E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gFAAgF;IAChF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAuCD,qBACa,qBAAqB;IAEJ,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAE3D,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFc,gBAAgB,EAAE,gBAAgB,EAE5D,YAAY,EAAE,yBAAyB;IAGpD,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAkE/C"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check Agent Auth Use Case
|
|
3
|
+
*
|
|
4
|
+
* Reports the install + auth status of the currently selected AI coding
|
|
5
|
+
* agent. Used by the onboarding empty state to drive the "Ready / Not
|
|
6
|
+
* installed / Needs auth" checklist.
|
|
7
|
+
*
|
|
8
|
+
* Owns:
|
|
9
|
+
* - Reading the active agent type from settings
|
|
10
|
+
* - Mapping agent type → user-facing label, tool id, binary name
|
|
11
|
+
* - Looking up tool installation status via ListToolsUseCase
|
|
12
|
+
* - Delegating credential detection to IAgentAuthDetectorService
|
|
13
|
+
*
|
|
14
|
+
* Presentation-agnostic: callable from CLI, TUI, and Web identically.
|
|
15
|
+
* The shape returned mirrors what the web UI consumes today; CLI/TUI may
|
|
16
|
+
* project a subset.
|
|
17
|
+
*/
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
25
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
26
|
+
};
|
|
27
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
28
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
29
|
+
};
|
|
30
|
+
import { injectable, inject } from 'tsyringe';
|
|
31
|
+
import { AgentType } from '../../../domain/generated/output.js';
|
|
32
|
+
import { getSettings } from '../../../infrastructure/services/settings.service.js';
|
|
33
|
+
import { ListToolsUseCase } from '../tools/list-tools.use-case.js';
|
|
34
|
+
/**
|
|
35
|
+
* Co-located metadata table — pure facts about each AgentType. Lives in
|
|
36
|
+
* the use case because it is the only consumer that needs all three pieces
|
|
37
|
+
* (label + tool id + binary) wired together.
|
|
38
|
+
*/
|
|
39
|
+
const AGENT_METADATA = {
|
|
40
|
+
[AgentType.ClaudeCode]: {
|
|
41
|
+
label: 'Claude Code',
|
|
42
|
+
toolId: 'claude-code',
|
|
43
|
+
binaryName: 'claude',
|
|
44
|
+
},
|
|
45
|
+
[AgentType.Cursor]: { label: 'Cursor Agent', toolId: 'cursor-cli', binaryName: 'cursor-agent' },
|
|
46
|
+
[AgentType.GeminiCli]: { label: 'Gemini CLI', toolId: 'gemini-cli', binaryName: 'gemini' },
|
|
47
|
+
[AgentType.CopilotCli]: { label: 'Copilot CLI', toolId: 'copilot-cli', binaryName: 'copilot' },
|
|
48
|
+
[AgentType.Aider]: { label: 'Aider', toolId: null, binaryName: null },
|
|
49
|
+
[AgentType.Continue]: { label: 'Continue', toolId: null, binaryName: null },
|
|
50
|
+
[AgentType.Dev]: { label: 'Demo', toolId: null, binaryName: null },
|
|
51
|
+
};
|
|
52
|
+
const UNKNOWN_RESULT = {
|
|
53
|
+
agentType: 'unknown',
|
|
54
|
+
installed: false,
|
|
55
|
+
authenticated: false,
|
|
56
|
+
label: 'Unknown',
|
|
57
|
+
binaryName: null,
|
|
58
|
+
installCommand: null,
|
|
59
|
+
authCommand: null,
|
|
60
|
+
};
|
|
61
|
+
let CheckAgentAuthUseCase = class CheckAgentAuthUseCase {
|
|
62
|
+
listToolsUseCase;
|
|
63
|
+
authDetector;
|
|
64
|
+
constructor(listToolsUseCase, authDetector) {
|
|
65
|
+
this.listToolsUseCase = listToolsUseCase;
|
|
66
|
+
this.authDetector = authDetector;
|
|
67
|
+
}
|
|
68
|
+
async execute() {
|
|
69
|
+
let agentType;
|
|
70
|
+
try {
|
|
71
|
+
agentType = getSettings().agent.type;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return UNKNOWN_RESULT;
|
|
75
|
+
}
|
|
76
|
+
const metadata = AGENT_METADATA[agentType];
|
|
77
|
+
if (!metadata) {
|
|
78
|
+
return { ...UNKNOWN_RESULT, agentType };
|
|
79
|
+
}
|
|
80
|
+
// Agents with no associated tool (dev/demo, aider, continue) — assume ready.
|
|
81
|
+
if (!metadata.toolId) {
|
|
82
|
+
return {
|
|
83
|
+
agentType,
|
|
84
|
+
installed: true,
|
|
85
|
+
authenticated: true,
|
|
86
|
+
label: metadata.label,
|
|
87
|
+
binaryName: metadata.binaryName,
|
|
88
|
+
installCommand: null,
|
|
89
|
+
authCommand: null,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Resolve installation status from the tool catalogue.
|
|
93
|
+
let installed = false;
|
|
94
|
+
let installCommand = null;
|
|
95
|
+
try {
|
|
96
|
+
const tools = await this.listToolsUseCase.execute();
|
|
97
|
+
const tool = tools.find((t) => t.id === metadata.toolId);
|
|
98
|
+
installed = tool?.status.status === 'available';
|
|
99
|
+
installCommand = tool?.installCommand ?? null;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
installed = false;
|
|
103
|
+
}
|
|
104
|
+
if (!installed) {
|
|
105
|
+
return {
|
|
106
|
+
agentType,
|
|
107
|
+
installed: false,
|
|
108
|
+
authenticated: false,
|
|
109
|
+
label: metadata.label,
|
|
110
|
+
binaryName: metadata.binaryName,
|
|
111
|
+
installCommand,
|
|
112
|
+
authCommand: metadata.binaryName ? `Install ${metadata.label} first` : null,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Tool is installed — defer credential detection to the platform adapter.
|
|
116
|
+
const authenticated = await this.authDetector.isAuthenticated(agentType, metadata.binaryName);
|
|
117
|
+
return {
|
|
118
|
+
agentType,
|
|
119
|
+
installed: true,
|
|
120
|
+
authenticated,
|
|
121
|
+
label: metadata.label,
|
|
122
|
+
binaryName: metadata.binaryName,
|
|
123
|
+
installCommand,
|
|
124
|
+
authCommand: authenticated ? null : metadata.binaryName,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
CheckAgentAuthUseCase = __decorate([
|
|
129
|
+
injectable(),
|
|
130
|
+
__param(0, inject(ListToolsUseCase)),
|
|
131
|
+
__param(1, inject('IAgentAuthDetectorService')),
|
|
132
|
+
__metadata("design:paramtypes", [ListToolsUseCase, Object])
|
|
133
|
+
], CheckAgentAuthUseCase);
|
|
134
|
+
export { CheckAgentAuthUseCase };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Project Use Case
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates "create a new empty project folder under the Shep projects
|
|
5
|
+
* root". Owns the project naming rules (validation, slugification, length
|
|
6
|
+
* cap) and the "must not already exist" guard. Delegates filesystem and git
|
|
7
|
+
* work to IProjectScaffoldService so the application layer remains free of
|
|
8
|
+
* node:fs / child_process imports.
|
|
9
|
+
*
|
|
10
|
+
* Presentation-agnostic: callable from CLI, TUI, and Web identically.
|
|
11
|
+
*/
|
|
12
|
+
import type { IProjectScaffoldService } from '../../ports/output/services/project-scaffold-service.interface.js';
|
|
13
|
+
export interface CreateProjectInput {
|
|
14
|
+
/** User-supplied project name. Will be slugified for the directory name. */
|
|
15
|
+
name: string;
|
|
16
|
+
}
|
|
17
|
+
export interface CreateProjectSuccess {
|
|
18
|
+
ok: true;
|
|
19
|
+
/** Absolute path to the created folder, normalized to forward slashes. */
|
|
20
|
+
path: string;
|
|
21
|
+
}
|
|
22
|
+
export interface CreateProjectFailure {
|
|
23
|
+
ok: false;
|
|
24
|
+
error: string;
|
|
25
|
+
}
|
|
26
|
+
export type CreateProjectResult = CreateProjectSuccess | CreateProjectFailure;
|
|
27
|
+
/**
|
|
28
|
+
* Slugify a user-supplied project name into a safe directory name.
|
|
29
|
+
*
|
|
30
|
+
* - Lowercases
|
|
31
|
+
* - Replaces whitespace + invalid chars with `-`
|
|
32
|
+
* - Strips leading/trailing dashes and dots
|
|
33
|
+
* - Caps length so we stay well under Windows' 260-char path limit
|
|
34
|
+
*
|
|
35
|
+
* Exported for unit testing — production callers should use the use case.
|
|
36
|
+
*/
|
|
37
|
+
export declare function slugifyProjectName(name: string): string;
|
|
38
|
+
export declare class CreateProjectUseCase {
|
|
39
|
+
private readonly scaffoldService;
|
|
40
|
+
constructor(scaffoldService: IProjectScaffoldService);
|
|
41
|
+
execute(input: CreateProjectInput): Promise<CreateProjectResult>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=create-project.use-case.d.ts.map
|
package/dist/packages/core/src/application/use-cases/projects/create-project.use-case.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/projects/create-project.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mEAAmE,CAAC;AAEjH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE9E;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,uBAAuB;IAGrD,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA+BvE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Project Use Case
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates "create a new empty project folder under the Shep projects
|
|
5
|
+
* root". Owns the project naming rules (validation, slugification, length
|
|
6
|
+
* cap) and the "must not already exist" guard. Delegates filesystem and git
|
|
7
|
+
* work to IProjectScaffoldService so the application layer remains free of
|
|
8
|
+
* node:fs / child_process imports.
|
|
9
|
+
*
|
|
10
|
+
* Presentation-agnostic: callable from CLI, TUI, and Web identically.
|
|
11
|
+
*/
|
|
12
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
13
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
|
+
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;
|
|
16
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
|
+
};
|
|
18
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
20
|
+
};
|
|
21
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
22
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
23
|
+
};
|
|
24
|
+
import { injectable, inject } from 'tsyringe';
|
|
25
|
+
/**
|
|
26
|
+
* Slugify a user-supplied project name into a safe directory name.
|
|
27
|
+
*
|
|
28
|
+
* - Lowercases
|
|
29
|
+
* - Replaces whitespace + invalid chars with `-`
|
|
30
|
+
* - Strips leading/trailing dashes and dots
|
|
31
|
+
* - Caps length so we stay well under Windows' 260-char path limit
|
|
32
|
+
*
|
|
33
|
+
* Exported for unit testing — production callers should use the use case.
|
|
34
|
+
*/
|
|
35
|
+
export function slugifyProjectName(name) {
|
|
36
|
+
const cleaned = name
|
|
37
|
+
.trim()
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(/[^a-z0-9._-]+/g, '-')
|
|
40
|
+
.replace(/-+/g, '-')
|
|
41
|
+
.replace(/^[-.]+|[-.]+$/g, '');
|
|
42
|
+
return cleaned.slice(0, 64);
|
|
43
|
+
}
|
|
44
|
+
let CreateProjectUseCase = class CreateProjectUseCase {
|
|
45
|
+
scaffoldService;
|
|
46
|
+
constructor(scaffoldService) {
|
|
47
|
+
this.scaffoldService = scaffoldService;
|
|
48
|
+
}
|
|
49
|
+
async execute(input) {
|
|
50
|
+
const trimmed = input.name.trim();
|
|
51
|
+
if (!trimmed) {
|
|
52
|
+
return { ok: false, error: 'Project name is required.' };
|
|
53
|
+
}
|
|
54
|
+
const slug = slugifyProjectName(trimmed);
|
|
55
|
+
if (!slug) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
error: 'Project name must contain at least one letter or number.',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (await this.scaffoldService.projectExists(slug)) {
|
|
62
|
+
return {
|
|
63
|
+
ok: false,
|
|
64
|
+
error: `A project named "${slug}" already exists. Pick a different name.`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const result = await this.scaffoldService.scaffoldProject({ slug });
|
|
69
|
+
return { ok: true, path: result.path };
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
error: err instanceof Error ? err.message : 'Failed to create project folder.',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
CreateProjectUseCase = __decorate([
|
|
80
|
+
injectable(),
|
|
81
|
+
__param(0, inject('IProjectScaffoldService')),
|
|
82
|
+
__metadata("design:paramtypes", [Object])
|
|
83
|
+
], CreateProjectUseCase);
|
|
84
|
+
export { CreateProjectUseCase };
|
package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.d.ts
CHANGED
|
@@ -4,15 +4,26 @@
|
|
|
4
4
|
* Deletes a Repository and all its child features.
|
|
5
5
|
* Each feature is properly cleaned up (agent runs cancelled, worktrees removed)
|
|
6
6
|
* via DeleteFeatureUseCase before the repository is soft-deleted.
|
|
7
|
+
*
|
|
8
|
+
* Optionally removes the repository directory from disk when
|
|
9
|
+
* {@link DeleteRepositoryOptions.deleteFromDisk} is true. The DB soft-delete
|
|
10
|
+
* always runs first so the repository disappears from queries even if the
|
|
11
|
+
* filesystem removal fails.
|
|
7
12
|
*/
|
|
8
13
|
import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
|
|
9
14
|
import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
|
|
15
|
+
import type { IFileSystemService } from '../../ports/output/services/file-system-service.interface.js';
|
|
10
16
|
import { DeleteFeatureUseCase } from '../features/delete-feature.use-case.js';
|
|
17
|
+
export interface DeleteRepositoryOptions {
|
|
18
|
+
/** When true, recursively remove the repository directory from disk. */
|
|
19
|
+
deleteFromDisk?: boolean;
|
|
20
|
+
}
|
|
11
21
|
export declare class DeleteRepositoryUseCase {
|
|
12
22
|
private readonly repositoryRepo;
|
|
13
23
|
private readonly featureRepo;
|
|
14
24
|
private readonly deleteFeature;
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
private readonly fileSystem;
|
|
26
|
+
constructor(repositoryRepo: IRepositoryRepository, featureRepo: IFeatureRepository, deleteFeature: DeleteFeatureUseCase, fileSystem: IFileSystemService);
|
|
27
|
+
execute(id: string, options?: DeleteRepositoryOptions): Promise<void>;
|
|
17
28
|
}
|
|
18
29
|
//# sourceMappingURL=delete-repository.use-case.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/delete-repository.use-case.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"delete-repository.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/repositories/delete-repository.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBACa,uBAAuB;IAGhC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBANV,cAAc,EAAE,qBAAqB,EAErC,WAAW,EAAE,kBAAkB,EAE/B,aAAa,EAAE,oBAAoB,EAEnC,UAAU,EAAE,kBAAkB;IAG3C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB5E"}
|
package/dist/packages/core/src/application/use-cases/repositories/delete-repository.use-case.js
CHANGED
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* Deletes a Repository and all its child features.
|
|
5
5
|
* Each feature is properly cleaned up (agent runs cancelled, worktrees removed)
|
|
6
6
|
* via DeleteFeatureUseCase before the repository is soft-deleted.
|
|
7
|
+
*
|
|
8
|
+
* Optionally removes the repository directory from disk when
|
|
9
|
+
* {@link DeleteRepositoryOptions.deleteFromDisk} is true. The DB soft-delete
|
|
10
|
+
* always runs first so the repository disappears from queries even if the
|
|
11
|
+
* filesystem removal fails.
|
|
7
12
|
*/
|
|
8
13
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
9
14
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -23,12 +28,14 @@ let DeleteRepositoryUseCase = class DeleteRepositoryUseCase {
|
|
|
23
28
|
repositoryRepo;
|
|
24
29
|
featureRepo;
|
|
25
30
|
deleteFeature;
|
|
26
|
-
|
|
31
|
+
fileSystem;
|
|
32
|
+
constructor(repositoryRepo, featureRepo, deleteFeature, fileSystem) {
|
|
27
33
|
this.repositoryRepo = repositoryRepo;
|
|
28
34
|
this.featureRepo = featureRepo;
|
|
29
35
|
this.deleteFeature = deleteFeature;
|
|
36
|
+
this.fileSystem = fileSystem;
|
|
30
37
|
}
|
|
31
|
-
async execute(id) {
|
|
38
|
+
async execute(id, options) {
|
|
32
39
|
const repository = await this.repositoryRepo.findById(id);
|
|
33
40
|
if (!repository) {
|
|
34
41
|
throw new Error(`Repository not found: "${id}"`);
|
|
@@ -43,6 +50,9 @@ let DeleteRepositoryUseCase = class DeleteRepositoryUseCase {
|
|
|
43
50
|
await this.deleteFeature.execute(feature.id);
|
|
44
51
|
}
|
|
45
52
|
await this.repositoryRepo.softDelete(id);
|
|
53
|
+
if (options?.deleteFromDisk) {
|
|
54
|
+
await this.fileSystem.removeDirectory(repository.path);
|
|
55
|
+
}
|
|
46
56
|
}
|
|
47
57
|
};
|
|
48
58
|
DeleteRepositoryUseCase = __decorate([
|
|
@@ -50,6 +60,7 @@ DeleteRepositoryUseCase = __decorate([
|
|
|
50
60
|
__param(0, inject('IRepositoryRepository')),
|
|
51
61
|
__param(1, inject('IFeatureRepository')),
|
|
52
62
|
__param(2, inject(DeleteFeatureUseCase)),
|
|
53
|
-
|
|
63
|
+
__param(3, inject('IFileSystemService')),
|
|
64
|
+
__metadata("design:paramtypes", [Object, Object, DeleteFeatureUseCase, Object])
|
|
54
65
|
], DeleteRepositoryUseCase);
|
|
55
66
|
export { DeleteRepositoryUseCase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAmKrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CA6drE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -21,6 +21,9 @@ import { execFile } from 'node:child_process';
|
|
|
21
21
|
import { IS_WINDOWS } from '../platform.js';
|
|
22
22
|
import { VersionService } from '../services/version.service.js';
|
|
23
23
|
import { WorktreeService } from '../services/git/worktree.service.js';
|
|
24
|
+
import { FileSystemService } from '../services/file-system.service.js';
|
|
25
|
+
import { FsProjectScaffoldService } from '../services/project-scaffold/fs-project-scaffold.service.js';
|
|
26
|
+
import { PlatformAgentAuthDetectorService } from '../services/agent-auth-detector/platform-agent-auth-detector.service.js';
|
|
24
27
|
import { ToolInstallerServiceImpl } from '../services/tool-installer/tool-installer.service.js';
|
|
25
28
|
import { GitPrService } from '../services/git/git-pr.service.js';
|
|
26
29
|
import { GitForkService } from '../services/git/git-fork.service.js';
|
|
@@ -80,6 +83,8 @@ import { ListToolsUseCase } from '../../application/use-cases/tools/list-tools.u
|
|
|
80
83
|
import { LaunchToolUseCase } from '../../application/use-cases/tools/launch-tool.use-case.js';
|
|
81
84
|
import { LaunchIdeUseCase } from '../../application/use-cases/ide/launch-ide.use-case.js';
|
|
82
85
|
import { AddRepositoryUseCase } from '../../application/use-cases/repositories/add-repository.use-case.js';
|
|
86
|
+
import { CreateProjectUseCase } from '../../application/use-cases/projects/create-project.use-case.js';
|
|
87
|
+
import { CheckAgentAuthUseCase } from '../../application/use-cases/agents/check-agent-auth.use-case.js';
|
|
83
88
|
import { ListRepositoriesUseCase } from '../../application/use-cases/repositories/list-repositories.use-case.js';
|
|
84
89
|
import { DeleteRepositoryUseCase } from '../../application/use-cases/repositories/delete-repository.use-case.js';
|
|
85
90
|
import { ImportGitHubRepositoryUseCase } from '../../application/use-cases/repositories/import-github-repository.use-case.js';
|
|
@@ -191,6 +196,9 @@ export async function initializeContainer() {
|
|
|
191
196
|
},
|
|
192
197
|
});
|
|
193
198
|
container.registerSingleton('IWorktreeService', WorktreeService);
|
|
199
|
+
container.registerSingleton('IFileSystemService', FileSystemService);
|
|
200
|
+
container.registerSingleton('IProjectScaffoldService', FsProjectScaffoldService);
|
|
201
|
+
container.registerSingleton('IAgentAuthDetectorService', PlatformAgentAuthDetectorService);
|
|
194
202
|
container.registerSingleton('ISkillInjectorService', SkillInjectorService);
|
|
195
203
|
container.registerSingleton('IToolInstallerService', ToolInstallerServiceImpl);
|
|
196
204
|
container.registerSingleton('IGitPrService', GitPrService);
|
|
@@ -327,6 +335,8 @@ export async function initializeContainer() {
|
|
|
327
335
|
container.registerSingleton(LaunchToolUseCase);
|
|
328
336
|
container.registerSingleton(LaunchIdeUseCase);
|
|
329
337
|
container.registerSingleton(AddRepositoryUseCase);
|
|
338
|
+
container.registerSingleton(CreateProjectUseCase);
|
|
339
|
+
container.registerSingleton(CheckAgentAuthUseCase);
|
|
330
340
|
container.registerSingleton(ListRepositoriesUseCase);
|
|
331
341
|
container.registerSingleton(DeleteRepositoryUseCase);
|
|
332
342
|
container.registerSingleton(ImportGitHubRepositoryUseCase);
|
|
@@ -428,6 +438,12 @@ export async function initializeContainer() {
|
|
|
428
438
|
container.register('AddRepositoryUseCase', {
|
|
429
439
|
useFactory: (c) => c.resolve(AddRepositoryUseCase),
|
|
430
440
|
});
|
|
441
|
+
container.register('CreateProjectUseCase', {
|
|
442
|
+
useFactory: (c) => c.resolve(CreateProjectUseCase),
|
|
443
|
+
});
|
|
444
|
+
container.register('CheckAgentAuthUseCase', {
|
|
445
|
+
useFactory: (c) => c.resolve(CheckAgentAuthUseCase),
|
|
446
|
+
});
|
|
431
447
|
container.register('ListRepositoriesUseCase', {
|
|
432
448
|
useFactory: (c) => c.resolve(ListRepositoriesUseCase),
|
|
433
449
|
});
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
import { AgentType } from '../../../domain/generated/output.js';
|
|
21
|
+
import type { IAgentAuthDetectorService } from '../../../application/ports/output/services/agent-auth-detector.interface.js';
|
|
22
|
+
export declare class PlatformAgentAuthDetectorService implements IAgentAuthDetectorService {
|
|
23
|
+
isAuthenticated(agentType: AgentType, binaryName: string | null): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Instant credential/env check (~5ms, no subprocess).
|
|
26
|
+
* Returns true if credentials likely exist for this agent type.
|
|
27
|
+
*/
|
|
28
|
+
private tier1AuthCheck;
|
|
29
|
+
/**
|
|
30
|
+
* Subprocess verification (~200ms). Only called if tier 1 passes, to
|
|
31
|
+
* confirm tokens aren't expired.
|
|
32
|
+
*/
|
|
33
|
+
private tier2AuthVerify;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=platform-agent-auth-detector.service.d.ts.map
|