@shepai/cli 1.74.0 → 1.75.0-pr237.5e7fa4f
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 +1 -0
- 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 +4 -1
- 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 +5 -2
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
- 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/fast-feature-agent-graph.d.ts +220 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.js +66 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
- 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 +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
- 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 +10 -1
- 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 +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +60 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts +25 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +176 -0
- 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 +8 -3
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +2 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
- 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 +5 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +18 -0
- 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 +49 -0
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/theme-toggle/theme-toggle.js +21 -10
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +31 -5
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -1
- 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 +4 -2
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +4 -1
- 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 +3 -2
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +3 -0
- 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 +89 -0
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts +2 -0
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-graph-state.js +4 -0
- package/dist/src/presentation/web/hooks/use-viewport-persistence.d.ts +15 -0
- package/dist/src/presentation/web/hooks/use-viewport-persistence.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-viewport-persistence.js +17 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +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.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_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/{_4472b56f._.js → _70427cc3._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_4472b56f._.js.map → _70427cc3._.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/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_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/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.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_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/{_4472b56f._.js → _70427cc3._.js} +3 -3
- 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 +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_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/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 +6 -1
- package/web/.next/standalone/src/presentation/web/app/globals.css +25 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +57 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +21 -0
- package/web/.next/standalone/src/presentation/web/components/common/theme-toggle/theme-toggle.tsx +26 -9
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +36 -4
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +7 -3
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +103 -0
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +7 -1
- package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +7 -0
- package/web/.next/standalone/src/presentation/web/hooks/use-viewport-persistence.ts +28 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{87627605cd90f5ec.js → 224919f6f72a4a90.js} +1 -1
- package/web/.next/static/chunks/{7b5870c586e31a48.js → 31a91284309556ca.js} +1 -1
- package/web/.next/static/chunks/9b07281f9fa372ca.js +1 -0
- package/web/.next/static/chunks/{62567dd4e1da2f42.js → 9de39ba6f1d109ce.js} +1 -1
- package/web/.next/static/chunks/{33160c6e15691803.js → 9fd70802deb2e4b6.js} +1 -1
- package/web/.next/static/chunks/{d33995d7d4f9204b.js → a88681644bdb457b.js} +1 -1
- package/web/.next/static/chunks/{51b4b51b814928dd.js → ab7bce7118a0f933.js} +1 -1
- package/web/.next/static/chunks/{cb41849bcfaa304e.js → b6c507fc42d9a277.js} +1 -1
- package/web/.next/static/chunks/{74dceed1c60e3023.js → bafdd9797848cd20.js} +3 -3
- package/web/.next/static/chunks/{0ffccd7be73305c8.css → e12fff3b57456bc2.css} +1 -1
- package/web/.next/static/chunks/{c2ca3105ade4be4d.js → ed9bf11850c038ad.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/static/chunks/9b8efd65a9b1b869.js +0 -1
- /package/web/.next/static/{TCaMrDQjQWi1IHri-0r-R → Z3nGW8HgUl_Ajpr-2arJQ}/_buildManifest.js +0 -0
- /package/web/.next/static/{TCaMrDQjQWi1IHri-0r-R → Z3nGW8HgUl_Ajpr-2arJQ}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{TCaMrDQjQWi1IHri-0r-R → Z3nGW8HgUl_Ajpr-2arJQ}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-agent-process.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/feature-agent-process.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;OAQG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-agent-process.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/agents/feature-agent-process.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;OAQG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GACA,MAAM,CAAC;IAEV;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
|
package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts
CHANGED
|
@@ -22,12 +22,15 @@ export interface ISpecInitializerService {
|
|
|
22
22
|
* - tasks.yaml
|
|
23
23
|
* - feature.yaml
|
|
24
24
|
*
|
|
25
|
+
* When mode is 'fast', only feature.yaml is created (no spec/research/plan/tasks).
|
|
26
|
+
*
|
|
25
27
|
* @param basePath - Directory to create specs/ in (typically the worktree path)
|
|
26
28
|
* @param slug - Feature slug (kebab-case, e.g., "user-authentication")
|
|
27
29
|
* @param featureNumber - Sequential feature number (will be zero-padded to 3 digits)
|
|
28
30
|
* @param description - Feature description for template substitution
|
|
31
|
+
* @param mode - Optional mode; when 'fast', only feature.yaml is created
|
|
29
32
|
* @returns The spec directory path and feature number used
|
|
30
33
|
*/
|
|
31
|
-
initialize(basePath: string, slug: string, featureNumber: number, description: string): Promise<SpecInitializerResult>;
|
|
34
|
+
initialize(basePath: string, slug: string, featureNumber: number, description: string, mode?: 'fast'): Promise<SpecInitializerResult>;
|
|
32
35
|
}
|
|
33
36
|
//# sourceMappingURL=spec-initializer.interface.d.ts.map
|
package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-initializer.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/spec-initializer.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC
|
|
1
|
+
{"version":3,"file":"spec-initializer.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/spec-initializer.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAGhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAhBZ,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa;IAG9C;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AACnH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAGhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9F,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAhBZ,WAAW,EAAE,kBAAkB,EAE/B,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,2BAA2B,EAEzC,aAAa,EAAE,mBAAmB,EAElC,eAAe,EAAE,uBAAuB,EAExC,iBAAiB,EAAE,iBAAiB,EAEpC,YAAY,EAAE,YAAY,EAE1B,cAAc,EAAE,qBAAqB,EAErC,YAAY,EAAE,aAAa;IAG9C;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMtE;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkH1E;;;OAGG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC;CAmE1D"}
|
package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js
CHANGED
|
@@ -70,7 +70,9 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
|
|
|
70
70
|
* No AI calls, no git operations — just DB writes.
|
|
71
71
|
*/
|
|
72
72
|
async createRecord(input) {
|
|
73
|
-
let initialLifecycle =
|
|
73
|
+
let initialLifecycle = input.fast
|
|
74
|
+
? SdlcLifecycle.Implementation
|
|
75
|
+
: SdlcLifecycle.Requirements;
|
|
74
76
|
let shouldSpawn = true;
|
|
75
77
|
let effectiveRepoPath = input.repositoryPath;
|
|
76
78
|
if (input.parentId) {
|
|
@@ -188,7 +190,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
|
|
|
188
190
|
const worktreePath = this.worktreeService.getWorktreePath(effectiveRepoPath, branch);
|
|
189
191
|
await this.worktreeService.create(effectiveRepoPath, branch, worktreePath, defaultBranch);
|
|
190
192
|
// Initialize spec directory — full user input goes into spec.yaml as-is
|
|
191
|
-
const { specDir } = await this.specInitializer.initialize(worktreePath, slug, featureNumber, input.userInput);
|
|
193
|
+
const { specDir } = await this.specInitializer.initialize(worktreePath, slug, featureNumber, input.userInput, input.fast ? 'fast' : undefined);
|
|
192
194
|
// Update feature record with refined metadata, branch, and specPath
|
|
193
195
|
const updatedFeature = {
|
|
194
196
|
...feature,
|
|
@@ -208,6 +210,7 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
|
|
|
208
210
|
threadId: agentRun?.threadId ?? randomUUID(),
|
|
209
211
|
push: input.push ?? false,
|
|
210
212
|
openPr: input.openPr ?? false,
|
|
213
|
+
...(input.fast ? { fast: true } : {}),
|
|
211
214
|
});
|
|
212
215
|
}
|
|
213
216
|
return { warning, updatedFeature };
|
|
@@ -11,6 +11,8 @@ export interface CreateFeatureInput {
|
|
|
11
11
|
name?: string;
|
|
12
12
|
/** Pre-supplied description (skips AI metadata extraction for description). */
|
|
13
13
|
description?: string;
|
|
14
|
+
/** When true, skip SDLC phases and implement directly from the user prompt. */
|
|
15
|
+
fast?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export interface CreateFeatureResult {
|
|
16
18
|
feature: Feature;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/use-cases/features/create/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;CACtB"}
|
|
@@ -0,0 +1,220 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
}
|
|
@@ -20,6 +20,7 @@ export declare class FeatureAgentProcessService implements IFeatureAgentProcessS
|
|
|
20
20
|
openPr?: boolean;
|
|
21
21
|
resumePayload?: string;
|
|
22
22
|
agentType?: AgentType;
|
|
23
|
+
fast?: boolean;
|
|
23
24
|
}): number;
|
|
24
25
|
isAlive(pid: number): boolean;
|
|
25
26
|
checkAndMarkCrashed(runId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAYlG,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-agent-process.service.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qEAAqE,CAAC;AAC/G,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAYlG,qBAAa,0BAA2B,YAAW,2BAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,mBAAmB;IAE/D,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GACA,MAAM;IAgET,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD"}
|
|
@@ -65,6 +65,9 @@ export class FeatureAgentProcessService {
|
|
|
65
65
|
if (options?.agentType) {
|
|
66
66
|
args.push('--agent-type', options.agentType);
|
|
67
67
|
}
|
|
68
|
+
if (options?.fast) {
|
|
69
|
+
args.push('--fast');
|
|
70
|
+
}
|
|
68
71
|
// Create log file for worker output (for debugging)
|
|
69
72
|
const logsDir = join(homedir(), '.shep', 'logs');
|
|
70
73
|
mkdirSync(logsDir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAe1B,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAS9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6D1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0N/D"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js
CHANGED
|
@@ -14,6 +14,7 @@ import { homedir } from 'node:os';
|
|
|
14
14
|
import { Command } from '@langchain/langgraph';
|
|
15
15
|
import { initializeContainer, container } from '../../../di/container.js';
|
|
16
16
|
import { createFeatureAgentGraph } from './feature-agent-graph.js';
|
|
17
|
+
import { createFastFeatureAgentGraph } from './fast-feature-agent-graph.js';
|
|
17
18
|
import { createCheckpointer } from '../common/checkpointer.js';
|
|
18
19
|
import { AgentRunStatus } from '../../../../domain/generated/output.js';
|
|
19
20
|
import { initializeSettings } from '../../../services/settings.service.js';
|
|
@@ -51,6 +52,7 @@ export function parseWorkerArgs(args) {
|
|
|
51
52
|
const resumeFromInterrupt = args.includes('--resume-from-interrupt');
|
|
52
53
|
const push = args.includes('--push');
|
|
53
54
|
const openPr = args.includes('--open-pr');
|
|
55
|
+
const fast = args.includes('--fast');
|
|
54
56
|
const threadIdx = args.indexOf('--thread-id');
|
|
55
57
|
const threadId = threadIdx !== -1 && threadIdx + 1 < args.length ? args[threadIdx + 1] : undefined;
|
|
56
58
|
const agentTypeIdx = args.indexOf('--agent-type');
|
|
@@ -75,6 +77,7 @@ export function parseWorkerArgs(args) {
|
|
|
75
77
|
openPr,
|
|
76
78
|
resumePayload,
|
|
77
79
|
agentType,
|
|
80
|
+
fast,
|
|
78
81
|
};
|
|
79
82
|
}
|
|
80
83
|
/** Simple worker logger — writes to stdout which is redirected to log file by the parent. */
|
|
@@ -115,6 +118,7 @@ export async function runWorker(args) {
|
|
|
115
118
|
log(` worktreePath=${args.worktreePath ?? '(none)'}`);
|
|
116
119
|
log(` approvalGates=${args.approvalGates ? JSON.stringify(args.approvalGates) : '(none)'}`);
|
|
117
120
|
log(` resume=${args.resume}`);
|
|
121
|
+
log(` fast=${args.fast ?? false}`);
|
|
118
122
|
log('Initializing container...');
|
|
119
123
|
await initializeContainer();
|
|
120
124
|
// Initialize settings in the worker process
|
|
@@ -155,7 +159,12 @@ export async function runWorker(args) {
|
|
|
155
159
|
const checkpointPath = join(homedir(), '.shep', 'checkpoints', `${checkpointId}.db`);
|
|
156
160
|
log(`Creating checkpointer at ${checkpointPath} (thread: ${checkpointId})`);
|
|
157
161
|
const checkpointer = createCheckpointer(checkpointPath);
|
|
158
|
-
|
|
162
|
+
// Both graph factories return compiled graphs with identical FeatureAgentAnnotation
|
|
163
|
+
// state shape and invoke() interface. Cast through unknown because the compiled
|
|
164
|
+
// graphs have different node name types but share the same runtime contract.
|
|
165
|
+
const graph = args.fast
|
|
166
|
+
? createFastFeatureAgentGraph(graphDeps, checkpointer)
|
|
167
|
+
: createFeatureAgentGraph(graphDeps, checkpointer);
|
|
159
168
|
// Mark the run as running with our PID
|
|
160
169
|
const now = new Date();
|
|
161
170
|
log(`Updating status to running (PID ${process.pid})...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-context.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,OAAO,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF;
|
|
1
|
+
{"version":3,"file":"lifecycle-context.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,OAAO,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF;AAgBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAGtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWzE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|