@shepai/cli 1.117.0 → 1.118.0-pr378.15bbb9b

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/apis/json-schema/EnvironmentConfig.yaml +5 -0
  2. package/apis/json-schema/TerminalType.yaml +10 -0
  3. package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
  4. package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +7 -1
  5. package/dist/packages/core/src/domain/generated/output.d.ts +11 -0
  6. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  7. package/dist/packages/core/src/domain/generated/output.js +8 -0
  8. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
  9. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
  11. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts +11 -0
  12. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.d.ts.map +1 -0
  13. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/036-add-terminal-preference.js +13 -0
  14. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +1 -1
  15. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  16. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -2
  17. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts +5 -0
  18. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-metadata.js +7 -0
  20. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/system-terminal.json +24 -0
  21. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts +12 -0
  22. package/dist/src/presentation/web/app/actions/get-available-terminals.d.ts.map +1 -0
  23. package/dist/src/presentation/web/app/actions/get-available-terminals.js +53 -0
  24. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
  25. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +49 -13
  26. package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
  27. package/dist/src/presentation/web/app/actions/open-shell.js +47 -3
  28. package/dist/src/presentation/web/app/settings/page.d.ts.map +1 -1
  29. package/dist/src/presentation/web/app/settings/page.js +6 -2
  30. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  31. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +7 -2
  32. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts +3 -3
  33. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts +1 -1
  35. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  36. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +14 -20
  37. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +6 -0
  38. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +74 -0
  40. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +3 -1
  41. package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
  42. package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +32 -5
  43. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +2 -0
  44. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
  45. package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +34 -1
  46. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +3 -1
  47. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +45 -13
  49. package/dist/tsconfig.build.tsbuildinfo +1 -1
  50. package/package.json +1 -1
  51. package/web/.next/BUILD_ID +1 -1
  52. package/web/.next/build-manifest.json +2 -2
  53. package/web/.next/fallback-build-manifest.json +2 -2
  54. package/web/.next/prerender-manifest.json +3 -3
  55. package/web/.next/required-server-files.js +3 -3
  56. package/web/.next/required-server-files.json +3 -3
  57. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +21 -21
  58. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  59. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
  62. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
  63. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  64. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +27 -27
  66. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
  67. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
  70. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  71. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +21 -21
  74. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  75. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  76. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +27 -27
  78. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
  79. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +27 -27
  82. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
  83. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +19 -19
  86. package/web/.next/server/app/(dashboard)/page.js +2 -2
  87. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +19 -19
  90. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  91. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  92. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/_global-error/page.js +1 -1
  94. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  95. package/web/.next/server/app/_global-error.html +2 -2
  96. package/web/.next/server/app/_global-error.rsc +1 -1
  97. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  98. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  99. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  100. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  101. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  102. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  103. package/web/.next/server/app/_not-found/page.js +2 -2
  104. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  105. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  107. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  108. package/web/.next/server/app/settings/page/server-reference-manifest.json +25 -10
  109. package/web/.next/server/app/settings/page.js +3 -3
  110. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  111. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  112. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  113. package/web/.next/server/app/skills/page.js +2 -2
  114. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  115. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  117. package/web/.next/server/app/tools/page.js +2 -2
  118. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  119. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  121. package/web/.next/server/app/version/page.js +2 -2
  122. package/web/.next/server/app/version/page.js.nft.json +1 -1
  123. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +1 -1
  125. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +1 -1
  126. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  127. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  128. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  130. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  131. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +1 -1
  132. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +1 -1
  134. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -1
  135. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  136. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js → [root-of-the-server]__2dddfea9._.js} +2 -2
  137. package/web/.next/server/chunks/ssr/{[root-of-the-server]__4af0afe0._.js.map → [root-of-the-server]__2dddfea9._.js.map} +1 -1
  138. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js +4 -0
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ff2daf6._.js.map +1 -0
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__3155add4._.js +3 -0
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__3155add4._.js.map +1 -0
  142. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js → [root-of-the-server]__4c7486cb._.js} +2 -2
  143. package/web/.next/server/chunks/ssr/{[root-of-the-server]__9bc1434f._.js.map → [root-of-the-server]__4c7486cb._.js.map} +1 -1
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +1 -1
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
  147. package/web/.next/server/chunks/ssr/{[root-of-the-server]__11033878._.js.map → [root-of-the-server]__6b17a22d._.js.map} +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +4 -0
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -0
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js +4 -0
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b707feb._.js.map +1 -0
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
  155. package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdc75809._.js.map → [root-of-the-server]__804c006d._.js.map} +1 -1
  156. package/web/.next/server/chunks/ssr/{[root-of-the-server]__89e8a5cc._.js → [root-of-the-server]__8763fd7a._.js} +3 -3
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__8763fd7a._.js.map +1 -0
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__9c56d724._.js +3 -0
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__9c56d724._.js.map +1 -0
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__cfc116d5._.js +3 -0
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__cfc116d5._.js.map +1 -0
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__d3841d9e._.js +3 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__d3841d9e._.js.map +1 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__db9afe04._.js +3 -0
  165. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1e68e34._.js.map → [root-of-the-server]__db9afe04._.js.map} +1 -1
  166. package/web/.next/server/chunks/ssr/{_a8d14ab2._.js → _05004606._.js} +2 -2
  167. package/web/.next/server/chunks/ssr/{_a8d14ab2._.js.map → _05004606._.js.map} +1 -1
  168. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  169. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/_1bb131c4._.js +1 -1
  171. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/{_8dacd1e7._.js → _2f6f48b8._.js} +2 -2
  174. package/web/.next/server/chunks/ssr/{_8dacd1e7._.js.map → _2f6f48b8._.js.map} +1 -1
  175. package/web/.next/server/chunks/ssr/{_d6a1ec27._.js → _37c0fff2._.js} +2 -2
  176. package/web/.next/server/chunks/ssr/{_d6a1ec27._.js.map → _37c0fff2._.js.map} +1 -1
  177. package/web/.next/server/chunks/ssr/{_125679ad._.js → _5ac83e51._.js} +2 -2
  178. package/web/.next/server/chunks/ssr/{_125679ad._.js.map → _5ac83e51._.js.map} +1 -1
  179. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  182. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  183. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +2 -2
  184. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +1 -1
  186. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  188. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  190. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  192. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  193. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  194. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +2 -2
  196. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -1
  197. package/web/.next/server/pages/500.html +2 -2
  198. package/web/.next/server/server-reference-manifest.js +1 -1
  199. package/web/.next/server/server-reference-manifest.json +52 -37
  200. package/web/.next/static/chunks/{5fe03deadb83628b.js → 0f717f981367ceb4.js} +1 -1
  201. package/web/.next/static/chunks/{498777301470975b.js → 21018125c1ca9e84.js} +1 -1
  202. package/web/.next/static/chunks/378e70369bdc2354.js +1 -0
  203. package/web/.next/static/chunks/{2251df6427162751.js → 4c102678fba61a06.js} +1 -1
  204. package/web/.next/static/chunks/{425894e5bf370bd2.js → 659c5ac8f376e2e2.js} +2 -2
  205. package/web/.next/static/chunks/{50f06bb71bace452.js → aaf4c3b042bc8423.js} +1 -1
  206. package/web/.next/static/chunks/{c76f6d06b1b69b57.js → b23373e90928feca.js} +1 -1
  207. package/web/.next/static/chunks/{b855de1b1e5458f6.js → c6eb32ee9e08239b.js} +1 -1
  208. package/web/.next/static/chunks/{34b275db4ad6fb5d.js → cb202c300c78e7df.js} +1 -1
  209. package/web/.next/static/chunks/{fcde0cbb2976b933.js → e2ef95d904c360f3.js} +1 -1
  210. package/web/.next/static/chunks/{2c98935265aa3622.js → e6610b831572f69a.js} +2 -2
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__172d9576._.js +0 -3
  213. package/web/.next/server/chunks/ssr/[root-of-the-server]__172d9576._.js.map +0 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +0 -4
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +0 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__2a5592d5._.js +0 -3
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__2a5592d5._.js.map +0 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +0 -4
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js.map +0 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +0 -1
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__a93289b0._.js +0 -3
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__a93289b0._.js.map +0 -1
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -4
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__ac0304e7._.js +0 -3
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__ac0304e7._.js.map +0 -1
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
  229. package/web/.next/static/chunks/e2caffa0bb759c6c.js +0 -1
  230. /package/web/.next/static/{bAT4Gm6M7U0lGmNAN3mTn → ZzpE7NACi6PDz2JsKtisN}/_buildManifest.js +0 -0
  231. /package/web/.next/static/{bAT4Gm6M7U0lGmNAN3mTn → ZzpE7NACi6PDz2JsKtisN}/_clientMiddlewareManifest.json +0 -0
  232. /package/web/.next/static/{bAT4Gm6M7U0lGmNAN3mTn → ZzpE7NACi6PDz2JsKtisN}/_ssgManifest.js +0 -0
@@ -1,3 +0,0 @@
1
- module.exports=[31747,a=>{"use strict";var b=a.i(81719),c=a.i(14703),d=a.i(79372);function e(a,e,f){let g=(e?.status===b.AgentRunStatus.running||e?.status===b.AgentRunStatus.pending)&&e?.pid?(0,d.isProcessAlive)(e.pid):void 0;return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,c.deriveLifecycle)(a,e),repositoryPath:a.repositoryPath,branch:a.branch,specPath:a.specPath,state:(0,c.deriveNodeState)(a,e,void 0!==g?{isPidAlive:g}:void 0),progress:(0,c.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},approvalGates:a.approvalGates,push:a.push,openPr:a.openPr,...f?.enableEvidence!=null&&{enableEvidence:f.enableEvidence},...f?.commitEvidence!=null&&{commitEvidence:f.commitEvidence},...f?.repositoryName&&{repositoryName:f.repositoryName},...f?.baseBranch&&{baseBranch:f.baseBranch},...f?.oneLiner&&{oneLiner:f.oneLiner},...f?.remoteUrl&&{remoteUrl:f.remoteUrl},...e?.agentType&&{agentType:e.agentType},...e?.modelId&&{modelId:e.modelId},...e?.error&&{errorMessage:e.error},...null!=a.plan&&{hasPlan:!0},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}a.s(["buildFeatureNodeData",()=>e])},61402,76052,13008,74607,6542,740,12104,54433,a=>{"use strict";var b=a.i(92658),c=a.i(96380),d=a.i(12581);async function e(a,b){if(!a.trim())return{approved:!1,error:"Feature id is required"};try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(a);if(!e)return{approved:!1,error:"Feature not found"};if(!e.agentRunId)return{approved:!1,error:"Feature has no agent run"};let f=(0,c.resolve)("ApproveAgentRunUseCase"),g=await f.execute(e.agentRunId,b);if(!g.approved)return{approved:!1,error:g.reason};return{approved:!0}}catch(a){return{approved:!1,error:a instanceof Error?a.message:"Failed to approve feature"}}}async function f(a,b,d){if(!a.trim())return{rejected:!1,error:"Feature id is required"};if(!b.trim())return{rejected:!1,error:"Feedback is required"};try{let e=(0,c.resolve)("IFeatureRepository"),f=await e.findById(a);if(!f)return{rejected:!1,error:"Feature not found"};if(!f.agentRunId)return{rejected:!1,error:"Feature has no agent run"};let g=(0,c.resolve)("RejectAgentRunUseCase"),h=await g.execute(f.agentRunId,b,d);if(!h.rejected)return{rejected:!1,error:h.reason};return{rejected:!0,iteration:h.iteration,iterationWarning:h.iterationWarning}}catch(a){return{rejected:!1,error:a instanceof Error?a.message:"Failed to reject feature"}}}async function g(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("GetFeatureArtifactUseCase"),d=await b.execute(a),e={question:"Goal",context:d.oneLiner,questions:d.openQuestions.map((a,b)=>({id:`q-${b}`,question:a.question,type:"select",options:(a.options??[]).map((a,c)=>({id:`q-${b}-opt-${c}`,label:a.option,rationale:a.description,...a.selected?{recommended:!0}:{}}))})),finalAction:{id:"approve-reqs",label:"Approve Requirements",description:"Finalize and lock the requirements for implementation"}},f={question:"Goal",context:d.oneLiner,questions:d.openQuestions.filter(a=>a.resolved).map(a=>{let b=a.options?.find(a=>a.selected);return{question:a.question,selectedOption:b?.option??a.answer??"N/A",rationale:a.selectionRationale??b?.description??"",wasRecommended:!1}})};return{questionnaire:e,productDecisions:f,artifact:d}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature artifact"}}}async function h(a){if(!a.trim())return{error:"Feature id is required"};try{var b;let d=(0,c.resolve)("GetResearchArtifactUseCase");return{techDecisions:{name:(b=await d.execute(a)).name,summary:b.summary,decisions:b.decisions,technologies:b.technologies}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load research artifact"}}}(0,d.ensureServerEntryExports)([e]),(0,b.registerServerReference)(e,"60b94c735928c15cd2d14ac67fca1a41a24a8e527c",null),a.s(["approveFeature",()=>e],61402),(0,d.ensureServerEntryExports)([f]),(0,b.registerServerReference)(f,"709c6afd67960012027387c3678f1b38d707e177e0",null),a.s(["rejectFeature",()=>f],76052),(0,d.ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"40cdd31077d50763d9067371fc51c6f5dbdf5369c0",null),a.s(["getFeatureArtifact",()=>g],13008),(0,d.ensureServerEntryExports)([h]),(0,b.registerServerReference)(h,"4003cac9fef2c7e1835324fd57ac57cfa22217a84a",null),a.s(["getResearchArtifact",()=>h],74607);var i=a.i(2157),j=a.i(50227),k=a.i(29918);async function l(a){if(!a.trim())return{error:"Feature id is required"};try{let b,d,e=(0,c.resolve)("IFeatureRepository"),f=await e.findById(a);if(!f)return{error:"Feature not found"};let g=f.pr?{url:f.pr.url,number:f.pr.number,status:f.pr.status,commitHash:f.pr.commitHash,ciStatus:f.pr.ciStatus,mergeable:f.pr.mergeable}:void 0,h=f.branch?{source:f.branch,target:"main"}:void 0,l=f.worktreePath??(f.repositoryPath&&f.branch?(0,k.computeWorktreePath)(f.repositoryPath,f.branch):null);if(l)try{let c=(0,j.dirname)((0,j.dirname)(l)),e=(0,j.join)(c,"evidence",a),f=(0,j.join)(e,"manifest.json");(0,i.existsSync)(f)&&(b=JSON.parse((0,i.readFileSync)(f,"utf-8")),d=l)}catch{}if(!l)return{pr:g,branch:h,evidence:b,evidenceBasePath:d,warning:g?void 0:"No PR or diff data available"};try{let a=(0,c.resolve)("IGitPrService"),[e,f]=await Promise.all([a.getPrDiffSummary(l,"main"),a.getFileDiffs(l,"main").catch(()=>void 0)]);return{pr:g,branch:h,diffSummary:e,fileDiffs:f,evidence:b,evidenceBasePath:d}}catch{return{pr:g,branch:h,evidence:b,evidenceBasePath:d,warning:"Diff statistics unavailable"}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load merge review data"}}}async function m(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IPhaseTimingRepository"),d=(await b.findByFeatureId(a)).map(a=>({agentRunId:a.agentRunId,phase:a.phase,startedAt:a.startedAt,completedAt:a.completedAt,durationMs:null!=a.durationMs?Number(a.durationMs):void 0,waitingApprovalAt:a.waitingApprovalAt,approvalWaitMs:null!=a.approvalWaitMs?Number(a.approvalWaitMs):void 0})),e=await n(a);return{timings:d,rejectionFeedback:e}}catch(a){return{error:a instanceof Error?a.message:"Failed to load phase timings"}}}async function n(b){try{let d=(0,c.resolve)("IFeatureRepository"),e=await d.findById(b);if(!e?.specPath)return[];let{readFileSync:f}=await a.A(6714),{join:g}=await a.A(11105),h=(await a.A(29718)).default,i=f(g(e.specPath,"spec.yaml"),"utf-8"),j=h.load(i);if(!Array.isArray(j?.rejectionFeedback))return[];return j.rejectionFeedback.map(a=>({iteration:Number(a.iteration??1),message:String(a.message??""),phase:a.phase?String(a.phase):void 0,timestamp:a.timestamp?String(a.timestamp):void 0,attachments:Array.isArray(a.attachments)?a.attachments.map(String):void 0}))}catch{return[]}}async function o(a){if(!a.trim())return{error:"Feature id is required"};try{let b=(0,c.resolve)("IFeatureRepository"),d=await b.findById(a);if(!d)return{error:"Feature not found"};if(!d.plan)return{plan:void 0};return{plan:{state:d.plan.state,overview:d.plan.overview,tasks:d.plan.tasks.map(a=>({title:a.title??"",description:a.description??"",state:a.state,actionItems:(a.actionItems??[]).map(a=>({name:a.name,description:a.description,acceptanceCriteria:(a.acceptanceCriteria??[]).map(a=>({description:a.description,verified:a.verified}))}))}))}}}catch(a){return{error:a instanceof Error?a.message:"Failed to load feature plan"}}}(0,d.ensureServerEntryExports)([l]),(0,b.registerServerReference)(l,"409984ce71dbc80cf4203028b683da611de3370c99",null),a.s(["getMergeReviewData",()=>l],6542),(0,d.ensureServerEntryExports)([m]),(0,b.registerServerReference)(m,"40d12f5d625b9187691d25b3edeae8ef5182631477",null),a.s(["getFeaturePhaseTimings",()=>m],740),(0,d.ensureServerEntryExports)([o]),(0,b.registerServerReference)(o,"409fb23031f9031c4f47f8fc521c389142aa5fc1c4",null),a.s(["getFeaturePlan",()=>o],12104);var p=a.i(31747),q=a.i(33244);async function r(a){try{let b=(0,c.resolve)("IFeatureRepository"),d=(0,c.resolve)("IAgentRunRepository"),e=(0,c.resolve)("IRepositoryRepository"),f=(0,c.resolve)("IGitPrService"),g=(0,c.resolve)("GetFeatureArtifactUseCase"),h=await b.findById(a);if(!h)return null;let i=h.agentRunId?await d.findById(h.agentRunId):null,[j,k,l,m]=await Promise.all([e.findByPath(h.repositoryPath).catch(()=>null),f.getDefaultBranch(h.repositoryPath).catch(()=>"main"),g.execute(a).catch(()=>null),f.getRemoteUrl(h.repositoryPath).catch(()=>null)]),{workflow:n}=(0,q.getSettings)();return(0,p.buildFeatureNodeData)(h,i,{repositoryName:j?.name,baseBranch:k,oneLiner:l?.oneLiner,remoteUrl:m??void 0,enableEvidence:n.enableEvidence,commitEvidence:n.commitEvidence})}catch{return null}}(0,d.ensureServerEntryExports)([r]),(0,b.registerServerReference)(r,"40b2399788ebc7b15c4d1cc0510fdb53676b29e3cb",null),a.s(["getFeatureDrawerData",()=>r],54433)},15473,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(41872),l=a.i(9959),m=a.i(23504),n=a.i(27900),o=a.i(50845),p=a.i(26604),q=a.i(54723),r=a.i(49560),s=a.i(39353),t=a.i(29207),u=a.i(61402),v=a.i(76052),w=a.i(13008),x=a.i(74607),y=a.i(6542),z=a.i(740),A=a.i(12104),B=a.i(54433);a.s([],37745),a.i(37745),a.s(["003525d3ac3a2e5d874210765a16d882ccea21c329",()=>m.getAllAgentModels,"00719d28621b2c76669d78ed527c8b05547adaf138",()=>l.checkAgentAuth,"009b51e8180c9b2fb8dfd6e46719ed0b380ffd4419",()=>k.isAgentSetupComplete,"00cf33ea9b60ae88b80ddb56c0512752bf4c5e31cd",()=>b.pickFolder,"4003cac9fef2c7e1835324fd57ac57cfa22217a84a",()=>x.getResearchArtifact,"402719b4191a4c75699e54a6271b09eca7ef179947",()=>f.stopDeployment,"402ff54bba42ecc43820de237f00c7333c49de5217",()=>t.getFeatureMetadata,"403059c2d864feaf9c58e0c4128ecbfe81f374550c",()=>q.startFeature,"404a389118d7da9d35349baa8ae48ac9fde4a9ea7e",()=>p.resumeFeature,"404f77801163baa4329bb5c4474e564cfebc61fc6d",()=>c.getDeploymentLogs,"405496f39ce9f00dc05959b332d0ee81009cc5775c",()=>r.addRepository,"4055a6e1273a2b9a5372894aed5085516b4aedd5eb",()=>g.getDeploymentStatus,"409984ce71dbc80cf4203028b683da611de3370c99",()=>y.getMergeReviewData,"409e3a4d80cddf30f0ecd3b6db7d112389268cd9ab",()=>d.deployFeature,"409e40fe6b5928c006cc4f82ada55aba37a84c039f",()=>e.deployRepository,"409fb23031f9031c4f47f8fc521c389142aa5fc1c4",()=>A.getFeaturePlan,"40b2399788ebc7b15c4d1cc0510fdb53676b29e3cb",()=>B.getFeatureDrawerData,"40b4aa27161e645c4b2879ad8bd7ba144aa6b91c73",()=>s.deleteRepository,"40c1fa128a2d34bd867d43098e9e2e7a5151e7d54f",()=>h.openIde,"40cdd31077d50763d9067371fc51c6f5dbdf5369c0",()=>w.getFeatureArtifact,"40d12f5d625b9187691d25b3edeae8ef5182631477",()=>z.getFeaturePhaseTimings,"40dcce6e206e789e8053d8380fe3d3044916974472",()=>j.openFolder,"40de1e9af14eaf5162fd78923ab2de16ae6fb65177",()=>i.openShell,"609faefc69e3e6544061ad5291c421e76cd8b42781",()=>n.updateAgentAndModel,"60b94c735928c15cd2d14ac67fca1a41a24a8e527c",()=>u.approveFeature,"709c6afd67960012027387c3678f1b38d707e177e0",()=>v.rejectFeature,"70a3e46791d1ac5ae333ff25a4d71c08bfadfd0b3e",()=>o.deleteFeature],15473)},6714,a=>{a.v(a=>Promise.resolve().then(()=>a(2157)))},11105,a=>{a.v(a=>Promise.resolve().then(()=>a(50227)))},29718,a=>{a.v(b=>Promise.all(["server/chunks/ssr/90b01_js-yaml_dist_js-yaml_mjs_c897fb57._.js"].map(b=>a.l(b))).then(()=>b(32996)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__ac0304e7._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/app/actions/approve-feature.ts","../../../../../../../src/presentation/web/app/actions/reject-feature.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/get-feature-drawer-data.ts","../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/feature/%5BfeatureId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport { AgentRunStatus } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport { isProcessAlive } from '@shepai/core/infrastructure/services/process/is-process-alive';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\nexport interface BuildFeatureNodeDataOptions {\n baseBranch?: string;\n repositoryName?: string;\n /** AI-generated one-liner from FeatureArtifact */\n oneLiner?: string;\n /** Remote URL for the repository (HTTPS) */\n remoteUrl?: string;\n /** Whether evidence collection is enabled (global workflow setting) */\n enableEvidence?: boolean;\n /** Whether evidence is committed to the PR body (global workflow setting) */\n commitEvidence?: boolean;\n}\n\n/**\n * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.\n * This is the single-feature version of the logic in `buildGraphNodes`.\n */\nexport function buildFeatureNodeData(\n feature: Feature,\n run: AgentRun | null,\n options?: BuildFeatureNodeDataOptions\n): FeatureNodeData {\n // Detect crashed agents: DB says running/pending but PID is dead\n const isActive = run?.status === AgentRunStatus.running || run?.status === AgentRunStatus.pending;\n const pidAlive = isActive && run?.pid ? isProcessAlive(run.pid) : undefined;\n\n return {\n name: feature.name,\n description: feature.description ?? feature.slug,\n featureId: feature.id,\n lifecycle: deriveLifecycle(feature, run),\n repositoryPath: feature.repositoryPath,\n branch: feature.branch,\n specPath: feature.specPath,\n state: deriveNodeState(\n feature,\n run,\n pidAlive !== undefined ? { isPidAlive: pidAlive } : undefined\n ),\n progress: deriveProgress(feature),\n summary: feature.description,\n userQuery: feature.userQuery,\n createdAt: feature.createdAt instanceof Date ? feature.createdAt.getTime() : feature.createdAt,\n ...(feature.fast && { fastMode: true }),\n approvalGates: feature.approvalGates,\n push: feature.push,\n openPr: feature.openPr,\n ...(options?.enableEvidence != null && { enableEvidence: options.enableEvidence }),\n ...(options?.commitEvidence != null && { commitEvidence: options.commitEvidence }),\n ...(options?.repositoryName && { repositoryName: options.repositoryName }),\n ...(options?.baseBranch && { baseBranch: options.baseBranch }),\n ...(options?.oneLiner && { oneLiner: options.oneLiner }),\n ...(options?.remoteUrl && { remoteUrl: options.remoteUrl }),\n ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),\n ...(run?.modelId && { modelId: run.modelId }),\n ...(run?.error && { errorMessage: run.error }),\n ...(feature.plan != null && { hasPlan: true }),\n ...(feature.pr && {\n pr: {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n ciStatus: feature.pr.ciStatus,\n commitHash: feature.pr.commitHash,\n mergeable: feature.pr.mergeable,\n },\n }),\n };\n}\n","'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 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 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 { 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 { readFileSync, existsSync } from 'node:fs';\nimport { 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';\n\ntype GetMergeReviewDataResult = MergeReviewData | { error: string };\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 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 branch = feature.branch ? { source: feature.branch, target: 'main' } : undefined;\n\n const worktreePath =\n feature.worktreePath ??\n (feature.repositoryPath && feature.branch\n ? computeWorktreePath(feature.repositoryPath, feature.branch)\n : null);\n\n // Load evidence manifest (best-effort)\n let evidence: MergeReviewEvidence[] | undefined;\n let evidenceBasePath: string | undefined;\n if (worktreePath) {\n try {\n // Worktree path: ~/.shep/repos/<hash>/wt/<slug>\n // Evidence manifest: ~/.shep/repos/<hash>/evidence/<featureId>/manifest.json\n const repoHashDir = dirname(dirname(worktreePath));\n const evidenceDir = join(repoHashDir, 'evidence', featureId);\n const manifestPath = join(evidenceDir, 'manifest.json');\n if (existsSync(manifestPath)) {\n evidence = JSON.parse(readFileSync(manifestPath, 'utf-8'));\n evidenceBasePath = worktreePath;\n }\n } catch {\n // Evidence unavailable — not critical\n }\n }\n\n if (!worktreePath) {\n return {\n pr,\n branch,\n evidence,\n evidenceBasePath,\n warning: pr ? undefined : 'No PR or diff data available',\n };\n }\n\n try {\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n const [diffSummary, fileDiffs] = await Promise.all([\n gitPrService.getPrDiffSummary(worktreePath, 'main'),\n gitPrService.getFileDiffs(worktreePath, 'main').catch(() => undefined),\n ]);\n return { pr, branch, diffSummary, fileDiffs, evidence, evidenceBasePath };\n } catch {\n return {\n pr,\n branch,\n evidence,\n evidenceBasePath,\n warning: 'Diff statistics unavailable',\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}\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 }));\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 { 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 });\n } catch {\n return null;\n }\n}\n","export {pickFolder as '00cf33ea9b60ae88b80ddb56c0512752bf4c5e31cd'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '404f77801163baa4329bb5c4474e564cfebc61fc6d'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '409e3a4d80cddf30f0ecd3b6db7d112389268cd9ab'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '409e40fe6b5928c006cc4f82ada55aba37a84c039f'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '402719b4191a4c75699e54a6271b09eca7ef179947'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '4055a6e1273a2b9a5372894aed5085516b4aedd5eb'} from 'ACTIONS_MODULE5'\nexport {openIde as '40c1fa128a2d34bd867d43098e9e2e7a5151e7d54f'} from 'ACTIONS_MODULE6'\nexport {openShell as '40de1e9af14eaf5162fd78923ab2de16ae6fb65177'} from 'ACTIONS_MODULE7'\nexport {openFolder as '40dcce6e206e789e8053d8380fe3d3044916974472'} from 'ACTIONS_MODULE8'\nexport {isAgentSetupComplete as '009b51e8180c9b2fb8dfd6e46719ed0b380ffd4419'} from 'ACTIONS_MODULE9'\nexport {checkAgentAuth as '00719d28621b2c76669d78ed527c8b05547adaf138'} from 'ACTIONS_MODULE10'\nexport {getAllAgentModels as '003525d3ac3a2e5d874210765a16d882ccea21c329'} from 'ACTIONS_MODULE11'\nexport {updateAgentAndModel as '609faefc69e3e6544061ad5291c421e76cd8b42781'} from 'ACTIONS_MODULE12'\nexport {deleteFeature as '70a3e46791d1ac5ae333ff25a4d71c08bfadfd0b3e'} from 'ACTIONS_MODULE13'\nexport {resumeFeature as '404a389118d7da9d35349baa8ae48ac9fde4a9ea7e'} from 'ACTIONS_MODULE14'\nexport {startFeature as '403059c2d864feaf9c58e0c4128ecbfe81f374550c'} from 'ACTIONS_MODULE15'\nexport {addRepository as '405496f39ce9f00dc05959b332d0ee81009cc5775c'} from 'ACTIONS_MODULE16'\nexport {deleteRepository as '40b4aa27161e645c4b2879ad8bd7ba144aa6b91c73'} from 'ACTIONS_MODULE17'\nexport {getFeatureMetadata as '402ff54bba42ecc43820de237f00c7333c49de5217'} from 'ACTIONS_MODULE18'\nexport {approveFeature as '60b94c735928c15cd2d14ac67fca1a41a24a8e527c'} from 'ACTIONS_MODULE19'\nexport {rejectFeature as '709c6afd67960012027387c3678f1b38d707e177e0'} from 'ACTIONS_MODULE20'\nexport {getFeatureArtifact as '40cdd31077d50763d9067371fc51c6f5dbdf5369c0'} from 'ACTIONS_MODULE21'\nexport {getResearchArtifact as '4003cac9fef2c7e1835324fd57ac57cfa22217a84a'} from 'ACTIONS_MODULE22'\nexport {getMergeReviewData as '409984ce71dbc80cf4203028b683da611de3370c99'} from 'ACTIONS_MODULE23'\nexport {getFeaturePhaseTimings as '40d12f5d625b9187691d25b3edeae8ef5182631477'} from 'ACTIONS_MODULE24'\nexport {getFeaturePlan as '409fb23031f9031c4f47f8fc521c389142aa5fc1c4'} from 'ACTIONS_MODULE25'\nexport {getFeatureDrawerData as '40b2399788ebc7b15c4d1cc0510fdb53676b29e3cb'} from 'ACTIONS_MODULE26'\n"],"names":[],"mappings":"uCACA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAKA,EAAA,EAAA,CAAA,CAAA,OAoBO,SAAS,EACd,CAAgB,CAChB,CAAoB,CACpB,CAAqC,EAIrC,IAAM,EAAW,CADA,GAAK,SAAW,EAAA,cAAc,CAAC,OAAO,EAAI,GAAK,SAAW,EAAA,cAAc,CAAC,OAAA,AAAO,GACpE,GAAK,IAAM,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,EAAI,GAAG,OAAI,EAElE,MAAO,CACL,KAAM,EAAQ,IAAI,CAClB,YAAa,EAAQ,WAAW,EAAI,EAAQ,IAAI,CAChD,UAAW,EAAQ,EAAE,CACrB,UAAW,CAAA,EAAA,EAAA,eAAA,AAAe,EAAC,EAAS,GACpC,eAAgB,EAAQ,cAAc,CACtC,OAAQ,EAAQ,MAAM,CACtB,SAAU,EAAQ,QAAQ,CAC1B,MAAO,CAAA,EAAA,EAAA,eAAe,AAAf,EACL,EACA,OACa,IAAb,EAAyB,CAAE,WAAY,CAAS,OAAI,GAEtD,SAAU,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,GACzB,QAAS,EAAQ,WAAW,CAC5B,UAAW,EAAQ,SAAS,CAC5B,UAAW,EAAQ,SAAS,YAAY,KAAO,EAAQ,SAAS,CAAC,OAAO,GAAK,EAAQ,SAAS,CAC9F,GAAI,EAAQ,IAAI,EAAI,CAAE,UAAU,CAAK,CAAC,CACtC,cAAe,EAAQ,aAAa,CACpC,KAAM,EAAQ,IAAI,CAClB,OAAQ,EAAQ,MAAM,CACtB,GAAI,GAAS,gBAAkB,MAAQ,CAAE,eAAgB,EAAQ,cAAc,AAAC,CAAC,CACjF,GAAI,GAAS,gBAAkB,MAAQ,CAAE,eAAgB,EAAQ,cAAc,AAAC,CAAC,CACjF,GAAI,GAAS,gBAAkB,CAAE,eAAgB,EAAQ,cAAc,AAAC,CAAC,CACzE,GAAI,GAAS,YAAc,CAAE,WAAY,EAAQ,UAAU,AAAC,CAAC,CAC7D,GAAI,GAAS,UAAY,CAAE,SAAU,EAAQ,QAAS,AAAD,CAAE,CACvD,GAAI,GAAS,WAAa,CAAE,UAAW,EAAQ,SAAS,AAAC,CAAC,CAC1D,GAAI,GAAK,WAAa,CAAE,UAAW,EAAI,SAAS,AAAiC,CAAC,CAClF,GAAI,GAAK,SAAW,CAAE,QAAS,EAAI,OAAO,AAAC,CAAC,CAC5C,GAAI,GAAK,OAAS,CAAE,aAAc,EAAI,KAAK,AAAC,CAAC,CAC7C,GAAI,AAAgB,QAAR,IAAI,EAAY,CAAE,SAAS,CAAK,CAAC,CAC7C,GAAI,EAAQ,EAAE,EAAI,CAChB,GAAI,CACF,IAAK,EAAQ,EAAE,CAAC,GAAG,CACnB,OAAQ,EAAQ,EAAE,CAAC,MAAM,CACzB,OAAQ,EAAQ,EAAE,CAAC,MAAM,CACzB,SAAU,EAAQ,EAAE,CAAC,QAAQ,CAC7B,WAAY,EAAQ,EAAE,CAAC,UAAU,CACjC,UAAW,EAAQ,EAAE,CAAC,SAAS,AACjC,CACF,CAAC,AACH,CACF,qHC5EA,EAAA,EAAA,CAAA,CAAA,oBAKO,eAAe,EACpB,CAAiB,CACjB,CAA4B,EAE5B,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,UAAU,EAAO,MAAO,wBAAyB,EAG5D,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAqB,sBAC1C,EAAU,MAAM,EAAY,QAAQ,CAAC,GAE3C,GAAI,CAAC,EACH,MAAO,CADK,AACH,UAAU,EAAO,MAAO,mBAAoB,EAGvD,GAAI,CAAC,EAAQ,UAAU,CACrB,CADuB,KAChB,CAAE,UAAU,EAAO,MAAO,0BAA2B,EAG9D,IAAM,EAAiB,CAAA,EAAA,EAAA,OAAA,AAAO,EAAyB,0BACjD,EAAS,MAAM,EAAe,OAAO,CAAC,EAAQ,UAAU,CAAE,GAEhE,GAAI,CAAC,EAAO,QAAQ,CAClB,CADoB,KACb,CAAE,UAAU,EAAO,MAAO,EAAO,MAAM,AAAC,EAGjD,MAAO,CAAE,UAAU,CAAK,CAC1B,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,UAAU,EAAO,MADV,CACiB,YADA,MAAQ,EAAM,OAAO,CAAG,2BAChB,CAC3C,CACF,CCjCO,eAAe,EACpB,CAAiB,CACjB,CAAgB,CAChB,CAAsB,EAOtB,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,UAAU,EAAO,MAAO,wBAAyB,EAG5D,GAAI,CAAC,EAAS,IAAI,GAChB,CADoB,KACb,CAAE,UAAU,EAAO,MAAO,sBAAuB,EAG1D,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAO,AAAP,EAA4B,sBAC1C,EAAU,MAAM,EAAY,QAAQ,CAAC,GAE3C,GAAI,CAAC,EACH,MAAO,CADK,AACH,UAAU,EAAO,MAAO,mBAAoB,EAGvD,GAAI,CAAC,EAAQ,UAAU,CACrB,CADuB,KAChB,CAAE,UAAU,EAAO,MAAO,0BAA2B,EAG9D,IAAM,EAAgB,CAAA,EAAA,EAAA,OAAA,AAAO,EAAwB,yBAC/C,EAAS,MAAM,EAAc,OAAO,CAAC,EAAQ,UAAU,CAAE,EAAU,GAEzE,GAAI,CAAC,EAAO,QAAQ,CAClB,CADoB,KACb,CAAE,UAAU,EAAO,MAAO,EAAO,MAAM,AAAC,EAGjD,MAAO,CACL,UAAU,EACV,UAAW,EAAO,SAAS,CAC3B,iBAAkB,EAAO,gBAAgB,AAC3C,CACF,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,UAAU,EAAO,MADV,CACiB,YADA,MAAQ,EAAM,OAAO,CAAG,0BAChB,CAC3C,CACF,CCYO,eAAe,EAAmB,CAAiB,EACxD,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,MAAO,wBAAyB,EAG3C,GAAI,CACF,IAAM,EAAU,CAAA,EAAA,EAAA,OAAA,AAAO,EAA4B,6BAC7C,EAAW,MAAM,EAAQ,OAAO,CAAC,GACjC,EApDD,CACL,SAAU,IAmDY,GAlDtB,QAkD0C,AAlDjC,EAAS,QAAQ,CAC1B,UAAW,EAAS,aAAa,CAAC,GAAG,CAAC,CAAC,EAAI,KAAS,CAAD,AACjD,GAAI,CAAC,EAAE,EAAE,EAAA,CAAK,CACd,SAAU,EAAG,QAAQ,CACrB,KAAM,SACN,QAAS,CAAC,EAAG,OAAO,EAAI,EAAA,AAAE,EAAE,GAAG,CAAC,CAAC,EAAK,IAAY,EAChD,GAD+C,AAC3C,CAAC,EAAE,EAAE,EAAI,KAAK,EAAE,EAAA,CAAQ,CAC5B,MAAO,EAAI,MAAM,CACjB,UAAW,EAAI,WAAW,CAC1B,GAAI,EAAI,QAAQ,CAAG,CAAE,aAAa,CAAK,EAAI,CAAC,CAAC,CAC/C,CAAC,EACH,CAAC,EACD,YAAa,CACX,GAAI,eACJ,MAAO,uBACP,YAAa,uDACf,CACF,EAkCQ,EA1BD,CACL,SAAU,OACV,AAwByB,QAxBhB,EAAS,QAAQ,CAC1B,UAuBgD,AAvBrC,EAAS,aAAa,CAC9B,MAAM,CAAC,AAAC,GAAO,EAAG,QAAQ,EAC1B,GAAG,CAAC,AAAC,IACJ,IAAM,EAAW,EAAG,OAAO,EAAE,KAAK,AAAC,GAAM,EAAE,QAAQ,EACnD,MAAO,CACL,SAAU,EAAG,QAAQ,CACrB,eAAgB,GAAU,QAAU,EAAG,MAAM,EAAI,MACjD,UAAW,EAAG,kBAAkB,EAAI,GAAU,aAAe,GAC7D,gBAAgB,CAClB,CACF,EACJ,EAaE,MAAO,eAAE,mBAAe,WAAkB,CAAS,CACrD,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,MADO,CACA,YADiB,MAAQ,EAAM,OAAO,CAAG,iCACjC,CAC1B,CACF,CCpDO,eAAe,EAAoB,CAAiB,EACzD,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,MAAO,wBAAyB,EAG3C,GAAI,OACF,IAAM,EAAU,CAAA,EAAA,EAAA,OAAA,AAAO,EAA6B,8BAGpD,MAAO,CAAE,cAjBJ,CACL,KAAM,CAFmB,EAgBR,MAhBkC,AAgB5B,EAAQ,OAAO,CAAC,IAdxB,IAAI,CACnB,QAAS,EAAS,OAAO,CACzB,UAAW,EAAS,SAAS,CAC7B,aAAc,EAAS,YAAY,AACrC,CAYyB,CACzB,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,MADO,CACA,YADiB,MAAQ,EAAM,OAAO,CAAG,kCACjC,CAC1B,CACF,iCHlCsB,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,0ECDA,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,yEC0DA,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,8ECrCA,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,+CCzBtB,IAAA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OAQA,EAAA,EAAA,CAAA,CAAA,OAIO,eAAe,EAAmB,CAAiB,EACxD,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,MAAO,wBAAyB,EAG3C,GAAI,CACF,IA2BI,EACA,EA5BE,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAqB,sBAC1C,EAAU,MAAM,EAAY,QAAQ,CAAC,GAE3C,GAAI,CAAC,EACH,MAAO,CAAE,AADG,MACI,mBAAoB,EAGtC,IAAM,EAAK,EAAQ,EAAE,CACjB,CACE,IAAK,EAAQ,EAAE,CAAC,GAAG,CACnB,OAAQ,EAAQ,EAAE,CAAC,MAAM,CACzB,OAAQ,EAAQ,EAAE,CAAC,MAAM,CACzB,WAAY,EAAQ,EAAE,CAAC,UAAU,CACjC,SAAU,EAAQ,EAAE,CAAC,QAAQ,CAC7B,UAAW,EAAQ,EAAE,CAAC,SACxB,AADiC,OAEjC,EAEE,EAAS,EAAQ,MAAM,CAAG,CAAE,OAAQ,EAAQ,MAAM,CAAE,OAAQ,MAAO,OAAI,EAEvE,EACJ,EAAQ,YAAY,GACnB,CAAD,CAAS,cAAc,EAAI,EAAQ,MAAM,CACrC,CAAA,EAAA,EAAA,mBAAA,AAAmB,EAAC,EAAQ,cAAc,CAAE,EAAQ,MAAM,EAC1D,IAAA,CAAI,CAKV,GAAI,EACF,GAAI,CAGF,IAAM,EAAc,CAAA,CAJN,CAIM,EAAA,OAAA,AAAO,EAAC,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC,IAC9B,EAAc,CAAA,EAAA,EAAA,IAAA,AAAI,EAAC,EAAa,WAAY,GAC5C,EAAe,CAAA,EAAA,EAAA,IAAA,AAAI,EAAC,EAAa,iBACnC,CAAA,EAAA,EAAA,UAAA,AAAU,EAAC,KACb,EAAW,KAAK,GADY,EACP,CAAC,CAAA,EAAA,EAAA,YAAY,AAAZ,EAAa,EAAc,UACjD,EAAmB,EAEvB,CAAE,KAAM,CAER,CAGF,GAAI,CAAC,EACH,MAAO,IACL,EAFe,OAGf,WACA,mBACA,EACA,QAAS,OAAK,EAAY,8BAC5B,EAGF,GAAI,CACF,IAAM,EAAe,CAAA,EAAA,EAAA,OAAA,AAAO,EAAgB,iBACtC,CAAC,EAAa,EAAU,CAAG,MAAM,QAAQ,GAAG,CAAC,CACjD,EAAa,gBAAgB,CAAC,EAAc,QAC5C,EAAa,YAAY,CAAC,EAAc,QAAQ,KAAK,CAAC,SAAM,GAC7D,EACD,MAAO,IAAE,SAAI,cAAQ,YAAa,WAAW,mBAAU,CAAiB,CAC1E,CAAE,KAAM,CACN,MAAO,CACL,YACA,WACA,mBACA,EACA,QAAS,6BACX,CACF,CACF,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,MADO,CACA,YADiB,MAAQ,EAAM,OAAO,CAAG,kCACjC,CAC1B,CACF,CCpEO,eAAe,EAAuB,CAAiB,EAC5D,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,MAAO,wBAAyB,EAG3C,GAAI,CACF,IAAM,EAAO,CAAA,EAAA,EAAA,OAAA,AAAO,EAAyB,0BAGvC,EAA6B,CAFd,MAAM,EAAK,eAAe,CAAC,EAAA,EAEA,GAAG,CAAE,AAAD,IAAO,AAAC,CAC1D,WAAY,EAAE,UAAU,CACxB,MAAO,EAAE,KAAK,CACd,UAAW,EAAE,SAAS,CACtB,YAAa,EAAE,WAAW,CAC1B,WAA4B,MAAhB,EAAE,UAAU,CAAW,OAAO,EAAE,UAAU,OAAI,EAC1D,kBAAmB,EAAE,iBAAiB,CACtC,eAAoC,MAApB,EAAE,cAAc,CAAW,OAAO,EAAE,cAAc,OAAI,EACxE,CAAC,EAGK,EAAoB,MAAM,EAAsB,GAEtD,MAAO,SAAE,oBAAS,CAAkB,CACtC,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,MADO,CACA,YADiB,MAAQ,EAAM,OAAO,CAAG,8BACjC,CAC1B,CACF,CAEA,eAAe,EAAsB,CAAiB,EACpD,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAqB,sBAC1C,EAAU,MAAM,EAAY,QAAQ,CAAC,GAC3C,GAAI,CAAC,GAAS,SAAU,MAAO,EAAE,CAEjC,GAAM,CAAE,cAAY,CAAE,CAAG,MAAA,EAAA,CAAA,CAAA,MACnB,MAAE,CAAI,CAAE,CAAG,MAAA,EAAA,CAAA,CAAA,OACX,EAAO,CAAC,MAAA,EAAA,CAAA,CAAA,MAAA,CAAuB,CAAE,OAAO,CAExC,EAAc,EAAa,EAAK,EAAQ,QAAQ,CAAE,aAAc,SAChE,EAAO,EAAK,IAAI,CAAC,GAEvB,GAAI,CAAC,MAAM,OAAO,CAAC,GAAM,mBAAoB,MAAO,EAAE,CAEtD,OAAQ,EAAK,iBAAiB,CAA+B,GAAG,CAAC,AAAC,IAAW,CAC3E,GAD0E,OAC/D,OAAO,EAAM,SAAS,EAAI,GACrC,QAAS,OAAO,EAAM,OAAO,EAAI,IACjC,MAAO,EAAM,KAAK,CAAG,OAAO,EAAM,KAAK,EAAI,OAC3C,UAAW,EAAM,SAAS,CAAG,OAAO,EAAM,SAAS,OAAI,EACvD,YAAa,MAAM,OAAO,CAAC,EAAM,WAAW,EACvC,EAAM,WAAW,CAAe,GAAG,CAAC,aACrC,EACN,CAAC,CACH,CAAE,KAAM,CACN,MAAO,EAAE,AACX,CACF,CCrDO,eAAe,EAAe,CAAiB,EACpD,GAAI,CAAC,EAAU,IAAI,GACjB,CADqB,KACd,CAAE,MAAO,wBAAyB,EAG3C,GAAI,CACF,IAAM,EAAO,CAAA,EAAA,EAAA,OAAA,AAAO,EAAqB,sBACnC,EAAU,MAAM,EAAK,QAAQ,CAAC,GAEpC,GAAI,CAAC,EACH,MAAO,CADK,AACH,MAAO,mBAAoB,EAGtC,GAAI,CAAC,EAAQ,IAAI,CACf,CADiB,KACV,CAAE,UAAM,CAAU,EAqB3B,MAAO,CAAE,KAlBc,CACrB,MAAO,EAAQ,IAAI,CAAC,KAAK,CACzB,SAAU,EAAQ,IAAI,CAAC,QAAQ,CAC/B,MAAO,EAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,AAAC,IAAM,AAAC,CACpC,MAAO,EAAE,KAAK,EAAI,GAClB,YAAa,EAAE,WAAW,EAAI,GAC9B,MAAO,EAAE,KAAK,CACd,YAAa,CAAC,EAAE,WAAW,EAAI,EAAE,AAAF,EAAI,GAAG,CAAC,AAAC,IAAQ,CAAD,AAC7C,KAAM,EAAG,IAAI,CACb,YAAa,EAAG,WAAW,CAC3B,mBAAoB,CAAC,EAAG,kBAAkB,EAAI,EAAA,AAAE,EAAE,GAAG,CAAC,AAAC,IAAQ,CAAD,AAC5D,YAAa,EAAG,WAAW,CAC3B,SAAU,EAAG,QAAQ,AACvB,CAAC,GACH,CAAC,EACH,CAAC,CACH,CAEc,CAChB,CAAE,MAAO,EAAgB,CAEvB,MAAO,CAAE,MADO,CACA,YADiB,MAAQ,EAAM,OAAO,CAAG,6BACjC,CAC1B,CACF,iCFxDsB,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,6ECaA,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,gFCGA,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,0CCvBtB,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAWO,eAAe,EAAqB,CAAiB,EAC1D,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAqB,sBAC1C,EAAe,CAAA,EAAA,EAAA,OAAA,AAAO,EAAsB,uBAC5C,EAAW,CAAA,EAAA,EAAA,OAAA,AAAO,EAAwB,yBAC1C,EAAe,CAAA,EAAA,EAAA,OAAA,AAAO,EAAgB,iBACtC,EAAc,CAAA,EAAA,EAAA,OAAO,AAAP,EAAmC,6BAEjD,EAAU,MAAM,EAAY,QAAQ,CAAC,GAC3C,GAAI,CAAC,EAAS,OAAO,KAErB,IAAM,EAAM,EAAQ,UAAU,CAAG,MAAM,EAAa,QAAQ,CAAC,EAAQ,UAAU,EAAI,KAK7E,CAAC,EAAM,EAAY,EAAU,EAAU,CAAG,MAAM,QAAQ,GAAG,CAAC,CAChE,EAAS,UAAU,CAAC,EAAQ,cAAc,EAAE,KAAK,CAAC,IAAM,MACxD,EAAa,gBAAgB,CAAC,EAAQ,cAAc,EAAE,KAAK,CAAC,IAAM,QAClE,EAAY,OAAO,CAAC,GAAW,KAAK,CAAC,IAAM,MAC3C,EAAa,YAAY,CAAC,EAAQ,cAAc,EAAE,KAAK,CAAC,IAAM,MAC/D,EAEK,UAAE,CAAQ,CAAE,CAAG,CAAA,EAAA,EAAA,WAAA,AAAW,IAEhC,MAAO,CAAA,EAAA,EAAA,oBAAA,AAAoB,EAAC,EAAS,EAAK,CACxC,eAAgB,GAAM,gBACtB,EACA,SAAU,GAAU,SACpB,UAAW,QAAa,EACxB,eAAgB,EAAS,cAAc,CACvC,eAAgB,EAAS,cAAc,AACzC,EACF,CAAE,KAAM,CACN,OAAO,IACT,CACF,iCApCsB,IAAA,CAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,6CAAA,wECpBtB,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,KACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
@@ -1,3 +0,0 @@
1
- module.exports=[50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},71716,44447,a=>{"use strict";let b=(0,a.i(25700).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);a.s(["ChevronDown",()=>b],71716);var c=a.i(40617);a.s(["Code",()=>c.default],44447)},83886,a=>{"use strict";let b=(0,a.i(25700).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",()=>b],83886)},40617,a=>{"use strict";let b=(0,a.i(25700).default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);a.s(["default",()=>b])},76096,a=>{"use strict";let b=(0,a.i(25700).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);a.s(["default",()=>b])},45242,79620,73998,26633,30931,307,39116,a=>{"use strict";var b=a.i(25700);let c=(0,b.default)("paperclip",[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]]);a.s(["PaperclipIcon",()=>c],45242);var d=a.i(10973),e=a.i(85536);function f({className:a,...b}){return(0,d.jsx)("textarea",{"data-slot":"textarea",className:(0,e.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...b})}a.s(["Textarea",()=>f],79620);var g=a.i(2807),h=a.i(7052),h=h,i=a.i(76096);a.s(["DownloadIcon",()=>i.default],73998);var i=i,j=a.i(45670),k=a.i(50049);a.s(["VisuallyHidden",0,k],26633);var k=k;let l=(0,b.default)("file",[["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"}]]);var m=a.i(42642),m=m;let n=(0,b.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var o=a.i(40617),o=o;a.i(18948);let p=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),q=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function r(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024));return`${(a/Math.pow(1024,b)).toFixed(+(0!==b))} ${["B","KB","MB","GB"][b]}`}let s=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]);function t(a,b){let c=new URLSearchParams({path:a,mimeType:b});return`/api/attachments/preview?${c.toString()}`}function u({name:a,size:b,mimeType:c,path:f,onRemove:u,loading:v=!1,disabled:w=!1}){let x,y,z=(x=a.lastIndexOf("."))>=0?a.slice(x).toLowerCase():"",A=p.has(z)?n:".pdf"===z?m.default:q.has(z)?o.default:l,B=".pdf"===z?"bg-red-50 text-red-600":p.has(z)?"bg-blue-50 text-blue-600":q.has(z)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600",C=(y=a.lastIndexOf("."))>=0&&s.has(a.slice(y).toLowerCase());return v?(0,d.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-md border",children:(0,d.jsx)(h.default,{className:"text-muted-foreground h-5 w-5 animate-spin"})}):C?(0,d.jsxs)(j.Dialog,{children:[(0,d.jsxs)("div",{className:"group relative",children:[(0,d.jsx)(j.DialogTrigger,{asChild:!0,children:(0,d.jsx)("img",{src:t(f,c),alt:a,title:a,className:"h-12 w-12 cursor-pointer rounded-md border object-cover transition-opacity hover:opacity-80"})}),!w&&(0,d.jsx)("button",{type:"button",onClick:u,className:"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex","aria-label":`Remove ${a}`,children:(0,d.jsx)(g.X,{className:"h-3 w-3"})})]}),(0,d.jsxs)(j.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,d.jsx)(k.Root,{children:(0,d.jsxs)(j.DialogTitle,{children:["Preview: ",a]})}),(0,d.jsx)("div",{className:"relative bg-black/90",children:(0,d.jsx)("img",{src:t(f,c),alt:a,className:"h-auto max-h-[70vh] w-full object-contain"})}),(0,d.jsxs)("div",{className:"bg-background flex items-center gap-3 px-4 py-3",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,d.jsx)("span",{className:"truncate text-sm font-medium",children:a}),(0,d.jsx)("span",{className:"text-muted-foreground text-xs",children:r(b)})]}),(0,d.jsx)("a",{href:t(f,c),download:a,className:"text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-1.5 transition-colors","aria-label":`Download ${a}`,children:(0,d.jsx)(i.default,{className:"h-4 w-4"})})]})]})]}):(0,d.jsxs)("div",{className:"group relative flex items-center gap-2 rounded-full border py-1 pr-3 pl-2",children:[(0,d.jsx)("div",{className:(0,e.cn)("flex h-6 w-6 shrink-0 items-center justify-center rounded-full",B),children:(0,d.jsx)(A,{className:"h-3 w-3"})}),(0,d.jsx)("span",{className:"max-w-[120px] truncate text-sm",children:a}),(0,d.jsx)("span",{className:"text-muted-foreground text-xs",children:r(b)}),!w&&(0,d.jsx)("button",{type:"button",onClick:u,className:"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex","aria-label":`Remove ${a}`,children:(0,d.jsx)(g.X,{className:"h-3 w-3"})})]})}async function v(){let a=await fetch("/api/dialog/pick-files",{method:"POST"});if(!a.ok)throw Error("Failed to open file dialog");let b=await a.json();return b.cancelled?null:b.files}a.s(["AttachmentChip",()=>u],30931),a.s([],307),a.s(["pickFiles",()=>v],39116)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__b1e68e34._.js.map
@@ -1,4 +0,0 @@
1
- module.exports=[92658,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(28478)},12581,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},12513,a=>{"use strict";var b=a.i(92658),c=a.i(74533);let d={platform:process.platform,exec:(a,b)=>(0,c.execSync)(a,b)},e={darwin:"osascript -e 'POSIX path of (choose folder with prompt \"Select a repository folder\")'",linux:'zenity --file-selection --directory --title="Select a repository folder" 2>/dev/null',win32:"powershell -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; $f = New-Object System.Windows.Forms.FolderBrowserDialog; $f.Description = 'Select a repository folder'; if ($f.ShowDialog() -eq 'OK') { $f.SelectedPath } else { exit 1 }\""};class f{deps;constructor(a={}){this.deps={...d,...a}}getCommand(){return e[this.deps.platform]??null}pickFolder(){let a=this.getCommand();if(!a)throw Error(`Unsupported platform: ${this.deps.platform}`);try{let b=this.deps.exec(a,{encoding:"utf-8",timeout:6e4}).trim();return b.length>0?b:null}catch(a){var b;if("object"==typeof(b=a)&&null!==b&&"status"in b&&1===a.status)return null;throw a}}}async function g(){let a=new f;try{return{path:a.pickFolder()}}catch(a){return{path:null,error:a instanceof Error?a.message:"Failed to open folder dialog"}}}(0,a.i(12581).ensureServerEntryExports)([g]),(0,b.registerServerReference)(g,"00cf33ea9b60ae88b80ddb56c0512752bf4c5e31cd",null),a.s(["pickFolder",()=>g],12513)},86139,a=>{"use strict";var b=a.i(12513);a.s([],53565),a.i(53565),a.s(["00cf33ea9b60ae88b80ddb56c0512752bf4c5e31cd",()=>b.pickFolder],86139)}];
3
-
4
- //# sourceMappingURL=%5Broot-of-the-server%5D__fdc75809._.js.map
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41952,e=>{"use strict";var t=e.i(20314),n=e.i(79054),r=e.i(87889),o=e.i(3645);let a=(0,o.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var i=e.i(23925),l=e.i(26370),s=e.i(38573),d=e.i(49228);let c=(0,o.default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),u=(0,o.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),p=(0,o.default)("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]),m=(0,o.default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);var h=e.i(10714),h=h,f=e.i(3214),g=e.i(30702);let x=(0,o.default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]),v=(0,o.default)("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);var w=e.i(60112),b=e.i(31777),y=e.i(41957),j=e.i(98127),S=e.i(35364),C=e.i(51911),k=e.i(2828),M=e.i(26036),N=e.i(27069),I=e.i(91967),P=e.i(87342),E=e.i(5978),R=e.i(22528),T=e.i(66033),A=e.i(53532),D=e.i(41687),L=e.i(56720),H=e.i(13123),F=e.i(52740),z=e.i(39979),B=e.i(87620),_=e.i(86874),V=e.i(29297),O=e.i(36589),U=e.i(5192),W=e.i(23405),K=e.i(1693),q=e.i(73772),G=e.i(13044),$=[" ","Enter","ArrowUp","ArrowDown"],Y=[" ","Enter"],X="Select",[Z,Q,J]=(0,P.createCollection)(X),[ee,et]=(0,R.createContextScope)(X,[J,F.createPopperScope]),en=(0,F.createPopperScope)(),[er,eo]=ee(X),[ea,ei]=ee(X),el=e=>{let{__scopeSelect:r,children:o,open:a,defaultOpen:i,onOpenChange:l,value:s,defaultValue:d,onValueChange:c,dir:u,name:p,autoComplete:m,disabled:h,required:f,form:g}=e,x=en(r),[v,w]=n.useState(null),[b,y]=n.useState(null),[j,S]=n.useState(!1),C=(0,T.useDirection)(u),[k,M]=(0,O.useControllableState)({prop:a,defaultProp:i??!1,onChange:l,caller:X}),[N,I]=(0,O.useControllableState)({prop:s,defaultProp:d,onChange:c,caller:X}),P=n.useRef(null),E=!v||g||!!v.closest("form"),[R,A]=n.useState(new Set),D=Array.from(R).map(e=>e.props.value).join(";");return(0,t.jsx)(F.Root,{...x,children:(0,t.jsxs)(er,{required:f,scope:r,trigger:v,onTriggerChange:w,valueNode:b,onValueNodeChange:y,valueNodeHasChildren:j,onValueNodeHasChildrenChange:S,contentId:(0,H.useId)(),value:N,onValueChange:I,open:k,onOpenChange:M,dir:C,triggerPointerDownPosRef:P,disabled:h,children:[(0,t.jsx)(Z.Provider,{scope:r,children:(0,t.jsx)(ea,{scope:e.__scopeSelect,onNativeOptionAdd:n.useCallback(e=>{A(t=>new Set(t).add(e))},[]),onNativeOptionRemove:n.useCallback(e=>{A(t=>{let n=new Set(t);return n.delete(e),n})},[]),children:o})}),E?(0,t.jsxs)(e$,{"aria-hidden":!0,required:f,tabIndex:-1,name:p,autoComplete:m,value:N,onChange:e=>I(e.target.value),disabled:h,form:g,children:[void 0===N?(0,t.jsx)("option",{value:""}):null,Array.from(R)]},D):null]})})};el.displayName=X;var es="SelectTrigger",ed=n.forwardRef((e,r)=>{let{__scopeSelect:o,disabled:a=!1,...i}=e,l=en(o),s=eo(es,o),d=s.disabled||a,c=(0,E.useComposedRefs)(r,s.onTriggerChange),u=Q(o),p=n.useRef("touch"),[m,h,f]=eX(e=>{let t=u().filter(e=>!e.disabled),n=t.find(e=>e.value===s.value),r=eZ(t,e,n);void 0!==r&&s.onValueChange(r.value)}),g=e=>{d||(s.onOpenChange(!0),f()),e&&(s.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,t.jsx)(F.Anchor,{asChild:!0,...l,children:(0,t.jsx)(B.Primitive.button,{type:"button",role:"combobox","aria-controls":s.contentId,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":"none",dir:s.dir,"data-state":s.open?"open":"closed",disabled:d,"data-disabled":d?"":void 0,"data-placeholder":eY(s.value)?"":void 0,...i,ref:c,onClick:(0,I.composeEventHandlers)(i.onClick,e=>{e.currentTarget.focus(),"mouse"!==p.current&&g(e)}),onPointerDown:(0,I.composeEventHandlers)(i.onPointerDown,e=>{p.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),0===e.button&&!1===e.ctrlKey&&"mouse"===e.pointerType&&(g(e),e.preventDefault())}),onKeyDown:(0,I.composeEventHandlers)(i.onKeyDown,e=>{let t=""!==m.current;e.ctrlKey||e.altKey||e.metaKey||1!==e.key.length||h(e.key),(!t||" "!==e.key)&&$.includes(e.key)&&(g(),e.preventDefault())})})})});ed.displayName=es;var ec="SelectValue",eu=n.forwardRef((e,n)=>{let{__scopeSelect:r,className:o,style:a,children:i,placeholder:l="",...s}=e,d=eo(ec,r),{onValueNodeHasChildrenChange:c}=d,u=void 0!==i,p=(0,E.useComposedRefs)(n,d.onValueNodeChange);return(0,U.useLayoutEffect)(()=>{c(u)},[c,u]),(0,t.jsx)(B.Primitive.span,{...s,ref:p,style:{pointerEvents:"none"},children:eY(d.value)?(0,t.jsx)(t.Fragment,{children:l}):i})});eu.displayName=ec;var ep=n.forwardRef((e,n)=>{let{__scopeSelect:r,children:o,...a}=e;return(0,t.jsx)(B.Primitive.span,{"aria-hidden":!0,...a,ref:n,children:o||"▼"})});ep.displayName="SelectIcon";var em=e=>(0,t.jsx)(z.Portal,{asChild:!0,...e});em.displayName="SelectPortal";var eh="SelectContent",ef=n.forwardRef((e,r)=>{let o=eo(eh,e.__scopeSelect),[a,i]=n.useState();return((0,U.useLayoutEffect)(()=>{i(new DocumentFragment)},[]),o.open)?(0,t.jsx)(ew,{...e,ref:r}):a?M.createPortal((0,t.jsx)(eg,{scope:e.__scopeSelect,children:(0,t.jsx)(Z.Slot,{scope:e.__scopeSelect,children:(0,t.jsx)("div",{children:e.children})})}),a):null});ef.displayName=eh;var[eg,ex]=ee(eh),ev=(0,_.createSlot)("SelectContent.RemoveScroll"),ew=n.forwardRef((e,r)=>{let{__scopeSelect:o,position:a="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:l,onPointerDownOutside:s,side:d,sideOffset:c,align:u,alignOffset:p,arrowPadding:m,collisionBoundary:h,collisionPadding:f,sticky:g,hideWhenDetached:x,avoidCollisions:v,...w}=e,b=eo(eh,o),[y,j]=n.useState(null),[S,C]=n.useState(null),k=(0,E.useComposedRefs)(r,e=>j(e)),[M,N]=n.useState(null),[P,R]=n.useState(null),T=Q(o),[H,F]=n.useState(!1),z=n.useRef(!1);n.useEffect(()=>{if(y)return(0,q.hideOthers)(y)},[y]),(0,D.useFocusGuards)();let B=n.useCallback(e=>{let[t,...n]=T().map(e=>e.ref.current),[r]=n.slice(-1),o=document.activeElement;for(let n of e)if(n===o||(n?.scrollIntoView({block:"nearest"}),n===t&&S&&(S.scrollTop=0),n===r&&S&&(S.scrollTop=S.scrollHeight),n?.focus(),document.activeElement!==o))return},[T,S]),_=n.useCallback(()=>B([M,y]),[B,M,y]);n.useEffect(()=>{H&&_()},[H,_]);let{onOpenChange:V,triggerPointerDownPosRef:O}=b;n.useEffect(()=>{if(y){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(O.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(O.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():y.contains(n.target)||V(!1),document.removeEventListener("pointermove",t),O.current=null};return null!==O.current&&(document.addEventListener("pointermove",t),document.addEventListener("pointerup",n,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",t),document.removeEventListener("pointerup",n,{capture:!0})}}},[y,V,O]),n.useEffect(()=>{let e=()=>V(!1);return window.addEventListener("blur",e),window.addEventListener("resize",e),()=>{window.removeEventListener("blur",e),window.removeEventListener("resize",e)}},[V]);let[U,W]=eX(e=>{let t=T().filter(e=>!e.disabled),n=t.find(e=>e.ref.current===document.activeElement),r=eZ(t,e,n);r&&setTimeout(()=>r.ref.current.focus())}),K=n.useCallback((e,t,n)=>{let r=!z.current&&!n;(void 0!==b.value&&b.value===t||r)&&(N(e),r&&(z.current=!0))},[b.value]),$=n.useCallback(()=>y?.focus(),[y]),Y=n.useCallback((e,t,n)=>{let r=!z.current&&!n;(void 0!==b.value&&b.value===t||r)&&R(e)},[b.value]),X="popper"===a?ey:eb,Z=X===ey?{side:d,sideOffset:c,align:u,alignOffset:p,arrowPadding:m,collisionBoundary:h,collisionPadding:f,sticky:g,hideWhenDetached:x,avoidCollisions:v}:{};return(0,t.jsx)(eg,{scope:o,content:y,viewport:S,onViewportChange:C,itemRefCallback:K,selectedItem:M,onItemLeave:$,itemTextRefCallback:Y,focusSelectedItem:_,selectedItemText:P,position:a,isPositioned:H,searchRef:U,children:(0,t.jsx)(G.RemoveScroll,{as:ev,allowPinchZoom:!0,children:(0,t.jsx)(L.FocusScope,{asChild:!0,trapped:b.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:(0,I.composeEventHandlers)(i,e=>{b.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,t.jsx)(A.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:l,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>b.onOpenChange(!1),children:(0,t.jsx)(X,{role:"listbox",id:b.contentId,"data-state":b.open?"open":"closed",dir:b.dir,onContextMenu:e=>e.preventDefault(),...w,...Z,onPlaced:()=>F(!0),ref:k,style:{display:"flex",flexDirection:"column",outline:"none",...w.style},onKeyDown:(0,I.composeEventHandlers)(w.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if("Tab"===e.key&&e.preventDefault(),t||1!==e.key.length||W(e.key),["ArrowUp","ArrowDown","Home","End"].includes(e.key)){let t=T().filter(e=>!e.disabled).map(e=>e.ref.current);if(["ArrowUp","End"].includes(e.key)&&(t=t.slice().reverse()),["ArrowUp","ArrowDown"].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>B(t)),e.preventDefault()}})})})})})})});ew.displayName="SelectContentImpl";var eb=n.forwardRef((e,r)=>{let{__scopeSelect:o,onPlaced:a,...i}=e,l=eo(eh,o),s=ex(eh,o),[d,c]=n.useState(null),[u,p]=n.useState(null),m=(0,E.useComposedRefs)(r,e=>p(e)),h=Q(o),f=n.useRef(!1),g=n.useRef(!0),{viewport:x,selectedItem:v,selectedItemText:w,focusSelectedItem:b}=s,y=n.useCallback(()=>{if(l.trigger&&l.valueNode&&d&&u&&x&&v&&w){let e=l.trigger.getBoundingClientRect(),t=u.getBoundingClientRect(),n=l.valueNode.getBoundingClientRect(),r=w.getBoundingClientRect();if("rtl"!==l.dir){let o=r.left-t.left,a=n.left-o,i=e.left-a,l=e.width+i,s=Math.max(l,t.width),c=window.innerWidth-10,u=(0,N.clamp)(a,[10,Math.max(10,c-s)]);d.style.minWidth=l+"px",d.style.left=u+"px"}else{let o=t.right-r.right,a=window.innerWidth-n.right-o,i=window.innerWidth-e.right-a,l=e.width+i,s=Math.max(l,t.width),c=window.innerWidth-10,u=(0,N.clamp)(a,[10,Math.max(10,c-s)]);d.style.minWidth=l+"px",d.style.right=u+"px"}let o=h(),i=window.innerHeight-20,s=x.scrollHeight,c=window.getComputedStyle(u),p=parseInt(c.borderTopWidth,10),m=parseInt(c.paddingTop,10),g=parseInt(c.borderBottomWidth,10),b=p+m+s+parseInt(c.paddingBottom,10)+g,y=Math.min(5*v.offsetHeight,b),j=window.getComputedStyle(x),S=parseInt(j.paddingTop,10),C=parseInt(j.paddingBottom,10),k=e.top+e.height/2-10,M=v.offsetHeight/2,I=p+m+(v.offsetTop+M);if(I<=k){let e=o.length>0&&v===o[o.length-1].ref.current;d.style.bottom="0px";let t=Math.max(i-k,M+(e?C:0)+(u.clientHeight-x.offsetTop-x.offsetHeight)+g);d.style.height=I+t+"px"}else{let e=o.length>0&&v===o[0].ref.current;d.style.top="0px";let t=Math.max(k,p+x.offsetTop+(e?S:0)+M);d.style.height=t+(b-I)+"px",x.scrollTop=I-k+x.offsetTop}d.style.margin="10px 0",d.style.minHeight=y+"px",d.style.maxHeight=i+"px",a?.(),requestAnimationFrame(()=>f.current=!0)}},[h,l.trigger,l.valueNode,d,u,x,v,w,l.dir,a]);(0,U.useLayoutEffect)(()=>y(),[y]);let[j,S]=n.useState();(0,U.useLayoutEffect)(()=>{u&&S(window.getComputedStyle(u).zIndex)},[u]);let C=n.useCallback(e=>{e&&!0===g.current&&(y(),b?.(),g.current=!1)},[y,b]);return(0,t.jsx)(ej,{scope:o,contentWrapper:d,shouldExpandOnScrollRef:f,onScrollButtonChange:C,children:(0,t.jsx)("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:j},children:(0,t.jsx)(B.Primitive.div,{...i,ref:m,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});eb.displayName="SelectItemAlignedPosition";var ey=n.forwardRef((e,n)=>{let{__scopeSelect:r,align:o="start",collisionPadding:a=10,...i}=e,l=en(r);return(0,t.jsx)(F.Content,{...l,...i,ref:n,align:o,collisionPadding:a,style:{boxSizing:"border-box",...i.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});ey.displayName="SelectPopperPosition";var[ej,eS]=ee(eh,{}),eC="SelectViewport",ek=n.forwardRef((e,r)=>{let{__scopeSelect:o,nonce:a,...i}=e,l=ex(eC,o),s=eS(eC,o),d=(0,E.useComposedRefs)(r,l.onViewportChange),c=n.useRef(0);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:a}),(0,t.jsx)(Z.Slot,{scope:o,children:(0,t.jsx)(B.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:d,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:(0,I.composeEventHandlers)(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=s;if(r?.current&&n){let e=Math.abs(c.current-t.scrollTop);if(e>0){let r=window.innerHeight-20,o=Math.max(parseFloat(n.style.minHeight),parseFloat(n.style.height));if(o<r){let a=o+e,i=Math.min(r,a),l=a-i;n.style.height=i+"px","0px"===n.style.bottom&&(t.scrollTop=l>0?l:0,n.style.justifyContent="flex-end")}}}c.current=t.scrollTop})})})]})});ek.displayName=eC;var eM="SelectGroup",[eN,eI]=ee(eM),eP=n.forwardRef((e,n)=>{let{__scopeSelect:r,...o}=e,a=(0,H.useId)();return(0,t.jsx)(eN,{scope:r,id:a,children:(0,t.jsx)(B.Primitive.div,{role:"group","aria-labelledby":a,...o,ref:n})})});eP.displayName=eM;var eE="SelectLabel",eR=n.forwardRef((e,n)=>{let{__scopeSelect:r,...o}=e,a=eI(eE,r);return(0,t.jsx)(B.Primitive.div,{id:a.id,...o,ref:n})});eR.displayName=eE;var eT="SelectItem",[eA,eD]=ee(eT),eL=n.forwardRef((e,r)=>{let{__scopeSelect:o,value:a,disabled:i=!1,textValue:l,...s}=e,d=eo(eT,o),c=ex(eT,o),u=d.value===a,[p,m]=n.useState(l??""),[h,f]=n.useState(!1),g=(0,E.useComposedRefs)(r,e=>c.itemRefCallback?.(e,a,i)),x=(0,H.useId)(),v=n.useRef("touch"),w=()=>{i||(d.onValueChange(a),d.onOpenChange(!1))};if(""===a)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,t.jsx)(eA,{scope:o,value:a,disabled:i,textId:x,isSelected:u,onItemTextChange:n.useCallback(e=>{m(t=>t||(e?.textContent??"").trim())},[]),children:(0,t.jsx)(Z.ItemSlot,{scope:o,value:a,disabled:i,textValue:p,children:(0,t.jsx)(B.Primitive.div,{role:"option","aria-labelledby":x,"data-highlighted":h?"":void 0,"aria-selected":u&&h,"data-state":u?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...s,ref:g,onFocus:(0,I.composeEventHandlers)(s.onFocus,()=>f(!0)),onBlur:(0,I.composeEventHandlers)(s.onBlur,()=>f(!1)),onClick:(0,I.composeEventHandlers)(s.onClick,()=>{"mouse"!==v.current&&w()}),onPointerUp:(0,I.composeEventHandlers)(s.onPointerUp,()=>{"mouse"===v.current&&w()}),onPointerDown:(0,I.composeEventHandlers)(s.onPointerDown,e=>{v.current=e.pointerType}),onPointerMove:(0,I.composeEventHandlers)(s.onPointerMove,e=>{v.current=e.pointerType,i?c.onItemLeave?.():"mouse"===v.current&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,I.composeEventHandlers)(s.onPointerLeave,e=>{e.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:(0,I.composeEventHandlers)(s.onKeyDown,e=>{(c.searchRef?.current===""||" "!==e.key)&&(Y.includes(e.key)&&w()," "===e.key&&e.preventDefault())})})})})});eL.displayName=eT;var eH="SelectItemText",eF=n.forwardRef((e,r)=>{let{__scopeSelect:o,className:a,style:i,...l}=e,s=eo(eH,o),d=ex(eH,o),c=eD(eH,o),u=ei(eH,o),[p,m]=n.useState(null),h=(0,E.useComposedRefs)(r,e=>m(e),c.onItemTextChange,e=>d.itemTextRefCallback?.(e,c.value,c.disabled)),f=p?.textContent,g=n.useMemo(()=>(0,t.jsx)("option",{value:c.value,disabled:c.disabled,children:f},c.value),[c.disabled,c.value,f]),{onNativeOptionAdd:x,onNativeOptionRemove:v}=u;return(0,U.useLayoutEffect)(()=>(x(g),()=>v(g)),[x,v,g]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(B.Primitive.span,{id:c.textId,...l,ref:h}),c.isSelected&&s.valueNode&&!s.valueNodeHasChildren?M.createPortal(l.children,s.valueNode):null]})});eF.displayName=eH;var ez="SelectItemIndicator",eB=n.forwardRef((e,n)=>{let{__scopeSelect:r,...o}=e;return eD(ez,r).isSelected?(0,t.jsx)(B.Primitive.span,{"aria-hidden":!0,...o,ref:n}):null});eB.displayName=ez;var e_="SelectScrollUpButton",eV=n.forwardRef((e,r)=>{let o=ex(e_,e.__scopeSelect),a=eS(e_,e.__scopeSelect),[i,l]=n.useState(!1),s=(0,E.useComposedRefs)(r,a.onScrollButtonChange);return(0,U.useLayoutEffect)(()=>{if(o.viewport&&o.isPositioned){let e=function(){l(t.scrollTop>0)},t=o.viewport;return e(),t.addEventListener("scroll",e),()=>t.removeEventListener("scroll",e)}},[o.viewport,o.isPositioned]),i?(0,t.jsx)(eW,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=o;e&&t&&(e.scrollTop=e.scrollTop-t.offsetHeight)}}):null});eV.displayName=e_;var eO="SelectScrollDownButton",eU=n.forwardRef((e,r)=>{let o=ex(eO,e.__scopeSelect),a=eS(eO,e.__scopeSelect),[i,l]=n.useState(!1),s=(0,E.useComposedRefs)(r,a.onScrollButtonChange);return(0,U.useLayoutEffect)(()=>{if(o.viewport&&o.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;l(Math.ceil(t.scrollTop)<e)},t=o.viewport;return e(),t.addEventListener("scroll",e),()=>t.removeEventListener("scroll",e)}},[o.viewport,o.isPositioned]),i?(0,t.jsx)(eW,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=o;e&&t&&(e.scrollTop=e.scrollTop+t.offsetHeight)}}):null});eU.displayName=eO;var eW=n.forwardRef((e,r)=>{let{__scopeSelect:o,onAutoScroll:a,...i}=e,l=ex("SelectScrollButton",o),s=n.useRef(null),d=Q(o),c=n.useCallback(()=>{null!==s.current&&(window.clearInterval(s.current),s.current=null)},[]);return n.useEffect(()=>()=>c(),[c]),(0,U.useLayoutEffect)(()=>{let e=d().find(e=>e.ref.current===document.activeElement);e?.ref.current?.scrollIntoView({block:"nearest"})},[d]),(0,t.jsx)(B.Primitive.div,{"aria-hidden":!0,...i,ref:r,style:{flexShrink:0,...i.style},onPointerDown:(0,I.composeEventHandlers)(i.onPointerDown,()=>{null===s.current&&(s.current=window.setInterval(a,50))}),onPointerMove:(0,I.composeEventHandlers)(i.onPointerMove,()=>{l.onItemLeave?.(),null===s.current&&(s.current=window.setInterval(a,50))}),onPointerLeave:(0,I.composeEventHandlers)(i.onPointerLeave,()=>{c()})})}),eK=n.forwardRef((e,n)=>{let{__scopeSelect:r,...o}=e;return(0,t.jsx)(B.Primitive.div,{"aria-hidden":!0,...o,ref:n})});eK.displayName="SelectSeparator";var eq="SelectArrow",eG=n.forwardRef((e,n)=>{let{__scopeSelect:r,...o}=e,a=en(r),i=eo(eq,r),l=ex(eq,r);return i.open&&"popper"===l.position?(0,t.jsx)(F.Arrow,{...a,...o,ref:n}):null});eG.displayName=eq;var e$=n.forwardRef(({__scopeSelect:e,value:r,...o},a)=>{let i=n.useRef(null),l=(0,E.useComposedRefs)(a,i),s=(0,W.usePrevious)(r);return n.useEffect(()=>{let e=i.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(s!==r&&t){let n=new Event("change",{bubbles:!0});t.call(e,r),e.dispatchEvent(n)}},[s,r]),(0,t.jsx)(B.Primitive.select,{...o,style:{...K.VISUALLY_HIDDEN_STYLES,...o.style},ref:l,defaultValue:r})});function eY(e){return""===e||void 0===e}function eX(e){let t=(0,V.useCallbackRef)(e),r=n.useRef(""),o=n.useRef(0),a=n.useCallback(e=>{let n=r.current+e;t(n),function e(t){r.current=t,window.clearTimeout(o.current),""!==t&&(o.current=window.setTimeout(()=>e(""),1e3))}(n)},[t]),i=n.useCallback(()=>{r.current="",window.clearTimeout(o.current)},[]);return n.useEffect(()=>()=>window.clearTimeout(o.current),[]),[r,a,i]}function eZ(e,t,n){var r,o;let a=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,l=(r=e,o=Math.max(i,0),r.map((e,t)=>r[(o+t)%r.length]));1===a.length&&(l=l.filter(e=>e!==n));let s=l.find(e=>e.textValue.toLowerCase().startsWith(a.toLowerCase()));return s!==n?s:void 0}e$.displayName="SelectBubbleInput",e.s(["Arrow",()=>eG,"Content",()=>ef,"Group",()=>eP,"Icon",()=>ep,"Item",()=>eL,"ItemIndicator",()=>eB,"ItemText",()=>eF,"Label",()=>eR,"Portal",()=>em,"Root",()=>el,"ScrollDownButton",()=>eU,"ScrollUpButton",()=>eV,"Select",()=>el,"SelectArrow",()=>eG,"SelectContent",()=>ef,"SelectGroup",()=>eP,"SelectIcon",()=>ep,"SelectItem",()=>eL,"SelectItemIndicator",()=>eB,"SelectItemText",()=>eF,"SelectLabel",()=>eR,"SelectPortal",()=>em,"SelectScrollDownButton",()=>eU,"SelectScrollUpButton",()=>eV,"SelectSeparator",()=>eK,"SelectTrigger",()=>ed,"SelectValue",()=>eu,"SelectViewport",()=>ek,"Separator",()=>eK,"Trigger",()=>ed,"Value",()=>eu,"Viewport",()=>ek,"createSelectScope",()=>et],83830);var eQ=e.i(83830),eQ=eQ,eJ=e.i(99105);let e0=(0,o.default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),e1=eQ.Root;eQ.Group;let e2=eQ.Value,e3=n.forwardRef(({className:e,children:n,...r},o)=>(0,t.jsxs)(eQ.Trigger,{ref:o,className:(0,b.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...r,children:[n,(0,t.jsx)(eQ.Icon,{asChild:!0,children:(0,t.jsx)(eJ.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));e3.displayName=eQ.Trigger.displayName;let e5=n.forwardRef(({className:e,...n},r)=>(0,t.jsx)(eQ.ScrollUpButton,{ref:r,className:(0,b.cn)("flex cursor-default items-center justify-center py-1",e),...n,children:(0,t.jsx)(e0,{className:"h-4 w-4"})}));e5.displayName=eQ.ScrollUpButton.displayName;let e4=n.forwardRef(({className:e,...n},r)=>(0,t.jsx)(eQ.ScrollDownButton,{ref:r,className:(0,b.cn)("flex cursor-default items-center justify-center py-1",e),...n,children:(0,t.jsx)(eJ.ChevronDown,{className:"h-4 w-4"})}));e4.displayName=eQ.ScrollDownButton.displayName;let e8=n.forwardRef(({className:e,children:n,position:r="popper",...o},a)=>(0,t.jsx)(eQ.Portal,{children:(0,t.jsxs)(eQ.Content,{ref:a,className:(0,b.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,...o,children:[(0,t.jsx)(e5,{}),(0,t.jsx)(eQ.Viewport,{className:(0,b.cn)("p-1","popper"===r&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:n}),(0,t.jsx)(e4,{})]})}));e8.displayName=eQ.Content.displayName,n.forwardRef(({className:e,...n},r)=>(0,t.jsx)(eQ.Label,{ref:r,className:(0,b.cn)("px-2 py-1.5 text-sm font-semibold",e),...n})).displayName=eQ.Label.displayName;let e6=n.forwardRef(({className:e,children:n,...r},o)=>(0,t.jsxs)(eQ.Item,{ref:o,className:(0,b.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...r,children:[(0,t.jsx)("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,t.jsx)(eQ.ItemIndicator,{children:(0,t.jsx)(i.Check,{className:"h-4 w-4"})})}),(0,t.jsx)(eQ.ItemText,{children:n})]}));e6.displayName=eQ.Item.displayName,n.forwardRef(({className:e,...n},r)=>(0,t.jsx)(eQ.Separator,{ref:r,className:(0,b.cn)("bg-muted -mx-1 my-1 h-px",e),...n})).displayName=eQ.Separator.displayName;var e7=e.i(21023);let e9=(0,e7.createServerReference)("4083e1ed2b6a1d29c7d64acbe9771192b7d7b27da5",e7.callServer,void 0,e7.findSourceMapURL,"updateSettingsAction");var te=e.i(17406),tt=e.i(98804),tn=e.i(44229),tr=e.i(83902);function to(e){return(0,t.jsx)(tn.Code,{className:(0,b.cn)("h-4 w-4",e.className),...e})}function ta({className:e}){return(0,t.jsx)(tt.default,{src:"/icons/editors/vscode.svg",alt:"VS Code",width:24,height:24,className:(0,b.cn)("rounded-sm object-contain",e)})}function ti({className:e}){return(0,t.jsx)(tt.default,{src:"/icons/agents/cursor.jpeg",alt:"Cursor",width:24,height:24,className:(0,b.cn)("rounded-sm object-contain",e)})}function tl({className:e}){return(0,t.jsx)(tt.default,{src:"/icons/editors/windsurf.svg",alt:"Windsurf",width:24,height:24,className:(0,b.cn)("rounded-sm object-contain",e)})}function ts({className:e}){return(0,t.jsx)(tt.default,{src:"/icons/editors/zed.svg",alt:"Zed",width:24,height:24,className:(0,b.cn)("rounded-sm object-contain",e)})}function td({className:e,...n}){return(0,t.jsx)(tr.Rocket,{className:(0,b.cn)("h-4 w-4",e),...n})}ta.displayName="VsCodeIcon",ti.displayName="CursorEditorIcon",tl.displayName="WindsurfIcon",ts.displayName="ZedIcon",td.displayName="AntigravityIcon";let tc={vscode:ta,cursor:ti,windsurf:tl,zed:ts,antigravity:td};var tu=e.i(41413),tp=e.i(77624),tm=["PageUp","PageDown"],th=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],tf={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},tg="Slider",[tx,tv,tw]=(0,P.createCollection)(tg),[tb,ty]=(0,R.createContextScope)(tg,[tw]),[tj,tS]=tb(tg),tC=n.forwardRef((e,r)=>{let{name:o,min:a=0,max:i=100,step:l=1,orientation:s="horizontal",disabled:d=!1,minStepsBetweenThumbs:c=0,defaultValue:u=[a],value:p,onValueChange:m=()=>{},onValueCommit:h=()=>{},inverted:f=!1,form:g,...x}=e,v=n.useRef(new Set),w=n.useRef(0),b="horizontal"===s,[y=[],j]=(0,O.useControllableState)({prop:p,defaultProp:u,onChange:e=>{let t=[...v.current];t[w.current]?.focus(),m(e)}}),S=n.useRef(y);function C(e,t,{commit:n}={commit:!1}){let r,o=(String(l).split(".")[1]||"").length,s=Math.round((Math.round((e-a)/l)*l+a)*(r=Math.pow(10,o)))/r,d=(0,N.clamp)(s,[a,i]);j((e=[])=>{let r=function(e=[],t,n){let r=[...e];return r[n]=t,r.sort((e,t)=>e-t)}(e,d,t);if(!function(e,t){if(t>0)return Math.min(...e.slice(0,-1).map((t,n)=>e[n+1]-t))>=t;return!0}(r,c*l))return e;{w.current=r.indexOf(d);let t=String(r)!==String(e);return t&&n&&h(r),t?r:e}})}return(0,t.jsx)(tj,{scope:e.__scopeSlider,name:o,disabled:d,min:a,max:i,valueIndexToChangeRef:w,thumbs:v.current,values:y,orientation:s,form:g,children:(0,t.jsx)(tx.Provider,{scope:e.__scopeSlider,children:(0,t.jsx)(tx.Slot,{scope:e.__scopeSlider,children:(0,t.jsx)(b?tN:tI,{"aria-disabled":d,"data-disabled":d?"":void 0,...x,ref:r,onPointerDown:(0,I.composeEventHandlers)(x.onPointerDown,()=>{d||(S.current=y)}),min:a,max:i,inverted:f,onSlideStart:d?void 0:function(e){let t=function(e,t){if(1===e.length)return 0;let n=e.map(e=>Math.abs(e-t)),r=Math.min(...n);return n.indexOf(r)}(y,e);C(e,t)},onSlideMove:d?void 0:function(e){C(e,w.current)},onSlideEnd:d?void 0:function(){let e=S.current[w.current];y[w.current]!==e&&h(y)},onHomeKeyDown:()=>!d&&C(a,0,{commit:!0}),onEndKeyDown:()=>!d&&C(i,y.length-1,{commit:!0}),onStepKeyDown:({event:e,direction:t})=>{if(!d){let n=tm.includes(e.key)||e.shiftKey&&th.includes(e.key),r=w.current;C(y[r]+l*(n?10:1)*t,r,{commit:!0})}}})})})})});tC.displayName=tg;var[tk,tM]=tb(tg,{startEdge:"left",endEdge:"right",size:"width",direction:1}),tN=n.forwardRef((e,r)=>{let{min:o,max:a,dir:i,inverted:l,onSlideStart:s,onSlideMove:d,onSlideEnd:c,onStepKeyDown:u,...p}=e,[m,h]=n.useState(null),f=(0,E.useComposedRefs)(r,e=>h(e)),g=n.useRef(void 0),x=(0,T.useDirection)(i),v="ltr"===x,w=v&&!l||!v&&l;function b(e){let t=g.current||m.getBoundingClientRect(),n=tB([0,t.width],w?[o,a]:[a,o]);return g.current=t,n(e-t.left)}return(0,t.jsx)(tk,{scope:e.__scopeSlider,startEdge:w?"left":"right",endEdge:w?"right":"left",direction:w?1:-1,size:"width",children:(0,t.jsx)(tP,{dir:x,"data-orientation":"horizontal",...p,ref:f,style:{...p.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:e=>{let t=b(e.clientX);s?.(t)},onSlideMove:e=>{let t=b(e.clientX);d?.(t)},onSlideEnd:()=>{g.current=void 0,c?.()},onStepKeyDown:e=>{let t=tf[w?"from-left":"from-right"].includes(e.key);u?.({event:e,direction:t?-1:1})}})})}),tI=n.forwardRef((e,r)=>{let{min:o,max:a,inverted:i,onSlideStart:l,onSlideMove:s,onSlideEnd:d,onStepKeyDown:c,...u}=e,p=n.useRef(null),m=(0,E.useComposedRefs)(r,p),h=n.useRef(void 0),f=!i;function g(e){let t=h.current||p.current.getBoundingClientRect(),n=tB([0,t.height],f?[a,o]:[o,a]);return h.current=t,n(e-t.top)}return(0,t.jsx)(tk,{scope:e.__scopeSlider,startEdge:f?"bottom":"top",endEdge:f?"top":"bottom",size:"height",direction:f?1:-1,children:(0,t.jsx)(tP,{"data-orientation":"vertical",...u,ref:m,style:{...u.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:e=>{let t=g(e.clientY);l?.(t)},onSlideMove:e=>{let t=g(e.clientY);s?.(t)},onSlideEnd:()=>{h.current=void 0,d?.()},onStepKeyDown:e=>{let t=tf[f?"from-bottom":"from-top"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),tP=n.forwardRef((e,n)=>{let{__scopeSlider:r,onSlideStart:o,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:l,onEndKeyDown:s,onStepKeyDown:d,...c}=e,u=tS(tg,r);return(0,t.jsx)(B.Primitive.span,{...c,ref:n,onKeyDown:(0,I.composeEventHandlers)(e.onKeyDown,e=>{"Home"===e.key?(l(e),e.preventDefault()):"End"===e.key?(s(e),e.preventDefault()):tm.concat(th).includes(e.key)&&(d(e),e.preventDefault())}),onPointerDown:(0,I.composeEventHandlers)(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),u.thumbs.has(t)?t.focus():o(e)}),onPointerMove:(0,I.composeEventHandlers)(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:(0,I.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),tE="SliderTrack",tR=n.forwardRef((e,n)=>{let{__scopeSlider:r,...o}=e,a=tS(tE,r);return(0,t.jsx)(B.Primitive.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...o,ref:n})});tR.displayName=tE;var tT="SliderRange",tA=n.forwardRef((e,r)=>{let{__scopeSlider:o,...a}=e,i=tS(tT,o),l=tM(tT,o),s=n.useRef(null),d=(0,E.useComposedRefs)(r,s),c=i.values.length,u=i.values.map(e=>tz(e,i.min,i.max)),p=c>1?Math.min(...u):0,m=100-Math.max(...u);return(0,t.jsx)(B.Primitive.span,{"data-orientation":i.orientation,"data-disabled":i.disabled?"":void 0,...a,ref:d,style:{...e.style,[l.startEdge]:p+"%",[l.endEdge]:m+"%"}})});tA.displayName=tT;var tD="SliderThumb",tL=n.forwardRef((e,r)=>{let o=tv(e.__scopeSlider),[a,i]=n.useState(null),l=(0,E.useComposedRefs)(r,e=>i(e)),s=n.useMemo(()=>a?o().findIndex(e=>e.ref.current===a):-1,[o,a]);return(0,t.jsx)(tH,{...e,ref:l,index:s})}),tH=n.forwardRef((e,r)=>{var o,a,i,l,s;let d,c,{__scopeSlider:u,index:p,name:m,...h}=e,f=tS(tD,u),g=tM(tD,u),[x,v]=n.useState(null),w=(0,E.useComposedRefs)(r,e=>v(e)),b=!x||f.form||!!x.closest("form"),y=(0,tp.useSize)(x),j=f.values[p],S=void 0===j?0:tz(j,f.min,f.max),C=(o=p,(a=f.values.length)>2?`Value ${o+1} of ${a}`:2===a?["Minimum","Maximum"][o]:void 0),k=y?.[g.size],M=k?(i=k,l=S,s=g.direction,c=tB([0,50],[0,d=i/2]),(d-c(l)*s)*s):0;return n.useEffect(()=>{if(x)return f.thumbs.add(x),()=>{f.thumbs.delete(x)}},[x,f.thumbs]),(0,t.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[g.startEdge]:`calc(${S}% + ${M}px)`},children:[(0,t.jsx)(tx.ItemSlot,{scope:e.__scopeSlider,children:(0,t.jsx)(B.Primitive.span,{role:"slider","aria-label":e["aria-label"]||C,"aria-valuemin":f.min,"aria-valuenow":j,"aria-valuemax":f.max,"aria-orientation":f.orientation,"data-orientation":f.orientation,"data-disabled":f.disabled?"":void 0,tabIndex:f.disabled?void 0:0,...h,ref:w,style:void 0===j?{display:"none"}:e.style,onFocus:(0,I.composeEventHandlers)(e.onFocus,()=>{f.valueIndexToChangeRef.current=p})})}),b&&(0,t.jsx)(tF,{name:m??(f.name?f.name+(f.values.length>1?"[]":""):void 0),form:f.form,value:j},p)]})});tL.displayName=tD;var tF=n.forwardRef(({__scopeSlider:e,value:r,...o},a)=>{let i=n.useRef(null),l=(0,E.useComposedRefs)(i,a),s=(0,W.usePrevious)(r);return n.useEffect(()=>{let e=i.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(s!==r&&t){let n=new Event("input",{bubbles:!0});t.call(e,r),e.dispatchEvent(n)}},[s,r]),(0,t.jsx)(B.Primitive.input,{style:{display:"none"},...o,ref:l,defaultValue:r})});function tz(e,t,n){return(0,N.clamp)(100/(n-t)*(e-t),[0,100])}function tB(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}tF.displayName="RadioBubbleInput",e.s(["Range",()=>tA,"Root",()=>tC,"Slider",()=>tC,"SliderRange",()=>tA,"SliderThumb",()=>tL,"SliderTrack",()=>tR,"Thumb",()=>tL,"Track",()=>tR,"createSliderScope",()=>ty],29991);var t_=e.i(29991),t_=t_;function tV({className:e,defaultValue:r,value:o,min:a=0,max:i=100,...l}){let s=n.useMemo(()=>Array.isArray(o)?o:Array.isArray(r)?r:[a,i],[o,r,a,i]);return(0,t.jsxs)(t_.Root,{"data-slot":"slider",defaultValue:r,value:o,min:a,max:i,className:(0,b.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...l,children:[(0,t.jsx)(t_.Track,{"data-slot":"slider-track",className:(0,b.cn)("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"),children:(0,t.jsx)(t_.Range,{"data-slot":"slider-range",className:(0,b.cn)("bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),Array.from({length:s.length},(e,n)=>(0,t.jsx)(t_.Thumb,{"data-slot":"slider-thumb",className:"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"},n))]})}let tO=[60,120,300,600,900,1800,2700,3600,7200,10800,14400,21600,28800,43200,86400],tU=tO.length-1;function tW(e){let t=0,n=Math.abs(e-tO[0]);for(let r=1;r<tO.length;r++){let o=Math.abs(e-tO[r]);o<n&&(n=o,t=r)}return t}function tK({id:e,testId:r,value:o,onChange:a,onBlur:i,defaultSeconds:l=1800}){var s;let d,c,u=(""===o?l:parseInt(o,10))||l,[p,m]=(0,n.useState)(()=>tW(u)),h=tW(u);h!==p&&tO[p]!==u&&m(h);let f=(0,n.useCallback)(([e])=>{m(e),a(String(tO[e]))},[a]);return(0,t.jsxs)("div",{className:"flex w-55 items-center gap-2",children:[(0,t.jsx)(tV,{id:e,"data-testid":r,min:0,max:tU,step:1,value:[p],onValueChange:f,onValueCommit:()=>i(),className:"min-w-0 flex-1"}),(0,t.jsx)("span",{className:"text-muted-foreground shrink-0 text-right text-xs tabular-nums",children:(d=Math.floor((s=tO[p])/3600),c=Math.round(s%3600/60),0===d?`${c}m`:0===c?`${d}h`:`${d}h ${c}m`)})]})}let tq=[{value:te.AgentAuthMethod.Session,label:"Session"},{value:te.AgentAuthMethod.Token,label:"Token"}],tG=[{value:te.EditorType.VsCode,label:"VS Code"},{value:te.EditorType.Cursor,label:"Cursor"},{value:te.EditorType.Windsurf,label:"Windsurf"},{value:te.EditorType.Zed,label:"Zed"},{value:te.EditorType.Antigravity,label:"Antigravity"}],t$=[{id:"agent",label:"Agent",icon:l.Bot},{id:"environment",label:"Environment",icon:s.Terminal},{id:"workflow",label:"Workflow",icon:d.GitBranch},{id:"ci",label:"CI",icon:c},{id:"stage-timeouts",label:"Timeouts",icon:v},{id:"notifications",label:"Notifications",icon:u},{id:"feature-flags",label:"Flags",icon:p},{id:"database",label:"Database",icon:m}];function tY({label:e,description:n,htmlFor:r,children:o}){return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-4 border-b py-2.5 last:border-b-0",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)(y.Label,{htmlFor:r,className:"cursor-pointer text-sm font-normal whitespace-nowrap",children:e}),n?(0,t.jsx)("p",{className:"text-muted-foreground text-[11px] leading-tight",children:n}):null]}),(0,t.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:o})]})}function tX({label:e,description:n,id:r,testId:o,checked:a,onChange:i,disabled:l}){return(0,t.jsx)(tY,{label:e,description:n,htmlFor:r,children:(0,t.jsx)(C.Switch,{id:r,"data-testid":o,checked:a,onCheckedChange:i,disabled:l,className:(0,b.cn)("cursor-pointer",l&&"cursor-not-allowed opacity-50")})})}function tZ({icon:e,title:n,description:r,badge:o,testId:a,children:i}){return(0,t.jsxs)("div",{className:"bg-background rounded-lg border","data-testid":a,children:[(0,t.jsxs)("div",{className:"bg-muted/30 border-b px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(e,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,t.jsx)("h2",{className:"text-sm font-semibold",children:n}),o?(0,t.jsx)("span",{className:"bg-muted text-muted-foreground rounded px-1.5 py-0.5 text-[9px] font-medium tracking-wider uppercase",children:o}):null]}),(0,t.jsx)("p",{className:"text-muted-foreground mt-0.5 text-[11px]",children:r})]}),(0,t.jsx)("div",{className:"px-4",children:i})]})}function tQ({id:e,testId:n,value:r,onChange:o,onBlur:a,placeholder:i,min:l=1,max:s,step:d=1,suffix:c}){let u=""===r?void 0:parseInt(r,10);return(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center overflow-hidden rounded-md border",children:[(0,t.jsx)("button",{type:"button",onClick:()=>{o(String(Math.max(l,(u??parseInt(i,10))-d)))},onMouseUp:a,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-r transition-colors","aria-label":"Decrease",children:(0,t.jsx)(h.default,{className:"h-3 w-3"})}),(0,t.jsx)("input",{id:e,"data-testid":n,type:"text",inputMode:"numeric",pattern:"[0-9]*",value:r,placeholder:i,onChange:e=>{o(e.target.value.replace(/[^0-9]/g,""))},onBlur:a,className:"h-8 w-14 bg-transparent text-center text-xs outline-none"}),(0,t.jsx)("button",{type:"button",onClick:()=>{let e;e=u??parseInt(i,10),o(String(null!=s?Math.min(s,e+d):e+d))},onMouseUp:a,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-l transition-colors","aria-label":"Increase",children:(0,t.jsx)(f.Plus,{className:"h-3 w-3"})})]}),c?(0,t.jsx)("span",{className:"text-muted-foreground text-[11px]",children:c}):null]})}function tJ({children:e}){return(0,t.jsx)("div",{className:"border-b pt-3 pb-1",children:(0,t.jsx)("span",{className:"text-muted-foreground text-[10px] font-semibold tracking-wider uppercase",children:e})})}function t0({children:e,links:n}){return(0,t.jsxs)("div",{className:"hidden pt-2 lg:block",children:[(0,t.jsx)("p",{className:"text-muted-foreground/70 text-[11px] leading-relaxed",children:e}),null!=n&&n.length>0?(0,t.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:n.map(e=>(0,t.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-[10px] transition-colors",children:[(0,t.jsx)(g.ExternalLink,{className:"h-2.5 w-2.5"}),e.label]},e.href))}):null]})}function t1({settings:e,shepHome:o,dbFileSize:h}){let{showSaving:f,showSaved:g,save:y}=function(){let[e,t]=(0,n.useTransition)(),[r,o]=(0,n.useState)(!1),[a,i]=(0,n.useState)(!1),l=(0,n.useRef)(null),s=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{e&&!r&&(o(!0),s.current=!1,l.current=setTimeout(()=>{l.current=null,s.current&&(o(!1),i(!0),setTimeout(()=>i(!1),2e3))},350)),!e&&r&&(s.current=!0,l.current||(o(!1),i(!0),setTimeout(()=>i(!1),2e3)))},[e,r]),{showSaving:r,showSaved:a,save:(0,n.useCallback)(e=>{t(async()=>{let t=await e9(e);t.success||w.toast.error(t.error??"Failed to save settings")})},[t])}}(),C=e.featureFlags??{skills:!1,envDeploy:!1,debug:!1},[M,N]=(0,n.useState)(e.agent.type),I=e.agent.authMethod,[P,E]=(0,n.useState)(e.agent.token??""),[R,T]=(0,n.useState)(!1),[A,D]=(0,n.useState)(e.environment.defaultEditor),L=e.environment.shellPreference,[H,F]=(0,n.useState)(e.workflow.openPrOnImplementationComplete),[z,B]=(0,n.useState)(e.workflow.approvalGateDefaults.pushOnImplementationComplete),[_,V]=(0,n.useState)(e.workflow.approvalGateDefaults.allowPrd),[O,U]=(0,n.useState)(e.workflow.approvalGateDefaults.allowPlan),[W,K]=(0,n.useState)(e.workflow.approvalGateDefaults.allowMerge),[q,G]=(0,n.useState)(e.workflow.enableEvidence),[$,Y]=(0,n.useState)(e.workflow.commitEvidence),[X,Z]=(0,n.useState)(null!=e.workflow.ciMaxFixAttempts?String(e.workflow.ciMaxFixAttempts):""),[Q,J]=(0,n.useState)(null!=e.workflow.ciWatchTimeoutMs?String(Math.round(e.workflow.ciWatchTimeoutMs/1e3)):""),[ee,et]=(0,n.useState)(null!=e.workflow.ciLogMaxChars?String(e.workflow.ciLogMaxChars):""),en=e.workflow.stageTimeouts,[er,eo]=(0,n.useState)(String(Math.round((en?.analyzeMs??18e5)/1e3))),[ea,ei]=(0,n.useState)(String(Math.round((en?.requirementsMs??18e5)/1e3))),[el,es]=(0,n.useState)(String(Math.round((en?.researchMs??18e5)/1e3))),[ed,ec]=(0,n.useState)(String(Math.round((en?.planMs??18e5)/1e3))),[eu,ep]=(0,n.useState)(String(Math.round((en?.implementMs??18e5)/1e3))),[em,eh]=(0,n.useState)(String(Math.round((en?.mergeMs??18e5)/1e3))),ef=e.workflow.analyzeRepoTimeouts,[eg,ex]=(0,n.useState)(String(Math.round((ef?.analyzeMs??6e5)/1e3))),[ev,ew]=(0,n.useState)(e.notifications.inApp.enabled),[eb,ey]=(0,n.useState)(e.notifications.browser.enabled),[ej,eS]=(0,n.useState)(e.notifications.desktop.enabled),[eC,ek]=(0,n.useState)({...e.notifications.events}),[eM,eN]=(0,n.useState)({...C}),eI=null!=e.workflow.ciMaxFixAttempts?String(e.workflow.ciMaxFixAttempts):"",eP=null!=e.workflow.ciWatchTimeoutMs?String(Math.round(e.workflow.ciWatchTimeoutMs/1e3)):"",eE=null!=e.workflow.ciLogMaxChars?String(e.workflow.ciLogMaxChars):"",eR=en?.analyzeMs!=null?String(Math.round(en.analyzeMs/1e3)):"",eT=en?.requirementsMs!=null?String(Math.round(en.requirementsMs/1e3)):"",eA=en?.researchMs!=null?String(Math.round(en.researchMs/1e3)):"",eD=en?.planMs!=null?String(Math.round(en.planMs/1e3)):"",eL=en?.implementMs!=null?String(Math.round(en.implementMs/1e3)):"",eH=en?.mergeMs!=null?String(Math.round(en.mergeMs/1e3)):"",eF=ef?.analyzeMs!=null?String(Math.round(ef.analyzeMs/1e3)):"";function ez(e){if(""===e)return;let t=parseInt(e,10);return Number.isNaN(t)||t<=0?void 0:t}function eB(e){if(void 0===e)return;let t=ez(e);return null!=t?1e3*t:void 0}function e_(e={}){let t=ez(e.ciTimeout??Q);return{workflow:{openPrOnImplementationComplete:e.openPr??H,approvalGateDefaults:{pushOnImplementationComplete:e.pushOnComplete??z,allowPrd:e.allowPrd??_,allowPlan:e.allowPlan??O,allowMerge:e.allowMerge??W},enableEvidence:e.enableEvidence??q,commitEvidence:e.commitEvidence??$,ciMaxFixAttempts:ez(e.ciMaxFix??X),ciWatchTimeoutMs:null!=t?1e3*t:void 0,ciLogMaxChars:ez(e.ciLogMax??ee),stageTimeouts:{analyzeMs:eB(e.analyzeTimeout??er),requirementsMs:eB(e.requirementsTimeout??ea),researchMs:eB(e.researchTimeout??el),planMs:eB(e.planTimeout??ed),implementMs:eB(e.implementTimeout??eu),mergeMs:eB(e.mergeTimeout??em)},analyzeRepoTimeouts:{analyzeMs:eB(e.analyzeRepoTimeout??eg)}}}}function eV(e={}){return{notifications:{inApp:{enabled:e.inApp??ev},browser:{enabled:e.browser??eb},desktop:{enabled:e.desktop??ej},events:e.events??eC}}}let[eO,eU]=(0,n.useState)("agent");(0,n.useEffect)(()=>{let e=t$.map(e=>document.getElementById(`section-${e.id}`)).filter(Boolean);if(0===e.length)return;let t=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&eU(t.target.id.replace("section-",""))},{rootMargin:"-65px 0px -60% 0px",threshold:0});for(let n of e)t.observe(n);return()=>t.disconnect()},[]);let eW=(0,n.useCallback)(e=>{let t=document.getElementById(`section-${e}`);t&&(t.scrollIntoView({behavior:"smooth",block:"start"}),t.style.animation="none",t.offsetHeight,t.style.animation="section-flash 1s ease-out")},[]);return(0,t.jsxs)("div",{"data-testid":"settings-page-client",className:"max-w-5xl",children:[(0,t.jsx)("div",{className:"bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 grid grid-cols-1 gap-x-5 pt-6 pb-4 backdrop-blur lg:grid-cols-[1fr_280px]",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(x,{className:"text-muted-foreground h-4 w-4"}),(0,t.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Settings"}),(0,t.jsxs)("span",{className:"relative h-4 w-16",children:[(0,t.jsx)("span",{className:(0,b.cn)("text-muted-foreground absolute inset-0 flex items-center text-xs transition-opacity duration-300",f?"opacity-100":"opacity-0"),children:"Saving..."}),(0,t.jsxs)("span",{className:(0,b.cn)("absolute inset-0 flex items-center gap-1 text-xs text-green-600 transition-opacity duration-300",g&&!f?"opacity-100":"opacity-0"),children:[(0,t.jsx)(i.Check,{className:"h-3 w-3"}),"Saved"]})]}),(0,t.jsx)("nav",{className:"ml-auto flex items-center gap-0.5",children:t$.map(e=>{let n=e.icon,r=eO===e.id;return(0,t.jsxs)("button",{type:"button",onClick:()=>eW(e.id),className:(0,b.cn)("flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-all",r?"bg-accent text-foreground font-medium":"text-muted-foreground/60 hover:text-foreground hover:bg-accent/50"),children:[(0,t.jsx)(n,{className:"h-3 w-3"}),(0,t.jsx)("span",{className:"hidden sm:inline",children:e.label})]},e.id)})})]})}),(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,t.jsxs)("div",{id:"section-agent",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:l.Bot,title:"Agent",description:"AI coding agent and authentication",testId:"agent-settings-section",children:[(0,t.jsx)(tY,{label:"Agent & Model",description:"Provider and model for all operations",htmlFor:"agent-model-picker",children:(0,t.jsx)(tu.AgentModelPicker,{initialAgentType:M,initialModel:e.models.default,mode:"settings",onAgentModelChange:e=>N(e),className:"w-55"})}),(0,t.jsx)(tY,{label:"Authentication",description:"How the agent authenticates",htmlFor:"auth-method",children:(0,t.jsx)(k.TooltipProvider,{children:(0,t.jsxs)(k.Tooltip,{children:[(0,t.jsx)(k.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("div",{children:(0,t.jsxs)(e1,{value:I,disabled:!0,children:[(0,t.jsx)(e3,{id:"auth-method","data-testid":"auth-method-select",className:"w-55 cursor-not-allowed text-xs opacity-60",children:(0,t.jsx)(e2,{})}),(0,t.jsx)(e8,{children:tq.map(e=>(0,t.jsx)(e6,{value:e.value,children:e.label},e.value))})]})})}),(0,t.jsx)(k.TooltipContent,{children:"Coming soon"})]})})}),I===te.AgentAuthMethod.Token&&(0,t.jsx)(tY,{label:"API Token",htmlFor:"agent-token",children:(0,t.jsxs)("div",{className:"relative w-45",children:[(0,t.jsx)(j.Input,{id:"agent-token","data-testid":"agent-token-input",type:R?"text":"password",value:P,onChange:e=>E(e.target.value),onBlur:()=>{P!==(e.agent.token??"")&&y(function(e={}){let t={type:M,authMethod:I,...e},n={type:t.type,authMethod:t.authMethod};return t.authMethod===te.AgentAuthMethod.Token&&(n.token=e.token??P),{agent:n}}({token:P}))},placeholder:"Enter token",className:"pr-8"}),(0,t.jsx)(S.Button,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-2 hover:bg-transparent",onClick:()=>T(!R),"data-testid":"toggle-token-visibility","aria-label":R?"Hide token":"Show token",children:R?(0,t.jsx)(a,{className:"h-3 w-3"}):(0,t.jsx)(r.Eye,{className:"h-3 w-3"})})]})})]}),(0,t.jsx)(t0,{links:[{label:"Agent system",href:"https://github.com/shep-ai/cli/blob/main/docs/architecture/agent-system.md"},{label:"Adding agents",href:"https://github.com/shep-ai/cli/blob/main/docs/development/adding-agents.md"},{label:"Configuration guide",href:"https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md"}],children:"Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session."})]}),(0,t.jsxs)("div",{id:"section-environment",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsx)(tZ,{icon:s.Terminal,title:"Environment",description:"Editor and shell preferences",testId:"environment-settings-section",children:(0,t.jsx)(tY,{label:"Default Editor",description:"Editor launched for file operations",htmlFor:"default-editor",children:(0,t.jsxs)(e1,{value:A,onValueChange:e=>{D(e),y({environment:{defaultEditor:e,shellPreference:L}})},children:[(0,t.jsx)(e3,{id:"default-editor","data-testid":"editor-select",className:"w-55 cursor-pointer text-xs",children:(0,t.jsx)(e2,{})}),(0,t.jsx)(e8,{children:tG.map(e=>{var n;let r=(n=e.value)&&n in tc?tc[n]:to;return(0,t.jsx)(e6,{value:e.value,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[(0,t.jsx)(r,{className:"h-4 w-4 shrink-0"}),e.label]})},e.value)})})]})})}),(0,t.jsx)(t0,{links:[{label:"Configuration guide",href:"https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md"}],children:"Your preferred editor is used when opening files for review or editing during the development workflow."})]}),(0,t.jsxs)("div",{id:"section-workflow",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:d.GitBranch,title:"Workflow",description:"Automation behavior after implementation",testId:"workflow-settings-section",children:[(0,t.jsx)(tJ,{children:"Approve"}),(0,t.jsx)(tX,{label:"Auto-approve PRD",description:"Skip manual review of requirements",id:"allow-prd",testId:"switch-allow-prd",checked:_,onChange:e=>{V(e),y(e_({allowPrd:e}))}}),(0,t.jsx)(tX,{label:"Auto-approve Plan",description:"Skip manual review of implementation plan",id:"allow-plan",testId:"switch-allow-plan",checked:O,onChange:e=>{U(e),y(e_({allowPlan:e}))}}),(0,t.jsx)(tX,{label:"Auto-approve Merge",description:"Merge without manual review",id:"allow-merge",testId:"switch-allow-merge",checked:W,onChange:e=>{K(e),y(e_({allowMerge:e}))}}),(0,t.jsx)(tJ,{children:"Evidence"}),(0,t.jsx)(tX,{label:"Collect evidence",description:"Capture screenshots and artifacts after implementation",id:"enable-evidence",testId:"switch-enable-evidence",checked:q,onChange:e=>{G(e),e?y(e_({enableEvidence:e})):(Y(!1),y(e_({enableEvidence:e,commitEvidence:!1})))}}),(0,t.jsx)(tX,{label:"Add evidence to PR",description:"Include evidence in the pull request body",id:"commit-evidence",testId:"switch-commit-evidence",checked:$,disabled:!q||!H,onChange:e=>{Y(e),y(e_({commitEvidence:e}))}}),(0,t.jsx)(tJ,{children:"Git"}),(0,t.jsx)(tX,{label:"Push on complete",description:"Push to remote when implementation finishes",id:"push-on-complete",testId:"switch-push-on-complete",checked:z,onChange:e=>{B(e),y(e_({pushOnComplete:e}))}}),(0,t.jsx)(tX,{label:"Open PR on complete",description:"Create a pull request when done",id:"open-pr",testId:"switch-open-pr",checked:H,onChange:e=>{F(e),e?y(e_({openPr:e})):(Y(!1),y(e_({openPr:e,commitEvidence:!1})))}})]}),(0,t.jsx)(t0,{links:[{label:"Approval gates",href:"https://github.com/shep-ai/cli/blob/main/specs/016-hitl-approval-gates/spec.yaml"},{label:"Push & PR flags",href:"https://github.com/shep-ai/cli/blob/main/specs/037-feature-pr-push-flags/spec.yaml"}],children:"Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation."})]}),(0,t.jsxs)("div",{id:"section-ci",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:c,title:"Continuous Integration",description:"Limits and timeouts for CI monitoring",testId:"ci-settings-section",children:[(0,t.jsx)(tY,{label:"Max fix attempts",description:"Agent retries on failing CI",htmlFor:"ci-max-fix",children:(0,t.jsx)(tQ,{id:"ci-max-fix",testId:"ci-max-fix-input",placeholder:"3",value:X,onChange:Z,onBlur:()=>{X!==eI&&y(e_({ciMaxFix:X}))},min:1,max:10})}),(0,t.jsx)(tY,{label:"Watch timeout",description:"Max wait for CI completion",htmlFor:"ci-timeout",children:(0,t.jsx)(tQ,{id:"ci-timeout",testId:"ci-timeout-input",placeholder:"300",value:Q,onChange:J,onBlur:()=>{Q!==eP&&y(e_({ciTimeout:Q}))},min:30,step:30,suffix:"sec"})}),(0,t.jsx)(tY,{label:"Max log size",description:"Truncate CI logs beyond this limit",htmlFor:"ci-log-max",children:(0,t.jsx)(tQ,{id:"ci-log-max",testId:"ci-log-max-input",placeholder:"50000",value:ee,onChange:et,onBlur:()=>{ee!==eE&&y(e_({ciLogMax:ee}))},min:1e3,step:5e3,suffix:"chars"})})]}),(0,t.jsx)(t0,{links:[{label:"CI/CD pipeline",href:"https://github.com/shep-ai/cli/blob/main/docs/development/cicd.md"},{label:"CI security gates",href:"https://github.com/shep-ai/cli/blob/main/specs/003-cicd-security-gates/spec.md"}],children:"When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis."})]}),(0,t.jsxs)("div",{id:"section-stage-timeouts",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:v,title:"Stage Timeouts",description:"Maximum execution time per agent stage",testId:"stage-timeouts-settings-section",children:[(0,t.jsx)(tJ,{children:"Feature Agent"}),(0,t.jsx)(tY,{label:"Analyze",description:"Repository analysis timeout",htmlFor:"timeout-analyze",children:(0,t.jsx)(tK,{id:"timeout-analyze",testId:"timeout-analyze-input",value:er,onChange:eo,onBlur:()=>{er!==eR&&y(e_({analyzeTimeout:er}))},defaultSeconds:1800})}),(0,t.jsx)(tY,{label:"Requirements",description:"Requirements gathering timeout",htmlFor:"timeout-requirements",children:(0,t.jsx)(tK,{id:"timeout-requirements",testId:"timeout-requirements-input",value:ea,onChange:ei,onBlur:()=>{ea!==eT&&y(e_({requirementsTimeout:ea}))},defaultSeconds:1800})}),(0,t.jsx)(tY,{label:"Research",description:"Technical research timeout",htmlFor:"timeout-research",children:(0,t.jsx)(tK,{id:"timeout-research",testId:"timeout-research-input",value:el,onChange:es,onBlur:()=>{el!==eA&&y(e_({researchTimeout:el}))},defaultSeconds:1800})}),(0,t.jsx)(tY,{label:"Plan",description:"Implementation planning timeout",htmlFor:"timeout-plan",children:(0,t.jsx)(tK,{id:"timeout-plan",testId:"timeout-plan-input",value:ed,onChange:ec,onBlur:()=>{ed!==eD&&y(e_({planTimeout:ed}))},defaultSeconds:1800})}),(0,t.jsx)(tY,{label:"Implement",description:"Code implementation timeout",htmlFor:"timeout-implement",children:(0,t.jsx)(tK,{id:"timeout-implement",testId:"timeout-implement-input",value:eu,onChange:ep,onBlur:()=>{eu!==eL&&y(e_({implementTimeout:eu}))},defaultSeconds:1800})}),(0,t.jsx)(tY,{label:"Merge",description:"PR creation and merge timeout",htmlFor:"timeout-merge",children:(0,t.jsx)(tK,{id:"timeout-merge",testId:"timeout-merge-input",value:em,onChange:eh,onBlur:()=>{em!==eH&&y(e_({mergeTimeout:em}))},defaultSeconds:1800})}),(0,t.jsx)(tJ,{children:"Analyze Repository Agent"}),(0,t.jsx)(tY,{label:"Analyze",description:"Repository analysis timeout",htmlFor:"timeout-analyze-repo",children:(0,t.jsx)(tK,{id:"timeout-analyze-repo",testId:"timeout-analyze-repo-input",value:eg,onChange:ex,onBlur:()=>{eg!==eF&&y(e_({analyzeRepoTimeout:eg}))},defaultSeconds:600})})]}),(0,t.jsx)(t0,{children:"Each agent has independently configurable stage timeouts. When a stage exceeds its timeout, the agent is terminated. Longer timeouts are useful for complex implementations. Feature agent defaults to 30 minutes per stage. Analyze repository agent defaults to 10 minutes."})]}),(0,t.jsxs)("div",{id:"section-notifications",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:u,title:"Notifications",description:"How and when you get notified",testId:"notification-settings-section",children:[(0,t.jsx)(tJ,{children:"Channels"}),(0,t.jsx)(tX,{label:"In-app",description:"Notifications inside the Shep UI",id:"notif-in-app",testId:"switch-in-app",checked:ev,onChange:e=>{ew(e),y(eV({inApp:e}))}}),(0,t.jsx)(tX,{label:"Browser",description:"Push notifications via the browser",id:"notif-browser",testId:"switch-browser",checked:eb,onChange:e=>{ey(e),y(eV({browser:e}))}}),(0,t.jsx)(tX,{label:"Desktop",description:"Native OS notifications",id:"notif-desktop",testId:"switch-desktop",checked:ej,onChange:e=>{eS(e),y(eV({desktop:e}))}}),(0,t.jsx)(tJ,{children:"Agent Events"}),(0,t.jsx)(tX,{label:"Agent started",id:"notif-event-agentStarted",testId:"switch-event-agentStarted",checked:eC.agentStarted,onChange:e=>{let t={...eC,agentStarted:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"Phase completed",id:"notif-event-phaseCompleted",testId:"switch-event-phaseCompleted",checked:eC.phaseCompleted,onChange:e=>{let t={...eC,phaseCompleted:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"Waiting approval",id:"notif-event-waitingApproval",testId:"switch-event-waitingApproval",checked:eC.waitingApproval,onChange:e=>{let t={...eC,waitingApproval:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"Agent completed",id:"notif-event-agentCompleted",testId:"switch-event-agentCompleted",checked:eC.agentCompleted,onChange:e=>{let t={...eC,agentCompleted:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"Agent failed",id:"notif-event-agentFailed",testId:"switch-event-agentFailed",checked:eC.agentFailed,onChange:e=>{let t={...eC,agentFailed:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tJ,{children:"Pull Request Events"}),(0,t.jsx)(tX,{label:"PR merged",id:"notif-event-prMerged",testId:"switch-event-prMerged",checked:eC.prMerged,onChange:e=>{let t={...eC,prMerged:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"PR closed",id:"notif-event-prClosed",testId:"switch-event-prClosed",checked:eC.prClosed,onChange:e=>{let t={...eC,prClosed:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"PR checks passed",id:"notif-event-prChecksPassed",testId:"switch-event-prChecksPassed",checked:eC.prChecksPassed,onChange:e=>{let t={...eC,prChecksPassed:e};ek(t),y(eV({events:t}))}}),(0,t.jsx)(tX,{label:"PR checks failed",id:"notif-event-prChecksFailed",testId:"switch-event-prChecksFailed",checked:eC.prChecksFailed,onChange:e=>{let t={...eC,prChecksFailed:e};ek(t),y(eV({events:t}))}})]}),(0,t.jsx)(t0,{links:[{label:"Notification system",href:"https://github.com/shep-ai/cli/blob/main/specs/021-agent-notifications/spec.yaml"}],children:"Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification."})]}),(0,t.jsxs)("div",{id:"section-feature-flags",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:p,title:"Feature Flags",description:"Enable or disable experimental features",badge:"Experimental",testId:"feature-flags-settings-section",children:[(0,t.jsx)(tX,{label:"Skills",description:"Enable the skills system for agent capabilities",id:"flag-skills",testId:"switch-flag-skills",checked:eM.skills,onChange:e=>{let t={...eM,skills:e};eN(t),y({featureFlags:t})}}),(0,t.jsx)(tX,{label:"Deployments",description:"Enable environment deployment workflows",id:"flag-envDeploy",testId:"switch-flag-envDeploy",checked:eM.envDeploy,onChange:e=>{let t={...eM,envDeploy:e};eN(t),y({featureFlags:t})}}),(0,t.jsx)(tX,{label:"Debug",description:"Show debug panels and verbose logging",id:"flag-debug",testId:"switch-flag-debug",checked:eM.debug,onChange:e=>{let t={...eM,debug:e};eN(t),y({featureFlags:t})}})]}),(0,t.jsx)(t0,{children:"Experimental features that are still under development. Enable at your own risk — they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting."})]}),(0,t.jsxs)("div",{id:"section-database",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,t.jsxs)(tZ,{icon:m,title:"Database",description:"Local storage information",testId:"database-settings-section",children:[(0,t.jsx)(tY,{label:"Location",description:"Path to the local SQLite database",children:(0,t.jsx)("span",{className:"text-muted-foreground max-w-50 truncate font-mono text-xs","data-testid":"shep-home-path",children:o})}),(0,t.jsx)(tY,{label:"Size",children:(0,t.jsx)("span",{className:"text-muted-foreground text-xs","data-testid":"db-file-size",children:h})})]}),(0,t.jsx)(t0,{links:[{label:"Settings service",href:"https://github.com/shep-ai/cli/blob/main/docs/architecture/settings-service.md"},{label:"Settings spec",href:"https://github.com/shep-ai/cli/blob/main/specs/005-global-settings-service/spec.md"}],children:"All settings are stored in a local SQLite database at ~/.shep/data. The database uses a singleton record pattern with automatic migrations on startup."})]})]})]})}e.s(["SettingsPageClient",()=>t1],41952)}]);