@shepai/cli 1.65.0 → 1.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts +62 -0
- package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.js +12 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/services/index.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 +4 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +5 -2
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +3 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +25 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +5 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +6 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +11 -7
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.js +11 -7
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +11 -7
- package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +57 -0
- package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +192 -0
- package/dist/packages/core/src/infrastructure/services/deployment/detect-dev-script.d.ts +26 -0
- package/dist/packages/core/src/infrastructure/services/deployment/detect-dev-script.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/deployment/detect-dev-script.js +59 -0
- package/dist/packages/core/src/infrastructure/services/deployment/parse-port.d.ts +15 -0
- package/dist/packages/core/src/infrastructure/services/deployment/parse-port.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/deployment/parse-port.js +52 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +13 -3
- package/dist/src/presentation/cli/commands/_serve.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/_serve.command.js +2 -0
- package/dist/src/presentation/web/app/actions/deploy-feature.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/deploy-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/deploy-feature.js +28 -0
- package/dist/src/presentation/web/app/actions/deploy-repository.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/deploy-repository.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/deploy-repository.js +21 -0
- package/dist/src/presentation/web/app/actions/get-deployment-status.d.ts +3 -0
- package/dist/src/presentation/web/app/actions/get-deployment-status.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-deployment-status.js +9 -0
- package/dist/src/presentation/web/app/actions/stop-deployment.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/stop-deployment.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/stop-deployment.js +16 -0
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts +20 -0
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -0
- package/dist/src/presentation/web/app/build-graph-nodes.js +142 -0
- package/dist/src/presentation/web/app/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/page.js +2 -112
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +3 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +13 -3
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +9 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.d.ts +7 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.js +14 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.js +27 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/index.d.ts +2 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/deployment-status-badge/index.js +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +8 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +7 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +13 -2
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +12 -2
- package/dist/src/presentation/web/hooks/use-deploy-action.d.ts +18 -0
- package/dist/src/presentation/web/hooks/use-deploy-action.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-deploy-action.js +130 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +1 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +1 -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 +7 -6
- 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/_global-error/page/build-manifest.json +5 -4
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/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/build-manifest.json +5 -4
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/server/app/page/build-manifest.json +5 -4
- package/web/.next/server/app/page/server-reference-manifest.json +88 -28
- package/web/.next/server/app/page.js +2 -2
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/build-manifest.json +5 -4
- package/web/.next/server/app/skills/page/server-reference-manifest.json +62 -2
- package/web/.next/server/app/skills/page.js +2 -2
- 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/build-manifest.json +5 -4
- package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- 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/build-manifest.json +5 -4
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__e926de65._.js → [root-of-the-server]__09413611._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__e926de65._.js.map → [root-of-the-server]__09413611._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +3 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js → [root-of-the-server]__248ee887._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js.map → [root-of-the-server]__248ee887._.js.map} +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js → server/chunks/ssr/[root-of-the-server]__249c74f6._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js.map +1 -0
- 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]__9add7c3a._.js +4 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__dd5b62cb._.js → server/chunks/ssr/[root-of-the-server]__f5830fa9._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f5830fa9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +9 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_28993370._.js +3 -0
- package/web/.next/server/chunks/ssr/_28993370._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_380c6567._.js +1 -1
- package/web/.next/server/chunks/ssr/_380c6567._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_45715073._.js +3 -0
- package/web/.next/server/chunks/ssr/{_d81184e2._.js.map → _45715073._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_6978d868._.js +3 -0
- package/web/.next/server/chunks/ssr/_6978d868._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_85965278._.js +6 -0
- package/web/.next/server/chunks/ssr/_85965278._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_c52cace8._.js +3 -0
- package/web/.next/server/chunks/ssr/_c52cace8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ed9132c9._.js +3 -0
- package/web/.next/server/chunks/ssr/_ed9132c9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{node_modules__pnpm_87f920e7._.js → node_modules__pnpm_febcbea6._.js} +2 -2
- package/web/.next/server/chunks/ssr/node_modules__pnpm_febcbea6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +5 -4
- 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 +118 -30
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +7 -6
- 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/_global-error/page/build-manifest.json +5 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/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/build-manifest.json +5 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +5 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +88 -28
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +5 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +62 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +2 -2
- 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/build-manifest.json +5 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- 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/build-manifest.json +5 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/{[root-of-the-server]__e926de65._.js → [root-of-the-server]__09413611._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__685eaa45._.js → [root-of-the-server]__248ee887._.js} +2 -2
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__fbc89707._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +4 -0
- 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]__6bb51fac._.js +3 -0
- 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]__9add7c3a._.js +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +3 -0
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__dd5b62cb._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f5830fa9._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +9 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_28993370._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_380c6567._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_45715073._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6978d868._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85965278._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_c52cace8._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ed9132c9._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{node_modules__pnpm_87f920e7._.js → node_modules__pnpm_febcbea6._.js} +2 -2
- 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_ed0934e5._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +5 -4
- 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 +118 -30
- package/web/.next/standalone/src/presentation/web/app/actions/deploy-feature.ts +39 -0
- package/web/.next/standalone/src/presentation/web/app/actions/deploy-repository.ts +28 -0
- package/web/.next/standalone/src/presentation/web/app/actions/get-deployment-status.ts +16 -0
- package/web/.next/standalone/src/presentation/web/app/actions/stop-deployment.ts +22 -0
- package/web/.next/standalone/src/presentation/web/app/build-graph-nodes.ts +180 -0
- package/web/.next/standalone/src/presentation/web/app/page.tsx +2 -129
- package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.stories.tsx +26 -0
- package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +45 -1
- package/web/.next/standalone/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.tsx +35 -0
- package/web/.next/standalone/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.tsx +42 -0
- package/web/.next/standalone/src/presentation/web/components/common/deployment-status-badge/index.ts +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +10 -0
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.tsx +9 -0
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +43 -2
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +79 -44
- package/web/.next/standalone/src/presentation/web/hooks/use-deploy-action.ts +161 -0
- package/web/.next/standalone/src/presentation/web/lib/feature-flags.ts +1 -0
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/0b99eb9664d47ca7.js +1 -0
- package/web/.next/static/chunks/177f1dcbe83c136a.js +1 -0
- package/web/.next/static/chunks/41a2adc09edfffaf.js +1 -0
- package/web/.next/static/chunks/5054c72b1c8f5912.js +1 -0
- package/web/.next/static/chunks/71d2618e41d7da6d.js +1 -0
- package/web/.next/static/chunks/7ad36bef63f15bc6.js +1 -0
- package/web/.next/static/chunks/{3b941e59ac013e12.js → 87421ab1062a39b7.js} +2 -2
- package/web/.next/static/chunks/{21541b346dd4dd28.js → 8c60d1bd87239066.js} +1 -1
- package/web/.next/static/chunks/96f49affaceab206.css +2 -0
- package/web/.next/static/chunks/a6d1d774260fc927.js +2 -0
- package/web/.next/static/chunks/c7e793951b20a67f.js +1 -0
- package/web/.next/static/chunks/f54ff9c15fb7b383.js +1 -0
- package/web/.next/static/chunks/f5fb2f182ae9b015.js +1 -0
- package/web/.next/static/chunks/{fa8058049a43c698.js → f6766e799a69fb5d.js} +7 -7
- package/web/.next/static/chunks/turbopack-b6b5b4f015327a9a.js +4 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5e0f14e9._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5e0f14e9._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae251147._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae251147._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b6839c3f._.js +0 -9
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b6839c3f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd5b62cb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_73d14b70._.js +0 -3
- package/web/.next/server/chunks/ssr/_73d14b70._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_7f386377._.js +0 -3
- package/web/.next/server/chunks/ssr/_7f386377._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d3711354._.js +0 -6
- package/web/.next/server/chunks/ssr/_d3711354._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d81184e2._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_87f920e7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_7a0b09da._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_7a0b09da._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__5e0f14e9._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__ae251147._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__b6839c3f._.js +0 -9
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__da0ade1f._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__edca9510._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_73d14b70._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_7f386377._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d3711354._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d81184e2._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_0ce0b44d._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_7a0b09da._.js +0 -3
- package/web/.next/static/chunks/0c6654ec27f11c7e.js +0 -1
- package/web/.next/static/chunks/12c70bfd5951cf9b.js +0 -1
- package/web/.next/static/chunks/1887af4ad3781531.js +0 -2
- package/web/.next/static/chunks/233fbb89beb137e8.js +0 -1
- package/web/.next/static/chunks/78919481e7c5ad4f.js +0 -1
- package/web/.next/static/chunks/a5b6a22de303e877.css +0 -2
- package/web/.next/static/chunks/acdb8af5a21f1ae9.js +0 -1
- package/web/.next/static/chunks/af7a5bcb7c49e46e.js +0 -1
- package/web/.next/static/chunks/be784143669bb992.js +0 -1
- package/web/.next/static/chunks/turbopack-eb24b869babb34b4.js +0 -4
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__fbc89707._.js.map → [root-of-the-server]__249c74f6._.js.map} +0 -0
- /package/web/.next/static/{zuqVLdEhCDdtLqCuWgUm5 → 5RMUwLfTnzL0pvJOwfuxg}/_buildManifest.js +0 -0
- /package/web/.next/static/{zuqVLdEhCDdtLqCuWgUm5 → 5RMUwLfTnzL0pvJOwfuxg}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{zuqVLdEhCDdtLqCuWgUm5 → 5RMUwLfTnzL0pvJOwfuxg}/_ssgManifest.js +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { Repository } from '../../../../domain/generated/output.js';
|
|
7
7
|
export interface IRepositoryRepository {
|
|
8
|
-
create(repository: Repository): Promise<
|
|
8
|
+
create(repository: Repository): Promise<Repository>;
|
|
9
9
|
findById(id: string): Promise<Repository | null>;
|
|
10
10
|
findByPath(path: string): Promise<Repository | null>;
|
|
11
11
|
/** Find by path including soft-deleted records (for re-activation). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/repositories/repository-repository.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"repository-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/repositories/repository-repository.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACrD,uEAAuE;IACvE,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACrE,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC"}
|
package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for managing local dev server deployments.
|
|
5
|
+
* Infrastructure layer provides the concrete DeploymentService implementation
|
|
6
|
+
* backed by an in-memory process registry.
|
|
7
|
+
*
|
|
8
|
+
* Following Clean Architecture:
|
|
9
|
+
* - Application layer depends on this interface
|
|
10
|
+
* - Infrastructure layer provides concrete implementations
|
|
11
|
+
*/
|
|
12
|
+
import type { DeploymentState } from '../../../../domain/generated/output.js';
|
|
13
|
+
/** Status snapshot returned by getStatus(). */
|
|
14
|
+
export interface DeploymentStatus {
|
|
15
|
+
/** Current lifecycle state of the deployment. */
|
|
16
|
+
state: DeploymentState;
|
|
17
|
+
/** Detected URL when the dev server is Ready, null while Booting. */
|
|
18
|
+
url: string | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Port interface for managing local dev server deployments.
|
|
22
|
+
*
|
|
23
|
+
* Implementations must:
|
|
24
|
+
* - Maintain an in-memory registry of active deployments keyed by targetId
|
|
25
|
+
* - Enforce one deployment per target (stop existing before starting new)
|
|
26
|
+
* - Detect the dev script from package.json and spawn via the correct package manager
|
|
27
|
+
* - Parse stdout/stderr for port/URL detection
|
|
28
|
+
* - Support graceful shutdown (SIGTERM → SIGKILL) for individual and bulk stops
|
|
29
|
+
*/
|
|
30
|
+
export interface IDeploymentService {
|
|
31
|
+
/**
|
|
32
|
+
* Start a dev server deployment for the given target.
|
|
33
|
+
* If a deployment already exists for this targetId, it is stopped first.
|
|
34
|
+
*
|
|
35
|
+
* @param targetId - Unique identifier for the deployment target (featureId or repositoryId)
|
|
36
|
+
* @param targetPath - Absolute filesystem path to the directory to run the dev server in
|
|
37
|
+
* @returns The initial deployment state (always Booting on success)
|
|
38
|
+
* @throws Error if no dev script is found in package.json or the process fails to spawn
|
|
39
|
+
*/
|
|
40
|
+
start(targetId: string, targetPath: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Stop a running deployment gracefully.
|
|
43
|
+
* Sends SIGTERM to the process group, then SIGKILL after a timeout.
|
|
44
|
+
* No-op if no deployment exists for this targetId.
|
|
45
|
+
*
|
|
46
|
+
* @param targetId - Unique identifier for the deployment target
|
|
47
|
+
*/
|
|
48
|
+
stop(targetId: string): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Get the current deployment status for a target.
|
|
51
|
+
*
|
|
52
|
+
* @param targetId - Unique identifier for the deployment target
|
|
53
|
+
* @returns Status snapshot with state and url, or null if no deployment exists
|
|
54
|
+
*/
|
|
55
|
+
getStatus(targetId: string): DeploymentStatus | null;
|
|
56
|
+
/**
|
|
57
|
+
* Force-stop all tracked deployments immediately.
|
|
58
|
+
* Called during daemon shutdown to prevent orphaned dev server processes.
|
|
59
|
+
*/
|
|
60
|
+
stopAll(): void;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=deployment-service.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/deployment-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,KAAK,EAAE,eAAe,CAAC;IACvB,qEAAqE;IACrE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAElD;;;;;;OAMG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment Service Interface
|
|
3
|
+
*
|
|
4
|
+
* Output port for managing local dev server deployments.
|
|
5
|
+
* Infrastructure layer provides the concrete DeploymentService implementation
|
|
6
|
+
* backed by an in-memory process registry.
|
|
7
|
+
*
|
|
8
|
+
* Following Clean Architecture:
|
|
9
|
+
* - Application layer depends on this interface
|
|
10
|
+
* - Infrastructure layer provides concrete implementations
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
@@ -16,4 +16,5 @@ export type { IGitPrService, CiStatus, CiStatusResult, DiffSummary, MergeStrateg
|
|
|
16
16
|
export { GitPrError, GitPrErrorCode } from './git-pr-service.interface.js';
|
|
17
17
|
export type { IIdeLauncherService, LaunchIdeInput, LaunchIdeResult, LaunchIdeSuccess, LaunchIdeFailed, } from './ide-launcher-service.interface.js';
|
|
18
18
|
export type { IDaemonService, DaemonState } from './daemon-service.interface.js';
|
|
19
|
+
export type { IDeploymentService, DeploymentStatus } from './deployment-service.interface.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EACV,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,YAAY,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -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;AAMH,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,MAAM,YAAY,CAAC;AAE1E,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;IAGxC,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,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;AAMH,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,MAAM,YAAY,CAAC;AAE1E,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;IAGxC,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA8JvE"}
|
package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js
CHANGED
|
@@ -127,7 +127,10 @@ let CreateFeatureUseCase = class CreateFeatureUseCase {
|
|
|
127
127
|
createdAt: now,
|
|
128
128
|
updatedAt: now,
|
|
129
129
|
};
|
|
130
|
-
await this.repositoryRepo.create(repository);
|
|
130
|
+
repository = await this.repositoryRepo.create(repository);
|
|
131
|
+
if (!repository) {
|
|
132
|
+
throw new Error(`Failed to create or retrieve repository record for path: ${normalizedPath}`);
|
|
133
|
+
}
|
|
131
134
|
}
|
|
132
135
|
const feature = {
|
|
133
136
|
id: randomUUID(),
|
package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/resume-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"resume-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/resume-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAQlG,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,qBACa,oBAAoB;IAG7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBANf,WAAW,EAAE,kBAAkB,EAE/B,OAAO,EAAE,mBAAmB,EAE5B,cAAc,EAAE,2BAA2B,EAE3C,eAAe,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAgG/D"}
|
|
@@ -94,9 +94,12 @@ let ResumeFeatureUseCase = class ResumeFeatureUseCase {
|
|
|
94
94
|
agentRunId: newRunId,
|
|
95
95
|
updatedAt: now,
|
|
96
96
|
});
|
|
97
|
-
// Derive worktree path and
|
|
97
|
+
// Derive worktree path and spec dir for resume worker
|
|
98
98
|
const worktreePath = this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
|
|
99
|
-
|
|
99
|
+
if (!feature.specPath) {
|
|
100
|
+
throw new Error(`Feature "${feature.name}" is missing specPath — cannot resume`);
|
|
101
|
+
}
|
|
102
|
+
this.processService.spawn(feature.id, newRunId, feature.repositoryPath, feature.specPath, worktreePath, {
|
|
100
103
|
resume: true,
|
|
101
104
|
approvalGates: lastRun.approvalGates,
|
|
102
105
|
threadId: lastRun.threadId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAiHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAoQrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -25,6 +25,7 @@ import { ToolInstallerServiceImpl } from '../services/tool-installer/tool-instal
|
|
|
25
25
|
import { GitPrService } from '../services/git/git-pr.service.js';
|
|
26
26
|
import { JsonDrivenIdeLauncherService } from '../services/ide-launchers/json-driven-ide-launcher.service.js';
|
|
27
27
|
import { DaemonPidService } from '../services/daemon/daemon-pid.service.js';
|
|
28
|
+
import { DeploymentService } from '../services/deployment/deployment.service.js';
|
|
28
29
|
import { AgentExecutorFactory } from '../services/agents/common/agent-executor-factory.service.js';
|
|
29
30
|
import { AgentExecutorProvider } from '../services/agents/common/agent-executor-provider.service.js';
|
|
30
31
|
import { StructuredAgentCallerService } from '../services/agents/common/structured-agent-caller.service.js';
|
|
@@ -136,6 +137,8 @@ export async function initializeContainer() {
|
|
|
136
137
|
container.registerSingleton('IGitPrService', GitPrService);
|
|
137
138
|
container.registerSingleton('IIdeLauncherService', JsonDrivenIdeLauncherService);
|
|
138
139
|
container.registerSingleton('IDaemonService', DaemonPidService);
|
|
140
|
+
const deploymentService = new DeploymentService();
|
|
141
|
+
container.registerInstance('IDeploymentService', deploymentService);
|
|
139
142
|
// Register agent infrastructure
|
|
140
143
|
container.register('IAgentRunRepository', {
|
|
141
144
|
useFactory: (c) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAuY3C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAA4C,CAAC;AAE/E;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9E"}
|
|
@@ -359,6 +359,31 @@ ALTER TABLE features ADD COLUMN ci_fix_history TEXT;
|
|
|
359
359
|
add('notif_evt_pr_checks_failed');
|
|
360
360
|
},
|
|
361
361
|
},
|
|
362
|
+
{
|
|
363
|
+
version: 23,
|
|
364
|
+
sql: `
|
|
365
|
+
-- Migration 023: Back-fill repositories rows for orphaned features
|
|
366
|
+
-- Inserts a repository row for every distinct repository_path in the features table
|
|
367
|
+
-- that has no matching row in repositories. INSERT OR IGNORE ensures idempotency.
|
|
368
|
+
INSERT OR IGNORE INTO repositories (id, name, path, created_at, updated_at)
|
|
369
|
+
SELECT
|
|
370
|
+
lower(hex(randomblob(16))) AS id,
|
|
371
|
+
CASE
|
|
372
|
+
WHEN instr(repository_path, '/') > 0
|
|
373
|
+
THEN replace(repository_path, rtrim(repository_path, replace(repository_path, '/', '')), '')
|
|
374
|
+
ELSE repository_path
|
|
375
|
+
END AS name,
|
|
376
|
+
repository_path AS path,
|
|
377
|
+
strftime('%s', 'now') * 1000 AS created_at,
|
|
378
|
+
strftime('%s', 'now') * 1000 AS updated_at
|
|
379
|
+
FROM (
|
|
380
|
+
SELECT DISTINCT repository_path
|
|
381
|
+
FROM features
|
|
382
|
+
WHERE repository_path IS NOT NULL AND repository_path != ''
|
|
383
|
+
)
|
|
384
|
+
WHERE repository_path NOT IN (SELECT path FROM repositories WHERE path IS NOT NULL);
|
|
385
|
+
`,
|
|
386
|
+
},
|
|
362
387
|
];
|
|
363
388
|
/**
|
|
364
389
|
* The latest schema version (highest migration version number).
|
package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { Repository } from '../../domain/generated/output.js';
|
|
|
9
9
|
export declare class SQLiteRepositoryRepository implements IRepositoryRepository {
|
|
10
10
|
private readonly db;
|
|
11
11
|
constructor(db: Database.Database);
|
|
12
|
-
create(repository: Repository): Promise<
|
|
12
|
+
create(repository: Repository): Promise<Repository>;
|
|
13
13
|
findById(id: string): Promise<Repository | null>;
|
|
14
14
|
findByPath(path: string): Promise<Repository | null>;
|
|
15
15
|
list(): Promise<Repository[]>;
|
package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-repository.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-repository.repository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gFAAgF,CAAC;AAC5H,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAOnE,qBACa,0BAA2B,YAAW,qBAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"sqlite-repository.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-repository.repository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gFAAgF,CAAC;AAC5H,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAOnE,qBACa,0BAA2B,YAAW,qBAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAYnD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAMhD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQpD,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAQ7B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAMpE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzC"}
|
|
@@ -21,11 +21,14 @@ let SQLiteRepositoryRepository = class SQLiteRepositoryRepository {
|
|
|
21
21
|
}
|
|
22
22
|
async create(repository) {
|
|
23
23
|
const row = toDatabase(repository);
|
|
24
|
-
const
|
|
24
|
+
const insertStmt = this.db.prepare(`
|
|
25
25
|
INSERT OR IGNORE INTO repositories (id, name, path, created_at, updated_at)
|
|
26
26
|
VALUES (@id, @name, @path, @created_at, @updated_at)
|
|
27
27
|
`);
|
|
28
|
-
|
|
28
|
+
insertStmt.run(row);
|
|
29
|
+
const selectStmt = this.db.prepare('SELECT * FROM repositories WHERE path = ?');
|
|
30
|
+
const existing = selectStmt.get(row.path);
|
|
31
|
+
return fromDatabase(existing);
|
|
29
32
|
}
|
|
30
33
|
async findById(id) {
|
|
31
34
|
const stmt = this.db.prepare('SELECT * FROM repositories WHERE id = ? AND deleted_at IS NULL');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAsBzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;;OAGG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAsBzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;;OAGG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAiN7E"}
|
|
@@ -131,9 +131,13 @@ export function createMergeNode(deps) {
|
|
|
131
131
|
log.info('Merge approved — skipping commit/push/PR, continuing to post-merge');
|
|
132
132
|
messages.push(`[merge] Approved — continuing`);
|
|
133
133
|
}
|
|
134
|
-
// --- Agent Call 2: Merge
|
|
134
|
+
// --- Agent Call 2: Merge ---
|
|
135
|
+
// Merge when: allowMerge is true (auto-merge), OR user explicitly
|
|
136
|
+
// approved at the merge gate (isResumeAfterInterrupt means they
|
|
137
|
+
// clicked Approve). The approval IS permission to merge.
|
|
135
138
|
let merged = false;
|
|
136
|
-
|
|
139
|
+
const userApprovedMerge = isResumeAfterInterrupt && state._approvalAction !== 'rejected';
|
|
140
|
+
if (state.approvalGates?.allowMerge || userApprovedMerge) {
|
|
137
141
|
log.info('Agent call 2: merge/squash');
|
|
138
142
|
const mergePrompt = buildMergeSquashPrompt({ ...state, prUrl, prNumber, commitHash }, branch, baseBranch, remoteAvailable);
|
|
139
143
|
// Run merge in the ORIGINAL repo, not the worktree — the worktree IS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"merge-prompts.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAwCxD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CAyDR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CA0BR;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,UAAQ,GAChB,MAAM,CAkER"}
|
|
@@ -17,18 +17,22 @@ function getMergeRejectionFeedback(specContent) {
|
|
|
17
17
|
if (rejectionFeedback && rejectionFeedback.length > 0) {
|
|
18
18
|
const mergeRejections = rejectionFeedback.filter((e) => e.phase === 'merge');
|
|
19
19
|
if (mergeRejections.length > 0) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const latest = mergeRejections[mergeRejections.length - 1];
|
|
21
|
+
const older = mergeRejections.slice(0, -1);
|
|
22
|
+
const olderSection = older.length > 0
|
|
23
|
+
? `\n### Earlier feedback (for context only)\n${older.map((e) => `- Iteration ${e.iteration}: ${e.message}`).join('\n')}\n`
|
|
24
|
+
: '';
|
|
23
25
|
return `
|
|
24
|
-
##
|
|
26
|
+
## ⚠️ CRITICAL — User Rejection Feedback (MUST ADDRESS)
|
|
25
27
|
|
|
26
|
-
The user
|
|
28
|
+
**YOUR PRIMARY TASK: The user rejected the previous result and gave this feedback. You MUST act on it:**
|
|
27
29
|
|
|
28
|
-
${
|
|
30
|
+
> ${latest.message}
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
(Iteration ${latest.iteration}, ${latest.timestamp})
|
|
31
33
|
|
|
34
|
+
Do NOT just record this feedback — you must actually make the changes the user requested.
|
|
35
|
+
${olderSection}
|
|
32
36
|
`;
|
|
33
37
|
}
|
|
34
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"plan.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/plan.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAqMhE"}
|
|
@@ -20,18 +20,22 @@ export function buildPlanPrompt(state) {
|
|
|
20
20
|
// Filter to plan-phase rejections only
|
|
21
21
|
const planRejections = rejectionFeedback.filter((e) => e.phase === 'plan');
|
|
22
22
|
if (planRejections.length > 0) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const latest = planRejections[planRejections.length - 1];
|
|
24
|
+
const older = planRejections.slice(0, -1);
|
|
25
|
+
const olderSection = older.length > 0
|
|
26
|
+
? `\n### Earlier feedback (for context only)\n${older.map((e) => `- Iteration ${e.iteration}: ${e.message}`).join('\n')}\n`
|
|
27
|
+
: '';
|
|
26
28
|
rejectionFeedbackSection = `
|
|
27
|
-
##
|
|
29
|
+
## ⚠️ CRITICAL — User Rejection Feedback (MUST ADDRESS)
|
|
28
30
|
|
|
29
|
-
The user
|
|
31
|
+
**YOUR PRIMARY TASK: The user rejected the previous result and gave this feedback. You MUST act on it:**
|
|
30
32
|
|
|
31
|
-
${
|
|
33
|
+
> ${latest.message}
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
(Iteration ${latest.iteration}, ${latest.timestamp})
|
|
34
36
|
|
|
37
|
+
Do NOT just record this feedback — you must actually make the changes the user requested.
|
|
38
|
+
${olderSection}
|
|
35
39
|
`;
|
|
36
40
|
}
|
|
37
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"requirements.prompt.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA4KxE"}
|
|
@@ -19,18 +19,22 @@ export function buildRequirementsPrompt(state) {
|
|
|
19
19
|
// Filter to requirements-phase rejections (or legacy entries without phase)
|
|
20
20
|
const reqRejections = rejectionFeedback.filter((e) => !e.phase || e.phase === 'requirements');
|
|
21
21
|
if (reqRejections.length > 0) {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
const latest = reqRejections[reqRejections.length - 1];
|
|
23
|
+
const older = reqRejections.slice(0, -1);
|
|
24
|
+
const olderSection = older.length > 0
|
|
25
|
+
? `\n### Earlier feedback (for context only)\n${older.map((e) => `- Iteration ${e.iteration}: ${e.message}`).join('\n')}\n`
|
|
26
|
+
: '';
|
|
25
27
|
rejectionFeedbackSection = `
|
|
26
|
-
##
|
|
28
|
+
## ⚠️ CRITICAL — User Rejection Feedback (MUST ADDRESS)
|
|
27
29
|
|
|
28
|
-
The user
|
|
30
|
+
**YOUR PRIMARY TASK: The user rejected the previous result and gave this feedback. You MUST act on it:**
|
|
29
31
|
|
|
30
|
-
${
|
|
32
|
+
> ${latest.message}
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
(Iteration ${latest.iteration}, ${latest.timestamp})
|
|
33
35
|
|
|
36
|
+
Do NOT just record this feedback — you must actually make the changes the user requested.
|
|
37
|
+
${olderSection}
|
|
34
38
|
`;
|
|
35
39
|
}
|
|
36
40
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment Service
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure service that manages local dev server deployments.
|
|
5
|
+
* Holds an in-memory Map of active deployments keyed by targetId.
|
|
6
|
+
* Handles process spawning, stdout-based port detection, and graceful
|
|
7
|
+
* shutdown (SIGTERM → poll → SIGKILL).
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
import type { IDeploymentService, DeploymentStatus } from '../../../application/ports/output/services/deployment-service.interface.js';
|
|
11
|
+
import { detectDevScript } from './detect-dev-script.js';
|
|
12
|
+
export interface DeploymentServiceDeps {
|
|
13
|
+
spawn: typeof spawn;
|
|
14
|
+
detectDevScript: typeof detectDevScript;
|
|
15
|
+
kill: (pid: number, signal: NodeJS.Signals | string) => void;
|
|
16
|
+
isAlive: (pid: number) => boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class DeploymentService implements IDeploymentService {
|
|
19
|
+
private readonly deployments;
|
|
20
|
+
private readonly deps;
|
|
21
|
+
constructor(deps?: Partial<DeploymentServiceDeps>);
|
|
22
|
+
/**
|
|
23
|
+
* Start a deployment for the given target.
|
|
24
|
+
* If a deployment already exists for this target, it is stopped first.
|
|
25
|
+
*/
|
|
26
|
+
start(targetId: string, targetPath: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current deployment status for a target.
|
|
29
|
+
* Returns null if no deployment exists for this target.
|
|
30
|
+
*/
|
|
31
|
+
getStatus(targetId: string): DeploymentStatus | null;
|
|
32
|
+
/**
|
|
33
|
+
* Stop a deployment gracefully: SIGTERM → poll → SIGKILL.
|
|
34
|
+
*/
|
|
35
|
+
stop(targetId: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Force-stop all tracked deployments immediately (for daemon shutdown).
|
|
38
|
+
*/
|
|
39
|
+
stopAll(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Send SIGKILL to a process group.
|
|
42
|
+
*/
|
|
43
|
+
private killProcess;
|
|
44
|
+
/**
|
|
45
|
+
* Attach a line-buffered listener on stdout or stderr that calls parsePort.
|
|
46
|
+
*/
|
|
47
|
+
private attachOutputListener;
|
|
48
|
+
/**
|
|
49
|
+
* Poll until a process is dead or timeout expires.
|
|
50
|
+
*/
|
|
51
|
+
private pollUntilDead;
|
|
52
|
+
/**
|
|
53
|
+
* Wait for a child process to emit 'exit', with a short timeout.
|
|
54
|
+
*/
|
|
55
|
+
private waitForExit;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=deployment.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/deployment/deployment.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,qEAAqE,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAgBzD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAgBD,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAEjC,IAAI,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAIrD;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAmDjD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAMpD;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B3C;;OAEG;IACH,OAAO,IAAI,IAAI;IAMf;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;YACW,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,WAAW;CASpB"}
|