@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.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +16 -0
- package/.next/build-manifest.json +23 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +114 -0
- package/.next/required-server-files.json +334 -0
- package/.next/routes-manifest.json +139 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +19 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +9 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +14 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +19 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +19 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +19 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/api/config/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/config/route/build-manifest.json +9 -0
- package/.next/server/app/api/config/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/config/route.js +8 -0
- package/.next/server/app/api/config/route.js.map +5 -0
- package/.next/server/app/api/config/route.js.nft.json +1 -0
- package/.next/server/app/api/config/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/digest/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/digest/route/build-manifest.json +9 -0
- package/.next/server/app/api/digest/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/digest/route.js +9 -0
- package/.next/server/app/api/digest/route.js.map +5 -0
- package/.next/server/app/api/digest/route.js.nft.json +1 -0
- package/.next/server/app/api/digest/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/runs/[runId]/events/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/runs/[runId]/events/route/build-manifest.json +9 -0
- package/.next/server/app/api/runs/[runId]/events/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/runs/[runId]/events/route.js +8 -0
- package/.next/server/app/api/runs/[runId]/events/route.js.map +5 -0
- package/.next/server/app/api/runs/[runId]/events/route.js.nft.json +1 -0
- package/.next/server/app/api/runs/[runId]/events/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/runs/[runId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/runs/[runId]/route/build-manifest.json +9 -0
- package/.next/server/app/api/runs/[runId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/runs/[runId]/route.js +9 -0
- package/.next/server/app/api/runs/[runId]/route.js.map +5 -0
- package/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -0
- package/.next/server/app/api/runs/[runId]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route/build-manifest.json +9 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route.js +8 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route.js.map +5 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route.js.nft.json +1 -0
- package/.next/server/app/api/runs/[runId]/tasks/[effectId]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/runs/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/runs/route/build-manifest.json +9 -0
- package/.next/server/app/api/runs/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/runs/route.js +9 -0
- package/.next/server/app/api/runs/route.js.map +5 -0
- package/.next/server/app/api/runs/route.js.nft.json +1 -0
- package/.next/server/app/api/runs/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/stream/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/stream/route/build-manifest.json +9 -0
- package/.next/server/app/api/stream/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/stream/route.js +8 -0
- package/.next/server/app/api/stream/route.js.map +5 -0
- package/.next/server/app/api/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/stream/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/test/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/test/route/build-manifest.json +9 -0
- package/.next/server/app/api/test/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/test/route.js +6 -0
- package/.next/server/app/api/test/route.js.map +5 -0
- package/.next/server/app/api/test/route.js.nft.json +1 -0
- package/.next/server/app/api/test/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/version/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/version/route/build-manifest.json +9 -0
- package/.next/server/app/api/version/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/version/route.js +7 -0
- package/.next/server/app/api/version/route.js.map +5 -0
- package/.next/server/app/api/version/route.js.nft.json +1 -0
- package/.next/server/app/api/version/route_client-reference-manifest.js +3 -0
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route/build-manifest.json +9 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/icon.svg/route.js.map +5 -0
- package/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/.next/server/app/icon.svg.body +20 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +14 -0
- package/.next/server/app/index.rsc +21 -0
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/index.segments/_full.segment.rsc +21 -0
- package/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/.next/server/app/index.segments/_index.segment.rsc +8 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +19 -0
- package/.next/server/app/page/next-font-manifest.json +6 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +17 -0
- package/.next/server/app/page.js +15 -0
- package/.next/server/app/page.js.map +5 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app/runs/[runId]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/runs/[runId]/page/build-manifest.json +19 -0
- package/.next/server/app/runs/[runId]/page/next-font-manifest.json +6 -0
- package/.next/server/app/runs/[runId]/page/react-loadable-manifest.json +22 -0
- package/.next/server/app/runs/[runId]/page/server-reference-manifest.json +17 -0
- package/.next/server/app/runs/[runId]/page.js +15 -0
- package/.next/server/app/runs/[runId]/page.js.map +5 -0
- package/.next/server/app/runs/[runId]/page.js.nft.json +1 -0
- package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +16 -0
- package/.next/server/chunks/01oi_server_app_api_runs_[runId]_tasks_[effectId]_route_actions_0r72yai.js +3 -0
- package/.next/server/chunks/01oi_server_app_api_runs_[runId]_tasks_[effectId]_route_actions_0r72yai.js.map +1 -0
- package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_events_route_actions_0~msldk.js +3 -0
- package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_events_route_actions_0~msldk.js.map +1 -0
- package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_route_actions_09iz0n6.js +3 -0
- package/.next/server/chunks/0h.v__next-internal_server_app_api_runs_[runId]_route_actions_09iz0n6.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_config_route_actions_0~eypoa.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_config_route_actions_0~eypoa.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_digest_route_actions_04jj5zs.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_digest_route_actions_04jj5zs.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_runs_route_actions_0~-t-o4.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_runs_route_actions_0~-t-o4.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_stream_route_actions_0fkmv2_.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_stream_route_actions_0fkmv2_.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_test_route_actions_00ugava.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_test_route_actions_00ugava.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_version_route_actions_0~v3ojm.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_api_version_route_actions_0~v3ojm.js.map +1 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_icon_svg_route_actions_0yypxkm.js +3 -0
- package/.next/server/chunks/0juq_observer-dashboard__next-internal_server_app_icon_svg_route_actions_0yypxkm.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0.6bt.6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0.6bt.6._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__08kwev1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__08kwev1._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__096el.d._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__096el.d._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0_bmt4z._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0_bmt4z._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0_ln2d2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0_ln2d2._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0al3v65._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0al3v65._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0gf516b._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gf516b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0kdfw4x._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0kdfw4x._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0pxt00h._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0pxt00h._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0rubnza._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0rubnza._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0tn9iud._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0tn9iud._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0ws5o6i._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ws5o6i._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/node_modules_next_04~_e52._.js +13 -0
- package/.next/server/chunks/node_modules_next_04~_e52._.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0nyyph-.js +9 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0nyyph-.js.map +1 -0
- package/.next/server/chunks/packages_observer-dashboard_src_lib_02.vvb.._.js +3 -0
- package/.next/server/chunks/packages_observer-dashboard_src_lib_02.vvb.._.js.map +1 -0
- package/.next/server/chunks/packages_observer-dashboard_src_lib_0rqgpk0._.js +3 -0
- package/.next/server/chunks/packages_observer-dashboard_src_lib_0rqgpk0._.js.map +1 -0
- package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__global-error_page_actions_0ekoxmy.js +3 -0
- package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__global-error_page_actions_0ekoxmy.js.map +1 -0
- package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__not-found_page_actions_09b3ti3.js +3 -0
- package/.next/server/chunks/ssr/0juq_observer-dashboard__next-internal_server_app__not-found_page_actions_09b3ti3.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__006f7~t._.js +4 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__006f7~t._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__02jgvbi._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__02jgvbi._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__04j8t~1._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__04j8t~1._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__09c~s.0._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__09c~s.0._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cpy61n._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cpy61n._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cwa32j._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0cwa32j._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fk_g0j._.js +19 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fk_g0j._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pddpic._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pddpic._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pvtneq._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pvtneq._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xc-2vm._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xc-2vm._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10xgshr._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__10xgshr._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/ssr/_00yo1im._.js +3 -0
- package/.next/server/chunks/ssr/_00yo1im._.js.map +1 -0
- package/.next/server/chunks/ssr/_03sbc.o._.js +3 -0
- package/.next/server/chunks/ssr/_03sbc.o._.js.map +1 -0
- package/.next/server/chunks/ssr/_04z5ea0._.js +3 -0
- package/.next/server/chunks/ssr/_04z5ea0._.js.map +1 -0
- package/.next/server/chunks/ssr/_0gmb3g_._.js +3 -0
- package/.next/server/chunks/ssr/_0gmb3g_._.js.map +1 -0
- package/.next/server/chunks/ssr/_0okz9j8._.js +6 -0
- package/.next/server/chunks/ssr/_0okz9j8._.js.map +1 -0
- package/.next/server/chunks/ssr/_0wrbwro._.js +6 -0
- package/.next/server/chunks/ssr/_0wrbwro._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_09w7yel._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_09w7yel._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0avqw4q._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0avqw4q._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0i_._k3._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0i_._k3._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0ee1czk._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0ee1czk._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0amzg6z.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0amzg6z.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dw1x0d.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0dw1x0d.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_10iomok.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_10iomok.js.map +1 -0
- package/.next/server/chunks/ssr/packages_observer-dashboard_0~a2tmu._.js +3 -0
- package/.next/server/chunks/ssr/packages_observer-dashboard_0~a2tmu._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_observer-dashboard_src_0f.ozc-._.js +3 -0
- package/.next/server/chunks/ssr/packages_observer-dashboard_src_0f.ozc-._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_observer-dashboard_src_components_providers_tsx_03_vrrn._.js +7 -0
- package/.next/server/chunks/ssr/packages_observer-dashboard_src_components_providers_tsx_03_vrrn._.js.map +1 -0
- package/.next/server/functions-config-manifest.json +4 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +23 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +6 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +24 -0
- package/.next/static/MvfPly4ZXHqaveDVOG1qq/_buildManifest.js +11 -0
- package/.next/static/MvfPly4ZXHqaveDVOG1qq/_clientMiddlewareManifest.js +1 -0
- package/.next/static/MvfPly4ZXHqaveDVOG1qq/_ssgManifest.js +1 -0
- package/.next/static/chunks/00c87uqn~kk2z.js +1 -0
- package/.next/static/chunks/01xlw8hd842-c.js +1 -0
- package/.next/static/chunks/02p9dpa.0oxiz.js +1 -0
- package/.next/static/chunks/034i63v_muq~d.js +1 -0
- package/.next/static/chunks/03mo-6~4pxdio.js +1 -0
- package/.next/static/chunks/03~yq9q893hmn.js +1 -0
- package/.next/static/chunks/04dm5qn77.fc2.js +1 -0
- package/.next/static/chunks/07uz2g0_38qia.js +4 -0
- package/.next/static/chunks/08nqnwvixoxnk.js +2 -0
- package/.next/static/chunks/0d3shmwh5_nmn.js +1 -0
- package/.next/static/chunks/0e_wyjw3nx.a..js +1 -0
- package/.next/static/chunks/0mstyq17cbf8-.js +1 -0
- package/.next/static/chunks/0ntuxw9.how-q.js +1 -0
- package/.next/static/chunks/0t3uzajv1qzmo.js +1 -0
- package/.next/static/chunks/0u~_nwr5-v.xp.js +1 -0
- package/.next/static/chunks/0wxcxh6eyzams.js +1 -0
- package/.next/static/chunks/0x6y7yt4kiddp.css +1 -0
- package/.next/static/chunks/0z6-vonyxr0dn.js +4 -0
- package/.next/static/chunks/0ze4gu236oq96.js +31 -0
- package/.next/static/chunks/0zwozael9msy1.js +1 -0
- package/.next/static/chunks/10qd__0r7a~.l.js +1 -0
- package/.next/static/chunks/11jh_u1ynmatg.js +1 -0
- package/.next/static/chunks/13xer3cb9shu-.js +5 -0
- package/.next/static/chunks/142zlnch_xmgd.js +1 -0
- package/.next/static/chunks/144kcri75qczu.js +1 -0
- package/.next/static/chunks/turbopack-0-ww6fe7b37qt.js +1 -0
- package/.next/static/media/icon.08ljfy7xai2x_.svg +20 -0
- package/LICENSE +21 -0
- package/README.md +490 -0
- package/next.config.mjs +25 -0
- package/package.json +104 -0
- package/postcss.config.mjs +8 -0
- package/src/app/actions/__tests__/approve-breakpoint.test.ts +246 -0
- package/src/app/actions/approve-breakpoint.ts +145 -0
- package/src/app/api/config/route.ts +137 -0
- package/src/app/api/digest/route.ts +45 -0
- package/src/app/api/runs/[runId]/events/route.ts +56 -0
- package/src/app/api/runs/[runId]/route.ts +84 -0
- package/src/app/api/runs/[runId]/tasks/[effectId]/route.ts +44 -0
- package/src/app/api/runs/route.ts +48 -0
- package/src/app/api/stream/route.ts +136 -0
- package/src/app/api/test/route.ts +1 -0
- package/src/app/api/version/route.ts +57 -0
- package/src/app/globals.css +555 -0
- package/src/app/icon.svg +20 -0
- package/src/app/layout.tsx +39 -0
- package/src/app/not-found.tsx +16 -0
- package/src/app/page.tsx +120 -0
- package/src/app/runs/[runId]/page.tsx +279 -0
- package/src/cli.ts +271 -0
- package/src/components/breakpoint/__tests__/breakpoint-approval.test.tsx +212 -0
- package/src/components/breakpoint/__tests__/breakpoint-panel.test.tsx +130 -0
- package/src/components/breakpoint/__tests__/file-preview.test.tsx +313 -0
- package/src/components/breakpoint/breakpoint-approval.tsx +138 -0
- package/src/components/breakpoint/breakpoint-panel.tsx +95 -0
- package/src/components/breakpoint/file-preview.tsx +215 -0
- package/src/components/dashboard/.gitkeep +0 -0
- package/src/components/dashboard/__tests__/breakpoint-banner.test.tsx +177 -0
- package/src/components/dashboard/__tests__/catch-up-banner.test.tsx +141 -0
- package/src/components/dashboard/__tests__/executive-summary-banner.test.tsx +164 -0
- package/src/components/dashboard/__tests__/kpi-grid.test.tsx +101 -0
- package/src/components/dashboard/__tests__/pagination-controls.test.tsx +125 -0
- package/src/components/dashboard/__tests__/project-accordion.test.tsx +97 -0
- package/src/components/dashboard/__tests__/project-list-view.test.tsx +174 -0
- package/src/components/dashboard/__tests__/project-search-input.test.tsx +110 -0
- package/src/components/dashboard/__tests__/project-section-header.test.tsx +91 -0
- package/src/components/dashboard/__tests__/project-section.test.tsx +151 -0
- package/src/components/dashboard/__tests__/run-card.test.tsx +164 -0
- package/src/components/dashboard/__tests__/run-filter-bar.test.tsx +109 -0
- package/src/components/dashboard/__tests__/run-list.test.tsx +123 -0
- package/src/components/dashboard/__tests__/search-filter.test.tsx +150 -0
- package/src/components/dashboard/__tests__/virtualized-run-list.test.tsx +179 -0
- package/src/components/dashboard/breakpoint-banner.tsx +301 -0
- package/src/components/dashboard/catch-up-banner.tsx +88 -0
- package/src/components/dashboard/executive-summary-banner.tsx +174 -0
- package/src/components/dashboard/global-search.tsx +323 -0
- package/src/components/dashboard/kpi-grid.tsx +140 -0
- package/src/components/dashboard/pagination-controls.tsx +100 -0
- package/src/components/dashboard/project-accordion.tsx +72 -0
- package/src/components/dashboard/project-health-card.tsx +536 -0
- package/src/components/dashboard/project-list-view.tsx +246 -0
- package/src/components/dashboard/project-search-input.tsx +41 -0
- package/src/components/dashboard/project-section-header.tsx +73 -0
- package/src/components/dashboard/project-section.tsx +89 -0
- package/src/components/dashboard/run-card.tsx +218 -0
- package/src/components/dashboard/run-filter-bar.tsx +100 -0
- package/src/components/dashboard/run-list.tsx +77 -0
- package/src/components/dashboard/search-filter.tsx +69 -0
- package/src/components/dashboard/virtualized-run-list.tsx +130 -0
- package/src/components/details/.gitkeep +0 -0
- package/src/components/details/__tests__/agent-panel.test.tsx +236 -0
- package/src/components/details/__tests__/json-tree.test.tsx +347 -0
- package/src/components/details/__tests__/log-viewer.test.tsx +168 -0
- package/src/components/details/__tests__/task-detail.test.tsx +212 -0
- package/src/components/details/__tests__/timing-panel.test.tsx +271 -0
- package/src/components/details/agent-panel.tsx +234 -0
- package/src/components/details/json-tree/categorize.ts +131 -0
- package/src/components/details/json-tree/index.tsx +120 -0
- package/src/components/details/json-tree/json-node.tsx +223 -0
- package/src/components/details/json-tree/smart-summary.tsx +596 -0
- package/src/components/details/json-tree/tree-controls.tsx +47 -0
- package/src/components/details/json-tree.tsx +9 -0
- package/src/components/details/log-viewer.tsx +140 -0
- package/src/components/details/task-detail.tsx +114 -0
- package/src/components/details/timing-panel.tsx +247 -0
- package/src/components/events/.gitkeep +0 -0
- package/src/components/events/__tests__/event-item.test.tsx +211 -0
- package/src/components/events/__tests__/event-stream.test.tsx +225 -0
- package/src/components/events/event-item.tsx +121 -0
- package/src/components/events/event-stream.tsx +260 -0
- package/src/components/notifications/.gitkeep +0 -0
- package/src/components/notifications/__tests__/notification-panel.test.tsx +287 -0
- package/src/components/notifications/__tests__/notification-provider.test.tsx +585 -0
- package/src/components/notifications/__tests__/toast-stack.test.tsx +217 -0
- package/src/components/notifications/notification-panel.tsx +124 -0
- package/src/components/notifications/notification-provider.tsx +175 -0
- package/src/components/notifications/toast-stack.tsx +75 -0
- package/src/components/pipeline/.gitkeep +0 -0
- package/src/components/pipeline/__tests__/parallel-group.test.tsx +88 -0
- package/src/components/pipeline/__tests__/pipeline-view.test.tsx +345 -0
- package/src/components/pipeline/__tests__/step-card.test.tsx +330 -0
- package/src/components/pipeline/parallel-group.tsx +39 -0
- package/src/components/pipeline/pipeline-view.tsx +197 -0
- package/src/components/pipeline/step-card.tsx +166 -0
- package/src/components/providers/event-stream-provider.tsx +29 -0
- package/src/components/providers.tsx +24 -0
- package/src/components/shared/.gitkeep +0 -0
- package/src/components/shared/__tests__/empty-state.test.tsx +49 -0
- package/src/components/shared/__tests__/friendly-id.test.tsx +47 -0
- package/src/components/shared/__tests__/kbd.test.tsx +45 -0
- package/src/components/shared/__tests__/kind-badge.test.tsx +71 -0
- package/src/components/shared/__tests__/metrics-row.test.tsx +74 -0
- package/src/components/shared/__tests__/outcome-banner.test.tsx +71 -0
- package/src/components/shared/__tests__/progress-bar.test.tsx +89 -0
- package/src/components/shared/__tests__/session-pill.test.tsx +62 -0
- package/src/components/shared/__tests__/settings-modal.test.tsx +201 -0
- package/src/components/shared/__tests__/shortcuts-help.test.tsx +103 -0
- package/src/components/shared/__tests__/status-badge.test.tsx +98 -0
- package/src/components/shared/__tests__/theme-provider.test.tsx +100 -0
- package/src/components/shared/__tests__/truncated-id.test.tsx +53 -0
- package/src/components/shared/app-footer.tsx +80 -0
- package/src/components/shared/app-header.tsx +160 -0
- package/src/components/shared/empty-state.tsx +18 -0
- package/src/components/shared/error-boundary.tsx +81 -0
- package/src/components/shared/friendly-id.tsx +48 -0
- package/src/components/shared/kbd.tsx +15 -0
- package/src/components/shared/kind-badge.tsx +51 -0
- package/src/components/shared/metrics-row.tsx +106 -0
- package/src/components/shared/outcome-banner.tsx +56 -0
- package/src/components/shared/progress-bar.tsx +42 -0
- package/src/components/shared/session-pill.tsx +69 -0
- package/src/components/shared/settings-modal.tsx +509 -0
- package/src/components/shared/shortcuts-help.tsx +113 -0
- package/src/components/shared/status-badge.tsx +110 -0
- package/src/components/shared/theme-provider.tsx +46 -0
- package/src/components/shared/truncated-id.tsx +51 -0
- package/src/components/ui/.gitkeep +0 -0
- package/src/components/ui/__tests__/accordion.test.tsx +96 -0
- package/src/components/ui/__tests__/badge.test.tsx +69 -0
- package/src/components/ui/__tests__/button.test.tsx +113 -0
- package/src/components/ui/__tests__/tabs.test.tsx +75 -0
- package/src/components/ui/__tests__/tooltip.test.tsx +90 -0
- package/src/components/ui/accordion.tsx +61 -0
- package/src/components/ui/badge.tsx +25 -0
- package/src/components/ui/button.tsx +40 -0
- package/src/components/ui/card.tsx +21 -0
- package/src/components/ui/scroll-area.tsx +35 -0
- package/src/components/ui/separator.tsx +24 -0
- package/src/components/ui/tabs.tsx +64 -0
- package/src/components/ui/tooltip.tsx +37 -0
- package/src/hooks/.gitkeep +0 -0
- package/src/hooks/__tests__/use-animated-number.test.ts +184 -0
- package/src/hooks/__tests__/use-batched-updates.test.ts +315 -0
- package/src/hooks/__tests__/use-event-stream.test.ts +243 -0
- package/src/hooks/__tests__/use-keyboard.test.ts +217 -0
- package/src/hooks/__tests__/use-notifications.test.ts +230 -0
- package/src/hooks/__tests__/use-polling.test.ts +274 -0
- package/src/hooks/__tests__/use-project-runs.test.ts +163 -0
- package/src/hooks/__tests__/use-projects.test.ts +248 -0
- package/src/hooks/__tests__/use-run-dashboard.test.ts +168 -0
- package/src/hooks/__tests__/use-run-detail.test.ts +273 -0
- package/src/hooks/__tests__/use-smart-polling.test.ts +305 -0
- package/src/hooks/use-animated-number.ts +87 -0
- package/src/hooks/use-batched-updates.ts +150 -0
- package/src/hooks/use-event-stream.ts +150 -0
- package/src/hooks/use-keyboard.ts +45 -0
- package/src/hooks/use-notifications.ts +82 -0
- package/src/hooks/use-persisted-state.ts +60 -0
- package/src/hooks/use-polling.ts +60 -0
- package/src/hooks/use-project-runs.ts +51 -0
- package/src/hooks/use-projects.ts +26 -0
- package/src/hooks/use-run-dashboard.ts +207 -0
- package/src/hooks/use-run-detail.ts +77 -0
- package/src/hooks/use-smart-polling.ts +144 -0
- package/src/lib/.gitkeep +0 -0
- package/src/lib/__tests__/cn.test.ts +69 -0
- package/src/lib/__tests__/config-loader.test.ts +210 -0
- package/src/lib/__tests__/config.test.ts +561 -0
- package/src/lib/__tests__/error-handler.test.ts +143 -0
- package/src/lib/__tests__/fetcher.test.ts +517 -0
- package/src/lib/__tests__/global-registry.test.ts +214 -0
- package/src/lib/__tests__/parser.test.ts +1532 -0
- package/src/lib/__tests__/path-resolver.test.ts +112 -0
- package/src/lib/__tests__/run-cache.test.ts +591 -0
- package/src/lib/__tests__/server-init.test.ts +512 -0
- package/src/lib/__tests__/source-discovery.test.ts +246 -0
- package/src/lib/__tests__/utils.test.ts +160 -0
- package/src/lib/__tests__/watcher.test.ts +227 -0
- package/src/lib/cn.ts +6 -0
- package/src/lib/config-loader.ts +195 -0
- package/src/lib/config.ts +20 -0
- package/src/lib/error-handler.ts +76 -0
- package/src/lib/fetcher.ts +394 -0
- package/src/lib/global-registry.ts +117 -0
- package/src/lib/parser.ts +794 -0
- package/src/lib/path-resolver.ts +16 -0
- package/src/lib/run-cache.ts +404 -0
- package/src/lib/server-init.ts +226 -0
- package/src/lib/services/__tests__/run-query-service.test.ts +819 -0
- package/src/lib/services/run-query-service.ts +286 -0
- package/src/lib/source-discovery.ts +216 -0
- package/src/lib/utils.ts +103 -0
- package/src/lib/watcher.ts +265 -0
- package/src/test/fixtures.ts +269 -0
- package/src/test/mocks/handlers.ts +110 -0
- package/src/test/mocks/server.ts +17 -0
- package/src/test/setup.ts +200 -0
- package/src/test/test-utils.tsx +36 -0
- package/src/types/.gitkeep +0 -0
- package/src/types/breakpoint.ts +17 -0
- package/src/types/index.ts +214 -0
- package/tsconfig.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
# @a5c-ai/babysitter-observer-dashboard
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@a5c-ai/babysitter-observer-dashboard)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](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)
|
package/next.config.mjs
ADDED
|
@@ -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
|
+
}
|