@shepai/cli 1.116.3 → 1.117.0-pr376.0b9d7e1

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 (327) hide show
  1. package/apis/json-schema/AnalyzeRepoTimeouts.yaml +10 -0
  2. package/apis/json-schema/EnvironmentConfig.yaml +5 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  4. package/apis/json-schema/StageTimeouts.yaml +35 -0
  5. package/apis/json-schema/TerminalType.yaml +10 -0
  6. package/apis/json-schema/WorkflowConfig.yaml +6 -0
  7. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +17 -8
  9. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  10. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts +25 -0
  12. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -0
  13. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +116 -0
  14. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  15. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +7 -1
  16. package/dist/packages/core/src/domain/generated/output.d.ts +58 -0
  17. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  18. package/dist/packages/core/src/domain/generated/output.js +9 -0
  19. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +3 -0
  20. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  21. package/dist/packages/core/src/domain/lifecycle-gates.js +3 -0
  22. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +8 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +46 -0
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts +22 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts.map +1 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.js +53 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts +11 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts.map +1 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.js +13 -0
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +15 -6
  35. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +18 -2
  37. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.js +15 -0
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +42 -3
  42. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +5 -0
  43. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +7 -0
  45. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/system-terminal.json +24 -0
  46. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  47. package/dist/src/presentation/cli/commands/feat/index.js +2 -0
  48. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  49. package/dist/src/presentation/cli/commands/feat/ls.command.js +3 -0
  50. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  51. package/dist/src/presentation/cli/commands/feat/new.command.js +9 -1
  52. package/dist/src/presentation/cli/commands/feat/start.command.d.ts +12 -0
  53. package/dist/src/presentation/cli/commands/feat/start.command.d.ts.map +1 -0
  54. package/dist/src/presentation/cli/commands/feat/start.command.js +43 -0
  55. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  56. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  57. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  58. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts +12 -0
  59. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts.map +1 -0
  60. package/dist/src/presentation/web/app/actions/get-available-terminals.js +53 -0
  61. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  62. package/dist/src/presentation/web/app/actions/open-shell.js +47 -3
  63. package/dist/src/presentation/web/app/actions/start-feature.d.ts +5 -0
  64. package/dist/src/presentation/web/app/actions/start-feature.d.ts.map +1 -0
  65. package/dist/src/presentation/web/app/actions/start-feature.js +16 -0
  66. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  67. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  68. package/dist/src/presentation/web/app/settings/page.d.ts.map +1 -1
  69. package/dist/src/presentation/web/app/settings/page.js +6 -2
  70. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  71. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +1 -1
  72. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +20 -1
  74. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  75. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  76. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +6 -2
  77. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +6 -0
  79. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -2
  80. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  81. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +13 -1
  82. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +12 -3
  84. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +2 -0
  85. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  86. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +36 -2
  87. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  88. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -1
  89. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  90. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  91. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +23 -0
  92. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +3 -1
  93. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +32 -5
  95. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +2 -0
  96. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  97. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +34 -1
  98. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +3 -1
  99. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +120 -15
  101. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +1 -0
  102. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  103. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +23 -0
  104. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts +11 -0
  105. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts.map +1 -0
  106. package/dist/src/presentation/web/components/features/settings/timeout-slider.js +63 -0
  107. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts +10 -0
  108. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts.map +1 -0
  109. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.js +24 -0
  110. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +97 -2
  112. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +22 -0
  114. package/dist/src/presentation/web/components/ui/slider.d.ts +5 -0
  115. package/dist/src/presentation/web/components/ui/slider.d.ts.map +1 -0
  116. package/dist/src/presentation/web/components/ui/slider.js +10 -0
  117. package/dist/src/presentation/web/components/ui/slider.stories.d.ts +7 -0
  118. package/dist/src/presentation/web/components/ui/slider.stories.d.ts.map +1 -0
  119. package/dist/src/presentation/web/components/ui/slider.stories.js +15 -0
  120. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  121. package/dist/src/presentation/web/hooks/sidebar-features-context.js +1 -0
  122. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  123. package/dist/src/presentation/web/hooks/use-graph-state.js +1 -0
  124. package/dist/src/presentation/web/lib/derive-graph.d.ts +2 -0
  125. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  126. package/dist/src/presentation/web/lib/derive-graph.js +5 -0
  127. package/dist/tsconfig.build.tsbuildinfo +1 -1
  128. package/package.json +1 -1
  129. package/web/.next/BUILD_ID +1 -1
  130. package/web/.next/build-manifest.json +2 -2
  131. package/web/.next/fallback-build-manifest.json +2 -2
  132. package/web/.next/prerender-manifest.json +3 -3
  133. package/web/.next/required-server-files.js +3 -3
  134. package/web/.next/required-server-files.json +3 -3
  135. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +55 -40
  136. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
  137. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  138. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  140. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  141. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  142. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  143. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +67 -52
  144. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  145. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  147. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  148. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
  149. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +55 -40
  152. package/web/.next/server/app/(dashboard)/create/page.js +3 -3
  153. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  154. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  155. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  156. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  157. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  158. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  159. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +67 -52
  160. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  161. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  162. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +51 -36
  164. package/web/.next/server/app/(dashboard)/page.js +3 -3
  165. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  166. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  167. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  168. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
  169. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  170. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  171. package/web/.next/server/app/_global-error/page.js +1 -1
  172. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  173. package/web/.next/server/app/_global-error.html +2 -2
  174. package/web/.next/server/app/_global-error.rsc +1 -1
  175. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  176. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  177. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  178. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  179. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  180. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  181. package/web/.next/server/app/_not-found/page.js +2 -2
  182. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  183. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  184. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  185. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  186. package/web/.next/server/app/settings/page/server-reference-manifest.json +25 -10
  187. package/web/.next/server/app/settings/page.js +3 -3
  188. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  189. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  190. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  191. package/web/.next/server/app/skills/page.js +2 -2
  192. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  193. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  194. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  195. package/web/.next/server/app/tools/page.js +2 -2
  196. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  197. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  199. package/web/.next/server/app/version/page.js +2 -2
  200. package/web/.next/server/app/version/page.js.nft.json +1 -1
  201. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  202. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  203. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  204. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  205. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  206. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +1 -1
  207. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +1 -1
  208. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  209. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  210. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  212. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +3 -0
  214. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +3 -0
  216. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  218. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js → [root-of-the-server]__2dddfea9._.js} +2 -2
  219. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js.map → [root-of-the-server]__2dddfea9._.js.map} +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js +4 -0
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/{[root-of-the-server]__039967e3._.js → [root-of-the-server]__3155add4._.js} +2 -2
  223. package/web/.next/server/chunks/ssr/{[root-of-the-server]__039967e3._.js.map → [root-of-the-server]__3155add4._.js.map} +1 -1
  224. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js → [root-of-the-server]__4c7486cb._.js} +2 -2
  225. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js.map → [root-of-the-server]__4c7486cb._.js.map} +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
  229. package/web/.next/server/chunks/ssr/{[root-of-the-server]__11033878._.js.map → [root-of-the-server]__6b17a22d._.js.map} +1 -1
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +4 -0
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js +4 -0
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js.map +1 -0
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
  237. package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdc75809._.js.map → [root-of-the-server]__804c006d._.js.map} +1 -1
  238. package/web/.next/server/chunks/ssr/{[root-of-the-server]__89e8a5cc._.js → [root-of-the-server]__8763fd7a._.js} +3 -3
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__8763fd7a._.js.map +1 -0
  240. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e70c5627._.js → [root-of-the-server]__9c56d724._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbd8062c._.js.map → [root-of-the-server]__9c56d724._.js.map} +1 -1
  242. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2773312c._.js → [root-of-the-server]__cfc116d5._.js} +2 -2
  243. package/web/.next/server/chunks/ssr/{[root-of-the-server]__2773312c._.js.map → [root-of-the-server]__cfc116d5._.js.map} +1 -1
  244. package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbd8062c._.js → [root-of-the-server]__d3841d9e._.js} +2 -2
  245. package/web/.next/server/chunks/ssr/{[root-of-the-server]__e70c5627._.js.map → [root-of-the-server]__d3841d9e._.js.map} +1 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__db9afe04._.js +3 -0
  247. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1e68e34._.js.map → [root-of-the-server]__db9afe04._.js.map} +1 -1
  248. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  249. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  250. package/web/.next/server/chunks/ssr/_1bb131c4._.js +1 -1
  251. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -1
  252. package/web/.next/server/chunks/ssr/_250a63ae._.js +1 -1
  253. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  254. package/web/.next/server/chunks/ssr/_2eea2048._.js +3 -0
  255. package/web/.next/server/chunks/ssr/{_c5f84841._.js.map → _2eea2048._.js.map} +1 -1
  256. package/web/.next/server/chunks/ssr/{_8dacd1e7._.js → _2f6f48b8._.js} +2 -2
  257. package/web/.next/server/chunks/ssr/{_8dacd1e7._.js.map → _2f6f48b8._.js.map} +1 -1
  258. package/web/.next/server/chunks/ssr/{_6f0118a0._.js → _3d260002._.js} +2 -2
  259. package/web/.next/server/chunks/ssr/_3d260002._.js.map +1 -0
  260. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  261. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  262. package/web/.next/server/chunks/ssr/_f5a1a9b8._.js +3 -0
  263. package/web/.next/server/chunks/ssr/_f5a1a9b8._.js.map +1 -0
  264. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  265. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +5 -0
  267. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +3 -0
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -0
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  273. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +5 -0
  279. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -0
  280. package/web/.next/server/pages/500.html +2 -2
  281. package/web/.next/server/server-reference-manifest.js +1 -1
  282. package/web/.next/server/server-reference-manifest.json +320 -234
  283. package/web/.next/static/chunks/{18de73b2f14204d3.js → 09528d327a2bb15a.js} +1 -1
  284. package/web/.next/static/chunks/{e12f41ac3d49a7b5.js → 261a4f0c60d9e4ba.js} +1 -1
  285. package/web/.next/static/chunks/304a3dced97f4f68.js +2 -0
  286. package/web/.next/static/chunks/62a8173911f8f130.css +1 -0
  287. package/web/.next/static/chunks/{52285fdb39925ad5.js → 6a2f770718cd585d.js} +1 -1
  288. package/web/.next/static/chunks/{5de387864b89e64c.js → 8748274a8d9400da.js} +2 -2
  289. package/web/.next/static/chunks/a6d2916a7b4b2633.js +1 -0
  290. package/web/.next/static/chunks/bba38aefe51cfdfc.js +1 -0
  291. package/web/.next/static/chunks/bf6bd3385f65bed8.js +1 -0
  292. package/web/.next/static/chunks/{2babc8e3ae9ba6e8.js → c039476485c8b4e8.js} +1 -1
  293. package/web/.next/static/chunks/d363520c26e1cd08.js +1 -0
  294. package/web/.next/static/chunks/{fcde0cbb2976b933.js → e2ef95d904c360f3.js} +1 -1
  295. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +0 -3
  296. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +0 -1
  297. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +0 -3
  298. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +0 -1
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +0 -4
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +0 -1
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +0 -4
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +0 -1
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +0 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -4
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
  309. package/web/.next/server/chunks/ssr/_6f0118a0._.js.map +0 -1
  310. package/web/.next/server/chunks/ssr/_c5f84841._.js +0 -3
  311. package/web/.next/server/chunks/ssr/_d2e408a9._.js +0 -3
  312. package/web/.next/server/chunks/ssr/_d2e408a9._.js.map +0 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +0 -3
  314. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +0 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +0 -5
  316. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +0 -1
  317. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +0 -5
  318. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +0 -1
  319. package/web/.next/static/chunks/0b3ab176958a8286.js +0 -1
  320. package/web/.next/static/chunks/242446982e8d196e.js +0 -1
  321. package/web/.next/static/chunks/552e0f129144b54d.js +0 -1
  322. package/web/.next/static/chunks/57b45edf86522369.css +0 -1
  323. package/web/.next/static/chunks/7b924c47dd2a5a53.js +0 -2
  324. package/web/.next/static/chunks/c172f4a6010cb5b5.js +0 -1
  325. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → nIxRprL30XWZ36yCODJqc}/_buildManifest.js +0 -0
  326. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → nIxRprL30XWZ36yCODJqc}/_clientMiddlewareManifest.json +0 -0
  327. /package/web/.next/static/{CStnC7-QgiTd6U99YUc1N → nIxRprL30XWZ36yCODJqc}/_ssgManifest.js +0 -0
@@ -55,6 +55,7 @@ export function createNewCommand() {
55
55
  .option('--allow-merge', 'Auto-approve merge phase')
56
56
  .option('--allow-all', 'Run fully autonomous (no approval pauses)')
57
57
  .option('--parent <fid>', 'Parent feature ID (full or partial prefix)')
58
+ .option('--pending', 'Create feature without starting the agent')
58
59
  .option('--fast', 'Skip SDLC phases and implement directly from your prompt')
59
60
  .option('--model <model>', 'LLM model identifier for this run (e.g. claude-opus-4-6)')
60
61
  .option('--attach <path>', 'Attach a file (repeatable)', collect, [])
@@ -113,6 +114,7 @@ export function createNewCommand() {
113
114
  push,
114
115
  openPr,
115
116
  ...(parentId !== undefined && { parentId }),
117
+ ...(options.pending && { pending: true }),
116
118
  ...(options.fast && { fast: true }),
117
119
  ...(options.model !== undefined && { model: options.model }),
118
120
  ...(attachmentPaths.length > 0 && { attachmentPaths }),
@@ -129,6 +131,9 @@ export function createNewCommand() {
129
131
  if (feature.lifecycle === SdlcLifecycle.Blocked) {
130
132
  messages.info(`Feature created in Blocked state — waiting for parent to reach Implementation`);
131
133
  }
134
+ if (feature.lifecycle === SdlcLifecycle.Pending) {
135
+ messages.info(`Feature created in Pending state — run ${colors.accent(`shep feat start ${feature.id.slice(0, 8)}`)} to begin`);
136
+ }
132
137
  console.log(` ${colors.muted('ID:')} ${colors.accent(feature.id)}`);
133
138
  console.log(` ${colors.muted('Name:')} ${feature.name}`);
134
139
  console.log(` ${colors.muted('Branch:')} ${colors.accent(feature.branch)}`);
@@ -138,7 +143,10 @@ export function createNewCommand() {
138
143
  console.log(` ${colors.muted('Spec:')} ${feature.specPath}`);
139
144
  }
140
145
  if (feature.agentRunId) {
141
- console.log(` ${colors.muted('Agent:')} ${colors.success('spawned')} (run ${feature.agentRunId.slice(0, 8)})`);
146
+ const agentStatus = feature.lifecycle === SdlcLifecycle.Pending
147
+ ? colors.muted('pending')
148
+ : colors.success('spawned');
149
+ console.log(` ${colors.muted('Agent:')} ${agentStatus} (run ${feature.agentRunId.slice(0, 8)})`);
142
150
  }
143
151
  if (push || openPr) {
144
152
  const pushHint = openPr ? 'push + PR' : 'push only';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Feature Start Command
3
+ *
4
+ * Starts a pending feature by transitioning it to its active lifecycle
5
+ * and spawning the agent.
6
+ *
7
+ * Usage:
8
+ * shep feat start <id>
9
+ */
10
+ import { Command } from 'commander';
11
+ export declare function createStartCommand(): Command;
12
+ //# sourceMappingURL=start.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/start.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,kBAAkB,IAAI,OAAO,CAgC5C"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Feature Start Command
3
+ *
4
+ * Starts a pending feature by transitioning it to its active lifecycle
5
+ * and spawning the agent.
6
+ *
7
+ * Usage:
8
+ * shep feat start <id>
9
+ */
10
+ import { Command } from 'commander';
11
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
12
+ import { StartFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/start-feature.use-case.js';
13
+ import { colors, messages, spinner } from '../../ui/index.js';
14
+ export function createStartCommand() {
15
+ return new Command('start')
16
+ .description('Start a pending feature (spawn the agent)')
17
+ .argument('<id>', 'Feature ID (or prefix)')
18
+ .action(async (id) => {
19
+ try {
20
+ const useCase = container.resolve(StartFeatureUseCase);
21
+ const { feature, agentRun } = await spinner('Starting feature', () => useCase.execute(id));
22
+ messages.newline();
23
+ if (feature.lifecycle === 'Blocked') {
24
+ messages.warning(`Feature transitioned to Blocked — parent has not reached Implementation`);
25
+ }
26
+ else {
27
+ messages.success('Feature started');
28
+ }
29
+ console.log(` ${colors.muted('Feature:')} ${feature.name}`);
30
+ console.log(` ${colors.muted('Branch:')} ${colors.accent(feature.branch)}`);
31
+ console.log(` ${colors.muted('Status:')} ${feature.lifecycle}`);
32
+ if (feature.lifecycle !== 'Blocked') {
33
+ console.log(` ${colors.muted('Agent:')} ${colors.success('spawned')} (run ${agentRun.id.slice(0, 8)})`);
34
+ }
35
+ messages.newline();
36
+ }
37
+ catch (error) {
38
+ const err = error instanceof Error ? error : new Error(String(error));
39
+ messages.error('Failed to start feature', err);
40
+ process.exitCode = 1;
41
+ }
42
+ });
43
+ }
@@ -18,6 +18,8 @@ interface CreateFeatureInput {
18
18
  parentId?: string;
19
19
  /** When true, skip SDLC phases and implement directly from the prompt. */
20
20
  fast?: boolean;
21
+ /** When true, create the feature in pending state (no agent spawned). */
22
+ pending?: boolean;
21
23
  /** Optional agent type override for this feature run */
22
24
  agentType?: string;
23
25
  /** Optional model identifier for this feature run */
@@ -1 +1 @@
1
- {"version":3,"file":"create-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAGpE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4EhD"}
1
+ {"version":3,"file":"create-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAGpE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+EhD"}
@@ -2,7 +2,7 @@
2
2
  import { resolve } from '../../lib/server-container.js';
3
3
  import { composeUserInput } from './compose-user-input.js';
4
4
  export async function createFeature(input) {
5
- const { description, repositoryPath, attachments, sessionId, approvalGates, push, openPr, parentId, fast, agentType, model, } = input;
5
+ const { description, repositoryPath, attachments, sessionId, approvalGates, push, openPr, parentId, fast, pending, agentType, model, } = input;
6
6
  if (!description?.trim()) {
7
7
  return { error: 'description is required' };
8
8
  }
@@ -27,6 +27,7 @@ export async function createFeature(input) {
27
27
  ...(parentId ? { parentId } : {}),
28
28
  description,
29
29
  ...(fast ? { fast } : {}),
30
+ ...(pending ? { pending } : {}),
30
31
  ...(agentType ? { agentType } : {}),
31
32
  ...(model ? { model } : {}),
32
33
  });
@@ -41,6 +42,7 @@ export async function createFeature(input) {
41
42
  openPr: openPr ?? false,
42
43
  ...(parentId ? { parentId } : {}),
43
44
  ...(fast ? { fast } : {}),
45
+ ...(pending ? { pending } : {}),
44
46
  ...(agentType ? { agentType } : {}),
45
47
  ...(model ? { model } : {}),
46
48
  ...(sessionId ? { sessionId } : {}),
@@ -0,0 +1,12 @@
1
+ export interface AvailableTerminal {
2
+ id: string;
3
+ name: string;
4
+ available: boolean;
5
+ }
6
+ /**
7
+ * Returns the list of terminal entries from tool metadata, filtered to the
8
+ * current platform, with availability checks. The "system-terminal" entry
9
+ * is always marked available and listed first.
10
+ */
11
+ export declare function getAvailableTerminals(): Promise<AvailableTerminal[]>;
12
+ //# sourceMappingURL=get-available-terminals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-available-terminals.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-available-terminals.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkD1E"}
@@ -0,0 +1,53 @@
1
+ 'use server';
2
+ import { platform } from 'node:os';
3
+ import { getTerminalEntries } from '../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.js';
4
+ import { checkBinaryExists } from '../../../../../packages/core/src/infrastructure/services/tool-installer/binary-exists.js';
5
+ /**
6
+ * Returns the list of terminal entries from tool metadata, filtered to the
7
+ * current platform, with availability checks. The "system-terminal" entry
8
+ * is always marked available and listed first.
9
+ */
10
+ export async function getAvailableTerminals() {
11
+ const currentPlatform = platform();
12
+ const entries = getTerminalEntries();
13
+ const results = [];
14
+ for (const [id, meta] of entries) {
15
+ // Skip terminals not supported on this platform
16
+ if (meta.platforms &&
17
+ !meta.platforms.includes(currentPlatform)) {
18
+ continue;
19
+ }
20
+ // System terminal is always available
21
+ if (id === 'system-terminal') {
22
+ results.unshift({ id: 'system', name: meta.name, available: true });
23
+ continue;
24
+ }
25
+ // Check binary availability
26
+ const binary = typeof meta.binary === 'string' ? meta.binary : meta.binary[currentPlatform];
27
+ if (!binary)
28
+ continue;
29
+ // For app-bundle terminals (Warp, iTerm2) that use verifyCommand instead of binary check
30
+ let available = false;
31
+ if (meta.verifyCommand.startsWith('test ')) {
32
+ // Use verifyCommand for app-bundle checks (e.g., "test -d /Applications/Warp.app")
33
+ try {
34
+ const { execSync } = await import('node:child_process');
35
+ execSync(meta.verifyCommand, { stdio: 'ignore' });
36
+ available = true;
37
+ }
38
+ catch {
39
+ available = false;
40
+ }
41
+ }
42
+ else {
43
+ const result = await checkBinaryExists(binary);
44
+ available = result.found;
45
+ }
46
+ results.push({ id, name: meta.name, available });
47
+ }
48
+ // Ensure system terminal is always present even if not in tool metadata
49
+ if (!results.some((r) => r.id === 'system')) {
50
+ results.unshift({ id: 'system', name: 'System Terminal', available: true });
51
+ }
52
+ return results;
53
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAsBA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC9E"}
1
+ {"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AA+BA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2E9E"}
@@ -5,11 +5,19 @@ import { isAbsolute } from 'node:path';
5
5
  import { spawn } from 'node:child_process';
6
6
  import { getSettings } from '../../../../../packages/core/src/infrastructure/services/settings.service.js';
7
7
  import { computeWorktreePath } from '../../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js';
8
- // Use a record lookup instead of if/else to prevent the bundler from
8
+ import { getTerminalEntries } from '../../../../../packages/core/src/infrastructure/services/tool-installer/tool-metadata.js';
9
+ /** Resolves a platform-keyed value to the current platform string. */
10
+ function resolvePlatformValue(value) {
11
+ if (typeof value === 'string')
12
+ return value;
13
+ return value[platform()] ?? Object.values(value)[0];
14
+ }
15
+ // Fallback commands for the "system" terminal when no tool metadata entry exists.
16
+ // Uses a record lookup instead of if/else to prevent the bundler from
9
17
  // tree-shaking platform branches at build time. Turbopack evaluates
10
18
  // os.platform() during the build and dead-code-eliminates unused branches,
11
19
  // baking in the CI platform (linux) and breaking macOS/Windows installs.
12
- const SHELL_COMMANDS = {
20
+ const SYSTEM_TERMINAL_COMMANDS = {
13
21
  darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },
14
22
  linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },
15
23
  win32: {
@@ -25,11 +33,47 @@ export async function openShell(input) {
25
33
  try {
26
34
  const settings = getSettings();
27
35
  const shell = settings.environment.shellPreference;
36
+ const terminalPref = settings.environment.terminalPreference ?? 'system';
28
37
  const targetPath = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;
29
38
  if (!existsSync(targetPath)) {
30
39
  return { success: false, error: `Path does not exist: ${targetPath}` };
31
40
  }
32
- const entry = SHELL_COMMANDS[platform()];
41
+ // Try to find the terminal in tool metadata for non-system terminals
42
+ if (terminalPref !== 'system') {
43
+ const entries = getTerminalEntries();
44
+ const terminalEntry = entries.find(([id]) => id === terminalPref);
45
+ if (terminalEntry) {
46
+ const [, meta] = terminalEntry;
47
+ if (meta.openDirectory) {
48
+ const openCmd = resolvePlatformValue(meta.openDirectory);
49
+ if (openCmd.includes('{dir}')) {
50
+ const resolved = openCmd.replace('{dir}', targetPath);
51
+ const useShell = meta.spawnOptions?.shell === true;
52
+ if (useShell) {
53
+ const child = spawn(resolved, [], {
54
+ detached: true,
55
+ stdio: 'ignore',
56
+ shell: true,
57
+ });
58
+ child.on('error', () => undefined);
59
+ child.unref();
60
+ }
61
+ else {
62
+ const [command, ...args] = resolved.split(/\s+/);
63
+ const child = spawn(command, args, {
64
+ detached: true,
65
+ stdio: 'ignore',
66
+ });
67
+ child.on('error', () => undefined);
68
+ child.unref();
69
+ }
70
+ return { success: true, path: targetPath, shell };
71
+ }
72
+ }
73
+ }
74
+ }
75
+ // Fallback to system terminal
76
+ const entry = SYSTEM_TERMINAL_COMMANDS[platform()];
33
77
  if (!entry) {
34
78
  return {
35
79
  success: false,
@@ -0,0 +1,5 @@
1
+ export declare function startFeature(featureId: string): Promise<{
2
+ started: boolean;
3
+ error?: string;
4
+ }>;
5
+ //# sourceMappingURL=start-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/start-feature.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C"}
@@ -0,0 +1,16 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ export async function startFeature(featureId) {
4
+ if (!featureId.trim()) {
5
+ return { started: false, error: 'Feature id is required' };
6
+ }
7
+ try {
8
+ const useCase = resolve('StartFeatureUseCase');
9
+ await useCase.execute(featureId);
10
+ return { started: true };
11
+ }
12
+ catch (error) {
13
+ const message = error instanceof Error ? error.message : 'Failed to start feature';
14
+ return { started: false, error: message };
15
+ }
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAqEvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA4R9C"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAsEvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA4R9C"}
@@ -34,6 +34,7 @@ const LIFECYCLE_TO_NODE = {
34
34
  [SdlcLifecycle.Review]: 'merge',
35
35
  [SdlcLifecycle.Maintain]: 'maintain',
36
36
  [SdlcLifecycle.Blocked]: 'blocked',
37
+ [SdlcLifecycle.Pending]: 'pending',
37
38
  [SdlcLifecycle.Deleting]: 'blocked',
38
39
  };
39
40
  const STATUS_TO_EVENT = {
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/settings/page.tsx"],"names":[],"mappings":"AAGA,uFAAuF;AACvF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,YAAY,qDAoBzC"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/settings/page.tsx"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,YAAY,qDAwBzC"}
@@ -1,12 +1,16 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { loadSettings } from '../actions/load-settings.js';
3
+ import { getAvailableTerminals } from '../actions/get-available-terminals.js';
3
4
  import { SettingsPageClient } from '../../components/features/settings/settings-page-client.js';
4
5
  /** Skip static pre-rendering since we need runtime DI container and server context. */
5
6
  export const dynamic = 'force-dynamic';
6
7
  export default async function SettingsPage() {
7
- const { settings, shepHome, dbFileSize, error } = await loadSettings();
8
+ const [{ settings, shepHome, dbFileSize, error }, availableTerminals] = await Promise.all([
9
+ loadSettings(),
10
+ getAvailableTerminals(),
11
+ ]);
8
12
  if (error || !settings) {
9
13
  return (_jsx("div", { className: "flex h-full flex-col p-6", children: _jsxs("p", { className: "text-destructive text-sm", children: ["Failed to load settings: ", error] }) }));
10
14
  }
11
- return (_jsx("div", { className: "flex h-full flex-col px-6 pb-6", children: _jsx(SettingsPageClient, { settings: settings, shepHome: shepHome ?? '', dbFileSize: dbFileSize ?? 'Unknown' }) }));
15
+ return (_jsx("div", { className: "flex h-full flex-col px-6 pb-6", children: _jsx(SettingsPageClient, { settings: settings, shepHome: shepHome ?? '', dbFileSize: dbFileSize ?? 'Unknown', availableTerminals: availableTerminals }) }));
12
16
  }
@@ -15,7 +15,7 @@ const drawerVariants = cva('', {
15
15
  variants: {
16
16
  size: {
17
17
  sm: 'w-96',
18
- md: 'w-xl',
18
+ md: 'w-2xl',
19
19
  },
20
20
  },
21
21
  defaultVariants: {
@@ -32,7 +32,7 @@ export const SmallSize = {
32
32
  };
33
33
  /** Medium size with content-rich review-style content. */
34
34
  export const MediumSize = {
35
- render: () => (_jsx(DrawerTrigger, { size: "md", children: _jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx("h3", { className: "text-sm font-semibold", children: "Review Content" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "This drawer uses size=\"md\" (w-xl / 576px) for content-rich review panels that need more horizontal space for diff summaries, tables, and code blocks." }), _jsx("div", { className: "bg-muted rounded-md p-3", children: _jsx("pre", { className: "text-xs", children: `+ Added authentication middleware\n- Removed legacy session handler\n Updated user model schema` }) })] }) })),
35
+ render: () => (_jsx(DrawerTrigger, { size: "md", children: _jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx("h3", { className: "text-sm font-semibold", children: "Review Content" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "This drawer uses size=\"md\" (w-2xl / 672px) for content-rich review panels that need more horizontal space for diff summaries, tables, and code blocks." }), _jsx("div", { className: "bg-muted rounded-md p-3", children: _jsx("pre", { className: "text-xs", children: `+ Added authentication middleware\n- Removed legacy session handler\n Updated user model schema` }) })] }) })),
36
36
  };
37
37
  /** Modal drawer with overlay. */
38
38
  export const Modal = {
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CA8iB1F"}
1
+ {"version":3,"file":"feature-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI/D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CA+jB1F"}
@@ -6,6 +6,7 @@ import { toast } from 'sonner';
6
6
  import { Loader2, Trash2, Play, Square, Copy, Check, Code2, ExternalLink } from 'lucide-react';
7
7
  import { approveFeature } from '../../../app/actions/approve-feature.js';
8
8
  import { resumeFeature } from '../../../app/actions/resume-feature.js';
9
+ import { startFeature } from '../../../app/actions/start-feature.js';
9
10
  import { rejectFeature } from '../../../app/actions/reject-feature.js';
10
11
  import { getFeatureArtifact } from '../../../app/actions/get-feature-artifact.js';
11
12
  import { getResearchArtifact } from '../../../app/actions/get-research-artifact.js';
@@ -281,6 +282,20 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
281
282
  return { ...prev, node: { ...prev.node, state: 'running' } };
282
283
  });
283
284
  }, []);
285
+ const handleStart = useCallback(async (featureId) => {
286
+ const result = await startFeature(featureId);
287
+ if (result.error) {
288
+ toast.error(result.error);
289
+ return;
290
+ }
291
+ toast.success('Feature started');
292
+ // Optimistically update the drawer view
293
+ setView((prev) => {
294
+ if (prev.type !== 'feature')
295
+ return prev;
296
+ return { ...prev, node: { ...prev.node, state: 'running' } };
297
+ });
298
+ }, []);
284
299
  // ── Hooks (always called unconditionally per Rules of Hooks) ──────────
285
300
  const featureActionsInput = featureNode?.repositoryPath && featureNode?.branch
286
301
  ? {
@@ -322,7 +337,11 @@ export function FeatureDrawerClient({ view: initialView, urlTab }) {
322
337
  // ── Body ──────────────────────────────────────────────────────────────
323
338
  let body = null;
324
339
  if (view.type === 'feature' && featureNode) {
325
- const enrichedNode = featureNode.state === 'error' ? { ...featureNode, onRetry: handleRetry } : featureNode;
340
+ const enrichedNode = {
341
+ ...featureNode,
342
+ ...(featureNode.state === 'error' && { onRetry: handleRetry }),
343
+ ...(featureNode.state === 'pending' && { onStart: handleStart }),
344
+ };
326
345
  body = (_jsx(FeatureDrawerTabs, { featureNode: enrichedNode, featureId: featureNode.featureId, initialTab: view.initialTab, urlTab: urlTab, sseEvents: events, prdData: prdData, prdSelections: prdSelections, onPrdSelect: (qId, oId) => setPrdSelections((prev) => ({ ...prev, [qId]: oId })), onPrdApprove: handlePrdApprove, onPrdReject: handlePrdReject, isPrdLoading: isLoadingPrd, techData: techData, onTechApprove: handleTechApprove, onTechReject: handleTechReject, isTechLoading: isLoadingTech, productData: isLoadingTechProduct ? null : techProductData, mergeData: mergeData, onMergeApprove: handleMergeApprove, onMergeReject: handleMergeReject, isMergeLoading: isLoadingMerge, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: setChatInput }));
327
346
  }
328
347
  return (_jsx(BaseDrawer, { open: isOpen, onClose: attemptClose, size: "md", modal: false, header: header, "data-testid": view.type === 'feature' ? 'feature-drawer' : 'repository-drawer', children: body }));
@@ -36,6 +36,8 @@ export interface FeatureCreatePayload {
36
36
  parentId?: string;
37
37
  /** When true, skip SDLC phases and implement directly from the prompt. */
38
38
  fast: boolean;
39
+ /** When true, create the feature in pending state (no agent spawned). */
40
+ pending?: boolean;
39
41
  /** Optional agent type override for this feature run */
40
42
  agentType?: string;
41
43
  /** Optional model override for this feature run */
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAO5E,YAAY,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAE/F,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+ED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,EAAE,wBAAwB,2CAmvB1B;AAmJD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,eAAe,EACf,QAAQ,GACT,EAAE,uBAAuB,2CA8JzB"}
1
+ {"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useCallback, useEffect, useRef } from 'react';
4
- import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, FolderPlus, Loader2 } from 'lucide-react';
4
+ import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, Clock, FolderPlus, Loader2, } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils.js';
6
6
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
7
7
  import { BaseDrawer } from '../../common/base-drawer/index.js';
@@ -109,6 +109,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
109
109
  const [commitEvidence, setCommitEvidence] = useState(defaultCommitEvidence);
110
110
  const [parentId, setParentId] = useState(undefined);
111
111
  const [fast, setFast] = useState(false);
112
+ const [pending, setPending] = useState(false);
112
113
  const [overrideAgent, setOverrideAgent] = useState(undefined);
113
114
  const [overrideModel, setOverrideModel] = useState(undefined);
114
115
  const [selectedRepoPath, setSelectedRepoPath] = useState(repositoryPath || undefined);
@@ -152,6 +153,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
152
153
  setSelectedRepoPath(repositoryPath || undefined);
153
154
  setLocalRepos(repositories ?? []);
154
155
  setFast(false);
156
+ setPending(false);
155
157
  setOverrideAgent(undefined);
156
158
  setOverrideModel(undefined);
157
159
  setUploadError(null);
@@ -299,6 +301,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
299
301
  enableEvidence,
300
302
  commitEvidence,
301
303
  fast,
304
+ ...(pending ? { pending } : {}),
302
305
  ...(overrideAgent ? { agentType: overrideAgent } : {}),
303
306
  ...(overrideModel ? { model: overrideModel } : {}),
304
307
  ...(parentId ? { parentId } : {}),
@@ -317,6 +320,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
317
320
  enableEvidence,
318
321
  commitEvidence,
319
322
  fast,
323
+ pending,
320
324
  overrideAgent,
321
325
  overrideModel,
322
326
  parentId,
@@ -406,7 +410,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
406
410
  repositoryPath.split('/').pop() })] })) : null, _jsxs("div", { role: "region", "aria-label": "File drop zone", "data-drag-over": isDragOver ? 'true' : 'false', onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, className: cn('flex flex-col gap-1.5 rounded-md border-2 border-transparent p-1 transition-colors', isDragOver && 'border-primary/50 bg-primary/5'), children: [_jsx(Label, { htmlFor: "feature-description", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "DESCRIBE YOUR FEATURE" }), _jsxs("div", { ref: promptContainerRef, onFocus: handlePromptFocus, onBlur: handlePromptBlur, className: cn('border-input flex h-56 flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow]', isPromptFocused && 'ring-ring/50 border-ring ring-[3px]'), children: [_jsx(Textarea, { id: "feature-description", placeholder: "e.g. Add GitHub OAuth login with callback handling and token refresh...", value: description, onChange: (e) => setDescription(e.target.value), onPaste: handlePaste, required: true, disabled: isSubmitting, className: "min-h-0 flex-1 resize-none rounded-none border-0 shadow-none focus-visible:ring-0" }), attachments.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-1.5 px-3 py-2", children: attachments.map((file) => (_jsx(AttachmentChip, { name: file.name, size: file.size, mimeType: file.mimeType, path: file.path, onRemove: () => handleRemoveFile(file.id), disabled: isSubmitting, loading: file.loading }, file.id))) })), uploadError ? (_jsx("p", { className: "text-destructive px-3 pb-2 text-xs", children: uploadError })) : null, _jsxs("div", { className: "border-input flex items-center gap-3 border-t px-3 py-1.5", children: [_jsx(AgentModelPicker, { initialAgentType: overrideAgent ?? currentAgentType ?? 'claude-code', initialModel: overrideModel ?? currentModel ?? 'claude-sonnet-4-6', mode: "override", onAgentModelChange: (agent, model) => {
407
411
  setOverrideAgent(agent);
408
412
  setOverrideModel(model);
409
- }, disabled: isSubmitting, className: "w-55" }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "ml-auto flex cursor-pointer items-center gap-2", children: [_jsx(Switch, { id: "fast-mode", checked: fast, onCheckedChange: setFast, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fast-mode", className: "flex cursor-pointer items-center gap-1 text-sm font-medium", children: [_jsx(Zap, { className: "h-3.5 w-3.5" }), "Fast Mode"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Skip SDLC phases and implement directly from your prompt." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: isSubmitting, "aria-label": "Attach files", className: "text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors", children: _jsx(PaperclipIcon, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Attach files" })] })] })] })] }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "PARENT FEATURE" }), _jsx(ParentFeatureCombobox, { features: features, value: parentId, onChange: setParentId, disabled: isSubmitting })] })) : null, _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider", children: "APPROVE" }) }), _jsx(TooltipContent, { side: "bottom", children: "Auto-approve phase transitions without manual review." })] }), _jsx("div", { className: "flex flex-1 items-center gap-4", children: AUTO_APPROVE_OPTIONS.map((opt) => (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: `approve-${opt.id}`, size: "sm", checked: approvalGates[opt.id] ?? false, onCheckedChange: (v) => setApprovalGates((prev) => ({ ...prev, [opt.id]: v })), disabled: isSubmitting ||
413
+ }, disabled: isSubmitting, className: "w-55" }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "ml-auto flex cursor-pointer items-center gap-2", children: [_jsx(Switch, { id: "pending-mode", checked: pending, onCheckedChange: setPending, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "pending-mode", className: "flex cursor-pointer items-center gap-1 text-sm font-medium", children: [_jsx(Clock, { className: "h-3.5 w-3.5" }), "Pending"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Create without starting \u2014 start manually later." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-2", children: [_jsx(Switch, { id: "fast-mode", checked: fast, onCheckedChange: setFast, disabled: isSubmitting }), _jsxs(Label, { htmlFor: "fast-mode", className: "flex cursor-pointer items-center gap-1 text-sm font-medium", children: [_jsx(Zap, { className: "h-3.5 w-3.5" }), "Fast Mode"] })] }) }), _jsx(TooltipContent, { side: "bottom", children: "Skip SDLC phases and implement directly from your prompt." })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: isSubmitting, "aria-label": "Attach files", className: "text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors", children: _jsx(PaperclipIcon, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Attach files" })] })] })] })] }), hasFeatures && initialParentId !== undefined ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "PARENT FEATURE" }), _jsx(ParentFeatureCombobox, { features: features, value: parentId, onChange: setParentId, disabled: isSubmitting })] })) : null, _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "border-input flex items-center gap-4 rounded-md border px-3 py-2.5", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-muted-foreground w-16 shrink-0 cursor-default text-xs font-semibold tracking-wider", children: "APPROVE" }) }), _jsx(TooltipContent, { side: "bottom", children: "Auto-approve phase transitions without manual review." })] }), _jsx("div", { className: "flex flex-1 items-center gap-4", children: AUTO_APPROVE_OPTIONS.map((opt) => (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: `approve-${opt.id}`, size: "sm", checked: approvalGates[opt.id] ?? false, onCheckedChange: (v) => setApprovalGates((prev) => ({ ...prev, [opt.id]: v })), disabled: isSubmitting ||
410
414
  (fast && (opt.id === 'allowPrd' || opt.id === 'allowPlan')) }), _jsx(Label, { htmlFor: `approve-${opt.id}`, className: "cursor-pointer text-xs font-medium", children: opt.label })] }) }), _jsx(TooltipContent, { side: "bottom", children: fast && (opt.id === 'allowPrd' || opt.id === 'allowPlan')
411
415
  ? 'Skipped in Fast Mode'
412
416
  : opt.description })] }, opt.id))) }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,gBAAgB,CAkDlB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAsBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAOlE,CAAC;AAcF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
1
+ {"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,gBAAgB,CAuDlB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAsBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAQlE,CAAC;AAeF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
@@ -21,6 +21,10 @@ export function deriveNodeState(feature, agentRun, options) {
21
21
  if (feature.lifecycle === SdlcLifecycle.Deleting) {
22
22
  return 'deleting';
23
23
  }
24
+ // Pending lifecycle — user-deferred, agent not yet spawned
25
+ if (feature.lifecycle === SdlcLifecycle.Pending) {
26
+ return 'pending';
27
+ }
24
28
  // Blocked lifecycle takes priority — child waiting on parent regardless of agent run
25
29
  if (feature.lifecycle === SdlcLifecycle.Blocked) {
26
30
  return 'blocked';
@@ -111,6 +115,7 @@ export const sdlcLifecycleMap = {
111
115
  Review: 'review',
112
116
  'Deploy & QA': 'deploy',
113
117
  Maintain: 'maintain',
118
+ Pending: 'pending',
114
119
  };
115
120
  /** Map agent graph node names (from agent_run.result or SSE phaseName) to UI lifecycle phases. */
116
121
  const phaseNameToLifecycle = {
@@ -122,6 +127,7 @@ const phaseNameToLifecycle = {
122
127
  merge: 'review',
123
128
  maintain: 'maintain',
124
129
  blocked: 'requirements',
130
+ pending: 'pending',
125
131
  };
126
132
  /**
127
133
  * Derives the UI lifecycle phase from a Feature + AgentRun.
@@ -2,8 +2,8 @@ import { type LucideIcon } from 'lucide-react';
2
2
  import type { Node } from '@xyflow/react';
3
3
  import type { PrStatus, CiStatus, DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
4
4
  import type { AgentTypeValue } from './agent-type-icons.js';
5
- export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'error' | 'deleting';
6
- export type FeatureLifecyclePhase = 'requirements' | 'research' | 'implementation' | 'review' | 'deploy' | 'maintain';
5
+ export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'pending' | 'error' | 'deleting';
6
+ export type FeatureLifecyclePhase = 'pending' | 'requirements' | 'research' | 'implementation' | 'review' | 'deploy' | 'maintain';
7
7
  /** Human-readable display labels for lifecycle phases. */
8
8
  export declare const lifecycleDisplayLabels: Record<FeatureLifecyclePhase, string>;
9
9
  /** Present-participle verbs for the running badge, keyed by lifecycle phase. */
@@ -85,6 +85,7 @@ export interface FeatureNodeData {
85
85
  hasChildren?: boolean;
86
86
  onDelete?: (featureId: string, cleanup?: boolean, cascadeDelete?: boolean) => void;
87
87
  onRetry?: (featureId: string) => void;
88
+ onStart?: (featureId: string) => void;
88
89
  showHandles?: boolean;
89
90
  }
90
91
  export type FeatureNodeType = Node<FeatureNodeData, 'featureNode'>;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}