@shepai/cli 1.129.3 → 1.129.4-pr396.5d604d5
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/FeatureFlags.yaml +5 -0
- package/dist/packages/core/src/application/ports/output/agents/phase-timing-repository.interface.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/agents/phase-timing-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +73 -5
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +6 -4
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts +28 -0
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +81 -0
- package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts +16 -0
- package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/repositories/sync-repository-main.use-case.js +43 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +4 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +15 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
- 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 +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/042-add-feature-flag-git-rebase-sync.js +17 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts +35 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.prompt.js +66 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts +42 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/conflict-resolution/conflict-resolution.service.js +169 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +21 -5
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +20 -4
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +71 -10
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +2 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts +8 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.js +16 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +6 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +134 -0
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +5 -12
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +1 -0
- package/dist/src/presentation/web/app/actions/rebase-feature.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/rebase-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/rebase-feature.js +16 -0
- package/dist/src/presentation/web/app/actions/sync-repository.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/sync-repository.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/sync-repository.js +16 -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 +22 -5
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +4 -4
- package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts +2 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.js +3 -2
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts +4 -0
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +32 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +17 -4
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +4 -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 +3 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +4 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +8 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +6 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +30 -0
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/open-action-menu/open-action-menu.stories.js +3 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -3
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts +4 -0
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +11 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
- 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 +5 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
- 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 +1 -0
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +5 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +63 -48
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +63 -48
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +90 -60
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +90 -60
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +59 -44
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +63 -48
- package/web/.next/server/app/(dashboard)/create/page.js +2 -2
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +90 -60
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +90 -60
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +59 -44
- package/web/.next/server/app/(dashboard)/page.js +2 -2
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +59 -44
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- 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 +8 -8
- 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 +8 -8
- 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 +3 -3
- 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/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__bc532286._.js.map +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/[root-of-the-server]__0e842eba._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e842eba._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__39ecb785._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__39ecb785._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__465c0deb._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__465c0deb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__60684242._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__60684242._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__62cdea24._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b6d1e18._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b6d1e18._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8f6c27af._.js +6 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8f6c27af._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__910e9de5._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__910e9de5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a04af228._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a04af228._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a21eef5a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a32728d0._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a32728d0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d6ab9c36._.js +6 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d6ab9c36._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f2eb7d62._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f2eb7d62._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3036814._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3036814._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01046927._.js +2 -2
- package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6f295a50._.js +3 -0
- package/web/.next/server/chunks/ssr/_6f295a50._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
- package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_324f08fa._.js → _b09cd608._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_324f08fa._.js.map → _b09cd608._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.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__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a751c99b._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_79c5e358._.js.map → src_presentation_web_a751c99b._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -0
- 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_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +410 -296
- package/web/.next/static/chunks/{a4d0f5c8adbd573e.js → 1469da8ddd6eea90.js} +1 -1
- package/web/.next/static/chunks/1642a69a3baf7820.js +2 -0
- package/web/.next/static/chunks/31ddce9ebee38ab1.css +1 -0
- package/web/.next/static/chunks/{75424b9eb679261a.js → 4aeed32883643436.js} +1 -1
- package/web/.next/static/chunks/{4d40135dc75a7412.js → 74fde105df75b977.js} +1 -1
- package/web/.next/static/chunks/{97778646dde1a546.js → 997a568d8ad04a23.js} +1 -1
- package/web/.next/static/chunks/{ef48a6beeb40b304.js → a063447a4428f722.js} +1 -1
- package/web/.next/static/chunks/{d2b3baac392d5097.js → a495659415f138d6.js} +1 -1
- package/web/.next/static/chunks/{21a98ed37526a704.js → b9e557204db8d0b3.js} +1 -1
- package/web/.next/static/chunks/bfda4e4194a4a633.js +1 -0
- package/web/.next/static/chunks/{140810c2538c85aa.js → df75002e2d1c7531.js} +2 -2
- package/web/.next/static/chunks/{a36ddda5a860c371.js → e5c346dccbba2214.js} +1 -1
- package/web/.next/static/chunks/{d1238d67f4b7fa61.js → f1801a777780b4e9.js} +1 -1
- package/web/.next/static/chunks/{d34a91958ca566fa.js → fb3e66702c475c87.js} +1 -1
- package/web/.next/static/chunks/{d0fb8a76a89bd016.js → febbfdc31eef505b.js} +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_8302fcae._.js +0 -3
- package/web/.next/server/chunks/ssr/_8302fcae._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_79c5e358._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js.map +0 -1
- package/web/.next/static/chunks/da484d44874006a2.css +0 -1
- package/web/.next/static/chunks/dc314fb7519088cf.js +0 -2
- package/web/.next/static/chunks/eb9841ec4d80af01.js +0 -1
- /package/web/.next/static/{8qbj3kELZ61JA30sTIVee → 9XEfk6BBAe6EEGca_Yisr}/_buildManifest.js +0 -0
- /package/web/.next/static/{8qbj3kELZ61JA30sTIVee → 9XEfk6BBAe6EEGca_Yisr}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{8qbj3kELZ61JA30sTIVee → 9XEfk6BBAe6EEGca_Yisr}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-timing-context.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wEAAwE,CAAC;AAMrH;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAG7F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AA+BD,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxB;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"phase-timing-context.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wEAAwE,CAAC;AAMrH;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAG7F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AA+BD,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxB;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpF"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.js
CHANGED
|
@@ -114,6 +114,7 @@ export async function recordPhaseEnd(timingId, durationMs, metadata) {
|
|
|
114
114
|
...(metadata?.durationApiMs != null && { durationApiMs: BigInt(metadata.durationApiMs) }),
|
|
115
115
|
...(metadata?.exitCode != null && { exitCode: metadata.exitCode }),
|
|
116
116
|
...(metadata?.errorMessage != null && { errorMessage: metadata.errorMessage }),
|
|
117
|
+
...(metadata?.prompt != null && { prompt: metadata.prompt }),
|
|
117
118
|
});
|
|
118
119
|
}
|
|
119
120
|
catch {
|
|
@@ -149,6 +150,21 @@ export async function recordLifecycleEvent(phase, explicitRunId, explicitRepo) {
|
|
|
149
150
|
// Swallow — lifecycle event recording is non-fatal
|
|
150
151
|
}
|
|
151
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Update a phase timing record with the prompt text.
|
|
155
|
+
* Useful when the prompt is built after recordPhaseStart (e.g. merge node).
|
|
156
|
+
* No-op if timingId is null or context is not set.
|
|
157
|
+
*/
|
|
158
|
+
export async function updatePhasePrompt(timingId, prompt) {
|
|
159
|
+
if (!timingId || !contextRepository)
|
|
160
|
+
return;
|
|
161
|
+
try {
|
|
162
|
+
await contextRepository.update(timingId, { prompt });
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Swallow — prompt update failure is non-fatal
|
|
166
|
+
}
|
|
167
|
+
}
|
|
152
168
|
/**
|
|
153
169
|
* Record the start of an approval wait. Sets waitingApprovalAt on the timing record.
|
|
154
170
|
* No-op if timingId is null or context is not set.
|
|
@@ -45,5 +45,11 @@ export declare class GitPrService implements IGitPrService {
|
|
|
45
45
|
private parseGhError;
|
|
46
46
|
private parsePrNumberFromUrl;
|
|
47
47
|
private parseDiffStat;
|
|
48
|
+
syncMain(cwd: string, baseBranch: string): Promise<void>;
|
|
49
|
+
rebaseOnMain(cwd: string, featureBranch: string, baseBranch: string): Promise<void>;
|
|
50
|
+
getConflictedFiles(cwd: string): Promise<string[]>;
|
|
51
|
+
stageFiles(cwd: string, files: string[]): Promise<void>;
|
|
52
|
+
rebaseContinue(cwd: string): Promise<void>;
|
|
53
|
+
rebaseAbort(cwd: string): Promise<void>;
|
|
48
54
|
}
|
|
49
55
|
//# sourceMappingURL=git-pr.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -609,6 +609,14 @@ let GitPrService = class GitPrService {
|
|
|
609
609
|
parseGitError(error) {
|
|
610
610
|
const message = error instanceof Error ? error.message : String(error);
|
|
611
611
|
const cause = error instanceof Error ? error : undefined;
|
|
612
|
+
// Rebase-specific: detect "CONFLICT" during rebase operations
|
|
613
|
+
if (message.includes('CONFLICT') && message.includes('rebase')) {
|
|
614
|
+
return new GitPrError(message, GitPrErrorCode.REBASE_CONFLICT, cause);
|
|
615
|
+
}
|
|
616
|
+
// Sync-specific: non-fast-forward or diverged branch
|
|
617
|
+
if (message.includes('non-fast-forward') || message.includes('diverged')) {
|
|
618
|
+
return new GitPrError(message, GitPrErrorCode.SYNC_FAILED, cause);
|
|
619
|
+
}
|
|
612
620
|
if (message.includes('rejected') || message.includes('conflict')) {
|
|
613
621
|
return new GitPrError(message, GitPrErrorCode.MERGE_CONFLICT, cause);
|
|
614
622
|
}
|
|
@@ -649,6 +657,132 @@ let GitPrService = class GitPrService {
|
|
|
649
657
|
commitCount,
|
|
650
658
|
};
|
|
651
659
|
}
|
|
660
|
+
// --- Rebase & Sync operations ---
|
|
661
|
+
async syncMain(cwd, baseBranch) {
|
|
662
|
+
try {
|
|
663
|
+
// Detect current branch
|
|
664
|
+
const { stdout } = await this.execFile('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd });
|
|
665
|
+
const currentBranch = stdout.trim();
|
|
666
|
+
if (currentBranch === baseBranch) {
|
|
667
|
+
// On the base branch — use git pull --ff-only
|
|
668
|
+
await this.execFile('git', ['pull', '--ff-only', 'origin', baseBranch], { cwd });
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
// On a different branch — fetch the remote ref only (updates origin/<baseBranch>).
|
|
672
|
+
// We intentionally do NOT update the local <baseBranch> ref because it may be
|
|
673
|
+
// checked out in another worktree, which causes git to refuse the update with:
|
|
674
|
+
// "fatal: refusing to fetch into branch 'refs/heads/main' checked out at ..."
|
|
675
|
+
await this.execFile('git', ['fetch', 'origin', baseBranch], { cwd });
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
catch (error) {
|
|
679
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
680
|
+
const cause = error instanceof Error ? error : undefined;
|
|
681
|
+
if (message.includes('non-fast-forward') ||
|
|
682
|
+
message.includes('Not possible to fast-forward') ||
|
|
683
|
+
message.includes('diverged')) {
|
|
684
|
+
throw new GitPrError(`Cannot fast-forward '${baseBranch}': local branch has diverged from remote. ` +
|
|
685
|
+
`Resolve the divergence manually with 'git checkout ${baseBranch} && git reset --hard origin/${baseBranch}' ` +
|
|
686
|
+
`if you want to discard local changes on ${baseBranch}.`, GitPrErrorCode.SYNC_FAILED, cause);
|
|
687
|
+
}
|
|
688
|
+
throw new GitPrError(`Failed to sync '${baseBranch}' with remote: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
async rebaseOnMain(cwd, featureBranch, baseBranch) {
|
|
692
|
+
// Check for dirty worktree before starting
|
|
693
|
+
const dirty = await this.hasUncommittedChanges(cwd);
|
|
694
|
+
if (dirty) {
|
|
695
|
+
throw new GitPrError(`Cannot rebase: working directory has uncommitted changes. ` +
|
|
696
|
+
`Please commit or stash your changes before rebasing.`, GitPrErrorCode.GIT_ERROR);
|
|
697
|
+
}
|
|
698
|
+
// Checkout the feature branch
|
|
699
|
+
try {
|
|
700
|
+
await this.execFile('git', ['checkout', featureBranch], { cwd });
|
|
701
|
+
}
|
|
702
|
+
catch (error) {
|
|
703
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
704
|
+
const cause = error instanceof Error ? error : undefined;
|
|
705
|
+
if (message.includes('did not match') ||
|
|
706
|
+
message.includes('not a commit') ||
|
|
707
|
+
message.includes('pathspec')) {
|
|
708
|
+
throw new GitPrError(`Branch '${featureBranch}' not found.`, GitPrErrorCode.BRANCH_NOT_FOUND, cause);
|
|
709
|
+
}
|
|
710
|
+
throw new GitPrError(`Failed to checkout '${featureBranch}': ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
711
|
+
}
|
|
712
|
+
// Rebase onto origin/<baseBranch> (the remote-tracking ref).
|
|
713
|
+
// We use origin/<baseBranch> rather than the local <baseBranch> because:
|
|
714
|
+
// 1. syncMain fetches origin/<baseBranch> — it's always up-to-date
|
|
715
|
+
// 2. The local <baseBranch> may be checked out in another worktree and stale
|
|
716
|
+
const rebaseTarget = `origin/${baseBranch}`;
|
|
717
|
+
try {
|
|
718
|
+
await this.execFile('git', ['rebase', rebaseTarget], { cwd });
|
|
719
|
+
}
|
|
720
|
+
catch (error) {
|
|
721
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
722
|
+
const cause = error instanceof Error ? error : undefined;
|
|
723
|
+
// Detect rebase conflict from git stderr/exit code
|
|
724
|
+
if (message.includes('CONFLICT') || message.includes('could not apply')) {
|
|
725
|
+
// Get the list of conflicted files to include in the error message
|
|
726
|
+
let conflictedFiles = [];
|
|
727
|
+
try {
|
|
728
|
+
conflictedFiles = await this.getConflictedFiles(cwd);
|
|
729
|
+
}
|
|
730
|
+
catch {
|
|
731
|
+
// Failed to get conflicted files — still report the conflict
|
|
732
|
+
}
|
|
733
|
+
const fileList = conflictedFiles.length > 0 ? ` Conflicted files: ${conflictedFiles.join(', ')}` : '';
|
|
734
|
+
throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' encountered conflicts.${fileList}`, GitPrErrorCode.REBASE_CONFLICT, cause);
|
|
735
|
+
}
|
|
736
|
+
throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
async getConflictedFiles(cwd) {
|
|
740
|
+
try {
|
|
741
|
+
const { stdout } = await this.execFile('git', ['diff', '--name-only', '--diff-filter=U'], {
|
|
742
|
+
cwd,
|
|
743
|
+
});
|
|
744
|
+
return stdout
|
|
745
|
+
.trim()
|
|
746
|
+
.split('\n')
|
|
747
|
+
.filter((f) => f.length > 0)
|
|
748
|
+
.map((f) => f.replace(/\\/g, '/'));
|
|
749
|
+
}
|
|
750
|
+
catch (error) {
|
|
751
|
+
throw this.parseGitError(error);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
async stageFiles(cwd, files) {
|
|
755
|
+
try {
|
|
756
|
+
await this.execFile('git', ['add', ...files], { cwd });
|
|
757
|
+
}
|
|
758
|
+
catch (error) {
|
|
759
|
+
throw this.parseGitError(error);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
async rebaseContinue(cwd) {
|
|
763
|
+
try {
|
|
764
|
+
await this.execFile('git', ['rebase', '--continue'], {
|
|
765
|
+
cwd,
|
|
766
|
+
env: { ...process.env, GIT_EDITOR: 'true' },
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
catch (error) {
|
|
770
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
771
|
+
const cause = error instanceof Error ? error : undefined;
|
|
772
|
+
if (message.includes('CONFLICT') || message.includes('could not apply')) {
|
|
773
|
+
throw new GitPrError(`Rebase continue encountered new conflicts: ${message}`, GitPrErrorCode.REBASE_CONFLICT, cause);
|
|
774
|
+
}
|
|
775
|
+
throw this.parseGitError(error);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
async rebaseAbort(cwd) {
|
|
779
|
+
try {
|
|
780
|
+
await this.execFile('git', ['rebase', '--abort'], { cwd });
|
|
781
|
+
}
|
|
782
|
+
catch (error) {
|
|
783
|
+
throw this.parseGitError(error);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
652
786
|
};
|
|
653
787
|
GitPrService = __decorate([
|
|
654
788
|
injectable(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CA6DxF"}
|
|
@@ -31,13 +31,7 @@ async function refreshRepoGitInfo(repo) {
|
|
|
31
31
|
gitInfoCache.set(repo.path, { kind: 'not-a-repo', checkedAt: Date.now() });
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
if (cached?.kind === 'repo' && cached.sha === headSha) {
|
|
36
|
-
// HEAD unchanged — just bump checkedAt
|
|
37
|
-
cached.checkedAt = Date.now();
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
// HEAD changed — fetch branch + subject & author in parallel
|
|
34
|
+
// Fetch branch + subject & author in parallel
|
|
41
35
|
const [currentBranch, logLine] = await Promise.all([
|
|
42
36
|
gitCommand(repo.path, ['symbolic-ref', '--short', 'HEAD']),
|
|
43
37
|
gitCommand(repo.path, ['log', '-1', `--format=%s${FIELD_SEP}%an`]),
|
|
@@ -45,7 +39,8 @@ async function refreshRepoGitInfo(repo) {
|
|
|
45
39
|
if (!currentBranch)
|
|
46
40
|
return;
|
|
47
41
|
const [commitMessage, committer] = (logLine ?? '').split(FIELD_SEP);
|
|
48
|
-
// Behind count
|
|
42
|
+
// Behind count — always compute, even when on the default branch,
|
|
43
|
+
// because local main can be behind origin/main.
|
|
49
44
|
let behindCount = null;
|
|
50
45
|
const defaultBranchRef = await gitCommand(repo.path, [
|
|
51
46
|
'symbolic-ref',
|
|
@@ -53,7 +48,8 @@ async function refreshRepoGitInfo(repo) {
|
|
|
53
48
|
'refs/remotes/origin/HEAD',
|
|
54
49
|
]);
|
|
55
50
|
const defaultBranch = defaultBranchRef?.replace('origin/', '') ?? null;
|
|
56
|
-
if (defaultBranch
|
|
51
|
+
if (defaultBranch) {
|
|
52
|
+
// Compare current branch (or default branch itself) against origin
|
|
57
53
|
const behind = await gitCommand(repo.path, [
|
|
58
54
|
'rev-list',
|
|
59
55
|
'--count',
|
|
@@ -63,9 +59,6 @@ async function refreshRepoGitInfo(repo) {
|
|
|
63
59
|
if (isNaN(behindCount))
|
|
64
60
|
behindCount = null;
|
|
65
61
|
}
|
|
66
|
-
else {
|
|
67
|
-
behindCount = 0;
|
|
68
|
-
}
|
|
69
62
|
gitInfoCache.set(repo.path, {
|
|
70
63
|
kind: 'repo',
|
|
71
64
|
sha: headSha,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,KAAK,qBAAqB,GACtB;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAC1E;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuC9F"}
|
|
@@ -24,6 +24,7 @@ export async function getFeaturePhaseTimings(featureId) {
|
|
|
24
24
|
durationApiMs: t.durationApiMs != null ? Number(t.durationApiMs) : undefined,
|
|
25
25
|
exitCode: t.exitCode ?? undefined,
|
|
26
26
|
errorMessage: t.errorMessage ?? undefined,
|
|
27
|
+
prompt: t.prompt ?? undefined,
|
|
27
28
|
}));
|
|
28
29
|
// Read rejection feedback from spec.yaml
|
|
29
30
|
const rejectionFeedback = await readRejectionFeedback(featureId);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebase-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/rebase-feature.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
export async function rebaseFeature(featureId) {
|
|
4
|
+
if (!featureId?.trim()) {
|
|
5
|
+
return { success: false, error: 'Feature id is required' };
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const useCase = resolve('RebaseFeatureOnMainUseCase');
|
|
9
|
+
await useCase.execute(featureId);
|
|
10
|
+
return { success: true };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const message = error instanceof Error ? error.message : 'Failed to rebase feature';
|
|
14
|
+
return { success: false, error: message };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/sync-repository.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
export async function syncRepository(repositoryId) {
|
|
4
|
+
if (!repositoryId?.trim()) {
|
|
5
|
+
return { success: false, error: 'Repository id is required' };
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const useCase = resolve('SyncRepositoryMainUseCase');
|
|
9
|
+
await useCase.execute(repositoryId);
|
|
10
|
+
return { success: true };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const message = error instanceof Error ? error.message : 'Failed to sync repository';
|
|
14
|
+
return { success: false, error: message };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAkmB1F"}
|
package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js
CHANGED
|
@@ -113,6 +113,22 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
113
113
|
useEffect(() => {
|
|
114
114
|
setChatInput('');
|
|
115
115
|
}, [initialTab]);
|
|
116
|
+
// ── Artifact refresh key ─────────────────────────────────────────────
|
|
117
|
+
// Increments whenever state or lifecycle changes (via SSE or background sync),
|
|
118
|
+
// forcing useArtifactFetch to re-fetch even when the featureId stays the same.
|
|
119
|
+
// This fixes race conditions where the first fetch fires too early (e.g. merge
|
|
120
|
+
// data requested before the PR is created) and subsequent state updates don't
|
|
121
|
+
// trigger a re-fetch because the featureId dep hasn't changed.
|
|
122
|
+
const artifactRefreshKeyRef = useRef(0);
|
|
123
|
+
const prevStateRef = useRef(featureNode?.state);
|
|
124
|
+
const prevLifecycleRef = useRef(featureNode?.lifecycle);
|
|
125
|
+
if (featureNode?.state !== prevStateRef.current ||
|
|
126
|
+
featureNode?.lifecycle !== prevLifecycleRef.current) {
|
|
127
|
+
prevStateRef.current = featureNode?.state;
|
|
128
|
+
prevLifecycleRef.current = featureNode?.lifecycle;
|
|
129
|
+
artifactRefreshKeyRef.current += 1;
|
|
130
|
+
}
|
|
131
|
+
const artifactRefreshKey = artifactRefreshKeyRef.current;
|
|
116
132
|
// ── Data fetching ─────────────────────────────────────────────────────
|
|
117
133
|
const prdFeatureId = featureNode?.lifecycle === 'requirements' && featureNode?.state === 'action-required'
|
|
118
134
|
? featureNode.featureId
|
|
@@ -137,7 +153,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
137
153
|
setPrdSelections({});
|
|
138
154
|
setPrdDefaultSelections({});
|
|
139
155
|
setPrdData(null);
|
|
140
|
-
}, 'Failed to load questionnaire');
|
|
156
|
+
}, 'Failed to load questionnaire', artifactRefreshKey);
|
|
141
157
|
const techFeatureId = featureNode?.lifecycle === 'implementation' && featureNode?.state === 'action-required'
|
|
142
158
|
? featureNode.featureId
|
|
143
159
|
: null;
|
|
@@ -148,11 +164,11 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
148
164
|
}
|
|
149
165
|
if (result.techDecisions)
|
|
150
166
|
setTechData(result.techDecisions);
|
|
151
|
-
}, () => setTechData(null), 'Failed to load tech decisions');
|
|
167
|
+
}, () => setTechData(null), 'Failed to load tech decisions', artifactRefreshKey);
|
|
152
168
|
const isLoadingTechProduct = useArtifactFetch(techFeatureId, getFeatureArtifact, (result) => {
|
|
153
169
|
if (result.productDecisions)
|
|
154
170
|
setTechProductData(result.productDecisions);
|
|
155
|
-
}, () => setTechProductData(undefined));
|
|
171
|
+
}, () => setTechProductData(undefined), undefined, artifactRefreshKey);
|
|
156
172
|
const mergeFeatureId = featureNode?.lifecycle === 'review' &&
|
|
157
173
|
(featureNode?.state === 'action-required' || featureNode?.state === 'error')
|
|
158
174
|
? featureNode.featureId
|
|
@@ -163,7 +179,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
163
179
|
return;
|
|
164
180
|
}
|
|
165
181
|
setMergeData(result);
|
|
166
|
-
}, () => setMergeData(null), 'Failed to load merge review data');
|
|
182
|
+
}, () => setMergeData(null), 'Failed to load merge review data', artifactRefreshKey);
|
|
167
183
|
// ── Close guard ──────────────────────────────────────────────────────
|
|
168
184
|
const isChatDirty = chatInput.trim().length > 0;
|
|
169
185
|
const isPrdDirty = featureNode?.lifecycle === 'requirements' &&
|
|
@@ -303,6 +319,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
303
319
|
// ── Hooks (always called unconditionally per Rules of Hooks) ──────────
|
|
304
320
|
const featureActionsInput = featureNode?.repositoryPath && featureNode?.branch
|
|
305
321
|
? {
|
|
322
|
+
featureId: featureNode.featureId,
|
|
306
323
|
repositoryPath: featureNode.repositoryPath,
|
|
307
324
|
branch: featureNode.branch,
|
|
308
325
|
specPath: featureNode.specPath,
|
|
@@ -346,7 +363,7 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
|
|
|
346
363
|
...(featureNode.state === 'error' && { onRetry: handleRetry }),
|
|
347
364
|
...(featureNode.state === 'pending' && { onStart: handleStart }),
|
|
348
365
|
};
|
|
349
|
-
body = (_jsx(FeatureDrawerTabs, { featureNode: enrichedNode, featureId: featureNode.featureId, initialTab: view.initialTab, urlTab: urlTab, sseEvents: events, prdData: prdData, prdSelections: prdSelections, onPrdSelect: (qId, oId) => setPrdSelections((prev) => ({ ...prev, [qId]: oId })), onPrdApprove: handlePrdApprove, onPrdReject: handlePrdReject, isPrdLoading: isLoadingPrd, techData: techData, onTechApprove: handleTechApprove, onTechReject: handleTechReject, isTechLoading: isLoadingTech, productData: isLoadingTechProduct ? null : techProductData, mergeData: mergeData, onMergeApprove: handleMergeApprove, onMergeReject: handleMergeReject, isMergeLoading: isLoadingMerge, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: setChatInput }));
|
|
366
|
+
body = (_jsx(FeatureDrawerTabs, { featureNode: enrichedNode, featureId: featureNode.featureId, initialTab: view.initialTab, urlTab: urlTab, sseEvents: events, prdData: prdData, prdSelections: prdSelections, onPrdSelect: (qId, oId) => setPrdSelections((prev) => ({ ...prev, [qId]: oId })), onPrdApprove: handlePrdApprove, onPrdReject: handlePrdReject, isPrdLoading: isLoadingPrd, techData: techData, onTechApprove: handleTechApprove, onTechReject: handleTechReject, isTechLoading: isLoadingTech, productData: isLoadingTechProduct ? null : techProductData, mergeData: mergeData, onMergeApprove: handleMergeApprove, onMergeReject: handleMergeReject, isMergeLoading: isLoadingMerge, onRebaseOnMain: featureFlags.gitRebaseSync ? featureActions.rebaseOnMain : undefined, rebaseLoading: featureActions.rebaseLoading, rebaseError: featureActions.rebaseError, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: setChatInput }));
|
|
350
367
|
}
|
|
351
368
|
return (_jsx(BaseDrawer, { open: isOpen, onClose: attemptClose, size: "md", modal: false, header: header, "data-testid": view.type === 'feature' ? 'feature-drawer' : 'repository-drawer', children: body }));
|
|
352
369
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"repository-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE,2BAA2B,2CA2G3E"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback } from 'react';
|
|
4
4
|
import { useRouter, usePathname } from 'next/navigation';
|
|
5
|
-
import { Code2, Terminal, FolderOpen } from 'lucide-react';
|
|
5
|
+
import { Code2, Terminal, FolderOpen, RefreshCw } from 'lucide-react';
|
|
6
6
|
import { BaseDrawer } from '../../common/base-drawer/index.js';
|
|
7
7
|
import { ActionButton } from '../../common/action-button/index.js';
|
|
8
8
|
import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
|
|
@@ -14,7 +14,7 @@ export function RepositoryDrawerClient({ data }) {
|
|
|
14
14
|
const router = useRouter();
|
|
15
15
|
const pathname = usePathname();
|
|
16
16
|
const isOpen = pathname.startsWith('/repository/');
|
|
17
|
-
const repoActions = useRepositoryActions(data.repositoryPath ? { repositoryPath: data.repositoryPath } : null);
|
|
17
|
+
const repoActions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
|
|
18
18
|
const onClose = useCallback(() => {
|
|
19
19
|
router.push('/');
|
|
20
20
|
}, [router]);
|
|
@@ -26,5 +26,5 @@ export function RepositoryDrawerClient({ data }) {
|
|
|
26
26
|
}
|
|
27
27
|
: undefined;
|
|
28
28
|
const header = (_jsxs("div", { "data-testid": "repository-drawer-header", children: [_jsx(DrawerTitle, { children: data.name }), data.repositoryPath ? (_jsx(DrawerDescription, { className: "truncate font-mono text-xs", children: data.repositoryPath })) : null] }));
|
|
29
|
-
return (_jsx(BaseDrawer, { open: isOpen, onClose: onClose, size: "md", modal: false, header: header, deployTarget: featureFlags.envDeploy ? repoDeployTarget : undefined, "data-testid": "repository-drawer", children: data.repositoryPath ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsx(Separator, {}), _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "OPEN WITH" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Open in IDE", onClick: repoActions.openInIde, loading: repoActions.ideLoading, error: !!repoActions.ideError, icon: Code2, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open in Shell", onClick: repoActions.openInShell, loading: repoActions.shellLoading, error: !!repoActions.shellError, icon: Terminal, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open Folder", onClick: repoActions.openFolder, loading: repoActions.folderLoading, error: !!repoActions.folderError, icon: FolderOpen, variant: "outline", size: "sm" })] })] })] })) : null }));
|
|
29
|
+
return (_jsx(BaseDrawer, { open: isOpen, onClose: onClose, size: "md", modal: false, header: header, deployTarget: featureFlags.envDeploy ? repoDeployTarget : undefined, "data-testid": "repository-drawer", children: data.repositoryPath ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsx(Separator, {}), _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "OPEN WITH" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Open in IDE", onClick: repoActions.openInIde, loading: repoActions.ideLoading, error: !!repoActions.ideError, icon: Code2, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open in Shell", onClick: repoActions.openInShell, loading: repoActions.shellLoading, error: !!repoActions.shellError, icon: Terminal, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open Folder", onClick: repoActions.openFolder, loading: repoActions.folderLoading, error: !!repoActions.folderError, icon: FolderOpen, variant: "outline", size: "sm" })] })] }), data.id && featureFlags.gitRebaseSync ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "GIT OPERATIONS" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Sync Main", onClick: repoActions.syncMain, loading: repoActions.syncLoading, error: !!repoActions.syncError, icon: RefreshCw, variant: "outline", size: "sm" }), repoActions.syncError ? (_jsx("p", { className: "text-destructive text-xs", children: repoActions.syncError })) : null] })] })] })) : null] })) : null }));
|
|
30
30
|
}
|
package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* @param onSuccess - Called with the fetch result when successful and not cancelled.
|
|
8
8
|
* @param onReset - Called immediately when featureId changes (before fetching).
|
|
9
9
|
* @param errorMessage - Optional toast message shown on fetch failure.
|
|
10
|
+
* @param refreshKey - Optional key that forces a re-fetch when it changes (even if featureId is the same).
|
|
10
11
|
* @returns Whether the fetch is currently in progress.
|
|
11
12
|
*/
|
|
12
|
-
export declare function useArtifactFetch<TResult>(featureId: string | null, fetcher: (id: string) => Promise<TResult>, onSuccess: (result: TResult) => void, onReset: () => void, errorMessage?: string): boolean;
|
|
13
|
+
export declare function useArtifactFetch<TResult>(featureId: string | null, fetcher: (id: string) => Promise<TResult>, onSuccess: (result: TResult) => void, onReset: () => void, errorMessage?: string, refreshKey?: number): boolean;
|
|
13
14
|
//# sourceMappingURL=use-artifact-fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-artifact-fetch.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"use-artifact-fetch.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EACtC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EACzC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EACpC,OAAO,EAAE,MAAM,IAAI,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAiCT"}
|
package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.js
CHANGED
|
@@ -10,9 +10,10 @@ import { toast } from 'sonner';
|
|
|
10
10
|
* @param onSuccess - Called with the fetch result when successful and not cancelled.
|
|
11
11
|
* @param onReset - Called immediately when featureId changes (before fetching).
|
|
12
12
|
* @param errorMessage - Optional toast message shown on fetch failure.
|
|
13
|
+
* @param refreshKey - Optional key that forces a re-fetch when it changes (even if featureId is the same).
|
|
13
14
|
* @returns Whether the fetch is currently in progress.
|
|
14
15
|
*/
|
|
15
|
-
export function useArtifactFetch(featureId, fetcher, onSuccess, onReset, errorMessage) {
|
|
16
|
+
export function useArtifactFetch(featureId, fetcher, onSuccess, onReset, errorMessage, refreshKey) {
|
|
16
17
|
const [isLoading, setIsLoading] = useState(false);
|
|
17
18
|
// Use refs to avoid stale callbacks in the effect without triggering re-runs.
|
|
18
19
|
const onSuccessRef = useRef(onSuccess);
|
|
@@ -41,6 +42,6 @@ export function useArtifactFetch(featureId, fetcher, onSuccess, onReset, errorMe
|
|
|
41
42
|
return () => {
|
|
42
43
|
cancelled = true;
|
|
43
44
|
};
|
|
44
|
-
}, [featureId, fetcher, errorMessage]);
|
|
45
|
+
}, [featureId, fetcher, errorMessage, refreshKey]);
|
|
45
46
|
return isLoading;
|
|
46
47
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export interface FeatureActionsInput {
|
|
2
|
+
featureId: string;
|
|
2
3
|
repositoryPath: string;
|
|
3
4
|
branch: string;
|
|
4
5
|
specPath?: string;
|
|
@@ -7,12 +8,15 @@ export interface FeatureActionsState {
|
|
|
7
8
|
openInIde: () => Promise<void>;
|
|
8
9
|
openInShell: () => Promise<void>;
|
|
9
10
|
openSpecsFolder: () => Promise<void>;
|
|
11
|
+
rebaseOnMain: () => Promise<void>;
|
|
10
12
|
ideLoading: boolean;
|
|
11
13
|
shellLoading: boolean;
|
|
12
14
|
specsLoading: boolean;
|
|
15
|
+
rebaseLoading: boolean;
|
|
13
16
|
ideError: string | null;
|
|
14
17
|
shellError: string | null;
|
|
15
18
|
specsError: string | null;
|
|
19
|
+
rebaseError: string | null;
|
|
16
20
|
}
|
|
17
21
|
export declare function useFeatureActions(input: FeatureActionsInput | null): FeatureActionsState;
|
|
18
22
|
//# sourceMappingURL=use-feature-actions.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-actions.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/use-feature-actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-feature-actions.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/use-feature-actions.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,mBAAmB,CA6IxF"}
|
|
@@ -3,21 +3,25 @@ import { useState, useCallback, useRef, useEffect } from 'react';
|
|
|
3
3
|
import { openIde } from '../../../app/actions/open-ide.js';
|
|
4
4
|
import { openShell } from '../../../app/actions/open-shell.js';
|
|
5
5
|
import { openFolder } from '../../../app/actions/open-folder.js';
|
|
6
|
+
import { rebaseFeature } from '../../../app/actions/rebase-feature.js';
|
|
6
7
|
const ERROR_CLEAR_DELAY = 5000;
|
|
7
8
|
export function useFeatureActions(input) {
|
|
8
9
|
const [ideLoading, setIdeLoading] = useState(false);
|
|
9
10
|
const [shellLoading, setShellLoading] = useState(false);
|
|
10
11
|
const [specsLoading, setSpecsLoading] = useState(false);
|
|
12
|
+
const [rebaseLoading, setRebaseLoading] = useState(false);
|
|
11
13
|
const [ideError, setIdeError] = useState(null);
|
|
12
14
|
const [shellError, setShellError] = useState(null);
|
|
13
15
|
const [specsError, setSpecsError] = useState(null);
|
|
16
|
+
const [rebaseError, setRebaseError] = useState(null);
|
|
14
17
|
const ideTimerRef = useRef(null);
|
|
15
18
|
const shellTimerRef = useRef(null);
|
|
16
19
|
const specsTimerRef = useRef(null);
|
|
20
|
+
const rebaseTimerRef = useRef(null);
|
|
17
21
|
// Clear timers on unmount — read .current inside cleanup so we get the
|
|
18
22
|
// actual timer value at teardown time, not the always-null value at mount.
|
|
19
23
|
useEffect(() => {
|
|
20
|
-
const refs = [ideTimerRef, shellTimerRef, specsTimerRef];
|
|
24
|
+
const refs = [ideTimerRef, shellTimerRef, specsTimerRef, rebaseTimerRef];
|
|
21
25
|
return () => {
|
|
22
26
|
for (const ref of refs) {
|
|
23
27
|
if (ref.current)
|
|
@@ -79,15 +83,42 @@ export function useFeatureActions(input) {
|
|
|
79
83
|
setSpecsLoading(false);
|
|
80
84
|
}
|
|
81
85
|
}, [input, specsLoading]);
|
|
86
|
+
const handleRebaseOnMain = useCallback(async () => {
|
|
87
|
+
if (!input?.featureId || rebaseLoading)
|
|
88
|
+
return;
|
|
89
|
+
if (rebaseTimerRef.current)
|
|
90
|
+
clearTimeout(rebaseTimerRef.current);
|
|
91
|
+
setRebaseLoading(true);
|
|
92
|
+
setRebaseError(null);
|
|
93
|
+
try {
|
|
94
|
+
const result = await rebaseFeature(input.featureId);
|
|
95
|
+
if (!result.success) {
|
|
96
|
+
const errorMessage = result.error ?? 'An unexpected error occurred';
|
|
97
|
+
setRebaseError(errorMessage);
|
|
98
|
+
rebaseTimerRef.current = setTimeout(() => setRebaseError(null), ERROR_CLEAR_DELAY);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
const errorMessage = err instanceof Error ? err.message : 'An unexpected error occurred';
|
|
103
|
+
setRebaseError(errorMessage);
|
|
104
|
+
rebaseTimerRef.current = setTimeout(() => setRebaseError(null), ERROR_CLEAR_DELAY);
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
setRebaseLoading(false);
|
|
108
|
+
}
|
|
109
|
+
}, [input, rebaseLoading]);
|
|
82
110
|
return {
|
|
83
111
|
openInIde: handleOpenIde,
|
|
84
112
|
openInShell: handleOpenShell,
|
|
85
113
|
openSpecsFolder: handleOpenSpecsFolder,
|
|
114
|
+
rebaseOnMain: handleRebaseOnMain,
|
|
86
115
|
ideLoading,
|
|
87
116
|
shellLoading,
|
|
88
117
|
specsLoading,
|
|
118
|
+
rebaseLoading,
|
|
89
119
|
ideError,
|
|
90
120
|
shellError,
|
|
91
121
|
specsError,
|
|
122
|
+
rebaseError,
|
|
92
123
|
};
|
|
93
124
|
}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAmEjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AAuED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,qBAAqB,EAAE,GACjC,iBAAiB,EAAE,CAgErB;AA6BD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CAqE3F"}
|