@shepai/cli 1.123.0-pr394.f86a739 → 1.123.0-pr396.072b95e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts +0 -11
- package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +68 -5
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +6 -4
- package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +0 -25
- package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts +28 -0
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +81 -0
- package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts +16 -0
- package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.js +43 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +15 -5
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts +0 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +0 -8
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +35 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +66 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +42 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +169 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +6 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +125 -0
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +0 -2
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +0 -39
- package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/index.js +1 -3
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +0 -4
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +3 -12
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +0 -1
- package/web/.next/build-manifest.json +4 -4
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +0 -6
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +22 -22
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
- 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]/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
- 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)/create/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
- 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]/page/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
- 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/page/build-manifest.json +2 -2
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/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/settings/page/build-manifest.json +2 -2
- package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js +4 -4
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +0 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +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/7f428_lucide-react_dist_esm_icons_d0119342._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__14664e9b._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_3a4c94e3._.js +3 -0
- package/web/.next/server/chunks/ssr/_3a4c94e3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_636e9771._.js +3 -0
- package/web/.next/server/chunks/ssr/_636e9771._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_bd291dd4._.js → _67845f5e._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_bd291dd4._.js.map → _67845f5e._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_6d26a08f._.js +3 -0
- package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9ac70f88._.js +5 -0
- package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b56e7571._.js +3 -0
- package/web/.next/server/chunks/ssr/_b56e7571._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_e9703421._.js +3 -0
- package/web/.next/server/chunks/ssr/_e9703421._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f1a649e3._.js +9 -0
- package/web/.next/server/chunks/ssr/_f1a649e3._.js.map +1 -0
- 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/node_modules__pnpm_bc66dcc6._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_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_dae4825f._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_dae4825f._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +2 -2
- 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 +34 -204
- package/web/.next/static/chunks/1203f53fba11a758.js +1 -0
- package/web/.next/static/chunks/{6ebcb8f40fde6b83.js → 2ac245ce8a08355d.js} +1 -1
- package/web/.next/static/chunks/303a1217006489b9.js +1 -0
- package/web/.next/static/chunks/3925626b99dcd57a.css +1 -0
- package/web/.next/static/chunks/4443ee9c7733399b.js +1 -0
- package/web/.next/static/chunks/5251888e599c4f97.js +1 -0
- package/web/.next/static/chunks/52b56677c842e45f.js +3 -0
- package/web/.next/static/chunks/{07973cb4a37c0c40.js → 5915ad429ee7c768.js} +1 -1
- package/web/.next/static/chunks/{b0e3592dff0215dc.js → 6386395c56e793a8.js} +1 -1
- package/web/.next/static/chunks/{ec348ad3d7e20677.js → 66fde5bc6b32d8b0.js} +2 -2
- package/web/.next/static/chunks/{71acbe51602d440d.js → 6bc38284b76689fb.js} +3 -3
- package/web/.next/static/chunks/8785635121ca5d01.js +1 -0
- package/web/.next/static/chunks/dbbb446493f21874.js +1 -0
- package/web/.next/static/chunks/{4e9bc4d7b844e342.js → de6a024df1832124.js} +1 -1
- package/web/.next/static/chunks/{89aac43287d73b02.js → ed3a602003bcb31b.js} +1 -1
- package/web/.next/static/chunks/efe5e53ee31d985b.js +1 -0
- package/web/.next/static/chunks/{turbopack-080e470ea902d0ba.js → turbopack-426d9bc2450816ba.js} +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +0 -49
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +0 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +0 -188
- package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts +0 -33
- package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts.map +0 -1
- package/dist/packages/core/src/application/use-cases/features/branch-name-utils.js +0 -77
- package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts +0 -14
- package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts.map +0 -1
- package/dist/src/presentation/cli/commands/feat/adopt.command.js +0 -46
- package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts +0 -10
- package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts.map +0 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.js +0 -22
- package/dist/src/presentation/web/app/actions/adopt-branch.d.ts +0 -11
- package/dist/src/presentation/web/app/actions/adopt-branch.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/adopt-branch.js +0 -20
- package/dist/src/presentation/web/app/actions/list-branches.d.ts +0 -6
- package/dist/src/presentation/web/app/actions/list-branches.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/list-branches.js +0 -18
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts +0 -13
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +0 -69
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +0 -35
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +0 -135
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts +0 -5
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.js +0 -69
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +0 -18
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +0 -6
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +0 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +0 -335
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +0 -20
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.map +0 -5
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +0 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js +0 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_cfc9281c.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_cfc9281c.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e2227c0f._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e2227c0f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0589cc3._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0589cc3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_037585d1._.js +0 -3
- package/web/.next/server/chunks/ssr/_037585d1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_19a2fb35._.js +0 -3
- package/web/.next/server/chunks/ssr/_19a2fb35._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
- package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_583a83fb._.js +0 -3
- package/web/.next/server/chunks/ssr/_583a83fb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9f56cf8f._.js +0 -3
- package/web/.next/server/chunks/ssr/_9f56cf8f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a187fd7e._.js +0 -3
- package/web/.next/server/chunks/ssr/_a187fd7e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a5aa6371._.js +0 -9
- package/web/.next/server/chunks/ssr/_a5aa6371._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +0 -3
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_af7ec14e._.js +0 -3
- package/web/.next/server/chunks/ssr/_af7ec14e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d5206f22._.js +0 -4
- package/web/.next/server/chunks/ssr/_d5206f22._.js.map +0 -1
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_d19182cb._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_d19182cb._.js.map +0 -1
- package/web/.next/static/chunks/15665b473febf97f.js +0 -1
- package/web/.next/static/chunks/3e3e9c6552a6574f.css +0 -1
- package/web/.next/static/chunks/5f4d4edcd476f2df.js +0 -1
- package/web/.next/static/chunks/6295f27fe47da052.js +0 -1
- package/web/.next/static/chunks/688689aa17b96e5d.js +0 -1
- package/web/.next/static/chunks/77be7fb4731d37a0.js +0 -1
- package/web/.next/static/chunks/8080c842b0358904.js +0 -1
- package/web/.next/static/chunks/a8ba3f3e2b0f87aa.js +0 -1
- package/web/.next/static/chunks/b014c7d70d2c71ed.js +0 -1
- package/web/.next/static/chunks/d04de4be30ab78ca.js +0 -3
- /package/web/.next/static/{oFYfLIWkGEGaI30kH8DXG → i2lq44hDYaSB92Rt1Tjnm}/_buildManifest.js +0 -0
- /package/web/.next/static/{oFYfLIWkGEGaI30kH8DXG → i2lq44hDYaSB92Rt1Tjnm}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{oFYfLIWkGEGaI30kH8DXG → i2lq44hDYaSB92Rt1Tjnm}/_ssgManifest.js +0 -0
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adopt Branch Use Case
|
|
3
|
-
*
|
|
4
|
-
* Imports an existing git branch into Shep's feature tracking system.
|
|
5
|
-
* Creates a worktree (if needed), derives feature metadata from the branch name,
|
|
6
|
-
* and persists a Feature entity. Branches with an open PR get lifecycle=Review
|
|
7
|
-
* (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
|
|
8
|
-
*
|
|
9
|
-
* This is a standalone use case — it does NOT extend or modify CreateFeatureUseCase.
|
|
10
|
-
* It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
|
|
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
|
-
import { randomUUID } from 'node:crypto';
|
|
26
|
-
import { SdlcLifecycle, PrStatus } from '../../../domain/generated/output.js';
|
|
27
|
-
import { deriveName, deriveSlug } from './branch-name-utils.js';
|
|
28
|
-
/** Branches that must not be adopted as features. */
|
|
29
|
-
const PROTECTED_BRANCHES = new Set(['main', 'master']);
|
|
30
|
-
let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
31
|
-
featureRepo;
|
|
32
|
-
repositoryRepo;
|
|
33
|
-
worktreeService;
|
|
34
|
-
gitPrService;
|
|
35
|
-
constructor(featureRepo, repositoryRepo, worktreeService, gitPrService) {
|
|
36
|
-
this.featureRepo = featureRepo;
|
|
37
|
-
this.repositoryRepo = repositoryRepo;
|
|
38
|
-
this.worktreeService = worktreeService;
|
|
39
|
-
this.gitPrService = gitPrService;
|
|
40
|
-
}
|
|
41
|
-
async execute(input) {
|
|
42
|
-
const { branchName, repositoryPath } = input;
|
|
43
|
-
// --- Guard: reject main/master ---
|
|
44
|
-
if (PROTECTED_BRANCHES.has(branchName)) {
|
|
45
|
-
throw new Error(`Cannot adopt the "${branchName}" branch. The main branch should not be tracked as a feature.`);
|
|
46
|
-
}
|
|
47
|
-
// --- Guard: duplicate adoption ---
|
|
48
|
-
const existing = await this.featureRepo.findByBranch(branchName, repositoryPath);
|
|
49
|
-
if (existing) {
|
|
50
|
-
throw new Error(`Branch "${branchName}" is already tracked as feature "${existing.name}" (${existing.id}). ` +
|
|
51
|
-
'A branch can only be adopted once per repository.');
|
|
52
|
-
}
|
|
53
|
-
// --- Derive slug and check uniqueness ---
|
|
54
|
-
const slug = deriveSlug(branchName);
|
|
55
|
-
const slugCollision = await this.featureRepo.findBySlug(slug, repositoryPath);
|
|
56
|
-
if (slugCollision) {
|
|
57
|
-
throw new Error(`A feature with slug "${slug}" already exists in this repository (feature "${slugCollision.name}"). ` +
|
|
58
|
-
`Cannot adopt branch "${branchName}" because its derived slug collides.`);
|
|
59
|
-
}
|
|
60
|
-
// --- Validate branch existence (local or remote) ---
|
|
61
|
-
const branchRef = await this.resolveBranchRef(branchName, repositoryPath);
|
|
62
|
-
// --- Resolve or create repository entity ---
|
|
63
|
-
const repository = await this.resolveRepository(repositoryPath);
|
|
64
|
-
// --- Create or reuse worktree ---
|
|
65
|
-
const worktreePath = this.worktreeService.getWorktreePath(repositoryPath, slug);
|
|
66
|
-
const worktreeExists = await this.worktreeService.exists(repositoryPath, branchName);
|
|
67
|
-
if (!worktreeExists) {
|
|
68
|
-
await this.worktreeService.addExisting(repositoryPath, branchRef, worktreePath);
|
|
69
|
-
}
|
|
70
|
-
// --- Detect open PR for this branch ---
|
|
71
|
-
const prData = await this.detectPrForBranch(branchName, repositoryPath);
|
|
72
|
-
// --- Derive feature metadata ---
|
|
73
|
-
const name = deriveName(branchName);
|
|
74
|
-
const now = new Date();
|
|
75
|
-
const hasOpenPr = prData !== undefined;
|
|
76
|
-
// If the branch has an open (not yet merged) PR, place the feature in
|
|
77
|
-
// Review so the node shows "REVIEW" instead of "COMPLETED". Only truly
|
|
78
|
-
// finished branches (no PR, merged PR, or closed PR) get Maintain.
|
|
79
|
-
const lifecycle = prData?.status === PrStatus.Open ? SdlcLifecycle.Review : SdlcLifecycle.Maintain;
|
|
80
|
-
// --- Persist feature ---
|
|
81
|
-
const feature = {
|
|
82
|
-
id: randomUUID(),
|
|
83
|
-
name,
|
|
84
|
-
slug,
|
|
85
|
-
description: '',
|
|
86
|
-
userQuery: '',
|
|
87
|
-
repositoryPath,
|
|
88
|
-
branch: branchName,
|
|
89
|
-
lifecycle,
|
|
90
|
-
messages: [],
|
|
91
|
-
relatedArtifacts: [],
|
|
92
|
-
fast: false,
|
|
93
|
-
push: false,
|
|
94
|
-
openPr: hasOpenPr,
|
|
95
|
-
approvalGates: {
|
|
96
|
-
allowPrd: false,
|
|
97
|
-
allowPlan: false,
|
|
98
|
-
allowMerge: false,
|
|
99
|
-
},
|
|
100
|
-
worktreePath,
|
|
101
|
-
repositoryId: repository.id,
|
|
102
|
-
pr: prData,
|
|
103
|
-
createdAt: now,
|
|
104
|
-
updatedAt: now,
|
|
105
|
-
};
|
|
106
|
-
await this.featureRepo.create(feature);
|
|
107
|
-
return { feature };
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Resolve the git ref to use for worktree creation.
|
|
111
|
-
* Returns the branch name for local branches, or "origin/<branch>" for remote-only.
|
|
112
|
-
* Throws if branch does not exist anywhere.
|
|
113
|
-
*/
|
|
114
|
-
async resolveBranchRef(branchName, repositoryPath) {
|
|
115
|
-
const localExists = await this.worktreeService.branchExists(repositoryPath, branchName);
|
|
116
|
-
if (localExists) {
|
|
117
|
-
return branchName;
|
|
118
|
-
}
|
|
119
|
-
const remoteExists = await this.worktreeService.remoteBranchExists(repositoryPath, branchName);
|
|
120
|
-
if (remoteExists) {
|
|
121
|
-
return `origin/${branchName}`;
|
|
122
|
-
}
|
|
123
|
-
throw new Error(`Branch "${branchName}" does not exist locally or on the remote. ` +
|
|
124
|
-
'Check the branch name spelling and ensure you have fetched from the remote.');
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Detect if the branch has an open PR (or one whose closure we cannot confirm).
|
|
128
|
-
* Returns PullRequest data if found, undefined otherwise.
|
|
129
|
-
* Gracefully returns undefined if gh CLI is unavailable or the repo has no remote.
|
|
130
|
-
*/
|
|
131
|
-
async detectPrForBranch(branchName, repositoryPath) {
|
|
132
|
-
try {
|
|
133
|
-
const hasRemote = await this.gitPrService.hasRemote(repositoryPath);
|
|
134
|
-
if (!hasRemote)
|
|
135
|
-
return undefined;
|
|
136
|
-
const prStatuses = await this.gitPrService.listPrStatuses(repositoryPath);
|
|
137
|
-
const match = prStatuses.find((pr) => pr.headRefName === branchName);
|
|
138
|
-
if (!match)
|
|
139
|
-
return undefined;
|
|
140
|
-
// If the PR is definitively closed (not merged), skip it
|
|
141
|
-
if (match.state === PrStatus.Closed)
|
|
142
|
-
return undefined;
|
|
143
|
-
// Open or Merged — attach PR data
|
|
144
|
-
return {
|
|
145
|
-
url: match.url,
|
|
146
|
-
number: match.number,
|
|
147
|
-
status: match.state,
|
|
148
|
-
mergeable: match.mergeable,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
// gh CLI not installed, auth failure, etc. — gracefully skip PR detection
|
|
153
|
-
return undefined;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Find or create a Repository entity for the given path.
|
|
158
|
-
* Mirrors the pattern from CreateFeatureUseCase.
|
|
159
|
-
*/
|
|
160
|
-
async resolveRepository(repositoryPath) {
|
|
161
|
-
const normalizedPath = repositoryPath.replace(/\\/g, '/').replace(/\/+$/, '') || repositoryPath;
|
|
162
|
-
let repository = await this.repositoryRepo.findByPath(normalizedPath);
|
|
163
|
-
if (!repository) {
|
|
164
|
-
const now = new Date();
|
|
165
|
-
const repoName = normalizedPath.split('/').pop() ?? normalizedPath;
|
|
166
|
-
repository = await this.repositoryRepo.create({
|
|
167
|
-
id: randomUUID(),
|
|
168
|
-
name: repoName,
|
|
169
|
-
path: normalizedPath,
|
|
170
|
-
createdAt: now,
|
|
171
|
-
updatedAt: now,
|
|
172
|
-
});
|
|
173
|
-
if (!repository) {
|
|
174
|
-
throw new Error(`Failed to create or retrieve repository record for path: ${normalizedPath}`);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return repository;
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
AdoptBranchUseCase = __decorate([
|
|
181
|
-
injectable(),
|
|
182
|
-
__param(0, inject('IFeatureRepository')),
|
|
183
|
-
__param(1, inject('IRepositoryRepository')),
|
|
184
|
-
__param(2, inject('IWorktreeService')),
|
|
185
|
-
__param(3, inject('IGitPrService')),
|
|
186
|
-
__metadata("design:paramtypes", [Object, Object, Object, Object])
|
|
187
|
-
], AdoptBranchUseCase);
|
|
188
|
-
export { AdoptBranchUseCase };
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure utility functions for deriving feature metadata from git branch names.
|
|
3
|
-
*
|
|
4
|
-
* Used by the AdoptBranchUseCase to generate a human-readable feature name
|
|
5
|
-
* and a URL-safe slug from any git branch name.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Derive a human-readable feature name from a git branch name.
|
|
9
|
-
*
|
|
10
|
-
* Strips known prefixes (feat/, fix/, etc.), replaces hyphens and underscores
|
|
11
|
-
* with spaces, and title-cases each word.
|
|
12
|
-
*
|
|
13
|
-
* @example deriveName('fix/login-bug') → "Login Bug"
|
|
14
|
-
* @example deriveName('feat/user-auth') → "User Auth"
|
|
15
|
-
* @example deriveName('my-cool-feature') → "My Cool Feature"
|
|
16
|
-
* @example deriveName('feat/auth/login-bug') → "Auth Login Bug"
|
|
17
|
-
* @example deriveName('release/v1.0.0') → "V1.0.0"
|
|
18
|
-
*/
|
|
19
|
-
export declare function deriveName(branch: string): string;
|
|
20
|
-
/**
|
|
21
|
-
* Derive a URL-safe slug from a git branch name.
|
|
22
|
-
*
|
|
23
|
-
* Lowercases the full branch name, converts slashes and special characters
|
|
24
|
-
* to hyphens, collapses consecutive hyphens, and trims leading/trailing hyphens.
|
|
25
|
-
*
|
|
26
|
-
* @example deriveSlug('fix/login-bug') → "fix-login-bug"
|
|
27
|
-
* @example deriveSlug('feat/user-auth') → "feat-user-auth"
|
|
28
|
-
* @example deriveSlug('my-cool-feature') → "my-cool-feature"
|
|
29
|
-
* @example deriveSlug('release/v1.0.0') → "release-v1-0-0"
|
|
30
|
-
* @example deriveSlug('feat/auth/login-bug') → "feat-auth-login-bug"
|
|
31
|
-
*/
|
|
32
|
-
export declare function deriveSlug(branch: string): string;
|
|
33
|
-
//# sourceMappingURL=branch-name-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"branch-name-utils.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/branch-name-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAwBjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMjD"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure utility functions for deriving feature metadata from git branch names.
|
|
3
|
-
*
|
|
4
|
-
* Used by the AdoptBranchUseCase to generate a human-readable feature name
|
|
5
|
-
* and a URL-safe slug from any git branch name.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Common branch name prefixes that are stripped when deriving a feature name.
|
|
9
|
-
* These are conventional prefixes from gitflow, conventional commits, etc.
|
|
10
|
-
*/
|
|
11
|
-
const KNOWN_PREFIXES = [
|
|
12
|
-
'feat/',
|
|
13
|
-
'fix/',
|
|
14
|
-
'chore/',
|
|
15
|
-
'refactor/',
|
|
16
|
-
'docs/',
|
|
17
|
-
'test/',
|
|
18
|
-
'ci/',
|
|
19
|
-
'build/',
|
|
20
|
-
'perf/',
|
|
21
|
-
'style/',
|
|
22
|
-
'revert/',
|
|
23
|
-
'hotfix/',
|
|
24
|
-
'release/',
|
|
25
|
-
];
|
|
26
|
-
/**
|
|
27
|
-
* Derive a human-readable feature name from a git branch name.
|
|
28
|
-
*
|
|
29
|
-
* Strips known prefixes (feat/, fix/, etc.), replaces hyphens and underscores
|
|
30
|
-
* with spaces, and title-cases each word.
|
|
31
|
-
*
|
|
32
|
-
* @example deriveName('fix/login-bug') → "Login Bug"
|
|
33
|
-
* @example deriveName('feat/user-auth') → "User Auth"
|
|
34
|
-
* @example deriveName('my-cool-feature') → "My Cool Feature"
|
|
35
|
-
* @example deriveName('feat/auth/login-bug') → "Auth Login Bug"
|
|
36
|
-
* @example deriveName('release/v1.0.0') → "V1.0.0"
|
|
37
|
-
*/
|
|
38
|
-
export function deriveName(branch) {
|
|
39
|
-
let remaining = branch;
|
|
40
|
-
// Strip known prefix (only the first matching one)
|
|
41
|
-
for (const prefix of KNOWN_PREFIXES) {
|
|
42
|
-
if (remaining.startsWith(prefix)) {
|
|
43
|
-
remaining = remaining.slice(prefix.length);
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
// Replace slashes, hyphens, and underscores with spaces
|
|
48
|
-
const words = remaining
|
|
49
|
-
.replace(/[/_-]+/g, ' ')
|
|
50
|
-
.trim()
|
|
51
|
-
.split(/\s+/)
|
|
52
|
-
.filter((w) => w.length > 0);
|
|
53
|
-
if (words.length === 0) {
|
|
54
|
-
return branch;
|
|
55
|
-
}
|
|
56
|
-
// Title-case each word
|
|
57
|
-
return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Derive a URL-safe slug from a git branch name.
|
|
61
|
-
*
|
|
62
|
-
* Lowercases the full branch name, converts slashes and special characters
|
|
63
|
-
* to hyphens, collapses consecutive hyphens, and trims leading/trailing hyphens.
|
|
64
|
-
*
|
|
65
|
-
* @example deriveSlug('fix/login-bug') → "fix-login-bug"
|
|
66
|
-
* @example deriveSlug('feat/user-auth') → "feat-user-auth"
|
|
67
|
-
* @example deriveSlug('my-cool-feature') → "my-cool-feature"
|
|
68
|
-
* @example deriveSlug('release/v1.0.0') → "release-v1-0-0"
|
|
69
|
-
* @example deriveSlug('feat/auth/login-bug') → "feat-auth-login-bug"
|
|
70
|
-
*/
|
|
71
|
-
export function deriveSlug(branch) {
|
|
72
|
-
return branch
|
|
73
|
-
.toLowerCase()
|
|
74
|
-
.replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric chars (except hyphens) with hyphens
|
|
75
|
-
.replace(/-+/g, '-') // Collapse consecutive hyphens
|
|
76
|
-
.replace(/^-+|-+$/g, ''); // Trim leading/trailing hyphens
|
|
77
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature Adopt Command
|
|
3
|
-
*
|
|
4
|
-
* Adopts an existing git branch into Shep's feature tracking system.
|
|
5
|
-
* Creates a worktree (if needed), derives metadata from the branch name,
|
|
6
|
-
* and persists a Feature with lifecycle=Maintain (agent inactive).
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* shep feat adopt <branch>
|
|
10
|
-
* shep feat adopt <branch> -r /path/to/repo
|
|
11
|
-
*/
|
|
12
|
-
import { Command } from 'commander';
|
|
13
|
-
export declare function createAdoptCommand(): Command;
|
|
14
|
-
//# sourceMappingURL=adopt.command.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/adopt.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,kBAAkB,IAAI,OAAO,CAkC5C"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature Adopt Command
|
|
3
|
-
*
|
|
4
|
-
* Adopts an existing git branch into Shep's feature tracking system.
|
|
5
|
-
* Creates a worktree (if needed), derives metadata from the branch name,
|
|
6
|
-
* and persists a Feature with lifecycle=Maintain (agent inactive).
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* shep feat adopt <branch>
|
|
10
|
-
* shep feat adopt <branch> -r /path/to/repo
|
|
11
|
-
*/
|
|
12
|
-
import { Command } from 'commander';
|
|
13
|
-
import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
|
|
14
|
-
import { AdoptBranchUseCase } from '../../../../../packages/core/src/application/use-cases/features/adopt-branch.use-case.js';
|
|
15
|
-
import { colors, messages, spinner } from '../../ui/index.js';
|
|
16
|
-
export function createAdoptCommand() {
|
|
17
|
-
return new Command('adopt')
|
|
18
|
-
.description('Adopt an existing branch as a tracked feature')
|
|
19
|
-
.argument('<branch>', 'Branch name to adopt')
|
|
20
|
-
.option('-r, --repo <path>', 'Repository path (defaults to cwd)')
|
|
21
|
-
.action(async (branch, options) => {
|
|
22
|
-
try {
|
|
23
|
-
const useCase = container.resolve(AdoptBranchUseCase);
|
|
24
|
-
const { feature } = await spinner('Adopting branch', () => useCase.execute({
|
|
25
|
-
branchName: branch,
|
|
26
|
-
repositoryPath: options.repo ?? process.cwd(),
|
|
27
|
-
}));
|
|
28
|
-
messages.newline();
|
|
29
|
-
messages.success('Branch adopted');
|
|
30
|
-
console.log(` ${colors.muted('ID:')} ${colors.accent(feature.id.slice(0, 8))}`);
|
|
31
|
-
console.log(` ${colors.muted('Name:')} ${feature.name}`);
|
|
32
|
-
console.log(` ${colors.muted('Branch:')} ${colors.accent(feature.branch)}`);
|
|
33
|
-
console.log(` ${colors.muted('Status:')} ${feature.lifecycle}`);
|
|
34
|
-
if (feature.pr) {
|
|
35
|
-
console.log(` ${colors.muted('PR:')} ${colors.accent(feature.pr.url)} (${feature.pr.status})`);
|
|
36
|
-
}
|
|
37
|
-
console.log(` ${colors.muted('Worktree:')} ${colors.accent(feature.worktreePath ?? '')}`);
|
|
38
|
-
messages.newline();
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
42
|
-
messages.error('Failed to adopt branch', err);
|
|
43
|
-
process.exitCode = 1;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Skip static pre-rendering since we need runtime DI container. */
|
|
2
|
-
export declare const dynamic = "force-dynamic";
|
|
3
|
-
interface AdoptDrawerPageProps {
|
|
4
|
-
searchParams: Promise<{
|
|
5
|
-
repo?: string;
|
|
6
|
-
}>;
|
|
7
|
-
}
|
|
8
|
-
export default function AdoptDrawerPage({ searchParams }: AdoptDrawerPageProps): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=page.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/(dashboard)/@drawer/adopt/page.tsx"],"names":[],"mappings":"AAIA,oEAAoE;AACpE,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,UAAU,oBAAoB;IAC5B,YAAY,EAAE,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1C;AAED,wBAA8B,eAAe,CAAC,EAAE,YAAY,EAAE,EAAE,oBAAoB,oDAkBnF"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { resolve } from '../../../../lib/server-container.js';
|
|
3
|
-
import { AdoptDrawerClient } from '../../../../components/common/control-center-drawer/adopt-drawer-client.js';
|
|
4
|
-
/** Skip static pre-rendering since we need runtime DI container. */
|
|
5
|
-
export const dynamic = 'force-dynamic';
|
|
6
|
-
export default async function AdoptDrawerPage({ searchParams }) {
|
|
7
|
-
const { repo } = await searchParams;
|
|
8
|
-
let repositoryPath = repo ?? '';
|
|
9
|
-
if (!repositoryPath) {
|
|
10
|
-
try {
|
|
11
|
-
const listRepos = resolve('ListRepositoriesUseCase');
|
|
12
|
-
const repositories = await listRepos.execute();
|
|
13
|
-
if (repositories.length > 0) {
|
|
14
|
-
repositoryPath = repositories[0].path;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
// Fall through with empty path — server action will validate
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return _jsx(AdoptDrawerClient, { repositoryPath: repositoryPath });
|
|
22
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
-
interface AdoptBranchInput {
|
|
3
|
-
branchName: string;
|
|
4
|
-
repositoryPath: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function adoptBranch(input: AdoptBranchInput): Promise<{
|
|
7
|
-
feature?: Feature;
|
|
8
|
-
error?: string;
|
|
9
|
-
}>;
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=adopt-branch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adopt-branch.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/adopt-branch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBhD"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
import { resolve } from '../../lib/server-container.js';
|
|
3
|
-
export async function adoptBranch(input) {
|
|
4
|
-
const { branchName, repositoryPath } = input;
|
|
5
|
-
if (!branchName?.trim()) {
|
|
6
|
-
return { error: 'Branch name is required' };
|
|
7
|
-
}
|
|
8
|
-
if (!repositoryPath?.trim()) {
|
|
9
|
-
return { error: 'Repository path is required' };
|
|
10
|
-
}
|
|
11
|
-
try {
|
|
12
|
-
const useCase = resolve('AdoptBranchUseCase');
|
|
13
|
-
const result = await useCase.execute({ branchName, repositoryPath });
|
|
14
|
-
return { feature: result.feature };
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
const message = error instanceof Error ? error.message : 'Failed to adopt branch';
|
|
18
|
-
return { error: message };
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server action that returns all branch names (local + remote) for a repository.
|
|
3
|
-
* Used by the adopt branch drawer to populate the branch combobox.
|
|
4
|
-
*/
|
|
5
|
-
export declare function listBranches(repositoryPath: string): Promise<string[]>;
|
|
6
|
-
//# sourceMappingURL=list-branches.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-branches.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/list-branches.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAsB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW5E"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
import { resolve } from '../../lib/server-container.js';
|
|
3
|
-
/**
|
|
4
|
-
* Server action that returns all branch names (local + remote) for a repository.
|
|
5
|
-
* Used by the adopt branch drawer to populate the branch combobox.
|
|
6
|
-
*/
|
|
7
|
-
export async function listBranches(repositoryPath) {
|
|
8
|
-
if (!repositoryPath?.trim()) {
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
try {
|
|
12
|
-
const worktreeService = resolve('IWorktreeService');
|
|
13
|
-
return await worktreeService.listBranches(repositoryPath);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
}
|
package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface AdoptBranchDrawerProps {
|
|
2
|
-
open: boolean;
|
|
3
|
-
onClose: () => void;
|
|
4
|
-
onSubmit: (branchName: string) => void;
|
|
5
|
-
isSubmitting?: boolean;
|
|
6
|
-
error?: string;
|
|
7
|
-
/** Available branch names for the combobox dropdown */
|
|
8
|
-
branches?: string[];
|
|
9
|
-
/** Whether branches are still loading */
|
|
10
|
-
branchesLoading?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare function AdoptBranchDrawer({ open, onClose, onSubmit, isSubmitting, error, branches, branchesLoading, }: AdoptBranchDrawerProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
//# sourceMappingURL=adopt-branch-drawer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adopt-branch-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,YAAoB,EACpB,KAAK,EACL,QAAa,EACb,eAAuB,GACxB,EAAE,sBAAsB,2CAgNxB"}
|
package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
4
|
-
import { Check, ChevronsUpDown, GitBranch, Loader2 } from 'lucide-react';
|
|
5
|
-
import { BaseDrawer } from '../../common/base-drawer/index.js';
|
|
6
|
-
import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
|
|
7
|
-
import { Button } from '../../ui/button.js';
|
|
8
|
-
import { Label } from '../../ui/label.js';
|
|
9
|
-
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from '../../ui/command.js';
|
|
10
|
-
import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover.js';
|
|
11
|
-
import { cn } from '../../../lib/utils.js';
|
|
12
|
-
export function AdoptBranchDrawer({ open, onClose, onSubmit, isSubmitting = false, error, branches = [], branchesLoading = false, }) {
|
|
13
|
-
const [branchName, setBranchName] = useState('');
|
|
14
|
-
const [comboboxOpen, setComboboxOpen] = useState(false);
|
|
15
|
-
const [inputValue, setInputValue] = useState('');
|
|
16
|
-
const inputRef = useRef(null);
|
|
17
|
-
// Reset state when drawer closes
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
if (!open) {
|
|
20
|
-
setBranchName('');
|
|
21
|
-
setInputValue('');
|
|
22
|
-
setComboboxOpen(false);
|
|
23
|
-
}
|
|
24
|
-
}, [open]);
|
|
25
|
-
const handleSubmit = useCallback((e) => {
|
|
26
|
-
e.preventDefault();
|
|
27
|
-
const trimmed = branchName.trim();
|
|
28
|
-
if (!trimmed || isSubmitting)
|
|
29
|
-
return;
|
|
30
|
-
onSubmit(trimmed);
|
|
31
|
-
}, [branchName, isSubmitting, onSubmit]);
|
|
32
|
-
const handleClose = useCallback(() => {
|
|
33
|
-
setBranchName('');
|
|
34
|
-
setInputValue('');
|
|
35
|
-
onClose();
|
|
36
|
-
}, [onClose]);
|
|
37
|
-
const handleSelect = useCallback((branch) => {
|
|
38
|
-
setBranchName(branch);
|
|
39
|
-
setInputValue(branch);
|
|
40
|
-
setComboboxOpen(false);
|
|
41
|
-
}, []);
|
|
42
|
-
const handleInputChange = useCallback((e) => {
|
|
43
|
-
setInputValue(e.target.value);
|
|
44
|
-
if (!comboboxOpen)
|
|
45
|
-
setComboboxOpen(true);
|
|
46
|
-
}, [comboboxOpen]);
|
|
47
|
-
const handleInputKeyDown = useCallback((e) => {
|
|
48
|
-
if (e.key === 'Enter') {
|
|
49
|
-
e.preventDefault();
|
|
50
|
-
const trimmed = inputValue.trim();
|
|
51
|
-
if (trimmed) {
|
|
52
|
-
setBranchName(trimmed);
|
|
53
|
-
setComboboxOpen(false);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (e.key === 'Escape') {
|
|
57
|
-
setComboboxOpen(false);
|
|
58
|
-
setInputValue(branchName);
|
|
59
|
-
}
|
|
60
|
-
}, [inputValue, branchName]);
|
|
61
|
-
const filteredBranches = branches.filter((b) => b.toLowerCase().includes(inputValue.toLowerCase()));
|
|
62
|
-
const isDisabled = !branchName.trim() || isSubmitting;
|
|
63
|
-
const header = (_jsxs("div", { children: [_jsxs(DrawerTitle, { className: "flex items-center gap-2", children: [_jsx(GitBranch, { className: "h-4 w-4" }), "Adopt Branch"] }), _jsx(DrawerDescription, { className: "text-muted-foreground text-sm", children: "Import an existing git branch into Shep's feature tracking" })] }));
|
|
64
|
-
return (_jsx(BaseDrawer, { open: open, onClose: handleClose, size: "sm", modal: false, header: header, "data-testid": "adopt-branch-drawer", children: _jsxs("form", { onSubmit: handleSubmit, className: "flex flex-1 flex-col", children: [_jsx("div", { className: "flex-1 overflow-y-auto p-4", children: _jsxs("div", { className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { htmlFor: "branch-name", children: "Branch name" }), _jsxs(Popover, { open: comboboxOpen, onOpenChange: setComboboxOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", role: "combobox", "aria-expanded": comboboxOpen, disabled: isSubmitting, className: "w-full justify-between font-normal", "data-testid": "adopt-branch-input", children: [_jsx("span", { className: "truncate", children: branchesLoading ? 'Loading branches...' : branchName || 'Select a branch...' }), _jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-[var(--radix-popover-trigger-width)] p-0", align: "start", children: _jsxs(Command, { children: [_jsx(CommandInput, { ref: inputRef, placeholder: "Search branches...", value: inputValue, onChange: handleInputChange, onKeyDown: handleInputKeyDown, "data-testid": "adopt-branch-search" }), _jsxs(CommandList, { children: [!branchesLoading && filteredBranches.length === 0 && (_jsx(CommandEmpty, { children: branches.length === 0
|
|
65
|
-
? 'No branches found.'
|
|
66
|
-
: inputValue
|
|
67
|
-
? 'No match — press Enter to use this value.'
|
|
68
|
-
: 'No branches available.' })), branchesLoading ? (_jsx(CommandEmpty, { children: _jsx(Loader2, { className: "mx-auto h-4 w-4 animate-spin" }) })) : null, filteredBranches.length > 0 && (_jsx(CommandGroup, { children: filteredBranches.map((branch) => (_jsxs(CommandItem, { selected: branch === branchName, onClick: () => handleSelect(branch), children: [_jsx(Check, { className: cn('mr-2 h-4 w-4', branch === branchName ? 'opacity-100' : 'opacity-0') }), _jsx(GitBranch, { className: "mr-2 h-3 w-3 opacity-50" }), branch] }, branch))) }))] })] }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Select a branch from the dropdown or type to search. Local and remote branches are shown." })] }), error ? (_jsx("p", { className: "text-destructive text-sm", "data-testid": "adopt-branch-error", children: error })) : null] }) }), _jsx("div", { className: "border-t p-4", children: _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "button", variant: "outline", onClick: handleClose, disabled: isSubmitting, className: "flex-1", children: "Cancel" }), _jsx(Button, { type: "submit", disabled: isDisabled, className: "flex-1", "data-testid": "adopt-branch-submit", children: isSubmitting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Adopting..."] })) : ('Adopt Branch') })] }) })] }) }));
|
|
69
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { AdoptBranchDrawer } from './adopt-branch-drawer.js';
|
|
3
|
-
/**
|
|
4
|
-
* **AdoptBranchDrawer** is a right-side sliding drawer for importing an
|
|
5
|
-
* existing git branch into Shep's feature tracking system.
|
|
6
|
-
*
|
|
7
|
-
* ### Form
|
|
8
|
-
* - **Branch name** (required) — combobox with search for selecting a branch
|
|
9
|
-
* - **Adopt Branch** button — disabled when no branch is selected or submitting
|
|
10
|
-
* - **Cancel** button — closes the drawer
|
|
11
|
-
*
|
|
12
|
-
* ### States
|
|
13
|
-
* - Default: no branch selected, submit disabled
|
|
14
|
-
* - Loading branches: combobox shows loading spinner
|
|
15
|
-
* - Loading submit: button shows spinner
|
|
16
|
-
* - Error: error message shown below combobox
|
|
17
|
-
*/
|
|
18
|
-
declare const meta: Meta<typeof AdoptBranchDrawer>;
|
|
19
|
-
export default meta;
|
|
20
|
-
type Story = StoryObj<typeof AdoptBranchDrawer>;
|
|
21
|
-
/** Default — click the trigger button to open the adopt branch drawer with branch combobox. */
|
|
22
|
-
export declare const Default: Story;
|
|
23
|
-
/** Pre-opened drawer with branch combobox for quick visual inspection. */
|
|
24
|
-
export declare const PreOpened: Story;
|
|
25
|
-
/** Branches loading state — combobox shows "Loading branches..." */
|
|
26
|
-
export declare const BranchesLoading: Story;
|
|
27
|
-
/** Loading state — submit in progress, button shows spinner. */
|
|
28
|
-
export declare const Loading: Story;
|
|
29
|
-
/** Error state — error message visible below combobox. */
|
|
30
|
-
export declare const WithError: Story;
|
|
31
|
-
/** No branches available — empty state in the combobox dropdown. */
|
|
32
|
-
export declare const NoBranches: Story;
|
|
33
|
-
/** Adopt branch drawer rendered inside a full-page context — starts open. */
|
|
34
|
-
export declare const InDrawer: Story;
|
|
35
|
-
//# sourceMappingURL=adopt-branch-drawer.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adopt-branch-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAO1D;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAgBxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAqEhD,+FAA+F;AAC/F,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,eAAe,EAAE,KAM7B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,SAAS,EAAE,KAWvB,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAkCF,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
|