@shepai/cli 1.164.1 → 1.165.0-pr513.2621e83
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/Feature.yaml +17 -5
- package/apis/json-schema/FeatureMode.yaml +8 -0
- package/apis/json-schema/SdlcLifecycle.yaml +1 -0
- package/apis/json-schema/WorkflowConfig.yaml +10 -5
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -2
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +4 -3
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +3 -2
- package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +18 -7
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +3 -2
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +13 -0
- package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts +40 -0
- package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.js +125 -0
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +5 -3
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +2 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +22 -4
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +7 -0
- package/dist/packages/core/src/domain/lifecycle-gates.d.ts +21 -6
- package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
- package/dist/packages/core/src/domain/lifecycle-gates.js +25 -6
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +5 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +10 -4
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +7 -2
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts +19 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.js +46 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts +17 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.js +37 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.js +17 -0
- 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 +5 -3
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts +362 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.js +72 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +20 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +68 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +19 -8
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.js +52 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts +24 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.js +38 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts +31 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.js +240 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.js +134 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +4 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +17 -0
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +7 -4
- package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts +12 -0
- package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/feedback.command.js +64 -0
- package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/index.js +5 -1
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +18 -5
- package/dist/src/presentation/cli/commands/feat/promote.command.d.ts +13 -0
- package/dist/src/presentation/cli/commands/feat/promote.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/feat/promote.command.js +41 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +3 -2
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +3 -3
- package/dist/src/presentation/web/app/actions/discard-exploration.d.ts +9 -0
- package/dist/src/presentation/web/app/actions/discard-exploration.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/discard-exploration.js +29 -0
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +2 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +2 -1
- package/dist/src/presentation/web/app/actions/promote-exploration.d.ts +11 -0
- package/dist/src/presentation/web/app/actions/promote-exploration.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/promote-exploration.js +21 -0
- package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts +12 -0
- package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/submit-exploration-feedback.js +40 -0
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +4 -2
- package/dist/src/presentation/web/app/build-graph-nodes.js +4 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +3 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +65 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +3 -2
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +15 -11
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +2 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts +8 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.js +33 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.js +33 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +6 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +16 -4
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts +11 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.js +34 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.js +70 -0
- 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 +2 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +6 -2
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
- 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 +7 -2
- package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts +3 -1
- package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repo-group/repo-group.js +6 -3
- package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.js +10 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -6
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +3 -3
- 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 +4 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +3 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -0
- package/dist/src/presentation/web/components/ui/toggle-group.d.ts +10 -0
- package/dist/src/presentation/web/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/toggle-group.js +22 -0
- package/dist/src/presentation/web/components/ui/toggle.d.ts +10 -0
- package/dist/src/presentation/web/components/ui/toggle.d.ts.map +1 -0
- package/dist/src/presentation/web/components/ui/toggle.js +26 -0
- package/dist/translations/ar/cli.json +24 -0
- package/dist/translations/ar/web.json +6 -2
- package/dist/translations/de/cli.json +24 -0
- package/dist/translations/de/web.json +6 -2
- package/dist/translations/en/cli.json +24 -0
- package/dist/translations/en/web.json +6 -2
- package/dist/translations/es/cli.json +24 -0
- package/dist/translations/es/web.json +6 -2
- package/dist/translations/fr/cli.json +24 -0
- package/dist/translations/fr/web.json +6 -2
- package/dist/translations/he/cli.json +24 -0
- package/dist/translations/he/web.json +6 -2
- package/dist/translations/pt/cli.json +24 -0
- package/dist/translations/pt/web.json +6 -2
- package/dist/translations/ru/cli.json +24 -0
- package/dist/translations/ru/web.json +6 -2
- 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 +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- 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 +27 -27
- 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 +30 -30
- 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 +119 -74
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
- 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 +119 -74
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
- 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 +28 -28
- 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 +28 -28
- 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 +27 -27
- 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 +30 -30
- 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 +119 -74
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
- 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 +119 -74
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
- 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 +27 -27
- 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 +28 -28
- 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 +28 -28
- 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/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 +11 -11
- 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/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/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +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 +3 -3
- 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]__1abe77bb._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.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]__2d0c3840._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.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]__c1262d08._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
- 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/_0727935d._.js +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.js +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_423abf07._.js → _11cefd16._.js} +2 -2
- package/web/.next/server/chunks/ssr/_11cefd16._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_12c98a3d._.js +3 -0
- package/web/.next/server/chunks/ssr/_12c98a3d._.js.map +1 -0
- 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/_18886033._.js +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1e08a336._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_43ba79e7._.js +3 -0
- package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_5119a3df._.js +1 -1
- package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_5eb460b1._.js +3 -0
- package/web/.next/server/chunks/ssr/_5eb460b1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_3694ac1d._.js → _75f0b0fe._.js} +2 -2
- package/web/.next/server/chunks/ssr/_75f0b0fe._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_997b560b._.js +3 -0
- package/web/.next/server/chunks/ssr/_997b560b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_acc5e43e._.js +9 -0
- package/web/.next/server/chunks/ssr/_acc5e43e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_97d6bed3._.js → _f4086cb6._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_97d6bed3._.js.map → _f4086cb6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js.map +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_app_actions_approve-feature_ts_9453ce8b._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- 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_db9fa0c2._.js +1 -1
- 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 +303 -195
- package/web/.next/static/chunks/{d5366257d6b9f855.js → 2a9af061f4fbe7f5.js} +1 -1
- package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
- package/web/.next/static/chunks/3425e7d1b8c44fcf.js +5 -0
- package/web/.next/static/chunks/387b61bf5fe98489.js +1 -0
- package/web/.next/static/chunks/3ffd3d331ce9991e.js +1 -0
- package/web/.next/static/chunks/{2bf4ef44d86ffc3b.js → 408f0fae9aebd4ce.js} +3 -3
- package/web/.next/static/chunks/7b2ba627f78d1730.js +1 -0
- package/web/.next/static/chunks/84ecdec18d323210.css +1 -0
- package/web/.next/static/chunks/{779b5c49587b074e.js → 884fceb3e6a67215.js} +1 -1
- package/web/.next/static/chunks/{abffc5c232738d87.js → 8a0b6b5e00501f7d.js} +1 -1
- package/web/.next/static/chunks/8b0a9cb5109fe899.js +1 -0
- package/web/.next/static/chunks/{6590ee22b55e119c.js → 9aa8486d10ba7131.js} +1 -1
- package/web/.next/static/chunks/a32e0107a4ad74d3.js +1 -0
- package/web/.next/static/chunks/{ba1873d442ce6a95.js → b1335961d331f89d.js} +1 -1
- package/web/.next/static/chunks/{dbd876611e25a77a.js → c1d5987a3df2faa3.js} +2 -2
- package/web/.next/static/chunks/ec8409b3fd25f477.js +1 -0
- package/web/.next/static/chunks/{2afb3ff30c02d222.js → edb42f3dc7a611e5.js} +1 -1
- package/web/.next/static/chunks/f10474885c41b290.js +7 -0
- package/web/.next/static/chunks/fbbd01277183d8f5.js +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3694ac1d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_423abf07._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4d49a312._.js +0 -3
- package/web/.next/server/chunks/ssr/_4d49a312._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9215e9ec._.js +0 -3
- package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c45aee16._.js +0 -3
- package/web/.next/server/chunks/ssr/_c45aee16._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cc654b75._.js +0 -9
- package/web/.next/server/chunks/ssr/_cc654b75._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
- package/web/.next/static/chunks/28ae5046faef6cec.js +0 -1
- package/web/.next/static/chunks/57ab723edeb11139.js +0 -5
- package/web/.next/static/chunks/648c64fc71830213.js +0 -1
- package/web/.next/static/chunks/87aab386fe53c79a.js +0 -1
- package/web/.next/static/chunks/89846d73600950d1.js +0 -1
- package/web/.next/static/chunks/966eb2688300b7f5.js +0 -1
- package/web/.next/static/chunks/9ddf7523e76e17a5.js +0 -7
- package/web/.next/static/chunks/9f8caef46056054a.js +0 -1
- package/web/.next/static/chunks/d45bab7ae6805b07.js +0 -1
- package/web/.next/static/chunks/eeadf13c0ea6cbe0.css +0 -1
- /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_buildManifest.js +0 -0
- /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[90381,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(69845),e=a.i(50488),f=a.i(63698),g=a.i(3195),h=a.i(28002),i=a.i(50490),j=a.i(5698),k=a.i(98410),l=a.i(72016),m=a.i(88064),n=a.i(56957),o=a.i(12882),p=a.i(53170),q=a.i(92548),r=a.i(91498),s=a.i(84494),t=a.i(25700);let u=(0,t.default)("tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);var v=a.i(33511),w=a.i(65298),x=a.i(38019);let y=(0,t.default)("file-check-corner",[["path",{d:"M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6",key:"g5mvt7"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m14 20 2 2 4-4",key:"15kota"}]]);var z=a.i(85536);a.i(78454);var A=a.i(24255);a.i(49235);var B=a.i(85080),C=a.i(82934),D=a.i(41305),E=a.i(55628),F=a.i(18662),G=a.i(21333),H=a.i(61544),I=a.i(25674);let J=(0,I.createServerReference)("60e744dcf3793120d7132a446fc0b87fac177dce67",I.callServer,void 0,I.findSourceMapURL,"getGitRepoInfo"),K="text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-8 items-center justify-center rounded-[3px] disabled:opacity-40",L="bg-border/60 mx-1.5 h-5 w-px shrink-0";function M({data:a,initialTab:p}){let q=(0,G.useFeatureFlags)(),r=(0,d.useRouter)(),s=(0,d.usePathname)().startsWith("/repository/"),[t,u]=(0,c.useState)(p??"overview"),[v,w]=(0,c.useState)(!1),x=(0,E.useRepositoryActions)(a.repositoryPath?{repositoryId:a.id,repositoryPath:a.repositoryPath}:null),y=(0,c.useCallback)(()=>{r.push("/")},[r]),I=(0,F.useDeployAction)(a.repositoryPath?{targetId:a.repositoryPath,targetType:"repository",repositoryPath:a.repositoryPath}:null),J="Booting"===I.status||"Ready"===I.status,M=(0,c.useCallback)(()=>{a.repositoryPath&&(navigator.clipboard.writeText(a.repositoryPath),w(!0),setTimeout(()=>w(!1),2e3))},[a.repositoryPath]),N=a.id?`repo-${a.id}`:`repo-${a.name}`;return(0,b.jsx)(A.BaseDrawer,{open:s,onClose:y,size:"lg",modal:!1,"data-testid":"repository-drawer",children:(0,b.jsxs)(D.Tabs,{value:t,onValueChange:u,className:"flex min-h-0 flex-1 flex-col",children:[(0,b.jsxs)(D.TabsList,{className:"bg-muted/50 h-auto w-full shrink-0 justify-start gap-0 rounded-none border-b p-0",children:[(0,b.jsxs)(D.TabsTrigger,{value:"overview",className:"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none",children:[(0,b.jsx)(n.LayoutDashboard,{className:"mr-1.5 size-4"}),"Overview"]}),(0,b.jsxs)(D.TabsTrigger,{value:"chat",className:"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none",children:[(0,b.jsx)(o.MessageSquare,{className:"mr-1.5 size-4"}),"Chat"]})]}),(0,b.jsxs)("div",{className:"bg-muted/40 shrink-0 border-b",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 pe-10 pt-2.5 pb-2","data-testid":"repository-drawer-header",children:[(0,b.jsx)("h2",{className:"text-foreground min-w-0 truncate text-base font-semibold tracking-tight",children:a.name}),a.repositoryPath?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-muted-foreground/40 text-xs",children:"/"}),(0,b.jsx)("span",{className:"text-muted-foreground min-w-0 truncate font-mono text-[11px]",children:a.repositoryPath})]}):null]}),a.repositoryPath?(0,b.jsx)("div",{"data-testid":"repository-drawer-toolbar",children:(0,b.jsxs)("div",{className:"flex h-9 items-center px-1.5",children:[(0,b.jsxs)(C.TooltipProvider,{delayDuration:300,children:[(0,b.jsxs)("div",{className:"flex items-center",children:[(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.openInIde,disabled:x.ideLoading,"aria-label":"Open in IDE",children:x.ideLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(e.Code2,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Open in IDE"})]}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.openInShell,disabled:x.shellLoading,"aria-label":"Open terminal",children:x.shellLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(f.Terminal,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Open terminal"})]}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.openFolder,disabled:x.folderLoading,"aria-label":"Open folder",children:x.folderLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(g.FolderOpen,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Open folder"})]}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:M,"aria-label":"Copy path",children:v?(0,b.jsx)(l.Check,{className:"size-3.5 text-green-500"}):(0,b.jsx)(k.Copy,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:v?"Copied!":"Copy path"})]})]}),a.id&&q.gitRebaseSync?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:L}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.syncMain,disabled:x.syncLoading,"aria-label":"Sync main",children:x.syncLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(h.RefreshCw,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Sync main"})]})]}):null,q.envDeploy?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:L}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",disabled:I.deployLoading||I.stopLoading,onClick:J?I.stop:I.deploy,className:(0,z.cn)("inline-flex size-7 items-center justify-center rounded-[3px] disabled:opacity-40",J?"text-red-500 hover:bg-red-500/10 hover:text-red-400":"text-green-500 hover:bg-green-500/10 hover:text-green-400"),"aria-label":J?"Stop dev server":"Start dev server",children:I.deployLoading||I.stopLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):J?(0,b.jsx)(j.Square,{className:"size-4"}):(0,b.jsx)(i.Play,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:J?"Stop dev server":"Start dev server"})]}),J?(0,b.jsx)(B.DeploymentStatusBadge,{status:I.status,url:I.url,targetId:a.repositoryPath}):null]}):null]}),(0,b.jsx)("div",{className:"flex-1"})]})}):null]}),(0,b.jsx)(D.TabsContent,{value:"overview",className:"mt-0 flex-1 overflow-y-auto",children:(0,b.jsx)(Q,{data:a,syncError:x.syncError})}),(0,b.jsx)(D.TabsContent,{value:"chat",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,b.jsx)(H.ChatTab,{featureId:N,worktreePath:a.repositoryPath})})]})})}function N({icon:a,title:c,children:d}){return(0,b.jsxs)("div",{className:"px-3 pt-4 pb-1",children:[(0,b.jsxs)("div",{className:"text-foreground mb-2 flex items-center gap-1.5 text-sm font-semibold tracking-wider uppercase",children:[(0,b.jsx)(a,{className:"size-4 opacity-50"}),c]}),d]})}function O({children:a,className:c}){return(0,b.jsx)("div",{className:(0,z.cn)("bg-muted/60 rounded-md border border-transparent p-3",c),children:a})}function P({label:a,children:c}){return(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)("span",{className:"text-foreground/40 text-[11px] font-medium tracking-wider uppercase",children:a}),(0,b.jsx)("span",{className:"text-sm leading-snug",children:c})]})}function Q({data:a,syncError:d}){let[e,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(!1);if((0,c.useEffect)(()=>{if(!a.repositoryPath)return;let b=!1;return h(!0),J(a.repositoryPath,8).then(a=>{b||f(a)}).catch(()=>{}).finally(()=>{b||h(!1)}),()=>{b=!0}},[a.repositoryPath]),!a.repositoryPath)return null;let i=e?.workingTree,j=i&&(i.staged>0||i.modified>0||i.untracked>0),k=e?.diffStats;return(0,b.jsxs)("div",{className:"pb-4",children:[g?(0,b.jsxs)("div",{className:"text-foreground/40 flex items-center gap-2 px-4 py-8 text-sm",children:[(0,b.jsx)(m.Loader2,{className:"size-4 animate-spin"})," Loading repository info..."]}):null,e?(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-2 px-3 pt-3",children:[(0,b.jsx)(O,{children:(0,b.jsxs)(P,{label:"Branch",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(p.GitBranch,{className:"text-foreground/30 size-3.5 shrink-0"}),(0,b.jsx)("code",{className:"font-mono text-sm",children:e.currentBranch??a.branch??"—"})]}),null!=a.behindCount&&a.behindCount>0?(0,b.jsxs)("span",{className:"mt-0.5 block text-xs text-orange-600 dark:text-orange-400",children:[a.behindCount," behind default"]}):null]})}),(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Working Tree",children:j?(0,b.jsxs)("div",{className:"flex flex-wrap gap-x-3 gap-y-0.5",children:[i.staged>0?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 text-sm text-green-600 dark:text-green-400",children:[(0,b.jsx)(y,{className:"size-3.5"})," ",i.staged," staged"]}):null,i.modified>0?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 text-sm text-amber-600 dark:text-amber-400",children:[(0,b.jsx)(w.FileEdit,{className:"size-3.5"})," ",i.modified," modified"]}):null,i.untracked>0?(0,b.jsxs)("span",{className:"text-foreground/50 inline-flex items-center gap-1 text-sm",children:[(0,b.jsx)(x.FilePlus,{className:"size-3.5"})," ",i.untracked," untracked"]}):null]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm text-green-600 dark:text-green-400",children:[(0,b.jsx)(l.Check,{className:"size-3.5"})," Clean"]})})}),k?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Uncommitted Changes",children:(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm",children:[(0,b.jsxs)("span",{children:[k.filesChanged," file",1!==k.filesChanged?"s":""]}),(0,b.jsxs)("span",{className:"text-green-600 dark:text-green-400",children:["+",k.insertions]}),(0,b.jsxs)("span",{className:"text-red-500 dark:text-red-400",children:["-",k.deletions]})]})})}):null,e.remotes.length>0?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Remote",children:e.remotes.map(a=>(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm",children:[(0,b.jsx)(s.Globe,{className:"text-foreground/30 size-3.5 shrink-0"}),(0,b.jsx)("span",{className:"truncate",children:a.url.replace(/\.git$/,"").replace(/^https?:\/\/([^@]+@)?/,"").replace(/x-access-token:[^@]+@/,"")})]},a.name))})}):null,e.stashCount>0?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Stashes",children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm",children:[(0,b.jsx)(v.Archive,{className:"text-foreground/30 size-3.5 shrink-0"}),e.stashCount," stash",1!==e.stashCount?"es":""]})})}):null,e.tags.length>0?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Tags",children:(0,b.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.tags.map(a=>(0,b.jsxs)("span",{className:"bg-foreground/[0.04] inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-xs",children:[(0,b.jsx)(u,{className:"text-foreground/30 size-2.5"}),a]},a))})})}):null]}):null,e&&e.commits.length>0?(0,b.jsx)(N,{icon:q.GitCommitHorizontal,title:"Recent Commits",children:(0,b.jsxs)("div",{className:"relative ml-3",children:[(0,b.jsx)("div",{className:"bg-border absolute top-2 bottom-2 left-[5px] w-px"}),e.commits.map((a,c)=>(0,b.jsxs)("div",{className:"group relative flex gap-3 py-1.5",children:[(0,b.jsx)("div",{className:(0,z.cn)("relative z-10 mt-1.5 size-[11px] shrink-0 rounded-full border-2",0===c?"border-primary bg-primary":"border-border bg-background group-hover:border-foreground/30")}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("p",{className:"min-w-0 truncate text-sm leading-snug",children:a.subject}),(0,b.jsx)("code",{className:"text-foreground/30 shrink-0 font-mono text-[11px]",children:a.shortHash})]}),(0,b.jsxs)("div",{className:"text-foreground/40 mt-0.5 flex items-center gap-2 text-xs",children:[(0,b.jsx)("span",{children:a.author}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("span",{children:a.relativeDate}),a.branch?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"·"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-0.5",children:[(0,b.jsx)(p.GitBranch,{className:"size-3"}),a.branch]})]}):null]})]})]},a.hash))]})}):null,e&&e.branches.length>1?(0,b.jsx)(N,{icon:p.GitBranch,title:"Branches",children:(0,b.jsx)("div",{className:"flex flex-col",children:[...e.branches].sort((a,b)=>{let c,d,e,f;return a.isCurrent&&!b.isCurrent?-1:!a.isCurrent&&b.isCurrent?1:(c=a.name,/^(main|master)$/.test(c)&&(d=b.name,!/^(main|master)$/.test(d)))?-1:+(e=a.name,!!(!/^(main|master)$/.test(e)&&(f=b.name,/^(main|master)$/.test(f))))}).map(a=>(0,b.jsxs)("div",{className:(0,z.cn)("flex items-center justify-between rounded px-2 py-1.5",a.isCurrent&&"bg-muted/60"),children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm",children:[a.isCurrent?(0,b.jsx)("span",{className:"size-2 shrink-0 rounded-full bg-green-500"}):/^(main|master)$/.test(a.name)?(0,b.jsx)("span",{className:"size-2 shrink-0 rounded-full bg-blue-500"}):(0,b.jsx)("span",{className:"bg-foreground/10 size-2 shrink-0 rounded-full"}),(0,b.jsx)("code",{className:"font-mono text-[13px]",children:a.name}),a.isCurrent?(0,b.jsx)("span",{className:"text-foreground/40 text-[10px]",children:"current"}):null]}),(0,b.jsx)("span",{className:"text-foreground/40 text-xs",children:a.lastCommitDate})]},a.name))})}):null,d?(0,b.jsx)(N,{icon:r.AlertTriangle,title:"Issues",children:(0,b.jsx)(O,{className:"bg-destructive/5 border-transparent",children:(0,b.jsx)("p",{className:"text-destructive text-sm",children:d})})}):null]})}a.s(["RepositoryDrawerClient",()=>M],90381)}];
|
|
1
|
+
module.exports=[90381,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(69845),e=a.i(50488),f=a.i(63698),g=a.i(3195),h=a.i(28002),i=a.i(50490),j=a.i(5698),k=a.i(98410),l=a.i(72016),m=a.i(88064),n=a.i(56957),o=a.i(12882),p=a.i(53170),q=a.i(92548),r=a.i(91498),s=a.i(84494),t=a.i(25700);let u=(0,t.default)("tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);var v=a.i(33511),w=a.i(65298),x=a.i(38019);let y=(0,t.default)("file-check-corner",[["path",{d:"M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6",key:"g5mvt7"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m14 20 2 2 4-4",key:"15kota"}]]);var z=a.i(85536);a.i(78454);var A=a.i(24255);a.i(49235);var B=a.i(85080),C=a.i(82934),D=a.i(41305),E=a.i(55628),F=a.i(18662),G=a.i(21333),H=a.i(61544),I=a.i(25674);let J=(0,I.createServerReference)("6017434fea4c735d6ca4f9e061f8512fcfb1f8ff27",I.callServer,void 0,I.findSourceMapURL,"getGitRepoInfo"),K="text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-8 items-center justify-center rounded-[3px] disabled:opacity-40",L="bg-border/60 mx-1.5 h-5 w-px shrink-0";function M({data:a,initialTab:p}){let q=(0,G.useFeatureFlags)(),r=(0,d.useRouter)(),s=(0,d.usePathname)().startsWith("/repository/"),[t,u]=(0,c.useState)(p??"overview"),[v,w]=(0,c.useState)(!1),x=(0,E.useRepositoryActions)(a.repositoryPath?{repositoryId:a.id,repositoryPath:a.repositoryPath}:null),y=(0,c.useCallback)(()=>{r.push("/")},[r]),I=(0,F.useDeployAction)(a.repositoryPath?{targetId:a.repositoryPath,targetType:"repository",repositoryPath:a.repositoryPath}:null),J="Booting"===I.status||"Ready"===I.status,M=(0,c.useCallback)(()=>{a.repositoryPath&&(navigator.clipboard.writeText(a.repositoryPath),w(!0),setTimeout(()=>w(!1),2e3))},[a.repositoryPath]),N=a.id?`repo-${a.id}`:`repo-${a.name}`;return(0,b.jsx)(A.BaseDrawer,{open:s,onClose:y,size:"lg",modal:!1,"data-testid":"repository-drawer",children:(0,b.jsxs)(D.Tabs,{value:t,onValueChange:u,className:"flex min-h-0 flex-1 flex-col",children:[(0,b.jsxs)(D.TabsList,{className:"bg-muted/50 h-auto w-full shrink-0 justify-start gap-0 rounded-none border-b p-0",children:[(0,b.jsxs)(D.TabsTrigger,{value:"overview",className:"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none",children:[(0,b.jsx)(n.LayoutDashboard,{className:"mr-1.5 size-4"}),"Overview"]}),(0,b.jsxs)(D.TabsTrigger,{value:"chat",className:"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none",children:[(0,b.jsx)(o.MessageSquare,{className:"mr-1.5 size-4"}),"Chat"]})]}),(0,b.jsxs)("div",{className:"bg-muted/40 shrink-0 border-b",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 pe-10 pt-2.5 pb-2","data-testid":"repository-drawer-header",children:[(0,b.jsx)("h2",{className:"text-foreground min-w-0 truncate text-base font-semibold tracking-tight",children:a.name}),a.repositoryPath?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-muted-foreground/40 text-xs",children:"/"}),(0,b.jsx)("span",{className:"text-muted-foreground min-w-0 truncate font-mono text-[11px]",children:a.repositoryPath})]}):null]}),a.repositoryPath?(0,b.jsx)("div",{"data-testid":"repository-drawer-toolbar",children:(0,b.jsxs)("div",{className:"flex h-9 items-center px-1.5",children:[(0,b.jsxs)(C.TooltipProvider,{delayDuration:300,children:[(0,b.jsxs)("div",{className:"flex items-center",children:[(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.openInIde,disabled:x.ideLoading,"aria-label":"Open in IDE",children:x.ideLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(e.Code2,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Open in IDE"})]}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.openInShell,disabled:x.shellLoading,"aria-label":"Open terminal",children:x.shellLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(f.Terminal,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Open terminal"})]}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.openFolder,disabled:x.folderLoading,"aria-label":"Open folder",children:x.folderLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(g.FolderOpen,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Open folder"})]}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:M,"aria-label":"Copy path",children:v?(0,b.jsx)(l.Check,{className:"size-3.5 text-green-500"}):(0,b.jsx)(k.Copy,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:v?"Copied!":"Copy path"})]})]}),a.id&&q.gitRebaseSync?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:L}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",className:K,onClick:x.syncMain,disabled:x.syncLoading,"aria-label":"Sync main",children:x.syncLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):(0,b.jsx)(h.RefreshCw,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:"Sync main"})]})]}):null,q.envDeploy?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:L}),(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",disabled:I.deployLoading||I.stopLoading,onClick:J?I.stop:I.deploy,className:(0,z.cn)("inline-flex size-7 items-center justify-center rounded-[3px] disabled:opacity-40",J?"text-red-500 hover:bg-red-500/10 hover:text-red-400":"text-green-500 hover:bg-green-500/10 hover:text-green-400"),"aria-label":J?"Stop dev server":"Start dev server",children:I.deployLoading||I.stopLoading?(0,b.jsx)(m.Loader2,{className:"size-3.5 animate-spin"}):J?(0,b.jsx)(j.Square,{className:"size-4"}):(0,b.jsx)(i.Play,{className:"size-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"bottom",className:"text-xs",children:J?"Stop dev server":"Start dev server"})]}),J?(0,b.jsx)(B.DeploymentStatusBadge,{status:I.status,url:I.url,targetId:a.repositoryPath}):null]}):null]}),(0,b.jsx)("div",{className:"flex-1"})]})}):null]}),(0,b.jsx)(D.TabsContent,{value:"overview",className:"mt-0 flex-1 overflow-y-auto",children:(0,b.jsx)(Q,{data:a,syncError:x.syncError})}),(0,b.jsx)(D.TabsContent,{value:"chat",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,b.jsx)(H.ChatTab,{featureId:N,worktreePath:a.repositoryPath})})]})})}function N({icon:a,title:c,children:d}){return(0,b.jsxs)("div",{className:"px-3 pt-4 pb-1",children:[(0,b.jsxs)("div",{className:"text-foreground mb-2 flex items-center gap-1.5 text-sm font-semibold tracking-wider uppercase",children:[(0,b.jsx)(a,{className:"size-4 opacity-50"}),c]}),d]})}function O({children:a,className:c}){return(0,b.jsx)("div",{className:(0,z.cn)("bg-muted/60 rounded-md border border-transparent p-3",c),children:a})}function P({label:a,children:c}){return(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)("span",{className:"text-foreground/40 text-[11px] font-medium tracking-wider uppercase",children:a}),(0,b.jsx)("span",{className:"text-sm leading-snug",children:c})]})}function Q({data:a,syncError:d}){let[e,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(!1);if((0,c.useEffect)(()=>{if(!a.repositoryPath)return;let b=!1;return h(!0),J(a.repositoryPath,8).then(a=>{b||f(a)}).catch(()=>{}).finally(()=>{b||h(!1)}),()=>{b=!0}},[a.repositoryPath]),!a.repositoryPath)return null;let i=e?.workingTree,j=i&&(i.staged>0||i.modified>0||i.untracked>0),k=e?.diffStats;return(0,b.jsxs)("div",{className:"pb-4",children:[g?(0,b.jsxs)("div",{className:"text-foreground/40 flex items-center gap-2 px-4 py-8 text-sm",children:[(0,b.jsx)(m.Loader2,{className:"size-4 animate-spin"})," Loading repository info..."]}):null,e?(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-2 px-3 pt-3",children:[(0,b.jsx)(O,{children:(0,b.jsxs)(P,{label:"Branch",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(p.GitBranch,{className:"text-foreground/30 size-3.5 shrink-0"}),(0,b.jsx)("code",{className:"font-mono text-sm",children:e.currentBranch??a.branch??"—"})]}),null!=a.behindCount&&a.behindCount>0?(0,b.jsxs)("span",{className:"mt-0.5 block text-xs text-orange-600 dark:text-orange-400",children:[a.behindCount," behind default"]}):null]})}),(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Working Tree",children:j?(0,b.jsxs)("div",{className:"flex flex-wrap gap-x-3 gap-y-0.5",children:[i.staged>0?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 text-sm text-green-600 dark:text-green-400",children:[(0,b.jsx)(y,{className:"size-3.5"})," ",i.staged," staged"]}):null,i.modified>0?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 text-sm text-amber-600 dark:text-amber-400",children:[(0,b.jsx)(w.FileEdit,{className:"size-3.5"})," ",i.modified," modified"]}):null,i.untracked>0?(0,b.jsxs)("span",{className:"text-foreground/50 inline-flex items-center gap-1 text-sm",children:[(0,b.jsx)(x.FilePlus,{className:"size-3.5"})," ",i.untracked," untracked"]}):null]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm text-green-600 dark:text-green-400",children:[(0,b.jsx)(l.Check,{className:"size-3.5"})," Clean"]})})}),k?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Uncommitted Changes",children:(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm",children:[(0,b.jsxs)("span",{children:[k.filesChanged," file",1!==k.filesChanged?"s":""]}),(0,b.jsxs)("span",{className:"text-green-600 dark:text-green-400",children:["+",k.insertions]}),(0,b.jsxs)("span",{className:"text-red-500 dark:text-red-400",children:["-",k.deletions]})]})})}):null,e.remotes.length>0?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Remote",children:e.remotes.map(a=>(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm",children:[(0,b.jsx)(s.Globe,{className:"text-foreground/30 size-3.5 shrink-0"}),(0,b.jsx)("span",{className:"truncate",children:a.url.replace(/\.git$/,"").replace(/^https?:\/\/([^@]+@)?/,"").replace(/x-access-token:[^@]+@/,"")})]},a.name))})}):null,e.stashCount>0?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Stashes",children:(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm",children:[(0,b.jsx)(v.Archive,{className:"text-foreground/30 size-3.5 shrink-0"}),e.stashCount," stash",1!==e.stashCount?"es":""]})})}):null,e.tags.length>0?(0,b.jsx)(O,{children:(0,b.jsx)(P,{label:"Tags",children:(0,b.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.tags.map(a=>(0,b.jsxs)("span",{className:"bg-foreground/[0.04] inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-xs",children:[(0,b.jsx)(u,{className:"text-foreground/30 size-2.5"}),a]},a))})})}):null]}):null,e&&e.commits.length>0?(0,b.jsx)(N,{icon:q.GitCommitHorizontal,title:"Recent Commits",children:(0,b.jsxs)("div",{className:"relative ml-3",children:[(0,b.jsx)("div",{className:"bg-border absolute top-2 bottom-2 left-[5px] w-px"}),e.commits.map((a,c)=>(0,b.jsxs)("div",{className:"group relative flex gap-3 py-1.5",children:[(0,b.jsx)("div",{className:(0,z.cn)("relative z-10 mt-1.5 size-[11px] shrink-0 rounded-full border-2",0===c?"border-primary bg-primary":"border-border bg-background group-hover:border-foreground/30")}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("p",{className:"min-w-0 truncate text-sm leading-snug",children:a.subject}),(0,b.jsx)("code",{className:"text-foreground/30 shrink-0 font-mono text-[11px]",children:a.shortHash})]}),(0,b.jsxs)("div",{className:"text-foreground/40 mt-0.5 flex items-center gap-2 text-xs",children:[(0,b.jsx)("span",{children:a.author}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("span",{children:a.relativeDate}),a.branch?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"·"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-0.5",children:[(0,b.jsx)(p.GitBranch,{className:"size-3"}),a.branch]})]}):null]})]})]},a.hash))]})}):null,e&&e.branches.length>1?(0,b.jsx)(N,{icon:p.GitBranch,title:"Branches",children:(0,b.jsx)("div",{className:"flex flex-col",children:[...e.branches].sort((a,b)=>{let c,d,e,f;return a.isCurrent&&!b.isCurrent?-1:!a.isCurrent&&b.isCurrent?1:(c=a.name,/^(main|master)$/.test(c)&&(d=b.name,!/^(main|master)$/.test(d)))?-1:+(e=a.name,!!(!/^(main|master)$/.test(e)&&(f=b.name,/^(main|master)$/.test(f))))}).map(a=>(0,b.jsxs)("div",{className:(0,z.cn)("flex items-center justify-between rounded px-2 py-1.5",a.isCurrent&&"bg-muted/60"),children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-sm",children:[a.isCurrent?(0,b.jsx)("span",{className:"size-2 shrink-0 rounded-full bg-green-500"}):/^(main|master)$/.test(a.name)?(0,b.jsx)("span",{className:"size-2 shrink-0 rounded-full bg-blue-500"}):(0,b.jsx)("span",{className:"bg-foreground/10 size-2 shrink-0 rounded-full"}),(0,b.jsx)("code",{className:"font-mono text-[13px]",children:a.name}),a.isCurrent?(0,b.jsx)("span",{className:"text-foreground/40 text-[10px]",children:"current"}):null]}),(0,b.jsx)("span",{className:"text-foreground/40 text-xs",children:a.lastCommitDate})]},a.name))})}):null,d?(0,b.jsx)(N,{icon:r.AlertTriangle,title:"Issues",children:(0,b.jsx)(O,{className:"bg-destructive/5 border-transparent",children:(0,b.jsx)("p",{className:"text-destructive text-sm",children:d})})}):null]})}a.s(["RepositoryDrawerClient",()=>M],90381)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/data%3Af1de56%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/tag.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-check-corner.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"60e744dcf3793120d7132a446fc0b87fac177dce67\":\"getGitRepoInfo\"},\"src/presentation/web/app/actions/get-git-log.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60e744dcf3793120d7132a446fc0b87fac177dce67\",callServer,void 0,findSourceMapURL,\"getGitRepoInfo\");export{$$RSC_SERVER_ACTION_0 as getGitRepoInfo};","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport {\n Code2,\n Terminal,\n FolderOpen,\n RefreshCw,\n Play,\n Square,\n Copy,\n Check,\n Loader2,\n LayoutDashboard,\n MessageSquare,\n GitBranch,\n GitCommitHorizontal,\n AlertTriangle,\n Globe,\n Tag,\n Archive,\n FileEdit,\n FilePlus,\n FileCheck2,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DeploymentStatusBadge } from '@/components/common/deployment-status-badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';\nimport { useRepositoryActions } from '@/components/common/repository-node/use-repository-actions';\nimport { useDeployAction } from '@/hooks/use-deploy-action';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport { ChatTab } from '@/components/features/chat/ChatTab';\nimport { getGitRepoInfo } from '@/app/actions/get-git-log';\nimport type { GitRepoInfo } from '@/app/actions/get-git-log';\n\nconst COPY_FEEDBACK_DELAY = 2000;\n\nconst tbBtn =\n 'text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-8 items-center justify-center rounded-[3px] disabled:opacity-40';\nconst tbSep = 'bg-border/60 mx-1.5 h-5 w-px shrink-0';\n\nexport interface RepositoryDrawerClientProps {\n data: RepositoryNodeData;\n /** Initial tab key from URL (e.g. 'chat'). */\n initialTab?: 'overview' | 'chat';\n}\n\nexport function RepositoryDrawerClient({ data, initialTab }: RepositoryDrawerClientProps) {\n const featureFlags = useFeatureFlags();\n const router = useRouter();\n const pathname = usePathname();\n const isOpen = pathname.startsWith('/repository/');\n const [activeTab, setActiveTab] = useState<string>(initialTab ?? 'overview');\n const [pathCopied, setPathCopied] = useState(false);\n const repoActions = useRepositoryActions(\n data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null\n );\n\n const onClose = useCallback(() => {\n router.push('/');\n }, [router]);\n\n const deployAction = useDeployAction(\n data.repositoryPath\n ? {\n targetId: data.repositoryPath,\n targetType: 'repository' as const,\n repositoryPath: data.repositoryPath,\n }\n : null\n );\n const isDeployActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';\n\n const handleCopyPath = useCallback(() => {\n if (!data.repositoryPath) return;\n void navigator.clipboard.writeText(data.repositoryPath);\n setPathCopied(true);\n setTimeout(() => setPathCopied(false), COPY_FEEDBACK_DELAY);\n }, [data.repositoryPath]);\n\n // Session ID for repo chat — deterministic per repo\n const repoSessionId = data.id ? `repo-${data.id}` : `repo-${data.name}`;\n\n return (\n <BaseDrawer\n open={isOpen}\n onClose={onClose}\n size=\"lg\"\n modal={false}\n data-testid=\"repository-drawer\"\n >\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"flex min-h-0 flex-1 flex-col\">\n {/* VS Code-style tab bar */}\n <TabsList className=\"bg-muted/50 h-auto w-full shrink-0 justify-start gap-0 rounded-none border-b p-0\">\n <TabsTrigger\n value=\"overview\"\n className=\"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none\"\n >\n <LayoutDashboard className=\"mr-1.5 size-4\" />\n Overview\n </TabsTrigger>\n <TabsTrigger\n value=\"chat\"\n className=\"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none\"\n >\n <MessageSquare className=\"mr-1.5 size-4\" />\n Chat\n </TabsTrigger>\n </TabsList>\n\n {/* Persistent header — contrasting background */}\n <div className=\"bg-muted/40 shrink-0 border-b\">\n {/* Repo title + path breadcrumb */}\n <div\n className=\"flex items-center gap-2 px-4 pe-10 pt-2.5 pb-2\"\n data-testid=\"repository-drawer-header\"\n >\n <h2 className=\"text-foreground min-w-0 truncate text-base font-semibold tracking-tight\">\n {data.name}\n </h2>\n {data.repositoryPath ? (\n <>\n <span className=\"text-muted-foreground/40 text-xs\">/</span>\n <span className=\"text-muted-foreground min-w-0 truncate font-mono text-[11px]\">\n {data.repositoryPath}\n </span>\n </>\n ) : null}\n </div>\n\n {/* IDE toolbar */}\n {data.repositoryPath ? (\n <div data-testid=\"repository-drawer-toolbar\">\n <div className=\"flex h-9 items-center px-1.5\">\n {/* Left: Open actions */}\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.openInIde}\n disabled={repoActions.ideLoading}\n aria-label=\"Open in IDE\"\n >\n {repoActions.ideLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <Code2 className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Open in IDE\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.openInShell}\n disabled={repoActions.shellLoading}\n aria-label=\"Open terminal\"\n >\n {repoActions.shellLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <Terminal className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Open terminal\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.openFolder}\n disabled={repoActions.folderLoading}\n aria-label=\"Open folder\"\n >\n {repoActions.folderLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <FolderOpen className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Open folder\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={handleCopyPath}\n aria-label=\"Copy path\"\n >\n {pathCopied ? (\n <Check className=\"size-3.5 text-green-500\" />\n ) : (\n <Copy className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {pathCopied ? 'Copied!' : 'Copy path'}\n </TooltipContent>\n </Tooltip>\n </div>\n\n {/* Git sync */}\n {data.id && featureFlags.gitRebaseSync ? (\n <>\n <div className={tbSep} />\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.syncMain}\n disabled={repoActions.syncLoading}\n aria-label=\"Sync main\"\n >\n {repoActions.syncLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <RefreshCw className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Sync main\n </TooltipContent>\n </Tooltip>\n </>\n ) : null}\n\n {/* Deploy */}\n {featureFlags.envDeploy ? (\n <>\n <div className={tbSep} />\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n disabled={deployAction.deployLoading || deployAction.stopLoading}\n onClick={isDeployActive ? deployAction.stop : deployAction.deploy}\n className={cn(\n 'inline-flex size-7 items-center justify-center rounded-[3px] disabled:opacity-40',\n isDeployActive\n ? 'text-red-500 hover:bg-red-500/10 hover:text-red-400'\n : 'text-green-500 hover:bg-green-500/10 hover:text-green-400'\n )}\n aria-label={isDeployActive ? 'Stop dev server' : 'Start dev server'}\n >\n {deployAction.deployLoading || deployAction.stopLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : isDeployActive ? (\n <Square className=\"size-4\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {isDeployActive ? 'Stop dev server' : 'Start dev server'}\n </TooltipContent>\n </Tooltip>\n {isDeployActive ? (\n <DeploymentStatusBadge\n status={deployAction.status}\n url={deployAction.url}\n targetId={data.repositoryPath}\n />\n ) : null}\n </>\n ) : null}\n </TooltipProvider>\n\n <div className=\"flex-1\" />\n </div>\n </div>\n ) : null}\n </div>\n\n {/* Overview tab */}\n <TabsContent value=\"overview\" className=\"mt-0 flex-1 overflow-y-auto\">\n <RepoOverview data={data} syncError={repoActions.syncError} />\n </TabsContent>\n\n {/* Chat tab */}\n <TabsContent value=\"chat\" className=\"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden\">\n <ChatTab featureId={repoSessionId} worktreePath={data.repositoryPath} />\n </TabsContent>\n </Tabs>\n </BaseDrawer>\n );\n}\n\n// ── Repo Overview ───────────────────────────────────────────────────\n\nfunction Section({\n icon: Icon,\n title,\n children,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"px-3 pt-4 pb-1\">\n <div className=\"text-foreground mb-2 flex items-center gap-1.5 text-sm font-semibold tracking-wider uppercase\">\n <Icon className=\"size-4 opacity-50\" />\n {title}\n </div>\n {children}\n </div>\n );\n}\n\nfunction Card({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <div className={cn('bg-muted/60 rounded-md border border-transparent p-3', className)}>\n {children}\n </div>\n );\n}\n\nfunction KV({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-foreground/40 text-[11px] font-medium tracking-wider uppercase\">\n {label}\n </span>\n <span className=\"text-sm leading-snug\">{children}</span>\n </div>\n );\n}\n\nfunction RepoOverview({\n data,\n syncError,\n}: {\n data: RepositoryNodeData;\n syncError?: string | null;\n}) {\n const [repoInfo, setRepoInfo] = useState<GitRepoInfo | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!data.repositoryPath) return;\n let cancelled = false;\n setLoading(true);\n getGitRepoInfo(data.repositoryPath, 8)\n .then((result) => {\n if (!cancelled) setRepoInfo(result);\n })\n .catch(() => {\n // Silently handle — repo info is non-critical\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [data.repositoryPath]);\n\n if (!data.repositoryPath) return null;\n\n const wt = repoInfo?.workingTree;\n const isDirty = wt && (wt.staged > 0 || wt.modified > 0 || wt.untracked > 0);\n const ds = repoInfo?.diffStats;\n\n return (\n <div className=\"pb-4\">\n {loading ? (\n <div className=\"text-foreground/40 flex items-center gap-2 px-4 py-8 text-sm\">\n <Loader2 className=\"size-4 animate-spin\" /> Loading repository info...\n </div>\n ) : null}\n\n {/* Quick stats grid */}\n {repoInfo ? (\n <div className=\"grid grid-cols-2 gap-2 px-3 pt-3\">\n {/* Current branch */}\n <Card>\n <KV label=\"Branch\">\n <span className=\"inline-flex items-center gap-1.5\">\n <GitBranch className=\"text-foreground/30 size-3.5 shrink-0\" />\n <code className=\"font-mono text-sm\">\n {repoInfo.currentBranch ?? data.branch ?? '—'}\n </code>\n </span>\n {data.behindCount != null && data.behindCount > 0 ? (\n <span className=\"mt-0.5 block text-xs text-orange-600 dark:text-orange-400\">\n {data.behindCount} behind default\n </span>\n ) : null}\n </KV>\n </Card>\n\n {/* Working tree */}\n <Card>\n <KV label=\"Working Tree\">\n {isDirty ? (\n <div className=\"flex flex-wrap gap-x-3 gap-y-0.5\">\n {wt.staged > 0 ? (\n <span className=\"inline-flex items-center gap-1 text-sm text-green-600 dark:text-green-400\">\n <FileCheck2 className=\"size-3.5\" /> {wt.staged} staged\n </span>\n ) : null}\n {wt.modified > 0 ? (\n <span className=\"inline-flex items-center gap-1 text-sm text-amber-600 dark:text-amber-400\">\n <FileEdit className=\"size-3.5\" /> {wt.modified} modified\n </span>\n ) : null}\n {wt.untracked > 0 ? (\n <span className=\"text-foreground/50 inline-flex items-center gap-1 text-sm\">\n <FilePlus className=\"size-3.5\" /> {wt.untracked} untracked\n </span>\n ) : null}\n </div>\n ) : (\n <span className=\"inline-flex items-center gap-1.5 text-sm text-green-600 dark:text-green-400\">\n <Check className=\"size-3.5\" /> Clean\n </span>\n )}\n </KV>\n </Card>\n\n {/* Diff stats */}\n {ds ? (\n <Card>\n <KV label=\"Uncommitted Changes\">\n <div className=\"flex items-center gap-3 text-sm\">\n <span>\n {ds.filesChanged} file{ds.filesChanged !== 1 ? 's' : ''}\n </span>\n <span className=\"text-green-600 dark:text-green-400\">+{ds.insertions}</span>\n <span className=\"text-red-500 dark:text-red-400\">-{ds.deletions}</span>\n </div>\n </KV>\n </Card>\n ) : null}\n\n {/* Remotes */}\n {repoInfo.remotes.length > 0 ? (\n <Card>\n <KV label=\"Remote\">\n {repoInfo.remotes.map((r) => (\n <span key={r.name} className=\"inline-flex items-center gap-1.5 text-sm\">\n <Globe className=\"text-foreground/30 size-3.5 shrink-0\" />\n <span className=\"truncate\">\n {r.url\n .replace(/\\.git$/, '')\n .replace(/^https?:\\/\\/([^@]+@)?/, '')\n .replace(/x-access-token:[^@]+@/, '')}\n </span>\n </span>\n ))}\n </KV>\n </Card>\n ) : null}\n\n {/* Stashes */}\n {repoInfo.stashCount > 0 ? (\n <Card>\n <KV label=\"Stashes\">\n <span className=\"inline-flex items-center gap-1.5 text-sm\">\n <Archive className=\"text-foreground/30 size-3.5 shrink-0\" />\n {repoInfo.stashCount} stash{repoInfo.stashCount !== 1 ? 'es' : ''}\n </span>\n </KV>\n </Card>\n ) : null}\n\n {/* Tags */}\n {repoInfo.tags.length > 0 ? (\n <Card>\n <KV label=\"Tags\">\n <div className=\"flex flex-wrap gap-1.5\">\n {repoInfo.tags.map((t) => (\n <span\n key={t}\n className=\"bg-foreground/[0.04] inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-xs\"\n >\n <Tag className=\"text-foreground/30 size-2.5\" />\n {t}\n </span>\n ))}\n </div>\n </KV>\n </Card>\n ) : null}\n </div>\n ) : null}\n\n {/* Commit history */}\n {repoInfo && repoInfo.commits.length > 0 ? (\n <Section icon={GitCommitHorizontal} title=\"Recent Commits\">\n <div className=\"relative ml-3\">\n <div className=\"bg-border absolute top-2 bottom-2 left-[5px] w-px\" />\n {repoInfo.commits.map((c, i) => (\n <div key={c.hash} className=\"group relative flex gap-3 py-1.5\">\n <div\n className={cn(\n 'relative z-10 mt-1.5 size-[11px] shrink-0 rounded-full border-2',\n i === 0\n ? 'border-primary bg-primary'\n : 'border-border bg-background group-hover:border-foreground/30'\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-2\">\n <p className=\"min-w-0 truncate text-sm leading-snug\">{c.subject}</p>\n <code className=\"text-foreground/30 shrink-0 font-mono text-[11px]\">\n {c.shortHash}\n </code>\n </div>\n <div className=\"text-foreground/40 mt-0.5 flex items-center gap-2 text-xs\">\n <span>{c.author}</span>\n <span>·</span>\n <span>{c.relativeDate}</span>\n {c.branch ? (\n <>\n <span>·</span>\n <span className=\"inline-flex items-center gap-0.5\">\n <GitBranch className=\"size-3\" />\n {c.branch}\n </span>\n </>\n ) : null}\n </div>\n </div>\n </div>\n ))}\n </div>\n </Section>\n ) : null}\n\n {/* Branches — below commits, main/master first */}\n {repoInfo && repoInfo.branches.length > 1 ? (\n <Section icon={GitBranch} title=\"Branches\">\n <div className=\"flex flex-col\">\n {[...repoInfo.branches]\n .sort((a, b) => {\n const isDefault = (n: string) => /^(main|master)$/.test(n);\n if (a.isCurrent && !b.isCurrent) return -1;\n if (!a.isCurrent && b.isCurrent) return 1;\n if (isDefault(a.name) && !isDefault(b.name)) return -1;\n if (!isDefault(a.name) && isDefault(b.name)) return 1;\n return 0;\n })\n .map((b) => (\n <div\n key={b.name}\n className={cn(\n 'flex items-center justify-between rounded px-2 py-1.5',\n b.isCurrent && 'bg-muted/60'\n )}\n >\n <span className=\"inline-flex items-center gap-1.5 text-sm\">\n {b.isCurrent ? (\n <span className=\"size-2 shrink-0 rounded-full bg-green-500\" />\n ) : /^(main|master)$/.test(b.name) ? (\n <span className=\"size-2 shrink-0 rounded-full bg-blue-500\" />\n ) : (\n <span className=\"bg-foreground/10 size-2 shrink-0 rounded-full\" />\n )}\n <code className=\"font-mono text-[13px]\">{b.name}</code>\n {b.isCurrent ? (\n <span className=\"text-foreground/40 text-[10px]\">current</span>\n ) : null}\n </span>\n <span className=\"text-foreground/40 text-xs\">{b.lastCommitDate}</span>\n </div>\n ))}\n </div>\n </Section>\n ) : null}\n\n {/* Errors */}\n {syncError ? (\n <Section icon={AlertTriangle} title=\"Issues\">\n <Card className=\"bg-destructive/5 border-transparent\">\n <p className=\"text-destructive text-sm\">{syncError}</p>\n </Card>\n </Section>\n ) : null}\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z',\n key: 'vktsd0',\n },\n ],\n ['circle', { cx: '7.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'kqv944' }],\n];\n\n/**\n * @component @name Tag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/tag\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Tag = createLucideIcon('tag', __iconNode);\n\nexport default Tag;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6',\n key: 'g5mvt7',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'm14 20 2 2 4-4', key: '15kota' }],\n];\n\n/**\n * @component @name FileCheckCorner\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-check-corner\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCheckCorner = createLucideIcon('file-check-corner', __iconNode);\n\nexport default FileCheckCorner;\n"],"names":[],"mappings":"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","ignoreList":[2,3]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/data%3A0800bf%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/tag.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-check-corner.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"6017434fea4c735d6ca4f9e061f8512fcfb1f8ff27\":\"getGitRepoInfo\"},\"src/presentation/web/app/actions/get-git-log.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"6017434fea4c735d6ca4f9e061f8512fcfb1f8ff27\",callServer,void 0,findSourceMapURL,\"getGitRepoInfo\");export{$$RSC_SERVER_ACTION_0 as getGitRepoInfo};","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport {\n Code2,\n Terminal,\n FolderOpen,\n RefreshCw,\n Play,\n Square,\n Copy,\n Check,\n Loader2,\n LayoutDashboard,\n MessageSquare,\n GitBranch,\n GitCommitHorizontal,\n AlertTriangle,\n Globe,\n Tag,\n Archive,\n FileEdit,\n FilePlus,\n FileCheck2,\n} from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DeploymentStatusBadge } from '@/components/common/deployment-status-badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';\nimport { useRepositoryActions } from '@/components/common/repository-node/use-repository-actions';\nimport { useDeployAction } from '@/hooks/use-deploy-action';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport { ChatTab } from '@/components/features/chat/ChatTab';\nimport { getGitRepoInfo } from '@/app/actions/get-git-log';\nimport type { GitRepoInfo } from '@/app/actions/get-git-log';\n\nconst COPY_FEEDBACK_DELAY = 2000;\n\nconst tbBtn =\n 'text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-8 items-center justify-center rounded-[3px] disabled:opacity-40';\nconst tbSep = 'bg-border/60 mx-1.5 h-5 w-px shrink-0';\n\nexport interface RepositoryDrawerClientProps {\n data: RepositoryNodeData;\n /** Initial tab key from URL (e.g. 'chat'). */\n initialTab?: 'overview' | 'chat';\n}\n\nexport function RepositoryDrawerClient({ data, initialTab }: RepositoryDrawerClientProps) {\n const featureFlags = useFeatureFlags();\n const router = useRouter();\n const pathname = usePathname();\n const isOpen = pathname.startsWith('/repository/');\n const [activeTab, setActiveTab] = useState<string>(initialTab ?? 'overview');\n const [pathCopied, setPathCopied] = useState(false);\n const repoActions = useRepositoryActions(\n data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null\n );\n\n const onClose = useCallback(() => {\n router.push('/');\n }, [router]);\n\n const deployAction = useDeployAction(\n data.repositoryPath\n ? {\n targetId: data.repositoryPath,\n targetType: 'repository' as const,\n repositoryPath: data.repositoryPath,\n }\n : null\n );\n const isDeployActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';\n\n const handleCopyPath = useCallback(() => {\n if (!data.repositoryPath) return;\n void navigator.clipboard.writeText(data.repositoryPath);\n setPathCopied(true);\n setTimeout(() => setPathCopied(false), COPY_FEEDBACK_DELAY);\n }, [data.repositoryPath]);\n\n // Session ID for repo chat — deterministic per repo\n const repoSessionId = data.id ? `repo-${data.id}` : `repo-${data.name}`;\n\n return (\n <BaseDrawer\n open={isOpen}\n onClose={onClose}\n size=\"lg\"\n modal={false}\n data-testid=\"repository-drawer\"\n >\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"flex min-h-0 flex-1 flex-col\">\n {/* VS Code-style tab bar */}\n <TabsList className=\"bg-muted/50 h-auto w-full shrink-0 justify-start gap-0 rounded-none border-b p-0\">\n <TabsTrigger\n value=\"overview\"\n className=\"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none\"\n >\n <LayoutDashboard className=\"mr-1.5 size-4\" />\n Overview\n </TabsTrigger>\n <TabsTrigger\n value=\"chat\"\n className=\"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none\"\n >\n <MessageSquare className=\"mr-1.5 size-4\" />\n Chat\n </TabsTrigger>\n </TabsList>\n\n {/* Persistent header — contrasting background */}\n <div className=\"bg-muted/40 shrink-0 border-b\">\n {/* Repo title + path breadcrumb */}\n <div\n className=\"flex items-center gap-2 px-4 pe-10 pt-2.5 pb-2\"\n data-testid=\"repository-drawer-header\"\n >\n <h2 className=\"text-foreground min-w-0 truncate text-base font-semibold tracking-tight\">\n {data.name}\n </h2>\n {data.repositoryPath ? (\n <>\n <span className=\"text-muted-foreground/40 text-xs\">/</span>\n <span className=\"text-muted-foreground min-w-0 truncate font-mono text-[11px]\">\n {data.repositoryPath}\n </span>\n </>\n ) : null}\n </div>\n\n {/* IDE toolbar */}\n {data.repositoryPath ? (\n <div data-testid=\"repository-drawer-toolbar\">\n <div className=\"flex h-9 items-center px-1.5\">\n {/* Left: Open actions */}\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.openInIde}\n disabled={repoActions.ideLoading}\n aria-label=\"Open in IDE\"\n >\n {repoActions.ideLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <Code2 className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Open in IDE\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.openInShell}\n disabled={repoActions.shellLoading}\n aria-label=\"Open terminal\"\n >\n {repoActions.shellLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <Terminal className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Open terminal\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.openFolder}\n disabled={repoActions.folderLoading}\n aria-label=\"Open folder\"\n >\n {repoActions.folderLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <FolderOpen className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Open folder\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={handleCopyPath}\n aria-label=\"Copy path\"\n >\n {pathCopied ? (\n <Check className=\"size-3.5 text-green-500\" />\n ) : (\n <Copy className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {pathCopied ? 'Copied!' : 'Copy path'}\n </TooltipContent>\n </Tooltip>\n </div>\n\n {/* Git sync */}\n {data.id && featureFlags.gitRebaseSync ? (\n <>\n <div className={tbSep} />\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className={tbBtn}\n onClick={repoActions.syncMain}\n disabled={repoActions.syncLoading}\n aria-label=\"Sync main\"\n >\n {repoActions.syncLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <RefreshCw className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n Sync main\n </TooltipContent>\n </Tooltip>\n </>\n ) : null}\n\n {/* Deploy */}\n {featureFlags.envDeploy ? (\n <>\n <div className={tbSep} />\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n disabled={deployAction.deployLoading || deployAction.stopLoading}\n onClick={isDeployActive ? deployAction.stop : deployAction.deploy}\n className={cn(\n 'inline-flex size-7 items-center justify-center rounded-[3px] disabled:opacity-40',\n isDeployActive\n ? 'text-red-500 hover:bg-red-500/10 hover:text-red-400'\n : 'text-green-500 hover:bg-green-500/10 hover:text-green-400'\n )}\n aria-label={isDeployActive ? 'Stop dev server' : 'Start dev server'}\n >\n {deployAction.deployLoading || deployAction.stopLoading ? (\n <Loader2 className=\"size-3.5 animate-spin\" />\n ) : isDeployActive ? (\n <Square className=\"size-4\" />\n ) : (\n <Play className=\"size-4\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {isDeployActive ? 'Stop dev server' : 'Start dev server'}\n </TooltipContent>\n </Tooltip>\n {isDeployActive ? (\n <DeploymentStatusBadge\n status={deployAction.status}\n url={deployAction.url}\n targetId={data.repositoryPath}\n />\n ) : null}\n </>\n ) : null}\n </TooltipProvider>\n\n <div className=\"flex-1\" />\n </div>\n </div>\n ) : null}\n </div>\n\n {/* Overview tab */}\n <TabsContent value=\"overview\" className=\"mt-0 flex-1 overflow-y-auto\">\n <RepoOverview data={data} syncError={repoActions.syncError} />\n </TabsContent>\n\n {/* Chat tab */}\n <TabsContent value=\"chat\" className=\"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden\">\n <ChatTab featureId={repoSessionId} worktreePath={data.repositoryPath} />\n </TabsContent>\n </Tabs>\n </BaseDrawer>\n );\n}\n\n// ── Repo Overview ───────────────────────────────────────────────────\n\nfunction Section({\n icon: Icon,\n title,\n children,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"px-3 pt-4 pb-1\">\n <div className=\"text-foreground mb-2 flex items-center gap-1.5 text-sm font-semibold tracking-wider uppercase\">\n <Icon className=\"size-4 opacity-50\" />\n {title}\n </div>\n {children}\n </div>\n );\n}\n\nfunction Card({ children, className }: { children: React.ReactNode; className?: string }) {\n return (\n <div className={cn('bg-muted/60 rounded-md border border-transparent p-3', className)}>\n {children}\n </div>\n );\n}\n\nfunction KV({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-foreground/40 text-[11px] font-medium tracking-wider uppercase\">\n {label}\n </span>\n <span className=\"text-sm leading-snug\">{children}</span>\n </div>\n );\n}\n\nfunction RepoOverview({\n data,\n syncError,\n}: {\n data: RepositoryNodeData;\n syncError?: string | null;\n}) {\n const [repoInfo, setRepoInfo] = useState<GitRepoInfo | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!data.repositoryPath) return;\n let cancelled = false;\n setLoading(true);\n getGitRepoInfo(data.repositoryPath, 8)\n .then((result) => {\n if (!cancelled) setRepoInfo(result);\n })\n .catch(() => {\n // Silently handle — repo info is non-critical\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [data.repositoryPath]);\n\n if (!data.repositoryPath) return null;\n\n const wt = repoInfo?.workingTree;\n const isDirty = wt && (wt.staged > 0 || wt.modified > 0 || wt.untracked > 0);\n const ds = repoInfo?.diffStats;\n\n return (\n <div className=\"pb-4\">\n {loading ? (\n <div className=\"text-foreground/40 flex items-center gap-2 px-4 py-8 text-sm\">\n <Loader2 className=\"size-4 animate-spin\" /> Loading repository info...\n </div>\n ) : null}\n\n {/* Quick stats grid */}\n {repoInfo ? (\n <div className=\"grid grid-cols-2 gap-2 px-3 pt-3\">\n {/* Current branch */}\n <Card>\n <KV label=\"Branch\">\n <span className=\"inline-flex items-center gap-1.5\">\n <GitBranch className=\"text-foreground/30 size-3.5 shrink-0\" />\n <code className=\"font-mono text-sm\">\n {repoInfo.currentBranch ?? data.branch ?? '—'}\n </code>\n </span>\n {data.behindCount != null && data.behindCount > 0 ? (\n <span className=\"mt-0.5 block text-xs text-orange-600 dark:text-orange-400\">\n {data.behindCount} behind default\n </span>\n ) : null}\n </KV>\n </Card>\n\n {/* Working tree */}\n <Card>\n <KV label=\"Working Tree\">\n {isDirty ? (\n <div className=\"flex flex-wrap gap-x-3 gap-y-0.5\">\n {wt.staged > 0 ? (\n <span className=\"inline-flex items-center gap-1 text-sm text-green-600 dark:text-green-400\">\n <FileCheck2 className=\"size-3.5\" /> {wt.staged} staged\n </span>\n ) : null}\n {wt.modified > 0 ? (\n <span className=\"inline-flex items-center gap-1 text-sm text-amber-600 dark:text-amber-400\">\n <FileEdit className=\"size-3.5\" /> {wt.modified} modified\n </span>\n ) : null}\n {wt.untracked > 0 ? (\n <span className=\"text-foreground/50 inline-flex items-center gap-1 text-sm\">\n <FilePlus className=\"size-3.5\" /> {wt.untracked} untracked\n </span>\n ) : null}\n </div>\n ) : (\n <span className=\"inline-flex items-center gap-1.5 text-sm text-green-600 dark:text-green-400\">\n <Check className=\"size-3.5\" /> Clean\n </span>\n )}\n </KV>\n </Card>\n\n {/* Diff stats */}\n {ds ? (\n <Card>\n <KV label=\"Uncommitted Changes\">\n <div className=\"flex items-center gap-3 text-sm\">\n <span>\n {ds.filesChanged} file{ds.filesChanged !== 1 ? 's' : ''}\n </span>\n <span className=\"text-green-600 dark:text-green-400\">+{ds.insertions}</span>\n <span className=\"text-red-500 dark:text-red-400\">-{ds.deletions}</span>\n </div>\n </KV>\n </Card>\n ) : null}\n\n {/* Remotes */}\n {repoInfo.remotes.length > 0 ? (\n <Card>\n <KV label=\"Remote\">\n {repoInfo.remotes.map((r) => (\n <span key={r.name} className=\"inline-flex items-center gap-1.5 text-sm\">\n <Globe className=\"text-foreground/30 size-3.5 shrink-0\" />\n <span className=\"truncate\">\n {r.url\n .replace(/\\.git$/, '')\n .replace(/^https?:\\/\\/([^@]+@)?/, '')\n .replace(/x-access-token:[^@]+@/, '')}\n </span>\n </span>\n ))}\n </KV>\n </Card>\n ) : null}\n\n {/* Stashes */}\n {repoInfo.stashCount > 0 ? (\n <Card>\n <KV label=\"Stashes\">\n <span className=\"inline-flex items-center gap-1.5 text-sm\">\n <Archive className=\"text-foreground/30 size-3.5 shrink-0\" />\n {repoInfo.stashCount} stash{repoInfo.stashCount !== 1 ? 'es' : ''}\n </span>\n </KV>\n </Card>\n ) : null}\n\n {/* Tags */}\n {repoInfo.tags.length > 0 ? (\n <Card>\n <KV label=\"Tags\">\n <div className=\"flex flex-wrap gap-1.5\">\n {repoInfo.tags.map((t) => (\n <span\n key={t}\n className=\"bg-foreground/[0.04] inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-xs\"\n >\n <Tag className=\"text-foreground/30 size-2.5\" />\n {t}\n </span>\n ))}\n </div>\n </KV>\n </Card>\n ) : null}\n </div>\n ) : null}\n\n {/* Commit history */}\n {repoInfo && repoInfo.commits.length > 0 ? (\n <Section icon={GitCommitHorizontal} title=\"Recent Commits\">\n <div className=\"relative ml-3\">\n <div className=\"bg-border absolute top-2 bottom-2 left-[5px] w-px\" />\n {repoInfo.commits.map((c, i) => (\n <div key={c.hash} className=\"group relative flex gap-3 py-1.5\">\n <div\n className={cn(\n 'relative z-10 mt-1.5 size-[11px] shrink-0 rounded-full border-2',\n i === 0\n ? 'border-primary bg-primary'\n : 'border-border bg-background group-hover:border-foreground/30'\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-2\">\n <p className=\"min-w-0 truncate text-sm leading-snug\">{c.subject}</p>\n <code className=\"text-foreground/30 shrink-0 font-mono text-[11px]\">\n {c.shortHash}\n </code>\n </div>\n <div className=\"text-foreground/40 mt-0.5 flex items-center gap-2 text-xs\">\n <span>{c.author}</span>\n <span>·</span>\n <span>{c.relativeDate}</span>\n {c.branch ? (\n <>\n <span>·</span>\n <span className=\"inline-flex items-center gap-0.5\">\n <GitBranch className=\"size-3\" />\n {c.branch}\n </span>\n </>\n ) : null}\n </div>\n </div>\n </div>\n ))}\n </div>\n </Section>\n ) : null}\n\n {/* Branches — below commits, main/master first */}\n {repoInfo && repoInfo.branches.length > 1 ? (\n <Section icon={GitBranch} title=\"Branches\">\n <div className=\"flex flex-col\">\n {[...repoInfo.branches]\n .sort((a, b) => {\n const isDefault = (n: string) => /^(main|master)$/.test(n);\n if (a.isCurrent && !b.isCurrent) return -1;\n if (!a.isCurrent && b.isCurrent) return 1;\n if (isDefault(a.name) && !isDefault(b.name)) return -1;\n if (!isDefault(a.name) && isDefault(b.name)) return 1;\n return 0;\n })\n .map((b) => (\n <div\n key={b.name}\n className={cn(\n 'flex items-center justify-between rounded px-2 py-1.5',\n b.isCurrent && 'bg-muted/60'\n )}\n >\n <span className=\"inline-flex items-center gap-1.5 text-sm\">\n {b.isCurrent ? (\n <span className=\"size-2 shrink-0 rounded-full bg-green-500\" />\n ) : /^(main|master)$/.test(b.name) ? (\n <span className=\"size-2 shrink-0 rounded-full bg-blue-500\" />\n ) : (\n <span className=\"bg-foreground/10 size-2 shrink-0 rounded-full\" />\n )}\n <code className=\"font-mono text-[13px]\">{b.name}</code>\n {b.isCurrent ? (\n <span className=\"text-foreground/40 text-[10px]\">current</span>\n ) : null}\n </span>\n <span className=\"text-foreground/40 text-xs\">{b.lastCommitDate}</span>\n </div>\n ))}\n </div>\n </Section>\n ) : null}\n\n {/* Errors */}\n {syncError ? (\n <Section icon={AlertTriangle} title=\"Issues\">\n <Card className=\"bg-destructive/5 border-transparent\">\n <p className=\"text-destructive text-sm\">{syncError}</p>\n </Card>\n </Section>\n ) : null}\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z',\n key: 'vktsd0',\n },\n ],\n ['circle', { cx: '7.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'kqv944' }],\n];\n\n/**\n * @component @name Tag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/tag\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Tag = createLucideIcon('tag', __iconNode);\n\nexport default Tag;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6',\n key: 'g5mvt7',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'm14 20 2 2 4-4', key: '15kota' }],\n];\n\n/**\n * @component @name FileCheckCorner\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/file-check-corner\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FileCheckCorner = createLucideIcon('file-check-corner', __iconNode);\n\nexport default FileCheckCorner;\n"],"names":[],"mappings":"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","ignoreList":[2,3]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[61402,76052,3463,52168,80043,13008,74607,6542,740,12104,70319,54433,59020,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b,d){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let e=(0,c.resolve)("IFeatureRepository"),f=await e.findById(a);if(!f)return{rejected:!1,error:"Feature not found"};if(!f.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let g=(0,c.resolve)("RejectAgentRunUseCase"),h=await g.execute(f.agentRunId,b,d);if(!h.rejected)return{rejected:!1,error:h.reason};return{rejected:!0,iteration:h.iteration,iterationWarning:h.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"6085232cccf49aa85831f75237dcc5a64ce3e34aff",null),a.s(["approveFeature",()=>e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"70b7047b1bc990d677913ef8d7e09412c9adb3a3da",null),a.s(["rejectFeature",()=>f],76052);var g=a.i(81719);async function h(a,b){if(!a.trim())return{submitted:!1,error:"Feature id is required"};if(!b.trim())return{submitted:!1,error:"Feedback is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{submitted:!1,error:"Feature not found"};if(e.mode!==g.FeatureMode.Exploration)return{submitted:!1,error:"Feature is not in exploration mode"};if(!e.agentRunId)return{submitted:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("RejectAgentRunUseCase"),h=await f.execute(e.agentRunId,b);if(!h.rejected)return{submitted:!1,error:h.reason};return{submitted:!0,iteration:h.iteration}}catch(a){return{submitted:!1,error:a instanceof Error?a.message:"Failed to submit feedback"}}}async function i(a,b){if(!a.trim())return{error:"Feature id is required"};try{let d=(0,c.resolve)("PromoteExplorationUseCase");return{feature:(await d.execute({featureId:a,targetMode:b})).feature}}catch(a){return{error:a instanceof Error?a.message:"Failed to promote exploration"}}}async function j(a){if(!a.trim())return{discarded:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{discarded:!1,error:"Feature not found"};if(d.mode!==g.FeatureMode.Exploration)return{discarded:!1,error:"Feature is not in exploration mode"};let e=(0,c.resolve)("DeleteFeatureUseCase");return await e.execute(a,{cleanup:!0}),{discarded:!0}}catch(a){return{discarded:!1,error:a instanceof Error?a.message:"Failed to discard exploration"}}}async function k(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a),e={question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},f={question:"Goal",context:d.oneLiner,questions:d.openQuestions.filter(a=>a.resolved).map(a=>{let b=a.options?.find(a=>a.selected);return{question:a.question,selectedOption:b?.option??a.answer??"N/A",rationale:a.selectionRationale??b?.description??"",wasRecommended:!1}})};return{questionnaire:e,productDecisions:f,artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function l(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"603669bf0992ff9808548dc6362928d2f48896b9c4",null),a.s(["submitExplorationFeedback",()=>h],3463),(0,d.ensureServerEntryExports)([i]),(0,b.registerServerReference)(i,"60246d55dcc2df009cbb8b982fa378180d33a7327b",null),a.s(["promoteExploration",()=>i],52168),(0,d.ensureServerEntryExports)([j]),(0,b.registerServerReference)(j,"40a9144302aa9bbc2ad14d5944c9228cfe19c008be",null),a.s(["discardExploration",()=>j],80043),(0,d.ensureServerEntryExports)([k]),(0,b.registerServerReference)(k,"4052e7dc4da336c0c86183fd42e3fbf3077aabd6d4",null),a.s(["getFeatureArtifact",()=>k],13008),(0,d.ensureServerEntryExports)([l]),(0,b.registerServerReference)(l,"404b590f4fae50777fffb4ccded4ef9bfa18e34586",null),a.s(["getResearchArtifact",()=>l],74607);var m=a.i(66680),n=a.i(2157),o=a.i(50227),p=a.i(29918),q=a.i(32278),r=a.i(33244);async function s(a){if(!a.trim())return{error:"Feature id is required"};try{var b,d;let e,f,g=(0,c.resolve)("IFeatureRepository"),h=await g.findById(a);if(!h)return{error:"Feature not found"};let{workflow:i}=(0,r.getSettings)(),j=h.pr?{url:h.pr.url,number:h.pr.number,status:h.pr.status,commitHash:h.pr.commitHash,ciStatus:h.pr.ciStatus,mergeable:h.pr.mergeable}:void 0,k=h.worktreePath??(h.repositoryPath&&h.branch?(0,p.computeWorktreePath)(h.repositoryPath,h.branch):null),l=(0,c.resolve)("IGitPrService"),s=k??h.repositoryPath??null,t="main";if(s)try{t=await l.getDefaultBranch(s)}catch{}let u=h.branch?{source:h.branch,target:t}:void 0,v=h.repositoryPath?(b=h.repositoryPath,f=(0,m.createHash)("sha256").update(b).digest("hex").slice(0,16),(0,o.join)((0,q.getShepHomeDir)(),"repos",f,"evidence",a).replace(/\\/g,"/")):k?(0,o.join)((0,o.dirname)((0,o.dirname)(k)),"evidence",a).replace(/\\/g,"/"):null;if(v)try{let a=(0,o.join)(v,"manifest.json");if((0,n.existsSync)(a)){let b=(d=JSON.parse((0,n.readFileSync)(a,"utf-8")),d.map(a=>{if(a.relativePath.startsWith("/")){if((0,n.existsSync)(a.relativePath))return a;let b=(0,o.join)(v,(0,o.basename)(a.relativePath)).replace(/\\/g,"/");return(0,n.existsSync)(b)?{...a,relativePath:b}:a}let b=(0,o.join)(v,(0,o.basename)(a.relativePath)).replace(/\\/g,"/");return{...a,relativePath:b}})),c=new Set;e=b.filter(a=>{let b=`${a.type}:${a.relativePath}`;return!c.has(b)&&(c.add(b),!0)})}}catch{}if(!k)return{pr:j,branch:u,evidence:e,warning:j?void 0:"No PR or diff data available",hideCiStatus:i.hideCiStatus};try{let[a,b]=await Promise.all([l.getPrDiffSummary(k,t),l.getFileDiffs(k,t).catch(()=>void 0)]);return{pr:j,branch:u,diffSummary:a,fileDiffs:b,evidence:e,hideCiStatus:i.hideCiStatus}}catch{return{pr:j,branch:u,evidence:e,warning:"Diff statistics unavailable",hideCiStatus:i.hideCiStatus}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function t(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IPhaseTimingRepository"),d=(await b.findByFeatureId(a)).map(a=>({agentRunId:a.agentRunId,phase:a.phase,startedAt:a.startedAt,completedAt:a.completedAt,durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt,approvalWaitMs:null!=a.approvalWaitMs?Number(a.approvalWaitMs):void 0,inputTokens:null!=a.inputTokens?Number(a.inputTokens):void 0,outputTokens:null!=a.outputTokens?Number(a.outputTokens):void 0,cacheCreationInputTokens:null!=a.cacheCreationInputTokens?Number(a.cacheCreationInputTokens):void 0,cacheReadInputTokens:null!=a.cacheReadInputTokens?Number(a.cacheReadInputTokens):void 0,costUsd:null!=a.costUsd?Number(a.costUsd):void 0,numTurns:a.numTurns??void 0,durationApiMs:null!=a.durationApiMs?Number(a.durationApiMs):void 0,exitCode:a.exitCode??void 0,errorMessage:a.errorMessage??void 0,prompt:a.prompt??void 0})),e=await u(a);return{timings:d,rejectionFeedback:e}}catch(a){return{error:a instanceof Error?a.message:"Failed to load phase timings"}}}async function u(b){try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(b);if(!e?.specPath)return[];let{readFileSync:f}=await a.A(6714),{join:g}=await a.A(11105),h=(await a.A(29718)).default,i=f(g(e.specPath,"spec.yaml"),"utf-8"),j=h.load(i);if(!Array.isArray(j?.rejectionFeedback))return[];return j.rejectionFeedback.map(a=>({iteration:Number(a.iteration??1),message:String(a.message??""),phase:a.phase?String(a.phase):void 0,timestamp:a.timestamp?String(a.timestamp):void 0,attachments:Array.isArray(a.attachments)?a.attachments.map(String):void 0}))}catch{return[]}}async function v(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{error:"Feature not found"};if(!d.plan)return{plan:void 0};return{plan:{state:d.plan.state,overview:d.plan.overview,tasks:d.plan.tasks.map(a=>({title:a.title??"",description:a.description??"",state:a.state,actionItems:(a.actionItems??[]).map(a=>({name:a.name,description:a.description,acceptanceCriteria:(a.acceptanceCriteria??[]).map(a=>({description:a.description,verified:a.verified}))}))}))}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature plan"}}}async function w(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("RebaseFeatureOnMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to rebase feature"}}}(0,d.ensureServerEntryExports)([s]),(0,b.registerServerReference)(s,"4094fe87f49311df686a498871759fc342c93a00ed",null),a.s(["getMergeReviewData",()=>s],6542),(0,d.ensureServerEntryExports)([t]),(0,b.registerServerReference)(t,"40746b61e548c8ef387b33e6aab7dcc60df65d29db",null),a.s(["getFeaturePhaseTimings",()=>t],740),(0,d.ensureServerEntryExports)([v]),(0,b.registerServerReference)(v,"4026e7c2174421f6c2ee9184420506b1d2491907e4",null),a.s(["getFeaturePlan",()=>v],12104),(0,d.ensureServerEntryExports)([w]),(0,b.registerServerReference)(w,"40b7e76a98eadcff4e2fc9b0048b8e9b5c6c272c54",null),a.s(["rebaseFeature",()=>w],70319);var x=a.i(31747);async function y(a){try{let b=(0,c.resolve)("IFeatureRepository"),d=(0,c.resolve)("IAgentRunRepository"),e=(0,c.resolve)("IRepositoryRepository"),f=(0,c.resolve)("IGitPrService"),g=(0,c.resolve)("GetFeatureArtifactUseCase"),h=await b.findById(a);if(!h)return null;let i=h.agentRunId?await d.findById(h.agentRunId):null,[j,k,l,m]=await Promise.all([e.findByPath(h.repositoryPath).catch(()=>null),f.getDefaultBranch(h.repositoryPath).catch(()=>"main"),g.execute(a).catch(()=>null),f.getRemoteUrl(h.repositoryPath).catch(()=>null)]),{workflow:n}=(0,r.getSettings)();return(0,x.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:n.enableEvidence,commitEvidence:n.commitEvidence,hideCiStatus:n.hideCiStatus})}catch{return null}}async function z(a){if(!a?.trim())return{success:!1,error:"Feature id is required"};try{let b=(0,c.resolve)("GetBranchSyncStatusUseCase"),d=await b.execute(a);return{success:!0,data:{...d,checkedAt:new Date().toISOString()}}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to get branch sync status"}}}(0,d.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"4000cfeeabf616bca5a8e35d2b36d18429b677bd4a",null),a.s(["getFeatureDrawerData",()=>y],54433),(0,d.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"40ed89659d7dff1c232632a478f72fa1e355de4221",null),a.s(["getBranchSyncStatus",()=>z],59020)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/approve-feature.ts","../../../../../../../src/presentation/web/app/actions/reject-feature.ts","../../../../../../../src/presentation/web/app/actions/submit-exploration-feedback.ts","../../../../../../../src/presentation/web/app/actions/promote-exploration.ts","../../../../../../../src/presentation/web/app/actions/discard-exploration.ts","../../../../../../../src/presentation/web/app/actions/get-feature-artifact.ts","../../../../../../../src/presentation/web/app/actions/get-research-artifact.ts","../../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts","../../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts","../../../../../../../src/presentation/web/app/actions/get-feature-plan.ts","../../../../../../../src/presentation/web/app/actions/rebase-feature.ts","../../../../../../../src/presentation/web/app/actions/get-feature-drawer-data.ts","../../../../../../../src/presentation/web/app/actions/get-branch-sync-status.ts"],"sourcesContent":["'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ApproveAgentRunUseCase } from '@shepai/core/application/use-cases/agents/approve-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { PrdApprovalPayload } from '@shepai/core/domain/generated/output';\n\nexport async function approveFeature(\n featureId: string,\n payload?: PrdApprovalPayload\n): Promise<{ approved: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { approved: false, error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { approved: false, error: 'Feature not found' };\n }\n\n if (!feature.agentRunId) {\n return { approved: false, error: 'Feature has no agent run' };\n }\n\n // Always use ApproveAgentRunUseCase — it handles waitingApproval, failed,\n // and interrupted statuses. This ensures approval is propagated via\n // Command({update: {_approvalAction: 'approved'}}) so the graph node\n // receives it on resume.\n const approveUseCase = resolve<ApproveAgentRunUseCase>('ApproveAgentRunUseCase');\n const result = await approveUseCase.execute(feature.agentRunId, payload);\n\n if (!result.approved) {\n return { approved: false, error: result.reason };\n }\n\n return { approved: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to approve feature';\n return { approved: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RejectAgentRunUseCase } from '@shepai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport async function rejectFeature(\n featureId: string,\n feedback: string,\n attachments?: string[]\n): Promise<{\n rejected: boolean;\n iteration?: number;\n iterationWarning?: boolean;\n error?: string;\n}> {\n if (!featureId.trim()) {\n return { rejected: false, error: 'Feature id is required' };\n }\n\n if (!feedback.trim()) {\n return { rejected: false, error: 'Feedback is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { rejected: false, error: 'Feature not found' };\n }\n\n if (!feature.agentRunId) {\n return { rejected: false, error: 'Feature has no agent run' };\n }\n\n // Always use RejectAgentRunUseCase — it handles waitingApproval, failed,\n // and interrupted statuses. This ensures rejection feedback is propagated\n // via Command({update: {_approvalAction, _rejectionFeedback}}) so the\n // graph node receives the feedback on resume.\n const rejectUseCase = resolve<RejectAgentRunUseCase>('RejectAgentRunUseCase');\n const result = await rejectUseCase.execute(feature.agentRunId, feedback, attachments);\n\n if (!result.rejected) {\n return { rejected: false, error: result.reason };\n }\n\n return {\n rejected: true,\n iteration: result.iteration,\n iterationWarning: result.iterationWarning,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to reject feature';\n return { rejected: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RejectAgentRunUseCase } from '@shepai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport { FeatureMode } from '@shepai/core/domain/generated/output';\n\n/**\n * Submit feedback on an exploration prototype. This resumes the exploration\n * graph with the feedback text, triggering the next iteration. Internally\n * uses the RejectAgentRunUseCase since exploration feedback follows the\n * same interrupt/resume mechanism as approval gate rejections.\n */\nexport async function submitExplorationFeedback(\n featureId: string,\n feedback: string\n): Promise<{ submitted: boolean; iteration?: number; error?: string }> {\n if (!featureId.trim()) {\n return { submitted: false, error: 'Feature id is required' };\n }\n\n if (!feedback.trim()) {\n return { submitted: false, error: 'Feedback is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { submitted: false, error: 'Feature not found' };\n }\n\n if (feature.mode !== FeatureMode.Exploration) {\n return { submitted: false, error: 'Feature is not in exploration mode' };\n }\n\n if (!feature.agentRunId) {\n return { submitted: false, error: 'Feature has no agent run' };\n }\n\n const rejectUseCase = resolve<RejectAgentRunUseCase>('RejectAgentRunUseCase');\n const result = await rejectUseCase.execute(feature.agentRunId, feedback);\n\n if (!result.rejected) {\n return { submitted: false, error: result.reason };\n }\n\n return { submitted: true, iteration: result.iteration };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to submit feedback';\n return { submitted: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { PromoteExplorationUseCase } from '@shepai/core/application/use-cases/features/promote/promote-exploration.use-case';\nimport type { Feature, FeatureMode } from '@shepai/core/domain/generated/output';\n\n/**\n * Promote an exploration feature to Regular or Fast mode.\n * Transitions the feature from Exploring lifecycle to the appropriate\n * starting state and spawns the new agent graph.\n */\nexport async function promoteExploration(\n featureId: string,\n targetMode: FeatureMode.Regular | FeatureMode.Fast\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<PromoteExplorationUseCase>('PromoteExplorationUseCase');\n const result = await useCase.execute({ featureId, targetMode });\n return { feature: result.feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to promote exploration';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteFeatureUseCase } from '@shepai/core/application/use-cases/features/delete-feature.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport { FeatureMode } from '@shepai/core/domain/generated/output';\n\n/**\n * Discard an exploration feature, cleaning up the worktree and branch.\n * Validates the feature is in exploration mode before deleting.\n */\nexport async function discardExploration(\n featureId: string\n): Promise<{ discarded: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { discarded: false, error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { discarded: false, error: 'Feature not found' };\n }\n\n if (feature.mode !== FeatureMode.Exploration) {\n return { discarded: false, error: 'Feature is not in exploration mode' };\n }\n\n const deleteUseCase = resolve<DeleteFeatureUseCase>('DeleteFeatureUseCase');\n await deleteUseCase.execute(featureId, { cleanup: true });\n return { discarded: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to discard exploration';\n return { discarded: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport type { FeatureArtifact } from '@shepai/core/domain/generated/output';\nimport type { PrdQuestionnaireData } from '@shepai/core/domain/generated/output';\nimport type { ProductDecisionsSummaryData } from '@/components/common/product-decisions-summary';\n\ninterface GetFeatureArtifactResult {\n questionnaire?: PrdQuestionnaireData;\n productDecisions?: ProductDecisionsSummaryData;\n artifact?: FeatureArtifact;\n error?: string;\n}\n\n/**\n * Map FeatureArtifact openQuestions into the PrdQuestionnaireData shape\n * expected by the PrdQuestionnaireDrawer component.\n */\nfunction toQuestionnaireData(artifact: FeatureArtifact): PrdQuestionnaireData {\n return {\n question: 'Goal',\n context: artifact.oneLiner,\n questions: artifact.openQuestions.map((oq, idx) => ({\n id: `q-${idx}`,\n question: oq.question,\n type: 'select' as const,\n options: (oq.options ?? []).map((opt, optIdx) => ({\n id: `q-${idx}-opt-${optIdx}`,\n label: opt.option,\n rationale: opt.description,\n ...(opt.selected ? { recommended: true } : {}),\n })),\n })),\n finalAction: {\n id: 'approve-reqs',\n label: 'Approve Requirements',\n description: 'Finalize and lock the requirements for implementation',\n },\n };\n}\n\n/**\n * Map FeatureArtifact openQuestions into a read-only summary for the\n * Product Decisions tab in the tech review drawer.\n */\nfunction toProductDecisionsData(artifact: FeatureArtifact): ProductDecisionsSummaryData {\n return {\n question: 'Goal',\n context: artifact.oneLiner,\n questions: artifact.openQuestions\n .filter((oq) => oq.resolved)\n .map((oq) => {\n const selected = oq.options?.find((o) => o.selected);\n return {\n question: oq.question,\n selectedOption: selected?.option ?? oq.answer ?? 'N/A',\n rationale: oq.selectionRationale ?? selected?.description ?? '',\n wasRecommended: false,\n };\n }),\n };\n}\n\nexport async function getFeatureArtifact(featureId: string): Promise<GetFeatureArtifactResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const artifact = await useCase.execute(featureId);\n const questionnaire = toQuestionnaireData(artifact);\n const productDecisions = toProductDecisionsData(artifact);\n return { questionnaire, productDecisions, artifact };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load feature artifact';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetResearchArtifactUseCase } from '@shepai/core/application/use-cases/features/get-research-artifact.use-case';\nimport type { ResearchArtifact, TechDecision } from '@shepai/core/domain/generated/output';\n\nexport interface TechDecisionsReviewData {\n name: string;\n summary: string;\n decisions: TechDecision[];\n technologies: string[];\n}\n\ninterface GetResearchArtifactResult {\n techDecisions?: TechDecisionsReviewData;\n error?: string;\n}\n\nfunction toTechDecisionsData(artifact: ResearchArtifact): TechDecisionsReviewData {\n return {\n name: artifact.name,\n summary: artifact.summary,\n decisions: artifact.decisions,\n technologies: artifact.technologies,\n };\n}\n\nexport async function getResearchArtifact(featureId: string): Promise<GetResearchArtifactResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetResearchArtifactUseCase>('GetResearchArtifactUseCase');\n const artifact = await useCase.execute(featureId);\n const techDecisions = toTechDecisionsData(artifact);\n return { techDecisions };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load research artifact';\n return { error: message };\n }\n}\n","'use server';\n\nimport { createHash } from 'node:crypto';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { basename, join, dirname } from 'node:path';\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type {\n MergeReviewData,\n MergeReviewEvidence,\n} from '@/components/common/merge-review/merge-review-config';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { getShepHomeDir } from '@shepai/core/infrastructure/services/filesystem/shep-directory.service';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\n\ntype GetMergeReviewDataResult = MergeReviewData | { error: string };\n\n/**\n * Compute the shep evidence directory for a given repository and feature.\n * Path: ~/.shep/repos/<sha256-hash-prefix>/evidence/<featureId>/\n */\nfunction computeEvidenceDir(repositoryPath: string, featureId: string): string {\n const repoHash = createHash('sha256').update(repositoryPath).digest('hex').slice(0, 16);\n return join(getShepHomeDir(), 'repos', repoHash, 'evidence', featureId).replace(/\\\\/g, '/');\n}\n\n/**\n * Normalize evidence paths so they all point to the shep evidence directory.\n * When commitEvidence was enabled, the manifest may contain relative paths\n * (e.g. \"specs/066-feature/evidence/file.png\"). After merge the worktree is\n * deleted so those paths no longer resolve. The evidence files were also saved\n * to the shep evidence dir with the same filename, so we map relative paths\n * to absolute paths there.\n */\nfunction normalizeEvidencePaths(\n evidence: MergeReviewEvidence[],\n evidenceDir: string\n): MergeReviewEvidence[] {\n return evidence.map((e) => {\n if (e.relativePath.startsWith('/')) {\n // Already absolute — check if the file exists; if not, try the evidence dir\n if (existsSync(e.relativePath)) return e;\n const fallback = join(evidenceDir, basename(e.relativePath)).replace(/\\\\/g, '/');\n if (existsSync(fallback)) return { ...e, relativePath: fallback };\n return e;\n }\n // Relative path — resolve to evidence dir using the filename\n const absolutePath = join(evidenceDir, basename(e.relativePath)).replace(/\\\\/g, '/');\n return { ...e, relativePath: absolutePath };\n });\n}\n\nexport async function getMergeReviewData(featureId: string): Promise<GetMergeReviewDataResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { error: 'Feature not found' };\n }\n\n const { workflow } = getSettings();\n\n const pr = feature.pr\n ? {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n commitHash: feature.pr.commitHash,\n ciStatus: feature.pr.ciStatus,\n mergeable: feature.pr.mergeable,\n }\n : undefined;\n\n const worktreePath =\n feature.worktreePath ??\n (feature.repositoryPath && feature.branch\n ? computeWorktreePath(feature.repositoryPath, feature.branch)\n : null);\n\n // Detect the actual default branch (main, master, etc.) for diff comparison.\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const diffCwd = worktreePath ?? feature.repositoryPath ?? null;\n let defaultBranch = 'main';\n if (diffCwd) {\n try {\n defaultBranch = await gitPrService.getDefaultBranch(diffCwd);\n } catch {\n // Fall back to 'main' if detection fails\n }\n }\n\n const branch = feature.branch ? { source: feature.branch, target: defaultBranch } : undefined;\n\n // Load evidence manifest (best-effort).\n // Evidence is stored independently of the worktree at:\n // ~/.shep/repos/<hash>/evidence/<featureId>/manifest.json\n // We compute this path from repositoryPath so evidence is accessible\n // even after the worktree has been deleted post-merge.\n let evidence: MergeReviewEvidence[] | undefined;\n const evidenceDir = feature.repositoryPath\n ? computeEvidenceDir(feature.repositoryPath, featureId)\n : worktreePath\n ? join(dirname(dirname(worktreePath)), 'evidence', featureId).replace(/\\\\/g, '/')\n : null;\n\n if (evidenceDir) {\n try {\n const manifestPath = join(evidenceDir, 'manifest.json');\n if (existsSync(manifestPath)) {\n const raw: MergeReviewEvidence[] = JSON.parse(readFileSync(manifestPath, 'utf-8'));\n const normalized = normalizeEvidencePaths(raw, evidenceDir);\n // Deduplicate: same type + relativePath means the same evidence entry\n const seen = new Set<string>();\n evidence = normalized.filter((e) => {\n const key = `${e.type}:${e.relativePath}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n } catch {\n // Evidence unavailable — not critical\n }\n }\n\n if (!worktreePath) {\n return {\n pr,\n branch,\n evidence,\n warning: pr ? undefined : 'No PR or diff data available',\n hideCiStatus: workflow.hideCiStatus,\n };\n }\n\n try {\n const [diffSummary, fileDiffs] = await Promise.all([\n gitPrService.getPrDiffSummary(worktreePath, defaultBranch),\n gitPrService.getFileDiffs(worktreePath, defaultBranch).catch(() => undefined),\n ]);\n return { pr, branch, diffSummary, fileDiffs, evidence, hideCiStatus: workflow.hideCiStatus };\n } catch {\n return {\n pr,\n branch,\n evidence,\n warning: 'Diff statistics unavailable',\n hideCiStatus: workflow.hideCiStatus,\n };\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load merge review data';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IPhaseTimingRepository } from '@shepai/core/application/ports/output/agents/phase-timing-repository.interface';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport interface PhaseTimingData {\n agentRunId: string;\n phase: string;\n startedAt: string;\n completedAt?: string;\n durationMs?: number;\n waitingApprovalAt?: string;\n approvalWaitMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n cacheCreationInputTokens?: number;\n cacheReadInputTokens?: number;\n costUsd?: number;\n numTurns?: number;\n durationApiMs?: number;\n exitCode?: string;\n errorMessage?: string;\n prompt?: string;\n}\n\nexport interface RejectionFeedbackData {\n iteration: number;\n message: string;\n phase?: string;\n timestamp?: string;\n attachments?: string[];\n}\n\ntype GetPhaseTimingsResult =\n | { timings: PhaseTimingData[]; rejectionFeedback: RejectionFeedbackData[] }\n | { error: string };\n\nexport async function getFeaturePhaseTimings(featureId: string): Promise<GetPhaseTimingsResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const repo = resolve<IPhaseTimingRepository>('IPhaseTimingRepository');\n const phaseTimings = await repo.findByFeatureId(featureId);\n\n const timings: PhaseTimingData[] = phaseTimings.map((t) => ({\n agentRunId: t.agentRunId,\n phase: t.phase,\n startedAt: t.startedAt,\n completedAt: t.completedAt,\n durationMs: t.durationMs != null ? Number(t.durationMs) : undefined,\n waitingApprovalAt: t.waitingApprovalAt,\n approvalWaitMs: t.approvalWaitMs != null ? Number(t.approvalWaitMs) : undefined,\n inputTokens: t.inputTokens != null ? Number(t.inputTokens) : undefined,\n outputTokens: t.outputTokens != null ? Number(t.outputTokens) : undefined,\n cacheCreationInputTokens:\n t.cacheCreationInputTokens != null ? Number(t.cacheCreationInputTokens) : undefined,\n cacheReadInputTokens:\n t.cacheReadInputTokens != null ? Number(t.cacheReadInputTokens) : undefined,\n costUsd: t.costUsd != null ? Number(t.costUsd) : undefined,\n numTurns: t.numTurns ?? undefined,\n durationApiMs: t.durationApiMs != null ? Number(t.durationApiMs) : undefined,\n exitCode: t.exitCode ?? undefined,\n errorMessage: t.errorMessage ?? undefined,\n prompt: t.prompt ?? undefined,\n }));\n\n // Read rejection feedback from spec.yaml\n const rejectionFeedback = await readRejectionFeedback(featureId);\n\n return { timings, rejectionFeedback };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load phase timings';\n return { error: message };\n }\n}\n\nasync function readRejectionFeedback(featureId: string): Promise<RejectionFeedbackData[]> {\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature?.specPath) return [];\n\n const { readFileSync } = await import('node:fs');\n const { join } = await import('node:path');\n const yaml = (await import('js-yaml')).default;\n\n const specContent = readFileSync(join(feature.specPath, 'spec.yaml'), 'utf-8');\n const spec = yaml.load(specContent) as Record<string, unknown>;\n\n if (!Array.isArray(spec?.rejectionFeedback)) return [];\n\n return (spec.rejectionFeedback as Record<string, unknown>[]).map((entry) => ({\n iteration: Number(entry.iteration ?? 1),\n message: String(entry.message ?? ''),\n phase: entry.phase ? String(entry.phase) : undefined,\n timestamp: entry.timestamp ? String(entry.timestamp) : undefined,\n attachments: Array.isArray(entry.attachments)\n ? (entry.attachments as unknown[]).map(String)\n : undefined,\n }));\n } catch {\n return [];\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport interface AcceptanceCriterionData {\n description: string;\n verified: boolean;\n}\n\nexport interface ActionItemData {\n name: string;\n description: string;\n acceptanceCriteria: AcceptanceCriterionData[];\n}\n\nexport interface PlanTaskData {\n title: string;\n description: string;\n state: string;\n actionItems: ActionItemData[];\n}\n\nexport interface PlanData {\n state: string;\n overview: string;\n tasks: PlanTaskData[];\n}\n\ntype GetPlanResult = { plan: PlanData | undefined } | { error: string };\n\nexport async function getFeaturePlan(featureId: string): Promise<GetPlanResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const repo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await repo.findById(featureId);\n\n if (!feature) {\n return { error: 'Feature not found' };\n }\n\n if (!feature.plan) {\n return { plan: undefined };\n }\n\n const plan: PlanData = {\n state: feature.plan.state,\n overview: feature.plan.overview,\n tasks: feature.plan.tasks.map((t) => ({\n title: t.title ?? '',\n description: t.description ?? '',\n state: t.state,\n actionItems: (t.actionItems ?? []).map((ai) => ({\n name: ai.name,\n description: ai.description,\n acceptanceCriteria: (ai.acceptanceCriteria ?? []).map((ac) => ({\n description: ac.description,\n verified: ac.verified,\n })),\n })),\n })),\n };\n\n return { plan };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load feature plan';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RebaseFeatureOnMainUseCase } from '@shepai/core/application/use-cases/features/rebase-feature-on-main.use-case';\n\nexport async function rebaseFeature(\n featureId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!featureId?.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<RebaseFeatureOnMainUseCase>('RebaseFeatureOnMainUseCase');\n await useCase.execute(featureId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to rebase feature';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\n/**\n * Fetches full FeatureNodeData for a given feature ID.\n * Used by the drawer for targeted data syncing without triggering\n * a full router.refresh() / server component re-render.\n *\n * CI status and mergeable status are read from the DB (already updated\n * by PrSyncWatcherService) instead of making duplicate GitHub API calls.\n */\nexport async function getFeatureDrawerData(featureId: string): Promise<FeatureNodeData | null> {\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // CI status and mergeable status are read from the feature record (updated by\n // PrSyncWatcherService every 30s) — no duplicate GitHub API calls needed.\n // Only getDefaultBranch and getRemoteUrl are kept as they are local git operations.\n const [repo, baseBranch, artifact, remoteUrl] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n ]);\n\n const { workflow } = getSettings();\n\n return buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n enableEvidence: workflow.enableEvidence,\n commitEvidence: workflow.commitEvidence,\n hideCiStatus: workflow.hideCiStatus,\n });\n } catch {\n return null;\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetBranchSyncStatusUseCase } from '@shepai/core/application/use-cases/features/get-branch-sync-status.use-case';\n\nexport async function getBranchSyncStatus(featureId: string): Promise<{\n success: boolean;\n data?: { ahead: number; behind: number; baseBranch: string; checkedAt: string };\n error?: string;\n}> {\n if (!featureId?.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetBranchSyncStatusUseCase>('GetBranchSyncStatusUseCase');\n const result = await useCase.execute(featureId);\n return {\n success: true,\n data: {\n ...result,\n checkedAt: new Date().toISOString(),\n },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to get branch sync status';\n return { success: false, error: message };\n }\n}\n"],"names":[],"mappings":"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"}
|
package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[84095,56799,80496,93225,41872,9959,79124,10528,50845,26604,54723,18942,42886,49560,39353,29207,a=>{"use strict";var b=a.i(92658),c=a.i(50227),d=a.i(33244),e=a.i(96380),f=a.i(12581);async function g(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};let g=(0,d.getSettings)().environment.defaultEditor,h=(0,e.resolve)("LaunchIdeUseCase"),i=await h.execute({editorId:g,repositoryPath:b,branch:f,checkAvailability:!0});return i.ok?{success:!0,editor:i.editorName,path:i.worktreePath}:{success:!1,error:i.message}}(0,f.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"406047ad9e25cc904f815b38420b2fb84a680c0270",null),a.s(["openIde",()=>g],84095);var h=a.i(2157),i=a.i(60526),j=a.i(74533),k=a.i(29918);let l={darwin:{cmd:"open",args:a=>["-a","Terminal",a]},linux:{cmd:"x-terminal-emulator",args:a=>[`--working-directory=${a}`]},win32:{cmd:"cmd.exe",args:a=>["/c","start","powershell","-NoExit","-Command",`Set-Location "${a}"`]}};async function m(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};try{let a=(0,d.getSettings)(),c=a.environment.shellPreference,g=a.environment.terminalPreference??"system",m=f?(0,k.computeWorktreePath)(b,f):b;if(!(0,h.existsSync)(m))return{success:!1,error:`Path does not exist: ${m}`};if("system"!==g)try{let a=(0,e.resolve)("IToolInstallerService").getTerminalOpenConfig(g);if(a?.openDirectory.includes("{dir}")){let b=a.openDirectory.replace("{dir}",m);if(a.shell){let a=(0,j.spawn)(b,[],{detached:!0,stdio:"ignore",shell:!0});a.on("error",()=>void 0),a.unref()}else{let[a,...c]=b.split(/\s+/),d=(0,j.spawn)(a,c,{detached:!0,stdio:"ignore"});d.on("error",()=>void 0),d.unref()}return{success:!0,path:m,shell:c}}}catch{}let n=l[(0,i.platform)()];if(!n)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let o=(0,j.spawn)(n.cmd,n.args(m),{detached:!0,stdio:"ignore"});return o.on("error",()=>void 0),o.unref(),{success:!0,path:m,shell:c}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open shell"}}}(0,f.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"4077659655a2dfe11c9ad651711f8bdc7abd4d89d1",null),a.s(["openShell",()=>m],56799);let n={darwin:{cmd:"open",args:a=>[a]},linux:{cmd:"xdg-open",args:a=>[a]},win32:{cmd:"explorer",args:a=>[a]}};async function o(a){if(!a||!(0,c.isAbsolute)(a))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,h.existsSync)(a))return{success:!1,error:"Directory not found"};let b=n[(0,i.platform)()];if(!b)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let d=(0,c.normalize)(a),e=(0,j.spawn)(b.cmd,b.args(d),{detached:!0,stdio:"ignore"});return e.on("error",()=>void 0),e.unref(),{success:!0,path:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open folder"}}}async function p(a){if(!a?.trim())return{success:!1,error:"Repository id is required"};try{let b=(0,e.resolve)("SyncRepositoryMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to sync repository"}}}async function q(){try{return(0,d.getSettings)().onboardingComplete}catch{return!1}}(0,f.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"4039b1c5e6d6e9850ffb5471f1c3ab849191570634",null),a.s(["openFolder",()=>o],80496),(0,f.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"40118ca65cc86a1c46fffa4c424dcc549fb69e23ed",null),a.s(["syncRepository",()=>p],93225),(0,f.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"00981d30f6fbeef6ea329dd21266b510840ab6e4d0",null),a.s(["isAgentSetupComplete",()=>q],41872);var r=a.i(37512);let s={"claude-code":"Claude Code",cursor:"Cursor Agent","gemini-cli":"Gemini CLI",aider:"Aider",continue:"Continue",dev:"Demo"},t={"claude-code":"claude-code",cursor:"cursor-cli","gemini-cli":"gemini-cli"},u={"claude-code":"claude",cursor:"cursor-agent","gemini-cli":"gemini"};async function v(){var a;let b;try{b=(0,d.getSettings)().agent.type}catch{return{agentType:"unknown",installed:!1,authenticated:!1,label:"Unknown",binaryName:null,installCommand:null,authCommand:null}}let f=s[b]??b,g=t[b]??null,k=u[b]??null;if(!g)return{agentType:b,installed:!0,authenticated:!0,label:f,binaryName:null,installCommand:null,authCommand:null};let l=!1,m=null;try{let a=(0,e.resolve)("ListToolsUseCase"),b=(await a.execute()).find(a=>a.id===g);l=b?.status.status==="available",m=b?.installCommand??null}catch{l=!1}if(!l)return{agentType:b,installed:!1,authenticated:!1,label:f,binaryName:k,installCommand:m,authCommand:k?`Install ${f} first`:null};if(!function(a){let b=(0,i.homedir)();switch(a){case"claude-code":{if(process.env.ANTHROPIC_API_KEY||process.env.CLAUDE_CODE_USE_BEDROCK||process.env.CLAUDE_CODE_USE_VERTEX||process.env.CLAUDE_CODE_OAUTH_TOKEN)return!0;let a=(0,c.join)(b,".claude",".credentials.json");return(0,h.existsSync)(a)}case"cursor":{if(process.env.CURSOR_API_KEY)return!0;let a=(0,c.join)(b,".cursor");return(0,h.existsSync)(a)}case"gemini-cli":{if(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||process.env.GOOGLE_APPLICATION_CREDENTIALS)return!0;let a=(0,c.join)(b,".gemini","google_accounts.json");return(0,h.existsSync)(a)}default:return!0}}(b))return{agentType:b,installed:!0,authenticated:!1,label:f,binaryName:k,installCommand:m,authCommand:k};let n=!0;return k&&(n=await (a=b,new Promise(b=>{let c,d;switch(a){case"claude-code":c=k,d=["auth","status"];break;case"cursor":c=k,d=["status"];break;default:b(!0);return}try{let a=r.IS_WINDOWS?{timeout:5e3,windowsHide:!0}:{timeout:5e3};(0,j.execFile)(c,d,a,a=>{b(!a)})}catch{b(!1)}}))),{agentType:b,installed:!0,authenticated:n,label:f,binaryName:k,installCommand:m,authCommand:n?null:k}}function w(a,b){return new Promise(c=>{try{let d=r.IS_WINDOWS?{timeout:5e3,windowsHide:!0}:{timeout:5e3};(0,j.execFile)(a,b,d,(a,b)=>{if(a)return void c({installed:!1,version:null});let d=b.match(/(\d+\.\d+(?:\.\d+)?)/);c({installed:!0,version:d?.[1]??null})})}catch{c({installed:!1,version:null})}})}async function x(){let[a,b,c]=await Promise.all([w("git",["--version"]),w("gh",["--version"]),(async()=>{try{let a=(0,e.resolve)("ListToolsUseCase");return await a.execute()}catch{return[]}})()]),d=c.find(a=>"git"===a.id),f=c.find(a=>"gh"===a.id);return{git:{...a,installCommand:d?.installCommand??null,installUrl:d?.website??"https://git-scm.com"},gh:{...b,installCommand:f?.installCommand??null,installUrl:f?.website??"https://cli.github.com"}}}async function y(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("ArchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to archive feature"}}}async function z(a,b,c,d){if(!a?.trim())return{error:"id is required"};try{let f=(0,e.resolve)("DeleteFeatureUseCase"),g={};return void 0!==b&&(g.cleanup=b),void 0!==c&&(g.cascadeDelete=c),void 0!==d&&(g.closePr=d),{feature:Object.keys(g).length>0?await f.execute(a,g):await f.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete feature"}}}async function A(a){if(!a.trim())return{resumed:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("ResumeFeatureUseCase");return await b.execute(a),{resumed:!0}}catch(a){return{resumed:!1,error:a instanceof Error?a.message:"Failed to resume feature"}}}async function B(a){if(!a.trim())return{started:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("StartFeatureUseCase");return await b.execute(a),{started:!0}}catch(a){return{started:!1,error:a instanceof Error?a.message:"Failed to start feature"}}}async function C(a){if(!a.trim())return{stopped:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("IAgentRunRepository"),c=(await b.list()).find(b=>b.featureId===a&&"completed"!==b.status&&"failed"!==b.status&&"interrupted"!==b.status&&"cancelled"!==b.status);if(!c)return{stopped:!1,error:"No active agent run found for this feature"};let d=(0,e.resolve)("StopAgentRunUseCase"),f=await d.execute(c.id);if(!f.stopped)return{stopped:!1,error:f.reason};return{stopped:!0}}catch(a){return{stopped:!1,error:a instanceof Error?a.message:"Failed to stop agent"}}}async function D(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("UnarchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to unarchive feature"}}}async function E(a){let{path:b,name:c}=a;if(!b?.trim())return{error:"path is required"};try{let a=(0,e.resolve)("AddRepositoryUseCase");return{repository:await a.execute({path:b,name:c})}}catch(a){return{error:a instanceof Error?a.message:"Failed to add repository"}}}async function F(a){if(!a?.trim())return{success:!1,error:"id is required"};try{let b=(0,e.resolve)("DeleteRepositoryUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to delete repository"}}}async function G(a){let b=(0,e.resolve)("IFeatureRepository"),c=await b.findById(a);return c?{name:c.name,description:c.description}:null}(0,f.ensureServerEntryExports)([v]),(0,b.registerServerReference)(v,"00e4df4a56e1ef25e90e0312289dd0a092dcb7006e",null),a.s(["checkAgentAuth",()=>v],9959),(0,f.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"00b2d58c7821453da13888a804cffb6645cfa11de0",null),a.s(["checkToolStatus",()=>x],79124),(0,f.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"40b1c99ed4516218eefa27dea7831bb47f6fdf8bb4",null),a.s(["archiveFeature",()=>y],10528),(0,f.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"78e49f32eae268450494c568ebda7c5e0c50fd4cc7",null),a.s(["deleteFeature",()=>z],50845),(0,f.ensureServerEntryExports)([A]),(0,b.registerServerReference)(A,"40afd73392d09bea0044d18de863b1e2ba65fe9cff",null),a.s(["resumeFeature",()=>A],26604),(0,f.ensureServerEntryExports)([B]),(0,b.registerServerReference)(B,"4037faa6fd309a58081dfa2e8179544f4f20fdc89b",null),a.s(["startFeature",()=>B],54723),(0,f.ensureServerEntryExports)([C]),(0,b.registerServerReference)(C,"40fca3c7e60828c481caf02cd05713e18499a31c8a",null),a.s(["stopFeature",()=>C],18942),(0,f.ensureServerEntryExports)([D]),(0,b.registerServerReference)(D,"40270f97ae5cc1d88de06a3dc06f7f904c1c289a02",null),a.s(["unarchiveFeature",()=>D],42886),(0,f.ensureServerEntryExports)([E]),(0,b.registerServerReference)(E,"40ec1f01bede7dd00a93623cce56f850382f2d7845",null),a.s(["addRepository",()=>E],49560),(0,f.ensureServerEntryExports)([F]),(0,b.registerServerReference)(F,"4033c22132655a34a5f0a81713416141d9b72186df",null),a.s(["deleteRepository",()=>F],39353),(0,f.ensureServerEntryExports)([G]),(0,b.registerServerReference)(G,"40076b29d3594165b0f0faa0973c51704384ee8d08",null),a.s(["getFeatureMetadata",()=>G],29207)}];
|
|
1
|
+
module.exports=[84095,56799,80496,93225,41872,9959,79124,10528,50845,26604,54723,18942,42886,49560,39353,29207,a=>{"use strict";var b=a.i(92658),c=a.i(50227),d=a.i(33244),e=a.i(96380),f=a.i(12581);async function g(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};let g=(0,d.getSettings)().environment.defaultEditor,h=(0,e.resolve)("LaunchIdeUseCase"),i=await h.execute({editorId:g,repositoryPath:b,branch:f,checkAvailability:!0});return i.ok?{success:!0,editor:i.editorName,path:i.worktreePath}:{success:!1,error:i.message}}(0,f.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"4055459b7d8f9c473a9df23fa365544767c3ffc7ed",null),a.s(["openIde",()=>g],84095);var h=a.i(2157),i=a.i(60526),j=a.i(74533),k=a.i(29918);let l={darwin:{cmd:"open",args:a=>["-a","Terminal",a]},linux:{cmd:"x-terminal-emulator",args:a=>[`--working-directory=${a}`]},win32:{cmd:"cmd.exe",args:a=>["/c","start","powershell","-NoExit","-Command",`Set-Location "${a}"`]}};async function m(a){let{repositoryPath:b,branch:f}=a;if(!b||!(0,c.isAbsolute)(b))return{success:!1,error:"repositoryPath must be an absolute path"};try{let a=(0,d.getSettings)(),c=a.environment.shellPreference,g=a.environment.terminalPreference??"system",m=f?(0,k.computeWorktreePath)(b,f):b;if(!(0,h.existsSync)(m))return{success:!1,error:`Path does not exist: ${m}`};if("system"!==g)try{let a=(0,e.resolve)("IToolInstallerService").getTerminalOpenConfig(g);if(a?.openDirectory.includes("{dir}")){let b=a.openDirectory.replace("{dir}",m);if(a.shell){let a=(0,j.spawn)(b,[],{detached:!0,stdio:"ignore",shell:!0});a.on("error",()=>void 0),a.unref()}else{let[a,...c]=b.split(/\s+/),d=(0,j.spawn)(a,c,{detached:!0,stdio:"ignore"});d.on("error",()=>void 0),d.unref()}return{success:!0,path:m,shell:c}}}catch{}let n=l[(0,i.platform)()];if(!n)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let o=(0,j.spawn)(n.cmd,n.args(m),{detached:!0,stdio:"ignore"});return o.on("error",()=>void 0),o.unref(),{success:!0,path:m,shell:c}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open shell"}}}(0,f.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"4069b29f0b11125d8379156cc03729f1e568791c4c",null),a.s(["openShell",()=>m],56799);let n={darwin:{cmd:"open",args:a=>[a]},linux:{cmd:"xdg-open",args:a=>[a]},win32:{cmd:"explorer",args:a=>[a]}};async function o(a){if(!a||!(0,c.isAbsolute)(a))return{success:!1,error:"repositoryPath must be an absolute path"};try{if(!(0,h.existsSync)(a))return{success:!1,error:"Directory not found"};let b=n[(0,i.platform)()];if(!b)return{success:!1,error:`Unsupported platform: ${(0,i.platform)()}`};let d=(0,c.normalize)(a),e=(0,j.spawn)(b.cmd,b.args(d),{detached:!0,stdio:"ignore"});return e.on("error",()=>void 0),e.unref(),{success:!0,path:a}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to open folder"}}}async function p(a){if(!a?.trim())return{success:!1,error:"Repository id is required"};try{let b=(0,e.resolve)("SyncRepositoryMainUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to sync repository"}}}async function q(){try{return(0,d.getSettings)().onboardingComplete}catch{return!1}}(0,f.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"40dfbe45e261d17cefced04059ae58019ee5cf22b1",null),a.s(["openFolder",()=>o],80496),(0,f.ensureServerEntryExports)([p]),(0,b.registerServerReference)(p,"40bd91de31ca77f0591ad914d81239d90b6817c17e",null),a.s(["syncRepository",()=>p],93225),(0,f.ensureServerEntryExports)([q]),(0,b.registerServerReference)(q,"002bd9d039bf85259358f1aa4800bb234b060bec3a",null),a.s(["isAgentSetupComplete",()=>q],41872);var r=a.i(37512);let s={"claude-code":"Claude Code",cursor:"Cursor Agent","gemini-cli":"Gemini CLI",aider:"Aider",continue:"Continue",dev:"Demo"},t={"claude-code":"claude-code",cursor:"cursor-cli","gemini-cli":"gemini-cli"},u={"claude-code":"claude",cursor:"cursor-agent","gemini-cli":"gemini"};async function v(){var a;let b;try{b=(0,d.getSettings)().agent.type}catch{return{agentType:"unknown",installed:!1,authenticated:!1,label:"Unknown",binaryName:null,installCommand:null,authCommand:null}}let f=s[b]??b,g=t[b]??null,k=u[b]??null;if(!g)return{agentType:b,installed:!0,authenticated:!0,label:f,binaryName:null,installCommand:null,authCommand:null};let l=!1,m=null;try{let a=(0,e.resolve)("ListToolsUseCase"),b=(await a.execute()).find(a=>a.id===g);l=b?.status.status==="available",m=b?.installCommand??null}catch{l=!1}if(!l)return{agentType:b,installed:!1,authenticated:!1,label:f,binaryName:k,installCommand:m,authCommand:k?`Install ${f} first`:null};if(!function(a){let b=(0,i.homedir)();switch(a){case"claude-code":{if(process.env.ANTHROPIC_API_KEY||process.env.CLAUDE_CODE_USE_BEDROCK||process.env.CLAUDE_CODE_USE_VERTEX||process.env.CLAUDE_CODE_OAUTH_TOKEN)return!0;let a=(0,c.join)(b,".claude",".credentials.json");return(0,h.existsSync)(a)}case"cursor":{if(process.env.CURSOR_API_KEY)return!0;let a=(0,c.join)(b,".cursor");return(0,h.existsSync)(a)}case"gemini-cli":{if(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||process.env.GOOGLE_APPLICATION_CREDENTIALS)return!0;let a=(0,c.join)(b,".gemini","google_accounts.json");return(0,h.existsSync)(a)}default:return!0}}(b))return{agentType:b,installed:!0,authenticated:!1,label:f,binaryName:k,installCommand:m,authCommand:k};let n=!0;return k&&(n=await (a=b,new Promise(b=>{let c,d;switch(a){case"claude-code":c=k,d=["auth","status"];break;case"cursor":c=k,d=["status"];break;default:b(!0);return}try{let a=r.IS_WINDOWS?{timeout:5e3,windowsHide:!0}:{timeout:5e3};(0,j.execFile)(c,d,a,a=>{b(!a)})}catch{b(!1)}}))),{agentType:b,installed:!0,authenticated:n,label:f,binaryName:k,installCommand:m,authCommand:n?null:k}}function w(a,b){return new Promise(c=>{try{let d=r.IS_WINDOWS?{timeout:5e3,windowsHide:!0}:{timeout:5e3};(0,j.execFile)(a,b,d,(a,b)=>{if(a)return void c({installed:!1,version:null});let d=b.match(/(\d+\.\d+(?:\.\d+)?)/);c({installed:!0,version:d?.[1]??null})})}catch{c({installed:!1,version:null})}})}async function x(){let[a,b,c]=await Promise.all([w("git",["--version"]),w("gh",["--version"]),(async()=>{try{let a=(0,e.resolve)("ListToolsUseCase");return await a.execute()}catch{return[]}})()]),d=c.find(a=>"git"===a.id),f=c.find(a=>"gh"===a.id);return{git:{...a,installCommand:d?.installCommand??null,installUrl:d?.website??"https://git-scm.com"},gh:{...b,installCommand:f?.installCommand??null,installUrl:f?.website??"https://cli.github.com"}}}async function y(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("ArchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to archive feature"}}}async function z(a,b,c,d){if(!a?.trim())return{error:"id is required"};try{let f=(0,e.resolve)("DeleteFeatureUseCase"),g={};return void 0!==b&&(g.cleanup=b),void 0!==c&&(g.cascadeDelete=c),void 0!==d&&(g.closePr=d),{feature:Object.keys(g).length>0?await f.execute(a,g):await f.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to delete feature"}}}async function A(a){if(!a.trim())return{resumed:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("ResumeFeatureUseCase");return await b.execute(a),{resumed:!0}}catch(a){return{resumed:!1,error:a instanceof Error?a.message:"Failed to resume feature"}}}async function B(a){if(!a.trim())return{started:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("StartFeatureUseCase");return await b.execute(a),{started:!0}}catch(a){return{started:!1,error:a instanceof Error?a.message:"Failed to start feature"}}}async function C(a){if(!a.trim())return{stopped:!1,error:"Feature id is required"};try{let b=(0,e.resolve)("IAgentRunRepository"),c=(await b.list()).find(b=>b.featureId===a&&"completed"!==b.status&&"failed"!==b.status&&"interrupted"!==b.status&&"cancelled"!==b.status);if(!c)return{stopped:!1,error:"No active agent run found for this feature"};let d=(0,e.resolve)("StopAgentRunUseCase"),f=await d.execute(c.id);if(!f.stopped)return{stopped:!1,error:f.reason};return{stopped:!0}}catch(a){return{stopped:!1,error:a instanceof Error?a.message:"Failed to stop agent"}}}async function D(a){if(!a?.trim())return{error:"id is required"};try{let b=(0,e.resolve)("UnarchiveFeatureUseCase");return{feature:await b.execute(a)}}catch(a){return{error:a instanceof Error?a.message:"Failed to unarchive feature"}}}async function E(a){let{path:b,name:c}=a;if(!b?.trim())return{error:"path is required"};try{let a=(0,e.resolve)("AddRepositoryUseCase");return{repository:await a.execute({path:b,name:c})}}catch(a){return{error:a instanceof Error?a.message:"Failed to add repository"}}}async function F(a){if(!a?.trim())return{success:!1,error:"id is required"};try{let b=(0,e.resolve)("DeleteRepositoryUseCase");return await b.execute(a),{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Failed to delete repository"}}}async function G(a){let b=(0,e.resolve)("IFeatureRepository"),c=await b.findById(a);return c?{name:c.name,description:c.description}:null}(0,f.ensureServerEntryExports)([v]),(0,b.registerServerReference)(v,"001d4298008120e9e4b44643116f435aef9ed5472a",null),a.s(["checkAgentAuth",()=>v],9959),(0,f.ensureServerEntryExports)([x]),(0,b.registerServerReference)(x,"00a8f96b6f125327b463e23bb37040536285c9b40e",null),a.s(["checkToolStatus",()=>x],79124),(0,f.ensureServerEntryExports)([y]),(0,b.registerServerReference)(y,"404e314823ac28d04d8ba7428ec35c10ae4c6aea1b",null),a.s(["archiveFeature",()=>y],10528),(0,f.ensureServerEntryExports)([z]),(0,b.registerServerReference)(z,"78b5ec6793c5a1c7e31d88e44be4f481faa509f445",null),a.s(["deleteFeature",()=>z],50845),(0,f.ensureServerEntryExports)([A]),(0,b.registerServerReference)(A,"40d0f16b3745b14e9a00e50c7b5dfb952d275228ef",null),a.s(["resumeFeature",()=>A],26604),(0,f.ensureServerEntryExports)([B]),(0,b.registerServerReference)(B,"4019f977bc768f4592de03c17f3bd5d1fdf9765aa3",null),a.s(["startFeature",()=>B],54723),(0,f.ensureServerEntryExports)([C]),(0,b.registerServerReference)(C,"40baa0fe577b5173696cecc767dd6d206f5e712a45",null),a.s(["stopFeature",()=>C],18942),(0,f.ensureServerEntryExports)([D]),(0,b.registerServerReference)(D,"40b859bbc1c21f0a71aeaabd001710059eea7e979f",null),a.s(["unarchiveFeature",()=>D],42886),(0,f.ensureServerEntryExports)([E]),(0,b.registerServerReference)(E,"400103650b27f94063e82828515f24957d840b96ef",null),a.s(["addRepository",()=>E],49560),(0,f.ensureServerEntryExports)([F]),(0,b.registerServerReference)(F,"4038ba1e6a3b9df18af5a9df25282740177890e4a6",null),a.s(["deleteRepository",()=>F],39353),(0,f.ensureServerEntryExports)([G]),(0,b.registerServerReference)(G,"404a4fcdc4cab3537fdbbd252a2aa41d1bcfde767c",null),a.s(["getFeatureMetadata",()=>G],29207)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map
|