@shepai/cli 1.72.9 → 1.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +20 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +68 -41
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +10 -0
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/notifications/notification.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/notifications/notification.service.js +2 -4
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +20 -2
- package/dist/src/presentation/web/app/actions/get-feature-metadata.d.ts +10 -0
- package/dist/src/presentation/web/app/actions/get-feature-metadata.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-feature-metadata.js +14 -0
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +15 -0
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +2 -26
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +2 -26
- package/dist/src/presentation/web/app/layout.js +1 -1
- package/dist/src/presentation/web/components/common/add-repository-button/add-repository-button.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/add-repository-button/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/add-repository-button/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/index.js +0 -1
- package/dist/src/presentation/web/components/common/add-repository-button/pick-folder.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +13 -18
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +2 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +11 -11
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +74 -144
- package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/index.js +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts +13 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.js +46 -0
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/use-feature-actions.js +7 -10
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts +25 -0
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +45 -2
- package/dist/src/presentation/web/components/common/index.d.ts +2 -3
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +2 -3
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/use-repository-actions.js +14 -39
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts +1 -3
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.js +3 -7
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts +0 -1
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.js +0 -11
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +31 -14
- package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +0 -11
- package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +2 -37
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +8 -0
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +160 -354
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -10
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +11 -54
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +0 -46
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +1 -3
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/alert-dialog.js +2 -2
- package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/dialog.js +2 -2
- package/dist/src/presentation/web/components/ui/scroll-area.js +1 -1
- package/dist/src/presentation/web/hooks/agent-events-provider.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/agent-events-provider.js +3 -2
- package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-agent-events.js +18 -5
- package/dist/src/presentation/web/hooks/use-deploy-action.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-deploy-action.js +8 -3
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts +42 -0
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-graph-state.js +257 -0
- package/dist/src/presentation/web/hooks/use-notifications.d.ts +1 -5
- package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-notifications.js +1 -26
- package/dist/src/presentation/web/hooks/use-notifications.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-notifications.stories.js +28 -38
- package/dist/src/presentation/web/lib/derive-graph.d.ts +52 -0
- package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/derive-graph.js +126 -0
- package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -2
- package/dist/src/presentation/web/lib/logger.d.ts +7 -0
- package/dist/src/presentation/web/lib/logger.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/logger.js +11 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +34 -34
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +40 -40
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +34 -34
- package/web/.next/server/app/(dashboard)/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +40 -40
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/page.js +3 -3
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__cbae9863._.js → [root-of-the-server]__6258349c._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__e5e09f72._.js → [root-of-the-server]__94a6d275._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
- package/web/.next/server/chunks/ssr/_07c2a32a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_250a63ae._.js +3 -0
- package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
- package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
- package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_dee726e3._.js +6 -0
- package/web/.next/server/chunks/ssr/_dee726e3._.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5ea689db._.js → server/chunks/ssr/src_presentation_web_2b91e4ec._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_7188a290._.js.map → src_presentation_web_2b91e4ec._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{src_presentation_web_5ea689db._.js → src_presentation_web_5bcc1537._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_5ea689db._.js.map → src_presentation_web_5bcc1537._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +8 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +8 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js.map +1 -0
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +142 -142
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +34 -34
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +40 -40
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +30 -30
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +34 -34
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +40 -40
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +30 -30
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__cbae9863._.js → [root-of-the-server]__6258349c._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__e5e09f72._.js → [root-of-the-server]__94a6d275._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_07c2a32a._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_250a63ae._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_dee726e3._.js +6 -0
- package/web/.next/{server/chunks/ssr/src_presentation_web_7188a290._.js → standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_2b91e4ec._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_7188a290._.js → src_presentation_web_5bcc1537._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +8 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +8 -0
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +142 -142
- package/web/.next/standalone/src/presentation/web/CLAUDE.md +77 -33
- package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +27 -2
- package/web/.next/standalone/src/presentation/web/app/actions/get-feature-metadata.ts +18 -0
- package/web/.next/standalone/src/presentation/web/app/api/agent-events/route.ts +17 -0
- package/web/.next/standalone/src/presentation/web/app/build-feature-node-data.ts +3 -30
- package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +3 -30
- package/web/.next/standalone/src/presentation/web/app/layout.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/add-repository-button/index.ts +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +15 -21
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +12 -13
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +105 -141
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +0 -1
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/use-artifact-fetch.ts +56 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/use-feature-actions.ts +6 -7
- package/web/.next/standalone/src/presentation/web/components/common/feature-node/derive-feature-state.ts +63 -2
- package/web/.next/standalone/src/presentation/web/components/common/index.ts +2 -12
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +2 -2
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/use-repository-actions.ts +29 -54
- package/web/.next/standalone/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.stories.tsx +0 -13
- package/web/.next/standalone/src/presentation/web/components/common/sidebar-section-header/sidebar-section-header.tsx +1 -45
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-empty-state.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +43 -36
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center.stories.tsx +2 -41
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +203 -440
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +0 -48
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +13 -76
- package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +2 -14
- package/web/.next/standalone/src/presentation/web/components/ui/alert-dialog.tsx +2 -5
- package/web/.next/standalone/src/presentation/web/components/ui/dialog.tsx +2 -5
- package/web/.next/standalone/src/presentation/web/components/ui/scroll-area.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/hooks/agent-events-provider.tsx +7 -2
- package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +19 -5
- package/web/.next/standalone/src/presentation/web/hooks/use-deploy-action.ts +11 -3
- package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +376 -0
- package/web/.next/standalone/src/presentation/web/hooks/use-notifications.stories.tsx +2 -30
- package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +2 -36
- package/web/.next/standalone/src/presentation/web/lib/derive-graph.ts +178 -0
- package/web/.next/standalone/src/presentation/web/lib/layout-with-dagre.ts +1 -2
- package/web/.next/standalone/src/presentation/web/lib/logger.ts +12 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/0ffccd7be73305c8.css +2 -0
- package/web/.next/static/chunks/15ceb197ec725da2.js +1 -0
- package/web/.next/static/chunks/3f205fd6adbfd20a.js +7 -0
- package/web/.next/static/chunks/{d4492cd12fdf0891.js → 6691ad02dc1efd1f.js} +1 -1
- package/web/.next/static/chunks/{64850cf4081a2950.js → 7bff5fbcbf157df5.js} +1 -1
- package/web/.next/static/chunks/8959112899679e25.js +1 -0
- package/web/.next/static/chunks/{c83897e9213881bf.js → 8f508ef906cbf0fa.js} +1 -1
- package/web/.next/static/chunks/9cbb42a6bd516d3b.js +1 -0
- package/web/.next/static/chunks/c5603ed8a95d460d.js +1 -0
- package/web/.next/static/chunks/cb41849bcfaa304e.js +1 -0
- package/web/.next/static/chunks/d7e0cd32364a8d76.js +1 -0
- package/web/.next/static/chunks/e69d79bd3f19dec8.js +4 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-button.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.d.ts +0 -7
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node-config.js +0 -1
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.d.ts +0 -6
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.js +0 -23
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts +0 -10
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.js +0 -33
- package/dist/src/presentation/web/components/common/add-repository-node/index.d.ts +0 -4
- package/dist/src/presentation/web/components/common/add-repository-node/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/add-repository-node/pick-folder.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +0 -12
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +0 -337
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +0 -33
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +0 -214
- package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts +0 -2
- package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/notification-permission-banner/index.js +0 -1
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts +0 -2
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.js +0 -33
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts +0 -6
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.js +0 -24
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_3a02d8a5.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_3a02d8a5.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_a3044852.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_a3044852.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbae9863._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e5e09f72._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_38d24563._.js +0 -6
- package/web/.next/server/chunks/ssr/_38d24563._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6e08ce21._.js +0 -3
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0a49d9ee._.js +0 -8
- package/web/.next/server/chunks/ssr/src_presentation_web_0a49d9ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_79b0305a._.js +0 -8
- package/web/.next/server/chunks/ssr/src_presentation_web_79b0305a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_cc16bd01.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_cc16bd01.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_3a02d8a5.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_a3044852.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_38d24563._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6e08ce21._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_0a49d9ee._.js +0 -8
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_79b0305a._.js +0 -8
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_cc16bd01.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +0 -3
- package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node-config.ts +0 -8
- package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.tsx +0 -70
- package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.tsx +0 -49
- package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/index.ts +0 -3
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +0 -293
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +0 -745
- package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/index.ts +0 -1
- package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx +0 -52
- package/web/.next/standalone/src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx +0 -55
- package/web/.next/static/chunks/0c54314c8c9c9739.js +0 -7
- package/web/.next/static/chunks/10cd08dae8c210ff.js +0 -1
- package/web/.next/static/chunks/15bf7ee1da91eb46.js +0 -4
- package/web/.next/static/chunks/3c79bca4d3f18f66.js +0 -1
- package/web/.next/static/chunks/67f2a7a5e8dc358a.css +0 -2
- package/web/.next/static/chunks/6cc840197626843b.js +0 -1
- package/web/.next/static/chunks/e3239b6c18cf8b96.js +0 -1
- package/web/.next/static/chunks/e9cc53ce8a7bdea6.js +0 -1
- package/web/.next/static/chunks/ef916db8c537211a.js +0 -1
- /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.d.ts +0 -0
- /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.js +0 -0
- /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.d.ts +0 -0
- /package/dist/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.js +0 -0
- /package/web/.next/standalone/src/presentation/web/components/common/{add-repository-node → add-repository-button}/add-repository-button.tsx +0 -0
- /package/web/.next/standalone/src/presentation/web/components/common/{add-repository-node → add-repository-button}/pick-folder.ts +0 -0
- /package/web/.next/static/{Atrl1oUfRQej2kgJ972uS → 1AvkeBASQdtzZt9cm9UYg}/_buildManifest.js +0 -0
- /package/web/.next/static/{Atrl1oUfRQej2kgJ972uS → 1AvkeBASQdtzZt9cm9UYg}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{Atrl1oUfRQej2kgJ972uS → 1AvkeBASQdtzZt9cm9UYg}/_ssgManifest.js +0 -0
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
3
|
-
import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
-
import { Button } from '../../ui/button.js';
|
|
5
|
-
import { DrawerCloseGuardProvider } from '../../../hooks/drawer-close-guard.js';
|
|
6
|
-
import { ControlCenterDrawer } from './control-center-drawer.js';
|
|
7
|
-
const meta = {
|
|
8
|
-
title: 'Drawers/ControlCenterDrawer',
|
|
9
|
-
component: ControlCenterDrawer,
|
|
10
|
-
tags: ['autodocs'],
|
|
11
|
-
decorators: [
|
|
12
|
-
(Story) => (_jsx(DrawerCloseGuardProvider, { children: _jsx(Story, {}) })),
|
|
13
|
-
],
|
|
14
|
-
parameters: {
|
|
15
|
-
layout: 'fullscreen',
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
export default meta;
|
|
19
|
-
/* ---------------------------------------------------------------------------
|
|
20
|
-
* Fixtures
|
|
21
|
-
* ------------------------------------------------------------------------- */
|
|
22
|
-
const featureView = {
|
|
23
|
-
type: 'feature',
|
|
24
|
-
node: {
|
|
25
|
-
name: 'Auth Module',
|
|
26
|
-
description: 'Implement OAuth2 authentication flow',
|
|
27
|
-
featureId: '#f1',
|
|
28
|
-
lifecycle: 'implementation',
|
|
29
|
-
state: 'running',
|
|
30
|
-
progress: 45,
|
|
31
|
-
agentType: 'claude-code',
|
|
32
|
-
repositoryPath: '/home/user/my-repo',
|
|
33
|
-
branch: 'feat/auth-module',
|
|
34
|
-
specPath: '/home/user/my-repo/specs/001-auth-module',
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
const featureDoneView = {
|
|
38
|
-
type: 'feature',
|
|
39
|
-
node: {
|
|
40
|
-
name: 'Payment Gateway',
|
|
41
|
-
description: 'Stripe integration for subscriptions',
|
|
42
|
-
featureId: '#f3',
|
|
43
|
-
lifecycle: 'maintain',
|
|
44
|
-
state: 'done',
|
|
45
|
-
progress: 100,
|
|
46
|
-
runtime: '1h 42m',
|
|
47
|
-
repositoryPath: '/home/user/my-repo',
|
|
48
|
-
branch: 'feat/payment-gateway',
|
|
49
|
-
pr: {
|
|
50
|
-
url: 'https://github.com/org/repo/pull/42',
|
|
51
|
-
number: 42,
|
|
52
|
-
status: PrStatus.Merged,
|
|
53
|
-
ciStatus: CiStatus.Success,
|
|
54
|
-
commitHash: 'abc1234567890',
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
const featureErrorView = {
|
|
59
|
-
type: 'feature',
|
|
60
|
-
node: {
|
|
61
|
-
name: 'Email Service',
|
|
62
|
-
description: 'Transactional email with SendGrid',
|
|
63
|
-
featureId: '#f5',
|
|
64
|
-
lifecycle: 'review',
|
|
65
|
-
state: 'error',
|
|
66
|
-
progress: 30,
|
|
67
|
-
errorMessage: 'Build failed: type mismatch in auth middleware',
|
|
68
|
-
repositoryPath: '/home/user/my-repo',
|
|
69
|
-
branch: 'feat/email-service',
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
const prdReviewView = {
|
|
73
|
-
type: 'prd-review',
|
|
74
|
-
node: {
|
|
75
|
-
name: 'API Rate Limiting',
|
|
76
|
-
description: 'Sliding window rate limiting for public endpoints',
|
|
77
|
-
featureId: 'feat-abc123',
|
|
78
|
-
lifecycle: 'requirements',
|
|
79
|
-
state: 'action-required',
|
|
80
|
-
progress: 0,
|
|
81
|
-
repositoryPath: '/home/user/my-repo',
|
|
82
|
-
branch: 'feat/api-rate-limiting',
|
|
83
|
-
specPath: '/home/user/my-repo/specs/002-rate-limiting',
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
const techReviewView = {
|
|
87
|
-
type: 'tech-review',
|
|
88
|
-
node: {
|
|
89
|
-
name: 'Search Index',
|
|
90
|
-
description: 'Elasticsearch full-text search integration',
|
|
91
|
-
featureId: 'feat-def456',
|
|
92
|
-
lifecycle: 'implementation',
|
|
93
|
-
state: 'action-required',
|
|
94
|
-
progress: 0,
|
|
95
|
-
repositoryPath: '/home/user/my-repo',
|
|
96
|
-
branch: 'feat/search-index',
|
|
97
|
-
specPath: '/home/user/my-repo/specs/003-search',
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
const mergeReviewView = {
|
|
101
|
-
type: 'merge-review',
|
|
102
|
-
node: {
|
|
103
|
-
name: 'Auth Module',
|
|
104
|
-
description: 'OAuth2 authentication flow',
|
|
105
|
-
featureId: 'feat-ghi789',
|
|
106
|
-
lifecycle: 'review',
|
|
107
|
-
state: 'action-required',
|
|
108
|
-
progress: 100,
|
|
109
|
-
repositoryPath: '/home/user/my-repo',
|
|
110
|
-
branch: 'feat/auth-module',
|
|
111
|
-
specPath: '/home/user/my-repo/specs/001-auth-module',
|
|
112
|
-
pr: {
|
|
113
|
-
url: 'https://github.com/org/repo/pull/17',
|
|
114
|
-
number: 17,
|
|
115
|
-
status: PrStatus.Open,
|
|
116
|
-
ciStatus: CiStatus.Success,
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
const createView = {
|
|
121
|
-
type: 'feature-create',
|
|
122
|
-
repositoryPath: '/home/user/my-repo',
|
|
123
|
-
features: [
|
|
124
|
-
{ id: 'feat-abc123', name: 'API Rate Limiting' },
|
|
125
|
-
{ id: 'feat-def456', name: 'Search Index' },
|
|
126
|
-
],
|
|
127
|
-
workflowDefaults: {
|
|
128
|
-
approvalGates: { allowPrd: true, allowPlan: false, allowMerge: false },
|
|
129
|
-
push: true,
|
|
130
|
-
openPr: false,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
const repositoryView = {
|
|
134
|
-
type: 'repository',
|
|
135
|
-
data: {
|
|
136
|
-
id: 'repo-1',
|
|
137
|
-
name: 'my-awesome-app',
|
|
138
|
-
repositoryPath: '/home/user/my-awesome-app',
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
/* ---------------------------------------------------------------------------
|
|
142
|
-
* Trigger wrapper
|
|
143
|
-
* ------------------------------------------------------------------------- */
|
|
144
|
-
function Trigger({ view, label }) {
|
|
145
|
-
const [activeView, setActiveView] = useState(null);
|
|
146
|
-
return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setActiveView(view), children: label }), _jsx(ControlCenterDrawer, { view: activeView, onClose: () => setActiveView(null), onDelete: (_id) => undefined, onCreateSubmit: () => setActiveView(null) })] }));
|
|
147
|
-
}
|
|
148
|
-
/* ---------------------------------------------------------------------------
|
|
149
|
-
* Stories — one per view type
|
|
150
|
-
* ------------------------------------------------------------------------- */
|
|
151
|
-
/** Feature info view — running state with progress. Default story. */
|
|
152
|
-
export const Default = {
|
|
153
|
-
render: () => _jsx(Trigger, { view: featureView, label: "Open Feature (Running)" }),
|
|
154
|
-
};
|
|
155
|
-
/** Feature info view — completed (maintain lifecycle, done state, merged PR). */
|
|
156
|
-
export const FeatureDone = {
|
|
157
|
-
render: () => _jsx(Trigger, { view: featureDoneView, label: "Open Feature (Done + PR)" }),
|
|
158
|
-
};
|
|
159
|
-
/** Feature info view — error state. */
|
|
160
|
-
export const FeatureError = {
|
|
161
|
-
render: () => _jsx(Trigger, { view: featureErrorView, label: "Open Feature (Error)" }),
|
|
162
|
-
};
|
|
163
|
-
/**
|
|
164
|
-
* PRD review view — loads questionnaire data via server action.
|
|
165
|
-
* Shows spinner in Storybook (no real API available).
|
|
166
|
-
*/
|
|
167
|
-
export const PrdReview = {
|
|
168
|
-
render: () => _jsx(Trigger, { view: prdReviewView, label: "Open PRD Review" }),
|
|
169
|
-
};
|
|
170
|
-
/**
|
|
171
|
-
* Tech decisions review view — loads research artifact via server action.
|
|
172
|
-
* Shows spinner in Storybook.
|
|
173
|
-
*/
|
|
174
|
-
export const TechReview = {
|
|
175
|
-
render: () => _jsx(Trigger, { view: techReviewView, label: "Open Tech Review" }),
|
|
176
|
-
};
|
|
177
|
-
/**
|
|
178
|
-
* Merge review view — loads merge review data via server action.
|
|
179
|
-
* Shows spinner in Storybook.
|
|
180
|
-
*/
|
|
181
|
-
export const MergeReview = {
|
|
182
|
-
render: () => _jsx(Trigger, { view: mergeReviewView, label: "Open Merge Review" }),
|
|
183
|
-
};
|
|
184
|
-
/** Feature create form. */
|
|
185
|
-
export const FeatureCreate = {
|
|
186
|
-
render: () => _jsx(Trigger, { view: createView, label: "Open Create Feature" }),
|
|
187
|
-
};
|
|
188
|
-
/** Repository actions view. */
|
|
189
|
-
export const Repository = {
|
|
190
|
-
render: () => _jsx(Trigger, { view: repositoryView, label: "Open Repository" }),
|
|
191
|
-
};
|
|
192
|
-
/* ---------------------------------------------------------------------------
|
|
193
|
-
* Interactive switcher — cycle through all views
|
|
194
|
-
* ------------------------------------------------------------------------- */
|
|
195
|
-
const allViews = [
|
|
196
|
-
{ label: 'Feature (Running)', view: featureView },
|
|
197
|
-
{ label: 'Feature (Done)', view: featureDoneView },
|
|
198
|
-
{ label: 'Feature (Error)', view: featureErrorView },
|
|
199
|
-
{ label: 'PRD Review', view: prdReviewView },
|
|
200
|
-
{ label: 'Tech Review', view: techReviewView },
|
|
201
|
-
{ label: 'Merge Review', view: mergeReviewView },
|
|
202
|
-
{ label: 'Create Feature', view: createView },
|
|
203
|
-
{ label: 'Repository', view: repositoryView },
|
|
204
|
-
];
|
|
205
|
-
function AllViewsSwitcher() {
|
|
206
|
-
const [activeView, setActiveView] = useState(null);
|
|
207
|
-
return (_jsxs("div", { className: "flex h-screen", children: [_jsxs("div", { className: "flex flex-col gap-2 p-4", children: [_jsx("span", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: "Select view" }), allViews.map(({ label, view }) => (_jsx("button", { type: "button", onClick: () => setActiveView(view), className: `rounded-md px-3 py-1.5 text-left text-sm ${activeView?.type === view.type
|
|
208
|
-
? 'bg-primary text-primary-foreground'
|
|
209
|
-
: 'bg-muted hover:bg-muted/80'}`, children: label }, label))), _jsx("button", { type: "button", onClick: () => setActiveView(null), className: "bg-destructive/10 text-destructive hover:bg-destructive/20 mt-2 rounded-md px-3 py-1.5 text-left text-sm", children: "Close drawer" })] }), _jsx(ControlCenterDrawer, { view: activeView, onClose: () => setActiveView(null), onDelete: (_id) => undefined, onCreateSubmit: () => setActiveView(null) })] }));
|
|
210
|
-
}
|
|
211
|
-
/** Interactive — click any view type to open that drawer panel. */
|
|
212
|
-
export const AllViews = {
|
|
213
|
-
render: () => _jsx(AllViewsSwitcher, {}),
|
|
214
|
-
};
|
package/dist/src/presentation/web/components/common/notification-permission-banner/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/notification-permission-banner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { NotificationPermissionBanner } from './notification-permission-banner.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-permission-banner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.tsx"],"names":[],"mappings":"AAQA,wBAAgB,4BAA4B,mDA8C3C"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
4
|
-
import { Bell, X } from 'lucide-react';
|
|
5
|
-
import { Button } from '../../ui/button.js';
|
|
6
|
-
const DISMISSED_KEY = 'shep:notification-banner-dismissed';
|
|
7
|
-
export function NotificationPermissionBanner() {
|
|
8
|
-
const [visible, setVisible] = useState(false);
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
if (typeof globalThis.Notification === 'undefined')
|
|
11
|
-
return;
|
|
12
|
-
if (globalThis.Notification.permission !== 'default')
|
|
13
|
-
return;
|
|
14
|
-
if (localStorage.getItem(DISMISSED_KEY) === 'true')
|
|
15
|
-
return;
|
|
16
|
-
setVisible(true);
|
|
17
|
-
}, []);
|
|
18
|
-
const handleEnable = useCallback(async () => {
|
|
19
|
-
if (typeof globalThis.Notification === 'undefined')
|
|
20
|
-
return;
|
|
21
|
-
const result = await globalThis.Notification.requestPermission();
|
|
22
|
-
if (result === 'granted' || result === 'denied') {
|
|
23
|
-
setVisible(false);
|
|
24
|
-
}
|
|
25
|
-
}, []);
|
|
26
|
-
const handleDismiss = useCallback(() => {
|
|
27
|
-
localStorage.setItem(DISMISSED_KEY, 'true');
|
|
28
|
-
setVisible(false);
|
|
29
|
-
}, []);
|
|
30
|
-
if (!visible)
|
|
31
|
-
return null;
|
|
32
|
-
return (_jsxs("div", { className: "bg-background absolute bottom-4 left-4 z-50 flex max-w-sm items-center gap-3 rounded-lg border p-3 shadow-lg", children: [_jsx(Bell, { className: "text-muted-foreground size-5 shrink-0" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Enable desktop notifications to stay updated on feature progress." }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(Button, { size: "sm", onClick: handleEnable, children: "Enable" }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: handleDismiss, "aria-label": "Dismiss notification banner", children: _jsx(X, {}) })] })] }));
|
|
33
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-permission-banner.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/notification-permission-banner/notification-permission-banner.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQvD,QAAA,MAAM,IAAI,EAAE,IAMX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAgCnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Bell, X } from 'lucide-react';
|
|
3
|
-
import { Button } from '../../ui/button.js';
|
|
4
|
-
function noop() {
|
|
5
|
-
// story placeholder
|
|
6
|
-
}
|
|
7
|
-
const meta = {
|
|
8
|
-
title: 'Composed/NotificationPermissionBanner',
|
|
9
|
-
parameters: {
|
|
10
|
-
layout: 'padded',
|
|
11
|
-
},
|
|
12
|
-
tags: ['autodocs'],
|
|
13
|
-
};
|
|
14
|
-
export default meta;
|
|
15
|
-
/**
|
|
16
|
-
* Static render of the banner since the real component depends on the
|
|
17
|
-
* browser Notification API which is unavailable in Storybook.
|
|
18
|
-
*/
|
|
19
|
-
function BannerPreview() {
|
|
20
|
-
return (_jsx("div", { className: "bg-muted/30 relative h-64 w-full rounded-lg border", children: _jsxs("div", { className: "bg-background absolute bottom-4 left-4 z-50 flex max-w-sm items-center gap-3 rounded-lg border p-3 shadow-lg", children: [_jsx(Bell, { className: "text-muted-foreground size-5 shrink-0" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Enable desktop notifications to stay updated on feature progress." }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(Button, { size: "sm", onClick: noop, children: "Enable" }), _jsx(Button, { variant: "ghost", size: "icon-xs", onClick: noop, "aria-label": "Dismiss notification banner", children: _jsx(X, {}) })] })] }) }));
|
|
21
|
-
}
|
|
22
|
-
export const Default = {
|
|
23
|
-
render: () => _jsx(BannerPreview, {}),
|
|
24
|
-
};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[15659,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(50845),l=a.i(49560),m=a.i(39353),n=a.i(31075);a.s([],3216),a.i(3216),a.s(["001371803ca5b5df95115f5adbcfaaa141151b092b",()=>b.pickFolder,"001489ceacff468fa3035dfc3f2f379a3dab260c8f",()=>n.fetchGraphData,"4020b77600fa943c69172d4d40f593668a0072add4",()=>l.addRepository,"406dc518f376e232c7ecde857988216e06c2881960",()=>j.openFolder,"40a6742c551959e67baa13b1fad2fe82afaee624db",()=>f.stopDeployment,"40a6c37dc19cccd46b181a694da2959e1c602ca305",()=>m.deleteRepository,"40abb76f454a24958782acf5a3bdb6ef67d098950f",()=>e.deployRepository,"40b004efd44fc5651f2277b5956d82f2ba62c36a1f",()=>d.deployFeature,"40b6feaf5146e5dace370644c824609a2ca38bd631",()=>c.getDeploymentLogs,"40ba7a570fa466996033c33faf37f42958682a43b1",()=>g.getDeploymentStatus,"40c225e64b357fe5db604b18e7353574f011e2fee5",()=>i.openShell,"40c245c3415412e961be7dc5228e817e3c0ec65b57",()=>k.deleteFeature,"40fa7bf016071a726e373736f1493a448cd0cab4a0",()=>h.openIde],15659)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=8ba4b_server_app_%28dashboard%29_%40drawer_repository_%5BrepositoryId%5D_page_actions_3a02d8a5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/%40drawer/repository/%5BrepositoryId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {pickFolder as '001371803ca5b5df95115f5adbcfaaa141151b092b'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40b6feaf5146e5dace370644c824609a2ca38bd631'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '40b004efd44fc5651f2277b5956d82f2ba62c36a1f'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '40abb76f454a24958782acf5a3bdb6ef67d098950f'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '40a6742c551959e67baa13b1fad2fe82afaee624db'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '40ba7a570fa466996033c33faf37f42958682a43b1'} from 'ACTIONS_MODULE5'\nexport {openIde as '40fa7bf016071a726e373736f1493a448cd0cab4a0'} from 'ACTIONS_MODULE6'\nexport {openShell as '40c225e64b357fe5db604b18e7353574f011e2fee5'} from 'ACTIONS_MODULE7'\nexport {openFolder as '406dc518f376e232c7ecde857988216e06c2881960'} from 'ACTIONS_MODULE8'\nexport {deleteFeature as '40c245c3415412e961be7dc5228e817e3c0ec65b57'} from 'ACTIONS_MODULE9'\nexport {addRepository as '4020b77600fa943c69172d4d40f593668a0072add4'} from 'ACTIONS_MODULE10'\nexport {deleteRepository as '40a6c37dc19cccd46b181a694da2959e1c602ca305'} from 'ACTIONS_MODULE11'\nexport {fetchGraphData as '001489ceacff468fa3035dfc3f2f379a3dab260c8f'} from 'ACTIONS_MODULE12'\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[5887,a=>{"use strict";var b=a.i(12513),c=a.i(94691),d=a.i(33841),e=a.i(46646),f=a.i(68670),g=a.i(85321),h=a.i(84095),i=a.i(56799),j=a.i(80496),k=a.i(50845),l=a.i(49560),m=a.i(39353),n=a.i(31075);a.s([],33935),a.i(33935),a.s(["001371803ca5b5df95115f5adbcfaaa141151b092b",()=>b.pickFolder,"001489ceacff468fa3035dfc3f2f379a3dab260c8f",()=>n.fetchGraphData,"4020b77600fa943c69172d4d40f593668a0072add4",()=>l.addRepository,"406dc518f376e232c7ecde857988216e06c2881960",()=>j.openFolder,"40a6742c551959e67baa13b1fad2fe82afaee624db",()=>f.stopDeployment,"40a6c37dc19cccd46b181a694da2959e1c602ca305",()=>m.deleteRepository,"40abb76f454a24958782acf5a3bdb6ef67d098950f",()=>e.deployRepository,"40b004efd44fc5651f2277b5956d82f2ba62c36a1f",()=>d.deployFeature,"40b6feaf5146e5dace370644c824609a2ca38bd631",()=>c.getDeploymentLogs,"40ba7a570fa466996033c33faf37f42958682a43b1",()=>g.getDeploymentStatus,"40c225e64b357fe5db604b18e7353574f011e2fee5",()=>i.openShell,"40c245c3415412e961be7dc5228e817e3c0ec65b57",()=>k.deleteFeature,"40fa7bf016071a726e373736f1493a448cd0cab4a0",()=>h.openIde],5887)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=8ba4b_server_app_%28dashboard%29_repository_%5BrepositoryId%5D_page_actions_a3044852.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/presentation/web/.next-internal/server/app/%28dashboard%29/repository/%5BrepositoryId%5D/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {pickFolder as '001371803ca5b5df95115f5adbcfaaa141151b092b'} from 'ACTIONS_MODULE0'\nexport {getDeploymentLogs as '40b6feaf5146e5dace370644c824609a2ca38bd631'} from 'ACTIONS_MODULE1'\nexport {deployFeature as '40b004efd44fc5651f2277b5956d82f2ba62c36a1f'} from 'ACTIONS_MODULE2'\nexport {deployRepository as '40abb76f454a24958782acf5a3bdb6ef67d098950f'} from 'ACTIONS_MODULE3'\nexport {stopDeployment as '40a6742c551959e67baa13b1fad2fe82afaee624db'} from 'ACTIONS_MODULE4'\nexport {getDeploymentStatus as '40ba7a570fa466996033c33faf37f42958682a43b1'} from 'ACTIONS_MODULE5'\nexport {openIde as '40fa7bf016071a726e373736f1493a448cd0cab4a0'} from 'ACTIONS_MODULE6'\nexport {openShell as '40c225e64b357fe5db604b18e7353574f011e2fee5'} from 'ACTIONS_MODULE7'\nexport {openFolder as '406dc518f376e232c7ecde857988216e06c2881960'} from 'ACTIONS_MODULE8'\nexport {deleteFeature as '40c245c3415412e961be7dc5228e817e3c0ec65b57'} from 'ACTIONS_MODULE9'\nexport {addRepository as '4020b77600fa943c69172d4d40f593668a0072add4'} from 'ACTIONS_MODULE10'\nexport {deleteRepository as '40a6c37dc19cccd46b181a694da2959e1c602ca305'} from 'ACTIONS_MODULE11'\nexport {fetchGraphData as '001489ceacff468fa3035dfc3f2f379a3dab260c8f'} from 'ACTIONS_MODULE12'\n"],"names":[],"mappings":"sCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../../src/presentation/web/components/ui/input.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-direction%401.1.1_%40types%2Breact%4019.2.10_react%4019.2.4/node_modules/%40radix-ui/react-direction/src/direction.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/wrench.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/circle-check.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/puzzle.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/segment.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/client/use-merged-ref.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/utils/warn-once.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/deployment-id.ts","../../../../../../../src/presentation/web/hooks/agent-events-provider.tsx","../../../../../../../src/presentation/web/hooks/use-agent-events.ts","../../../../../../../src/presentation/web/app/actions/data%3Adac28b%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/add-repository-node/add-repository-node.tsx","../../../../../../../src/presentation/web/components/common/add-repository-node/add-repository-button.tsx","../../../../../../../src/presentation/web/hooks/sidebar-features-context.tsx","../../../../../../../src/presentation/web/components/common/add-repository-node/pick-folder.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z',\n key: '1ngwbx',\n },\n ],\n];\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon('wrench', __iconNode);\n\nexport default Wrench;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'm9 12 2 2 4-4', key: 'dzmm74' }],\n];\n\n/**\n * @component @name CircleCheck\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleCheck = createLucideIcon('circle-check', __iconNode);\n\nexport default CircleCheck;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n key: 'w46dr5',\n },\n ],\n];\n\n/**\n * @component @name Puzzle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/puzzle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Puzzle = createLucideIcon('puzzle', __iconNode);\n\nexport default Puzzle;\n","import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n","import { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef<TElement>(\n refA: Ref<TElement>,\n refB: Ref<TElement>\n): Ref<TElement> {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef<TElement>(\n refA: NonNullable<Ref<TElement>>,\n current: TElement\n) {\n if (typeof refA === 'function') {\n const cleanup = refA(current)\n if (typeof cleanup === 'function') {\n return cleanup\n } else {\n return () => refA(null)\n }\n } else {\n refA.current = current\n return () => {\n refA.current = null\n }\n }\n}\n","let warnOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const warnings = new Set<string>()\n warnOnce = (msg: string) => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\nexport { warnOnce }\n","// This could also be a variable instead of a function, but some unit tests want to change the ID at\n// runtime. Even though that would never happen in a real deployment.\nexport function getDeploymentId(): string | undefined {\n return process.env.NEXT_DEPLOYMENT_ID\n}\n\nexport function getDeploymentIdQueryOrEmptyString(): string {\n let deploymentId = getDeploymentId()\n if (deploymentId) {\n return `?dpl=${deploymentId}`\n }\n return ''\n}\n","'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport {\n useAgentEvents,\n type UseAgentEventsOptions,\n type UseAgentEventsResult,\n} from './use-agent-events';\n\nconst AgentEventsContext = createContext<UseAgentEventsResult | null>(null);\n\ninterface AgentEventsProviderProps extends UseAgentEventsOptions {\n children: ReactNode;\n}\n\n/**\n * Single SSE connection for agent events shared across all consumers.\n * Wrap the app once; use `useAgentEventsContext()` to read.\n */\nexport function AgentEventsProvider({ children, runId }: AgentEventsProviderProps) {\n const value = useAgentEvents({ runId });\n\n return <AgentEventsContext.Provider value={value}>{children}</AgentEventsContext.Provider>;\n}\n\nexport function useAgentEventsContext(): UseAgentEventsResult {\n const ctx = useContext(AgentEventsContext);\n if (!ctx) {\n throw new Error('useAgentEventsContext must be used within an <AgentEventsProvider>');\n }\n return ctx;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { NotificationEvent } from '@shepai/core/domain/generated/output';\n\nexport type ConnectionStatus = 'connected' | 'connecting' | 'disconnected';\n\nexport interface UseAgentEventsOptions {\n runId?: string;\n}\n\nexport interface UseAgentEventsResult {\n events: NotificationEvent[];\n lastEvent: NotificationEvent | null;\n connectionStatus: ConnectionStatus;\n}\n\nconst SW_PATH = '/agent-events-sw.js';\n\n/**\n * Hook that receives real-time agent notification events via a Service Worker.\n *\n * The SW maintains a single SSE connection to /api/agent-events and\n * broadcasts events to all open tabs. Falls back to direct EventSource\n * when Service Workers are unavailable.\n */\nexport function useAgentEvents(options?: UseAgentEventsOptions): UseAgentEventsResult {\n const [events, setEvents] = useState<NotificationEvent[]>([]);\n const [lastEvent, setLastEvent] = useState<NotificationEvent | null>(null);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n\n const runId = options?.runId;\n const swRef = useRef<ServiceWorker | null>(null);\n\n const onMessage = useCallback((event: MessageEvent) => {\n const msg = event.data;\n if (!msg || typeof msg !== 'object') return;\n\n if (msg.type === 'notification') {\n const parsed = msg.data as NotificationEvent;\n setEvents((prev) => [...prev, parsed]);\n setLastEvent(parsed);\n } else if (msg.type === 'status') {\n setConnectionStatus(msg.status as ConnectionStatus);\n }\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // ?sse=direct bypasses the Service Worker for debugging\n const bypassSW =\n typeof location !== 'undefined' && new URLSearchParams(location.search).has('sse');\n\n // Fallback: direct EventSource when SW not supported or bypassed\n if (!navigator.serviceWorker || bypassSW) {\n return connectDirectEventSource(runId, setEvents, setLastEvent, setConnectionStatus);\n }\n\n let cancelled = false;\n const fallbackCleanupRef = { current: undefined as (() => void) | undefined };\n\n function subscribeToWorker(worker: ServiceWorker) {\n if (cancelled) return;\n swRef.current = worker;\n worker.postMessage({ type: 'subscribe', runId });\n setConnectionStatus('connecting');\n }\n\n // Listen for messages from whatever SW controls this page\n navigator.serviceWorker.addEventListener('message', onMessage);\n\n // Re-subscribe when SW controller changes (e.g., after SW update via skipWaiting)\n function handleControllerChange() {\n if (cancelled) return;\n const newController = navigator.serviceWorker.controller;\n if (newController) {\n swRef.current = newController;\n newController.postMessage({ type: 'subscribe', runId });\n setConnectionStatus('connecting');\n }\n }\n navigator.serviceWorker.addEventListener('controllerchange', handleControllerChange);\n\n navigator.serviceWorker\n .register(SW_PATH, { scope: '/' })\n .then((registration) => {\n if (cancelled) return;\n\n // Use the active worker, or wait for it to activate\n const sw = registration.active ?? registration.installing ?? registration.waiting;\n if (!sw) {\n // No worker at all — fall back to direct EventSource\n fallbackCleanupRef.current = connectDirectEventSource(\n runId,\n setEvents,\n setLastEvent,\n setConnectionStatus\n );\n return;\n }\n\n if (sw.state === 'activated') {\n subscribeToWorker(sw);\n } else {\n sw.addEventListener('statechange', () => {\n if (sw.state === 'activated') subscribeToWorker(sw);\n });\n }\n })\n .catch(() => {\n // SW registration failed — fall back to direct EventSource\n if (!cancelled) {\n fallbackCleanupRef.current = connectDirectEventSource(\n runId,\n setEvents,\n setLastEvent,\n setConnectionStatus\n );\n }\n });\n\n return () => {\n cancelled = true;\n navigator.serviceWorker.removeEventListener('message', onMessage);\n navigator.serviceWorker.removeEventListener('controllerchange', handleControllerChange);\n swRef.current?.postMessage({ type: 'unsubscribe' });\n swRef.current = null;\n fallbackCleanupRef.current?.();\n };\n }, [runId, onMessage]);\n\n return { events, lastEvent, connectionStatus };\n}\n\n// --- EventSource fallback (identical to the previous implementation) ---\n\nconst BASE_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 30_000;\nconst STABLE_CONNECTION_MS = 5_000;\n\nfunction connectDirectEventSource(\n runId: string | undefined,\n setEvents: React.Dispatch<React.SetStateAction<NotificationEvent[]>>,\n setLastEvent: React.Dispatch<React.SetStateAction<NotificationEvent | null>>,\n setConnectionStatus: React.Dispatch<React.SetStateAction<ConnectionStatus>>\n): () => void {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n if (typeof EventSource === 'undefined') return () => {};\n\n let es: EventSource | null = null;\n let stopped = false;\n let backoff = BASE_BACKOFF_MS;\n let reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n let stableTimer: ReturnType<typeof setTimeout> | null = null;\n\n function connect() {\n if (stopped) return;\n\n const url = runId\n ? `/api/agent-events?runId=${encodeURIComponent(runId)}`\n : '/api/agent-events';\n\n es = new EventSource(url);\n setConnectionStatus('connecting');\n\n es.onopen = () => {\n setConnectionStatus('connected');\n stableTimer = setTimeout(() => {\n stableTimer = null;\n backoff = BASE_BACKOFF_MS;\n }, STABLE_CONNECTION_MS);\n };\n\n es.onerror = () => {\n es?.close();\n es = null;\n setConnectionStatus('disconnected');\n\n if (stableTimer !== null) {\n clearTimeout(stableTimer);\n stableTimer = null;\n }\n\n const delay = backoff;\n backoff = Math.min(delay * 2, MAX_BACKOFF_MS);\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n connect();\n }, delay);\n };\n\n es.addEventListener('notification', ((event: MessageEvent) => {\n const parsed: NotificationEvent = JSON.parse(event.data);\n setEvents((prev) => [...prev, parsed]);\n setLastEvent(parsed);\n }) as EventListener);\n }\n\n connect();\n\n return () => {\n stopped = true;\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (stableTimer !== null) {\n clearTimeout(stableTimer);\n stableTimer = null;\n }\n if (es) {\n es.close();\n es = null;\n }\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"001371803ca5b5df95115f5adbcfaaa141151b092b\":\"pickFolder\"},\"src/presentation/web/app/actions/pick-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"001371803ca5b5df95115f5adbcfaaa141151b092b\",callServer,void 0,findSourceMapURL,\"pickFolder\");export{$$RSC_SERVER_ACTION_0 as pickFolder};","'use client';\n\nimport { useState } from 'react';\nimport { Plus, Loader2 } from 'lucide-react';\nimport type { AddRepositoryNodeData } from './add-repository-node-config';\nimport { pickFolder } from './pick-folder';\n\nexport function AddRepositoryNode({\n data,\n}: {\n data: AddRepositoryNodeData;\n [key: string]: unknown;\n}) {\n const [loading, setLoading] = useState(false);\n\n async function handleClick() {\n if (loading) return;\n setLoading(true);\n try {\n const path = await pickFolder();\n if (path) {\n data.onSelect?.(path);\n }\n } finally {\n setLoading(false);\n }\n }\n\n return (\n <div className=\"group\">\n <button\n type=\"button\"\n data-testid=\"add-repository-node-card\"\n onClick={handleClick}\n disabled={loading}\n className=\"nodrag border-muted-foreground/30 flex w-56 cursor-pointer items-center gap-3 rounded-full border-2 border-dashed px-4 py-3 transition-colors hover:border-blue-500 hover:text-blue-500 disabled:cursor-wait disabled:opacity-60\"\n >\n {loading ? (\n <Loader2 className=\"h-5 w-5 shrink-0 animate-spin\" />\n ) : (\n <Plus className=\"h-5 w-5 shrink-0\" />\n )}\n <span data-testid=\"add-repository-node-label\" className=\"text-sm font-medium\">\n {loading ? 'Opening...' : 'Add Repository'}\n </span>\n </button>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { FolderPlus, Loader2 } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { pickFolder } from './pick-folder';\n\ninterface AddRepositoryButtonProps {\n onSelect?: (path: string) => void;\n}\n\nexport function AddRepositoryButton({ onSelect }: AddRepositoryButtonProps) {\n const [loading, setLoading] = useState(false);\n\n async function handleClick() {\n if (loading) return;\n setLoading(true);\n try {\n const path = await pickFolder();\n if (path) {\n onSelect?.(path);\n }\n } finally {\n setLoading(false);\n }\n }\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Add Repository\"\n data-testid=\"add-repository-button\"\n onClick={handleClick}\n disabled={loading}\n >\n {loading ? (\n <Loader2 className=\"h-5 w-5 animate-spin\" />\n ) : (\n <FolderPlus className=\"h-5 w-5\" />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>Add Repository</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, type ReactNode } from 'react';\nimport type { FeatureNodeState } from '@/components/common/feature-node/feature-node-state-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\n\n// Re-export the FeatureItem type so consumers can import from one place.\n// This will gain `featureId` in a later phase.\nexport interface SidebarFeatureItem {\n name: string;\n status: FeatureStatus;\n featureId: string;\n startedAt?: number;\n duration?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Pure mapping: FeatureNodeState (6-state) → FeatureStatus (3-state) | null\n// ---------------------------------------------------------------------------\n\nconst stateMapping: Record<FeatureNodeState, FeatureStatus | null> = {\n 'action-required': 'action-needed',\n running: 'in-progress',\n done: 'done',\n blocked: 'in-progress',\n error: 'in-progress',\n creating: null,\n};\n\n/**\n * Maps a canvas FeatureNodeState to the sidebar's 3-state FeatureStatus.\n * Returns `null` for `creating` (optimistic UI) — these should be excluded from the sidebar.\n */\nexport function mapNodeStateToSidebarStatus(state: FeatureNodeState): FeatureStatus | null {\n return stateMapping[state];\n}\n\n// ---------------------------------------------------------------------------\n// SidebarFeaturesContext\n// ---------------------------------------------------------------------------\n\ninterface SidebarFeaturesContextValue {\n features: SidebarFeatureItem[];\n setFeatures: (features: SidebarFeatureItem[]) => void;\n}\n\nconst SidebarFeaturesContext = createContext<SidebarFeaturesContextValue | null>(null);\n\ninterface SidebarFeaturesProviderProps {\n children: ReactNode;\n}\n\nexport function SidebarFeaturesProvider({ children }: SidebarFeaturesProviderProps) {\n const [features, setFeatures] = useState<SidebarFeatureItem[]>([]);\n\n const value = useMemo<SidebarFeaturesContextValue>(() => ({ features, setFeatures }), [features]);\n\n return (\n <SidebarFeaturesContext.Provider value={value}>{children}</SidebarFeaturesContext.Provider>\n );\n}\n\nexport function useSidebarFeaturesContext(): SidebarFeaturesContextValue {\n const ctx = useContext(SidebarFeaturesContext);\n if (!ctx) {\n throw new Error('useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>');\n }\n return ctx;\n}\n","import { pickFolder as pickFolderAction } from '@/app/actions/pick-folder';\n\n/**\n * Opens a native OS folder picker dialog via server action.\n * Returns the selected absolute path, or null if the user cancelled.\n */\nexport async function pickFolder(): Promise<string | null> {\n const result = await pickFolderAction();\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n return result.path;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n"],"names":["module","exports","require","vendored","HooksClientContext","ServerInsertedHtml","process","env","NEXT_RUNTIME","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","ReactJsxRuntime","React","ReactDOM","ReactServerDOMTurbopackClient","AppRouterContext","DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","endsWith","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","warnOnce","_","warnings","Set","msg","has","console","warn","add","getDeploymentId","getDeploymentIdQueryOrEmptyString","NEXT_DEPLOYMENT_ID","deploymentId"],"mappings":"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CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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","ignoreList":[0,1,2,3,4,5,6,7,10,12,13,14,15,16,24]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/module.compiled.js","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-dom.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts","../../../../../../../src/presentation/web/components/ui/input.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-direction%401.1.1_%40types%2Breact%4019.2.10_react%4019.2.4/node_modules/%40radix-ui/react-direction/src/direction.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/wrench.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/circle-check.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/client/components/handle-isr-error.tsx","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/client/components/builtin/global-error.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/puzzle.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/segment.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/client/use-merged-ref.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/utils/warn-once.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/deployment-id.ts","../../../../../../../src/presentation/web/hooks/agent-events-provider.tsx","../../../../../../../src/presentation/web/hooks/use-agent-events.ts","../../../../../../../src/presentation/web/app/actions/data%3Adac28b%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/add-repository-node/add-repository-node.tsx","../../../../../../../src/presentation/web/components/common/add-repository-node/add-repository-button.tsx","../../../../../../../src/presentation/web/hooks/sidebar-features-context.tsx","../../../../../../../src/presentation/web/components/common/add-repository-node/pick-folder.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactDOM\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactServerDOMTurbopackClient\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n children?: React.ReactNode;\n dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n const { dir, children } = props;\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n useDirection,\n //\n Provider,\n //\n DirectionProvider,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z',\n key: '1ngwbx',\n },\n ],\n];\n\n/**\n * @component @name Wrench\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/wrench\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Wrench = createLucideIcon('wrench', __iconNode);\n\nexport default Wrench;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'm9 12 2 2 4-4', key: 'dzmm74' }],\n];\n\n/**\n * @component @name CircleCheck\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleCheck = createLucideIcon('circle-check', __iconNode);\n\nexport default CircleCheck;\n","const workAsyncStorage =\n typeof window === 'undefined'\n ? (\n require('../../server/app-render/work-async-storage.external') as typeof import('../../server/app-render/work-async-storage.external')\n ).workAsyncStorage\n : undefined\n\n// if we are revalidating we want to re-throw the error so the\n// function crashes so we can maintain our previous cache\n// instead of caching the error page\nexport function HandleISRError({ error }: { error: any }) {\n if (workAsyncStorage) {\n const store = workAsyncStorage.getStore()\n if (store?.isStaticGeneration) {\n if (error) {\n console.error(error)\n }\n throw error\n }\n }\n\n return null\n}\n","'use client'\n\nimport { HandleISRError } from '../handle-isr-error'\n\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily:\n 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: '28px',\n margin: '0 8px',\n },\n} as const\n\nexport type GlobalErrorComponent = React.ComponentType<{\n error: any\n}>\nfunction DefaultGlobalError({ error }: { error: any }) {\n const digest: string | undefined = error?.digest\n return (\n <html id=\"__next_error__\">\n <head></head>\n <body>\n <HandleISRError error={error} />\n <div style={styles.error}>\n <div>\n <h2 style={styles.text}>\n Application error: a {digest ? 'server' : 'client'}-side exception\n has occurred while loading {window.location.hostname} (see the{' '}\n {digest ? 'server logs' : 'browser console'} for more\n information).\n </h2>\n {digest ? <p style={styles.text}>{`Digest: ${digest}`}</p> : null}\n </div>\n </div>\n </body>\n </html>\n )\n}\n\n// Exported so that the import signature in the loaders can be identical to user\n// supplied custom global error signatures.\nexport default DefaultGlobalError\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n key: 'w46dr5',\n },\n ],\n];\n\n/**\n * @component @name Puzzle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/puzzle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Puzzle = createLucideIcon('puzzle', __iconNode);\n\nexport default Puzzle;\n","import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n","import { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef<TElement>(\n refA: Ref<TElement>,\n refB: Ref<TElement>\n): Ref<TElement> {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef<TElement>(\n refA: NonNullable<Ref<TElement>>,\n current: TElement\n) {\n if (typeof refA === 'function') {\n const cleanup = refA(current)\n if (typeof cleanup === 'function') {\n return cleanup\n } else {\n return () => refA(null)\n }\n } else {\n refA.current = current\n return () => {\n refA.current = null\n }\n }\n}\n","let warnOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const warnings = new Set<string>()\n warnOnce = (msg: string) => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\nexport { warnOnce }\n","// This could also be a variable instead of a function, but some unit tests want to change the ID at\n// runtime. Even though that would never happen in a real deployment.\nexport function getDeploymentId(): string | undefined {\n return process.env.NEXT_DEPLOYMENT_ID\n}\n\nexport function getDeploymentIdQueryOrEmptyString(): string {\n let deploymentId = getDeploymentId()\n if (deploymentId) {\n return `?dpl=${deploymentId}`\n }\n return ''\n}\n","'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport {\n useAgentEvents,\n type UseAgentEventsOptions,\n type UseAgentEventsResult,\n} from './use-agent-events';\n\nconst AgentEventsContext = createContext<UseAgentEventsResult | null>(null);\n\ninterface AgentEventsProviderProps extends UseAgentEventsOptions {\n children: ReactNode;\n}\n\n/**\n * Single SSE connection for agent events shared across all consumers.\n * Wrap the app once; use `useAgentEventsContext()` to read.\n */\nexport function AgentEventsProvider({ children, runId }: AgentEventsProviderProps) {\n const value = useAgentEvents({ runId });\n\n return <AgentEventsContext.Provider value={value}>{children}</AgentEventsContext.Provider>;\n}\n\nexport function useAgentEventsContext(): UseAgentEventsResult {\n const ctx = useContext(AgentEventsContext);\n if (!ctx) {\n throw new Error('useAgentEventsContext must be used within an <AgentEventsProvider>');\n }\n return ctx;\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { NotificationEvent } from '@shepai/core/domain/generated/output';\n\nexport type ConnectionStatus = 'connected' | 'connecting' | 'disconnected';\n\nexport interface UseAgentEventsOptions {\n runId?: string;\n}\n\nexport interface UseAgentEventsResult {\n events: NotificationEvent[];\n lastEvent: NotificationEvent | null;\n connectionStatus: ConnectionStatus;\n}\n\nconst SW_PATH = '/agent-events-sw.js';\n\n/**\n * Hook that receives real-time agent notification events via a Service Worker.\n *\n * The SW maintains a single SSE connection to /api/agent-events and\n * broadcasts events to all open tabs. Falls back to direct EventSource\n * when Service Workers are unavailable.\n */\nexport function useAgentEvents(options?: UseAgentEventsOptions): UseAgentEventsResult {\n const [events, setEvents] = useState<NotificationEvent[]>([]);\n const [lastEvent, setLastEvent] = useState<NotificationEvent | null>(null);\n const [connectionStatus, setConnectionStatus] = useState<ConnectionStatus>('disconnected');\n\n const runId = options?.runId;\n const swRef = useRef<ServiceWorker | null>(null);\n\n const onMessage = useCallback((event: MessageEvent) => {\n const msg = event.data;\n if (!msg || typeof msg !== 'object') return;\n\n if (msg.type === 'notification') {\n const parsed = msg.data as NotificationEvent;\n setEvents((prev) => [...prev, parsed]);\n setLastEvent(parsed);\n } else if (msg.type === 'status') {\n setConnectionStatus(msg.status as ConnectionStatus);\n }\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // ?sse=direct bypasses the Service Worker for debugging\n const bypassSW =\n typeof location !== 'undefined' && new URLSearchParams(location.search).has('sse');\n\n // Fallback: direct EventSource when SW not supported or bypassed\n if (!navigator.serviceWorker || bypassSW) {\n return connectDirectEventSource(runId, setEvents, setLastEvent, setConnectionStatus);\n }\n\n let cancelled = false;\n const fallbackCleanupRef = { current: undefined as (() => void) | undefined };\n\n function subscribeToWorker(worker: ServiceWorker) {\n if (cancelled) return;\n swRef.current = worker;\n worker.postMessage({ type: 'subscribe', runId });\n setConnectionStatus('connecting');\n }\n\n // Listen for messages from whatever SW controls this page\n navigator.serviceWorker.addEventListener('message', onMessage);\n\n // Re-subscribe when SW controller changes (e.g., after SW update via skipWaiting)\n function handleControllerChange() {\n if (cancelled) return;\n const newController = navigator.serviceWorker.controller;\n if (newController) {\n swRef.current = newController;\n newController.postMessage({ type: 'subscribe', runId });\n setConnectionStatus('connecting');\n }\n }\n navigator.serviceWorker.addEventListener('controllerchange', handleControllerChange);\n\n navigator.serviceWorker\n .register(SW_PATH, { scope: '/' })\n .then((registration) => {\n if (cancelled) return;\n\n // Use the active worker, or wait for it to activate\n const sw = registration.active ?? registration.installing ?? registration.waiting;\n if (!sw) {\n // No worker at all — fall back to direct EventSource\n fallbackCleanupRef.current = connectDirectEventSource(\n runId,\n setEvents,\n setLastEvent,\n setConnectionStatus\n );\n return;\n }\n\n if (sw.state === 'activated') {\n subscribeToWorker(sw);\n } else {\n sw.addEventListener('statechange', () => {\n if (sw.state === 'activated') subscribeToWorker(sw);\n });\n }\n })\n .catch(() => {\n // SW registration failed — fall back to direct EventSource\n if (!cancelled) {\n fallbackCleanupRef.current = connectDirectEventSource(\n runId,\n setEvents,\n setLastEvent,\n setConnectionStatus\n );\n }\n });\n\n return () => {\n cancelled = true;\n navigator.serviceWorker.removeEventListener('message', onMessage);\n navigator.serviceWorker.removeEventListener('controllerchange', handleControllerChange);\n swRef.current?.postMessage({ type: 'unsubscribe' });\n swRef.current = null;\n fallbackCleanupRef.current?.();\n };\n }, [runId, onMessage]);\n\n return { events, lastEvent, connectionStatus };\n}\n\n// --- EventSource fallback (identical to the previous implementation) ---\n\nconst BASE_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 30_000;\nconst STABLE_CONNECTION_MS = 5_000;\n\nfunction connectDirectEventSource(\n runId: string | undefined,\n setEvents: React.Dispatch<React.SetStateAction<NotificationEvent[]>>,\n setLastEvent: React.Dispatch<React.SetStateAction<NotificationEvent | null>>,\n setConnectionStatus: React.Dispatch<React.SetStateAction<ConnectionStatus>>\n): () => void {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n if (typeof EventSource === 'undefined') return () => {};\n\n let es: EventSource | null = null;\n let stopped = false;\n let backoff = BASE_BACKOFF_MS;\n let reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n let stableTimer: ReturnType<typeof setTimeout> | null = null;\n\n function connect() {\n if (stopped) return;\n\n const url = runId\n ? `/api/agent-events?runId=${encodeURIComponent(runId)}`\n : '/api/agent-events';\n\n es = new EventSource(url);\n setConnectionStatus('connecting');\n\n es.onopen = () => {\n setConnectionStatus('connected');\n stableTimer = setTimeout(() => {\n stableTimer = null;\n backoff = BASE_BACKOFF_MS;\n }, STABLE_CONNECTION_MS);\n };\n\n es.onerror = () => {\n es?.close();\n es = null;\n setConnectionStatus('disconnected');\n\n if (stableTimer !== null) {\n clearTimeout(stableTimer);\n stableTimer = null;\n }\n\n const delay = backoff;\n backoff = Math.min(delay * 2, MAX_BACKOFF_MS);\n\n reconnectTimer = setTimeout(() => {\n reconnectTimer = null;\n connect();\n }, delay);\n };\n\n es.addEventListener('notification', ((event: MessageEvent) => {\n const parsed: NotificationEvent = JSON.parse(event.data);\n setEvents((prev) => [...prev, parsed]);\n setLastEvent(parsed);\n }) as EventListener);\n }\n\n connect();\n\n return () => {\n stopped = true;\n if (reconnectTimer !== null) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (stableTimer !== null) {\n clearTimeout(stableTimer);\n stableTimer = null;\n }\n if (es) {\n es.close();\n es = null;\n }\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"001371803ca5b5df95115f5adbcfaaa141151b092b\":\"pickFolder\"},\"src/presentation/web/app/actions/pick-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"001371803ca5b5df95115f5adbcfaaa141151b092b\",callServer,void 0,findSourceMapURL,\"pickFolder\");export{$$RSC_SERVER_ACTION_0 as pickFolder};","'use client';\n\nimport { useState } from 'react';\nimport { Plus, Loader2 } from 'lucide-react';\nimport type { AddRepositoryNodeData } from './add-repository-node-config';\nimport { pickFolder } from './pick-folder';\n\nexport function AddRepositoryNode({\n data,\n}: {\n data: AddRepositoryNodeData;\n [key: string]: unknown;\n}) {\n const [loading, setLoading] = useState(false);\n\n async function handleClick() {\n if (loading) return;\n setLoading(true);\n try {\n const path = await pickFolder();\n if (path) {\n data.onSelect?.(path);\n }\n } finally {\n setLoading(false);\n }\n }\n\n return (\n <div className=\"group\">\n <button\n type=\"button\"\n data-testid=\"add-repository-node-card\"\n onClick={handleClick}\n disabled={loading}\n className=\"nodrag border-muted-foreground/30 flex w-56 cursor-pointer items-center gap-3 rounded-full border-2 border-dashed px-4 py-3 transition-colors hover:border-blue-500 hover:text-blue-500 disabled:cursor-wait disabled:opacity-60\"\n >\n {loading ? (\n <Loader2 className=\"h-5 w-5 shrink-0 animate-spin\" />\n ) : (\n <Plus className=\"h-5 w-5 shrink-0\" />\n )}\n <span data-testid=\"add-repository-node-label\" className=\"text-sm font-medium\">\n {loading ? 'Opening...' : 'Add Repository'}\n </span>\n </button>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { FolderPlus, Loader2 } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { pickFolder } from './pick-folder';\n\ninterface AddRepositoryButtonProps {\n onSelect?: (path: string) => void;\n}\n\nexport function AddRepositoryButton({ onSelect }: AddRepositoryButtonProps) {\n const [loading, setLoading] = useState(false);\n\n async function handleClick() {\n if (loading) return;\n setLoading(true);\n try {\n const path = await pickFolder();\n if (path) {\n onSelect?.(path);\n }\n } finally {\n setLoading(false);\n }\n }\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Add Repository\"\n data-testid=\"add-repository-button\"\n onClick={handleClick}\n disabled={loading}\n >\n {loading ? (\n <Loader2 className=\"h-5 w-5 animate-spin\" />\n ) : (\n <FolderPlus className=\"h-5 w-5\" />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>Add Repository</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, type ReactNode } from 'react';\nimport type { FeatureNodeState } from '@/components/common/feature-node/feature-node-state-config';\nimport type { FeatureStatus } from '@/components/common/feature-status-config';\n\n// Re-export the FeatureItem type so consumers can import from one place.\n// This will gain `featureId` in a later phase.\nexport interface SidebarFeatureItem {\n name: string;\n status: FeatureStatus;\n featureId: string;\n startedAt?: number;\n duration?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Pure mapping: FeatureNodeState (6-state) → FeatureStatus (3-state) | null\n// ---------------------------------------------------------------------------\n\nconst stateMapping: Record<FeatureNodeState, FeatureStatus | null> = {\n 'action-required': 'action-needed',\n running: 'in-progress',\n done: 'done',\n blocked: 'in-progress',\n error: 'in-progress',\n creating: null,\n};\n\n/**\n * Maps a canvas FeatureNodeState to the sidebar's 3-state FeatureStatus.\n * Returns `null` for `creating` (optimistic UI) — these should be excluded from the sidebar.\n */\nexport function mapNodeStateToSidebarStatus(state: FeatureNodeState): FeatureStatus | null {\n return stateMapping[state];\n}\n\n// ---------------------------------------------------------------------------\n// SidebarFeaturesContext\n// ---------------------------------------------------------------------------\n\ninterface SidebarFeaturesContextValue {\n features: SidebarFeatureItem[];\n setFeatures: (features: SidebarFeatureItem[]) => void;\n}\n\nconst SidebarFeaturesContext = createContext<SidebarFeaturesContextValue | null>(null);\n\ninterface SidebarFeaturesProviderProps {\n children: ReactNode;\n}\n\nexport function SidebarFeaturesProvider({ children }: SidebarFeaturesProviderProps) {\n const [features, setFeatures] = useState<SidebarFeatureItem[]>([]);\n\n const value = useMemo<SidebarFeaturesContextValue>(() => ({ features, setFeatures }), [features]);\n\n return (\n <SidebarFeaturesContext.Provider value={value}>{children}</SidebarFeaturesContext.Provider>\n );\n}\n\nexport function useSidebarFeaturesContext(): SidebarFeaturesContextValue {\n const ctx = useContext(SidebarFeaturesContext);\n if (!ctx) {\n throw new Error('useSidebarFeaturesContext must be used within a <SidebarFeaturesProvider>');\n }\n return ctx;\n}\n","import { pickFolder as pickFolderAction } from '@/app/actions/pick-folder';\n\n/**\n * Opens a native OS folder picker dialog via server action.\n * Returns the selected absolute path, or null if the user cancelled.\n */\nexport async function pickFolder(): Promise<string | null> {\n const result = await pickFolderAction();\n\n if (result.error) {\n throw new Error(result.error);\n }\n\n return result.path;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK","vendored","ReactJsxRuntime","React","ReactDOM","ReactServerDOMTurbopackClient","AppRouterContext","HooksClientContext","ServerInsertedHtml","HandleISRError","workAsyncStorage","window","undefined","error","store","getStore","isStaticGeneration","console","styles","fontFamily","height","textAlign","display","flexDirection","alignItems","justifyContent","text","fontSize","fontWeight","lineHeight","margin","DefaultGlobalError","digest","html","id","head","body","div","style","h2","location","hostname","p","DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","endsWith","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","warnOnce","_","warnings","Set","msg","has","warn","add","getDeploymentId","getDeploymentIdQueryOrEmptyString","NEXT_DEPLOYMENT_ID","deploymentId"],"mappings":"2kCA0BQG,EAAOC,OAAO,CAAGC,EAAQ,CAAA,CAAA,IAAA,iCC1BjCF,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEC,eAAe,+BCFxCP,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEE,KAAK,+BCF9BR,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEG,QAAQ,+BCFjCT,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,YAAY,CAAEI,6BAA6B,+BCFtDV,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,QAAW,CAACK,gBAAgB,+BCFvCX,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,QAAW,CAACM,kBAAkB,+BCFzCZ,EAAOC,OAAO,CACZC,EAAQ,CAAA,CAAA,IAAA,GACRI,QAAQ,CAAC,QAAW,CAACO,kBAAkB,0CCAzC,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAM,WAAE,CAAS,MAAE,CAAI,CAAE,GAAG,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAM,EACN,YAAU,QACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6bACA,gFACA,yGACA,GAED,GAAG,CAAK,EAGf,8CClBA,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KAeH,EAAA,CAAA,CAAA,EAfc,KAGvB,IAAM,EAAyB,EAAA,aAAA,CAAqC,KAAA,CAAS,EAiB7E,SAAS,EAAa,CAAA,EAAsB,AAC1C,IAAM,EAAkB,EAAA,UAAA,CAAW,GACnC,OAAO,GAAY,GADgC,AACnB,KAClC,qDCCA,CAAA,CAAA,CAAA,CAAM,AAAN,CAAA,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CArBI,CAClC,AAoBwC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAAA,AAnBtC,CAmBsC,AAnBtC,CAmBsC,AAnBtC,CAAA,AAmBsC,CAlBtC,AAkBsC,CAjBpC,AAiBoC,CAjBpC,AAiB8C,CAAA,AAjB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACP,CAEJ,qDCQA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAd,CAAc,AAAd,CAAc,AAAd,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAhBD,CAClC,AAemD,CAflD,AAekD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAflD,AAekD,CAflD,AAAU,AAekD,CAAA,AAflD,AAAE,EAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,AAAI,IAAA,CAAM,AAAN,CAAM,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,AAAM,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzD,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAiB,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAChD,gICIgBC,iBAAAA,qCAAAA,KAVhB,IAAMC,EAGEb,EAAQ,CAAA,CAAA,IAAA,GACRa,MAHN,OAAOC,GAGe,CAMjB,EALDC,KAJc,EASJH,EAAe,OAAEI,CAAK,CAAkB,EACtD,GAAIH,EAAkB,CACpB,IAAMI,EAAQJ,EAAiBK,QAAQ,GACvC,GAAID,GAAOE,mBAIT,CAJ6B,KACzBH,GACFI,IADS,IACDJ,KAAK,CAACA,GAEVA,CAEV,CAEA,OAAO,IACT,+TC8BA,OADA,AADA,GAEA,qCAAA,GAD2C,uBAjDZ,CAAA,CAAA,IAAA,KAGtB,CAELM,EA2C4E,SA1C1E,8FACFC,OAAQ,QACRC,UAAW,SACXC,QAAS,OACTC,cAAe,SACfC,WAAY,SACZC,eAAgB,QAClB,IACM,CACJE,SAAU,OACVC,WAAY,IACZC,WAAY,OACZC,OAAQ,OACV,EA+BF,EAzBA,SAASC,AAAmB,AAyBbA,OAzBelB,CAAK,CAAkB,EACnD,IAAMmB,EAA6BnB,GAAOmB,OAC1C,MACE,CAAA,AADF,EACE,EAAA,IAAA,EAACC,CADH,MACGA,CAAKC,GAAG,2BACP,CAAA,EAAA,EAAA,GAAA,EAACC,OAAAA,CAAAA,GACD,CAAA,EAAA,EAAA,IAAA,EAACC,OAAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC3B,EAAAA,cAAc,CAAA,CAACI,MAAOA,IACvB,CAAA,EAAA,EAAA,GAAA,EAACwB,MAAAA,CAAIC,KAAAA,EAAOpB,OAAOL,GACjB,CAAA,CADsB,CACtB,EAAA,IAAA,EAACwB,CAAD,KAACA,WACC,CAAA,EAAA,EAAA,IAAA,EAACE,KAAAA,CAAGD,KAAAA,EAAOpB,OAAOQ,IAAI,AAAE,wBACAM,EAAS,SAAW,SAAS,8CACvBrB,OAAO6B,QAAQ,CAACC,QAAQ,CAAC,YAAU,IAC9DT,EAAS,cAAgB,kBAAkB,6BAG7CA,EAAS,CAAA,EAAA,EAAA,EAATA,CAAS,EAACU,IAAAA,CAAEJ,GAAZN,EAAYM,EAAOpB,OAAOQ,GAAO,CAAC,AAAJ,QAAY,EAAEM,EAAAA,CAAQ,GAAQ,eAMzE,iPCxBA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAT,AAAS,CAAT,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CArBI,CAClC,AAoBwC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAnBtC,AAmBsC,CAAA,AAnBtC,CACA,AAkBsC,CAjBpC,AAiBoC,CAjBpC,AAiB8C,CAjB3C,AAiB2C,CAjB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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","ignoreList":[0,1,2,3,4,5,6,7,10,12,13,14,15,16,17,18,26]}
|