@shipit-ai/cli 1.168.0 → 1.169.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 (232) hide show
  1. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts +3 -3
  2. package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
  3. package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +23 -102
  4. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +2 -3
  5. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
  6. package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +18 -22
  7. package/dist/src/presentation/web/components/features/settings/ci-settings-section.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/features/settings/ci-settings-section.js +14 -5
  9. package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map +1 -1
  10. package/dist/src/presentation/web/components/features/settings/database-settings-section.js +14 -4
  11. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +9 -3
  12. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
  13. package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +75 -65
  14. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  15. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +20 -18
  16. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.d.ts.map +1 -1
  17. package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.js +1 -1
  18. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts +3 -3
  19. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
  20. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +48 -50
  21. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +25 -25
  23. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.js +3 -3
  25. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts +3 -3
  26. package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +64 -47
  28. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +32 -24
  30. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  31. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +27 -378
  32. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +2 -0
  33. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +13 -0
  35. package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts +8 -8
  36. package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/features/settings/settings-section-utils.js +3 -6
  38. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
  39. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
  40. package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +7 -7
  41. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.d.ts.map +1 -1
  42. package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.js +1 -1
  43. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts +3 -3
  44. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +118 -165
  46. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
  47. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +26 -64
  49. package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -1
  50. package/dist/src/presentation/web/components/ui/tooltip.js +3 -3
  51. package/dist/translations/ar/web.json +1 -0
  52. package/dist/translations/de/web.json +1 -0
  53. package/dist/translations/en/web.json +1 -0
  54. package/dist/translations/es/web.json +1 -0
  55. package/dist/translations/fr/web.json +1 -0
  56. package/dist/translations/he/web.json +1 -0
  57. package/dist/translations/pt/web.json +1 -0
  58. package/dist/translations/ru/web.json +1 -0
  59. package/dist/tsconfig.build.tsbuildinfo +1 -1
  60. package/package.json +1 -1
  61. package/web/.next/BUILD_ID +1 -1
  62. package/web/.next/build-manifest.json +3 -3
  63. package/web/.next/fallback-build-manifest.json +3 -3
  64. package/web/.next/prerender-manifest.json +3 -3
  65. package/web/.next/required-server-files.js +2 -2
  66. package/web/.next/required-server-files.json +2 -2
  67. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  68. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  71. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
  74. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  77. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  83. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  86. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  89. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
  92. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  98. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  101. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  102. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  104. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  107. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/_global-error.html +1 -1
  110. package/web/.next/server/app/_global-error.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  116. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  117. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  118. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
  120. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  121. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  123. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  124. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  126. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  127. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  129. package/web/.next/server/app/version/page.js.nft.json +1 -1
  130. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  132. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  133. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  135. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  137. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  139. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/{_08_079y._.js → _01qdxy2._.js} +2 -2
  159. package/web/.next/server/chunks/ssr/{_08_079y._.js.map → _01qdxy2._.js.map} +1 -1
  160. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  161. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
  163. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
  165. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
  167. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/_0a_8rlj._.js +3 -0
  169. package/web/.next/server/chunks/ssr/{_0mi5qj~._.js.map → _0a_8rlj._.js.map} +1 -1
  170. package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
  171. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
  173. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/_0n.magx._.js +1 -1
  175. package/web/.next/server/chunks/ssr/_0n.magx._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
  177. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/{_0txr945._.js → _0pa1dkv._.js} +2 -2
  179. package/web/.next/server/chunks/ssr/_0pa1dkv._.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  187. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/{_0r04xhw._.js → _0wor25i._.js} +2 -2
  189. package/web/.next/server/chunks/ssr/{_0r04xhw._.js.map → _0wor25i._.js.map} +1 -1
  190. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
  191. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
  195. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
  199. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  203. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  204. package/web/.next/server/middleware-build-manifest.js +3 -3
  205. package/web/.next/server/pages/500.html +1 -1
  206. package/web/.next/server/server-reference-manifest.js +1 -1
  207. package/web/.next/server/server-reference-manifest.json +50 -50
  208. package/web/.next/static/chunks/{01znjuvi5t9~q.js → 00m_fbc2z1gyi.js} +3 -3
  209. package/web/.next/static/chunks/{0ygtupas8pxdi.js → 09f2lesd_dd3~.js} +1 -1
  210. package/web/.next/static/chunks/0c0dau5pmseko.js +1 -0
  211. package/web/.next/static/chunks/{078lp287u~c~b.js → 0dq50gtgaj63f.js} +1 -1
  212. package/web/.next/static/chunks/{06nsv-_ec9ehn.js → 0k0j7anrbg-of.js} +1 -1
  213. package/web/.next/static/chunks/{17c31c1biwfyi.js → 0o33urrd3lk~u.js} +1 -1
  214. package/web/.next/static/chunks/0u_27fdqa2jeg.js +1 -0
  215. package/web/.next/static/chunks/0xwh.0u-dexsl.js +1 -0
  216. package/web/.next/static/chunks/0yibymrb2j05t.css +1 -0
  217. package/web/.next/static/chunks/103xnw203o9k1.js +1 -0
  218. package/web/.next/static/chunks/{0cv09-g0prv4o.js → 11vbir.u7_zf7.js} +1 -1
  219. package/web/.next/static/chunks/{133q8d69p6cl0.js → 121v1_d_dfk2k.js} +1 -1
  220. package/web/.next/static/chunks/{0_xww9bsde~1x.js → 12axopx66pocj.js} +1 -1
  221. package/web/.next/static/chunks/{0hg8qgtv~kuys.js → 183ehj-b80a~o.js} +1 -1
  222. package/web/.next/static/chunks/{0_v4t6gzx.332.js → 1874_wt9rit96.js} +1 -1
  223. package/web/.next/server/chunks/ssr/_0mi5qj~._.js +0 -3
  224. package/web/.next/server/chunks/ssr/_0txr945._.js.map +0 -1
  225. package/web/.next/static/chunks/033sl_l5o3uo8.css +0 -1
  226. package/web/.next/static/chunks/04r9m_5p953mf.js +0 -1
  227. package/web/.next/static/chunks/07i3-aamszsoh.js +0 -1
  228. package/web/.next/static/chunks/0ee1d3_y40g9f.js +0 -1
  229. package/web/.next/static/chunks/15mks7_3venc1.js +0 -1
  230. /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → SNdaKJ9fpre8tUMRe1jlA}/_buildManifest.js +0 -0
  231. /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → SNdaKJ9fpre8tUMRe1jlA}/_clientMiddlewareManifest.js +0 -0
  232. /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → SNdaKJ9fpre8tUMRe1jlA}/_ssgManifest.js +0 -0
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { fn } from 'storybook/test';
3
3
  import { Settings } from 'lucide-react';
4
- import { SettingsRow, SwitchRow, SettingsSection, NumberStepper, SubsectionLabel, SectionHint, } from './settings-section-utils.js';
4
+ import { SettingsRow, SwitchRow, SettingsSection, NumberStepper, SubsectionLabel, } from './settings-section-utils.js';
5
5
  /**
6
6
  * settings-section-utils exports multiple reusable settings row components.
7
7
  * Stories demonstrate each component individually and in composition.
@@ -13,7 +13,10 @@ function SwitchRowDemo() {
13
13
  return (_jsx("div", { className: "w-96 rounded-lg border", children: _jsxs("div", { className: "px-4", children: [_jsx(SwitchRow, { label: "Auto-save", description: "Automatically save changes", id: "auto-save", testId: "switch-auto-save", checked: true, onChange: fn() }), _jsx(SwitchRow, { label: "Notifications", id: "notifications", testId: "switch-notifications", checked: false, onChange: fn() }), _jsx(SwitchRow, { label: "Experimental features", description: "Enable unstable features (may cause issues)", id: "experimental", testId: "switch-experimental", checked: false, onChange: fn(), disabled: true })] }) }));
14
14
  }
15
15
  function SettingsSectionDemo() {
16
- return (_jsx("div", { className: "w-96", children: _jsxs(SettingsSection, { icon: Settings, title: "General Settings", description: "Configure general application behavior", testId: "general-settings", children: [_jsx(SwitchRow, { label: "Show tooltips", id: "tooltips", testId: "switch-tooltips", checked: true, onChange: fn() }), _jsx(SwitchRow, { label: "Compact mode", id: "compact", testId: "switch-compact", checked: false, onChange: fn() })] }) }));
16
+ return (_jsx("div", { className: "w-96", children: _jsxs(SettingsSection, { icon: Settings, title: "General Settings", description: "Configure general application behavior", testId: "general-settings", tooltip: "Configure the agent model used for all AI-powered operations. Changes take effect on the next agent run.", tooltipLinks: [
17
+ { label: 'Documentation', href: 'https://docs.example.com' },
18
+ { label: 'Getting started guide', href: 'https://docs.example.com/start' },
19
+ ], children: [_jsx(SwitchRow, { label: "Show tooltips", id: "tooltips", testId: "switch-tooltips", checked: true, onChange: fn() }), _jsx(SwitchRow, { label: "Compact mode", id: "compact", testId: "switch-compact", checked: false, onChange: fn() })] }) }));
17
20
  }
18
21
  function NumberStepperDemo() {
19
22
  return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx(NumberStepper, { id: "timeout", testId: "stepper-timeout", value: "30", onChange: fn(), onBlur: fn(), placeholder: "30", min: 1, max: 300, suffix: "seconds" }), _jsx(NumberStepper, { id: "retries", testId: "stepper-retries", value: "3", onChange: fn(), onBlur: fn(), placeholder: "3", min: 0, max: 10 })] }));
@@ -40,9 +43,6 @@ export const NumberSteppers = {
40
43
  export const SubsectionLabelExample = {
41
44
  render: () => (_jsxs("div", { className: "w-80 rounded-lg border px-4", children: [_jsx(SubsectionLabel, { children: "Advanced Options" }), _jsx("div", { className: "text-muted-foreground py-2 text-sm", children: "Content below subsection label" }), _jsx(SubsectionLabel, { children: "Developer Options" }), _jsx("div", { className: "text-muted-foreground py-2 text-sm", children: "More content here" })] })),
42
45
  };
43
- export const SectionHintExample = {
44
- render: () => (_jsx("div", { className: "w-80", children: _jsx(SectionHint, { links: [
45
- { label: 'Documentation', href: 'https://docs.example.com' },
46
- { label: 'Getting started guide', href: 'https://docs.example.com/start' },
47
- ], children: "Configure the agent model used for all AI-powered operations. Changes take effect on the next agent run." }) })),
46
+ export const SectionWithTooltip = {
47
+ render: () => _jsx(SettingsSectionDemo, {}),
48
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stage-timeouts-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/stage-timeouts-settings-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED,wBAAgB,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,2CA4N3F"}
1
+ {"version":3,"file":"stage-timeouts-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/stage-timeouts-settings-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED,wBAAgB,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,2CA6N3F"}
@@ -77,7 +77,7 @@ export function StageTimeoutsSettingsSection({ settings }) {
77
77
  }
78
78
  });
79
79
  }
80
- return (_jsxs(SettingsSection, { icon: Timer, title: t('settings.stageTimeouts.title'), description: t('settings.stageTimeouts.description'), testId: "stage-timeouts-settings-section", children: [_jsx(SubsectionLabel, { children: t('settings.stageTimeouts.subsections.featureAgent') }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.analyze'), description: t('settings.stageTimeouts.analyzeDescription'), htmlFor: "timeout-analyze", children: _jsx(TimeoutSlider, { id: "timeout-analyze", testId: "timeout-analyze-input", value: analyzeTimeout, onChange: setAnalyzeTimeout, onBlur: () => {
80
+ return (_jsxs(SettingsSection, { icon: Timer, title: t('settings.stageTimeouts.title'), description: t('settings.stageTimeouts.description'), testId: "stage-timeouts-settings-section", tooltip: t('settings.stageTimeouts.hint'), children: [_jsx(SubsectionLabel, { children: t('settings.stageTimeouts.subsections.featureAgent') }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.analyze'), description: t('settings.stageTimeouts.analyzeDescription'), htmlFor: "timeout-analyze", children: _jsx(TimeoutSlider, { id: "timeout-analyze", testId: "timeout-analyze-input", value: analyzeTimeout, onChange: setAnalyzeTimeout, onBlur: () => {
81
81
  if (analyzeTimeout !== originalAnalyzeTimeout)
82
82
  save(buildPayload({ analyzeTimeout }));
83
83
  }, defaultSeconds: 1800 }) }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.requirements'), description: t('settings.stageTimeouts.requirementsDescription'), htmlFor: "timeout-requirements", children: _jsx(TimeoutSlider, { id: "timeout-requirements", testId: "timeout-requirements-input", value: requirementsTimeout, onChange: setRequirementsTimeout, onBlur: () => {
@@ -1,6 +1,6 @@
1
- import type { WorkflowConfig } from '../../../../../../packages/core/src/domain/generated/output.js';
1
+ import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
2
2
  export interface WorkflowSettingsSectionProps {
3
- workflow: WorkflowConfig;
3
+ settings: Settings;
4
4
  }
5
- export declare function WorkflowSettingsSection({ workflow }: WorkflowSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function WorkflowSettingsSection({ settings }: WorkflowSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=workflow-settings-section.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CA+ejF"}
1
+ {"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AASxE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAsDD,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAsOjF"}
@@ -1,178 +1,131 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useTransition, useRef, useEffect } from 'react';
4
- import { GitBranch, Check } from 'lucide-react';
3
+ import { useState, useTransition } from 'react';
4
+ import { GitBranch } from 'lucide-react';
5
5
  import { toast } from 'sonner';
6
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../ui/card.js';
7
- import { Label } from '../../ui/label.js';
8
- import { Input } from '../../ui/input.js';
9
- import { Switch } from '../../ui/switch.js';
10
- import { Separator } from '../../ui/separator.js';
6
+ import { useTranslation } from 'react-i18next';
11
7
  import { updateSettingsAction } from '../../../app/actions/update-settings.js';
12
- import { TimeoutSlider } from '../../features/settings/timeout-slider.js';
13
- export function WorkflowSettingsSection({ workflow }) {
14
- const [openPr, setOpenPr] = useState(workflow.openPrOnImplementationComplete);
15
- const [pushOnComplete, setPushOnComplete] = useState(workflow.approvalGateDefaults.pushOnImplementationComplete);
16
- const [allowPrd, setAllowPrd] = useState(workflow.approvalGateDefaults.allowPrd);
17
- const [allowPlan, setAllowPlan] = useState(workflow.approvalGateDefaults.allowPlan);
18
- const [allowMerge, setAllowMerge] = useState(workflow.approvalGateDefaults.allowMerge);
19
- const [ciWatchEnabled, setCiWatchEnabled] = useState(workflow.ciWatchEnabled !== false);
20
- const [ciMaxFix, setCiMaxFix] = useState(workflow.ciMaxFixAttempts != null ? String(workflow.ciMaxFixAttempts) : '');
21
- const [ciTimeout, setCiTimeout] = useState(workflow.ciWatchTimeoutMs != null ? String(Math.round(workflow.ciWatchTimeoutMs / 1000)) : '');
22
- const [ciLogMax, setCiLogMax] = useState(workflow.ciLogMaxChars != null ? String(workflow.ciLogMaxChars) : '');
23
- const [ciPollInterval, setCiPollInterval] = useState(workflow.ciWatchPollIntervalSeconds != null ? String(workflow.ciWatchPollIntervalSeconds) : '');
24
- const [hideCiStatus, setHideCiStatus] = useState(workflow.hideCiStatus !== false);
25
- // Per-stage timeout states (seconds for display)
26
- // Defaults: feature agent stages = 1_800_000 ms (1800s), analyze-repo = 600_000 ms (600s)
27
- const st = workflow.stageTimeouts;
28
- const [analyzeTimeout, setAnalyzeTimeout] = useState(String(Math.round((st?.analyzeMs ?? 1_800_000) / 1000)));
29
- const [requirementsTimeout, setRequirementsTimeout] = useState(String(Math.round((st?.requirementsMs ?? 1_800_000) / 1000)));
30
- const [researchTimeout, setResearchTimeout] = useState(String(Math.round((st?.researchMs ?? 1_800_000) / 1000)));
31
- const [planTimeout, setPlanTimeout] = useState(String(Math.round((st?.planMs ?? 1_800_000) / 1000)));
32
- const [implementTimeout, setImplementTimeout] = useState(String(Math.round((st?.implementMs ?? 1_800_000) / 1000)));
33
- const [mergeTimeout, setMergeTimeout] = useState(String(Math.round((st?.mergeMs ?? 1_800_000) / 1000)));
34
- // Analyze-repo agent timeout state
35
- const art = workflow.analyzeRepoTimeouts;
36
- const [analyzeRepoTimeout, setAnalyzeRepoTimeout] = useState(String(Math.round((art?.analyzeMs ?? 600_000) / 1000)));
37
- const [isPending, startTransition] = useTransition();
38
- const [showSaved, setShowSaved] = useState(false);
39
- const prevPendingRef = useRef(false);
40
- useEffect(() => {
41
- if (prevPendingRef.current && !isPending) {
42
- setShowSaved(true);
43
- const timer = setTimeout(() => setShowSaved(false), 2000);
44
- return () => clearTimeout(timer);
45
- }
46
- prevPendingRef.current = isPending;
47
- }, [isPending]);
48
- function parseOptionalInt(value) {
49
- if (value === '')
50
- return undefined;
51
- const n = parseInt(value, 10);
52
- return Number.isNaN(n) || n <= 0 ? undefined : n;
53
- }
54
- function secondsToMs(val) {
55
- const n = parseOptionalInt(val);
56
- return n != null ? n * 1000 : undefined;
57
- }
58
- function buildPayload(overrides = {}) {
59
- const timeoutSeconds = parseOptionalInt(overrides.ciTimeout ?? ciTimeout);
60
- return {
61
- workflow: {
62
- openPrOnImplementationComplete: overrides.openPr ?? openPr,
63
- approvalGateDefaults: {
64
- pushOnImplementationComplete: overrides.pushOnComplete ?? pushOnComplete,
65
- allowPrd: overrides.allowPrd ?? allowPrd,
66
- allowPlan: overrides.allowPlan ?? allowPlan,
67
- allowMerge: overrides.allowMerge ?? allowMerge,
68
- },
69
- ciWatchEnabled: overrides.ciWatchEnabled ?? ciWatchEnabled,
70
- hideCiStatus: overrides.hideCiStatus ?? hideCiStatus,
71
- ciMaxFixAttempts: parseOptionalInt(overrides.ciMaxFix ?? ciMaxFix),
72
- ciWatchTimeoutMs: timeoutSeconds != null ? timeoutSeconds * 1000 : undefined,
73
- ciLogMaxChars: parseOptionalInt(overrides.ciLogMax ?? ciLogMax),
74
- ciWatchPollIntervalSeconds: parseOptionalInt(overrides.ciPollInterval ?? ciPollInterval),
75
- stageTimeouts: {
76
- analyzeMs: secondsToMs(overrides.analyzeTimeout ?? analyzeTimeout),
77
- requirementsMs: secondsToMs(overrides.requirementsTimeout ?? requirementsTimeout),
78
- researchMs: secondsToMs(overrides.researchTimeout ?? researchTimeout),
79
- planMs: secondsToMs(overrides.planTimeout ?? planTimeout),
80
- implementMs: secondsToMs(overrides.implementTimeout ?? implementTimeout),
81
- mergeMs: secondsToMs(overrides.mergeTimeout ?? mergeTimeout),
82
- },
83
- analyzeRepoTimeouts: {
84
- analyzeMs: secondsToMs(overrides.analyzeRepoTimeout ?? analyzeRepoTimeout),
85
- },
8
+ import { SettingsSection, SettingsRow, SwitchRow, NumberStepper, SubsectionLabel, } from './settings-section-utils.js';
9
+ function buildWorkflowPayload(state, overrides = {}) {
10
+ const archiveEnabled = overrides.autoArchiveEnabled ?? state.autoArchiveEnabled;
11
+ const archiveDelay = parseInt(overrides.autoArchiveDelay ?? state.autoArchiveDelay, 10);
12
+ return {
13
+ workflow: {
14
+ openPrOnImplementationComplete: overrides.openPr ?? state.openPr,
15
+ approvalGateDefaults: {
16
+ pushOnImplementationComplete: overrides.pushOnComplete ?? state.pushOnComplete,
17
+ allowPrd: overrides.allowPrd ?? state.allowPrd,
18
+ allowPlan: overrides.allowPlan ?? state.allowPlan,
19
+ allowMerge: overrides.allowMerge ?? state.allowMerge,
86
20
  },
21
+ enableEvidence: overrides.enableEvidence ?? state.enableEvidence,
22
+ commitEvidence: overrides.commitEvidence ?? state.commitEvidence,
23
+ ciWatchEnabled: overrides.ciWatchEnabled ?? state.ciWatchEnabled,
24
+ defaultFastMode: overrides.defaultFastMode ?? state.defaultFastMode,
25
+ autoArchiveDelayMinutes: archiveEnabled
26
+ ? Number.isNaN(archiveDelay) || archiveDelay < 1
27
+ ? 10
28
+ : archiveDelay
29
+ : 0,
30
+ },
31
+ };
32
+ }
33
+ export function WorkflowSettingsSection({ settings }) {
34
+ const { t } = useTranslation('web');
35
+ const [, startTransition] = useTransition();
36
+ const [openPr, setOpenPr] = useState(settings.workflow.openPrOnImplementationComplete);
37
+ const [pushOnComplete, setPushOnComplete] = useState(settings.workflow.approvalGateDefaults.pushOnImplementationComplete);
38
+ const [allowPrd, setAllowPrd] = useState(settings.workflow.approvalGateDefaults.allowPrd);
39
+ const [allowPlan, setAllowPlan] = useState(settings.workflow.approvalGateDefaults.allowPlan);
40
+ const [allowMerge, setAllowMerge] = useState(settings.workflow.approvalGateDefaults.allowMerge);
41
+ const [enableEvidence, setEnableEvidence] = useState(settings.workflow.enableEvidence);
42
+ const [commitEvidence, setCommitEvidence] = useState(settings.workflow.commitEvidence);
43
+ const [ciWatchEnabled, setCiWatchEnabled] = useState(settings.workflow.ciWatchEnabled !== false);
44
+ const [defaultFastMode, setDefaultFastMode] = useState(settings.workflow.defaultFastMode !== false);
45
+ const [autoArchiveEnabled, setAutoArchiveEnabled] = useState((settings.workflow.autoArchiveDelayMinutes ?? 10) > 0);
46
+ const [autoArchiveDelay, setAutoArchiveDelay] = useState(String(settings.workflow.autoArchiveDelayMinutes ?? 10));
47
+ function getState() {
48
+ return {
49
+ openPr,
50
+ pushOnComplete,
51
+ allowPrd,
52
+ allowPlan,
53
+ allowMerge,
54
+ enableEvidence,
55
+ commitEvidence,
56
+ ciWatchEnabled,
57
+ defaultFastMode,
58
+ autoArchiveEnabled,
59
+ autoArchiveDelay,
87
60
  };
88
61
  }
89
- function save(overrides = {}) {
62
+ function save(payload) {
90
63
  startTransition(async () => {
91
- const result = await updateSettingsAction(buildPayload(overrides));
64
+ const result = await updateSettingsAction(payload);
92
65
  if (!result.success) {
93
- toast.error(result.error ?? 'Failed to save workflow settings');
66
+ toast.error(result.error ?? t('settings.failedToSave'));
94
67
  }
95
68
  });
96
69
  }
97
- function handleSwitchChange(key, setter, value) {
98
- setter(value);
99
- save({ [key]: value });
100
- }
101
- function handleFieldBlur(key, currentValue, originalValue) {
102
- if (currentValue !== originalValue) {
103
- save({ [key]: currentValue });
104
- }
105
- }
106
- const originalCiMaxFix = workflow.ciMaxFixAttempts != null ? String(workflow.ciMaxFixAttempts) : '';
107
- const originalCiTimeout = workflow.ciWatchTimeoutMs != null ? String(Math.round(workflow.ciWatchTimeoutMs / 1000)) : '';
108
- const originalCiLogMax = workflow.ciLogMaxChars != null ? String(workflow.ciLogMaxChars) : '';
109
- const originalCiPollInterval = workflow.ciWatchPollIntervalSeconds != null ? String(workflow.ciWatchPollIntervalSeconds) : '';
110
- const originalAnalyzeTimeout = st?.analyzeMs != null ? String(Math.round(st.analyzeMs / 1000)) : '';
111
- const originalRequirementsTimeout = st?.requirementsMs != null ? String(Math.round(st.requirementsMs / 1000)) : '';
112
- const originalResearchTimeout = st?.researchMs != null ? String(Math.round(st.researchMs / 1000)) : '';
113
- const originalPlanTimeout = st?.planMs != null ? String(Math.round(st.planMs / 1000)) : '';
114
- const originalImplementTimeout = st?.implementMs != null ? String(Math.round(st.implementMs / 1000)) : '';
115
- const originalMergeTimeout = st?.mergeMs != null ? String(Math.round(st.mergeMs / 1000)) : '';
116
- const originalAnalyzeRepoTimeout = art?.analyzeMs != null ? String(Math.round(art.analyzeMs / 1000)) : '';
117
- const FEATURE_AGENT_FIELDS = [
118
- {
119
- key: 'analyzeTimeout',
120
- label: 'Analyze',
121
- defaultSeconds: 1800,
122
- state: analyzeTimeout,
123
- setter: setAnalyzeTimeout,
124
- original: originalAnalyzeTimeout,
125
- },
126
- {
127
- key: 'requirementsTimeout',
128
- label: 'Requirements',
129
- defaultSeconds: 1800,
130
- state: requirementsTimeout,
131
- setter: setRequirementsTimeout,
132
- original: originalRequirementsTimeout,
133
- },
134
- {
135
- key: 'researchTimeout',
136
- label: 'Research',
137
- defaultSeconds: 1800,
138
- state: researchTimeout,
139
- setter: setResearchTimeout,
140
- original: originalResearchTimeout,
141
- },
142
- {
143
- key: 'planTimeout',
144
- label: 'Plan',
145
- defaultSeconds: 1800,
146
- state: planTimeout,
147
- setter: setPlanTimeout,
148
- original: originalPlanTimeout,
149
- },
150
- {
151
- key: 'implementTimeout',
152
- label: 'Implement',
153
- defaultSeconds: 1800,
154
- state: implementTimeout,
155
- setter: setImplementTimeout,
156
- original: originalImplementTimeout,
157
- },
158
- {
159
- key: 'mergeTimeout',
160
- label: 'Merge',
161
- defaultSeconds: 1800,
162
- state: mergeTimeout,
163
- setter: setMergeTimeout,
164
- original: originalMergeTimeout,
165
- },
166
- ];
167
- const ANALYZE_REPO_FIELDS = [
168
- {
169
- key: 'analyzeRepoTimeout',
170
- label: 'Analyze',
171
- defaultSeconds: 600,
172
- state: analyzeRepoTimeout,
173
- setter: setAnalyzeRepoTimeout,
174
- original: originalAnalyzeRepoTimeout,
175
- },
176
- ];
177
- return (_jsxs(Card, { id: "workflow", className: "scroll-mt-6", "data-testid": "workflow-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Workflow" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Configure PR behavior, approval gates, and CI settings" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "open-pr", children: "Open PR on implementation complete" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Automatically create a pull request when the agent finishes" })] }), _jsx(Switch, { id: "open-pr", "data-testid": "switch-open-pr", checked: openPr, onCheckedChange: (v) => handleSwitchChange('openPr', setOpenPr, v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "push-on-complete", children: "Push on implementation complete" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Push the branch to remote when implementation is done" })] }), _jsx(Switch, { id: "push-on-complete", "data-testid": "switch-push-on-complete", checked: pushOnComplete, onCheckedChange: (v) => handleSwitchChange('pushOnComplete', setPushOnComplete, v) })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-sm font-semibold", children: "Approval Gates" }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "allow-prd", children: "PRD auto-approval" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Skip manual approval for product requirement documents" })] }), _jsx(Switch, { id: "allow-prd", "data-testid": "switch-allow-prd", checked: allowPrd, onCheckedChange: (v) => handleSwitchChange('allowPrd', setAllowPrd, v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "allow-plan", children: "Plan auto-approval" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Skip manual approval for implementation plans" })] }), _jsx(Switch, { id: "allow-plan", "data-testid": "switch-allow-plan", checked: allowPlan, onCheckedChange: (v) => handleSwitchChange('allowPlan', setAllowPlan, v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "allow-merge", children: "Merge auto-approval" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Skip manual approval for PR merges" })] }), _jsx(Switch, { id: "allow-merge", "data-testid": "switch-allow-merge", checked: allowMerge, onCheckedChange: (v) => handleSwitchChange('allowMerge', setAllowMerge, v) })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-sm font-semibold", children: "CI Settings" }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "ci-watch-enabled", children: "CI watch/fix loop" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Watch CI status after push and auto-fix failures. Disable to avoid GitHub API rate limits." })] }), _jsx(Switch, { id: "ci-watch-enabled", "data-testid": "switch-ci-watch-enabled", checked: ciWatchEnabled, onCheckedChange: (v) => handleSwitchChange('ciWatchEnabled', setCiWatchEnabled, v) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-max-fix", children: "Max fix attempts" }), _jsx(Input, { id: "ci-max-fix", "data-testid": "ci-max-fix-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", min: 1, max: 10, placeholder: "e.g., 3", value: ciMaxFix, onChange: (e) => setCiMaxFix(e.target.value), onBlur: () => handleFieldBlur('ciMaxFix', ciMaxFix, originalCiMaxFix) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "How many times the agent retries fixing CI failures" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-timeout", children: "Watch timeout (seconds)" }), _jsx(Input, { id: "ci-timeout", "data-testid": "ci-timeout-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", placeholder: "e.g., 300", value: ciTimeout, onChange: (e) => setCiTimeout(e.target.value), onBlur: () => handleFieldBlur('ciTimeout', ciTimeout, originalCiTimeout) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "How long to wait for CI to complete before timing out" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-log-max", children: "Max log characters" }), _jsx(Input, { id: "ci-log-max", "data-testid": "ci-log-max-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", placeholder: "e.g., 50000", value: ciLogMax, onChange: (e) => setCiLogMax(e.target.value), onBlur: () => handleFieldBlur('ciLogMax', ciLogMax, originalCiLogMax) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Maximum characters to capture from CI logs" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-poll-interval", children: "Poll interval (seconds)" }), _jsx(Input, { id: "ci-poll-interval", "data-testid": "ci-poll-interval-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", placeholder: "e.g., 30", value: ciPollInterval, onChange: (e) => setCiPollInterval(e.target.value), onBlur: () => handleFieldBlur('ciPollInterval', ciPollInterval, originalCiPollInterval) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "How often to poll GitHub for CI run status updates" })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "hide-ci-status", children: "Hide CI Status" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Hide CI status badges from feature drawer and merge review" })] }), _jsx(Switch, { id: "hide-ci-status", "data-testid": "hide-ci-status-switch", checked: hideCiStatus, onCheckedChange: (v) => handleSwitchChange('hideCiStatus', setHideCiStatus, v) })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-sm font-semibold", children: "Stage Timeouts" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Maximum execution time per agent stage" }), _jsx("h4", { className: "text-muted-foreground text-xs font-semibold tracking-wider uppercase", children: "Feature Agent" }), FEATURE_AGENT_FIELDS.map((field) => (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx(Label, { htmlFor: `stage-timeout-${field.key}`, children: field.label }), _jsx(TimeoutSlider, { id: `stage-timeout-${field.key}`, testId: `stage-timeout-${field.key}-input`, value: field.state, onChange: field.setter, onBlur: () => handleFieldBlur(field.key, field.state, field.original), defaultSeconds: field.defaultSeconds })] }, field.key))), _jsx("h4", { className: "text-muted-foreground pt-2 text-xs font-semibold tracking-wider uppercase", children: "Analyze Repository Agent" }), ANALYZE_REPO_FIELDS.map((field) => (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx(Label, { htmlFor: `stage-timeout-${field.key}`, children: field.label }), _jsx(TimeoutSlider, { id: `stage-timeout-${field.key}`, testId: `stage-timeout-${field.key}-input`, value: field.state, onChange: field.setter, onBlur: () => handleFieldBlur(field.key, field.state, field.original), defaultSeconds: field.defaultSeconds })] }, field.key)))] })] })] }));
70
+ return (_jsxs(SettingsSection, { icon: GitBranch, title: t('settings.workflow.title'), description: t('settings.workflow.sectionDescription'), testId: "workflow-settings-section", tooltip: t('settings.workflow.hint'), tooltipLinks: [
71
+ {
72
+ label: t('settings.workflow.links.approvalGates'),
73
+ href: 'https://github.com/jrmatherly/shipit/blob/main/specs/016-hitl-approval-gates/spec.yaml',
74
+ },
75
+ {
76
+ label: t('settings.workflow.links.pushAndPrFlags'),
77
+ href: 'https://github.com/jrmatherly/shipit/blob/main/specs/037-feature-pr-push-flags/spec.yaml',
78
+ },
79
+ ], children: [_jsx(SwitchRow, { label: t('settings.workflow.defaultFastMode'), description: t('settings.workflow.defaultFastModeDescription'), tooltip: "When enabled, new features skip the PRD and Plan phases and go straight to implementation. Useful for quick fixes, risky for complex features.", id: "default-fast-mode", testId: "switch-default-fast-mode", checked: defaultFastMode, onChange: (v) => {
80
+ setDefaultFastMode(v);
81
+ save(buildWorkflowPayload(getState(), { defaultFastMode: v }));
82
+ } }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.approve') }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePrd'), description: t('settings.workflow.autoApprovePrdDescription'), tooltip: "Automatically approves the requirements document without pausing for your review. Saves time but you lose the chance to refine requirements before planning.", id: "allow-prd", testId: "switch-allow-prd", checked: allowPrd, onChange: (v) => {
83
+ setAllowPrd(v);
84
+ save(buildWorkflowPayload(getState(), { allowPrd: v }));
85
+ } }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePlan'), description: t('settings.workflow.autoApprovePlanDescription'), tooltip: "Automatically approves the implementation plan. The agent proceeds to coding without waiting for your plan review.", id: "allow-plan", testId: "switch-allow-plan", checked: allowPlan, onChange: (v) => {
86
+ setAllowPlan(v);
87
+ save(buildWorkflowPayload(getState(), { allowPlan: v }));
88
+ } }), _jsx(SwitchRow, { label: t('settings.workflow.autoApproveMerge'), description: t('settings.workflow.autoApproveMergeDescription'), tooltip: "Automatically merges the PR after implementation without requiring your final review. Use with caution on production branches.", id: "allow-merge", testId: "switch-allow-merge", checked: allowMerge, onChange: (v) => {
89
+ setAllowMerge(v);
90
+ save(buildWorkflowPayload(getState(), { allowMerge: v }));
91
+ } }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.evidence') }), _jsx(SwitchRow, { label: t('settings.workflow.collectEvidence'), description: t('settings.workflow.collectEvidenceDescription'), tooltip: "Captures screenshots and test outputs during implementation as proof of work. Useful for audit trails and PR documentation.", id: "enable-evidence", testId: "switch-enable-evidence", checked: enableEvidence, onChange: (v) => {
92
+ setEnableEvidence(v);
93
+ if (!v) {
94
+ setCommitEvidence(false);
95
+ save(buildWorkflowPayload(getState(), { enableEvidence: v, commitEvidence: false }));
96
+ }
97
+ else {
98
+ save(buildWorkflowPayload(getState(), { enableEvidence: v }));
99
+ }
100
+ } }), _jsx(SwitchRow, { label: t('settings.workflow.addEvidenceToPr'), description: t('settings.workflow.addEvidenceToPrDescription'), tooltip: "Attaches collected evidence artifacts (screenshots, logs) directly to the pull request description.", id: "commit-evidence", testId: "switch-commit-evidence", checked: commitEvidence, disabled: !enableEvidence || !openPr, onChange: (v) => {
101
+ setCommitEvidence(v);
102
+ save(buildWorkflowPayload(getState(), { commitEvidence: v }));
103
+ } }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.git') }), _jsx(SwitchRow, { label: t('settings.workflow.pushOnComplete'), description: t('settings.workflow.pushOnCompleteDescription'), tooltip: "Automatically pushes the implementation branch to the remote repository when the agent finishes coding.", id: "push-on-complete", testId: "switch-push-on-complete", checked: pushOnComplete, onChange: (v) => {
104
+ setPushOnComplete(v);
105
+ save(buildWorkflowPayload(getState(), { pushOnComplete: v }));
106
+ } }), _jsx(SwitchRow, { label: t('settings.workflow.openPrOnComplete'), description: t('settings.workflow.openPrOnCompleteDescription'), tooltip: "Creates a pull request automatically after pushing. Combined with push-on-complete, this fully automates the delivery pipeline.", id: "open-pr", testId: "switch-open-pr", checked: openPr, onChange: (v) => {
107
+ setOpenPr(v);
108
+ if (!v) {
109
+ setCommitEvidence(false);
110
+ save(buildWorkflowPayload(getState(), { openPr: v, commitEvidence: false }));
111
+ }
112
+ else {
113
+ save(buildWorkflowPayload(getState(), { openPr: v }));
114
+ }
115
+ } }), _jsx(SwitchRow, { label: t('settings.workflow.watchCiAfterPush'), description: t('settings.workflow.watchCiAfterPushDescription'), tooltip: "Monitors CI/CD pipeline status after pushing and can attempt fixes if tests fail. Disable if you prefer to handle CI failures manually.", id: "ci-watch-enabled", testId: "switch-ci-watch-enabled", checked: ciWatchEnabled, onChange: (v) => {
116
+ setCiWatchEnabled(v);
117
+ save(buildWorkflowPayload(getState(), { ciWatchEnabled: v }));
118
+ } }), _jsx(SubsectionLabel, { children: "Archive" }), _jsx(SwitchRow, { label: "Auto-archive completed", description: "Automatically archive features after they reach the completed state", tooltip: "Automatically archives features from the control center canvas after they reach the completed state, keeping the board clean.", id: "auto-archive-enabled", testId: "switch-auto-archive-enabled", checked: autoArchiveEnabled, onChange: (v) => {
119
+ setAutoArchiveEnabled(v);
120
+ save(buildWorkflowPayload(getState(), { autoArchiveEnabled: v }));
121
+ } }), _jsx(SettingsRow, { label: "Archive delay", description: "Minutes to wait after completion before archiving (1-1440)", tooltip: "How long to wait after a feature completes before archiving it. Gives you time to review results before the feature moves off the board.", htmlFor: "auto-archive-delay", children: _jsx(NumberStepper, { id: "auto-archive-delay", testId: "input-auto-archive-delay", value: autoArchiveDelay, placeholder: "10", min: 1, max: 1440, suffix: "min", onChange: (v) => {
122
+ setAutoArchiveDelay(v);
123
+ }, onBlur: () => {
124
+ if (!autoArchiveEnabled)
125
+ return;
126
+ const n = parseInt(autoArchiveDelay, 10);
127
+ const clamped = Number.isNaN(n) ? 10 : Math.min(1440, Math.max(1, n));
128
+ setAutoArchiveDelay(String(clamped));
129
+ save(buildWorkflowPayload(getState(), { autoArchiveDelay: String(clamped) }));
130
+ } }) })] }));
178
131
  }
@@ -12,5 +12,5 @@ export default meta;
12
12
  type Story = StoryObj<typeof meta>;
13
13
  export declare const Default: Story;
14
14
  export declare const AllEnabled: Story;
15
- export declare const WithCiSettings: Story;
15
+ export declare const EvidenceDisabled: Story;
16
16
  //# sourceMappingURL=workflow-settings-section.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,QAAA,MAAM,IAAI;;;;;;;CAOsC,CAAC;AAEjD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KA8BxB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KA8B5B,CAAC"}
1
+ {"version":3,"file":"workflow-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAKtE,QAAA,MAAM,IAAI;;;;;;;CAOsC,CAAC;AAEjD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAqBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { WorkflowSettingsSection } from './workflow-settings-section.js';
2
+ import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
3
+ const baseSettings = createDefaultSettings();
2
4
  const meta = {
3
5
  title: 'Features/Settings/WorkflowSettingsSection',
4
6
  component: WorkflowSettingsSection,
@@ -10,80 +12,40 @@ const meta = {
10
12
  export default meta;
11
13
  export const Default = {
12
14
  args: {
13
- workflow: {
14
- openPrOnImplementationComplete: false,
15
- approvalGateDefaults: {
16
- allowPrd: false,
17
- allowPlan: false,
18
- allowMerge: false,
19
- pushOnImplementationComplete: false,
20
- },
21
- ciWatchEnabled: true,
22
- enableEvidence: false,
23
- commitEvidence: false,
24
- defaultFastMode: true,
25
- },
15
+ settings: baseSettings,
26
16
  },
27
17
  };
28
18
  export const AllEnabled = {
29
19
  args: {
30
- workflow: {
31
- openPrOnImplementationComplete: true,
32
- approvalGateDefaults: {
33
- allowPrd: true,
34
- allowPlan: true,
35
- allowMerge: true,
36
- pushOnImplementationComplete: true,
37
- },
38
- ciMaxFixAttempts: 3,
39
- ciWatchTimeoutMs: 300000,
40
- ciLogMaxChars: 50000,
41
- stageTimeouts: {
42
- analyzeMs: 600000,
43
- requirementsMs: 600000,
44
- researchMs: 600000,
45
- planMs: 600000,
46
- implementMs: 600000,
47
- mergeMs: 600000,
20
+ settings: {
21
+ ...baseSettings,
22
+ workflow: {
23
+ ...baseSettings.workflow,
24
+ openPrOnImplementationComplete: true,
25
+ approvalGateDefaults: {
26
+ allowPrd: true,
27
+ allowPlan: true,
28
+ allowMerge: true,
29
+ pushOnImplementationComplete: true,
30
+ },
31
+ enableEvidence: true,
32
+ commitEvidence: true,
33
+ ciWatchEnabled: true,
34
+ defaultFastMode: true,
35
+ autoArchiveDelayMinutes: 15,
48
36
  },
49
- analyzeRepoTimeouts: {
50
- analyzeMs: 600000,
51
- },
52
- ciWatchEnabled: true,
53
- enableEvidence: true,
54
- commitEvidence: true,
55
- defaultFastMode: true,
56
37
  },
57
38
  },
58
39
  };
59
- export const WithCiSettings = {
40
+ export const EvidenceDisabled = {
60
41
  args: {
61
- workflow: {
62
- openPrOnImplementationComplete: false,
63
- approvalGateDefaults: {
64
- allowPrd: false,
65
- allowPlan: false,
66
- allowMerge: false,
67
- pushOnImplementationComplete: false,
68
- },
69
- ciMaxFixAttempts: 5,
70
- ciWatchTimeoutMs: 600000,
71
- ciLogMaxChars: 100000,
72
- stageTimeouts: {
73
- analyzeMs: 1200000,
74
- requirementsMs: 1200000,
75
- researchMs: 1200000,
76
- planMs: 1200000,
77
- implementMs: 1200000,
78
- mergeMs: 1200000,
79
- },
80
- analyzeRepoTimeouts: {
81
- analyzeMs: 1200000,
42
+ settings: {
43
+ ...baseSettings,
44
+ workflow: {
45
+ ...baseSettings.workflow,
46
+ enableEvidence: false,
47
+ commitEvidence: false,
82
48
  },
83
- ciWatchEnabled: true,
84
- enableEvidence: false,
85
- commitEvidence: false,
86
- defaultFastMode: true,
87
49
  },
88
50
  },
89
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIvD,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,iBAAS,eAAe,CAAC,EACvB,aAAgC,EAChC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,2CAQxD;AAED,iBAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEhF;AAED,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAE1F;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAiBvD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIvD,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,iBAAS,eAAe,CAAC,EACvB,aAAgC,EAChC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,2CAQxD;AAED,iBAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEhF;AAED,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAE1F;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAgBvD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { Tooltip as TooltipPrimitive } from 'radix-ui';
4
4
  import { cn } from '../../lib/utils.js';
5
5
  /** Default tooltip hover delay (ms) for canvas nodes and UI controls. */
@@ -13,7 +13,7 @@ function Tooltip({ ...props }) {
13
13
  function TooltipTrigger({ ...props }) {
14
14
  return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
15
15
  }
16
- function TooltipContent({ className, sideOffset = 0, children, ...props }) {
17
- return (_jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: cn('bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance', className), ...props, children: [children, _jsx(TooltipPrimitive.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })] }) }));
16
+ function TooltipContent({ className, sideOffset = 4, children, ...props }) {
17
+ return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: cn('glass-blur editorial-shadow text-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-lg px-3 py-2 text-xs text-balance', className), ...props, children: children }) }));
18
18
  }
19
19
  export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
@@ -5,6 +5,7 @@
5
5
  "saved": "تم الحفظ",
6
6
  "failedToSave": "فشل حفظ الإعدادات",
7
7
  "sections": {
8
+ "all": "الكل",
8
9
  "language": "اللغة",
9
10
  "agent": "الوكيل",
10
11
  "environment": "البيئة",
@@ -5,6 +5,7 @@
5
5
  "saved": "Gespeichert",
6
6
  "failedToSave": "Einstellungen konnten nicht gespeichert werden",
7
7
  "sections": {
8
+ "all": "Alle",
8
9
  "language": "Sprache",
9
10
  "agent": "Agent",
10
11
  "environment": "Umgebung",
@@ -5,6 +5,7 @@
5
5
  "saved": "Saved",
6
6
  "failedToSave": "Failed to save settings",
7
7
  "sections": {
8
+ "all": "All",
8
9
  "language": "Language",
9
10
  "agent": "Agent",
10
11
  "environment": "Environment",
@@ -5,6 +5,7 @@
5
5
  "saved": "Guardado",
6
6
  "failedToSave": "Error al guardar la configuración",
7
7
  "sections": {
8
+ "all": "Todo",
8
9
  "language": "Idioma",
9
10
  "agent": "Agente",
10
11
  "environment": "Entorno",
@@ -5,6 +5,7 @@
5
5
  "saved": "Enregistré",
6
6
  "failedToSave": "Échec de l'enregistrement des paramètres",
7
7
  "sections": {
8
+ "all": "Tout",
8
9
  "language": "Langue",
9
10
  "agent": "Agent",
10
11
  "environment": "Environnement",
@@ -5,6 +5,7 @@
5
5
  "saved": "נשמר",
6
6
  "failedToSave": "שמירת ההגדרות נכשלה",
7
7
  "sections": {
8
+ "all": "הכל",
8
9
  "language": "שפה",
9
10
  "agent": "סוכן",
10
11
  "environment": "סביבה",