@shepai/cli 1.151.2 → 1.152.0-pr476.cafabb8

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 (727) hide show
  1. package/apis/json-schema/InteractiveAgentConfig.yaml +25 -0
  2. package/apis/json-schema/InteractiveMessage.yaml +23 -0
  3. package/apis/json-schema/InteractiveMessageRole.yaml +7 -0
  4. package/apis/json-schema/InteractiveSession.yaml +30 -0
  5. package/apis/json-schema/InteractiveSessionStatus.yaml +9 -0
  6. package/apis/json-schema/Settings.yaml +3 -0
  7. package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts +17 -0
  8. package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/ports/output/agents/index.d.ts +1 -0
  10. package/dist/packages/core/src/application/ports/output/agents/index.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +53 -0
  12. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -0
  13. package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.js +13 -0
  14. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +2 -0
  15. package/dist/packages/core/src/application/ports/output/repositories/index.d.ts.map +1 -1
  16. package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.d.ts +37 -0
  17. package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.d.ts.map +1 -0
  18. package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.js +10 -0
  19. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts +78 -0
  20. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -0
  21. package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.js +10 -0
  22. package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
  23. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  24. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +187 -0
  25. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -0
  26. package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.js +12 -0
  27. package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.d.ts +26 -0
  28. package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.d.ts.map +1 -0
  29. package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.js +41 -0
  30. package/dist/packages/core/src/application/use-cases/interactive/index.d.ts +14 -0
  31. package/dist/packages/core/src/application/use-cases/interactive/index.d.ts.map +1 -0
  32. package/dist/packages/core/src/application/use-cases/interactive/index.js +9 -0
  33. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts +31 -0
  34. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts.map +1 -0
  35. package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.js +43 -0
  36. package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.d.ts +34 -0
  37. package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.d.ts.map +1 -0
  38. package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.js +43 -0
  39. package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.d.ts +27 -0
  40. package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.d.ts.map +1 -0
  41. package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.js +42 -0
  42. package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.d.ts +13 -0
  43. package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.d.ts.map +1 -0
  44. package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.js +19 -0
  45. package/dist/packages/core/src/domain/generated/output.d.ts +77 -0
  46. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  47. package/dist/packages/core/src/domain/generated/output.js +12 -0
  48. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  49. package/dist/packages/core/src/infrastructure/di/container.js +47 -0
  50. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts +36 -0
  51. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts.map +1 -0
  52. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.js +41 -0
  53. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.d.ts +39 -0
  54. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.d.ts.map +1 -0
  55. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.js +47 -0
  56. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +3 -0
  57. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  58. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +10 -0
  59. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.d.ts +22 -0
  60. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.d.ts.map +1 -0
  61. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.js +52 -0
  62. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.d.ts +16 -0
  63. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.d.ts.map +1 -0
  64. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.js +27 -0
  65. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/047-add-agent-session-id.d.ts +15 -0
  66. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/047-add-agent-session-id.d.ts.map +1 -0
  67. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/047-add-agent-session-id.js +27 -0
  68. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/048-add-turn-status.d.ts +15 -0
  69. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/048-add-turn-status.d.ts.map +1 -0
  70. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/048-add-turn-status.js +20 -0
  71. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.d.ts +18 -0
  72. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.d.ts.map +1 -0
  73. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.js +58 -0
  74. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +28 -0
  75. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -0
  76. package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +137 -0
  77. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  78. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +10 -3
  79. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +18 -0
  80. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
  81. package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +27 -0
  82. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +43 -0
  83. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -0
  84. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +288 -0
  85. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +3 -0
  86. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -1
  87. package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.js +6 -0
  88. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
  89. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts +26 -0
  90. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts.map +1 -0
  91. package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +140 -0
  92. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +90 -0
  93. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -0
  94. package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +889 -0
  95. package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.d.ts +3 -0
  96. package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.d.ts.map +1 -0
  97. package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.js +6 -0
  98. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.d.ts.map +1 -1
  99. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  100. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
  101. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  102. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.d.ts +11 -0
  103. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.d.ts.map +1 -0
  104. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +18 -0
  105. package/dist/src/presentation/web/app/(dashboard)/chat/page.d.ts +3 -0
  106. package/dist/src/presentation/web/app/(dashboard)/chat/page.d.ts.map +1 -0
  107. package/dist/src/presentation/web/app/(dashboard)/chat/page.js +4 -0
  108. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.d.ts +3 -0
  109. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.d.ts.map +1 -0
  110. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +4 -0
  111. package/dist/src/presentation/web/app/api/agent-events/route.d.ts +6 -0
  112. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  113. package/dist/src/presentation/web/app/api/agent-events/route.js +54 -1
  114. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.d.ts +19 -0
  115. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.d.ts.map +1 -0
  116. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.js +24 -0
  117. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts +24 -0
  118. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -0
  119. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +76 -0
  120. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts +16 -0
  121. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts.map +1 -0
  122. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.js +21 -0
  123. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts +21 -0
  124. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -0
  125. package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +87 -0
  126. package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts +12 -0
  127. package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts.map +1 -0
  128. package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.js +28 -0
  129. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts +19 -0
  130. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts.map +1 -0
  131. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.js +78 -0
  132. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts +18 -0
  133. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts.map +1 -0
  134. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.js +43 -0
  135. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts +19 -0
  136. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -0
  137. package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +92 -0
  138. package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts +12 -0
  139. package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts.map +1 -0
  140. package/dist/src/presentation/web/app/api/interactive/sessions/route.js +37 -0
  141. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  142. package/dist/src/presentation/web/app/layout.js +2 -1
  143. package/dist/src/presentation/web/components/assistant-ui/thread.d.ts +6 -0
  144. package/dist/src/presentation/web/components/assistant-ui/thread.d.ts.map +1 -0
  145. package/dist/src/presentation/web/components/assistant-ui/thread.js +192 -0
  146. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +1 -1
  147. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  148. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -0
  149. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
  150. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
  151. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +1 -0
  152. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts +3 -1
  153. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  154. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +5 -6
  155. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.d.ts +2 -0
  156. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.d.ts.map +1 -0
  157. package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.js +17 -0
  158. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts +3 -1
  159. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
  160. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +15 -8
  161. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +7 -1
  162. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  163. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +11 -4
  164. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  165. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +10 -2
  166. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts +9 -2
  167. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts.map +1 -1
  168. package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +11 -16
  169. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  170. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +10 -2
  171. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.d.ts +21 -0
  172. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.d.ts.map +1 -0
  173. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.js +46 -0
  174. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts +20 -0
  175. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts.map +1 -0
  176. package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.js +52 -0
  177. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts +18 -0
  178. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts.map +1 -0
  179. package/dist/src/presentation/web/components/features/chat/ChatComposer.js +16 -0
  180. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.d.ts +14 -0
  181. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.d.ts.map +1 -0
  182. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.js +13 -0
  183. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts +9 -0
  184. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.d.ts.map +1 -0
  185. package/dist/src/presentation/web/components/features/chat/ChatDotIndicator.stories.js +19 -0
  186. package/dist/src/presentation/web/components/features/chat/ChatInput.d.ts +19 -0
  187. package/dist/src/presentation/web/components/features/chat/ChatInput.d.ts.map +1 -0
  188. package/dist/src/presentation/web/components/features/chat/ChatInput.js +42 -0
  189. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts +14 -0
  190. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts.map +1 -0
  191. package/dist/src/presentation/web/components/features/chat/ChatInput.stories.js +56 -0
  192. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.d.ts +21 -0
  193. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.d.ts.map +1 -0
  194. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.js +43 -0
  195. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts +24 -0
  196. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts.map +1 -0
  197. package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.js +84 -0
  198. package/dist/src/presentation/web/components/features/chat/ChatMessageList.d.ts +25 -0
  199. package/dist/src/presentation/web/components/features/chat/ChatMessageList.d.ts.map +1 -0
  200. package/dist/src/presentation/web/components/features/chat/ChatMessageList.js +36 -0
  201. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts +2 -0
  202. package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -0
  203. package/dist/src/presentation/web/components/features/chat/ChatSheet.js +259 -0
  204. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +6 -0
  205. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -0
  206. package/dist/src/presentation/web/components/features/chat/ChatTab.js +67 -0
  207. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts +25 -0
  208. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts.map +1 -0
  209. package/dist/src/presentation/web/components/features/chat/ChatTab.stories.js +237 -0
  210. package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +34 -0
  211. package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -0
  212. package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +272 -0
  213. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  214. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +71 -8
  215. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +8 -0
  216. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -0
  217. package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +29 -0
  218. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +1 -2
  219. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  220. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +5 -13
  221. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  222. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +45 -2
  223. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  224. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +25 -66
  225. package/dist/src/presentation/web/components/providers/query-provider.d.ts +4 -0
  226. package/dist/src/presentation/web/components/providers/query-provider.d.ts.map +1 -0
  227. package/dist/src/presentation/web/components/providers/query-provider.js +16 -0
  228. package/dist/src/presentation/web/hooks/turn-statuses-provider.d.ts +15 -0
  229. package/dist/src/presentation/web/hooks/turn-statuses-provider.d.ts.map +1 -0
  230. package/dist/src/presentation/web/hooks/turn-statuses-provider.js +26 -0
  231. package/dist/src/presentation/web/hooks/use-attachments.d.ts +26 -0
  232. package/dist/src/presentation/web/hooks/use-attachments.d.ts.map +1 -0
  233. package/dist/src/presentation/web/hooks/use-attachments.js +227 -0
  234. package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts +12 -0
  235. package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts.map +1 -0
  236. package/dist/src/presentation/web/hooks/use-turn-statuses.js +26 -0
  237. package/dist/tsconfig.build.tsbuildinfo +1 -1
  238. package/package.json +3 -1
  239. package/web/.next/BUILD_ID +1 -1
  240. package/web/.next/app-path-routes-manifest.json +13 -0
  241. package/web/.next/build-manifest.json +5 -5
  242. package/web/.next/fallback-build-manifest.json +2 -2
  243. package/web/.next/prerender-manifest.json +3 -3
  244. package/web/.next/required-server-files.js +3 -3
  245. package/web/.next/required-server-files.json +3 -3
  246. package/web/.next/routes-manifest.json +83 -0
  247. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +3 -3
  248. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +82 -82
  249. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
  250. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  251. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  252. package/web/.next/server/app/(dashboard)/@drawer/chat/page/app-paths-manifest.json +3 -0
  253. package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +18 -0
  254. package/web/.next/server/app/(dashboard)/@drawer/chat/page/next-font-manifest.json +6 -0
  255. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +8 -0
  256. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +395 -0
  257. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +22 -0
  258. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.map +5 -0
  259. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -0
  260. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +2 -0
  261. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +3 -3
  262. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +84 -84
  263. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  264. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  265. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  266. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  267. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +98 -98
  268. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  269. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  270. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  271. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +3 -3
  272. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +98 -98
  273. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  274. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  275. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  276. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/app-paths-manifest.json +3 -0
  277. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +18 -0
  278. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -0
  279. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +8 -0
  280. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +395 -0
  281. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +22 -0
  282. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.map +5 -0
  283. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -0
  284. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +2 -0
  285. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +3 -3
  286. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +78 -78
  287. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  288. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  289. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  290. package/web/.next/server/app/(dashboard)/chat/page/app-paths-manifest.json +3 -0
  291. package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +18 -0
  292. package/web/.next/server/app/(dashboard)/chat/page/next-font-manifest.json +6 -0
  293. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +8 -0
  294. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +395 -0
  295. package/web/.next/server/app/(dashboard)/chat/page.js +22 -0
  296. package/web/.next/server/app/(dashboard)/chat/page.js.map +5 -0
  297. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -0
  298. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +2 -0
  299. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +3 -3
  300. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +84 -84
  301. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  302. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  303. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  304. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +3 -3
  305. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +98 -98
  306. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  307. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  308. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  309. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +3 -3
  310. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +98 -98
  311. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  312. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  313. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  314. package/web/.next/server/app/(dashboard)/page/build-manifest.json +3 -3
  315. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +78 -78
  316. package/web/.next/server/app/(dashboard)/page.js +2 -2
  317. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  318. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  319. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/app-paths-manifest.json +3 -0
  320. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +18 -0
  321. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -0
  322. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +8 -0
  323. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +395 -0
  324. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +22 -0
  325. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.map +5 -0
  326. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -0
  327. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +2 -0
  328. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +3 -3
  329. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +78 -78
  330. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  331. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  332. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  333. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  334. package/web/.next/server/app/_global-error.html +2 -2
  335. package/web/.next/server/app/_global-error.rsc +1 -1
  336. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  337. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  338. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  339. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  340. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  341. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  342. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +36 -6
  343. package/web/.next/server/app/_not-found/page.js +2 -2
  344. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  345. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  346. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  347. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  348. package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
  349. package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
  350. package/web/.next/server/app/api/evidence/route.js +1 -1
  351. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  352. package/web/.next/server/app/api/graph-data/route.js +1 -1
  353. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  354. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route/app-paths-manifest.json +3 -0
  355. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route/build-manifest.json +11 -0
  356. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route/server-reference-manifest.json +4 -0
  357. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route.js +7 -0
  358. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route.js.map +5 -0
  359. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route.js.nft.json +1 -0
  360. package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route_client-reference-manifest.js +2 -0
  361. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/app-paths-manifest.json +3 -0
  362. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/build-manifest.json +11 -0
  363. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/server-reference-manifest.json +4 -0
  364. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +7 -0
  365. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.map +5 -0
  366. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -0
  367. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route_client-reference-manifest.js +2 -0
  368. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/app-paths-manifest.json +3 -0
  369. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/build-manifest.json +11 -0
  370. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/server-reference-manifest.json +4 -0
  371. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js +7 -0
  372. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.map +5 -0
  373. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.nft.json +1 -0
  374. package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route_client-reference-manifest.js +2 -0
  375. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/app-paths-manifest.json +3 -0
  376. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/build-manifest.json +11 -0
  377. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/server-reference-manifest.json +4 -0
  378. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +6 -0
  379. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.map +5 -0
  380. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -0
  381. package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route_client-reference-manifest.js +2 -0
  382. package/web/.next/server/app/api/interactive/chat/turn-statuses/route/app-paths-manifest.json +3 -0
  383. package/web/.next/server/app/api/interactive/chat/turn-statuses/route/build-manifest.json +11 -0
  384. package/web/.next/server/app/api/interactive/chat/turn-statuses/route/server-reference-manifest.json +4 -0
  385. package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js +7 -0
  386. package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js.map +5 -0
  387. package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js.nft.json +1 -0
  388. package/web/.next/server/app/api/interactive/chat/turn-statuses/route_client-reference-manifest.js +2 -0
  389. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/app-paths-manifest.json +3 -0
  390. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/build-manifest.json +11 -0
  391. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/server-reference-manifest.json +4 -0
  392. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js +7 -0
  393. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.map +5 -0
  394. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.nft.json +1 -0
  395. package/web/.next/server/app/api/interactive/sessions/[id]/messages/route_client-reference-manifest.js +2 -0
  396. package/web/.next/server/app/api/interactive/sessions/[id]/route/app-paths-manifest.json +3 -0
  397. package/web/.next/server/app/api/interactive/sessions/[id]/route/build-manifest.json +11 -0
  398. package/web/.next/server/app/api/interactive/sessions/[id]/route/server-reference-manifest.json +4 -0
  399. package/web/.next/server/app/api/interactive/sessions/[id]/route.js +7 -0
  400. package/web/.next/server/app/api/interactive/sessions/[id]/route.js.map +5 -0
  401. package/web/.next/server/app/api/interactive/sessions/[id]/route.js.nft.json +1 -0
  402. package/web/.next/server/app/api/interactive/sessions/[id]/route_client-reference-manifest.js +2 -0
  403. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/app-paths-manifest.json +3 -0
  404. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/build-manifest.json +11 -0
  405. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/server-reference-manifest.json +4 -0
  406. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +6 -0
  407. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.map +5 -0
  408. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -0
  409. package/web/.next/server/app/api/interactive/sessions/[id]/stream/route_client-reference-manifest.js +2 -0
  410. package/web/.next/server/app/api/interactive/sessions/route/app-paths-manifest.json +3 -0
  411. package/web/.next/server/app/api/interactive/sessions/route/build-manifest.json +11 -0
  412. package/web/.next/server/app/api/interactive/sessions/route/server-reference-manifest.json +4 -0
  413. package/web/.next/server/app/api/interactive/sessions/route.js +7 -0
  414. package/web/.next/server/app/api/interactive/sessions/route.js.map +5 -0
  415. package/web/.next/server/app/api/interactive/sessions/route.js.nft.json +1 -0
  416. package/web/.next/server/app/api/interactive/sessions/route_client-reference-manifest.js +2 -0
  417. package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  418. package/web/.next/server/app/api/sessions-batch/route.js +1 -1
  419. package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
  420. package/web/.next/server/app/api/tools/route.js +2 -2
  421. package/web/.next/server/app/settings/page/build-manifest.json +3 -3
  422. package/web/.next/server/app/settings/page/server-reference-manifest.json +42 -42
  423. package/web/.next/server/app/settings/page.js +3 -3
  424. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  425. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  426. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  427. package/web/.next/server/app/skills/page/server-reference-manifest.json +46 -16
  428. package/web/.next/server/app/skills/page.js +3 -3
  429. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  430. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  431. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  432. package/web/.next/server/app/tools/page/server-reference-manifest.json +46 -16
  433. package/web/.next/server/app/tools/page.js +3 -3
  434. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  435. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  436. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  437. package/web/.next/server/app/version/page/server-reference-manifest.json +36 -6
  438. package/web/.next/server/app/version/page.js +2 -2
  439. package/web/.next/server/app/version/page.js.nft.json +1 -1
  440. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  441. package/web/.next/server/app-paths-manifest.json +13 -0
  442. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +8 -2
  443. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  444. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_interactive_sessions_route_actions_f2e7447f.js +3 -0
  445. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_interactive_sessions_route_actions_f2e7447f.js.map +1 -0
  446. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_mark-read_route_actions_ce79c730.js +3 -0
  447. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_mark-read_route_actions_ce79c730.js.map +1 -0
  448. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_messages_route_actions_f98e5802.js +3 -0
  449. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_messages_route_actions_f98e5802.js.map +1 -0
  450. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stop_route_actions_36518d35.js +3 -0
  451. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stop_route_actions_36518d35.js.map +1 -0
  452. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stream_route_actions_e6210931.js +3 -0
  453. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stream_route_actions_e6210931.js.map +1 -0
  454. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_turn-statuses_route_actions_f97e4de7.js +3 -0
  455. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_turn-statuses_route_actions_f97e4de7.js.map +1 -0
  456. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_messages_route_actions_be179971.js +3 -0
  457. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_messages_route_actions_be179971.js.map +1 -0
  458. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_stream_route_actions_58ab2b5b.js +3 -0
  459. package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_stream_route_actions_58ab2b5b.js.map +1 -0
  460. package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js +3 -0
  461. package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js.map +1 -0
  462. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js +3 -0
  463. package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -0
  464. package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js +3 -0
  465. package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js.map +1 -0
  466. package/web/.next/server/chunks/{[root-of-the-server]__0d33c29e._.js → [root-of-the-server]__31598852._.js} +2 -2
  467. package/web/.next/server/chunks/{[root-of-the-server]__0d33c29e._.js.map → [root-of-the-server]__31598852._.js.map} +1 -1
  468. package/web/.next/server/chunks/[root-of-the-server]__32b04219._.js +3 -0
  469. package/web/.next/server/chunks/[root-of-the-server]__32b04219._.js.map +1 -0
  470. package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js +12 -0
  471. package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js.map +1 -0
  472. package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js +3 -0
  473. package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js.map +1 -0
  474. package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +18 -0
  475. package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -0
  476. package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js +3 -0
  477. package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js.map +1 -0
  478. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
  479. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -1
  480. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  481. package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js +3 -0
  482. package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js.map +1 -0
  483. package/web/.next/server/chunks/{[root-of-the-server]__26565141._.js → [root-of-the-server]__acea6565._.js} +2 -2
  484. package/web/.next/server/chunks/{[root-of-the-server]__26565141._.js.map → [root-of-the-server]__acea6565._.js.map} +1 -1
  485. package/web/.next/server/chunks/[root-of-the-server]__beda892a._.js +3 -0
  486. package/web/.next/server/chunks/[root-of-the-server]__beda892a._.js.map +1 -0
  487. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  488. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  489. package/web/.next/server/chunks/{[root-of-the-server]__25f23d5d._.js → [root-of-the-server]__e3692208._.js} +2 -2
  490. package/web/.next/server/chunks/{[root-of-the-server]__25f23d5d._.js.map → [root-of-the-server]__e3692208._.js.map} +1 -1
  491. package/web/.next/server/chunks/{[root-of-the-server]__a5879003._.js → [root-of-the-server]__ea653642._.js} +2 -2
  492. package/web/.next/server/chunks/{[root-of-the-server]__a5879003._.js.map → [root-of-the-server]__ea653642._.js.map} +1 -1
  493. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_interactive_sessions_[id]_route_actions_a4ea4d16.js +3 -0
  494. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_interactive_sessions_[id]_route_actions_a4ea4d16.js.map +1 -0
  495. package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +1 -1
  496. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2c44200f.js +4 -0
  497. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2c44200f.js.map +1 -0
  498. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_56f4f121.js +4 -0
  499. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_56f4f121.js.map +1 -0
  500. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_77436e06.js +4 -0
  501. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_77436e06.js.map +1 -0
  502. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_b9bb0443.js +4 -0
  503. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_b9bb0443.js.map +1 -0
  504. package/web/.next/server/chunks/ssr/744ca_web_app_(dashboard)_repository_[repositoryId]_[tab]_page_tsx_2e9a3025._.js +3 -0
  505. package/web/.next/server/chunks/ssr/744ca_web_app_(dashboard)_repository_[repositoryId]_[tab]_page_tsx_2e9a3025._.js.map +1 -0
  506. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  507. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  508. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +7 -0
  509. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -0
  510. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_4b319ae6._.js +3 -0
  511. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_4b319ae6._.js.map +1 -0
  512. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js +1 -1
  513. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js.map +1 -1
  514. package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +4 -0
  515. package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -0
  516. package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +4 -0
  517. package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js.map +1 -0
  518. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  519. package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +4 -0
  520. package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -0
  521. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +4 -0
  522. package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -0
  523. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
  524. package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
  525. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +3 -0
  526. package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js.map +1 -0
  527. package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +4 -0
  528. package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -0
  529. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +4 -0
  530. package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js.map +1 -0
  531. package/web/.next/server/chunks/ssr/[root-of-the-server]__b14946f5._.js +2 -2
  532. package/web/.next/server/chunks/ssr/[root-of-the-server]__b8d4bd27._.js +3 -0
  533. package/web/.next/server/chunks/ssr/[root-of-the-server]__b8d4bd27._.js.map +1 -0
  534. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
  535. package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
  536. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +4 -0
  537. package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -0
  538. package/web/.next/server/chunks/ssr/[root-of-the-server]__e91ffd5e._.js +7 -0
  539. package/web/.next/server/chunks/ssr/[root-of-the-server]__e91ffd5e._.js.map +1 -0
  540. package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +4 -0
  541. package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -0
  542. package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js +3 -0
  543. package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js.map +1 -0
  544. package/web/.next/server/chunks/ssr/{_2aa1f61e._.js → _0454e1de._.js} +3 -3
  545. package/web/.next/server/chunks/ssr/_0454e1de._.js.map +1 -0
  546. package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
  547. package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
  548. package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
  549. package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
  550. package/web/.next/server/chunks/ssr/_3a0b989f._.js +6 -0
  551. package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -0
  552. package/web/.next/server/chunks/ssr/{_6c7faa01._.js → _507a8382._.js} +2 -2
  553. package/web/.next/server/chunks/ssr/_507a8382._.js.map +1 -0
  554. package/web/.next/server/chunks/ssr/_56b9d60f._.js +3 -0
  555. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -0
  556. package/web/.next/server/chunks/ssr/_5f69c13f._.js +4 -0
  557. package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +1 -0
  558. package/web/.next/server/chunks/ssr/_78ff6f1d._.js +3 -0
  559. package/web/.next/server/chunks/ssr/_78ff6f1d._.js.map +1 -0
  560. package/web/.next/server/chunks/ssr/_7c5b97c6._.js +4 -0
  561. package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -0
  562. package/web/.next/server/chunks/ssr/_8219712a._.js +3 -0
  563. package/web/.next/server/chunks/ssr/_8219712a._.js.map +1 -0
  564. package/web/.next/server/chunks/ssr/_82c57f10._.js +4 -0
  565. package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -0
  566. package/web/.next/server/chunks/ssr/_895c848c._.js +3 -0
  567. package/web/.next/server/chunks/ssr/_895c848c._.js.map +1 -0
  568. package/web/.next/server/chunks/ssr/{_0020fddd._.js → _8b57edb8._.js} +2 -2
  569. package/web/.next/server/chunks/ssr/_8b57edb8._.js.map +1 -0
  570. package/web/.next/server/chunks/ssr/_8d733ce4._.js +3 -0
  571. package/web/.next/server/chunks/ssr/_8d733ce4._.js.map +1 -0
  572. package/web/.next/server/chunks/ssr/{_6256a985._.js → _9495d50b._.js} +3 -3
  573. package/web/.next/server/chunks/ssr/{_6256a985._.js.map → _9495d50b._.js.map} +1 -1
  574. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +4 -0
  575. package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -0
  576. package/web/.next/server/chunks/ssr/_ac4a3873._.js +3 -0
  577. package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -0
  578. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +4 -0
  579. package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -0
  580. package/web/.next/server/chunks/ssr/_cb5a021e._.js +4 -0
  581. package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +1 -0
  582. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +1 -1
  583. package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +1 -1
  584. package/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
  585. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  586. package/web/.next/server/chunks/ssr/_d86175ae._.js +4 -0
  587. package/web/.next/server/chunks/ssr/_d86175ae._.js.map +1 -0
  588. package/web/.next/server/chunks/ssr/_d8bedf13._.js +4 -0
  589. package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +1 -0
  590. package/web/.next/server/chunks/ssr/_e9a73a63._.js +9 -0
  591. package/web/.next/server/chunks/ssr/_e9a73a63._.js.map +1 -0
  592. package/web/.next/server/chunks/ssr/{_4093a637._.js → _f5073cd1._.js} +2 -2
  593. package/web/.next/server/chunks/ssr/_f5073cd1._.js.map +1 -0
  594. package/web/.next/server/chunks/ssr/_fa7efce3._.js +6 -0
  595. package/web/.next/server/chunks/ssr/_fa7efce3._.js.map +1 -0
  596. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  597. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  598. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_global-chat-drawer-client_tsx_158c4b12._.js +3 -0
  599. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_global-chat-drawer-client_tsx_158c4b12._.js.map +1 -0
  600. package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js +3 -0
  601. package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js.map +1 -0
  602. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +3 -0
  603. package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js.map +1 -0
  604. package/web/.next/server/chunks/ssr/src_presentation_web_324a47da._.js +3 -0
  605. package/web/.next/server/chunks/ssr/src_presentation_web_324a47da._.js.map +1 -0
  606. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +3 -0
  607. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -0
  608. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +3 -0
  609. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -0
  610. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_chat_page_tsx_85327270._.js +3 -0
  611. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_chat_page_tsx_85327270._.js.map +1 -0
  612. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
  613. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  614. package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +3 -0
  615. package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js.map +1 -0
  616. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  617. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  618. package/web/.next/server/middleware-build-manifest.js +3 -3
  619. package/web/.next/server/pages/500.html +2 -2
  620. package/web/.next/server/server-reference-manifest.js +1 -1
  621. package/web/.next/server/server-reference-manifest.json +1346 -562
  622. package/web/.next/static/chunks/035fae40bf0ed469.js +1 -0
  623. package/web/.next/static/chunks/0b75bb9e9550073c.js +1 -0
  624. package/web/.next/static/chunks/0c38793438b8c038.js +1 -0
  625. package/web/.next/static/chunks/11091b676d1b3bd4.js +1 -0
  626. package/web/.next/static/chunks/1e472a57005aa6ba.js +1 -0
  627. package/web/.next/static/chunks/211a4b7af388252d.js +1 -0
  628. package/web/.next/static/chunks/22c459f1877b1e4f.js +1 -0
  629. package/web/.next/static/chunks/2354d39c63978576.js +1 -0
  630. package/web/.next/static/chunks/358f58043189b539.js +3 -0
  631. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +1 -0
  632. package/web/.next/static/chunks/4a40a849f6ba6c6f.js +5 -0
  633. package/web/.next/static/chunks/4b2c4a5c35ebb70d.js +1 -0
  634. package/web/.next/static/chunks/5ae60a052ab5f437.js +5 -0
  635. package/web/.next/static/chunks/6bf85f5937c714b5.js +1 -0
  636. package/web/.next/static/chunks/6dba47d604ecee1e.js +7 -0
  637. package/web/.next/static/chunks/735012b8a096013d.js +1 -0
  638. package/web/.next/static/chunks/{1ba116f1756fed5e.js → 7564b97f874a385f.js} +2 -2
  639. package/web/.next/static/chunks/8ba1c07ef18b15a9.js +1 -0
  640. package/web/.next/static/chunks/b4cde06eff374c59.js +5 -0
  641. package/web/.next/static/chunks/c86594475dcb03d5.css +1 -0
  642. package/web/.next/static/chunks/ccb54cbadfef1316.js +1 -0
  643. package/web/.next/static/chunks/cd54b758f58061d0.js +1 -0
  644. package/web/.next/static/chunks/{4b013b6f4afce0a6.js → cfa3f3734e78d38d.js} +1 -1
  645. package/web/.next/static/chunks/{cfe4dc9904fcfddb.js → d0e04c4bd51d2553.js} +1 -1
  646. package/web/.next/static/chunks/{turbopack-c2d183e05f30c7dc.js → turbopack-432ef324fc27240c.js} +1 -1
  647. package/web/package.json +7 -2
  648. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +0 -3
  649. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +0 -1
  650. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js +0 -3
  651. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js.map +0 -1
  652. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js +0 -4
  653. package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js.map +0 -1
  654. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +0 -4
  655. package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +0 -1
  656. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +0 -4
  657. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js.map +0 -1
  658. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +0 -4
  659. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +0 -1
  660. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +0 -4
  661. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +0 -1
  662. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -7
  663. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
  664. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +0 -4
  665. package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +0 -1
  666. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +0 -3
  667. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +0 -1
  668. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +0 -4
  669. package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +0 -1
  670. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js +0 -3
  671. package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +0 -1
  672. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +0 -4
  673. package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +0 -1
  674. package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
  675. package/web/.next/server/chunks/ssr/_01046927._.js +0 -9
  676. package/web/.next/server/chunks/ssr/_01046927._.js.map +0 -1
  677. package/web/.next/server/chunks/ssr/_0b2cac86._.js +0 -3
  678. package/web/.next/server/chunks/ssr/_0b2cac86._.js.map +0 -1
  679. package/web/.next/server/chunks/ssr/_0c473fef._.js +0 -6
  680. package/web/.next/server/chunks/ssr/_0c473fef._.js.map +0 -1
  681. package/web/.next/server/chunks/ssr/_1b719e7f._.js +0 -4
  682. package/web/.next/server/chunks/ssr/_1b719e7f._.js.map +0 -1
  683. package/web/.next/server/chunks/ssr/_2aa1f61e._.js.map +0 -1
  684. package/web/.next/server/chunks/ssr/_37e8548b._.js +0 -4
  685. package/web/.next/server/chunks/ssr/_37e8548b._.js.map +0 -1
  686. package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
  687. package/web/.next/server/chunks/ssr/_55d763e2._.js +0 -4
  688. package/web/.next/server/chunks/ssr/_55d763e2._.js.map +0 -1
  689. package/web/.next/server/chunks/ssr/_6c7faa01._.js.map +0 -1
  690. package/web/.next/server/chunks/ssr/_8fcc39d4._.js +0 -3
  691. package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +0 -1
  692. package/web/.next/server/chunks/ssr/_b71645b4._.js +0 -4
  693. package/web/.next/server/chunks/ssr/_b71645b4._.js.map +0 -1
  694. package/web/.next/server/chunks/ssr/_d8575088._.js +0 -3
  695. package/web/.next/server/chunks/ssr/_d8575088._.js.map +0 -1
  696. package/web/.next/server/chunks/ssr/_e9e9ed20._.js +0 -6
  697. package/web/.next/server/chunks/ssr/_e9e9ed20._.js.map +0 -1
  698. package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js +0 -3
  699. package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js.map +0 -1
  700. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +0 -3
  701. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +0 -1
  702. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +0 -3
  703. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +0 -1
  704. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
  705. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
  706. package/web/.next/server/chunks/ssr/src_presentation_web_f6e481b8._.js +0 -3
  707. package/web/.next/server/chunks/ssr/src_presentation_web_f6e481b8._.js.map +0 -1
  708. package/web/.next/static/chunks/08baac5434d9528e.js +0 -13
  709. package/web/.next/static/chunks/16966906cfa77db6.js +0 -5
  710. package/web/.next/static/chunks/24da1cc4c8a65e26.js +0 -1
  711. package/web/.next/static/chunks/36d9607f2209cd84.js +0 -1
  712. package/web/.next/static/chunks/46117e4b43552316.js +0 -1
  713. package/web/.next/static/chunks/49057cf8cd37e262.js +0 -1
  714. package/web/.next/static/chunks/4cec255f2754e5ec.js +0 -1
  715. package/web/.next/static/chunks/530d578f066ee9ad.js +0 -1
  716. package/web/.next/static/chunks/5ff8cd236a52ed3d.js +0 -1
  717. package/web/.next/static/chunks/601d93593f5f664f.js +0 -1
  718. package/web/.next/static/chunks/7089c5c993a8debb.js +0 -1
  719. package/web/.next/static/chunks/7a0118240b58924a.js +0 -1
  720. package/web/.next/static/chunks/903d3357abf9b52c.js +0 -1
  721. package/web/.next/static/chunks/9b8678597fa1db84.css +0 -1
  722. package/web/.next/static/chunks/b70dd4985a814b27.js +0 -1
  723. package/web/.next/static/chunks/e4a7c6ef8a3e6fa0.js +0 -1
  724. package/web/.next/static/chunks/f66c996402a430f5.js +0 -1
  725. /package/web/.next/static/{RCXQqSnwzdmA7_70mFW0K → cRfpZzgvy54tlmdKZEXb_}/_buildManifest.js +0 -0
  726. /package/web/.next/static/{RCXQqSnwzdmA7_70mFW0K → cRfpZzgvy54tlmdKZEXb_}/_clientMiddlewareManifest.json +0 -0
  727. /package/web/.next/static/{RCXQqSnwzdmA7_70mFW0K → cRfpZzgvy54tlmdKZEXb_}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/components/ui/scroll-area.tsx","../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx","../../../../../../../src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx","../../../../../../../src/presentation/web/hooks/use-npm-version-check.ts","../../../../../../../src/presentation/web/hooks/use-cli-upgrade.ts","../../../../../../../src/presentation/web/components/common/version-badge/version-badge.tsx","../../../../../../../src/presentation/web/components/common/elapsed-time/elapsed-time.tsx","../../../../../../../src/presentation/web/components/common/feature-status-config.ts","../../../../../../../src/presentation/web/components/common/feature-list-item/feature-list-item.tsx","../../../../../../../src/presentation/web/hooks/useTheme.ts","../../../../../../../src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.tsx","../../../../../../../src/presentation/web/hooks/use-deferred-mount.ts","../../../../../../../src/presentation/web/hooks/use-version.ts","../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx","../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx","../../../../../../../src/presentation/web/components/common/github-import-dialog/github-url-input.tsx","../../../../../../../src/presentation/web/app/actions/data%3Ad292e2%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/github-import-dialog/github-repo-browser.tsx","../../../../../../../src/presentation/web/app/actions/data%3A37e2dd%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx","../../../../../../../src/presentation/web/components/common/github-import-dialog/github-import-dialog.tsx","../../../../../../../src/presentation/web/hooks/use-notifications.ts","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-scroll-area%401.2.10_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.10__%40types_ba0b3d60c668755d5c2d6349c8477ebb/node_modules/%40radix-ui/react-scroll-area/dist/index.mjs","../../../../../../../src/presentation/web/lib/compare-versions.ts","../../../../../../../src/presentation/web/components/common/shep-logo/shep-logo.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/lock.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/sun.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/grip-vertical.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/volume-off.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/minimize-2.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/house.ts","../../../../../../../src/presentation/web/types/theme.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/volume-2.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/settings.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/moon.ts","../../../../../../../src/presentation/web/components/common/feature-status-group/feature-status-group.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-scroll-area%401.2.10_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.10__%40types_ba0b3d60c668755d5c2d6349c8477ebb/node_modules/%40radix-ui/react-scroll-area/src/use-state-machine.ts","../../../../../../../src/presentation/web/components/ui/sonner.tsx","../../../../../../../node_modules/.pnpm/%40tanstack%2Bquery-core%405.95.1/node_modules/%40tanstack/query-core/build/modern/queryClient.js","../../../../../../../src/presentation/web/components/providers/query-provider.tsx","../../../../../../../node_modules/.pnpm/%40tanstack%2Bquery-core%405.95.1/node_modules/%40tanstack/query-core/build/modern/mutationCache.js","../../../../../../../node_modules/.pnpm/%40tanstack%2Bquery-core%405.95.1/node_modules/%40tanstack/query-core/build/modern/queryCache.js","../../../../../../../node_modules/.pnpm/%40tanstack%2Bquery-core%405.95.1/node_modules/%40tanstack/query-core/build/modern/infiniteQueryBehavior.js"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn('relative', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&>div]:block!\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none p-px transition-colors select-none',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-border relative flex-1 rounded-full\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n","'use client';\n\nimport Link from 'next/link';\nimport type { Route } from 'next';\nimport type { LucideIcon } from 'lucide-react';\nimport { SidebarMenuItem, SidebarMenuButton } from '@/components/ui/sidebar';\nimport { useSoundAction } from '@/hooks/use-sound-action';\n\nexport interface SidebarNavItemProps {\n icon: LucideIcon;\n label: string;\n href: string;\n active?: boolean;\n}\n\nexport function SidebarNavItem({ icon: Icon, label, href, active = false }: SidebarNavItemProps) {\n const navigateSound = useSoundAction('navigate');\n\n return (\n <SidebarMenuItem data-testid=\"sidebar-nav-item\">\n <SidebarMenuButton asChild isActive={active} tooltip={label}>\n <Link href={href as Route} onClick={() => navigateSound.play()}>\n <Icon />\n <span>{label}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n}\n","'use client';\n\nimport { PanelLeft } from 'lucide-react';\nimport { useSidebar } from '@/components/ui/sidebar';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\nimport { useSoundAction } from '@/hooks/use-sound-action';\n\nexport interface SidebarCollapseToggleProps {\n className?: string;\n}\n\nexport function SidebarCollapseToggle({ className }: SidebarCollapseToggleProps) {\n const { toggleSidebar, open } = useSidebar();\n const expandSound = useSoundAction('expand');\n const collapseSound = useSoundAction('collapse');\n const label = open ? 'Collapse sidebar' : 'Expand sidebar';\n\n const handleClick = () => {\n // Play sound based on current state (before toggle)\n if (open) {\n collapseSound.play();\n } else {\n expandSound.play();\n }\n toggleSidebar();\n };\n\n return (\n <div className={cn('flex', className)}>\n <Button\n data-testid=\"sidebar-collapse-toggle\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 cursor-pointer group-data-[collapsible=icon]:size-8!\"\n onClick={handleClick}\n aria-label={label}\n >\n <PanelLeft className=\"size-4\" />\n </Button>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { compareVersions } from '@/lib/compare-versions';\n\nexport interface NpmVersionCheckResult {\n /** Latest version on npm, or null if not yet fetched / error */\n latest: string | null;\n /** Whether a newer version is available on npm */\n updateAvailable: boolean;\n /** True while the fetch is in progress */\n loading: boolean;\n}\n\nexport function useNpmVersionCheck(currentVersion: string): NpmVersionCheckResult {\n const [latest, setLatest] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n\n async function check() {\n try {\n const res = await fetch('/api/npm-version');\n if (!res.ok) return;\n const data = (await res.json()) as { latest?: string | null };\n if (!cancelled && data.latest) {\n setLatest(data.latest);\n }\n } catch {\n // Silently fail — version check is non-critical\n } finally {\n if (!cancelled) setLoading(false);\n }\n }\n\n check();\n return () => {\n cancelled = true;\n };\n }, []);\n\n const updateAvailable = latest !== null && compareVersions(latest, currentVersion) > 0;\n\n return { latest, updateAvailable, loading };\n}\n","'use client';\n\nimport { useCallback, useRef, useState } from 'react';\n\nexport type UpgradeStatus =\n | 'idle'\n | 'upgrading'\n | 'restarting'\n | 'upgraded'\n | 'up-to-date'\n | 'error';\n\n/** How often to poll the server during restart (ms). */\nconst RESTART_POLL_MS = 500;\n/** Maximum time to wait for the server to come back after restart (ms). */\nconst RESTART_TIMEOUT_MS = 30_000;\n\nexport interface CliUpgradeState {\n status: UpgradeStatus;\n output: string;\n errorMessage?: string;\n}\n\nexport interface CliUpgradeActions {\n startUpgrade: () => void;\n}\n\n/**\n * Poll the server until it responds, then reload the page.\n */\nfunction waitForServerAndReload(timeoutMs: number, pollMs: number): void {\n const deadline = Date.now() + timeoutMs;\n\n const poll = () => {\n if (Date.now() > deadline) return;\n\n fetch('/api/version', { method: 'GET', cache: 'no-store' })\n .then((res) => {\n if (res.ok) {\n window.location.reload();\n } else {\n setTimeout(poll, pollMs);\n }\n })\n .catch(() => {\n setTimeout(poll, pollMs);\n });\n };\n\n // Brief initial delay to let the old server shut down\n setTimeout(poll, pollMs);\n}\n\nexport function useCliUpgrade(): CliUpgradeState & CliUpgradeActions {\n const [status, setStatus] = useState<UpgradeStatus>('idle');\n const [output, setOutput] = useState('');\n const [errorMessage, setErrorMessage] = useState<string | undefined>();\n const abortRef = useRef<AbortController | null>(null);\n const restartingRef = useRef(false);\n\n const startUpgrade = useCallback(() => {\n if (status === 'upgrading' || status === 'restarting') return;\n\n setStatus('upgrading');\n setOutput('');\n setErrorMessage(undefined);\n restartingRef.current = false;\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n fetch('/api/cli-upgrade', { method: 'POST', signal: controller.signal })\n .then(async (response) => {\n if (!response.ok || !response.body) {\n setStatus('error');\n setErrorMessage(`Server returned ${response.status}`);\n return;\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (line.startsWith('event: restarting')) {\n restartingRef.current = true;\n setStatus('restarting');\n waitForServerAndReload(RESTART_TIMEOUT_MS, RESTART_POLL_MS);\n continue;\n }\n if (line.startsWith('event: done')) {\n // Next data line contains the final result\n continue;\n }\n if (line.startsWith('data: ')) {\n const payload = line.slice(6);\n // Try to parse as final JSON result\n try {\n const result = JSON.parse(payload) as {\n status: string;\n errorMessage?: string;\n };\n if (result.status === 'upgraded') {\n setStatus('upgraded');\n } else if (result.status === 'up-to-date') {\n setStatus('up-to-date');\n } else if (result.status === 'error') {\n setStatus('error');\n setErrorMessage(result.errorMessage);\n }\n } catch {\n // Regular output line\n setOutput((prev) => prev + payload);\n }\n }\n }\n }\n })\n .catch((err: unknown) => {\n // If we're in restarting state, the connection dropping is expected\n if (restartingRef.current) return;\n if (err instanceof DOMException && err.name === 'AbortError') return;\n setStatus('error');\n setErrorMessage(err instanceof Error ? err.message : 'Upgrade failed');\n });\n\n return () => {\n controller.abort();\n };\n }, [status]);\n\n return { status, output, errorMessage, startUpgrade };\n}\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { useNpmVersionCheck } from '@/hooks/use-npm-version-check';\nimport { useCliUpgrade } from '@/hooks/use-cli-upgrade';\n\nexport interface VersionBadgeProps {\n version: string;\n branch?: string;\n commitHash?: string;\n isDev?: boolean;\n packageName?: string;\n description?: string;\n instancePath?: string;\n}\n\nexport function VersionBadge({\n version,\n branch,\n commitHash,\n isDev = false,\n packageName = '@shepai/cli',\n description,\n instancePath,\n}: VersionBadgeProps) {\n const shortHash = commitHash?.slice(0, 7);\n const { latest, updateAvailable } = useNpmVersionCheck(version);\n const { status: upgradeStatus, startUpgrade } = useCliUpgrade();\n\n // In dev mode show \"1.92.2-dev\", in production show \"v1.92.2\"\n const displayVersion = isDev ? `${version}-dev` : `v${version}`;\n\n const isUpgrading = upgradeStatus === 'upgrading';\n const isRestarting = upgradeStatus === 'restarting';\n const didUpgrade = upgradeStatus === 'upgraded';\n const upgradeError = upgradeStatus === 'error';\n\n return (\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className=\"text-muted-foreground/80 hover:text-muted-foreground relative cursor-default text-[11px] leading-tight transition-colors\"\n data-testid=\"version-label\"\n >\n {displayVersion}\n {updateAvailable && !didUpgrade && !isRestarting ? (\n <span\n className=\"absolute -top-0.5 -right-1.5 size-1.5 rounded-full bg-emerald-400\"\n data-testid=\"update-dot\"\n />\n ) : null}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"max-w-[280px] space-y-1 p-3 text-left\">\n <div className=\"mb-1.5 text-xs font-semibold\">{packageName}</div>\n {description ? (\n <div className=\"text-[10px] leading-snug opacity-70\">{description}</div>\n ) : null}\n <div className=\"border-t border-white/10 pt-1.5\">\n <Row label=\"Version\" value={displayVersion} />\n {isDev && branch ? <Row label=\"Branch\" value={branch} /> : null}\n {isDev && shortHash ? <Row label=\"Commit\" value={shortHash} mono /> : null}\n {isDev && instancePath ? <Row label=\"Path\" value={instancePath} mono /> : null}\n {latest ? (\n <Row label=\"Latest\" value={`v${latest}`} highlight={updateAvailable} />\n ) : null}\n </div>\n {isRestarting ? (\n <div className=\"border-t border-white/10 pt-1.5\">\n <span\n className=\"text-[10px] font-medium text-emerald-400\"\n data-testid=\"upgrade-restarting\"\n >\n Restarting...\n </span>\n </div>\n ) : didUpgrade ? (\n <div className=\"border-t border-white/10 pt-1.5\">\n <span\n className=\"text-[10px] font-medium text-emerald-400\"\n data-testid=\"upgrade-success\"\n >\n Upgraded successfully\n </span>\n </div>\n ) : upgradeError ? (\n <div className=\"border-t border-white/10 pt-1.5\">\n <span className=\"text-[10px] font-medium text-red-400\" data-testid=\"upgrade-error\">\n Upgrade failed\n </span>\n </div>\n ) : updateAvailable ? (\n <div className=\"border-t border-white/10 pt-1.5\">\n <button\n type=\"button\"\n onClick={startUpgrade}\n disabled={isUpgrading || isRestarting}\n className=\"inline-flex items-center gap-1 text-[10px] font-medium text-emerald-400 transition-colors hover:text-emerald-300 disabled:opacity-50\"\n data-testid=\"upgrade-button\"\n >\n {isUpgrading\n ? 'Upgrading...'\n : isRestarting\n ? 'Restarting...'\n : `Upgrade to v${latest}`}\n </button>\n </div>\n ) : null}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction Row({\n label,\n value,\n highlight,\n mono,\n}: {\n label: string;\n value: string;\n highlight?: boolean;\n mono?: boolean;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-4 text-[10px]\">\n <span className=\"opacity-60\">{label}</span>\n <span\n className={[\n highlight ? 'font-medium text-emerald-400' : '',\n mono || !highlight ? 'font-mono' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {value}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useEffect, startTransition } from 'react';\n\ninterface ElapsedTimeProps {\n startedAt: number;\n}\n\nexport function formatElapsed(elapsedMs: number): string {\n const totalSeconds = Math.floor(elapsedMs / 1000);\n\n if (totalSeconds >= 3600) {\n const hours = Math.floor(totalSeconds / 3600);\n return `${hours}h`;\n }\n\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\n}\n\nexport function ElapsedTime({ startedAt }: ElapsedTimeProps) {\n const [elapsed, setElapsed] = useState(() => Date.now() - startedAt);\n\n useEffect(() => {\n const id = setInterval(() => {\n startTransition(() => setElapsed(Date.now() - startedAt));\n }, 1000);\n\n return () => clearInterval(id);\n }, [startedAt]);\n\n return (\n <span data-testid=\"elapsed-time\" className=\"tabular-nums\">\n {formatElapsed(elapsed)}\n </span>\n );\n}\n","import { CircleAlert, Loader2, CircleCheck, Ban, CircleX, Clock } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\n\nexport type FeatureStatus =\n | 'action-needed'\n | 'in-progress'\n | 'pending'\n | 'blocked'\n | 'error'\n | 'done';\n\nexport interface FeatureStatusConfig {\n icon: LucideIcon;\n iconClass: string;\n bgClass: string;\n label: string;\n}\n\nexport const featureStatusConfig: Record<FeatureStatus, FeatureStatusConfig> = {\n 'action-needed': {\n icon: CircleAlert,\n iconClass: 'text-amber-500',\n bgClass: 'bg-amber-500/10',\n label: 'Action Needed',\n },\n 'in-progress': {\n icon: Loader2,\n iconClass: 'text-blue-500 animate-spin',\n bgClass: 'bg-blue-500/10',\n label: 'In Progress',\n },\n pending: {\n icon: Clock,\n iconClass: 'text-slate-400',\n bgClass: 'bg-slate-400/10',\n label: 'Pending',\n },\n blocked: {\n icon: Ban,\n iconClass: 'text-gray-400',\n bgClass: 'bg-gray-400/10',\n label: 'Blocked',\n },\n error: {\n icon: CircleX,\n iconClass: 'text-red-500',\n bgClass: 'bg-red-500/10',\n label: 'Error',\n },\n done: {\n icon: CircleCheck,\n iconClass: 'text-emerald-500',\n bgClass: 'bg-emerald-500/10',\n label: 'Done',\n },\n};\n\nexport const featureStatusOrder: FeatureStatus[] = [\n 'action-needed',\n 'error',\n 'blocked',\n 'in-progress',\n 'pending',\n 'done',\n];\n","'use client';\n\nimport { SidebarMenuItem, SidebarMenuButton } from '@/components/ui/sidebar';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { ElapsedTime } from '@/components/common/elapsed-time';\nimport { featureStatusConfig } from '@/components/common/feature-status-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\nimport {\n getAgentTypeIcon,\n agentTypeLabels,\n type AgentTypeValue,\n} from '@/components/common/feature-node/agent-type-icons';\nimport { getModelMeta } from '@/lib/model-metadata';\n\nexport interface FeatureListItemProps {\n name: string;\n status: FeatureStatus;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n onClick?: () => void;\n}\n\nexport function FeatureListItem({\n name,\n status,\n startedAt,\n duration,\n agentType,\n modelId,\n onClick,\n}: FeatureListItemProps) {\n const { icon: StatusIcon, iconClass } = featureStatusConfig[status];\n const AgentIcon = agentType ? getAgentTypeIcon(agentType) : null;\n\n return (\n <SidebarMenuItem data-testid=\"feature-list-item\">\n <SidebarMenuButton size=\"sm\" onClick={onClick} tooltip={name} className=\"cursor-pointer\">\n <StatusIcon className={iconClass} />\n <span className=\"flex-1 truncate font-medium\">{name}</span>\n {status === 'in-progress' && startedAt != null ? (\n <span\n data-testid=\"feature-list-item-meta\"\n className=\"text-muted-foreground ml-auto text-xs tabular-nums\"\n >\n <ElapsedTime startedAt={startedAt} />\n </span>\n ) : null}\n {status === 'done' && duration ? (\n <span\n data-testid=\"feature-list-item-meta\"\n className=\"text-muted-foreground ml-auto text-xs tabular-nums\"\n >\n {duration}\n </span>\n ) : null}\n {AgentIcon ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"ml-auto shrink-0\">\n <AgentIcon className=\"h-3.5 w-3.5\" />\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <span className=\"font-medium\">\n {agentTypeLabels[agentType as AgentTypeValue] ?? agentType}\n </span>\n {modelId ? (\n <span className=\"ml-1 opacity-70\">\n · {getModelMeta(modelId).displayName || modelId}\n </span>\n ) : null}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\nimport { type Theme, THEME_STORAGE_KEY } from '@/types/theme';\n\n/**\n * Hook to manage theme state with localStorage persistence\n * and system preference detection.\n */\nexport function useTheme() {\n const [theme, setTheme] = useState<Theme>('system');\n const [resolvedTheme, setResolvedTheme] = useState<'light' | 'dark'>('light');\n\n // Get the system preference\n const getSystemTheme = useCallback((): 'light' | 'dark' => {\n if (typeof window === 'undefined') {\n return 'light';\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }, []);\n\n // Resolve the actual theme based on current setting\n const resolveTheme = useCallback(\n (currentTheme: Theme): 'light' | 'dark' => {\n if (currentTheme === 'system') {\n return getSystemTheme();\n }\n return currentTheme;\n },\n [getSystemTheme]\n );\n\n // Apply theme to document\n const applyTheme = useCallback((resolved: 'light' | 'dark') => {\n if (typeof document === 'undefined') {\n return;\n }\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(resolved);\n setResolvedTheme(resolved);\n }, []);\n\n // Set theme and persist to localStorage\n const setThemeAndPersist = useCallback(\n (newTheme: Theme) => {\n setTheme(newTheme);\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(THEME_STORAGE_KEY, newTheme);\n }\n const resolved = resolveTheme(newTheme);\n applyTheme(resolved);\n },\n [resolveTheme, applyTheme]\n );\n\n // Initialize theme from localStorage or system preference\n useEffect(() => {\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as Theme | null;\n const initialTheme = stored ?? 'system';\n setTheme(initialTheme);\n const resolved = resolveTheme(initialTheme);\n applyTheme(resolved);\n }, [resolveTheme, applyTheme]);\n\n // Listen for system preference changes\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = () => {\n if (theme === 'system') {\n const resolved = resolveTheme('system');\n applyTheme(resolved);\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme, resolveTheme, applyTheme]);\n\n return {\n theme,\n resolvedTheme,\n setTheme: setThemeAndPersist,\n };\n}\n","'use client';\n\nimport { SidebarGroup } from '@/components/ui/sidebar';\nimport { cn } from '@/lib/utils';\n\nexport interface SidebarSectionHeaderProps {\n label: string;\n className?: string;\n}\n\nexport function SidebarSectionHeader({ label, className }: SidebarSectionHeaderProps) {\n return (\n <SidebarGroup data-testid=\"sidebar-section-header\" className={cn('px-2 py-1', className)}>\n <div className=\"text-sidebar-foreground flex h-7 w-full shrink-0 items-center px-2 text-sm font-medium\">\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </div>\n </SidebarGroup>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\n\n/**\n * Defers mount/unmount of content to allow opacity transitions.\n * When expanding: mounts immediately, then sets visible on next frame.\n * When collapsing: hides immediately, then unmounts after `ms` delay.\n */\nexport function useDeferredMount(isCollapsed: boolean, ms: number) {\n const [mounted, setMounted] = useState(!isCollapsed);\n const [visible, setVisible] = useState(!isCollapsed);\n\n useEffect(() => {\n if (!isCollapsed) {\n setMounted(true);\n // delay visibility by one frame so the element mounts at opacity-0 first\n const raf = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(raf);\n }\n setVisible(false);\n const t = window.setTimeout(() => setMounted(false), ms);\n return () => window.clearTimeout(t);\n }, [isCollapsed, ms]);\n\n return { mounted, visible };\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nexport interface VersionData {\n version: string;\n packageName: string;\n description: string;\n branch: string;\n commitHash: string;\n instancePath: string;\n isDev: boolean;\n}\n\nconst DEFAULT_VERSION_DATA: VersionData = {\n version: 'unknown',\n packageName: '@shepai/cli',\n description: 'Autonomous AI Native SDLC Platform',\n branch: '',\n commitHash: '',\n instancePath: '',\n isDev: false,\n};\n\n/**\n * Fetches runtime version info from the server API.\n *\n * NEXT_PUBLIC_* env vars are inlined at build time for client components,\n * so they can show a stale version after a CLI upgrade. This hook fetches\n * the version from a server-side API route that reads the env vars at runtime.\n */\nexport function useVersion(): VersionData {\n const [data, setData] = useState<VersionData>(DEFAULT_VERSION_DATA);\n\n useEffect(() => {\n let cancelled = false;\n\n async function fetchVersion() {\n try {\n const res = await fetch('/api/version');\n if (!res.ok) return;\n const json = (await res.json()) as VersionData;\n if (!cancelled) {\n setData(json);\n }\n } catch {\n // Version fetch is non-critical — keep defaults\n }\n }\n\n fetchVersion();\n return () => {\n cancelled = true;\n };\n }, []);\n\n return data;\n}\n","'use client';\n\nimport { usePathname } from 'next/navigation';\nimport { Home, Moon, Sun, Volume2, VolumeOff, Wrench, Puzzle, Settings } from 'lucide-react';\nimport {\n Sidebar,\n SidebarHeader,\n SidebarContent,\n SidebarFooter,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarRail,\n useSidebar,\n} from '@/components/ui/sidebar';\n\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport { SidebarNavItem } from '@/components/common/sidebar-nav-item';\nimport { SidebarCollapseToggle } from '@/components/common/sidebar-collapse-toggle';\nimport { ShepLogo } from '@/components/common/shep-logo';\nimport { VersionBadge } from '@/components/common/version-badge';\nimport { FeatureListItem } from '@/components/common/feature-list-item';\nimport { useSoundEnabled } from '@/hooks/use-sound-enabled';\nimport { useTheme } from '@/hooks/useTheme';\nimport { useSoundAction } from '@/hooks/use-sound-action';\nimport { FeatureStatusGroup } from '@/components/common/feature-status-group';\nimport { SidebarSectionHeader } from '@/components/common/sidebar-section-header';\nimport { featureStatusConfig, featureStatusOrder } from '@/components/common/feature-status-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { useDeferredMount } from '@/hooks/use-deferred-mount';\nimport { useVersion } from '@/hooks/use-version';\nimport type { FeatureFlagsState } from '@/lib/feature-flags';\n\nexport interface FeatureItem {\n featureId: string;\n name: string;\n status: FeatureStatus;\n startedAt?: number;\n duration?: string;\n agentType?: string;\n modelId?: string;\n}\n\nexport interface AppSidebarProps {\n features: FeatureItem[];\n featureFlags: FeatureFlagsState;\n\n onFeatureClick?: (featureId: string) => void;\n}\n\nexport function AppSidebar({\n features,\n featureFlags,\n\n onFeatureClick,\n}: AppSidebarProps) {\n const pathname = usePathname();\n const { state } = useSidebar();\n const collapsed = state === 'collapsed';\n const { mounted: showExpanded, visible: expandedVisible } = useDeferredMount(collapsed, 200);\n const versionData = useVersion();\n const { enabled: soundEnabled, toggle: toggleSound } = useSoundEnabled();\n const { resolvedTheme, theme, setTheme } = useTheme();\n const toggleOnSound = useSoundAction('toggle-on');\n const toggleOffSound = useSoundAction('toggle-off');\n const clickSound = useSoundAction('navigate');\n\n const grouped = featureStatusOrder.map((key) => {\n const { label } = featureStatusConfig[key];\n const items = features.filter((f) => f.status === key);\n return { key, label, items };\n });\n\n return (\n <Sidebar data-testid=\"app-sidebar\" data-no-drawer-close collapsible=\"icon\">\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <div className=\"flex h-8 items-center group-data-[collapsible=icon]:justify-center\">\n {showExpanded ? (\n <div\n className={[\n 'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',\n 'transition-opacity duration-200 ease-out',\n expandedVisible ? 'opacity-100' : 'opacity-0',\n ].join(' ')}\n aria-hidden={!expandedVisible}\n >\n <ShepLogo\n className=\"shrink-0\"\n size={20}\n variant={versionData.isDev ? 'dev' : 'default'}\n />\n <span className=\"truncate text-sm font-semibold tracking-tight\">Shep</span>\n <VersionBadge\n version={versionData.version}\n branch={versionData.branch || undefined}\n commitHash={versionData.commitHash || undefined}\n isDev={versionData.isDev}\n packageName={versionData.packageName}\n description={versionData.description}\n instancePath={versionData.instancePath || undefined}\n />\n </div>\n ) : null}\n <SidebarCollapseToggle className=\"shrink-0 transition-all duration-200\" />\n </div>\n </SidebarMenuItem>\n\n <SidebarNavItem icon={Home} label=\"Control Center\" href=\"/\" active={pathname === '/'} />\n <SidebarNavItem\n icon={Wrench}\n label=\"Tools\"\n href=\"/tools\"\n active={pathname === '/tools'}\n />\n {featureFlags.skills ? (\n <SidebarNavItem\n icon={Puzzle}\n label=\"Skills\"\n href=\"/skills\"\n active={pathname === '/skills'}\n />\n ) : null}\n <SidebarNavItem\n icon={Settings}\n label=\"Settings\"\n href=\"/settings\"\n active={pathname === '/settings'}\n />\n </SidebarMenu>\n </SidebarHeader>\n\n <SidebarContent>\n {showExpanded ? (\n <div\n className={[\n 'flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out',\n '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',\n expandedVisible ? 'opacity-100' : 'opacity-0',\n ].join(' ')}\n >\n <SidebarSectionHeader label=\"Features\" />\n <ScrollArea className=\"min-h-0 flex-1\">\n {grouped.map(({ key, label, items }) =>\n items.length > 0 ? (\n <FeatureStatusGroup key={key} label={label} count={items.length}>\n {items.map((feature) => (\n <FeatureListItem\n key={feature.featureId}\n name={feature.name}\n status={feature.status}\n startedAt={feature.startedAt}\n duration={feature.duration}\n agentType={feature.agentType}\n modelId={feature.modelId}\n onClick={\n onFeatureClick ? () => onFeatureClick(feature.featureId) : undefined\n }\n />\n ))}\n </FeatureStatusGroup>\n ) : null\n )}\n </ScrollArea>\n </div>\n ) : null}\n </SidebarContent>\n\n <SidebarFooter className=\"border-t p-2\">\n <SidebarMenu>\n <SidebarMenuItem>\n <div className=\"flex items-center gap-1\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarMenuButton\n className=\"w-auto flex-none\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n const currentResolved = theme === 'system' ? resolvedTheme : theme;\n const goingToDark = currentResolved !== 'dark';\n const newTheme =\n theme === 'system'\n ? resolvedTheme === 'dark'\n ? 'light'\n : 'dark'\n : theme === 'dark'\n ? 'light'\n : 'dark';\n if (goingToDark) {\n toggleOnSound.play();\n } else {\n toggleOffSound.play();\n }\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (!('startViewTransition' in document) || prefersReducedMotion) {\n setTheme(newTheme);\n return;\n }\n document.documentElement.style.setProperty('--x', `${e.clientX}px`);\n document.documentElement.style.setProperty('--y', `${e.clientY}px`);\n (\n document as unknown as { startViewTransition: (cb: () => void) => void }\n ).startViewTransition(() => {\n setTheme(newTheme);\n });\n }}\n aria-label={`Switch to ${resolvedTheme === 'dark' ? 'light' : 'dark'} mode`}\n >\n <Sun className=\"h-4 w-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90\" />\n <Moon className=\"absolute h-4 w-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0\" />\n </SidebarMenuButton>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n {resolvedTheme === 'dark' ? 'Light mode' : 'Dark mode'}\n </TooltipContent>\n </Tooltip>\n {!collapsed && (\n <Tooltip>\n <TooltipTrigger asChild>\n <SidebarMenuButton\n className=\"w-auto flex-none\"\n onClick={() => {\n clickSound.play();\n toggleSound();\n }}\n aria-label={soundEnabled ? 'Mute sounds' : 'Unmute sounds'}\n >\n {soundEnabled ? (\n <Volume2 className=\"h-4 w-4\" />\n ) : (\n <VolumeOff className=\"h-4 w-4\" />\n )}\n </SidebarMenuButton>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n {soundEnabled ? 'Mute sounds' : 'Unmute sounds'}\n </TooltipContent>\n </Tooltip>\n )}\n </TooltipProvider>\n </div>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n\n <SidebarRail />\n </Sidebar>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { MessageSquare, X, Bot, GripVertical, Maximize2, Minimize2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\nimport { ChatTab } from './ChatTab';\nimport { ChatDotIndicator } from './ChatDotIndicator';\nimport { useTurnStatus } from '@/hooks/turn-statuses-provider';\n\n// ── Persistent global chat popup (draggable + resizable) ──────────────────\n\nconst DEFAULT_W = 520;\nconst DEFAULT_H_VH = 70; // percentage of viewport height\nconst MIN_W = 360;\nconst MIN_H = 300;\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface Size {\n w: number;\n h: number;\n}\n\nconst STORAGE_KEY = 'shep-global-chat';\n\nfunction loadPersistedState(): { pos: Position | null; size: Size | null } {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return { pos: null, size: null };\n const parsed = JSON.parse(raw);\n let size: Size | null = parsed.size ?? null;\n // Clamp persisted size to minimums — prevents invisible panel from bad state\n if (size && (size.w < MIN_W || size.h < MIN_H)) {\n size = { w: Math.max(MIN_W, size.w), h: Math.max(MIN_H, size.h) };\n }\n return {\n pos: parsed.pos ?? null,\n size,\n };\n } catch {\n return { pos: null, size: null };\n }\n}\n\nfunction persistState(pos: Position | null, size: Size | null) {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify({ pos, size }));\n } catch {\n // Storage full or unavailable — ignore\n }\n}\n\nexport function GlobalChatPopup() {\n const [isOpen, setIsOpen] = useState(false);\n const [hasOpened, setHasOpened] = useState(false);\n const [isMaximized, setIsMaximized] = useState(false);\n const globalChatTurnStatus = useTurnStatus('global');\n\n // Position/size — initialized from localStorage\n // eslint-disable-next-line react/hook-use-state -- wrapped setters below\n const [pos, setPosRaw] = useState<Position | null>(() => loadPersistedState().pos);\n // eslint-disable-next-line react/hook-use-state -- wrapped setters below\n const [size, setSizeRaw] = useState<Size | null>(() => loadPersistedState().size);\n\n // Wrapped setters that also persist\n const setPos = useCallback(\n (v: Position | null | ((prev: Position | null) => Position | null)) => {\n setPosRaw((prev) => {\n const next = typeof v === 'function' ? v(prev) : v;\n // Defer persist to avoid doing it on every mousemove frame\n return next;\n });\n },\n []\n );\n\n const setSize = useCallback((v: Size | null | ((prev: Size | null) => Size | null)) => {\n setSizeRaw((prev) => {\n const next = typeof v === 'function' ? v(prev) : v;\n return next;\n });\n }, []);\n\n const panelRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startPosX: number;\n startPosY: number;\n } | null>(null);\n const resizeRef = useRef<{\n startX: number;\n startY: number;\n startW: number;\n startH: number;\n } | null>(null);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => {\n if (!prev) setHasOpened(true);\n return !prev;\n });\n }, []);\n\n // Store pre-maximize pos/size so we can restore\n const preMaxRef = useRef<{ pos: Position | null; size: Size | null }>({ pos: null, size: null });\n\n const toggleMaximize = useCallback(() => {\n if (!isOpen) {\n setIsOpen(true);\n setHasOpened(true);\n }\n setIsMaximized((prev) => {\n if (!prev) {\n // Entering maximize — save current state\n preMaxRef.current = { pos, size };\n } else {\n // Leaving maximize — restore previous state\n setPos(preMaxRef.current.pos);\n setSize(preMaxRef.current.size);\n }\n return !prev;\n });\n }, [isOpen, pos, size, setPos, setSize]);\n\n // Keyboard shortcuts: Cmd/Ctrl+Shift+K = toggle, Cmd/Ctrl+Shift+M = maximize\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.shiftKey && (e.key === 'k' || e.key === 'K')) {\n e.preventDefault();\n if (isMaximized) setIsMaximized(false);\n toggle();\n // Focus the composer input after panel opens\n requestAnimationFrame(() => {\n setTimeout(() => {\n const input = panelRef.current?.querySelector<HTMLTextAreaElement>('textarea');\n input?.focus();\n }, 100);\n });\n }\n if ((e.metaKey || e.ctrlKey) && e.shiftKey && (e.key === 'm' || e.key === 'M')) {\n e.preventDefault();\n toggleMaximize();\n }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [toggle, toggleMaximize, isMaximized]);\n\n // Persist position/size to localStorage (debounced)\n useEffect(() => {\n const timer = setTimeout(() => persistState(pos, size), 300);\n return () => clearTimeout(timer);\n }, [pos, size]);\n\n /** Clamp position so the header (top 48px) stays within viewport. */\n const clampPos = useCallback((x: number, y: number, w: number): Position => {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const HEADER_H = 48;\n return {\n // Keep at least 100px of width visible horizontally\n x: Math.max(-w + 100, Math.min(x, vw - 100)),\n // Keep header on screen: top >= 0, top <= viewport - header height\n y: Math.max(0, Math.min(y, vh - HEADER_H)),\n };\n }, []);\n\n // ── Drag handling ──────────────────────────────────────────────────────\n const onDragStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const panel = panelRef.current;\n if (!panel) return;\n\n const rect = panel.getBoundingClientRect();\n const currentX = pos?.x ?? rect.left;\n const currentY = pos?.y ?? rect.top;\n\n dragRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startPosX: currentX,\n startPosY: currentY,\n };\n\n const panelW = size?.w ?? rect.width;\n\n const onMove = (ev: MouseEvent) => {\n if (!dragRef.current) return;\n const dx = ev.clientX - dragRef.current.startX;\n const dy = ev.clientY - dragRef.current.startY;\n setPos(clampPos(dragRef.current.startPosX + dx, dragRef.current.startPosY + dy, panelW));\n };\n\n const onUp = () => {\n dragRef.current = null;\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n },\n [pos, size, setPos, clampPos]\n );\n\n // ── Resize handling (from top-right corner) ────────────────────────────\n const onResizeStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const panel = panelRef.current;\n if (!panel) return;\n\n const rect = panel.getBoundingClientRect();\n const startW = size?.w ?? rect.width;\n const startH = size?.h ?? rect.height;\n const startX = e.clientX;\n const startY = e.clientY;\n const startPosY = pos?.y ?? rect.top;\n\n resizeRef.current = { startX, startY, startW, startH };\n\n // Capture position if not set yet\n if (!pos) {\n setPos({ x: rect.left, y: rect.top });\n }\n\n const onMove = (ev: MouseEvent) => {\n if (!resizeRef.current) return;\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n const newW = Math.max(MIN_W, startW + dx);\n const newH = Math.max(MIN_H, startH - dy);\n // Top edge moves with height change, clamped to viewport\n const newY = Math.max(0, startPosY + dy);\n setSize({ w: newW, h: newH });\n setPos((prev) => clampPos(prev?.x ?? rect.left, newY, newW));\n };\n\n const onUp = () => {\n resizeRef.current = null;\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n },\n [size, pos, setPos, setSize, clampPos]\n );\n\n // Reset position/size on close for clean reopen\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setIsMaximized(false);\n }, []);\n\n // Compute panel style — maximized overrides everything\n const panelStyle: React.CSSProperties = isMaximized\n ? {}\n : pos\n ? {\n position: 'fixed',\n left: pos.x,\n top: pos.y,\n width: size?.w ?? DEFAULT_W,\n height: size?.h ?? `${DEFAULT_H_VH}vh`,\n }\n : {\n width: size?.w ?? DEFAULT_W,\n height: size?.h ?? `${DEFAULT_H_VH}vh`,\n };\n\n return (\n <>\n {/* Chat panel */}\n {hasOpened ? (\n <div\n ref={panelRef}\n className={cn(\n isMaximized\n ? 'bg-background fixed inset-0 z-[60] flex flex-col overflow-hidden dark:bg-neutral-900'\n : cn(\n !pos && 'fixed right-8 bottom-24',\n 'z-[60] flex flex-col overflow-hidden rounded-lg',\n 'border-border/60 border dark:border-white/10',\n 'bg-background dark:bg-neutral-900',\n 'shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]'\n ),\n 'transition-opacity duration-300 ease-out',\n isOpen ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0'\n )}\n style={panelStyle}\n >\n {/* Violet accent strip at top */}\n {!isMaximized ? (\n <div className=\"h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent\" />\n ) : null}\n\n {/* Resize handle — top-right corner (hidden when maximized) */}\n {!isMaximized ? (\n <div\n onMouseDown={onResizeStart}\n className=\"absolute top-0 right-0 z-10 h-4 w-4 cursor-ne-resize\"\n />\n ) : null}\n\n {/* Header — draggable when not maximized */}\n <div\n onMouseDown={isMaximized ? undefined : onDragStart}\n className={cn(\n '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]',\n !isMaximized && 'cursor-grab active:cursor-grabbing'\n )}\n >\n <div className=\"from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent\" />\n {!isMaximized ? (\n <GripVertical className=\"text-foreground/15 relative h-3.5 w-3.5 shrink-0\" />\n ) : null}\n <div className=\"relative flex h-5 w-5 items-center justify-center\">\n <Bot className=\"text-foreground/50 h-4 w-4\" />\n </div>\n <div className=\"relative flex items-baseline gap-2\">\n <span className=\"text-foreground/90 text-base font-bold tracking-tight\">Shep</span>\n <span className=\"text-foreground/30 text-xs font-medium tracking-widest uppercase\">\n global\n </span>\n </div>\n <div className=\"relative ml-auto flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={toggleMaximize}\n className=\"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors\"\n title={isMaximized ? 'Restore (⌘⇧M)' : 'Maximize (⌘⇧M)'}\n >\n {isMaximized ? (\n <Minimize2 className=\"h-3.5 w-3.5\" />\n ) : (\n <Maximize2 className=\"h-3.5 w-3.5\" />\n )}\n </button>\n <button\n type=\"button\"\n onClick={handleClose}\n className=\"text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors\"\n title=\"Close (⌘⇧K)\"\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n\n {/* Chat content */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <ChatTab featureId=\"global\" />\n </div>\n\n {/* Resize handle — bottom-right corner (hidden when maximized) */}\n {!isMaximized ? (\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n const panel = panelRef.current;\n if (!panel) return;\n const rect = panel.getBoundingClientRect();\n const startX = e.clientX;\n const startY = e.clientY;\n const startW = size?.w ?? rect.width;\n const startH = size?.h ?? rect.height;\n if (!pos) setPos({ x: rect.left, y: rect.top });\n\n const onMove = (ev: MouseEvent) => {\n const maxH = window.innerHeight - (pos?.y ?? rect.top);\n setSize({\n w: Math.max(MIN_W, startW + (ev.clientX - startX)),\n h: Math.max(MIN_H, Math.min(startH + (ev.clientY - startY), maxH)),\n });\n };\n const onUp = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }}\n className=\"absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize\"\n />\n ) : null}\n </div>\n ) : null}\n\n {/* Chat FAB — right corner, hidden when maximized */}\n <div className={cn('group/fab fixed right-8 bottom-6 z-30', isMaximized && 'hidden')}>\n <Button\n size=\"icon\"\n onClick={toggle}\n className={cn(\n 'relative h-14 w-14 rounded-full shadow-lg',\n 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95',\n isOpen\n ? 'bg-violet-600 text-white hover:bg-violet-500'\n : 'bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400'\n )}\n >\n <MessageSquare\n className={cn(\n 'absolute h-7 w-7 stroke-[2.5] transition-all duration-200',\n isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'\n )}\n />\n <X\n className={cn(\n 'absolute h-6 w-6 stroke-[2.5] transition-all duration-200',\n isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'\n )}\n />\n {!isOpen && <ChatDotIndicator status={globalChatTurnStatus} className=\"top-0 right-0\" />}\n </Button>\n {/* Tooltip — slides up on hover */}\n <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\">\n <div className=\"bg-foreground rounded-lg px-3 py-1.5 text-center shadow-lg\">\n <p className=\"text-background text-xs font-medium whitespace-nowrap\">Shep Chat</p>\n <p className=\"text-background/50 mt-0.5 flex items-center justify-center gap-1 text-[10px]\">\n <kbd className=\"bg-background/15 rounded px-1 py-px font-mono\">⌘</kbd>\n <kbd className=\"bg-background/15 rounded px-1 py-px font-mono\">⇧</kbd>\n <kbd className=\"bg-background/15 rounded px-1 py-px font-mono\">K</kbd>\n </p>\n </div>\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { useState, type KeyboardEvent } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { Label } from '@/components/ui/label';\n\n/**\n * Matches supported GitHub URL formats:\n * - https://github.com/owner/repo\n * - https://github.com/owner/repo.git\n * - git@github.com:owner/repo.git\n * - owner/repo (shorthand)\n */\nconst GITHUB_URL_PATTERN =\n /^(?: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._-]+))$/;\n\nexport function isValidGitHubUrl(url: string): boolean {\n return GITHUB_URL_PATTERN.test(url.trim());\n}\n\nexport interface GitHubUrlInputProps {\n onSubmit: (url: string) => void;\n loading?: boolean;\n}\n\nexport function GitHubUrlInput({ onSubmit, loading = false }: GitHubUrlInputProps) {\n const [url, setUrl] = useState('');\n const [error, setError] = useState('');\n\n function handleSubmit() {\n const trimmed = url.trim();\n if (!trimmed) {\n setError('Please enter a GitHub URL');\n return;\n }\n if (!isValidGitHubUrl(trimmed)) {\n setError('Enter a valid GitHub URL (e.g. owner/repo or https://github.com/owner/repo)');\n return;\n }\n setError('');\n onSubmit(trimmed);\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"github-url-input\">GitHub URL</Label>\n <div className=\"flex gap-2\">\n <Input\n id=\"github-url-input\"\n placeholder=\"owner/repo or https://github.com/owner/repo\"\n value={url}\n onChange={(e) => {\n setUrl(e.target.value);\n if (error) setError('');\n }}\n onKeyDown={handleKeyDown}\n disabled={loading}\n aria-invalid={!!error}\n aria-describedby={error ? 'github-url-error' : undefined}\n />\n <Button onClick={handleSubmit} disabled={loading || !url.trim()} size=\"sm\">\n {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Import'}\n </Button>\n </div>\n {error ? (\n <p id=\"github-url-error\" className=\"text-destructive text-sm\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40cddb7da847f782d4726b0cbc177c802fd1cb16d6\":\"listGitHubRepositories\"},\"src/presentation/web/app/actions/list-github-repositories.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40cddb7da847f782d4726b0cbc177c802fd1cb16d6\",callServer,void 0,findSourceMapURL,\"listGitHubRepositories\");export{$$RSC_SERVER_ACTION_0 as listGitHubRepositories};","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Lock, Globe, Loader2, Search, AlertCircle } from 'lucide-react';\nimport { Input } from '@/components/ui/input';\nimport { Badge } from '@/components/ui/badge';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { listGitHubRepositories } from '@/app/actions/list-github-repositories';\nimport type { GitHubRepo } from '@shepai/core/application/ports/output/services/github-repository-service.interface';\n\nexport interface GitHubRepoBrowserProps {\n onSelect: (nameWithOwner: string) => void;\n loading?: boolean;\n /** Override the fetch function for testing/stories */\n fetchRepos?: (input?: {\n search?: string;\n limit?: number;\n }) => Promise<{ repos?: GitHubRepo[]; error?: string }>;\n}\n\nexport function GitHubRepoBrowser({\n onSelect,\n loading: externalLoading = false,\n fetchRepos = listGitHubRepositories,\n}: GitHubRepoBrowserProps) {\n const [repos, setRepos] = useState<GitHubRepo[]>([]);\n const [fetching, setFetching] = useState(true);\n const [error, setError] = useState('');\n const [search, setSearch] = useState('');\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const fetchData = useCallback(\n async (searchTerm?: string) => {\n setFetching(true);\n setError('');\n try {\n const result = await fetchRepos(searchTerm ? { search: searchTerm } : undefined);\n if (result.error) {\n setError(result.error);\n setRepos([]);\n } else {\n setRepos(result.repos ?? []);\n }\n } catch {\n setError('Failed to fetch repositories');\n setRepos([]);\n } finally {\n setFetching(false);\n }\n },\n [fetchRepos]\n );\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n function handleSearchChange(value: string) {\n setSearch(value);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n fetchData(value || undefined);\n }, 300);\n }\n\n const disabled = externalLoading;\n\n if (error && !fetching) {\n return (\n <div\n className=\"flex flex-col items-center gap-2 py-8 text-center\"\n data-testid=\"repo-browser-error\"\n >\n <AlertCircle className=\"text-destructive h-8 w-8\" />\n <p className=\"text-destructive text-sm\">{error}</p>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2\" />\n <Input\n placeholder=\"Search repositories...\"\n value={search}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pl-9\"\n disabled={disabled}\n aria-label=\"Search repositories\"\n />\n </div>\n\n <div\n className=\"max-h-64 overflow-x-hidden overflow-y-auto rounded-md border\"\n role=\"listbox\"\n aria-label=\"GitHub repositories\"\n >\n {fetching ? (\n <div className=\"flex flex-col gap-2 p-3\" data-testid=\"repo-browser-loading\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={`skeleton-${String(i)}`} className=\"flex flex-col gap-1\">\n <Skeleton className=\"h-4 w-48\" />\n <Skeleton className=\"h-3 w-72\" />\n </div>\n ))}\n </div>\n ) : repos.length === 0 ? (\n <div\n className=\"text-muted-foreground py-8 text-center text-sm\"\n data-testid=\"repo-browser-empty\"\n >\n No repositories found\n </div>\n ) : (\n repos.map((repo) => (\n <button\n key={repo.nameWithOwner}\n type=\"button\"\n role=\"option\"\n aria-selected={false}\n className=\"hover:bg-accent flex w-full items-start gap-2 border-b px-3 py-2.5 text-left last:border-b-0 disabled:opacity-50\"\n onClick={() => onSelect(repo.nameWithOwner)}\n disabled={disabled}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium\">{repo.nameWithOwner}</span>\n <Badge\n variant={repo.isPrivate ? 'secondary' : 'outline'}\n className=\"shrink-0 text-xs\"\n >\n {repo.isPrivate ? (\n <>\n <Lock className=\"mr-1 h-3 w-3\" />\n Private\n </>\n ) : (\n <>\n <Globe className=\"mr-1 h-3 w-3\" />\n Public\n </>\n )}\n </Badge>\n </div>\n {repo.description ? (\n <p className=\"text-muted-foreground mt-0.5 truncate text-xs\">\n {repo.description}\n </p>\n ) : null}\n </div>\n {disabled ? <Loader2 className=\"mt-0.5 h-4 w-4 shrink-0 animate-spin\" /> : null}\n </button>\n ))\n )}\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40b01bb9a513e09662e00aa2ee4630aef36695d4c2\":\"importGitHubRepository\"},\"src/presentation/web/app/actions/import-github-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40b01bb9a513e09662e00aa2ee4630aef36695d4c2\",callServer,void 0,findSourceMapURL,\"importGitHubRepository\");export{$$RSC_SERVER_ACTION_0 as importGitHubRepository};","'use client';\n\nimport { useCallback, useEffect, useState, type ReactNode } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { SidebarProvider, SidebarInset } from '@/components/ui/sidebar';\nimport { AppSidebar } from '@/components/layouts/app-sidebar';\nimport { ReactFileManagerDialog } from '@/components/common/react-file-manager-dialog';\nimport { GlobalChatPopup } from '@/components/features/chat/ChatSheet';\nimport { pickFolder } from '@/components/common/add-repository-button/pick-folder';\nimport { GitHubImportDialog } from '@/components/common/github-import-dialog';\nimport { AgentEventsProvider } from '@/hooks/agent-events-provider';\nimport { DrawerCloseGuardProvider, useDrawerCloseGuard } from '@/hooks/drawer-close-guard';\nimport {\n SidebarFeaturesProvider,\n useSidebarFeaturesContext,\n} from '@/hooks/sidebar-features-context';\nimport { TurnStatusesProvider } from '@/hooks/turn-statuses-provider';\n\nimport { useNotifications } from '@/hooks/use-notifications';\nimport { useFeatureFlags } from '@/hooks/feature-flags-context';\n\ninterface AppShellProps {\n children: ReactNode;\n /** Server-read sidebar state from cookie. */\n sidebarOpen?: boolean;\n}\n\nfunction AppShellInner({ children, sidebarOpen }: AppShellProps) {\n const router = useRouter();\n const { guardedNavigate } = useDrawerCloseGuard();\n const featureFlags = useFeatureFlags();\n\n // Subscribe to agent lifecycle events and dispatch toast/browser notifications\n useNotifications();\n\n const { features } = useSidebarFeaturesContext();\n\n const handleFeatureClick = useCallback(\n (featureId: string) => {\n guardedNavigate(() => router.push(`/feature/${featureId}`));\n },\n [router, guardedNavigate]\n );\n\n const [addingRepo, setAddingRepo] = useState(false);\n const [githubDialogOpen, setGithubDialogOpen] = useState(false);\n const [showReactPicker, setShowReactPicker] = useState(false);\n\n const handleAddRepository = useCallback(async () => {\n if (addingRepo) return;\n\n if (featureFlags.reactFileManager) {\n setShowReactPicker(true);\n return;\n }\n\n setAddingRepo(true);\n try {\n const path = await pickFolder();\n if (path) {\n window.dispatchEvent(new CustomEvent('shep:add-repository', { detail: { path } }));\n }\n } catch {\n // Native picker failed — fall back to React file manager\n setShowReactPicker(true);\n } finally {\n setAddingRepo(false);\n }\n }, [addingRepo, featureFlags.reactFileManager]);\n\n // Listen for pick-folder events from the canvas toolbar\n useEffect(() => {\n const handler = () => {\n void handleAddRepository();\n };\n window.addEventListener('shep:pick-folder', handler);\n return () => window.removeEventListener('shep:pick-folder', handler);\n }, [handleAddRepository]);\n\n // Listen for GitHub import event from (+) FAB\n useEffect(() => {\n const handler = () => setGithubDialogOpen(true);\n window.addEventListener('shep:open-github-import', handler);\n return () => window.removeEventListener('shep:open-github-import', handler);\n }, []);\n\n const handleReactPickerSelect = useCallback((path: string | null) => {\n if (path) {\n window.dispatchEvent(new CustomEvent('shep:add-repository', { detail: { path } }));\n }\n setShowReactPicker(false);\n }, []);\n\n const handleGitHubImportComplete = useCallback((repository: { path?: string }) => {\n if (repository.path) {\n window.dispatchEvent(\n new CustomEvent('shep:add-repository', { detail: { path: repository.path } })\n );\n }\n }, []);\n\n return (\n <SidebarProvider defaultOpen={sidebarOpen ?? false}>\n <AppSidebar\n features={features}\n featureFlags={featureFlags}\n onFeatureClick={handleFeatureClick}\n />\n <SidebarInset>\n <div className=\"relative h-full\">\n <main className=\"h-full\">{children}</main>\n {/* Global chat popup — fixed, visible across all pages */}\n <GlobalChatPopup />\n {featureFlags.githubImport ? (\n <GitHubImportDialog\n open={githubDialogOpen}\n onOpenChange={setGithubDialogOpen}\n onImportComplete={handleGitHubImportComplete}\n />\n ) : null}\n </div>\n </SidebarInset>\n <ReactFileManagerDialog\n open={showReactPicker}\n onOpenChange={(open) => {\n if (!open) setShowReactPicker(false);\n }}\n onSelect={handleReactPickerSelect}\n />\n </SidebarProvider>\n );\n}\n\n/** Wraps children with TurnStatusesProvider (polls all active statuses from backend). */\nfunction TurnStatusesBridge({ children }: { children: ReactNode }) {\n return <TurnStatusesProvider>{children}</TurnStatusesProvider>;\n}\n\nexport function AppShell({ children, sidebarOpen }: AppShellProps) {\n return (\n <AgentEventsProvider>\n <DrawerCloseGuardProvider>\n <SidebarFeaturesProvider>\n <TurnStatusesBridge>\n <AppShellInner sidebarOpen={sidebarOpen}>{children}</AppShellInner>\n </TurnStatusesBridge>\n </SidebarFeaturesProvider>\n </DrawerCloseGuardProvider>\n </AgentEventsProvider>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { GitHubUrlInput } from './github-url-input';\nimport { GitHubRepoBrowser } from './github-repo-browser';\nimport { importGitHubRepository } from '@/app/actions/import-github-repository';\nimport type { Repository } from '@shepai/core/domain/generated/output';\n\nexport interface GitHubImportDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onImportComplete: (repository: Repository) => void;\n}\n\nexport function GitHubImportDialog({\n open,\n onOpenChange,\n onImportComplete,\n}: GitHubImportDialogProps) {\n const [importing, setImporting] = useState(false);\n const [error, setError] = useState('');\n\n async function handleImport(url: string) {\n setImporting(true);\n setError('');\n try {\n const result = await importGitHubRepository({ url });\n if (result.error) {\n setError(result.error);\n } else if (result.repository) {\n onImportComplete(result.repository);\n onOpenChange(false);\n }\n } catch {\n setError('An unexpected error occurred');\n } finally {\n setImporting(false);\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"overflow-hidden sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>Import from GitHub</DialogTitle>\n <DialogDescription>Clone a GitHub repository and add it to Shep.</DialogDescription>\n </DialogHeader>\n\n <Tabs defaultValue=\"url\" className=\"min-w-0\">\n <TabsList className=\"grid w-full grid-cols-2\">\n <TabsTrigger value=\"url\">URL</TabsTrigger>\n <TabsTrigger value=\"browse\">Browse</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"url\" className=\"mt-4\">\n <GitHubUrlInput onSubmit={handleImport} loading={importing} />\n </TabsContent>\n\n <TabsContent value=\"browse\" className=\"mt-4\">\n <GitHubRepoBrowser onSelect={handleImport} loading={importing} />\n </TabsContent>\n </Tabs>\n\n {error ? (\n <p className=\"text-destructive text-sm\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </DialogContent>\n </Dialog>\n );\n}\n","'use client';\n\nimport { useEffect, useMemo, useRef } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { toast } from 'sonner';\nimport type { NotificationEvent } from '@shepai/core/domain/generated/output';\nimport { NotificationEventType, NotificationSeverity } from '@shepai/core/domain/generated/output';\nimport { useAgentEventsContext } from './agent-events-provider';\nimport { useSoundAction } from './use-sound-action';\nimport type { SoundAction } from './use-sound-action';\n\nconst SEVERITY_TO_TOAST: Record<NotificationSeverity, 'success' | 'error' | 'warning' | 'info'> = {\n [NotificationSeverity.Success]: 'success',\n [NotificationSeverity.Error]: 'error',\n [NotificationSeverity.Warning]: 'warning',\n [NotificationSeverity.Info]: 'info',\n};\n\nfunction dispatchToast(event: NotificationEvent, navigate?: (path: string) => void): void {\n const method = SEVERITY_TO_TOAST[event.severity] ?? 'info';\n const isActionable =\n event.eventType === NotificationEventType.WaitingApproval ||\n event.eventType === NotificationEventType.MergeReviewReady;\n toast[method](event.featureName, {\n description: event.message,\n ...(isActionable &&\n navigate && {\n action: {\n label: 'Review',\n onClick: () => {\n navigate(`/feature/${event.featureId}`);\n },\n },\n }),\n });\n}\n\nconst SEVERITY_TO_ACTION: Record<NotificationSeverity, SoundAction> = {\n [NotificationSeverity.Success]: 'notification-success',\n [NotificationSeverity.Error]: 'notification-error',\n [NotificationSeverity.Warning]: 'notification-warning',\n [NotificationSeverity.Info]: 'notification-info',\n};\n\nexport function useNotifications(): void {\n const router = useRouter();\n const { events } = useAgentEventsContext();\n\n const successSound = useSoundAction('notification-success');\n const errorSound = useSoundAction('notification-error');\n const warningSound = useSoundAction('notification-warning');\n const infoSound = useSoundAction('notification-info');\n\n const soundsByAction = useMemo<Record<string, { play: () => void }>>(\n () => ({\n 'notification-success': successSound,\n 'notification-error': errorSound,\n 'notification-warning': warningSound,\n 'notification-info': infoSound,\n }),\n [successSound, errorSound, warningSound, infoSound]\n );\n\n // Track how many events from the array we've already processed.\n // Using the array index (instead of lastEvent) prevents React batching\n // from silently dropping events when multiple SSE messages arrive together.\n const processedCountRef = useRef(0);\n\n useEffect(() => {\n if (events.length <= processedCountRef.current) return;\n\n const newEvents = events.slice(processedCountRef.current);\n processedCountRef.current = events.length;\n\n for (const event of newEvents) {\n // Only notify for actionable events and completion celebrations.\n // MergeReviewReady is Info severity but always shown as it requires user action.\n const isAlwaysShown = event.eventType === NotificationEventType.MergeReviewReady;\n if (\n !isAlwaysShown &&\n event.severity !== NotificationSeverity.Error &&\n event.severity !== NotificationSeverity.Warning &&\n event.severity !== NotificationSeverity.Success\n ) {\n continue;\n }\n\n dispatchToast(event, (path) => router.push(path as Parameters<typeof router.push>[0]));\n\n const actionName = SEVERITY_TO_ACTION[event.severity];\n soundsByAction[actionName]?.play();\n }\n }, [events, soundsByAction, router]);\n}\n","\"use client\";\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n [\"--radix-scroll-area-corner-width\"]: cornerWidth + \"px\",\n [\"--radix-scroll-area-corner-height\"]: cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }\n);\nScrollArea.displayName = SCROLL_AREA_NAME;\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }\n);\nScrollAreaViewport.displayName = VIEWPORT_NAME;\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef }) : null;\n }\n);\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\nvar ScrollAreaScrollbarHover = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarScroll = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n});\nvar ScrollAreaScrollbarAuto = React2.forwardRef((props, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarVisible = React2.forwardRef((props, forwardedRef) => {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => thumbRef.current = thumb,\n onThumbPointerUp: () => pointerOffsetRef.current = 0,\n onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n});\nvar ScrollAreaScrollbarX = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n [\"--radix-scroll-area-thumb-width\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n});\nvar ScrollAreaScrollbarY = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n [\"--radix-scroll-area-thumb-height\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n});\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = React2.forwardRef((props, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n React2.useEffect(() => {\n const handleWheel = (event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n});\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }\n);\nvar ScrollAreaThumbImpl = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(\n forwardedRef,\n (node) => scrollbarContext.onThumbChange(node)\n );\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = () => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n };\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }\n);\nScrollAreaThumb.displayName = THUMB_NAME;\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = React2.forwardRef(\n (props, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }\n);\nScrollAreaCorner.displayName = CORNER_NAME;\nvar ScrollAreaCornerImpl = React2.forwardRef((props, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n});\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nvar addUnlinkedScrollListener = (node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Compare two semver version strings.\n * Returns 1 if a > b, -1 if a < b, 0 if equal.\n * Only compares major.minor.patch (ignores pre-release/build metadata).\n */\nexport function compareVersions(a: string, b: string): -1 | 0 | 1 {\n const parse = (v: string) => v.split('-')[0].split('.').map(Number);\n const pa = parse(a);\n const pb = parse(b);\n for (let i = 0; i < 3; i++) {\n const na = pa[i] ?? 0;\n const nb = pb[i] ?? 0;\n if (na > nb) return 1;\n if (na < nb) return -1;\n }\n return 0;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface ShepLogoProps {\n className?: string;\n size?: number;\n variant?: 'default' | 'dev';\n}\n\nexport function ShepLogo({ className, size = 24, variant = 'default' }: ShepLogoProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 194 200\"\n width={size}\n height={size}\n className={cn('shrink-0', variant === 'dev' && 'text-cyan-400', className)}\n aria-hidden=\"true\"\n >\n <g transform=\"matrix(1, 0, 0, 1, -111, -208)\">\n <path\n 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\"\n fill=\"currentColor\"\n />\n </g>\n </svg>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2', key: '1w4ew1' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4', key: 'fwvmzm' }],\n];\n\n/**\n * @component @name Lock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTEiIHg9IjMiIHk9IjExIiByeD0iMiIgcnk9IjIiIC8+CiAgPHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/lock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Lock = createLucideIcon('lock', __iconNode);\n\nexport default Lock;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '4', key: '4exip2' }],\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n ['path', { d: 'M12 20v2', key: '1lh1kg' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41', key: '149t6j' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41', key: 'ptbguv' }],\n ['path', { d: 'M2 12h2', key: '1t8f8n' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41', key: '1m8zz5' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41', key: '1shlcs' }],\n];\n\n/**\n * @component @name Sun\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI0IiAvPgogIDxwYXRoIGQ9Ik0xMiAydjIiIC8+CiAgPHBhdGggZD0iTTEyIDIwdjIiIC8+CiAgPHBhdGggZD0ibTQuOTMgNC45MyAxLjQxIDEuNDEiIC8+CiAgPHBhdGggZD0ibTE3LjY2IDE3LjY2IDEuNDEgMS40MSIgLz4KICA8cGF0aCBkPSJNMiAxMmgyIiAvPgogIDxwYXRoIGQ9Ik0yMCAxMmgyIiAvPgogIDxwYXRoIGQ9Im02LjM0IDE3LjY2LTEuNDEgMS40MSIgLz4KICA8cGF0aCBkPSJtMTkuMDcgNC45My0xLjQxIDEuNDEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/sun\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Sun = createLucideIcon('sun', __iconNode);\n\nexport default Sun;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '9', cy: '12', r: '1', key: '1vctgf' }],\n ['circle', { cx: '9', cy: '5', r: '1', key: 'hp0tcf' }],\n ['circle', { cx: '9', cy: '19', r: '1', key: 'fkjjf6' }],\n ['circle', { cx: '15', cy: '12', r: '1', key: '1tmaij' }],\n ['circle', { cx: '15', cy: '5', r: '1', key: '19l28e' }],\n ['circle', { cx: '15', cy: '19', r: '1', key: 'f4zoj3' }],\n];\n\n/**\n * @component @name GripVertical\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjUiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iOSIgY3k9IjE5IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEiIC8+CiAgPGNpcmNsZSBjeD0iMTUiIGN5PSI1IiByPSIxIiAvPgogIDxjaXJjbGUgY3g9IjE1IiBjeT0iMTkiIHI9IjEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/grip-vertical\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst GripVertical = createLucideIcon('grip-vertical', __iconNode);\n\nexport default GripVertical;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M16 9a5 5 0 0 1 .95 2.293', key: '1fgyg8' }],\n ['path', { d: 'M19.364 5.636a9 9 0 0 1 1.889 9.96', key: 'l3zxae' }],\n ['path', { d: 'm2 2 20 20', key: '1ooewy' }],\n [\n 'path',\n {\n 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',\n key: '1gbwow',\n },\n ],\n ['path', { d: 'M9.828 4.172A.686.686 0 0 1 11 4.657v.686', key: 's2je0y' }],\n];\n\n/**\n * @component @name VolumeOff\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTYgOWE1IDUgMCAwIDEgLjk1IDIuMjkzIiAvPgogIDxwYXRoIGQ9Ik0xOS4zNjQgNS42MzZhOSA5IDAgMCAxIDEuODg5IDkuOTYiIC8+CiAgPHBhdGggZD0ibTIgMiAyMCAyMCIgLz4KICA8cGF0aCBkPSJtNyA3LS41ODcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4VjExIiAvPgogIDxwYXRoIGQ9Ik05LjgyOCA0LjE3MkEuNjg2LjY4NiAwIDAgMSAxMSA0LjY1N3YuNjg2IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/volume-off\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst VolumeOff = createLucideIcon('volume-off', __iconNode);\n\nexport default VolumeOff;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm14 10 7-7', key: 'oa77jy' }],\n ['path', { d: 'M20 10h-6V4', key: 'mjg0md' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M4 14h6v6', key: 'rmj7iw' }],\n];\n\n/**\n * @component @name Minimize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTQgMTAgNy03IiAvPgogIDxwYXRoIGQ9Ik0yMCAxMGgtNlY0IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNNCAxNGg2djYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/minimize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Minimize2 = createLucideIcon('minimize-2', __iconNode);\n\nexport default Minimize2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8', key: '5wwlr5' }],\n [\n 'path',\n {\n 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',\n key: 'r6nss1',\n },\n ],\n];\n\n/**\n * @component @name House\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgMjF2LThhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjgiIC8+CiAgPHBhdGggZD0iTTMgMTBhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnoiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/house\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst House = createLucideIcon('house', __iconNode);\n\nexport default House;\n","/**\n * Theme type definitions for the Shep AI Web UI\n */\n\nexport type Theme = 'light' | 'dark' | 'system';\n\nexport interface ThemeContextValue {\n theme: Theme;\n resolvedTheme: 'light' | 'dark';\n setTheme: (theme: Theme) => void;\n}\n\nexport const THEME_STORAGE_KEY = 'shep-theme';\n\nexport const themes: Theme[] = ['light', 'dark', 'system'];\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n 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',\n key: 'uqj9uw',\n },\n ],\n ['path', { d: 'M16 9a5 5 0 0 1 0 6', key: '1q6k2b' }],\n ['path', { d: 'M19.364 18.364a9 9 0 0 0 0-12.728', key: 'ijwkga' }],\n];\n\n/**\n * @component @name Volume2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiIC8+CiAgPHBhdGggZD0iTTE2IDlhNSA1IDAgMCAxIDAgNiIgLz4KICA8cGF0aCBkPSJNMTkuMzY0IDE4LjM2NGE5IDkgMCAwIDAgMC0xMi43MjgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/volume-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Volume2 = createLucideIcon('volume-2', __iconNode);\n\nexport default Volume2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n key: '1i5ecw',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Settings\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOS42NzEgNC4xMzZhMi4zNCAyLjM0IDAgMCAxIDQuNjU5IDAgMi4zNCAyLjM0IDAgMCAwIDMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMSAyLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwIDMuODMxIDIuMzQgMi4zNCAwIDAgMS0yLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMC0zLjMxOSAxLjkxNSAyLjM0IDIuMzQgMCAwIDEtNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAtMy4zMi0xLjkxNSAyLjM0IDIuMzQgMCAwIDEtMi4zMy00LjAzMyAyLjM0IDIuMzQgMCAwIDAgMC0zLjgzMUEyLjM0IDIuMzQgMCAwIDEgNi4zNSA2LjA1MWEyLjM0IDIuMzQgMCAwIDAgMy4zMTktMS45MTUiIC8+CiAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/settings\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Settings = createLucideIcon('settings', __iconNode);\n\nexport default Settings;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n 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',\n key: 'kfwtm',\n },\n ],\n];\n\n/**\n * @component @name Moon\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAuOTg1IDEyLjQ4NmE5IDkgMCAxIDEtOS40NzMtOS40NzJjLjQwNS0uMDIyLjYxNy40Ni40MDIuODAzYTYgNiAwIDAgMCA4LjI2OCA4LjI2OGMuMzQ0LS4yMTUuODI1LS4wMDQuODAzLjQwMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/moon\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Moon = createLucideIcon('moon', __iconNode);\n\nexport default Moon;\n","import type { ReactNode } from 'react';\nimport {\n SidebarGroup,\n SidebarGroupLabel,\n SidebarGroupContent,\n SidebarMenu,\n} from '@/components/ui/sidebar';\n\nexport interface FeatureStatusGroupProps {\n label: string;\n count: number;\n children: ReactNode;\n}\n\nexport function FeatureStatusGroup({ label, count, children }: FeatureStatusGroupProps) {\n return (\n <SidebarGroup data-testid=\"feature-status-group\" className=\"px-2 py-1\">\n <SidebarGroupLabel className=\"text-muted-foreground h-6 px-2 text-[0.65rem] font-semibold tracking-wider uppercase\">\n {label}\n <span\n aria-label={`${count} items`}\n className=\"bg-sidebar-accent text-sidebar-accent-foreground ml-1.5 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.6rem] font-medium tabular-nums\"\n role=\"img\"\n >\n {count}\n </span>\n </SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu className=\"gap-0.5\">{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n );\n}\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","'use client';\n\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n return (\n <Sonner\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","'use client';\n\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useState } from 'react';\n\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n // eslint-disable-next-line react/hook-use-state -- intentionally omitting setter; stable instance\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000,\n refetchOnWindowFocus: false,\n },\n },\n })\n );\n\n return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;\n}\n","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map"],"names":[],"mappings":"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","ignoreList":[22,25,26,27,28,29,30,32,33,34,36,38,40,41,42]}