@shepai/cli 1.175.0 → 1.175.1-pr536.17338e9
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 +128 -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/application/use-cases/repositories/create-project.use-case.d.ts +32 -0
- package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/repositories/create-project.use-case.js +120 -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 +37 -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/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +44 -4
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
- 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 +70 -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 +189 -118
- 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 +43 -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/welcome-agent-setup.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +2 -2
- 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 +6 -1
- package/dist/translations/de/web.json +6 -1
- package/dist/translations/en/web.json +6 -1
- package/dist/translations/es/web.json +6 -1
- package/dist/translations/fr/web.json +6 -1
- package/dist/translations/he/web.json +6 -1
- package/dist/translations/pt/web.json +6 -1
- package/dist/translations/ru/web.json +6 -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 +94 -79
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -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 +90 -75
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +3 -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 +96 -81
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +112 -97
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -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 +112 -97
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +92 -77
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +3 -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 +92 -77
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +90 -75
- package/web/.next/server/app/(dashboard)/chat/page.js +3 -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 +96 -81
- package/web/.next/server/app/(dashboard)/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +112 -97
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -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 +112 -97
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +90 -75
- package/web/.next/server/app/(dashboard)/page.js +3 -3
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +92 -77
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +3 -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 +92 -77
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/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_c4b92435.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_c4b92435.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_e4478080.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_e4478080.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_9b144ef8.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_9b144ef8.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]__51ec77a8._.js → [root-of-the-server]__234748ae._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__aa72e794._.js.map → [root-of-the-server]__234748ae._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js → [root-of-the-server]__2a2005ad._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__a932cd3a._.js.map → [root-of-the-server]__2a2005ad._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__22d17c66._.js → [root-of-the-server]__3a6d2b30._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3a6d2b30._.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]__a932cd3a._.js → [root-of-the-server]__5d481a91._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__51ec77a8._.js.map → [root-of-the-server]__5d481a91._.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]__7528eb6f._.js +1 -1
- 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]__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]__aa72e794._.js → [root-of-the-server]__e7504e4a._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__66047a1b._.js.map → [root-of-the-server]__e7504e4a._.js.map} +1 -1
- 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/_6f66d7ac._.js +3 -0
- package/web/.next/server/chunks/ssr/_6f66d7ac._.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/{_af6b8b94._.js → _946a7fc6._.js} +3 -3
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js → _a0ddd745._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_e0dd6fcf._.js.map → _a0ddd745._.js.map} +1 -1
- 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/{_4cbb7f95._.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/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_139547d4._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_139547d4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5b7ef96a._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_807cba76._.js.map → src_presentation_web_5b7ef96a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5f6f6651._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5f6f6651._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_9cd4b94c._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_e3a30e30._.js.map → src_presentation_web_9cd4b94c._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bc9fae39.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bc9fae39.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_app_actions_open-ide_ts_baaca5d5._.js +30 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b3759f18._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_17d39233._.js.map → src_presentation_web_b3759f18._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_bceeb973._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_e1cd1869._.js.map → src_presentation_web_bceeb973._.js.map} +1 -1
- 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 +883 -686
- package/web/.next/static/chunks/0dbc8228223540f0.js +1 -0
- package/web/.next/static/chunks/2090882dcaad5f8f.js +3 -0
- package/web/.next/static/chunks/{238fdbed09dc61b6.js → 288a6a7b2abf36ae.js} +2 -2
- package/web/.next/static/chunks/357c3d4c713a444b.js +1 -0
- package/web/.next/static/chunks/{39054eabee156e55.js → 39cd2f842b9377e5.js} +3 -3
- package/web/.next/static/chunks/{873e837cd1179cdd.js → 4b63765a2c9294db.js} +1 -1
- package/web/.next/static/chunks/67499ef845dda801.js +1 -0
- package/web/.next/static/chunks/{940c842293a6ee9b.js → 6a5b9181d2b5160c.js} +1 -1
- package/web/.next/static/chunks/771b8283dff48366.js +5 -0
- package/web/.next/static/chunks/79f687a9b9f2dca3.js +1 -0
- package/web/.next/static/chunks/7acc65394c377946.js +1 -0
- package/web/.next/static/chunks/{bc41a393614b1192.js → 89a6fefe537cca64.js} +1 -1
- package/web/.next/static/chunks/8da227cb5d5c25b1.js +7 -0
- package/web/.next/static/chunks/90cce661ba250a41.js +1 -0
- package/web/.next/static/chunks/{a22ee308ae1509ca.js → 97a84c58c17399ee.js} +1 -1
- package/web/.next/static/chunks/994f0ac30cd8661a.js +1 -0
- package/web/.next/static/chunks/{09edd35d194bec06.js → bcbae49e0f6d65ca.js} +3 -3
- package/web/.next/static/chunks/bdd3467bb34c2b76.css +1 -0
- package/web/.next/static/chunks/bf5da7f887552cca.js +1 -0
- package/web/.next/static/chunks/c9bd1dea77920749.js +1 -0
- package/web/.next/static/chunks/ce8d4b5094c4dd62.js +1 -0
- package/web/.next/static/chunks/d2f65dc6c7e99186.js +1 -0
- package/web/.next/static/chunks/{2ad924f5ba5ec0a6.js → e9ab2deb269fa340.js} +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +0 -1
- 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.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]__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/_2b021b35._.js +0 -3
- package/web/.next/server/chunks/ssr/_2b021b35._.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/_4cbb7f95._.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/_af6b8b94._.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_17d39233._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.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_e1cd1869._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +0 -3
- package/web/.next/static/chunks/0b07ee72b0c639ef.js +0 -7
- package/web/.next/static/chunks/1b336d1266a0aa3d.js +0 -1
- package/web/.next/static/chunks/28f6b1cab38ab025.js +0 -3
- package/web/.next/static/chunks/46e2693dbc9262fd.js +0 -5
- package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
- package/web/.next/static/chunks/971e52f3f386ccfd.js +0 -1
- package/web/.next/static/chunks/a20f2d6f76f469b7.css +0 -1
- package/web/.next/static/chunks/b2aa69e4b0b032d9.js +0 -1
- package/web/.next/static/chunks/b63e6727c84f30e2.js +0 -1
- package/web/.next/static/chunks/b65e555419a0c664.js +0 -1
- package/web/.next/static/chunks/b7b5d65a5dd2fff1.js +0 -1
- package/web/.next/static/chunks/ba0e0fa2d1a650bb.js +0 -1
- package/web/.next/static/chunks/c10c0d6d458453bc.js +0 -1
- package/web/.next/static/chunks/d26542df5ecc8717.js +0 -1
- /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_buildManifest.js +0 -0
- /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{9rcv3ICw0kZNuv3TVdO8E → GfIqHvmVtZCXK5PAbtkQf}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Application Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements IApplicationRepository using better-sqlite3.
|
|
5
|
+
*/
|
|
6
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
};
|
|
12
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
13
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
14
|
+
};
|
|
15
|
+
import { injectable } from 'tsyringe';
|
|
16
|
+
import { toDatabase, fromDatabase, } from '../persistence/sqlite/mappers/application.mapper.js';
|
|
17
|
+
let SQLiteApplicationRepository = class SQLiteApplicationRepository {
|
|
18
|
+
db;
|
|
19
|
+
constructor(db) {
|
|
20
|
+
this.db = db;
|
|
21
|
+
}
|
|
22
|
+
async create(application) {
|
|
23
|
+
const row = toDatabase(application);
|
|
24
|
+
const stmt = this.db.prepare(`
|
|
25
|
+
INSERT INTO applications (
|
|
26
|
+
id, name, slug, description, repository_path, additional_paths,
|
|
27
|
+
agent_type, model_override, status, created_at, updated_at, deleted_at
|
|
28
|
+
) VALUES (
|
|
29
|
+
@id, @name, @slug, @description, @repository_path, @additional_paths,
|
|
30
|
+
@agent_type, @model_override, @status, @created_at, @updated_at, @deleted_at
|
|
31
|
+
)
|
|
32
|
+
`);
|
|
33
|
+
stmt.run(row);
|
|
34
|
+
}
|
|
35
|
+
async findById(id) {
|
|
36
|
+
const stmt = this.db.prepare('SELECT * FROM applications WHERE id = ? AND deleted_at IS NULL');
|
|
37
|
+
const row = stmt.get(id);
|
|
38
|
+
return row ? fromDatabase(row) : null;
|
|
39
|
+
}
|
|
40
|
+
async findBySlug(slug) {
|
|
41
|
+
const stmt = this.db.prepare('SELECT * FROM applications WHERE slug = ? AND deleted_at IS NULL');
|
|
42
|
+
const row = stmt.get(slug);
|
|
43
|
+
return row ? fromDatabase(row) : null;
|
|
44
|
+
}
|
|
45
|
+
async findByPath(path) {
|
|
46
|
+
const stmt = this.db.prepare("SELECT * FROM applications WHERE REPLACE(repository_path, '\\', '/') = ? AND deleted_at IS NULL");
|
|
47
|
+
const row = stmt.get(path.replace(/\\/g, '/'));
|
|
48
|
+
return row ? fromDatabase(row) : null;
|
|
49
|
+
}
|
|
50
|
+
async list() {
|
|
51
|
+
const stmt = this.db.prepare('SELECT * FROM applications WHERE deleted_at IS NULL ORDER BY created_at ASC');
|
|
52
|
+
const rows = stmt.all();
|
|
53
|
+
return rows.map(fromDatabase);
|
|
54
|
+
}
|
|
55
|
+
async update(id, fields) {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
const setClauses = ['updated_at = ?'];
|
|
58
|
+
const values = [now];
|
|
59
|
+
if (fields.name !== undefined) {
|
|
60
|
+
setClauses.push('name = ?');
|
|
61
|
+
values.push(fields.name);
|
|
62
|
+
}
|
|
63
|
+
if (fields.status !== undefined) {
|
|
64
|
+
setClauses.push('status = ?');
|
|
65
|
+
values.push(fields.status);
|
|
66
|
+
}
|
|
67
|
+
if (fields.additionalPaths !== undefined) {
|
|
68
|
+
setClauses.push('additional_paths = ?');
|
|
69
|
+
values.push(JSON.stringify(fields.additionalPaths));
|
|
70
|
+
}
|
|
71
|
+
if (fields.agentType !== undefined) {
|
|
72
|
+
setClauses.push('agent_type = ?');
|
|
73
|
+
values.push(fields.agentType);
|
|
74
|
+
}
|
|
75
|
+
if (fields.modelOverride !== undefined) {
|
|
76
|
+
setClauses.push('model_override = ?');
|
|
77
|
+
values.push(fields.modelOverride);
|
|
78
|
+
}
|
|
79
|
+
values.push(id);
|
|
80
|
+
const stmt = this.db.prepare(`UPDATE applications SET ${setClauses.join(', ')} WHERE id = ? AND deleted_at IS NULL`);
|
|
81
|
+
stmt.run(...values);
|
|
82
|
+
}
|
|
83
|
+
async softDelete(id) {
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
const stmt = this.db.prepare('UPDATE applications SET deleted_at = ?, updated_at = ? WHERE id = ?');
|
|
86
|
+
stmt.run(now, now, id);
|
|
87
|
+
}
|
|
88
|
+
async restore(id) {
|
|
89
|
+
const now = Date.now();
|
|
90
|
+
const stmt = this.db.prepare('UPDATE applications SET deleted_at = NULL, updated_at = ? WHERE id = ?');
|
|
91
|
+
stmt.run(now, id);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
SQLiteApplicationRepository = __decorate([
|
|
95
|
+
injectable(),
|
|
96
|
+
__metadata("design:paramtypes", [Object])
|
|
97
|
+
], SQLiteApplicationRepository);
|
|
98
|
+
export { SQLiteApplicationRepository };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-interactive-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAI9B,MAAM,wFAAwF,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code-interactive-executor.service.d.ts","sourceRoot":"","sources":["../../../../../../../../../packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,6BAA6B,EAI9B,MAAM,wFAAwF,CAAC;AAsDhG,qBAAa,6BAA8B,YAAW,yBAAyB;IACvE,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAOvF,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,6BAA6B,CAAC;IAOzC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,WAAW;IAqCnB;;;;;;OAMG;YACY,SAAS;IA6BxB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,aAAa;CA4PtB"}
|
|
@@ -39,6 +39,43 @@
|
|
|
39
39
|
import { unstable_v2_createSession, unstable_v2_resumeSession, } from '@anthropic-ai/claude-agent-sdk';
|
|
40
40
|
/** Default model used when options.model is not specified. */
|
|
41
41
|
const DEFAULT_MODEL = 'claude-sonnet-4-6';
|
|
42
|
+
/**
|
|
43
|
+
* All standard Claude Code tool names to auto-allow without permission prompts.
|
|
44
|
+
*
|
|
45
|
+
* The V2 SDK API hardcodes `allowDangerouslySkipPermissions: false`, so
|
|
46
|
+
* `permissionMode: 'bypassPermissions'` does not work. Instead, V2 provides
|
|
47
|
+
* `allowedTools` to pre-approve tools at the CLI level — no callback needed.
|
|
48
|
+
*
|
|
49
|
+
* AskUserQuestion is intentionally excluded: it is intercepted by the
|
|
50
|
+
* `canUseTool` callback so the session service can pause the stream and
|
|
51
|
+
* collect user answers before resuming.
|
|
52
|
+
*/
|
|
53
|
+
const AUTO_ALLOWED_TOOLS = [
|
|
54
|
+
'Bash',
|
|
55
|
+
'Read',
|
|
56
|
+
'Write',
|
|
57
|
+
'Edit',
|
|
58
|
+
'Glob',
|
|
59
|
+
'Grep',
|
|
60
|
+
'LS',
|
|
61
|
+
'Agent',
|
|
62
|
+
'WebFetch',
|
|
63
|
+
'WebSearch',
|
|
64
|
+
'NotebookEdit',
|
|
65
|
+
'NotebookRead',
|
|
66
|
+
'TodoWrite',
|
|
67
|
+
'TaskCreate',
|
|
68
|
+
'TaskGet',
|
|
69
|
+
'TaskList',
|
|
70
|
+
'TaskUpdate',
|
|
71
|
+
'TaskOutput',
|
|
72
|
+
'TaskStop',
|
|
73
|
+
'EnterPlanMode',
|
|
74
|
+
'ExitPlanMode',
|
|
75
|
+
'SendMessage',
|
|
76
|
+
'KillShell',
|
|
77
|
+
'LSP',
|
|
78
|
+
];
|
|
42
79
|
/**
|
|
43
80
|
* Process-level mutex for process.chdir().
|
|
44
81
|
*
|
|
@@ -113,10 +150,13 @@ export class ClaudeCodeInteractiveExecutor {
|
|
|
113
150
|
: undefined;
|
|
114
151
|
return {
|
|
115
152
|
model: options.model ?? DEFAULT_MODEL,
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
|
|
153
|
+
// Auto-allow all standard tools at the CLI level. This replaces the V1
|
|
154
|
+
// bypassPermissions approach — V2 hardcodes allowDangerouslySkipPermissions
|
|
155
|
+
// to false, so bypassPermissions silently falls back to default mode.
|
|
156
|
+
allowedTools: AUTO_ALLOWED_TOOLS,
|
|
157
|
+
// When onUserQuestion is provided, use canUseTool to intercept
|
|
158
|
+
// AskUserQuestion while auto-allowing any unlisted tools as a fallback.
|
|
159
|
+
...(canUseTool ? { canUseTool } : {}),
|
|
120
160
|
env: cleanEnv,
|
|
121
161
|
// Forward system prompt using preset+append pattern
|
|
122
162
|
...(options.systemPrompt && {
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts
CHANGED
|
@@ -89,7 +89,7 @@ export declare function createFeatureAgentGraph(depsOrExecutor: FeatureAgentGrap
|
|
|
89
89
|
ciFixAttempts?: number | undefined;
|
|
90
90
|
ciFixHistory?: import("../../../../domain/index.js").CiFixRecord[] | undefined;
|
|
91
91
|
ciFixStatus?: "success" | "timeout" | "idle" | "watching" | "fixing" | "exhausted" | undefined;
|
|
92
|
-
}, "
|
|
92
|
+
}, "implement" | "__start__" | "analyze" | "requirements" | "research" | "plan" | "validate_spec_analyze" | "validate_spec_requirements" | "validate_research" | "validate_plan_tasks" | "repair_spec_analyze" | "repair_spec_requirements" | "repair_research" | "repair_plan_tasks", {
|
|
93
93
|
featureId: {
|
|
94
94
|
(): import("@langchain/langgraph").LastValue<string>;
|
|
95
95
|
(annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
|
|
@@ -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":"AAIA,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;AAoCD,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,CAsCD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
export async function createProjectAndFeature(input) {
|
|
38
|
+
const { description, attachments, agentType, model } = input;
|
|
39
|
+
if (!description?.trim()) {
|
|
40
|
+
return { error: 'Description is required' };
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const createProject = resolve('CreateProjectUseCase');
|
|
44
|
+
const { repository, projectPath } = await createProject.execute({
|
|
45
|
+
description: description.trim(),
|
|
46
|
+
});
|
|
47
|
+
// Enrich the user's prompt with project-quality instructions
|
|
48
|
+
const enrichedDescription = PROJECT_PREAMBLE + description.trim();
|
|
49
|
+
const featureResult = await createFeature({
|
|
50
|
+
description: enrichedDescription,
|
|
51
|
+
repositoryPath: projectPath,
|
|
52
|
+
attachments,
|
|
53
|
+
agentType,
|
|
54
|
+
model,
|
|
55
|
+
fast: input.fast,
|
|
56
|
+
});
|
|
57
|
+
if (featureResult.error) {
|
|
58
|
+
return { error: featureResult.error };
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
feature: featureResult.feature,
|
|
62
|
+
repository,
|
|
63
|
+
repositoryPath: projectPath,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = error instanceof Error ? error.message : 'Failed to create project';
|
|
68
|
+
return { error: message };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -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
|
+
}
|
package/dist/src/presentation/web/components/common/application-node/application-node.stories.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import type { ApplicationNodeData } from './application-node-config.js';
|
|
3
|
+
declare const meta: Meta<ApplicationNodeData>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<ApplicationNodeData>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Active: Story;
|
|
8
|
+
export declare const Error: Story;
|
|
9
|
+
export declare const WithDeleteButton: Story;
|
|
10
|
+
export declare const LongName: Story;
|
|
11
|
+
export declare const Multiple: Story;
|
|
12
|
+
//# sourceMappingURL=application-node.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/application-node/application-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AAgC1F,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAcnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAE3C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAKpB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAqCF,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAC"}
|