@shepai/cli 1.166.0-pr513.fdcdd56 → 1.166.0-pr519.ad21990

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 (447) hide show
  1. package/apis/json-schema/AgentType.yaml +1 -0
  2. package/apis/json-schema/Feature.yaml +5 -17
  3. package/apis/json-schema/SdlcLifecycle.yaml +0 -1
  4. package/apis/json-schema/WorkflowConfig.yaml +5 -10
  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 +3 -4
  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 +2 -3
  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 +7 -18
  16. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -3
  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 +0 -13
  20. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -2
  21. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  22. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +3 -5
  23. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  24. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -2
  25. package/dist/packages/core/src/domain/generated/output.d.ts +5 -22
  26. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  27. package/dist/packages/core/src/domain/generated/output.js +1 -7
  28. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +6 -21
  29. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  30. package/dist/packages/core/src/domain/lifecycle-gates.js +6 -25
  31. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  32. package/dist/packages/core/src/infrastructure/di/container.js +3 -5
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -3
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +4 -10
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -2
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -7
  39. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  40. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +3 -5
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -3
  42. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  43. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +23 -0
  44. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
  45. package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +1 -0
  46. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts +63 -0
  47. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -0
  48. package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +494 -0
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +0 -20
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  51. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +0 -68
  52. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  53. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -2
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -3
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -2
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +8 -19
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +0 -1
  61. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  62. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +0 -1
  63. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +0 -4
  64. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  65. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +0 -17
  66. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  67. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  68. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +4 -7
  69. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/codex.json +32 -0
  70. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/copilot.json +32 -0
  71. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  72. package/dist/src/presentation/cli/commands/feat/index.js +1 -5
  73. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  74. package/dist/src/presentation/cli/commands/feat/new.command.js +5 -18
  75. package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
  76. package/dist/src/presentation/tui/prompts/agent-select.prompt.js +5 -0
  77. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
  78. package/dist/src/presentation/web/app/actions/check-agent-auth.js +18 -0
  79. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -3
  80. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  81. package/dist/src/presentation/web/app/actions/create-feature.js +3 -3
  82. package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
  83. package/dist/src/presentation/web/app/actions/get-all-agent-models.js +4 -2
  84. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +1 -2
  85. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  86. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +1 -2
  87. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  88. package/dist/src/presentation/web/app/api/agent-events/route.js +0 -1
  89. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  90. package/dist/src/presentation/web/app/build-feature-node-data.js +2 -4
  91. package/dist/src/presentation/web/app/build-graph-nodes.js +2 -4
  92. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
  93. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  94. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +0 -3
  95. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +1 -65
  97. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -3
  98. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +11 -15
  100. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  101. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -2
  102. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +1 -6
  103. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +4 -16
  105. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts +1 -1
  106. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +2 -0
  108. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +1 -0
  110. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +0 -2
  112. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -6
  113. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  114. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +0 -12
  115. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  116. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -7
  117. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts +1 -0
  118. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.d.ts.map +1 -1
  119. package/dist/src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.js +7 -0
  120. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  121. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +11 -3
  122. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +1 -0
  123. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +8 -0
  125. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  126. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -6
  127. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +3 -3
  128. package/dist/translations/ar/cli.json +0 -24
  129. package/dist/translations/ar/tui.json +4 -0
  130. package/dist/translations/ar/web.json +2 -6
  131. package/dist/translations/de/cli.json +0 -24
  132. package/dist/translations/de/tui.json +4 -0
  133. package/dist/translations/de/web.json +2 -6
  134. package/dist/translations/en/cli.json +0 -24
  135. package/dist/translations/en/tui.json +4 -0
  136. package/dist/translations/en/web.json +2 -6
  137. package/dist/translations/es/cli.json +0 -24
  138. package/dist/translations/es/tui.json +4 -0
  139. package/dist/translations/es/web.json +2 -6
  140. package/dist/translations/fr/cli.json +0 -24
  141. package/dist/translations/fr/tui.json +4 -0
  142. package/dist/translations/fr/web.json +2 -6
  143. package/dist/translations/he/cli.json +0 -24
  144. package/dist/translations/he/tui.json +4 -0
  145. package/dist/translations/he/web.json +2 -6
  146. package/dist/translations/pt/cli.json +0 -24
  147. package/dist/translations/pt/tui.json +4 -0
  148. package/dist/translations/pt/web.json +2 -6
  149. package/dist/translations/ru/cli.json +0 -24
  150. package/dist/translations/ru/tui.json +4 -0
  151. package/dist/translations/ru/web.json +2 -6
  152. package/dist/tsconfig.build.tsbuildinfo +1 -1
  153. package/package.json +1 -1
  154. package/web/.next/BUILD_ID +1 -1
  155. package/web/.next/build-manifest.json +2 -2
  156. package/web/.next/fallback-build-manifest.json +2 -2
  157. package/web/.next/prerender-manifest.json +3 -3
  158. package/web/.next/required-server-files.js +1 -1
  159. package/web/.next/required-server-files.json +1 -1
  160. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  161. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  162. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  164. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  165. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  167. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  168. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +74 -119
  170. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -2
  171. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  172. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  173. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +74 -119
  174. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -2
  175. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  176. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  177. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  178. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  179. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  180. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  181. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  182. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  183. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  184. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  185. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  186. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  187. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  188. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  189. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +74 -119
  190. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -2
  191. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  192. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  193. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +74 -119
  194. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -2
  195. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  196. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  198. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  199. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  201. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  202. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  203. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  204. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  205. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  206. package/web/.next/server/app/_global-error.html +2 -2
  207. package/web/.next/server/app/_global-error.rsc +1 -1
  208. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  209. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  210. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  211. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  212. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  213. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  214. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  215. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  216. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  217. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  218. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  219. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  220. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  221. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  222. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  223. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  224. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  225. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  226. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  227. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  228. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  229. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  230. package/web/.next/server/app/version/page.js.nft.json +1 -1
  231. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  232. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  233. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  234. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +1 -1
  235. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  236. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  237. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  238. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  239. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  240. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  242. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  243. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
  244. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js +2 -2
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js +1 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +1 -1
  253. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js +4 -0
  254. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  256. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
  258. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +4 -0
  260. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +1 -0
  261. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
  262. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js +4 -0
  264. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +1 -0
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +4 -0
  268. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +1 -0
  269. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js +1 -1
  270. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  271. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js +1 -1
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  275. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  276. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  277. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/_0727935d._.js +1 -1
  279. package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/_0dc06d07._.js +1 -1
  281. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  283. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  285. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  287. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/_4d49a312._.js +3 -0
  289. package/web/.next/server/chunks/ssr/_4d49a312._.js.map +1 -0
  290. package/web/.next/server/chunks/ssr/_506a3bc3._.js +9 -0
  291. package/web/.next/server/chunks/ssr/_506a3bc3._.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/_5119a3df._.js +1 -1
  293. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  294. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  295. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/_9215e9ec._.js +3 -0
  297. package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +1 -0
  298. package/web/.next/server/chunks/ssr/_9d8d649c._.js +3 -0
  299. package/web/.next/server/chunks/ssr/_9d8d649c._.js.map +1 -0
  300. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  301. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  303. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  305. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/{_40c4d64e._.js → _c552776f._.js} +2 -2
  307. package/web/.next/server/chunks/ssr/_c552776f._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  309. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  311. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  313. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  315. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  316. package/web/.next/server/chunks/ssr/{_52567223._.js → _f92c664f._.js} +2 -2
  317. package/web/.next/server/chunks/ssr/{_52567223._.js.map → _f92c664f._.js.map} +1 -1
  318. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  319. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  320. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  321. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  322. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +3 -0
  323. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +1 -0
  324. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  325. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  326. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  327. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  328. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  329. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  330. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  331. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  332. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  333. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  334. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  335. package/web/.next/server/pages/500.html +2 -2
  336. package/web/.next/server/server-reference-manifest.js +1 -1
  337. package/web/.next/server/server-reference-manifest.json +195 -303
  338. package/web/.next/static/chunks/{81a9fa188d0bef95.js → 13acc1496333d248.js} +1 -1
  339. package/web/.next/static/chunks/1e6609edc3367244.css +1 -0
  340. package/web/.next/static/chunks/2b6dde8371c56840.js +1 -0
  341. package/web/.next/static/chunks/37e0c4a5491c430b.js +1 -0
  342. package/web/.next/static/chunks/{b2b1a749ec72f3a3.js → 4a33664239c920a4.js} +3 -3
  343. package/web/.next/static/chunks/{b810ab3e01ffa9cb.js → 58089b67c924f50d.js} +1 -1
  344. package/web/.next/static/chunks/{19e7ce7a45b9aba5.js → 594ebd426b1f107c.js} +1 -1
  345. package/web/.next/static/chunks/{517f9f7b52421b78.js → 5f27ad48b0d09dd9.js} +1 -1
  346. package/web/.next/static/chunks/{884fceb3e6a67215.js → 65440524d7ee7d13.js} +1 -1
  347. package/web/.next/static/chunks/{8aa61c1b439f38d6.js → 7480e93a8ab0fc19.js} +1 -1
  348. package/web/.next/static/chunks/{ed6f26a65c6e7da9.js → 7bdecf3df9b313ae.js} +1 -1
  349. package/web/.next/static/chunks/7ea9ac36bfba7858.js +1 -0
  350. package/web/.next/static/chunks/9b0aacedbcc8b705.js +5 -0
  351. package/web/.next/static/chunks/c0e13e7d1601bc5d.js +1 -0
  352. package/web/.next/static/chunks/{333b1f2c897337c9.js → ccabcd38a63a6e50.js} +2 -2
  353. package/web/.next/static/chunks/{2a9af061f4fbe7f5.js → d5366257d6b9f855.js} +1 -1
  354. package/web/.next/static/chunks/{785d6f99b66ca637.js → e94bdf59bcc28aa9.js} +1 -1
  355. package/web/public/icons/agents/copilot.svg +12 -0
  356. package/apis/json-schema/FeatureMode.yaml +0 -8
  357. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts +0 -40
  358. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts.map +0 -1
  359. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.js +0 -125
  360. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts +0 -19
  361. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts.map +0 -1
  362. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.js +0 -46
  363. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts +0 -17
  364. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts.map +0 -1
  365. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.js +0 -37
  366. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts +0 -12
  367. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts.map +0 -1
  368. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.js +0 -17
  369. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts +0 -362
  370. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts.map +0 -1
  371. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.js +0 -72
  372. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts +0 -18
  373. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts.map +0 -1
  374. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.js +0 -52
  375. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts +0 -24
  376. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts.map +0 -1
  377. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.js +0 -38
  378. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts +0 -31
  379. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts.map +0 -1
  380. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.js +0 -240
  381. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts +0 -21
  382. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts.map +0 -1
  383. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.js +0 -134
  384. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts +0 -12
  385. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts.map +0 -1
  386. package/dist/src/presentation/cli/commands/feat/feedback.command.js +0 -64
  387. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts +0 -13
  388. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts.map +0 -1
  389. package/dist/src/presentation/cli/commands/feat/promote.command.js +0 -41
  390. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts +0 -9
  391. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts.map +0 -1
  392. package/dist/src/presentation/web/app/actions/discard-exploration.js +0 -29
  393. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts +0 -11
  394. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts.map +0 -1
  395. package/dist/src/presentation/web/app/actions/promote-exploration.js +0 -21
  396. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts +0 -12
  397. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts.map +0 -1
  398. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.js +0 -40
  399. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts +0 -8
  400. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts.map +0 -1
  401. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.js +0 -33
  402. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts +0 -10
  403. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts.map +0 -1
  404. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.js +0 -33
  405. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts +0 -11
  406. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts.map +0 -1
  407. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.js +0 -34
  408. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts +0 -16
  409. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts.map +0 -1
  410. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.js +0 -70
  411. package/dist/src/presentation/web/components/ui/toggle-group.d.ts +0 -10
  412. package/dist/src/presentation/web/components/ui/toggle-group.d.ts.map +0 -1
  413. package/dist/src/presentation/web/components/ui/toggle-group.js +0 -22
  414. package/dist/src/presentation/web/components/ui/toggle.d.ts +0 -10
  415. package/dist/src/presentation/web/components/ui/toggle.d.ts.map +0 -1
  416. package/dist/src/presentation/web/components/ui/toggle.js +0 -26
  417. package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js +0 -4
  418. package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js.map +0 -1
  419. package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js +0 -4
  420. package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js.map +0 -1
  421. package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js +0 -4
  422. package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js.map +0 -1
  423. package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js +0 -4
  424. package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js.map +0 -1
  425. package/web/.next/server/chunks/ssr/_12c98a3d._.js +0 -3
  426. package/web/.next/server/chunks/ssr/_12c98a3d._.js.map +0 -1
  427. package/web/.next/server/chunks/ssr/_40c4d64e._.js.map +0 -1
  428. package/web/.next/server/chunks/ssr/_5eb460b1._.js +0 -3
  429. package/web/.next/server/chunks/ssr/_5eb460b1._.js.map +0 -1
  430. package/web/.next/server/chunks/ssr/_997b560b._.js +0 -3
  431. package/web/.next/server/chunks/ssr/_997b560b._.js.map +0 -1
  432. package/web/.next/server/chunks/ssr/_acc5e43e._.js +0 -9
  433. package/web/.next/server/chunks/ssr/_acc5e43e._.js.map +0 -1
  434. package/web/.next/server/chunks/ssr/_b0efd563._.js +0 -3
  435. package/web/.next/server/chunks/ssr/_b0efd563._.js.map +0 -1
  436. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +0 -3
  437. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map +0 -1
  438. package/web/.next/static/chunks/04636196914be502.js +0 -1
  439. package/web/.next/static/chunks/2ceebcc839ee0d4b.js +0 -1
  440. package/web/.next/static/chunks/51f2de96879281ea.js +0 -1
  441. package/web/.next/static/chunks/85c9f8d4601354cd.js +0 -1
  442. package/web/.next/static/chunks/904f10ee1f7ed44f.js +0 -5
  443. package/web/.next/static/chunks/985b80ac9fd25d02.css +0 -1
  444. package/web/.next/static/chunks/b474396c44f62500.js +0 -1
  445. /package/web/.next/static/{POB2JchXPeEvMtK9zhjns → r3FoPi_SX8oY8g4WhyvrZ}/_buildManifest.js +0 -0
  446. /package/web/.next/static/{POB2JchXPeEvMtK9zhjns → r3FoPi_SX8oY8g4WhyvrZ}/_clientMiddlewareManifest.json +0 -0
  447. /package/web/.next/static/{POB2JchXPeEvMtK9zhjns → r3FoPi_SX8oY8g4WhyvrZ}/_ssgManifest.js +0 -0
@@ -2,7 +2,7 @@
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
4
  import { useTranslation } from 'react-i18next';
5
- import { PaperclipIcon, ChevronsUpDown, CheckIcon, Clock, FolderPlus, Loader2, GitFork, FileText, RefreshCw, } from 'lucide-react';
5
+ import { PaperclipIcon, ChevronsUpDown, CheckIcon, Zap, Clock, FolderPlus, Loader2, GitFork, FileText, RefreshCw, } from 'lucide-react';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { useSoundAction } from '../../../hooks/use-sound-action.js';
8
8
  import { BaseDrawer } from '../../common/base-drawer/index.js';
@@ -23,9 +23,7 @@ import { Separator } from '../../ui/separator.js';
23
23
  import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
24
24
  import { ReactFileManagerDialog } from '../../common/react-file-manager-dialog/index.js';
25
25
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
26
- import { FeatureMode } from '../../../../../../packages/core/src/domain/generated/output.js';
27
26
  import { addRepository } from '../../../app/actions/add-repository.js';
28
- import { ModeSelector } from './mode-selector.js';
29
27
  import { pickFiles } from './pick-files.js';
30
28
  const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB
31
29
  const ALLOWED_EXTENSIONS = new Set([
@@ -114,7 +112,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
114
112
  const defaultCiWatch = workflowDefaults?.ciWatchEnabled !== false;
115
113
  const defaultEnableEvidence = workflowDefaults?.enableEvidence ?? false;
116
114
  const defaultCommitEvidence = workflowDefaults?.commitEvidence ?? false;
117
- const defaultMode = workflowDefaults?.defaultMode ?? FeatureMode.Fast;
115
+ const defaultFast = workflowDefaults?.fast !== false;
118
116
  const [description, setDescription] = useState(initialDescription ?? '');
119
117
  // Sync description when initialDescription prop changes (e.g. from session context)
120
118
  useEffect(() => {
@@ -130,7 +128,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
130
128
  const [enableEvidence, setEnableEvidence] = useState(defaultEnableEvidence);
131
129
  const [commitEvidence, setCommitEvidence] = useState(defaultCommitEvidence);
132
130
  const [parentId, setParentId] = useState(undefined);
133
- const [mode, setMode] = useState(defaultMode);
131
+ const [fast, setFast] = useState(defaultFast);
134
132
  const [pending, setPending] = useState(false);
135
133
  const [forkAndPr, setForkAndPr] = useState(false);
136
134
  const [commitSpecs, setCommitSpecs] = useState(true);
@@ -155,7 +153,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
155
153
  setCiWatchEnabled(workflowDefaults.ciWatchEnabled !== false);
156
154
  setEnableEvidence(workflowDefaults.enableEvidence);
157
155
  setCommitEvidence(workflowDefaults.commitEvidence);
158
- setMode(workflowDefaults.defaultMode ?? FeatureMode.Fast);
156
+ setFast(workflowDefaults.fast !== false);
159
157
  }
160
158
  }, [workflowDefaults]);
161
159
  // Sync localRepos when repositories prop changes
@@ -205,7 +203,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
205
203
  setParentId(undefined);
206
204
  setSelectedRepoPath(validRepoPath || undefined);
207
205
  setLocalRepos(repositories ?? []);
208
- setMode(defaultMode);
206
+ setFast(defaultFast);
209
207
  setPending(false);
210
208
  setForkAndPr(false);
211
209
  setCommitSpecs(true);
@@ -222,7 +220,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
222
220
  defaultEnableEvidence,
223
221
  defaultCiWatch,
224
222
  defaultCommitEvidence,
225
- defaultMode,
223
+ defaultFast,
226
224
  validRepoPath,
227
225
  repositories,
228
226
  ]);
@@ -359,7 +357,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
359
357
  ciWatchEnabled,
360
358
  enableEvidence,
361
359
  commitEvidence,
362
- mode,
360
+ fast,
363
361
  forkAndPr,
364
362
  commitSpecs,
365
363
  rebaseBeforeBranch,
@@ -382,7 +380,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
382
380
  enableEvidence,
383
381
  ciWatchEnabled,
384
382
  commitEvidence,
385
- mode,
383
+ fast,
386
384
  forkAndPr,
387
385
  commitSpecs,
388
386
  rebaseBeforeBranch,
@@ -492,10 +490,8 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
492
490
  validRepoPath.split('/').pop() })] })) : null, _jsxs("div", { role: "region", "aria-label": t('createDrawer.fileDropZone'), "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: t('createDrawer.describeFeature') }), _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: t('createDrawer.featurePlaceholder'), 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, notes: file.notes, onNotesChange: (notes) => handleNotesChange(file.id, notes) }, 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) => {
493
491
  setOverrideAgent(agent);
494
492
  setOverrideModel(model);
495
- }, 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" }), t('createDrawer.pendingMode')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.pendingModeDescription') })] }), _jsx(ModeSelector, { value: mode, onChange: setMode, disabled: isSubmitting }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: isSubmitting, "aria-label": t('chat.attachFiles'), 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: t('chat.attachFiles') })] })] })] })] }), 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: t('createDrawer.parentFeature') }), _jsx(ParentFeatureCombobox, { features: features, value: parentId, onChange: setParentId, disabled: isSubmitting })] })) : null, _jsxs("div", { className: "flex flex-col gap-2", children: [mode !== FeatureMode.Exploration && (_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: t('createDrawer.approve') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.approveDescription') })] }), _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 ||
496
- (mode === FeatureMode.Fast &&
497
- (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: mode === FeatureMode.Fast &&
498
- (opt.id === 'allowPrd' || opt.id === 'allowPlan')
493
+ }, 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" }), t('createDrawer.pendingMode')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.pendingModeDescription') })] }), _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" }), t('createDrawer.fastModeLabel')] })] }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.fastModeDescription') })] }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: handleAddFiles, disabled: isSubmitting, "aria-label": t('chat.attachFiles'), 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: t('chat.attachFiles') })] })] })] })] }), 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: t('createDrawer.parentFeature') }), _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: t('createDrawer.approve') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.approveDescription') })] }), _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 ||
494
+ (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')
499
495
  ? t('createDrawer.skippedInFastMode')
500
496
  : opt.description })] }, opt.id))) }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => {
501
497
  const allOn = AUTO_APPROVE_OPTIONS.every((o) => approvalGates[o.id]);
@@ -503,7 +499,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
503
499
  for (const o of AUTO_APPROVE_OPTIONS)
504
500
  next[o.id] = !allOn;
505
501
  setApprovalGates(next);
506
- }, disabled: isSubmitting, className: cn('text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors', AUTO_APPROVE_OPTIONS.every((o) => approvalGates[o.id]) && 'text-primary'), children: t('createDrawer.all') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.toggleAllApprovalGates') })] })] })), _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: t('createDrawer.evidence') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.evidenceDescription') })] }), _jsxs("div", { className: "flex flex-1 items-center gap-4", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "enable-evidence", size: "sm", checked: enableEvidence, onCheckedChange: (v) => {
502
+ }, disabled: isSubmitting, className: cn('text-muted-foreground hover:text-foreground cursor-pointer rounded px-1.5 py-0.5 text-[10px] font-semibold tracking-wider uppercase transition-colors', AUTO_APPROVE_OPTIONS.every((o) => approvalGates[o.id]) && 'text-primary'), children: t('createDrawer.all') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.toggleAllApprovalGates') })] })] }), _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: t('createDrawer.evidence') }) }), _jsx(TooltipContent, { side: "bottom", children: t('createDrawer.evidenceDescription') })] }), _jsxs("div", { className: "flex flex-1 items-center gap-4", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1.5", children: [_jsx(Switch, { id: "enable-evidence", size: "sm", checked: enableEvidence, onCheckedChange: (v) => {
507
503
  setEnableEvidence(v);
508
504
  if (!v)
509
505
  setCommitEvidence(false);
@@ -1 +1 @@
1
- {"version":3,"file":"feature-create-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAW9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAgC1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAsDlD,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAkDF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAwCF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,KAY3B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,KAwCzB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAatC,CAAC;AAuCF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AA6BF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC"}
1
+ {"version":3,"file":"feature-create-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAU9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAgC1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAsDlD,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAkDF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAwCF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAgBjC,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,KAY3B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,KAwCzB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAatC,CAAC;AAuCF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AA6BF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC"}
@@ -2,7 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { within, userEvent, fn, expect } from '@storybook/test';
4
4
  import { FeatureCreateDrawer } from './feature-create-drawer.js';
5
- import { FeatureMode } from '../../../../../../packages/core/src/domain/generated/output.js';
6
5
  import { Button } from '../../ui/button.js';
7
6
  import { DrawerCloseGuardProvider } from '../../../hooks/drawer-close-guard.js';
8
7
  /* ---------------------------------------------------------------------------
@@ -272,7 +271,7 @@ const SAMPLE_WORKFLOW_DEFAULTS = {
272
271
  ciWatchEnabled: true,
273
272
  enableEvidence: true,
274
273
  commitEvidence: false,
275
- defaultMode: FeatureMode.Fast,
274
+ fast: true,
276
275
  };
277
276
  /**
278
277
  * Drawer pre-populated from workflow settings — PRD and Plan approval gates
@@ -5,7 +5,6 @@ import type { TechDecisionsReviewData } from '../../common/tech-decisions-review
5
5
  import type { ProductDecisionsSummaryData } from '../../common/product-decisions-summary/index.js';
6
6
  import type { MergeReviewData } from '../../common/merge-review/index.js';
7
7
  import type { RejectAttachment } from '../../common/drawer-action-bar/index.js';
8
- import type { FeatureMode } from '../../../../../../packages/core/src/domain/generated/output.js';
9
8
  import type { FeatureTabKey } from '../../common/control-center-drawer/drawer-view.js';
10
9
  import type { BranchSyncData } from '../../../hooks/use-branch-sync-status.js';
11
10
  export interface FeatureDrawerTabsProps {
@@ -49,12 +48,8 @@ export interface FeatureDrawerTabsProps {
49
48
  isRejecting?: boolean;
50
49
  chatInput?: string;
51
50
  onChatInputChange?: (value: string) => void;
52
- onSubmitFeedback?: (feedback: string) => Promise<void>;
53
- onPromote?: (targetMode: FeatureMode.Regular | FeatureMode.Fast) => Promise<void>;
54
- onDiscardExploration?: () => Promise<void>;
55
- isPrototypeSubmitting?: boolean;
56
51
  /** When false, the Chat tab is hidden from the tab bar (FR-17). Defaults to true. */
57
52
  interactiveAgentEnabled?: boolean;
58
53
  }
59
- export declare function FeatureDrawerTabs({ featureName, headerContent, featureNode, featureId, initialTab, urlTab, prdData, prdSelections, onPrdSelect, onPrdApprove, onPrdReject, isPrdLoading, techData, onTechApprove, onTechReject, isTechLoading, productData, mergeData, onMergeApprove, onMergeReject, isMergeLoading, syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, isRejecting, chatInput, onChatInputChange, sseEvents, onSubmitFeedback, onPromote, onDiscardExploration, isPrototypeSubmitting, interactiveAgentEnabled, onRetry, onStop, onStart, }: FeatureDrawerTabsProps): import("react/jsx-runtime").JSX.Element;
54
+ export declare function FeatureDrawerTabs({ featureName, headerContent, featureNode, featureId, initialTab, urlTab, prdData, prdSelections, onPrdSelect, onPrdApprove, onPrdReject, isPrdLoading, techData, onTechApprove, onTechReject, isTechLoading, productData, mergeData, onMergeApprove, onMergeReject, isMergeLoading, syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, isRejecting, chatInput, onChatInputChange, sseEvents, interactiveAgentEnabled, onRetry, onStop, onStart, }: FeatureDrawerTabsProps): import("react/jsx-runtime").JSX.Element;
60
55
  //# sourceMappingURL=feature-drawer-tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer-tabs.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-drawer-tabs.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAU9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+CAA+C,CAAC;AACjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAMxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAS9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uDAAuD,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AA4DrE,MAAM,WAAW,sBAAsB;IACrC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,WAAW,EAAE,eAAe,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,gFAAgF;IAChF,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,mFAAmF;IACnF,SAAS,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAGzC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,QAAQ,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,WAAW,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAGjD,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC5E,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAG3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAG5C,qFAAqF;IACrF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAwBD,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAO,EACP,aAAa,EACb,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,uBAA8B,EAC9B,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,sBAAsB,2CAwexB"}
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { usePathname } from 'next/navigation';
6
- import { Loader2, AlertCircle, LayoutDashboard, Activity, ScrollText, Map, FileCheck, Cpu, Package, GitMerge, MessageSquare, Play, Square, RotateCcw, Zap, Layers, FlaskConical, } from 'lucide-react';
6
+ import { Loader2, AlertCircle, LayoutDashboard, Activity, ScrollText, Map, FileCheck, Cpu, Package, GitMerge, MessageSquare, Play, Square, RotateCcw, Zap, Layers, } from 'lucide-react';
7
7
  import { Tabs, TabsList, TabsTrigger, TabsContent } from '../../ui/tabs.js';
8
8
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
9
9
  import { getFeaturePhaseTimings } from '../../../app/actions/get-feature-phase-timings.js';
@@ -20,14 +20,12 @@ import { OverviewTab } from './overview-tab.js';
20
20
  import { ActivityTab } from './activity-tab.js';
21
21
  import { LogTab } from './log-tab.js';
22
22
  import { PlanTab } from './plan-tab.js';
23
- import { PrototypeTab } from './prototype-tab.js';
24
23
  import { ChatTab } from '../../features/chat/ChatTab.js';
25
24
  import { useFeatureLogs } from '../../../hooks/use-feature-logs.js';
26
25
  import { useTabDataFetch } from './use-tab-data-fetch.js';
27
26
  /** All possible tabs in display order. */
28
27
  const ALL_TABS = [
29
28
  { key: 'overview', label: 'Overview', icon: LayoutDashboard },
30
- { key: 'prototype', label: 'Prototype', icon: FlaskConical },
31
29
  { key: 'activity', label: 'Activity', icon: Activity },
32
30
  { key: 'log', label: 'Log', icon: ScrollText },
33
31
  { key: 'plan', label: 'Plan', icon: Map },
@@ -39,17 +37,7 @@ const ALL_TABS = [
39
37
  ];
40
38
  /** Compute which tabs are visible based on feature lifecycle + state. */
41
39
  function computeVisibleTabs(node, interactiveAgentEnabled = true) {
42
- const tabs = ['overview'];
43
- // Exploration mode: show prototype tab, skip SDLC-specific tabs
44
- if (node.lifecycle === 'exploring') {
45
- tabs.push('prototype', 'activity');
46
- if (node.hasAgentRun)
47
- tabs.push('log');
48
- if (interactiveAgentEnabled)
49
- tabs.push('chat');
50
- return tabs;
51
- }
52
- tabs.push('activity');
40
+ const tabs = ['overview', 'activity'];
53
41
  if (node.hasAgentRun) {
54
42
  tabs.push('log');
55
43
  }
@@ -90,7 +78,7 @@ const TAB_FETCHERS = {
90
78
  activity: fetchActivity,
91
79
  plan: fetchPlan,
92
80
  };
93
- export function FeatureDrawerTabs({ featureName, headerContent, featureNode, featureId, initialTab, urlTab, prdData, prdSelections, onPrdSelect, onPrdApprove, onPrdReject, isPrdLoading, techData, onTechApprove, onTechReject, isTechLoading, productData, mergeData, onMergeApprove, onMergeReject, isMergeLoading, syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, isRejecting, chatInput, onChatInputChange, sseEvents, onSubmitFeedback, onPromote, onDiscardExploration, isPrototypeSubmitting, interactiveAgentEnabled = true, onRetry, onStop, onStart, }) {
81
+ export function FeatureDrawerTabs({ featureName, headerContent, featureNode, featureId, initialTab, urlTab, prdData, prdSelections, onPrdSelect, onPrdApprove, onPrdReject, isPrdLoading, techData, onTechApprove, onTechReject, isTechLoading, productData, mergeData, onMergeApprove, onMergeReject, isMergeLoading, syncStatus, syncLoading, syncError, onRefreshSync, onRebaseOnMain, rebaseLoading, rebaseError, isRejecting, chatInput, onChatInputChange, sseEvents, interactiveAgentEnabled = true, onRetry, onStop, onStart, }) {
94
82
  const pathname = usePathname();
95
83
  const visibleTabs = useMemo(() => computeVisibleTabs(featureNode, interactiveAgentEnabled), [featureNode, interactiveAgentEnabled]);
96
84
  const visibleTabDefs = useMemo(() => ALL_TABS.filter((t) => visibleTabs.includes(t.key)).map((t) => t.key === 'merge-review' && featureNode.lifecycle === 'maintain'
@@ -275,7 +263,7 @@ export function FeatureDrawerTabs({ featureName, headerContent, featureNode, fea
275
263
  return _jsx(I, { className: "size-3.5 shrink-0" });
276
264
  })()), featureNodeStateConfig[featureNode.state].label] }), featureNode.state === 'pending' && onStart ? (_jsxs("button", { type: "button", onClick: () => onStart(featureNode.featureId), className: "text-muted-foreground flex items-center gap-1 self-stretch px-3 hover:bg-green-500/10 hover:text-green-600 dark:hover:text-green-400", "data-testid": "feature-drawer-start-button", children: [_jsx(Play, { className: "size-3.5" }), " Start"] })) : featureNode.state === 'error' && onRetry ? (_jsxs("button", { type: "button", onClick: () => onRetry(featureNode.featureId), className: "text-muted-foreground flex items-center gap-1 self-stretch px-3 hover:bg-red-500/10 hover:text-red-500 dark:hover:text-red-400", "data-testid": "feature-drawer-retry-button", children: [_jsx(RotateCcw, { className: "size-3.5" }), " Retry"] })) : featureNode.state === 'running' && onStop ? (_jsxs("button", { type: "button", onClick: () => onStop(featureNode.featureId), className: "text-muted-foreground flex items-center gap-1 self-stretch px-3 hover:bg-red-500/10 hover:text-red-500 dark:hover:text-red-400", "data-testid": "feature-drawer-stop-button", children: [_jsx(Square, { className: "size-3.5" }), " Stop"] })) : null] }) }), featureNode.errorMessage ? (_jsxs(TooltipContent, { side: "bottom", align: "end", sideOffset: 4, className: "z-[100] max-w-xs cursor-pointer text-xs leading-relaxed select-text", onClick: () => {
277
265
  void navigator.clipboard.writeText(featureNode.errorMessage);
278
- }, children: [featureNode.errorMessage, _jsx("span", { className: "text-muted-foreground ml-1 text-[10px] italic", children: "(click to copy)" })] })) : null] }) })] })) : null, headerContent] }), _jsx(TabsContent, { value: "overview", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(OverviewTab, { data: featureNode, syncStatus: syncStatus, syncLoading: syncLoading, syncError: syncError, onRefreshSync: onRefreshSync, onRebaseOnMain: onRebaseOnMain, rebaseLoading: rebaseLoading, rebaseError: rebaseError }) }), visibleTabs.includes('prototype') ? (_jsx(TabsContent, { value: "prototype", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(PrototypeTab, { data: featureNode, onSubmitFeedback: onSubmitFeedback, onPromote: onPromote, onDiscard: onDiscardExploration, isSubmitting: isPrototypeSubmitting }) })) : null, _jsx(TabsContent, { value: "activity", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(ActivityTab, { timings: tabs.activity.data?.timings ?? null, loading: tabs.activity.loading, error: tabs.activity.error, rejectionFeedback: tabs.activity.data?.rejectionFeedback }) }), _jsx(TabsContent, { value: "log", className: "mt-0 flex-1 overflow-hidden", children: _jsx(LogTab, { content: featureLogs.content, isConnected: featureLogs.isConnected, error: featureLogs.error }) }), _jsx(TabsContent, { value: "plan", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(PlanTab, { plan: tabs.plan.data, loading: tabs.plan.loading, error: tabs.plan.error }) }), visibleTabs.includes('prd-review') ? (_jsx(TabsContent, { value: "prd-review", className: "mt-0 flex min-h-0 flex-1 flex-col", children: prdData ? (_jsx(PrdQuestionnaire, { data: prdData, selections: prdSelections ?? {}, onSelect: onPrdSelect ?? (() => undefined), onApprove: onPrdApprove ?? (() => undefined), onReject: onPrdReject, isProcessing: isPrdLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null, visibleTabs.includes('tech-decisions') ? (_jsx(TabsContent, { value: "tech-decisions", className: "mt-0 flex min-h-0 flex-1 flex-col", children: techData ? (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [_jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(TechDecisionsContent, { data: techData }) }), _jsx(DrawerActionBarForTech, { onApprove: onTechApprove ?? (() => undefined), onReject: onTechReject, isProcessing: isTechLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })] })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null, visibleTabs.includes('product-decisions') ? (_jsx(TabsContent, { value: "product-decisions", className: "mt-0 flex-1 overflow-y-auto", children: productData === null ? (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) : productData ? (_jsx(ProductDecisionsSummary, { data: productData })) : (_jsx("p", { className: "text-muted-foreground p-4 text-center text-sm", children: "No product decisions available." })) })) : null, visibleTabs.includes('merge-review') ? (_jsx(TabsContent, { value: "merge-review", className: "mt-0 flex min-h-0 flex-1 flex-col", children: mergeData ? (_jsx(MergeReview, { data: mergeData, readOnly: featureNode.lifecycle === 'maintain', onApprove: onMergeApprove ?? (() => undefined), onReject: onMergeReject, isProcessing: isMergeLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: isMergeLoading ? (_jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" })) : (_jsxs("div", { className: "text-muted-foreground flex flex-col items-center gap-2 text-sm", children: [_jsx(AlertCircle, { className: "h-6 w-6" }), _jsx("span", { children: "Merge review data unavailable" })] })) })) })) : null, visibleTabs.includes('chat') ? (_jsx(TabsContent, { value: "chat", className: "mt-0 flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: featureId, worktreePath: featureNode.worktreePath }) })) : null] }) }));
266
+ }, children: [featureNode.errorMessage, _jsx("span", { className: "text-muted-foreground ml-1 text-[10px] italic", children: "(click to copy)" })] })) : null] }) })] })) : null, headerContent] }), _jsx(TabsContent, { value: "overview", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(OverviewTab, { data: featureNode, syncStatus: syncStatus, syncLoading: syncLoading, syncError: syncError, onRefreshSync: onRefreshSync, onRebaseOnMain: onRebaseOnMain, rebaseLoading: rebaseLoading, rebaseError: rebaseError }) }), _jsx(TabsContent, { value: "activity", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(ActivityTab, { timings: tabs.activity.data?.timings ?? null, loading: tabs.activity.loading, error: tabs.activity.error, rejectionFeedback: tabs.activity.data?.rejectionFeedback }) }), _jsx(TabsContent, { value: "log", className: "mt-0 flex-1 overflow-hidden", children: _jsx(LogTab, { content: featureLogs.content, isConnected: featureLogs.isConnected, error: featureLogs.error }) }), _jsx(TabsContent, { value: "plan", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(PlanTab, { plan: tabs.plan.data, loading: tabs.plan.loading, error: tabs.plan.error }) }), visibleTabs.includes('prd-review') ? (_jsx(TabsContent, { value: "prd-review", className: "mt-0 flex min-h-0 flex-1 flex-col", children: prdData ? (_jsx(PrdQuestionnaire, { data: prdData, selections: prdSelections ?? {}, onSelect: onPrdSelect ?? (() => undefined), onApprove: onPrdApprove ?? (() => undefined), onReject: onPrdReject, isProcessing: isPrdLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null, visibleTabs.includes('tech-decisions') ? (_jsx(TabsContent, { value: "tech-decisions", className: "mt-0 flex min-h-0 flex-1 flex-col", children: techData ? (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [_jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(TechDecisionsContent, { data: techData }) }), _jsx(DrawerActionBarForTech, { onApprove: onTechApprove ?? (() => undefined), onReject: onTechReject, isProcessing: isTechLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })] })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) })) : null, visibleTabs.includes('product-decisions') ? (_jsx(TabsContent, { value: "product-decisions", className: "mt-0 flex-1 overflow-y-auto", children: productData === null ? (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })) : productData ? (_jsx(ProductDecisionsSummary, { data: productData })) : (_jsx("p", { className: "text-muted-foreground p-4 text-center text-sm", children: "No product decisions available." })) })) : null, visibleTabs.includes('merge-review') ? (_jsx(TabsContent, { value: "merge-review", className: "mt-0 flex min-h-0 flex-1 flex-col", children: mergeData ? (_jsx(MergeReview, { data: mergeData, readOnly: featureNode.lifecycle === 'maintain', onApprove: onMergeApprove ?? (() => undefined), onReject: onMergeReject, isProcessing: isMergeLoading, isRejecting: isRejecting, chatInput: chatInput, onChatInputChange: onChatInputChange })) : (_jsx("div", { className: "flex items-center justify-center p-8", children: isMergeLoading ? (_jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" })) : (_jsxs("div", { className: "text-muted-foreground flex flex-col items-center gap-2 text-sm", children: [_jsx(AlertCircle, { className: "h-6 w-6" }), _jsx("span", { children: "Merge review data unavailable" })] })) })) })) : null, visibleTabs.includes('chat') ? (_jsx(TabsContent, { value: "chat", className: "mt-0 flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: featureId, worktreePath: featureNode.worktreePath }) })) : null] }) }));
279
267
  }
280
268
  // ── Private helper ──────────────────────────────────────────────────────
281
269
  function DrawerActionBarForTech({ onApprove, onReject, isProcessing, isRejecting, chatInput, onChatInputChange, }) {
@@ -1,6 +1,6 @@
1
1
  import type { ComponentType, SVGProps } from 'react';
2
2
  /** Agent type values mirroring the TypeSpec AgentType enum. */
3
- export type AgentTypeValue = 'claude-code' | 'codex-cli' | 'cursor' | 'gemini-cli' | 'aider' | 'continue' | 'dev';
3
+ export type AgentTypeValue = 'claude-code' | 'codex-cli' | 'copilot-cli' | 'cursor' | 'gemini-cli' | 'aider' | 'continue' | 'dev';
4
4
  type IconProps = SVGProps<SVGSVGElement> & {
5
5
  className?: string;
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-type-icons.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIrD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,UAAU,GACV,KAAK,CAAC;AAEV,KAAK,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBlE,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,2CAOhD;AA4DD,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQ1D,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAK7E"}
1
+ {"version":3,"file":"agent-type-icons.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIrD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,UAAU,GACV,KAAK,CAAC;AAEV,KAAK,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBlE,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,2CAOhD;AA6DD,6CAA6C;AAC7C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAS1D,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAK7E"}
@@ -21,6 +21,7 @@ DevAgentIcon.displayName = 'DevAgentIcon';
21
21
  const agentTypeIconMap = {
22
22
  'claude-code': createBrandIcon('/icons/agents/claude-ai-icon.svg', 'Claude Code'),
23
23
  'codex-cli': createBrandIcon('/icons/agents/openai.svg', 'Codex CLI'),
24
+ 'copilot-cli': createBrandIcon('/icons/agents/copilot.svg', 'Copilot CLI'),
24
25
  cursor: createBrandIcon('/icons/agents/cursor.jpeg', 'Cursor'),
25
26
  'gemini-cli': createBrandIcon('/icons/agents/gemini-cli.jpeg', 'Gemini CLI'),
26
27
  aider: createBrandIcon('/icons/agents/aider.png', 'Aider'),
@@ -31,6 +32,7 @@ const agentTypeIconMap = {
31
32
  export const agentTypeLabels = {
32
33
  'claude-code': 'Claude Code',
33
34
  'codex-cli': 'Codex CLI',
35
+ 'copilot-cli': 'Copilot CLI',
34
36
  cursor: 'Cursor',
35
37
  'gemini-cli': 'Gemini CLI',
36
38
  aider: 'Aider',
@@ -1 +1 @@
1
- {"version":3,"file":"agent-type-icons.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0CvD,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAa1B,CAAC"}
1
+ {"version":3,"file":"agent-type-icons.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/agent-type-icons.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA2CvD,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAa1B,CAAC"}
@@ -3,6 +3,7 @@ import { getAgentTypeIcon, DefaultAgentIcon } from './agent-type-icons.js';
3
3
  const allAgentTypes = [
4
4
  { type: 'claude-code', label: 'Claude Code' },
5
5
  { type: 'codex-cli', label: 'Codex CLI' },
6
+ { type: 'copilot-cli', label: 'Copilot CLI' },
6
7
  { type: 'cursor', label: 'Cursor' },
7
8
  { type: 'gemini-cli', label: 'Gemini CLI' },
8
9
  { type: 'aider', label: 'Aider' },
@@ -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,CAiElB;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,CAUlE,CAAC;AAiBF;;;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,CAiElB;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,CASlE,CAAC;AAgBF;;;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"}
@@ -124,7 +124,6 @@ export const sdlcLifecycleMap = {
124
124
  'Deploy & QA': 'deploy',
125
125
  Maintain: 'maintain',
126
126
  Pending: 'pending',
127
- Exploring: 'exploring',
128
127
  Archived: 'maintain',
129
128
  };
130
129
  /** Map agent graph node names (from agent_run.result or SSE phaseName) to UI lifecycle phases. */
@@ -138,7 +137,6 @@ const phaseNameToLifecycle = {
138
137
  maintain: 'maintain',
139
138
  blocked: 'requirements',
140
139
  pending: 'pending',
141
- exploring: 'exploring',
142
140
  archived: 'maintain',
143
141
  };
144
142
  /**
@@ -1,9 +1,9 @@
1
1
  import { type LucideIcon } from 'lucide-react';
2
2
  import type { Node } from '@xyflow/react';
3
- import type { PrStatus, CiStatus, DeploymentState, FeatureMode } from '../../../../../../packages/core/src/domain/generated/output.js';
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
5
  export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'pending' | 'error' | 'deleting' | 'archived';
6
- export type FeatureLifecyclePhase = 'pending' | 'requirements' | 'research' | 'implementation' | 'review' | 'awaitingUpstream' | 'deploy' | 'maintain' | 'exploring';
6
+ export type FeatureLifecyclePhase = 'pending' | 'requirements' | 'research' | 'implementation' | 'review' | 'awaitingUpstream' | 'deploy' | 'maintain';
7
7
  /** Human-readable display labels for lifecycle phases. */
8
8
  export declare const lifecycleDisplayLabels: Record<FeatureLifecyclePhase, string>;
9
9
  /** Inline-start border color for each lifecycle phase. */
@@ -51,10 +51,6 @@ export interface FeatureNodeData {
51
51
  errorMessage?: string;
52
52
  /** Whether the feature was created in fast mode (skip SDLC phases). */
53
53
  fastMode?: boolean;
54
- /** Feature execution mode (Regular, Fast, Exploration). */
55
- mode?: FeatureMode;
56
- /** Current feedback iteration count in exploration mode. */
57
- iterationCount?: number;
58
54
  /** Agent executor type (e.g. "claude-code", "cursor"). */
59
55
  agentType?: AgentTypeValue;
60
56
  /** LLM model identifier used for this feature's agent run. */
@@ -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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"}
@@ -9,7 +9,6 @@ export const lifecycleDisplayLabels = {
9
9
  awaitingUpstream: 'AWAITING UPSTREAM',
10
10
  deploy: 'DEPLOY & QA',
11
11
  maintain: 'COMPLETED',
12
- exploring: 'EXPLORING',
13
12
  };
14
13
  /** Inline-start border color for each lifecycle phase. */
15
14
  export const lifecycleBorderColors = {
@@ -21,7 +20,6 @@ export const lifecycleBorderColors = {
21
20
  awaitingUpstream: 'border-s-amber-500',
22
21
  deploy: 'border-s-emerald-500',
23
22
  maintain: 'border-s-gray-400',
24
- exploring: 'border-s-amber-400',
25
23
  };
26
24
  /** Accent bar background color for each lifecycle phase. */
27
25
  export const lifecycleAccentColors = {
@@ -33,7 +31,6 @@ export const lifecycleAccentColors = {
33
31
  awaitingUpstream: 'bg-amber-500',
34
32
  deploy: 'bg-emerald-500',
35
33
  maintain: 'bg-gray-400',
36
- exploring: 'bg-amber-400',
37
34
  };
38
35
  /** Phase badge: short letter, color classes, and user-friendly tooltip. */
39
36
  export const lifecyclePhaseBadge = {
@@ -101,14 +98,6 @@ export const lifecyclePhaseBadge = {
101
98
  tooltip: 'Completed',
102
99
  description: 'All done — the feature has been merged and delivered successfully.',
103
100
  },
104
- exploring: {
105
- letter: 'E',
106
- bg: 'bg-amber-100 dark:bg-amber-900/40',
107
- text: 'text-amber-600 dark:text-amber-300',
108
- dot: 'bg-amber-400',
109
- tooltip: 'Exploring',
110
- description: 'Prototyping — the AI is generating a quick prototype. Review it and provide feedback to iterate.',
111
- },
112
101
  };
113
102
  /** State-based inline-start border overrides (takes precedence over lifecycle). */
114
103
  export const stateBorderColors = {
@@ -132,7 +121,6 @@ export const lifecycleRunningVerbs = {
132
121
  awaitingUpstream: 'Awaiting upstream',
133
122
  deploy: 'Deploying',
134
123
  maintain: 'Maintaining',
135
- exploring: 'Prototyping',
136
124
  };
137
125
  export const featureNodeStateConfig = {
138
126
  creating: {
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA8nBA"}
1
+ {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAmDnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAwnBA"}
@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { useRouter } from 'next/navigation';
6
6
  import { Handle, Position } from '@xyflow/react';
7
- import { Plus, Trash2, Zap, ClipboardList, FlaskConical, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
7
+ import { Plus, Trash2, Zap, ClipboardList, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
8
8
  import { cn } from '../../../lib/utils.js';
9
9
  import { ActionButton } from '../../common/action-button/action-button.js';
10
10
  import { Button } from '../../ui/button.js';
@@ -16,7 +16,6 @@ import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
16
16
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '../../ui/alert-dialog.js';
17
17
  import { DeleteFeatureDialog } from '../../common/delete-feature-dialog/index.js';
18
18
  import { featureNodeStateConfig, lifecycleRunningVerbs, lifecyclePhaseBadge, } from './feature-node-state-config.js';
19
- import { FeatureMode } from '../../../../../../packages/core/src/domain/generated/output.js';
20
19
  import { getAgentTypeIcon } from './agent-type-icons.js';
21
20
  import { FeatureSessionsDropdown } from './feature-sessions-dropdown.js';
22
21
  function AgentIcon({ agentType, className }) {
@@ -112,11 +111,7 @@ export function FeatureNode({ data, selected, }) {
112
111
  selected &&
113
112
  'border-e-rose-400 border-t-rose-400 border-b-rose-400 dark:border-e-amber-500 dark:border-t-amber-500 dark:border-b-amber-500', selected &&
114
113
  data.state !== 'action-required' &&
115
- 'border-blue-400 dark:border-amber-500/60', data.state === 'deleting' && 'opacity-60', data.state === 'archived' && 'opacity-50'), children: [data.state !== 'creating' ? (_jsx("div", { className: "absolute end-4 top-3", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { "data-testid": "feature-node-phase-badge", className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-[10px]", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("span", { className: cn('h-1.5 w-1.5 -translate-y-px rounded-full', lifecyclePhaseBadge[data.lifecycle].dot) })] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-56", children: [_jsx("p", { className: "font-semibold", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-neutral-500", children: lifecyclePhaseBadge[data.lifecycle].description })] })] }) }) })) : null, _jsxs("div", { className: "flex items-center gap-1.5 pe-24", children: [data.agentType ? (_jsx(AgentIcon, { agentType: data.agentType, className: "h-4 w-4 shrink-0" })) : null, _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { "data-testid": "feature-node-mode-badge", className: "shrink-0", children: data.mode === FeatureMode.Exploration ? (_jsx(FlaskConical, { className: "h-3.5 w-3.5 text-amber-500" })) : data.mode === FeatureMode.Fast || data.fastMode ? (_jsx(Zap, { className: "h-3.5 w-3.5 text-amber-500" })) : (_jsx(ClipboardList, { className: "h-3.5 w-3.5 text-indigo-500" })) }) }), _jsx(TooltipContent, { side: "top", children: data.mode === FeatureMode.Exploration
116
- ? t('featureNode.explorationMode')
117
- : data.mode === FeatureMode.Fast || data.fastMode
118
- ? t('featureNode.fastMode')
119
- : t('featureNode.specDriven') })] }) }), _jsx("h3", { className: "min-w-0 truncate text-sm font-bold", children: data.name })] }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: data.description })) : null, _jsxs("div", { className: "mt-auto pt-2", children: [config.showProgressBar ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-muted-foreground flex items-center justify-end text-[10px]", children: _jsxs("span", { children: [data.progress, "%"] }) }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', config.progressClass), style: { width: `${data.progress}%` } }) })] })) : null, !config.showProgressBar &&
114
+ 'border-blue-400 dark:border-amber-500/60', data.state === 'deleting' && 'opacity-60', data.state === 'archived' && 'opacity-50'), children: [data.state !== 'creating' ? (_jsx("div", { className: "absolute end-4 top-3", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { "data-testid": "feature-node-phase-badge", className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-[10px]", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("span", { className: cn('h-1.5 w-1.5 -translate-y-px rounded-full', lifecyclePhaseBadge[data.lifecycle].dot) })] }) }), _jsxs(TooltipContent, { side: "right", className: "max-w-56", children: [_jsx("p", { className: "font-semibold", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-neutral-500", children: lifecyclePhaseBadge[data.lifecycle].description })] })] }) }) })) : null, _jsxs("div", { className: "flex items-center gap-1.5 pe-24", children: [data.agentType ? (_jsx(AgentIcon, { agentType: data.agentType, className: "h-4 w-4 shrink-0" })) : null, _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { "data-testid": "feature-node-fast-mode-badge", className: "shrink-0", children: data.fastMode ? (_jsx(Zap, { className: "h-3.5 w-3.5 text-amber-500" })) : (_jsx(ClipboardList, { className: "h-3.5 w-3.5 text-indigo-500" })) }) }), _jsx(TooltipContent, { side: "top", children: data.fastMode ? t('featureNode.fastMode') : t('featureNode.specDriven') })] }) }), _jsx("h3", { className: "min-w-0 truncate text-sm font-bold", children: data.name })] }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: data.description })) : null, _jsxs("div", { className: "mt-auto pt-2", children: [config.showProgressBar ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-muted-foreground flex items-center justify-end text-[10px]", children: _jsxs("span", { children: [data.progress, "%"] }) }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', config.progressClass), style: { width: `${data.progress}%` } }) })] })) : null, !config.showProgressBar &&
120
115
  ![
121
116
  'deleting',
122
117
  'creating',
@@ -8,6 +8,7 @@ export declare const CursorSelected: Story;
8
8
  export declare const GeminiCli: Story;
9
9
  export declare const CodexCliSelected: Story;
10
10
  export declare const DemoAgent: Story;
11
+ export declare const CopilotCli: Story;
11
12
  export declare const OverrideMode: Story;
12
13
  export declare const Disabled: Story;
13
14
  //# sourceMappingURL=AgentModelPicker.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentModelPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAevC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC"}
1
+ {"version":3,"file":"AgentModelPicker.stories.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/settings/AgentModelPicker/AgentModelPicker.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAevC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC"}
@@ -49,6 +49,13 @@ export const DemoAgent = {
49
49
  mode: 'settings',
50
50
  },
51
51
  };
52
+ export const CopilotCli = {
53
+ args: {
54
+ initialAgentType: 'copilot-cli',
55
+ initialModel: 'claude-sonnet-4.5',
56
+ mode: 'settings',
57
+ },
58
+ };
52
59
  export const OverrideMode = {
53
60
  args: {
54
61
  initialAgentType: 'claude-code',
@@ -1 +1 @@
1
- {"version":3,"file":"agent-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAiBxE,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CA+IxE"}
1
+ {"version":3,"file":"agent-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/agent-settings-section.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAqBxE,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAiKxE"}
@@ -14,12 +14,15 @@ import { getAgentTypeIcon } from '../../common/feature-node/agent-type-icons.js'
14
14
  const AGENT_TYPE_OPTIONS = [
15
15
  { value: AgentType.ClaudeCode, label: 'Claude Code' },
16
16
  { value: AgentType.CodexCli, label: 'Codex CLI' },
17
+ { value: AgentType.CopilotCli, label: 'Copilot CLI' },
17
18
  { value: AgentType.Cursor, label: 'Cursor' },
18
19
  { value: AgentType.GeminiCli, label: 'Gemini CLI' },
19
20
  { value: AgentType.Aider, label: 'Aider' },
20
21
  { value: AgentType.Continue, label: 'Continue' },
21
22
  { value: AgentType.Dev, label: 'Dev' },
22
23
  ];
24
+ /** Agent types that only support session-based auth (no API token). */
25
+ const SESSION_ONLY_AGENTS = new Set([AgentType.CopilotCli]);
23
26
  const AUTH_METHOD_OPTIONS = [
24
27
  { value: AgentAuthMethod.Session, label: 'Session' },
25
28
  { value: AgentAuthMethod.Token, label: 'Token' },
@@ -57,8 +60,13 @@ export function AgentSettingsSection({ agent }) {
57
60
  return { agent: result };
58
61
  }
59
62
  function handleAgentTypeChange(value) {
60
- setAgentType(value);
61
- save(buildPayload({ type: value }));
63
+ const newType = value;
64
+ const newAuthMethod = SESSION_ONLY_AGENTS.has(newType) ? AgentAuthMethod.Session : authMethod;
65
+ setAgentType(newType);
66
+ if (newAuthMethod !== authMethod) {
67
+ setAuthMethod(newAuthMethod);
68
+ }
69
+ save(buildPayload({ type: newType, authMethod: newAuthMethod }));
62
70
  }
63
71
  function handleAuthMethodChange(value) {
64
72
  setAuthMethod(value);
@@ -72,5 +80,5 @@ export function AgentSettingsSection({ agent }) {
72
80
  return (_jsxs(Card, { id: "agent", className: "scroll-mt-6", "data-testid": "agent-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Bot, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Preferred Agent" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Choose your AI coding agent and authentication method" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-type", children: "Agent Type" }), _jsxs(Select, { value: agentType, onValueChange: handleAgentTypeChange, children: [_jsx(SelectTrigger, { id: "agent-type", "data-testid": "agent-type-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AGENT_TYPE_OPTIONS.map((opt) => {
73
81
  const Icon = getAgentTypeIcon(opt.value);
74
82
  return (_jsx(SelectItem, { value: opt.value, children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), opt.label] }) }, opt.value));
75
- }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "auth-method", children: "Authentication Method" }), _jsxs(Select, { value: authMethod, onValueChange: handleAuthMethodChange, children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] })] }), authMethod === AgentAuthMethod.Token && (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-token", children: "API Token" }), _jsxs("div", { className: "relative", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: handleTokenBlur, placeholder: "Enter your API token", className: "pe-10" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "absolute top-0 right-0 h-full px-3 hover:bg-transparent", onClick: () => setShowToken(!showToken), "data-testid": "toggle-token-visibility", "aria-label": showToken ? 'Hide token' : 'Show token', children: showToken ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Saves automatically when you leave the field" })] }))] })] }));
83
+ }) })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "auth-method", children: "Authentication Method" }), _jsxs(Select, { value: authMethod, onValueChange: handleAuthMethodChange, disabled: SESSION_ONLY_AGENTS.has(agentType), children: [_jsx(SelectTrigger, { id: "auth-method", "data-testid": "auth-method-select", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: AUTH_METHOD_OPTIONS.filter((opt) => !SESSION_ONLY_AGENTS.has(agentType) || opt.value === AgentAuthMethod.Session).map((opt) => (_jsx(SelectItem, { value: opt.value, children: opt.label }, opt.value))) })] }), SESSION_ONLY_AGENTS.has(agentType) && (_jsxs("p", { className: "text-muted-foreground text-xs", children: ["Copilot CLI uses GitHub OAuth \u2014 authenticate with", ' ', _jsx("code", { className: "font-mono", children: "copilot auth login" }), ". No API token needed."] }))] }), authMethod === AgentAuthMethod.Token && (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "agent-token", children: "API Token" }), _jsxs("div", { className: "relative", children: [_jsx(Input, { id: "agent-token", "data-testid": "agent-token-input", type: showToken ? 'text' : 'password', value: token, onChange: (e) => setToken(e.target.value), onBlur: handleTokenBlur, placeholder: "Enter your API token", className: "pe-10" }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "absolute top-0 right-0 h-full px-3 hover:bg-transparent", onClick: () => setShowToken(!showToken), "data-testid": "toggle-token-visibility", "aria-label": showToken ? 'Hide token' : 'Show token', children: showToken ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Saves automatically when you leave the field" })] }))] })] }));
76
84
  }
@@ -14,4 +14,5 @@ export declare const Default: Story;
14
14
  export declare const TokenAuth: Story;
15
15
  export declare const CodexCli: Story;
16
16
  export declare const AiderSession: Story;
17
+ export declare const CopilotCli: Story;
17
18
  //# sourceMappingURL=agent-settings-section.stories.d.ts.map