@a5c-ai/babysitter-observer-dashboard 5.0.1-staging.7a8768ec

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 (513) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +16 -0
  3. package/.next/build-manifest.json +23 -0
  4. package/.next/export-marker.json +6 -0
  5. package/.next/fallback-build-manifest.json +13 -0
  6. package/.next/images-manifest.json +68 -0
  7. package/.next/next-minimal-server.js.nft.json +1 -0
  8. package/.next/next-server.js.nft.json +1 -0
  9. package/.next/package.json +1 -0
  10. package/.next/prerender-manifest.json +114 -0
  11. package/.next/required-server-files.json +334 -0
  12. package/.next/routes-manifest.json +139 -0
  13. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  14. package/.next/server/app/_global-error/page/build-manifest.json +19 -0
  15. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  16. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  17. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  18. package/.next/server/app/_global-error/page.js +9 -0
  19. package/.next/server/app/_global-error/page.js.map +5 -0
  20. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  21. package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
  22. package/.next/server/app/_global-error.html +1 -0
  23. package/.next/server/app/_global-error.meta +15 -0
  24. package/.next/server/app/_global-error.rsc +14 -0
  25. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  26. package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  27. package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  28. package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  29. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  30. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  31. package/.next/server/app/_not-found/page/build-manifest.json +19 -0
  32. package/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
  33. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  34. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  35. package/.next/server/app/_not-found/page.js +13 -0
  36. package/.next/server/app/_not-found/page.js.map +5 -0
  37. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  38. package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
  39. package/.next/server/app/_not-found.html +1 -0
  40. package/.next/server/app/_not-found.meta +16 -0
  41. package/.next/server/app/_not-found.rsc +19 -0
  42. package/.next/server/app/_not-found.segments/_full.segment.rsc +19 -0
  43. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  44. package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  45. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -0
  46. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  47. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  48. package/.next/server/app/api/config/route/app-paths-manifest.json +3 -0
  49. package/.next/server/app/api/config/route/build-manifest.json +9 -0
  50. package/.next/server/app/api/config/route/server-reference-manifest.json +4 -0
  51. package/.next/server/app/api/config/route.js +8 -0
  52. package/.next/server/app/api/config/route.js.map +5 -0
  53. package/.next/server/app/api/config/route.js.nft.json +1 -0
  54. package/.next/server/app/api/config/route_client-reference-manifest.js +3 -0
  55. package/.next/server/app/api/digest/route/app-paths-manifest.json +3 -0
  56. package/.next/server/app/api/digest/route/build-manifest.json +9 -0
  57. package/.next/server/app/api/digest/route/server-reference-manifest.json +4 -0
  58. package/.next/server/app/api/digest/route.js +9 -0
  59. package/.next/server/app/api/digest/route.js.map +5 -0
  60. package/.next/server/app/api/digest/route.js.nft.json +1 -0
  61. package/.next/server/app/api/digest/route_client-reference-manifest.js +3 -0
  62. package/.next/server/app/api/runs/[runId]/events/route/app-paths-manifest.json +3 -0
  63. package/.next/server/app/api/runs/[runId]/events/route/build-manifest.json +9 -0
  64. package/.next/server/app/api/runs/[runId]/events/route/server-reference-manifest.json +4 -0
  65. package/.next/server/app/api/runs/[runId]/events/route.js +8 -0
  66. package/.next/server/app/api/runs/[runId]/events/route.js.map +5 -0
  67. package/.next/server/app/api/runs/[runId]/events/route.js.nft.json +1 -0
  68. package/.next/server/app/api/runs/[runId]/events/route_client-reference-manifest.js +3 -0
  69. package/.next/server/app/api/runs/[runId]/route/app-paths-manifest.json +3 -0
  70. package/.next/server/app/api/runs/[runId]/route/build-manifest.json +9 -0
  71. package/.next/server/app/api/runs/[runId]/route/server-reference-manifest.json +4 -0
  72. package/.next/server/app/api/runs/[runId]/route.js +9 -0
  73. package/.next/server/app/api/runs/[runId]/route.js.map +5 -0
  74. package/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -0
  75. package/.next/server/app/api/runs/[runId]/route_client-reference-manifest.js +3 -0
  76. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route/app-paths-manifest.json +3 -0
  77. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route/build-manifest.json +9 -0
  78. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route/server-reference-manifest.json +4 -0
  79. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route.js +8 -0
  80. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route.js.map +5 -0
  81. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route.js.nft.json +1 -0
  82. package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route_client-reference-manifest.js +3 -0
  83. package/.next/server/app/api/runs/route/app-paths-manifest.json +3 -0
  84. package/.next/server/app/api/runs/route/build-manifest.json +9 -0
  85. package/.next/server/app/api/runs/route/server-reference-manifest.json +4 -0
  86. package/.next/server/app/api/runs/route.js +9 -0
  87. package/.next/server/app/api/runs/route.js.map +5 -0
  88. package/.next/server/app/api/runs/route.js.nft.json +1 -0
  89. package/.next/server/app/api/runs/route_client-reference-manifest.js +3 -0
  90. package/.next/server/app/api/stream/route/app-paths-manifest.json +3 -0
  91. package/.next/server/app/api/stream/route/build-manifest.json +9 -0
  92. package/.next/server/app/api/stream/route/server-reference-manifest.json +4 -0
  93. package/.next/server/app/api/stream/route.js +8 -0
  94. package/.next/server/app/api/stream/route.js.map +5 -0
  95. package/.next/server/app/api/stream/route.js.nft.json +1 -0
  96. package/.next/server/app/api/stream/route_client-reference-manifest.js +3 -0
  97. package/.next/server/app/api/test/route/app-paths-manifest.json +3 -0
  98. package/.next/server/app/api/test/route/build-manifest.json +9 -0
  99. package/.next/server/app/api/test/route/server-reference-manifest.json +4 -0
  100. package/.next/server/app/api/test/route.js +6 -0
  101. package/.next/server/app/api/test/route.js.map +5 -0
  102. package/.next/server/app/api/test/route.js.nft.json +1 -0
  103. package/.next/server/app/api/test/route_client-reference-manifest.js +3 -0
  104. package/.next/server/app/api/version/route/app-paths-manifest.json +3 -0
  105. package/.next/server/app/api/version/route/build-manifest.json +9 -0
  106. package/.next/server/app/api/version/route/server-reference-manifest.json +4 -0
  107. package/.next/server/app/api/version/route.js +7 -0
  108. package/.next/server/app/api/version/route.js.map +5 -0
  109. package/.next/server/app/api/version/route.js.nft.json +1 -0
  110. package/.next/server/app/api/version/route_client-reference-manifest.js +3 -0
  111. package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
  112. package/.next/server/app/icon.svg/route/build-manifest.json +9 -0
  113. package/.next/server/app/icon.svg/route.js +7 -0
  114. package/.next/server/app/icon.svg/route.js.map +5 -0
  115. package/.next/server/app/icon.svg/route.js.nft.json +1 -0
  116. package/.next/server/app/icon.svg.body +20 -0
  117. package/.next/server/app/icon.svg.meta +1 -0
  118. package/.next/server/app/index.html +1 -0
  119. package/.next/server/app/index.meta +14 -0
  120. package/.next/server/app/index.rsc +21 -0
  121. package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  122. package/.next/server/app/index.segments/_full.segment.rsc +21 -0
  123. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  124. package/.next/server/app/index.segments/_index.segment.rsc +8 -0
  125. package/.next/server/app/index.segments/_tree.segment.rsc +2 -0
  126. package/.next/server/app/page/app-paths-manifest.json +3 -0
  127. package/.next/server/app/page/build-manifest.json +19 -0
  128. package/.next/server/app/page/next-font-manifest.json +6 -0
  129. package/.next/server/app/page/react-loadable-manifest.json +1 -0
  130. package/.next/server/app/page/server-reference-manifest.json +17 -0
  131. package/.next/server/app/page.js +15 -0
  132. package/.next/server/app/page.js.map +5 -0
  133. package/.next/server/app/page.js.nft.json +1 -0
  134. package/.next/server/app/page_client-reference-manifest.js +3 -0
  135. package/.next/server/app/runs/[runId]/page/app-paths-manifest.json +3 -0
  136. package/.next/server/app/runs/[runId]/page/build-manifest.json +19 -0
  137. package/.next/server/app/runs/[runId]/page/next-font-manifest.json +6 -0
  138. package/.next/server/app/runs/[runId]/page/react-loadable-manifest.json +22 -0
  139. package/.next/server/app/runs/[runId]/page/server-reference-manifest.json +17 -0
  140. package/.next/server/app/runs/[runId]/page.js +15 -0
  141. package/.next/server/app/runs/[runId]/page.js.map +5 -0
  142. package/.next/server/app/runs/[runId]/page.js.nft.json +1 -0
  143. package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +3 -0
  144. package/.next/server/app-paths-manifest.json +16 -0
  145. package/.next/server/chunks/01oi_server_app_api_runs_[runId]_tasks_[effectId]_route_actions_0r72yai.js +3 -0
  146. package/.next/server/chunks/01oi_server_app_api_runs_[runId]_tasks_[effectId]_route_actions_0r72yai.js.map +1 -0
  147. package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_events_route_actions_0~msldk.js +3 -0
  148. package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_events_route_actions_0~msldk.js.map +1 -0
  149. package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_route_actions_09iz0n6.js +3 -0
  150. package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_route_actions_09iz0n6.js.map +1 -0
  151. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_config_route_actions_0~eypoa.js +3 -0
  152. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_config_route_actions_0~eypoa.js.map +1 -0
  153. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_digest_route_actions_04jj5zs.js +3 -0
  154. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_digest_route_actions_04jj5zs.js.map +1 -0
  155. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_runs_route_actions_0~-t-o4.js +3 -0
  156. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_runs_route_actions_0~-t-o4.js.map +1 -0
  157. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_stream_route_actions_0fkmv2_.js +3 -0
  158. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_stream_route_actions_0fkmv2_.js.map +1 -0
  159. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_test_route_actions_00ugava.js +3 -0
  160. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_test_route_actions_00ugava.js.map +1 -0
  161. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_version_route_actions_0~v3ojm.js +3 -0
  162. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_version_route_actions_0~v3ojm.js.map +1 -0
  163. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_icon_svg_route_actions_0yypxkm.js +3 -0
  164. package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_icon_svg_route_actions_0yypxkm.js.map +1 -0
  165. package/.next/server/chunks/[root-of-the-server]__0.6bt.6._.js +3 -0
  166. package/.next/server/chunks/[root-of-the-server]__0.6bt.6._.js.map +1 -0
  167. package/.next/server/chunks/[root-of-the-server]__08kwev1._.js +3 -0
  168. package/.next/server/chunks/[root-of-the-server]__08kwev1._.js.map +1 -0
  169. package/.next/server/chunks/[root-of-the-server]__096el.d._.js +3 -0
  170. package/.next/server/chunks/[root-of-the-server]__096el.d._.js.map +1 -0
  171. package/.next/server/chunks/[root-of-the-server]__0_bmt4z._.js +3 -0
  172. package/.next/server/chunks/[root-of-the-server]__0_bmt4z._.js.map +1 -0
  173. package/.next/server/chunks/[root-of-the-server]__0_ln2d2._.js +3 -0
  174. package/.next/server/chunks/[root-of-the-server]__0_ln2d2._.js.map +1 -0
  175. package/.next/server/chunks/[root-of-the-server]__0al3v65._.js +3 -0
  176. package/.next/server/chunks/[root-of-the-server]__0al3v65._.js.map +1 -0
  177. package/.next/server/chunks/[root-of-the-server]__0gf516b._.js +3 -0
  178. package/.next/server/chunks/[root-of-the-server]__0gf516b._.js.map +1 -0
  179. package/.next/server/chunks/[root-of-the-server]__0kdfw4x._.js +3 -0
  180. package/.next/server/chunks/[root-of-the-server]__0kdfw4x._.js.map +1 -0
  181. package/.next/server/chunks/[root-of-the-server]__0pxt00h._.js +3 -0
  182. package/.next/server/chunks/[root-of-the-server]__0pxt00h._.js.map +1 -0
  183. package/.next/server/chunks/[root-of-the-server]__0rubnza._.js +3 -0
  184. package/.next/server/chunks/[root-of-the-server]__0rubnza._.js.map +1 -0
  185. package/.next/server/chunks/[root-of-the-server]__0tn9iud._.js +3 -0
  186. package/.next/server/chunks/[root-of-the-server]__0tn9iud._.js.map +1 -0
  187. package/.next/server/chunks/[root-of-the-server]__0ws5o6i._.js +3 -0
  188. package/.next/server/chunks/[root-of-the-server]__0ws5o6i._.js.map +1 -0
  189. package/.next/server/chunks/[turbopack]_runtime.js +903 -0
  190. package/.next/server/chunks/[turbopack]_runtime.js.map +11 -0
  191. package/.next/server/chunks/node_modules_next_04~_e52._.js +13 -0
  192. package/.next/server/chunks/node_modules_next_04~_e52._.js.map +1 -0
  193. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0nyyph-.js +9 -0
  194. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0nyyph-.js.map +1 -0
  195. package/.next/server/chunks/packages_observer-dashboard_src_lib_02.vvb.._.js +3 -0
  196. package/.next/server/chunks/packages_observer-dashboard_src_lib_02.vvb.._.js.map +1 -0
  197. package/.next/server/chunks/packages_observer-dashboard_src_lib_0rqgpk0._.js +3 -0
  198. package/.next/server/chunks/packages_observer-dashboard_src_lib_0rqgpk0._.js.map +1 -0
  199. package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__global-error_page_actions_0ekoxmy.js +3 -0
  200. package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__global-error_page_actions_0ekoxmy.js.map +1 -0
  201. package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__not-found_page_actions_09b3ti3.js +3 -0
  202. package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__not-found_page_actions_09b3ti3.js.map +1 -0
  203. package/.next/server/chunks/ssr/[root-of-the-server]__006f7~t._.js +4 -0
  204. package/.next/server/chunks/ssr/[root-of-the-server]__006f7~t._.js.map +1 -0
  205. package/.next/server/chunks/ssr/[root-of-the-server]__02jgvbi._.js +3 -0
  206. package/.next/server/chunks/ssr/[root-of-the-server]__02jgvbi._.js.map +1 -0
  207. package/.next/server/chunks/ssr/[root-of-the-server]__04j8t~1._.js +3 -0
  208. package/.next/server/chunks/ssr/[root-of-the-server]__04j8t~1._.js.map +1 -0
  209. package/.next/server/chunks/ssr/[root-of-the-server]__09c~s.0._.js +33 -0
  210. package/.next/server/chunks/ssr/[root-of-the-server]__09c~s.0._.js.map +1 -0
  211. package/.next/server/chunks/ssr/[root-of-the-server]__0cpy61n._.js +3 -0
  212. package/.next/server/chunks/ssr/[root-of-the-server]__0cpy61n._.js.map +1 -0
  213. package/.next/server/chunks/ssr/[root-of-the-server]__0cwa32j._.js +3 -0
  214. package/.next/server/chunks/ssr/[root-of-the-server]__0cwa32j._.js.map +1 -0
  215. package/.next/server/chunks/ssr/[root-of-the-server]__0fk_g0j._.js +19 -0
  216. package/.next/server/chunks/ssr/[root-of-the-server]__0fk_g0j._.js.map +1 -0
  217. package/.next/server/chunks/ssr/[root-of-the-server]__0pddpic._.js +3 -0
  218. package/.next/server/chunks/ssr/[root-of-the-server]__0pddpic._.js.map +1 -0
  219. package/.next/server/chunks/ssr/[root-of-the-server]__0pvtneq._.js +3 -0
  220. package/.next/server/chunks/ssr/[root-of-the-server]__0pvtneq._.js.map +1 -0
  221. package/.next/server/chunks/ssr/[root-of-the-server]__0xc-2vm._.js +3 -0
  222. package/.next/server/chunks/ssr/[root-of-the-server]__0xc-2vm._.js.map +1 -0
  223. package/.next/server/chunks/ssr/[root-of-the-server]__10xgshr._.js +33 -0
  224. package/.next/server/chunks/ssr/[root-of-the-server]__10xgshr._.js.map +1 -0
  225. package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
  226. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
  227. package/.next/server/chunks/ssr/_00yo1im._.js +3 -0
  228. package/.next/server/chunks/ssr/_00yo1im._.js.map +1 -0
  229. package/.next/server/chunks/ssr/_03sbc.o._.js +3 -0
  230. package/.next/server/chunks/ssr/_03sbc.o._.js.map +1 -0
  231. package/.next/server/chunks/ssr/_04z5ea0._.js +3 -0
  232. package/.next/server/chunks/ssr/_04z5ea0._.js.map +1 -0
  233. package/.next/server/chunks/ssr/_0gmb3g_._.js +3 -0
  234. package/.next/server/chunks/ssr/_0gmb3g_._.js.map +1 -0
  235. package/.next/server/chunks/ssr/_0okz9j8._.js +6 -0
  236. package/.next/server/chunks/ssr/_0okz9j8._.js.map +1 -0
  237. package/.next/server/chunks/ssr/_0wrbwro._.js +6 -0
  238. package/.next/server/chunks/ssr/_0wrbwro._.js.map +1 -0
  239. package/.next/server/chunks/ssr/node_modules_09w7yel._.js +33 -0
  240. package/.next/server/chunks/ssr/node_modules_09w7yel._.js.map +1 -0
  241. package/.next/server/chunks/ssr/node_modules_next_dist_0avqw4q._.js +3 -0
  242. package/.next/server/chunks/ssr/node_modules_next_dist_0avqw4q._.js.map +1 -0
  243. package/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js +6 -0
  244. package/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js.map +1 -0
  245. package/.next/server/chunks/ssr/node_modules_next_dist_0i_._k3._.js +3 -0
  246. package/.next/server/chunks/ssr/node_modules_next_dist_0i_._k3._.js.map +1 -0
  247. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0ee1czk._.js +3 -0
  248. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0ee1czk._.js.map +1 -0
  249. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +3 -0
  250. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js.map +1 -0
  251. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js +3 -0
  252. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js.map +1 -0
  253. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0amzg6z.js +4 -0
  254. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0amzg6z.js.map +1 -0
  255. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dw1x0d.js +4 -0
  256. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dw1x0d.js.map +1 -0
  257. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js +4 -0
  258. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js.map +1 -0
  259. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_10iomok.js +4 -0
  260. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_10iomok.js.map +1 -0
  261. package/.next/server/chunks/ssr/packages_observer-dashboard_0~a2tmu._.js +3 -0
  262. package/.next/server/chunks/ssr/packages_observer-dashboard_0~a2tmu._.js.map +1 -0
  263. package/.next/server/chunks/ssr/packages_observer-dashboard_src_0f.ozc-._.js +3 -0
  264. package/.next/server/chunks/ssr/packages_observer-dashboard_src_0f.ozc-._.js.map +1 -0
  265. package/.next/server/chunks/ssr/packages_observer-dashboard_src_components_providers_tsx_03_vrrn._.js +7 -0
  266. package/.next/server/chunks/ssr/packages_observer-dashboard_src_components_providers_tsx_03_vrrn._.js.map +1 -0
  267. package/.next/server/functions-config-manifest.json +4 -0
  268. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  269. package/.next/server/middleware-build-manifest.js +23 -0
  270. package/.next/server/middleware-manifest.json +6 -0
  271. package/.next/server/next-font-manifest.js +1 -0
  272. package/.next/server/next-font-manifest.json +6 -0
  273. package/.next/server/pages/404.html +1 -0
  274. package/.next/server/pages/500.html +1 -0
  275. package/.next/server/pages-manifest.json +4 -0
  276. package/.next/server/prefetch-hints.json +1 -0
  277. package/.next/server/server-reference-manifest.js +1 -0
  278. package/.next/server/server-reference-manifest.json +24 -0
  279. package/.next/static/MvfPly4ZXHqaveDVOG1qq/_buildManifest.js +11 -0
  280. package/.next/static/MvfPly4ZXHqaveDVOG1qq/_clientMiddlewareManifest.js +1 -0
  281. package/.next/static/MvfPly4ZXHqaveDVOG1qq/_ssgManifest.js +1 -0
  282. package/.next/static/chunks/00c87uqn~kk2z.js +1 -0
  283. package/.next/static/chunks/01xlw8hd842-c.js +1 -0
  284. package/.next/static/chunks/02p9dpa.0oxiz.js +1 -0
  285. package/.next/static/chunks/034i63v_muq~d.js +1 -0
  286. package/.next/static/chunks/03mo-6~4pxdio.js +1 -0
  287. package/.next/static/chunks/03~yq9q893hmn.js +1 -0
  288. package/.next/static/chunks/04dm5qn77.fc2.js +1 -0
  289. package/.next/static/chunks/07uz2g0_38qia.js +4 -0
  290. package/.next/static/chunks/08nqnwvixoxnk.js +2 -0
  291. package/.next/static/chunks/0d3shmwh5_nmn.js +1 -0
  292. package/.next/static/chunks/0e_wyjw3nx.a..js +1 -0
  293. package/.next/static/chunks/0mstyq17cbf8-.js +1 -0
  294. package/.next/static/chunks/0ntuxw9.how-q.js +1 -0
  295. package/.next/static/chunks/0t3uzajv1qzmo.js +1 -0
  296. package/.next/static/chunks/0u~_nwr5-v.xp.js +1 -0
  297. package/.next/static/chunks/0wxcxh6eyzams.js +1 -0
  298. package/.next/static/chunks/0x6y7yt4kiddp.css +1 -0
  299. package/.next/static/chunks/0z6-vonyxr0dn.js +4 -0
  300. package/.next/static/chunks/0ze4gu236oq96.js +31 -0
  301. package/.next/static/chunks/0zwozael9msy1.js +1 -0
  302. package/.next/static/chunks/10qd__0r7a~.l.js +1 -0
  303. package/.next/static/chunks/11jh_u1ynmatg.js +1 -0
  304. package/.next/static/chunks/13xer3cb9shu-.js +5 -0
  305. package/.next/static/chunks/142zlnch_xmgd.js +1 -0
  306. package/.next/static/chunks/144kcri75qczu.js +1 -0
  307. package/.next/static/chunks/turbopack-0-ww6fe7b37qt.js +1 -0
  308. package/.next/static/media/icon.08ljfy7xai2x_.svg +20 -0
  309. package/LICENSE +21 -0
  310. package/README.md +490 -0
  311. package/next.config.mjs +25 -0
  312. package/package.json +104 -0
  313. package/postcss.config.mjs +8 -0
  314. package/src/app/actions/__tests__/approve-breakpoint.test.ts +246 -0
  315. package/src/app/actions/approve-breakpoint.ts +145 -0
  316. package/src/app/api/config/route.ts +137 -0
  317. package/src/app/api/digest/route.ts +45 -0
  318. package/src/app/api/runs/[runId]/events/route.ts +56 -0
  319. package/src/app/api/runs/[runId]/route.ts +84 -0
  320. package/src/app/api/runs/[runId]/tasks/[effectId]/route.ts +44 -0
  321. package/src/app/api/runs/route.ts +48 -0
  322. package/src/app/api/stream/route.ts +136 -0
  323. package/src/app/api/test/route.ts +1 -0
  324. package/src/app/api/version/route.ts +57 -0
  325. package/src/app/globals.css +555 -0
  326. package/src/app/icon.svg +20 -0
  327. package/src/app/layout.tsx +39 -0
  328. package/src/app/not-found.tsx +16 -0
  329. package/src/app/page.tsx +120 -0
  330. package/src/app/runs/[runId]/page.tsx +279 -0
  331. package/src/cli.ts +271 -0
  332. package/src/components/breakpoint/__tests__/breakpoint-approval.test.tsx +212 -0
  333. package/src/components/breakpoint/__tests__/breakpoint-panel.test.tsx +130 -0
  334. package/src/components/breakpoint/__tests__/file-preview.test.tsx +313 -0
  335. package/src/components/breakpoint/breakpoint-approval.tsx +138 -0
  336. package/src/components/breakpoint/breakpoint-panel.tsx +95 -0
  337. package/src/components/breakpoint/file-preview.tsx +215 -0
  338. package/src/components/dashboard/.gitkeep +0 -0
  339. package/src/components/dashboard/__tests__/breakpoint-banner.test.tsx +177 -0
  340. package/src/components/dashboard/__tests__/catch-up-banner.test.tsx +141 -0
  341. package/src/components/dashboard/__tests__/executive-summary-banner.test.tsx +164 -0
  342. package/src/components/dashboard/__tests__/kpi-grid.test.tsx +101 -0
  343. package/src/components/dashboard/__tests__/pagination-controls.test.tsx +125 -0
  344. package/src/components/dashboard/__tests__/project-accordion.test.tsx +97 -0
  345. package/src/components/dashboard/__tests__/project-list-view.test.tsx +174 -0
  346. package/src/components/dashboard/__tests__/project-search-input.test.tsx +110 -0
  347. package/src/components/dashboard/__tests__/project-section-header.test.tsx +91 -0
  348. package/src/components/dashboard/__tests__/project-section.test.tsx +151 -0
  349. package/src/components/dashboard/__tests__/run-card.test.tsx +164 -0
  350. package/src/components/dashboard/__tests__/run-filter-bar.test.tsx +109 -0
  351. package/src/components/dashboard/__tests__/run-list.test.tsx +123 -0
  352. package/src/components/dashboard/__tests__/search-filter.test.tsx +150 -0
  353. package/src/components/dashboard/__tests__/virtualized-run-list.test.tsx +179 -0
  354. package/src/components/dashboard/breakpoint-banner.tsx +301 -0
  355. package/src/components/dashboard/catch-up-banner.tsx +88 -0
  356. package/src/components/dashboard/executive-summary-banner.tsx +174 -0
  357. package/src/components/dashboard/global-search.tsx +323 -0
  358. package/src/components/dashboard/kpi-grid.tsx +140 -0
  359. package/src/components/dashboard/pagination-controls.tsx +100 -0
  360. package/src/components/dashboard/project-accordion.tsx +72 -0
  361. package/src/components/dashboard/project-health-card.tsx +536 -0
  362. package/src/components/dashboard/project-list-view.tsx +246 -0
  363. package/src/components/dashboard/project-search-input.tsx +41 -0
  364. package/src/components/dashboard/project-section-header.tsx +73 -0
  365. package/src/components/dashboard/project-section.tsx +89 -0
  366. package/src/components/dashboard/run-card.tsx +218 -0
  367. package/src/components/dashboard/run-filter-bar.tsx +100 -0
  368. package/src/components/dashboard/run-list.tsx +77 -0
  369. package/src/components/dashboard/search-filter.tsx +69 -0
  370. package/src/components/dashboard/virtualized-run-list.tsx +130 -0
  371. package/src/components/details/.gitkeep +0 -0
  372. package/src/components/details/__tests__/agent-panel.test.tsx +236 -0
  373. package/src/components/details/__tests__/json-tree.test.tsx +347 -0
  374. package/src/components/details/__tests__/log-viewer.test.tsx +168 -0
  375. package/src/components/details/__tests__/task-detail.test.tsx +212 -0
  376. package/src/components/details/__tests__/timing-panel.test.tsx +271 -0
  377. package/src/components/details/agent-panel.tsx +234 -0
  378. package/src/components/details/json-tree/categorize.ts +131 -0
  379. package/src/components/details/json-tree/index.tsx +120 -0
  380. package/src/components/details/json-tree/json-node.tsx +223 -0
  381. package/src/components/details/json-tree/smart-summary.tsx +596 -0
  382. package/src/components/details/json-tree/tree-controls.tsx +47 -0
  383. package/src/components/details/json-tree.tsx +9 -0
  384. package/src/components/details/log-viewer.tsx +140 -0
  385. package/src/components/details/task-detail.tsx +114 -0
  386. package/src/components/details/timing-panel.tsx +247 -0
  387. package/src/components/events/.gitkeep +0 -0
  388. package/src/components/events/__tests__/event-item.test.tsx +211 -0
  389. package/src/components/events/__tests__/event-stream.test.tsx +225 -0
  390. package/src/components/events/event-item.tsx +121 -0
  391. package/src/components/events/event-stream.tsx +260 -0
  392. package/src/components/notifications/.gitkeep +0 -0
  393. package/src/components/notifications/__tests__/notification-panel.test.tsx +287 -0
  394. package/src/components/notifications/__tests__/notification-provider.test.tsx +585 -0
  395. package/src/components/notifications/__tests__/toast-stack.test.tsx +217 -0
  396. package/src/components/notifications/notification-panel.tsx +124 -0
  397. package/src/components/notifications/notification-provider.tsx +175 -0
  398. package/src/components/notifications/toast-stack.tsx +75 -0
  399. package/src/components/pipeline/.gitkeep +0 -0
  400. package/src/components/pipeline/__tests__/parallel-group.test.tsx +88 -0
  401. package/src/components/pipeline/__tests__/pipeline-view.test.tsx +345 -0
  402. package/src/components/pipeline/__tests__/step-card.test.tsx +330 -0
  403. package/src/components/pipeline/parallel-group.tsx +39 -0
  404. package/src/components/pipeline/pipeline-view.tsx +197 -0
  405. package/src/components/pipeline/step-card.tsx +166 -0
  406. package/src/components/providers/event-stream-provider.tsx +29 -0
  407. package/src/components/providers.tsx +24 -0
  408. package/src/components/shared/.gitkeep +0 -0
  409. package/src/components/shared/__tests__/empty-state.test.tsx +49 -0
  410. package/src/components/shared/__tests__/friendly-id.test.tsx +47 -0
  411. package/src/components/shared/__tests__/kbd.test.tsx +45 -0
  412. package/src/components/shared/__tests__/kind-badge.test.tsx +71 -0
  413. package/src/components/shared/__tests__/metrics-row.test.tsx +74 -0
  414. package/src/components/shared/__tests__/outcome-banner.test.tsx +71 -0
  415. package/src/components/shared/__tests__/progress-bar.test.tsx +89 -0
  416. package/src/components/shared/__tests__/session-pill.test.tsx +62 -0
  417. package/src/components/shared/__tests__/settings-modal.test.tsx +201 -0
  418. package/src/components/shared/__tests__/shortcuts-help.test.tsx +103 -0
  419. package/src/components/shared/__tests__/status-badge.test.tsx +98 -0
  420. package/src/components/shared/__tests__/theme-provider.test.tsx +100 -0
  421. package/src/components/shared/__tests__/truncated-id.test.tsx +53 -0
  422. package/src/components/shared/app-footer.tsx +80 -0
  423. package/src/components/shared/app-header.tsx +160 -0
  424. package/src/components/shared/empty-state.tsx +18 -0
  425. package/src/components/shared/error-boundary.tsx +81 -0
  426. package/src/components/shared/friendly-id.tsx +48 -0
  427. package/src/components/shared/kbd.tsx +15 -0
  428. package/src/components/shared/kind-badge.tsx +51 -0
  429. package/src/components/shared/metrics-row.tsx +106 -0
  430. package/src/components/shared/outcome-banner.tsx +56 -0
  431. package/src/components/shared/progress-bar.tsx +42 -0
  432. package/src/components/shared/session-pill.tsx +69 -0
  433. package/src/components/shared/settings-modal.tsx +509 -0
  434. package/src/components/shared/shortcuts-help.tsx +113 -0
  435. package/src/components/shared/status-badge.tsx +110 -0
  436. package/src/components/shared/theme-provider.tsx +46 -0
  437. package/src/components/shared/truncated-id.tsx +51 -0
  438. package/src/components/ui/.gitkeep +0 -0
  439. package/src/components/ui/__tests__/accordion.test.tsx +96 -0
  440. package/src/components/ui/__tests__/badge.test.tsx +69 -0
  441. package/src/components/ui/__tests__/button.test.tsx +113 -0
  442. package/src/components/ui/__tests__/tabs.test.tsx +75 -0
  443. package/src/components/ui/__tests__/tooltip.test.tsx +90 -0
  444. package/src/components/ui/accordion.tsx +61 -0
  445. package/src/components/ui/badge.tsx +25 -0
  446. package/src/components/ui/button.tsx +40 -0
  447. package/src/components/ui/card.tsx +21 -0
  448. package/src/components/ui/scroll-area.tsx +35 -0
  449. package/src/components/ui/separator.tsx +24 -0
  450. package/src/components/ui/tabs.tsx +64 -0
  451. package/src/components/ui/tooltip.tsx +37 -0
  452. package/src/hooks/.gitkeep +0 -0
  453. package/src/hooks/__tests__/use-animated-number.test.ts +184 -0
  454. package/src/hooks/__tests__/use-batched-updates.test.ts +315 -0
  455. package/src/hooks/__tests__/use-event-stream.test.ts +243 -0
  456. package/src/hooks/__tests__/use-keyboard.test.ts +217 -0
  457. package/src/hooks/__tests__/use-notifications.test.ts +230 -0
  458. package/src/hooks/__tests__/use-polling.test.ts +274 -0
  459. package/src/hooks/__tests__/use-project-runs.test.ts +163 -0
  460. package/src/hooks/__tests__/use-projects.test.ts +248 -0
  461. package/src/hooks/__tests__/use-run-dashboard.test.ts +168 -0
  462. package/src/hooks/__tests__/use-run-detail.test.ts +273 -0
  463. package/src/hooks/__tests__/use-smart-polling.test.ts +305 -0
  464. package/src/hooks/use-animated-number.ts +87 -0
  465. package/src/hooks/use-batched-updates.ts +150 -0
  466. package/src/hooks/use-event-stream.ts +150 -0
  467. package/src/hooks/use-keyboard.ts +45 -0
  468. package/src/hooks/use-notifications.ts +82 -0
  469. package/src/hooks/use-persisted-state.ts +60 -0
  470. package/src/hooks/use-polling.ts +60 -0
  471. package/src/hooks/use-project-runs.ts +51 -0
  472. package/src/hooks/use-projects.ts +26 -0
  473. package/src/hooks/use-run-dashboard.ts +207 -0
  474. package/src/hooks/use-run-detail.ts +77 -0
  475. package/src/hooks/use-smart-polling.ts +144 -0
  476. package/src/lib/.gitkeep +0 -0
  477. package/src/lib/__tests__/cn.test.ts +69 -0
  478. package/src/lib/__tests__/config-loader.test.ts +210 -0
  479. package/src/lib/__tests__/config.test.ts +561 -0
  480. package/src/lib/__tests__/error-handler.test.ts +143 -0
  481. package/src/lib/__tests__/fetcher.test.ts +517 -0
  482. package/src/lib/__tests__/global-registry.test.ts +214 -0
  483. package/src/lib/__tests__/parser.test.ts +1532 -0
  484. package/src/lib/__tests__/path-resolver.test.ts +112 -0
  485. package/src/lib/__tests__/run-cache.test.ts +591 -0
  486. package/src/lib/__tests__/server-init.test.ts +512 -0
  487. package/src/lib/__tests__/source-discovery.test.ts +246 -0
  488. package/src/lib/__tests__/utils.test.ts +160 -0
  489. package/src/lib/__tests__/watcher.test.ts +227 -0
  490. package/src/lib/cn.ts +6 -0
  491. package/src/lib/config-loader.ts +195 -0
  492. package/src/lib/config.ts +20 -0
  493. package/src/lib/error-handler.ts +76 -0
  494. package/src/lib/fetcher.ts +394 -0
  495. package/src/lib/global-registry.ts +117 -0
  496. package/src/lib/parser.ts +794 -0
  497. package/src/lib/path-resolver.ts +16 -0
  498. package/src/lib/run-cache.ts +404 -0
  499. package/src/lib/server-init.ts +226 -0
  500. package/src/lib/services/__tests__/run-query-service.test.ts +819 -0
  501. package/src/lib/services/run-query-service.ts +286 -0
  502. package/src/lib/source-discovery.ts +216 -0
  503. package/src/lib/utils.ts +103 -0
  504. package/src/lib/watcher.ts +265 -0
  505. package/src/test/fixtures.ts +269 -0
  506. package/src/test/mocks/handlers.ts +110 -0
  507. package/src/test/mocks/server.ts +17 -0
  508. package/src/test/setup.ts +200 -0
  509. package/src/test/test-utils.tsx +36 -0
  510. package/src/types/.gitkeep +0 -0
  511. package/src/types/breakpoint.ts +17 -0
  512. package/src/types/index.ts +214 -0
  513. package/tsconfig.json +50 -0
package/README.md ADDED
@@ -0,0 +1,490 @@
1
+ # @a5c-ai/babysitter-observer-dashboard
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@a5c-ai/babysitter-observer-dashboard.svg)](https://www.npmjs.com/package/@a5c-ai/babysitter-observer-dashboard)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)
6
+
7
+ Real-time observability dashboard for [babysitter](https://github.com/a5c-ai/babysitter) orchestration runs.
8
+
9
+ <!-- docs-status:start -->
10
+ > Status: Public package.
11
+ > Canonical docs home: [Package and Plugin Docs Map](../../docs/package-and-plugin-map.md).
12
+ > This README is the canonical operator guide for the observer dashboard package.
13
+ <!-- docs-status:end -->
14
+
15
+ ## What is Babysitter Observer Dashboard?
16
+
17
+ Babysitter Observer Dashboard is a real-time browser-based monitoring UI for [babysitter](https://github.com/a5c-ai/babysitter) orchestration runs. If you use babysitter to orchestrate multi-step AI agent workflows, this dashboard gives you live visibility into what's happening across all your projects -- no more flying blind in the terminal. Point it at a directory, and it auto-discovers runs, streams updates to your browser, and lets you approve breakpoints without switching contexts.
18
+
19
+ ## Prerequisites
20
+
21
+ - **Node.js >= 20** (LTS recommended)
22
+ - A project using [babysitter](https://github.com/a5c-ai/babysitter) with `.a5c/runs/` directories
23
+ - That's it -- zero config needed beyond that
24
+
25
+ ## Features
26
+
27
+ - **Multi-project dashboard** -- auto-discovers `.a5c/runs/` directories across multiple projects and groups runs by project
28
+ - **Smart layout** -- active runs shown prominently; recently completed projects stay visible for a configurable recency window before moving to collapsible "Recent History"
29
+ - **Health cards** -- at-a-glance status cards showing active, completed, and failed runs per project with KPI metrics
30
+ - **Expanded project mini-dashboard** -- drill into any project to see runs organized into Active, Failed, and Completed sections with mini KPI pills
31
+ - **Pipeline visualization** -- step-by-step view of task pipelines with parallel group rendering, duration tracking, and error details
32
+ - **Real-time event stream** -- Server-Sent Events (SSE) push updates to the browser the instant a journal file changes on disk
33
+ - **Breakpoint UI** -- view breakpoint details, questions, and attached files directly in the dashboard
34
+ - **Run detail view** -- deep-dive into any run with agent details, timing breakdowns, logs, and raw JSON inspection
35
+ - **Run retention** -- configurable retention window (default 30 days) filters old runs from the dashboard for performance at scale
36
+ - **Keyboard shortcuts** -- navigate runs with j/k, open with Enter, focus search with /, switch tabs with 1-5, and view all shortcuts with ?
37
+ - **Executive summary banner** -- color-coded severity banner (green/amber/red) showing system health at a glance with clickable issue links that filter the dashboard
38
+ - **Context-aware shortcuts help** -- press ? to see keyboard shortcuts relevant to your current page (dashboard vs run detail)
39
+ - **Dark and light themes** -- toggle between dark and light mode; persisted in the registry file
40
+ - **Configurable polling** -- adaptive smart-polling with backoff; poll interval is tunable via CLI, environment, or the settings panel
41
+ - **Editable settings panel** -- add or remove watch sources, change poll interval, set retention window, and switch themes from the UI (persisted to `~/.a5c/observer.json`)
42
+ - **Resilient networking** -- automatic retry with exponential backoff for transient API failures and AbortSignal integration
43
+ - **CLI launcher** -- single command to start the dashboard pointing at any directory
44
+ - **Lightweight digest endpoint** -- efficient polling endpoint that returns only run metadata, avoiding full payload transfers
45
+ - **Global search** -- search runs by ID, title, or project name across all projects (Ctrl+K)
46
+ - **Sort and filter tabs** -- filter by All, Active, Completed, or Failed runs; sort by most recent activity
47
+ - **Project visibility** -- hide/show projects from the settings panel without removing watch sources
48
+ - **WCAG AA accessibility** -- minimum 12px text sizes, 4.5:1+ contrast ratios in both light and dark themes
49
+ - **Breakpoint visibility** -- view pending breakpoints with full context directly in the dashboard banner (approval is handled by the babysitter CLI or stop-hook)
50
+ - **Stale breakpoint dismiss** -- dismiss breakpoints that have been waiting too long with a single click; persisted in localStorage
51
+ - **Catch-up banner** -- overnight summary showing failed/completed/pending counts when revisiting after extended absence
52
+ - **Orphaned run detection** -- automatically detects runs where all tasks completed but the process crashed before writing `RUN_COMPLETED`; shows "Interrupted" badge
53
+ - **Hydration-safe persistence** -- persisted UI state (collapse/expand, sort, filters) survives page navigation with zero flash using `useLayoutEffect`
54
+ - **Batched updates** -- 1500ms debounce prevents UI thrash from rapid SSE events during active orchestration
55
+
56
+ ## Quick Start
57
+
58
+ ### Option 1: Run directly with npx
59
+
60
+ ```bash
61
+ npx -y @a5c-ai/babysitter-observer-dashboard@latest
62
+ ```
63
+
64
+ ### Option 2: Install globally
65
+
66
+ ```bash
67
+ npm install -g @a5c-ai/babysitter-observer-dashboard@latest
68
+ babysitter-observer-dashboard
69
+ ```
70
+
71
+ ### Option 3: Add as a dev dependency
72
+
73
+ ```bash
74
+ npm install --save-dev @a5c-ai/babysitter-observer-dashboard
75
+ ```
76
+
77
+ Then add a script to your `package.json`:
78
+
79
+ ```json
80
+ {
81
+ "scripts": {
82
+ "observe": "babysitter-observer-dashboard --watch-dir ."
83
+ }
84
+ }
85
+ ```
86
+
87
+ Or run it directly with npx without adding a script:
88
+
89
+ ```bash
90
+ npx babysitter-observer-dashboard --watch-dir .
91
+ ```
92
+
93
+ The dashboard opens at [http://localhost:4800](http://localhost:4800) by default, and the CLI prints the exact local URL when it starts.
94
+
95
+ ### Updating
96
+
97
+ The CLI checks for newer versions on startup and shows a notice when an update is available:
98
+
99
+ ```
100
+ Update available: 0.10.1 → 0.11.0
101
+ Run: npm i -g @a5c-ai/babysitter-observer-dashboard@latest
102
+ ```
103
+
104
+ To update, run the command shown in the notice. If you use `npx`, pass `@latest` to ensure you always get the newest version:
105
+
106
+ ```bash
107
+ npx -y @a5c-ai/babysitter-observer-dashboard@latest
108
+ ```
109
+
110
+ ## CLI Reference
111
+
112
+ ```
113
+ babysitter-observer-dashboard [options]
114
+ ```
115
+
116
+ | Flag | Type | Default | Description |
117
+ |------|------|---------|-------------|
118
+ | `--port <number>` | number | `4800` | Port the dashboard listens on |
119
+ | `--watch-dir <path>` | string | current working directory | Directory to watch for `.a5c/runs/` subdirectories |
120
+ | `--poll-interval <ms>` | number | `2000` | Polling interval in milliseconds |
121
+ | `--theme <dark\|light>` | string | `dark` | Default UI color theme |
122
+ | `--dev` | boolean | `false` | Run in dev mode (`next dev`) instead of production mode (`next start`) |
123
+ | `--version`, `-v` | -- | -- | Show version number and exit |
124
+ | `--help`, `-h` | -- | -- | Show help message and exit |
125
+
126
+ ### Examples
127
+
128
+ ```bash
129
+ # Watch a specific project directory on a custom port
130
+ babysitter-observer-dashboard --port 3002 --watch-dir /home/user/projects
131
+
132
+ # Light theme
133
+ babysitter-observer-dashboard --theme light
134
+
135
+ # Fast polling for latency-sensitive workflows
136
+ babysitter-observer-dashboard --poll-interval 500
137
+ ```
138
+
139
+ ### Environment Variable Mapping
140
+
141
+ CLI flags map to environment variables with the following precedence (highest to lowest):
142
+
143
+ 1. Registry file (`~/.a5c/observer.json`)
144
+ 2. CLI flags / `OBSERVER_*` environment variables
145
+ 3. Legacy environment variables (`PORT`, `WATCH_DIR`, `POLL_INTERVAL`, `THEME`)
146
+ 4. Built-in defaults
147
+
148
+ | CLI Flag | Environment Variable |
149
+ |----------|---------------------|
150
+ | `--port` | `OBSERVER_PORT` |
151
+ | `--watch-dir` | `OBSERVER_WATCH_DIR` |
152
+ | `--poll-interval` | `OBSERVER_POLL_INTERVAL` |
153
+ | `--theme` | `OBSERVER_DEFAULT_THEME` |
154
+
155
+ ## Dashboard Settings Panel
156
+
157
+ The dashboard includes a built-in settings panel (click the gear icon in the top-right corner) where you can configure the observer without restarting it. All changes are persisted to `~/.a5c/observer.json` and take effect immediately.
158
+
159
+ ### Watch Sources
160
+
161
+ Watch sources tell the observer **where** to look for `.a5c/runs/` directories on your filesystem. Each source has two properties:
162
+
163
+ | Field | Description |
164
+ |-------|-------------|
165
+ | **Path** | The root directory to scan. The observer will search inside this directory (and its subdirectories, up to the configured depth) for folders matching the pattern `<project>/.a5c/runs/`. For example, setting the path to `/home/user/source` will discover runs in `/home/user/source/my-project/.a5c/runs/`, `/home/user/source/another-project/.a5c/runs/`, etc. |
166
+ | **Depth** | How many directory levels deep to search for `.a5c/runs/` folders within the source path. A depth of **1** only checks immediate children of the path. A depth of **3** (the CLI default) checks up to 3 levels deep — e.g., `path/org/team/project/.a5c/runs/`. Increase the depth if your projects are nested in subdirectories; decrease it to speed up discovery if you have a flat project layout. |
167
+
168
+ **Add Source** — Click "Add Source" to add a new watch source. This is useful when your projects live in multiple locations on disk (e.g., `~/work` and `~/personal`). Each source is scanned independently.
169
+
170
+ **Remove Source** — Click the remove button next to a source to stop watching that directory. Existing runs from that source will disappear from the dashboard.
171
+
172
+ **Example configurations:**
173
+
174
+ | Scenario | Path | Depth |
175
+ |----------|------|-------|
176
+ | All projects under one folder | `/home/user/source` | 2 |
177
+ | Deeply nested monorepo | `/home/user/company/monorepo` | 4 |
178
+ | Single project only | `/home/user/source/my-project` | 1 |
179
+ | Home directory (broad scan) | `/home/user` | 3 |
180
+
181
+ ### Other Settings
182
+
183
+ | Setting | Description |
184
+ |---------|-------------|
185
+ | **Poll Interval** | How often (in milliseconds) the dashboard checks for updates. Lower values = faster updates but more CPU. Default: `2000` (2 seconds). |
186
+ | **Theme** | Switch between `dark` and `light` mode. |
187
+ | **Stale Threshold** | Time (in milliseconds) after which an inactive run is marked as stale. Default: `3600000` (1 hour). |
188
+ | **Recent Completion Window** | How long recently completed projects stay in the Active section. Default: `14400000` (4 hours). |
189
+ | **Retention Days** | Number of days to keep completed/failed runs visible in the dashboard. Older runs are hidden (not deleted from disk). Default: `30`. |
190
+ | **Hidden Projects** | Projects you've hidden from the dashboard view. Unhide them here to bring them back. |
191
+
192
+ ## Configuration
193
+
194
+ All configuration can be set via environment variables, the CLI, or the in-dashboard settings panel.
195
+
196
+ Copy `.env.example` to `.env` and customize:
197
+
198
+ ```bash
199
+ cp .env.example .env
200
+ ```
201
+
202
+ | Variable | Default | Description |
203
+ |----------|---------|-------------|
204
+ | `PORT` | `4800` | Port the dashboard listens on |
205
+ | `WATCH_DIR` | (current working directory) | Single directory to watch for `.a5c/runs/` |
206
+ | `WATCH_DIRS` | -- | Comma-separated list of directories to watch |
207
+ | `POLL_INTERVAL` | `2000` | Polling interval in milliseconds for run updates |
208
+ | `THEME` | `dark` | Default color theme (`dark` or `light`) |
209
+ | `OBSERVER_REGISTRY` | `~/.a5c/observer.json` | Path to the persistent config registry file |
210
+ | `OBSERVER_PORT` | -- | Port override (takes priority over `PORT`) |
211
+ | `OBSERVER_WATCH_DIR` | -- | Watch directory set by the CLI |
212
+ | `OBSERVER_POLL_INTERVAL` | -- | Poll interval override (takes priority over `POLL_INTERVAL`) |
213
+ | `OBSERVER_DEFAULT_THEME` | -- | Theme override (takes priority over `THEME`) |
214
+ | `OBSERVER_STALE_THRESHOLD_MS` | `3600000` | Time in milliseconds after which an inactive run is considered stale |
215
+ | `OBSERVER_RECENT_WINDOW_MS` | `14400000` | Time in milliseconds that recently completed projects stay in the Active section (default: 4 hours) |
216
+ | `OBSERVER_RETENTION_DAYS` | `30` | Number of days to retain completed/failed runs in the dashboard (1-365) |
217
+
218
+ ### Registry File
219
+
220
+ The observer persists user-configured settings to `~/.a5c/observer.json`. This file is created and updated when you change settings from the dashboard UI or via the `POST /api/config` endpoint. It stores:
221
+
222
+ - **sources** -- watched directories with path, search depth, and optional label
223
+ - **pollInterval** -- polling interval override
224
+ - **theme** -- color theme preference
225
+ - **staleThresholdMs** -- time (in milliseconds) after which an inactive run is marked stale (default: 3600000)
226
+ - **recentCompletionWindowMs** -- time (in milliseconds) that recently completed projects stay in the Active section (default: 14400000 / 4 hours)
227
+ - **retentionDays** -- number of days to retain completed/failed runs in the dashboard (default: 30)
228
+
229
+ ## How It Works
230
+
231
+ ```
232
+ Filesystem Observer Server Browser
233
+ ---------- --------------- -------
234
+ .a5c/runs/ |
235
+ <runId>/ --(fs watch)--> Watcher |
236
+ journal/ | |
237
+ 0001.json In-memory cache |
238
+ 0002.json | |
239
+ tasks/ Next.js API routes |
240
+ <effectId>/ | |
241
+ ... SSE stream --+--> /api/stream ---------> EventSource
242
+ REST API --+--> /api/runs ---------> Dashboard UI
243
+ --+--> /api/digest ---------> Smart Polling
244
+ ```
245
+
246
+ 1. **Watch** -- A file-system watcher monitors configured directories for `.a5c/runs/` folders. It recursively scans up to a configurable depth (default 2 levels).
247
+ 2. **Parse** -- When journal files change, the parser reads NDJSON journal entries and constructs run/task state in an in-memory cache.
248
+ 3. **Serve** -- A Next.js 14 App Router application exposes both REST endpoints and an SSE stream.
249
+ 4. **Display** -- The React dashboard connects via SSE for instant push updates and falls back to adaptive polling. Runs are grouped by project, with health cards, pipeline visualization, and breakpoint visibility built in.
250
+
251
+ ## API Reference
252
+
253
+ All endpoints include `Cache-Control: no-cache, no-store` headers and return JSON unless noted otherwise.
254
+
255
+ | Method | Endpoint | Description |
256
+ |--------|----------|-------------|
257
+ | `GET` | `/api/test` | Health check. Returns `"test"` with status 200. |
258
+ | `GET` | `/api/config` | Returns the current merged configuration (sources, port, pollInterval, theme). |
259
+ | `POST` | `/api/config` | Updates the registry file with new sources, pollInterval, and/or theme. |
260
+ | `GET` | `/api/digest` | Lightweight run digests for all discovered runs. Returns `{ runs: RunDigest[] }`. |
261
+ | `GET` | `/api/runs` | Lists all runs. Supports query parameters: `mode=projects` (returns project summaries), `project=<name>` (filters by project), `limit`, `offset`, `search`, `status`. |
262
+ | `GET` | `/api/runs/:runId` | Full detail for a single run. Supports `?maxEvents=<n>` (default 50) to limit events in the response. |
263
+ | `GET` | `/api/runs/:runId/events` | Paginated journal events. Supports `?limit=<n>&offset=<n>`. |
264
+ | `GET` | `/api/runs/:runId/tasks/:effectId` | Full task detail including input, result, stdout, stderr, and breakpoint data. |
265
+ | `GET` | `/api/stream` | SSE event stream. Emits `connected`, `update`, `new-run`, and `error` events. Sends keep-alive pings every 15 seconds. |
266
+
267
+ ## Development
268
+
269
+ ### Prerequisites
270
+
271
+ - Node.js 20+ (LTS recommended)
272
+ - npm 9+
273
+
274
+ ### Setup
275
+
276
+ ```bash
277
+ npm install
278
+ ```
279
+
280
+ ### Run in Development Mode
281
+
282
+ ```bash
283
+ npm run dev
284
+ ```
285
+
286
+ The dashboard starts at [http://localhost:4800](http://localhost:4800).
287
+
288
+ To point at a specific watch directory:
289
+
290
+ ```bash
291
+ npm run dev:cli -- --watch-dir /path/to/project
292
+ ```
293
+
294
+ ### Build for Production
295
+
296
+ ```bash
297
+ npm run build
298
+ npm start
299
+ ```
300
+
301
+ ### Project Structure
302
+
303
+ ```
304
+ src/
305
+ app/ # Next.js App Router pages
306
+ page.tsx # Dashboard home (project list)
307
+ runs/[runId]/page.tsx # Run detail view
308
+ api/
309
+ config/route.ts # GET/POST observer configuration
310
+ digest/route.ts # Lightweight polling digest
311
+ runs/route.ts # List runs, filter by project
312
+ runs/[runId]/route.ts # Single run detail
313
+ runs/[runId]/events/ # Journal events for a run
314
+ runs/[runId]/tasks/ # Task detail
315
+ stream/route.ts # SSE event stream
316
+ test/route.ts # Health check endpoint
317
+ components/
318
+ breakpoint/ # Breakpoint approval UI
319
+ dashboard/ # Dashboard cards, lists, project sections
320
+ details/ # Run detail panels (agent, timing, logs, JSON)
321
+ events/ # Real-time event stream display
322
+ notifications/ # Toast and notification system
323
+ pipeline/ # Pipeline visualization (step cards, parallel groups)
324
+ providers/ # Context providers (event stream)
325
+ shared/ # Reusable UI primitives (badges, pills, modals)
326
+ ui/ # Base UI components (button, card, tabs, etc.)
327
+ hooks/
328
+ use-event-stream.ts # SSE connection management
329
+ use-keyboard.ts # Keyboard shortcut bindings
330
+ use-notifications.ts # Browser + in-app notifications
331
+ use-polling.ts # Generic polling hook
332
+ use-project-runs.ts # Paginated runs for a project
333
+ use-projects.ts # Project summary list
334
+ use-run-detail.ts # Single run detail fetching
335
+ use-smart-polling.ts # Adaptive polling with backoff
336
+ lib/
337
+ cn.ts # Tailwind class merge utility
338
+ config.ts # Server-side config loading and discovery
339
+ error-handler.ts # Centralized error normalization
340
+ fetcher.ts # Resilient fetch with retry and abort
341
+ parser.ts # Journal event parsing
342
+ run-cache.ts # In-memory run cache with retention filtering
343
+ server-init.ts # Server initialization (watcher + cache)
344
+ utils.ts # Formatting helpers (duration, timestamps, IDs)
345
+ watcher.ts # File-system watcher for run directories
346
+ types/
347
+ index.ts # Core type definitions
348
+ ```
349
+
350
+ ## Testing
351
+
352
+ ### Unit Tests
353
+
354
+ Unit tests use [Vitest](https://vitest.dev/) with [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) and [MSW](https://mswjs.io/) for API mocking.
355
+
356
+ ```bash
357
+ # Run all unit tests once
358
+ npm test
359
+
360
+ # Run in watch mode during development
361
+ npm run test:watch
362
+
363
+ # Generate coverage report
364
+ npm run test:coverage
365
+ ```
366
+
367
+ ### End-to-End Tests
368
+
369
+ E2E tests use [Playwright](https://playwright.dev/) and run against a live dev server with fixture data.
370
+
371
+ ```bash
372
+ # Install Playwright browsers (first time only)
373
+ npx playwright install
374
+
375
+ # Run E2E tests
376
+ npx playwright test
377
+
378
+ # Run with UI mode for debugging
379
+ npx playwright test --ui
380
+
381
+ # View the HTML report after a run
382
+ npx playwright show-report
383
+ ```
384
+
385
+ The Playwright configuration (`playwright.config.ts`) automatically starts a dev server pointed at `e2e/fixtures/runs/` so tests run against deterministic data.
386
+
387
+ ## Troubleshooting
388
+
389
+ ### Port already in use
390
+
391
+ If you see `Error: listen EADDRINUSE :::4800`, another process is using the default port. Either stop the other process or start the observer on a different port:
392
+
393
+ ```bash
394
+ babysitter-observer-dashboard --port 4801
395
+ ```
396
+
397
+ ### Permission errors on global install
398
+
399
+ On macOS/Linux, global npm installs may require elevated permissions. If you see `EACCES` or permission-denied errors, try one of these approaches:
400
+
401
+ **Recommended: use npx instead (no global install needed):**
402
+
403
+ ```bash
404
+ npx -y @a5c-ai/babysitter-observer-dashboard@latest
405
+ ```
406
+
407
+ **Alternative: configure npm to use a user-writable directory:**
408
+
409
+ ```bash
410
+ mkdir -p ~/.npm-global
411
+ npm config set prefix "~/.npm-global"
412
+ export PATH=~/.npm-global/bin:$PATH
413
+ ```
414
+
415
+ Then retry the global install:
416
+
417
+ ```bash
418
+ npm install -g @a5c-ai/babysitter-observer-dashboard@latest
419
+ ```
420
+
421
+ **Alternative: use sudo (not recommended):**
422
+
423
+ ```bash
424
+ sudo npm install -g @a5c-ai/babysitter-observer-dashboard@latest
425
+ ```
426
+
427
+ ### No runs appearing in the dashboard
428
+
429
+ 1. **Verify the watch directory.** The observer looks for `.a5c/runs/` subdirectories within the configured watch path. Run the observer with an explicit `--watch-dir` pointing to the parent of your project:
430
+
431
+ ```bash
432
+ babysitter-observer-dashboard --watch-dir /path/to/your/project
433
+ ```
434
+
435
+ 2. **Check directory structure.** The expected layout is:
436
+
437
+ ```
438
+ <project>/
439
+ .a5c/
440
+ runs/
441
+ <runId>/
442
+ journal/
443
+ 0001.json
444
+ ```
445
+
446
+ 3. **Increase search depth.** By default the observer scans 2 levels deep. If your `.a5c/runs/` directories are nested deeper, update the source depth in the settings panel or via `POST /api/config`.
447
+
448
+ ### WSL2 file-watching delays
449
+
450
+ When running the observer on Windows but watching files on a WSL2 filesystem (or vice versa), cross-filesystem events may be delayed or missed entirely. Workarounds:
451
+
452
+ - Run the observer inside the same environment as your babysitter processes (both in WSL, or both on the Windows side).
453
+ - Lower the poll interval to compensate: `babysitter-observer-dashboard --poll-interval 1000`.
454
+
455
+ ### Registry file permissions
456
+
457
+ The observer reads and writes `~/.a5c/observer.json`. If this file or directory is not writable, settings changes from the UI will fail silently. Ensure the `~/.a5c/` directory exists and is writable:
458
+
459
+ ```bash
460
+ mkdir -p ~/.a5c
461
+ ```
462
+
463
+ ### Release channel ownership
464
+
465
+ `@a5c-ai/babysitter-observer-dashboard` is published from the monorepo release workflows:
466
+
467
+ - `main` publishes the production package through `.github/workflows/release.yml`
468
+ - `staging` publishes prerelease artifacts with the `staging` dist-tag through `.github/workflows/staging-publish.yml`
469
+
470
+ If you see `E404` or `ENOVERSIONS`, verify the branch-specific publish workflow succeeded before retrying the install.
471
+
472
+ ## Known Limitations
473
+
474
+ The API and configuration format may change between minor versions.
475
+
476
+ - **Local only** -- The observer reads run data from the local filesystem. There is no remote/cloud mode.
477
+ - **No authentication** -- The dashboard and API endpoints are unauthenticated. Do not expose to untrusted networks.
478
+ - **No persistent storage** -- All run state is held in an in-memory cache rebuilt from journal files on startup. Restarting the server reloads from disk.
479
+ - **WSL2 file-watching latency** -- On Windows Subsystem for Linux 2, cross-filesystem file-system events may be delayed. The observer compensates with polling but updates may lag behind native Linux or macOS.
480
+ - **Single-instance only** -- Running multiple observer instances watching the same directories is untested and may produce duplicate SSE events.
481
+ - **Large run directories** -- Discovery scans are cached and debounced (filesystem rescans happen at most once per 60 seconds, triggered by the watcher on new-run events). The digest API reads purely from the in-memory cache with zero filesystem I/O. Thousands of run directories are handled efficiently, though initial startup may take a few seconds for the first scan.
482
+ - **Runs visible only after first write to `.a5c/runs/`** -- The dashboard monitors `.a5c/runs/` directories for run data. Regular Claude Code terminal sessions that do not use babysitter orchestration will not appear on the dashboard. A run becomes visible only after the babysitter runtime writes its first journal entry to `.a5c/runs/<runId>/journal/`. This means there is a brief delay between starting a babysitter process and seeing it on the dashboard.
483
+ - **No run deletion or archival** -- The observer is fully read-only (except for the settings panel). There is no UI to delete, archive, or export runs.
484
+ - **Browser notifications** -- Notification support depends on browser permissions and may not work in all environments.
485
+
486
+
487
+
488
+ ## License
489
+
490
+ [MIT](https://opensource.org/licenses/MIT)
@@ -0,0 +1,25 @@
1
+ import { readFileSync } from 'fs';
2
+
3
+ const pkg = JSON.parse(readFileSync('./package.json', 'utf-8'));
4
+
5
+ /** @type {import('next').NextConfig} */
6
+ const nextConfig = {
7
+ env: {
8
+ NEXT_PUBLIC_APP_VERSION: pkg.version,
9
+ },
10
+ // Enable optimized barrel-import tree-shaking for heavy icon libraries.
11
+ // This transforms `import { X } from "lucide-react"` into direct subpath
12
+ // imports at build time, dramatically reducing the amount of module code
13
+ // that webpack must parse and eliminating unused icons from the bundle.
14
+ // Ignore TS errors from @types/react version mismatch in monorepo hoisting.
15
+ // The observer-dashboard uses React 18, while the catalog workspace uses React 19.
16
+ // Radix UI peer deps resolve @types/react from root (v19) causing false positives.
17
+ typescript: {
18
+ ignoreBuildErrors: true,
19
+ },
20
+ experimental: {
21
+ optimizePackageImports: ['lucide-react'],
22
+ },
23
+ };
24
+
25
+ export default nextConfig;
package/package.json ADDED
@@ -0,0 +1,104 @@
1
+ {
2
+ "name": "@a5c-ai/babysitter-observer-dashboard",
3
+ "version": "5.0.1-staging.7a8768ec",
4
+ "description": "Real-time observability dashboard for babysitter orchestration runs",
5
+ "private": false,
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "license": "MIT",
10
+ "bin": {
11
+ "babysitter-observer-dashboard": "./dist/cli.js"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/a5c-ai/babysitter.git",
16
+ "directory": "packages/observer-dashboard"
17
+ },
18
+ "homepage": "https://github.com/a5c-ai/babysitter/tree/main/packages/observer-dashboard#readme",
19
+ "bugs": {
20
+ "url": "https://github.com/a5c-ai/babysitter/issues"
21
+ },
22
+ "keywords": [
23
+ "babysitter",
24
+ "observer",
25
+ "dashboard",
26
+ "orchestration",
27
+ "monitoring",
28
+ "nextjs",
29
+ "sse",
30
+ "real-time"
31
+ ],
32
+ "engines": {
33
+ "node": ">=20.0.0"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "src",
38
+ ".next/server",
39
+ ".next/static",
40
+ ".next/BUILD_ID",
41
+ ".next/*.json",
42
+ ".next/package.json",
43
+ "public",
44
+ "next.config.mjs",
45
+ "postcss.config.mjs",
46
+ "tsconfig.json",
47
+ "README.md",
48
+ "LICENSE"
49
+ ],
50
+ "scripts": {
51
+ "dev": "next dev --port 4800",
52
+ "dev:cli": "npx ts-node --skip-project src/cli.ts",
53
+ "build": "next build",
54
+ "build:cli": "node -e \"const v=require('./package.json').version;require('esbuild').buildSync({entryPoints:['src/cli.ts'],bundle:true,platform:'node',target:'node18',outfile:'dist/cli.js',external:['next'],define:{'__CLI_VERSION__':JSON.stringify(v)}})\"",
55
+ "start": "next start --port 4800",
56
+ "lint": "next lint",
57
+ "pretest": "node scripts/ensure-local-deps.mjs",
58
+ "test": "vitest run",
59
+ "test:watch": "vitest",
60
+ "test:coverage": "vitest run --coverage",
61
+ "test:e2e": "npx playwright test",
62
+ "test:perf": "npx playwright test e2e/tests/performance.spec.ts"
63
+ },
64
+ "dependencies": {
65
+ "@a5c-ai/compendium": "^0.1.0",
66
+ "@radix-ui/react-accordion": "^1.1.2",
67
+ "@radix-ui/react-dialog": "^1.1.15",
68
+ "@radix-ui/react-scroll-area": "^1.0.5",
69
+ "@radix-ui/react-separator": "^1.0.3",
70
+ "@radix-ui/react-slot": "^1.0.2",
71
+ "@radix-ui/react-tabs": "^1.0.4",
72
+ "@radix-ui/react-tooltip": "^1.2.8",
73
+ "@tanstack/react-virtual": "^3.13.19",
74
+ "class-variance-authority": "^0.7.0",
75
+ "clsx": "^2.1.0",
76
+ "lucide-react": "^0.344.0",
77
+ "next": "16.2.3",
78
+ "react": "^19.2.5",
79
+ "react-dom": "^19.2.5",
80
+ "tailwind-merge": "^2.2.0",
81
+ "ulid": "^3.0.2"
82
+ },
83
+ "devDependencies": {
84
+ "@adobe/css-tools": "^4.4.4",
85
+ "@playwright/test": "^1.58.2",
86
+ "@tailwindcss/postcss": "^4",
87
+ "@testing-library/dom": "^10.4.1",
88
+ "@testing-library/jest-dom": "^6.9.1",
89
+ "@testing-library/react": "^16.3.2",
90
+ "@testing-library/user-event": "^14.5.2",
91
+ "@types/node": "^20",
92
+ "@types/react": "^19",
93
+ "@types/react-dom": "^19",
94
+ "@vitest/coverage-v8": "^4.0.18",
95
+ "esbuild": "^0.25.0",
96
+ "eslint": "^9",
97
+ "eslint-config-next": "16.2.3",
98
+ "jsdom": "^24.1.3",
99
+ "msw": "^2.12.10",
100
+ "tailwindcss": "^4",
101
+ "typescript": "^5",
102
+ "vitest": "^4.0.18"
103
+ }
104
+ }
@@ -0,0 +1,8 @@
1
+ /** @type {import('postcss-load-config').Config} */
2
+ const config = {
3
+ plugins: {
4
+ "@tailwindcss/postcss": {},
5
+ },
6
+ };
7
+
8
+ export default config;