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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/apis/json-schema/Feature.yaml +17 -5
  2. package/apis/json-schema/FeatureMode.yaml +8 -0
  3. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  4. package/apis/json-schema/WorkflowConfig.yaml +10 -5
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -2
  6. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +4 -3
  8. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -2
  10. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -2
  11. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +3 -2
  13. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -2
  14. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  15. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +18 -7
  16. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +3 -2
  17. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  18. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
  19. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +13 -0
  20. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts +40 -0
  21. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.js +125 -0
  23. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -2
  24. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  25. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +5 -3
  26. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  27. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +2 -1
  28. package/dist/packages/core/src/domain/generated/output.d.ts +22 -4
  29. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  30. package/dist/packages/core/src/domain/generated/output.js +7 -0
  31. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +21 -6
  32. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  33. package/dist/packages/core/src/domain/lifecycle-gates.js +25 -6
  34. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +3 -1
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +10 -4
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +2 -1
  40. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +7 -2
  42. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts +19 -0
  43. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts.map +1 -0
  44. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.js +46 -0
  45. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts +17 -0
  46. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts.map +1 -0
  47. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.js +37 -0
  48. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts +12 -0
  49. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts.map +1 -0
  50. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.js +17 -0
  51. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +5 -3
  53. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -3
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts +362 -0
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts.map +1 -0
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.js +72 -0
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +20 -0
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +68 -0
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  61. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -2
  62. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  63. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -3
  64. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -2
  65. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  66. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +19 -8
  67. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
  68. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +1 -0
  69. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts +18 -0
  70. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts.map +1 -0
  71. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.js +52 -0
  72. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  73. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +1 -0
  74. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts +24 -0
  75. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts.map +1 -0
  76. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.js +38 -0
  77. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts +31 -0
  78. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts.map +1 -0
  79. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.js +240 -0
  80. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts +21 -0
  81. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts.map +1 -0
  82. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.js +134 -0
  83. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +4 -0
  84. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  85. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +17 -0
  86. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  87. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  88. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +7 -4
  89. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts +12 -0
  90. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts.map +1 -0
  91. package/dist/src/presentation/cli/commands/feat/feedback.command.js +64 -0
  92. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  93. package/dist/src/presentation/cli/commands/feat/index.js +5 -1
  94. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  95. package/dist/src/presentation/cli/commands/feat/new.command.js +18 -5
  96. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts +13 -0
  97. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts.map +1 -0
  98. package/dist/src/presentation/cli/commands/feat/promote.command.js +41 -0
  99. package/dist/src/presentation/web/app/actions/create-feature.d.ts +3 -2
  100. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  101. package/dist/src/presentation/web/app/actions/create-feature.js +3 -3
  102. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts +9 -0
  103. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts.map +1 -0
  104. package/dist/src/presentation/web/app/actions/discard-exploration.js +29 -0
  105. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +2 -1
  106. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  107. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +2 -1
  108. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts +11 -0
  109. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts.map +1 -0
  110. package/dist/src/presentation/web/app/actions/promote-exploration.js +21 -0
  111. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts +12 -0
  112. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts.map +1 -0
  113. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.js +40 -0
  114. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  115. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  116. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  117. package/dist/src/presentation/web/app/build-feature-node-data.js +4 -2
  118. package/dist/src/presentation/web/app/build-graph-nodes.js +4 -2
  119. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
  120. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  121. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +3 -0
  122. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  123. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +65 -1
  124. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +3 -2
  125. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  126. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +15 -11
  127. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  128. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +2 -1
  129. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts +8 -0
  130. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts.map +1 -0
  131. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.js +33 -0
  132. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts +10 -0
  133. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts.map +1 -0
  134. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.js +33 -0
  135. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +6 -1
  136. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  137. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +16 -4
  138. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts +11 -0
  139. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts.map +1 -0
  140. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.js +34 -0
  141. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts +16 -0
  142. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts.map +1 -0
  143. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.js +70 -0
  144. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  145. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +2 -0
  146. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +6 -2
  147. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  148. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +12 -0
  149. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  150. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +7 -2
  151. package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts +3 -1
  152. package/dist/src/presentation/web/components/common/repo-group/repo-group.d.ts.map +1 -1
  153. package/dist/src/presentation/web/components/common/repo-group/repo-group.js +6 -3
  154. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts +1 -0
  155. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.d.ts.map +1 -1
  156. package/dist/src/presentation/web/components/common/repo-group/repo-group.stories.js +10 -1
  157. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  158. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -6
  159. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +3 -3
  160. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  161. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +4 -1
  162. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +3 -1
  163. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  164. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  165. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
  166. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +2 -0
  167. package/dist/src/presentation/web/components/ui/toggle-group.d.ts +10 -0
  168. package/dist/src/presentation/web/components/ui/toggle-group.d.ts.map +1 -0
  169. package/dist/src/presentation/web/components/ui/toggle-group.js +22 -0
  170. package/dist/src/presentation/web/components/ui/toggle.d.ts +10 -0
  171. package/dist/src/presentation/web/components/ui/toggle.d.ts.map +1 -0
  172. package/dist/src/presentation/web/components/ui/toggle.js +26 -0
  173. package/dist/translations/ar/cli.json +24 -0
  174. package/dist/translations/ar/web.json +6 -2
  175. package/dist/translations/de/cli.json +24 -0
  176. package/dist/translations/de/web.json +6 -2
  177. package/dist/translations/en/cli.json +24 -0
  178. package/dist/translations/en/web.json +6 -2
  179. package/dist/translations/es/cli.json +24 -0
  180. package/dist/translations/es/web.json +6 -2
  181. package/dist/translations/fr/cli.json +24 -0
  182. package/dist/translations/fr/web.json +6 -2
  183. package/dist/translations/he/cli.json +24 -0
  184. package/dist/translations/he/web.json +6 -2
  185. package/dist/translations/pt/cli.json +24 -0
  186. package/dist/translations/pt/web.json +6 -2
  187. package/dist/translations/ru/cli.json +24 -0
  188. package/dist/translations/ru/web.json +6 -2
  189. package/dist/tsconfig.build.tsbuildinfo +1 -1
  190. package/package.json +1 -1
  191. package/web/.next/BUILD_ID +1 -1
  192. package/web/.next/build-manifest.json +2 -2
  193. package/web/.next/fallback-build-manifest.json +2 -2
  194. package/web/.next/prerender-manifest.json +3 -3
  195. package/web/.next/required-server-files.js +3 -3
  196. package/web/.next/required-server-files.json +3 -3
  197. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  198. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  199. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  201. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  202. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  203. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  204. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  205. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  206. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +119 -74
  207. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
  208. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  209. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  210. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +119 -74
  211. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
  212. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  213. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  214. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  215. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  216. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  217. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  218. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  219. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  220. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  221. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  222. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  223. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  224. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  225. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  226. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +119 -74
  227. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
  228. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  229. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  230. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +119 -74
  231. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
  232. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  233. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  234. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  235. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  236. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  237. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  238. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  239. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  240. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  241. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  242. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  243. package/web/.next/server/app/_global-error.html +2 -2
  244. package/web/.next/server/app/_global-error.rsc +1 -1
  245. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  246. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  247. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  248. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  249. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  250. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  251. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  252. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  253. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  254. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  255. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  256. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  257. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  258. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  259. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  260. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  261. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  262. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  263. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  264. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  265. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  266. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  267. package/web/.next/server/app/version/page.js.nft.json +1 -1
  268. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  269. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  270. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  271. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +1 -1
  272. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  273. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  274. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  275. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  276. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  277. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  279. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
  281. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js +2 -2
  283. package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  285. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js +3 -0
  287. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d0c3840._.js.map +1 -0
  288. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  289. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +1 -1
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js +4 -0
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__58a5b819._.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js +4 -0
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__67a193c8._.js.map +1 -0
  294. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js +4 -0
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__754fb18e._.js.map +1 -0
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js +2 -2
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js +4 -0
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__96ba046b._.js.map +1 -0
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js +1 -1
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  307. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js +1 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__dffa13c5._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  311. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  313. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/_0727935d._.js +1 -1
  315. package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
  316. package/web/.next/server/chunks/ssr/_0dc06d07._.js +1 -1
  317. package/web/.next/server/chunks/ssr/_0dc06d07._.js.map +1 -1
  318. package/web/.next/server/chunks/ssr/{_423abf07._.js → _11cefd16._.js} +2 -2
  319. package/web/.next/server/chunks/ssr/_11cefd16._.js.map +1 -0
  320. package/web/.next/server/chunks/ssr/_12c98a3d._.js +3 -0
  321. package/web/.next/server/chunks/ssr/_12c98a3d._.js.map +1 -0
  322. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  323. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  324. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  325. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  326. package/web/.next/server/chunks/ssr/_1e08a336._.js +1 -1
  327. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  328. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  329. package/web/.next/server/chunks/ssr/_43ba79e7._.js +3 -0
  330. package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +1 -0
  331. package/web/.next/server/chunks/ssr/_5119a3df._.js +1 -1
  332. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  333. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  334. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  335. package/web/.next/server/chunks/ssr/_5eb460b1._.js +3 -0
  336. package/web/.next/server/chunks/ssr/_5eb460b1._.js.map +1 -0
  337. package/web/.next/server/chunks/ssr/{_3694ac1d._.js → _75f0b0fe._.js} +2 -2
  338. package/web/.next/server/chunks/ssr/_75f0b0fe._.js.map +1 -0
  339. package/web/.next/server/chunks/ssr/_997b560b._.js +3 -0
  340. package/web/.next/server/chunks/ssr/_997b560b._.js.map +1 -0
  341. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  342. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  343. package/web/.next/server/chunks/ssr/_acc5e43e._.js +9 -0
  344. package/web/.next/server/chunks/ssr/_acc5e43e._.js.map +1 -0
  345. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  346. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  347. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  348. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  349. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  350. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  351. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  352. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  353. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  354. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  355. package/web/.next/server/chunks/ssr/{_97d6bed3._.js → _f4086cb6._.js} +2 -2
  356. package/web/.next/server/chunks/ssr/{_97d6bed3._.js.map → _f4086cb6._.js.map} +1 -1
  357. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  358. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  359. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  360. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  361. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  362. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  363. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +3 -0
  364. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map +1 -0
  365. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  366. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  367. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  368. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  369. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  370. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  371. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  372. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  373. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  374. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  375. package/web/.next/server/pages/500.html +2 -2
  376. package/web/.next/server/server-reference-manifest.js +1 -1
  377. package/web/.next/server/server-reference-manifest.json +303 -195
  378. package/web/.next/static/chunks/{d5366257d6b9f855.js → 2a9af061f4fbe7f5.js} +1 -1
  379. package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
  380. package/web/.next/static/chunks/3425e7d1b8c44fcf.js +5 -0
  381. package/web/.next/static/chunks/387b61bf5fe98489.js +1 -0
  382. package/web/.next/static/chunks/3ffd3d331ce9991e.js +1 -0
  383. package/web/.next/static/chunks/{2bf4ef44d86ffc3b.js → 408f0fae9aebd4ce.js} +3 -3
  384. package/web/.next/static/chunks/7b2ba627f78d1730.js +1 -0
  385. package/web/.next/static/chunks/84ecdec18d323210.css +1 -0
  386. package/web/.next/static/chunks/{779b5c49587b074e.js → 884fceb3e6a67215.js} +1 -1
  387. package/web/.next/static/chunks/{abffc5c232738d87.js → 8a0b6b5e00501f7d.js} +1 -1
  388. package/web/.next/static/chunks/8b0a9cb5109fe899.js +1 -0
  389. package/web/.next/static/chunks/{6590ee22b55e119c.js → 9aa8486d10ba7131.js} +1 -1
  390. package/web/.next/static/chunks/a32e0107a4ad74d3.js +1 -0
  391. package/web/.next/static/chunks/{ba1873d442ce6a95.js → b1335961d331f89d.js} +1 -1
  392. package/web/.next/static/chunks/{dbd876611e25a77a.js → c1d5987a3df2faa3.js} +2 -2
  393. package/web/.next/static/chunks/ec8409b3fd25f477.js +1 -0
  394. package/web/.next/static/chunks/{2afb3ff30c02d222.js → edb42f3dc7a611e5.js} +1 -1
  395. package/web/.next/static/chunks/f10474885c41b290.js +7 -0
  396. package/web/.next/static/chunks/fbbd01277183d8f5.js +1 -0
  397. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js +0 -4
  398. package/web/.next/server/chunks/ssr/[root-of-the-server]__563e4faf._.js.map +0 -1
  399. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js +0 -4
  400. package/web/.next/server/chunks/ssr/[root-of-the-server]__821a11c1._.js.map +0 -1
  401. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js +0 -4
  402. package/web/.next/server/chunks/ssr/[root-of-the-server]__98740ee4._.js.map +0 -1
  403. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js +0 -4
  404. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba9f9e11._.js.map +0 -1
  405. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js +0 -3
  406. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0be67c7._.js.map +0 -1
  407. package/web/.next/server/chunks/ssr/_3694ac1d._.js.map +0 -1
  408. package/web/.next/server/chunks/ssr/_423abf07._.js.map +0 -1
  409. package/web/.next/server/chunks/ssr/_4d49a312._.js +0 -3
  410. package/web/.next/server/chunks/ssr/_4d49a312._.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/_9215e9ec._.js +0 -3
  412. package/web/.next/server/chunks/ssr/_9215e9ec._.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/_c45aee16._.js +0 -3
  414. package/web/.next/server/chunks/ssr/_c45aee16._.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/_cc654b75._.js +0 -9
  416. package/web/.next/server/chunks/ssr/_cc654b75._.js.map +0 -1
  417. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
  418. package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
  419. package/web/.next/static/chunks/28ae5046faef6cec.js +0 -1
  420. package/web/.next/static/chunks/57ab723edeb11139.js +0 -5
  421. package/web/.next/static/chunks/648c64fc71830213.js +0 -1
  422. package/web/.next/static/chunks/87aab386fe53c79a.js +0 -1
  423. package/web/.next/static/chunks/89846d73600950d1.js +0 -1
  424. package/web/.next/static/chunks/966eb2688300b7f5.js +0 -1
  425. package/web/.next/static/chunks/9ddf7523e76e17a5.js +0 -7
  426. package/web/.next/static/chunks/9f8caef46056054a.js +0 -1
  427. package/web/.next/static/chunks/d45bab7ae6805b07.js +0 -1
  428. package/web/.next/static/chunks/eeadf13c0ea6cbe0.css +0 -1
  429. /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_buildManifest.js +0 -0
  430. /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_clientMiddlewareManifest.json +0 -0
  431. /package/web/.next/static/{xUxHXKly7tXyWCOO7vL7O → kNm1fszszwTmqzND9yEZH}/_ssgManifest.js +0 -0
@@ -9,6 +9,7 @@ export const lifecycleDisplayLabels = {
9
9
  awaitingUpstream: 'AWAITING UPSTREAM',
10
10
  deploy: 'DEPLOY & QA',
11
11
  maintain: 'COMPLETED',
12
+ exploring: 'EXPLORING',
12
13
  };
13
14
  /** Inline-start border color for each lifecycle phase. */
14
15
  export const lifecycleBorderColors = {
@@ -20,6 +21,7 @@ export const lifecycleBorderColors = {
20
21
  awaitingUpstream: 'border-s-amber-500',
21
22
  deploy: 'border-s-emerald-500',
22
23
  maintain: 'border-s-gray-400',
24
+ exploring: 'border-s-amber-400',
23
25
  };
24
26
  /** Accent bar background color for each lifecycle phase. */
25
27
  export const lifecycleAccentColors = {
@@ -31,6 +33,7 @@ export const lifecycleAccentColors = {
31
33
  awaitingUpstream: 'bg-amber-500',
32
34
  deploy: 'bg-emerald-500',
33
35
  maintain: 'bg-gray-400',
36
+ exploring: 'bg-amber-400',
34
37
  };
35
38
  /** Phase badge: short letter, color classes, and user-friendly tooltip. */
36
39
  export const lifecyclePhaseBadge = {
@@ -98,6 +101,14 @@ export const lifecyclePhaseBadge = {
98
101
  tooltip: 'Completed',
99
102
  description: 'All done — the feature has been merged and delivered successfully.',
100
103
  },
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
+ },
101
112
  };
102
113
  /** State-based inline-start border overrides (takes precedence over lifecycle). */
103
114
  export const stateBorderColors = {
@@ -121,6 +132,7 @@ export const lifecycleRunningVerbs = {
121
132
  awaitingUpstream: 'Awaiting upstream',
122
133
  deploy: 'Deploying',
123
134
  maintain: 'Maintaining',
135
+ exploring: 'Prototyping',
124
136
  };
125
137
  export const featureNodeStateConfig = {
126
138
  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":"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"}
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"}
@@ -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, Loader2, Globe, RotateCcw, Play, Square, Eye, Archive, ArchiveRestore, MessageSquare, } from 'lucide-react';
7
+ import { Plus, Trash2, Zap, ClipboardList, FlaskConical, 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,6 +16,7 @@ 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';
19
20
  import { getAgentTypeIcon } from './agent-type-icons.js';
20
21
  import { FeatureSessionsDropdown } from './feature-sessions-dropdown.js';
21
22
  function AgentIcon({ agentType, className }) {
@@ -111,7 +112,11 @@ export function FeatureNode({ data, selected, }) {
111
112
  selected &&
112
113
  '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 &&
113
114
  data.state !== 'action-required' &&
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 &&
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 &&
115
120
  ![
116
121
  'deleting',
117
122
  'creating',
@@ -7,6 +7,8 @@ export interface RepoGroupProps {
7
7
  children: ReactNode;
8
8
  /** Whether the group starts expanded (default: true) */
9
9
  defaultOpen?: boolean;
10
+ /** Called when the user clicks the + button to add a feature */
11
+ onAddFeature?: () => void;
10
12
  }
11
- export declare function RepoGroup({ repoName, featureCount, children, defaultOpen, }: RepoGroupProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function RepoGroup({ repoName, featureCount, children, defaultOpen, onAddFeature, }: RepoGroupProps): import("react/jsx-runtime").JSX.Element;
12
14
  //# sourceMappingURL=repo-group.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-group.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAkB,GACnB,EAAE,cAAc,2CAiChB"}
1
+ {"version":3,"file":"repo-group.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAkB,EAClB,YAAY,GACb,EAAE,cAAc,2CAoDhB"}
@@ -1,9 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState } from 'react';
4
- import { ChevronDown, GitFork } from 'lucide-react';
4
+ import { ChevronDown, GitFork, Plus } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils.js';
6
- export function RepoGroup({ repoName, featureCount, children, defaultOpen = true, }) {
6
+ export function RepoGroup({ repoName, featureCount, children, defaultOpen = true, onAddFeature, }) {
7
7
  const [open, setOpen] = useState(defaultOpen);
8
- return (_jsxs("div", { "data-testid": "repo-group", className: "mb-1", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: cn('text-sidebar-foreground hover:bg-sidebar-accent flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold', 'transition-colors duration-100'), "aria-expanded": open, children: [_jsx(ChevronDown, { className: cn('text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200', !open && '-rotate-90') }), _jsx(GitFork, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: repoName }), _jsx("span", { "aria-label": `${featureCount} features`, className: "bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums", role: "img", children: featureCount })] }), open ? _jsx("div", { className: "pl-2", children: children }) : null] }));
8
+ return (_jsxs("div", { "data-testid": "repo-group", className: "group/repo mb-1", children: [_jsxs("div", { className: "flex items-center", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: cn('text-sidebar-foreground hover:bg-sidebar-accent flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold', 'transition-colors duration-100'), "aria-expanded": open, children: [_jsx(ChevronDown, { className: cn('text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200', !open && '-rotate-90') }), _jsx(GitFork, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: repoName }), _jsx("span", { "aria-label": `${featureCount} features`, className: "bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums", role: "img", children: featureCount })] }), onAddFeature ? (_jsx("button", { type: "button", "data-testid": "repo-add-feature", onClick: (e) => {
9
+ e.stopPropagation();
10
+ onAddFeature();
11
+ }, className: cn('text-muted-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent shrink-0 rounded-md p-1 opacity-0 transition-all duration-100 group-hover/repo:opacity-100', 'focus-visible:ring-ring focus-visible:opacity-100 focus-visible:ring-1 focus-visible:outline-none'), "aria-label": `Add feature to ${repoName}`, children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })) : null] }), open ? _jsx("div", { className: "pl-2", children: children }) : null] }));
9
12
  }
@@ -6,5 +6,6 @@ type Story = StoryObj<typeof meta>;
6
6
  export declare const Default: Story;
7
7
  export declare const SingleFeature: Story;
8
8
  export declare const Collapsed: Story;
9
+ export declare const WithAddFeature: Story;
9
10
  export declare const MultipleRepos: Story;
10
11
  //# sourceMappingURL=repo-group.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-group.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAgBhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAevB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAyB3B,CAAC"}
1
+ {"version":3,"file":"repo-group.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repo-group/repo-group.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAgBhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAevB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAgB5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAyB3B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { fn } from '@storybook/test';
2
3
  import { SidebarProvider } from '../../ui/sidebar.js';
3
4
  import { FeatureListItem } from '../../common/feature-list-item/index.js';
4
5
  import { FeatureStatusGroup } from '../../common/feature-status-group/index.js';
@@ -37,6 +38,14 @@ export const Collapsed = {
37
38
  children: (_jsxs(FeatureStatusGroup, { label: "In Progress", count: 5, children: [_jsx(FeatureListItem, { name: "Feature A", status: "in-progress", startedAt: Date.now() - 60_000 }), _jsx(FeatureListItem, { name: "Feature B", status: "in-progress", startedAt: Date.now() - 120_000 }), _jsx(FeatureListItem, { name: "Feature C", status: "in-progress", startedAt: Date.now() - 180_000 }), _jsx(FeatureListItem, { name: "Feature D", status: "in-progress", startedAt: Date.now() - 240_000 }), _jsx(FeatureListItem, { name: "Feature E", status: "in-progress", startedAt: Date.now() - 300_000 })] })),
38
39
  },
39
40
  };
41
+ export const WithAddFeature = {
42
+ args: {
43
+ repoName: 'my-project',
44
+ featureCount: 2,
45
+ onAddFeature: fn(),
46
+ children: (_jsxs(_Fragment, { children: [_jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }) }), _jsx(FeatureStatusGroup, { label: "Done", count: 1, children: _jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }) })] })),
47
+ },
48
+ };
40
49
  export const MultipleRepos = {
41
- render: () => (_jsxs(_Fragment, { children: [_jsxs(RepoGroup, { repoName: "frontend", featureCount: 2, children: [_jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }) }), _jsx(FeatureStatusGroup, { label: "Done", count: 1, children: _jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }) })] }), _jsxs(RepoGroup, { repoName: "backend-api", featureCount: 2, children: [_jsx(FeatureStatusGroup, { label: "Action Needed", count: 1, children: _jsx(FeatureListItem, { name: "Auth Module", status: "action-needed" }) }), _jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "API Gateway", status: "in-progress", startedAt: Date.now() - 60_000 }) })] })] })),
50
+ render: () => (_jsxs(_Fragment, { children: [_jsxs(RepoGroup, { repoName: "frontend", featureCount: 2, onAddFeature: fn(), children: [_jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "Dashboard", status: "in-progress", startedAt: Date.now() - 330_000 }) }), _jsx(FeatureStatusGroup, { label: "Done", count: 1, children: _jsx(FeatureListItem, { name: "Settings Page", status: "done", duration: "2h" }) })] }), _jsxs(RepoGroup, { repoName: "backend-api", featureCount: 2, onAddFeature: fn(), children: [_jsx(FeatureStatusGroup, { label: "Action Needed", count: 1, children: _jsx(FeatureListItem, { name: "Auth Module", status: "action-needed" }) }), _jsx(FeatureStatusGroup, { label: "In Progress", count: 1, children: _jsx(FeatureListItem, { name: "API Gateway", status: "in-progress", startedAt: Date.now() - 60_000 }) })] })] })),
42
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CAi3CzB"}
1
+ {"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CA+3CzB"}
@@ -158,7 +158,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
158
158
  const [commitEvidence, setCommitEvidence] = useState(settings.workflow.commitEvidence);
159
159
  const [ciWatchEnabled, setCiWatchEnabled] = useState(settings.workflow.ciWatchEnabled !== false);
160
160
  const [hideCiStatus, setHideCiStatus] = useState(settings.workflow.hideCiStatus !== false);
161
- const [defaultFastMode, setDefaultFastMode] = useState(settings.workflow.defaultFastMode !== false);
161
+ const [defaultMode, setDefaultMode] = useState(settings.workflow.defaultMode ?? 'Fast');
162
162
  // Auto-archive state
163
163
  const [autoArchiveEnabled, setAutoArchiveEnabled] = useState((settings.workflow.autoArchiveDelayMinutes ?? 10) > 0);
164
164
  const [autoArchiveDelay, setAutoArchiveDelay] = useState(String(settings.workflow.autoArchiveDelayMinutes ?? 10));
@@ -259,7 +259,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
259
259
  commitEvidence: overrides.commitEvidence ?? commitEvidence,
260
260
  ciWatchEnabled: overrides.ciWatchEnabled ?? ciWatchEnabled,
261
261
  hideCiStatus: overrides.hideCiStatus ?? hideCiStatus,
262
- defaultFastMode: overrides.defaultFastMode ?? defaultFastMode,
262
+ defaultMode: overrides.defaultMode ?? defaultMode,
263
263
  autoArchiveDelayMinutes: archiveEnabled
264
264
  ? Number.isNaN(archiveDelay) || archiveDelay < 1
265
265
  ? 10
@@ -374,10 +374,10 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
374
374
  label: t('settings.environment.links.configurationGuide'),
375
375
  href: 'https://github.com/shep-ai/shep/blob/main/docs/guides/configuration.md',
376
376
  },
377
- ], children: t('settings.environment.hint') })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: t('settings.workflow.title'), description: t('settings.workflow.sectionDescription'), testId: "workflow-settings-section", children: [_jsx(SwitchRow, { label: t('settings.workflow.defaultFastMode'), description: t('settings.workflow.defaultFastModeDescription'), id: "default-fast-mode", testId: "switch-default-fast-mode", checked: defaultFastMode, onChange: (v) => {
378
- setDefaultFastMode(v);
379
- save(buildWorkflowPayload({ defaultFastMode: v }));
380
- } }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.approve') }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePrd'), description: t('settings.workflow.autoApprovePrdDescription'), id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
377
+ ], children: t('settings.environment.hint') })] }), _jsxs("div", { id: "section-workflow", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: GitBranch, title: t('settings.workflow.title'), description: t('settings.workflow.sectionDescription'), testId: "workflow-settings-section", children: [_jsx(SettingsRow, { label: t('settings.workflow.defaultMode'), description: t('settings.workflow.defaultModeDescription'), children: _jsxs(Select, { value: defaultMode, onValueChange: (v) => {
378
+ setDefaultMode(v);
379
+ save(buildWorkflowPayload({ defaultMode: v }));
380
+ }, children: [_jsx(SelectTrigger, { id: "default-mode", "data-testid": "default-mode-select", className: "w-55 cursor-pointer text-xs", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "Regular", children: t('settings.workflow.modeRegular') }), _jsx(SelectItem, { value: "Fast", children: t('settings.workflow.modeFast') }), _jsx(SelectItem, { value: "Exploration", children: t('settings.workflow.modeExploration') })] })] }) }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.approve') }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePrd'), description: t('settings.workflow.autoApprovePrdDescription'), id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
381
381
  setAllowPrd(v);
382
382
  save(buildWorkflowPayload({ allowPrd: v }));
383
383
  } }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePlan'), description: t('settings.workflow.autoApprovePlanDescription'), id: "allow-plan", testId: "switch-allow-plan", checked: allowPlan, onChange: (v) => {
@@ -21,7 +21,7 @@ export const Default = {
21
21
  ciWatchEnabled: true,
22
22
  enableEvidence: false,
23
23
  commitEvidence: false,
24
- defaultFastMode: true,
24
+ defaultMode: 'Fast',
25
25
  },
26
26
  },
27
27
  };
@@ -52,7 +52,7 @@ export const AllEnabled = {
52
52
  ciWatchEnabled: true,
53
53
  enableEvidence: true,
54
54
  commitEvidence: true,
55
- defaultFastMode: true,
55
+ defaultMode: 'Fast',
56
56
  },
57
57
  },
58
58
  };
@@ -83,7 +83,7 @@ export const WithCiSettings = {
83
83
  ciWatchEnabled: true,
84
84
  enableEvidence: false,
85
85
  commitEvidence: false,
86
- defaultFastMode: true,
86
+ defaultMode: 'Fast',
87
87
  },
88
88
  },
89
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBzE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAiHD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,aAAa,2CAiBhE"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBzE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyHD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,aAAa,2CAiBhE"}
@@ -26,6 +26,9 @@ function AppShellInner({ children, sidebarOpen }) {
26
26
  const handleFeatureClick = useCallback((featureId) => {
27
27
  guardedNavigate(() => router.push(`/feature/${featureId}`));
28
28
  }, [router, guardedNavigate]);
29
+ const handleAddFeature = useCallback((repositoryPath) => {
30
+ guardedNavigate(() => router.push(`/create?repo=${encodeURIComponent(repositoryPath)}`));
31
+ }, [router, guardedNavigate]);
29
32
  const [addingRepo, setAddingRepo] = useState(false);
30
33
  const [githubDialogOpen, setGithubDialogOpen] = useState(false);
31
34
  const [showReactPicker, setShowReactPicker] = useState(false);
@@ -76,7 +79,7 @@ function AppShellInner({ children, sidebarOpen }) {
76
79
  window.dispatchEvent(new CustomEvent('shep:add-repository', { detail: { path: repository.path } }));
77
80
  }
78
81
  }, []);
79
- return (_jsxs(SidebarProvider, { defaultOpen: sidebarOpen ?? false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsx("main", { className: "h-full", children: children }), _jsx(GlobalChatPopup, {}), featureFlags.githubImport ? (_jsx(GitHubImportDialog, { open: githubDialogOpen, onOpenChange: setGithubDialogOpen, onImportComplete: handleGitHubImportComplete })) : null] }) }), _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (open) => {
82
+ return (_jsxs(SidebarProvider, { defaultOpen: sidebarOpen ?? false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick, onAddFeature: handleAddFeature }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsx("main", { className: "h-full", children: children }), _jsx(GlobalChatPopup, {}), featureFlags.githubImport ? (_jsx(GitHubImportDialog, { open: githubDialogOpen, onOpenChange: setGithubDialogOpen, onImportComplete: handleGitHubImportComplete })) : null] }) }), _jsx(ReactFileManagerDialog, { open: showReactPicker, onOpenChange: (open) => {
80
83
  if (!open)
81
84
  setShowReactPicker(false);
82
85
  }, onSelect: handleReactPickerSelect })] }));
@@ -15,6 +15,8 @@ export interface AppSidebarProps {
15
15
  features: FeatureItem[];
16
16
  featureFlags: FeatureFlagsState;
17
17
  onFeatureClick?: (featureId: string) => void;
18
+ /** Called when the user clicks the + button on a repo group to create a feature */
19
+ onAddFeature?: (repositoryPath: string) => void;
18
20
  }
19
- export declare function AppSidebar({ features, featureFlags, onFeatureClick, }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function AppSidebar({ features, featureFlags, onFeatureClick, onAddFeature, }: AppSidebarProps): import("react/jsx-runtime").JSX.Element;
20
22
  //# sourceMappingURL=app-sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAqQjB"}
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,EACd,YAAY,GACb,EAAE,eAAe,2CA0QjB"}
@@ -22,7 +22,7 @@ import { featureStatusConfig, featureStatusOrder } from '../../common/feature-st
22
22
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
23
23
  import { useDeferredMount } from '../../../hooks/use-deferred-mount.js';
24
24
  import { useVersion } from '../../../hooks/use-version.js';
25
- export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
25
+ export function AppSidebar({ features, featureFlags, onFeatureClick, onAddFeature, }) {
26
26
  const { t, i18n } = useTranslation('web');
27
27
  const pathname = usePathname();
28
28
  const { state } = useSidebar();
@@ -68,7 +68,7 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
68
68
  'flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out',
69
69
  '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
70
70
  expandedVisible ? 'opacity-100' : 'opacity-0',
71
- ].join(' '), children: [_jsx(SidebarSectionHeader, { label: t('sidebar.features') }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: repoGroups.map(({ repoPath, repoName, featureCount, statusGroups }) => (_jsx(RepoGroup, { repoName: repoName, featureCount: featureCount, children: statusGroups.map(({ statusKey, label, items }) => (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, statusKey))) }, repoPath))) })] })) : null }), _jsx(SidebarFooter, { className: "border-t p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx("div", { className: "flex items-center gap-1", children: _jsxs(TooltipProvider, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { className: "w-auto flex-none", onClick: (e) => {
71
+ ].join(' '), children: [_jsx(SidebarSectionHeader, { label: t('sidebar.features') }), _jsx(ScrollArea, { className: "min-h-0 flex-1", children: repoGroups.map(({ repoPath, repoName, featureCount, statusGroups }) => (_jsx(RepoGroup, { repoName: repoName, featureCount: featureCount, onAddFeature: onAddFeature ? () => onAddFeature(repoPath) : undefined, children: statusGroups.map(({ statusKey, label, items }) => (_jsx(FeatureStatusGroup, { label: label, count: items.length, children: items.map((feature) => (_jsx(FeatureListItem, { name: feature.name, status: feature.status, startedAt: feature.startedAt, duration: feature.duration, agentType: feature.agentType, modelId: feature.modelId, onClick: onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined }, feature.featureId))) }, statusKey))) }, repoPath))) })] })) : null }), _jsx(SidebarFooter, { className: "border-t p-2", children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx("div", { className: "flex items-center gap-1", children: _jsxs(TooltipProvider, { children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(SidebarMenuButton, { className: "w-auto flex-none", onClick: (e) => {
72
72
  const currentResolved = theme === 'system' ? resolvedTheme : theme;
73
73
  const goingToDark = currentResolved !== 'dark';
74
74
  const newTheme = theme === 'system'
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+DnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAIlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAmElC,CAAC"}
1
+ {"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+DnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAKlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAmElC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { fn } from '@storybook/test';
2
3
  import { SidebarProvider, SidebarInset } from '../../ui/sidebar.js';
3
4
  import { AppSidebar } from './app-sidebar.js';
4
5
  const defaultFeatureFlags = {
@@ -96,6 +97,7 @@ export const Default = {
96
97
  export const WithNewFeatureButton = {
97
98
  args: {
98
99
  features: mockFeatures,
100
+ onAddFeature: fn(),
99
101
  },
100
102
  };
101
103
  export const Collapsed = {
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';
4
+ import { toggleVariants } from '../ui/toggle.js';
5
+ declare function ToggleGroup({ className, variant, size, spacing, children, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants> & {
6
+ spacing?: number;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ declare function ToggleGroupItem({ className, children, variant, size, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
9
+ export { ToggleGroup, ToggleGroupItem };
10
+ //# sourceMappingURL=toggle-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/toggle-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAYxD,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAW,EACX,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GACvD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,2CAmBF;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,2CAuB9F;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/utils.js';
6
+ import { toggleVariants } from '../ui/toggle.js';
7
+ const ToggleGroupContext = React.createContext({
8
+ size: 'default',
9
+ variant: 'default',
10
+ spacing: 0,
11
+ });
12
+ function ToggleGroup({ className, variant, size, spacing = 0, children, ...props }) {
13
+ return (_jsx(ToggleGroupPrimitive.Root, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, style: { '--gap': spacing }, className: cn('group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs', className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing }, children: children }) }));
14
+ }
15
+ function ToggleGroupItem({ className, children, variant, size, ...props }) {
16
+ const context = React.useContext(ToggleGroupContext);
17
+ return (_jsx(ToggleGroupPrimitive.Item, { "data-slot": "toggle-group-item", "data-variant": context.variant ?? variant, "data-size": context.size ?? size, "data-spacing": context.spacing, className: cn(toggleVariants({
18
+ variant: context.variant ?? variant,
19
+ size: context.size ?? size,
20
+ }), 'w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10', 'data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l', className), ...props, children: children }));
21
+ }
22
+ export { ToggleGroup, ToggleGroupItem };
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ import { Toggle as TogglePrimitive } from 'radix-ui';
4
+ declare const toggleVariants: (props?: ({
5
+ variant?: "default" | "outline" | null | undefined;
6
+ size?: "default" | "sm" | "lg" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare function Toggle({ className, variant, size, ...props }: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
9
+ export { Toggle, toggleVariants };
10
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/toggle.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAIrD,QAAA,MAAM,cAAc;;;8EAoBnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,2CAQzF;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { cva } from 'class-variance-authority';
4
+ import { Toggle as TogglePrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/utils.js';
6
+ const toggleVariants = cva("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
+ variants: {
8
+ variant: {
9
+ default: 'bg-transparent',
10
+ outline: 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
11
+ },
12
+ size: {
13
+ default: 'h-9 min-w-9 px-2',
14
+ sm: 'h-8 min-w-8 px-1.5',
15
+ lg: 'h-10 min-w-10 px-2.5',
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ variant: 'default',
20
+ size: 'default',
21
+ },
22
+ });
23
+ function Toggle({ className, variant, size, ...props }) {
24
+ return (_jsx(TogglePrimitive.Root, { "data-slot": "toggle", className: cn(toggleVariants({ variant, size, className })), ...props }));
25
+ }
26
+ export { Toggle, toggleVariants };
@@ -204,6 +204,8 @@
204
204
  "pendingOption": "إنشاء الميزة بدون بدء الوكيل",
205
205
  "fastOption": "تخطي مراحل SDLC والتنفيذ مباشرة من الأمر (الافتراضي: مفعّل)",
206
206
  "noFastOption": "تشغيل جميع مراحل SDLC (تحليل → متطلبات → خطة → تنفيذ)",
207
+ "exploreOption": "Start an exploration/prototyping session for iterative design",
208
+ "exploreAndFastConflict": "Cannot use --explore and --fast together. Choose one mode.",
207
209
  "modelOption": "معرّف نموذج LLM لهذا التشغيل (مثال: claude-opus-4-6)",
208
210
  "noRebaseOption": "Skip syncing main from remote before creating the feature branch",
209
211
  "attachOption": "إرفاق ملف (قابل للتكرار)",
@@ -414,6 +416,28 @@
414
416
  "restoredLabel": "تمت الاستعادة:",
415
417
  "failedToUnarchive": "فشل إلغاء أرشفة الميزة"
416
418
  },
419
+ "feedback": {
420
+ "description": "Send feedback on an exploration prototype to iterate",
421
+ "idArgument": "Feature ID or prefix",
422
+ "feedbackArgument": "Feedback text for the next iteration",
423
+ "feedbackSubmitted": "Feedback submitted for: {{name}}",
424
+ "iterationLabel": "Iteration:",
425
+ "agentLabel": "Agent:",
426
+ "agentIterating": "iterating on feedback",
427
+ "notExploration": "Feature \"{{name}}\" is not in exploration mode (mode: {{mode}}, lifecycle: {{lifecycle}})",
428
+ "failedToSubmit": "Failed to submit feedback"
429
+ },
430
+ "promote": {
431
+ "description": "Promote an exploration feature to Regular or Fast mode",
432
+ "idArgument": "Feature ID or prefix",
433
+ "fastOption": "Promote to Fast mode (skip SDLC phases)",
434
+ "promoted": "Exploration promoted: {{name}}",
435
+ "modeLabel": "Mode:",
436
+ "statusLabel": "Status:",
437
+ "agentLabel": "Agent:",
438
+ "agentSpawned": "spawned for {{mode}} mode",
439
+ "failedToPromote": "Failed to promote exploration"
440
+ },
417
441
  "resolveWaiting": {
418
442
  "featureNotFound": "الميزة غير موجودة: \"{{id}}\"",
419
443
  "noAgentRun": "الميزة \"{{name}}\" ليس لديها تشغيل وكيل",
@@ -68,8 +68,11 @@
68
68
  "title": "سير العمل",
69
69
  "description": "تكوين سلوك PR وبوابات الموافقة وإعدادات CI",
70
70
  "sectionDescription": "سلوك الأتمتة بعد التنفيذ",
71
- "defaultFastMode": "الوضع السريع كافتراضي",
72
- "defaultFastModeDescription": "تخطي مراحل SDLC والتنفيذ مباشرة من الأمر",
71
+ "defaultMode": "وضع الميزة الافتراضي",
72
+ "defaultModeDescription": "الوضع الافتراضي للميزات الجديدة المنشأة عبر CLI أو واجهة الويب",
73
+ "modeRegular": "عادي",
74
+ "modeFast": "سريع",
75
+ "modeExploration": "استكشاف",
73
76
  "subsections": {
74
77
  "approve": "الموافقة",
75
78
  "evidence": "الأدلة",
@@ -342,6 +345,7 @@
342
345
  "cancel": "إلغاء",
343
346
  "archive": "أرشفة",
344
347
  "fastMode": "الوضع السريع",
348
+ "explorationMode": "Exploration Mode",
345
349
  "specDriven": "مبني على المواصفات",
346
350
  "copied": "تم النسخ!",
347
351
  "chatWithAgent": "محادثة مع الوكيل",
@@ -204,6 +204,8 @@
204
204
  "pendingOption": "Feature erstellen, ohne den Agenten zu starten",
205
205
  "fastOption": "SDLC-Phasen überspringen und direkt nach Ihrem Prompt implementieren (Standard: ein)",
206
206
  "noFastOption": "Alle SDLC-Phasen durchlaufen (Analyse → Anforderungen → Plan → Implementierung)",
207
+ "exploreOption": "Start an exploration/prototyping session for iterative design",
208
+ "exploreAndFastConflict": "Cannot use --explore and --fast together. Choose one mode.",
207
209
  "modelOption": "LLM-Modellbezeichnung für diesen Lauf (z.B. claude-opus-4-6)",
208
210
  "noRebaseOption": "Skip syncing main from remote before creating the feature branch",
209
211
  "attachOption": "Eine Datei anhängen (wiederholbar)",
@@ -414,6 +416,28 @@
414
416
  "restoredLabel": "Wiederhergestellt:",
415
417
  "failedToUnarchive": "Feature konnte nicht wiederhergestellt werden"
416
418
  },
419
+ "feedback": {
420
+ "description": "Send feedback on an exploration prototype to iterate",
421
+ "idArgument": "Feature ID or prefix",
422
+ "feedbackArgument": "Feedback text for the next iteration",
423
+ "feedbackSubmitted": "Feedback submitted for: {{name}}",
424
+ "iterationLabel": "Iteration:",
425
+ "agentLabel": "Agent:",
426
+ "agentIterating": "iterating on feedback",
427
+ "notExploration": "Feature \"{{name}}\" is not in exploration mode (mode: {{mode}}, lifecycle: {{lifecycle}})",
428
+ "failedToSubmit": "Failed to submit feedback"
429
+ },
430
+ "promote": {
431
+ "description": "Promote an exploration feature to Regular or Fast mode",
432
+ "idArgument": "Feature ID or prefix",
433
+ "fastOption": "Promote to Fast mode (skip SDLC phases)",
434
+ "promoted": "Exploration promoted: {{name}}",
435
+ "modeLabel": "Mode:",
436
+ "statusLabel": "Status:",
437
+ "agentLabel": "Agent:",
438
+ "agentSpawned": "spawned for {{mode}} mode",
439
+ "failedToPromote": "Failed to promote exploration"
440
+ },
417
441
  "resolveWaiting": {
418
442
  "featureNotFound": "Feature nicht gefunden: \"{{id}}\"",
419
443
  "noAgentRun": "Feature \"{{name}}\" hat keinen Agentlauf",
@@ -66,8 +66,11 @@
66
66
  "title": "Workflow",
67
67
  "description": "Konfigurieren Sie PR-Verhalten, Genehmigungsstufen und CI-Einstellungen",
68
68
  "sectionDescription": "Automatisierungsverhalten nach der Implementierung",
69
- "defaultFastMode": "Schnellmodus als Standard",
70
- "defaultFastModeDescription": "SDLC-Phasen überspringen und direkt aus dem Prompt implementieren",
69
+ "defaultMode": "Standard-Feature-Modus",
70
+ "defaultModeDescription": "Standardmodus für neue Features, die über CLI oder Web-UI erstellt werden",
71
+ "modeRegular": "Standard",
72
+ "modeFast": "Schnell",
73
+ "modeExploration": "Erkundung",
71
74
  "subsections": { "approve": "Genehmigen", "evidence": "Nachweise", "git": "Git" },
72
75
  "autoApprovePrd": "PRD automatisch genehmigen",
73
76
  "autoApprovePrdDescription": "Manuelle Überprüfung der Anforderungen überspringen",
@@ -328,6 +331,7 @@
328
331
  "cancel": "Abbrechen",
329
332
  "archive": "Archivieren",
330
333
  "fastMode": "Schnellmodus",
334
+ "explorationMode": "Exploration Mode",
331
335
  "specDriven": "Spezifikationsbasiert",
332
336
  "copied": "Kopiert!",
333
337
  "chatWithAgent": "Chat mit Agent",
@@ -204,6 +204,8 @@
204
204
  "pendingOption": "Create feature without starting the agent",
205
205
  "fastOption": "Skip SDLC phases and implement directly from your prompt (default: on)",
206
206
  "noFastOption": "Run full SDLC phases (analyze → requirements → plan → implement)",
207
+ "exploreOption": "Start an exploration/prototyping session for iterative design",
208
+ "exploreAndFastConflict": "Cannot use --explore and --fast together. Choose one mode.",
207
209
  "modelOption": "LLM model identifier for this run (e.g. claude-opus-4-6)",
208
210
  "noRebaseOption": "Skip syncing main from remote before creating the feature branch",
209
211
  "attachOption": "Attach a file (repeatable)",
@@ -414,6 +416,28 @@
414
416
  "restoredLabel": "Restored:",
415
417
  "failedToUnarchive": "Failed to unarchive feature"
416
418
  },
419
+ "feedback": {
420
+ "description": "Send feedback on an exploration prototype to iterate",
421
+ "idArgument": "Feature ID or prefix",
422
+ "feedbackArgument": "Feedback text for the next iteration",
423
+ "feedbackSubmitted": "Feedback submitted for: {{name}}",
424
+ "iterationLabel": "Iteration:",
425
+ "agentLabel": "Agent:",
426
+ "agentIterating": "iterating on feedback",
427
+ "notExploration": "Feature \"{{name}}\" is not in exploration mode (mode: {{mode}}, lifecycle: {{lifecycle}})",
428
+ "failedToSubmit": "Failed to submit feedback"
429
+ },
430
+ "promote": {
431
+ "description": "Promote an exploration feature to Regular or Fast mode",
432
+ "idArgument": "Feature ID or prefix",
433
+ "fastOption": "Promote to Fast mode (skip SDLC phases)",
434
+ "promoted": "Exploration promoted: {{name}}",
435
+ "modeLabel": "Mode:",
436
+ "statusLabel": "Status:",
437
+ "agentLabel": "Agent:",
438
+ "agentSpawned": "spawned for {{mode}} mode",
439
+ "failedToPromote": "Failed to promote exploration"
440
+ },
417
441
  "resolveWaiting": {
418
442
  "featureNotFound": "Feature not found: \"{{id}}\"",
419
443
  "noAgentRun": "Feature \"{{name}}\" has no agent run",