@shepai/cli 1.178.0 → 1.178.1-pr536.42a22c6
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/apis/json-schema/Application.yaml +40 -0
- package/apis/json-schema/ApplicationStatus.yaml +8 -0
- package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts +17 -0
- package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.js +6 -0
- package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +29 -0
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +135 -0
- package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.d.ts +15 -0
- package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/delete-application.use-case.js +45 -0
- package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.d.ts +13 -0
- package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/get-application.use-case.js +33 -0
- package/dist/packages/core/src/application/use-cases/applications/index.d.ts +13 -0
- package/dist/packages/core/src/application/use-cases/applications/index.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/index.js +10 -0
- package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts +13 -0
- package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.js +33 -0
- package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.d.ts +14 -0
- package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/update-application.use-case.js +33 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +42 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +6 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +32 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +37 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +52 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-create-applications-table.js +34 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +21 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +98 -0
- 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 +31 -5
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts +14 -0
- 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 +63 -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 +57 -10
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +11 -1
- package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/check-all-agents-status.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/check-all-agents-status.js +30 -0
- package/dist/src/presentation/web/app/actions/create-application.d.ts +13 -0
- package/dist/src/presentation/web/app/actions/create-application.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-application.js +20 -0
- package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts +20 -0
- package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-project-and-feature.js +84 -0
- package/dist/src/presentation/web/app/actions/delete-application.d.ts +4 -0
- package/dist/src/presentation/web/app/actions/delete-application.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/delete-application.js +16 -0
- package/dist/src/presentation/web/app/application/[id]/page.d.ts +11 -0
- package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/application/[id]/page.js +16 -0
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts +3 -1
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +19 -0
- package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts +24 -0
- package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/application-node/application-node-config.js +1 -0
- package/dist/src/presentation/web/components/common/application-node/application-node.d.ts +7 -0
- package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/application-node/application-node.js +41 -0
- package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/application-node/application-node.stories.js +100 -0
- package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/attachment-chip/attachment-chip.js +1 -1
- package/dist/src/presentation/web/components/features/application-page/application-page.d.ts +8 -0
- package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/application-page.js +86 -0
- package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +51 -0
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +4 -2
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +5 -1
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatTab.js +3 -3
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts +3 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +181 -120
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +4 -16
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +16 -109
- 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 +21 -3
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -0
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +25 -1
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts +2 -1
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.js +9 -2
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +2 -9
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -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 +2 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +3 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +9 -4
- package/dist/src/presentation/web/hooks/use-graph-state.d.ts +5 -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 +37 -2
- package/dist/src/presentation/web/lib/derive-graph.d.ts +11 -1
- package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/derive-graph.js +35 -1
- package/dist/src/presentation/web/lib/layout-with-dagre.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -0
- package/dist/translations/ar/web.json +2 -1
- package/dist/translations/de/web.json +2 -1
- package/dist/translations/en/web.json +2 -1
- package/dist/translations/es/web.json +2 -1
- package/dist/translations/fr/web.json +2 -1
- package/dist/translations/he/web.json +2 -1
- package/dist/translations/pt/web.json +2 -1
- package/dist/translations/ru/web.json +2 -1
- package/dist/translations/uk/web.json +2 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/routes-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +96 -81
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +92 -77
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +98 -83
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +114 -99
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +114 -99
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +94 -79
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +94 -79
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +92 -77
- package/web/.next/server/app/(dashboard)/chat/page.js +4 -3
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +98 -83
- package/web/.next/server/app/(dashboard)/create/page.js +4 -3
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +114 -99
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +114 -99
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +92 -77
- package/web/.next/server/app/(dashboard)/page.js +4 -3
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +94 -79
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +94 -79
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +4 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +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 +27 -12
- package/web/.next/server/app/_not-found/page.js +2 -2
- 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/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/application/[id]/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/application/[id]/page/build-manifest.json +18 -0
- package/web/.next/server/app/application/[id]/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +110 -0
- package/web/.next/server/app/application/[id]/page.js +18 -0
- package/web/.next/server/app/application/[id]/page.js.map +5 -0
- package/web/.next/server/app/application/[id]/page.js.nft.json +1 -0
- package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/features/page/server-reference-manifest.json +27 -12
- package/web/.next/server/app/features/page.js +2 -2
- package/web/.next/server/app/features/page.js.nft.json +1 -1
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +33 -18
- package/web/.next/server/app/settings/page.js +2 -2
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +41 -26
- 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/server-reference-manifest.json +37 -22
- package/web/.next/server/app/tools/page.js +2 -2
- 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 +27 -12
- package/web/.next/server/app/version/page.js +2 -2
- 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/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js → [root-of-the-server]__a5879003._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__ea653642._.js.map → [root-of-the-server]__a5879003._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_17d0c3c1.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_17d0c3c1.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_717a531e.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_717a531e.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_6ed3ab8b.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_6ed3ab8b.js.map +1 -0
- 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/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00efb844._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js → [root-of-the-server]__090f24cb._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d1040bd1._.js.map → [root-of-the-server]__090f24cb._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0d64745d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28c4e836._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28c4e836._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3b7cba7e._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3b7cba7e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__63272afd._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__63272afd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7e2919._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7e2919._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js → [root-of-the-server]__7aa484f5._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js.map → [root-of-the-server]__7aa484f5._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__964b00e8._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__964b00e8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__df7bfd53._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__df7bfd53._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f5f982ad._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f5f982ad._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
- package/web/.next/server/chunks/ssr/_1879404a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_2bea8166._.js +4 -0
- package/web/.next/server/chunks/ssr/_2bea8166._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_46a35540._.js +3 -0
- package/web/.next/server/chunks/ssr/_46a35540._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_4e42f1b7._.js +3 -0
- package/web/.next/server/chunks/ssr/_4e42f1b7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6dff070a._.js +3 -0
- package/web/.next/server/chunks/ssr/_6dff070a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_73e62e34._.js +7 -0
- package/web/.next/server/chunks/ssr/_73e62e34._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_83e1c526._.js → _946a7fc6._.js} +3 -3
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b0311e50._.js +3 -0
- package/web/.next/server/chunks/ssr/_b0311e50._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b7a43c05._.js +1 -1
- package/web/.next/server/chunks/ssr/_b7a43c05._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d485d3b9._.js +3 -0
- package/web/.next/server/chunks/ssr/_d485d3b9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f3cd7f63._.js +9 -0
- package/web/.next/server/chunks/ssr/_f3cd7f63._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_496c9117._.js → _f86fc1bf._.js} +2 -2
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f916587a._.js +3 -0
- package/web/.next/server/chunks/ssr/_f916587a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_49b9ba41._.js → _fb9934d4._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_49b9ba41._.js.map → _fb9934d4._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_2478c24c._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_2478c24c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_25da4cf4._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_25da4cf4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_35084e19._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_35084e19._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_4ed08aa4._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_4ed08aa4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5149e11b.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_5149e11b.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1619f987.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_1b3c83ff.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_a9f3bc05._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_a9f3bc05._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +32 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b360e85a._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b360e85a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.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 +898 -701
- package/web/.next/static/chunks/{25a0d3f50b0a26c1.js → 04b48827bdc55056.js} +1 -1
- package/web/.next/static/chunks/07dd0cd365169ac6.js +1 -0
- package/web/.next/static/chunks/0dbc8228223540f0.js +1 -0
- package/web/.next/static/chunks/14742749d118b339.js +1 -0
- package/web/.next/static/chunks/{2cc487403c107f3f.js → 48b1ee6f9460e08a.js} +2 -2
- package/web/.next/static/chunks/54a8ad22d3f9a857.js +3 -0
- package/web/.next/static/chunks/57cc43fa9970f8d7.js +1 -0
- package/web/.next/static/chunks/63e6ce2311b8c44f.js +7 -0
- package/web/.next/static/chunks/73e5026c618f964b.css +1 -0
- package/web/.next/static/chunks/771b8283dff48366.js +5 -0
- package/web/.next/static/chunks/79f687a9b9f2dca3.js +1 -0
- package/web/.next/static/chunks/{35bf9838f21d1818.js → 82189e222fa39768.js} +1 -1
- package/web/.next/static/chunks/{e167803ac69c66c7.js → 9718f0d839d204ee.js} +1 -1
- package/web/.next/static/chunks/994f0ac30cd8661a.js +1 -0
- package/web/.next/static/chunks/a9dbf887ff5ea94d.js +1 -0
- package/web/.next/static/chunks/afd205387569eb16.js +1 -0
- package/web/.next/static/chunks/b99506a6f7bc2fa8.js +1 -0
- package/web/.next/static/chunks/{09edd35d194bec06.js → bcbae49e0f6d65ca.js} +3 -3
- package/web/.next/static/chunks/{5f57f0d80d3db147.js → c5e9b56c67a4f3d4.js} +1 -1
- package/web/.next/static/chunks/c9bd1dea77920749.js +1 -0
- package/web/.next/static/chunks/ce8d4b5094c4dd62.js +1 -0
- package/web/.next/static/chunks/e2644573ed9ceb22.js +1 -0
- package/web/.next/static/chunks/{36e3d626ed8defca.js → f202967c5b0ff87f.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__46b10380._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__69dd3217._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b512877._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__990dba2d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cc9c7bbb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
- package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_496c9117._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_64efdf53._.js +0 -3
- package/web/.next/server/chunks/ssr/_64efdf53._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6abfa39e._.js +0 -3
- package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_7cb0396e._.js +0 -3
- package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_83e1c526._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d9c0a97a._.js +0 -7
- package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e680c57c._.js +0 -9
- package/web/.next/server/chunks/ssr/_e680c57c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_06109d28._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_0bca70f8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_367cdbe0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_57fed7fd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_7f567f6d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_972f58d5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_a71b18a2._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_bebe675e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_c93e8bc6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_e729f44a._.js.map +0 -1
- package/web/.next/static/chunks/0b7251e5d717dd17.js +0 -1
- package/web/.next/static/chunks/0fd39d549d277843.js +0 -1
- package/web/.next/static/chunks/124b79a5d2a760fb.css +0 -1
- package/web/.next/static/chunks/4052a4971fbbac9c.js +0 -1
- package/web/.next/static/chunks/46e2693dbc9262fd.js +0 -5
- package/web/.next/static/chunks/5df9da8b40e298ee.js +0 -7
- package/web/.next/static/chunks/8286914ac835a1cc.js +0 -1
- package/web/.next/static/chunks/8777b2a0a2e85fd1.js +0 -3
- package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
- package/web/.next/static/chunks/971e52f3f386ccfd.js +0 -1
- package/web/.next/static/chunks/9e9cddf8e38342e8.js +0 -1
- package/web/.next/static/chunks/ac586c86d71187fc.js +0 -1
- package/web/.next/static/chunks/b63e6727c84f30e2.js +0 -1
- package/web/.next/static/chunks/c10c0d6d458453bc.js +0 -1
- package/web/.next/static/chunks/c6fdd161a9e5b554.js +0 -1
- /package/web/.next/static/{sfBZvlx-erv7S1C49vRSU → gxMya5XttXE_aSwszy4nE}/_buildManifest.js +0 -0
- /package/web/.next/static/{sfBZvlx-erv7S1C49vRSU → gxMya5XttXE_aSwszy4nE}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{sfBZvlx-erv7S1C49vRSU → gxMya5XttXE_aSwszy4nE}/_ssgManifest.js +0 -0
|
@@ -188,6 +188,69 @@ ${!state.commitSpecs ? '- Do NOT commit the `specs/` directory — it must stay
|
|
|
188
188
|
- Do NOT run \`git pull\`, \`git rebase\`, or \`git merge\` — this is a fresh branch, push it directly
|
|
189
189
|
- If there are no changes to commit, skip the commit step and report that no changes were found`;
|
|
190
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Build a prompt for agent-based local squash merge with conflict resolution.
|
|
193
|
+
*
|
|
194
|
+
* Used as a fallback when the programmatic localMergeSquash encounters merge
|
|
195
|
+
* conflicts. The agent resolves conflicts using its full coding capabilities,
|
|
196
|
+
* then commits and cleans up.
|
|
197
|
+
*
|
|
198
|
+
* @param repositoryPath - Path to the original repository (not worktree)
|
|
199
|
+
* @param featureBranch - Branch to squash-merge from
|
|
200
|
+
* @param baseBranch - Target branch (e.g. main)
|
|
201
|
+
* @param commitMessage - Commit message for the squash merge commit
|
|
202
|
+
* @param conflictDetails - Stdout/stderr from the failed merge attempt describing the conflicts
|
|
203
|
+
*/
|
|
204
|
+
export function buildLocalSquashMergePrompt(repositoryPath, featureBranch, baseBranch, commitMessage, conflictDetails) {
|
|
205
|
+
return `You are resolving merge conflicts for a local squash merge.
|
|
206
|
+
|
|
207
|
+
## Context
|
|
208
|
+
|
|
209
|
+
A programmatic \`git merge --squash\` of \`${featureBranch}\` into \`${baseBranch}\` failed due to merge conflicts.
|
|
210
|
+
The repo has already been cleaned up (merge aborted). You need to perform the merge manually, resolving all conflicts.
|
|
211
|
+
|
|
212
|
+
## Conflict Details
|
|
213
|
+
|
|
214
|
+
\`\`\`
|
|
215
|
+
${conflictDetails}
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
## Working Directory
|
|
219
|
+
|
|
220
|
+
${repositoryPath}
|
|
221
|
+
|
|
222
|
+
## Instructions
|
|
223
|
+
|
|
224
|
+
Follow these steps EXACTLY:
|
|
225
|
+
|
|
226
|
+
1. Make sure you are on the \`${baseBranch}\` branch:
|
|
227
|
+
\`git checkout ${baseBranch}\`
|
|
228
|
+
|
|
229
|
+
2. Start the squash merge:
|
|
230
|
+
\`git merge --squash ${featureBranch}\`
|
|
231
|
+
|
|
232
|
+
3. Resolve ALL merge conflicts:
|
|
233
|
+
- For each conflicted file, open it and resolve the conflict markers (\`<<<<<<<\`, \`=======\`, \`>>>>>>>\`)
|
|
234
|
+
- Choose the correct resolution by understanding what both sides intended
|
|
235
|
+
- For lock files (package-lock.json, yarn.lock, pnpm-lock.yaml), accept the feature branch version and regenerate if possible, or accept theirs
|
|
236
|
+
- For config files (.gitignore, tsconfig.json, etc.), merge both sides' additions
|
|
237
|
+
- Stage each resolved file: \`git add <file>\`
|
|
238
|
+
|
|
239
|
+
4. After ALL conflicts are resolved, commit:
|
|
240
|
+
\`git commit -m "${commitMessage.replace(/"/g, '\\"')}"\`
|
|
241
|
+
|
|
242
|
+
5. Delete the feature branch:
|
|
243
|
+
\`git branch -d ${featureBranch}\` (non-fatal if it fails)
|
|
244
|
+
|
|
245
|
+
## Constraints
|
|
246
|
+
|
|
247
|
+
- Work in the repository at: ${repositoryPath}
|
|
248
|
+
- Do NOT push — this is a local-only operation
|
|
249
|
+
- Do NOT modify any source code beyond resolving conflicts
|
|
250
|
+
- Do NOT create new files
|
|
251
|
+
- If a conflict cannot be resolved confidently, prefer the feature branch version (theirs in squash context)
|
|
252
|
+
- Ensure the final commit has no conflict markers remaining`;
|
|
253
|
+
}
|
|
191
254
|
/**
|
|
192
255
|
* Build a prompt for the CI watch/fix agent call.
|
|
193
256
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wEAAwE,CAAC;AAC5G,OAAO,KAAK,EACV,cAAc,EAGd,WAAW,EACX,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,wEAAwE,CAAC;AAUhF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,qBACa,YAAa,YAAW,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBjD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgF9C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnD,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuClE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,aAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;YA6BjF,eAAe;IASvB,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,UAAQ,GAChB,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"git-pr.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/git-pr.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -216,6 +216,27 @@ let GitPrService = class GitPrService {
|
|
|
216
216
|
}
|
|
217
217
|
async localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote = false) {
|
|
218
218
|
try {
|
|
219
|
+
// Clean up any stale merge/rebase state and dirty index BEFORE checkout.
|
|
220
|
+
// A previous failed merge may have left the repo in a merge state, causing
|
|
221
|
+
// "you need to resolve your current index first" on checkout.
|
|
222
|
+
try {
|
|
223
|
+
await this.execFile('git', ['merge', '--abort'], { cwd });
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// No merge in progress — expected, non-fatal
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
await this.execFile('git', ['reset', '--hard', 'HEAD'], { cwd });
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
// Reset failure is non-fatal
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
await this.execFile('git', ['clean', '-fd'], { cwd });
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
// Clean failure is non-fatal
|
|
239
|
+
}
|
|
219
240
|
// Fetch latest from remote if available
|
|
220
241
|
if (hasRemote) {
|
|
221
242
|
try {
|
|
@@ -236,16 +257,42 @@ let GitPrService = class GitPrService {
|
|
|
236
257
|
// Pull failure is non-fatal — proceed with local state
|
|
237
258
|
}
|
|
238
259
|
}
|
|
239
|
-
//
|
|
240
|
-
//
|
|
260
|
+
// Squash merge the feature branch.
|
|
261
|
+
// git merge --squash writes conflict info to STDOUT (not stderr), so the
|
|
262
|
+
// error.message from execFile won't contain "CONFLICT". We must check
|
|
263
|
+
// error.stdout to detect conflicts and include it in diagnostics.
|
|
241
264
|
try {
|
|
242
|
-
await this.execFile('git', ['
|
|
265
|
+
await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
|
|
243
266
|
}
|
|
244
|
-
catch {
|
|
245
|
-
//
|
|
267
|
+
catch (mergeError) {
|
|
268
|
+
// Abort the in-progress merge to leave the repo clean
|
|
269
|
+
try {
|
|
270
|
+
await this.execFile('git', ['merge', '--abort'], { cwd });
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// merge --abort may fail if there's no merge in progress; non-fatal
|
|
274
|
+
try {
|
|
275
|
+
await this.execFile('git', ['reset', '--merge'], { cwd });
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
// Last-resort cleanup; non-fatal
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Check stdout for CONFLICT text (git merge --squash puts it there, not stderr)
|
|
282
|
+
const stdout = mergeError?.stdout ?? '';
|
|
283
|
+
const stderr = mergeError?.stderr ?? '';
|
|
284
|
+
const combined = `${stdout}\n${stderr}`;
|
|
285
|
+
const mergeMsg = mergeError instanceof Error ? mergeError.message : String(mergeError);
|
|
286
|
+
if (combined.includes('CONFLICT') ||
|
|
287
|
+
combined.includes('conflict') ||
|
|
288
|
+
mergeMsg.includes('CONFLICT') ||
|
|
289
|
+
mergeMsg.includes('conflict')) {
|
|
290
|
+
throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${combined.trim()}`, GitPrErrorCode.MERGE_CONFLICT, mergeError instanceof Error ? mergeError : undefined);
|
|
291
|
+
}
|
|
292
|
+
// Include stdout in the error for better diagnostics
|
|
293
|
+
const detail = combined.trim() || mergeMsg;
|
|
294
|
+
throw new GitPrError(`Local squash merge failed: ${detail}`, GitPrErrorCode.GIT_ERROR, mergeError instanceof Error ? mergeError : undefined);
|
|
246
295
|
}
|
|
247
|
-
// Squash merge the feature branch
|
|
248
|
-
await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
|
|
249
296
|
// Commit the squash merge (skip if nothing to commit — branches may be equivalent)
|
|
250
297
|
const { stdout: status } = await this.execFile('git', ['status', '--porcelain'], { cwd });
|
|
251
298
|
if (status.trim().length > 0) {
|
|
@@ -274,11 +321,11 @@ let GitPrService = class GitPrService {
|
|
|
274
321
|
}
|
|
275
322
|
}
|
|
276
323
|
catch (error) {
|
|
324
|
+
// Re-throw GitPrErrors as-is (already properly classified above)
|
|
325
|
+
if (error instanceof GitPrError)
|
|
326
|
+
throw error;
|
|
277
327
|
const message = error instanceof Error ? error.message : String(error);
|
|
278
328
|
const cause = error instanceof Error ? error : undefined;
|
|
279
|
-
if (message.includes('CONFLICT') || message.includes('conflict')) {
|
|
280
|
-
throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${message}`, GitPrErrorCode.MERGE_CONFLICT, cause);
|
|
281
|
-
}
|
|
282
329
|
throw new GitPrError(`Local squash merge failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
283
330
|
}
|
|
284
331
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAyFxF"}
|
|
@@ -102,11 +102,20 @@ export async function getGraphData() {
|
|
|
102
102
|
const listFeatures = resolve('ListFeaturesUseCase');
|
|
103
103
|
const listRepos = resolve('ListRepositoriesUseCase');
|
|
104
104
|
const agentRunRepo = resolve('IAgentRunRepository');
|
|
105
|
+
// Resolve ListApplicationsUseCase — may not be registered in older environments
|
|
106
|
+
let listApplications = null;
|
|
107
|
+
try {
|
|
108
|
+
listApplications = resolve('ListApplicationsUseCase');
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Use case not registered — skip application nodes
|
|
112
|
+
}
|
|
105
113
|
// Always include archived features so the client has full data for instant
|
|
106
114
|
// show/hide toggle without a server round-trip (NFR-3).
|
|
107
|
-
const [features, repositories] = await Promise.all([
|
|
115
|
+
const [features, repositories, applications] = await Promise.all([
|
|
108
116
|
listFeatures.execute({ includeArchived: true }),
|
|
109
117
|
listRepos.execute(),
|
|
118
|
+
listApplications ? listApplications.execute() : Promise.resolve([]),
|
|
110
119
|
]);
|
|
111
120
|
// Read git info from cache (zero git calls). Stale entries trigger
|
|
112
121
|
// a fire-and-forget background refresh for the next poll cycle.
|
|
@@ -142,6 +151,7 @@ export async function getGraphData() {
|
|
|
142
151
|
ciWatchEnabled: workflow.ciWatchEnabled,
|
|
143
152
|
repoGitInfo: repoGitInfoMap,
|
|
144
153
|
repoGitStatus: repoGitStatusMap,
|
|
154
|
+
applications,
|
|
145
155
|
});
|
|
146
156
|
// Enrich feature nodes with deployment status
|
|
147
157
|
let deploymentService = null;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type AgentInstallMap = Record<string, boolean>;
|
|
2
|
+
/**
|
|
3
|
+
* Returns a map of agentType → installed (boolean) for all known agents.
|
|
4
|
+
* Agents without a tool mapping (e.g. "dev") are considered installed.
|
|
5
|
+
*/
|
|
6
|
+
export declare function checkAllAgentsStatus(): Promise<AgentInstallMap>;
|
|
7
|
+
//# sourceMappingURL=check-all-agents-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-all-agents-status.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-all-agents-status.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC,CAiBrE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
const AGENT_TOOL_MAP = {
|
|
4
|
+
'claude-code': 'claude-code',
|
|
5
|
+
cursor: 'cursor-cli',
|
|
6
|
+
'gemini-cli': 'gemini-cli',
|
|
7
|
+
'copilot-cli': 'copilot-cli',
|
|
8
|
+
'codex-cli': 'codex-cli',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Returns a map of agentType → installed (boolean) for all known agents.
|
|
12
|
+
* Agents without a tool mapping (e.g. "dev") are considered installed.
|
|
13
|
+
*/
|
|
14
|
+
export async function checkAllAgentsStatus() {
|
|
15
|
+
try {
|
|
16
|
+
const useCase = resolve('ListToolsUseCase');
|
|
17
|
+
const tools = await useCase.execute();
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const [agentType, toolId] of Object.entries(AGENT_TOOL_MAP)) {
|
|
20
|
+
const tool = tools.find((t) => t.id === toolId);
|
|
21
|
+
result[agentType] = tool?.status.status === 'available';
|
|
22
|
+
}
|
|
23
|
+
// Dev/demo agents are always "installed"
|
|
24
|
+
result['dev'] = true;
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Application } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
interface CreateApplicationInput {
|
|
3
|
+
description: string;
|
|
4
|
+
agentType?: string;
|
|
5
|
+
modelOverride?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function createApplication(input: CreateApplicationInput): Promise<{
|
|
8
|
+
application?: Application;
|
|
9
|
+
repositoryPath?: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
}>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=create-application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-application.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-application.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC;IAAE,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBjF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
export async function createApplication(input) {
|
|
4
|
+
if (!input.description?.trim()) {
|
|
5
|
+
return { error: 'Description is required' };
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const useCase = resolve('CreateApplicationUseCase');
|
|
9
|
+
const result = await useCase.execute({
|
|
10
|
+
description: input.description.trim(),
|
|
11
|
+
agentType: input.agentType,
|
|
12
|
+
modelOverride: input.modelOverride,
|
|
13
|
+
});
|
|
14
|
+
return { application: result.application, repositoryPath: result.repositoryPath };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
const message = error instanceof Error ? error.message : 'Failed to create application';
|
|
18
|
+
return { error: message };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Feature, Repository } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
interface QuickFeatureInput {
|
|
3
|
+
description: string;
|
|
4
|
+
attachments?: {
|
|
5
|
+
path: string;
|
|
6
|
+
name: string;
|
|
7
|
+
notes?: string;
|
|
8
|
+
}[];
|
|
9
|
+
agentType?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
fast?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function createProjectAndFeature(input: QuickFeatureInput): Promise<{
|
|
14
|
+
feature?: Feature;
|
|
15
|
+
repository?: Repository;
|
|
16
|
+
repositoryPath?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=create-project-and-feature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project-and-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-project-and-feature.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAGhF,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6CD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA6CD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
import { createFeature } from './create-feature.js';
|
|
4
|
+
/**
|
|
5
|
+
* Default project instructions prepended to the user's description.
|
|
6
|
+
* These ensure that even a vague one-liner from a non-technical user
|
|
7
|
+
* results in a well-structured, runnable React application.
|
|
8
|
+
*/
|
|
9
|
+
const PROJECT_PREAMBLE = `\
|
|
10
|
+
## Project Requirements
|
|
11
|
+
|
|
12
|
+
Build this as a **React application** using Vite as the build tool.
|
|
13
|
+
|
|
14
|
+
### Structure
|
|
15
|
+
- Initialize with \`npm create vite@latest . -- --template react-ts\` scaffolding
|
|
16
|
+
- Organize code into clear folders: \`src/components/\`, \`src/pages/\`, \`src/assets/\`
|
|
17
|
+
- Use TypeScript throughout
|
|
18
|
+
- Include a working \`package.json\` with all dependencies
|
|
19
|
+
|
|
20
|
+
### Design & UI
|
|
21
|
+
- Create a polished, production-quality interface — not a prototype
|
|
22
|
+
- Use modern CSS (CSS modules or Tailwind CSS) with thoughtful spacing, typography, and color
|
|
23
|
+
- Make it fully responsive (mobile-first)
|
|
24
|
+
- Add subtle micro-interactions: hover states, transitions, focus rings
|
|
25
|
+
- Use professional placeholder content (realistic text, not lorem ipsum)
|
|
26
|
+
- Pick a cohesive color palette and apply it consistently
|
|
27
|
+
|
|
28
|
+
### Quality
|
|
29
|
+
- Every component should be self-contained and reusable
|
|
30
|
+
- Include proper HTML semantics and accessibility (ARIA labels, alt text, keyboard nav)
|
|
31
|
+
- The app must start successfully with \`npm install && npm run dev\`
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## What to Build
|
|
36
|
+
`;
|
|
37
|
+
/**
|
|
38
|
+
* Derive a concise project name from a free-form description.
|
|
39
|
+
* Takes the first handful of meaningful words — `CreateProjectUseCase`
|
|
40
|
+
* will then slugify + cap length for the actual directory name.
|
|
41
|
+
*/
|
|
42
|
+
function deriveProjectName(description) {
|
|
43
|
+
return description.trim().split(/\s+/).slice(0, 6).join(' ');
|
|
44
|
+
}
|
|
45
|
+
export async function createProjectAndFeature(input) {
|
|
46
|
+
const { description, attachments, agentType, model } = input;
|
|
47
|
+
if (!description?.trim()) {
|
|
48
|
+
return { error: 'Description is required' };
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const createProject = resolve('CreateProjectUseCase');
|
|
52
|
+
const projectResult = await createProject.execute({
|
|
53
|
+
name: deriveProjectName(description),
|
|
54
|
+
});
|
|
55
|
+
if (!projectResult.ok) {
|
|
56
|
+
return { error: projectResult.error };
|
|
57
|
+
}
|
|
58
|
+
const projectPath = projectResult.path;
|
|
59
|
+
const addRepo = resolve('AddRepositoryUseCase');
|
|
60
|
+
const repository = await addRepo.execute({ path: projectPath });
|
|
61
|
+
// Enrich the user's prompt with project-quality instructions
|
|
62
|
+
const enrichedDescription = PROJECT_PREAMBLE + description.trim();
|
|
63
|
+
const featureResult = await createFeature({
|
|
64
|
+
description: enrichedDescription,
|
|
65
|
+
repositoryPath: projectPath,
|
|
66
|
+
attachments,
|
|
67
|
+
agentType,
|
|
68
|
+
model,
|
|
69
|
+
fast: input.fast,
|
|
70
|
+
});
|
|
71
|
+
if (featureResult.error) {
|
|
72
|
+
return { error: featureResult.error };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
feature: featureResult.feature,
|
|
76
|
+
repository,
|
|
77
|
+
repositoryPath: projectPath,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const message = error instanceof Error ? error.message : 'Failed to create project';
|
|
82
|
+
return { error: message };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-application.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-application.ts"],"names":[],"mappings":"AAKA,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
export async function deleteApplication(id) {
|
|
4
|
+
if (!id?.trim()) {
|
|
5
|
+
return { error: 'Application ID is required' };
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const useCase = resolve('DeleteApplicationUseCase');
|
|
9
|
+
await useCase.execute(id);
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const message = error instanceof Error ? error.message : 'Failed to delete application';
|
|
14
|
+
return { error: message };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Skip static pre-rendering since we need runtime DI container and server context. */
|
|
2
|
+
export declare const dynamic = "force-dynamic";
|
|
3
|
+
export default function ApplicationRoute({ params, searchParams, }: {
|
|
4
|
+
params: Promise<{
|
|
5
|
+
id: string;
|
|
6
|
+
}>;
|
|
7
|
+
searchParams: Promise<{
|
|
8
|
+
prompt?: string;
|
|
9
|
+
}>;
|
|
10
|
+
}): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
11
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/application/[id]/page.tsx"],"names":[],"mappings":"AAKA,uFAAuF;AACvF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,gBAAgB,CAAC,EAC7C,MAAM,EACN,YAAY,GACb,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C,oDAWA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { resolve } from '../../../lib/server-container.js';
|
|
3
|
+
import { notFound } from 'next/navigation';
|
|
4
|
+
import { ApplicationPage } from '../../../components/features/application-page/application-page.js';
|
|
5
|
+
/** Skip static pre-rendering since we need runtime DI container and server context. */
|
|
6
|
+
export const dynamic = 'force-dynamic';
|
|
7
|
+
export default async function ApplicationRoute({ params, searchParams, }) {
|
|
8
|
+
const { id } = await params;
|
|
9
|
+
const { prompt } = await searchParams;
|
|
10
|
+
const getApp = resolve('GetApplicationUseCase');
|
|
11
|
+
const application = await getApp.execute(id);
|
|
12
|
+
if (!application) {
|
|
13
|
+
notFound();
|
|
14
|
+
}
|
|
15
|
+
return _jsx(ApplicationPage, { application: application, initialPrompt: prompt });
|
|
16
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Feature, Repository, AgentRun } from '../../../../packages/core/src/domain/generated/output.js';
|
|
1
|
+
import type { Feature, Repository, AgentRun, Application } from '../../../../packages/core/src/domain/generated/output.js';
|
|
2
2
|
import type { CanvasNodeType } from '../components/features/features-canvas/index.js';
|
|
3
3
|
import type { Edge } from '@xyflow/react';
|
|
4
4
|
export interface FeatureWithRun {
|
|
@@ -29,6 +29,8 @@ export interface BuildGraphNodesOptions {
|
|
|
29
29
|
}>;
|
|
30
30
|
/** Git info resolution status keyed by repository path */
|
|
31
31
|
repoGitStatus?: Map<string, 'loading' | 'ready' | 'not-a-repo'>;
|
|
32
|
+
/** Application entities to render as independent nodes */
|
|
33
|
+
applications?: Application[];
|
|
32
34
|
}
|
|
33
35
|
export declare function buildGraphNodes(repositories: Repository[], featuresWithRuns: FeatureWithRun[], options?: BuildGraphNodesOptions): {
|
|
34
36
|
nodes: CanvasNodeType[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,QAAQ,EACR,WAAW,EACZ,MAAM,sCAAsC,CAAC;AAS9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,GAAG,CACf,MAAM,EACN;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CACzF,CAAC;IACF,0DAA0D;IAC1D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC,CAAC;IAChE,0DAA0D;IAC1D,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,EAClC,OAAO,CAAC,EAAE,sBAAsB,GAC/B;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAwH5C"}
|
|
@@ -75,6 +75,25 @@ export function buildGraphNodes(repositories, featuresWithRuns, options) {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
// Add application nodes (independent — no edges)
|
|
79
|
+
if (options?.applications) {
|
|
80
|
+
for (const app of options.applications) {
|
|
81
|
+
const appNodeId = `app-${app.id}`;
|
|
82
|
+
nodes.push({
|
|
83
|
+
id: appNodeId,
|
|
84
|
+
type: 'applicationNode',
|
|
85
|
+
position: { x: 0, y: 0 },
|
|
86
|
+
data: {
|
|
87
|
+
id: app.id,
|
|
88
|
+
name: app.name,
|
|
89
|
+
description: app.description,
|
|
90
|
+
status: app.status,
|
|
91
|
+
repositoryPath: normalizePath(app.repositoryPath),
|
|
92
|
+
additionalPathCount: app.additionalPaths?.length ?? 0,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
78
97
|
return { nodes, edges };
|
|
79
98
|
}
|
|
80
99
|
function appendFeatureNodes(repoFeatures, repoNodeId, allFeaturesWithRuns, nodes, edges, repoName, options) {
|
package/dist/src/presentation/web/components/common/application-node/application-node-config.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Node } from '@xyflow/react';
|
|
2
|
+
export interface ApplicationNodeData {
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
/** Application domain entity ID (UUID), used for delete operations */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Application name */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Short description of the application */
|
|
9
|
+
description: string;
|
|
10
|
+
/** Current application status */
|
|
11
|
+
status: string;
|
|
12
|
+
/** Primary repository path associated with this application */
|
|
13
|
+
repositoryPath: string;
|
|
14
|
+
/** Number of additional repository paths beyond the primary one */
|
|
15
|
+
additionalPathCount: number;
|
|
16
|
+
/** Callback when the card is clicked */
|
|
17
|
+
onClick?: () => void;
|
|
18
|
+
/** Callback when the delete button is confirmed */
|
|
19
|
+
onDelete?: (id: string) => void;
|
|
20
|
+
/** Whether to render React Flow handles for edge connections */
|
|
21
|
+
showHandles?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export type ApplicationNodeType = Node<ApplicationNodeData, 'applicationNode'>;
|
|
24
|
+
//# sourceMappingURL=application-node-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-node-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC"}
|
package/dist/src/presentation/web/components/common/application-node/application-node-config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ApplicationNodeData } from './application-node-config.js';
|
|
2
|
+
export declare function ApplicationNode({ data, selected, }: {
|
|
3
|
+
data: ApplicationNodeData;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=application-node.d.ts.map
|
package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQrE,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA4KA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { Handle, Position } from '@xyflow/react';
|
|
5
|
+
import { LayoutGrid, Trash2 } from 'lucide-react';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { cn } from '../../../lib/utils.js';
|
|
8
|
+
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
|
|
9
|
+
import { Button } from '../../ui/button.js';
|
|
10
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
|
|
11
|
+
const STATUS_DOT_CLASSES = {
|
|
12
|
+
Active: 'bg-green-500',
|
|
13
|
+
Error: 'bg-red-500',
|
|
14
|
+
};
|
|
15
|
+
const STATUS_DOT_DEFAULT = 'bg-muted-foreground/40';
|
|
16
|
+
export function ApplicationNode({ data, selected, }) {
|
|
17
|
+
const { i18n } = useTranslation('web');
|
|
18
|
+
const isRtl = i18n.dir() === 'rtl';
|
|
19
|
+
const targetHandlePos = isRtl ? Position.Right : Position.Left;
|
|
20
|
+
const sourceHandlePos = isRtl ? Position.Left : Position.Right;
|
|
21
|
+
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
22
|
+
const totalRepoCount = 1 + data.additionalPathCount;
|
|
23
|
+
const repoCountLabel = totalRepoCount === 1 ? '1 repository' : `${totalRepoCount} repositories`;
|
|
24
|
+
const statusDotClass = STATUS_DOT_CLASSES[data.status] ?? STATUS_DOT_DEFAULT;
|
|
25
|
+
return (_jsxs("div", { className: "group relative", style: { direction: isRtl ? 'rtl' : 'ltr' }, children: [_jsx(Handle, { type: "target", position: targetHandlePos, isConnectable: false, className: "opacity-0!", style: { top: 70 } }), data.onDelete && data.id ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute -start-14 top-0 bottom-0 flex items-center justify-center ps-4 pe-3 opacity-0 transition-opacity group-hover:opacity-100", onPointerDown: (e) => e.stopPropagation(), children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Remove application", "data-testid": "application-node-delete-button", onClick: (e) => {
|
|
26
|
+
e.stopPropagation();
|
|
27
|
+
setConfirmOpen(true);
|
|
28
|
+
}, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Remove application" })] }) }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-xs", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Remove application?" }), _jsxs(DialogDescription, { children: ["This will remove ", _jsx("strong", { children: data.name }), " from your workspace."] })] }), _jsxs(DialogFooter, { className: "grid grid-cols-2 gap-2 sm:flex-none", children: [_jsx(DialogClose, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Cancel" }) }), _jsx(Button, { variant: "destructive", onClick: () => {
|
|
29
|
+
setConfirmOpen(false);
|
|
30
|
+
data.onDelete?.(data.id);
|
|
31
|
+
}, children: "Remove" })] })] }) })] })) : null, _jsxs("div", { role: "button", tabIndex: 0, "data-testid": "application-node-card", "data-app-name": data.name, onClick: (e) => {
|
|
32
|
+
e.stopPropagation();
|
|
33
|
+
data.onClick?.();
|
|
34
|
+
}, onKeyDown: (e) => {
|
|
35
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
e.stopPropagation();
|
|
38
|
+
data.onClick?.();
|
|
39
|
+
}
|
|
40
|
+
}, className: cn('nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 dark:bg-neutral-800/80', selected && 'border-blue-400 dark:border-amber-500/60'), children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-violet-500", children: _jsx(LayoutGrid, { className: "h-4 w-4 text-white" }) }), _jsx("span", { "data-testid": "application-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("span", { className: "ms-auto flex shrink-0 items-center gap-1.5", children: [_jsx("span", { "data-testid": "application-node-status-dot", className: cn('h-2 w-2 rounded-full', statusDotClass) }), _jsx("span", { "data-testid": "application-node-status-text", className: "text-muted-foreground text-xs", children: data.status })] })] }), _jsx("div", { className: "px-3 pb-2", children: _jsxs("div", { className: "bg-muted h-[120px] overflow-hidden rounded-lg", children: [_jsxs("div", { className: "flex h-6 items-center gap-2 px-2", style: { background: 'var(--muted)' }, children: [_jsx("div", { className: "bg-muted-foreground/10 h-2 w-2 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-2 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-2 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 ms-2 h-2 w-16 rounded" })] }), _jsxs("div", { className: "flex h-[calc(120px-1.5rem)]", children: [_jsxs("div", { className: "border-muted-foreground/5 flex w-[50px] flex-col gap-2 border-e p-2", children: [_jsx("div", { className: "bg-muted-foreground/10 h-2 w-full rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-3/4 rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-full rounded" })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-2 p-3", children: [_jsx("div", { className: "bg-muted-foreground/10 h-2.5 w-2/3 rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-full rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-5/6 rounded" }), _jsx("div", { className: "bg-muted-foreground/10 h-2 w-3/4 rounded" })] })] })] }) }), _jsx("div", { className: "px-4 pb-3", children: _jsx("span", { "data-testid": "application-node-repo-count", className: "text-muted-foreground text-xs", children: repoCountLabel }) })] }), _jsx(Handle, { type: "source", position: sourceHandlePos, isConnectable: false, className: "opacity-0!", style: { top: 70 } })] }));
|
|
41
|
+
}
|