@shepai/cli 1.176.0 → 1.177.0-pr538.aa9ace4

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 (268) hide show
  1. package/dist/eslint.config.mjs +2 -0
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +15 -0
  3. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/i-browser-opener.d.ts +28 -0
  5. package/dist/packages/core/src/application/ports/output/services/i-browser-opener.d.ts.map +1 -0
  6. package/dist/packages/core/src/application/ports/output/services/i-browser-opener.js +13 -0
  7. package/dist/packages/core/src/application/ports/output/services/i-desktop-notifier.d.ts +29 -0
  8. package/dist/packages/core/src/application/ports/output/services/i-desktop-notifier.d.ts.map +1 -0
  9. package/dist/packages/core/src/application/ports/output/services/i-desktop-notifier.js +13 -0
  10. package/dist/packages/core/src/application/ports/output/services/index.d.ts +2 -0
  11. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts +46 -3
  13. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +153 -5
  15. package/dist/packages/core/src/application/use-cases/features/reparent-feature.use-case.d.ts +31 -0
  16. package/dist/packages/core/src/application/use-cases/features/reparent-feature.use-case.d.ts.map +1 -0
  17. package/dist/packages/core/src/application/use-cases/features/reparent-feature.use-case.js +127 -0
  18. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/di/container.js +10 -0
  20. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +20 -6
  22. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +27 -4
  24. package/dist/packages/core/src/infrastructure/services/browser-opener.service.d.ts +2 -1
  25. package/dist/packages/core/src/infrastructure/services/browser-opener.service.d.ts.map +1 -1
  26. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
  27. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +53 -0
  29. package/dist/packages/core/src/infrastructure/services/notifications/desktop-notifier.d.ts +2 -1
  30. package/dist/packages/core/src/infrastructure/services/notifications/desktop-notifier.d.ts.map +1 -1
  31. package/dist/src/presentation/cli/commands/daemon/start-daemon.d.ts +1 -1
  32. package/dist/src/presentation/cli/commands/daemon/start-daemon.js +2 -3
  33. package/dist/src/presentation/cli/commands/ui.command.js +1 -2
  34. package/dist/src/presentation/web/app/actions/reparent-feature.d.ts +5 -0
  35. package/dist/src/presentation/web/app/actions/reparent-feature.d.ts.map +1 -0
  36. package/dist/src/presentation/web/app/actions/reparent-feature.js +16 -0
  37. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  38. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -2
  39. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  40. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +2 -2
  41. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  42. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  43. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +47 -4
  44. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.d.ts +1 -0
  45. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.d.ts.map +1 -1
  46. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.js +18 -6
  47. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.d.ts +3 -0
  48. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.d.ts.map +1 -1
  49. package/dist/src/presentation/web/components/features/features-canvas/dependency-edge.stories.js +27 -1
  50. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
  51. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +14 -3
  53. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +7 -0
  54. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  55. package/dist/src/presentation/web/hooks/use-graph-state.js +74 -0
  56. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  57. package/dist/src/presentation/web/lib/derive-graph.js +5 -1
  58. package/dist/tsconfig.build.tsbuildinfo +1 -1
  59. package/package.json +10 -2
  60. package/web/.next/BUILD_ID +1 -1
  61. package/web/.next/build-manifest.json +2 -2
  62. package/web/.next/fallback-build-manifest.json +2 -2
  63. package/web/.next/prerender-manifest.json +3 -3
  64. package/web/.next/required-server-files.js +3 -3
  65. package/web/.next/required-server-files.json +3 -3
  66. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +73 -58
  67. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
  68. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +69 -54
  71. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  73. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +75 -60
  75. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  77. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +91 -76
  79. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +91 -76
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +71 -56
  87. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +71 -56
  91. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  92. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +69 -54
  95. package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
  96. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  97. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +75 -60
  99. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  100. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  101. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +91 -76
  103. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  104. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +91 -76
  107. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  108. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  109. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +69 -54
  111. package/web/.next/server/app/(dashboard)/page.js +1 -1
  112. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  113. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  114. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +71 -56
  115. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
  116. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  117. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  118. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +71 -56
  119. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  120. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  121. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/_global-error.html +2 -2
  123. package/web/.next/server/app/_global-error.rsc +1 -1
  124. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  125. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  126. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  127. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  128. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  129. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  130. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  131. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  133. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  134. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  135. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  136. package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
  137. package/web/.next/server/app/features/page.js.nft.json +1 -1
  138. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
  140. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  141. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
  143. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  144. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  145. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  146. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  147. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  148. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  149. package/web/.next/server/app/version/page.js.nft.json +1 -1
  150. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  151. package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js +1 -1
  152. package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js.map +1 -1
  153. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  154. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4869a7bb.js +3 -0
  155. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4869a7bb.js.map +1 -0
  156. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_d92cb436.js +3 -0
  157. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_d92cb436.js.map +1 -0
  158. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_16dd74be.js +3 -0
  159. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_16dd74be.js.map +1 -0
  160. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  161. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  163. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js → [root-of-the-server]__000567d1._.js} +2 -2
  165. package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js.map → [root-of-the-server]__000567d1._.js.map} +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  172. package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js → [root-of-the-server]__466d5d10._.js} +2 -2
  173. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js.map → [root-of-the-server]__466d5d10._.js.map} +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
  175. package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js → [root-of-the-server]__60b640ad._.js} +2 -2
  176. package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js.map → [root-of-the-server]__60b640ad._.js.map} +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +1 -1
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js → [root-of-the-server]__e68e2b52._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js.map → [root-of-the-server]__e68e2b52._.js.map} +1 -1
  184. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/{_8f0d3f07._.js → _09bef7ab._.js} +2 -2
  187. package/web/.next/server/chunks/ssr/{_8f0d3f07._.js.map → _09bef7ab._.js.map} +1 -1
  188. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  189. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/_2b6293f3._.js +4 -0
  191. package/web/.next/server/chunks/ssr/{_388d1127._.js.map → _2b6293f3._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  195. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
  197. package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/_ebb12cc5._.js +3 -0
  199. package/web/.next/server/chunks/ssr/{_98d94927._.js.map → _ebb12cc5._.js.map} +1 -1
  200. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  201. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  202. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  204. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/{src_presentation_web_807cba76._.js → src_presentation_web_06387c54._.js} +2 -2
  206. package/web/.next/server/chunks/ssr/src_presentation_web_06387c54._.js.map +1 -0
  207. package/web/.next/server/chunks/ssr/{src_presentation_web_e3a30e30._.js → src_presentation_web_1ccf607e._.js} +2 -2
  208. package/web/.next/server/chunks/ssr/src_presentation_web_1ccf607e._.js.map +1 -0
  209. package/web/.next/server/chunks/ssr/{src_presentation_web_7b7b9e3b._.js → src_presentation_web_2c992e9f._.js} +3 -3
  210. package/web/.next/server/chunks/ssr/{src_presentation_web_7b7b9e3b._.js.map → src_presentation_web_2c992e9f._.js.map} +1 -1
  211. package/web/.next/server/chunks/ssr/{src_presentation_web_54b02639._.js → src_presentation_web_476ed91c._.js} +3 -3
  212. package/web/.next/server/chunks/ssr/{src_presentation_web_54b02639._.js.map → src_presentation_web_476ed91c._.js.map} +1 -1
  213. package/web/.next/server/chunks/ssr/{src_presentation_web_17d39233._.js → src_presentation_web_5b78146e._.js} +2 -2
  214. package/web/.next/server/chunks/ssr/src_presentation_web_5b78146e._.js.map +1 -0
  215. package/web/.next/server/chunks/ssr/{src_presentation_web_e1cd1869._.js → src_presentation_web_796d2fd5._.js} +2 -2
  216. package/web/.next/server/chunks/ssr/src_presentation_web_796d2fd5._.js.map +1 -0
  217. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_3a934437.js +3 -0
  218. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_3a934437.js.map +1 -0
  219. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  224. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  231. package/web/.next/server/pages/500.html +2 -2
  232. package/web/.next/server/server-reference-manifest.js +1 -1
  233. package/web/.next/server/server-reference-manifest.json +590 -484
  234. package/web/.next/static/chunks/{a20f2d6f76f469b7.css → 0cf210e5b787a08b.css} +1 -1
  235. package/web/.next/static/chunks/{0ffb3738269e15c3.js → 129ec6d253f86319.js} +1 -1
  236. package/web/.next/static/chunks/{afa7e5d2a48cabc7.js → 2fe9740f9397711d.js} +1 -1
  237. package/web/.next/static/chunks/{4ff21d16947ec853.js → 37035f72d4f041f4.js} +1 -1
  238. package/web/.next/static/chunks/{eda9ee3c22b71a69.js → 4a5e1ebbe4a3fd87.js} +1 -1
  239. package/web/.next/static/chunks/{476873a9bac35ec8.js → 7a0b03e168a882e6.js} +1 -1
  240. package/web/.next/static/chunks/8692d79a48d07b5c.js +3 -0
  241. package/web/.next/static/chunks/8c60a1781664e9f3.js +2 -0
  242. package/web/.next/static/chunks/96b30c2bf69bb538.js +1 -0
  243. package/web/.next/static/chunks/{2cfc6022d74e2716.js → a3c5ab40fc61b2c2.js} +3 -3
  244. package/web/.next/static/chunks/{f17d2d0279b8db35.js → abdbfb54cbb73702.js} +1 -1
  245. package/web/.next/static/chunks/{236744ff71b1aadf.js → bbb9fcc0697d77b8.js} +1 -1
  246. package/web/.next/static/chunks/{eab3d361f7a24510.js → eb612d2c2229399e.js} +1 -1
  247. package/web/.next/static/chunks/{885bb8fc631bf477.js → eccf3cd99bc580a4.js} +1 -1
  248. package/web/.next/static/chunks/{6304540c7cf2b46a.js → fa3bbfc6b0934358.js} +1 -1
  249. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +0 -3
  250. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +0 -1
  251. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +0 -3
  252. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +0 -1
  253. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +0 -3
  254. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +0 -1
  255. package/web/.next/server/chunks/ssr/_388d1127._.js +0 -4
  256. package/web/.next/server/chunks/ssr/_98d94927._.js +0 -3
  257. package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +0 -1
  258. package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +0 -1
  259. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +0 -3
  260. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +0 -1
  261. package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +0 -1
  262. package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +0 -1
  263. package/web/.next/static/chunks/302f474e4978cc80.js +0 -3
  264. package/web/.next/static/chunks/626277ca9a4cc477.js +0 -1
  265. package/web/.next/static/chunks/71a07df9dcb42227.js +0 -2
  266. /package/web/.next/static/{36ONyC02R4wfFe7iWMQLU → pZ9nz6LLItDQ4YUlAE7tc}/_buildManifest.js +0 -0
  267. /package/web/.next/static/{36ONyC02R4wfFe7iWMQLU → pZ9nz6LLItDQ4YUlAE7tc}/_clientMiddlewareManifest.json +0 -0
  268. /package/web/.next/static/{36ONyC02R4wfFe7iWMQLU → pZ9nz6LLItDQ4YUlAE7tc}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/open-ide.ts","../../../../../../../src/presentation/web/app/actions/open-shell.ts","../../../../../../../src/presentation/web/app/actions/open-folder.ts","../../../../../../../src/presentation/web/app/actions/sync-repository.ts","../../../../../../../src/presentation/web/app/actions/agent-setup-flag.ts","../../../../../../../src/presentation/web/app/actions/check-agent-auth.ts","../../../../../../../src/presentation/web/app/actions/check-tool-status.ts","../../../../../../../src/presentation/web/app/actions/archive-feature.ts","../../../../../../../src/presentation/web/app/actions/delete-feature.ts","../../../../../../../src/presentation/web/app/actions/resume-feature.ts","../../../../../../../src/presentation/web/app/actions/start-feature.ts","../../../../../../../src/presentation/web/app/actions/stop-feature.ts","../../../../../../../src/presentation/web/app/actions/unarchive-feature.ts","../../../../../../../src/presentation/web/app/actions/add-repository.ts","../../../../../../../src/presentation/web/app/actions/delete-repository.ts","../../../../../../../src/presentation/web/app/actions/get-feature-metadata.ts"],"sourcesContent":["'use server';\n\nimport { isAbsolute } from 'node:path';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport type { LaunchIdeUseCase } from '@shepai/core/application/use-cases/ide/launch-ide.use-case';\nimport { resolve } from '@/lib/server-container';\n\ninterface OpenIdeInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openIde(\n input: OpenIdeInput\n): Promise<{ success: boolean; error?: string; editor?: string; path?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n const settings = getSettings();\n const editor = settings.environment.defaultEditor;\n\n const useCase = resolve<LaunchIdeUseCase>('LaunchIdeUseCase');\n const result = await useCase.execute({\n editorId: editor,\n repositoryPath,\n branch,\n checkAvailability: true,\n });\n\n if (!result.ok) {\n return { success: false, error: result.message };\n }\n\n return { success: true, editor: result.editorName, path: result.worktreePath };\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute } from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { resolve } from '@/lib/server-container';\nimport type { IToolInstallerService } from '@shepai/core/application/ports/output/services/tool-installer.service';\n\n// Fallback commands for the \"system\" terminal when no tool metadata entry exists.\n// Uses a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst SYSTEM_TERMINAL_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> =\n {\n darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },\n linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },\n win32: {\n cmd: 'cmd.exe',\n args: (p) => ['/c', 'start', 'powershell', '-NoExit', '-Command', `Set-Location \"${p}\"`],\n },\n };\n\ninterface OpenShellInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openShell(\n input: OpenShellInput\n): Promise<{ success: boolean; error?: string; path?: string; shell?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n const settings = getSettings();\n const shell = settings.environment.shellPreference;\n const terminalPref = settings.environment.terminalPreference ?? 'system';\n const targetPath = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;\n\n if (!existsSync(targetPath)) {\n return { success: false, error: `Path does not exist: ${targetPath}` };\n }\n\n // Try to find the terminal in tool metadata via DI container.\n // Using DI (not a direct import from tool-metadata) ensures that\n // TOOL_METADATA is read from the correct tools/ directory path — it is loaded once\n // in the Node.js CLI bootstrap context where import.meta.url resolves correctly.\n // Direct imports of tool-metadata break in standalone production builds.\n if (terminalPref !== 'system') {\n try {\n const service = resolve<IToolInstallerService>('IToolInstallerService');\n const config = service.getTerminalOpenConfig(terminalPref);\n\n if (config?.openDirectory.includes('{dir}')) {\n const resolved = config.openDirectory.replace('{dir}', targetPath);\n\n if (config.shell) {\n const child = spawn(resolved, [], {\n detached: true,\n stdio: 'ignore',\n shell: true,\n });\n child.on('error', () => undefined);\n child.unref();\n } else {\n const [command, ...args] = resolved.split(/\\s+/);\n const child = spawn(command, args, {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined);\n child.unref();\n }\n\n return { success: true, path: targetPath, shell };\n }\n } catch {\n // DI container not available — fall through to system terminal\n }\n }\n\n // Fallback to system terminal\n const entry = SYSTEM_TERMINAL_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n const child = spawn(entry.cmd, entry.args(targetPath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: targetPath, shell };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open shell';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute, normalize } from 'node:path';\nimport { spawn } from 'node:child_process';\n\n// Use a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst FOLDER_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> = {\n darwin: { cmd: 'open', args: (p) => [p] },\n linux: { cmd: 'xdg-open', args: (p) => [p] },\n win32: { cmd: 'explorer', args: (p) => [p] },\n};\n\nexport async function openFolder(\n repositoryPath: string\n): Promise<{ success: boolean; error?: string; path?: string }> {\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n if (!existsSync(repositoryPath)) {\n return { success: false, error: 'Directory not found' };\n }\n\n const entry = FOLDER_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n // Normalize to platform-native separators — explorer.exe on Windows\n // does not understand forward-slash paths and falls back to Documents.\n const nativePath = normalize(repositoryPath);\n\n const child = spawn(entry.cmd, entry.args(nativePath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: repositoryPath };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open folder';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { SyncRepositoryMainUseCase } from '@shepai/core/application/use-cases/repositories/sync-repository-main.use-case';\n\nexport async function syncRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'Repository id is required' };\n }\n\n try {\n const useCase = resolve<SyncRepositoryMainUseCase>('SyncRepositoryMainUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to sync repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\n\n/**\n * Check whether onboarding has been completed.\n * Delegates to the in-memory settings singleton (zero DB overhead).\n */\nexport async function isAgentSetupComplete(): Promise<boolean> {\n try {\n return getSettings().onboardingComplete;\n } catch {\n return false;\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { execFile } from 'node:child_process';\nimport { IS_WINDOWS } from '@shepai/core/infrastructure/platform';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { resolve } from '@/lib/server-container';\nimport type { ListToolsUseCase } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface AgentAuthStatus {\n agentType: string;\n /** Whether the CLI tool binary is installed */\n installed: boolean;\n /** Whether credentials / auth appear valid */\n authenticated: boolean;\n /** Human-readable label for the agent */\n label: string;\n /** CLI binary name (e.g. \"claude\", \"gemini\") */\n binaryName: string | null;\n /** Shell command to install the tool (e.g. \"npm install -g @anthropic-ai/claude-code\") */\n installCommand: string | null;\n /** Instructions to authenticate if not authenticated */\n authCommand: string | null;\n}\n\nconst AGENT_LABELS: Record<string, string> = {\n 'claude-code': 'Claude Code',\n cursor: 'Cursor Agent',\n 'gemini-cli': 'Gemini CLI',\n aider: 'Aider',\n copilot: 'Copilot CLI',\n continue: 'Continue',\n dev: 'Demo',\n};\n\nconst AGENT_TOOL_MAP: Record<string, string> = {\n 'claude-code': 'claude-code',\n cursor: 'cursor-cli',\n 'gemini-cli': 'gemini-cli',\n copilot: 'copilot-cli',\n};\n\nconst AGENT_BINARY_MAP: Record<string, string> = {\n 'claude-code': 'claude',\n cursor: 'cursor-agent',\n 'gemini-cli': 'gemini',\n copilot: 'copilot',\n};\n\n/**\n * Tier 1: Instant credential/env check (~5ms, no subprocess).\n * Returns true if credentials likely exist.\n */\nfunction tier1AuthCheck(agentType: string): boolean {\n const home = homedir();\n\n switch (agentType) {\n case 'claude-code': {\n if (process.env['ANTHROPIC_API_KEY']) return true;\n if (process.env['CLAUDE_CODE_USE_BEDROCK']) return true;\n if (process.env['CLAUDE_CODE_USE_VERTEX']) return true;\n if (process.env['CLAUDE_CODE_OAUTH_TOKEN']) return true;\n const credPath = join(home, '.claude', '.credentials.json');\n return existsSync(credPath);\n }\n case 'cursor': {\n if (process.env['CURSOR_API_KEY']) return true;\n // Cursor Agent stores creds after `agent login` — check common locations\n const cursorDir = join(home, '.cursor');\n return existsSync(cursorDir);\n }\n case 'gemini-cli': {\n if (process.env['GEMINI_API_KEY']) return true;\n if (process.env['GOOGLE_API_KEY']) return true;\n if (process.env['GOOGLE_APPLICATION_CREDENTIALS']) return true;\n const accountsPath = join(home, '.gemini', 'google_accounts.json');\n return existsSync(accountsPath);\n }\n case 'copilot-cli': {\n if (process.env['GITHUB_TOKEN']) return true;\n if (process.env['GH_TOKEN']) return true;\n if (process.env['GITHUB_AUTH_TOKEN']) return true;\n // GitHub CLI stores creds after `gh auth login` — check common locations\n const ghDir = IS_WINDOWS ? join(home, '.copilot') : join(home, '.config', 'gh');\n return existsSync(ghDir);\n }\n\n default:\n // dev, aider, continue — assume no auth needed\n return true;\n }\n}\n\n/**\n * Tier 2: Subprocess verification (~200ms).\n * Only called if tier 1 passes, to confirm tokens aren't expired.\n */\nfunction tier2AuthVerify(agentType: string, binaryName: string): Promise<boolean> {\n return new Promise((resolve) => {\n let cmd: string;\n let args: string[];\n\n switch (agentType) {\n case 'claude-code':\n cmd = binaryName;\n args = ['auth', 'status'];\n break;\n case 'cursor':\n cmd = binaryName;\n args = ['status'];\n break;\n case 'copilot-cli':\n cmd = 'gh';\n args = ['auth', 'status'];\n break;\n default:\n // No tier 2 command available — trust tier 1\n resolve(true);\n return;\n }\n\n try {\n const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };\n execFile(cmd, args, opts, (error) => {\n resolve(!error);\n });\n } catch {\n resolve(false);\n }\n });\n}\n\n/**\n * Check agent tool installation + auth status.\n * Uses two-tier detection: instant file/env check, then optional subprocess verify.\n */\nexport async function checkAgentAuth(): Promise<AgentAuthStatus> {\n let agentType: string;\n try {\n agentType = getSettings().agent.type;\n } catch {\n return {\n agentType: 'unknown',\n installed: false,\n authenticated: false,\n label: 'Unknown',\n binaryName: null,\n installCommand: null,\n authCommand: null,\n };\n }\n\n const label = AGENT_LABELS[agentType] ?? agentType;\n const toolId = AGENT_TOOL_MAP[agentType] ?? null;\n const binaryName = AGENT_BINARY_MAP[agentType] ?? null;\n\n // Dev/demo agents — always good\n if (!toolId) {\n return {\n agentType,\n installed: true,\n authenticated: true,\n label,\n binaryName: null,\n installCommand: null,\n authCommand: null,\n };\n }\n\n // Check if tool is installed (also grab install command from metadata)\n let installed = false;\n let installCommand: string | null = null;\n try {\n const useCase = resolve<ListToolsUseCase>('ListToolsUseCase');\n const tools = await useCase.execute();\n const tool = tools.find((t) => t.id === toolId);\n installed = tool?.status.status === 'available';\n installCommand = tool?.installCommand ?? null;\n } catch {\n installed = false;\n }\n\n if (!installed) {\n return {\n agentType,\n installed: false,\n authenticated: false,\n label,\n binaryName,\n installCommand,\n authCommand: binaryName ? `Install ${label} first` : null,\n };\n }\n\n // Tier 1: instant file/env check\n const tier1 = tier1AuthCheck(agentType);\n\n if (!tier1) {\n return {\n agentType,\n installed: true,\n authenticated: false,\n label,\n binaryName,\n installCommand,\n authCommand: binaryName,\n };\n }\n\n // Tier 2: subprocess verify (best effort, ~200ms)\n let authenticated = true;\n if (binaryName) {\n authenticated = await tier2AuthVerify(agentType, binaryName);\n }\n\n return {\n agentType,\n installed: true,\n authenticated,\n label,\n binaryName,\n installCommand,\n authCommand: authenticated ? null : binaryName,\n };\n}\n","'use server';\n\nimport { execFile } from 'node:child_process';\nimport { IS_WINDOWS } from '@shepai/core/infrastructure/platform';\nimport { resolve } from '@/lib/server-container';\nimport type { ListToolsUseCase } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolStatusEntry {\n installed: boolean;\n version: string | null;\n /** Platform-specific install command from tool JSON metadata */\n installCommand: string | null;\n /** Documentation/website URL */\n installUrl: string | null;\n}\n\nexport interface ToolStatusResult {\n git: ToolStatusEntry;\n gh: ToolStatusEntry;\n}\n\nfunction getVersion(\n command: string,\n args: string[]\n): Promise<{ installed: boolean; version: string | null }> {\n return new Promise((resolve) => {\n try {\n const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };\n execFile(command, args, opts, (error, stdout) => {\n if (error) {\n resolve({ installed: false, version: null });\n return;\n }\n // Extract version number from output like \"git version 2.43.0\" or \"gh version 2.40.1\"\n const match = stdout.match(/(\\d+\\.\\d+(?:\\.\\d+)?)/);\n resolve({ installed: true, version: match?.[1] ?? null });\n });\n } catch {\n resolve({ installed: false, version: null });\n }\n });\n}\n\nexport async function checkToolStatus(): Promise<ToolStatusResult> {\n // Run version checks and tool metadata lookup in parallel\n const [gitVersion, ghVersion, tools] = await Promise.all([\n getVersion('git', ['--version']),\n getVersion('gh', ['--version']),\n (async () => {\n try {\n const useCase = resolve<ListToolsUseCase>('ListToolsUseCase');\n return await useCase.execute();\n } catch {\n return [];\n }\n })(),\n ]);\n\n const gitTool = tools.find((t) => t.id === 'git');\n const ghTool = tools.find((t) => t.id === 'gh');\n\n return {\n git: {\n ...gitVersion,\n installCommand: gitTool?.installCommand ?? null,\n installUrl: gitTool?.website ?? 'https://git-scm.com',\n },\n gh: {\n ...ghVersion,\n installCommand: ghTool?.installCommand ?? null,\n installUrl: ghTool?.website ?? 'https://cli.github.com',\n },\n };\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ArchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/archive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function archiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const archiveFeatureUseCase = resolve<ArchiveFeatureUseCase>('ArchiveFeatureUseCase');\n const feature = await archiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to archive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteFeatureUseCase } from '@shepai/core/application/use-cases/features/delete-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function deleteFeature(\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const deleteFeatureUseCase = resolve<DeleteFeatureUseCase>('DeleteFeatureUseCase');\n const options: { cleanup?: boolean; cascadeDelete?: boolean; closePr?: boolean } = {};\n if (cleanup !== undefined) options.cleanup = cleanup;\n if (cascadeDelete !== undefined) options.cascadeDelete = cascadeDelete;\n if (closePr !== undefined) options.closePr = closePr;\n const feature =\n Object.keys(options).length > 0\n ? await deleteFeatureUseCase.execute(featureId, options)\n : await deleteFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ResumeFeatureUseCase } from '@shepai/core/application/use-cases/features/resume-feature.use-case';\n\nexport async function resumeFeature(\n featureId: string\n): Promise<{ resumed: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { resumed: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<ResumeFeatureUseCase>('ResumeFeatureUseCase');\n await useCase.execute(featureId);\n return { resumed: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to resume feature';\n return { resumed: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StartFeatureUseCase } from '@shepai/core/application/use-cases/features/start-feature.use-case';\n\nexport async function startFeature(\n featureId: string\n): Promise<{ started: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { started: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<StartFeatureUseCase>('StartFeatureUseCase');\n await useCase.execute(featureId);\n return { started: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to start feature';\n return { started: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StopAgentRunUseCase } from '@shepai/core/application/use-cases/agents/stop-agent-run.use-case';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\n\nexport async function stopFeature(\n featureId: string\n): Promise<{ stopped: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { stopped: false, error: 'Feature id is required' };\n }\n\n try {\n // Find the active agent run for this feature\n const runRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const allRuns = await runRepo.list();\n const activeRun = allRuns.find(\n (r) =>\n r.featureId === featureId &&\n r.status !== 'completed' &&\n r.status !== 'failed' &&\n r.status !== 'interrupted' &&\n r.status !== 'cancelled'\n );\n\n if (!activeRun) {\n return { stopped: false, error: 'No active agent run found for this feature' };\n }\n\n const useCase = resolve<StopAgentRunUseCase>('StopAgentRunUseCase');\n const result = await useCase.execute(activeRun.id);\n\n if (!result.stopped) {\n return { stopped: false, error: result.reason };\n }\n return { stopped: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to stop agent';\n return { stopped: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { UnarchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/unarchive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function unarchiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const unarchiveFeatureUseCase = resolve<UnarchiveFeatureUseCase>('UnarchiveFeatureUseCase');\n const feature = await unarchiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to unarchive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { AddRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/add-repository.use-case';\nimport type { Repository } from '@shepai/core/domain/generated/output';\n\ninterface AddRepositoryInput {\n path: string;\n name?: string;\n}\n\nexport async function addRepository(\n input: AddRepositoryInput\n): Promise<{ repository?: Repository; error?: string }> {\n const { path, name } = input;\n\n if (!path?.trim()) {\n return { error: 'path is required' };\n }\n\n try {\n const addRepoUseCase = resolve<AddRepositoryUseCase>('AddRepositoryUseCase');\n const repository = await addRepoUseCase.execute({ path, name });\n return { repository };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to add repository';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/delete-repository.use-case';\n\nexport async function deleteRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'id is required' };\n }\n\n try {\n const useCase = resolve<DeleteRepositoryUseCase>('DeleteRepositoryUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\n/**\n * Lightweight server action to fetch a single feature's name and description.\n * Used by the SSE effect to update node metadata after AI metadata generation\n * without a full graph reconcile (which can overwrite SSE-driven state).\n */\nexport async function getFeatureMetadata(\n featureId: string\n): Promise<{ name: string; description: string } | null> {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n return { name: feature.name, description: feature.description };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/actions/open-ide.ts","../../../../../../../src/presentation/web/app/actions/open-shell.ts","../../../../../../../src/presentation/web/app/actions/open-folder.ts","../../../../../../../src/presentation/web/app/actions/sync-repository.ts","../../../../../../../src/presentation/web/app/actions/agent-setup-flag.ts","../../../../../../../src/presentation/web/app/actions/check-agent-auth.ts","../../../../../../../src/presentation/web/app/actions/check-tool-status.ts","../../../../../../../src/presentation/web/app/actions/archive-feature.ts","../../../../../../../src/presentation/web/app/actions/delete-feature.ts","../../../../../../../src/presentation/web/app/actions/resume-feature.ts","../../../../../../../src/presentation/web/app/actions/start-feature.ts","../../../../../../../src/presentation/web/app/actions/stop-feature.ts","../../../../../../../src/presentation/web/app/actions/unarchive-feature.ts","../../../../../../../src/presentation/web/app/actions/add-repository.ts","../../../../../../../src/presentation/web/app/actions/delete-repository.ts","../../../../../../../src/presentation/web/app/actions/get-feature-metadata.ts","../../../../../../../src/presentation/web/app/actions/reparent-feature.ts"],"sourcesContent":["'use server';\n\nimport { isAbsolute } from 'node:path';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport type { LaunchIdeUseCase } from '@shepai/core/application/use-cases/ide/launch-ide.use-case';\nimport { resolve } from '@/lib/server-container';\n\ninterface OpenIdeInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openIde(\n input: OpenIdeInput\n): Promise<{ success: boolean; error?: string; editor?: string; path?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n const settings = getSettings();\n const editor = settings.environment.defaultEditor;\n\n const useCase = resolve<LaunchIdeUseCase>('LaunchIdeUseCase');\n const result = await useCase.execute({\n editorId: editor,\n repositoryPath,\n branch,\n checkAvailability: true,\n });\n\n if (!result.ok) {\n return { success: false, error: result.message };\n }\n\n return { success: true, editor: result.editorName, path: result.worktreePath };\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute } from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { computeWorktreePath } from '@shepai/core/infrastructure/services/ide-launchers/compute-worktree-path';\nimport { resolve } from '@/lib/server-container';\nimport type { IToolInstallerService } from '@shepai/core/application/ports/output/services/tool-installer.service';\n\n// Fallback commands for the \"system\" terminal when no tool metadata entry exists.\n// Uses a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst SYSTEM_TERMINAL_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> =\n {\n darwin: { cmd: 'open', args: (p) => ['-a', 'Terminal', p] },\n linux: { cmd: 'x-terminal-emulator', args: (p) => [`--working-directory=${p}`] },\n win32: {\n cmd: 'cmd.exe',\n args: (p) => ['/c', 'start', 'powershell', '-NoExit', '-Command', `Set-Location \"${p}\"`],\n },\n };\n\ninterface OpenShellInput {\n repositoryPath: string;\n branch?: string;\n}\n\nexport async function openShell(\n input: OpenShellInput\n): Promise<{ success: boolean; error?: string; path?: string; shell?: string }> {\n const { repositoryPath, branch } = input;\n\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n const settings = getSettings();\n const shell = settings.environment.shellPreference;\n const terminalPref = settings.environment.terminalPreference ?? 'system';\n const targetPath = branch ? computeWorktreePath(repositoryPath, branch) : repositoryPath;\n\n if (!existsSync(targetPath)) {\n return { success: false, error: `Path does not exist: ${targetPath}` };\n }\n\n // Try to find the terminal in tool metadata via DI container.\n // Using DI (not a direct import from tool-metadata) ensures that\n // TOOL_METADATA is read from the correct tools/ directory path — it is loaded once\n // in the Node.js CLI bootstrap context where import.meta.url resolves correctly.\n // Direct imports of tool-metadata break in standalone production builds.\n if (terminalPref !== 'system') {\n try {\n const service = resolve<IToolInstallerService>('IToolInstallerService');\n const config = service.getTerminalOpenConfig(terminalPref);\n\n if (config?.openDirectory.includes('{dir}')) {\n const resolved = config.openDirectory.replace('{dir}', targetPath);\n\n if (config.shell) {\n const child = spawn(resolved, [], {\n detached: true,\n stdio: 'ignore',\n shell: true,\n });\n child.on('error', () => undefined);\n child.unref();\n } else {\n const [command, ...args] = resolved.split(/\\s+/);\n const child = spawn(command, args, {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined);\n child.unref();\n }\n\n return { success: true, path: targetPath, shell };\n }\n } catch {\n // DI container not available — fall through to system terminal\n }\n }\n\n // Fallback to system terminal\n const entry = SYSTEM_TERMINAL_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n const child = spawn(entry.cmd, entry.args(targetPath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: targetPath, shell };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open shell';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { isAbsolute, normalize } from 'node:path';\nimport { spawn } from 'node:child_process';\n\n// Use a record lookup instead of if/else to prevent the bundler from\n// tree-shaking platform branches at build time. Turbopack evaluates\n// os.platform() during the build and dead-code-eliminates unused branches,\n// baking in the CI platform (linux) and breaking macOS/Windows installs.\nconst FOLDER_COMMANDS: Record<string, { cmd: string; args: (path: string) => string[] }> = {\n darwin: { cmd: 'open', args: (p) => [p] },\n linux: { cmd: 'xdg-open', args: (p) => [p] },\n win32: { cmd: 'explorer', args: (p) => [p] },\n};\n\nexport async function openFolder(\n repositoryPath: string\n): Promise<{ success: boolean; error?: string; path?: string }> {\n if (!repositoryPath || !isAbsolute(repositoryPath)) {\n return { success: false, error: 'repositoryPath must be an absolute path' };\n }\n\n try {\n if (!existsSync(repositoryPath)) {\n return { success: false, error: 'Directory not found' };\n }\n\n const entry = FOLDER_COMMANDS[platform()];\n if (!entry) {\n return {\n success: false,\n error: `Unsupported platform: ${platform()}`,\n };\n }\n\n // Normalize to platform-native separators — explorer.exe on Windows\n // does not understand forward-slash paths and falls back to Documents.\n const nativePath = normalize(repositoryPath);\n\n const child = spawn(entry.cmd, entry.args(nativePath), {\n detached: true,\n stdio: 'ignore',\n });\n child.on('error', () => undefined); // Prevent uncaught exception on spawn failure\n child.unref();\n\n return { success: true, path: repositoryPath };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to open folder';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { SyncRepositoryMainUseCase } from '@shepai/core/application/use-cases/repositories/sync-repository-main.use-case';\n\nexport async function syncRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'Repository id is required' };\n }\n\n try {\n const useCase = resolve<SyncRepositoryMainUseCase>('SyncRepositoryMainUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to sync repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\n\n/**\n * Check whether onboarding has been completed.\n * Delegates to the in-memory settings singleton (zero DB overhead).\n */\nexport async function isAgentSetupComplete(): Promise<boolean> {\n try {\n return getSettings().onboardingComplete;\n } catch {\n return false;\n }\n}\n","'use server';\n\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { execFile } from 'node:child_process';\nimport { IS_WINDOWS } from '@shepai/core/infrastructure/platform';\nimport { getSettings } from '@shepai/core/infrastructure/services/settings.service';\nimport { resolve } from '@/lib/server-container';\nimport type { ListToolsUseCase } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface AgentAuthStatus {\n agentType: string;\n /** Whether the CLI tool binary is installed */\n installed: boolean;\n /** Whether credentials / auth appear valid */\n authenticated: boolean;\n /** Human-readable label for the agent */\n label: string;\n /** CLI binary name (e.g. \"claude\", \"gemini\") */\n binaryName: string | null;\n /** Shell command to install the tool (e.g. \"npm install -g @anthropic-ai/claude-code\") */\n installCommand: string | null;\n /** Instructions to authenticate if not authenticated */\n authCommand: string | null;\n}\n\nconst AGENT_LABELS: Record<string, string> = {\n 'claude-code': 'Claude Code',\n cursor: 'Cursor Agent',\n 'gemini-cli': 'Gemini CLI',\n aider: 'Aider',\n copilot: 'Copilot CLI',\n continue: 'Continue',\n dev: 'Demo',\n};\n\nconst AGENT_TOOL_MAP: Record<string, string> = {\n 'claude-code': 'claude-code',\n cursor: 'cursor-cli',\n 'gemini-cli': 'gemini-cli',\n copilot: 'copilot-cli',\n};\n\nconst AGENT_BINARY_MAP: Record<string, string> = {\n 'claude-code': 'claude',\n cursor: 'cursor-agent',\n 'gemini-cli': 'gemini',\n copilot: 'copilot',\n};\n\n/**\n * Tier 1: Instant credential/env check (~5ms, no subprocess).\n * Returns true if credentials likely exist.\n */\nfunction tier1AuthCheck(agentType: string): boolean {\n const home = homedir();\n\n switch (agentType) {\n case 'claude-code': {\n if (process.env['ANTHROPIC_API_KEY']) return true;\n if (process.env['CLAUDE_CODE_USE_BEDROCK']) return true;\n if (process.env['CLAUDE_CODE_USE_VERTEX']) return true;\n if (process.env['CLAUDE_CODE_OAUTH_TOKEN']) return true;\n const credPath = join(home, '.claude', '.credentials.json');\n return existsSync(credPath);\n }\n case 'cursor': {\n if (process.env['CURSOR_API_KEY']) return true;\n // Cursor Agent stores creds after `agent login` — check common locations\n const cursorDir = join(home, '.cursor');\n return existsSync(cursorDir);\n }\n case 'gemini-cli': {\n if (process.env['GEMINI_API_KEY']) return true;\n if (process.env['GOOGLE_API_KEY']) return true;\n if (process.env['GOOGLE_APPLICATION_CREDENTIALS']) return true;\n const accountsPath = join(home, '.gemini', 'google_accounts.json');\n return existsSync(accountsPath);\n }\n case 'copilot-cli': {\n if (process.env['GITHUB_TOKEN']) return true;\n if (process.env['GH_TOKEN']) return true;\n if (process.env['GITHUB_AUTH_TOKEN']) return true;\n // GitHub CLI stores creds after `gh auth login` — check common locations\n const ghDir = IS_WINDOWS ? join(home, '.copilot') : join(home, '.config', 'gh');\n return existsSync(ghDir);\n }\n\n default:\n // dev, aider, continue — assume no auth needed\n return true;\n }\n}\n\n/**\n * Tier 2: Subprocess verification (~200ms).\n * Only called if tier 1 passes, to confirm tokens aren't expired.\n */\nfunction tier2AuthVerify(agentType: string, binaryName: string): Promise<boolean> {\n return new Promise((resolve) => {\n let cmd: string;\n let args: string[];\n\n switch (agentType) {\n case 'claude-code':\n cmd = binaryName;\n args = ['auth', 'status'];\n break;\n case 'cursor':\n cmd = binaryName;\n args = ['status'];\n break;\n case 'copilot-cli':\n cmd = 'gh';\n args = ['auth', 'status'];\n break;\n default:\n // No tier 2 command available — trust tier 1\n resolve(true);\n return;\n }\n\n try {\n const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };\n execFile(cmd, args, opts, (error) => {\n resolve(!error);\n });\n } catch {\n resolve(false);\n }\n });\n}\n\n/**\n * Check agent tool installation + auth status.\n * Uses two-tier detection: instant file/env check, then optional subprocess verify.\n */\nexport async function checkAgentAuth(): Promise<AgentAuthStatus> {\n let agentType: string;\n try {\n agentType = getSettings().agent.type;\n } catch {\n return {\n agentType: 'unknown',\n installed: false,\n authenticated: false,\n label: 'Unknown',\n binaryName: null,\n installCommand: null,\n authCommand: null,\n };\n }\n\n const label = AGENT_LABELS[agentType] ?? agentType;\n const toolId = AGENT_TOOL_MAP[agentType] ?? null;\n const binaryName = AGENT_BINARY_MAP[agentType] ?? null;\n\n // Dev/demo agents — always good\n if (!toolId) {\n return {\n agentType,\n installed: true,\n authenticated: true,\n label,\n binaryName: null,\n installCommand: null,\n authCommand: null,\n };\n }\n\n // Check if tool is installed (also grab install command from metadata)\n let installed = false;\n let installCommand: string | null = null;\n try {\n const useCase = resolve<ListToolsUseCase>('ListToolsUseCase');\n const tools = await useCase.execute();\n const tool = tools.find((t) => t.id === toolId);\n installed = tool?.status.status === 'available';\n installCommand = tool?.installCommand ?? null;\n } catch {\n installed = false;\n }\n\n if (!installed) {\n return {\n agentType,\n installed: false,\n authenticated: false,\n label,\n binaryName,\n installCommand,\n authCommand: binaryName ? `Install ${label} first` : null,\n };\n }\n\n // Tier 1: instant file/env check\n const tier1 = tier1AuthCheck(agentType);\n\n if (!tier1) {\n return {\n agentType,\n installed: true,\n authenticated: false,\n label,\n binaryName,\n installCommand,\n authCommand: binaryName,\n };\n }\n\n // Tier 2: subprocess verify (best effort, ~200ms)\n let authenticated = true;\n if (binaryName) {\n authenticated = await tier2AuthVerify(agentType, binaryName);\n }\n\n return {\n agentType,\n installed: true,\n authenticated,\n label,\n binaryName,\n installCommand,\n authCommand: authenticated ? null : binaryName,\n };\n}\n","'use server';\n\nimport { execFile } from 'node:child_process';\nimport { IS_WINDOWS } from '@shepai/core/infrastructure/platform';\nimport { resolve } from '@/lib/server-container';\nimport type { ListToolsUseCase } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolStatusEntry {\n installed: boolean;\n version: string | null;\n /** Platform-specific install command from tool JSON metadata */\n installCommand: string | null;\n /** Documentation/website URL */\n installUrl: string | null;\n}\n\nexport interface ToolStatusResult {\n git: ToolStatusEntry;\n gh: ToolStatusEntry;\n}\n\nfunction getVersion(\n command: string,\n args: string[]\n): Promise<{ installed: boolean; version: string | null }> {\n return new Promise((resolve) => {\n try {\n const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };\n execFile(command, args, opts, (error, stdout) => {\n if (error) {\n resolve({ installed: false, version: null });\n return;\n }\n // Extract version number from output like \"git version 2.43.0\" or \"gh version 2.40.1\"\n const match = stdout.match(/(\\d+\\.\\d+(?:\\.\\d+)?)/);\n resolve({ installed: true, version: match?.[1] ?? null });\n });\n } catch {\n resolve({ installed: false, version: null });\n }\n });\n}\n\nexport async function checkToolStatus(): Promise<ToolStatusResult> {\n // Run version checks and tool metadata lookup in parallel\n const [gitVersion, ghVersion, tools] = await Promise.all([\n getVersion('git', ['--version']),\n getVersion('gh', ['--version']),\n (async () => {\n try {\n const useCase = resolve<ListToolsUseCase>('ListToolsUseCase');\n return await useCase.execute();\n } catch {\n return [];\n }\n })(),\n ]);\n\n const gitTool = tools.find((t) => t.id === 'git');\n const ghTool = tools.find((t) => t.id === 'gh');\n\n return {\n git: {\n ...gitVersion,\n installCommand: gitTool?.installCommand ?? null,\n installUrl: gitTool?.website ?? 'https://git-scm.com',\n },\n gh: {\n ...ghVersion,\n installCommand: ghTool?.installCommand ?? null,\n installUrl: ghTool?.website ?? 'https://cli.github.com',\n },\n };\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ArchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/archive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function archiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const archiveFeatureUseCase = resolve<ArchiveFeatureUseCase>('ArchiveFeatureUseCase');\n const feature = await archiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to archive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteFeatureUseCase } from '@shepai/core/application/use-cases/features/delete-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function deleteFeature(\n featureId: string,\n cleanup?: boolean,\n cascadeDelete?: boolean,\n closePr?: boolean\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const deleteFeatureUseCase = resolve<DeleteFeatureUseCase>('DeleteFeatureUseCase');\n const options: { cleanup?: boolean; cascadeDelete?: boolean; closePr?: boolean } = {};\n if (cleanup !== undefined) options.cleanup = cleanup;\n if (cascadeDelete !== undefined) options.cascadeDelete = cascadeDelete;\n if (closePr !== undefined) options.closePr = closePr;\n const feature =\n Object.keys(options).length > 0\n ? await deleteFeatureUseCase.execute(featureId, options)\n : await deleteFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ResumeFeatureUseCase } from '@shepai/core/application/use-cases/features/resume-feature.use-case';\n\nexport async function resumeFeature(\n featureId: string\n): Promise<{ resumed: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { resumed: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<ResumeFeatureUseCase>('ResumeFeatureUseCase');\n await useCase.execute(featureId);\n return { resumed: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to resume feature';\n return { resumed: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StartFeatureUseCase } from '@shepai/core/application/use-cases/features/start-feature.use-case';\n\nexport async function startFeature(\n featureId: string\n): Promise<{ started: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { started: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<StartFeatureUseCase>('StartFeatureUseCase');\n await useCase.execute(featureId);\n return { started: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to start feature';\n return { started: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { StopAgentRunUseCase } from '@shepai/core/application/use-cases/agents/stop-agent-run.use-case';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\n\nexport async function stopFeature(\n featureId: string\n): Promise<{ stopped: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { stopped: false, error: 'Feature id is required' };\n }\n\n try {\n // Find the active agent run for this feature\n const runRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const allRuns = await runRepo.list();\n const activeRun = allRuns.find(\n (r) =>\n r.featureId === featureId &&\n r.status !== 'completed' &&\n r.status !== 'failed' &&\n r.status !== 'interrupted' &&\n r.status !== 'cancelled'\n );\n\n if (!activeRun) {\n return { stopped: false, error: 'No active agent run found for this feature' };\n }\n\n const useCase = resolve<StopAgentRunUseCase>('StopAgentRunUseCase');\n const result = await useCase.execute(activeRun.id);\n\n if (!result.stopped) {\n return { stopped: false, error: result.reason };\n }\n return { stopped: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to stop agent';\n return { stopped: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { UnarchiveFeatureUseCase } from '@shepai/core/application/use-cases/features/unarchive-feature.use-case';\nimport type { Feature } from '@shepai/core/domain/generated/output';\n\nexport async function unarchiveFeature(\n featureId: string\n): Promise<{ feature?: Feature; error?: string }> {\n if (!featureId?.trim()) {\n return { error: 'id is required' };\n }\n\n try {\n const unarchiveFeatureUseCase = resolve<UnarchiveFeatureUseCase>('UnarchiveFeatureUseCase');\n const feature = await unarchiveFeatureUseCase.execute(featureId);\n return { feature };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to unarchive feature';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { AddRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/add-repository.use-case';\nimport type { Repository } from '@shepai/core/domain/generated/output';\n\ninterface AddRepositoryInput {\n path: string;\n name?: string;\n}\n\nexport async function addRepository(\n input: AddRepositoryInput\n): Promise<{ repository?: Repository; error?: string }> {\n const { path, name } = input;\n\n if (!path?.trim()) {\n return { error: 'path is required' };\n }\n\n try {\n const addRepoUseCase = resolve<AddRepositoryUseCase>('AddRepositoryUseCase');\n const repository = await addRepoUseCase.execute({ path, name });\n return { repository };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to add repository';\n return { error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { DeleteRepositoryUseCase } from '@shepai/core/application/use-cases/repositories/delete-repository.use-case';\n\nexport async function deleteRepository(\n repositoryId: string\n): Promise<{ success: boolean; error?: string }> {\n if (!repositoryId?.trim()) {\n return { success: false, error: 'id is required' };\n }\n\n try {\n const useCase = resolve<DeleteRepositoryUseCase>('DeleteRepositoryUseCase');\n await useCase.execute(repositoryId);\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to delete repository';\n return { success: false, error: message };\n }\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\n\n/**\n * Lightweight server action to fetch a single feature's name and description.\n * Used by the SSE effect to update node metadata after AI metadata generation\n * without a full graph reconcile (which can overwrite SSE-driven state).\n */\nexport async function getFeatureMetadata(\n featureId: string\n): Promise<{ name: string; description: string } | null> {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n return { name: feature.name, description: feature.description };\n}\n","'use server';\n\nimport { resolve } from '@/lib/server-container';\nimport type { ReparentFeatureUseCase } from '@shepai/core/application/use-cases/features/reparent-feature.use-case';\n\nexport async function reparentFeature(\n featureId: string,\n parentId: string | null\n): Promise<{ success: boolean; error?: string }> {\n if (!featureId.trim()) {\n return { success: false, error: 'Feature id is required' };\n }\n\n try {\n const useCase = resolve<ReparentFeatureUseCase>('ReparentFeatureUseCase');\n await useCase.execute({ featureId, parentId });\n return { success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to reparent feature';\n return { success: false, error: message };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[66560,a=>{"use strict";var b=a.i(12656),c=a.i(96960),d=a.i(69845);a.i(90370);var e=a.i(24640),f=a.i(66421),g=a.i(55003),h=a.i(25700);let i=(0,h.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]),j=(0,h.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),k=(0,h.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),l=(0,h.default)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]),m=(0,h.default)("volume-off",[["path",{d:"M16 9a5 5 0 0 1 .95 2.293",key:"1fgyg8"}],["path",{d:"M19.364 5.636a9 9 0 0 1 1.889 9.96",key:"l3zxae"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"m7 7-.587.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298V11",key:"1gbwow"}],["path",{d:"M9.828 4.172A.686.686 0 0 1 11 4.657v.686",key:"s2je0y"}]]);var n=a.i(3942);let o=(0,h.default)("zap-off",[["path",{d:"M10.513 4.856 13.12 2.17a.5.5 0 0 1 .86.46l-1.377 4.317",key:"193nxd"}],["path",{d:"M15.656 10H20a1 1 0 0 1 .78 1.63l-1.72 1.773",key:"27a7lr"}],["path",{d:"M16.273 16.273 10.88 21.83a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14H4a1 1 0 0 1-.78-1.63l4.507-4.643",key:"1e0qe9"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var p=a.i(17300),q=a.i(67424),r=a.i(32703);let s=(0,h.default)("table-properties",[["path",{d:"M15 3v18",key:"14nvp0"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 9H3",key:"1338ky"}],["path",{d:"M21 15H3",key:"9uk58r"}]]);var t=a.i(59706),u=a.i(56109),v=a.i(19884);function w({icon:a,label:c,href:d,active:e=!1}){let f=(0,v.useSoundAction)("navigate");return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"sidebar-nav-item",children:(0,b.jsx)(g.SidebarMenuButton,{asChild:!0,isActive:e,tooltip:c,children:(0,b.jsxs)(u.default,{href:d,onClick:()=>f.play(),children:[(0,b.jsx)(a,{}),(0,b.jsx)("span",{children:c})]})})})}var x=a.i(81589),x=x,y=a.i(18948),z=a.i(85536);function A({className:a}){let{toggleSidebar:c,open:d}=(0,g.useSidebar)(),e=(0,v.useSoundAction)("expand"),f=(0,v.useSoundAction)("collapse");return(0,b.jsx)("div",{className:(0,z.cn)("flex",a),children:(0,b.jsx)(y.Button,{"data-testid":"sidebar-collapse-toggle",variant:"ghost",size:"icon",className:"size-7 cursor-pointer group-data-[collapsible=icon]:size-8!",onClick:()=>{d?f.play():e.play(),c()},"aria-label":d?"Collapse sidebar":"Expand sidebar",children:(0,b.jsx)(x.default,{className:"size-4"})})})}function B({className:a,size:c=24,variant:d="default"}){return(0,b.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 194 200",width:c,height:c,className:(0,z.cn)("shrink-0","dev"===d&&"text-cyan-400",a),"aria-hidden":"true",children:(0,b.jsx)("g",{transform:"matrix(1, 0, 0, 1, -111, -208)",children:(0,b.jsx)("path",{d:"M 198 406 C196,405 194,403 193,401 C192,399 191,398 186,398 C178,397 174,394 170,387 L 168 381 L 163 381 C156,381 150,377 147,370 C144,364 143,359 146,353 C148,348 148,347 147,347 C145,347 140,343 138,339 C133,329 139,314 149,311 L 152 311 L 149 307 C145,302 145,294 149,290 C151,288 152,287 151,286 C150,283 152,278 155,276 C156,275 159,274 162,273 C165,273 166,273 168,276 C171,278 171,280 172,287 C173,294 174,297 177,304 C180,309 182,314 183,316 C186,327 193,336 199,339 C204,342 211,342 216,340 C222,336 231,324 234,314 C235,312 237,307 239,302 C240,298 242,292 242,289 C243,281 245,278 247,275 C250,273 251,273 255,273 C261,274 264,278 264,282 C264,284 264,286 263,287 C262,287 263,288 265,290 C272,295 272,303 267,309 L 265 312 L 269 314 C276,317 279,323 279,332 C279,339 277,343 272,347 C268,351 268,351 269,354 C272,358 271,366 269,371 C266,376 259,381 254,381 C252,381 251,382 248,386 C242,395 234,400 227,399 C224,398 223,398 221,401 C220,403 217,405 216,406 C211,409 203,409 198,406 ZM 136 271 C123,267 115,262 113,256 C111,251 111,251 113,251 C118,254 124,254 132,252 C136,252 141,251 144,251 C149,251 157,253 162,256 C166,258 166,258 166,264 L 166 269 L 160 270 C149,272 142,272 136,271 ZM 264 271 C263,271 259,270 256,270 L 250 270 L 250 265 C249,259 250,257 259,254 C265,251 272,251 289,252 C297,253 299,253 302,252 C305,250 305,250 305,252 C305,255 301,262 297,264 C289,270 272,273 264,271 ZM 162 249 C160,247 159,245 159,242 C159,236 164,230 169,230 C170,230 171,228 171,225 C171,216 176,210 184,209 C189,209 195,211 195,213 C195,214 196,213 197,212 C201,209 204,208 208,208 C212,208 217,210 219,212 C220,214 220,213 223,211 C226,208 234,208 239,211 C243,214 246,221 246,226 C245,230 245,230 247,230 C253,230 258,238 257,244 C256,249 251,252 245,252 C241,252 237,251 234,248 C232,247 232,247 228,249 C225,251 222,252 220,252 C216,252 212,250 210,247 C209,246 209,246 206,248 C201,252 192,253 185,248 C183,247 183,247 178,249 C172,253 166,253 162,249 ZM 116 249 C112,248 114,247 119,247 C122,247 127,246 130,245 C138,242 146,242 152,245 L 158 248 L 148 247 C142,247 138,247 133,248 C128,250 120,250 116,249 ZM 284 248 C281,247 277,247 270,247 L 260 248 L 263 246 C269,243 276,242 284,245 C289,246 295,247 298,247 C303,247 304,247 303,248 C301,250 289,250 284,248 Z",fill:"currentColor"})})})}var C=a.i(82934);function D({version:a,branch:d,commitHash:f,isDev:g=!1,packageName:h="@shepai/cli",description:i,instancePath:j}){let{t:k}=(0,e.useTranslation)("web"),l=f?.slice(0,7),{latest:m,updateAvailable:n}=function(a){let[b,d]=(0,c.useState)(null),[e,f]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch("/api/npm-version");if(!b.ok)return;let c=await b.json();!a&&c.latest&&d(c.latest)}catch{}finally{a||f(!1)}}(),()=>{a=!0}},[]);let g=null!==b&&function(a,b){let c=a=>a.split("-")[0].split(".").map(Number),d=c(a),e=c(b);for(let a=0;a<3;a++){let b=d[a]??0,c=e[a]??0;if(b>c)return 1;if(b<c)return -1}return 0}(b,a)>0;return{latest:b,updateAvailable:g,loading:e}}(a),{status:o,startUpgrade:p}=function(){let[a,b]=(0,c.useState)("idle"),[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(),h=(0,c.useRef)(null),i=(0,c.useRef)(!1),j=(0,c.useCallback)(()=>{if("upgrading"===a||"restarting"===a)return;b("upgrading"),e(""),g(void 0),i.current=!1;let c=new AbortController;return h.current=c,fetch("/api/cli-upgrade",{method:"POST",signal:c.signal}).then(async a=>{if(!a.ok||!a.body){b("error"),g(`Server returned ${a.status}`);return}let c=a.body.getReader(),d=new TextDecoder,f="";for(;;){let{done:a,value:h}=await c.read();if(a)break;let j=(f+=d.decode(h,{stream:!0})).split("\n");for(let a of(f=j.pop()??"",j)){if(a.startsWith("event: restarting")){i.current=!0,b("restarting"),function(a,b){let c=Date.now()+3e4,d=()=>{Date.now()>c||fetch("/api/version",{method:"GET",cache:"no-store"}).then(a=>{a.ok?window.location.reload():setTimeout(d,500)}).catch(()=>{setTimeout(d,500)})};setTimeout(d,500)}(0,0);continue}if(!a.startsWith("event: done")&&a.startsWith("data: ")){let c=a.slice(6);try{let a=JSON.parse(c);"upgraded"===a.status?b("upgraded"):"up-to-date"===a.status?b("up-to-date"):"error"===a.status&&(b("error"),g(a.errorMessage))}catch{e(a=>a+c)}}}}}).catch(a=>{i.current||a instanceof DOMException&&"AbortError"===a.name||(b("error"),g(a instanceof Error?a.message:"Upgrade failed"))}),()=>{c.abort()}},[a]);return{status:a,output:d,errorMessage:f,startUpgrade:j}}(),q=g?`${a}-dev`:`v${a}`,r="upgrading"===o,s="restarting"===o,t="upgraded"===o;return(0,b.jsx)(C.TooltipProvider,{delayDuration:200,children:(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("span",{className:"text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors","data-testid":"version-label",children:[q,!n||t||s?null:(0,b.jsx)("span",{className:"absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400","data-testid":"update-dot"})]})}),(0,b.jsxs)(C.TooltipContent,{side:"right",className:"max-w-[280px] space-y-1 p-3 text-start",children:[(0,b.jsx)("div",{className:"mb-1.5 text-xs font-semibold",children:h}),i?(0,b.jsx)("div",{className:"text-[10px] leading-snug opacity-70",children:i}):null,(0,b.jsxs)("div",{className:"border-t border-white/10 pt-1.5",children:[(0,b.jsx)(E,{label:k("versionBadge.version"),value:q}),g&&d?(0,b.jsx)(E,{label:k("versionBadge.branch"),value:d}):null,g&&l?(0,b.jsx)(E,{label:k("versionBadge.commit"),value:l,mono:!0}):null,g&&j?(0,b.jsx)(E,{label:k("versionBadge.path"),value:j,mono:!0}):null,m?(0,b.jsx)(E,{label:"Latest",value:`v${m}`,highlight:n}):null]}),s?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-restarting",children:"Restarting..."})}):t?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-success",children:"Upgraded successfully"})}):"error"===o?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-red-400","data-testid":"upgrade-error",children:"Upgrade failed"})}):n?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("button",{type:"button",onClick:p,disabled:r||s,className:"inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50","data-testid":"upgrade-button",children:r?"Upgrading...":s?"Restarting...":`Upgrade to v${m}`})}):null]})]})})}function E({label:a,value:c,highlight:d,mono:e}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 text-[10px]",children:[(0,b.jsx)("span",{className:"opacity-60",children:a}),(0,b.jsx)("span",{className:[d?"font-medium text-emerald-400":"",e||!d?"font-mono":""].filter(Boolean).join(" "),children:c})]})}function F({startedAt:a}){let[d,e]=(0,c.useState)(()=>Date.now()-a);return(0,c.useEffect)(()=>{let b=setInterval(()=>{(0,c.startTransition)(()=>e(Date.now()-a))},1e3);return()=>clearInterval(b)},[a]),(0,b.jsx)("span",{"data-testid":"elapsed-time",className:"tabular-nums",children:function(a){let b=Math.floor(a/1e3);if(b>=3600){let a=Math.floor(b/3600);return`${a}h`}let c=Math.floor(b/60);return`${String(c).padStart(2,"0")}:${String(b%60).padStart(2,"0")}`}(d)})}var G=a.i(82697),H=a.i(88064),I=a.i(67273),J=a.i(93866),K=a.i(56926),L=a.i(46168);let M={"action-needed":{icon:G.CircleAlert,iconClass:"text-amber-500",bgClass:"bg-amber-500/10",labelKey:"sidebar.statusActionNeeded"},"in-progress":{icon:H.Loader2,iconClass:"text-blue-500 animate-spin",bgClass:"bg-blue-500/10",labelKey:"sidebar.statusInProgress"},pending:{icon:L.Clock,iconClass:"text-slate-400",bgClass:"bg-slate-400/10",labelKey:"sidebar.statusPending"},blocked:{icon:J.Ban,iconClass:"text-gray-400",bgClass:"bg-gray-400/10",labelKey:"sidebar.statusBlocked"},error:{icon:K.CircleX,iconClass:"text-red-500",bgClass:"bg-red-500/10",labelKey:"sidebar.statusError"},done:{icon:I.CircleCheck,iconClass:"text-emerald-500",bgClass:"bg-emerald-500/10",labelKey:"sidebar.statusDone"}},N=["action-needed","error","blocked","in-progress","pending","done"];var O=a.i(17606),P=a.i(83852);function Q({name:a,status:c,startedAt:d,duration:e,agentType:f,modelId:h,onClick:i}){let{icon:j,iconClass:k}=M[c],l=f?(0,O.getAgentTypeIcon)(f):null;return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"feature-list-item",children:(0,b.jsxs)(g.SidebarMenuButton,{size:"sm",onClick:i,tooltip:a,className:"cursor-pointer",children:[(0,b.jsx)(j,{className:k}),(0,b.jsx)("span",{className:"flex-1 truncate font-medium",children:a}),"in-progress"===c&&null!=d?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:(0,b.jsx)(F,{startedAt:d})}):null,"done"===c&&e?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:e}):null,l?(0,b.jsx)(C.TooltipProvider,{children:(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"ml-auto shrink-0",children:(0,b.jsx)(l,{className:"h-3.5 w-3.5"})})}),(0,b.jsxs)(C.TooltipContent,{side:"right",children:[(0,b.jsx)("span",{className:"font-medium",children:O.agentTypeLabels[f]??f}),h?(0,b.jsxs)("span",{className:"ms-1 opacity-70",children:["· ",(0,P.getModelMeta)(h).displayName||h]}):null]})]})}):null]})})}var R=a.i(2103);let S="shep-animations-enabled",T="shep:animations-toggle",U="no-animations",V="shep-theme";function W({label:a,count:c,children:d}){return(0,b.jsxs)(g.SidebarGroup,{"data-testid":"feature-status-group",className:"px-2 py-1",children:[(0,b.jsxs)(g.SidebarGroupLabel,{className:"text-muted-foreground h-6 px-2 text-[0.65rem] font-semibold tracking-wider uppercase",children:[a,(0,b.jsx)("span",{"aria-label":`${c} items`,className:"bg-sidebar-accent text-sidebar-accent-foreground ms-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:c})]}),(0,b.jsx)(g.SidebarGroupContent,{children:(0,b.jsx)(g.SidebarMenu,{className:"gap-0.5",children:d})})]})}var X=a.i(71716),Y=a.i(73708),Z=a.i(67837);function $({repoName:a,featureCount:d,children:e,defaultOpen:f=!0,onAddFeature:g}){let[h,i]=(0,c.useState)(f);return(0,b.jsxs)("div",{"data-testid":"repo-group",className:"group/repo mb-1",children:[(0,b.jsxs)("div",{className:"flex items-center",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>i(!h),className:(0,z.cn)("text-sidebar-foreground hover:bg-sidebar-accent flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold","transition-colors duration-100"),"aria-expanded":h,children:[(0,b.jsx)(X.ChevronDown,{className:(0,z.cn)("text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200",!h&&"-rotate-90")}),(0,b.jsx)(Y.GitFork,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a}),(0,b.jsx)("span",{"aria-label":`${d} features`,className:"bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:d})]}),g?(0,b.jsx)("button",{type:"button","data-testid":"repo-add-feature",onClick:a=>{a.stopPropagation(),g()},className:(0,z.cn)("text-muted-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent mr-2 shrink-0 rounded-md p-1 opacity-0 transition-all duration-100 group-hover/repo:opacity-100","focus-visible:ring-ring focus-visible:opacity-100 focus-visible:ring-1 focus-visible:outline-none"),"aria-label":`Add feature to ${a}`,children:(0,b.jsx)(Z.Plus,{className:"h-3.5 w-3.5"})}):null]}),h?(0,b.jsx)("div",{className:"pl-2",children:e}):null]})}function _({label:a,className:c}){return(0,b.jsx)(g.SidebarGroup,{"data-testid":"sidebar-section-header",className:(0,z.cn)("px-2 py-1",c),children:(0,b.jsx)("div",{className:"text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium",children:(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a})})})}let aa={version:"unknown",packageName:"@shepai/cli",description:"Autonomous AI Native SDLC Platform",branch:"",commitHash:"",instancePath:"",isDev:!1};function ab({features:a,featureFlags:f,onFeatureClick:h,onAddFeature:u}){let{t:x,i18n:y}=(0,e.useTranslation)("web"),z=(0,d.usePathname)(),{state:E}=(0,g.useSidebar)(),F="collapsed"===E,{mounted:G,visible:H}=function(a,b){let[d,e]=(0,c.useState)(!a),[f,g]=(0,c.useState)(!a);return(0,c.useEffect)(()=>{if(!a){e(!0);let a=requestAnimationFrame(()=>g(!0));return()=>cancelAnimationFrame(a)}g(!1);let b=window.setTimeout(()=>e(!1),200);return()=>window.clearTimeout(b)},[a,200]),{mounted:d,visible:f}}(F,0),I=function(){let[a,b]=(0,c.useState)(aa);return(0,c.useEffect)(()=>{let a=!1;return async function(){try{let c=await fetch("/api/version");if(!c.ok)return;let d=await c.json();a||b(d)}catch{}}(),()=>{a=!0}},[]),a}(),{enabled:J,toggle:K}=(0,R.useSoundEnabled)(),{enabled:L,toggle:O}=function(){let[a,b]=(0,c.useState)(!0);(0,c.useEffect)(()=>{"false"===localStorage.getItem(S)&&(b(!1),document.body.classList.add(U));let a=a=>{let c=a.detail;b(c),document.body.classList.toggle(U,!c)};return window.addEventListener(T,a),()=>window.removeEventListener(T,a)},[]);let d=(0,c.useCallback)(()=>{let c=!a;localStorage.setItem(S,String(c)),b(c),document.body.classList.toggle(U,!c),window.dispatchEvent(new CustomEvent(T,{detail:c}))},[a]);return{enabled:a,toggle:d}}(),{resolvedTheme:P,theme:X,setTheme:Y}=function(){let[a,b]=(0,c.useState)("system"),[d,e]=(0,c.useState)("light"),f=(0,c.useCallback)(()=>"light",[]),g=(0,c.useCallback)(a=>"system"===a?f():a,[f]),h=(0,c.useCallback)(a=>{if("u"<typeof document)return;let b=document.documentElement;b.classList.remove("light","dark"),b.classList.add(a),e(a)},[]),i=(0,c.useCallback)(a=>{b(a),"u">typeof localStorage&&localStorage.setItem(V,a),h(g(a))},[g,h]);return(0,c.useEffect)(()=>{let a=localStorage.getItem(V)??"system";b(a),h(g(a))},[g,h]),(0,c.useEffect)(()=>{},[a,g,h]),{theme:a,resolvedTheme:d,setTheme:i}}(),Z=(0,v.useSoundAction)("toggle-on"),ab=(0,v.useSoundAction)("toggle-off"),ac=(0,v.useSoundAction)("navigate"),ad=(0,c.useMemo)(()=>{let b=new Map;for(let c of a){let a=c.repositoryPath,d=b.get(a);d||(d={repoName:c.repositoryName,features:[]},b.set(a,d)),d.features.push(c)}return Array.from(b.entries()).map(([a,{repoName:b,features:c}])=>({repoPath:a,repoName:b,featureCount:c.length,statusGroups:N.map(a=>({statusKey:a,label:x(M[a].labelKey),items:c.filter(b=>b.status===a)})).filter(a=>a.items.length>0)}))},[a,x]);return(0,b.jsxs)(g.Sidebar,{"data-testid":"app-sidebar","data-no-drawer-close":!0,collapsible:"icon",side:"rtl"===y.dir()?"right":"left",children:[(0,b.jsx)(g.SidebarHeader,{children:(0,b.jsxs)(g.SidebarMenu,{children:[(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsxs)("div",{className:"flex h-8 items-center group-data-[collapsible=icon]:justify-center",children:[G?(0,b.jsxs)("div",{className:["flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out",H?"opacity-100":"opacity-0"].join(" "),"aria-hidden":!H,children:[(0,b.jsx)(B,{className:"shrink-0",size:20,variant:I.isDev?"dev":"default"}),(0,b.jsx)("span",{className:"truncate text-sm font-semibold tracking-tight",children:"Shep"}),(0,b.jsx)(D,{version:I.version,branch:I.branch||void 0,commitHash:I.commitHash||void 0,isDev:I.isDev,packageName:I.packageName,description:I.description,instancePath:I.instancePath||void 0})]}):null,(0,b.jsx)(A,{className:"shrink-0 transition-all duration-200"})]})}),(0,b.jsx)(w,{icon:i,label:x("navigation.controlCenter"),href:"/",active:"/"===z}),f.inventory?(0,b.jsx)(w,{icon:s,label:x("navigation.inventory"),href:"/features",active:"/features"===z}):null,(0,b.jsx)(w,{icon:p.Wrench,label:x("navigation.tools"),href:"/tools",active:"/tools"===z}),f.skills?(0,b.jsx)(w,{icon:q.Puzzle,label:x("navigation.skills"),href:"/skills",active:"/skills"===z}):null,(0,b.jsx)(w,{icon:r.Settings,label:x("navigation.settings"),href:"/settings",active:"/settings"===z})]})}),(0,b.jsx)(g.SidebarContent,{children:G?(0,b.jsxs)("div",{className:["flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out [&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none",H?"opacity-100":"opacity-0"].join(" "),children:[(0,b.jsx)(_,{label:x("sidebar.features")}),(0,b.jsx)(t.ScrollArea,{className:"min-h-0 flex-1",children:ad.map(({repoPath:a,repoName:c,featureCount:d,statusGroups:e})=>(0,b.jsx)($,{repoName:c,featureCount:d,onAddFeature:u?()=>u(a):void 0,children:e.map(({statusKey:a,label:c,items:d})=>(0,b.jsx)(W,{label:c,count:d.length,children:d.map(a=>(0,b.jsx)(Q,{name:a.name,status:a.status,startedAt:a.startedAt,duration:a.duration,agentType:a.agentType,modelId:a.modelId,onClick:h?()=>h(a.featureId):void 0},a.featureId))},a))},a))})]}):null}),(0,b.jsx)(g.SidebarFooter,{className:"border-t p-2",children:(0,b.jsx)(g.SidebarMenu,{children:(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsx)("div",{className:"flex items-center gap-1",children:(0,b.jsxs)(C.TooltipProvider,{children:[(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:a=>{let b="system"===X?"dark"===P?"light":"dark":"dark"===X?"light":"dark";("dark"!==("system"===X?P:X)?Z.play():ab.play(),"startViewTransition"in document)?(document.documentElement.style.setProperty("--x",`${a.clientX}px`),document.documentElement.style.setProperty("--y",`${a.clientY}px`),document.startViewTransition(()=>{Y(b)})):Y(b)},"aria-label":"dark"===P?x("sidebar.switchToLight"):x("sidebar.switchToDark"),children:[(0,b.jsx)(k,{className:"h-4 w-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"}),(0,b.jsx)(j,{className:"absolute h-4 w-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"})]})}),(0,b.jsx)(C.TooltipContent,{side:"top",children:"dark"===P?x("sidebar.switchToLight"):x("sidebar.switchToDark")})]}),!F&&(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{ac.play(),K()},"aria-label":J?x("sidebar.muteSounds"):x("sidebar.unmuteSounds"),children:J?(0,b.jsx)(l,{className:"h-4 w-4"}):(0,b.jsx)(m,{className:"h-4 w-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"top",children:J?x("sidebar.muteSounds"):x("sidebar.unmuteSounds")})]}),!F&&(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{ac.play(),O()},"aria-label":L?"Disable animations":"Enable animations",children:L?(0,b.jsx)(n.Zap,{className:"h-4 w-4"}):(0,b.jsx)(o,{className:"h-4 w-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"top",children:L?"Disable animations":"Enable animations"})]})]})})})})}),(0,b.jsx)(g.SidebarRail,{})]})}a.i(21434);var ac=a.i(34379),ad=a.i(12882),ae=a.i(2807),af=a.i(34644);let ag=(0,h.default)("grip-vertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);var ah=a.i(73068);let ai=(0,h.default)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]);var aj=a.i(61544),ak=a.i(5555),al=a.i(33419),am=a.i(48265);let an="shep-global-chat";function ao(){try{let a=localStorage.getItem(an);if(!a)return{pos:null,size:null};let b=JSON.parse(a),c=b.size??null;return c&&(c.w<360||c.h<300)&&(c={w:Math.max(360,c.w),h:Math.max(300,c.h)}),{pos:b.pos??null,size:c}}catch{return{pos:null,size:null}}}function ap(){let{t:a}=(0,e.useTranslation)("web"),[d,f]=(0,c.useState)(!1),[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(!1),l=(0,al.useTurnStatus)("global"),{swapPosition:m}=(0,am.useFabLayout)(),{state:n}=(0,g.useSidebar)(),[o,p]=(0,c.useState)(()=>ao().pos),[q,r]=(0,c.useState)(()=>ao().size),s=(0,c.useCallback)(a=>{p(b=>"function"==typeof a?a(b):a)},[]),t=(0,c.useCallback)(a=>{r(b=>"function"==typeof a?a(b):a)},[]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useCallback)(()=>{f(a=>(a||i(!0),!a))},[]),A=(0,c.useRef)({pos:null,size:null}),B=(0,c.useCallback)(()=>{d||(f(!0),i(!0)),k(a=>(a?(s(A.current.pos),t(A.current.size)):A.current={pos:o,size:q},!a))},[d,o,q,s,t]);(0,c.useEffect)(()=>{let a=a=>{(a.metaKey||a.ctrlKey)&&a.shiftKey&&("k"===a.key||"K"===a.key)&&(a.preventDefault(),j&&k(!1),x(),requestAnimationFrame(()=>{setTimeout(()=>{let a=u.current?.querySelector("textarea");a?.focus()},100)})),(a.metaKey||a.ctrlKey)&&a.shiftKey&&("m"===a.key||"M"===a.key)&&(a.preventDefault(),B())};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[x,B,j]),(0,c.useEffect)(()=>{let a=setTimeout(()=>(function(a,b){try{localStorage.setItem(an,JSON.stringify({pos:a,size:b}))}catch{}})(o,q),300);return()=>clearTimeout(a)},[o,q]);let C=(0,c.useCallback)((a,b,c)=>({x:Math.max(-c+100,Math.min(a,window.innerWidth-100)),y:Math.max(0,Math.min(b,window.innerHeight-48))}),[]),D=(0,c.useCallback)(a=>{a.preventDefault();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=o?.x??c.left,e=o?.y??c.top;v.current={startX:a.clientX,startY:a.clientY,startPosX:d,startPosY:e};let f=q?.w??c.width,g=a=>{if(!v.current)return;let b=a.clientX-v.current.startX,c=a.clientY-v.current.startY;s(C(v.current.startPosX+b,v.current.startPosY+c,f))},h=()=>{v.current=null,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",g),document.addEventListener("mouseup",h)},[o,q,s,C]),E=(0,c.useCallback)(a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=q?.w??c.width,e=q?.h??c.height,f=a.clientX,g=a.clientY,h=o?.y??c.top;w.current={startX:f,startY:g,startW:d,startH:e},o||s({x:c.left,y:c.top});let i=a=>{if(!w.current)return;let b=a.clientX-f,i=a.clientY-g,j=Math.max(360,d+b),k=Math.max(300,e-i),l=Math.max(0,h+i);t({w:j,h:k}),s(a=>C(a?.x??c.left,l,j))},j=()=>{w.current=null,document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",j)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",j)},[q,o,s,t,C]),F=(0,c.useCallback)(()=>{f(!1),k(!1)},[]),G=j?{}:o?{position:"fixed",left:o.x,top:o.y,width:q?.w??520,height:q?.h??"70vh"}:{width:q?.w??520,height:q?.h??"70vh"};return(0,b.jsxs)(b.Fragment,{children:[h?(0,b.jsxs)("div",{ref:u,className:(0,z.cn)(j?"bg-background fixed inset-0 z-[60] flex flex-col overflow-hidden dark:bg-neutral-900":(0,z.cn)(!o&&(m?"fixed start-8 bottom-24":"fixed end-8 bottom-24"),"z-[60] flex flex-col overflow-hidden rounded-lg","border-border/60 border dark:border-white/10","bg-background dark:bg-neutral-900","shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]"),"transition-opacity duration-300 ease-out",d?"pointer-events-auto opacity-100":"pointer-events-none opacity-0"),style:G,children:[j?null:(0,b.jsx)("div",{className:"h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent"}),j?null:(0,b.jsx)("div",{onMouseDown:E,className:"absolute end-0 top-0 z-10 h-4 w-4 cursor-ne-resize"}),(0,b.jsxs)("div",{onMouseDown:j?void 0:D,className:(0,z.cn)("relative flex h-11 shrink-0 items-center gap-2.5 border-b border-black/[0.06] px-3.5 dark:border-white/[0.06]",!j&&"cursor-grab active:cursor-grabbing"),children:[(0,b.jsx)("div",{className:"from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent"}),j?null:(0,b.jsx)(ag,{className:"text-foreground/15 relative h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("div",{className:"relative flex h-5 w-5 items-center justify-center",children:(0,b.jsx)(af.Bot,{className:"text-foreground/50 h-4 w-4"})}),(0,b.jsxs)("div",{className:"relative flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"text-foreground/90 text-base font-bold tracking-tight",children:"Shep"}),(0,b.jsx)("span",{className:"text-foreground/30 text-xs font-medium tracking-widest uppercase",children:"global"})]}),(0,b.jsxs)("div",{className:"relative ms-auto flex items-center gap-0.5",children:[(0,b.jsx)("button",{type:"button",onClick:B,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:j?"Restore (⌘⇧M)":"Maximize (⌘⇧M)",children:j?(0,b.jsx)(ai,{className:"h-3.5 w-3.5"}):(0,b.jsx)(ah.Maximize2,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("button",{type:"button",onClick:F,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:"Close (⌘⇧K)",children:(0,b.jsx)(ae.X,{className:"h-3.5 w-3.5"})})]})]}),(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,b.jsx)(aj.ChatTab,{featureId:"global"})}),j?null:(0,b.jsx)("div",{onMouseDown:a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=a.clientX,e=a.clientY,f=q?.w??c.width,g=q?.h??c.height;o||s({x:c.left,y:c.top});let h=a=>{let b=window.innerHeight-(o?.y??c.top);t({w:Math.max(360,f+(a.clientX-d)),h:Math.max(300,Math.min(g+(a.clientY-e),b))})},i=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",i)};document.addEventListener("mousemove",h),document.addEventListener("mouseup",i)},className:"absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize"})]}):null,(0,b.jsxs)(aq,{swapPosition:m,sidebarState:n,isMaximized:j,children:[(0,b.jsxs)(y.Button,{size:"icon",onClick:x,className:(0,z.cn)("relative h-14 w-14 rounded-full shadow-lg","transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95",d?"bg-violet-600 text-white hover:bg-violet-500":"bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400",!d&&"processing"===l&&"chat-fab-spinning",!d&&"unread"===l&&"chat-fab-glow-unread",!d&&"awaiting_input"===l&&"chat-fab-glow-awaiting"),children:[(0,b.jsx)(ad.MessageSquare,{className:(0,z.cn)("absolute h-7 w-7 stroke-[2.5] transition-all duration-200",d?"scale-0 rotate-90 opacity-0":"scale-100 rotate-0 opacity-100")}),(0,b.jsx)(ae.X,{className:(0,z.cn)("absolute h-6 w-6 stroke-[2.5] transition-all duration-200",d?"scale-100 rotate-0 opacity-100":"scale-0 -rotate-90 opacity-0")}),!d&&(0,b.jsx)(ak.ChatDotIndicator,{status:l,className:"end-0 top-0"})]}),(0,b.jsx)("div",{className:"pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 opacity-0 transition-all duration-200 group-hover/fab:translate-y-0 group-hover/fab:opacity-100",children:(0,b.jsxs)("div",{className:"bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg",children:[(0,b.jsx)("p",{className:"text-background text-xs font-medium whitespace-nowrap",children:a("chat.shepChat")}),(0,b.jsxs)("p",{className:"text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]",children:[(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⌘"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⇧"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"K"})]})]})})]})]})}function aq({swapPosition:a,sidebarState:c,isMaximized:d,children:f}){let{i18n:g}=(0,e.useTranslation)("web"),h="rtl"===g.dir();if(!a)return(0,b.jsx)("div",{className:(0,z.cn)("group/fab fixed end-8 bottom-6 z-30",d&&"hidden"),children:f});let i="expanded"===c?"calc(var(--sidebar-width) + 32px)":"calc(var(--sidebar-width-icon) + 32px)";return(0,b.jsx)("div",{className:(0,z.cn)("group/fab fixed bottom-6 z-30",d&&"hidden"),style:h?{right:i,transition:"right 200ms ease-in-out"}:{left:i,transition:"left 200ms ease-in-out"},children:f})}var ar=a.i(1377),as=a.i(45670),at=a.i(41305),au=a.i(90920),av=a.i(584);let aw=/^(?:https:\/\/github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|git@github\.com:([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+))$/;function ax({onSubmit:a,loading:d=!1}){let[e,f]=(0,c.useState)(""),[g,h]=(0,c.useState)("");function i(){let b=e.trim();b?aw.test(b.trim())?(h(""),a(b)):h("Enter a valid GitHub URL (e.g. owner/repo or https://github.com/owner/repo)"):h("Please enter a GitHub URL")}return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(av.Label,{htmlFor:"github-url-input",children:"GitHub URL"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(au.Input,{id:"github-url-input",placeholder:"owner/repo or https://github.com/owner/repo",value:e,onChange:a=>{f(a.target.value),g&&h("")},onKeyDown:function(a){"Enter"===a.key&&(a.preventDefault(),i())},disabled:d,"aria-invalid":!!g,"aria-describedby":g?"github-url-error":void 0}),(0,b.jsx)(y.Button,{onClick:i,disabled:d||!e.trim(),size:"sm",children:d?(0,b.jsx)(H.Loader2,{className:"h-4 w-4 animate-spin"}):"Import"})]}),g?(0,b.jsx)("p",{id:"github-url-error",className:"text-destructive text-sm",role:"alert",children:g}):null]})}let ay=(0,h.default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var az=a.i(84494),aA=a.i(31378),aB=a.i(72980),aC=a.i(58339),aD=a.i(55837),aE=a.i(59175),aF=a.i(25674);let aG=(0,aF.createServerReference)("4006eeb8ddc83bea53598447ecbf340f72dd2b2ebb",aF.callServer,void 0,aF.findSourceMapURL,"listGitHubRepositories"),aH=(0,aF.createServerReference)("0012f06d38b91b2175fbacc4bf48de652a053999a4",aF.callServer,void 0,aF.findSourceMapURL,"listGitHubOrganizations"),aI="__personal__";function aJ({onSelect:a,loading:d=!1,fetchRepos:e=aG,fetchOrgs:f=aH}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(!0),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(aI),s=(0,c.useRef)(null);(0,c.useEffect)(()=>{!async function(){try{let a=await f();a.orgs&&j(a.orgs)}catch{}}()},[f]);let t=(0,c.useCallback)(async(a,b)=>{l(!0),n("");try{let c={};a&&(c.search=a),b&&b!==aI&&(c.owner=b);let d=await e(Object.keys(c).length>0?c:void 0);d.error?(n(d.error),h([])):h(d.repos??[])}catch{n("Failed to fetch repositories"),h([])}finally{l(!1)}},[e]);return((0,c.useEffect)(()=>{t(o||void 0,q)},[t,q]),m&&!k)?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-center","data-testid":"repo-browser-error",children:[(0,b.jsx)(aB.AlertCircle,{className:"text-destructive h-8 w-8"}),(0,b.jsx)("p",{className:"text-destructive text-sm",children:m})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[i.length>0?(0,b.jsxs)(aE.Select,{value:q,onValueChange:function(a){r(a),p("")},disabled:d,children:[(0,b.jsx)(aE.SelectTrigger,{"aria-label":"Select owner",children:(0,b.jsx)(aE.SelectValue,{placeholder:"Select owner"})}),(0,b.jsxs)(aE.SelectContent,{children:[(0,b.jsx)(aE.SelectItem,{value:aI,children:"My repositories"}),i.map(a=>(0,b.jsx)(aE.SelectItem,{value:a.login,children:a.login},a.login))]})]}):null,(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(aA.Search,{className:"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2"}),(0,b.jsx)(au.Input,{placeholder:"Search repositories...",value:o,onChange:a=>{var b;p(b=a.target.value),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t(b||void 0,q)},300)},className:"ps-9",disabled:d,"aria-label":"Search repositories"})]}),(0,b.jsx)("div",{className:"max-h-64 overflow-x-hidden overflow-y-auto rounded-md border",role:"listbox","aria-label":"GitHub repositories",children:k?(0,b.jsx)("div",{className:"flex flex-col gap-2 p-3","data-testid":"repo-browser-loading",children:Array.from({length:5}).map((a,c)=>(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)(aD.Skeleton,{className:"h-4 w-48"}),(0,b.jsx)(aD.Skeleton,{className:"h-3 w-72"})]},`skeleton-${String(c)}`))}):0===g.length?(0,b.jsx)("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"repo-browser-empty",children:"No repositories found"}):g.map(c=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":!1,className:"hover:bg-accent flex w-full items-start gap-2 border-b px-3 py-2.5 text-start last:border-b-0 disabled:opacity-50",onClick:()=>a(c.nameWithOwner),disabled:d,children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:c.nameWithOwner}),(0,b.jsx)(aC.Badge,{variant:c.isPrivate?"secondary":"outline",className:"shrink-0 text-xs",children:c.isPrivate?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(ay,{className:"me-1 h-3 w-3"}),"Private"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(az.Globe,{className:"me-1 h-3 w-3"}),"Public"]})})]}),c.description?(0,b.jsx)("p",{className:"text-muted-foreground mt-0.5 truncate text-xs",children:c.description}):null]}),d?(0,b.jsx)(H.Loader2,{className:"mt-0.5 h-4 w-4 shrink-0 animate-spin"}):null]},c.nameWithOwner))})]})}let aK=(0,aF.createServerReference)("40a6c4468fe3a1c35435541a6d1a9ded40b221d698",aF.callServer,void 0,aF.findSourceMapURL,"importGitHubRepository");function aL({open:a,onOpenChange:d,onImportComplete:e}){let[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)("");async function j(a){g(!0),i("");try{let b=await aK({url:a});b.error?i(b.error):b.repository&&(e(b.repository),d(!1))}catch{i("An unexpected error occurred")}finally{g(!1)}}return(0,b.jsx)(as.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(as.DialogContent,{className:"overflow-hidden sm:max-w-lg",children:[(0,b.jsxs)(as.DialogHeader,{children:[(0,b.jsx)(as.DialogTitle,{children:"Import from GitHub"}),(0,b.jsx)(as.DialogDescription,{children:"Clone a GitHub repository and add it to Shep."})]}),(0,b.jsxs)(at.Tabs,{defaultValue:"url",className:"min-w-0",children:[(0,b.jsxs)(at.TabsList,{className:"grid w-full grid-cols-2",children:[(0,b.jsx)(at.TabsTrigger,{value:"url",children:"URL"}),(0,b.jsx)(at.TabsTrigger,{value:"browse",children:"Browse"})]}),(0,b.jsx)(at.TabsContent,{value:"url",className:"mt-4",children:(0,b.jsx)(ax,{onSubmit:j,loading:f})}),(0,b.jsx)(at.TabsContent,{value:"browse",className:"mt-4",children:(0,b.jsx)(aJ,{onSelect:j,loading:f})})]}),h?(0,b.jsx)("p",{className:"text-destructive text-sm",role:"alert",children:h}):null]})})}var aM=a.i(84871),aN=a.i(96213),aO=a.i(1356),aP=a.i(52313),aQ=a.i(46847);let aR={[aQ.NotificationSeverity.Success]:"success",[aQ.NotificationSeverity.Error]:"error",[aQ.NotificationSeverity.Warning]:"warning",[aQ.NotificationSeverity.Info]:"info"},aS={[aQ.NotificationSeverity.Success]:"notification-success",[aQ.NotificationSeverity.Error]:"notification-error",[aQ.NotificationSeverity.Warning]:"notification-warning",[aQ.NotificationSeverity.Info]:"notification-info"};var aT=a.i(21333);function aU({children:a,sidebarOpen:e}){let f=(0,d.useRouter)(),{guardedNavigate:h}=(0,aN.useDrawerCloseGuard)(),i=(0,aT.useFeatureFlags)();!function(){let a=(0,d.useRouter)(),{events:b}=(0,aM.useAgentEventsContext)(),e=(0,v.useSoundAction)("notification-success"),f=(0,v.useSoundAction)("notification-error"),g=(0,v.useSoundAction)("notification-warning"),h=(0,v.useSoundAction)("notification-info"),i=(0,c.useMemo)(()=>({"notification-success":e,"notification-error":f,"notification-warning":g,"notification-info":h}),[e,f,g,h]),j=(0,c.useRef)(0);(0,c.useEffect)(()=>{if(b.length<=j.current)return;let c=b.slice(j.current);for(let d of(j.current=b.length,c)){if(d.eventType!==aQ.NotificationEventType.MergeReviewReady&&d.severity!==aQ.NotificationSeverity.Error&&d.severity!==aQ.NotificationSeverity.Warning&&d.severity!==aQ.NotificationSeverity.Success)continue;!function(a,b){let c=aR[a.severity]??"info",d=a.eventType===aQ.NotificationEventType.WaitingApproval||a.eventType===aQ.NotificationEventType.MergeReviewReady;aP.toast[c](a.featureName,{description:a.message,...d&&b&&{action:{label:"Review",onClick:()=>{b(`/feature/${a.featureId}`)}}}})}(d,b=>a.push(b));let b=aS[d.severity];i[b]?.play()}},[b,i,a])}();let{features:j}=(0,aO.useSidebarFeaturesContext)(),k=(0,c.useCallback)(a=>{h(()=>f.push(`/feature/${a}`))},[f,h]),l=(0,c.useCallback)(a=>{h(()=>f.push(`/create?repo=${encodeURIComponent(a)}`))},[f,h]),[m,n]=(0,c.useState)(!1),[o,p]=(0,c.useState)(!1),[q,r]=(0,c.useState)(!1),s=(0,c.useCallback)(async()=>{if(!m){if(i.reactFileManager)return void r(!0);n(!0);try{let a=await (0,ar.pickFolder)();a&&window.dispatchEvent(new CustomEvent("shep:add-repository",{detail:{path:a}}))}catch{r(!0)}finally{n(!1)}}},[m,i.reactFileManager]);(0,c.useEffect)(()=>{let a=()=>{s()};return window.addEventListener("shep:pick-folder",a),()=>window.removeEventListener("shep:pick-folder",a)},[s]),(0,c.useEffect)(()=>{let a=()=>p(!0);return window.addEventListener("shep:open-github-import",a),()=>window.removeEventListener("shep:open-github-import",a)},[]);let t=(0,c.useCallback)(a=>{a&&window.dispatchEvent(new CustomEvent("shep:add-repository",{detail:{path:a}})),r(!1)},[]),u=(0,c.useCallback)(a=>{a.path&&window.dispatchEvent(new CustomEvent("shep:add-repository",{detail:{path:a.path}}))},[]);return(0,b.jsxs)(g.SidebarProvider,{defaultOpen:e??!1,children:[(0,b.jsx)(ab,{features:j,featureFlags:i,onFeatureClick:k,onAddFeature:l}),(0,b.jsx)(g.SidebarInset,{children:(0,b.jsxs)("div",{className:"relative h-full",children:[(0,b.jsx)("main",{className:"h-full",children:a}),(0,b.jsx)(ap,{}),i.githubImport?(0,b.jsx)(aL,{open:o,onOpenChange:p,onImportComplete:u}):null]})}),(0,b.jsx)(ac.ReactFileManagerDialog,{open:q,onOpenChange:a=>{a||r(!1)},onSelect:t})]})}function aV({children:a}){return(0,b.jsx)(al.TurnStatusesProvider,{children:a})}function aW({children:a,sidebarOpen:c}){let{i18n:d}=(0,e.useTranslation)(),g=d.dir();return(0,b.jsx)(f.Direction.Provider,{dir:g,children:(0,b.jsx)(aM.AgentEventsProvider,{children:(0,b.jsx)(aN.DrawerCloseGuardProvider,{children:(0,b.jsx)(aO.SidebarFeaturesProvider,{children:(0,b.jsx)(aV,{children:(0,b.jsx)(aU,{sidebarOpen:c,children:a})})})})})})}a.s(["AppShell",()=>aW],66560)},58313,a=>{"use strict";var b=a.i(12656),c=a.i(52313);let d=({...a})=>(0,b.jsx)(c.Toaster,{className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...a});a.s(["Toaster",()=>d])},41835,a=>{"use strict";var b=a.i(12656),c=a.i(99298),d=a.i(61123),e=a.i(25265),f=a.i(45806),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(31263),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(63656),m=a.i(50129);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(80535),r=a.i(96960);function s({children:a}){let[c]=(0,r.useState)(()=>new p({defaultOptions:{queries:{staleTime:1e3,refetchOnWindowFocus:!1}}}));return(0,b.jsx)(q.QueryClientProvider,{client:c,children:a})}a.s(["QueryProvider",()=>s],41835)},85827,a=>{"use strict";let b;var c=a.i(12656),d=a.i(96960);a.i(90370);var e=a.i(83436),f=a.i(67750),g=a.i(29646),h=a.i(37465),i=a.i(51193),j=a.i(55431),k=a.i(60280),l=a.i(40266),m=a.i(50784),n=a.i(28191),o=a.i(71363),p=a.i(53493),q=a.i(22307),r=a.i(44225),s=a.i(62305),t=a.i(51943),u=a.i(88158),v=a.i(39711),w=a.i(32456);let x=((b=f.default.createInstance()).use(g.initReactI18next).init({lng:"en",fallbackLng:"en",defaultNS:"common",ns:["common","web"],resources:{en:{common:h.default,web:i.default},ru:{common:j.default,web:k.default},pt:{common:l.default,web:m.default},es:{common:n.default,web:o.default},ar:{common:p.default,web:q.default},he:{common:r.default,web:s.default},fr:{common:t.default,web:u.default},de:{common:v.default,web:w.default}},interpolation:{escapeValue:!1},react:{useSuspense:!1}}),b),y={ar:{family:"Noto Sans Arabic",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic:wght@400;500;600;700&display=swap"},he:{family:"Noto Sans Hebrew",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Hebrew:wght@400;500;600;700&display=swap"}};function z(a){let b=y[a];if(document.documentElement.classList.remove("font-rtl-arabic","font-rtl-hebrew"),!b)return void document.documentElement.style.removeProperty("--font-rtl");document.documentElement.style.setProperty("--font-rtl",`"${b.family}"`),document.documentElement.classList.add("ar"===a?"font-rtl-arabic":"font-rtl-hebrew");let c=`rtl-font-${a}`;if(!document.getElementById(c)){let a=document.createElement("link");a.id=c,a.rel="stylesheet",a.href=b.cssUrl,document.head.appendChild(a)}}function A({initialLanguage:a,children:b}){return(0,d.useEffect)(()=>{x.language!==a&&x.changeLanguage(a),z(a)},[a]),(0,d.useEffect)(()=>{function a(a){z(a)}return x.on("languageChanged",a),()=>{x.off("languageChanged",a)}},[]),(0,c.jsx)(e.I18nextProvider,{i18n:x,children:b})}a.s(["I18nProvider",()=>A],85827)}];
1
+ module.exports=[66560,a=>{"use strict";var b=a.i(12656),c=a.i(96960),d=a.i(69845);a.i(90370);var e=a.i(24640),f=a.i(66421),g=a.i(55003),h=a.i(25700);let i=(0,h.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]),j=(0,h.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),k=(0,h.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),l=(0,h.default)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]),m=(0,h.default)("volume-off",[["path",{d:"M16 9a5 5 0 0 1 .95 2.293",key:"1fgyg8"}],["path",{d:"M19.364 5.636a9 9 0 0 1 1.889 9.96",key:"l3zxae"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"m7 7-.587.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298V11",key:"1gbwow"}],["path",{d:"M9.828 4.172A.686.686 0 0 1 11 4.657v.686",key:"s2je0y"}]]);var n=a.i(3942);let o=(0,h.default)("zap-off",[["path",{d:"M10.513 4.856 13.12 2.17a.5.5 0 0 1 .86.46l-1.377 4.317",key:"193nxd"}],["path",{d:"M15.656 10H20a1 1 0 0 1 .78 1.63l-1.72 1.773",key:"27a7lr"}],["path",{d:"M16.273 16.273 10.88 21.83a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14H4a1 1 0 0 1-.78-1.63l4.507-4.643",key:"1e0qe9"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var p=a.i(17300),q=a.i(67424),r=a.i(32703);let s=(0,h.default)("table-properties",[["path",{d:"M15 3v18",key:"14nvp0"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M21 9H3",key:"1338ky"}],["path",{d:"M21 15H3",key:"9uk58r"}]]);var t=a.i(59706),u=a.i(56109),v=a.i(19884);function w({icon:a,label:c,href:d,active:e=!1}){let f=(0,v.useSoundAction)("navigate");return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"sidebar-nav-item",children:(0,b.jsx)(g.SidebarMenuButton,{asChild:!0,isActive:e,tooltip:c,children:(0,b.jsxs)(u.default,{href:d,onClick:()=>f.play(),children:[(0,b.jsx)(a,{}),(0,b.jsx)("span",{children:c})]})})})}var x=a.i(81589),x=x,y=a.i(18948),z=a.i(85536);function A({className:a}){let{toggleSidebar:c,open:d}=(0,g.useSidebar)(),e=(0,v.useSoundAction)("expand"),f=(0,v.useSoundAction)("collapse");return(0,b.jsx)("div",{className:(0,z.cn)("flex",a),children:(0,b.jsx)(y.Button,{"data-testid":"sidebar-collapse-toggle",variant:"ghost",size:"icon",className:"size-7 cursor-pointer group-data-[collapsible=icon]:size-8!",onClick:()=>{d?f.play():e.play(),c()},"aria-label":d?"Collapse sidebar":"Expand sidebar",children:(0,b.jsx)(x.default,{className:"size-4"})})})}function B({className:a,size:c=24,variant:d="default"}){return(0,b.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 194 200",width:c,height:c,className:(0,z.cn)("shrink-0","dev"===d&&"text-cyan-400",a),"aria-hidden":"true",children:(0,b.jsx)("g",{transform:"matrix(1, 0, 0, 1, -111, -208)",children:(0,b.jsx)("path",{d:"M 198 406 C196,405 194,403 193,401 C192,399 191,398 186,398 C178,397 174,394 170,387 L 168 381 L 163 381 C156,381 150,377 147,370 C144,364 143,359 146,353 C148,348 148,347 147,347 C145,347 140,343 138,339 C133,329 139,314 149,311 L 152 311 L 149 307 C145,302 145,294 149,290 C151,288 152,287 151,286 C150,283 152,278 155,276 C156,275 159,274 162,273 C165,273 166,273 168,276 C171,278 171,280 172,287 C173,294 174,297 177,304 C180,309 182,314 183,316 C186,327 193,336 199,339 C204,342 211,342 216,340 C222,336 231,324 234,314 C235,312 237,307 239,302 C240,298 242,292 242,289 C243,281 245,278 247,275 C250,273 251,273 255,273 C261,274 264,278 264,282 C264,284 264,286 263,287 C262,287 263,288 265,290 C272,295 272,303 267,309 L 265 312 L 269 314 C276,317 279,323 279,332 C279,339 277,343 272,347 C268,351 268,351 269,354 C272,358 271,366 269,371 C266,376 259,381 254,381 C252,381 251,382 248,386 C242,395 234,400 227,399 C224,398 223,398 221,401 C220,403 217,405 216,406 C211,409 203,409 198,406 ZM 136 271 C123,267 115,262 113,256 C111,251 111,251 113,251 C118,254 124,254 132,252 C136,252 141,251 144,251 C149,251 157,253 162,256 C166,258 166,258 166,264 L 166 269 L 160 270 C149,272 142,272 136,271 ZM 264 271 C263,271 259,270 256,270 L 250 270 L 250 265 C249,259 250,257 259,254 C265,251 272,251 289,252 C297,253 299,253 302,252 C305,250 305,250 305,252 C305,255 301,262 297,264 C289,270 272,273 264,271 ZM 162 249 C160,247 159,245 159,242 C159,236 164,230 169,230 C170,230 171,228 171,225 C171,216 176,210 184,209 C189,209 195,211 195,213 C195,214 196,213 197,212 C201,209 204,208 208,208 C212,208 217,210 219,212 C220,214 220,213 223,211 C226,208 234,208 239,211 C243,214 246,221 246,226 C245,230 245,230 247,230 C253,230 258,238 257,244 C256,249 251,252 245,252 C241,252 237,251 234,248 C232,247 232,247 228,249 C225,251 222,252 220,252 C216,252 212,250 210,247 C209,246 209,246 206,248 C201,252 192,253 185,248 C183,247 183,247 178,249 C172,253 166,253 162,249 ZM 116 249 C112,248 114,247 119,247 C122,247 127,246 130,245 C138,242 146,242 152,245 L 158 248 L 148 247 C142,247 138,247 133,248 C128,250 120,250 116,249 ZM 284 248 C281,247 277,247 270,247 L 260 248 L 263 246 C269,243 276,242 284,245 C289,246 295,247 298,247 C303,247 304,247 303,248 C301,250 289,250 284,248 Z",fill:"currentColor"})})})}var C=a.i(82934);function D({version:a,branch:d,commitHash:f,isDev:g=!1,packageName:h="@shepai/cli",description:i,instancePath:j}){let{t:k}=(0,e.useTranslation)("web"),l=f?.slice(0,7),{latest:m,updateAvailable:n}=function(a){let[b,d]=(0,c.useState)(null),[e,f]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch("/api/npm-version");if(!b.ok)return;let c=await b.json();!a&&c.latest&&d(c.latest)}catch{}finally{a||f(!1)}}(),()=>{a=!0}},[]);let g=null!==b&&function(a,b){let c=a=>a.split("-")[0].split(".").map(Number),d=c(a),e=c(b);for(let a=0;a<3;a++){let b=d[a]??0,c=e[a]??0;if(b>c)return 1;if(b<c)return -1}return 0}(b,a)>0;return{latest:b,updateAvailable:g,loading:e}}(a),{status:o,startUpgrade:p}=function(){let[a,b]=(0,c.useState)("idle"),[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(),h=(0,c.useRef)(null),i=(0,c.useRef)(!1),j=(0,c.useCallback)(()=>{if("upgrading"===a||"restarting"===a)return;b("upgrading"),e(""),g(void 0),i.current=!1;let c=new AbortController;return h.current=c,fetch("/api/cli-upgrade",{method:"POST",signal:c.signal}).then(async a=>{if(!a.ok||!a.body){b("error"),g(`Server returned ${a.status}`);return}let c=a.body.getReader(),d=new TextDecoder,f="";for(;;){let{done:a,value:h}=await c.read();if(a)break;let j=(f+=d.decode(h,{stream:!0})).split("\n");for(let a of(f=j.pop()??"",j)){if(a.startsWith("event: restarting")){i.current=!0,b("restarting"),function(a,b){let c=Date.now()+3e4,d=()=>{Date.now()>c||fetch("/api/version",{method:"GET",cache:"no-store"}).then(a=>{a.ok?window.location.reload():setTimeout(d,500)}).catch(()=>{setTimeout(d,500)})};setTimeout(d,500)}(0,0);continue}if(!a.startsWith("event: done")&&a.startsWith("data: ")){let c=a.slice(6);try{let a=JSON.parse(c);"upgraded"===a.status?b("upgraded"):"up-to-date"===a.status?b("up-to-date"):"error"===a.status&&(b("error"),g(a.errorMessage))}catch{e(a=>a+c)}}}}}).catch(a=>{i.current||a instanceof DOMException&&"AbortError"===a.name||(b("error"),g(a instanceof Error?a.message:"Upgrade failed"))}),()=>{c.abort()}},[a]);return{status:a,output:d,errorMessage:f,startUpgrade:j}}(),q=g?`${a}-dev`:`v${a}`,r="upgrading"===o,s="restarting"===o,t="upgraded"===o;return(0,b.jsx)(C.TooltipProvider,{delayDuration:200,children:(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)("span",{className:"text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors","data-testid":"version-label",children:[q,!n||t||s?null:(0,b.jsx)("span",{className:"absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400","data-testid":"update-dot"})]})}),(0,b.jsxs)(C.TooltipContent,{side:"right",className:"max-w-[280px] space-y-1 p-3 text-start",children:[(0,b.jsx)("div",{className:"mb-1.5 text-xs font-semibold",children:h}),i?(0,b.jsx)("div",{className:"text-[10px] leading-snug opacity-70",children:i}):null,(0,b.jsxs)("div",{className:"border-t border-white/10 pt-1.5",children:[(0,b.jsx)(E,{label:k("versionBadge.version"),value:q}),g&&d?(0,b.jsx)(E,{label:k("versionBadge.branch"),value:d}):null,g&&l?(0,b.jsx)(E,{label:k("versionBadge.commit"),value:l,mono:!0}):null,g&&j?(0,b.jsx)(E,{label:k("versionBadge.path"),value:j,mono:!0}):null,m?(0,b.jsx)(E,{label:"Latest",value:`v${m}`,highlight:n}):null]}),s?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-restarting",children:"Restarting..."})}):t?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-400","data-testid":"upgrade-success",children:"Upgraded successfully"})}):"error"===o?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("span",{className:"text-[10px] font-medium text-red-400","data-testid":"upgrade-error",children:"Upgrade failed"})}):n?(0,b.jsx)("div",{className:"border-t border-white/10 pt-1.5",children:(0,b.jsx)("button",{type:"button",onClick:p,disabled:r||s,className:"inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50","data-testid":"upgrade-button",children:r?"Upgrading...":s?"Restarting...":`Upgrade to v${m}`})}):null]})]})})}function E({label:a,value:c,highlight:d,mono:e}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 text-[10px]",children:[(0,b.jsx)("span",{className:"opacity-60",children:a}),(0,b.jsx)("span",{className:[d?"font-medium text-emerald-400":"",e||!d?"font-mono":""].filter(Boolean).join(" "),children:c})]})}function F({startedAt:a}){let[d,e]=(0,c.useState)(()=>Date.now()-a);return(0,c.useEffect)(()=>{let b=setInterval(()=>{(0,c.startTransition)(()=>e(Date.now()-a))},1e3);return()=>clearInterval(b)},[a]),(0,b.jsx)("span",{"data-testid":"elapsed-time",className:"tabular-nums",children:function(a){let b=Math.floor(a/1e3);if(b>=3600){let a=Math.floor(b/3600);return`${a}h`}let c=Math.floor(b/60);return`${String(c).padStart(2,"0")}:${String(b%60).padStart(2,"0")}`}(d)})}var G=a.i(82697),H=a.i(88064),I=a.i(67273),J=a.i(93866),K=a.i(56926),L=a.i(46168);let M={"action-needed":{icon:G.CircleAlert,iconClass:"text-amber-500",bgClass:"bg-amber-500/10",labelKey:"sidebar.statusActionNeeded"},"in-progress":{icon:H.Loader2,iconClass:"text-blue-500 animate-spin",bgClass:"bg-blue-500/10",labelKey:"sidebar.statusInProgress"},pending:{icon:L.Clock,iconClass:"text-slate-400",bgClass:"bg-slate-400/10",labelKey:"sidebar.statusPending"},blocked:{icon:J.Ban,iconClass:"text-gray-400",bgClass:"bg-gray-400/10",labelKey:"sidebar.statusBlocked"},error:{icon:K.CircleX,iconClass:"text-red-500",bgClass:"bg-red-500/10",labelKey:"sidebar.statusError"},done:{icon:I.CircleCheck,iconClass:"text-emerald-500",bgClass:"bg-emerald-500/10",labelKey:"sidebar.statusDone"}},N=["action-needed","error","blocked","in-progress","pending","done"];var O=a.i(17606),P=a.i(83852);function Q({name:a,status:c,startedAt:d,duration:e,agentType:f,modelId:h,onClick:i}){let{icon:j,iconClass:k}=M[c],l=f?(0,O.getAgentTypeIcon)(f):null;return(0,b.jsx)(g.SidebarMenuItem,{"data-testid":"feature-list-item",children:(0,b.jsxs)(g.SidebarMenuButton,{size:"sm",onClick:i,tooltip:a,className:"cursor-pointer",children:[(0,b.jsx)(j,{className:k}),(0,b.jsx)("span",{className:"flex-1 truncate font-medium",children:a}),"in-progress"===c&&null!=d?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:(0,b.jsx)(F,{startedAt:d})}):null,"done"===c&&e?(0,b.jsx)("span",{"data-testid":"feature-list-item-meta",className:"text-muted-foreground ml-auto text-xs tabular-nums",children:e}):null,l?(0,b.jsx)(C.TooltipProvider,{children:(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"ml-auto shrink-0",children:(0,b.jsx)(l,{className:"h-3.5 w-3.5"})})}),(0,b.jsxs)(C.TooltipContent,{side:"right",children:[(0,b.jsx)("span",{className:"font-medium",children:O.agentTypeLabels[f]??f}),h?(0,b.jsxs)("span",{className:"ms-1 opacity-70",children:["· ",(0,P.getModelMeta)(h).displayName||h]}):null]})]})}):null]})})}var R=a.i(2103);let S="shep-animations-enabled",T="shep:animations-toggle",U="no-animations",V="shep-theme";function W({label:a,count:c,children:d}){return(0,b.jsxs)(g.SidebarGroup,{"data-testid":"feature-status-group",className:"px-2 py-1",children:[(0,b.jsxs)(g.SidebarGroupLabel,{className:"text-muted-foreground h-6 px-2 text-[0.65rem] font-semibold tracking-wider uppercase",children:[a,(0,b.jsx)("span",{"aria-label":`${c} items`,className:"bg-sidebar-accent text-sidebar-accent-foreground ms-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:c})]}),(0,b.jsx)(g.SidebarGroupContent,{children:(0,b.jsx)(g.SidebarMenu,{className:"gap-0.5",children:d})})]})}var X=a.i(71716),Y=a.i(73708),Z=a.i(67837);function $({repoName:a,featureCount:d,children:e,defaultOpen:f=!0,onAddFeature:g}){let[h,i]=(0,c.useState)(f);return(0,b.jsxs)("div",{"data-testid":"repo-group",className:"group/repo mb-1",children:[(0,b.jsxs)("div",{className:"flex items-center",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>i(!h),className:(0,z.cn)("text-sidebar-foreground hover:bg-sidebar-accent flex min-w-0 flex-1 items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs font-semibold","transition-colors duration-100"),"aria-expanded":h,children:[(0,b.jsx)(X.ChevronDown,{className:(0,z.cn)("text-muted-foreground h-3.5 w-3.5 shrink-0 transition-transform duration-200",!h&&"-rotate-90")}),(0,b.jsx)(Y.GitFork,{className:"text-muted-foreground h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a}),(0,b.jsx)("span",{"aria-label":`${d} features`,className:"bg-sidebar-accent text-sidebar-accent-foreground ml-auto inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums",role:"img",children:d})]}),g?(0,b.jsx)("button",{type:"button","data-testid":"repo-add-feature",onClick:a=>{a.stopPropagation(),g()},className:(0,z.cn)("text-muted-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent mr-2 shrink-0 rounded-md p-1 opacity-0 transition-all duration-100 group-hover/repo:opacity-100","focus-visible:ring-ring focus-visible:opacity-100 focus-visible:ring-1 focus-visible:outline-none"),"aria-label":`Add feature to ${a}`,children:(0,b.jsx)(Z.Plus,{className:"h-3.5 w-3.5"})}):null]}),h?(0,b.jsx)("div",{className:"pl-2",children:e}):null]})}function _({label:a,className:c}){return(0,b.jsx)(g.SidebarGroup,{"data-testid":"sidebar-section-header",className:(0,z.cn)("px-2 py-1",c),children:(0,b.jsx)("div",{className:"text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium",children:(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a})})})}let aa={version:"unknown",packageName:"@shepai/cli",description:"Autonomous AI Native SDLC Platform",branch:"",commitHash:"",instancePath:"",isDev:!1};function ab({features:a,featureFlags:f,onFeatureClick:h,onAddFeature:u}){let{t:x,i18n:y}=(0,e.useTranslation)("web"),z=(0,d.usePathname)(),{state:E}=(0,g.useSidebar)(),F="collapsed"===E,{mounted:G,visible:H}=function(a,b){let[d,e]=(0,c.useState)(!a),[f,g]=(0,c.useState)(!a);return(0,c.useEffect)(()=>{if(!a){e(!0);let a=requestAnimationFrame(()=>g(!0));return()=>cancelAnimationFrame(a)}g(!1);let b=window.setTimeout(()=>e(!1),200);return()=>window.clearTimeout(b)},[a,200]),{mounted:d,visible:f}}(F,0),I=function(){let[a,b]=(0,c.useState)(aa);return(0,c.useEffect)(()=>{let a=!1;return async function(){try{let c=await fetch("/api/version");if(!c.ok)return;let d=await c.json();a||b(d)}catch{}}(),()=>{a=!0}},[]),a}(),{enabled:J,toggle:K}=(0,R.useSoundEnabled)(),{enabled:L,toggle:O}=function(){let[a,b]=(0,c.useState)(!0);(0,c.useEffect)(()=>{"false"===localStorage.getItem(S)&&(b(!1),document.body.classList.add(U));let a=a=>{let c=a.detail;b(c),document.body.classList.toggle(U,!c)};return window.addEventListener(T,a),()=>window.removeEventListener(T,a)},[]);let d=(0,c.useCallback)(()=>{let c=!a;localStorage.setItem(S,String(c)),b(c),document.body.classList.toggle(U,!c),window.dispatchEvent(new CustomEvent(T,{detail:c}))},[a]);return{enabled:a,toggle:d}}(),{resolvedTheme:P,theme:X,setTheme:Y}=function(){let[a,b]=(0,c.useState)("system"),[d,e]=(0,c.useState)("light"),f=(0,c.useCallback)(()=>"light",[]),g=(0,c.useCallback)(a=>"system"===a?f():a,[f]),h=(0,c.useCallback)(a=>{if("u"<typeof document)return;let b=document.documentElement;b.classList.remove("light","dark"),b.classList.add(a),e(a)},[]),i=(0,c.useCallback)(a=>{b(a),"u">typeof localStorage&&localStorage.setItem(V,a),h(g(a))},[g,h]);return(0,c.useEffect)(()=>{let a=localStorage.getItem(V)??"system";b(a),h(g(a))},[g,h]),(0,c.useEffect)(()=>{},[a,g,h]),{theme:a,resolvedTheme:d,setTheme:i}}(),Z=(0,v.useSoundAction)("toggle-on"),ab=(0,v.useSoundAction)("toggle-off"),ac=(0,v.useSoundAction)("navigate"),ad=(0,c.useMemo)(()=>{let b=new Map;for(let c of a){let a=c.repositoryPath,d=b.get(a);d||(d={repoName:c.repositoryName,features:[]},b.set(a,d)),d.features.push(c)}return Array.from(b.entries()).map(([a,{repoName:b,features:c}])=>({repoPath:a,repoName:b,featureCount:c.length,statusGroups:N.map(a=>({statusKey:a,label:x(M[a].labelKey),items:c.filter(b=>b.status===a)})).filter(a=>a.items.length>0)}))},[a,x]);return(0,b.jsxs)(g.Sidebar,{"data-testid":"app-sidebar","data-no-drawer-close":!0,collapsible:"icon",side:"rtl"===y.dir()?"right":"left",children:[(0,b.jsx)(g.SidebarHeader,{children:(0,b.jsxs)(g.SidebarMenu,{children:[(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsxs)("div",{className:"flex h-8 items-center group-data-[collapsible=icon]:justify-center",children:[G?(0,b.jsxs)("div",{className:["flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out",H?"opacity-100":"opacity-0"].join(" "),"aria-hidden":!H,children:[(0,b.jsx)(B,{className:"shrink-0",size:20,variant:I.isDev?"dev":"default"}),(0,b.jsx)("span",{className:"truncate text-sm font-semibold tracking-tight",children:"Shep"}),(0,b.jsx)(D,{version:I.version,branch:I.branch||void 0,commitHash:I.commitHash||void 0,isDev:I.isDev,packageName:I.packageName,description:I.description,instancePath:I.instancePath||void 0})]}):null,(0,b.jsx)(A,{className:"shrink-0 transition-all duration-200"})]})}),(0,b.jsx)(w,{icon:i,label:x("navigation.controlCenter"),href:"/",active:"/"===z}),f.inventory?(0,b.jsx)(w,{icon:s,label:x("navigation.inventory"),href:"/features",active:"/features"===z}):null,(0,b.jsx)(w,{icon:p.Wrench,label:x("navigation.tools"),href:"/tools",active:"/tools"===z}),f.skills?(0,b.jsx)(w,{icon:q.Puzzle,label:x("navigation.skills"),href:"/skills",active:"/skills"===z}):null,(0,b.jsx)(w,{icon:r.Settings,label:x("navigation.settings"),href:"/settings",active:"/settings"===z})]})}),(0,b.jsx)(g.SidebarContent,{children:G?(0,b.jsxs)("div",{className:["flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out [&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none",H?"opacity-100":"opacity-0"].join(" "),children:[(0,b.jsx)(_,{label:x("sidebar.features")}),(0,b.jsx)(t.ScrollArea,{className:"min-h-0 flex-1",children:ad.map(({repoPath:a,repoName:c,featureCount:d,statusGroups:e})=>(0,b.jsx)($,{repoName:c,featureCount:d,onAddFeature:u?()=>u(a):void 0,children:e.map(({statusKey:a,label:c,items:d})=>(0,b.jsx)(W,{label:c,count:d.length,children:d.map(a=>(0,b.jsx)(Q,{name:a.name,status:a.status,startedAt:a.startedAt,duration:a.duration,agentType:a.agentType,modelId:a.modelId,onClick:h?()=>h(a.featureId):void 0},a.featureId))},a))},a))})]}):null}),(0,b.jsx)(g.SidebarFooter,{className:"border-t p-2",children:(0,b.jsx)(g.SidebarMenu,{children:(0,b.jsx)(g.SidebarMenuItem,{children:(0,b.jsx)("div",{className:"flex items-center gap-1",children:(0,b.jsxs)(C.TooltipProvider,{children:[(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:a=>{let b="system"===X?"dark"===P?"light":"dark":"dark"===X?"light":"dark";("dark"!==("system"===X?P:X)?Z.play():ab.play(),"startViewTransition"in document)?(document.documentElement.style.setProperty("--x",`${a.clientX}px`),document.documentElement.style.setProperty("--y",`${a.clientY}px`),document.startViewTransition(()=>{Y(b)})):Y(b)},"aria-label":"dark"===P?x("sidebar.switchToLight"):x("sidebar.switchToDark"),children:[(0,b.jsx)(k,{className:"h-4 w-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"}),(0,b.jsx)(j,{className:"absolute h-4 w-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"})]})}),(0,b.jsx)(C.TooltipContent,{side:"top",children:"dark"===P?x("sidebar.switchToLight"):x("sidebar.switchToDark")})]}),!F&&(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{ac.play(),K()},"aria-label":J?x("sidebar.muteSounds"):x("sidebar.unmuteSounds"),children:J?(0,b.jsx)(l,{className:"h-4 w-4"}):(0,b.jsx)(m,{className:"h-4 w-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"top",children:J?x("sidebar.muteSounds"):x("sidebar.unmuteSounds")})]}),!F&&(0,b.jsxs)(C.Tooltip,{children:[(0,b.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(g.SidebarMenuButton,{className:"w-auto flex-none",onClick:()=>{ac.play(),O()},"aria-label":L?"Disable animations":"Enable animations",children:L?(0,b.jsx)(n.Zap,{className:"h-4 w-4"}):(0,b.jsx)(o,{className:"h-4 w-4"})})}),(0,b.jsx)(C.TooltipContent,{side:"top",children:L?"Disable animations":"Enable animations"})]})]})})})})}),(0,b.jsx)(g.SidebarRail,{})]})}a.i(21434);var ac=a.i(34379),ad=a.i(12882),ae=a.i(2807),af=a.i(34644);let ag=(0,h.default)("grip-vertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);var ah=a.i(73068);let ai=(0,h.default)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]);var aj=a.i(61544),ak=a.i(5555),al=a.i(33419),am=a.i(48265);let an="shep-global-chat";function ao(){try{let a=localStorage.getItem(an);if(!a)return{pos:null,size:null};let b=JSON.parse(a),c=b.size??null;return c&&(c.w<360||c.h<300)&&(c={w:Math.max(360,c.w),h:Math.max(300,c.h)}),{pos:b.pos??null,size:c}}catch{return{pos:null,size:null}}}function ap(){let{t:a}=(0,e.useTranslation)("web"),[d,f]=(0,c.useState)(!1),[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(!1),l=(0,al.useTurnStatus)("global"),{swapPosition:m}=(0,am.useFabLayout)(),{state:n}=(0,g.useSidebar)(),[o,p]=(0,c.useState)(()=>ao().pos),[q,r]=(0,c.useState)(()=>ao().size),s=(0,c.useCallback)(a=>{p(b=>"function"==typeof a?a(b):a)},[]),t=(0,c.useCallback)(a=>{r(b=>"function"==typeof a?a(b):a)},[]),u=(0,c.useRef)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useCallback)(()=>{f(a=>(a||i(!0),!a))},[]),A=(0,c.useRef)({pos:null,size:null}),B=(0,c.useCallback)(()=>{d||(f(!0),i(!0)),k(a=>(a?(s(A.current.pos),t(A.current.size)):A.current={pos:o,size:q},!a))},[d,o,q,s,t]);(0,c.useEffect)(()=>{let a=a=>{(a.metaKey||a.ctrlKey)&&a.shiftKey&&("k"===a.key||"K"===a.key)&&(a.preventDefault(),j&&k(!1),x(),requestAnimationFrame(()=>{setTimeout(()=>{let a=u.current?.querySelector("textarea");a?.focus()},100)})),(a.metaKey||a.ctrlKey)&&a.shiftKey&&("m"===a.key||"M"===a.key)&&(a.preventDefault(),B())};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[x,B,j]),(0,c.useEffect)(()=>{let a=setTimeout(()=>(function(a,b){try{localStorage.setItem(an,JSON.stringify({pos:a,size:b}))}catch{}})(o,q),300);return()=>clearTimeout(a)},[o,q]);let C=(0,c.useCallback)((a,b,c)=>({x:Math.max(-c+100,Math.min(a,window.innerWidth-100)),y:Math.max(0,Math.min(b,window.innerHeight-48))}),[]),D=(0,c.useCallback)(a=>{a.preventDefault();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=o?.x??c.left,e=o?.y??c.top;v.current={startX:a.clientX,startY:a.clientY,startPosX:d,startPosY:e};let f=q?.w??c.width,g=a=>{if(!v.current)return;let b=a.clientX-v.current.startX,c=a.clientY-v.current.startY;s(C(v.current.startPosX+b,v.current.startPosY+c,f))},h=()=>{v.current=null,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",h)};document.addEventListener("mousemove",g),document.addEventListener("mouseup",h)},[o,q,s,C]),E=(0,c.useCallback)(a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=q?.w??c.width,e=q?.h??c.height,f=a.clientX,g=a.clientY,h=o?.y??c.top;w.current={startX:f,startY:g,startW:d,startH:e},o||s({x:c.left,y:c.top});let i=a=>{if(!w.current)return;let b=a.clientX-f,i=a.clientY-g,j=Math.max(360,d+b),k=Math.max(300,e-i),l=Math.max(0,h+i);t({w:j,h:k}),s(a=>C(a?.x??c.left,l,j))},j=()=>{w.current=null,document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",j)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",j)},[q,o,s,t,C]),F=(0,c.useCallback)(()=>{f(!1),k(!1)},[]),G=j?{}:o?{position:"fixed",left:o.x,top:o.y,width:q?.w??520,height:q?.h??"70vh"}:{width:q?.w??520,height:q?.h??"70vh"};return(0,b.jsxs)(b.Fragment,{children:[h?(0,b.jsxs)("div",{ref:u,className:(0,z.cn)(j?"bg-background fixed inset-0 z-[60] flex flex-col overflow-hidden dark:bg-neutral-900":(0,z.cn)(!o&&(m?"fixed start-8 bottom-24":"fixed end-8 bottom-24"),"z-[60] flex flex-col overflow-hidden rounded-lg","border-border/60 border dark:border-white/10","bg-background dark:bg-neutral-900","shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]"),"transition-opacity duration-300 ease-out",d?"pointer-events-auto opacity-100":"pointer-events-none opacity-0"),style:G,children:[j?null:(0,b.jsx)("div",{className:"h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent"}),j?null:(0,b.jsx)("div",{onMouseDown:E,className:"absolute end-0 top-0 z-10 h-4 w-4 cursor-ne-resize"}),(0,b.jsxs)("div",{onMouseDown:j?void 0:D,className:(0,z.cn)("relative flex h-11 shrink-0 items-center gap-2.5 border-b border-black/[0.06] px-3.5 dark:border-white/[0.06]",!j&&"cursor-grab active:cursor-grabbing"),children:[(0,b.jsx)("div",{className:"from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent"}),j?null:(0,b.jsx)(ag,{className:"text-foreground/15 relative h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("div",{className:"relative flex h-5 w-5 items-center justify-center",children:(0,b.jsx)(af.Bot,{className:"text-foreground/50 h-4 w-4"})}),(0,b.jsxs)("div",{className:"relative flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"text-foreground/90 text-base font-bold tracking-tight",children:"Shep"}),(0,b.jsx)("span",{className:"text-foreground/30 text-xs font-medium tracking-widest uppercase",children:"global"})]}),(0,b.jsxs)("div",{className:"relative ms-auto flex items-center gap-0.5",children:[(0,b.jsx)("button",{type:"button",onClick:B,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:j?"Restore (⌘⇧M)":"Maximize (⌘⇧M)",children:j?(0,b.jsx)(ai,{className:"h-3.5 w-3.5"}):(0,b.jsx)(ah.Maximize2,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("button",{type:"button",onClick:F,className:"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors",title:"Close (⌘⇧K)",children:(0,b.jsx)(ae.X,{className:"h-3.5 w-3.5"})})]})]}),(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:(0,b.jsx)(aj.ChatTab,{featureId:"global"})}),j?null:(0,b.jsx)("div",{onMouseDown:a=>{a.preventDefault(),a.stopPropagation();let b=u.current;if(!b)return;let c=b.getBoundingClientRect(),d=a.clientX,e=a.clientY,f=q?.w??c.width,g=q?.h??c.height;o||s({x:c.left,y:c.top});let h=a=>{let b=window.innerHeight-(o?.y??c.top);t({w:Math.max(360,f+(a.clientX-d)),h:Math.max(300,Math.min(g+(a.clientY-e),b))})},i=()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",i)};document.addEventListener("mousemove",h),document.addEventListener("mouseup",i)},className:"absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize"})]}):null,(0,b.jsxs)(aq,{swapPosition:m,sidebarState:n,isMaximized:j,children:[(0,b.jsxs)(y.Button,{size:"icon",onClick:x,className:(0,z.cn)("relative h-14 w-14 rounded-full shadow-lg","transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95",d?"bg-violet-600 text-white hover:bg-violet-500":"bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400",!d&&"processing"===l&&"chat-fab-spinning",!d&&"unread"===l&&"chat-fab-glow-unread",!d&&"awaiting_input"===l&&"chat-fab-glow-awaiting"),children:[(0,b.jsx)(ad.MessageSquare,{className:(0,z.cn)("absolute h-7 w-7 stroke-[2.5] transition-all duration-200",d?"scale-0 rotate-90 opacity-0":"scale-100 rotate-0 opacity-100")}),(0,b.jsx)(ae.X,{className:(0,z.cn)("absolute h-6 w-6 stroke-[2.5] transition-all duration-200",d?"scale-100 rotate-0 opacity-100":"scale-0 -rotate-90 opacity-0")}),!d&&(0,b.jsx)(ak.ChatDotIndicator,{status:l,className:"end-0 top-0"})]}),(0,b.jsx)("div",{className:"pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 opacity-0 transition-all duration-200 group-hover/fab:translate-y-0 group-hover/fab:opacity-100",children:(0,b.jsxs)("div",{className:"bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg",children:[(0,b.jsx)("p",{className:"text-background text-xs font-medium whitespace-nowrap",children:a("chat.shepChat")}),(0,b.jsxs)("p",{className:"text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]",children:[(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⌘"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"⇧"}),(0,b.jsx)("kbd",{className:"bg-background/15 rounded px-1 py-px font-mono",children:"K"})]})]})})]})]})}function aq({swapPosition:a,sidebarState:c,isMaximized:d,children:f}){let{i18n:g}=(0,e.useTranslation)("web"),h="rtl"===g.dir();if(!a)return(0,b.jsx)("div",{className:(0,z.cn)("group/fab fixed end-8 bottom-6 z-30",d&&"hidden"),children:f});let i="expanded"===c?"calc(var(--sidebar-width) + 32px)":"calc(var(--sidebar-width-icon) + 32px)";return(0,b.jsx)("div",{className:(0,z.cn)("group/fab fixed bottom-6 z-30",d&&"hidden"),style:h?{right:i,transition:"right 200ms ease-in-out"}:{left:i,transition:"left 200ms ease-in-out"},children:f})}var ar=a.i(1377),as=a.i(45670),at=a.i(41305),au=a.i(90920),av=a.i(584);let aw=/^(?:https:\/\/github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|git@github\.com:([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?|([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+))$/;function ax({onSubmit:a,loading:d=!1}){let[e,f]=(0,c.useState)(""),[g,h]=(0,c.useState)("");function i(){let b=e.trim();b?aw.test(b.trim())?(h(""),a(b)):h("Enter a valid GitHub URL (e.g. owner/repo or https://github.com/owner/repo)"):h("Please enter a GitHub URL")}return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(av.Label,{htmlFor:"github-url-input",children:"GitHub URL"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(au.Input,{id:"github-url-input",placeholder:"owner/repo or https://github.com/owner/repo",value:e,onChange:a=>{f(a.target.value),g&&h("")},onKeyDown:function(a){"Enter"===a.key&&(a.preventDefault(),i())},disabled:d,"aria-invalid":!!g,"aria-describedby":g?"github-url-error":void 0}),(0,b.jsx)(y.Button,{onClick:i,disabled:d||!e.trim(),size:"sm",children:d?(0,b.jsx)(H.Loader2,{className:"h-4 w-4 animate-spin"}):"Import"})]}),g?(0,b.jsx)("p",{id:"github-url-error",className:"text-destructive text-sm",role:"alert",children:g}):null]})}let ay=(0,h.default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var az=a.i(84494),aA=a.i(31378),aB=a.i(72980),aC=a.i(58339),aD=a.i(55837),aE=a.i(59175),aF=a.i(25674);let aG=(0,aF.createServerReference)("40dc68114a21a0b3777b0e8981fe888bbd9e733ae4",aF.callServer,void 0,aF.findSourceMapURL,"listGitHubRepositories"),aH=(0,aF.createServerReference)("00db40961c1be8f6cb1e2873a19726d440b4005802",aF.callServer,void 0,aF.findSourceMapURL,"listGitHubOrganizations"),aI="__personal__";function aJ({onSelect:a,loading:d=!1,fetchRepos:e=aG,fetchOrgs:f=aH}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(!0),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(aI),s=(0,c.useRef)(null);(0,c.useEffect)(()=>{!async function(){try{let a=await f();a.orgs&&j(a.orgs)}catch{}}()},[f]);let t=(0,c.useCallback)(async(a,b)=>{l(!0),n("");try{let c={};a&&(c.search=a),b&&b!==aI&&(c.owner=b);let d=await e(Object.keys(c).length>0?c:void 0);d.error?(n(d.error),h([])):h(d.repos??[])}catch{n("Failed to fetch repositories"),h([])}finally{l(!1)}},[e]);return((0,c.useEffect)(()=>{t(o||void 0,q)},[t,q]),m&&!k)?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2 py-8 text-center","data-testid":"repo-browser-error",children:[(0,b.jsx)(aB.AlertCircle,{className:"text-destructive h-8 w-8"}),(0,b.jsx)("p",{className:"text-destructive text-sm",children:m})]}):(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[i.length>0?(0,b.jsxs)(aE.Select,{value:q,onValueChange:function(a){r(a),p("")},disabled:d,children:[(0,b.jsx)(aE.SelectTrigger,{"aria-label":"Select owner",children:(0,b.jsx)(aE.SelectValue,{placeholder:"Select owner"})}),(0,b.jsxs)(aE.SelectContent,{children:[(0,b.jsx)(aE.SelectItem,{value:aI,children:"My repositories"}),i.map(a=>(0,b.jsx)(aE.SelectItem,{value:a.login,children:a.login},a.login))]})]}):null,(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(aA.Search,{className:"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2"}),(0,b.jsx)(au.Input,{placeholder:"Search repositories...",value:o,onChange:a=>{var b;p(b=a.target.value),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t(b||void 0,q)},300)},className:"ps-9",disabled:d,"aria-label":"Search repositories"})]}),(0,b.jsx)("div",{className:"max-h-64 overflow-x-hidden overflow-y-auto rounded-md border",role:"listbox","aria-label":"GitHub repositories",children:k?(0,b.jsx)("div",{className:"flex flex-col gap-2 p-3","data-testid":"repo-browser-loading",children:Array.from({length:5}).map((a,c)=>(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)(aD.Skeleton,{className:"h-4 w-48"}),(0,b.jsx)(aD.Skeleton,{className:"h-3 w-72"})]},`skeleton-${String(c)}`))}):0===g.length?(0,b.jsx)("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"repo-browser-empty",children:"No repositories found"}):g.map(c=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":!1,className:"hover:bg-accent flex w-full items-start gap-2 border-b px-3 py-2.5 text-start last:border-b-0 disabled:opacity-50",onClick:()=>a(c.nameWithOwner),disabled:d,children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:c.nameWithOwner}),(0,b.jsx)(aC.Badge,{variant:c.isPrivate?"secondary":"outline",className:"shrink-0 text-xs",children:c.isPrivate?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(ay,{className:"me-1 h-3 w-3"}),"Private"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(az.Globe,{className:"me-1 h-3 w-3"}),"Public"]})})]}),c.description?(0,b.jsx)("p",{className:"text-muted-foreground mt-0.5 truncate text-xs",children:c.description}):null]}),d?(0,b.jsx)(H.Loader2,{className:"mt-0.5 h-4 w-4 shrink-0 animate-spin"}):null]},c.nameWithOwner))})]})}let aK=(0,aF.createServerReference)("40ee586c1937edc1cd3c82f082fbaa8ca9850036ae",aF.callServer,void 0,aF.findSourceMapURL,"importGitHubRepository");function aL({open:a,onOpenChange:d,onImportComplete:e}){let[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)("");async function j(a){g(!0),i("");try{let b=await aK({url:a});b.error?i(b.error):b.repository&&(e(b.repository),d(!1))}catch{i("An unexpected error occurred")}finally{g(!1)}}return(0,b.jsx)(as.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(as.DialogContent,{className:"overflow-hidden sm:max-w-lg",children:[(0,b.jsxs)(as.DialogHeader,{children:[(0,b.jsx)(as.DialogTitle,{children:"Import from GitHub"}),(0,b.jsx)(as.DialogDescription,{children:"Clone a GitHub repository and add it to Shep."})]}),(0,b.jsxs)(at.Tabs,{defaultValue:"url",className:"min-w-0",children:[(0,b.jsxs)(at.TabsList,{className:"grid w-full grid-cols-2",children:[(0,b.jsx)(at.TabsTrigger,{value:"url",children:"URL"}),(0,b.jsx)(at.TabsTrigger,{value:"browse",children:"Browse"})]}),(0,b.jsx)(at.TabsContent,{value:"url",className:"mt-4",children:(0,b.jsx)(ax,{onSubmit:j,loading:f})}),(0,b.jsx)(at.TabsContent,{value:"browse",className:"mt-4",children:(0,b.jsx)(aJ,{onSelect:j,loading:f})})]}),h?(0,b.jsx)("p",{className:"text-destructive text-sm",role:"alert",children:h}):null]})})}var aM=a.i(84871),aN=a.i(96213),aO=a.i(1356),aP=a.i(52313),aQ=a.i(46847);let aR={[aQ.NotificationSeverity.Success]:"success",[aQ.NotificationSeverity.Error]:"error",[aQ.NotificationSeverity.Warning]:"warning",[aQ.NotificationSeverity.Info]:"info"},aS={[aQ.NotificationSeverity.Success]:"notification-success",[aQ.NotificationSeverity.Error]:"notification-error",[aQ.NotificationSeverity.Warning]:"notification-warning",[aQ.NotificationSeverity.Info]:"notification-info"};var aT=a.i(21333);function aU({children:a,sidebarOpen:e}){let f=(0,d.useRouter)(),{guardedNavigate:h}=(0,aN.useDrawerCloseGuard)(),i=(0,aT.useFeatureFlags)();!function(){let a=(0,d.useRouter)(),{events:b}=(0,aM.useAgentEventsContext)(),e=(0,v.useSoundAction)("notification-success"),f=(0,v.useSoundAction)("notification-error"),g=(0,v.useSoundAction)("notification-warning"),h=(0,v.useSoundAction)("notification-info"),i=(0,c.useMemo)(()=>({"notification-success":e,"notification-error":f,"notification-warning":g,"notification-info":h}),[e,f,g,h]),j=(0,c.useRef)(0);(0,c.useEffect)(()=>{if(b.length<=j.current)return;let c=b.slice(j.current);for(let d of(j.current=b.length,c)){if(d.eventType!==aQ.NotificationEventType.MergeReviewReady&&d.severity!==aQ.NotificationSeverity.Error&&d.severity!==aQ.NotificationSeverity.Warning&&d.severity!==aQ.NotificationSeverity.Success)continue;!function(a,b){let c=aR[a.severity]??"info",d=a.eventType===aQ.NotificationEventType.WaitingApproval||a.eventType===aQ.NotificationEventType.MergeReviewReady;aP.toast[c](a.featureName,{description:a.message,...d&&b&&{action:{label:"Review",onClick:()=>{b(`/feature/${a.featureId}`)}}}})}(d,b=>a.push(b));let b=aS[d.severity];i[b]?.play()}},[b,i,a])}();let{features:j}=(0,aO.useSidebarFeaturesContext)(),k=(0,c.useCallback)(a=>{h(()=>f.push(`/feature/${a}`))},[f,h]),l=(0,c.useCallback)(a=>{h(()=>f.push(`/create?repo=${encodeURIComponent(a)}`))},[f,h]),[m,n]=(0,c.useState)(!1),[o,p]=(0,c.useState)(!1),[q,r]=(0,c.useState)(!1),s=(0,c.useCallback)(async()=>{if(!m){if(i.reactFileManager)return void r(!0);n(!0);try{let a=await (0,ar.pickFolder)();a&&window.dispatchEvent(new CustomEvent("shep:add-repository",{detail:{path:a}}))}catch{r(!0)}finally{n(!1)}}},[m,i.reactFileManager]);(0,c.useEffect)(()=>{let a=()=>{s()};return window.addEventListener("shep:pick-folder",a),()=>window.removeEventListener("shep:pick-folder",a)},[s]),(0,c.useEffect)(()=>{let a=()=>p(!0);return window.addEventListener("shep:open-github-import",a),()=>window.removeEventListener("shep:open-github-import",a)},[]);let t=(0,c.useCallback)(a=>{a&&window.dispatchEvent(new CustomEvent("shep:add-repository",{detail:{path:a}})),r(!1)},[]),u=(0,c.useCallback)(a=>{a.path&&window.dispatchEvent(new CustomEvent("shep:add-repository",{detail:{path:a.path}}))},[]);return(0,b.jsxs)(g.SidebarProvider,{defaultOpen:e??!1,children:[(0,b.jsx)(ab,{features:j,featureFlags:i,onFeatureClick:k,onAddFeature:l}),(0,b.jsx)(g.SidebarInset,{children:(0,b.jsxs)("div",{className:"relative h-full",children:[(0,b.jsx)("main",{className:"h-full",children:a}),(0,b.jsx)(ap,{}),i.githubImport?(0,b.jsx)(aL,{open:o,onOpenChange:p,onImportComplete:u}):null]})}),(0,b.jsx)(ac.ReactFileManagerDialog,{open:q,onOpenChange:a=>{a||r(!1)},onSelect:t})]})}function aV({children:a}){return(0,b.jsx)(al.TurnStatusesProvider,{children:a})}function aW({children:a,sidebarOpen:c}){let{i18n:d}=(0,e.useTranslation)(),g=d.dir();return(0,b.jsx)(f.Direction.Provider,{dir:g,children:(0,b.jsx)(aM.AgentEventsProvider,{children:(0,b.jsx)(aN.DrawerCloseGuardProvider,{children:(0,b.jsx)(aO.SidebarFeaturesProvider,{children:(0,b.jsx)(aV,{children:(0,b.jsx)(aU,{sidebarOpen:c,children:a})})})})})})}a.s(["AppShell",()=>aW],66560)},58313,a=>{"use strict";var b=a.i(12656),c=a.i(52313);let d=({...a})=>(0,b.jsx)(c.Toaster,{className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...a});a.s(["Toaster",()=>d])},41835,a=>{"use strict";var b=a.i(12656),c=a.i(99298),d=a.i(61123),e=a.i(25265),f=a.i(45806),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(31263),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(63656),m=a.i(50129);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(80535),r=a.i(96960);function s({children:a}){let[c]=(0,r.useState)(()=>new p({defaultOptions:{queries:{staleTime:1e3,refetchOnWindowFocus:!1}}}));return(0,b.jsx)(q.QueryClientProvider,{client:c,children:a})}a.s(["QueryProvider",()=>s],41835)},85827,a=>{"use strict";let b;var c=a.i(12656),d=a.i(96960);a.i(90370);var e=a.i(83436),f=a.i(67750),g=a.i(29646),h=a.i(37465),i=a.i(51193),j=a.i(55431),k=a.i(60280),l=a.i(40266),m=a.i(50784),n=a.i(28191),o=a.i(71363),p=a.i(53493),q=a.i(22307),r=a.i(44225),s=a.i(62305),t=a.i(51943),u=a.i(88158),v=a.i(39711),w=a.i(32456);let x=((b=f.default.createInstance()).use(g.initReactI18next).init({lng:"en",fallbackLng:"en",defaultNS:"common",ns:["common","web"],resources:{en:{common:h.default,web:i.default},ru:{common:j.default,web:k.default},pt:{common:l.default,web:m.default},es:{common:n.default,web:o.default},ar:{common:p.default,web:q.default},he:{common:r.default,web:s.default},fr:{common:t.default,web:u.default},de:{common:v.default,web:w.default}},interpolation:{escapeValue:!1},react:{useSuspense:!1}}),b),y={ar:{family:"Noto Sans Arabic",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic:wght@400;500;600;700&display=swap"},he:{family:"Noto Sans Hebrew",cssUrl:"https://fonts.googleapis.com/css2?family=Noto+Sans+Hebrew:wght@400;500;600;700&display=swap"}};function z(a){let b=y[a];if(document.documentElement.classList.remove("font-rtl-arabic","font-rtl-hebrew"),!b)return void document.documentElement.style.removeProperty("--font-rtl");document.documentElement.style.setProperty("--font-rtl",`"${b.family}"`),document.documentElement.classList.add("ar"===a?"font-rtl-arabic":"font-rtl-hebrew");let c=`rtl-font-${a}`;if(!document.getElementById(c)){let a=document.createElement("link");a.id=c,a.rel="stylesheet",a.href=b.cssUrl,document.head.appendChild(a)}}function A({initialLanguage:a,children:b}){return(0,d.useEffect)(()=>{x.language!==a&&x.changeLanguage(a),z(a)},[a]),(0,d.useEffect)(()=>{function a(a){z(a)}return x.on("languageChanged",a),()=>{x.off("languageChanged",a)}},[]),(0,c.jsx)(e.I18nextProvider,{i18n:x,children:b})}a.s(["I18nProvider",()=>A],85827)}];
2
2
 
3
3
  //# sourceMappingURL=src_presentation_web_components_895e5bfa._.js.map