@shepai/cli 1.75.0-pr237.5e7fa4f → 1.76.0-pr238.49844a7
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/feature-agent-process.interface.d.ts +0 -1
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +1 -4
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -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 +2 -5
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +0 -2
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +0 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +1 -10
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +0 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +3 -8
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +0 -2
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +0 -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 +1 -3
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +0 -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 +1 -5
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +0 -18
- 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 +0 -49
- 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 +9 -30
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -4
- 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 +2 -4
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +4 -4
- 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 +14 -6
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +2 -3
- 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 +8 -81
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts +0 -2
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-graph-state.js +0 -4
- package/dist/src/presentation/web/hooks/use-viewport-persistence.d.ts +7 -11
- package/dist/src/presentation/web/hooks/use-viewport-persistence.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-viewport-persistence.js +59 -12
- 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 +16 -16
- 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 +19 -19
- 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 +14 -14
- 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 +16 -16
- 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 +19 -19
- 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 +14 -14
- 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 +14 -14
- 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_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_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_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_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 +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- 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]__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/_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/{_70427cc3._.js → _e091d951._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_70427cc3._.js.map → _e091d951._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
- package/web/.next/server/chunks/ssr/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 +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +22 -22
- 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 +16 -16
- 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 +19 -19
- 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 +14 -14
- 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 +16 -16
- 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 +19 -19
- 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 +14 -14
- 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 +14 -14
- 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_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_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_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_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 +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- 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/_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/{_70427cc3._.js → _e091d951._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.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/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 +22 -22
- package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +1 -6
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +0 -57
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +0 -21
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +20 -35
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +3 -7
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +8 -93
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +30 -10
- package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +0 -7
- package/web/.next/standalone/src/presentation/web/hooks/use-viewport-persistence.ts +68 -17
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{bafdd9797848cd20.js → 067dc08b689d8955.js} +3 -3
- package/web/.next/static/chunks/{a88681644bdb457b.js → 1e7380ea9e3c019e.js} +1 -1
- package/web/.next/static/chunks/{ed9bf11850c038ad.js → 3d88e23beec6608e.js} +1 -1
- package/web/.next/static/chunks/{9de39ba6f1d109ce.js → 5d28ad531ad6b65c.js} +1 -1
- package/web/.next/static/chunks/{9fd70802deb2e4b6.js → 65b5bd3861131047.js} +1 -1
- package/web/.next/static/chunks/{31a91284309556ca.js → 71d33d172eb1f602.js} +1 -1
- package/web/.next/static/chunks/8305a3f93197e23a.js +1 -0
- package/web/.next/static/chunks/{224919f6f72a4a90.js → 8fe874fd92309313.js} +1 -1
- package/web/.next/static/chunks/{ab7bce7118a0f933.js → eb2dc4b01d975cef.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +0 -220
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.js +0 -66
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts +0 -21
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +0 -60
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts +0 -25
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +0 -176
- package/web/.next/static/chunks/9b07281f9fa372ca.js +0 -1
- /package/web/.next/static/{Z3nGW8HgUl_Ajpr-2arJQ → IVTB-1bqXTCz0djYEeD2G}/_buildManifest.js +0 -0
- /package/web/.next/static/{Z3nGW8HgUl_Ajpr-2arJQ → IVTB-1bqXTCz0djYEeD2G}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{Z3nGW8HgUl_Ajpr-2arJQ → IVTB-1bqXTCz0djYEeD2G}/_ssgManifest.js +0 -0
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fast Feature Agent Graph Factory
|
|
3
|
-
*
|
|
4
|
-
* Creates a LangGraph StateGraph with only 2 nodes: fast-implement → merge.
|
|
5
|
-
* This is the fast-mode alternative to createFeatureAgentGraph() which has
|
|
6
|
-
* 15+ nodes. The merge node and its CI watch/fix loop are reused via
|
|
7
|
-
* composition from the full graph's createMergeNode().
|
|
8
|
-
*
|
|
9
|
-
* Uses the same FeatureAgentAnnotation state shape as the full graph,
|
|
10
|
-
* enabling checkpointing, resume, and identical worker lifecycle handling.
|
|
11
|
-
*/
|
|
12
|
-
import { type BaseCheckpointSaver } from '@langchain/langgraph';
|
|
13
|
-
import type { IAgentExecutor } from '../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
14
|
-
import { type MergeNodeDeps } from './nodes/merge/merge.node.js';
|
|
15
|
-
export { FeatureAgentAnnotation, type FeatureAgentState } from './state.js';
|
|
16
|
-
/**
|
|
17
|
-
* Dependencies needed to build the fast feature agent graph.
|
|
18
|
-
* Same shape as FeatureAgentGraphDeps for consistency.
|
|
19
|
-
*/
|
|
20
|
-
export interface FastFeatureAgentGraphDeps {
|
|
21
|
-
executor: IAgentExecutor;
|
|
22
|
-
mergeNodeDeps?: Omit<MergeNodeDeps, 'executor'>;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Factory function that creates and compiles the fast-mode feature agent graph.
|
|
26
|
-
*
|
|
27
|
-
* The graph defines a minimal workflow:
|
|
28
|
-
* START → fast-implement → merge → conditional(reexecute or END)
|
|
29
|
-
*
|
|
30
|
-
* When merge is rejected, routeReexecution routes back to fast-implement
|
|
31
|
-
* for a fresh implementation pass.
|
|
32
|
-
*
|
|
33
|
-
* @param depsOrExecutor - Graph dependencies or a legacy executor
|
|
34
|
-
* @param checkpointer - Optional checkpoint saver for state persistence
|
|
35
|
-
* @returns A compiled LangGraph ready to be invoked
|
|
36
|
-
*/
|
|
37
|
-
export declare function createFastFeatureAgentGraph(depsOrExecutor: FastFeatureAgentGraphDeps | IAgentExecutor, checkpointer?: BaseCheckpointSaver): import("@langchain/langgraph").CompiledStateGraph<{
|
|
38
|
-
featureId: string;
|
|
39
|
-
repositoryPath: string;
|
|
40
|
-
specDir: string;
|
|
41
|
-
worktreePath: string;
|
|
42
|
-
currentNode: string;
|
|
43
|
-
error: string | null;
|
|
44
|
-
approvalGates: import("../../../../domain/index.js").ApprovalGates | undefined;
|
|
45
|
-
messages: string[];
|
|
46
|
-
validationRetries: number;
|
|
47
|
-
lastValidationTarget: string;
|
|
48
|
-
lastValidationErrors: string[];
|
|
49
|
-
_approvalAction: string | null;
|
|
50
|
-
_rejectionFeedback: string | null;
|
|
51
|
-
_needsReexecution: boolean;
|
|
52
|
-
prUrl: string | null;
|
|
53
|
-
prNumber: number | null;
|
|
54
|
-
commitHash: string | null;
|
|
55
|
-
ciStatus: string | null;
|
|
56
|
-
push: boolean;
|
|
57
|
-
openPr: boolean;
|
|
58
|
-
ciFixAttempts: number;
|
|
59
|
-
ciFixHistory: import("../../../../domain/index.js").CiFixRecord[];
|
|
60
|
-
ciFixStatus: "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted";
|
|
61
|
-
}, {
|
|
62
|
-
featureId?: string | undefined;
|
|
63
|
-
repositoryPath?: string | undefined;
|
|
64
|
-
specDir?: string | undefined;
|
|
65
|
-
worktreePath?: string | undefined;
|
|
66
|
-
currentNode?: string | undefined;
|
|
67
|
-
error?: string | null | undefined;
|
|
68
|
-
approvalGates?: import("../../../../domain/index.js").ApprovalGates | undefined;
|
|
69
|
-
messages?: string[] | undefined;
|
|
70
|
-
validationRetries?: number | undefined;
|
|
71
|
-
lastValidationTarget?: string | undefined;
|
|
72
|
-
lastValidationErrors?: string[] | undefined;
|
|
73
|
-
_approvalAction?: string | null | undefined;
|
|
74
|
-
_rejectionFeedback?: string | null | undefined;
|
|
75
|
-
_needsReexecution?: boolean | undefined;
|
|
76
|
-
prUrl?: string | null | undefined;
|
|
77
|
-
prNumber?: number | null | undefined;
|
|
78
|
-
commitHash?: string | null | undefined;
|
|
79
|
-
ciStatus?: string | null | undefined;
|
|
80
|
-
push?: boolean | undefined;
|
|
81
|
-
openPr?: boolean | undefined;
|
|
82
|
-
ciFixAttempts?: number | undefined;
|
|
83
|
-
ciFixHistory?: import("../../../../domain/index.js").CiFixRecord[] | undefined;
|
|
84
|
-
ciFixStatus?: "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted" | undefined;
|
|
85
|
-
}, "__start__" | "fast-implement", {
|
|
86
|
-
featureId: {
|
|
87
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
88
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
89
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
90
|
-
};
|
|
91
|
-
repositoryPath: {
|
|
92
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
93
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
94
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
95
|
-
};
|
|
96
|
-
specDir: {
|
|
97
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
98
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
99
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
100
|
-
};
|
|
101
|
-
worktreePath: {
|
|
102
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
103
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
104
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
105
|
-
};
|
|
106
|
-
currentNode: {
|
|
107
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
108
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
109
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
110
|
-
};
|
|
111
|
-
error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
112
|
-
approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").ApprovalGates | undefined, import("../../../../domain/index.js").ApprovalGates | undefined>;
|
|
113
|
-
messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
114
|
-
validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
115
|
-
lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
116
|
-
lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
117
|
-
_approvalAction: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
118
|
-
_rejectionFeedback: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
119
|
-
_needsReexecution: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
120
|
-
prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
121
|
-
prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
|
|
122
|
-
commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
123
|
-
ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
124
|
-
push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
125
|
-
openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
126
|
-
ciFixAttempts: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
127
|
-
ciFixHistory: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").CiFixRecord[], import("../../../../domain/index.js").CiFixRecord[]>;
|
|
128
|
-
ciFixStatus: import("@langchain/langgraph").BinaryOperatorAggregate<"success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted", "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted">;
|
|
129
|
-
}, {
|
|
130
|
-
featureId: {
|
|
131
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
132
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
133
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
134
|
-
};
|
|
135
|
-
repositoryPath: {
|
|
136
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
137
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
138
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
139
|
-
};
|
|
140
|
-
specDir: {
|
|
141
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
142
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
143
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
144
|
-
};
|
|
145
|
-
worktreePath: {
|
|
146
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
147
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
148
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
149
|
-
};
|
|
150
|
-
currentNode: {
|
|
151
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
152
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
153
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
154
|
-
};
|
|
155
|
-
error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
156
|
-
approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").ApprovalGates | undefined, import("../../../../domain/index.js").ApprovalGates | undefined>;
|
|
157
|
-
messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
158
|
-
validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
159
|
-
lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
160
|
-
lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
161
|
-
_approvalAction: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
162
|
-
_rejectionFeedback: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
163
|
-
_needsReexecution: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
164
|
-
prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
165
|
-
prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
|
|
166
|
-
commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
167
|
-
ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
168
|
-
push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
169
|
-
openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
170
|
-
ciFixAttempts: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
171
|
-
ciFixHistory: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").CiFixRecord[], import("../../../../domain/index.js").CiFixRecord[]>;
|
|
172
|
-
ciFixStatus: import("@langchain/langgraph").BinaryOperatorAggregate<"success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted", "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted">;
|
|
173
|
-
}, import("@langchain/langgraph").StateDefinition, {
|
|
174
|
-
"fast-implement": Partial<import("@langchain/langgraph").StateType<{
|
|
175
|
-
featureId: {
|
|
176
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
177
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
178
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
179
|
-
};
|
|
180
|
-
repositoryPath: {
|
|
181
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
182
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
183
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
184
|
-
};
|
|
185
|
-
specDir: {
|
|
186
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
187
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
188
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
189
|
-
};
|
|
190
|
-
worktreePath: {
|
|
191
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
192
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
193
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
194
|
-
};
|
|
195
|
-
currentNode: {
|
|
196
|
-
(): import("@langchain/langgraph").LastValue<string>;
|
|
197
|
-
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
198
|
-
Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
|
|
199
|
-
};
|
|
200
|
-
error: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
201
|
-
approvalGates: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").ApprovalGates | undefined, import("../../../../domain/index.js").ApprovalGates | undefined>;
|
|
202
|
-
messages: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
203
|
-
validationRetries: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
204
|
-
lastValidationTarget: import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
205
|
-
lastValidationErrors: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
|
|
206
|
-
_approvalAction: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
207
|
-
_rejectionFeedback: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
208
|
-
_needsReexecution: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
209
|
-
prUrl: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
210
|
-
prNumber: import("@langchain/langgraph").BinaryOperatorAggregate<number | null, number | null>;
|
|
211
|
-
commitHash: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
212
|
-
ciStatus: import("@langchain/langgraph").BinaryOperatorAggregate<string | null, string | null>;
|
|
213
|
-
push: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
214
|
-
openPr: import("@langchain/langgraph").BinaryOperatorAggregate<boolean, boolean>;
|
|
215
|
-
ciFixAttempts: import("@langchain/langgraph").BinaryOperatorAggregate<number, number>;
|
|
216
|
-
ciFixHistory: import("@langchain/langgraph").BinaryOperatorAggregate<import("../../../../domain/index.js").CiFixRecord[], import("../../../../domain/index.js").CiFixRecord[]>;
|
|
217
|
-
ciFixStatus: import("@langchain/langgraph").BinaryOperatorAggregate<"success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted", "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted">;
|
|
218
|
-
}>>;
|
|
219
|
-
}, unknown, unknown>;
|
|
220
|
-
//# sourceMappingURL=fast-feature-agent-graph.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fast-feature-agent-graph.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AAGpG,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGlF,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CACjD;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,yBAAyB,GAAG,cAAc,EAC1D,YAAY,CAAC,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6BnC"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fast Feature Agent Graph Factory
|
|
3
|
-
*
|
|
4
|
-
* Creates a LangGraph StateGraph with only 2 nodes: fast-implement → merge.
|
|
5
|
-
* This is the fast-mode alternative to createFeatureAgentGraph() which has
|
|
6
|
-
* 15+ nodes. The merge node and its CI watch/fix loop are reused via
|
|
7
|
-
* composition from the full graph's createMergeNode().
|
|
8
|
-
*
|
|
9
|
-
* Uses the same FeatureAgentAnnotation state shape as the full graph,
|
|
10
|
-
* enabling checkpointing, resume, and identical worker lifecycle handling.
|
|
11
|
-
*/
|
|
12
|
-
import { StateGraph, START, END } from '@langchain/langgraph';
|
|
13
|
-
import { FeatureAgentAnnotation } from './state.js';
|
|
14
|
-
import { createFastImplementNode } from './nodes/fast-implement.node.js';
|
|
15
|
-
import { createMergeNode } from './nodes/merge/merge.node.js';
|
|
16
|
-
// Re-export for consumers
|
|
17
|
-
export { FeatureAgentAnnotation } from './state.js';
|
|
18
|
-
/**
|
|
19
|
-
* Conditional edge: route back to fast-implement on merge rejection,
|
|
20
|
-
* otherwise proceed to END.
|
|
21
|
-
*
|
|
22
|
-
* Mirrors the routeReexecution() pattern from feature-agent-graph.ts.
|
|
23
|
-
*/
|
|
24
|
-
function routeReexecution(selfNode, nextNode) {
|
|
25
|
-
return (state) => {
|
|
26
|
-
if (state._needsReexecution)
|
|
27
|
-
return selfNode;
|
|
28
|
-
return nextNode;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Factory function that creates and compiles the fast-mode feature agent graph.
|
|
33
|
-
*
|
|
34
|
-
* The graph defines a minimal workflow:
|
|
35
|
-
* START → fast-implement → merge → conditional(reexecute or END)
|
|
36
|
-
*
|
|
37
|
-
* When merge is rejected, routeReexecution routes back to fast-implement
|
|
38
|
-
* for a fresh implementation pass.
|
|
39
|
-
*
|
|
40
|
-
* @param depsOrExecutor - Graph dependencies or a legacy executor
|
|
41
|
-
* @param checkpointer - Optional checkpoint saver for state persistence
|
|
42
|
-
* @returns A compiled LangGraph ready to be invoked
|
|
43
|
-
*/
|
|
44
|
-
export function createFastFeatureAgentGraph(depsOrExecutor, checkpointer) {
|
|
45
|
-
// Support legacy signature: createFastFeatureAgentGraph(executor, checkpointer)
|
|
46
|
-
const deps = 'execute' in depsOrExecutor ? { executor: depsOrExecutor } : depsOrExecutor;
|
|
47
|
-
const { executor } = deps;
|
|
48
|
-
const graph = new StateGraph(FeatureAgentAnnotation).addNode('fast-implement', createFastImplementNode(executor));
|
|
49
|
-
// Wire merge node when deps are provided
|
|
50
|
-
if (deps.mergeNodeDeps) {
|
|
51
|
-
const mergeNodeDeps = {
|
|
52
|
-
executor,
|
|
53
|
-
...deps.mergeNodeDeps,
|
|
54
|
-
};
|
|
55
|
-
graph
|
|
56
|
-
.addNode('merge', createMergeNode(mergeNodeDeps))
|
|
57
|
-
.addEdge(START, 'fast-implement')
|
|
58
|
-
.addEdge('fast-implement', 'merge')
|
|
59
|
-
.addConditionalEdges('merge', routeReexecution('fast-implement', END));
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
// Without merge deps, fast-implement goes directly to END
|
|
63
|
-
graph.addEdge(START, 'fast-implement').addEdge('fast-implement', END);
|
|
64
|
-
}
|
|
65
|
-
return graph.compile({ checkpointer });
|
|
66
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fast-Implement Node
|
|
3
|
-
*
|
|
4
|
-
* Single-pass implementation node for fast mode. Builds a prompt from
|
|
5
|
-
* the user's query plus lightweight codebase context, calls the executor
|
|
6
|
-
* once, and returns. Does NOT handle commit/push/PR — that's the merge
|
|
7
|
-
* node's job.
|
|
8
|
-
*
|
|
9
|
-
* Follows the same factory pattern as other nodes: takes executor
|
|
10
|
-
* dependency, returns async (state) => Partial<FeatureAgentState>.
|
|
11
|
-
*/
|
|
12
|
-
import type { IAgentExecutor } from '../../../../../application/ports/output/agents/agent-executor.interface.js';
|
|
13
|
-
import type { FeatureAgentState } from '../state.js';
|
|
14
|
-
/**
|
|
15
|
-
* Factory that creates the fast-implement node function.
|
|
16
|
-
*
|
|
17
|
-
* @param executor - The agent executor to use for implementation
|
|
18
|
-
* @returns A LangGraph node function
|
|
19
|
-
*/
|
|
20
|
-
export declare function createFastImplementNode(executor: IAgentExecutor): (state: FeatureAgentState) => Promise<Partial<FeatureAgentState>>;
|
|
21
|
-
//# sourceMappingURL=fast-implement.node.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fast-implement.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,IAGhD,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAwC7E"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fast-Implement Node
|
|
3
|
-
*
|
|
4
|
-
* Single-pass implementation node for fast mode. Builds a prompt from
|
|
5
|
-
* the user's query plus lightweight codebase context, calls the executor
|
|
6
|
-
* once, and returns. Does NOT handle commit/push/PR — that's the merge
|
|
7
|
-
* node's job.
|
|
8
|
-
*
|
|
9
|
-
* Follows the same factory pattern as other nodes: takes executor
|
|
10
|
-
* dependency, returns async (state) => Partial<FeatureAgentState>.
|
|
11
|
-
*/
|
|
12
|
-
import { isGraphBubbleUp } from '@langchain/langgraph';
|
|
13
|
-
import { createNodeLogger, buildExecutorOptions, retryExecute } from './node-helpers.js';
|
|
14
|
-
import { reportNodeStart } from '../heartbeat.js';
|
|
15
|
-
import { recordPhaseStart, recordPhaseEnd } from '../phase-timing-context.js';
|
|
16
|
-
import { updateNodeLifecycle } from '../lifecycle-context.js';
|
|
17
|
-
import { buildFastImplementPrompt } from './prompts/fast-implement.prompt.js';
|
|
18
|
-
/**
|
|
19
|
-
* Factory that creates the fast-implement node function.
|
|
20
|
-
*
|
|
21
|
-
* @param executor - The agent executor to use for implementation
|
|
22
|
-
* @returns A LangGraph node function
|
|
23
|
-
*/
|
|
24
|
-
export function createFastImplementNode(executor) {
|
|
25
|
-
const log = createNodeLogger('fast-implement');
|
|
26
|
-
return async (state) => {
|
|
27
|
-
log.info('Starting fast implementation');
|
|
28
|
-
reportNodeStart('fast-implement');
|
|
29
|
-
await updateNodeLifecycle('fast-implement');
|
|
30
|
-
const startTime = Date.now();
|
|
31
|
-
const timingId = await recordPhaseStart('fast-implement');
|
|
32
|
-
try {
|
|
33
|
-
const prompt = buildFastImplementPrompt(state);
|
|
34
|
-
const options = buildExecutorOptions(state);
|
|
35
|
-
log.info(`Executing agent at cwd=${options.cwd}`);
|
|
36
|
-
log.info(`Prompt length: ${prompt.length} chars`);
|
|
37
|
-
const result = await retryExecute(executor, prompt, options, { logger: log });
|
|
38
|
-
const durationMs = Date.now() - startTime;
|
|
39
|
-
const elapsed = (durationMs / 1000).toFixed(1);
|
|
40
|
-
log.info(`Complete (${result.result.length} chars, ${elapsed}s)`);
|
|
41
|
-
await recordPhaseEnd(timingId, durationMs);
|
|
42
|
-
return {
|
|
43
|
-
currentNode: 'fast-implement',
|
|
44
|
-
messages: [`[fast-implement] Complete (${result.result.length} chars, ${elapsed}s)`],
|
|
45
|
-
_needsReexecution: false,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
if (isGraphBubbleUp(err))
|
|
50
|
-
throw err;
|
|
51
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
52
|
-
const durationMs = Date.now() - startTime;
|
|
53
|
-
const elapsed = (durationMs / 1000).toFixed(1);
|
|
54
|
-
log.error(`${message} (after ${elapsed}s)`);
|
|
55
|
-
await recordPhaseEnd(timingId, durationMs);
|
|
56
|
-
// Throw so LangGraph does NOT checkpoint this node as "completed".
|
|
57
|
-
throw new Error(`[fast-implement] ${message}`);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fast-Implement Prompt Builder
|
|
3
|
-
*
|
|
4
|
-
* Builds a single-pass implementation prompt for fast mode.
|
|
5
|
-
* Combines the user's raw query with lightweight codebase context
|
|
6
|
-
* (CLAUDE.md, package.json, shallow directory listing).
|
|
7
|
-
*
|
|
8
|
-
* The prompt instructs the executor to implement changes and run tests,
|
|
9
|
-
* but NOT to commit, push, or create PRs (that's the merge node's job).
|
|
10
|
-
*/
|
|
11
|
-
import type { FeatureAgentState } from '../../state.js';
|
|
12
|
-
/**
|
|
13
|
-
* Build the fast-implement prompt from user query + codebase context.
|
|
14
|
-
*
|
|
15
|
-
* The prompt includes:
|
|
16
|
-
* 1. User's raw query (from spec.yaml userQuery field)
|
|
17
|
-
* 2. CLAUDE.md content (if exists)
|
|
18
|
-
* 3. package.json (if exists)
|
|
19
|
-
* 4. Shallow directory listing (depth 1-2)
|
|
20
|
-
*
|
|
21
|
-
* Instructs the executor to implement, test, and validate — but NOT
|
|
22
|
-
* commit/push/PR (that's the merge node's job).
|
|
23
|
-
*/
|
|
24
|
-
export declare function buildFastImplementPrompt(state: FeatureAgentState): string;
|
|
25
|
-
//# sourceMappingURL=fast-implement.prompt.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fast-implement.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA+FxD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAiEzE"}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fast-Implement Prompt Builder
|
|
3
|
-
*
|
|
4
|
-
* Builds a single-pass implementation prompt for fast mode.
|
|
5
|
-
* Combines the user's raw query with lightweight codebase context
|
|
6
|
-
* (CLAUDE.md, package.json, shallow directory listing).
|
|
7
|
-
*
|
|
8
|
-
* The prompt instructs the executor to implement changes and run tests,
|
|
9
|
-
* but NOT to commit, push, or create PRs (that's the merge node's job).
|
|
10
|
-
*/
|
|
11
|
-
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
12
|
-
import { join } from 'node:path';
|
|
13
|
-
import yaml from 'js-yaml';
|
|
14
|
-
import { readSpecFile } from '../node-helpers.js';
|
|
15
|
-
/**
|
|
16
|
-
* Read a file from the worktree, returning empty string if not found.
|
|
17
|
-
*/
|
|
18
|
-
function readWorktreeFile(worktreePath, filename) {
|
|
19
|
-
try {
|
|
20
|
-
return readFileSync(join(worktreePath, filename), 'utf-8');
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return '';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Build a shallow directory listing (depth 1-2) of the worktree.
|
|
28
|
-
* Returns a tree-style string. Skips common noise directories.
|
|
29
|
-
*/
|
|
30
|
-
function buildDirectoryListing(worktreePath) {
|
|
31
|
-
const SKIP_DIRS = new Set([
|
|
32
|
-
'node_modules',
|
|
33
|
-
'.git',
|
|
34
|
-
'.next',
|
|
35
|
-
'dist',
|
|
36
|
-
'build',
|
|
37
|
-
'coverage',
|
|
38
|
-
'.turbo',
|
|
39
|
-
'.cache',
|
|
40
|
-
'.shep',
|
|
41
|
-
]);
|
|
42
|
-
const lines = [];
|
|
43
|
-
try {
|
|
44
|
-
const topLevel = readdirSync(worktreePath);
|
|
45
|
-
for (const entry of topLevel) {
|
|
46
|
-
if (SKIP_DIRS.has(entry))
|
|
47
|
-
continue;
|
|
48
|
-
const fullPath = join(worktreePath, entry);
|
|
49
|
-
let isDir = false;
|
|
50
|
-
try {
|
|
51
|
-
isDir = statSync(fullPath).isDirectory();
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
if (isDir) {
|
|
57
|
-
lines.push(`${entry}/`);
|
|
58
|
-
try {
|
|
59
|
-
const children = readdirSync(fullPath);
|
|
60
|
-
for (const child of children) {
|
|
61
|
-
if (SKIP_DIRS.has(child))
|
|
62
|
-
continue;
|
|
63
|
-
const childPath = join(fullPath, child);
|
|
64
|
-
let childIsDir = false;
|
|
65
|
-
try {
|
|
66
|
-
childIsDir = statSync(childPath).isDirectory();
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
lines.push(` ${child}${childIsDir ? '/' : ''}`);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
// Cannot read subdirectory — skip
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
lines.push(entry);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
return '(unable to list directory)';
|
|
85
|
-
}
|
|
86
|
-
return lines.join('\n');
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Extract the user query from spec.yaml's userQuery field.
|
|
90
|
-
* Falls back to the raw YAML content if parsing fails.
|
|
91
|
-
*/
|
|
92
|
-
function extractUserQuery(specDir) {
|
|
93
|
-
const specContent = readSpecFile(specDir, 'spec.yaml');
|
|
94
|
-
if (!specContent)
|
|
95
|
-
return '';
|
|
96
|
-
try {
|
|
97
|
-
const data = yaml.load(specContent);
|
|
98
|
-
const userQuery = data?.userQuery;
|
|
99
|
-
if (typeof userQuery === 'string' && userQuery.trim()) {
|
|
100
|
-
return userQuery.trim();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Fall through to raw content
|
|
105
|
-
}
|
|
106
|
-
return specContent;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Build the fast-implement prompt from user query + codebase context.
|
|
110
|
-
*
|
|
111
|
-
* The prompt includes:
|
|
112
|
-
* 1. User's raw query (from spec.yaml userQuery field)
|
|
113
|
-
* 2. CLAUDE.md content (if exists)
|
|
114
|
-
* 3. package.json (if exists)
|
|
115
|
-
* 4. Shallow directory listing (depth 1-2)
|
|
116
|
-
*
|
|
117
|
-
* Instructs the executor to implement, test, and validate — but NOT
|
|
118
|
-
* commit/push/PR (that's the merge node's job).
|
|
119
|
-
*/
|
|
120
|
-
export function buildFastImplementPrompt(state) {
|
|
121
|
-
const cwd = state.worktreePath || state.repositoryPath;
|
|
122
|
-
const userQuery = extractUserQuery(state.specDir);
|
|
123
|
-
// Read optional context files
|
|
124
|
-
const claudeMd = readWorktreeFile(cwd, 'CLAUDE.md');
|
|
125
|
-
const packageJson = readWorktreeFile(cwd, 'package.json');
|
|
126
|
-
const dirListing = buildDirectoryListing(cwd);
|
|
127
|
-
// Build sections conditionally
|
|
128
|
-
const sections = [];
|
|
129
|
-
sections.push(`You are a senior software engineer implementing a change directly from a user request.
|
|
130
|
-
|
|
131
|
-
## User Request
|
|
132
|
-
|
|
133
|
-
${userQuery}
|
|
134
|
-
|
|
135
|
-
## Implementation Instructions
|
|
136
|
-
|
|
137
|
-
1. Implement the requested changes in the codebase
|
|
138
|
-
2. Write tests for your changes where appropriate
|
|
139
|
-
3. Run the test suite and fix any failures
|
|
140
|
-
4. Run the linter and fix any issues
|
|
141
|
-
5. Ensure the project builds successfully
|
|
142
|
-
6. Do NOT commit, push, or create a PR — just make the code changes
|
|
143
|
-
|
|
144
|
-
## Working Directory
|
|
145
|
-
|
|
146
|
-
${cwd}`);
|
|
147
|
-
if (claudeMd) {
|
|
148
|
-
sections.push(`## Project Guidelines (CLAUDE.md)
|
|
149
|
-
|
|
150
|
-
${claudeMd}`);
|
|
151
|
-
}
|
|
152
|
-
if (packageJson) {
|
|
153
|
-
// Truncate large package.json to stay within prompt budget
|
|
154
|
-
const truncated = packageJson.length > 3000 ? `${packageJson.slice(0, 3000)}\n...(truncated)` : packageJson;
|
|
155
|
-
sections.push(`## Package Configuration (package.json)
|
|
156
|
-
|
|
157
|
-
\`\`\`json
|
|
158
|
-
${truncated}
|
|
159
|
-
\`\`\``);
|
|
160
|
-
}
|
|
161
|
-
if (dirListing && dirListing !== '(unable to list directory)') {
|
|
162
|
-
sections.push(`## Project Structure
|
|
163
|
-
|
|
164
|
-
\`\`\`
|
|
165
|
-
${dirListing}
|
|
166
|
-
\`\`\``);
|
|
167
|
-
}
|
|
168
|
-
sections.push(`## Constraints
|
|
169
|
-
|
|
170
|
-
- Implement ONLY what the user requested — nothing more
|
|
171
|
-
- Follow existing codebase conventions and patterns
|
|
172
|
-
- Do NOT commit, push, or create pull requests
|
|
173
|
-
- Do NOT modify any spec YAML files
|
|
174
|
-
- Keep changes focused and minimal`);
|
|
175
|
-
return sections.join('\n\n');
|
|
176
|
-
}
|