@shepai/cli 1.73.0 → 1.73.1-pr225.4fad6ad
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/ports/output/agents/agent-executor-provider.interface.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/agents/agent-executor-provider.interface.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +2 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts +4 -2
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-provider.service.js +8 -4
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/structured-agent-caller.service.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +1 -2
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +6 -10
- 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 +9 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +1 -2
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +4 -9
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +7 -8
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +12 -15
- 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 +21 -0
- package/dist/src/presentation/web/hooks/use-agent-events.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-agent-events.js +3 -2
- package/dist/src/presentation/web/hooks/use-deploy-action.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-deploy-action.js +2 -10
- 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 +45 -30
- 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 +51 -36
- 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 +41 -26
- 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 +45 -30
- 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 +51 -36
- 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 +41 -26
- 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 +41 -26
- 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/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_da7eef33.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.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]__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]__6258349c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -1
- 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]__94a6d275._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -1
- 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/_0e9d6bf7._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_dee726e3._.js → _49f6575f._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_dee726e3._.js.map → _49f6575f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_1978f325._.js → _5ee4f5a7._.js} +2 -2
- package/web/.next/server/chunks/ssr/_5ee4f5a7._.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/_6e08ce21._.js +3 -0
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -0
- 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/src_presentation_web_163038ba._.js +6 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_2b91e4ec._.js → src_presentation_web_30d7eeda._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_5bcc1537._.js.map → src_presentation_web_30d7eeda._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +6 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_5bcc1537._.js → src_presentation_web_565a14f8._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_2b91e4ec._.js.map → src_presentation_web_565a14f8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -0
- 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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +183 -126
- 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 +45 -30
- 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 +51 -36
- 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 +41 -26
- 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 +45 -30
- 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 +51 -36
- 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 +41 -26
- 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 +41 -26
- 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/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_da7eef33.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.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]__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]__6258349c._.js +1 -1
- 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]__94a6d275._.js +1 -1
- 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/_0e9d6bf7._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_dee726e3._.js → _49f6575f._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_1978f325._.js → _5ee4f5a7._.js} +2 -2
- 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/_6e08ce21._.js +3 -0
- 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/src_presentation_web_163038ba._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_2b91e4ec._.js → src_presentation_web_30d7eeda._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{src_presentation_web_5bcc1537._.js → src_presentation_web_565a14f8._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +3 -0
- 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/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 +183 -126
- package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +7 -18
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +11 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +16 -15
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +12 -31
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +25 -0
- package/web/.next/standalone/src/presentation/web/hooks/use-agent-events.ts +3 -2
- package/web/.next/standalone/src/presentation/web/hooks/use-deploy-action.ts +2 -10
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{e69d79bd3f19dec8.js → 0a91a62af4813cbe.js} +1 -1
- package/web/.next/static/chunks/0c8d4bdd95ae45e7.js +1 -0
- package/web/.next/static/chunks/{c92e1360ada8ca94.js → 1f5c93a8b939416d.js} +2 -2
- package/web/.next/static/chunks/{9cbb42a6bd516d3b.js → 37c95269aa36cf41.js} +1 -1
- package/web/.next/static/chunks/{d7e0cd32364a8d76.js → 40baf05ad602fee7.js} +1 -1
- package/web/.next/static/chunks/4fbd01af2bfc46a0.js +1 -0
- package/web/.next/static/chunks/{8959112899679e25.js → a539a922a7ba0851.js} +1 -1
- package/web/.next/static/chunks/{6691ad02dc1efd1f.js → b2084d9c2260b140.js} +1 -1
- package/web/.next/static/chunks/b47db04e0dd7ff83.js +1 -0
- package/web/.next/static/chunks/ed768e1443066c95.js +1 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1978f325._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_250a63ae._.js +0 -3
- package/web/.next/server/chunks/ssr/_250a63ae._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +0 -8
- package/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +0 -8
- package/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_816618e2.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_ba2e050f.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_250a63ae._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5955c012.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_d5b0cb86._.js +0 -8
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_e626b63c._.js +0 -8
- package/web/.next/static/chunks/15ceb197ec725da2.js +0 -1
- package/web/.next/static/chunks/7bff5fbcbf157df5.js +0 -1
- package/web/.next/static/chunks/8f508ef906cbf0fa.js +0 -1
- package/web/.next/static/chunks/c5603ed8a95d460d.js +0 -1
- /package/web/.next/static/{1AvkeBASQdtzZt9cm9UYg → Xj_ABhg1MoIBpmI-Qeezj}/_buildManifest.js +0 -0
- /package/web/.next/static/{1AvkeBASQdtzZt9cm9UYg → Xj_ABhg1MoIBpmI-Qeezj}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{1AvkeBASQdtzZt9cm9UYg → Xj_ABhg1MoIBpmI-Qeezj}/_ssgManifest.js +0 -0
|
@@ -16,8 +16,7 @@ interface ApprovalGates {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
interface CreateFeatureInput {
|
|
19
|
-
|
|
20
|
-
description?: string;
|
|
19
|
+
description: string;
|
|
21
20
|
repositoryPath: string;
|
|
22
21
|
attachments?: Attachment[];
|
|
23
22
|
approvalGates?: {
|
|
@@ -30,16 +29,8 @@ interface CreateFeatureInput {
|
|
|
30
29
|
parentId?: string;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
function composeUserInput(
|
|
34
|
-
|
|
35
|
-
description: string | undefined,
|
|
36
|
-
attachments: Attachment[] | undefined
|
|
37
|
-
): string {
|
|
38
|
-
let userInput = `Feature: ${name}`;
|
|
39
|
-
|
|
40
|
-
if (description) {
|
|
41
|
-
userInput += `\n\n${description}`;
|
|
42
|
-
}
|
|
32
|
+
function composeUserInput(description: string, attachments: Attachment[] | undefined): string {
|
|
33
|
+
let userInput = description;
|
|
43
34
|
|
|
44
35
|
if (attachments && attachments.length > 0) {
|
|
45
36
|
const paths = attachments.map((a) => `- ${a.path}`).join('\n');
|
|
@@ -52,18 +43,17 @@ function composeUserInput(
|
|
|
52
43
|
export async function createFeature(
|
|
53
44
|
input: CreateFeatureInput
|
|
54
45
|
): Promise<{ feature?: Feature; error?: string }> {
|
|
55
|
-
const {
|
|
56
|
-
input;
|
|
46
|
+
const { description, repositoryPath, attachments, approvalGates, push, openPr, parentId } = input;
|
|
57
47
|
|
|
58
|
-
if (!
|
|
59
|
-
return { error: '
|
|
48
|
+
if (!description?.trim()) {
|
|
49
|
+
return { error: 'description is required' };
|
|
60
50
|
}
|
|
61
51
|
|
|
62
52
|
if (!repositoryPath?.trim()) {
|
|
63
53
|
return { error: 'repositoryPath is required' };
|
|
64
54
|
}
|
|
65
55
|
|
|
66
|
-
const userInput = composeUserInput(
|
|
56
|
+
const userInput = composeUserInput(description, attachments);
|
|
67
57
|
const gates: ApprovalGates = {
|
|
68
58
|
allowPrd: approvalGates?.allowPrd ?? false,
|
|
69
59
|
allowPlan: approvalGates?.allowPlan ?? false,
|
|
@@ -81,7 +71,6 @@ export async function createFeature(
|
|
|
81
71
|
push: push ?? false,
|
|
82
72
|
openPr: openPr ?? false,
|
|
83
73
|
...(parentId ? { parentId } : {}),
|
|
84
|
-
name,
|
|
85
74
|
description,
|
|
86
75
|
});
|
|
87
76
|
|
|
@@ -135,6 +135,17 @@ export function FeatureDrawerClient({ view: initialView }: FeatureDrawerClientPr
|
|
|
135
135
|
const pathname = usePathname();
|
|
136
136
|
const isOpen = pathname.startsWith('/feature/');
|
|
137
137
|
const isOpenRef = useRef(isOpen);
|
|
138
|
+
const wasOpenRef = useRef(isOpen);
|
|
139
|
+
|
|
140
|
+
// When the drawer re-opens, force a server refresh so the view is always fresh.
|
|
141
|
+
// SSE skips router.refresh() while the drawer is closed, so data can go stale.
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
if (isOpen && !wasOpenRef.current) {
|
|
144
|
+
router.refresh();
|
|
145
|
+
}
|
|
146
|
+
wasOpenRef.current = isOpen;
|
|
147
|
+
}, [isOpen, router]);
|
|
148
|
+
|
|
138
149
|
isOpenRef.current = isOpen;
|
|
139
150
|
|
|
140
151
|
const onClose = useCallback(() => {
|
|
@@ -16,8 +16,7 @@ import { DrawerCloseGuardProvider } from '@/hooks/drawer-close-guard';
|
|
|
16
16
|
* create a new feature in the Control Center.
|
|
17
17
|
*
|
|
18
18
|
* ### Form sections
|
|
19
|
-
* - **
|
|
20
|
-
* - **Description** (optional) — multi-line textarea
|
|
19
|
+
* - **Description** (required) — multi-line textarea, submit is disabled when empty
|
|
21
20
|
* - **Auto Approve** — Tri-state parent checkbox with 3 child checkboxes (PRD, Plan, Merge).
|
|
22
21
|
* Parent shows indeterminate when some children are selected, checks/unchecks all on click.
|
|
23
22
|
* - **Attachments** (optional) — native OS file picker with extension-based icon system:
|
|
@@ -29,12 +28,12 @@ import { DrawerCloseGuardProvider } from '@/hooks/drawer-close-guard';
|
|
|
29
28
|
* |------|------|-------------|
|
|
30
29
|
* | `open` | `boolean` | Controls drawer visibility |
|
|
31
30
|
* | `onClose` | `() => void` | Called on dismiss (close button, cancel, or backdrop) |
|
|
32
|
-
* | `onSubmit` | `(data: FeatureCreatePayload) => void` | Called with `{
|
|
31
|
+
* | `onSubmit` | `(data: FeatureCreatePayload) => void` | Called with `{ description, attachments, repositoryPath, approvalGates }` |
|
|
33
32
|
* | `repositoryPath` | `string` | Repository path (mandatory) included in the submitted data |
|
|
34
33
|
*
|
|
35
34
|
* ### Behavior
|
|
36
|
-
* - Form resets (
|
|
37
|
-
* - Submit button is disabled when
|
|
35
|
+
* - Form resets (description, attachments, checkboxes) when the drawer closes
|
|
36
|
+
* - Submit button is disabled when description is empty
|
|
38
37
|
* - `approvalGates` always included: `{ allowPrd, allowPlan, allowMerge }` (all false by default)
|
|
39
38
|
* - Non-modal (`modal={false}`) — canvas stays interactive behind the drawer
|
|
40
39
|
* - Fixed width: 448px (`w-xl`) — matches review drawers (PRD, Plan, Merge)
|
|
@@ -66,7 +65,7 @@ const meta: Meta<typeof FeatureCreateDrawer> = {
|
|
|
66
65
|
},
|
|
67
66
|
onSubmit: {
|
|
68
67
|
description:
|
|
69
|
-
'Callback fired with `FeatureCreatePayload` when the form is submitted. Receives `{
|
|
68
|
+
'Callback fired with `FeatureCreatePayload` when the form is submitted. Receives `{ description, attachments, repositoryPath, approvalGates }`.',
|
|
70
69
|
},
|
|
71
70
|
repositoryPath: {
|
|
72
71
|
control: 'text',
|
|
@@ -131,7 +130,7 @@ export const Default: Story = {
|
|
|
131
130
|
};
|
|
132
131
|
|
|
133
132
|
/**
|
|
134
|
-
* Pre-filled form — click to open, then
|
|
133
|
+
* Pre-filled form — click to open, then description is typed in.
|
|
135
134
|
* Demonstrates the form in a "ready to submit" state.
|
|
136
135
|
*/
|
|
137
136
|
export const PreFilled: Story = {
|
|
@@ -142,10 +141,10 @@ export const PreFilled: Story = {
|
|
|
142
141
|
|
|
143
142
|
// Drawer renders in a portal — query from document body
|
|
144
143
|
const body = within(canvasElement.ownerDocument.body);
|
|
145
|
-
const
|
|
146
|
-
|
|
144
|
+
const descInput = await body.findByPlaceholderText(
|
|
145
|
+
'e.g. Add GitHub OAuth login with callback handling and token refresh...'
|
|
146
|
+
);
|
|
147
147
|
|
|
148
|
-
await userEvent.type(nameInput, 'GitHub OAuth Login');
|
|
149
148
|
await userEvent.type(
|
|
150
149
|
descInput,
|
|
151
150
|
'Implement OAuth2 authentication with GitHub as the identity provider. Includes login, callback handling, and token refresh.'
|
|
@@ -154,8 +153,8 @@ export const PreFilled: Story = {
|
|
|
154
153
|
};
|
|
155
154
|
|
|
156
155
|
/**
|
|
157
|
-
* Validation state — open the drawer with an empty
|
|
158
|
-
* The "+ Create Feature" button is disabled because
|
|
156
|
+
* Validation state — open the drawer with an empty description field.
|
|
157
|
+
* The "+ Create Feature" button is disabled because description validation fails.
|
|
159
158
|
*/
|
|
160
159
|
export const ValidationDisabled: Story = {
|
|
161
160
|
render: () => <CreateDrawerTrigger label="Open Validation Demo" />,
|
|
@@ -312,7 +311,7 @@ export const WithWorkflowDefaults: Story = {
|
|
|
312
311
|
* and click "Add Files" to attach files via the native OS file picker.
|
|
313
312
|
*
|
|
314
313
|
* **Submitted data** is displayed in a styled panel showing `FeatureCreatePayload`
|
|
315
|
-
* with `{
|
|
314
|
+
* with `{ description, attachments, repositoryPath, approvalGates }`.
|
|
316
315
|
*
|
|
317
316
|
* In Storybook, the native picker won't work (no backend), but submitted data
|
|
318
317
|
* would show the paths if files were attached programmatically.
|
|
@@ -369,8 +368,10 @@ export const DiscardConfirmation: Story = {
|
|
|
369
368
|
await userEvent.click(canvas.getByRole('button', { name: 'Open (Discard Confirmation)' }));
|
|
370
369
|
|
|
371
370
|
const body = within(canvasElement.ownerDocument.body);
|
|
372
|
-
const
|
|
373
|
-
|
|
371
|
+
const descInput = await body.findByPlaceholderText(
|
|
372
|
+
'e.g. Add GitHub OAuth login with callback handling and token refresh...'
|
|
373
|
+
);
|
|
374
|
+
await userEvent.type(descInput, 'My Feature');
|
|
374
375
|
|
|
375
376
|
// Click Cancel — should show the discard confirmation dialog
|
|
376
377
|
const cancelButton = body.getByRole('button', { name: 'Cancel' });
|
|
@@ -38,8 +38,7 @@ export interface ParentFeatureOption {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export interface FeatureCreatePayload {
|
|
41
|
-
|
|
42
|
-
description?: string;
|
|
41
|
+
description: string;
|
|
43
42
|
attachments: FileAttachment[];
|
|
44
43
|
repositoryPath: string;
|
|
45
44
|
approvalGates: {
|
|
@@ -92,7 +91,6 @@ export function FeatureCreateDrawer({
|
|
|
92
91
|
const defaultPush = workflowDefaults?.push ?? false;
|
|
93
92
|
const defaultOpenPr = workflowDefaults?.openPr ?? false;
|
|
94
93
|
|
|
95
|
-
const [name, setName] = useState('');
|
|
96
94
|
const [description, setDescription] = useState('');
|
|
97
95
|
const [attachments, setAttachments] = useState<FileAttachment[]>([]);
|
|
98
96
|
const [approvalGates, setApprovalGates] = useState<Record<string, boolean>>({ ...defaultGates });
|
|
@@ -117,7 +115,6 @@ export function FeatureCreateDrawer({
|
|
|
117
115
|
}, [open, initialParentId]);
|
|
118
116
|
|
|
119
117
|
const resetForm = useCallback(() => {
|
|
120
|
-
setName('');
|
|
121
118
|
setDescription('');
|
|
122
119
|
setAttachments([]);
|
|
123
120
|
setApprovalGates({ ...defaultGates });
|
|
@@ -127,7 +124,7 @@ export function FeatureCreateDrawer({
|
|
|
127
124
|
}, [defaultGates, defaultPush, defaultOpenPr]);
|
|
128
125
|
|
|
129
126
|
// Track whether the form has unsaved data
|
|
130
|
-
const isDirty =
|
|
127
|
+
const isDirty = description.trim() !== '' || attachments.length > 0;
|
|
131
128
|
|
|
132
129
|
// Shared close guard — shows confirmation when dirty, prevents navigation
|
|
133
130
|
const { attemptClose } = useGuardedDrawerClose({ open, isDirty, onClose, onReset: resetForm });
|
|
@@ -135,12 +132,10 @@ export function FeatureCreateDrawer({
|
|
|
135
132
|
const handleSubmit = useCallback(
|
|
136
133
|
(e: React.FormEvent) => {
|
|
137
134
|
e.preventDefault();
|
|
138
|
-
if (!
|
|
135
|
+
if (!description.trim()) return;
|
|
139
136
|
createSound.play();
|
|
140
|
-
const trimmedDescription = description.trim() || undefined;
|
|
141
137
|
onSubmit({
|
|
142
|
-
|
|
143
|
-
description: trimmedDescription,
|
|
138
|
+
description: description.trim(),
|
|
144
139
|
attachments,
|
|
145
140
|
repositoryPath,
|
|
146
141
|
approvalGates: {
|
|
@@ -155,7 +150,6 @@ export function FeatureCreateDrawer({
|
|
|
155
150
|
resetForm();
|
|
156
151
|
},
|
|
157
152
|
[
|
|
158
|
-
name,
|
|
159
153
|
description,
|
|
160
154
|
attachments,
|
|
161
155
|
approvalGates,
|
|
@@ -214,7 +208,11 @@ export function FeatureCreateDrawer({
|
|
|
214
208
|
<Button variant="outline" onClick={attemptClose} disabled={isSubmitting}>
|
|
215
209
|
Cancel
|
|
216
210
|
</Button>
|
|
217
|
-
<Button
|
|
211
|
+
<Button
|
|
212
|
+
type="submit"
|
|
213
|
+
form="create-feature-form"
|
|
214
|
+
disabled={!description.trim() || isSubmitting}
|
|
215
|
+
>
|
|
218
216
|
{isSubmitting ? 'Creating...' : '+ Create Feature'}
|
|
219
217
|
</Button>
|
|
220
218
|
</div>
|
|
@@ -223,38 +221,21 @@ export function FeatureCreateDrawer({
|
|
|
223
221
|
{/* Form body */}
|
|
224
222
|
<div className="overflow-y-auto p-4">
|
|
225
223
|
<form id="create-feature-form" onSubmit={handleSubmit} className="flex flex-col gap-4">
|
|
226
|
-
{/* Feature name */}
|
|
227
|
-
<div className="flex flex-col gap-1.5">
|
|
228
|
-
<Label
|
|
229
|
-
htmlFor="feature-name"
|
|
230
|
-
className="text-muted-foreground text-xs font-semibold tracking-wider"
|
|
231
|
-
>
|
|
232
|
-
FEATURE NAME
|
|
233
|
-
</Label>
|
|
234
|
-
<Input
|
|
235
|
-
id="feature-name"
|
|
236
|
-
placeholder="e.g. GitHub OAuth Login"
|
|
237
|
-
value={name}
|
|
238
|
-
onChange={(e) => setName(e.target.value)}
|
|
239
|
-
required
|
|
240
|
-
disabled={isSubmitting}
|
|
241
|
-
/>
|
|
242
|
-
</div>
|
|
243
|
-
|
|
244
224
|
{/* Description */}
|
|
245
225
|
<div className="flex flex-col gap-1.5">
|
|
246
226
|
<Label
|
|
247
227
|
htmlFor="feature-description"
|
|
248
228
|
className="text-muted-foreground text-xs font-semibold tracking-wider"
|
|
249
229
|
>
|
|
250
|
-
|
|
230
|
+
DESCRIBE YOUR FEATURE
|
|
251
231
|
</Label>
|
|
252
232
|
<Textarea
|
|
253
233
|
id="feature-description"
|
|
254
|
-
placeholder="
|
|
234
|
+
placeholder="e.g. Add GitHub OAuth login with callback handling and token refresh..."
|
|
255
235
|
value={description}
|
|
256
236
|
onChange={(e) => setDescription(e.target.value)}
|
|
257
237
|
rows={4}
|
|
238
|
+
required
|
|
258
239
|
disabled={isSubmitting}
|
|
259
240
|
/>
|
|
260
241
|
</div>
|
|
@@ -16,8 +16,11 @@ import { deleteFeature } from '@/app/actions/delete-feature';
|
|
|
16
16
|
import { addRepository } from '@/app/actions/add-repository';
|
|
17
17
|
import { deleteRepository } from '@/app/actions/delete-repository';
|
|
18
18
|
import { getFeatureMetadata } from '@/app/actions/get-feature-metadata';
|
|
19
|
+
import { fetchGraphData } from '@/app/actions/get-graph-data';
|
|
19
20
|
import { useAgentEventsContext } from '@/hooks/agent-events-provider';
|
|
20
21
|
import { useSoundAction } from '@/hooks/use-sound-action';
|
|
22
|
+
import { createLogger } from '@/lib/logger';
|
|
23
|
+
|
|
21
24
|
import {
|
|
22
25
|
mapEventTypeToState,
|
|
23
26
|
resolveSseEventUpdates,
|
|
@@ -25,6 +28,9 @@ import {
|
|
|
25
28
|
import { useGraphState, type GraphCallbacks } from '@/hooks/use-graph-state';
|
|
26
29
|
import type { FeatureEntry } from '@/lib/derive-graph';
|
|
27
30
|
|
|
31
|
+
const log = createLogger('[Polling]');
|
|
32
|
+
const POLL_INTERVAL_MS = 3_000;
|
|
33
|
+
|
|
28
34
|
export interface ControlCenterState {
|
|
29
35
|
nodes: CanvasNodeType[];
|
|
30
36
|
edges: Edge[];
|
|
@@ -215,6 +221,25 @@ export function useControlCenterState(
|
|
|
215
221
|
}
|
|
216
222
|
}, [events, updateFeature]);
|
|
217
223
|
|
|
224
|
+
// --- Polling fallback: catch any SSE events that were missed ---
|
|
225
|
+
useEffect(() => {
|
|
226
|
+
log.debug(`polling enabled (${POLL_INTERVAL_MS}ms interval)`);
|
|
227
|
+
|
|
228
|
+
const timer = setInterval(async () => {
|
|
229
|
+
try {
|
|
230
|
+
const { nodes: freshNodes, edges: freshEdges } = await fetchGraphData();
|
|
231
|
+
reconcile(freshNodes, freshEdges);
|
|
232
|
+
} catch {
|
|
233
|
+
log.warn('poll fetch failed — will retry next interval');
|
|
234
|
+
}
|
|
235
|
+
}, POLL_INTERVAL_MS);
|
|
236
|
+
|
|
237
|
+
return () => {
|
|
238
|
+
log.debug('polling disabled');
|
|
239
|
+
clearInterval(timer);
|
|
240
|
+
};
|
|
241
|
+
}, [reconcile]);
|
|
242
|
+
|
|
218
243
|
// onNodesChange is a no-op: nodes are derived from domain Maps.
|
|
219
244
|
// Since nodesDraggable=false and elementsSelectable=false, only React Flow's
|
|
220
245
|
// internal replace/dimensions changes come through — we ignore them all.
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
4
|
import type { NotificationEvent } from '@shepai/core/domain/generated/output';
|
|
5
|
+
import { createLogger } from '@/lib/logger';
|
|
5
6
|
|
|
6
7
|
export type ConnectionStatus = 'connected' | 'connecting' | 'disconnected';
|
|
7
8
|
|
|
@@ -15,6 +16,7 @@ export interface UseAgentEventsResult {
|
|
|
15
16
|
connectionStatus: ConnectionStatus;
|
|
16
17
|
}
|
|
17
18
|
|
|
19
|
+
const log = createLogger('[SSE]');
|
|
18
20
|
const SW_PATH = '/agent-events-sw.js';
|
|
19
21
|
const MAX_EVENTS = 500;
|
|
20
22
|
const PRUNE_KEEP = 250;
|
|
@@ -40,8 +42,7 @@ export function useAgentEvents(options?: UseAgentEventsOptions): UseAgentEventsR
|
|
|
40
42
|
|
|
41
43
|
if (msg.type === 'notification') {
|
|
42
44
|
const parsed = msg.data as NotificationEvent;
|
|
43
|
-
|
|
44
|
-
console.log('[SSE] event received:', parsed.eventType, parsed);
|
|
45
|
+
log.debug('event received:', parsed.eventType, parsed);
|
|
45
46
|
setEvents((prev) => {
|
|
46
47
|
const next = [...prev, parsed];
|
|
47
48
|
return next.length > MAX_EVENTS ? next.slice(-PRUNE_KEEP) : next;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
/* eslint-disable no-console */
|
|
3
2
|
|
|
4
3
|
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
4
|
+
import { createLogger } from '@/lib/logger';
|
|
5
5
|
import type { DeploymentState } from '@shepai/core/domain/generated/output';
|
|
6
6
|
import { deployFeature } from '@/app/actions/deploy-feature';
|
|
7
7
|
import { deployRepository } from '@/app/actions/deploy-repository';
|
|
@@ -25,15 +25,7 @@ export interface DeployActionState {
|
|
|
25
25
|
url: string | null;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
const
|
|
29
|
-
const isDebug = !!process.env.NEXT_PUBLIC_DEBUG;
|
|
30
|
-
const noop = () => undefined;
|
|
31
|
-
const log = {
|
|
32
|
-
info: isDebug ? (...args: unknown[]) => console.info(PREFIX, ...args) : noop,
|
|
33
|
-
debug: isDebug ? (...args: unknown[]) => console.debug(PREFIX, ...args) : noop,
|
|
34
|
-
warn: (...args: unknown[]) => console.warn(PREFIX, ...args),
|
|
35
|
-
error: (...args: unknown[]) => console.error(PREFIX, ...args),
|
|
36
|
-
};
|
|
28
|
+
const log = createLogger('[useDeployAction]');
|
|
37
29
|
|
|
38
30
|
const ERROR_CLEAR_DELAY = 5000;
|
|
39
31
|
const POLL_INTERVAL = 3000;
|
|
@@ -15,7 +15,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
15
15
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
16
16
|
|
|
17
17
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
18
|
-
const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.
|
|
18
|
+
const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.73.1","NEXT_PUBLIC_SHEP_PACKAGE_NAME":"@shepai/cli","NEXT_PUBLIC_SHEP_DESCRIPTION":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":true,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/cli/cli","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/runner/work/cli/cli"},"serverExternalPackages":["tsyringe","reflect-metadata","better-sqlite3","node:os","node:child_process","node:fs"],"distDirRoot":".next"}
|
|
19
19
|
|
|
20
20
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
21
21
|
|