@shepai/cli 1.129.4-pr412.cbe0d37 → 1.130.0-pr417.355b6bd

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.
Files changed (137) hide show
  1. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +8 -3
  2. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +66 -8
  4. package/dist/tsconfig.build.tsbuildinfo +1 -1
  5. package/package.json +1 -1
  6. package/web/.next/BUILD_ID +1 -1
  7. package/web/.next/build-manifest.json +2 -2
  8. package/web/.next/fallback-build-manifest.json +2 -2
  9. package/web/.next/prerender-manifest.json +3 -3
  10. package/web/.next/required-server-files.js +2 -2
  11. package/web/.next/required-server-files.json +2 -2
  12. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +24 -24
  13. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  14. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  15. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +24 -24
  16. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  18. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +30 -30
  19. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +30 -30
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +22 -22
  25. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  27. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +24 -24
  28. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +30 -30
  31. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +30 -30
  34. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +22 -22
  37. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +22 -22
  40. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/_global-error.html +2 -2
  43. package/web/.next/server/app/_global-error.rsc +1 -1
  44. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  45. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  46. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  47. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  48. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  49. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  50. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  52. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  53. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  55. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  57. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  59. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  61. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +1 -1
  62. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +1 -1
  63. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  64. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  65. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +1 -1
  66. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +1 -1
  67. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +1 -1
  68. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +1 -1
  69. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  70. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  71. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  72. package/web/.next/server/chunks/ssr/[root-of-the-server]__5142820f._.js +2 -2
  73. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  74. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__755cfe02._.js.map +1 -1
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.js +1 -1
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.js.map +1 -1
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__84f72684._.js +1 -1
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__99ab2519._.js +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__a628fb91._.js.map +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js +1 -1
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__bfba58e6._.js.map +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__c3ab8422._.js.map +1 -1
  89. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  90. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/{_56c5e92e._.js → _417152b3._.js} +2 -2
  92. package/web/.next/server/chunks/ssr/{_56c5e92e._.js.map → _417152b3._.js.map} +1 -1
  93. package/web/.next/server/chunks/ssr/{_b032a7ac._.js → _7634b48b._.js} +2 -2
  94. package/web/.next/server/chunks/ssr/{_b032a7ac._.js.map → _7634b48b._.js.map} +1 -1
  95. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  96. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  98. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  99. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  101. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  103. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/{src_presentation_web_0a31df6d._.js → src_presentation_web_564edf1d._.js} +2 -2
  105. package/web/.next/server/chunks/ssr/{src_presentation_web_0a31df6d._.js.map → src_presentation_web_564edf1d._.js.map} +1 -1
  106. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +2 -2
  107. package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +1 -1
  109. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  111. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +2 -2
  115. package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  120. package/web/.next/server/pages/500.html +2 -2
  121. package/web/.next/server/server-reference-manifest.js +1 -1
  122. package/web/.next/server/server-reference-manifest.json +38 -38
  123. package/web/.next/static/chunks/{467005fc66090d82.js → 04b7b520525a7bba.js} +1 -1
  124. package/web/.next/static/chunks/{10b5069084213d7b.js → 147bc1c8b1c0085c.js} +1 -1
  125. package/web/.next/static/chunks/{c8ae9f83f18eec9e.js → 1cf4bc9bd9ac6de2.js} +1 -1
  126. package/web/.next/static/chunks/{7d78b55397522ad9.js → 20622ffa925d02af.js} +1 -1
  127. package/web/.next/static/chunks/{5d102c2368573ad4.js → 21e454be545c6bd2.js} +1 -1
  128. package/web/.next/static/chunks/{5e0f0eb56caca7b0.js → 328208845a49db01.js} +1 -1
  129. package/web/.next/static/chunks/{fc31060238e90093.js → 3536a08df827bfbf.js} +2 -2
  130. package/web/.next/static/chunks/{791fa3135b12cc5c.js → 417d4514dc9f3683.js} +1 -1
  131. package/web/.next/static/chunks/{d67b9a7e0395aadc.js → 4f93aa248c37ecf8.js} +1 -1
  132. package/web/.next/static/chunks/{56986cf0d5665b33.js → 8833a539ca524eb8.js} +1 -1
  133. package/web/.next/static/chunks/{a449ec16975164ef.js → a5183c8b7c131459.js} +1 -1
  134. package/web/.next/static/chunks/{768922d1350524f7.js → cb1c6474e745db64.js} +1 -1
  135. /package/web/.next/static/{jD-F2qPl8fvHfH8oc0hVX → kgD261MEqVcDAP8kl6GZb}/_buildManifest.js +0 -0
  136. /package/web/.next/static/{jD-F2qPl8fvHfH8oc0hVX → kgD261MEqVcDAP8kl6GZb}/_clientMiddlewareManifest.json +0 -0
  137. /package/web/.next/static/{jD-F2qPl8fvHfH8oc0hVX → kgD261MEqVcDAP8kl6GZb}/_ssgManifest.js +0 -0
@@ -6,14 +6,17 @@
6
6
  * and persists a Feature entity. Branches with an open PR get lifecycle=Review
7
7
  * (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
8
8
  *
9
- * This is a standalone use case it does NOT extend or modify CreateFeatureUseCase.
10
- * It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
9
+ * As of feature 071 (adopted-branch-agent-runs), this use case also creates an
10
+ * AgentRun record and initializes a spec directory, enabling adopted features to
11
+ * support agent execution (start, resume, reject) just like created features.
11
12
  */
12
13
  import type { Feature } from '../../../domain/generated/output.js';
13
14
  import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
14
15
  import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
15
16
  import type { IWorktreeService } from '../../ports/output/services/worktree-service.interface.js';
16
17
  import type { IGitPrService } from '../../ports/output/services/git-pr-service.interface.js';
18
+ import type { IAgentRunRepository } from '../../ports/output/agents/agent-run-repository.interface.js';
19
+ import type { ISpecInitializerService } from '../../ports/output/services/spec-initializer.interface.js';
17
20
  export interface AdoptBranchInput {
18
21
  branchName: string;
19
22
  repositoryPath: string;
@@ -26,7 +29,9 @@ export declare class AdoptBranchUseCase {
26
29
  private readonly repositoryRepo;
27
30
  private readonly worktreeService;
28
31
  private readonly gitPrService;
29
- constructor(featureRepo: IFeatureRepository, repositoryRepo: IRepositoryRepository, worktreeService: IWorktreeService, gitPrService: IGitPrService);
32
+ private readonly agentRunRepo;
33
+ private readonly specInitializer;
34
+ constructor(featureRepo: IFeatureRepository, repositoryRepo: IRepositoryRepository, worktreeService: IWorktreeService, gitPrService: IGitPrService, agentRunRepo: IAgentRunRepository, specInitializer: ISpecInitializerService);
30
35
  execute(input: AdoptBranchInput): Promise<AdoptBranchResult>;
31
36
  /**
32
37
  * Resolve the git ref to use for worktree creation.
@@ -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;;;;;;;;;;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"}
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;;;;;;;;;;;GAWG;AAOH,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;AAC7F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2DAA2D,CAAC;AAIzG,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;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAVf,WAAW,EAAE,kBAAkB,EAE/B,cAAc,EAAE,qBAAqB,EAErC,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,aAAa,EAE3B,YAAY,EAAE,mBAAmB,EAEjC,eAAe,EAAE,uBAAuB;IAGrD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkJlE;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;YACW,iBAAiB;IA4B/B;;;OAGG;YACW,iBAAiB;CAuBhC"}
@@ -6,8 +6,9 @@
6
6
  * and persists a Feature entity. Branches with an open PR get lifecycle=Review
7
7
  * (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
8
8
  *
9
- * This is a standalone use case it does NOT extend or modify CreateFeatureUseCase.
10
- * It needs only three dependencies: IFeatureRepository, IRepositoryRepository, and IWorktreeService.
9
+ * As of feature 071 (adopted-branch-agent-runs), this use case also creates an
10
+ * AgentRun record and initializes a spec directory, enabling adopted features to
11
+ * support agent execution (start, resume, reject) just like created features.
11
12
  */
12
13
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
14
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -23,7 +24,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
23
24
  };
24
25
  import { injectable, inject } from 'tsyringe';
25
26
  import { randomUUID } from 'node:crypto';
26
- import { SdlcLifecycle, PrStatus } from '../../../domain/generated/output.js';
27
+ // Phase 2 imports - will be used for AgentRun creation and spec directory detection
28
+ import { existsSync } from 'node:fs';
29
+ import { join } from 'node:path';
30
+ import { SdlcLifecycle, PrStatus, AgentRunStatus } from '../../../domain/generated/output.js';
31
+ import { getSettings } from '../../../infrastructure/services/settings.service.js';
27
32
  import { deriveName, deriveSlug } from './branch-name-utils.js';
28
33
  /** Branches that must not be adopted as features. */
29
34
  const PROTECTED_BRANCHES = new Set(['main', 'master']);
@@ -32,11 +37,15 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
32
37
  repositoryRepo;
33
38
  worktreeService;
34
39
  gitPrService;
35
- constructor(featureRepo, repositoryRepo, worktreeService, gitPrService) {
40
+ agentRunRepo;
41
+ specInitializer;
42
+ constructor(featureRepo, repositoryRepo, worktreeService, gitPrService, agentRunRepo, specInitializer) {
36
43
  this.featureRepo = featureRepo;
37
44
  this.repositoryRepo = repositoryRepo;
38
45
  this.worktreeService = worktreeService;
39
46
  this.gitPrService = gitPrService;
47
+ this.agentRunRepo = agentRunRepo;
48
+ this.specInitializer = specInitializer;
40
49
  }
41
50
  async execute(input) {
42
51
  const { branchName, repositoryPath } = input;
@@ -61,25 +70,65 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
61
70
  const branchRef = await this.resolveBranchRef(branchName, repositoryPath);
62
71
  // --- Resolve or create repository entity ---
63
72
  const repository = await this.resolveRepository(repositoryPath);
73
+ // --- Calculate feature number for spec directory ---
74
+ // Use existing feature count as hint; SpecInitializerService.resolveNextNumber()
75
+ // will scan filesystem to determine actual next available number
76
+ const effectiveRepoPath = repository.path;
77
+ const existingFeatures = await this.featureRepo.list({
78
+ repositoryPath: effectiveRepoPath,
79
+ });
80
+ const featureNumber = existingFeatures.length;
64
81
  // --- Create or reuse worktree ---
65
82
  const worktreePath = this.worktreeService.getWorktreePath(repositoryPath, slug);
66
83
  const worktreeExists = await this.worktreeService.exists(repositoryPath, branchName);
67
84
  if (!worktreeExists) {
68
85
  await this.worktreeService.addExisting(repositoryPath, branchRef, worktreePath);
69
86
  }
87
+ // --- Initialize or detect spec directory ---
88
+ // Check if spec directory already exists (e.g., from previous /shep-kit:new-feature work)
89
+ // If exists, preserve it. If not, initialize with empty YAMLs.
90
+ const nnn = String(featureNumber).padStart(3, '0');
91
+ const expectedSpecDir = join(worktreePath, 'specs', `${nnn}-${slug}`);
92
+ let specDir;
93
+ if (existsSync(expectedSpecDir)) {
94
+ // Spec directory already exists — use it without modification
95
+ specDir = expectedSpecDir;
96
+ }
97
+ else {
98
+ // No spec directory — initialize with empty YAMLs
99
+ const result = await this.specInitializer.initialize(worktreePath, slug, featureNumber, '(adopted from existing branch)');
100
+ specDir = result.specDir;
101
+ }
102
+ // --- Create AgentRun record (following CreateFeatureUseCase pattern lines 156-210) ---
103
+ const runId = randomUUID();
104
+ const settings = getSettings();
105
+ const now = new Date();
106
+ const agentRun = {
107
+ id: runId,
108
+ agentType: settings.agent.type,
109
+ agentName: 'feature-agent',
110
+ status: AgentRunStatus.pending,
111
+ prompt: '(adopted from existing branch)',
112
+ threadId: randomUUID(), // New UUID for LangGraph checkpoint isolation
113
+ featureId: '', // Will be set after Feature creation, but we need runId first
114
+ repositoryPath: effectiveRepoPath,
115
+ ...(settings.models?.default ? { modelId: settings.models.default } : {}),
116
+ createdAt: now.toISOString(),
117
+ updatedAt: now.toISOString(),
118
+ };
70
119
  // --- Detect open PR for this branch ---
71
120
  const prData = await this.detectPrForBranch(branchName, repositoryPath);
72
121
  // --- Derive feature metadata ---
73
122
  const name = deriveName(branchName);
74
- const now = new Date();
75
123
  const hasOpenPr = prData !== undefined;
76
124
  // If the branch has an open (not yet merged) PR, place the feature in
77
125
  // Review so the node shows "REVIEW" instead of "COMPLETED". Only truly
78
126
  // finished branches (no PR, merged PR, or closed PR) get Maintain.
79
127
  const lifecycle = prData?.status === PrStatus.Open ? SdlcLifecycle.Review : SdlcLifecycle.Maintain;
80
- // --- Persist feature ---
128
+ // --- Construct Feature entity ---
129
+ const featureId = randomUUID();
81
130
  const feature = {
82
- id: randomUUID(),
131
+ id: featureId,
83
132
  name,
84
133
  slug,
85
134
  description: '',
@@ -98,11 +147,18 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
98
147
  allowMerge: false,
99
148
  },
100
149
  worktreePath,
150
+ specPath: specDir,
151
+ agentRunId: runId,
101
152
  repositoryId: repository.id,
102
153
  pr: prData,
103
154
  createdAt: now,
104
155
  updatedAt: now,
105
156
  };
157
+ // --- Persist AgentRun before Feature (respects referential integrity) ---
158
+ // Set featureId now that we have it
159
+ agentRun.featureId = featureId;
160
+ await this.agentRunRepo.create(agentRun);
161
+ // --- Persist Feature (after AgentRun exists) ---
106
162
  await this.featureRepo.create(feature);
107
163
  return { feature };
108
164
  }
@@ -183,6 +239,8 @@ AdoptBranchUseCase = __decorate([
183
239
  __param(1, inject('IRepositoryRepository')),
184
240
  __param(2, inject('IWorktreeService')),
185
241
  __param(3, inject('IGitPrService')),
186
- __metadata("design:paramtypes", [Object, Object, Object, Object])
242
+ __param(4, inject('IAgentRunRepository')),
243
+ __param(5, inject('ISpecInitializerService')),
244
+ __metadata("design:paramtypes", [Object, Object, Object, Object, Object, Object])
187
245
  ], AdoptBranchUseCase);
188
246
  export { AdoptBranchUseCase };