@shepai/cli 1.164.1 → 1.165.0-pr513.2621e83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/apis/json-schema/Feature.yaml +17 -5
  2. package/apis/json-schema/FeatureMode.yaml +8 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  4. package/apis/json-schema/WorkflowConfig.yaml +10 -5
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -2
  6. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +4 -3
  8. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -2
  10. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -2
  11. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +3 -2
  13. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -2
  14. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +18 -7
  16. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +3 -2
  17. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  18. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
  19. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +13 -0
  20. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts +40 -0
  21. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.js +125 -0
  23. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -2
  24. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  25. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +5 -3
  26. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  27. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +2 -1
  28. package/dist/packages/core/src/domain/generated/output.d.ts +22 -4
  29. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  30. package/dist/packages/core/src/domain/generated/output.js +7 -0
  31. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +21 -6
  32. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  33. package/dist/packages/core/src/domain/lifecycle-gates.js +25 -6
  34. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +3 -1
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +10 -4
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -1
  40. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +7 -2
  42. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts +19 -0
  43. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts.map +1 -0
  44. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.js +46 -0
  45. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts +17 -0
  46. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts.map +1 -0
  47. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.js +37 -0
  48. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts +12 -0
  49. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts.map +1 -0
  50. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.js +17 -0
  51. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +5 -3
  53. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -3
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts +362 -0
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts.map +1 -0
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.js +72 -0
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +20 -0
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +68 -0
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  61. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -2
  62. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  63. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -3
  64. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -2
  65. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  66. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +19 -8
  67. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
  68. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +1 -0
  69. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts +18 -0
  70. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts.map +1 -0
  71. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.js +52 -0
  72. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  73. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -0
  74. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts +24 -0
  75. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts.map +1 -0
  76. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.js +38 -0
  77. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts +31 -0
  78. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts.map +1 -0
  79. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.js +240 -0
  80. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts +21 -0
  81. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts.map +1 -0
  82. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.js +134 -0
  83. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +4 -0
  84. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  85. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +17 -0
  86. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  87. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  88. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +7 -4
  89. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts +12 -0
  90. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts.map +1 -0
  91. package/dist/src/presentation/cli/commands/feat/feedback.command.js +64 -0
  92. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  93. package/dist/src/presentation/cli/commands/feat/index.js +5 -1
  94. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  95. package/dist/src/presentation/cli/commands/feat/new.command.js +18 -5
  96. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts +13 -0
  97. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts.map +1 -0
  98. package/dist/src/presentation/cli/commands/feat/promote.command.js +41 -0
  99. package/dist/src/presentation/web/app/actions/create-feature.d.ts +3 -2
  100. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  101. package/dist/src/presentation/web/app/actions/create-feature.js +3 -3
  102. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts +9 -0
  103. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts.map +1 -0
  104. package/dist/src/presentation/web/app/actions/discard-exploration.js +29 -0
  105. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +2 -1
  106. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  107. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +2 -1
  108. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts +11 -0
  109. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts.map +1 -0
  110. package/dist/src/presentation/web/app/actions/promote-exploration.js +21 -0
  111. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts +12 -0
  112. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts.map +1 -0
  113. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.js +40 -0
  114. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  115. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  116. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  117. package/dist/src/presentation/web/app/build-feature-node-data.js +4 -2
  118. package/dist/src/presentation/web/app/build-graph-nodes.js +4 -2
  119. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
  120. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  121. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +3 -0
  122. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  123. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +65 -1
  124. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +3 -2
  125. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  126. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +15 -11
  127. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  128. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +2 -1
  129. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts +8 -0
  130. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts.map +1 -0
  131. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.js +33 -0
  132. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts +10 -0
  133. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts.map +1 -0
  134. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.js +33 -0
  135. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +6 -1
  136. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  137. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +16 -4
  138. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts +11 -0
  139. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts.map +1 -0
  140. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.js +34 -0
  141. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts +16 -0
  142. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts.map +1 -0
  143. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.js +70 -0
  144. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  145. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +2 -0
  146. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +6 -2
  147. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  148. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
  149. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  150. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +7 -2
  151. package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts +3 -1
  152. package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts.map +1 -1
  153. package/dist/src/presentation/web/components/common/repo-group/repo-group.js +6 -3
  154. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts +1 -0
  155. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts.map +1 -1
  156. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.js +10 -1
  157. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  158. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -6
  159. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +3 -3
  160. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  161. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +4 -1
  162. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +3 -1
  163. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  164. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  165. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  166. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -0
  167. package/dist/src/presentation/web/components/ui/toggle-group.d.ts +10 -0
  168. package/dist/src/presentation/web/components/ui/toggle-group.d.ts.map +1 -0
  169. package/dist/src/presentation/web/components/ui/toggle-group.js +22 -0
  170. package/dist/src/presentation/web/components/ui/toggle.d.ts +10 -0
  171. package/dist/src/presentation/web/components/ui/toggle.d.ts.map +1 -0
  172. package/dist/src/presentation/web/components/ui/toggle.js +26 -0
  173. package/dist/translations/ar/cli.json +24 -0
  174. package/dist/translations/ar/web.json +6 -2
  175. package/dist/translations/de/cli.json +24 -0
  176. package/dist/translations/de/web.json +6 -2
  177. package/dist/translations/en/cli.json +24 -0
  178. package/dist/translations/en/web.json +6 -2
  179. package/dist/translations/es/cli.json +24 -0
  180. package/dist/translations/es/web.json +6 -2
  181. package/dist/translations/fr/cli.json +24 -0
  182. package/dist/translations/fr/web.json +6 -2
  183. package/dist/translations/he/cli.json +24 -0
  184. package/dist/translations/he/web.json +6 -2
  185. package/dist/translations/pt/cli.json +24 -0
  186. package/dist/translations/pt/web.json +6 -2
  187. package/dist/translations/ru/cli.json +24 -0
  188. package/dist/translations/ru/web.json +6 -2
  189. package/dist/tsconfig.build.tsbuildinfo +1 -1
  190. package/package.json +1 -1
  191. package/web/.next/BUILD_ID +1 -1
  192. package/web/.next/build-manifest.json +2 -2
  193. package/web/.next/fallback-build-manifest.json +2 -2
  194. package/web/.next/prerender-manifest.json +3 -3
  195. package/web/.next/required-server-files.js +3 -3
  196. package/web/.next/required-server-files.json +3 -3
  197. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  198. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  199. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  201. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  202. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  203. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  204. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  205. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  206. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +119 -74
  207. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
  208. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  209. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  210. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +119 -74
  211. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
  212. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  213. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  214. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  215. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  216. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  217. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  218. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  219. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  220. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  221. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  222. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  223. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  224. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  225. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  226. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +119 -74
  227. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
  228. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  229. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  230. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +119 -74
  231. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
  232. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  233. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  234. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  235. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  236. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  237. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  238. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  239. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  240. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  241. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  242. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  243. package/web/.next/server/app/_global-error.html +2 -2
  244. package/web/.next/server/app/_global-error.rsc +1 -1
  245. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  246. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  247. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  248. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  249. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  250. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  251. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  252. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  253. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  254. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  255. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  256. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  257. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  258. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  259. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  260. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  261. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  262. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  263. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  264. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  265. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  266. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  267. package/web/.next/server/app/version/page.js.nft.json +1 -1
  268. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  269. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  270. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  271. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +1 -1
  272. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  273. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  274. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  275. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  276. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  277. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  279. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
  281. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js +2 -2
  283. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  285. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js +3 -0
  287. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  289. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +1 -1
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js +4 -0
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js +4 -0
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js.map +1 -0
  294. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js +4 -0
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js.map +1 -0
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js +4 -0
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js.map +1 -0
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js +1 -1
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js +1 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  311. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  313. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/_0727935d._.js +1 -1
  315. package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
  316. package/web/.next/server/chunks/ssr/_0dc06d07._.js +1 -1
  317. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
  318. package/web/.next/server/chunks/ssr/{_423abf07._.js → _11cefd16._.js} +2 -2
  319. package/web/.next/server/chunks/ssr/_11cefd16._.js.map +1 -0
  320. package/web/.next/server/chunks/ssr/_12c98a3d._.js +3 -0
  321. package/web/.next/server/chunks/ssr/_12c98a3d._.js.map +1 -0
  322. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  323. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  324. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  325. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  326. package/web/.next/server/chunks/ssr/_1e08a336._.js +1 -1
  327. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  328. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  329. package/web/.next/server/chunks/ssr/_43ba79e7._.js +3 -0
  330. package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +1 -0
  331. package/web/.next/server/chunks/ssr/_5119a3df._.js +1 -1
  332. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  333. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  334. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  335. package/web/.next/server/chunks/ssr/_5eb460b1._.js +3 -0
  336. package/web/.next/server/chunks/ssr/_5eb460b1._.js.map +1 -0
  337. package/web/.next/server/chunks/ssr/{_3694ac1d._.js → _75f0b0fe._.js} +2 -2
  338. package/web/.next/server/chunks/ssr/_75f0b0fe._.js.map +1 -0
  339. package/web/.next/server/chunks/ssr/_997b560b._.js +3 -0
  340. package/web/.next/server/chunks/ssr/_997b560b._.js.map +1 -0
  341. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  342. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  343. package/web/.next/server/chunks/ssr/_acc5e43e._.js +9 -0
  344. package/web/.next/server/chunks/ssr/_acc5e43e._.js.map +1 -0
  345. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  346. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  347. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  348. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  349. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  350. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  351. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  352. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  353. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  354. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  355. package/web/.next/server/chunks/ssr/{_97d6bed3._.js → _f4086cb6._.js} +2 -2
  356. package/web/.next/server/chunks/ssr/{_97d6bed3._.js.map → _f4086cb6._.js.map} +1 -1
  357. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  358. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  359. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  360. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  361. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  362. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +3 -0
  364. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map +1 -0
  365. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  366. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  367. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  368. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  369. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  370. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  371. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  372. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  373. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  374. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  375. package/web/.next/server/pages/500.html +2 -2
  376. package/web/.next/server/server-reference-manifest.js +1 -1
  377. package/web/.next/server/server-reference-manifest.json +303 -195
  378. package/web/.next/static/chunks/{d5366257d6b9f855.js → 2a9af061f4fbe7f5.js} +1 -1
  379. package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
  380. package/web/.next/static/chunks/3425e7d1b8c44fcf.js +5 -0
  381. package/web/.next/static/chunks/387b61bf5fe98489.js +1 -0
  382. package/web/.next/static/chunks/3ffd3d331ce9991e.js +1 -0
  383. package/web/.next/static/chunks/{2bf4ef44d86ffc3b.js → 408f0fae9aebd4ce.js} +3 -3
  384. package/web/.next/static/chunks/7b2ba627f78d1730.js +1 -0
  385. package/web/.next/static/chunks/84ecdec18d323210.css +1 -0
  386. package/web/.next/static/chunks/{779b5c49587b074e.js → 884fceb3e6a67215.js} +1 -1
  387. package/web/.next/static/chunks/{abffc5c232738d87.js → 8a0b6b5e00501f7d.js} +1 -1
  388. package/web/.next/static/chunks/8b0a9cb5109fe899.js +1 -0
  389. package/web/.next/static/chunks/{6590ee22b55e119c.js → 9aa8486d10ba7131.js} +1 -1
  390. package/web/.next/static/chunks/a32e0107a4ad74d3.js +1 -0
  391. package/web/.next/static/chunks/{ba1873d442ce6a95.js → b1335961d331f89d.js} +1 -1
  392. package/web/.next/static/chunks/{dbd876611e25a77a.js → c1d5987a3df2faa3.js} +2 -2
  393. package/web/.next/static/chunks/ec8409b3fd25f477.js +1 -0
  394. package/web/.next/static/chunks/{2afb3ff30c02d222.js → edb42f3dc7a611e5.js} +1 -1
  395. package/web/.next/static/chunks/f10474885c41b290.js +7 -0
  396. package/web/.next/static/chunks/fbbd01277183d8f5.js +1 -0
  397. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js +0 -4
  398. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +0 -1
  399. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +0 -4
  400. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +0 -1
  401. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js +0 -4
  402. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +0 -1
  403. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +0 -4
  404. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +0 -1
  405. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js +0 -3
  406. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js.map +0 -1
  407. package/web/.next/server/chunks/ssr/_3694ac1d._.js.map +0 -1
  408. package/web/.next/server/chunks/ssr/_423abf07._.js.map +0 -1
  409. package/web/.next/server/chunks/ssr/_4d49a312._.js +0 -3
  410. package/web/.next/server/chunks/ssr/_4d49a312._.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/_9215e9ec._.js +0 -3
  412. package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/_c45aee16._.js +0 -3
  414. package/web/.next/server/chunks/ssr/_c45aee16._.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/_cc654b75._.js +0 -9
  416. package/web/.next/server/chunks/ssr/_cc654b75._.js.map +0 -1
  417. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
  418. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
  419. package/web/.next/static/chunks/28ae5046faef6cec.js +0 -1
  420. package/web/.next/static/chunks/57ab723edeb11139.js +0 -5
  421. package/web/.next/static/chunks/648c64fc71830213.js +0 -1
  422. package/web/.next/static/chunks/87aab386fe53c79a.js +0 -1
  423. package/web/.next/static/chunks/89846d73600950d1.js +0 -1
  424. package/web/.next/static/chunks/966eb2688300b7f5.js +0 -1
  425. package/web/.next/static/chunks/9ddf7523e76e17a5.js +0 -7
  426. package/web/.next/static/chunks/9f8caef46056054a.js +0 -1
  427. package/web/.next/static/chunks/d45bab7ae6805b07.js +0 -1
  428. package/web/.next/static/chunks/eeadf13c0ea6cbe0.css +0 -1
  429. /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_buildManifest.js +0 -0
  430. /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_clientMiddlewareManifest.json +0 -0
  431. /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_ssgManifest.js +0 -0
@@ -45,10 +45,10 @@ properties:
45
45
  repositoryId:
46
46
  $ref: UUID.yaml
47
47
  description: ID of the Repository entity this feature belongs to
48
- fast:
49
- type: boolean
50
- default: false
51
- description: When true, SDLC phases were skipped and the feature was implemented directly from the prompt
48
+ mode:
49
+ $ref: FeatureMode.yaml
50
+ default: Regular
51
+ description: "Execution mode determining the workflow: Regular (full SDLC), Fast (direct implementation), or Exploration (iterative prototyping)"
52
52
  push:
53
53
  type: boolean
54
54
  default: false
@@ -83,6 +83,17 @@ properties:
83
83
  worktreePath:
84
84
  type: string
85
85
  description: Absolute path to the git worktree for this feature
86
+ iterationCount:
87
+ type: integer
88
+ minimum: -2147483648
89
+ maximum: 2147483647
90
+ default: 0
91
+ description: Current feedback iteration count in exploration mode (0 when not exploring)
92
+ maxIterations:
93
+ type: integer
94
+ minimum: -2147483648
95
+ maximum: 2147483647
96
+ description: Maximum allowed iterations for exploration mode (only set when mode is Exploration)
86
97
  pr:
87
98
  $ref: PullRequest.yaml
88
99
  description: Pull request data (null until PR created)
@@ -107,7 +118,7 @@ required:
107
118
  - lifecycle
108
119
  - messages
109
120
  - relatedArtifacts
110
- - fast
121
+ - mode
111
122
  - push
112
123
  - openPr
113
124
  - forkAndPr
@@ -116,6 +127,7 @@ required:
116
127
  - enableEvidence
117
128
  - commitEvidence
118
129
  - approvalGates
130
+ - iterationCount
119
131
  allOf:
120
132
  - $ref: SoftDeletableEntity.yaml
121
133
  description: Central entity tracking a piece of work through the SDLC lifecycle (Aggregate Root)
@@ -0,0 +1,8 @@
1
+ $schema: https://json-schema.org/draft/2020-12/schema
2
+ $id: FeatureMode.yaml
3
+ type: string
4
+ enum:
5
+ - Regular
6
+ - Fast
7
+ - Exploration
8
+ description: Execution mode determining the feature's workflow and agent graph
@@ -12,6 +12,7 @@ enum:
12
12
  - Maintain
13
13
  - Blocked
14
14
  - Pending
15
+ - Exploring
15
16
  - Deleting
16
17
  - AwaitingUpstream
17
18
  - Archived
@@ -55,10 +55,15 @@ properties:
55
55
  hideCiStatus:
56
56
  type: boolean
57
57
  description: "Hide CI status badges from UI (default: true)"
58
- defaultFastMode:
59
- type: boolean
60
- default: true
61
- description: "Default new features to fast mode (default: true)"
58
+ defaultMode:
59
+ type: string
60
+ default: Fast
61
+ description: "Default feature mode for new features: 'Regular', 'Fast', or 'Exploration' (default: 'Fast')"
62
+ explorationMaxIterations:
63
+ type: integer
64
+ minimum: -2147483648
65
+ maximum: 2147483647
66
+ description: "Maximum exploration feedback iterations (default: 10, 0 = unlimited)"
62
67
  autoArchiveDelayMinutes:
63
68
  type: integer
64
69
  minimum: -2147483648
@@ -70,5 +75,5 @@ required:
70
75
  - ciWatchEnabled
71
76
  - enableEvidence
72
77
  - commitEvidence
73
- - defaultFastMode
78
+ - defaultMode
74
79
  description: Global workflow configuration defaults
@@ -9,7 +9,7 @@
9
9
  * - Application layer depends on this interface
10
10
  * - Infrastructure layer provides concrete implementation
11
11
  */
12
- import type { ApprovalGates, AgentType } from '../../../../domain/generated/output.js';
12
+ import type { ApprovalGates, AgentType, FeatureMode } from '../../../../domain/generated/output.js';
13
13
  /**
14
14
  * Service interface for feature agent background process management.
15
15
  */
@@ -37,7 +37,7 @@ export interface IFeatureAgentProcessService {
37
37
  commitEvidence?: boolean;
38
38
  resumePayload?: string;
39
39
  agentType?: AgentType;
40
- fast?: boolean;
40
+ mode?: FeatureMode;
41
41
  model?: string;
42
42
  resumeReason?: string;
43
43
  }): number;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-agent-process.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/feature-agent-process.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;OAQG;IACH,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,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,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,CAAC;IAEV;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
1
+ {"version":3,"file":"feature-agent-process.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/feature-agent-process.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAEpG;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;OAQG;IACH,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,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,MAAM,CAAC;IAEV;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
@@ -22,15 +22,16 @@ export interface ISpecInitializerService {
22
22
  * - tasks.yaml
23
23
  * - feature.yaml
24
24
  *
25
- * When mode is 'fast', only feature.yaml is created (no spec/research/plan/tasks).
25
+ * When mode is 'fast', only feature.yaml and spec.yaml are created.
26
+ * When mode is 'exploration', only feature.yaml is created.
26
27
  *
27
28
  * @param basePath - Directory to create specs/ in (typically the worktree path)
28
29
  * @param slug - Feature slug (kebab-case, e.g., "user-authentication")
29
30
  * @param featureNumber - Sequential feature number (will be zero-padded to 3 digits)
30
31
  * @param description - Feature description for template substitution
31
- * @param mode - Optional mode; when 'fast', only feature.yaml is created
32
+ * @param mode - Optional mode; controls which template files are created
32
33
  * @returns The spec directory path and feature number used
33
34
  */
34
- initialize(basePath: string, slug: string, featureNumber: number, description: string, mode?: 'fast'): Promise<SpecInitializerResult>;
35
+ initialize(basePath: string, slug: string, featureNumber: number, description: string, mode?: 'fast' | 'exploration'): Promise<SpecInitializerResult>;
35
36
  }
36
37
  //# sourceMappingURL=spec-initializer.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec-initializer.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/spec-initializer.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC"}
1
+ {"version":3,"file":"spec-initializer.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/spec-initializer.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,GAC5B,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC"}
@@ -22,7 +22,7 @@ import { injectable, inject } from 'tsyringe';
22
22
  import yaml from 'js-yaml';
23
23
  import { readFileSync } from 'node:fs';
24
24
  import { join } from 'node:path';
25
- import { AgentRunStatus } from '../../../domain/generated/output.js';
25
+ import { AgentRunStatus, FeatureMode } from '../../../domain/generated/output.js';
26
26
  import { writeSpecFileAtomic, safeYamlDump, } from '../../../infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
27
27
  import { computeWorktreePath } from '../../../infrastructure/services/ide-launchers/compute-worktree-path.js';
28
28
  let ApproveAgentRunUseCase = class ApproveAgentRunUseCase {
@@ -119,7 +119,7 @@ let ApproveAgentRunUseCase = class ApproveAgentRunUseCase {
119
119
  ...(payload ? { resumePayload: JSON.stringify(payload) } : {}),
120
120
  agentType: run.agentType,
121
121
  ...(run.modelId ? { model: run.modelId } : {}),
122
- ...(feature?.fast ? { fast: true } : {}),
122
+ ...(feature?.mode && feature.mode !== FeatureMode.Regular ? { mode: feature.mode } : {}),
123
123
  });
124
124
  return { approved: true, reason: 'Approved and resumed' };
125
125
  }
@@ -21,7 +21,7 @@ import { injectable, inject } from 'tsyringe';
21
21
  import yaml from 'js-yaml';
22
22
  import { readFileSync } from 'node:fs';
23
23
  import { join } from 'node:path';
24
- import { AgentRunStatus } from '../../../domain/generated/output.js';
24
+ import { AgentRunStatus, FeatureMode } from '../../../domain/generated/output.js';
25
25
  import { writeSpecFileAtomic, safeYamlDump, } from '../../../infrastructure/services/agents/feature-agent/nodes/node-helpers.js';
26
26
  import { recordLifecycleEvent } from '../../../infrastructure/services/agents/feature-agent/phase-timing-context.js';
27
27
  import { computeWorktreePath } from '../../../infrastructure/services/ide-launchers/compute-worktree-path.js';
@@ -135,7 +135,7 @@ let RejectAgentRunUseCase = class RejectAgentRunUseCase {
135
135
  resumePayload: JSON.stringify(rejectionPayload),
136
136
  agentType: run.agentType,
137
137
  ...(run.modelId ? { model: run.modelId } : {}),
138
- ...(feature.fast ? { fast: true } : {}),
138
+ ...(feature.mode !== FeatureMode.Regular ? { mode: feature.mode } : {}),
139
139
  });
140
140
  return {
141
141
  rejected: true,
@@ -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;IA8FlE;;;;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;;;;;;;;;;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;IA+FlE;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;YACW,iBAAiB;IA4B/B;;;OAGG;YACW,iBAAiB;CAuBhC"}
@@ -23,7 +23,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
23
23
  };
24
24
  import { injectable, inject } from 'tsyringe';
25
25
  import { randomUUID } from 'node:crypto';
26
- import { SdlcLifecycle, PrStatus } from '../../../domain/generated/output.js';
26
+ import { SdlcLifecycle, PrStatus, FeatureMode } from '../../../domain/generated/output.js';
27
27
  import { deriveName, deriveSlug } from './branch-name-utils.js';
28
28
  /** Branches that must not be adopted as features. */
29
29
  const PROTECTED_BRANCHES = new Set(['main', 'master']);
@@ -89,7 +89,8 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
89
89
  lifecycle,
90
90
  messages: [],
91
91
  relatedArtifacts: [],
92
- fast: false,
92
+ mode: FeatureMode.Regular,
93
+ iterationCount: 0,
93
94
  push: false,
94
95
  openPr: hasOpenPr,
95
96
  forkAndPr: false,
@@ -27,7 +27,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
27
27
  return function (target, key) { decorator(target, key, paramIndex); }
28
28
  };
29
29
  import { injectable, inject } from 'tsyringe';
30
- import { SdlcLifecycle } from '../../../domain/generated/output.js';
30
+ import { SdlcLifecycle, FeatureMode } from '../../../domain/generated/output.js';
31
31
  import { POST_IMPLEMENTATION } from '../../../domain/lifecycle-gates.js';
32
32
  let CheckAndUnblockFeaturesUseCase = class CheckAndUnblockFeaturesUseCase {
33
33
  featureRepo;
@@ -69,7 +69,7 @@ let CheckAndUnblockFeaturesUseCase = class CheckAndUnblockFeaturesUseCase {
69
69
  ciWatchEnabled: child.ciWatchEnabled,
70
70
  enableEvidence: child.enableEvidence,
71
71
  commitEvidence: child.commitEvidence,
72
- ...(child.fast ? { fast: true } : {}),
72
+ ...(child.mode !== FeatureMode.Regular ? { mode: child.mode } : {}),
73
73
  });
74
74
  }
75
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAMtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAGjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBApBd,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB,EAE3C,cAAc,EAAE,eAAe;IAGlD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwI1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAmJ1D"}
1
+ {"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAOtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAGjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBApBd,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa,EAE3B,iBAAiB,EAAE,wBAAwB,EAE3C,cAAc,EAAE,eAAe;IAGlD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgJ1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAuJ1D"}
@@ -29,7 +29,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
29
29
  };
30
30
  import { injectable, inject } from 'tsyringe';
31
31
  import { randomUUID } from 'node:crypto';
32
- import { SdlcLifecycle, AgentRunStatus, } from '../../../../domain/generated/output.js';
32
+ import { SdlcLifecycle, AgentRunStatus, FeatureMode, } from '../../../../domain/generated/output.js';
33
33
  import { getSettings } from '../../../../infrastructure/services/settings.service.js';
34
34
  import { POST_IMPLEMENTATION } from '../../../../domain/lifecycle-gates.js';
35
35
  import { AttachmentStorageService } from '../../../../infrastructure/services/attachment-storage.service.js';
@@ -75,9 +75,12 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
75
75
  * No AI calls, no git operations — just DB writes.
76
76
  */
77
77
  async createRecord(input) {
78
- let initialLifecycle = input.fast
79
- ? SdlcLifecycle.Implementation
80
- : SdlcLifecycle.Requirements;
78
+ const effectiveMode = input.mode ?? FeatureMode.Regular;
79
+ let initialLifecycle = effectiveMode === FeatureMode.Exploration
80
+ ? SdlcLifecycle.Exploring
81
+ : effectiveMode === FeatureMode.Fast
82
+ ? SdlcLifecycle.Implementation
83
+ : SdlcLifecycle.Requirements;
81
84
  let shouldSpawn = true;
82
85
  let effectiveRepoPath = input.repositoryPath.replace(/\\/g, '/');
83
86
  // Pending flag takes precedence — user explicitly defers agent execution.
@@ -150,7 +153,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
150
153
  lifecycle: initialLifecycle,
151
154
  messages: [],
152
155
  relatedArtifacts: [],
153
- fast: input.fast ?? false,
156
+ mode: effectiveMode,
154
157
  push: input.push ?? false,
155
158
  openPr: input.openPr ?? false,
156
159
  forkAndPr: input.forkAndPr ?? false,
@@ -163,6 +166,10 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
163
166
  allowPlan: false,
164
167
  allowMerge: false,
165
168
  },
169
+ iterationCount: 0,
170
+ ...(effectiveMode === FeatureMode.Exploration && {
171
+ maxIterations: getSettings().workflow.explorationMaxIterations ?? 10,
172
+ }),
166
173
  agentRunId: runId,
167
174
  specPath: '',
168
175
  repositoryId: repository.id,
@@ -227,7 +234,11 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
227
234
  const worktreePath = this.worktreeService.getWorktreePath(effectiveRepoPath, branch);
228
235
  await this.worktreeService.create(effectiveRepoPath, branch, worktreePath, defaultBranch);
229
236
  // Initialize spec directory — full user input goes into spec.yaml as-is
230
- const { specDir } = await this.specInitializer.initialize(worktreePath, slug, featureNumber, input.userInput, input.fast ? 'fast' : undefined);
237
+ const { specDir } = await this.specInitializer.initialize(worktreePath, slug, featureNumber, input.userInput, feature.mode === FeatureMode.Fast
238
+ ? 'fast'
239
+ : feature.mode === FeatureMode.Exploration
240
+ ? 'exploration'
241
+ : undefined);
231
242
  // Commit pending attachments if sessionId was provided (web UI flow)
232
243
  let committedAttachments = input.attachments;
233
244
  if (input.sessionId) {
@@ -305,7 +316,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
305
316
  ciWatchEnabled: input.ciWatchEnabled ?? true,
306
317
  enableEvidence: input.enableEvidence ?? false,
307
318
  commitEvidence: input.commitEvidence ?? false,
308
- ...(input.fast ? { fast: true } : {}),
319
+ ...(feature.mode !== FeatureMode.Regular ? { mode: feature.mode } : {}),
309
320
  ...(input.agentType ? { agentType: input.agentType } : {}),
310
321
  ...(input.model ? { model: input.model } : {}),
311
322
  });
@@ -1,4 +1,5 @@
1
1
  import type { ApprovalGates, Attachment, Feature } from '../../../../domain/generated/output.js';
2
+ import { type FeatureMode } from '../../../../domain/generated/output.js';
2
3
  export interface CreateFeatureInput {
3
4
  userInput: string;
4
5
  repositoryPath: string;
@@ -11,8 +12,8 @@ export interface CreateFeatureInput {
11
12
  name?: string;
12
13
  /** Pre-supplied description (skips AI metadata extraction for description). */
13
14
  description?: string;
14
- /** When true, skip SDLC phases and implement directly from the user prompt. */
15
- fast?: boolean;
15
+ /** Execution mode: Regular (full SDLC), Fast (direct implementation), or Exploration (iterative prototyping). */
16
+ mode?: FeatureMode;
16
17
  /** Fork repo and create PR to upstream at merge time (default: false). */
17
18
  forkAndPr?: boolean;
18
19
  /** Commit specs/evidences into the repo (default: true, auto-false when forkAndPr). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAEjG,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,8FAA8F;IAC9F,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iHAAiH;IACjH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,8FAA8F;IAC9F,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"delete-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/delete-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAE7F,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBACa,oBAAoB;IAEC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IACA,OAAO,CAAC,QAAQ,CAAC,OAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBALP,WAAW,EAAE,kBAAkB,EACjC,eAAe,EAAE,gBAAgB,EAE7D,cAAc,EAAE,2BAA2B,EACZ,OAAO,EAAE,mBAAmB,EAClC,YAAY,EAAE,aAAa;IAGjE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BlF,oGAAoG;YACtF,gBAAgB;IAW9B,0DAA0D;YAC5C,iBAAiB;IAQ/B,6DAA6D;YAC/C,yBAAyB;IAevC,sDAAsD;YACxC,sBAAsB;IAYpC,6EAA6E;YAC/D,oBAAoB;CA+EnC"}
1
+ {"version":3,"file":"delete-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/delete-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAE7F,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBACa,oBAAoB;IAEC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IACA,OAAO,CAAC,QAAQ,CAAC,OAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBALP,WAAW,EAAE,kBAAkB,EACjC,eAAe,EAAE,gBAAgB,EAE7D,cAAc,EAAE,2BAA2B,EACZ,OAAO,EAAE,mBAAmB,EAClC,YAAY,EAAE,aAAa;IAGjE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BlF,oGAAoG;YACtF,gBAAgB;IAW9B,0DAA0D;YAC5C,iBAAiB;IAQ/B,6DAA6D;YAC/C,yBAAyB;IAevC,sDAAsD;YACxC,sBAAsB;IAYpC,6EAA6E;YAC/D,oBAAoB;CAyFnC"}
@@ -25,6 +25,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
25
25
  return function (target, key) { decorator(target, key, paramIndex); }
26
26
  };
27
27
  import { injectable, inject } from 'tsyringe';
28
+ import { homedir } from 'node:os';
29
+ import { join } from 'node:path';
30
+ import { unlink } from 'node:fs/promises';
28
31
  import { AgentRunStatus, PrStatus, SdlcLifecycle } from '../../../domain/generated/output.js';
29
32
  let DeleteFeatureUseCase = class DeleteFeatureUseCase {
30
33
  featureRepo;
@@ -123,6 +126,16 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
123
126
  }
124
127
  await this.runRepo.updateStatus(run.id, AgentRunStatus.cancelled);
125
128
  }
129
+ // Clean up checkpoint database file (used by LangGraph for state persistence)
130
+ if (run?.threadId) {
131
+ const checkpointPath = join(homedir(), '.shep', 'checkpoints', `${run.threadId}.db`);
132
+ try {
133
+ await unlink(checkpointPath);
134
+ }
135
+ catch {
136
+ // Checkpoint file may not exist or already be removed
137
+ }
138
+ }
126
139
  }
127
140
  // Cleanup worktree and branches directly using the feature data we already
128
141
  // have (CleanupFeatureWorktreeUseCase.execute() would fail because
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Promote Exploration Use Case
3
+ *
4
+ * Transitions an exploration feature to Regular or Fast mode via in-place
5
+ * mode transition. Changes the mode field, transitions lifecycle from
6
+ * Exploring to Requirements (regular) or Implementation (fast), optionally
7
+ * scaffolds missing spec YAMLs when promoting to regular, and spawns the
8
+ * appropriate agent graph.
9
+ *
10
+ * Business Rules:
11
+ * - Feature must be in Exploration mode and Exploring lifecycle
12
+ * - Promotion preserves existing worktree and branch (prototype code)
13
+ * - Promoting to Regular scaffolds missing spec YAMLs (spec, research, plan, tasks)
14
+ * - Promoting to Fast does not scaffold spec YAMLs
15
+ * - Spawns the appropriate agent graph after transition
16
+ */
17
+ import type { Feature } from '../../../../domain/generated/output.js';
18
+ import { FeatureMode } from '../../../../domain/generated/output.js';
19
+ import type { IFeatureRepository } from '../../../ports/output/repositories/feature-repository.interface.js';
20
+ import type { IFeatureAgentProcessService } from '../../../ports/output/agents/feature-agent-process.interface.js';
21
+ import type { IAgentRunRepository } from '../../../ports/output/agents/agent-run-repository.interface.js';
22
+ import type { ISpecInitializerService } from '../../../ports/output/services/spec-initializer.interface.js';
23
+ import type { IWorktreeService } from '../../../ports/output/services/worktree-service.interface.js';
24
+ export interface PromoteExplorationInput {
25
+ featureId: string;
26
+ targetMode: FeatureMode.Regular | FeatureMode.Fast;
27
+ }
28
+ export interface PromoteExplorationResult {
29
+ feature: Feature;
30
+ }
31
+ export declare class PromoteExplorationUseCase {
32
+ private readonly featureRepo;
33
+ private readonly processService;
34
+ private readonly runRepo;
35
+ private readonly specInitializer;
36
+ private readonly worktreeService;
37
+ constructor(featureRepo: IFeatureRepository, processService: IFeatureAgentProcessService, runRepo: IAgentRunRepository, specInitializer: ISpecInitializerService, worktreeService: IWorktreeService);
38
+ execute(input: PromoteExplorationInput): Promise<PromoteExplorationResult>;
39
+ }
40
+ //# sourceMappingURL=promote-exploration.use-case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote-exploration.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAiB,WAAW,EAAkB,MAAM,wCAAwC,CAAC;AAEpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAGrG,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBACa,yBAAyB;IAGlC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBARf,WAAW,EAAE,kBAAkB,EAE/B,cAAc,EAAE,2BAA2B,EAE3C,OAAO,EAAE,mBAAmB,EAE5B,eAAe,EAAE,uBAAuB,EAExC,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAiGjF"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Promote Exploration Use Case
3
+ *
4
+ * Transitions an exploration feature to Regular or Fast mode via in-place
5
+ * mode transition. Changes the mode field, transitions lifecycle from
6
+ * Exploring to Requirements (regular) or Implementation (fast), optionally
7
+ * scaffolds missing spec YAMLs when promoting to regular, and spawns the
8
+ * appropriate agent graph.
9
+ *
10
+ * Business Rules:
11
+ * - Feature must be in Exploration mode and Exploring lifecycle
12
+ * - Promotion preserves existing worktree and branch (prototype code)
13
+ * - Promoting to Regular scaffolds missing spec YAMLs (spec, research, plan, tasks)
14
+ * - Promoting to Fast does not scaffold spec YAMLs
15
+ * - Spawns the appropriate agent graph after transition
16
+ */
17
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ };
23
+ var __metadata = (this && this.__metadata) || function (k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ };
26
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
27
+ return function (target, key) { decorator(target, key, paramIndex); }
28
+ };
29
+ import { injectable, inject } from 'tsyringe';
30
+ import { randomUUID } from 'node:crypto';
31
+ import { SdlcLifecycle, FeatureMode, AgentRunStatus } from '../../../../domain/generated/output.js';
32
+ import { EXPLORING_TRANSITIONS } from '../../../../domain/lifecycle-gates.js';
33
+ import { getSettings } from '../../../../infrastructure/services/settings.service.js';
34
+ let PromoteExplorationUseCase = class PromoteExplorationUseCase {
35
+ featureRepo;
36
+ processService;
37
+ runRepo;
38
+ specInitializer;
39
+ worktreeService;
40
+ constructor(featureRepo, processService, runRepo, specInitializer, worktreeService) {
41
+ this.featureRepo = featureRepo;
42
+ this.processService = processService;
43
+ this.runRepo = runRepo;
44
+ this.specInitializer = specInitializer;
45
+ this.worktreeService = worktreeService;
46
+ }
47
+ async execute(input) {
48
+ const feature = (await this.featureRepo.findById(input.featureId)) ??
49
+ (await this.featureRepo.findByIdPrefix(input.featureId));
50
+ if (!feature) {
51
+ throw new Error(`Feature not found: ${input.featureId}`);
52
+ }
53
+ if (feature.mode !== FeatureMode.Exploration) {
54
+ throw new Error(`Feature "${feature.name}" is not in Exploration mode (current: ${feature.mode}). Only exploration features can be promoted.`);
55
+ }
56
+ if (feature.lifecycle !== SdlcLifecycle.Exploring) {
57
+ throw new Error(`Feature "${feature.name}" is not in Exploring lifecycle (current: ${feature.lifecycle}). Only features in Exploring state can be promoted.`);
58
+ }
59
+ const targetLifecycle = input.targetMode === FeatureMode.Fast
60
+ ? SdlcLifecycle.Implementation
61
+ : SdlcLifecycle.Requirements;
62
+ // Validate the transition is allowed
63
+ if (!EXPLORING_TRANSITIONS.has(targetLifecycle)) {
64
+ throw new Error(`Invalid promotion target lifecycle: ${targetLifecycle}`);
65
+ }
66
+ // Scaffold missing spec YAMLs when promoting to regular mode
67
+ if (input.targetMode === FeatureMode.Regular && feature.specPath) {
68
+ const worktreePath = feature.worktreePath ??
69
+ this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
70
+ await this.specInitializer.initialize(worktreePath, feature.slug, 0, // Feature number hint — resolveNextNumber will use existing dir
71
+ feature.userQuery);
72
+ }
73
+ // Create a new agent run for the promoted mode
74
+ const settings = getSettings();
75
+ const runId = randomUUID();
76
+ const agentRun = {
77
+ id: runId,
78
+ agentType: settings.agent.type,
79
+ agentName: 'feature-agent',
80
+ status: AgentRunStatus.pending,
81
+ prompt: feature.userQuery,
82
+ threadId: randomUUID(),
83
+ featureId: feature.id,
84
+ repositoryPath: feature.repositoryPath,
85
+ createdAt: new Date().toISOString(),
86
+ updatedAt: new Date().toISOString(),
87
+ };
88
+ await this.runRepo.create(agentRun);
89
+ // Update the feature: mode, lifecycle, and agent run reference
90
+ const updatedFeature = {
91
+ ...feature,
92
+ mode: input.targetMode,
93
+ lifecycle: targetLifecycle,
94
+ agentRunId: runId,
95
+ updatedAt: new Date(),
96
+ };
97
+ await this.featureRepo.update(updatedFeature);
98
+ // Spawn the appropriate agent graph
99
+ const worktreePath = feature.worktreePath ??
100
+ this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
101
+ this.processService.spawn(feature.id, runId, feature.repositoryPath, feature.specPath ?? '', worktreePath, {
102
+ approvalGates: feature.approvalGates,
103
+ threadId: agentRun.threadId,
104
+ push: feature.push,
105
+ openPr: feature.openPr,
106
+ forkAndPr: feature.forkAndPr,
107
+ commitSpecs: feature.commitSpecs,
108
+ ciWatchEnabled: feature.ciWatchEnabled,
109
+ enableEvidence: feature.enableEvidence,
110
+ commitEvidence: feature.commitEvidence,
111
+ ...(input.targetMode !== FeatureMode.Regular ? { mode: input.targetMode } : {}),
112
+ });
113
+ return { feature: updatedFeature };
114
+ }
115
+ };
116
+ PromoteExplorationUseCase = __decorate([
117
+ injectable(),
118
+ __param(0, inject('IFeatureRepository')),
119
+ __param(1, inject('IFeatureAgentProcessService')),
120
+ __param(2, inject('IAgentRunRepository')),
121
+ __param(3, inject('ISpecInitializerService')),
122
+ __param(4, inject('IWorktreeService')),
123
+ __metadata("design:paramtypes", [Object, Object, Object, Object, Object])
124
+ ], PromoteExplorationUseCase);
125
+ export { PromoteExplorationUseCase };
@@ -18,7 +18,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
18
  };
19
19
  import { injectable, inject } from 'tsyringe';
20
20
  import { randomUUID } from 'node:crypto';
21
- import { AgentRunStatus } from '../../../domain/generated/output.js';
21
+ import { AgentRunStatus, FeatureMode } from '../../../domain/generated/output.js';
22
22
  const RESUMABLE_STATUSES = new Set([
23
23
  AgentRunStatus.interrupted,
24
24
  AgentRunStatus.failed,
@@ -115,7 +115,7 @@ let ResumeFeatureUseCase = class ResumeFeatureUseCase {
115
115
  enableEvidence: feature.enableEvidence,
116
116
  commitEvidence: feature.commitEvidence,
117
117
  agentType: lastRun.agentType,
118
- ...(feature.fast ? { fast: true } : {}),
118
+ ...(feature.mode !== FeatureMode.Regular ? { mode: feature.mode } : {}),
119
119
  ...(lastRun.modelId ? { model: lastRun.modelId } : {}),
120
120
  resumeReason: lastRun.status,
121
121
  });
@@ -1 +1 @@
1
- {"version":3,"file":"start-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/start-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAGlG,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,qBACa,mBAAmB;IAG5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAyG9D"}
1
+ {"version":3,"file":"start-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/start-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAGlG,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,qBACa,mBAAmB;IAG5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA4G9D"}
@@ -18,7 +18,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
18
  return function (target, key) { decorator(target, key, paramIndex); }
19
19
  };
20
20
  import { injectable, inject } from 'tsyringe';
21
- import { SdlcLifecycle } from '../../../domain/generated/output.js';
21
+ import { SdlcLifecycle, FeatureMode } from '../../../domain/generated/output.js';
22
22
  import { POST_IMPLEMENTATION } from '../../../domain/lifecycle-gates.js';
23
23
  let StartFeatureUseCase = class StartFeatureUseCase {
24
24
  featureRepo;
@@ -71,7 +71,9 @@ let StartFeatureUseCase = class StartFeatureUseCase {
71
71
  }
72
72
  }
73
73
  // Check parent gate if feature has a parent
74
- let targetLifecycle = resolved.fast ? SdlcLifecycle.Implementation : SdlcLifecycle.Requirements;
74
+ let targetLifecycle = resolved.mode === FeatureMode.Fast
75
+ ? SdlcLifecycle.Implementation
76
+ : SdlcLifecycle.Requirements;
75
77
  let shouldSpawn = true;
76
78
  if (resolved.parentId) {
77
79
  const parent = await this.featureRepo.findById(resolved.parentId);
@@ -103,7 +105,7 @@ let StartFeatureUseCase = class StartFeatureUseCase {
103
105
  enableEvidence: resolved.enableEvidence,
104
106
  commitEvidence: resolved.commitEvidence,
105
107
  agentType: agentRun.agentType,
106
- ...(resolved.fast ? { fast: true } : {}),
108
+ ...(resolved.mode !== FeatureMode.Regular ? { mode: resolved.mode } : {}),
107
109
  ...(agentRun.modelId ? { model: agentRun.modelId } : {}),
108
110
  });
109
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings-defaults.factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/domain/factories/settings-defaults.factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,QAAQ,EAUT,MAAM,qBAAqB,CAAC;AA6C7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CAsFhD"}
1
+ {"version":3,"file":"settings-defaults.factory.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/domain/factories/settings-defaults.factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,QAAQ,EAUT,MAAM,qBAAqB,CAAC;AA6C7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CAuFhD"}
@@ -118,7 +118,8 @@ export function createDefaultSettings() {
118
118
  ciWatchEnabled: true,
119
119
  enableEvidence: false,
120
120
  commitEvidence: false,
121
- defaultFastMode: true,
121
+ defaultMode: 'Fast',
122
+ explorationMaxIterations: 10,
122
123
  autoArchiveDelayMinutes: 10,
123
124
  };
124
125
  const featureFlags = {