@shepai/cli 1.53.2 → 1.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/apis/json-schema/NotificationEvent.yaml +4 -0
  2. package/dist/packages/core/src/domain/generated/output.d.ts +4 -0
  3. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.d.ts +4 -0
  5. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.d.ts.map +1 -1
  6. package/dist/packages/core/src/infrastructure/services/notifications/notification-bus.js +19 -6
  7. package/dist/packages/core/src/infrastructure/services/notifications/notification-watcher.service.d.ts +5 -3
  8. package/dist/packages/core/src/infrastructure/services/notifications/notification-watcher.service.d.ts.map +1 -1
  9. package/dist/packages/core/src/infrastructure/services/notifications/notification-watcher.service.js +21 -13
  10. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  11. package/dist/src/presentation/cli/commands/ui.command.js +2 -1
  12. package/dist/src/presentation/web/app/api/agent-events/health/route.d.ts +13 -0
  13. package/dist/src/presentation/web/app/api/agent-events/health/route.d.ts.map +1 -0
  14. package/dist/src/presentation/web/app/api/agent-events/health/route.js +60 -0
  15. package/dist/src/presentation/web/app/api/agent-events/route.d.ts +8 -4
  16. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  17. package/dist/src/presentation/web/app/api/agent-events/route.js +227 -55
  18. package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
  19. package/dist/src/presentation/web/app/layout.js +14 -0
  20. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts +5 -1
  21. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +29 -1
  23. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
  25. package/dist/src/presentation/web/components/common/sound-toggle/index.d.ts +2 -0
  26. package/dist/src/presentation/web/components/common/sound-toggle/index.d.ts.map +1 -0
  27. package/dist/src/presentation/web/components/common/sound-toggle/index.js +1 -0
  28. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.d.ts +2 -0
  29. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.d.ts.map +1 -0
  30. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.js +9 -0
  31. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.d.ts +8 -0
  32. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.d.ts.map +1 -0
  33. package/dist/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.js +17 -0
  34. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  35. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +14 -2
  36. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  37. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  38. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +151 -19
  39. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  40. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +2 -1
  41. package/dist/src/presentation/web/dev-server.js +14 -0
  42. package/dist/src/presentation/web/hooks/use-agent-events.d.ts +7 -0
  43. package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
  44. package/dist/src/presentation/web/hooks/use-agent-events.js +135 -47
  45. package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
  46. package/dist/src/presentation/web/hooks/use-notifications.js +56 -16
  47. package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts.map +1 -1
  48. package/dist/src/presentation/web/hooks/use-notifications.stories.js +28 -9
  49. package/dist/src/presentation/web/hooks/use-sound-enabled.d.ts +6 -0
  50. package/dist/src/presentation/web/hooks/use-sound-enabled.d.ts.map +1 -0
  51. package/dist/src/presentation/web/hooks/use-sound-enabled.js +27 -0
  52. package/dist/src/presentation/web/hooks/use-sound.d.ts +15 -0
  53. package/dist/src/presentation/web/hooks/use-sound.d.ts.map +1 -0
  54. package/dist/src/presentation/web/hooks/use-sound.js +83 -0
  55. package/dist/src/presentation/web/hooks/use-sound.stories.d.ts +8 -0
  56. package/dist/src/presentation/web/hooks/use-sound.stories.d.ts.map +1 -0
  57. package/dist/src/presentation/web/hooks/use-sound.stories.js +67 -0
  58. package/dist/src/presentation/web/public/agent-events-sw.d.ts +35 -0
  59. package/dist/src/presentation/web/public/agent-events-sw.d.ts.map +1 -0
  60. package/dist/src/presentation/web/public/agent-events-sw.js +140 -0
  61. package/dist/tsconfig.build.tsbuildinfo +1 -1
  62. package/package.json +1 -1
  63. package/web/.next/BUILD_ID +1 -1
  64. package/web/.next/app-path-routes-manifest.json +1 -0
  65. package/web/.next/build-manifest.json +2 -2
  66. package/web/.next/cache/.previewinfo +1 -1
  67. package/web/.next/cache/.rscinfo +1 -1
  68. package/web/.next/cache/.tsbuildinfo +1 -1
  69. package/web/.next/cache/config.json +3 -3
  70. package/web/.next/fallback-build-manifest.json +2 -2
  71. package/web/.next/prerender-manifest.json +3 -3
  72. package/web/.next/required-server-files.js +1 -1
  73. package/web/.next/required-server-files.json +1 -1
  74. package/web/.next/routes-manifest.json +6 -0
  75. package/web/.next/server/app/_global-error.html +2 -2
  76. package/web/.next/server/app/_global-error.rsc +1 -1
  77. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  78. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  79. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  80. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  81. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  82. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  83. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/api/agent-events/health/route/app-paths-manifest.json +3 -0
  85. package/web/.next/server/app/api/agent-events/health/route/build-manifest.json +11 -0
  86. package/web/.next/server/app/api/agent-events/health/route/server-reference-manifest.json +4 -0
  87. package/web/.next/server/app/api/agent-events/health/route.js +6 -0
  88. package/web/.next/server/app/api/agent-events/health/route.js.map +5 -0
  89. package/web/.next/server/app/api/agent-events/health/route.js.nft.json +1 -0
  90. package/web/.next/server/app/api/agent-events/health/route_client-reference-manifest.js +2 -0
  91. package/web/.next/server/app/api/agent-events/route.js +2 -1
  92. package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  93. package/web/.next/server/app/page/server-reference-manifest.json +14 -14
  94. package/web/.next/server/app/page.js.nft.json +1 -1
  95. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/version/page.js +1 -1
  97. package/web/.next/server/app/version/page.js.nft.json +1 -1
  98. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app-paths-manifest.json +1 -0
  100. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +6 -0
  101. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -0
  102. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_agent-events_health_route_actions_4d471160.js +3 -0
  103. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_agent-events_health_route_actions_4d471160.js.map +1 -0
  104. package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js +3 -0
  105. package/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js.map +1 -0
  106. package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js +3 -0
  107. package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js.map +1 -0
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +2 -2
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
  111. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js → server/chunks/ssr/[root-of-the-server]__6e8b5181._.js} +2 -2
  112. package/web/.next/server/chunks/ssr/{_1fafa9db._.js → _1632a21f._.js} +2 -2
  113. package/web/.next/server/chunks/ssr/_1632a21f._.js.map +1 -0
  114. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  119. package/web/.next/server/pages/500.html +2 -2
  120. package/web/.next/server/server-reference-manifest.js +1 -1
  121. package/web/.next/server/server-reference-manifest.json +15 -15
  122. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  123. package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +1 -0
  124. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  125. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  126. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  127. package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +6 -0
  128. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  129. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  130. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  131. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  132. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  133. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  134. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  135. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  136. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  137. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route/app-paths-manifest.json +3 -0
  138. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route/build-manifest.json +11 -0
  139. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route/server-reference-manifest.json +4 -0
  140. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route.js +6 -0
  141. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route.js.map +5 -0
  142. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route.js.nft.json +1 -0
  143. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/health/route_client-reference-manifest.js +2 -0
  144. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/route.js +2 -1
  145. package/web/.next/standalone/src/presentation/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
  146. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +14 -14
  147. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  148. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  149. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +1 -1
  150. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  151. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  152. package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +1 -0
  153. package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +6 -0
  154. package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_agent-events_health_route_actions_4d471160.js +3 -0
  155. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__3b22a1eb._.js +3 -0
  156. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js +3 -0
  157. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +2 -2
  158. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +2 -2
  159. package/web/.next/{server/chunks/ssr/[root-of-the-server]__249c74f6._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6e8b5181._.js} +2 -2
  160. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_1fafa9db._.js → _1632a21f._.js} +2 -2
  161. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  163. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  164. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  165. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +15 -15
  166. package/web/.next/standalone/src/presentation/web/app/api/agent-events/health/route.ts +69 -0
  167. package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +258 -54
  168. package/web/.next/standalone/src/presentation/web/app/layout.tsx +14 -0
  169. package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +39 -2
  170. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +1 -0
  171. package/web/.next/standalone/src/presentation/web/components/common/sound-toggle/index.ts +1 -0
  172. package/web/.next/standalone/src/presentation/web/components/common/sound-toggle/sound-toggle.stories.tsx +27 -0
  173. package/web/.next/standalone/src/presentation/web/components/common/sound-toggle/sound-toggle.tsx +21 -0
  174. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +15 -1
  175. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +194 -31
  176. package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +3 -1
  177. package/web/.next/standalone/src/presentation/web/dev-server.ts +21 -0
  178. package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +161 -52
  179. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.stories.tsx +39 -10
  180. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +68 -15
  181. package/web/.next/standalone/src/presentation/web/hooks/use-sound-enabled.ts +38 -0
  182. package/web/.next/standalone/src/presentation/web/hooks/use-sound.stories.tsx +109 -0
  183. package/web/.next/standalone/src/presentation/web/hooks/use-sound.ts +101 -0
  184. package/web/.next/standalone/src/presentation/web/public/agent-events-sw.js +164 -0
  185. package/web/.next/standalone/src/presentation/web/public/sounds/button.wav +0 -0
  186. package/web/.next/standalone/src/presentation/web/public/sounds/caution.wav +0 -0
  187. package/web/.next/standalone/src/presentation/web/public/sounds/celebration.wav +0 -0
  188. package/web/.next/standalone/src/presentation/web/public/sounds/disabled.wav +0 -0
  189. package/web/.next/standalone/src/presentation/web/public/sounds/notification.wav +0 -0
  190. package/web/.next/standalone/src/presentation/web/public/sounds/progress_loop.wav +0 -0
  191. package/web/.next/standalone/src/presentation/web/public/sounds/ringtone_loop.wav +0 -0
  192. package/web/.next/standalone/src/presentation/web/public/sounds/select.wav +0 -0
  193. package/web/.next/standalone/src/presentation/web/public/sounds/swipe.wav +0 -0
  194. package/web/.next/standalone/src/presentation/web/public/sounds/swipe_01.wav +0 -0
  195. package/web/.next/standalone/src/presentation/web/public/sounds/swipe_02.wav +0 -0
  196. package/web/.next/standalone/src/presentation/web/public/sounds/swipe_03.wav +0 -0
  197. package/web/.next/standalone/src/presentation/web/public/sounds/swipe_04.wav +0 -0
  198. package/web/.next/standalone/src/presentation/web/public/sounds/swipe_05.wav +0 -0
  199. package/web/.next/standalone/src/presentation/web/public/sounds/tap_01.wav +0 -0
  200. package/web/.next/standalone/src/presentation/web/public/sounds/tap_02.wav +0 -0
  201. package/web/.next/standalone/src/presentation/web/public/sounds/tap_03.wav +0 -0
  202. package/web/.next/standalone/src/presentation/web/public/sounds/tap_04.wav +0 -0
  203. package/web/.next/standalone/src/presentation/web/public/sounds/tap_05.wav +0 -0
  204. package/web/.next/standalone/src/presentation/web/public/sounds/toggle_off.wav +0 -0
  205. package/web/.next/standalone/src/presentation/web/public/sounds/toggle_on.wav +0 -0
  206. package/web/.next/standalone/src/presentation/web/public/sounds/transition_down.wav +0 -0
  207. package/web/.next/standalone/src/presentation/web/public/sounds/transition_up.wav +0 -0
  208. package/web/.next/standalone/src/presentation/web/public/sounds/type_01.wav +0 -0
  209. package/web/.next/standalone/src/presentation/web/public/sounds/type_02.wav +0 -0
  210. package/web/.next/standalone/src/presentation/web/public/sounds/type_03.wav +0 -0
  211. package/web/.next/standalone/src/presentation/web/public/sounds/type_04.wav +0 -0
  212. package/web/.next/standalone/src/presentation/web/public/sounds/type_05.wav +0 -0
  213. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  214. package/web/.next/static/chunks/1f13bc20e938335c.css +2 -0
  215. package/web/.next/static/chunks/702384d364482e4b.js +10 -0
  216. package/web/.next/static/chunks/{68fb91b6eca14536.js → 8f4461aee9a05741.js} +2 -2
  217. package/web/.next/static/chunks/9a82d8c76f175235.js +1 -0
  218. package/web/.next/trace +1 -1
  219. package/web/.next/trace-build +1 -1
  220. package/web/.next/types/link.d.ts +1 -0
  221. package/web/.next/types/routes.d.ts +2 -1
  222. package/web/.next/types/validator.ts +9 -0
  223. package/web/public/agent-events-sw.js +164 -0
  224. package/web/public/sounds/button.wav +0 -0
  225. package/web/public/sounds/caution.wav +0 -0
  226. package/web/public/sounds/celebration.wav +0 -0
  227. package/web/public/sounds/disabled.wav +0 -0
  228. package/web/public/sounds/notification.wav +0 -0
  229. package/web/public/sounds/progress_loop.wav +0 -0
  230. package/web/public/sounds/ringtone_loop.wav +0 -0
  231. package/web/public/sounds/select.wav +0 -0
  232. package/web/public/sounds/swipe.wav +0 -0
  233. package/web/public/sounds/swipe_01.wav +0 -0
  234. package/web/public/sounds/swipe_02.wav +0 -0
  235. package/web/public/sounds/swipe_03.wav +0 -0
  236. package/web/public/sounds/swipe_04.wav +0 -0
  237. package/web/public/sounds/swipe_05.wav +0 -0
  238. package/web/public/sounds/tap_01.wav +0 -0
  239. package/web/public/sounds/tap_02.wav +0 -0
  240. package/web/public/sounds/tap_03.wav +0 -0
  241. package/web/public/sounds/tap_04.wav +0 -0
  242. package/web/public/sounds/tap_05.wav +0 -0
  243. package/web/public/sounds/toggle_off.wav +0 -0
  244. package/web/public/sounds/toggle_on.wav +0 -0
  245. package/web/public/sounds/transition_down.wav +0 -0
  246. package/web/public/sounds/transition_up.wav +0 -0
  247. package/web/public/sounds/type_01.wav +0 -0
  248. package/web/public/sounds/type_02.wav +0 -0
  249. package/web/public/sounds/type_03.wav +0 -0
  250. package/web/public/sounds/type_04.wav +0 -0
  251. package/web/public/sounds/type_05.wav +0 -0
  252. package/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js +0 -6
  253. package/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js.map +0 -1
  254. package/web/.next/server/chunks/ssr/_1fafa9db._.js.map +0 -1
  255. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__7d5c8b74._.js +0 -6
  256. package/web/.next/static/chunks/13d5334b17480a16.js +0 -10
  257. package/web/.next/static/chunks/16dec8021e251230.css +0 -2
  258. package/web/.next/static/chunks/22f30ce91a3c79c1.js +0 -1
  259. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__249c74f6._.js.map → [root-of-the-server]__6e8b5181._.js.map} +0 -0
  260. /package/web/.next/static/{nFvWyY2BF3AIS3FpZBKEb → RwzxYU9D2fPc_4j5RYu0v}/_buildManifest.js +0 -0
  261. /package/web/.next/static/{nFvWyY2BF3AIS3FpZBKEb → RwzxYU9D2fPc_4j5RYu0v}/_clientMiddlewareManifest.json +0 -0
  262. /package/web/.next/static/{nFvWyY2BF3AIS3FpZBKEb → RwzxYU9D2fPc_4j5RYu0v}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,24270,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return o}});let o=e=>{}},87292,e=>{"use strict";var t=e.i(20314),r=e.i(79054),o=e.i(57638),n=e.i(31406),i=e.i(3645);let a=(0,i.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]),l=(0,i.default)("brain",[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]]);var s=e.i(3214),c=e.i(87620),u=e.i(85995),d=e.i(22528),p=e.i(5978),f=e.i(29297),h=e.i(66033),v=e.i(5192),m=e.i(91967),b="ScrollArea",[w,g]=(0,d.createContextScope)(b),[S,x]=w(b),y=r.forwardRef((e,o)=>{let{__scopeScrollArea:n,type:i="hover",dir:a,scrollHideDelay:l=600,...s}=e,[u,d]=r.useState(null),[f,v]=r.useState(null),[m,b]=r.useState(null),[w,g]=r.useState(null),[x,y]=r.useState(null),[j,C]=r.useState(0),[E,T]=r.useState(0),[R,N]=r.useState(!1),[P,A]=r.useState(!1),k=(0,p.useComposedRefs)(o,e=>d(e)),L=(0,h.useDirection)(a);return(0,t.jsx)(S,{scope:n,type:i,dir:L,scrollHideDelay:l,scrollArea:u,viewport:f,onViewportChange:v,content:m,onContentChange:b,scrollbarX:w,onScrollbarXChange:g,scrollbarXEnabled:R,onScrollbarXEnabledChange:N,scrollbarY:x,onScrollbarYChange:y,scrollbarYEnabled:P,onScrollbarYEnabledChange:A,onCornerWidthChange:C,onCornerHeightChange:T,children:(0,t.jsx)(c.Primitive.div,{dir:L,...s,ref:k,style:{position:"relative","--radix-scroll-area-corner-width":j+"px","--radix-scroll-area-corner-height":E+"px",...e.style}})})});y.displayName=b;var j="ScrollAreaViewport",C=r.forwardRef((e,o)=>{let{__scopeScrollArea:n,children:i,nonce:a,...l}=e,s=x(j,n),u=r.useRef(null),d=(0,p.useComposedRefs)(o,u,s.onViewportChange);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("style",{dangerouslySetInnerHTML:{__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}"},nonce:a}),(0,t.jsx)(c.Primitive.div,{"data-radix-scroll-area-viewport":"",...l,ref:d,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style},children:(0,t.jsx)("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"},children:i})})]})});C.displayName=j;var E="ScrollAreaScrollbar",T=r.forwardRef((e,o)=>{let{forceMount:n,...i}=e,a=x(E,e.__scopeScrollArea),{onScrollbarXEnabledChange:l,onScrollbarYEnabledChange:s}=a,c="horizontal"===e.orientation;return r.useEffect(()=>(c?l(!0):s(!0),()=>{c?l(!1):s(!1)}),[c,l,s]),"hover"===a.type?(0,t.jsx)(R,{...i,ref:o,forceMount:n}):"scroll"===a.type?(0,t.jsx)(N,{...i,ref:o,forceMount:n}):"auto"===a.type?(0,t.jsx)(P,{...i,ref:o,forceMount:n}):"always"===a.type?(0,t.jsx)(A,{...i,ref:o}):null});T.displayName=E;var R=r.forwardRef((e,o)=>{let{forceMount:n,...i}=e,a=x(E,e.__scopeScrollArea),[l,s]=r.useState(!1);return r.useEffect(()=>{let e=a.scrollArea,t=0;if(e){let r=()=>{window.clearTimeout(t),s(!0)},o=()=>{t=window.setTimeout(()=>s(!1),a.scrollHideDelay)};return e.addEventListener("pointerenter",r),e.addEventListener("pointerleave",o),()=>{window.clearTimeout(t),e.removeEventListener("pointerenter",r),e.removeEventListener("pointerleave",o)}}},[a.scrollArea,a.scrollHideDelay]),(0,t.jsx)(u.Presence,{present:n||l,children:(0,t.jsx)(P,{"data-state":l?"visible":"hidden",...i,ref:o})})}),N=r.forwardRef((e,o)=>{var n;let{forceMount:i,...a}=e,l=x(E,e.__scopeScrollArea),s="horizontal"===e.orientation,c=$(()=>p("SCROLL_END"),100),[d,p]=(n={hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}},r.useReducer((e,t)=>n[e][t]??e,"hidden"));return r.useEffect(()=>{if("idle"===d){let e=window.setTimeout(()=>p("HIDE"),l.scrollHideDelay);return()=>window.clearTimeout(e)}},[d,l.scrollHideDelay,p]),r.useEffect(()=>{let e=l.viewport,t=s?"scrollLeft":"scrollTop";if(e){let r=e[t],o=()=>{let o=e[t];r!==o&&(p("SCROLL"),c()),r=o};return e.addEventListener("scroll",o),()=>e.removeEventListener("scroll",o)}},[l.viewport,s,p,c]),(0,t.jsx)(u.Presence,{present:i||"hidden"!==d,children:(0,t.jsx)(A,{"data-state":"hidden"===d?"hidden":"visible",...a,ref:o,onPointerEnter:(0,m.composeEventHandlers)(e.onPointerEnter,()=>p("POINTER_ENTER")),onPointerLeave:(0,m.composeEventHandlers)(e.onPointerLeave,()=>p("POINTER_LEAVE"))})})}),P=r.forwardRef((e,o)=>{let n=x(E,e.__scopeScrollArea),{forceMount:i,...a}=e,[l,s]=r.useState(!1),c="horizontal"===e.orientation,d=$(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;s(c?e:t)}},10);return K(n.viewport,d),K(n.content,d),(0,t.jsx)(u.Presence,{present:i||l,children:(0,t.jsx)(A,{"data-state":l?"visible":"hidden",...a,ref:o})})}),A=r.forwardRef((e,o)=>{let{orientation:n="vertical",...i}=e,a=x(E,e.__scopeScrollArea),l=r.useRef(null),s=r.useRef(0),[c,u]=r.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),d=B(c.viewport,c.content),p={...i,sizes:c,onSizesChange:u,hasThumb:!!(d>0&&d<1),onThumbChange:e=>l.current=e,onThumbPointerUp:()=>s.current=0,onThumbPointerDown:e=>s.current=e};function f(e,t){return function(e,t,r,o="ltr"){let n=X(r),i=t||n/2,a=r.scrollbar.paddingStart+i,l=r.scrollbar.size-r.scrollbar.paddingEnd-(n-i),s=r.content-r.viewport;return V([a,l],"ltr"===o?[0,s]:[-1*s,0])(e)}(e,s.current,c,t)}return"horizontal"===n?(0,t.jsx)(k,{...p,ref:o,onThumbPositionChange:()=>{if(a.viewport&&l.current){let e=Y(a.viewport.scrollLeft,c,a.dir);l.current.style.transform=`translate3d(${e}px, 0, 0)`}},onWheelScroll:e=>{a.viewport&&(a.viewport.scrollLeft=e)},onDragScroll:e=>{a.viewport&&(a.viewport.scrollLeft=f(e,a.dir))}}):"vertical"===n?(0,t.jsx)(L,{...p,ref:o,onThumbPositionChange:()=>{if(a.viewport&&l.current){let e=Y(a.viewport.scrollTop,c);l.current.style.transform=`translate3d(0, ${e}px, 0)`}},onWheelScroll:e=>{a.viewport&&(a.viewport.scrollTop=e)},onDragScroll:e=>{a.viewport&&(a.viewport.scrollTop=f(e))}}):null}),k=r.forwardRef((e,o)=>{let{sizes:n,onSizesChange:i,...a}=e,l=x(E,e.__scopeScrollArea),[s,c]=r.useState(),u=r.useRef(null),d=(0,p.useComposedRefs)(o,u,l.onScrollbarXChange);return r.useEffect(()=>{u.current&&c(getComputedStyle(u.current))},[u]),(0,t.jsx)(D,{"data-orientation":"horizontal",...a,ref:d,sizes:n,style:{bottom:0,left:"rtl"===l.dir?"var(--radix-scroll-area-corner-width)":0,right:"ltr"===l.dir?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":X(n)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,r)=>{if(l.viewport){var o,n;let i=l.viewport.scrollLeft+t.deltaX;e.onWheelScroll(i),o=i,n=r,o>0&&o<n&&t.preventDefault()}},onResize:()=>{u.current&&l.viewport&&s&&i({content:l.viewport.scrollWidth,viewport:l.viewport.offsetWidth,scrollbar:{size:u.current.clientWidth,paddingStart:U(s.paddingLeft),paddingEnd:U(s.paddingRight)}})}})}),L=r.forwardRef((e,o)=>{let{sizes:n,onSizesChange:i,...a}=e,l=x(E,e.__scopeScrollArea),[s,c]=r.useState(),u=r.useRef(null),d=(0,p.useComposedRefs)(o,u,l.onScrollbarYChange);return r.useEffect(()=>{u.current&&c(getComputedStyle(u.current))},[u]),(0,t.jsx)(D,{"data-orientation":"vertical",...a,ref:d,sizes:n,style:{top:0,right:"ltr"===l.dir?0:void 0,left:"rtl"===l.dir?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":X(n)+"px",...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,r)=>{if(l.viewport){var o,n;let i=l.viewport.scrollTop+t.deltaY;e.onWheelScroll(i),o=i,n=r,o>0&&o<n&&t.preventDefault()}},onResize:()=>{u.current&&l.viewport&&s&&i({content:l.viewport.scrollHeight,viewport:l.viewport.offsetHeight,scrollbar:{size:u.current.clientHeight,paddingStart:U(s.paddingTop),paddingEnd:U(s.paddingBottom)}})}})}),[M,_]=w(E),D=r.forwardRef((e,o)=>{let{__scopeScrollArea:n,sizes:i,hasThumb:a,onThumbChange:l,onThumbPointerUp:s,onThumbPointerDown:u,onThumbPositionChange:d,onDragScroll:h,onWheelScroll:v,onResize:b,...w}=e,g=x(E,n),[S,y]=r.useState(null),j=(0,p.useComposedRefs)(o,e=>y(e)),C=r.useRef(null),T=r.useRef(""),R=g.viewport,N=i.content-i.viewport,P=(0,f.useCallbackRef)(v),A=(0,f.useCallbackRef)(d),k=$(b,10);function L(e){C.current&&h({x:e.clientX-C.current.left,y:e.clientY-C.current.top})}return r.useEffect(()=>{let e=e=>{let t=e.target;S?.contains(t)&&P(e,N)};return document.addEventListener("wheel",e,{passive:!1}),()=>document.removeEventListener("wheel",e,{passive:!1})},[R,S,N,P]),r.useEffect(A,[i,A]),K(S,k),K(g.content,k),(0,t.jsx)(M,{scope:n,scrollbar:S,hasThumb:a,onThumbChange:(0,f.useCallbackRef)(l),onThumbPointerUp:(0,f.useCallbackRef)(s),onThumbPositionChange:A,onThumbPointerDown:(0,f.useCallbackRef)(u),children:(0,t.jsx)(c.Primitive.div,{...w,ref:j,style:{position:"absolute",...w.style},onPointerDown:(0,m.composeEventHandlers)(e.onPointerDown,e=>{0===e.button&&(e.target.setPointerCapture(e.pointerId),C.current=S.getBoundingClientRect(),T.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",g.viewport&&(g.viewport.style.scrollBehavior="auto"),L(e))}),onPointerMove:(0,m.composeEventHandlers)(e.onPointerMove,L),onPointerUp:(0,m.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=T.current,g.viewport&&(g.viewport.style.scrollBehavior=""),C.current=null})})})}),H="ScrollAreaThumb",z=r.forwardRef((e,r)=>{let{forceMount:o,...n}=e,i=_(H,e.__scopeScrollArea);return(0,t.jsx)(u.Presence,{present:o||i.hasThumb,children:(0,t.jsx)(I,{ref:r,...n})})}),I=r.forwardRef((e,o)=>{let{__scopeScrollArea:n,style:i,...a}=e,l=x(H,n),s=_(H,n),{onThumbPositionChange:u}=s,d=(0,p.useComposedRefs)(o,e=>s.onThumbChange(e)),f=r.useRef(void 0),h=$(()=>{f.current&&(f.current(),f.current=void 0)},100);return r.useEffect(()=>{let e=l.viewport;if(e){let t=()=>{h(),f.current||(f.current=q(e,u),u())};return u(),e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}},[l.viewport,h,u]),(0,t.jsx)(c.Primitive.div,{"data-state":s.hasThumb?"visible":"hidden",...a,ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...i},onPointerDownCapture:(0,m.composeEventHandlers)(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),r=e.clientX-t.left,o=e.clientY-t.top;s.onThumbPointerDown({x:r,y:o})}),onPointerUp:(0,m.composeEventHandlers)(e.onPointerUp,s.onThumbPointerUp)})});z.displayName=H;var O="ScrollAreaCorner",W=r.forwardRef((e,r)=>{let o=x(O,e.__scopeScrollArea),n=!!(o.scrollbarX&&o.scrollbarY);return"scroll"!==o.type&&n?(0,t.jsx)(F,{...e,ref:r}):null});W.displayName=O;var F=r.forwardRef((e,o)=>{let{__scopeScrollArea:n,...i}=e,a=x(O,n),[l,s]=r.useState(0),[u,d]=r.useState(0),p=!!(l&&u);return K(a.scrollbarX,()=>{let e=a.scrollbarX?.offsetHeight||0;a.onCornerHeightChange(e),d(e)}),K(a.scrollbarY,()=>{let e=a.scrollbarY?.offsetWidth||0;a.onCornerWidthChange(e),s(e)}),p?(0,t.jsx)(c.Primitive.div,{...i,ref:o,style:{width:l,height:u,position:"absolute",right:"ltr"===a.dir?0:void 0,left:"rtl"===a.dir?0:void 0,bottom:0,...e.style}}):null});function U(e){return e?parseInt(e,10):0}function B(e,t){let r=e/t;return isNaN(r)?0:r}function X(e){let t=B(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd;return Math.max((e.scrollbar.size-r)*t,18)}function Y(e,t,r="ltr"){let o=X(t),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,i=t.scrollbar.size-n,a=t.content-t.viewport,l=function(e,[t,r]){return Math.min(r,Math.max(t,e))}(e,"ltr"===r?[0,a]:[-1*a,0]);return V([0,a],[0,i-o])(l)}function V(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let o=(t[1]-t[0])/(e[1]-e[0]);return t[0]+o*(r-e[0])}}var q=(e,t=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},o=0;return!function n(){let i={left:e.scrollLeft,top:e.scrollTop},a=r.left!==i.left,l=r.top!==i.top;(a||l)&&t(),r=i,o=window.requestAnimationFrame(n)}(),()=>window.cancelAnimationFrame(o)};function $(e,t){let o=(0,f.useCallbackRef)(e),n=r.useRef(0);return r.useEffect(()=>()=>window.clearTimeout(n.current),[]),r.useCallback(()=>{window.clearTimeout(n.current),n.current=window.setTimeout(o,t)},[o,t])}function K(e,t){let r=(0,f.useCallbackRef)(t);(0,v.useLayoutEffect)(()=>{let t=0;if(e){let o=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(r)});return o.observe(e),()=>{window.cancelAnimationFrame(t),o.unobserve(e)}}},[e,r])}e.s(["Corner",()=>W,"Root",()=>y,"ScrollArea",()=>y,"ScrollAreaCorner",()=>W,"ScrollAreaScrollbar",()=>T,"ScrollAreaThumb",()=>z,"ScrollAreaViewport",()=>C,"Scrollbar",()=>T,"Thumb",()=>z,"Viewport",()=>C,"createScrollAreaScope",()=>g],87516);var G=e.i(87516),G=G,J=e.i(31777);function Q({className:e,children:r,...o}){return(0,t.jsxs)(G.Root,{"data-slot":"scroll-area",className:(0,J.cn)("relative",e),...o,children:[(0,t.jsx)(G.Viewport,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:r}),(0,t.jsx)(Z,{}),(0,t.jsx)(G.Corner,{})]})}function Z({className:e,orientation:r="vertical",...o}){return(0,t.jsx)(G.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:r,className:(0,J.cn)("flex touch-none p-px transition-colors select-none","vertical"===r&&"h-full w-2.5 border-l border-l-transparent","horizontal"===r&&"h-2.5 flex-col border-t border-t-transparent",e),...o,children:(0,t.jsx)(G.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}e.i(90491);var ee=e.i(90798);e.i(85462);var et=e.i(26506);e.i(92233);var er=e.i(10025);e.i(8356);var eo=e.i(71045);e.i(78788);var en=e.i(91495);e.i(72028);var ei=e.i(41506),ea=e.i(40327);function el({features:e,onNewFeature:i,onFeatureClick:c,onFeaturesFolderClick:u,onFeaturesMenuClick:d}){let p=(0,n.usePathname)(),{state:f}=(0,o.useSidebar)(),{mounted:h,visible:v}=function(e,t){let[o,n]=(0,r.useState)(!e),[i,a]=(0,r.useState)(!e);return(0,r.useEffect)(()=>{if(!e){n(!0);let e=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(e)}a(!1);let t=window.setTimeout(()=>n(!1),200);return()=>window.clearTimeout(t)},[e,200]),{mounted:o,visible:i}}("collapsed"===f,0),m=ea.featureStatusOrder.map(t=>{let{label:r}=ea.featureStatusConfig[t],o=e.filter(e=>e.status===t);return{key:t,label:r,items:o}});return(0,t.jsxs)(o.Sidebar,{"data-testid":"app-sidebar",collapsible:"icon",children:[(0,t.jsx)(o.SidebarHeader,{children:(0,t.jsxs)(o.SidebarMenu,{children:[(0,t.jsx)(o.SidebarMenuItem,{children:(0,t.jsxs)("div",{className:"flex h-8 items-center group-data-[collapsible=icon]:justify-center",children:[h?(0,t.jsxs)("div",{className:["flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 transition-opacity duration-200 ease-out",v?"opacity-100":"opacity-0"].join(" "),"aria-hidden":!v,children:[(0,t.jsx)(er.ShepLogo,{className:"shrink-0",size:20}),(0,t.jsx)("span",{className:"truncate text-sm font-semibold tracking-tight",children:"Shep"})]}):null,(0,t.jsx)(et.SidebarCollapseToggle,{className:"shrink-0 transition-all duration-200"})]})}),(0,t.jsx)(ee.SidebarNavItem,{icon:a,label:"Control Center",href:"/",active:"/"===p}),(0,t.jsx)(ee.SidebarNavItem,{icon:l,label:"Memory",href:"/memory",active:"/memory"===p})]})}),(0,t.jsx)(o.SidebarContent,{children:h?(0,t.jsxs)("div",{className:["min-w-0 overflow-hidden transition-opacity duration-200 ease-out [&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none",v?"opacity-100":"opacity-0"].join(" "),children:[(0,t.jsx)(ei.SidebarSectionHeader,{label:"Features",onFolderClick:u,onMenuClick:d}),(0,t.jsx)(Q,{children:m.map(({key:e,label:r,items:o})=>o.length>0?(0,t.jsx)(en.FeatureStatusGroup,{label:r,count:o.length,children:o.map(e=>(0,t.jsx)(eo.FeatureListItem,{name:e.name,status:e.status,startedAt:e.startedAt,duration:e.duration,onClick:c?()=>c(e.name):void 0},e.name))},e):null)})]}):null}),(0,t.jsx)(o.SidebarFooter,{children:(0,t.jsx)(o.SidebarMenu,{children:(0,t.jsx)(o.SidebarMenuItem,{children:(0,t.jsxs)(o.SidebarMenuButton,{onClick:i,tooltip:"New feature",children:[(0,t.jsx)(s.Plus,{}),(0,t.jsx)("span",{children:"New feature"})]})})})}),(0,t.jsx)(o.SidebarRail,{})]})}e.i(53777);var es=e.i(25732);let ec=(0,i.default)("volume-2",[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]]),eu=(0,i.default)("volume-off",[["path",{d:"M16 9a5 5 0 0 1 .95 2.293",key:"1fgyg8"}],["path",{d:"M19.364 5.636a9 9 0 0 1 1.889 9.96",key:"l3zxae"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"m7 7-.587.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298V11",key:"1gbwow"}],["path",{d:"M9.828 4.172A.686.686 0 0 1 11 4.657v.686",key:"s2je0y"}]]);var ed=e.i(35364),ep=e.i(73709);function ef(){let{enabled:e,toggle:r}=(0,ep.useSoundEnabled)();return(0,t.jsxs)(ed.Button,{variant:"ghost",size:"icon",onClick:r,"aria-label":e?"Mute sounds":"Unmute sounds",children:[e?(0,t.jsx)(ec,{className:"h-5 w-5"}):(0,t.jsx)(eu,{className:"h-5 w-5"}),(0,t.jsx)("span",{className:"sr-only",children:"Toggle sound"})]})}var eh=e.i(39443),ev=e.i(60112),em=e.i(17406),eb=e.i(17607);let ew={[em.NotificationSeverity.Success]:"success",[em.NotificationSeverity.Error]:"error",[em.NotificationSeverity.Warning]:"warning",[em.NotificationSeverity.Info]:"info"},eg={[em.NotificationSeverity.Success]:"celebration",[em.NotificationSeverity.Error]:"caution",[em.NotificationSeverity.Warning]:"notification",[em.NotificationSeverity.Info]:"button"};function eS({children:e}){!function(){let{events:e}=(0,eh.useAgentEventsContext)(),t=(0,eb.useSound)("celebration",{volume:.5}),o=(0,eb.useSound)("caution",{volume:.5}),n=(0,eb.useSound)("notification",{volume:.5}),i=(0,eb.useSound)("button",{volume:.5}),a=(0,r.useMemo)(()=>({celebration:t,caution:o,notification:n,button:i}),[t,o,n,i]),[l,s]=(0,r.useState)(()=>void 0===globalThis.Notification?"default":globalThis.Notification.permission),c=(0,r.useRef)(0);(0,r.useEffect)(()=>{if(e.length<=c.current)return;let t=e.slice(c.current);for(let r of(c.current=e.length,t)){if(r.severity!==em.NotificationSeverity.Error&&r.severity!==em.NotificationSeverity.Warning&&r.severity!==em.NotificationSeverity.Success)continue;!function(e){let t=ew[e.severity]??"info",r=e.eventType===em.NotificationEventType.WaitingApproval;ev.toast[t](e.featureName,{description:e.message,...r&&{action:{label:"Review",onClick:()=>{window.dispatchEvent(new CustomEvent("shep:select-feature",{detail:{featureId:e.featureId}}))}}}})}(r),globalThis.Notification?.permission==="granted"&&new Notification(`Shep: ${r.featureName}`,{body:r.message,icon:"/favicon-light.svg"});let e=eg[r.severity];a[e]?.play()}},[e,a]),(0,r.useCallback)(async()=>{void 0===globalThis.Notification||s(await globalThis.Notification.requestPermission())},[])}();let n=(0,r.useCallback)(()=>{window.dispatchEvent(new CustomEvent("shep:open-create-drawer"))},[]);return(0,t.jsxs)(o.SidebarProvider,{children:[(0,t.jsx)(el,{features:[],onNewFeature:n}),(0,t.jsx)(o.SidebarInset,{children:(0,t.jsxs)("div",{className:"relative h-full",children:[(0,t.jsxs)("div",{className:"absolute top-3 right-3 z-50 flex gap-1",children:[(0,t.jsx)(ef,{}),(0,t.jsx)(es.ThemeToggle,{})]}),(0,t.jsx)("main",{className:"h-full",children:e})]})})]})}function ex({children:e}){return(0,t.jsx)(eh.AgentEventsProvider,{children:(0,t.jsx)(eS,{children:e})})}e.s(["AppShell",()=>ex],87292)},25251,e=>{"use strict";var t=e.i(20314),r=e.i(60112);let o=({...e})=>(0,t.jsx)(r.Toaster,{className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e});e.s(["Toaster",()=>o])}]);
package/web/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":218,"timestamp":141628834,"id":4,"parentId":1,"tags":{},"startTime":1771977204353,"traceId":"ee6f9b5901bd524c"},{"name":"load-custom-routes","duration":296,"timestamp":141629150,"id":5,"parentId":1,"tags":{},"startTime":1771977204354,"traceId":"ee6f9b5901bd524c"},{"name":"create-dist-dir","duration":214,"timestamp":141629470,"id":6,"parentId":1,"tags":{},"startTime":1771977204354,"traceId":"ee6f9b5901bd524c"},{"name":"clean","duration":200,"timestamp":141630116,"id":7,"parentId":1,"tags":{},"startTime":1771977204355,"traceId":"ee6f9b5901bd524c"},{"name":"create-pages-mapping","duration":264,"timestamp":141679911,"id":8,"parentId":1,"tags":{},"startTime":1771977204405,"traceId":"ee6f9b5901bd524c"},{"name":"collect-app-files","duration":2217,"timestamp":141680214,"id":9,"parentId":1,"tags":{},"startTime":1771977204405,"traceId":"ee6f9b5901bd524c"},{"name":"create-app-mapping","duration":771,"timestamp":141682455,"id":10,"parentId":1,"tags":{},"startTime":1771977204407,"traceId":"ee6f9b5901bd524c"},{"name":"create-app-layouts","duration":123,"timestamp":141683253,"id":11,"parentId":1,"tags":{},"startTime":1771977204408,"traceId":"ee6f9b5901bd524c"},{"name":"collect-default-files","duration":570,"timestamp":141684961,"id":13,"parentId":1,"tags":{},"startTime":1771977204410,"traceId":"ee6f9b5901bd524c"},{"name":"generate-route-types","duration":12154,"timestamp":141684486,"id":12,"parentId":1,"tags":{},"startTime":1771977204409,"traceId":"ee6f9b5901bd524c"},{"name":"public-dir-conflict-check","duration":77,"timestamp":141696682,"id":14,"parentId":1,"tags":{},"startTime":1771977204421,"traceId":"ee6f9b5901bd524c"},{"name":"generate-routes-manifest","duration":1887,"timestamp":141696813,"id":15,"parentId":1,"tags":{},"startTime":1771977204421,"traceId":"ee6f9b5901bd524c"},{"name":"run-turbopack","duration":8477716,"timestamp":141701741,"id":17,"parentId":1,"tags":{},"startTime":1771977204426,"traceId":"ee6f9b5901bd524c"},{"name":"run-typescript","duration":6650984,"timestamp":150208785,"id":19,"parentId":1,"tags":{},"startTime":1771977212933,"traceId":"ee6f9b5901bd524c"},{"name":"generate-required-server-files","duration":1331,"timestamp":156860233,"id":21,"parentId":1,"tags":{},"startTime":1771977219585,"traceId":"ee6f9b5901bd524c"},{"name":"check-static-error-page","duration":2355,"timestamp":156929758,"id":23,"parentId":22,"tags":{},"startTime":1771977219654,"traceId":"ee6f9b5901bd524c"},{"name":"is-page-static","duration":226865,"timestamp":156934517,"id":31,"parentId":25,"tags":{},"startTime":1771977219659,"traceId":"ee6f9b5901bd524c"},{"name":"check-page","duration":229863,"timestamp":156931609,"id":25,"parentId":22,"tags":{"page":"/_global-error"},"startTime":1771977219656,"traceId":"ee6f9b5901bd524c"},{"name":"is-page-static","duration":312047,"timestamp":156934929,"id":33,"parentId":27,"tags":{},"startTime":1771977219660,"traceId":"ee6f9b5901bd524c"},{"name":"check-page","duration":315195,"timestamp":156931865,"id":27,"parentId":22,"tags":{"page":"/api/dialog/pick-files"},"startTime":1771977219656,"traceId":"ee6f9b5901bd524c"},{"name":"is-page-static","duration":322941,"timestamp":156934310,"id":30,"parentId":24,"tags":{},"startTime":1771977219659,"traceId":"ee6f9b5901bd524c"},{"name":"check-page","duration":326652,"timestamp":156930641,"id":24,"parentId":22,"tags":{"page":"/_not-found"},"startTime":1771977219655,"traceId":"ee6f9b5901bd524c"},{"name":"is-page-static","duration":340788,"timestamp":156934707,"id":32,"parentId":26,"tags":{},"startTime":1771977219659,"traceId":"ee6f9b5901bd524c"},{"name":"check-page","duration":343766,"timestamp":156931781,"id":26,"parentId":22,"tags":{"page":"/api/agent-events"},"startTime":1771977219656,"traceId":"ee6f9b5901bd524c"},{"name":"is-page-static","duration":330418,"timestamp":156945768,"id":34,"parentId":29,"tags":{},"startTime":1771977219670,"traceId":"ee6f9b5901bd524c"},{"name":"check-page","duration":344183,"timestamp":156932034,"id":29,"parentId":22,"tags":{"page":"/version"},"startTime":1771977219657,"traceId":"ee6f9b5901bd524c"},{"name":"is-page-static","duration":336425,"timestamp":156946193,"id":35,"parentId":28,"tags":{},"startTime":1771977219671,"traceId":"ee6f9b5901bd524c"},{"name":"check-page","duration":350703,"timestamp":156931940,"id":28,"parentId":22,"tags":{"page":"/"},"startTime":1771977219657,"traceId":"ee6f9b5901bd524c"},{"name":"static-check","duration":353467,"timestamp":156929196,"id":22,"parentId":1,"tags":{},"startTime":1771977219654,"traceId":"ee6f9b5901bd524c"},{"name":"write-routes-manifest","duration":284,"timestamp":157284624,"id":37,"parentId":1,"tags":{},"startTime":1771977220009,"traceId":"ee6f9b5901bd524c"},{"name":"load-dotenv","duration":31,"timestamp":157292830,"id":40,"parentId":39,"tags":{},"startTime":1771977220017,"traceId":"ee6f9b5901bd524c"},{"name":"run-export-path-map","duration":283,"timestamp":157295420,"id":41,"parentId":39,"tags":{},"startTime":1771977220020,"traceId":"ee6f9b5901bd524c"},{"name":"next-export","duration":95673,"timestamp":157291939,"id":39,"parentId":1,"tags":{},"startTime":1771977220017,"traceId":"ee6f9b5901bd524c"},{"name":"move-exported-app-global-error-","duration":353,"timestamp":157388604,"id":42,"parentId":38,"tags":{},"startTime":1771977220113,"traceId":"ee6f9b5901bd524c"},{"name":"static-generation","duration":102104,"timestamp":157287990,"id":38,"parentId":1,"tags":{},"startTime":1771977220013,"traceId":"ee6f9b5901bd524c"},{"name":"write-routes-manifest","duration":237,"timestamp":157390173,"id":43,"parentId":1,"tags":{},"startTime":1771977220115,"traceId":"ee6f9b5901bd524c"},{"name":"write-standalone-directory","duration":229017,"timestamp":157394449,"id":45,"parentId":1,"tags":{},"startTime":1771977220119,"traceId":"ee6f9b5901bd524c"},{"name":"output-standalone","duration":229170,"timestamp":157394314,"id":44,"parentId":1,"tags":{},"startTime":1771977220119,"traceId":"ee6f9b5901bd524c"},{"name":"print-tree-view","duration":1827,"timestamp":157623584,"id":46,"parentId":1,"tags":{},"startTime":1771977220348,"traceId":"ee6f9b5901bd524c"},{"name":"telemetry-flush","duration":61,"timestamp":157625421,"id":47,"parentId":1,"tags":{},"startTime":1771977220350,"traceId":"ee6f9b5901bd524c"},{"name":"next-build","duration":16201115,"timestamp":141424378,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1771977204149,"traceId":"ee6f9b5901bd524c"}]
1
+ [{"name":"generate-buildid","duration":260,"timestamp":79903968,"id":4,"parentId":1,"tags":{},"startTime":1771977627212,"traceId":"f3b8fe7a14f7c96f"},{"name":"load-custom-routes","duration":316,"timestamp":79904327,"id":5,"parentId":1,"tags":{},"startTime":1771977627212,"traceId":"f3b8fe7a14f7c96f"},{"name":"create-dist-dir","duration":262,"timestamp":79904670,"id":6,"parentId":1,"tags":{},"startTime":1771977627212,"traceId":"f3b8fe7a14f7c96f"},{"name":"clean","duration":208,"timestamp":79905384,"id":7,"parentId":1,"tags":{},"startTime":1771977627213,"traceId":"f3b8fe7a14f7c96f"},{"name":"create-pages-mapping","duration":233,"timestamp":79964359,"id":8,"parentId":1,"tags":{},"startTime":1771977627272,"traceId":"f3b8fe7a14f7c96f"},{"name":"collect-app-files","duration":2302,"timestamp":79964638,"id":9,"parentId":1,"tags":{},"startTime":1771977627272,"traceId":"f3b8fe7a14f7c96f"},{"name":"create-app-mapping","duration":789,"timestamp":79966963,"id":10,"parentId":1,"tags":{},"startTime":1771977627275,"traceId":"f3b8fe7a14f7c96f"},{"name":"create-app-layouts","duration":120,"timestamp":79967775,"id":11,"parentId":1,"tags":{},"startTime":1771977627276,"traceId":"f3b8fe7a14f7c96f"},{"name":"collect-default-files","duration":665,"timestamp":79969650,"id":13,"parentId":1,"tags":{},"startTime":1771977627277,"traceId":"f3b8fe7a14f7c96f"},{"name":"generate-route-types","duration":11929,"timestamp":79969163,"id":12,"parentId":1,"tags":{},"startTime":1771977627277,"traceId":"f3b8fe7a14f7c96f"},{"name":"public-dir-conflict-check","duration":72,"timestamp":79981130,"id":14,"parentId":1,"tags":{},"startTime":1771977627289,"traceId":"f3b8fe7a14f7c96f"},{"name":"generate-routes-manifest","duration":1885,"timestamp":79981254,"id":15,"parentId":1,"tags":{},"startTime":1771977627289,"traceId":"f3b8fe7a14f7c96f"},{"name":"run-turbopack","duration":9417713,"timestamp":79986426,"id":17,"parentId":1,"tags":{},"startTime":1771977627294,"traceId":"f3b8fe7a14f7c96f"},{"name":"run-typescript","duration":7230426,"timestamp":89423654,"id":19,"parentId":1,"tags":{},"startTime":1771977636731,"traceId":"f3b8fe7a14f7c96f"},{"name":"generate-required-server-files","duration":1375,"timestamp":96654485,"id":21,"parentId":1,"tags":{},"startTime":1771977643962,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-static-error-page","duration":2643,"timestamp":96732779,"id":23,"parentId":22,"tags":{},"startTime":1771977644041,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":243995,"timestamp":96739041,"id":32,"parentId":25,"tags":{},"startTime":1771977644047,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":248341,"timestamp":96734785,"id":25,"parentId":22,"tags":{"page":"/_global-error"},"startTime":1771977644043,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":321195,"timestamp":96747391,"id":34,"parentId":26,"tags":{},"startTime":1771977644055,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":333672,"timestamp":96734983,"id":26,"parentId":22,"tags":{"page":"/api/agent-events/health"},"startTime":1771977644043,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":332585,"timestamp":96738786,"id":31,"parentId":24,"tags":{},"startTime":1771977644047,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":337664,"timestamp":96733757,"id":24,"parentId":22,"tags":{"page":"/_not-found"},"startTime":1771977644042,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":324362,"timestamp":96749425,"id":35,"parentId":27,"tags":{},"startTime":1771977644057,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":338732,"timestamp":96735102,"id":27,"parentId":22,"tags":{"page":"/api/agent-events"},"startTime":1771977644043,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":323916,"timestamp":96754392,"id":36,"parentId":30,"tags":{},"startTime":1771977644062,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":343021,"timestamp":96735337,"id":30,"parentId":22,"tags":{"page":"/version"},"startTime":1771977644043,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":356908,"timestamp":96744502,"id":33,"parentId":28,"tags":{},"startTime":1771977644052,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":366302,"timestamp":96735189,"id":28,"parentId":22,"tags":{"page":"/api/dialog/pick-files"},"startTime":1771977644043,"traceId":"f3b8fe7a14f7c96f"},{"name":"is-page-static","duration":357744,"timestamp":96754455,"id":37,"parentId":29,"tags":{},"startTime":1771977644062,"traceId":"f3b8fe7a14f7c96f"},{"name":"check-page","duration":377223,"timestamp":96735265,"id":29,"parentId":22,"tags":{"page":"/"},"startTime":1771977644043,"traceId":"f3b8fe7a14f7c96f"},{"name":"static-check","duration":380333,"timestamp":96732193,"id":22,"parentId":1,"tags":{},"startTime":1771977644040,"traceId":"f3b8fe7a14f7c96f"},{"name":"write-routes-manifest","duration":257,"timestamp":97113141,"id":39,"parentId":1,"tags":{},"startTime":1771977644421,"traceId":"f3b8fe7a14f7c96f"},{"name":"load-dotenv","duration":37,"timestamp":97122457,"id":42,"parentId":41,"tags":{},"startTime":1771977644430,"traceId":"f3b8fe7a14f7c96f"},{"name":"run-export-path-map","duration":302,"timestamp":97124633,"id":43,"parentId":41,"tags":{},"startTime":1771977644432,"traceId":"f3b8fe7a14f7c96f"},{"name":"next-export","duration":89464,"timestamp":97121507,"id":41,"parentId":1,"tags":{},"startTime":1771977644429,"traceId":"f3b8fe7a14f7c96f"},{"name":"move-exported-app-global-error-","duration":400,"timestamp":97212076,"id":44,"parentId":40,"tags":{},"startTime":1771977644520,"traceId":"f3b8fe7a14f7c96f"},{"name":"static-generation","duration":97593,"timestamp":97116237,"id":40,"parentId":1,"tags":{},"startTime":1771977644424,"traceId":"f3b8fe7a14f7c96f"},{"name":"write-routes-manifest","duration":280,"timestamp":97213951,"id":45,"parentId":1,"tags":{},"startTime":1771977644522,"traceId":"f3b8fe7a14f7c96f"},{"name":"write-standalone-directory","duration":255108,"timestamp":97218931,"id":47,"parentId":1,"tags":{},"startTime":1771977644527,"traceId":"f3b8fe7a14f7c96f"},{"name":"output-standalone","duration":255280,"timestamp":97218779,"id":46,"parentId":1,"tags":{},"startTime":1771977644527,"traceId":"f3b8fe7a14f7c96f"},{"name":"print-tree-view","duration":1908,"timestamp":97474171,"id":48,"parentId":1,"tags":{},"startTime":1771977644782,"traceId":"f3b8fe7a14f7c96f"},{"name":"telemetry-flush","duration":61,"timestamp":97476094,"id":49,"parentId":1,"tags":{},"startTime":1771977644784,"traceId":"f3b8fe7a14f7c96f"},{"name":"next-build","duration":17781490,"timestamp":79694678,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1771977627002,"traceId":"f3b8fe7a14f7c96f"}]
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":8477716,"timestamp":141701741,"id":17,"parentId":1,"tags":{},"startTime":1771977204426,"traceId":"ee6f9b5901bd524c"},{"name":"run-typescript","duration":6650984,"timestamp":150208785,"id":19,"parentId":1,"tags":{},"startTime":1771977212933,"traceId":"ee6f9b5901bd524c"},{"name":"static-check","duration":353467,"timestamp":156929196,"id":22,"parentId":1,"tags":{},"startTime":1771977219654,"traceId":"ee6f9b5901bd524c"},{"name":"static-generation","duration":102104,"timestamp":157287990,"id":38,"parentId":1,"tags":{},"startTime":1771977220013,"traceId":"ee6f9b5901bd524c"},{"name":"output-standalone","duration":229170,"timestamp":157394314,"id":44,"parentId":1,"tags":{},"startTime":1771977220119,"traceId":"ee6f9b5901bd524c"},{"name":"telemetry-flush","duration":61,"timestamp":157625421,"id":47,"parentId":1,"tags":{},"startTime":1771977220350,"traceId":"ee6f9b5901bd524c"},{"name":"next-build","duration":16201115,"timestamp":141424378,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1771977204149,"traceId":"ee6f9b5901bd524c"}]
1
+ [{"name":"run-turbopack","duration":9417713,"timestamp":79986426,"id":17,"parentId":1,"tags":{},"startTime":1771977627294,"traceId":"f3b8fe7a14f7c96f"},{"name":"run-typescript","duration":7230426,"timestamp":89423654,"id":19,"parentId":1,"tags":{},"startTime":1771977636731,"traceId":"f3b8fe7a14f7c96f"},{"name":"static-check","duration":380333,"timestamp":96732193,"id":22,"parentId":1,"tags":{},"startTime":1771977644040,"traceId":"f3b8fe7a14f7c96f"},{"name":"static-generation","duration":97593,"timestamp":97116237,"id":40,"parentId":1,"tags":{},"startTime":1771977644424,"traceId":"f3b8fe7a14f7c96f"},{"name":"output-standalone","duration":255280,"timestamp":97218779,"id":46,"parentId":1,"tags":{},"startTime":1771977644527,"traceId":"f3b8fe7a14f7c96f"},{"name":"telemetry-flush","duration":61,"timestamp":97476094,"id":49,"parentId":1,"tags":{},"startTime":1771977644784,"traceId":"f3b8fe7a14f7c96f"},{"name":"next-build","duration":17781490,"timestamp":79694678,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1771977627002,"traceId":"f3b8fe7a14f7c96f"}]
@@ -34,6 +34,7 @@ declare namespace __next_route_internal_types__ {
34
34
  type StaticRoutes =
35
35
  | `/`
36
36
  | `/api/agent-events`
37
+ | `/api/agent-events/health`
37
38
  | `/api/dialog/pick-files`
38
39
  | `/version`
39
40
  type DynamicRoutes<T extends string = string> = never
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/version"
5
- type AppRouteHandlerRoutes = "/api/agent-events" | "/api/dialog/pick-files"
5
+ type AppRouteHandlerRoutes = "/api/agent-events" | "/api/agent-events/health" | "/api/dialog/pick-files"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -13,6 +13,7 @@ type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRo
13
13
  interface ParamMap {
14
14
  "/": {}
15
15
  "/api/agent-events": {}
16
+ "/api/agent-events/health": {}
16
17
  "/api/dialog/pick-files": {}
17
18
  "/version": {}
18
19
  }
@@ -65,6 +65,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
65
65
  type __Unused = __Check
66
66
  }
67
67
 
68
+ // Validate ../../app/api/agent-events/health/route.ts
69
+ {
70
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent-events/health">> = Specific
71
+ const handler = {} as typeof import("../../app/api/agent-events/health/route.js")
72
+ type __Check = __IsExpected<typeof handler>
73
+ // @ts-ignore
74
+ type __Unused = __Check
75
+ }
76
+
68
77
  // Validate ../../app/api/agent-events/route.ts
69
78
  {
70
79
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent-events">> = Specific
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Service Worker: agent-events-sw.js
3
+ *
4
+ * Maintains a single SSE connection to /api/agent-events and broadcasts
5
+ * NotificationEvent deltas to all connected tabs via postMessage.
6
+ *
7
+ * Messages FROM clients:
8
+ * { type: 'subscribe', runId?: string } — register this tab
9
+ * { type: 'unsubscribe' } — unregister this tab
10
+ *
11
+ * Messages TO clients:
12
+ * { type: 'notification', data: NotificationEvent }
13
+ * { type: 'status', status: 'connected' | 'connecting' | 'disconnected' }
14
+ */
15
+
16
+ /* global self, EventSource, setTimeout, clearTimeout */
17
+
18
+ const BASE_BACKOFF_MS = 1000;
19
+ const MAX_BACKOFF_MS = 30_000;
20
+ const STABLE_CONNECTION_MS = 5_000;
21
+
22
+ /** @type {EventSource | null} */
23
+ let eventSource = null;
24
+ /** @type {string | undefined} */
25
+ let currentRunId;
26
+ let backoff = BASE_BACKOFF_MS;
27
+ /** @type {ReturnType<typeof setTimeout> | null} */
28
+ let reconnectTimer = null;
29
+ /** @type {ReturnType<typeof setTimeout> | null} */
30
+ let stableTimer = null;
31
+ /** @type {'connected' | 'connecting' | 'disconnected'} */
32
+ let connectionStatus = 'disconnected';
33
+ let subscriberCount = 0;
34
+
35
+ // --- Lifecycle ---
36
+
37
+ self.addEventListener('install', () => {
38
+ self.skipWaiting();
39
+ });
40
+
41
+ self.addEventListener('activate', (event) => {
42
+ event.waitUntil(
43
+ self.clients.claim().then(async () => {
44
+ // After claiming clients, check if there are open tabs that need a connection.
45
+ // This handles the case where the SW updated via skipWaiting() and the old
46
+ // SW's EventSource was closed — we auto-start for existing clients.
47
+ const clients = await self.clients.matchAll({ type: 'window' });
48
+ if (clients.length > 0 && subscriberCount === 0) {
49
+ subscriberCount = clients.length;
50
+ connect();
51
+ }
52
+ })
53
+ );
54
+ });
55
+
56
+ // --- Client messaging ---
57
+
58
+ self.addEventListener('message', (event) => {
59
+ const { type, runId } = event.data ?? {};
60
+
61
+ if (type === 'subscribe') {
62
+ subscriberCount++;
63
+ currentRunId = runId;
64
+
65
+ // Send current status to the new subscriber immediately
66
+ event.source?.postMessage({ type: 'status', status: connectionStatus });
67
+
68
+ // Start connection if this is the first subscriber
69
+ if (subscriberCount === 1) {
70
+ connect();
71
+ }
72
+ } else if (type === 'unsubscribe') {
73
+ subscriberCount = Math.max(0, subscriberCount - 1);
74
+
75
+ // Close connection when no subscribers remain
76
+ if (subscriberCount === 0) {
77
+ disconnect();
78
+ }
79
+ }
80
+ });
81
+
82
+ // --- SSE connection management ---
83
+
84
+ function connect() {
85
+ if (eventSource) return;
86
+
87
+ const url = currentRunId
88
+ ? `/api/agent-events?runId=${encodeURIComponent(currentRunId)}`
89
+ : '/api/agent-events';
90
+
91
+ eventSource = new EventSource(url);
92
+ setStatus('connecting');
93
+
94
+ eventSource.onopen = () => {
95
+ setStatus('connected');
96
+ // Only reset backoff after connection is stable
97
+ stableTimer = setTimeout(() => {
98
+ stableTimer = null;
99
+ backoff = BASE_BACKOFF_MS;
100
+ }, STABLE_CONNECTION_MS);
101
+ };
102
+
103
+ eventSource.onerror = () => {
104
+ cleanup();
105
+ setStatus('disconnected');
106
+
107
+ // Don't reconnect if no subscribers
108
+ if (subscriberCount <= 0) return;
109
+
110
+ const delay = backoff;
111
+ backoff = Math.min(delay * 2, MAX_BACKOFF_MS);
112
+
113
+ reconnectTimer = setTimeout(() => {
114
+ reconnectTimer = null;
115
+ connect();
116
+ }, delay);
117
+ };
118
+
119
+ eventSource.addEventListener('notification', (event) => {
120
+ /** @type {unknown} */
121
+ let data;
122
+ try {
123
+ data = JSON.parse(event.data);
124
+ } catch {
125
+ return;
126
+ }
127
+ broadcast({ type: 'notification', data });
128
+ });
129
+ }
130
+
131
+ function disconnect() {
132
+ if (reconnectTimer !== null) {
133
+ clearTimeout(reconnectTimer);
134
+ reconnectTimer = null;
135
+ }
136
+ cleanup();
137
+ backoff = BASE_BACKOFF_MS;
138
+ setStatus('disconnected');
139
+ }
140
+
141
+ function cleanup() {
142
+ if (stableTimer !== null) {
143
+ clearTimeout(stableTimer);
144
+ stableTimer = null;
145
+ }
146
+ if (eventSource) {
147
+ eventSource.close();
148
+ eventSource = null;
149
+ }
150
+ }
151
+
152
+ // --- Helpers ---
153
+
154
+ function setStatus(status) {
155
+ connectionStatus = status;
156
+ broadcast({ type: 'status', status });
157
+ }
158
+
159
+ async function broadcast(message) {
160
+ const clients = await self.clients.matchAll({ type: 'window' });
161
+ for (const client of clients) {
162
+ client.postMessage(message);
163
+ }
164
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,6 +0,0 @@
1
- module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},87769,(e,t,r)=>{t.exports=e.x("node:events",()=>require("node:events"))},58773,e=>{"use strict";var t=e.i(22925),r=e.i(62995),n=e.i(14112),a=e.i(31716),o=e.i(16340),i=e.i(40522),s=e.i(21994),l=e.i(5802),d=e.i(17171),u=e.i(177),c=e.i(43685),p=e.i(84832),h=e.i(92435),v=e.i(41260),x=e.i(80556),R=e.i(93695);e.i(97230);var g=e.i(35162),f=e.i(87769);let m=null;function w(e){let t=new URL(e.url).searchParams.get("runId");return new Response(new ReadableStream({start(r){let n=new TextEncoder,a=m??=new f.EventEmitter,o=e=>{if(!t||e.agentRunId===t)try{r.enqueue(n.encode(`event: notification
2
- data: ${JSON.stringify(e)}
3
-
4
- `))}catch{}};a.on("notification",o);let i=setInterval(()=>{try{r.enqueue(n.encode(": heartbeat\n\n"))}catch{}},3e4);e.signal.addEventListener("abort",()=>{a.removeListener("notification",o),clearInterval(i);try{r.close()}catch{}},{once:!0})}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}e.s(["GET",()=>w],50328);var E=e.i(50328);let C=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/agent-events/route",pathname:"/api/agent-events",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/agent-events/route.ts",nextConfigOutput:"standalone",userland:E}),{workAsyncStorage:y,workUnitAsyncStorage:b,serverHooks:A}=C;function T(){return(0,n.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:b})}async function N(e,t,n){C.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let f="/api/agent-events/route";f=f.replace(/\/index$/,"")||"/";let m=await C.prepare(e,t,{srcPage:f,multiZoneDraftMode:!1});if(!m)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:w,params:E,nextConfig:y,parsedUrl:b,isDraftMode:A,prerenderManifest:T,routerServerContext:N,isOnDemandRevalidate:P,revalidateOnlyGenerated:q,resolvedPathname:O,clientReferenceManifest:S,serverActionsManifest:k}=m,_=(0,s.normalizeAppPath)(f),I=!!(T.dynamicRoutes[_]||T.routes[O]),H=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,b,!1):t.end("This page could not be found"),null);if(I&&!A){let e=!!T.routes[O],t=T.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(y.experimental.adapterPath)return await H();throw new R.NoFallbackError}}let U=null;!I||C.isDev||A||(U="/index"===(U=O)?"/":U);let j=!0===C.isDev||!I,D=I&&!j;k&&S&&(0,i.setManifestsSingleton)({page:f,clientReferenceManifest:S,serverActionsManifest:k});let M=e.method||"GET",$=(0,o.getTracer)(),F=$.getActiveScopeSpan(),K={params:E,prerenderManifest:T,renderOpts:{experimental:{authInterrupts:!!y.experimental.authInterrupts},cacheComponents:!!y.cacheComponents,supportsDynamicResponse:j,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:y.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>C.onRequestError(e,t,n,a,N)},sharedContext:{buildId:w}},L=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),G=d.NextRequestAdapter.fromNodeNextRequest(L,(0,d.signalFromNodeResponse)(t));try{let i=async e=>C.handle(G,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${M} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${f}`)}),s=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let d=async({previousCacheEntry:r})=>{try{if(!s&&P&&q&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await i(a);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let d=K.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(L,B,o,K.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);d&&(t[x.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:f,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:P})},!1,N),t}},u=await C.handleResponse({req:e,nextConfig:y,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:q,responseGenerator:d,waitUntil:n.waitUntil,isMinimalMode:s});if(!I)return null;if((null==u||null==(o=u.value)?void 0:o.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",P?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let R=(0,h.fromNodeOutgoingHttpHeaders)(u.value.headers);return s&&I||R.delete(x.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||R.get("Cache-Control")||R.set("Cache-Control",(0,v.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(L,B,new Response(u.value.body,{headers:R,status:u.value.status||200})),null};F?await l(F):await $.withPropagatedContext(e.headers,()=>$.trace(u.BaseServerSpan.handleRequest,{spanName:`${M} ${f}`,kind:o.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},l))}catch(t){if(t instanceof R.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:P})},!1,N),I)throw t;return await (0,p.sendResponse)(L,B,new Response(null,{status:500})),null}}e.s(["handler",()=>N,"patchFetch",()=>T,"routeModule",()=>C,"serverHooks",()=>A,"workAsyncStorage",()=>y,"workUnitAsyncStorage",()=>b],58773)}];
5
-
6
- //# sourceMappingURL=%5Broot-of-the-server%5D__7d5c8b74._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../packages/core/src/infrastructure/services/notifications/notification-bus.ts","../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js","../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"sourcesContent":["/**\n * Notification Event Bus\n *\n * Typed EventEmitter singleton for in-process pub/sub of notification events.\n * Lazily initialized on first access — works in any context (CLI, web dev server, tests).\n *\n * Multiple listeners can subscribe to the 'notification' event for fan-out\n * delivery (SSE clients, desktop notifier, etc.).\n *\n * Usage:\n * ```typescript\n * import { getNotificationBus } from './notification-bus.js';\n *\n * const bus = getNotificationBus();\n * bus.on('notification', (event) => { ... });\n * bus.emit('notification', event);\n * ```\n */\n\nimport { EventEmitter } from 'node:events';\nimport type { NotificationEvent } from '../../../domain/generated/output.js';\n\nexport interface NotificationEventMap {\n notification: [event: NotificationEvent];\n}\n\nexport type NotificationBus = EventEmitter<NotificationEventMap>;\n\nlet busInstance: NotificationBus | null = null;\n\n/**\n * Get the notification event bus singleton.\n * Lazily creates the bus on first access.\n */\nexport function getNotificationBus(): NotificationBus {\n busInstance ??= new EventEmitter<NotificationEventMap>();\n return busInstance;\n}\n\n/**\n * Reset the notification bus singleton (for testing purposes only).\n * DO NOT use in production code.\n *\n * @internal\n */\nexport function resetNotificationBus(): void {\n if (busInstance !== null) {\n busInstance.removeAllListeners();\n }\n busInstance = null;\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/agent-events/route\",\n pathname: \"/api/agent-events\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/agent-events/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/agent-events/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","/**\n * SSE API Route: GET /api/agent-events\n *\n * Streams agent lifecycle notification events to connected web UI clients\n * via Server-Sent Events (SSE). This is the first API route in the web UI.\n *\n * - Subscribes to the notification event bus (lazy-initialized singleton)\n * - Formats events as SSE data frames (event: notification\\ndata: JSON\\n\\n)\n * - Sends heartbeat comments every 30 seconds to keep connection alive\n * - Supports optional ?runId query parameter to filter events\n * - Cleans up listeners and intervals on client disconnect\n */\n\nimport { getNotificationBus } from '@shepai/core/infrastructure/services/notifications/notification-bus';\nimport type { NotificationEvent } from '@shepai/core/domain/generated/output';\n\nconst HEARTBEAT_INTERVAL_MS = 30_000;\n\nfunction formatSSEEvent(event: NotificationEvent): string {\n return `event: notification\\ndata: ${JSON.stringify(event)}\\n\\n`;\n}\n\nfunction formatHeartbeat(): string {\n return ': heartbeat\\n\\n';\n}\n\nexport function GET(request: Request): Response {\n const url = new URL(request.url);\n const runIdFilter = url.searchParams.get('runId');\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n const encoder = new TextEncoder();\n const bus = getNotificationBus();\n\n const onNotification = (event: NotificationEvent) => {\n if (runIdFilter && event.agentRunId !== runIdFilter) {\n return;\n }\n\n try {\n controller.enqueue(encoder.encode(formatSSEEvent(event)));\n } catch {\n // Stream may be closed — ignore enqueue errors\n }\n };\n\n bus.on('notification', onNotification);\n\n // Heartbeat to keep connection alive\n const heartbeatInterval = setInterval(() => {\n try {\n controller.enqueue(encoder.encode(formatHeartbeat()));\n } catch {\n // Stream may be closed — ignore enqueue errors\n }\n }, HEARTBEAT_INTERVAL_MS);\n\n // Cleanup on client disconnect\n const cleanup = () => {\n bus.removeListener('notification', onNotification);\n clearInterval(heartbeatInterval);\n try {\n controller.close();\n } catch {\n // Stream may already be closed\n }\n };\n\n request.signal.addEventListener('abort', cleanup, { once: true });\n },\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n },\n });\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}