@shepai/cli 1.140.0 → 1.141.0-pr452.1d8e904

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 (228) hide show
  1. package/apis/json-schema/Feature.yaml +10 -0
  2. package/apis/json-schema/PullRequest.yaml +11 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  4. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -0
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts +79 -0
  7. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.d.ts.map +1 -0
  8. package/dist/packages/core/src/application/ports/output/services/git-fork-service.interface.js +31 -0
  9. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +2 -0
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +4 -0
  13. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +4 -0
  14. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts +23 -0
  16. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/features/poll-upstream-pr.use-case.js +84 -0
  18. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  19. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
  20. package/dist/packages/core/src/domain/generated/output.d.ts +21 -0
  21. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  22. package/dist/packages/core/src/domain/generated/output.js +1 -0
  23. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/di/container.js +2 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +5 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +12 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts +13 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.d.ts.map +1 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.js +30 -0
  31. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +10 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +34 -0
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -0
  36. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +6 -0
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -0
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +11 -0
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +2 -0
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +50 -0
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +2 -0
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +8 -0
  47. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts +25 -0
  48. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.d.ts.map +1 -0
  49. package/dist/packages/core/src/infrastructure/services/git/git-fork.service.js +145 -0
  50. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts +17 -3
  51. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +98 -15
  53. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  54. package/dist/src/presentation/cli/commands/ui.command.js +2 -1
  55. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  56. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  57. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +4 -0
  58. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  59. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +23 -6
  60. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +11 -0
  61. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  62. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +34 -0
  63. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +1 -1
  64. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
  66. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +1 -1
  68. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +1 -0
  70. package/dist/src/presentation/web/dev-server.js +2 -1
  71. package/dist/tsconfig.build.tsbuildinfo +1 -1
  72. package/package.json +1 -1
  73. package/web/.next/BUILD_ID +1 -1
  74. package/web/.next/build-manifest.json +2 -2
  75. package/web/.next/fallback-build-manifest.json +2 -2
  76. package/web/.next/prerender-manifest.json +3 -3
  77. package/web/.next/required-server-files.js +3 -3
  78. package/web/.next/required-server-files.json +3 -3
  79. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
  80. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +28 -28
  83. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  86. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +36 -36
  89. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
  92. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +28 -28
  95. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
  98. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +36 -36
  101. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  102. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +26 -26
  104. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
  107. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/_global-error.html +2 -2
  110. package/web/.next/server/app/_global-error.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  116. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  117. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  119. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  120. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  122. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  123. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  124. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  126. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  128. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  129. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  130. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
  131. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  132. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  133. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  135. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__2bdf88a0._.js +1 -1
  137. package/web/.next/server/chunks/ssr/[root-of-the-server]__2bdf88a0._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__42faf5ae._.js +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__42faf5ae._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__685ee565._.js +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__685ee565._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__74756aae._.js +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__74756aae._.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js +2 -2
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js +3 -0
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +1 -0
  160. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  161. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/_0c5f56e3._.js +2 -2
  163. package/web/.next/server/chunks/ssr/_0c5f56e3._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/_1b719e7f._.js +1 -1
  165. package/web/.next/server/chunks/ssr/_1b719e7f._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/_37e8548b._.js +1 -1
  167. package/web/.next/server/chunks/ssr/_37e8548b._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/_55d763e2._.js +1 -1
  169. package/web/.next/server/chunks/ssr/_55d763e2._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/_64bdfc6f._.js +2 -2
  171. package/web/.next/server/chunks/ssr/_64bdfc6f._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/_6a83b821._.js +3 -0
  173. package/web/.next/server/chunks/ssr/{_bbb3a0fc._.js.map → _6a83b821._.js.map} +1 -1
  174. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  175. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/_8fcc39d4._.js +3 -0
  177. package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +1 -0
  178. package/web/.next/server/chunks/ssr/_b71645b4._.js +1 -1
  179. package/web/.next/server/chunks/ssr/_b71645b4._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/{_0a69ebd5._.js → _c5657bb7._.js} +2 -2
  181. package/web/.next/server/chunks/ssr/{_0a69ebd5._.js.map → _c5657bb7._.js.map} +1 -1
  182. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  183. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  184. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  186. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  188. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  190. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  192. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  194. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  195. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/{src_presentation_web_340a9d64._.js → src_presentation_web_e05921f6._.js} +2 -2
  199. package/web/.next/server/chunks/ssr/{src_presentation_web_340a9d64._.js.map → src_presentation_web_e05921f6._.js.map} +1 -1
  200. package/web/.next/server/pages/500.html +2 -2
  201. package/web/.next/server/server-reference-manifest.js +1 -1
  202. package/web/.next/server/server-reference-manifest.json +44 -44
  203. package/web/.next/static/chunks/{8ae10749f2e8db60.js → 026580606b8b7231.js} +1 -1
  204. package/web/.next/static/chunks/09131550e55102d1.css +1 -0
  205. package/web/.next/static/chunks/{2349b8618faac5df.js → 3a2cf0e09f1a0159.js} +1 -1
  206. package/web/.next/static/chunks/{3c5c3a51c24cf5c8.js → 3a3726fb6c94f651.js} +1 -1
  207. package/web/.next/static/chunks/{e65c4ae61b6f8045.js → 3a61077325daf0c3.js} +1 -1
  208. package/web/.next/static/chunks/{41e43675a8864a3f.js → 65268efa9fd1584d.js} +1 -1
  209. package/web/.next/static/chunks/{ec05de0bd9d358e4.js → 74675bf4df9bc445.js} +1 -1
  210. package/web/.next/static/chunks/{9eff18338e76d253.js → 8a65fc8ff0c02d79.js} +2 -2
  211. package/web/.next/static/chunks/a63b3e9232d9429c.js +1 -0
  212. package/web/.next/static/chunks/c56bedce824cd983.js +1 -0
  213. package/web/.next/static/chunks/{7b850f14e5ef6865.js → e005665fcc9cf8d5.js} +1 -1
  214. package/web/.next/static/chunks/{5bea21d249dc35f8.js → e013cc94f105db24.js} +2 -2
  215. package/web/.next/static/chunks/{523ad15a08ac9fe7.js → f08792db31cb4046.js} +1 -1
  216. package/web/.next/static/chunks/fa556c575c788679.js +1 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js +0 -3
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__cb850066._.js.map +0 -1
  219. package/web/.next/server/chunks/ssr/_a9f57758._.js +0 -3
  220. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +0 -1
  221. package/web/.next/server/chunks/ssr/_bbb3a0fc._.js +0 -3
  222. package/web/.next/static/chunks/1df0c0594135d736.css +0 -1
  223. package/web/.next/static/chunks/6a370f2709c81d83.js +0 -1
  224. package/web/.next/static/chunks/7ac8f98c0d991dda.js +0 -1
  225. package/web/.next/static/chunks/b705d6e7529f010b.js +0 -1
  226. /package/web/.next/static/{VLtWZeBgMjP_Lk91OEpmY → C5RqIopAMg1O7JgTQ3P_o}/_buildManifest.js +0 -0
  227. /package/web/.next/static/{VLtWZeBgMjP_Lk91OEpmY → C5RqIopAMg1O7JgTQ3P_o}/_clientMiddlewareManifest.json +0 -0
  228. /package/web/.next/static/{VLtWZeBgMjP_Lk91OEpmY → C5RqIopAMg1O7JgTQ3P_o}/_ssgManifest.js +0 -0
@@ -40,6 +40,8 @@ export function toDatabase(feature) {
40
40
  // Flatten workflow flags to individual columns
41
41
  push: feature.push ? 1 : 0,
42
42
  open_pr: feature.openPr ? 1 : 0,
43
+ fork_and_pr: feature.forkAndPr ? 1 : 0,
44
+ commit_specs: feature.commitSpecs ? 1 : 0,
43
45
  auto_merge: feature.approvalGates?.allowMerge ? 1 : 0,
44
46
  allow_prd: feature.approvalGates?.allowPrd ? 1 : 0,
45
47
  allow_plan: feature.approvalGates?.allowPlan ? 1 : 0,
@@ -56,6 +58,9 @@ export function toDatabase(feature) {
56
58
  ci_fix_attempts: feature.pr?.ciFixAttempts ?? null,
57
59
  ci_fix_history: feature.pr?.ciFixHistory ? JSON.stringify(feature.pr.ciFixHistory) : null,
58
60
  pr_mergeable: feature.pr?.mergeable !== undefined ? (feature.pr.mergeable ? 1 : 0) : null,
61
+ upstream_pr_url: feature.pr?.upstreamPrUrl ?? null,
62
+ upstream_pr_number: feature.pr?.upstreamPrNumber ?? null,
63
+ upstream_pr_status: feature.pr?.upstreamPrStatus ?? null,
59
64
  // Feature dependency
60
65
  parent_id: feature.parentId ?? null,
61
66
  // Archive state
@@ -97,6 +102,8 @@ export function fromDatabase(row) {
97
102
  // Assemble workflow flags from flat columns
98
103
  push: row.push === 1,
99
104
  openPr: row.open_pr === 1,
105
+ forkAndPr: row.fork_and_pr === 1,
106
+ commitSpecs: row.commit_specs === 1,
100
107
  approvalGates: {
101
108
  allowPrd: row.allow_prd === 1,
102
109
  allowPlan: row.allow_plan === 1,
@@ -116,6 +123,11 @@ export function fromDatabase(row) {
116
123
  ...(row.ci_fix_attempts != null && { ciFixAttempts: row.ci_fix_attempts }),
117
124
  ...(row.ci_fix_history != null && { ciFixHistory: JSON.parse(row.ci_fix_history) }),
118
125
  ...(row.pr_mergeable != null && { mergeable: row.pr_mergeable === 1 }),
126
+ ...(row.upstream_pr_url != null && { upstreamPrUrl: row.upstream_pr_url }),
127
+ ...(row.upstream_pr_number != null && { upstreamPrNumber: row.upstream_pr_number }),
128
+ ...(row.upstream_pr_status != null && {
129
+ upstreamPrStatus: row.upstream_pr_status,
130
+ }),
119
131
  },
120
132
  }),
121
133
  // Feature dependency
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Migration 045: Add fork-and-PR columns to features table.
3
+ *
4
+ * Adds fork_and_pr (boolean, default 0) and commit_specs (boolean, default 1)
5
+ * for per-feature fork workflow configuration. Also adds upstream PR tracking
6
+ * columns (upstream_pr_url, upstream_pr_number, upstream_pr_status) aligned
7
+ * with the PullRequest value object.
8
+ */
9
+ import type { MigrationParams } from 'umzug';
10
+ import type Database from 'better-sqlite3';
11
+ export declare function up({ context: db }: MigrationParams<Database.Database>): Promise<void>;
12
+ export declare function down({ context: db }: MigrationParams<Database.Database>): Promise<void>;
13
+ //# sourceMappingURL=045-add-fork-and-pr-columns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"045-add-fork-and-pr-columns.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/045-add-fork-and-pr-columns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Migration 045: Add fork-and-PR columns to features table.
3
+ *
4
+ * Adds fork_and_pr (boolean, default 0) and commit_specs (boolean, default 1)
5
+ * for per-feature fork workflow configuration. Also adds upstream PR tracking
6
+ * columns (upstream_pr_url, upstream_pr_number, upstream_pr_status) aligned
7
+ * with the PullRequest value object.
8
+ */
9
+ export async function up({ context: db }) {
10
+ const columns = db.pragma('table_info(features)');
11
+ const names = new Set(columns.map((c) => c.name));
12
+ if (!names.has('fork_and_pr')) {
13
+ db.exec('ALTER TABLE features ADD COLUMN fork_and_pr INTEGER DEFAULT 0');
14
+ }
15
+ if (!names.has('commit_specs')) {
16
+ db.exec('ALTER TABLE features ADD COLUMN commit_specs INTEGER DEFAULT 1');
17
+ }
18
+ if (!names.has('upstream_pr_url')) {
19
+ db.exec('ALTER TABLE features ADD COLUMN upstream_pr_url TEXT');
20
+ }
21
+ if (!names.has('upstream_pr_number')) {
22
+ db.exec('ALTER TABLE features ADD COLUMN upstream_pr_number INTEGER');
23
+ }
24
+ if (!names.has('upstream_pr_status')) {
25
+ db.exec('ALTER TABLE features ADD COLUMN upstream_pr_status TEXT');
26
+ }
27
+ }
28
+ export async function down({ context: db }) {
29
+ void db;
30
+ }
@@ -58,6 +58,8 @@ export declare function createFastFeatureAgentGraph(depsOrExecutor: FastFeatureA
58
58
  ciStatus: string | null;
59
59
  push: boolean;
60
60
  openPr: boolean;
61
+ forkAndPr: boolean;
62
+ commitSpecs: boolean;
61
63
  evidence: import("../../../../domain/index.js").Evidence[];
62
64
  evidenceRetries: number;
63
65
  resumeReason: string | undefined;
@@ -86,6 +88,8 @@ export declare function createFastFeatureAgentGraph(depsOrExecutor: FastFeatureA
86
88
  ciStatus?: string | null | undefined;
87
89
  push?: boolean | undefined;
88
90
  openPr?: boolean | undefined;
91
+ forkAndPr?: boolean | undefined;
92
+ commitSpecs?: boolean | undefined;
89
93
  evidence?: import("../../../../domain/index.js").Evidence[] | undefined;
90
94
  evidenceRetries?: number | undefined;
91
95
  resumeReason?: string | undefined;
@@ -134,6 +138,8 @@ export declare function createFastFeatureAgentGraph(depsOrExecutor: FastFeatureA
134
138
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
135
139
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
136
140
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
141
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
142
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
137
143
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
138
144
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
139
145
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -182,6 +188,8 @@ export declare function createFastFeatureAgentGraph(depsOrExecutor: FastFeatureA
182
188
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
183
189
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
184
190
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
191
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
192
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
185
193
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
186
194
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
187
195
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -231,6 +239,8 @@ export declare function createFastFeatureAgentGraph(depsOrExecutor: FastFeatureA
231
239
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
232
240
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
233
241
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
242
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
243
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
234
244
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
235
245
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
236
246
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"fast-feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGlF,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CACjD;AAkBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,yBAAyB,GAAG,cAAc,EAC1D,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6BnC"}
1
+ {"version":3,"file":"fast-feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGlF,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CACjD;AAkBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,yBAAyB,GAAG,cAAc,EAC1D,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6BnC"}
@@ -45,6 +45,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
45
45
  ciStatus: string | null;
46
46
  push: boolean;
47
47
  openPr: boolean;
48
+ forkAndPr: boolean;
49
+ commitSpecs: boolean;
48
50
  evidence: import("../../../../domain/index.js").Evidence[];
49
51
  evidenceRetries: number;
50
52
  resumeReason: string | undefined;
@@ -73,6 +75,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
73
75
  ciStatus?: string | null | undefined;
74
76
  push?: boolean | undefined;
75
77
  openPr?: boolean | undefined;
78
+ forkAndPr?: boolean | undefined;
79
+ commitSpecs?: boolean | undefined;
76
80
  evidence?: import("../../../../domain/index.js").Evidence[] | undefined;
77
81
  evidenceRetries?: number | undefined;
78
82
  resumeReason?: string | undefined;
@@ -121,6 +125,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
121
125
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
122
126
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
123
127
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
128
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
129
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
124
130
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
125
131
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
126
132
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -169,6 +175,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
169
175
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
170
176
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
171
177
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
178
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
179
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
172
180
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
173
181
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
174
182
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -218,6 +226,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
218
226
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
219
227
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
220
228
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
229
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
230
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
221
231
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
222
232
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
223
233
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -267,6 +277,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
267
277
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
268
278
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
269
279
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
280
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
281
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
270
282
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
271
283
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
272
284
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -316,6 +328,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
316
328
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
317
329
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
318
330
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
331
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
332
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
319
333
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
320
334
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
321
335
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -365,6 +379,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
365
379
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
366
380
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
367
381
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
382
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
383
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
368
384
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
369
385
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
370
386
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -414,6 +430,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
414
430
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
415
431
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
416
432
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
433
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
434
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
417
435
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
418
436
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
419
437
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -463,6 +481,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
463
481
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
464
482
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
465
483
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
484
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
485
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
466
486
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
467
487
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
468
488
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -512,6 +532,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
512
532
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
513
533
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
514
534
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
535
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
536
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
515
537
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
516
538
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
517
539
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -561,6 +583,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
561
583
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
562
584
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
563
585
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
586
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
587
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
564
588
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
565
589
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
566
590
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -610,6 +634,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
610
634
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
611
635
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
612
636
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
637
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
638
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
613
639
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
614
640
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
615
641
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -659,6 +685,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
659
685
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
660
686
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
661
687
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
688
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
689
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
662
690
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
663
691
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
664
692
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -708,6 +736,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
708
736
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
709
737
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
710
738
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
739
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
740
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
711
741
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
712
742
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
713
743
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -757,6 +787,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
757
787
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
758
788
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
759
789
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
790
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
791
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
760
792
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
761
793
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
762
794
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -806,6 +838,8 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
806
838
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
807
839
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
808
840
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
841
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
842
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
809
843
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").Evidence[], import("../../../../domain/index.js").Evidence[]>;
810
844
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
811
845
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAOpG,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAclF,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CACjD;AAwID;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,qBAAqB,GAAG,cAAc,EACtD,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAgFnC"}
1
+ {"version":3,"file":"feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAOpG,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAclF,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CACjD;AAwID;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,qBAAqB,GAAG,cAAc,EACtD,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAgFnC"}
@@ -18,6 +18,8 @@ export declare class FeatureAgentProcessService implements IFeatureAgentProcessS
18
18
  resumeFromInterrupt?: boolean;
19
19
  push?: boolean;
20
20
  openPr?: boolean;
21
+ forkAndPr?: boolean;
22
+ commitSpecs?: boolean;
21
23
  resumePayload?: string;
22
24
  agentType?: AgentType;
23
25
  fast?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAalG,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,MAAM;IAuET,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
1
+ {"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAalG,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,MAAM;IA6ET,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
@@ -60,6 +60,12 @@ export class FeatureAgentProcessService {
60
60
  if (options?.openPr) {
61
61
  args.push('--open-pr');
62
62
  }
63
+ if (options?.forkAndPr) {
64
+ args.push('--fork-and-pr');
65
+ }
66
+ if (options?.commitSpecs === false) {
67
+ args.push('--no-commit-specs');
68
+ }
63
69
  if (options?.resumePayload) {
64
70
  args.push('--resume-payload', options.resumePayload);
65
71
  }
@@ -23,6 +23,8 @@ export interface WorkerArgs {
23
23
  resumeFromInterrupt?: boolean;
24
24
  push?: boolean;
25
25
  openPr?: boolean;
26
+ forkAndPr?: boolean;
27
+ commitSpecs?: boolean;
26
28
  resumePayload?: string;
27
29
  agentType?: AgentType;
28
30
  fast?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAe1B,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAW7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwE1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0R/D"}
1
+ {"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAgB1B,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAW7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA4E1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiS/D"}
@@ -54,6 +54,8 @@ export function parseWorkerArgs(args) {
54
54
  const resumeFromInterrupt = args.includes('--resume-from-interrupt');
55
55
  const push = args.includes('--push');
56
56
  const openPr = args.includes('--open-pr');
57
+ const forkAndPr = args.includes('--fork-and-pr');
58
+ const commitSpecs = !args.includes('--no-commit-specs');
57
59
  const fast = args.includes('--fast');
58
60
  const threadIdx = args.indexOf('--thread-id');
59
61
  const threadId = threadIdx !== -1 && threadIdx + 1 < args.length ? args[threadIdx + 1] : undefined;
@@ -83,6 +85,8 @@ export function parseWorkerArgs(args) {
83
85
  resumeFromInterrupt,
84
86
  push,
85
87
  openPr,
88
+ forkAndPr,
89
+ commitSpecs,
86
90
  resumePayload,
87
91
  agentType,
88
92
  fast,
@@ -143,6 +147,8 @@ export async function runWorker(args) {
143
147
  ...(args.resumeFromInterrupt ? ['--resume-from-interrupt'] : []),
144
148
  ...(args.push ? ['--push'] : []),
145
149
  ...(args.openPr ? ['--open-pr'] : []),
150
+ ...(args.forkAndPr ? ['--fork-and-pr'] : []),
151
+ ...(args.commitSpecs === false ? ['--no-commit-specs'] : []),
146
152
  ...(args.resumePayload ? ['--resume-payload', args.resumePayload] : []),
147
153
  ...(args.agentType ? ['--agent-type', args.agentType] : []),
148
154
  ...(args.fast ? ['--fast'] : []),
@@ -185,6 +191,7 @@ export async function runWorker(args) {
185
191
  localMergeSquash: (cwd, featureBranch, baseBranch, commitMessage, hasRemote) => gitPrService.localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote),
186
192
  featureRepository,
187
193
  gitPrService,
194
+ gitForkService: container.resolve('IGitForkService'),
188
195
  cleanupFeatureWorktreeUseCase,
189
196
  },
190
197
  };
@@ -274,6 +281,8 @@ export async function runWorker(args) {
274
281
  ...(args.resumeReason ? { resumeReason: args.resumeReason } : {}),
275
282
  push: args.push ?? false,
276
283
  openPr: args.openPr ?? false,
284
+ forkAndPr: args.forkAndPr ?? false,
285
+ commitSpecs: args.commitSpecs ?? true,
277
286
  }, graphConfig);
278
287
  }
279
288
  else {
@@ -287,6 +296,8 @@ export async function runWorker(args) {
287
296
  ...(args.model ? { model: args.model } : {}),
288
297
  push: args.push ?? false,
289
298
  openPr: args.openPr ?? false,
299
+ forkAndPr: args.forkAndPr ?? false,
300
+ commitSpecs: args.commitSpecs ?? true,
290
301
  }, graphConfig);
291
302
  }
292
303
  log(`Graph invocation completed. Error: ${result.error ?? 'none'}`);
@@ -17,6 +17,7 @@ import type { FeatureAgentState } from '../../state.js';
17
17
  import type { IFeatureRepository } from '../../../../../../application/ports/output/repositories/feature-repository.interface.js';
18
18
  import type { DiffSummary, IGitPrService } from '../../../../../../application/ports/output/services/git-pr-service.interface.js';
19
19
  import type { CleanupFeatureWorktreeUseCase } from '../../../../../../application/use-cases/features/cleanup-feature-worktree.use-case.js';
20
+ import type { IGitForkService } from '../../../../../../application/ports/output/services/git-fork-service.interface.js';
20
21
  export interface MergeNodeDeps {
21
22
  executor: IAgentExecutor;
22
23
  getDiffSummary: (cwd: string, baseBranch: string) => Promise<DiffSummary>;
@@ -37,6 +38,7 @@ export interface MergeNodeDeps {
37
38
  */
38
39
  revParse: (cwd: string, ref: string) => Promise<string>;
39
40
  gitPrService: IGitPrService;
41
+ gitForkService?: IGitForkService;
40
42
  cleanupFeatureWorktreeUseCase: Pick<CleanupFeatureWorktreeUseCase, 'execute'>;
41
43
  }
42
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAoBzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AAE3H,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;OAEG;IACH,gBAAgB,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,OAAO,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;OAGG;IACH,WAAW,EAAE,CACX,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,YAAY,EAAE,aAAa,CAAC;IAC5B,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;CAC/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAiU7E"}
1
+ {"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAoBzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uEAAuE,CAAC;AAC3H,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mEAAmE,CAAC;AAEzG,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;OAEG;IACH,gBAAgB,EAAE,CAChB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,OAAO,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;OAGG;IACH,WAAW,EAAE,CACX,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,YAAY,EAAE,aAAa,CAAC;IAC5B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;CAC/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAgY7E"}
@@ -220,6 +220,56 @@ export function createMergeNode(deps) {
220
220
  ciStatus = feature.pr.ciStatus ?? ciStatus;
221
221
  }
222
222
  }
223
+ // --- Fork-and-PR flow ---
224
+ // When forkAndPr=true, fork the repo, push to the fork, create upstream PR,
225
+ // then transition to AwaitingUpstream instead of merging.
226
+ if (state.forkAndPr && deps.gitForkService) {
227
+ log.info('Fork-and-PR flow: forking repo and creating upstream PR');
228
+ await deps.gitForkService.forkRepository(cwd);
229
+ log.info('Repository forked, remotes remapped');
230
+ await deps.gitForkService.pushToFork(cwd, branch);
231
+ log.info(`Branch ${branch} pushed to fork`);
232
+ const upstreamPr = await deps.gitForkService.createUpstreamPr(cwd, feature?.name ?? branch, feature?.description ?? '', branch, baseBranch);
233
+ log.info(`Upstream PR created: ${upstreamPr.url}`);
234
+ messages.push(`[merge] Upstream PR created: ${upstreamPr.url}`);
235
+ if (feature) {
236
+ await deps.featureRepository.update({
237
+ ...feature,
238
+ lifecycle: SdlcLifecycle.AwaitingUpstream,
239
+ pr: {
240
+ ...(feature.pr ?? { url: '', number: 0, status: PrStatus.Open }),
241
+ ...(commitHash ? { commitHash } : {}),
242
+ upstreamPrUrl: upstreamPr.url,
243
+ upstreamPrNumber: upstreamPr.number,
244
+ upstreamPrStatus: PrStatus.Open,
245
+ },
246
+ updatedAt: new Date(),
247
+ });
248
+ messages.push(`[merge] Feature lifecycle → AwaitingUpstream`);
249
+ }
250
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
251
+ await recordPhaseEnd(mergeTimingId, Date.now() - startTime, {
252
+ inputTokens: totalInputTokens || undefined,
253
+ outputTokens: totalOutputTokens || undefined,
254
+ exitCode: 'success',
255
+ });
256
+ messages.push(`[merge] Complete (${elapsed}s)`);
257
+ log.info(`Fork-and-PR merge flow complete (${elapsed}s)`);
258
+ return {
259
+ currentNode: 'merge',
260
+ messages,
261
+ commitHash,
262
+ prUrl,
263
+ prNumber,
264
+ ciStatus,
265
+ ciFixAttempts,
266
+ ciFixHistory,
267
+ ciFixStatus,
268
+ _approvalAction: null,
269
+ _rejectionFeedback: null,
270
+ _needsReexecution: false,
271
+ };
272
+ }
223
273
  // --- Merge ---
224
274
  // Merge when: allowMerge is true (auto-merge), OR user explicitly
225
275
  // approved at the merge gate (isResumeAfterInterrupt means they
@@ -48,6 +48,8 @@ export declare const FeatureAgentAnnotation: import("@langchain/langgraph").Anno
48
48
  ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
49
49
  push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
50
50
  openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
51
+ forkAndPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
52
+ commitSpecs: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
51
53
  evidence: import("@langchain/langgraph").BinaryOperatorAggregate<Evidence[], Evidence[]>;
52
54
  evidenceRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
53
55
  resumeReason: import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoGjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4GjC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,sBAAsB,CAAC,KAAK,CAAC"}
@@ -79,6 +79,14 @@ export const FeatureAgentAnnotation = Annotation.Root({
79
79
  reducer: (_prev, next) => next,
80
80
  default: () => false,
81
81
  }),
82
+ forkAndPr: Annotation({
83
+ reducer: (_prev, next) => next,
84
+ default: () => false,
85
+ }),
86
+ commitSpecs: Annotation({
87
+ reducer: (_prev, next) => next,
88
+ default: () => true,
89
+ }),
82
90
  // --- Evidence state ---
83
91
  evidence: Annotation({
84
92
  reducer: (prev, next) => [...prev, ...next],
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Git Fork Service Implementation
3
+ *
4
+ * Manages GitHub fork operations: forking repos, pushing to forks,
5
+ * creating upstream PRs, and polling upstream PR status.
6
+ * Uses `gh` CLI for all GitHub API interactions.
7
+ */
8
+ import type { IGitForkService } from '../../../application/ports/output/services/git-fork-service.interface.js';
9
+ import type { UpstreamPrResult } from '../../../application/ports/output/services/git-fork-service.interface.js';
10
+ import { PrStatus } from '../../../domain/generated/output.js';
11
+ import type { ExecFunction } from './worktree.service.js';
12
+ export declare class GitForkService implements IGitForkService {
13
+ private readonly execFile;
14
+ constructor(execFile: ExecFunction);
15
+ forkRepository(cwd: string): Promise<void>;
16
+ pushToFork(cwd: string, branch: string): Promise<void>;
17
+ createUpstreamPr(cwd: string, title: string, body: string, head: string, base: string): Promise<UpstreamPrResult>;
18
+ getUpstreamPrStatus(upstreamRepo: string, prNumber: number): Promise<PrStatus>;
19
+ /**
20
+ * Extract owner/repo from a git remote URL.
21
+ * Handles both HTTPS and SSH formats.
22
+ */
23
+ private extractRepoFromUrl;
24
+ }
25
+ //# sourceMappingURL=git-fork.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-fork.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-fork.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0EAA0E,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0EAA0E,CAAC;AAKjH,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,cAAe,YAAW,eAAe;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C1C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatD,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC;IAiDtB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBpF;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAU3B"}