@shepai/cli 1.170.0-pr513.cff27cb → 1.171.0

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 (417) hide show
  1. package/apis/json-schema/Feature.yaml +5 -17
  2. package/apis/json-schema/SdlcLifecycle.yaml +0 -1
  3. package/apis/json-schema/WorkflowConfig.yaml +5 -10
  4. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +2 -2
  5. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +3 -4
  7. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -2
  9. package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -2
  10. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +2 -3
  12. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -2
  13. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +7 -18
  15. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -3
  16. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  17. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
  18. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +0 -13
  19. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -2
  20. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
  21. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +3 -5
  22. package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.d.ts +1 -0
  23. package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.d.ts.map +1 -1
  24. package/dist/packages/core/src/application/use-cases/upgrade/upgrade-cli.use-case.js +59 -2
  25. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  26. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -2
  27. package/dist/packages/core/src/domain/generated/output.d.ts +4 -22
  28. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  29. package/dist/packages/core/src/domain/generated/output.js +0 -7
  30. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +6 -21
  31. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  32. package/dist/packages/core/src/domain/lifecycle-gates.js +6 -25
  33. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  34. package/dist/packages/core/src/infrastructure/di/container.js +0 -5
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -3
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +4 -10
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -2
  39. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  40. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -7
  41. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +3 -5
  43. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -3
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +0 -20
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
  46. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +0 -68
  47. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  48. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +2 -2
  49. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  50. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -3
  51. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +2 -2
  52. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  53. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +8 -19
  54. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
  55. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +0 -1
  56. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  57. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +0 -1
  58. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +0 -4
  59. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
  60. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +0 -17
  61. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  62. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  63. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +4 -7
  64. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  65. package/dist/src/presentation/cli/commands/feat/index.js +1 -5
  66. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  67. package/dist/src/presentation/cli/commands/feat/new.command.js +5 -18
  68. package/dist/src/presentation/cli/commands/upgrade.command.d.ts.map +1 -1
  69. package/dist/src/presentation/cli/commands/upgrade.command.js +68 -3
  70. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -3
  71. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  72. package/dist/src/presentation/web/app/actions/create-feature.js +3 -3
  73. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts +1 -2
  74. package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
  75. package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +1 -2
  76. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  77. package/dist/src/presentation/web/app/api/agent-events/route.js +0 -1
  78. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  79. package/dist/src/presentation/web/app/build-feature-node-data.js +2 -4
  80. package/dist/src/presentation/web/app/build-graph-nodes.js +2 -4
  81. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
  82. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  83. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +0 -3
  84. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  85. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +1 -65
  86. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -3
  87. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  88. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +11 -15
  89. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +1 -2
  91. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +1 -6
  92. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +4 -16
  94. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  95. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +0 -2
  96. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -6
  97. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  98. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +0 -12
  99. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  100. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -7
  101. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  102. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +6 -6
  103. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +3 -3
  104. package/dist/translations/ar/cli.json +2 -24
  105. package/dist/translations/ar/web.json +2 -6
  106. package/dist/translations/de/cli.json +2 -24
  107. package/dist/translations/de/web.json +2 -6
  108. package/dist/translations/en/cli.json +2 -24
  109. package/dist/translations/en/web.json +2 -6
  110. package/dist/translations/es/cli.json +2 -24
  111. package/dist/translations/es/web.json +2 -6
  112. package/dist/translations/fr/cli.json +2 -24
  113. package/dist/translations/fr/web.json +2 -6
  114. package/dist/translations/he/cli.json +2 -24
  115. package/dist/translations/he/web.json +2 -6
  116. package/dist/translations/pt/cli.json +2 -24
  117. package/dist/translations/pt/web.json +2 -6
  118. package/dist/translations/ru/cli.json +2 -24
  119. package/dist/translations/ru/web.json +2 -6
  120. package/dist/tsconfig.build.tsbuildinfo +1 -1
  121. package/package.json +1 -1
  122. package/web/.next/BUILD_ID +1 -1
  123. package/web/.next/build-manifest.json +2 -2
  124. package/web/.next/fallback-build-manifest.json +2 -2
  125. package/web/.next/prerender-manifest.json +3 -3
  126. package/web/.next/required-server-files.js +2 -2
  127. package/web/.next/required-server-files.json +2 -2
  128. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  129. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  130. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  132. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  133. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
  135. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  136. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +76 -121
  138. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -2
  139. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  140. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +76 -121
  142. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -2
  143. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  144. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  146. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  147. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  148. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  149. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  152. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  153. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
  155. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  156. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  157. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +76 -121
  158. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -2
  159. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  160. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +76 -121
  162. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -2
  163. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  164. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  165. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  166. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  167. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  168. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  169. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  170. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  171. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  172. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  173. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  174. package/web/.next/server/app/_global-error.html +2 -2
  175. package/web/.next/server/app/_global-error.rsc +1 -1
  176. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  177. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  178. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  179. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  180. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  181. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  182. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  183. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  184. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  185. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  186. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  187. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  188. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  189. package/web/.next/server/app/features/page.js.nft.json +1 -1
  190. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  191. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  192. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  193. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  194. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  195. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  196. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  197. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  198. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  199. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  201. package/web/.next/server/app/version/page.js.nft.json +1 -1
  202. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  203. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  204. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  205. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +1 -1
  206. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  207. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  208. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
  209. package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
  210. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  211. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  213. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +3 -3
  215. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ed9b909._.js +1 -1
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +4 -0
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -0
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js +1 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +4 -0
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js +2 -2
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js +2 -2
  235. package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  237. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +4 -0
  239. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -0
  240. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1262d08._.js +1 -1
  241. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  242. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
  243. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +4 -0
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -0
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js +3 -0
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js.map +1 -0
  247. package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
  248. package/web/.next/server/chunks/ssr/_02e01240._.js.map +1 -1
  249. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  250. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  252. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/_18886033._.js +1 -1
  254. package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
  256. package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
  258. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/{_cac4abe6._.js → _49447b3c._.js} +2 -2
  260. package/web/.next/server/chunks/ssr/_49447b3c._.js.map +1 -0
  261. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  262. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/_5119a3df._.js +1 -1
  264. package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  266. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
  268. package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
  269. package/web/.next/server/chunks/ssr/_a963dd3c._.js +3 -0
  270. package/web/.next/server/chunks/ssr/_a963dd3c._.js.map +1 -0
  271. package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
  272. package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
  274. package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
  275. package/web/.next/server/chunks/ssr/{_0fd635d7._.js → _d50cde79._.js} +2 -2
  276. package/web/.next/server/chunks/ssr/_d50cde79._.js.map +1 -0
  277. package/web/.next/server/chunks/ssr/_df737cce._.js +1 -1
  278. package/web/.next/server/chunks/ssr/_e3f14907._.js +9 -0
  279. package/web/.next/server/chunks/ssr/_e3f14907._.js.map +1 -0
  280. package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
  281. package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
  283. package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
  284. package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
  285. package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
  286. package/web/.next/server/chunks/ssr/{_34d897da._.js → _f778f3ef._.js} +2 -2
  287. package/web/.next/server/chunks/ssr/{_34d897da._.js.map → _f778f3ef._.js.map} +1 -1
  288. package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
  289. package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  291. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  293. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
  306. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
  307. package/web/.next/server/pages/500.html +2 -2
  308. package/web/.next/server/server-reference-manifest.js +1 -1
  309. package/web/.next/server/server-reference-manifest.json +202 -310
  310. package/web/.next/static/chunks/{9a78b4c5dcd28196.js → 02fe1303471793b9.js} +2 -2
  311. package/web/.next/static/chunks/0ce50b34df07306b.js +1 -0
  312. package/web/.next/static/chunks/18d4601f068c700d.js +1 -0
  313. package/web/.next/static/chunks/{52681a7f14138e48.js → 24dd6b3021c2d849.js} +1 -1
  314. package/web/.next/static/chunks/3d182168cdc4c15c.js +1 -0
  315. package/web/.next/static/chunks/{0769c695d6b663c7.js → 4383bcae769740e7.js} +1 -1
  316. package/web/.next/static/chunks/{5e20f692bbfcfb94.js → 4559a403ee40dd19.js} +1 -1
  317. package/web/.next/static/chunks/{e93ae5725b0babeb.js → 5983ef48d50d2d2a.js} +1 -1
  318. package/web/.next/static/chunks/{4219ddfde68a6d0b.js → 67a430796dea42a7.js} +1 -1
  319. package/web/.next/static/chunks/6ee5d45de67d3547.js +5 -0
  320. package/web/.next/static/chunks/{0f30a983f3467cd5.js → 9705f2a5695a4995.js} +1 -1
  321. package/web/.next/static/chunks/{d5bf9c963b5346e1.js → a80bbfca8ee3d79b.js} +1 -1
  322. package/web/.next/static/chunks/{37f9543560c58ea6.js → aa077ab14015a8fd.js} +1 -1
  323. package/web/.next/static/chunks/b14085e99b88e7f7.css +1 -0
  324. package/web/.next/static/chunks/b65e555419a0c664.js +1 -0
  325. package/web/.next/static/chunks/{478adf5d5156f002.js → b93a918712cd4987.js} +1 -1
  326. package/web/.next/static/chunks/{fc595d95626ac9bb.js → bb962a996814718a.js} +1 -1
  327. package/web/.next/static/chunks/{2a9af061f4fbe7f5.js → d5366257d6b9f855.js} +1 -1
  328. package/web/.next/static/chunks/{09a25231e5fc1ab8.js → eff45ffddd85918c.js} +1 -1
  329. package/apis/json-schema/FeatureMode.yaml +0 -8
  330. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts +0 -40
  331. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.d.ts.map +0 -1
  332. package/dist/packages/core/src/application/use-cases/features/promote/promote-exploration.use-case.js +0 -125
  333. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts +0 -19
  334. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.d.ts.map +0 -1
  335. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/051-replace-fast-with-mode.js +0 -46
  336. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts +0 -17
  337. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.d.ts.map +0 -1
  338. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/052-replace-default-fast-mode-with-default-mode.js +0 -37
  339. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts +0 -12
  340. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.d.ts.map +0 -1
  341. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-exploration-max-iterations.js +0 -17
  342. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts +0 -362
  343. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.d.ts.map +0 -1
  344. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/exploration-agent-graph.js +0 -72
  345. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts +0 -18
  346. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.d.ts.map +0 -1
  347. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/apply-feedback.node.js +0 -52
  348. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts +0 -24
  349. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.d.ts.map +0 -1
  350. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/apply-feedback.prompt.js +0 -38
  351. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts +0 -31
  352. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.d.ts.map +0 -1
  353. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/prototype-generate.prompt.js +0 -240
  354. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts +0 -21
  355. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.d.ts.map +0 -1
  356. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prototype-generate.node.js +0 -134
  357. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts +0 -12
  358. package/dist/src/presentation/cli/commands/feat/feedback.command.d.ts.map +0 -1
  359. package/dist/src/presentation/cli/commands/feat/feedback.command.js +0 -64
  360. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts +0 -13
  361. package/dist/src/presentation/cli/commands/feat/promote.command.d.ts.map +0 -1
  362. package/dist/src/presentation/cli/commands/feat/promote.command.js +0 -41
  363. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts +0 -9
  364. package/dist/src/presentation/web/app/actions/discard-exploration.d.ts.map +0 -1
  365. package/dist/src/presentation/web/app/actions/discard-exploration.js +0 -29
  366. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts +0 -11
  367. package/dist/src/presentation/web/app/actions/promote-exploration.d.ts.map +0 -1
  368. package/dist/src/presentation/web/app/actions/promote-exploration.js +0 -21
  369. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts +0 -12
  370. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.d.ts.map +0 -1
  371. package/dist/src/presentation/web/app/actions/submit-exploration-feedback.js +0 -40
  372. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts +0 -8
  373. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.d.ts.map +0 -1
  374. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.js +0 -33
  375. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts +0 -10
  376. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.d.ts.map +0 -1
  377. package/dist/src/presentation/web/components/common/feature-create-drawer/mode-selector.stories.js +0 -33
  378. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts +0 -11
  379. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.d.ts.map +0 -1
  380. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.js +0 -34
  381. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts +0 -16
  382. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.d.ts.map +0 -1
  383. package/dist/src/presentation/web/components/common/feature-drawer-tabs/prototype-tab.stories.js +0 -70
  384. package/dist/src/presentation/web/components/ui/toggle-group.d.ts +0 -10
  385. package/dist/src/presentation/web/components/ui/toggle-group.d.ts.map +0 -1
  386. package/dist/src/presentation/web/components/ui/toggle-group.js +0 -22
  387. package/dist/src/presentation/web/components/ui/toggle.d.ts +0 -10
  388. package/dist/src/presentation/web/components/ui/toggle.d.ts.map +0 -1
  389. package/dist/src/presentation/web/components/ui/toggle.js +0 -26
  390. package/web/.next/server/chunks/ssr/[root-of-the-server]__03c66352._.js +0 -4
  391. package/web/.next/server/chunks/ssr/[root-of-the-server]__03c66352._.js.map +0 -1
  392. package/web/.next/server/chunks/ssr/[root-of-the-server]__403afc23._.js +0 -4
  393. package/web/.next/server/chunks/ssr/[root-of-the-server]__403afc23._.js.map +0 -1
  394. package/web/.next/server/chunks/ssr/[root-of-the-server]__df550e85._.js +0 -3
  395. package/web/.next/server/chunks/ssr/[root-of-the-server]__df550e85._.js.map +0 -1
  396. package/web/.next/server/chunks/ssr/[root-of-the-server]__df5602bf._.js +0 -4
  397. package/web/.next/server/chunks/ssr/[root-of-the-server]__df5602bf._.js.map +0 -1
  398. package/web/.next/server/chunks/ssr/[root-of-the-server]__e9f4767a._.js +0 -4
  399. package/web/.next/server/chunks/ssr/[root-of-the-server]__e9f4767a._.js.map +0 -1
  400. package/web/.next/server/chunks/ssr/_0fd635d7._.js.map +0 -1
  401. package/web/.next/server/chunks/ssr/_30ddea9d._.js +0 -9
  402. package/web/.next/server/chunks/ssr/_30ddea9d._.js.map +0 -1
  403. package/web/.next/server/chunks/ssr/_6e79a2cc._.js +0 -3
  404. package/web/.next/server/chunks/ssr/_6e79a2cc._.js.map +0 -1
  405. package/web/.next/server/chunks/ssr/_cac4abe6._.js.map +0 -1
  406. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +0 -3
  407. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js.map +0 -1
  408. package/web/.next/static/chunks/2ceebcc839ee0d4b.js +0 -1
  409. package/web/.next/static/chunks/5743a9c1c63e5261.js +0 -5
  410. package/web/.next/static/chunks/5cf9745e2ef3837c.js +0 -1
  411. package/web/.next/static/chunks/c80e8e3d0cf5baa6.css +0 -1
  412. package/web/.next/static/chunks/d60cee2e7318f425.js +0 -1
  413. package/web/.next/static/chunks/da565c85277c2461.js +0 -1
  414. package/web/.next/static/chunks/fb89cf91c10b2e8b.js +0 -1
  415. /package/web/.next/static/{G895CgnbZl4YvWN_DaRC- → akDn2qFk1krSwrjt4345P}/_buildManifest.js +0 -0
  416. /package/web/.next/static/{G895CgnbZl4YvWN_DaRC- → akDn2qFk1krSwrjt4345P}/_clientMiddlewareManifest.json +0 -0
  417. /package/web/.next/static/{G895CgnbZl4YvWN_DaRC- → akDn2qFk1krSwrjt4345P}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/approve-feature.ts","../../../../../../../src/presentation/web/app/actions/reject-feature.ts","../../../../../../../src/presentation/web/app/actions/submit-exploration-feedback.ts","../../../../../../../src/presentation/web/app/actions/promote-exploration.ts","../../../../../../../src/presentation/web/app/actions/discard-exploration.ts","../../../../../../../src/presentation/web/app/actions/get-feature-artifact.ts","../../../../../../../src/presentation/web/app/actions/get-research-artifact.ts","../../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts","../../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts","../../../../../../../src/presentation/web/app/actions/get-feature-plan.ts","../../../../../../../src/presentation/web/app/actions/rebase-feature.ts","../../../../../../../src/presentation/web/app/actions/get-feature-drawer-data.ts","../../../../../../../src/presentation/web/app/actions/get-branch-sync-status.ts","../../../../../../../src/presentation/web/app/actions/update-feature-pinned-config.ts"],"sourcesContent":["'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ApproveAgentRunUseCase } from '@shepai/core/application/use-cases/agents/approve-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { PrdApprovalPayload } from '@shepai/core/domain/generated/output';\n\nexport async function approveFeature(\n featureId: string,\n payload?: PrdApprovalPayload\n): Promise<{ approved: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { approved: false, error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { approved: false, error: 'Feature not found' };\n }\n\n if (!feature.agentRunId) {\n return { approved: false, error: 'Feature has no agent run' };\n }\n\n // Always use ApproveAgentRunUseCase — it handles waitingApproval, failed,\n // and interrupted statuses. This ensures approval is propagated via\n // Command({update: {_approvalAction: 'approved'}}) so the graph node\n // receives it on resume.\n const approveUseCase = resolve<ApproveAgentRunUseCase>('ApproveAgentRunUseCase');\n const result = await approveUseCase.execute(feature.agentRunId, payload);\n\n if (!result.approved) {\n return { approved: false, error: result.reason };\n }\n\n return { approved: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to approve feature';\n return { approved: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RejectAgentRunUseCase } from '@shepai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport async function rejectFeature(\n featureId: string,\n feedback: string,\n attachments?: string[]\n): Promise<{\n rejected: boolean;\n iteration?: number;\n iterationWarning?: boolean;\n error?: string;\n}> {\n if (!featureId.trim()) {\n return { rejected: false, error: 'Feature id is required' };\n }\n\n if (!feedback.trim()) {\n return { rejected: false, error: 'Feedback is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { rejected: false, error: 'Feature not found' };\n }\n\n if (!feature.agentRunId) {\n return { rejected: false, error: 'Feature has no agent run' };\n }\n\n // Always use RejectAgentRunUseCase — it handles waitingApproval, failed,\n // and interrupted statuses. This ensures rejection feedback is propagated\n // via Command({update: {_approvalAction, _rejectionFeedback}}) so the\n // graph node receives the feedback on resume.\n const rejectUseCase = resolve<RejectAgentRunUseCase>('RejectAgentRunUseCase');\n const result = await rejectUseCase.execute(feature.agentRunId, feedback, attachments);\n\n if (!result.rejected) {\n return { rejected: false, error: result.reason };\n }\n\n return {\n rejected: true,\n iteration: result.iteration,\n iterationWarning: result.iterationWarning,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to reject feature';\n return { rejected: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RejectAgentRunUseCase } from '@shepai/core/application/use-cases/agents/reject-agent-run.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport { FeatureMode } from '@shepai/core/domain/generated/output';\n\n/**\n * Submit feedback on an exploration prototype. This resumes the exploration\n * graph with the feedback text, triggering the next iteration. Internally\n * uses the RejectAgentRunUseCase since exploration feedback follows the\n * same interrupt/resume mechanism as approval gate rejections.\n */\nexport async function submitExplorationFeedback(\n featureId: string,\n feedback: string\n): Promise<{ submitted: boolean; iteration?: number; error?: string }> {\n if (!featureId.trim()) {\n return { submitted: false, error: 'Feature id is required' };\n }\n\n if (!feedback.trim()) {\n return { submitted: false, error: 'Feedback is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { submitted: false, error: 'Feature not found' };\n }\n\n if (feature.mode !== FeatureMode.Exploration) {\n return { submitted: false, error: 'Feature is not in exploration mode' };\n }\n\n if (!feature.agentRunId) {\n return { submitted: false, error: 'Feature has no agent run' };\n }\n\n const rejectUseCase = resolve<RejectAgentRunUseCase>('RejectAgentRunUseCase');\n const result = await rejectUseCase.execute(feature.agentRunId, feedback);\n\n if (!result.rejected) {\n return { submitted: false, error: result.reason };\n }\n\n return { submitted: true, iteration: result.iteration };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to submit feedback';\n return { submitted: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { PromoteExplorationUseCase } from '@shepai/core/application/use-cases/features/promote/promote-exploration.use-case';\nimport type { Feature, FeatureMode } from '@shepai/core/domain/generated/output';\n\n/**\n * Promote an exploration feature to Regular or Fast mode.\n * Transitions the feature from Exploring lifecycle to the appropriate\n * starting state and spawns the new agent graph.\n */\nexport async function promoteExploration(\n featureId: string,\n targetMode: FeatureMode.Regular | FeatureMode.Fast\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<PromoteExplorationUseCase>('PromoteExplorationUseCase');\n const result = await useCase.execute({ featureId, targetMode });\n return { feature: result.feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to promote exploration';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteFeatureUseCase } from '@shepai/core/application/use-cases/features/delete-feature.use-case';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport { FeatureMode } from '@shepai/core/domain/generated/output';\n\n/**\n * Discard an exploration feature, cleaning up the worktree and branch.\n * Validates the feature is in exploration mode before deleting.\n */\nexport async function discardExploration(\n featureId: string\n): Promise<{ discarded: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { discarded: false, error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { discarded: false, error: 'Feature not found' };\n }\n\n if (feature.mode !== FeatureMode.Exploration) {\n return { discarded: false, error: 'Feature is not in exploration mode' };\n }\n\n const deleteUseCase = resolve<DeleteFeatureUseCase>('DeleteFeatureUseCase');\n await deleteUseCase.execute(featureId, { cleanup: true });\n return { discarded: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to discard exploration';\n return { discarded: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport type { FeatureArtifact } from '@shepai/core/domain/generated/output';\nimport type { PrdQuestionnaireData } from '@shepai/core/domain/generated/output';\nimport type { ProductDecisionsSummaryData } from '@/components/common/product-decisions-summary';\n\ninterface GetFeatureArtifactResult {\n questionnaire?: PrdQuestionnaireData;\n productDecisions?: ProductDecisionsSummaryData;\n artifact?: FeatureArtifact;\n error?: string;\n}\n\n/**\n * Map FeatureArtifact openQuestions into the PrdQuestionnaireData shape\n * expected by the PrdQuestionnaireDrawer component.\n */\nfunction toQuestionnaireData(artifact: FeatureArtifact): PrdQuestionnaireData {\n return {\n question: 'Goal',\n context: artifact.oneLiner,\n questions: artifact.openQuestions.map((oq, idx) => ({\n id: `q-${idx}`,\n question: oq.question,\n type: 'select' as const,\n options: (oq.options ?? []).map((opt, optIdx) => ({\n id: `q-${idx}-opt-${optIdx}`,\n label: opt.option,\n rationale: opt.description,\n ...(opt.selected ? { recommended: true } : {}),\n })),\n })),\n finalAction: {\n id: 'approve-reqs',\n label: 'Approve Requirements',\n description: 'Finalize and lock the requirements for implementation',\n },\n };\n}\n\n/**\n * Map FeatureArtifact openQuestions into a read-only summary for the\n * Product Decisions tab in the tech review drawer.\n */\nfunction toProductDecisionsData(artifact: FeatureArtifact): ProductDecisionsSummaryData {\n return {\n question: 'Goal',\n context: artifact.oneLiner,\n questions: artifact.openQuestions\n .filter((oq) => oq.resolved)\n .map((oq) => {\n const selected = oq.options?.find((o) => o.selected);\n return {\n question: oq.question,\n selectedOption: selected?.option ?? oq.answer ?? 'N/A',\n rationale: oq.selectionRationale ?? selected?.description ?? '',\n wasRecommended: false,\n };\n }),\n };\n}\n\nexport async function getFeatureArtifact(featureId: string): Promise<GetFeatureArtifactResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const artifact = await useCase.execute(featureId);\n const questionnaire = toQuestionnaireData(artifact);\n const productDecisions = toProductDecisionsData(artifact);\n return { questionnaire, productDecisions, artifact };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load feature artifact';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetResearchArtifactUseCase } from '@shepai/core/application/use-cases/features/get-research-artifact.use-case';\nimport type { ResearchArtifact, TechDecision } from '@shepai/core/domain/generated/output';\n\nexport interface TechDecisionsReviewData {\n name: string;\n summary: string;\n decisions: TechDecision[];\n technologies: string[];\n}\n\ninterface GetResearchArtifactResult {\n techDecisions?: TechDecisionsReviewData;\n error?: string;\n}\n\nfunction toTechDecisionsData(artifact: ResearchArtifact): TechDecisionsReviewData {\n return {\n name: artifact.name,\n summary: artifact.summary,\n decisions: artifact.decisions,\n technologies: artifact.technologies,\n };\n}\n\nexport async function getResearchArtifact(featureId: string): Promise<GetResearchArtifactResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetResearchArtifactUseCase>('GetResearchArtifactUseCase');\n const artifact = await useCase.execute(featureId);\n const techDecisions = toTechDecisionsData(artifact);\n return { techDecisions };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load research artifact';\n return { error: message };\n }\n}\n","'use server';\n\nimport { createHash } from 'node:crypto';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { basename, join, dirname } from 'node:path';\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type {\n MergeReviewData,\n MergeReviewEvidence,\n} from '@/components/common/merge-review/merge-review-config';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { getShepHomeDir } from '@shepai/core/infrastructure/services/filesystem/shep-directory.service';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\n\ntype GetMergeReviewDataResult = MergeReviewData | { error: string };\n\n/**\n * Compute the shep evidence directory for a given repository and feature.\n * Path: ~/.shep/repos/<sha256-hash-prefix>/evidence/<featureId>/\n */\nfunction computeEvidenceDir(repositoryPath: string, featureId: string): string {\n const repoHash = createHash('sha256').update(repositoryPath).digest('hex').slice(0, 16);\n return join(getShepHomeDir(), 'repos', repoHash, 'evidence', featureId).replace(/\\\\/g, '/');\n}\n\n/**\n * Normalize evidence paths so they all point to the shep evidence directory.\n * When commitEvidence was enabled, the manifest may contain relative paths\n * (e.g. \"specs/066-feature/evidence/file.png\"). After merge the worktree is\n * deleted so those paths no longer resolve. The evidence files were also saved\n * to the shep evidence dir with the same filename, so we map relative paths\n * to absolute paths there.\n */\nfunction normalizeEvidencePaths(\n evidence: MergeReviewEvidence[],\n evidenceDir: string\n): MergeReviewEvidence[] {\n return evidence.map((e) => {\n if (e.relativePath.startsWith('/')) {\n // Already absolute — check if the file exists; if not, try the evidence dir\n if (existsSync(e.relativePath)) return e;\n const fallback = join(evidenceDir, basename(e.relativePath)).replace(/\\\\/g, '/');\n if (existsSync(fallback)) return { ...e, relativePath: fallback };\n return e;\n }\n // Relative path — resolve to evidence dir using the filename\n const absolutePath = join(evidenceDir, basename(e.relativePath)).replace(/\\\\/g, '/');\n return { ...e, relativePath: absolutePath };\n });\n}\n\nexport async function getMergeReviewData(featureId: string): Promise<GetMergeReviewDataResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n\n if (!feature) {\n return { error: 'Feature not found' };\n }\n\n const { workflow } = getSettings();\n\n const pr = feature.pr\n ? {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n commitHash: feature.pr.commitHash,\n ciStatus: feature.pr.ciStatus,\n mergeable: feature.pr.mergeable,\n }\n : undefined;\n\n const worktreePath =\n feature.worktreePath ??\n (feature.repositoryPath && feature.branch\n ? computeWorktreePath(feature.repositoryPath, feature.branch)\n : null);\n\n // Detect the actual default branch (main, master, etc.) for diff comparison.\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const diffCwd = worktreePath ?? feature.repositoryPath ?? null;\n let defaultBranch = 'main';\n if (diffCwd) {\n try {\n defaultBranch = await gitPrService.getDefaultBranch(diffCwd);\n } catch {\n // Fall back to 'main' if detection fails\n }\n }\n\n const branch = feature.branch ? { source: feature.branch, target: defaultBranch } : undefined;\n\n // Load evidence manifest (best-effort).\n // Evidence is stored independently of the worktree at:\n // ~/.shep/repos/<hash>/evidence/<featureId>/manifest.json\n // We compute this path from repositoryPath so evidence is accessible\n // even after the worktree has been deleted post-merge.\n let evidence: MergeReviewEvidence[] | undefined;\n const evidenceDir = feature.repositoryPath\n ? computeEvidenceDir(feature.repositoryPath, featureId)\n : worktreePath\n ? join(dirname(dirname(worktreePath)), 'evidence', featureId).replace(/\\\\/g, '/')\n : null;\n\n if (evidenceDir) {\n try {\n const manifestPath = join(evidenceDir, 'manifest.json');\n if (existsSync(manifestPath)) {\n const raw: MergeReviewEvidence[] = JSON.parse(readFileSync(manifestPath, 'utf-8'));\n const normalized = normalizeEvidencePaths(raw, evidenceDir);\n // Deduplicate: same type + relativePath means the same evidence entry\n const seen = new Set<string>();\n evidence = normalized.filter((e) => {\n const key = `${e.type}:${e.relativePath}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n } catch {\n // Evidence unavailable — not critical\n }\n }\n\n if (!worktreePath) {\n return {\n pr,\n branch,\n evidence,\n warning: pr ? undefined : 'No PR or diff data available',\n hideCiStatus: workflow.hideCiStatus,\n };\n }\n\n try {\n const [diffSummary, fileDiffs] = await Promise.all([\n gitPrService.getPrDiffSummary(worktreePath, defaultBranch),\n gitPrService.getFileDiffs(worktreePath, defaultBranch).catch(() => undefined),\n ]);\n return { pr, branch, diffSummary, fileDiffs, evidence, hideCiStatus: workflow.hideCiStatus };\n } catch {\n return {\n pr,\n branch,\n evidence,\n warning: 'Diff statistics unavailable',\n hideCiStatus: workflow.hideCiStatus,\n };\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load merge review data';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IPhaseTimingRepository } from '@shepai/core/application/ports/output/agents/phase-timing-repository.interface';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport interface PhaseTimingData {\n agentRunId: string;\n phase: string;\n startedAt: string;\n completedAt?: string;\n durationMs?: number;\n waitingApprovalAt?: string;\n approvalWaitMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n cacheCreationInputTokens?: number;\n cacheReadInputTokens?: number;\n costUsd?: number;\n numTurns?: number;\n durationApiMs?: number;\n exitCode?: string;\n errorMessage?: string;\n prompt?: string;\n}\n\nexport interface RejectionFeedbackData {\n iteration: number;\n message: string;\n phase?: string;\n timestamp?: string;\n attachments?: string[];\n}\n\ntype GetPhaseTimingsResult =\n | { timings: PhaseTimingData[]; rejectionFeedback: RejectionFeedbackData[] }\n | { error: string };\n\nexport async function getFeaturePhaseTimings(featureId: string): Promise<GetPhaseTimingsResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const repo = resolve<IPhaseTimingRepository>('IPhaseTimingRepository');\n const phaseTimings = await repo.findByFeatureId(featureId);\n\n const timings: PhaseTimingData[] = phaseTimings.map((t) => ({\n agentRunId: t.agentRunId,\n phase: t.phase,\n startedAt: t.startedAt,\n completedAt: t.completedAt,\n durationMs: t.durationMs != null ? Number(t.durationMs) : undefined,\n waitingApprovalAt: t.waitingApprovalAt,\n approvalWaitMs: t.approvalWaitMs != null ? Number(t.approvalWaitMs) : undefined,\n inputTokens: t.inputTokens != null ? Number(t.inputTokens) : undefined,\n outputTokens: t.outputTokens != null ? Number(t.outputTokens) : undefined,\n cacheCreationInputTokens:\n t.cacheCreationInputTokens != null ? Number(t.cacheCreationInputTokens) : undefined,\n cacheReadInputTokens:\n t.cacheReadInputTokens != null ? Number(t.cacheReadInputTokens) : undefined,\n costUsd: t.costUsd != null ? Number(t.costUsd) : undefined,\n numTurns: t.numTurns ?? undefined,\n durationApiMs: t.durationApiMs != null ? Number(t.durationApiMs) : undefined,\n exitCode: t.exitCode ?? undefined,\n errorMessage: t.errorMessage ?? undefined,\n prompt: t.prompt ?? undefined,\n }));\n\n // Read rejection feedback from spec.yaml\n const rejectionFeedback = await readRejectionFeedback(featureId);\n\n return { timings, rejectionFeedback };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load phase timings';\n return { error: message };\n }\n}\n\nasync function readRejectionFeedback(featureId: string): Promise<RejectionFeedbackData[]> {\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature?.specPath) return [];\n\n const { readFileSync } = await import('node:fs');\n const { join } = await import('node:path');\n const yaml = (await import('js-yaml')).default;\n\n const specContent = readFileSync(join(feature.specPath, 'spec.yaml'), 'utf-8');\n const spec = yaml.load(specContent) as Record<string, unknown>;\n\n if (!Array.isArray(spec?.rejectionFeedback)) return [];\n\n return (spec.rejectionFeedback as Record<string, unknown>[]).map((entry) => ({\n iteration: Number(entry.iteration ?? 1),\n message: String(entry.message ?? ''),\n phase: entry.phase ? String(entry.phase) : undefined,\n timestamp: entry.timestamp ? String(entry.timestamp) : undefined,\n attachments: Array.isArray(entry.attachments)\n ? (entry.attachments as unknown[]).map(String)\n : undefined,\n }));\n } catch {\n return [];\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\nexport interface AcceptanceCriterionData {\n description: string;\n verified: boolean;\n}\n\nexport interface ActionItemData {\n name: string;\n description: string;\n acceptanceCriteria: AcceptanceCriterionData[];\n}\n\nexport interface PlanTaskData {\n title: string;\n description: string;\n state: string;\n actionItems: ActionItemData[];\n}\n\nexport interface PlanData {\n state: string;\n overview: string;\n tasks: PlanTaskData[];\n}\n\ntype GetPlanResult = { plan: PlanData | undefined } | { error: string };\n\nexport async function getFeaturePlan(featureId: string): Promise<GetPlanResult> {\n if (!featureId.trim()) {\n return { error: 'Feature id is required' };\n }\n\n try {\n const repo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await repo.findById(featureId);\n\n if (!feature) {\n return { error: 'Feature not found' };\n }\n\n if (!feature.plan) {\n return { plan: undefined };\n }\n\n const plan: PlanData = {\n state: feature.plan.state,\n overview: feature.plan.overview,\n tasks: feature.plan.tasks.map((t) => ({\n title: t.title ?? '',\n description: t.description ?? '',\n state: t.state,\n actionItems: (t.actionItems ?? []).map((ai) => ({\n name: ai.name,\n description: ai.description,\n acceptanceCriteria: (ai.acceptanceCriteria ?? []).map((ac) => ({\n description: ac.description,\n verified: ac.verified,\n })),\n })),\n })),\n };\n\n return { plan };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load feature plan';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { RebaseFeatureOnMainUseCase } from '@shepai/core/application/use-cases/features/rebase-feature-on-main.use-case';\n\nexport async function rebaseFeature(\n featureId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!featureId?.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<RebaseFeatureOnMainUseCase>('RebaseFeatureOnMainUseCase');\n await useCase.execute(featureId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to rebase feature';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\n/**\n * Fetches full FeatureNodeData for a given feature ID.\n * Used by the drawer for targeted data syncing without triggering\n * a full router.refresh() / server component re-render.\n *\n * CI status and mergeable status are read from the DB (already updated\n * by PrSyncWatcherService) instead of making duplicate GitHub API calls.\n */\nexport async function getFeatureDrawerData(featureId: string): Promise<FeatureNodeData | null> {\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // CI status and mergeable status are read from the feature record (updated by\n // PrSyncWatcherService every 30s) — no duplicate GitHub API calls needed.\n // Only getDefaultBranch and getRemoteUrl are kept as they are local git operations.\n const [repo, baseBranch, artifact, remoteUrl] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n ]);\n\n const { workflow } = getSettings();\n\n return buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n enableEvidence: workflow.enableEvidence,\n commitEvidence: workflow.commitEvidence,\n hideCiStatus: workflow.hideCiStatus,\n });\n } catch {\n return null;\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { GetBranchSyncStatusUseCase } from '@shepai/core/application/use-cases/features/get-branch-sync-status.use-case';\n\nexport async function getBranchSyncStatus(featureId: string): Promise<{\n success: boolean;\n data?: { ahead: number; behind: number; baseBranch: string; checkedAt: string };\n error?: string;\n}> {\n if (!featureId?.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<GetBranchSyncStatusUseCase>('GetBranchSyncStatusUseCase');\n const result = await useCase.execute(featureId);\n return {\n success: true,\n data: {\n ...result,\n checkedAt: new Date().toISOString(),\n },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to get branch sync status';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { UpdateFeaturePinnedConfigUseCase } from '@shepai/core/application/use-cases/features/update-feature-pinned-config.use-case';\n\nexport async function updateFeaturePinnedConfig(\n featureId: string,\n agentType: string,\n modelId: string\n): Promise<{ ok: boolean; error?: string }> {\n const normalizedFeatureId = featureId.trim();\n if (!normalizedFeatureId) {\n return { ok: false, error: 'Feature id is required' };\n }\n\n const normalizedAgentType = agentType.trim();\n if (!normalizedAgentType) {\n return { ok: false, error: 'Agent type is required' };\n }\n\n const normalizedModelId = modelId.trim();\n if (!normalizedModelId) {\n return { ok: false, error: 'Model id is required' };\n }\n\n try {\n const useCase = resolve<UpdateFeaturePinnedConfigUseCase>('UpdateFeaturePinnedConfigUseCase');\n await useCase.execute({\n featureId: normalizedFeatureId,\n agentType: normalizedAgentType,\n modelId: normalizedModelId,\n });\n return { ok: true };\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : 'Failed to update feature pinned config';\n return { ok: false, error: message };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59311,e=>{"use strict";let t=(0,e.i(3645).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",()=>t],59311)},16868,e=>{"use strict";var t=e.i(43698);e.s(["PaperclipIcon",()=>t.default])},70471,e=>{"use strict";var t=e.i(16298);e.s(["FileText",()=>t.default])},42076,e=>{"use strict";async function t(){let e=await fetch("/api/dialog/pick-files",{method:"POST"});if(!e.ok)throw Error("Failed to open file dialog");let t=await e.json();return t.cancelled?null:t.files}e.s(["pickFiles",()=>t])},83843,e=>{"use strict";let t=(0,e.i(3645).default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);e.s(["ChevronsUpDown",()=>t],83843)},51911,e=>{"use strict";var t=e.i(20314),a=e.i(79054),r=e.i(91967),s=e.i(5978),i=e.i(22528),c=e.i(36589),o=e.i(23405),n=e.i(77624),d=e.i(87620),l="Switch",[u,p]=(0,i.createContextScope)(l),[h,f]=u(l),b=a.forwardRef((e,i)=>{let{__scopeSwitch:o,name:n,checked:u,defaultChecked:p,required:f,disabled:b,value:k="on",onCheckedChange:m,form:v,...y}=e,[x,S]=a.useState(null),C=(0,s.useComposedRefs)(i,e=>S(e)),R=a.useRef(!1),P=!x||v||!!x.closest("form"),[T,j]=(0,c.useControllableState)({prop:u,defaultProp:p??!1,onChange:m,caller:l});return(0,t.jsxs)(h,{scope:o,checked:T,disabled:b,children:[(0,t.jsx)(d.Primitive.button,{type:"button",role:"switch","aria-checked":T,"aria-required":f,"data-state":g(T),"data-disabled":b?"":void 0,disabled:b,value:k,...y,ref:C,onClick:(0,r.composeEventHandlers)(e.onClick,e=>{j(e=>!e),P&&(R.current=e.isPropagationStopped(),R.current||e.stopPropagation())})}),P&&(0,t.jsx)(w,{control:x,bubbles:!R.current,name:n,value:k,checked:T,required:f,disabled:b,form:v,style:{transform:"translateX(-100%)"}})]})});b.displayName=l;var k="SwitchThumb",m=a.forwardRef((e,a)=>{let{__scopeSwitch:r,...s}=e,i=f(k,r);return(0,t.jsx)(d.Primitive.span,{"data-state":g(i.checked),"data-disabled":i.disabled?"":void 0,...s,ref:a})});m.displayName=k;var w=a.forwardRef(({__scopeSwitch:e,control:r,checked:i,bubbles:c=!0,...d},l)=>{let u=a.useRef(null),p=(0,s.useComposedRefs)(u,l),h=(0,o.usePrevious)(i),f=(0,n.useSize)(r);return a.useEffect(()=>{let e=u.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set;if(h!==i&&t){let a=new Event("click",{bubbles:c});t.call(e,i),e.dispatchEvent(a)}},[h,i,c]),(0,t.jsx)("input",{type:"checkbox","aria-hidden":!0,defaultChecked:i,...d,tabIndex:-1,ref:p,style:{...d.style,...f,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});function g(e){return e?"checked":"unchecked"}w.displayName="SwitchBubbleInput",e.s(["Root",()=>b,"Switch",()=>b,"SwitchThumb",()=>m,"Thumb",()=>m,"createSwitchScope",()=>p],95291);var v=e.i(95291),v=v,y=e.i(31777);function x({className:e,size:a="default",...r}){return(0,t.jsx)(v.Root,{"data-slot":"switch","data-size":a,className:(0,y.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",e),...r,children:(0,t.jsx)(v.Thumb,{"data-slot":"switch-thumb",className:(0,y.cn)("bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 rtl:data-[state=checked]:-translate-x-[calc(100%-2px)]")})})}e.s(["Switch",()=>x],51911)}]);
@@ -1,5 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,36986,e=>{"use strict";var t=e.i(20314),a=e.i(79054),s=e.i(31777);e.i(41001);var r=e.i(64780),n=e.i(31406),l=e.i(60112),i=e.i(83428),o=e.i(67669),d=e.i(24042),c=e.i(6910),u=e.i(33548),x=e.i(23925),m=e.i(37260),p=e.i(83299),h=e.i(21023);let f=(0,h.createServerReference)("600a5339af3428bb26f987a8d174bf85107bc21560",h.callServer,void 0,h.findSourceMapURL,"approveFeature");var g=e.i(17617),b=e.i(10090),j=e.i(47834);let v=(0,h.createServerReference)("70c78e6ce38eb8191b66bfcfce36e917d7587290a1",h.callServer,void 0,h.findSourceMapURL,"rejectFeature"),y=(0,h.createServerReference)("60eb37f73058c2f7b44b4a148beeb7b3cdc6fc1303",h.callServer,void 0,h.findSourceMapURL,"submitExplorationFeedback"),N=(0,h.createServerReference)("60f29fe2273c7a02c8ec6d4389a51967b64a2ade82",h.callServer,void 0,h.findSourceMapURL,"promoteExploration"),w=(0,h.createServerReference)("4020cae053ead5d72cbb1ab279d8a3144d63ea0d5e",h.callServer,void 0,h.findSourceMapURL,"discardExploration"),k=(0,h.createServerReference)("4009be188d4dbd4a8d95b85125b7cc57be78babfbd",h.callServer,void 0,h.findSourceMapURL,"getFeatureArtifact"),C=(0,h.createServerReference)("402cb4d558958db266b1b817cd1c6dfd2dc70f68ef",h.callServer,void 0,h.findSourceMapURL,"getResearchArtifact"),S=(0,h.createServerReference)("40f6bb62b39b9093a59a31d0b8dc498d4bd2027f18",h.callServer,void 0,h.findSourceMapURL,"getMergeReviewData");var T=e.i(75921),R=e.i(8361),M=e.i(30153),I=e.i(8537),A=e.i(39443);e.i(1650);var P=e.i(11495);e.i(99348);var D=e.i(5259),z=e.i(2828);e.i(31566);var E=e.i(65104),$=e.i(8986),F=e.i(38573),L=e.i(19933),q=e.i(70471),O=e.i(51251);let B="text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-8 items-center justify-center rounded-[3px] disabled:opacity-40";function U({loading:e,error:a,icon:s}){return e?(0,t.jsx)(i.Loader2,{className:"size-3.5 animate-spin"}):a?(0,t.jsx)(O.CircleAlert,{className:"text-destructive size-3.5"}):(0,t.jsx)(s,{className:"size-4"})}function H({actions:e,repositoryPath:s,worktreePath:r,showSpecs:n}){let[l,i]=(0,a.useState)(!1);return(0,t.jsx)(z.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",className:B,onClick:e.openInIde,disabled:e.ideLoading,"aria-label":"Open in IDE",children:(0,t.jsx)(U,{loading:e.ideLoading,error:e.ideError,icon:$.Code2})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:"Open in IDE"})]}),(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",className:B,onClick:e.openInShell,disabled:e.shellLoading,"aria-label":"Open terminal",children:(0,t.jsx)(U,{loading:e.shellLoading,error:e.shellError,icon:F.Terminal})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:"Open terminal"})]}),(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",className:B,onClick:e.openFolder,disabled:e.folderLoading,"aria-label":"Open folder",children:(0,t.jsx)(U,{loading:e.folderLoading,error:e.folderError,icon:L.FolderOpen})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:"Open folder"})]}),n?(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",className:B,onClick:e.openSpecsFolder,disabled:e.specsLoading,"aria-label":"Open specs",children:(0,t.jsx)(U,{loading:e.specsLoading,error:e.specsError,icon:q.FileText})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:"Open specs"})]}):null,(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",className:B,onClick:()=>{navigator.clipboard.writeText(r??s),i(!0),setTimeout(()=>i(!1),2e3)},"aria-label":"Copy path",children:l?(0,t.jsx)(x.Check,{className:"size-3.5 text-green-500"}):(0,t.jsx)(u.Copy,{className:"size-4"})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:l?"Copied!":"Copy path"})]})]})})}var V=e.i(79687),W=e.i(16489),G=e.i(74294),_=e.i(3645);let K=(0,_.default)("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]),Z=(0,_.default)("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]),Q=(0,_.default)("file-check",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m9 15 2 2 4-4",key:"1grp1n"}]]);var J=e.i(18532),X=e.i(93192);let Y=(0,_.default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);var ee=e.i(48109),et=e.i(38227),ea=e.i(53360);let es=(0,_.default)("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);var er=e.i(52443),en=e.i(68304);let el=(0,h.createServerReference)("40fdeec539a2bdddfb849274750586a3b28921bed1",h.callServer,void 0,h.findSourceMapURL,"getFeaturePhaseTimings"),ei=(0,h.createServerReference)("405b1f08a008481b4ff1bf6e75b300b3262a256b35",h.callServer,void 0,h.findSourceMapURL,"getFeaturePlan");e.i(47506);var eo=e.i(2929);let ed=(0,e.i(94237).cva)("inline-block shrink-0",{variants:{size:{sm:"size-5",md:"size-8",lg:"size-12"}},defaultVariants:{size:"md"}}),ec=[{r:9,spline:"0.12 0 0.04 1",opacity:1},{r:8.2,spline:"0.16 0 0.08 1",opacity:.95},{r:7.4,spline:"0.20 0 0.12 1",opacity:.9},{r:6.6,spline:"0.25 0 0.16 1",opacity:.84},{r:5.8,spline:"0.30 0 0.20 1",opacity:.76},{r:5,spline:"0.36 0 0.25 1",opacity:.67},{r:4.2,spline:"0.42 0 0.31 1",opacity:.56},{r:3.4,spline:"0.48 0 0.37 1",opacity:.44},{r:2.6,spline:"0.55 0 0.44 1",opacity:.32},{r:1.8,spline:"0.62 0 0.52 1",opacity:.2},{r:1,spline:"0.70 0 0.60 1",opacity:.1}];function eu({className:e,size:a="md",duration:r=5,...n}){return(0,t.jsxs)("svg",{"data-slot":"comet-spinner",role:"status","aria-label":"Loading",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",className:(0,s.cn)(ed({size:a}),e),...n,children:[(0,t.jsx)("defs",{children:(0,t.jsxs)("filter",{id:"comet-gooey",x:"-100%",y:"-100%",width:"300%",height:"300%",colorInterpolationFilters:"sRGB",children:[(0,t.jsx)("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"2.5"}),(0,t.jsx)("feColorMatrix",{mode:"matrix",values:"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 50 -30",result:"goo"})]})}),(0,t.jsxs)("g",{filter:"url(#comet-gooey)",children:[(0,t.jsx)("animateTransform",{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:`${r}s`,repeatCount:"indefinite"}),ec.map(e=>(0,t.jsxs)("g",{children:[(0,t.jsx)("animateTransform",{attributeName:"transform",type:"rotate",calcMode:"spline",values:"0 50 50;360 50 50",keyTimes:"0;1",keySplines:e.spline,dur:"1s",repeatCount:"indefinite"}),(0,t.jsx)("circle",{cx:"50",cy:"18",r:e.r,fill:"currentColor",opacity:e.opacity})]},e.r)),(0,t.jsxs)("circle",{cx:"50",cy:"50",r:"4",fill:"currentColor",opacity:"0.15",children:[(0,t.jsx)("animate",{attributeName:"r",values:"3;5;3",dur:"2s",repeatCount:"indefinite"}),(0,t.jsx)("animate",{attributeName:"opacity",values:"0.1;0.25;0.1",dur:"2s",repeatCount:"indefinite"})]})]})]})}var ex=e.i(11345),em=e.i(76016),ep=e.i(35364),eh=e.i(81846),ef=e.i(16868);let eg=(0,_.default)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);var eb=e.i(58481),ej=e.i(48306);e.i(50032);var ev=e.i(86254),ey=e.i(42076);let eN=new Set([".png",".jpg",".jpeg",".gif",".webp",".svg",".bmp",".ico",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".txt",".md",".csv",".json",".yaml",".yml",".xml",".ts",".tsx",".js",".jsx",".py",".rb",".go",".rs",".java",".c",".cpp",".h",".hpp",".cs",".swift",".kt",".html",".css",".scss",".less",".sh",".bash",".zsh",".fish",".toml",".ini",".cfg",".conf",".env",".zip",".tar",".gz",".log"]);function ew({onReject:e,onApprove:n,approveLabel:l,approveVariant:i="default",revisionPlaceholder:o,isProcessing:d=!1,isRejecting:c=!1,children:u,chatInput:m,onChatInputChange:p}){let{t:h}=(0,r.useTranslation)("web"),f="warning"===i,g=f?eb.AlertTriangle:x.Check,b=f?"bg-orange-500/85":"bg-blue-500/85",[j,v]=(0,a.useState)(""),y=m??j,N=p??v,w=(0,R.useSoundAction)("approve"),k=d||c,[C,S]=(0,a.useState)([]),[T,M]=(0,a.useState)(!1),[I,A]=(0,a.useState)(null),[P,D]=(0,a.useState)(!1),[E,$]=(0,a.useState)(!1),[F,L]=(0,a.useState)(!1),q=y.trim().length>0,O=q?P||E&&F:!P,B=(0,a.useRef)(0),U=(0,a.useRef)(crypto.randomUUID()),H=(0,a.useRef)(null);(0,a.useEffect)(()=>{function e(e){("Control"===e.key||"Meta"===e.key)&&$(!0),"Shift"===e.key&&L(!0)}function t(e){("Control"===e.key||"Meta"===e.key)&&$(!1),"Shift"===e.key&&L(!1)}function a(){$(!1),L(!1)}return window.addEventListener("keydown",e),window.addEventListener("keyup",t),window.addEventListener("blur",a),()=>{window.removeEventListener("keydown",e),window.removeEventListener("keyup",t),window.removeEventListener("blur",a)}},[]);let V=(0,a.useCallback)(async e=>{for(let t of(A(null),e)){if(t.size>0xa00000)return void A(`"${t.name}" exceeds 10 MB limit`);let e=function(e){let t=e.lastIndexOf(".");return t>=0?e.slice(t).toLowerCase():""}(t.name);if(e&&!eN.has(e))return void A(`File type "${e}" is not allowed`)}for(let t of e){let e=crypto.randomUUID();S(a=>[...a,{id:e,name:t.name,size:t.size,mimeType:t.type||"application/octet-stream",path:"",loading:!0}]);try{let a=new FormData;a.append("file",t),a.append("sessionId",U.current);let s=await fetch("/api/attachments/upload",{method:"POST",body:a});if(!s.ok){let t=await s.json().catch(()=>({error:"Upload failed"}));S(t=>t.filter(t=>t.id!==e)),A(t.error??"Upload failed");return}let r=await s.json();S(t=>t.some(t=>t.id!==e&&t.path===r.path)?t.filter(t=>t.id!==e):t.map(t=>t.id===e?{...r,id:e,loading:!1}:t))}catch{S(t=>t.filter(t=>t.id!==e)),A("Upload failed")}}},[]),W=(0,a.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),B.current+=1,1===B.current&&M(!0)},[]),G=(0,a.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),B.current-=1,0===B.current&&M(!1)},[]),_=(0,a.useCallback)(e=>{e.preventDefault(),e.stopPropagation()},[]),K=(0,a.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),B.current=0,M(!1);let t=Array.from(e.dataTransfer.files);t.length>0&&V(t)},[V]),Z=(0,a.useCallback)(e=>{let t=e.clipboardData?.items;if(!t)return;let a=[];for(let e of Array.from(t))if("file"===e.kind){let t=e.getAsFile();t&&a.push(t)}a.length>0&&(e.preventDefault(),V(a))},[V]),Q=(0,a.useCallback)(async()=>{try{let e=await (0,ey.pickFiles)();e&&S(t=>{let a=new Set(t.map(e=>e.path)),s=e.filter(e=>!a.has(e.path)).map(e=>({id:crypto.randomUUID(),name:e.name,size:e.size,mimeType:"application/octet-stream",path:e.path}));return s.length>0?[...t,...s]:t})}catch{}},[]),J=(0,a.useCallback)(e=>{S(t=>t.filter(t=>t.id!==e))},[]),X=(0,a.useCallback)((e,t)=>{S(a=>a.map(a=>a.id===e?{...a,notes:t}:a))},[]),Y=(0,a.useCallback)(()=>{N(""),S([]),A(null)},[N]),ee=(0,a.useCallback)(e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&(e.preventDefault(),H.current?.requestSubmit())},[]),et="u">typeof navigator&&/Mac/i.test(navigator.userAgent)?"⌘":"Ctrl";return(0,t.jsxs)("div",{className:"border-border shrink-0 border-t",children:[u,e?(0,t.jsx)(z.TooltipProvider,{delayDuration:400,children:(0,t.jsx)("form",{ref:H,onSubmit:function(t){t.preventDefault();let a=y.trim();if(O)w.play(),n(),Y();else{if(!a||!e)return;e(a,C.filter(e=>!e.loading)),Y()}},className:"p-3",children:(0,t.jsx)("div",{role:"region","aria-label":h("createDrawer.fileDropZone"),"data-drag-over":T?"true":"false",onDragEnter:W,onDragLeave:G,onDragOver:_,onDrop:K,className:(0,s.cn)("rounded-md border-2 border-transparent transition-colors",T&&"border-primary/50 bg-primary/5"),children:(0,t.jsxs)("div",{className:"border-input focus-within:ring-ring/50 focus-within:border-ring flex flex-col overflow-hidden rounded-md border shadow-xs transition-[color,box-shadow] focus-within:ring-[3px]",children:[(0,t.jsx)(ej.Textarea,{placeholder:o??"Ask AI to revise...","aria-label":o??"Ask AI to revise...",disabled:k,value:y,onChange:e=>N(e.target.value),onKeyDown:ee,onPaste:Z,rows:1,className:"max-h-[35dvh] min-h-9 flex-1 resize-none overflow-y-auto rounded-none border-0 py-2 shadow-none focus-visible:ring-0","data-testid":"drawer-chat-input"}),C.length>0&&(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-1.5 px-3 py-2",children:C.map(e=>(0,t.jsx)(ev.AttachmentChip,{name:e.name,size:e.size,mimeType:e.mimeType,path:e.path,onRemove:()=>J(e.id),disabled:k,loading:e.loading,notes:e.notes,onNotesChange:t=>X(e.id,t)},e.id))}),I?(0,t.jsx)("p",{className:"text-destructive px-3 pb-2 text-xs",children:I}):null,(0,t.jsxs)("div",{className:"border-input flex items-center gap-2 border-t px-3 py-1.5",children:[(0,t.jsxs)("span",{className:"text-muted-foreground flex-1 truncate text-[11px]",children:[(0,t.jsxs)("kbd",{className:"bg-muted rounded px-1 py-0.5 font-mono text-[10px]",children:[et,"+Enter"]})," ",q?"reject":"approve"]}),(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:Q,disabled:k,"aria-label":h("chat.attachFiles"),className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors",children:(0,t.jsx)(ef.PaperclipIcon,{className:"h-4 w-4"})})}),(0,t.jsx)(z.TooltipContent,{side:"top",children:h("chat.attachFiles")})]}),(0,t.jsx)("div",{onMouseLeave:()=>D(!1),children:(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("button",{type:"submit",disabled:k,"data-testid":"drawer-action-submit",className:(0,s.cn)("relative flex h-9 min-w-[12rem] cursor-pointer items-center overflow-hidden rounded-md border ps-4 pe-10 text-sm font-medium whitespace-nowrap transition-colors","disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",O?`${f?"border-orange-400/60":"border-blue-400/60"} text-white`:q&&E&&!F?"border-primary bg-muted ring-primary/30 shadow-sm ring-1":"border-border bg-muted/50 hover:bg-muted shadow-sm"),children:[(0,t.jsx)("div",{className:(0,s.cn)("pointer-events-none absolute inset-0 transition-transform duration-300 ease-in-out",b),style:{transform:O?"translateX(0)":"translateX(100%)"}}),(0,t.jsxs)("span",{className:(0,s.cn)("absolute inset-0 z-10 flex items-center justify-center gap-2 pe-8 transition-opacity duration-300",O?"opacity-0":"opacity-100"),children:[(0,t.jsx)(eg,{className:"h-4 w-4 shrink-0"}),"Reject"]}),(0,t.jsxs)("span",{className:(0,s.cn)("absolute inset-0 z-10 flex items-center justify-center gap-2 text-white transition-opacity duration-300",O?"opacity-100":"opacity-0"),children:[(0,t.jsx)(g,{className:"h-4 w-4 shrink-0"}),l]}),(0,t.jsx)("span",{className:(0,s.cn)(`border-input/60 absolute inset-y-0 right-0 z-20 flex w-8 cursor-pointer items-center justify-center rounded-e-[5px] border-s ${b} transition-opacity duration-300`,!q&&!P&&"pointer-events-none opacity-0"),onMouseEnter:()=>D(!0),children:(0,t.jsx)(ex.ChevronLeft,{className:"h-4 w-4 text-white"})})]})}),f?null:(0,t.jsx)(z.TooltipContent,{side:"top",children:O?l:h("drawerActionBar.sendRevisionFeedback")})]})})]})]})})})}):(0,t.jsx)("div",{className:"flex items-center gap-2 px-4 pb-4",children:(0,t.jsx)(ep.Button,{type:"button",className:"flex-1",disabled:k,onClick:()=>{w.play(),n()},children:l})})]})}function ek({data:e,selections:r,onSelect:n,onApprove:l,onReject:i,isProcessing:o=!1,isRejecting:d=!1,showHeader:c=!1,chatInput:u,onChatInputChange:x}){let{question:m,context:p,questions:h,finalAction:f}=e,[g,b]=(0,a.useState)(0),j=(0,R.useSoundAction)("select"),v=(0,R.useSoundAction)("navigate"),y=h.length,N=g===y-1,w=h[g],k=(0,a.useMemo)(()=>Object.keys(r).length,[r]),C=(0,a.useCallback)((e,t)=>{j.play(),n(e,t),N||setTimeout(()=>b(e=>e+1),250)},[n,N,j]);return 0===y?null:(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,t.jsxs)("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[c?(0,t.jsxs)("div",{className:"border-border flex items-start gap-3 border-b pb-3",children:[(0,t.jsx)("div",{className:"mt-1.5 h-2 w-2 shrink-0 rounded-full bg-amber-500"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("h3",{className:"text-foreground mb-1.5 text-sm font-bold",children:m}),(0,t.jsx)("p",{className:"text-muted-foreground text-xs leading-relaxed",children:p})]})]}):null,(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsxs)("label",{className:"text-foreground min-w-0 flex-1 text-sm font-semibold",children:[g+1,". ",w.question]}),(0,t.jsx)("div",{className:"mt-1.5 flex shrink-0 gap-1",children:h.map((e,a)=>(0,t.jsx)("button",{type:"button","aria-label":`Go to question ${a+1}`,className:(0,s.cn)("h-1.5 rounded-full transition-all duration-200",a===g?"bg-primary w-4":"w-1.5",a!==g&&r[e.id]?"bg-primary/50":"",a===g||r[e.id]?"":"bg-muted-foreground/25"),onClick:()=>{v.play(),b(a)}},e.id))})]}),(0,t.jsx)("div",{className:"space-y-2",children:w.options.map((e,a)=>{let n=r[w.id]===e.id,l=String.fromCharCode(65+a);return(0,t.jsx)("button",{type:"button",className:(0,s.cn)("border-border w-full overflow-hidden rounded-md border px-3 py-3 text-start text-xs transition-all","hover:border-primary/70 hover:bg-primary/5 group",n&&"border-primary bg-primary/5",e.isNew&&"animate-option-highlight"),disabled:o,onClick:()=>C(w.id,e.id),children:(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsxs)("span",{className:"text-muted-foreground mt-0.5 font-mono text-xs",children:[l,"."]}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("div",{className:"text-foreground mb-0.5 text-xs font-semibold wrap-break-word",children:e.label}),(0,t.jsx)("div",{className:"text-muted-foreground text-xs leading-snug",children:e.rationale})]}),e.recommended||e.isNew?(0,t.jsx)("div",{className:"shrink-0 pt-0.5",children:e.recommended?(0,t.jsx)(eh.Badge,{className:"px-1.5 py-0 text-[10px] whitespace-nowrap",children:"AI Recommended"}):(0,t.jsx)(eh.Badge,{className:"border-transparent bg-emerald-600 px-1.5 py-0 text-[10px] whitespace-nowrap text-white hover:bg-emerald-600/80",children:"New"})}):null]})},e.id)})})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between pt-2",children:[(0,t.jsxs)(ep.Button,{type:"button",variant:"ghost",size:"sm",disabled:0===g||o,onClick:()=>{v.play(),b(e=>e-1)},children:[(0,t.jsx)(ex.ChevronLeft,{className:"me-1 h-4 w-4"}),"Previous"]}),N?null:(0,t.jsxs)(ep.Button,{type:"button",variant:"ghost",size:"sm",disabled:o,onClick:()=>{v.play(),b(e=>e+1)},children:[r[w.id]?"Next":"Skip",(0,t.jsx)(em.ChevronRight,{className:"ms-1 h-4 w-4"})]})]})]}),(0,t.jsx)(ew,{onReject:i,onApprove:()=>l(f.id),approveLabel:f.label,revisionPlaceholder:"Ask AI to refine requirements...",isProcessing:o,isRejecting:d,chatInput:u,onChatInputChange:x,children:(0,t.jsx)("div",{className:(0,s.cn)("bg-muted h-1.5 overflow-hidden",k>0&&k<y||o?"opacity-100":"opacity-0","transition-opacity duration-200"),"data-testid":"progress-bar-container",children:o?(0,t.jsx)("div",{className:"bg-primary animate-indeterminate-progress h-full w-1/3"}):(0,t.jsx)("div",{className:"bg-primary h-full transition-all duration-300",style:{width:`${y>0?k/y*100:0}%`},"data-testid":"progress-bar"})})})]})}var eC=e.i(427);let eS=(0,_.default)("git-compare-arrows",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M12 6h5a2 2 0 0 1 2 2v7",key:"1yj91y"}],["path",{d:"m15 9-3-3 3-3",key:"1lwv8l"}],["circle",{cx:"19",cy:"18",r:"3",key:"1qljk2"}],["path",{d:"M12 18H7a2 2 0 0 1-2-2V9",key:"16sdep"}],["path",{d:"m9 15 3 3-3 3",key:"1m3kbl"}]]),eT={p:({children:e})=>(0,t.jsx)("p",{className:"text-muted-foreground mb-2 text-xs leading-relaxed last:mb-0",children:e}),strong:({children:e})=>(0,t.jsx)("strong",{className:"text-foreground font-semibold",children:e}),em:({children:e})=>(0,t.jsx)("em",{className:"italic",children:e}),code:({children:e,className:a})=>a?(0,t.jsx)("code",{className:`${a} text-[11px]`,children:e}):(0,t.jsx)("code",{className:"bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]",children:e}),pre:({children:e})=>(0,t.jsx)("pre",{className:"bg-muted my-2 overflow-x-auto rounded-lg border p-3",children:e}),ul:({children:e})=>(0,t.jsx)("ul",{className:"text-muted-foreground mb-2 list-disc space-y-1 ps-4 text-xs",children:e}),ol:({children:e})=>(0,t.jsx)("ol",{className:"text-muted-foreground mb-2 list-decimal space-y-1 ps-4 text-xs",children:e}),li:({children:e})=>(0,t.jsx)("li",{className:"leading-relaxed",children:e}),a:({children:e,href:a})=>(0,t.jsx)("a",{href:a,className:"text-primary underline underline-offset-2",target:"_blank",rel:"noopener noreferrer",children:e})};function eR({decision:e,index:s}){let[r,n]=(0,a.useState)(!1),l=(0,R.useSoundAction)("expand"),i=(0,R.useSoundAction)("collapse");return(0,t.jsxs)("div",{className:"border-border rounded-lg border",children:[(0,t.jsxs)("div",{className:"space-y-3 px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,t.jsx)("span",{className:"bg-primary text-primary-foreground flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",children:s+1}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h3",{className:"text-foreground text-sm leading-tight font-semibold",children:e.title}),(0,t.jsx)("p",{className:"text-muted-foreground mt-0.5 text-xs",children:e.chosen})]})]}),"decisionName"in e&&e.decisionName?(0,t.jsx)(eh.Badge,{variant:"secondary",className:"bg-primary/10 text-primary shrink-0",children:e.decisionName}):null]}),e.rationale?(0,t.jsx)(eC.default,{components:eT,children:e.rationale}):null]}),e.rejected.length>0?(0,t.jsxs)("div",{className:"border-border border-t",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>{r?i.play():l.play(),n(e=>!e)},className:"text-muted-foreground hover:bg-muted/50 flex w-full items-center gap-1.5 px-4 py-3 text-xs font-medium transition-colors",children:[(0,t.jsx)(em.ChevronRight,{className:`h-3.5 w-3.5 transition-transform ${r?"rotate-90":""}`}),(0,t.jsx)(es,{className:"h-3.5 w-3.5"}),"Other Options Considered (",e.rejected.length,")"]}),r?(0,t.jsx)("div",{className:"space-y-1.5 px-4 pb-3",children:e.rejected.map(e=>(0,t.jsx)("div",{className:"bg-primary/5 rounded-md px-3 py-2",children:(0,t.jsx)("span",{className:"text-foreground text-xs",children:e})},e))}):null]}):null]})}function eM({data:e}){let{summary:a,decisions:s}=e;return 0===s.length?null:(0,t.jsxs)("div",{className:"space-y-4 p-4",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("h2",{className:"text-foreground text-sm font-bold",children:"Technical Implementation Plan Review"}),a?(0,t.jsx)("p",{className:"text-muted-foreground mt-1 text-xs leading-relaxed",children:a}):null]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[(0,t.jsx)(eS,{className:"text-primary h-4 w-4"}),(0,t.jsx)("h3",{className:"text-foreground text-sm font-bold",children:"Technical Decisions"})]}),s.map((e,a)=>(0,t.jsx)(eR,{decision:e,index:a},e.title))]})}var eI=e.i(41698);function eA({item:e,index:a}){return(0,t.jsx)("div",{className:"border-border rounded-lg border",children:(0,t.jsx)("div",{className:"space-y-2 px-4 py-3",children:(0,t.jsxs)("div",{className:"flex items-start gap-2.5",children:[(0,t.jsx)("span",{className:"bg-primary text-primary-foreground flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",children:a+1}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("h3",{className:"text-foreground text-sm leading-tight font-semibold",children:e.question}),(0,t.jsxs)("div",{className:"mt-1 flex items-center gap-2",children:[(0,t.jsx)("p",{className:"text-muted-foreground min-w-0 truncate text-xs",children:e.selectedOption}),e.wasRecommended?(0,t.jsx)(eh.Badge,{className:"shrink-0 px-1.5 py-0 text-[10px] whitespace-nowrap",children:"AI Recommended"}):null]})]})]})})})}function eP({data:e}){let{questions:a}=e;return 0===a.length?null:(0,t.jsxs)("div",{className:"space-y-4 p-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(eI.ClipboardList,{className:"text-primary h-4 w-4"}),(0,t.jsx)("h3",{className:"text-foreground text-sm font-bold",children:"Product Decisions"})]}),a.map((e,a)=>(0,t.jsx)(eA,{item:e,index:a},e.question))]})}var eD=e.i(30702);let ez=(0,_.default)("file-diff",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]]);var eE=e.i(48923),e$=e.i(49228);let eF=(0,_.default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]),eL=(0,_.default)("camera",[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",key:"18u6gg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]),eq=(0,_.default)("monitor-play",[["path",{d:"M15.033 9.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56V7.648a.645.645 0 0 1 .967-.56z",key:"vbtd3f"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",key:"x3v2xh"}]]);var eO=e.i(81181),eB=e.i(99105),eU=e.i(35e3),eH=e.i(30090),eH=eH,eV=e.i(17406);function eW({status:e}){switch(e){case eV.CiStatus.Success:return(0,t.jsxs)(eh.Badge,{className:"border-transparent bg-green-50 text-green-700 hover:bg-green-50",children:[(0,t.jsx)(eU.CheckCircle2,{className:"me-1 h-3.5 w-3.5"}),"Passing"]});case eV.CiStatus.Pending:return(0,t.jsxs)(eh.Badge,{className:"border-transparent bg-yellow-50 text-yellow-700 hover:bg-yellow-50",children:[(0,t.jsx)(i.Loader2,{className:"me-1 h-3.5 w-3.5 animate-spin"}),"Pending"]});case eV.CiStatus.Failure:return(0,t.jsxs)(eh.Badge,{className:"border-transparent bg-red-50 text-red-700 hover:bg-red-50",children:[(0,t.jsx)(eH.default,{className:"me-1 h-3.5 w-3.5"}),"Failing"]})}}var eG=e.i(12919);let e_=(0,_.default)("file-minus",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}]]);var eK=e.i(35749);let eZ={added:{icon:eG.FilePlus,label:"A",className:"text-green-600"},modified:{icon:eK.FileEdit,label:"M",className:"text-amber-600"},deleted:{icon:e_,label:"D",className:"text-red-600"},renamed:{icon:eK.FileEdit,label:"R",className:"text-blue-600"}};function eQ({status:e}){let a=eZ[e],r=a.icon;return(0,t.jsx)(r,{className:(0,s.cn)("h-3.5 w-3.5 shrink-0",a.className)})}function eJ({hunk:e}){return(0,t.jsxs)("div",{className:"border-border border-t first:border-t-0",children:[(0,t.jsx)("div",{className:"bg-muted/50 text-muted-foreground px-3 py-1 font-mono text-[10px]",children:e.header}),(0,t.jsx)("div",{className:"font-mono text-[11px] leading-[18px]",children:e.lines.map(e=>(0,t.jsxs)("div",{className:(0,s.cn)("flex","added"===e.type&&"bg-green-50 dark:bg-green-950/30","removed"===e.type&&"bg-red-50 dark:bg-red-950/30"),children:[(0,t.jsx)("span",{className:"text-muted-foreground w-10 shrink-0 px-1 text-end text-[10px] select-none",children:e.oldNumber??""}),(0,t.jsx)("span",{className:"text-muted-foreground w-10 shrink-0 px-1 text-end text-[10px] select-none",children:e.newNumber??""}),(0,t.jsx)("span",{className:(0,s.cn)("w-4 shrink-0 text-center select-none","added"===e.type&&"text-green-700 dark:text-green-400","removed"===e.type&&"text-red-700 dark:text-red-400"),children:"added"===e.type?"+":"removed"===e.type?"-":" "}),(0,t.jsx)("span",{className:"min-w-0 flex-1 pe-2 break-all whitespace-pre-wrap",children:e.content})]},`${e.type}-${e.oldNumber??""}-${e.newNumber??""}`))})]})}function eX({file:e}){let[r,n]=(0,a.useState)(!1),l=e.path.split("/").pop()??e.path,i=e.path.includes("/")?e.path.slice(0,e.path.lastIndexOf("/")):"";return(0,t.jsxs)("div",{className:"border-border border-b last:border-b-0",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>n(!r),className:"hover:bg-muted/50 flex w-full items-center gap-2 px-3 py-2 text-start",children:[(0,t.jsx)(em.ChevronRight,{className:(0,s.cn)("text-muted-foreground h-3 w-3 shrink-0 transition-transform duration-150",r&&"rotate-90")}),(0,t.jsx)(eQ,{status:e.status}),(0,t.jsx)("span",{className:"text-foreground min-w-0 flex-1 truncate text-xs",children:i?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("span",{className:"text-muted-foreground",children:[i,"/"]}),l]}):l}),e.oldPath?(0,t.jsxs)("span",{className:"text-muted-foreground truncate text-[10px]",children:["← ",e.oldPath.split("/").pop()]}):null,(0,t.jsxs)("span",{className:"shrink-0 text-[10px]",children:[e.additions>0?(0,t.jsxs)("span",{className:"text-green-600",children:["+",e.additions]}):null,e.additions>0&&e.deletions>0?" ":null,e.deletions>0?(0,t.jsxs)("span",{className:"text-red-600",children:["-",e.deletions]}):null]})]}),r&&e.hunks.length>0?(0,t.jsx)("div",{className:"border-border overflow-x-auto border-t",children:e.hunks.map(e=>(0,t.jsx)(eJ,{hunk:e},e.header))}):null]})}function eY({fileDiffs:e}){return 0===e.length?null:(0,t.jsxs)("div",{className:"border-border rounded-lg border",children:[(0,t.jsx)("div",{className:"px-4 py-3",children:(0,t.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,t.jsx)(q.FileText,{className:"text-muted-foreground h-4 w-4"}),(0,t.jsx)("span",{className:"text-foreground text-xs font-semibold",children:"Changed Files"}),(0,t.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:["(",e.length,")"]})]})}),(0,t.jsx)("div",{className:"border-border border-t",children:e.map(e=>(0,t.jsx)(eX,{file:e},`${e.status}-${e.path}`))})]})}let e0={Screenshot:eL,Video:eq,TestOutput:q.FileText,TerminalRecording:F.Terminal},e1=new Set([".png",".jpg",".jpeg",".gif",".webp",".svg",".bmp"]),e2=new Set([".mp4",".webm",".mov"]);function e5({evidence:e}){var s,r;let n,[l,i]=(0,a.useState)(!0),o=e0[e.type]??eL,d=(n=(s=e.relativePath).lastIndexOf("."))>=0?s.slice(n).toLowerCase():"",c=(r=e.relativePath,`/api/evidence?path=${encodeURIComponent(r)}`),u="Screenshot"===e.type||e1.has(d),x="Video"===e.type||e2.has(d),m="TestOutput"===e.type||"TerminalRecording"===e.type;return(0,t.jsxs)("li",{className:"border-border rounded-md border",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>i(!l),className:"flex w-full cursor-pointer items-center gap-2.5 px-3 py-2.5 text-start",children:[l?(0,t.jsx)(eB.ChevronDown,{className:"text-muted-foreground h-3 w-3 shrink-0"}):(0,t.jsx)(em.ChevronRight,{className:"text-muted-foreground h-3 w-3 shrink-0"}),(0,t.jsx)(o,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("span",{className:"text-foreground text-xs font-medium",children:e.description}),e.taskRef?(0,t.jsxs)("span",{className:"text-muted-foreground ms-1.5 text-[10px]",children:["(",e.taskRef,")"]}):null]}),(0,t.jsx)("a",{href:c,download:!0,onClick:e=>e.stopPropagation(),className:"text-muted-foreground hover:text-foreground shrink-0 rounded p-1 transition-colors","aria-label":"Download",children:(0,t.jsx)(eO.Download,{className:"h-3 w-3"})})]}),l&&c?(0,t.jsx)("div",{className:"border-border border-t px-3 py-2.5",children:u?(0,t.jsx)("img",{src:c,alt:e.description,className:"max-h-80 w-full rounded-md border object-contain",loading:"lazy"}):x?(0,t.jsx)("video",{src:c,controls:!0,className:"max-h-80 w-full rounded-md border",preload:"metadata",children:(0,t.jsx)("track",{kind:"captions"})}):m?(0,t.jsx)(e3,{url:c}):(0,t.jsx)("p",{className:"text-muted-foreground truncate font-mono text-[10px]",children:e.relativePath})}):null,null]})}function e3({url:e}){let[s,r]=(0,a.useState)(null),[n,l]=(0,a.useState)(!1);return n?s?(0,t.jsx)("pre",{className:"bg-muted/50 max-h-60 overflow-auto rounded-md p-3 font-mono text-[11px] leading-relaxed",children:s}):(0,t.jsx)("p",{className:"text-muted-foreground text-[10px]",children:"Unable to load preview"}):(fetch(e).then(e=>e.ok?e.text():Promise.reject(Error("Failed"))).then(e=>{let t=e.split("\n");r(t.length>100?`${t.slice(0,100).join("\n")}
2
- ...`:e)}).catch(()=>r(null)).finally(()=>l(!0)),(0,t.jsx)("div",{className:"bg-muted/50 h-16 animate-pulse rounded-md"}))}function e4({evidence:e}){return(0,t.jsx)("div",{className:"border-border rounded-lg border",children:(0,t.jsxs)("div",{className:"px-4 py-3",children:[(0,t.jsxs)("div",{className:"mb-3 flex items-center gap-2",children:[(0,t.jsx)(eL,{className:"text-muted-foreground h-4 w-4"}),(0,t.jsx)("span",{className:"text-foreground text-xs font-semibold",children:"Evidence"}),(0,t.jsx)(eh.Badge,{variant:"secondary",className:"text-[10px]",children:e.length})]}),(0,t.jsx)("ul",{className:"space-y-2",children:e.map(e=>(0,t.jsx)(e5,{evidence:e},`${e.type}-${e.relativePath}`))})]})})}function e6({data:e,readOnly:a=!1,onApprove:s,onReject:r,isProcessing:n=!1,isRejecting:l=!1,chatInput:i,onChatInputChange:o}){let{pr:d,diffSummary:c,fileDiffs:u,branch:x,warning:m,evidence:p,hideCiStatus:h}=e,f=d?.mergeable===!1,g=f&&r?()=>r("Resolve merge conflicts",[]):s;return(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,t.jsxs)("div",{className:"flex-1 space-y-4 overflow-y-auto p-4",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-emerald-500"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("h2",{className:"text-foreground text-sm font-bold",children:a?"Merge History":"Merge Review"}),(0,t.jsx)("p",{className:"text-muted-foreground mt-1 text-xs leading-relaxed",children:a?"This feature was merged. Review the pull request details and evidence below.":d?"Review the pull request details and approve to merge.":"Review the changes and approve to merge."})]})]}),x?(0,t.jsx)("div",{className:"border-border rounded-lg border",children:(0,t.jsxs)("div",{className:"flex items-center gap-2 px-4 py-3",children:[(0,t.jsx)(e$.GitBranch,{className:"text-muted-foreground h-4 w-4 shrink-0"}),(0,t.jsx)(eh.Badge,{variant:"secondary",className:"font-mono text-[11px]",children:x.source}),(0,t.jsx)(eF,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}),(0,t.jsx)(eh.Badge,{variant:"outline",className:"font-mono text-[11px]",children:x.target})]})}):null,d?(0,t.jsx)("div",{className:"border-border rounded-lg border",children:(0,t.jsxs)("div",{className:"space-y-3 px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("a",{href:d.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2",children:["PR #",d.number,(0,t.jsx)(eD.ExternalLink,{className:"h-3.5 w-3.5"})]}),(0,t.jsx)(eh.Badge,{variant:"outline",className:"text-xs",children:d.status})]}),!1===d.mergeable?(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium",children:"Merge Status"}),(0,t.jsxs)(eh.Badge,{className:"border-transparent bg-orange-50 text-orange-700 hover:bg-orange-50",children:[(0,t.jsx)(eb.AlertTriangle,{className:"me-1 h-3.5 w-3.5"}),"Conflicts"]})]}):null,d.ciStatus&&!0!==h?(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium",children:"CI Status"}),(0,t.jsx)(eW,{status:d.ciStatus})]}):null,d.commitHash?(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium",children:"Commit"}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)(eE.GitCommitHorizontal,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,t.jsx)("code",{className:"bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]",children:d.commitHash.slice(0,7)})]})]}):null]})}):null,c?(0,t.jsx)("div",{className:"border-border rounded-lg border",children:(0,t.jsxs)("div",{className:"px-4 py-3",children:[(0,t.jsxs)("div",{className:"mb-3 flex items-center gap-2",children:[(0,t.jsx)(ez,{className:"text-muted-foreground h-4 w-4"}),(0,t.jsx)("span",{className:"text-foreground text-xs font-semibold",children:"Changes"})]}),(0,t.jsxs)("div",{className:"grid grid-cols-4 gap-3",children:[(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)("div",{className:"text-foreground text-sm font-bold",children:c.filesChanged}),(0,t.jsx)("div",{className:"text-muted-foreground text-[10px]",children:"files"})]}),(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsxs)("div",{className:"text-sm font-bold text-green-600",children:["+",c.additions]}),(0,t.jsx)("div",{className:"text-muted-foreground text-[10px]",children:"additions"})]}),(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsxs)("div",{className:"text-sm font-bold text-red-600",children:["-",c.deletions]}),(0,t.jsx)("div",{className:"text-muted-foreground text-[10px]",children:"deletions"})]}),(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)("div",{className:"text-foreground text-sm font-bold",children:c.commitCount}),(0,t.jsx)("div",{className:"text-muted-foreground text-[10px]",children:"commits"})]})]})]})}):m?(0,t.jsx)("div",{className:"border-border rounded-lg border",children:(0,t.jsxs)("div",{className:"flex items-center gap-2 px-4 py-3",children:[(0,t.jsx)(eb.AlertTriangle,{className:"text-muted-foreground h-4 w-4 shrink-0"}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:m})]})}):null,p&&p.length>0?(0,t.jsx)(e4,{evidence:p}):null,u&&u.length>0?(0,t.jsx)(eY,{fileDiffs:u}):null]}),!a&&(0,t.jsx)(ew,{onReject:r,onApprove:g,approveLabel:f?"Resolve Conflicts":"Approve Merge",approveVariant:f?"warning":"default",revisionPlaceholder:"Ask AI to revise before merging...",isProcessing:n,isRejecting:l,chatInput:i,onChatInputChange:o})]})}var e8=e.i(55016);let e7=(0,_.default)("file-search",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["circle",{cx:"11.5",cy:"14.5",r:"2.5",key:"1bq0ko"}],["path",{d:"M13.3 16.3 15 18",key:"2quom7"}]]),e9=(0,_.default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);var te=e.i(12103),tt=e.i(59311),ta=e.i(39200);let ts=(0,_.default)("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);var tr=e.i(60253),tn=e.i(2287),tl=e.i(28267),ti=e.i(80436);let to=(0,_.default)("image-off",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M10.41 10.41a2 2 0 1 1-2.83-2.83",key:"1bzlo9"}],["line",{x1:"13.5",x2:"6",y1:"13.5",y2:"21",key:"1q0aeu"}],["line",{x1:"18",x2:"21",y1:"12",y2:"15",key:"5mozeu"}],["path",{d:"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59",key:"mmje98"}],["path",{d:"M21 15V5a2 2 0 0 0-2-2H9",key:"43el77"}]]),td=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]);function tc(e){let t=e.lastIndexOf(".");return t>=0&&td.has(e.slice(t).toLowerCase())}function tu(e){let t=e.lastIndexOf(".")>=0?e.slice(e.lastIndexOf(".")):"",a=tc(e)?`image/${t.slice(1).replace("jpg","jpeg")}`:"",s=new URLSearchParams({path:e,...a&&{mimeType:a}});return`/api/attachments/preview?${s.toString()}`}let tx=/(?:^|\s)@(\/[^\s]+)/g;function tm({text:e,attachmentPaths:a}){let s=function(e){let t=[],a=0;for(let s of e.matchAll(tx)){let r=s.index,n=r+(s[0].length-s[0].trimStart().length);n>a&&t.push({type:"text",value:e.slice(a,n)}),t.push({type:"attachment",path:s[1]}),a=r+s[0].length}return a<e.length&&t.push({type:"text",value:e.slice(a)}),t}(e),r=s.some(e=>"attachment"===e.type),n=a?.filter(Boolean)??[];return r||0!==n.length?(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[s.map(e=>{if("text"===e.type){let a=e.value.trim();return a?(0,t.jsx)("span",{className:"text-sm leading-relaxed",children:a},`text-${a.slice(0,40)}`):null}return(0,t.jsx)(tp,{path:e.path},`att-${e.path}`)}),n.map(e=>(0,t.jsx)(tp,{path:e},`extra-${e}`))]}):(0,t.jsx)("span",{className:"text-sm leading-relaxed",children:e})}function tp({path:e}){let s=e.split("/").pop()??e,[r,n]=(0,a.useState)(!1);return tc(e)?r?(0,t.jsxs)("div",{"data-testid":"inline-attachment-image-error",className:"text-muted-foreground flex items-center gap-2 rounded-md border px-3 py-2 text-sm",children:[(0,t.jsx)(to,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{className:"truncate",children:s})]}):(0,t.jsxs)(tn.Dialog,{children:[(0,t.jsx)(tn.DialogTrigger,{asChild:!0,children:(0,t.jsx)("img",{src:tu(e),alt:s,"data-testid":"inline-attachment-image",onError:()=>n(!0),className:"max-h-48 max-w-full cursor-pointer rounded-md border object-contain transition-opacity hover:opacity-80"})}),(0,t.jsxs)(tn.DialogContent,{className:"max-w-3xl gap-0 overflow-hidden border-0 p-0 [&>button:last-child]:!cursor-pointer [&>button:last-child]:!rounded-full [&>button:last-child]:!bg-black/70 [&>button:last-child]:!p-1.5 [&>button:last-child]:!text-white [&>button:last-child]:!opacity-100 [&>button:last-child]:!shadow-lg [&>button:last-child]:!backdrop-blur-md [&>button:last-child]:hover:!bg-black/90",children:[(0,t.jsx)(tl.VisuallyHidden.Root,{children:(0,t.jsxs)(tn.DialogTitle,{children:["Preview: ",s]})}),(0,t.jsx)("div",{className:"relative bg-black/90",children:(0,t.jsx)("img",{src:tu(e),alt:s,className:"h-auto max-h-[70vh] w-full object-contain"})}),(0,t.jsxs)("div",{className:"bg-background flex items-center gap-3 px-4 py-3",children:[(0,t.jsx)("div",{className:"flex min-w-0 flex-1 flex-col",children:(0,t.jsx)("span",{className:"truncate text-sm font-medium",children:s})}),(0,t.jsx)("a",{href:tu(e),download:s,className:"text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-1.5 transition-colors","aria-label":`Download ${s}`,children:(0,t.jsx)(ti.DownloadIcon,{className:"h-4 w-4"})})]})]})]}):(0,t.jsx)("a",{href:tu(e),download:s,"data-testid":"inline-attachment-file",className:"text-primary text-sm underline underline-offset-2",children:s})}e.i(81803);var th=e.i(72714),tf=e.i(41413),tg=e.i(86782),tb=e.i(29847);function tj(e){if(0===e)return"0s";let t=Math.floor(e/1e3);if(0===t)return"<1s";let a=Math.floor(t/3600),s=Math.floor(t%3600/60),r=t%60;return a>0?`${a}h ${s}m`:s>0?`${s}m ${r}s`:`${r}s`}let tv=new Set(["pending","action-required","error"]);function ty(e){return e?.agentType?{agentType:e.agentType,modelId:e.modelId??""}:null}function tN({icon:e,title:a,children:s}){return(0,t.jsxs)("div",{className:"px-3 pt-4 pb-1",children:[(0,t.jsxs)("div",{className:"text-foreground mb-2 flex items-center gap-1.5 text-sm font-semibold tracking-wider uppercase",children:[(0,t.jsx)(e,{className:"size-4 opacity-50"}),a]}),s]})}function tw({children:e,className:a}){return(0,t.jsx)("div",{className:(0,s.cn)("bg-muted/60 rounded-md border border-transparent p-3",a),children:e})}function tk({label:e,children:a}){return(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,t.jsx)("span",{className:"text-foreground/40 text-[11px] font-medium tracking-wider uppercase",children:e}),(0,t.jsx)("span",{className:"text-sm leading-snug",children:a})]})}function tC({on:e,label:a}){return(0,t.jsxs)("span",{className:(0,s.cn)("inline-flex items-center gap-1 rounded px-2 py-0.5 text-xs font-medium",e?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-foreground/[0.04] text-foreground/25"),children:[e?(0,t.jsx)(x.Check,{className:"size-3"}):(0,t.jsx)(tr.X,{className:"size-3"}),a]})}let tS={[eV.PrStatus.Open]:"text-blue-600 dark:text-blue-400",[eV.PrStatus.Merged]:"text-purple-600 dark:text-purple-400",[eV.PrStatus.Closed]:"text-red-600 dark:text-red-400"};function tT({data:e,pinnedConfig:r,syncStatus:n,syncLoading:l,syncError:i,onRefreshSync:o,onRebaseOnMain:d,rebaseLoading:c,rebaseError:u}){var x;let m,p,h,f,g,b,j="maintain"===e.lifecycle,v=function(e){let[t,s]=(0,a.useState)(null),r=(0,a.useRef)(null);return(0,a.useEffect)(()=>e?(s(tj(Math.max(0,Date.now()-e))),r.current=setInterval(()=>{s(tj(Math.max(0,Date.now()-e)))},1e3),()=>{r.current&&clearInterval(r.current)}):void s(null),[e]),t}("running"===e.state||"action-required"===e.state?e.startedAt:void 0),y=eo.featureNodeStateConfig[e.state],N=!!e.summary&&!(e.userQuery&&e.summary?.trim()===e.userQuery.trim());return(0,t.jsxs)("div",{"data-testid":"feature-drawer-status",className:"pb-4",children:[!j&&e.progress>0?(0,t.jsx)("div",{"data-testid":"feature-drawer-progress",className:"px-3 pb-2",children:(0,t.jsx)("div",{className:"bg-foreground/[0.06] h-1.5 w-full overflow-hidden rounded-full",children:(0,t.jsx)("div",{className:(0,s.cn)("h-full rounded-full transition-all",y.progressClass),style:{width:`${e.progress}%`}})})}):null,e.oneLiner||e.userQuery||N?(0,t.jsx)(tN,{icon:e9,title:"Description",children:(0,t.jsxs)(tw,{className:"flex flex-col gap-2",children:[e.oneLiner?(0,t.jsx)(tk,{label:"One-Liner",children:e.oneLiner}):null,e.userQuery?(0,t.jsx)(tk,{label:"Query",children:(0,t.jsx)(tm,{text:e.userQuery})}):null,N?(0,t.jsx)(tk,{label:"Summary",children:(0,t.jsx)("span",{className:"leading-snug",children:e.summary})}):null]})}):null,e.pr?(0,t.jsx)(tN,{icon:eE.GitCommitHorizontal,title:"Pull Request",children:(0,t.jsx)(tw,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("a",{href:e.pr.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary inline-flex items-center gap-1 text-sm font-semibold hover:underline",children:["#",e.pr.number," ",(0,t.jsx)(eD.ExternalLink,{className:"size-3"})]}),(0,t.jsx)("span",{className:(0,s.cn)("text-xs font-semibold",tS[e.pr.status]),children:e.pr.status}),!1===e.pr.mergeable?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-orange-600 dark:text-orange-400",children:[(0,t.jsx)(eb.AlertTriangle,{className:"size-3 shrink-0"})," Conflicts"]}):null,e.pr.ciStatus&&!0!==e.hideCiStatus?(0,t.jsx)(eW,{status:e.pr.ciStatus}):null,e.pr.commitHash?(0,t.jsx)("code",{className:"text-foreground/40 ml-auto font-mono text-[11px]",children:e.pr.commitHash.slice(0,7)}):null]})})}):null,(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-2 px-3 pb-1",children:[e.branch?(0,t.jsx)(tw,{children:(0,t.jsxs)(tk,{label:"Branch",children:[(0,t.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,t.jsx)(e$.GitBranch,{className:"text-foreground/30 size-3 shrink-0"}),(0,t.jsx)("code",{className:"font-mono text-[11px]",children:e.branch})]}),e.baseBranch?(0,t.jsxs)("span",{className:"text-foreground/30 block text-[10px]",children:["from ",e.baseBranch]}):null]})}):null,e.agentType||e.modelId?(0,t.jsx)(tw,{children:(0,t.jsx)(tk,{label:"Agent",children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[e.agentType?(m=(0,tg.getAgentTypeIcon)(e.agentType),(0,t.jsx)(m,{className:"size-3.5 shrink-0 opacity-50"})):null,e.agentType?(0,t.jsx)("span",{children:tg.agentTypeLabels[e.agentType]??e.agentType}):null,e.agentType&&e.modelId?(0,t.jsx)("span",{className:"text-foreground/20",children:"/"}):null,e.modelId?(0,t.jsx)("span",{className:"text-foreground/50 text-[12px]",children:(0,tb.getModelMeta)(e.modelId).displayName||e.modelId}):null]})})}):null,e.createdAt?(0,t.jsx)(tw,{children:(0,t.jsx)(tk,{label:"Created",children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,t.jsx)(e8.Clock,{className:"text-foreground/30 size-3 shrink-0"}),(x=e.createdAt,p=Date.now(),(b=Math.floor((g=Math.floor((f=Math.floor((p-(h="string"==typeof x?new Date(x).getTime():x))/6e4))/60))/24))>30?new Date(h).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):b>0?`${b}d ago`:g>0?`${g}h ago`:f>0?`${f}m ago`:"just now")]})})}):null,e.fastMode?(0,t.jsx)(tw,{children:(0,t.jsx)(tk,{label:"Mode",children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-1 text-amber-600 dark:text-amber-400",children:[(0,t.jsx)(ea.Zap,{className:"size-3.5"})," Fast"]})})}):null,e.runtime||v?(0,t.jsx)(tw,{children:(0,t.jsx)(tk,{label:e.runtime?"Runtime":"Elapsed",children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,t.jsx)(e8.Clock,{className:"text-foreground/30 size-3 shrink-0"}),e.runtime??v]})})}):null]}),e.blockedBy||e.errorMessage?(0,t.jsx)(tN,{icon:eb.AlertTriangle,title:"Issues",children:(0,t.jsxs)(tw,{className:"border-destructive/20 bg-destructive/5",children:[e.blockedBy?(0,t.jsx)(tk,{label:"Blocked By",children:e.blockedBy}):null,e.errorMessage?(0,t.jsx)(tk,{label:"Error",children:(0,t.jsx)("span",{className:"text-destructive",children:e.errorMessage})}):null]})}):null,d&&e.branch&&o?(0,t.jsx)(tN,{icon:tt.RefreshCw,title:"Branch Sync",children:(0,t.jsx)(tR,{syncStatus:n??null,syncLoading:l??!1,syncError:i??null,onRefreshSync:o,onRebaseOnMain:d,rebaseLoading:c??!1,rebaseError:u??null})}):null,(0,t.jsx)(tI,{data:e,pinnedConfig:r}),e.injectedSkills?.length?(0,t.jsx)(tA,{skills:e.injectedSkills}):null]})}function tR({syncStatus:e,syncLoading:a,syncError:n,onRefreshSync:l,onRebaseOnMain:i,rebaseLoading:o,rebaseError:d}){let{t:c}=(0,r.useTranslation)("web"),u=null!=e&&e.behind>0,x=e?.behind===0,m=e?.baseBranch??"main";return(0,t.jsxs)(tw,{children:[(0,t.jsxs)("div",{"data-testid":"branch-sync-status",className:"flex items-center justify-between",children:[(0,t.jsx)("div",{className:"flex items-center gap-1.5 text-[13px]",children:a&&!e?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eu,{size:"sm"}),(0,t.jsx)("span",{className:"text-foreground/40",children:"Checking..."})]}):n?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eb.AlertTriangle,{className:"size-3.5 text-red-500"}),(0,t.jsx)("span",{className:"text-destructive text-xs",children:n})]}):o?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eu,{size:"sm"}),(0,t.jsxs)("span",{children:["Rebasing on ",(0,t.jsx)("code",{className:"font-mono text-[11px]",children:m}),"..."]})]}):u?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eb.AlertTriangle,{className:"size-3.5 text-orange-500"}),(0,t.jsxs)("span",{children:[e.behind," behind ",(0,t.jsx)("code",{className:"font-mono text-[11px]",children:m}),e.ahead>0?(0,t.jsxs)("span",{className:"text-foreground/30 ml-1 text-[11px]",children:["· ",e.ahead," ahead"]}):null]})]}):x?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eU.CheckCircle2,{className:"size-3.5 text-green-500"}),(0,t.jsxs)("span",{children:["Up to date · ",(0,t.jsx)("code",{className:"font-mono text-[11px]",children:m}),e.ahead>0?(0,t.jsxs)("span",{className:"text-foreground/30 ml-1 text-[11px]",children:["· ",e.ahead," ahead"]}):null]})]}):null}),(e||n)&&!o?(0,t.jsx)("button",{onClick:l,disabled:a,className:"text-foreground/30 hover:text-foreground/60 hover:bg-foreground/5 inline-flex size-6 items-center justify-center rounded-sm disabled:opacity-50","aria-label":c("branchSyncStatus.refreshSyncStatus"),children:(0,t.jsx)(tt.RefreshCw,{className:(0,s.cn)("size-3",a&&"animate-spin")})}):null]}),u&&!o?(0,t.jsx)("div",{className:"pt-2",children:(0,t.jsx)(th.ActionButton,{label:c("branchSyncStatus.rebaseOnMain"),onClick:i,loading:!1,error:!!d,icon:Y,variant:"outline",size:"sm"})}):null,d?(0,t.jsx)("p",{className:"text-destructive pt-1 text-[11px]",children:d}):null]})}function tM({pinnedConfig:e}){let a=(0,tg.getAgentTypeIcon)(e.agentType),s=e.modelId?(0,tb.getModelMeta)(e.modelId).displayName||e.modelId:"No model selected";return(0,t.jsxs)(tw,{"data-testid":"feature-pinned-config-card",className:"flex flex-col gap-3",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsxs)("div",{className:"text-foreground/40 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase",children:[(0,t.jsx)(ta.Settings,{className:"size-3"})," Pinned Execution"]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,t.jsx)(a,{className:"size-4 shrink-0 opacity-60"}),(0,t.jsx)("span",{className:"font-medium",children:tg.agentTypeLabels[e.agentType]??e.agentType}),(0,t.jsx)("span",{className:"text-foreground/20",children:"/"}),(0,t.jsx)("span",{className:"text-foreground/60",children:s})]}),(0,t.jsx)("p",{className:"text-muted-foreground text-xs",children:"Change the pinned agent and model before the next start, approval, or retry."})]}),(0,t.jsx)(tf.AgentModelPicker,{initialAgentType:e.agentType,initialModel:e.modelId,agentType:e.agentType,model:e.modelId,onSave:e.onSave,saveError:e.error,saving:e.saving,disabled:e.saving,mode:"settings"})]})}function tI({data:e,pinnedConfig:a}){var s;let r=null!=e.approvalGates||null!=e.push||null!=e.openPr||null!=e.ciWatchEnabled||null!=e.enableEvidence||null!=e.forkAndPr||null!=e.commitSpecs||null!=e.injectSkills,n=null!=a&&(s=e.state,tv.has(s));return r||n?(0,t.jsx)(tN,{icon:ta.Settings,title:"Settings",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[n?(0,t.jsx)(tM,{pinnedConfig:a}):null,r?(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-2",children:[e.approvalGates?(0,t.jsxs)(tw,{children:[(0,t.jsxs)("div",{className:"text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase",children:[(0,t.jsx)(ts,{className:"size-3"})," Approve"]}),(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,t.jsx)(tC,{on:e.approvalGates.allowPrd,label:"PRD"}),(0,t.jsx)(tC,{on:e.approvalGates.allowPlan,label:"Plan"}),(0,t.jsx)(tC,{on:e.approvalGates.allowMerge,label:"Merge"})]})]}):null,null!=e.enableEvidence?(0,t.jsxs)(tw,{children:[(0,t.jsxs)("div",{className:"text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase",children:[(0,t.jsx)(e7,{className:"size-3"})," Evidence"]}),(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,t.jsx)(tC,{on:e.enableEvidence,label:"Collect"}),null!=e.commitEvidence?(0,t.jsx)(tC,{on:e.commitEvidence,label:"Add to PR"}):null]})]}):null,null!=e.injectSkills?(0,t.jsxs)(tw,{children:[(0,t.jsxs)("div",{className:"text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase",children:[(0,t.jsx)(te.Puzzle,{className:"size-3"})," Skills"]}),(0,t.jsx)("div",{className:"flex flex-col gap-0.5",children:(0,t.jsx)(tC,{on:e.injectSkills,label:"Inject"})})]}):null,null!=e.push||null!=e.openPr||null!=e.ciWatchEnabled||null!=e.commitSpecs||null!=e.forkAndPr?(0,t.jsxs)(tw,{children:[(0,t.jsxs)("div",{className:"text-foreground/40 mb-1.5 flex items-center gap-1 text-[10px] font-medium tracking-wider uppercase",children:[(0,t.jsx)(e$.GitBranch,{className:"size-3"})," Git"]}),(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[null!=e.push?(0,t.jsx)(tC,{on:e.push,label:"Push"}):null,null!=e.openPr?(0,t.jsx)(tC,{on:e.openPr,label:"PR"}):null,null!=e.ciWatchEnabled?(0,t.jsx)(tC,{on:e.ciWatchEnabled,label:"Watch"}):null,null!=e.commitSpecs?(0,t.jsx)(tC,{on:e.commitSpecs,label:"Specs"}):null,null!=e.forkAndPr?(0,t.jsx)(tC,{on:e.forkAndPr,label:"Fork"}):null]})]}):null]}):null]})}):null}function tA({skills:e}){return(0,t.jsx)(tN,{icon:te.Puzzle,title:"Feature Skills",children:(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.map(e=>(0,t.jsx)(eh.Badge,{variant:"secondary",children:e},e))})})}let tP=(0,_.default)("dollar-sign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);var eH=eH,tD=e.i(94819),tz=e.i(58860);let tE=(0,_.default)("arrow-down-to-line",[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]]),t$=(0,_.default)("arrow-up-from-line",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);function tF(e,t){if(null!=e.durationMs&&e.durationMs>0)return e.durationMs;if(!e.completedAt&&e.startedAt){let a=new Date(e.startedAt).getTime();if(!Number.isNaN(a))return Math.max(0,t-a)}return 0}function tL(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function tq(e){let t=e instanceof Date?e:new Date(String(e));return Number.isNaN(t.getTime())?"":t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}function tO(e){return e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(4)}`}let tB={analyze:"Analyzing",requirements:"Requirements",research:"Researching",plan:"Planning",implement:"Implementing",rebase:"Rebasing","fast-implement":"Fast Implement",evidence:"Evidence",validate:"Validating",repair:"Repairing",merge:"Merging"},tU={"run:started":{label:"started",colorClass:"text-blue-600",bgClass:"bg-blue-50 dark:bg-blue-950/30",icon:d.Play},"run:resumed":{label:"resumed",colorClass:"text-blue-600",bgClass:"bg-blue-50 dark:bg-blue-950/30",icon:et.RotateCcw},"run:completed":{label:"completed",colorClass:"text-emerald-600",bgClass:"bg-emerald-50 dark:bg-emerald-950/30",icon:eU.CheckCircle2},"run:failed":{label:"failed",colorClass:"text-red-600",bgClass:"bg-red-50 dark:bg-red-950/30",icon:eH.default},"run:stopped":{label:"stopped",colorClass:"text-amber-600",bgClass:"bg-amber-50 dark:bg-amber-950/30",icon:c.Square},"run:crashed":{label:"crashed",colorClass:"text-red-600",bgClass:"bg-red-50 dark:bg-red-950/30",icon:eH.default},"run:rejected":{label:"rejected",colorClass:"text-orange-600",bgClass:"bg-orange-50 dark:bg-orange-950/30",icon:tD.Ban}};function tH(e){return e.startsWith("run:")}function tV({timings:e,loading:s,error:n,rejectionFeedback:l}){let{t:o}=(0,r.useTranslation)("web"),d=function(e){let[t,s]=(0,a.useState)(Date.now),r=(0,a.useRef)(null);return(0,a.useEffect)(()=>(e&&e.some(e=>!e.phase.startsWith("run:")&&!e.completedAt&&e.startedAt)&&(r.current=setInterval(()=>s(Date.now()),1e3)),()=>{r.current&&(clearInterval(r.current),r.current=null)}),[e]),t}(e);if(s)return(0,t.jsx)("div",{"data-testid":"activity-tab-loading",className:"flex items-center justify-center p-8",children:(0,t.jsx)(i.Loader2,{className:"text-muted-foreground h-6 w-6 animate-spin"})});if(n)return(0,t.jsxs)("div",{className:"flex items-center gap-2 p-4 text-base text-red-600",children:[(0,t.jsx)(V.AlertCircle,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{children:n})]});if(!e||0===e.length)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 p-8",children:[(0,t.jsx)(e8.Clock,{className:"text-muted-foreground h-8 w-8"}),(0,t.jsx)("p",{className:"text-muted-foreground text-base",children:o("activityTab.noActivityRecorded")})]});let c=e.filter(e=>!tH(e.phase)),u=Math.max(...c.map(e=>tF(e,d)),...c.map(e=>e.approvalWaitMs??0),0),x=function(e,t){if(!e.length)return[];let a=e.filter(e=>"run:rejected"===e.phase).length,s=t?.length??0,r=e;if(s>a){r=[...e];let n=e[e.length-1].agentRunId;for(let e=a;e<s;e++){let s=t[e];e>a&&r.push({agentRunId:n,phase:"run:resumed",startedAt:s.timestamp??`synthetic-resumed-${e}`}),r.push({agentRunId:n,phase:"run:rejected",startedAt:s.timestamp??`synthetic-${e}`})}}let n=[],l=[],i=0;for(let e of r)if(l.push(e),"run:rejected"===e.phase){let e=t?.[i];n.push({number:n.length+1,timings:l,rejectionMessage:e?.message,rejectionAttachments:e?.attachments}),l=[],i++}return l.length>0&&n.push({number:n.length+1,timings:l}),n}(e,l),m=x.length>1,p=c.reduce((e,t)=>e+tF(t,d),0),h=c.reduce((e,t)=>e+(t.approvalWaitMs??0),0),f=c.reduce((e,t)=>e+(t.inputTokens??0),0),g=c.reduce((e,t)=>e+(t.outputTokens??0),0),b=c.reduce((e,t)=>e+(t.costUsd??0),0);return(0,t.jsxs)("div",{className:"flex flex-col gap-3 p-4",children:[(0,t.jsx)("div",{"data-testid":"activity-timings",className:"flex flex-col gap-3",children:x.map(e=>(0,t.jsx)(tW,{iteration:e,showHeader:m,maxDurationMs:u,now:d},e.number))}),p>0?(0,t.jsx)(tZ,{totalExecMs:p,totalWaitMs:h,totalInputTokens:f,totalOutputTokens:g,totalCostUsd:b}):null]})}function tW({iteration:e,showHeader:a,maxDurationMs:s,now:r}){let n=function(e){let t=[...e.timings].reverse().find(e=>tH(e.phase));if(!t)return null;switch(t.phase){case"run:rejected":return{label:"Rejected",colorClass:"text-orange-600",dotClass:"bg-orange-500"};case"run:completed":return{label:"Completed",colorClass:"text-emerald-600",dotClass:"bg-emerald-500"};case"run:failed":return{label:"Failed",colorClass:"text-red-600",dotClass:"bg-red-500"};case"run:crashed":return{label:"Crashed",colorClass:"text-red-600",dotClass:"bg-red-500"};case"run:stopped":return{label:"Stopped",colorClass:"text-amber-600",dotClass:"bg-amber-500"};default:return null}}(e);return(0,t.jsxs)("div",{"data-testid":`iteration-${e.number}`,className:"border-border/50 bg-card/50 flex flex-col overflow-hidden rounded-lg border",children:[a?(0,t.jsxs)("div",{className:"bg-muted/30 border-border/50 flex items-center justify-between border-b px-3 py-1.5",children:[(0,t.jsxs)("span",{className:"text-muted-foreground text-sm font-semibold tracking-wide",children:["Iteration ",e.number]}),n?(0,t.jsxs)("span",{className:`flex items-center gap-1 text-xs font-medium ${n.colorClass}`,children:[(0,t.jsx)("span",{className:`inline-block h-1.5 w-1.5 rounded-full ${n.dotClass}`}),n.label]}):null]}):null,(0,t.jsxs)("div",{className:"relative flex flex-col",children:[(0,t.jsx)("div",{className:"bg-border/60 absolute top-4 bottom-4 left-[21.5px] w-px"}),e.timings.map((a,n)=>{if(tH(a.phase)){let s,r="run:rejected"===a.phase,l="run:failed"===a.phase||"run:crashed"===a.phase||"run:stopped"===a.phase;if(r)s=e.rejectionMessage;else if(l){let t=[...e.timings].reverse().find(e=>!tH(e.phase)&&e.errorMessage);s=t?.errorMessage??a.errorMessage}return(0,t.jsx)(tG,{timing:a,message:s,attachments:r?e.rejectionAttachments:void 0,isFirst:0===n,isLast:n===e.timings.length-1},`${a.agentRunId}-${a.phase}-${a.startedAt}`)}return(0,t.jsx)(t_,{timing:a,maxDurationMs:s,now:r},`${a.agentRunId}-${a.phase}-${a.startedAt}`)})]})]})}function tG({timing:e,message:a,attachments:s,isFirst:r,isLast:n}){let l,i=tU[e.phase];if(!i)return null;let o=s&&s.length>0,d=i.icon;return(0,t.jsxs)("div",{className:`relative flex flex-col gap-1 px-3 ${r?"pt-2":"pt-1"} ${n?"pb-2":"pb-1"}`,children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:`relative z-10 flex h-5 w-5 shrink-0 items-center justify-center rounded-full ${i.bgClass}`,children:(0,t.jsx)(d,{className:`h-3 w-3 ${i.colorClass}`})}),(0,t.jsx)("span",{className:`text-sm font-medium ${i.colorClass}`,children:i.label}),e.startedAt&&!("string"==typeof e.startedAt&&e.startedAt.startsWith("synthetic"))?(0,t.jsx)("span",{className:"text-muted-foreground/60 ml-auto text-xs tabular-nums",children:tq(String(e.startedAt))}):null]}),a?(l="run:failed"===e.phase||"run:crashed"===e.phase||"run:stopped"===e.phase,(0,t.jsxs)("div",{className:`ml-[26px] flex items-start gap-1.5 rounded-md px-2 py-1.5 ${l?"bg-red-50/50 dark:bg-red-950/20":"bg-orange-50/50 dark:bg-orange-950/20"}`,children:[l?(0,t.jsx)(V.AlertCircle,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-red-400"}):(0,t.jsx)(ee.MessageSquare,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-orange-400"}),(0,t.jsxs)("span",{"data-testid":l?"error-message-text":"rejection-feedback-text",className:"text-muted-foreground text-xs leading-relaxed italic",children:["— ",a]})]})):null,o?(0,t.jsx)("div",{"data-testid":"rejection-feedback-attachments",className:"ml-[26px]",children:(0,t.jsx)(tm,{text:"",attachmentPaths:s})}):null]})}function t_({timing:e,maxDurationMs:s,now:n}){let{t:l}=(0,r.useTranslation)("web"),i=e.phase.includes(":")?e.phase.split(":")[0]:e.phase,o=e.phase.includes(":")?e.phase.split(":")[1]:null,d=null!==o,c=o?.startsWith("phase-")??!1,m=tB[i]??i,p=c?`Phase ${o.replace("phase-","")}`:null!==o?`${m} #${o}`:m,h=tF(e,n),f=!e.completedAt&&!!e.startedAt,g=f?15:2,b=s>0?Math.max(g,h/s*100):g,j=e.completedAt?c?"bg-emerald-400":d?"bg-amber-500":"bg-emerald-500":"bg-blue-500",v=null!=e.inputTokens||null!=e.outputTokens?(e.inputTokens??0)+(e.outputTokens??0):null,[y,N]=(0,a.useState)(!1),w=(0,a.useCallback)(()=>{e.prompt&&navigator.clipboard.writeText(e.prompt).then(()=>{N(!0),setTimeout(()=>N(!1),1500)})},[e.prompt]);return(0,t.jsxs)("div",{className:`group/phase relative flex flex-col gap-0.5 px-3 py-1.5 ${d?"ms-4":""}`,children:[(0,t.jsxs)("div",{"data-testid":`timing-bar-${e.phase}`,className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"relative z-10 flex h-5 w-5 shrink-0 items-center justify-center",children:(0,t.jsx)("div",{className:`rounded-full ${f?"h-3 w-3 animate-pulse":"h-2.5 w-2.5"} ${f?"bg-blue-500":e.completedAt?"bg-emerald-500":"bg-muted-foreground/30"}`})}),(0,t.jsx)("span",{className:`w-28 shrink-0 truncate text-sm font-medium ${d?"text-muted-foreground":"text-foreground/80"}`,children:p}),e.prompt?(0,t.jsx)("button",{type:"button",onClick:w,className:"text-muted-foreground/50 hover:text-foreground/70 -ms-1 shrink-0 opacity-0 transition-opacity group-hover/phase:opacity-100",title:l("activityTab.copyPromptToClipboard"),children:y?(0,t.jsx)(x.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,t.jsx)(u.Copy,{className:"h-3.5 w-3.5"})}):null,(0,t.jsx)("div",{className:`bg-muted relative min-w-0 flex-1 overflow-hidden rounded-full ${d?"h-1.5":"h-2"}`,children:f?(0,t.jsx)("div",{className:"absolute inset-0 rounded-full bg-blue-500/30",style:{backgroundImage:"linear-gradient(90deg, transparent 0%, rgb(59 130 246) 50%, transparent 100%)",backgroundSize:"200% 100%",animation:"shimmer 1.5s ease-in-out infinite"}}):(0,t.jsx)("div",{className:`h-full rounded-full transition-all duration-300 ${j}`,style:{width:`${Math.min(b,100)}%`}})}),(0,t.jsx)("span",{className:"text-muted-foreground w-14 shrink-0 text-end text-sm font-medium tabular-nums",children:tj(h)})]}),(0,t.jsxs)("div",{className:"ml-[28px] flex items-center gap-3 text-xs",children:[e.startedAt?(0,t.jsx)("span",{className:"text-muted-foreground/60 tabular-nums",children:tq(e.startedAt)}):null,null!=v&&v>0?(0,t.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5",children:[(0,t.jsx)(ea.Zap,{className:"h-3 w-3 opacity-50"}),tL(v)]}):null,null!=e.costUsd&&e.costUsd>0?(0,t.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5",children:[(0,t.jsx)(tP,{className:"h-3 w-3 opacity-50"}),tO(e.costUsd)]}):null]}),null!=e.approvalWaitMs&&e.approvalWaitMs>0?(0,t.jsx)(tK,{timing:e,maxDurationMs:s}):null]})}function tK({timing:e,maxDurationMs:a}){let s=e.approvalWaitMs??0,r=a>0?Math.max(2,s/a*100):2;return(0,t.jsxs)("div",{"data-testid":`approval-wait-${e.phase}`,className:"ml-[26px] flex items-center gap-2 rounded-md bg-amber-50/50 px-1.5 py-1 dark:bg-amber-950/20",children:[(0,t.jsx)(tz.Timer,{className:"h-3.5 w-3.5 shrink-0 text-amber-500"}),(0,t.jsx)("span",{className:"text-muted-foreground w-16 shrink-0 text-xs",children:"approval"}),(0,t.jsx)("div",{className:"bg-muted h-1.5 min-w-0 flex-1 overflow-hidden rounded-full",children:(0,t.jsx)("div",{className:"h-full rounded-full bg-amber-500",style:{width:`${Math.min(r,100)}%`}})}),(0,t.jsx)("span",{className:"text-muted-foreground w-14 shrink-0 text-end text-xs tabular-nums",children:tj(s)})]})}function tZ({totalExecMs:e,totalWaitMs:a,totalInputTokens:s,totalOutputTokens:n,totalCostUsd:l}){let{t:i}=(0,r.useTranslation)("web"),o=s+n;return(0,t.jsxs)("div",{"data-testid":"activity-summary",className:"border-border bg-card/30 flex flex-col gap-2 rounded-lg border p-3",children:[(0,t.jsx)("div",{className:"text-muted-foreground mb-1 text-xs font-semibold tracking-wider uppercase",children:"Summary"}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-x-4 gap-y-3",children:[(0,t.jsx)(tQ,{icon:e8.Clock,label:i("activityTab.execution"),value:tj(e)}),(0,t.jsx)(tQ,{icon:tz.Timer,label:i("activityTab.wait"),value:a>0?tj(a):"n/a"}),(0,t.jsx)(tQ,{icon:e8.Clock,label:"Wall-clock",value:a>0?tj(e+a):tj(e)}),(0,t.jsx)(tQ,{icon:tP,label:i("activityTab.cost"),value:l>0?tO(l):"n/a"}),(0,t.jsxs)("div",{className:"col-span-2 flex flex-col gap-0.5",children:[(0,t.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-xs",children:[(0,t.jsx)(ea.Zap,{className:"h-3 w-3 opacity-40"}),"Tokens"]}),o>0?(0,t.jsxs)("span",{className:"flex items-center gap-2.5 text-sm tabular-nums",children:[(0,t.jsx)("span",{children:tL(o)}),(0,t.jsxs)("span",{className:"text-muted-foreground flex items-center gap-3 text-xs",title:"Input tokens / Output tokens",children:[(0,t.jsxs)("span",{className:"flex items-center gap-0.5",children:[(0,t.jsx)(tE,{className:"h-3 w-3 text-blue-500 opacity-60"}),tL(s)]}),(0,t.jsxs)("span",{className:"flex items-center gap-0.5",children:[(0,t.jsx)(t$,{className:"h-3 w-3 text-emerald-500 opacity-60"}),tL(n)]})]})]}):(0,t.jsx)("span",{className:"text-muted-foreground/40 text-sm italic tabular-nums",children:"n/a"})]})]})]})}function tQ({icon:e,label:a,value:s,className:r=""}){let n="n/a"===s;return(0,t.jsxs)("div",{className:`flex flex-col gap-0.5 ${r}`,children:[(0,t.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-xs",children:[(0,t.jsx)(e,{className:"h-3 w-3 opacity-40"}),a]}),(0,t.jsx)("span",{className:`text-sm tabular-nums ${n?"text-muted-foreground/40 italic":""}`,children:s})]})}var tJ=e.i(7311),tX=e.i(44229);let tY=(0,_.default)("coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]),t0=(0,_.default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]),t1=(0,_.default)("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]),t2=/^\[(\d{4}-\d{2}-\d{2}T[\d:.]+Z?)\]\s+(?:\[([^\]]+)\]\s+)?(?:\[([^\]|]+)(?:\|([^\]]+))?\]\s+)?(.*)$/,t5=/^\[(tool-result|tool|text|delta|result|tokens|cmd|file|turn|thread|error|event|raw|WORKER)\]\s*(.*)/;function t3(e){let t=e.match(t2);if(!t)return{timestamp:null,phase:null,agent:null,model:null,tag:"raw",message:e,raw:e};let[,a,s,r,n,l]=t,i=null,o=null,d=null,c=l??"";if(null!=r&&null!=s)if(s.includes("|")){let[e,t]=s.split("|");o=e,d=t??null,c=`[${r}] ${l??""}`}else i=s,o=r,d=n??null;else if(null!=s)if(s.includes("|")){let[e,t]=s.split("|");o=e,d=t??null}else i=s;let u=c.match(t5),x="info";return u&&(x=u[1].toLowerCase(),c=u[2]),{timestamp:a??null,phase:i,agent:o,model:d,tag:x,message:c.trim(),raw:e}}function t4({content:e}){let s=(0,a.useMemo)(()=>e?e.split("\n").filter(e=>e.trim().length>0).map(t3):[],[e]);return 0===s.length?null:(0,t.jsx)("div",{className:"flex flex-col",children:s.map((e,a)=>(0,t.jsx)(t6,{line:e},a))})}function t6({line:e}){switch(e.tag){case"tool":return(0,t.jsx)(t9,{line:e});case"tool-result":return(0,t.jsx)(an,{line:e});case"text":case"delta":return(0,t.jsx)(at,{line:e});case"result":return(0,t.jsx)(aa,{line:e});case"tokens":case"turn":return(0,t.jsx)(as,{line:e});case"cmd":return(0,t.jsx)(al,{line:e});case"file":return(0,t.jsx)(ai,{line:e});case"thread":case"event":case"info":return(0,t.jsx)(ad,{line:e});case"error":return(0,t.jsx)(ao,{line:e});case"worker":return(0,t.jsx)(ar,{line:e});default:return(0,t.jsx)(ac,{line:e})}}function t8({value:e}){if(!e)return null;let a=e.replace(/^.*T/,"").replace("Z",""),s=a.split(":"),r=s.length>=3?`${s[1]}:${s[2].split(".")[0]}`:a;return(0,t.jsx)("span",{className:"text-muted-foreground/60 w-11 shrink-0 font-mono text-[10px]",children:r})}function t7({phase:e}){return e?(0,t.jsx)("span",{className:"bg-muted text-muted-foreground w-20 shrink-0 truncate rounded px-1.5 py-0.5 font-mono text-[10px] font-medium",title:e,children:e}):(0,t.jsx)("span",{className:"w-20 shrink-0"})}function t9({line:e}){var a;let s,{toolName:r,args:n}=-1===(s=(a=e.message).indexOf(" "))?{toolName:a,args:""}:{toolName:a.slice(0,s),args:a.slice(s+1)},l=function(e,t){try{let a=JSON.parse(t);if("Read"===e&&a.file_path||"Write"===e&&a.file_path||"Edit"===e&&a.file_path)return a.file_path;if("Glob"===e&&a.pattern||"Grep"===e&&a.pattern)return a.pattern;if("Bash"===e&&a.command)return a.command;if("Task"===e&&a.description)return a.description}catch{if(t.length>0)return t}return null}(r,n);return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 border-b border-transparent px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(ae,{toolName:r}),(0,t.jsx)("span",{className:"text-xs font-semibold text-violet-600 dark:text-violet-400",children:r}),l?(0,t.jsx)("span",{className:"text-muted-foreground min-w-0 font-mono text-xs break-all",children:l}):null]})]})}function ae({toolName:e}){let a=e.toLowerCase();return"bash"===a?(0,t.jsx)(F.Terminal,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-500"}):"read"===a||"glob"===a||"grep"===a?(0,t.jsx)(q.FileText,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-500"}):"write"===a||"edit"===a?(0,t.jsx)(t1,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-500"}):(0,t.jsx)(F.Terminal,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-500"})}function at({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(ee.MessageSquare,{className:"mt-0.5 h-3 w-3 shrink-0 text-blue-500"}),(0,t.jsx)("span",{className:"text-foreground/80 min-w-0 text-xs leading-relaxed",children:e.message})]})]})}function aa({line:e}){var a;let s,r,{chars:n}=(s=(a=e.message).match(/^(\d+)\s+chars/),r=a.match(/session=(\S+)/),{chars:s?parseInt(s[1],10):0,sessionId:r?r[1]:null});return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(eU.CheckCircle2,{className:"mt-0.5 h-3 w-3 shrink-0 text-emerald-500"}),(0,t.jsxs)("span",{className:"text-xs font-medium text-emerald-600 dark:text-emerald-400",children:["Result: ",n.toLocaleString()," chars"]})]})]})}function as({line:e}){let a,{inputTokens:s,outputTokens:r}=(a=e.message.match(/^(\d+)\s+in\s*\/\s*(\d+)\s+out/))?{inputTokens:parseInt(a[1],10),outputTokens:parseInt(a[2],10)}:{inputTokens:0,outputTokens:0};return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(tY,{className:"mt-0.5 h-3 w-3 shrink-0 text-amber-500"}),(0,t.jsxs)("span",{className:"text-muted-foreground text-xs",children:[(0,t.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:s.toLocaleString()})," in / ",(0,t.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:r.toLocaleString()})," out"]})]})]})}function ar({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 bg-zinc-50 px-3 py-1.5 transition-colors dark:bg-zinc-900/50",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(t0,{className:"mt-0.5 h-3 w-3 shrink-0 text-zinc-500"}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium break-all",children:e.message})]})]})}function an({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(eF,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-400"}),(0,t.jsx)("span",{className:"text-muted-foreground min-w-0 font-mono text-[11px] break-all",children:e.message})]})]})}function al({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(d.Play,{className:"mt-0.5 h-3 w-3 shrink-0 text-cyan-500"}),(0,t.jsx)("span",{className:"min-w-0 font-mono text-xs break-all text-cyan-700 dark:text-cyan-400",children:e.message})]})]})}function ai({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(t1,{className:"mt-0.5 h-3 w-3 shrink-0 text-orange-500"}),(0,t.jsx)("span",{className:"min-w-0 text-xs break-all text-orange-700 dark:text-orange-400",children:e.message})]})]})}function ao({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 bg-red-50 px-3 py-1.5 transition-colors dark:bg-red-950/30",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-1.5",children:[(0,t.jsx)(V.AlertCircle,{className:"mt-0.5 h-3 w-3 shrink-0 text-red-500"}),(0,t.jsx)("span",{className:"min-w-0 text-xs font-medium break-all text-red-700 dark:text-red-400",children:e.message})]})]})}function ad({line:e}){return(0,t.jsxs)("div",{className:"hover:bg-muted/50 flex items-start gap-2 px-3 py-1.5 transition-colors",children:[(0,t.jsx)(t8,{value:e.timestamp}),(0,t.jsx)(t7,{phase:e.phase}),(0,t.jsx)("span",{className:"text-muted-foreground min-w-0 text-xs break-all",children:e.message})]})}function ac({line:e}){return(0,t.jsx)("div",{className:"px-3 py-0.5",children:(0,t.jsx)("span",{className:"text-muted-foreground/70 font-mono text-[11px] break-all whitespace-pre-wrap",children:e.raw})})}function au({content:e,isConnected:s,error:n}){let{t:l}=(0,r.useTranslation)("web"),i=(0,a.useRef)(null),[o,d]=(0,a.useState)(!0),[c,u]=(0,a.useState)("structured"),x=(0,a.useCallback)(()=>{let e=i.current;e&&d(e.scrollHeight-e.scrollTop-e.clientHeight<40)},[]),m=(0,a.useCallback)(()=>{let e=i.current;e&&(e.scrollTop=e.scrollHeight,d(!0))},[]);return((0,a.useEffect)(()=>{o&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[e,o]),n)?(0,t.jsxs)("div",{className:"flex items-center gap-2 p-4 text-sm text-red-600",children:[(0,t.jsx)(V.AlertCircle,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{children:n})]}):e?(0,t.jsxs)("div",{className:"flex h-full flex-col","data-testid":"log-tab",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 border-b px-3 py-1.5",children:[(0,t.jsx)("span",{className:`h-2 w-2 rounded-full ${s?"bg-emerald-500":"bg-zinc-400"}`}),(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:s?"Live":"Disconnected"}),(0,t.jsxs)("div",{className:"ml-auto flex items-center gap-1",children:[(0,t.jsx)("button",{type:"button",onClick:()=>u("structured"),className:`rounded p-1 transition-colors ${"structured"===c?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground"}`,title:l("logTab.structuredView"),children:(0,t.jsx)(q.FileText,{className:"h-3.5 w-3.5"})}),(0,t.jsx)("button",{type:"button",onClick:()=>u("raw"),className:`rounded p-1 transition-colors ${"raw"===c?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground"}`,title:l("logTab.rawView"),children:(0,t.jsx)(tX.Code,{className:"h-3.5 w-3.5"})}),o?null:(0,t.jsxs)("button",{type:"button",onClick:m,className:"text-muted-foreground hover:text-foreground ms-1 flex items-center gap-1 text-xs",children:[(0,t.jsx)(tJ.ArrowDown,{className:"h-3 w-3"}),"Jump to bottom"]})]})]}),(0,t.jsx)("div",{ref:i,onScroll:x,className:`flex-1 overflow-y-auto ${"raw"===c?"bg-zinc-950 p-3 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap text-zinc-300":"bg-background"}`,children:"structured"===c?(0,t.jsx)(t4,{content:e}):e})]}):(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 p-8",children:[(0,t.jsx)(F.Terminal,{className:"text-muted-foreground h-8 w-8"}),(0,t.jsx)("p",{className:"text-muted-foreground text-sm",children:l("logTab.noLogOutput")}),s?(0,t.jsx)("p",{className:"text-muted-foreground text-xs",children:"Waiting for log data..."}):null]})}let ax=(0,_.default)("list-todo",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["rect",{x:"3",y:"4",width:"6",height:"6",rx:"1",key:"cif1o7"}]]);var am=e.i(95812),ap=e.i(87889);let ah=(0,_.default)("circle-dashed",[["path",{d:"M10.1 2.182a10 10 0 0 1 3.8 0",key:"5ilxe3"}],["path",{d:"M13.9 21.818a10 10 0 0 1-3.8 0",key:"11zvb9"}],["path",{d:"M17.609 3.721a10 10 0 0 1 2.69 2.7",key:"1iw5b2"}],["path",{d:"M2.182 13.9a10 10 0 0 1 0-3.8",key:"c0bmvh"}],["path",{d:"M20.279 17.609a10 10 0 0 1-2.7 2.69",key:"1ruxm7"}],["path",{d:"M21.818 10.1a10 10 0 0 1 0 3.8",key:"qkgqxc"}],["path",{d:"M3.721 6.391a10 10 0 0 1 2.7-2.69",key:"1mcia2"}],["path",{d:"M6.391 20.279a10 10 0 0 1-2.69-2.7",key:"1fvljs"}]]),af={Todo:{icon:am.Circle,colorClass:"text-muted-foreground",borderClass:"border-border",label:"Todo"},"Work in Progress":{icon:i.Loader2,colorClass:"text-blue-600",borderClass:"border-blue-200",spinning:!0,label:"In Progress"},Done:{icon:x.Check,colorClass:"text-emerald-600",borderClass:"border-emerald-200",label:"Done"},Review:{icon:ap.Eye,colorClass:"text-amber-600",borderClass:"border-amber-200",label:"Review"}},ag={icon:am.Circle,colorClass:"text-muted-foreground",borderClass:"border-border",label:"Unknown"};function ab({tasks:e}){let{t:a}=(0,r.useTranslation)("web");return 0===e.length?(0,t.jsx)("div",{className:"flex flex-col items-center justify-center gap-2 py-4",children:(0,t.jsx)("p",{className:"text-muted-foreground text-sm",children:a("taskProgress.noTasksDefined")})}):(0,t.jsxs)("div",{"data-testid":"task-progress-view",className:"flex flex-col gap-3",children:[(0,t.jsx)(aj,{tasks:e}),(0,t.jsx)("div",{"data-testid":"task-progress-list",className:"flex flex-col gap-2",children:e.map((e,a)=>(0,t.jsx)(ay,{task:e,index:a},e.title||`task-${a}`))})]})}function aj({tasks:e}){let{t:s}=(0,r.useTranslation)("web"),n=(0,a.useMemo)(()=>{let t=e.filter(e=>"Done"===e.state).length,a=e.filter(e=>"Work in Progress"===e.state).length,s=e.filter(e=>"Review"===e.state).length,r=e.filter(e=>"Done"!==e.state&&"Work in Progress"!==e.state&&"Review"!==e.state).length,n=e.length,l=n>0?Math.round(t/n*100):0;return{done:t,wip:a,review:s,todo:r,total:n,percent:l}},[e]);return(0,t.jsxs)("div",{"data-testid":"task-progress-summary",className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium",children:"Task Progress"}),(0,t.jsxs)("span",{className:"text-muted-foreground text-xs",children:[n.done," of ",n.total," done"]})]}),(0,t.jsx)("div",{className:"bg-muted h-2 w-full overflow-hidden rounded-full",children:(0,t.jsx)("div",{"data-testid":"task-progress-bar",className:"h-full rounded-full bg-emerald-500 transition-all",style:{width:`${n.percent}%`}})}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-3",children:[n.done>0?(0,t.jsx)(av,{icon:x.Check,label:s("taskProgress.done"),count:n.done,className:"text-emerald-600"}):null,n.wip>0?(0,t.jsx)(av,{icon:i.Loader2,label:s("taskProgress.inProgress"),count:n.wip,className:"text-blue-600"}):null,n.review>0?(0,t.jsx)(av,{icon:ap.Eye,label:s("taskProgress.review"),count:n.review,className:"text-amber-600"}):null,n.todo>0?(0,t.jsx)(av,{icon:am.Circle,label:s("taskProgress.todo"),count:n.todo,className:"text-muted-foreground"}):null]})]})}function av({icon:e,label:a,count:r,className:n}){return(0,t.jsxs)("span",{className:(0,s.cn)("flex items-center gap-1 text-xs",n),children:[(0,t.jsx)(e,{className:"h-3 w-3"}),r," ",a]})}function ay({task:e,index:r}){let[n,l]=(0,a.useState)(!1),i=af[e.state]??ag,o=i.icon,d=e.actionItems.length>0,c=(0,a.useCallback)(()=>{d&&l(e=>!e)},[d]);return(0,t.jsxs)("div",{"data-testid":`task-card-${r}`,className:(0,s.cn)("rounded-lg border",i.borderClass),children:[(0,t.jsxs)("button",{type:"button",onClick:c,disabled:!d,className:(0,s.cn)("flex w-full items-start gap-2 px-3 py-2.5 text-start",d&&"hover:bg-muted/50 cursor-pointer transition-colors"),children:[(0,t.jsx)(o,{className:(0,s.cn)("mt-0.5 h-4 w-4 shrink-0",i.colorClass,i.spinning&&"animate-spin")}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[(0,t.jsx)("span",{className:(0,s.cn)("text-sm font-medium",i.colorClass),children:e.title}),e.description?(0,t.jsx)("span",{className:"text-muted-foreground text-xs",children:e.description}):null]}),d?(0,t.jsx)(em.ChevronRight,{className:(0,s.cn)("text-muted-foreground mt-0.5 h-4 w-4 shrink-0 transition-transform",n&&"rotate-90")}):null]}),n&&d?(0,t.jsx)("div",{className:"border-t px-3 py-2.5",children:(0,t.jsx)("div",{className:"flex flex-col gap-2",children:e.actionItems.map((e,a)=>(0,t.jsx)(aN,{item:e},e.name||`ai-${a}`))})}):null]})}function aN({item:e}){let a=e.acceptanceCriteria.length,s=e.acceptanceCriteria.filter(e=>e.verified).length,r=a>0&&s===a;return(0,t.jsxs)("div",{"data-testid":"action-item",className:"flex flex-col gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[r?(0,t.jsx)(eU.CheckCircle2,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-emerald-600"}):(0,t.jsx)(ah,{className:"text-muted-foreground mt-0.5 h-3.5 w-3.5 shrink-0"}),(0,t.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,t.jsx)("span",{className:"text-xs font-medium",children:e.name}),e.description?(0,t.jsx)("span",{className:"text-muted-foreground text-[11px]",children:e.description}):null]}),a>0?(0,t.jsxs)("span",{className:"text-muted-foreground ml-auto shrink-0 text-[11px]",children:[s,"/",a]}):null]}),a>0?(0,t.jsx)("div",{className:"ms-5.5 flex flex-col gap-1",children:e.acceptanceCriteria.map((e,a)=>(0,t.jsx)(aw,{criterion:e},e.description||`ac-${a}`))}):null]})}function aw({criterion:e}){return(0,t.jsxs)("div",{"data-testid":"acceptance-criterion",className:"flex items-start gap-1.5",children:[e.verified?(0,t.jsx)(x.Check,{className:"mt-0.5 h-3 w-3 shrink-0 text-emerald-600"}):(0,t.jsx)(am.Circle,{className:"text-muted-foreground mt-0.5 h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:(0,s.cn)("text-[11px]",e.verified?"text-muted-foreground line-through":"text-foreground"),children:e.description})]})}let ak={Requirements:"border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50",ClarificationRequired:"border-transparent bg-amber-50 text-amber-700 hover:bg-amber-50",Ready:"border-transparent bg-green-50 text-green-700 hover:bg-green-50"};function aC({plan:e,loading:a,error:s}){return a?(0,t.jsx)("div",{"data-testid":"plan-tab-loading",className:"flex items-center justify-center p-8",children:(0,t.jsx)(i.Loader2,{className:"text-muted-foreground h-6 w-6 animate-spin"})}):s?(0,t.jsxs)("div",{className:"flex items-center gap-2 p-4 text-sm text-red-600",children:[(0,t.jsx)(V.AlertCircle,{className:"h-4 w-4 shrink-0"}),(0,t.jsx)("span",{children:s})]}):e?(0,t.jsxs)("div",{className:"flex flex-col gap-4 p-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium",children:"Plan State"}),(0,t.jsx)(eh.Badge,{className:ak[e.state]??"border-transparent bg-gray-50 text-gray-700",children:e.state})]}),e.overview?(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)("span",{className:"text-muted-foreground text-xs font-medium",children:"Overview"}),(0,t.jsx)("p",{className:"text-sm leading-relaxed",children:e.overview})]}):null,(0,t.jsx)(ab,{tasks:e.tasks})]}):(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 p-8",children:[(0,t.jsx)(ax,{className:"text-muted-foreground h-8 w-8"}),(0,t.jsx)("p",{className:"text-muted-foreground text-sm",children:"No plan created yet"})]})}let aS=(0,_.default)("arrow-up-right",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);var aT=e.i(25235),aR=e.i(71326);function aM({data:e,onSubmitFeedback:s,onPromote:r,onDiscard:n,isSubmitting:l=!1}){let[d,c]=(0,a.useState)(""),[u,x]=(0,a.useState)(!1),[m,p]=(0,a.useState)(!1),h=(0,a.useCallback)(async()=>{d.trim()&&s&&(await s(d.trim()),c(""))},[d,s]),f=(0,a.useCallback)(async e=>{p(!1),await r?.(e)},[r]),g=(0,a.useCallback)(async()=>{x(!1),await n?.()},[n]),b="action-required"===e.state&&"exploring"===e.lifecycle,j="running"===e.state&&"exploring"===e.lifecycle;return(0,t.jsxs)("div",{className:"flex flex-col gap-4 p-4","data-testid":"prototype-tab",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(er.FlaskConical,{className:"h-4 w-4 text-amber-500"}),(0,t.jsx)("span",{className:"text-sm font-medium",children:"Exploration Prototype"}),(e.iterationCount??0)>0&&(0,t.jsxs)(eh.Badge,{variant:"secondary","data-testid":"prototype-iteration-badge",children:["Iteration ",e.iterationCount]}),j?(0,t.jsxs)(eh.Badge,{variant:"outline",className:"text-teal-600 dark:text-teal-400",children:[(0,t.jsx)(i.Loader2,{className:"mr-1 h-3 w-3 animate-spin"}),"Generating..."]}):null,b?(0,t.jsx)(eh.Badge,{variant:"outline",className:"text-amber-600 dark:text-amber-400",children:"Awaiting feedback"}):null]}),(0,t.jsx)(aT.Separator,{}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{htmlFor:"prototype-feedback",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"Feedback"}),(0,t.jsx)(ej.Textarea,{id:"prototype-feedback",placeholder:b?"Describe what to change in the next iteration...":"Feedback can be submitted when the prototype is ready for review.",value:d,onChange:e=>c(e.target.value),disabled:!b||l,className:"min-h-24 resize-none","data-testid":"prototype-feedback-input"}),(0,t.jsxs)(ep.Button,{onClick:h,disabled:!d.trim()||!b||l,size:"sm",className:"self-end","data-testid":"prototype-submit-feedback",children:[l?(0,t.jsx)(i.Loader2,{className:"mr-1 h-3.5 w-3.5 animate-spin"}):(0,t.jsx)(eg,{className:"mr-1 h-3.5 w-3.5"}),"Send Feedback"]})]}),(0,t.jsx)(aT.Separator,{}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)(ep.Button,{variant:"default",size:"sm",onClick:()=>p(!0),disabled:!b||l,"data-testid":"prototype-promote-button",children:[(0,t.jsx)(aS,{className:"mr-1 h-3.5 w-3.5"}),"Promote to Feature"]}),(0,t.jsxs)(ep.Button,{variant:"outline",size:"sm",onClick:()=>x(!0),disabled:l,className:"text-destructive hover:text-destructive","data-testid":"prototype-discard-button",children:[(0,t.jsx)(o.Trash2,{className:"mr-1 h-3.5 w-3.5"}),"Discard"]})]}),(0,t.jsx)(aR.AlertDialog,{open:m,onOpenChange:p,children:(0,t.jsxs)(aR.AlertDialogContent,{children:[(0,t.jsxs)(aR.AlertDialogHeader,{children:[(0,t.jsx)(aR.AlertDialogTitle,{children:"Promote to Feature"}),(0,t.jsx)(aR.AlertDialogDescription,{children:"Choose the mode for the promoted feature. The prototype code will be preserved as the starting point."})]}),(0,t.jsxs)(aR.AlertDialogFooter,{className:"flex-col gap-2 sm:flex-row",children:[(0,t.jsx)(aR.AlertDialogCancel,{children:"Cancel"}),(0,t.jsx)(aR.AlertDialogAction,{onClick:()=>f(eV.FeatureMode.Fast),"data-testid":"promote-fast",children:"Fast (Direct Implementation)"}),(0,t.jsx)(aR.AlertDialogAction,{onClick:()=>f(eV.FeatureMode.Regular),"data-testid":"promote-regular",children:"Regular (Full SDLC)"})]})]})}),(0,t.jsx)(aR.AlertDialog,{open:u,onOpenChange:x,children:(0,t.jsxs)(aR.AlertDialogContent,{children:[(0,t.jsxs)(aR.AlertDialogHeader,{children:[(0,t.jsx)(aR.AlertDialogTitle,{children:"Discard Exploration?"}),(0,t.jsx)(aR.AlertDialogDescription,{children:"This will delete the exploration feature, its worktree, and all prototype code. This action cannot be undone."})]}),(0,t.jsxs)(aR.AlertDialogFooter,{children:[(0,t.jsx)(aR.AlertDialogCancel,{children:"Cancel"}),(0,t.jsx)(aR.AlertDialogAction,{onClick:g,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90","data-testid":"discard-confirm",children:"Discard"})]})]})})]})}var aI=e.i(28112);function aA(){return{data:null,loading:!1,error:null}}let aP=[{key:"overview",label:"Overview",icon:W.LayoutDashboard},{key:"prototype",label:"Prototype",icon:er.FlaskConical},{key:"activity",label:"Activity",icon:G.Activity},{key:"log",label:"Log",icon:K},{key:"plan",label:"Plan",icon:Z},{key:"prd-review",label:"PRD Review",icon:Q},{key:"tech-decisions",label:"Tech Decisions",icon:J.Cpu},{key:"product-decisions",label:"Product",icon:X.Package},{key:"merge-review",label:"Merge Review",icon:Y},{key:"chat",label:"Chat",icon:ee.MessageSquare}],aD={activity:async function(e){let t=await el(e);if("error"in t)throw Error(t.error);return{timings:t.timings,rejectionFeedback:t.rejectionFeedback}},plan:async function(e){let t=await ei(e);if("error"in t)throw Error(t.error);return t.plan}};function az({featureName:e,headerContent:r,featureNode:l,featureId:o,initialTab:u,urlTab:x,prdData:m,prdSelections:p,onPrdSelect:h,onPrdApprove:f,onPrdReject:g,isPrdLoading:b,techData:j,onTechApprove:v,onTechReject:y,isTechLoading:N,productData:w,mergeData:k,onMergeApprove:C,onMergeReject:S,isMergeLoading:T,syncStatus:R,syncLoading:M,syncError:I,onRefreshSync:A,onRebaseOnMain:P,rebaseLoading:D,rebaseError:E,isRejecting:$,chatInput:F,onChatInputChange:L,pinnedConfig:q,continuationActionsDisabled:O=!1,sseEvents:B,onSubmitFeedback:U,onPromote:H,onDiscardExploration:W,isPrototypeSubmitting:G,interactiveAgentEnabled:_=!0,onRetry:K,onStop:Z,onStart:Q}){let J,X=(0,n.usePathname)(),Y=(0,a.useMemo)(()=>(function(e,t=!0){let a=["overview"];return"exploring"===e.lifecycle?(a.push("prototype","activity"),e.hasAgentRun&&a.push("log")):(a.push("activity"),e.hasAgentRun&&a.push("log"),e.hasPlan&&a.push("plan"),"requirements"===e.lifecycle&&"action-required"===e.state&&a.push("prd-review"),"implementation"===e.lifecycle&&"action-required"===e.state&&a.push("tech-decisions","product-decisions"),"review"===e.lifecycle&&("action-required"===e.state||"error"===e.state)&&a.push("merge-review"),"maintain"===e.lifecycle&&e.pr&&a.push("merge-review")),t&&a.push("chat"),a})(l,_),[l,_]),ee=(0,a.useMemo)(()=>aP.filter(e=>Y.includes(e.key)).map(e=>"merge-review"===e.key&&"maintain"===l.lifecycle?{...e,label:"Merge History"}:e),[Y,l.lifecycle]),er=(0,a.useMemo)(()=>{let e=X.match(/^(\/feature\/[^/]+)/);return e?e[1]:X},[X]),el=(0,a.useMemo)(()=>x&&Y.includes(x)?x:u&&Y.includes(u)?u:"overview",[]),[ei,ed]=(0,a.useState)(el),ec=function(e){let[t,s]=(0,a.useState)(""),[r,n]=(0,a.useState)(!1),[l,i]=(0,a.useState)(null),o=(0,a.useRef)(null),d=(0,a.useCallback)(()=>{o.current&&(o.current.close(),o.current=null),n(!1)},[]);return(0,a.useEffect)(()=>{if(!e){s(""),n(!1),i(null);return}s(""),i(null);let t=new EventSource(`/api/feature-logs?featureId=${e}`);return o.current=t,t.onopen=()=>{n(!0)},t.addEventListener("initial",e=>{s(JSON.parse(e.data).content)}),t.addEventListener("log",e=>{let t=JSON.parse(e.data);s(e=>e+t.content)}),t.addEventListener("error",e=>{try{let t=JSON.parse(e.data);i(t.error)}catch{i(e.data?String(e.data):"Log stream unavailable")}}),t.onerror=()=>{n(!1)},()=>{t.close(),o.current=null}},[e,d]),{content:t,isConnected:r,error:l}}("log"===ei?o:null),{tabs:ex,fetchTab:em,refreshTab:ep}=function(e,t){let s=Object.keys(t),[r,n]=(0,a.useState)(()=>{let e={};for(let t of s)e[t]=aA();return e}),l=(0,a.useRef)(t);l.current=t;let i=(0,a.useRef)(e);i.current=e;let o=(0,a.useRef)(!0);(0,a.useEffect)(()=>(o.current=!0,()=>{o.current=!1}),[]);let d=(0,a.useRef)(e);(0,a.useEffect)(()=>{d.current!==e&&(d.current=e,n(e=>{let t={};for(let a of Object.keys(e))t[a]=aA();return t}))},[e]);let c=(0,a.useCallback)(async e=>{let t=l.current[e],a=i.current;if(t){o.current&&n(t=>t[e]?.data!==null?t:{...t,[e]:{...t[e],loading:!0,error:null}});try{let s=await t(a);o.current&&n(t=>({...t,[e]:{data:s,loading:!1,error:null}}))}catch(t){o.current&&n(a=>{let s=t instanceof Error?t.message:"Failed to fetch tab data",r=a[e]?.data??null;return{...a,[e]:{data:r,loading:!1,error:r?null:s}}})}}},[]),u=(0,a.useCallback)(async e=>{let t=r[e];t&&null!==t.data||t&&t.loading||await c(e)},[r,c]);return{tabs:r,fetchTab:u,refreshTab:(0,a.useCallback)(async e=>{await c(e)},[c])}}(o,aD),eh=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!eh.current)return;eh.current=!1;let e="overview"===ei?er:`${er}/${ei}`;e!==X&&window.history.pushState(null,"",e)},[ei,er,X]);let ef=(0,a.useRef)(X);(0,a.useEffect)(()=>{if(ef.current===X||(ef.current=X,eh.current))return;let e=X.split("/"),t=e.length>=4?e[3]:void 0,a=t&&Y.includes(t)?t:"overview";a!==ei&&(ed(a),("activity"===a||"plan"===a)&&em(a))},[X]);let eg=(0,a.useRef)(!1);(0,a.useEffect)(()=>{if(!eg.current&&(eg.current=!0,!x&&"overview"!==el)){let e=`${er}/${el}`;e!==X&&window.history.replaceState(null,"",e)}},[]);let eb=(0,a.useRef)(!1);(0,a.useEffect)(()=>{eb.current||(eb.current=!0,("activity"===ei||"plan"===ei)&&em(ei))},[ei,em]);let ej=(0,a.useRef)(o);(0,a.useEffect)(()=>{ej.current!==o&&(ej.current=o,ed("overview"))},[o]);let ev=(0,a.useRef)(u);(0,a.useEffect)(()=>{if(ev.current!==u&&u&&Y.includes(u)){ev.current=u,ed(u),("activity"===u||"plan"===u)&&em(u);let e="overview"===u?er:`${er}/${u}`;e!==window.location.pathname&&window.history.replaceState(null,"",e)}},[u,Y,er,em]),(0,a.useEffect)(()=>{Y.includes(ei)||(ed("overview"),window.location.pathname!==er&&window.history.replaceState(null,"",er))},[Y,ei,er]);let ey=(0,a.useRef)(ei);ey.current=ei;let eN=(0,a.useRef)(0);(0,a.useEffect)(()=>{if(!B||0===B.length||(eN.current>B.length&&(eN.current=0),B.length<=eN.current))return;let e=B.slice(eN.current);if(eN.current=B.length,!e.some(e=>e.featureId===o))return;ep("activity");let t=ey.current;"plan"===t&&ep(t)},[B,o,ep]);let ew="running"===l.state||"creating"===l.state;(0,a.useEffect)(()=>{if(!ew)return;let e=setInterval(()=>{ep("activity")},5e3);return()=>clearInterval(e)},[ew,ep]);let eC=(0,a.useCallback)(e=>{eh.current=!0,ed(e),("activity"===e||"plan"===e)&&em(e)},[em]);return(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col",children:(0,t.jsxs)(en.Tabs,{value:ei,onValueChange:eC,className:"flex min-h-0 flex-1 flex-col",children:[(0,t.jsx)(en.TabsList,{className:"bg-muted/50 h-auto w-full shrink-0 justify-start gap-0 rounded-none border-b p-0",children:ee.map(e=>{let a=e.icon;return(0,t.jsxs)(en.TabsTrigger,{value:e.key,className:"text-muted-foreground hover:bg-muted hover:text-foreground data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:border-t-primary [&:not([data-state=active])]:border-r-border relative h-auto rounded-none border-t-2 border-r border-t-transparent border-r-transparent bg-transparent px-3.5 py-2.5 text-[13px] font-normal shadow-none transition-none last:border-r-transparent data-[state=active]:shadow-none",children:[(0,t.jsx)(a,{className:"mr-1.5 size-4"}),e.label]},e.key)})}),(0,t.jsxs)("div",{className:"bg-muted/40 shrink-0 border-b",children:[e?(0,t.jsxs)("div",{className:"flex h-12 items-stretch gap-2 pr-0 pl-4","data-testid":"feature-drawer-header",children:[(0,t.jsx)("div",{className:"flex items-center",children:l.fastMode?(0,t.jsx)(ea.Zap,{className:"size-4 shrink-0 text-amber-500"}):(0,t.jsx)(es,{className:"text-muted-foreground/50 size-4 shrink-0"})}),(0,t.jsx)("h2",{className:"text-foreground flex min-w-0 items-center truncate text-base font-semibold tracking-tight",children:e}),l.repositoryName?(0,t.jsxs)("span",{className:"animate-in fade-in flex shrink-0 items-center gap-1.5 self-center duration-200",children:[(0,t.jsx)("span",{className:"text-muted-foreground/30 text-sm",children:"/"}),l.remoteUrl?(0,t.jsx)("a",{href:l.remoteUrl,target:"_blank",rel:"noopener noreferrer",className:"text-muted-foreground hover:text-foreground text-sm",children:l.repositoryName}):(0,t.jsx)("span",{className:"text-muted-foreground text-sm",children:l.repositoryName})]}):(0,t.jsxs)("span",{className:"flex items-center gap-1.5 self-center",children:[(0,t.jsx)("span",{className:"text-muted-foreground/30 text-sm",children:"/"}),(0,t.jsx)("span",{className:"bg-muted h-4 w-16 animate-pulse rounded"})]}),(0,t.jsx)(z.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsxs)("div",{className:"ml-auto flex shrink-0 cursor-default items-center self-stretch text-xs font-medium",children:[(0,t.jsxs)("div",{className:(0,s.cn)("flex items-center gap-1.5 self-stretch px-3",eo.featureNodeStateConfig[l.state].labelClass),children:["running"===l.state?(0,t.jsx)(eu,{size:"sm",className:"shrink-0"}):(J=eo.featureNodeStateConfig[l.state].icon,(0,t.jsx)(J,{className:"size-3.5 shrink-0"})),eo.featureNodeStateConfig[l.state].label]}),"pending"===l.state&&Q?(0,t.jsxs)("button",{type:"button",onClick:()=>Q(l.featureId),disabled:O,className:"text-muted-foreground flex items-center gap-1 self-stretch px-3 hover:bg-green-500/10 hover:text-green-600 disabled:pointer-events-none disabled:opacity-50 dark:hover:text-green-400","data-testid":"feature-drawer-start-button",children:[(0,t.jsx)(d.Play,{className:"size-3.5"})," Start"]}):"error"===l.state&&K?(0,t.jsxs)("button",{type:"button",onClick:()=>K(l.featureId),disabled:O,className:"text-muted-foreground flex items-center gap-1 self-stretch px-3 hover:bg-red-500/10 hover:text-red-500 disabled:pointer-events-none disabled:opacity-50 dark:hover:text-red-400","data-testid":"feature-drawer-retry-button",children:[(0,t.jsx)(et.RotateCcw,{className:"size-3.5"})," Retry"]}):"running"===l.state&&Z?(0,t.jsxs)("button",{type:"button",onClick:()=>Z(l.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:[(0,t.jsx)(c.Square,{className:"size-3.5"})," Stop"]}):null]})}),l.errorMessage?(0,t.jsxs)(z.TooltipContent,{side:"bottom",align:"end",sideOffset:4,className:"z-[100] max-w-xs cursor-pointer text-xs leading-relaxed select-text",onClick:()=>{navigator.clipboard.writeText(l.errorMessage)},children:[l.errorMessage,(0,t.jsx)("span",{className:"text-muted-foreground ml-1 text-[10px] italic",children:"(click to copy)"})]}):null]})})]}):null,r]}),(0,t.jsx)(en.TabsContent,{value:"overview",className:"mt-0 flex-1 overflow-y-auto",children:(0,t.jsx)(tT,{data:l,pinnedConfig:q,syncStatus:R,syncLoading:M,syncError:I,onRefreshSync:A,onRebaseOnMain:P,rebaseLoading:D,rebaseError:E})}),Y.includes("prototype")?(0,t.jsx)(en.TabsContent,{value:"prototype",className:"mt-0 flex-1 overflow-y-auto",children:(0,t.jsx)(aM,{data:l,onSubmitFeedback:U,onPromote:H,onDiscard:W,isSubmitting:G})}):null,(0,t.jsx)(en.TabsContent,{value:"activity",className:"mt-0 flex-1 overflow-y-auto",children:(0,t.jsx)(tV,{timings:ex.activity.data?.timings??null,loading:ex.activity.loading,error:ex.activity.error,rejectionFeedback:ex.activity.data?.rejectionFeedback})}),(0,t.jsx)(en.TabsContent,{value:"log",className:"mt-0 flex-1 overflow-hidden",children:(0,t.jsx)(au,{content:ec.content,isConnected:ec.isConnected,error:ec.error})}),(0,t.jsx)(en.TabsContent,{value:"plan",className:"mt-0 flex-1 overflow-y-auto",children:(0,t.jsx)(aC,{plan:ex.plan.data,loading:ex.plan.loading,error:ex.plan.error})}),Y.includes("prd-review")?(0,t.jsx)(en.TabsContent,{value:"prd-review",className:"mt-0 flex min-h-0 flex-1 flex-col",children:m?(0,t.jsx)(ek,{data:m,selections:p??{},onSelect:h??(()=>void 0),onApprove:f??(()=>void 0),onReject:g,isProcessing:!!(b||O),isRejecting:$,chatInput:F,onChatInputChange:L}):(0,t.jsx)("div",{className:"flex items-center justify-center p-8",children:(0,t.jsx)(i.Loader2,{className:"text-muted-foreground h-6 w-6 animate-spin"})})}):null,Y.includes("tech-decisions")?(0,t.jsx)(en.TabsContent,{value:"tech-decisions",className:"mt-0 flex min-h-0 flex-1 flex-col",children:j?(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,t.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,t.jsx)(eM,{data:j})}),(0,t.jsx)(aE,{onApprove:v??(()=>void 0),onReject:y,isProcessing:!!(N||O),isRejecting:$,chatInput:F,onChatInputChange:L})]}):(0,t.jsx)("div",{className:"flex items-center justify-center p-8",children:(0,t.jsx)(i.Loader2,{className:"text-muted-foreground h-6 w-6 animate-spin"})})}):null,Y.includes("product-decisions")?(0,t.jsx)(en.TabsContent,{value:"product-decisions",className:"mt-0 flex-1 overflow-y-auto",children:null===w?(0,t.jsx)("div",{className:"flex items-center justify-center p-8",children:(0,t.jsx)(i.Loader2,{className:"text-muted-foreground h-6 w-6 animate-spin"})}):w?(0,t.jsx)(eP,{data:w}):(0,t.jsx)("p",{className:"text-muted-foreground p-4 text-center text-sm",children:"No product decisions available."})}):null,Y.includes("merge-review")?(0,t.jsx)(en.TabsContent,{value:"merge-review",className:"mt-0 flex min-h-0 flex-1 flex-col",children:k?(0,t.jsx)(e6,{data:k,readOnly:"maintain"===l.lifecycle,onApprove:C??(()=>void 0),onReject:S,isProcessing:!!(T||O),isRejecting:$,chatInput:F,onChatInputChange:L}):(0,t.jsx)("div",{className:"flex items-center justify-center p-8",children:T?(0,t.jsx)(i.Loader2,{className:"text-muted-foreground h-6 w-6 animate-spin"}):(0,t.jsxs)("div",{className:"text-muted-foreground flex flex-col items-center gap-2 text-sm",children:[(0,t.jsx)(V.AlertCircle,{className:"h-6 w-6"}),(0,t.jsx)("span",{children:"Merge review data unavailable"})]})})}):null,Y.includes("chat")?(0,t.jsx)(en.TabsContent,{value:"chat",className:"mt-0 flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,t.jsx)(aI.ChatTab,{featureId:o,worktreePath:l.worktreePath})}):null]})})}function aE({onApprove:e,onReject:a,isProcessing:s,isRejecting:n,chatInput:l,onChatInputChange:i}){let{t:o}=(0,r.useTranslation)("web");return(0,t.jsx)(ew,{onReject:a,onApprove:e,approveLabel:o("featureDrawer.approvePlan"),revisionPlaceholder:"Ask AI to revise the plan...",isProcessing:s,isRejecting:n,chatInput:l,onChatInputChange:i})}var a$=e.i(77784),aF=e.i(33364),aL=e.i(43592);let aq=(0,h.createServerReference)("40e387901d7199377937e1111cd720e3707f700ab4",h.callServer,void 0,h.findSourceMapURL,"rebaseFeature");var aO=e.i(99045);function aB(e){return"exploring"===e.lifecycle?"prototype":"requirements"===e.lifecycle&&"action-required"===e.state?"prd-review":"implementation"===e.lifecycle&&"action-required"===e.state?"tech-decisions":"review"===e.lifecycle&&("action-required"===e.state||"error"===e.state)?"merge-review":"overview"}function aU(e,t,s,r,n,i){let[o,d]=(0,a.useState)(!1),c=(0,a.useRef)(s),u=(0,a.useRef)(r);return c.current=s,u.current=r,(0,a.useEffect)(()=>{if(u.current(),!e)return;let a=!1;return d(!0),t(e).then(e=>{a||c.current(e)}).catch(()=>{!a&&n&&l.toast.error(n)}).finally(()=>{a||d(!1)}),()=>{a=!0}},[e,t,n,i]),o}let aH=(0,h.createServerReference)("40ccbf0003479414de2e1a7a987e8bd098f3f379d9",h.callServer,void 0,h.findSourceMapURL,"getFeatureDrawerData"),aV=(0,h.createServerReference)("4098fd2d7e4966bf343312a50feb88af0db0496dac",h.callServer,void 0,h.findSourceMapURL,"getBranchSyncStatus"),aW=new Map,aG=(0,h.createServerReference)("702ed01ab8898cc35b2635e221d0ce16bac4a9cce7",h.callServer,void 0,h.findSourceMapURL,"updateFeaturePinnedConfig");function a_({view:e,urlTab:h,interactiveAgentEnabled:$=!0}){var F,L;let q,O,B,U,V,W,G=(0,T.useFeatureFlags)(),{t:_}=(0,r.useTranslation)("web"),K=(0,n.useRouter)(),Z=(0,R.useSoundAction)("reject"),[Q,J]=(0,a.useState)(e),[X,Y]=(0,a.useState)(()=>"feature"===e.type?ty(e.node):null),[ee,et]=(0,a.useState)(()=>"feature"===e.type?ty(e.node):null),[ea,es]=(0,a.useState)(!1),[er,en]=(0,a.useState)(null),el=(0,a.useRef)(null);(0,a.useEffect)(()=>{J(t=>"feature"===t.type&&"feature"===e.type&&t.node.featureId===e.node.featureId?{...e,node:{...t.node,...e.node}}:e)},[e]);let ei="feature"===Q.type?Q.node:null,eo=!!ei&&(F=ei.state,tv.has(F));(0,a.useEffect)(()=>{if("feature"!==Q.type||ea)return;let e=ty(Q.node),t=e?`${Q.node.featureId}:${e.agentType}:${e.modelId}`:`${Q.node.featureId}:none`,a=el.current!==t;el.current=t,Y(e),et(e),a&&en(null)},[Q,ea]);let{events:ed}=(0,A.useAgentEventsContext)(),ec=(0,a.useRef)(0);(0,a.useEffect)(()=>{if(ec.current>ed.length&&(ec.current=0),!ei||ed.length<=ec.current)return;let e=ed.slice(ec.current);for(let t of(ec.current=ed.length,(0,aO.resolveSseEventUpdates)(e)))t.featureId===ei.featureId&&"deleting"!==ei.state&&(void 0!==t.state||void 0!==t.lifecycle)&&J(e=>{if("feature"!==e.type)return e;let a={...e.node,...void 0!==t.state&&{state:t.state},...void 0!==t.lifecycle&&{lifecycle:t.lifecycle}};return{...e,node:a,initialTab:aB(a)}})},[ed,ei]);let eu=(0,n.usePathname)().startsWith("/feature/");L=ei?.featureId??null,q=(0,a.useRef)(eu),O=(0,a.useRef)(!1),B=(0,a.useRef)(0),U=(0,a.useCallback)(async()=>{if(!L||O.current)return;O.current=!0;let e=B.current;try{let t=await aH(L);if(!t||e!==B.current)return;J(e=>(function(e,t){if("feature"!==e.type)return e;let a={...e.node,...t},s=a.state!==e.node.state||a.lifecycle!==e.node.lifecycle;return{...e,node:a,initialTab:s?aB(a):e.initialTab}})(e,t))}catch{}finally{O.current=!1}},[L,J]),V=(0,a.useRef)(!1),(0,a.useEffect)(()=>{!eu||q.current&&V.current||(V.current=!0,B.current+=1,O.current=!1,U()),q.current=eu},[eu,U]),(0,a.useEffect)(()=>{if(!eu||!L)return;let e=setInterval(()=>{U()},15e3);return()=>clearInterval(e)},[eu,L,U]);let ex=(0,a.useCallback)(()=>{K.push("/")},[K]),[em,ep]=(0,a.useState)(""),[eh,ef]=(0,a.useState)(null),[eg,eb]=(0,a.useState)({}),[ej,ev]=(0,a.useState)({}),[ey,eN]=(0,a.useState)(null),[ew,ek]=(0,a.useState)(void 0),[eC,eS]=(0,a.useState)(null),[eT,eR]=(0,a.useState)(!1),[eM,eI]=(0,a.useState)(!1),[eA,eP]=(0,a.useState)(!1),eD=`${ei?.featureId}:${ei?.state}`,ez=(0,a.useRef)(eD);(0,a.useEffect)(()=>{eD!==ez.current&&(ez.current=eD,eP(!1))},[eD]);let[eE,e$]=(0,a.useState)(!1),[eF,eL]=(0,a.useState)(!1),eq=(0,a.useRef)(!1),eO="feature"===Q.type?Q.initialTab:void 0;(0,a.useEffect)(()=>{ep("")},[eO]);let eB=(0,a.useRef)(0),eU=(0,a.useRef)(ei?.state),eH=(0,a.useRef)(ei?.lifecycle);(ei?.state!==eU.current||ei?.lifecycle!==eH.current)&&(eU.current=ei?.state,eH.current=ei?.lifecycle,eB.current+=1);let eV=eB.current,eW=aU(ei?.lifecycle==="requirements"&&ei?.state==="action-required"?ei.featureId:null,k,e=>{if(e.error)return void l.toast.error(e.error);if(e.questionnaire){ef(e.questionnaire);let t={};for(let a of e.questionnaire.questions){let e=a.options.find(e=>e.recommended);e&&(t[a.id]=e.id)}eb(t),ev(t)}},()=>{eb({}),ev({}),ef(null)},"Failed to load questionnaire",eV),eG=ei?.lifecycle==="implementation"&&ei?.state==="action-required"?ei.featureId:null,e_=aU(eG,C,e=>{e.error?l.toast.error(e.error):e.techDecisions&&eN(e.techDecisions)},()=>eN(null),"Failed to load tech decisions",eV),eK=aU(eG,k,e=>{e.productDecisions&&ek(e.productDecisions)},()=>ek(void 0),void 0,eV),eZ=aU(ei?.lifecycle==="review"&&(ei?.state==="action-required"||ei?.state==="error")||ei?.lifecycle==="maintain"&&ei?.pr?ei.featureId:null,S,e=>{"error"in e?l.toast.error(e.error):eS(e)},()=>eS(null),"Failed to load merge review data",eV),eQ=em.trim().length>0,eJ=ei?.lifecycle==="requirements"&&ei?.state==="action-required"&&Object.keys(ej).some(e=>ej[e]!==eg[e]),eX=(0,a.useCallback)(()=>{ep(""),eb({...ej})},[ej]),{attemptClose:eY}=(0,M.useGuardedDrawerClose)({open:eu,isDirty:eQ||eJ,onClose:ex,onReset:eX}),e0=(0,a.useCallback)(async(e,t,a=[],s)=>{if(!ea&&ei?.featureId){eq.current=!0,eL(!0);try{let r=a.map(e=>e.path).filter(Boolean),n=a.filter(e=>e.notes?.trim()),i=n.length>0?`${e}
3
-
4
- Image notes:
5
- ${n.map(e=>`- @${e.path}: ${e.notes.trim()}`).join("\n")}`:e,o=await v(ei.featureId,i,r);if(!o.rejected)return void l.toast.error(o.error??`Failed to reject ${t.toLowerCase()}`);Z.play(),ep(""),l.toast.success(`${t} rejected — agent re-iterating (iteration ${o.iteration})`),o.iterationWarning&&l.toast.warning(`Iteration ${o.iteration} — consider approving or adjusting feedback to avoid excessive iterations`),window.dispatchEvent(new CustomEvent("shep:feature-approved",{detail:{featureId:ei.featureId}})),ex(),s?.()}finally{eq.current=!1,eL(!1)}}},[ei,ex,ea,Z]),e1=(0,a.useCallback)((e,t)=>e0(e,"Requirements",t,()=>eb({})),[e0]),e2=(0,a.useCallback)((e,t)=>e0(e,"Plan",t),[e0]),e5=(0,a.useCallback)((e,t)=>e0(e,"Merge",t),[e0]),e3=(0,a.useCallback)(async e=>{if(ea||!ei?.featureId)return;let t=await f(ei.featureId);t.approved?(ep(""),l.toast.success(`${e} approved — agent resuming`),window.dispatchEvent(new CustomEvent("shep:feature-approved",{detail:{featureId:ei.featureId}})),ex()):l.toast.error(t.error??`Failed to approve ${e.toLowerCase()}`)},[ei,ex,ea]),e4=(0,a.useCallback)(async e=>{let t;if(ea||"feature"!==Q.type||!ei)return;if(eh){let e=[];for(let[t,a]of Object.entries(eg)){let s=eh.questions.find(e=>e.id===t),r=s?.options.find(e=>e.id===a);s&&r&&e.push({questionId:s.question,selectedOption:r.label})}t={approved:!0,changedSelections:e}}let a=await f(ei.featureId,t);a.approved?(ep(""),l.toast.success("Requirements approved — agent resuming"),window.dispatchEvent(new CustomEvent("shep:feature-approved",{detail:{featureId:ei.featureId}})),eb({}),ex()):l.toast.error(a.error??"Failed to approve requirements")},[Q,ei,ea,eh,eg,ex]),e6=(0,a.useCallback)(()=>e3("Plan"),[e3]),e8=(0,a.useCallback)(()=>e3("Merge"),[e3]),e7=(0,a.useCallback)(async(e,t,a,s)=>{eR(!0),eI(!1),window.dispatchEvent(new CustomEvent("shep:feature-delete-requested",{detail:{featureId:e,cleanup:t,cascadeDelete:a,closePr:s}})),K.push("/")},[K]),e9=(0,a.useCallback)(e=>{eP(!0),window.dispatchEvent(new CustomEvent("shep:feature-archive-requested",{detail:{featureId:e}})),K.push("/")},[K]),te=(0,a.useCallback)(e=>{eP(!0),window.dispatchEvent(new CustomEvent("shep:feature-unarchive-requested",{detail:{featureId:e}})),K.push("/")},[K]),tt=(0,a.useCallback)(async e=>{if(ea)return;let t=await (0,g.resumeFeature)(e);t.error?l.toast.error(t.error):(l.toast.success("Feature resumed — agent restarting"),window.dispatchEvent(new CustomEvent("shep:feature-approved",{detail:{featureId:e}})),J(e=>"feature"!==e.type?e:{...e,node:{...e.node,state:"running"}}))},[ea]),ta=(0,a.useCallback)(async e=>{let t=await (0,j.stopFeature)(e);t.stopped?(l.toast.success("Agent stopped"),J(e=>"feature"!==e.type?e:{...e,node:{...e.node,state:"error"}})):l.toast.error(t.error??"Failed to stop")},[]),ts=(0,a.useCallback)(async e=>{if(ea)return;let t=await (0,b.startFeature)(e);t.error?l.toast.error(t.error):(l.toast.success("Feature started"),J(e=>"feature"!==e.type?e:{...e,node:{...e.node,state:"running"}}))},[ea]),tr=(0,a.useCallback)(async(e,t)=>{var a;if(!ei)return{ok:!1,error:"Feature is not loaded"};if(a=ei.state,!tv.has(a))return{ok:!1,error:"Pinned execution can only be changed before start, approval, or retry"};let s=ee??ty(ei),r={agentType:e,modelId:t};Y(r),en(null),es(!0);try{let a=await aG(ei.featureId,e,t);if(!a.ok){let e=a.error??"Failed to save pinned config";return Y(s),en(e),l.toast.error(e),{ok:!1,error:e}}return et(r),J(e=>"feature"!==e.type||e.node.featureId!==ei.featureId?e:{...e,node:{...e.node,agentType:r.agentType,modelId:t}}),{ok:!0}}catch(t){let e=t instanceof Error?t.message:"Failed to save pinned config";return Y(s),en(e),l.toast.error(e),{ok:!1,error:e}}finally{es(!1)}},[ei,ee]),tn=(0,a.useCallback)(async e=>{if(ei?.featureId){e$(!0);try{let t=await y(ei.featureId,e);if(!t.submitted)return void l.toast.error(t.error??"Failed to submit feedback");l.toast.success(`Feedback sent — generating iteration ${(t.iteration??0)+1}`),window.dispatchEvent(new CustomEvent("shep:feature-approved",{detail:{featureId:ei.featureId}}))}finally{e$(!1)}}},[ei]),tl=(0,a.useCallback)(async e=>{if(ei?.featureId){e$(!0);try{let t=await N(ei.featureId,e);if(t.error)return void l.toast.error(t.error);l.toast.success(`Exploration promoted to ${"Fast"===e?"fast":"regular"} mode`),window.dispatchEvent(new CustomEvent("shep:feature-approved",{detail:{featureId:ei.featureId}}))}finally{e$(!1)}}},[ei]),ti=(0,a.useCallback)(async()=>{if(ei?.featureId){e$(!0);try{let e=await w(ei.featureId);if(!e.discarded)return void l.toast.error(e.error??"Failed to discard exploration");l.toast.success("Exploration discarded"),window.dispatchEvent(new CustomEvent("shep:feature-delete-requested",{detail:{featureId:ei.featureId,cleanup:!0}})),K.push("/")}finally{e$(!1)}}},[ei,K]),to=ei?.repositoryPath&&ei?.branch?{featureId:ei.featureId,repositoryPath:ei.repositoryPath,branch:ei.branch,worktreePath:ei.worktreePath,specPath:ei.specPath}:null,td=function(e){let[t,s]=(0,a.useState)(!1),[r,n]=(0,a.useState)(!1),[l,i]=(0,a.useState)(!1),[o,d]=(0,a.useState)(!1),[c,u]=(0,a.useState)(!1),[x,m]=(0,a.useState)(null),[p,h]=(0,a.useState)(null),[f,g]=(0,a.useState)(null),[b,j]=(0,a.useState)(null),[v,y]=(0,a.useState)(null),N=(0,a.useRef)(null),w=(0,a.useRef)(null),k=(0,a.useRef)(null),C=(0,a.useRef)(null),S=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=[N,w,k,C,S];return()=>{for(let t of e)t.current&&clearTimeout(t.current)}},[]);let T=(0,a.useCallback)(async(t,a,s,r,n)=>{if(e&&!n){r.current&&clearTimeout(r.current),a(!0),s(null);try{let a=await t({repositoryPath:e.repositoryPath,branch:e.branch});if(!a.success){let e=a.error??"An unexpected error occurred";s(e),r.current=setTimeout(()=>s(null),5e3)}}catch(e){s(e instanceof Error?e.message:"An unexpected error occurred"),r.current=setTimeout(()=>s(null),5e3)}finally{a(!1)}}},[e]);return{openInIde:(0,a.useCallback)(()=>T(a$.openIde,s,m,N,t),[T,t]),openInShell:(0,a.useCallback)(()=>T(aF.openShell,n,h,w,r),[T,r]),openFolder:(0,a.useCallback)(async()=>{if(e&&!l){k.current&&clearTimeout(k.current),i(!0),g(null);try{let t=e.worktreePath??e.repositoryPath,a=await (0,aL.openFolder)(t);if(!a.success){let e=a.error??"An unexpected error occurred";g(e),k.current=setTimeout(()=>g(null),5e3)}}catch(e){g(e instanceof Error?e.message:"An unexpected error occurred"),k.current=setTimeout(()=>g(null),5e3)}finally{i(!1)}}},[e,l]),openSpecsFolder:(0,a.useCallback)(async()=>{if(e?.specPath&&!o){C.current&&clearTimeout(C.current),d(!0),j(null);try{let t=await (0,aL.openFolder)(e.specPath);if(!t.success){let e=t.error??"An unexpected error occurred";j(e),C.current=setTimeout(()=>j(null),5e3)}}catch(e){j(e instanceof Error?e.message:"An unexpected error occurred"),C.current=setTimeout(()=>j(null),5e3)}finally{d(!1)}}},[e,o]),rebaseOnMain:(0,a.useCallback)(async()=>{if(e?.featureId&&!c){S.current&&clearTimeout(S.current),u(!0),y(null);try{let t=await aq(e.featureId);if(!t.success){let e=t.error??"An unexpected error occurred";y(e),S.current=setTimeout(()=>y(null),5e3)}}catch(e){y(e instanceof Error?e.message:"An unexpected error occurred"),S.current=setTimeout(()=>y(null),5e3)}finally{u(!1)}}},[e,c]),ideLoading:t,shellLoading:r,folderLoading:l,specsLoading:o,rebaseLoading:c,ideError:x,shellError:p,folderError:f,specsError:b,rebaseError:v}}(to),tc=G.gitRebaseSync&&ei?.branch&&ei?.remoteUrl?ei.featureId:null,{data:tu,loading:tx,error:tm,refresh:tp}=function(e){let[t,s]=(0,a.useState)(()=>{if(!e)return null;let t=aW.get(e);return t?t.data:null}),[r,n]=(0,a.useState)(!1),[l,i]=(0,a.useState)(null),o=(0,a.useRef)(e);o.current=e;let d=(0,a.useCallback)(async e=>{n(!0),i(null);try{let t=await aV(e);if(o.current!==e)return;if(t.success&&t.data){let a=t.data;aW.set(e,{data:a,timestamp:Date.now()}),s(a)}else i(t.error??"Failed to check sync status")}catch{if(o.current!==e)return;i("Failed to check sync status")}finally{o.current===e&&n(!1)}},[]);return(0,a.useEffect)(()=>{if(!e){s(null),i(null);return}let t=aW.get(e);t&&(s(t.data),Date.now()-t.timestamp<3e4)||d(e)},[e,d]),{data:t,loading:r,error:l,refresh:(0,a.useCallback)(()=>{e&&d(e)},[e,d])}}(tc),th=(0,a.useRef)(td.rebaseLoading);(0,a.useEffect)(()=>{!th.current||td.rebaseLoading||td.rebaseError||tp(),th.current=td.rebaseLoading},[td.rebaseLoading,td.rebaseError,tp]);let tf=ei?.repositoryPath&&ei.branch?{targetId:ei.featureId,targetType:"feature",repositoryPath:ei.repositoryPath,branch:ei.branch}:null,tg=(0,I.useDeployAction)(tf),tb="Booting"===tg.status||"Ready"===tg.status,[tj,tN]=(0,a.useState)(!1),tw=(0,a.useCallback)(()=>{ei?.featureId&&(navigator.clipboard.writeText(ei.featureId),tN(!0),setTimeout(()=>tN(!1),2e3))},[ei?.featureId]);if(ei){let e=ei.featureId.slice(0,8),a="text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-8 items-center justify-center rounded-[3px] disabled:opacity-40",r="bg-border/60 mx-1.5 h-5 w-px shrink-0";W=(0,t.jsx)("div",{"data-testid":"feature-drawer-toolbar",children:(0,t.jsxs)("div",{className:"flex h-10 items-center px-2","data-testid":"feature-drawer-actions",children:[to&&ei?.state!=="done"?(0,t.jsx)(H,{actions:td,repositoryPath:to.repositoryPath,worktreePath:to.worktreePath,showSpecs:!!to.specPath}):null,to&&ei?.state!=="done"&&G.envDeploy&&tf?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:r}),(0,t.jsx)(z.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",disabled:tg.deployLoading||tg.stopLoading,onClick:tb?tg.stop:tg.deploy,className:(0,s.cn)("inline-flex size-7 items-center justify-center rounded-[3px] disabled:opacity-40",tb?"text-red-500 hover:bg-red-500/10 hover:text-red-400":"text-green-600 hover:bg-green-500/10 dark:text-green-500"),"aria-label":_(tb?"featureDrawer.stopDevServer":"featureDrawer.startDevServer"),children:tg.deployLoading||tg.stopLoading?(0,t.jsx)(i.Loader2,{className:"size-4 animate-spin"}):tb?(0,t.jsx)(c.Square,{className:"size-4"}):(0,t.jsx)(d.Play,{className:"size-4"})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:_(tb?"featureDrawer.stopDevServer":"featureDrawer.startDevServer")})]})}),tb?(0,t.jsx)(D.DeploymentStatusBadge,{status:tg.status,url:tg.url,targetId:tf?.targetId}):null]}):null,(0,t.jsx)("div",{className:"flex-1"}),(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)("code",{className:"text-muted-foreground/70 font-mono text-[10px] tracking-wide select-none",children:e}),(0,t.jsx)(z.TooltipProvider,{delayDuration:300,children:(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",onClick:tw,className:a,"aria-label":_("featureDrawer.copyFeatureId"),"data-testid":"feature-drawer-copy-id",children:tj?(0,t.jsx)(x.Check,{className:"size-4 text-green-500"}):(0,t.jsx)(u.Copy,{className:"size-4"})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:_("featureDrawer.copyFeatureId")})]})}),ei.featureId?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:r}),(0,t.jsxs)(z.TooltipProvider,{delayDuration:300,children:["archived"===ei.state?(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",disabled:eA,className:a,"data-testid":"feature-drawer-unarchive",onClick:()=>te(ei.featureId),children:eA?(0,t.jsx)(i.Loader2,{className:"size-4 animate-spin"}):(0,t.jsx)(p.ArchiveRestore,{className:"size-3"})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:_("featureDrawer.unarchiveFeature")})]}):"deleting"!==ei.state?(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",disabled:eA,className:a,"data-testid":"feature-drawer-archive",onClick:()=>e9(ei.featureId),children:eA?(0,t.jsx)(i.Loader2,{className:"size-4 animate-spin"}):(0,t.jsx)(m.Archive,{className:"size-3"})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:_("featureDrawer.archiveFeature")})]}):null,(0,t.jsxs)(z.Tooltip,{children:[(0,t.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("button",{type:"button",disabled:eT,className:(0,s.cn)(a,"hover:bg-destructive/10 hover:text-destructive"),"data-testid":"feature-drawer-delete",onClick:()=>eI(!0),children:eT?(0,t.jsx)(i.Loader2,{className:"size-4 animate-spin"}):(0,t.jsx)(o.Trash2,{className:"size-3"})})}),(0,t.jsx)(z.TooltipContent,{side:"bottom",className:"text-xs",children:_("featureDrawer.deleteFeature")})]})]}),(0,t.jsx)(E.DeleteFeatureDialog,{open:eM,onOpenChange:eI,onConfirm:(e,t,a)=>e7(ei.featureId,e,t,a),isDeleting:eT,featureName:ei.name,featureId:ei.featureId,hasChildren:ei.hasChildren,hasOpenPr:!!ei.pr&&"Open"===ei.pr.status})]}):null]})]})})}let tk=null;if("feature"===Q.type&&ei){let e={...ei,..."error"===ei.state&&{onRetry:tt},..."pending"===ei.state&&{onStart:ts}};tk=(0,t.jsx)(az,{featureName:ei.name,headerContent:W,featureNode:e,featureId:ei.featureId,initialTab:Q.initialTab,urlTab:h,sseEvents:ed,prdData:eh,prdSelections:eg,onPrdSelect:(e,t)=>eb(a=>({...a,[e]:t})),onPrdApprove:e4,onPrdReject:e1,isPrdLoading:eW,techData:ey,onTechApprove:e6,onTechReject:e2,isTechLoading:e_,productData:eK?null:ew,mergeData:eC,onMergeApprove:e8,onMergeReject:e5,isMergeLoading:eZ,syncStatus:tc?tu:void 0,syncLoading:tx,syncError:tm,onRefreshSync:tc?tp:void 0,onRebaseOnMain:tc?td.rebaseOnMain:void 0,rebaseLoading:td.rebaseLoading,rebaseError:td.rebaseError,isRejecting:eF,chatInput:em,onChatInputChange:ep,pinnedConfig:eo&&X?{...X,saving:ea,error:er,onSave:tr}:void 0,continuationActionsDisabled:ea,onSubmitFeedback:tn,onPromote:tl,onDiscardExploration:ti,isPrototypeSubmitting:eE,interactiveAgentEnabled:$,onRetry:tt,onStop:ta,onStart:ts})}return(0,t.jsx)(P.BaseDrawer,{open:eu,onClose:eY,size:"lg",modal:!1,"data-testid":"feature"===Q.type?"feature-drawer":"repository-drawer",children:tk})}e.s(["FeatureDrawerClient",()=>a_],36986)}]);