@shepai/cli 1.123.0-pr394.80f3f1f → 1.123.0-pr394.f86a739
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +11 -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 +48 -6
- package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/adopt.command.js +3 -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 +4 -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 +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +22 -22
- 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 +22 -22
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.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 +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.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/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_cfc9281c.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_cfc9281c.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/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__14664e9b._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a187fd7e._.js +1 -1
- package/web/.next/server/chunks/ssr/_a187fd7e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
- package/web/.next/server/chunks/ssr/{_0a97d643._.js → _af7ec14e._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0a97d643._.js.map → _af7ec14e._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_60922fc4._.js → _bd291dd4._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_60922fc4._.js.map → _bd291dd4._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/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/src_presentation_web_5f039db1._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_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_7a78701e._.js → src_presentation_web_d19182cb._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_7a78701e._.js.map → src_presentation_web_d19182cb._.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 +36 -36
- package/web/.next/static/chunks/{e1de6b08082f5365.js → 07973cb4a37c0c40.js} +1 -1
- package/web/.next/static/chunks/15665b473febf97f.js +1 -0
- package/web/.next/static/chunks/{fc45997b8b835378.js → 4e9bc4d7b844e342.js} +1 -1
- package/web/.next/static/chunks/{8c50a0b7a7d9a4d5.js → 5f4d4edcd476f2df.js} +1 -1
- package/web/.next/static/chunks/{26110def6c1641a5.js → 688689aa17b96e5d.js} +1 -1
- package/web/.next/static/chunks/{b626e6ad69805e9a.js → 6ebcb8f40fde6b83.js} +1 -1
- package/web/.next/static/chunks/{14d6411c627ccc15.js → 71acbe51602d440d.js} +1 -1
- package/web/.next/static/chunks/{44e35ac2426a1bd0.js → 77be7fb4731d37a0.js} +1 -1
- package/web/.next/static/chunks/{2dade33cf8b0e03e.js → b014c7d70d2c71ed.js} +1 -1
- package/web/.next/static/chunks/{9fe8af38605fa69a.js → b0e3592dff0215dc.js} +1 -1
- package/web/.next/static/chunks/{e413cc49d94d7093.js → ec348ad3d7e20677.js} +2 -2
- package/web/.next/static/chunks/a73b4cc8c0548c91.js +0 -1
- /package/web/.next/static/{-FOfzDf8kOTPigHYVlPm4 → oFYfLIWkGEGaI30kH8DXG}/_buildManifest.js +0 -0
- /package/web/.next/static/{-FOfzDf8kOTPigHYVlPm4 → oFYfLIWkGEGaI30kH8DXG}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{-FOfzDf8kOTPigHYVlPm4 → oFYfLIWkGEGaI30kH8DXG}/_ssgManifest.js +0 -0
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Imports an existing git branch into Shep's feature tracking system.
|
|
5
5
|
* Creates a worktree (if needed), derives feature metadata from the branch name,
|
|
6
|
-
* and persists a Feature entity with lifecycle=
|
|
6
|
+
* and persists a Feature entity. Branches with an open PR get lifecycle=Review
|
|
7
|
+
* (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
|
|
7
8
|
*
|
|
8
9
|
* This is a standalone use case — it does NOT extend or modify CreateFeatureUseCase.
|
|
9
10
|
* It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
|
|
@@ -12,6 +13,7 @@ import type { Feature } from '../../../domain/generated/output.js';
|
|
|
12
13
|
import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
|
|
13
14
|
import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
|
|
14
15
|
import type { IWorktreeService } from '../../ports/output/services/worktree-service.interface.js';
|
|
16
|
+
import type { IGitPrService } from '../../ports/output/services/git-pr-service.interface.js';
|
|
15
17
|
export interface AdoptBranchInput {
|
|
16
18
|
branchName: string;
|
|
17
19
|
repositoryPath: string;
|
|
@@ -23,7 +25,8 @@ export declare class AdoptBranchUseCase {
|
|
|
23
25
|
private readonly featureRepo;
|
|
24
26
|
private readonly repositoryRepo;
|
|
25
27
|
private readonly worktreeService;
|
|
26
|
-
|
|
28
|
+
private readonly gitPrService;
|
|
29
|
+
constructor(featureRepo: IFeatureRepository, repositoryRepo: IRepositoryRepository, worktreeService: IWorktreeService, gitPrService: IGitPrService);
|
|
27
30
|
execute(input: AdoptBranchInput): Promise<AdoptBranchResult>;
|
|
28
31
|
/**
|
|
29
32
|
* Resolve the git ref to use for worktree creation.
|
|
@@ -31,6 +34,12 @@ export declare class AdoptBranchUseCase {
|
|
|
31
34
|
* Throws if branch does not exist anywhere.
|
|
32
35
|
*/
|
|
33
36
|
private resolveBranchRef;
|
|
37
|
+
/**
|
|
38
|
+
* Detect if the branch has an open PR (or one whose closure we cannot confirm).
|
|
39
|
+
* Returns PullRequest data if found, undefined otherwise.
|
|
40
|
+
* Gracefully returns undefined if gh CLI is unavailable or the repo has no remote.
|
|
41
|
+
*/
|
|
42
|
+
private detectPrForBranch;
|
|
34
43
|
/**
|
|
35
44
|
* Find or create a Repository entity for the given path.
|
|
36
45
|
* Mirrors the pattern from CreateFeatureUseCase.
|
package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt-branch.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/adopt-branch.use-case.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"adopt-branch.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/adopt-branch.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAG7F,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,qBACa,kBAAkB;IAG3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBANZ,WAAW,EAAE,kBAAkB,EAE/B,cAAc,EAAE,qBAAqB,EAErC,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,aAAa;IAGxC,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyFlE;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;YACW,iBAAiB;IA4B/B;;;OAGG;YACW,iBAAiB;CAuBhC"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Imports an existing git branch into Shep's feature tracking system.
|
|
5
5
|
* Creates a worktree (if needed), derives feature metadata from the branch name,
|
|
6
|
-
* and persists a Feature entity with lifecycle=
|
|
6
|
+
* and persists a Feature entity. Branches with an open PR get lifecycle=Review
|
|
7
|
+
* (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
|
|
7
8
|
*
|
|
8
9
|
* This is a standalone use case — it does NOT extend or modify CreateFeatureUseCase.
|
|
9
10
|
* It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
|
|
@@ -22,7 +23,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
22
23
|
};
|
|
23
24
|
import { injectable, inject } from 'tsyringe';
|
|
24
25
|
import { randomUUID } from 'node:crypto';
|
|
25
|
-
import { SdlcLifecycle } from '../../../domain/generated/output.js';
|
|
26
|
+
import { SdlcLifecycle, PrStatus } from '../../../domain/generated/output.js';
|
|
26
27
|
import { deriveName, deriveSlug } from './branch-name-utils.js';
|
|
27
28
|
/** Branches that must not be adopted as features. */
|
|
28
29
|
const PROTECTED_BRANCHES = new Set(['main', 'master']);
|
|
@@ -30,10 +31,12 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
30
31
|
featureRepo;
|
|
31
32
|
repositoryRepo;
|
|
32
33
|
worktreeService;
|
|
33
|
-
|
|
34
|
+
gitPrService;
|
|
35
|
+
constructor(featureRepo, repositoryRepo, worktreeService, gitPrService) {
|
|
34
36
|
this.featureRepo = featureRepo;
|
|
35
37
|
this.repositoryRepo = repositoryRepo;
|
|
36
38
|
this.worktreeService = worktreeService;
|
|
39
|
+
this.gitPrService = gitPrService;
|
|
37
40
|
}
|
|
38
41
|
async execute(input) {
|
|
39
42
|
const { branchName, repositoryPath } = input;
|
|
@@ -64,9 +67,16 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
64
67
|
if (!worktreeExists) {
|
|
65
68
|
await this.worktreeService.addExisting(repositoryPath, branchRef, worktreePath);
|
|
66
69
|
}
|
|
70
|
+
// --- Detect open PR for this branch ---
|
|
71
|
+
const prData = await this.detectPrForBranch(branchName, repositoryPath);
|
|
67
72
|
// --- Derive feature metadata ---
|
|
68
73
|
const name = deriveName(branchName);
|
|
69
74
|
const now = new Date();
|
|
75
|
+
const hasOpenPr = prData !== undefined;
|
|
76
|
+
// If the branch has an open (not yet merged) PR, place the feature in
|
|
77
|
+
// Review so the node shows "REVIEW" instead of "COMPLETED". Only truly
|
|
78
|
+
// finished branches (no PR, merged PR, or closed PR) get Maintain.
|
|
79
|
+
const lifecycle = prData?.status === PrStatus.Open ? SdlcLifecycle.Review : SdlcLifecycle.Maintain;
|
|
70
80
|
// --- Persist feature ---
|
|
71
81
|
const feature = {
|
|
72
82
|
id: randomUUID(),
|
|
@@ -76,12 +86,12 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
76
86
|
userQuery: '',
|
|
77
87
|
repositoryPath,
|
|
78
88
|
branch: branchName,
|
|
79
|
-
lifecycle
|
|
89
|
+
lifecycle,
|
|
80
90
|
messages: [],
|
|
81
91
|
relatedArtifacts: [],
|
|
82
92
|
fast: false,
|
|
83
93
|
push: false,
|
|
84
|
-
openPr:
|
|
94
|
+
openPr: hasOpenPr,
|
|
85
95
|
approvalGates: {
|
|
86
96
|
allowPrd: false,
|
|
87
97
|
allowPlan: false,
|
|
@@ -89,6 +99,7 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
89
99
|
},
|
|
90
100
|
worktreePath,
|
|
91
101
|
repositoryId: repository.id,
|
|
102
|
+
pr: prData,
|
|
92
103
|
createdAt: now,
|
|
93
104
|
updatedAt: now,
|
|
94
105
|
};
|
|
@@ -112,6 +123,36 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
112
123
|
throw new Error(`Branch "${branchName}" does not exist locally or on the remote. ` +
|
|
113
124
|
'Check the branch name spelling and ensure you have fetched from the remote.');
|
|
114
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Detect if the branch has an open PR (or one whose closure we cannot confirm).
|
|
128
|
+
* Returns PullRequest data if found, undefined otherwise.
|
|
129
|
+
* Gracefully returns undefined if gh CLI is unavailable or the repo has no remote.
|
|
130
|
+
*/
|
|
131
|
+
async detectPrForBranch(branchName, repositoryPath) {
|
|
132
|
+
try {
|
|
133
|
+
const hasRemote = await this.gitPrService.hasRemote(repositoryPath);
|
|
134
|
+
if (!hasRemote)
|
|
135
|
+
return undefined;
|
|
136
|
+
const prStatuses = await this.gitPrService.listPrStatuses(repositoryPath);
|
|
137
|
+
const match = prStatuses.find((pr) => pr.headRefName === branchName);
|
|
138
|
+
if (!match)
|
|
139
|
+
return undefined;
|
|
140
|
+
// If the PR is definitively closed (not merged), skip it
|
|
141
|
+
if (match.state === PrStatus.Closed)
|
|
142
|
+
return undefined;
|
|
143
|
+
// Open or Merged — attach PR data
|
|
144
|
+
return {
|
|
145
|
+
url: match.url,
|
|
146
|
+
number: match.number,
|
|
147
|
+
status: match.state,
|
|
148
|
+
mergeable: match.mergeable,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// gh CLI not installed, auth failure, etc. — gracefully skip PR detection
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
115
156
|
/**
|
|
116
157
|
* Find or create a Repository entity for the given path.
|
|
117
158
|
* Mirrors the pattern from CreateFeatureUseCase.
|
|
@@ -141,6 +182,7 @@ AdoptBranchUseCase = __decorate([
|
|
|
141
182
|
__param(0, inject('IFeatureRepository')),
|
|
142
183
|
__param(1, inject('IRepositoryRepository')),
|
|
143
184
|
__param(2, inject('IWorktreeService')),
|
|
144
|
-
|
|
185
|
+
__param(3, inject('IGitPrService')),
|
|
186
|
+
__metadata("design:paramtypes", [Object, Object, Object, Object])
|
|
145
187
|
], AdoptBranchUseCase);
|
|
146
188
|
export { AdoptBranchUseCase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/adopt.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,kBAAkB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"adopt.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/adopt.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,kBAAkB,IAAI,OAAO,CAkC5C"}
|
|
@@ -31,6 +31,9 @@ export function createAdoptCommand() {
|
|
|
31
31
|
console.log(` ${colors.muted('Name:')} ${feature.name}`);
|
|
32
32
|
console.log(` ${colors.muted('Branch:')} ${colors.accent(feature.branch)}`);
|
|
33
33
|
console.log(` ${colors.muted('Status:')} ${feature.lifecycle}`);
|
|
34
|
+
if (feature.pr) {
|
|
35
|
+
console.log(` ${colors.muted('PR:')} ${colors.accent(feature.pr.url)} (${feature.pr.status})`);
|
|
36
|
+
}
|
|
34
37
|
console.log(` ${colors.muted('Worktree:')} ${colors.accent(feature.worktreePath ?? '')}`);
|
|
35
38
|
messages.newline();
|
|
36
39
|
}
|
package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,gBAAgB,CA4DlB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAsBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAQlE,CAAC;AAeF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
|
|
@@ -51,6 +51,10 @@ export function deriveNodeState(feature, agentRun, options) {
|
|
|
51
51
|
if (feature.lifecycle === SdlcLifecycle.Maintain) {
|
|
52
52
|
return 'done';
|
|
53
53
|
}
|
|
54
|
+
// Adopted branch with an open PR — needs user review/merge action
|
|
55
|
+
if (feature.lifecycle === SdlcLifecycle.Review && !agentRun) {
|
|
56
|
+
return 'action-required';
|
|
57
|
+
}
|
|
54
58
|
const tasks = feature.plan?.tasks;
|
|
55
59
|
if (!tasks || tasks.length === 0) {
|
|
56
60
|
return 'running';
|