@shepai/cli 1.182.0 → 1.182.1-pr550.9abbae3
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 +7 -0
- package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +8 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +3 -3
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +13 -21
- package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts +19 -3
- package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.js +37 -4
- package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.d.ts +30 -0
- package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.js +122 -0
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +13 -1
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +44 -5
- package/dist/packages/core/src/domain/generated/output.d.ts +8 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +5 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.js +10 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.d.ts +5 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.js +10 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +10 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +11 -6
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.js +2 -2
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -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 +18 -2
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts +16 -5
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.js +38 -7
- package/dist/src/presentation/web/app/api/applications/[id]/resume/route.d.ts +20 -0
- package/dist/src/presentation/web/app/api/applications/[id]/resume/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/[id]/resume/route.js +25 -0
- package/dist/src/presentation/web/app/api/applications/[id]/route.d.ts +19 -0
- package/dist/src/presentation/web/app/api/applications/[id]/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/[id]/route.js +46 -0
- package/dist/src/presentation/web/app/api/applications/route.d.ts +9 -0
- package/dist/src/presentation/web/app/api/applications/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/route.js +20 -0
- package/dist/src/presentation/web/app/application/[id]/page.d.ts +4 -4
- package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/application/[id]/page.js +2 -61
- package/dist/src/presentation/web/app/applications/page.d.ts +2 -0
- package/dist/src/presentation/web/app/applications/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/applications/page.js +5 -0
- package/dist/src/presentation/web/components/assistant-ui/thread.js +2 -2
- package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/application-node/application-node.js +3 -37
- package/dist/src/presentation/web/components/features/application-page/application-page-loader.d.ts +4 -0
- package/dist/src/presentation/web/components/features/application-page/application-page-loader.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/application-page-loader.js +47 -0
- package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/application-page/application-page.js +75 -54
- package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +1 -0
- package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts +3 -1
- package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/application-page/run-dev-button.js +6 -2
- package/dist/src/presentation/web/components/features/applications/application-card.d.ts +7 -0
- package/dist/src/presentation/web/components/features/applications/application-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/applications/application-card.js +82 -0
- package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts +13 -0
- package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/applications/application-card.stories.js +69 -0
- package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts +5 -0
- package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/applications/applications-page-client.js +28 -0
- package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.js +93 -0
- package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts +3 -1
- package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatComposer.js +2 -2
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +3 -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 +4 -3
- package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts +6 -1
- package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/StepTracker.js +23 -20
- 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 +3 -2
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +3 -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 -2
- package/dist/src/presentation/web/components/features/settings/language-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/language-settings-section.js +1 -0
- package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.js +5 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +23 -3
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/lib/derive-app-status.d.ts +23 -0
- package/dist/src/presentation/web/lib/derive-app-status.d.ts.map +1 -0
- package/dist/src/presentation/web/lib/derive-app-status.js +89 -0
- package/dist/src/presentation/web/lib/i18n.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/i18n.js +3 -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 +4 -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 +28 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +32 -32
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +5 -5
- 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 +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +5 -5
- 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 +33 -33
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +5 -5
- 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 +41 -41
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +5 -5
- 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 +41 -41
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +5 -5
- 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 +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +5 -5
- 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 +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +5 -5
- 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 +30 -30
- package/web/.next/server/app/(dashboard)/chat/page.js +5 -5
- 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 +33 -33
- package/web/.next/server/app/(dashboard)/create/page.js +5 -5
- 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 +41 -41
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +5 -5
- 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 +41 -41
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +5 -5
- 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 +30 -30
- package/web/.next/server/app/(dashboard)/page.js +5 -5
- 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 +31 -31
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +5 -5
- 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 +31 -31
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +5 -5
- 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 +7 -7
- package/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/applications/[id]/resume/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/[id]/resume/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/[id]/resume/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/[id]/resume/route.js +7 -0
- package/web/.next/server/app/api/applications/[id]/resume/route.js.map +5 -0
- package/web/.next/server/app/api/applications/[id]/resume/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/[id]/resume/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/applications/[id]/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/[id]/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/[id]/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/[id]/route.js +7 -0
- package/web/.next/server/app/api/applications/[id]/route.js.map +5 -0
- package/web/.next/server/app/api/applications/[id]/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/[id]/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/applications/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/route.js +7 -0
- package/web/.next/server/app/api/applications/route.js.map +5 -0
- package/web/.next/server/app/api/applications/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/attachments/preview/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/server-reference-manifest.json +45 -30
- package/web/.next/server/app/application/[id]/page.js +3 -3
- package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
- package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/applications/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/applications/page/build-manifest.json +18 -0
- package/web/.next/server/app/applications/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/applications/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/applications/page/server-reference-manifest.json +230 -0
- package/web/.next/server/app/applications/page.js +19 -0
- package/web/.next/server/app/applications/page.js.map +5 -0
- package/web/.next/server/app/applications/page.js.nft.json +1 -0
- package/web/.next/server/app/applications/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/features/page.js +1 -1
- 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 +10 -10
- package/web/.next/server/app/settings/page.js +1 -1
- 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 +15 -15
- package/web/.next/server/app/skills/page.js +1 -1
- 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 +13 -13
- package/web/.next/server/app/tools/page.js +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/version/page.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +4 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_[id]_route_actions_e31b426d.js +3 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_[id]_route_actions_e31b426d.js.map +1 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_route_actions_2b7d20d0.js +3 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_route_actions_2b7d20d0.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__3bb635e8._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__3bb635e8._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ac0027b4._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__ac0027b4._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ce82df38._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__ce82df38._.js.map +1 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_resume_route_actions_3a66d646.js +3 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_resume_route_actions_3a66d646.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.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/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04f4895b._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04f4895b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__347fd0f6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__347fd0f6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__46dd2baf._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__46dd2baf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__73cb4ff6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__73cb4ff6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__87bc4dac._.js → [root-of-the-server]__86ff0bc5._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__91c50abe._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__91c50abe._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a48af49f._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a48af49f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d5e22d1a._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__7aa484f5._.js.map → [root-of-the-server]__d5e22d1a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0aa2bcb._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e0aa2bcb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e265da61._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js +12 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f5614810._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__090f24cb._.js.map → [root-of-the-server]__f5614810._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fe5db6b2._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fe5db6b2._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0f9d0acd._.js +3 -0
- package/web/.next/server/chunks/ssr/_0f9d0acd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_177d29c6._.js → _17af2817._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_177d29c6._.js.map → _17af2817._.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/_29b8ed64._.js +3 -0
- package/web/.next/server/chunks/ssr/_29b8ed64._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_2bc302d1._.js +3 -0
- package/web/.next/server/chunks/ssr/_2bc302d1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_3683083e._.js +3 -0
- package/web/.next/server/chunks/ssr/_3683083e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_4b57bcc3._.js +9 -0
- package/web/.next/server/chunks/ssr/_4b57bcc3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_519d77a9._.js +3 -0
- package/web/.next/server/chunks/ssr/_519d77a9._.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/{_503102fc._.js → _58b8982b._.js} +2 -2
- package/web/.next/server/chunks/ssr/_58b8982b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7e5e3270._.js +3 -0
- package/web/.next/server/chunks/ssr/_7e5e3270._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8c3086bf._.js +3 -0
- package/web/.next/server/chunks/ssr/_8c3086bf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9173e475._.js +21 -0
- package/web/.next/server/chunks/ssr/_9173e475._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_946a7fc6._.js +1 -1
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_b4cc51d4._.js +3 -0
- package/web/.next/server/chunks/ssr/_b4cc51d4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b5093a26._.js +3 -0
- package/web/.next/server/chunks/ssr/_b5093a26._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_bc03ac82._.js +4 -0
- package/web/.next/server/chunks/ssr/_bc03ac82._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e65abbd1._.js +3 -0
- package/web/.next/server/chunks/ssr/_e65abbd1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f20557ff._.js +3 -0
- package/web/.next/server/chunks/ssr/_f20557ff._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.js +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/node_modules__pnpm_28a53b5d._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_28a53b5d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js +32 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js +32 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js.map +1 -0
- 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_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.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/src_presentation_web_components_ui_dropdown-menu_tsx_229332e3._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_dropdown-menu_tsx_229332e3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/translations_1562ae1a._.js +3 -0
- package/web/.next/server/chunks/ssr/translations_1562ae1a._.js.map +1 -0
- 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 +184 -72
- package/web/.next/static/chunks/{b4aa3a83f2451e07.js → 05becd66afb22d37.js} +1 -1
- package/web/.next/static/chunks/1bd2a325f95d3211.js +2 -0
- package/web/.next/static/chunks/2cbe80f8e84d59a8.js +1 -0
- package/web/.next/static/chunks/37e434e579ecfa02.js +1 -0
- package/web/.next/static/chunks/3aaae7ceefe72828.js +7 -0
- package/web/.next/static/chunks/3d1543ff12dfaff1.js +1 -0
- package/web/.next/static/chunks/{ac22076c64634ac1.js → 4b8bedfda131650a.js} +1 -1
- package/web/.next/static/chunks/{83fc7ea32e18c9a5.js → 4ea617a22e21fb04.js} +1 -1
- package/web/.next/static/chunks/53f12c1844f881af.js +1 -0
- package/web/.next/static/chunks/5795b9f399523c9e.js +1 -0
- package/web/.next/static/chunks/{2fe20598e1b4793a.js → 6b2859ea368e7df3.js} +3 -3
- package/web/.next/static/chunks/71c7fe96accaab17.js +19 -0
- package/web/.next/static/chunks/792fffaa4af33248.js +1 -0
- package/web/.next/static/chunks/{87a0df5389e06641.js → 7b6c91400184cb4d.js} +1 -1
- package/web/.next/static/chunks/83ba6946af31cdc4.js +3 -0
- package/web/.next/static/chunks/897771202f55ecfe.js +1 -0
- package/web/.next/static/chunks/9d9bf7403612ae86.js +1 -0
- package/web/.next/static/chunks/{be2e80436bc15812.js → a9d2a436d682fded.js} +3 -3
- package/web/.next/static/chunks/adf16efe8bac05e9.css +1 -0
- package/web/.next/static/chunks/{ceff12f8a2e5bc08.js → ae2fcb50ea0d8652.js} +1 -1
- package/web/.next/static/chunks/b0474319e5a50043.js +1 -0
- package/web/.next/static/chunks/b85532fb1545927c.js +5 -0
- package/web/.next/static/chunks/{33dc7a1041f4ab64.js → b8acda37576199f1.js} +1 -1
- package/web/.next/static/chunks/c788a245f6898401.js +1 -0
- package/web/.next/static/chunks/d0bcde99ca2878d1.js +1 -0
- package/web/.next/static/chunks/{de7de1db2a8788dd.js → ed714d3a13ff6c16.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__090f24cb._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js +0 -12
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7aa484f5._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87bc4dac._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0277d3b5._.js +0 -21
- package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_21cc662b._.js +0 -3
- package/web/.next/server/chunks/ssr/_21cc662b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_44531b76._.js +0 -9
- package/web/.next/server/chunks/ssr/_44531b76._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_503102fc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_575fe3ee._.js +0 -3
- package/web/.next/server/chunks/ssr/_575fe3ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_869a3a15._.js +0 -3
- package/web/.next/server/chunks/ssr/_869a3a15._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a7184dfa._.js +0 -3
- package/web/.next/server/chunks/ssr/_a7184dfa._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b227ff50._.js +0 -3
- package/web/.next/server/chunks/ssr/_b227ff50._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e071ba48._.js +0 -3
- package/web/.next/server/chunks/ssr/_e071ba48._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_eff1b518._.js +0 -3
- package/web/.next/server/chunks/ssr/_eff1b518._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f227429a._.js +0 -3
- package/web/.next/server/chunks/ssr/_f227429a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +0 -32
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js.map +0 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +0 -3
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +0 -1
- package/web/.next/static/chunks/06b9d6dbf635c370.css +0 -1
- package/web/.next/static/chunks/1ae0cf5be30ef398.js +0 -1
- package/web/.next/static/chunks/2424ab50273fe1d9.js +0 -7
- package/web/.next/static/chunks/6afd16b2fe544054.js +0 -2
- package/web/.next/static/chunks/7604027076448f2b.js +0 -19
- package/web/.next/static/chunks/8c9016ab8c1f6204.js +0 -1
- package/web/.next/static/chunks/927442d2628f6e22.js +0 -1
- package/web/.next/static/chunks/94e8559ae19a16e1.js +0 -1
- package/web/.next/static/chunks/a0cfca1e5fd467e9.js +0 -1
- package/web/.next/static/chunks/a2531137c7d36d54.js +0 -7
- package/web/.next/static/chunks/b87904ecdddde972.js +0 -1
- package/web/.next/static/chunks/b99506a6f7bc2fa8.js +0 -1
- package/web/.next/static/chunks/e4f0ca20b62bd66f.js +0 -1
- /package/web/.next/static/{EVCmRtpgNX9ebXGb-bV1G → tAvYhk4e_F_yStLz4wtDg}/_buildManifest.js +0 -0
- /package/web/.next/static/{EVCmRtpgNX9ebXGb-bV1G → tAvYhk4e_F_yStLz4wtDg}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{EVCmRtpgNX9ebXGb-bV1G → tAvYhk4e_F_yStLz4wtDg}/_ssgManifest.js +0 -0
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
-
import { useRouter } from 'next/navigation';
|
|
5
4
|
import { useQuery } from '@tanstack/react-query';
|
|
6
5
|
import { toast } from 'sonner';
|
|
7
|
-
import {
|
|
6
|
+
import { LayoutGrid, GitBranch, Copy, FolderOpen, ClipboardList, Cpu, FilePlus, FilePen, Trash2, } from 'lucide-react';
|
|
7
|
+
import { useRouter } from 'next/navigation';
|
|
8
8
|
import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
9
9
|
import { cn } from '../../../lib/utils.js';
|
|
10
10
|
import { Button } from '../../ui/button.js';
|
|
11
|
+
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
|
|
12
|
+
import { deleteApplication } from '../../../app/actions/delete-application.js';
|
|
11
13
|
import { ChatTab } from '../../features/chat/ChatTab.js';
|
|
12
14
|
import { APPLICATION_CREATION_PLACEHOLDER_STEPS } from '../../features/chat/workflow-placeholder.js';
|
|
13
15
|
import { TerminalTab } from '../../features/application-page/terminal-tab.js';
|
|
@@ -16,6 +18,7 @@ import { RunDevButton } from '../../features/application-page/run-dev-button.js'
|
|
|
16
18
|
import { WebPreviewTab } from '../../features/application-page/web-preview-tab.js';
|
|
17
19
|
import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
18
20
|
import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
|
|
21
|
+
import { deriveAppLiveStatus } from '../../../lib/derive-app-status.js';
|
|
19
22
|
import { chatQueryKey, fetchChatState } from '../../features/chat/chat-state-query.js';
|
|
20
23
|
import { openFolder } from '../../../app/actions/open-folder.js';
|
|
21
24
|
import { getApplicationDebugPrompt } from '../../../app/actions/get-application-debug-prompt.js';
|
|
@@ -35,35 +38,8 @@ const VIEW_LABELS = {
|
|
|
35
38
|
terminal: 'Terminal',
|
|
36
39
|
web: 'Web',
|
|
37
40
|
};
|
|
38
|
-
|
|
39
|
-
*
|
|
40
|
-
* never shown. MUST match the priority order in
|
|
41
|
-
* `components/common/application-node/application-node.tsx` so the
|
|
42
|
-
* canvas card and the application page agree on every parameter.
|
|
43
|
-
*
|
|
44
|
-
* Priority (highest wins):
|
|
45
|
-
*
|
|
46
|
-
* - `processing` → "In Progress" (agent actively running a turn)
|
|
47
|
-
* - `awaiting_input` → "Warning" (agent blocked on user question)
|
|
48
|
-
* - deployReady → "Live" (dev server running at a real URL)
|
|
49
|
-
* - persisted Error → "Error"
|
|
50
|
-
* - otherwise → "Ready" (agent finished, preview not running)
|
|
51
|
-
*/
|
|
52
|
-
function deriveLiveStatusPill(persistedStatus, turnStatus, deployReady) {
|
|
53
|
-
if (turnStatus === 'processing') {
|
|
54
|
-
return { label: 'In Progress', dotClass: 'bg-violet-500', pulse: true };
|
|
55
|
-
}
|
|
56
|
-
if (turnStatus === 'awaiting_input') {
|
|
57
|
-
return { label: 'Warning', dotClass: 'bg-amber-500', pulse: true };
|
|
58
|
-
}
|
|
59
|
-
if (deployReady) {
|
|
60
|
-
return { label: 'Live', dotClass: 'bg-emerald-500', pulse: true };
|
|
61
|
-
}
|
|
62
|
-
if (persistedStatus === 'Error') {
|
|
63
|
-
return { label: 'Error', dotClass: 'bg-red-500', pulse: false };
|
|
64
|
-
}
|
|
65
|
-
return { label: 'Ready', dotClass: 'bg-sky-500', pulse: false };
|
|
66
|
-
}
|
|
41
|
+
/* Status derivation is shared with canvas nodes and application cards
|
|
42
|
+
* via `lib/derive-app-status.ts` — single source of truth. */
|
|
67
43
|
/* ------------------------------------------------------------------ */
|
|
68
44
|
/* Short path helper */
|
|
69
45
|
/* ------------------------------------------------------------------ */
|
|
@@ -73,8 +49,8 @@ function shortPath(path) {
|
|
|
73
49
|
const idx = normalized.lastIndexOf('/');
|
|
74
50
|
return idx === -1 ? normalized : normalized.slice(idx + 1);
|
|
75
51
|
}
|
|
76
|
-
function AppTopBar({ application, activeView, onViewChange,
|
|
77
|
-
return (_jsxs("header", { className: cn('bg-background/95 supports-[backdrop-filter]:bg-background/70 sticky top-0 z-20 flex shrink-0 items-center gap-2 border-b px-3 backdrop-blur', TOP_BAR_HEIGHT_CLASS), children: [_jsx(
|
|
52
|
+
function AppTopBar({ application, activeView, onViewChange, agentRunning, initialChatState, deploy, }) {
|
|
53
|
+
return (_jsxs("header", { className: cn('bg-background/95 supports-[backdrop-filter]:bg-background/70 sticky top-0 z-20 flex shrink-0 items-center gap-2 border-b px-3 backdrop-blur', TOP_BAR_HEIGHT_CLASS), children: [_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-violet-500", children: _jsx(LayoutGrid, { className: "h-3 w-3 text-white" }) }), _jsx("h1", { className: "min-w-0 truncate text-sm font-semibold", children: application.name }), _jsx(StatusPill, { applicationId: application.id, persistedStatus: application.status, deployReady: deploy.status === DeploymentState.Ready }), _jsx(Divider, {}), _jsx(PathCluster, { repositoryPath: application.repositoryPath }), _jsx("div", { className: "flex-1" }), _jsx(SessionChip, { featureId: `app-${application.id}`, initialChatState: initialChatState, persistedSessionId: application.agentSessionId }), _jsx(CopyPromptButton, { applicationId: application.id }), _jsx(DeleteButton, { applicationId: application.id, applicationName: application.name }), _jsx(RunDevButton, { deploy: deploy, disabled: agentRunning }), _jsx(ViewSwitcher, { active: activeView, onChange: onViewChange, disabledTabs: agentRunning ? ['web'] : [] })] }));
|
|
78
54
|
}
|
|
79
55
|
/* ------------------------------------------------------------------ */
|
|
80
56
|
/* Path cluster — short path + copy + open-in-file-manager */
|
|
@@ -135,12 +111,7 @@ function GitStatusCluster({ repositoryPath }) {
|
|
|
135
111
|
/* ------------------------------------------------------------------ */
|
|
136
112
|
/* Session chip — model + short session id, live via shared query */
|
|
137
113
|
/* ------------------------------------------------------------------ */
|
|
138
|
-
function SessionChip({ featureId, initialChatState, }) {
|
|
139
|
-
// Reads from the SAME TanStack Query cache entry the chat tab uses.
|
|
140
|
-
// The `message`/`session_status`/`turn_status` SSE events inside
|
|
141
|
-
// ChatTab's useChatRuntime mutate this cache directly, so the chip
|
|
142
|
-
// updates live as the session transitions booting → ready and the
|
|
143
|
-
// SDK reports back its assigned session id.
|
|
114
|
+
function SessionChip({ featureId, initialChatState, persistedSessionId, }) {
|
|
144
115
|
const { data: chatState } = useQuery({
|
|
145
116
|
queryKey: chatQueryKey(featureId),
|
|
146
117
|
queryFn: () => fetchChatState(featureId),
|
|
@@ -150,7 +121,9 @@ function SessionChip({ featureId, initialChatState, }) {
|
|
|
150
121
|
refetchOnReconnect: false,
|
|
151
122
|
});
|
|
152
123
|
const sessionInfo = chatState?.sessionInfo;
|
|
153
|
-
|
|
124
|
+
// Prefer the persisted ID from the Application entity (always available),
|
|
125
|
+
// fall back to the live session info (only available while session is active).
|
|
126
|
+
const sessionId = persistedSessionId ?? sessionInfo?.sessionId ?? null;
|
|
154
127
|
const model = sessionInfo?.model ?? null;
|
|
155
128
|
const shortId = sessionId ? sessionId.slice(0, 8) : null;
|
|
156
129
|
const handleCopy = useCallback(async () => {
|
|
@@ -201,6 +174,21 @@ function CopyPromptButton({ applicationId }) {
|
|
|
201
174
|
}, [applicationId, busy]);
|
|
202
175
|
return (_jsx(Button, { variant: "ghost", size: "icon", onClick: handleClick, disabled: busy, className: "text-muted-foreground hover:text-foreground h-7 w-7", "aria-label": "Copy full generated prompt (debug)", title: "Copy full generated prompt (debug) \u2014 system + user message", children: _jsx(ClipboardList, { className: "h-3.5 w-3.5" }) }));
|
|
203
176
|
}
|
|
177
|
+
function DeleteButton({ applicationId, applicationName, }) {
|
|
178
|
+
const router = useRouter();
|
|
179
|
+
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
180
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: () => setConfirmOpen(true), className: "text-muted-foreground hover:text-destructive h-7 w-7", "aria-label": "Delete application", title: "Delete application", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-xs", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Delete application?" }), _jsxs(DialogDescription, { children: ["This will permanently remove ", _jsx("strong", { children: applicationName }), "."] })] }), _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: async () => {
|
|
181
|
+
setConfirmOpen(false);
|
|
182
|
+
const result = await deleteApplication(applicationId);
|
|
183
|
+
if (result.error) {
|
|
184
|
+
toast.error('Failed to delete', { description: result.error });
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
toast.success('Application deleted');
|
|
188
|
+
router.push('/applications');
|
|
189
|
+
}
|
|
190
|
+
}, children: "Delete" })] })] }) })] }));
|
|
191
|
+
}
|
|
204
192
|
function StatusPill({ applicationId, persistedStatus, deployReady, }) {
|
|
205
193
|
// Read live turn status from the global SSE subscription and fold
|
|
206
194
|
// it PLUS the dev-server deploy state onto the persisted status so
|
|
@@ -208,18 +196,19 @@ function StatusPill({ applicationId, persistedStatus, deployReady, }) {
|
|
|
208
196
|
// "Unread" / "Live") instead of being stuck at the coarse DB
|
|
209
197
|
// snapshot which almost always reads "Idle".
|
|
210
198
|
const turnStatus = useTurnStatus(`app-${applicationId}`);
|
|
211
|
-
const live =
|
|
199
|
+
const live = deriveAppLiveStatus(persistedStatus, turnStatus, deployReady);
|
|
212
200
|
return (_jsxs("span", { className: "border-border/60 inline-flex h-5 shrink-0 items-center gap-1 rounded-full border px-2 text-[10px] font-medium tracking-wide uppercase", children: [_jsx("span", { className: cn('relative flex h-1.5 w-1.5 items-center justify-center rounded-full', live.dotClass), children: live.pulse ? (_jsx("span", { className: cn('absolute inline-flex h-full w-full animate-ping rounded-full opacity-60', live.dotClass) })) : null }), live.label] }));
|
|
213
201
|
}
|
|
214
202
|
function Divider() {
|
|
215
203
|
return _jsx("span", { className: "bg-border/60 mx-1 h-4 w-px shrink-0" });
|
|
216
204
|
}
|
|
217
|
-
function ViewSwitcher({ active, onChange, }) {
|
|
205
|
+
function ViewSwitcher({ active, onChange, disabledTabs = [], }) {
|
|
218
206
|
return (_jsx("div", { role: "tablist", "aria-label": "Right pane view", className: "bg-muted/60 flex items-center rounded-md p-0.5", children: VIEW_TABS.map((v) => {
|
|
219
207
|
const selected = v === active;
|
|
220
|
-
|
|
208
|
+
const disabled = disabledTabs.includes(v);
|
|
209
|
+
return (_jsx("button", { type: "button", role: "tab", "aria-selected": selected, "aria-disabled": disabled, disabled: disabled, onClick: () => onChange(v), className: cn('h-6 rounded-sm px-2.5 text-[11px] font-medium transition-colors', disabled ? 'text-muted-foreground/40 cursor-not-allowed' : 'cursor-pointer', !disabled && selected
|
|
221
210
|
? 'bg-background text-foreground shadow-sm'
|
|
222
|
-
: 'text-muted-foreground hover:text-foreground'), children: VIEW_LABELS[v] }, v));
|
|
211
|
+
: !disabled && 'text-muted-foreground hover:text-foreground'), children: VIEW_LABELS[v] }, v));
|
|
223
212
|
}) }));
|
|
224
213
|
}
|
|
225
214
|
/* ------------------------------------------------------------------ */
|
|
@@ -271,7 +260,6 @@ function ViewBody({ activeView, applicationId, terminalCwd, deploy, }) {
|
|
|
271
260
|
return (_jsxs("div", { className: "relative flex min-h-0 flex-1", children: [_jsx("div", { className: cn('absolute inset-0 flex min-h-0 flex-col', activeView === 'terminal' ? 'visible' : 'pointer-events-none invisible'), "aria-hidden": activeView !== 'terminal', children: _jsx(TerminalTab, { cwd: terminalCwd }) }), _jsx("div", { className: cn('absolute inset-0 flex min-h-0 flex-col', activeView === 'ide' ? 'visible' : 'pointer-events-none invisible'), "aria-hidden": activeView !== 'ide', children: _jsx(IdeTab, { applicationId: applicationId }) }), hasWebContent ? (_jsx("div", { className: cn('absolute inset-0 flex min-h-0 flex-col', activeView === 'web' ? 'visible' : 'pointer-events-none invisible'), "aria-hidden": activeView !== 'web', children: _jsx(WebPreviewTab, { deploy: deploy }) })) : (activeView === 'web' && _jsx(WebPreviewTab, { deploy: deploy }))] }));
|
|
272
261
|
}
|
|
273
262
|
export function ApplicationPage({ application, initialChatState }) {
|
|
274
|
-
const router = useRouter();
|
|
275
263
|
const [activeView, setActiveView] = useState('ide');
|
|
276
264
|
// Hoisted dev-server state — subscribes to the shared
|
|
277
265
|
// DeploymentStatusProvider scoped to this application's id. The server
|
|
@@ -285,6 +273,39 @@ export function ApplicationPage({ application, initialChatState }) {
|
|
|
285
273
|
targetType: 'application',
|
|
286
274
|
repositoryPath: application.repositoryPath,
|
|
287
275
|
});
|
|
276
|
+
// ── Agent-running detection ────────────────────────────────
|
|
277
|
+
// While the agent is processing, the dev server is likely being
|
|
278
|
+
// modified — disable preview and auto-restart when done.
|
|
279
|
+
const turnStatus = useTurnStatus(`app-${application.id}`);
|
|
280
|
+
const agentRunning = turnStatus === 'processing';
|
|
281
|
+
const prevAgentRunningRef = useRef(false);
|
|
282
|
+
// Track whether the dev server was running before the agent started,
|
|
283
|
+
// so we only restart it (not cold-start) after the agent finishes.
|
|
284
|
+
const wasRunningBeforeAgentRef = useRef(false);
|
|
285
|
+
useEffect(() => {
|
|
286
|
+
const wasRunning = prevAgentRunningRef.current;
|
|
287
|
+
prevAgentRunningRef.current = agentRunning;
|
|
288
|
+
if (agentRunning && !wasRunning) {
|
|
289
|
+
// Agent just started — stop the dev server if running, remember
|
|
290
|
+
// that it was running so we can restart after.
|
|
291
|
+
if (deploy.status === DeploymentState.Ready || deploy.status === DeploymentState.Booting) {
|
|
292
|
+
wasRunningBeforeAgentRef.current = true;
|
|
293
|
+
void deploy.stop();
|
|
294
|
+
}
|
|
295
|
+
// Switch away from web tab while agent works
|
|
296
|
+
if (activeView === 'web') {
|
|
297
|
+
setActiveView('ide');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (!agentRunning && wasRunning) {
|
|
301
|
+
// Agent just finished — restart the dev server if it was
|
|
302
|
+
// previously running.
|
|
303
|
+
if (wasRunningBeforeAgentRef.current) {
|
|
304
|
+
wasRunningBeforeAgentRef.current = false;
|
|
305
|
+
void deploy.deploy();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}, [agentRunning, deploy, activeView]);
|
|
288
309
|
// When the dev server transitions to Ready, auto-switch the right
|
|
289
310
|
// pane to the Web tab the first time it happens so the user
|
|
290
311
|
// immediately sees their app without an extra click. Only triggers
|
|
@@ -299,15 +320,15 @@ export function ApplicationPage({ application, initialChatState }) {
|
|
|
299
320
|
hasAutoSwitchedRef.current = false;
|
|
300
321
|
}
|
|
301
322
|
}, [deploy.status, deploy.url]);
|
|
302
|
-
//
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
323
|
+
// Prevent switching to web tab while agent is running
|
|
324
|
+
const handleViewChange = useCallback((view) => {
|
|
325
|
+
if (view === 'web' && agentRunning)
|
|
326
|
+
return;
|
|
327
|
+
setActiveView(view);
|
|
328
|
+
}, [agentRunning]);
|
|
329
|
+
return (_jsxs("div", { className: "bg-background flex h-dvh flex-col", children: [_jsx(AppTopBar, { application: application, activeView: activeView, onViewChange: handleViewChange, agentRunning: agentRunning, initialChatState: initialChatState, deploy: deploy }), _jsx(ResizableSplit, { left: _jsx(ChatTab, { featureId: `app-${application.id}`, worktreePath: application.repositoryPath, initialAgent: application.agentType, initialModel: application.modelOverride, initialChatState: initialChatState, hideHeader: true, workflowPlaceholder: APPLICATION_CREATION_PLACEHOLDER_STEPS, onResumeWorkflow: () => {
|
|
330
|
+
void fetch(`/api/applications/${application.id}/resume`, { method: 'POST' });
|
|
331
|
+
}, onAllStepsComplete: () => {
|
|
311
332
|
// Kick off the dev server as soon as the agent has
|
|
312
333
|
// finished the scaffold workflow. The Idle→Ready
|
|
313
334
|
// transition in the deploy hook then auto-switches
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application-page.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"application-page.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/application-page.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAiBrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAOtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAWpB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAWxB,CAAC"}
|
|
@@ -2,6 +2,8 @@ import type { DeployActionState } from '../../../hooks/use-deploy-action.js';
|
|
|
2
2
|
export interface RunDevButtonProps {
|
|
3
3
|
deploy: DeployActionState;
|
|
4
4
|
className?: string;
|
|
5
|
+
/** When true the button is grayed out and non-interactive (e.g. agent is running). */
|
|
6
|
+
disabled?: boolean;
|
|
5
7
|
/**
|
|
6
8
|
* Visual density of the Ready state.
|
|
7
9
|
*
|
|
@@ -15,5 +17,5 @@ export interface RunDevButtonProps {
|
|
|
15
17
|
*/
|
|
16
18
|
variant?: 'full' | 'compact';
|
|
17
19
|
}
|
|
18
|
-
export declare function RunDevButton({ deploy, className, variant }: RunDevButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function RunDevButton({ deploy, className, disabled, variant }: RunDevButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
19
21
|
//# sourceMappingURL=run-dev-button.d.ts.map
|
package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-dev-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/run-dev-button.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAgB,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"run-dev-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/application-page/run-dev-button.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAgB,EAAE,EAAE,iBAAiB,2CA+JhG"}
|
|
@@ -33,7 +33,7 @@ import { useCallback } from 'react';
|
|
|
33
33
|
import { Play, Square, Loader2, TriangleAlert, ExternalLink } from 'lucide-react';
|
|
34
34
|
import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
35
35
|
import { cn } from '../../../lib/utils.js';
|
|
36
|
-
export function RunDevButton({ deploy, className, variant = 'full' }) {
|
|
36
|
+
export function RunDevButton({ deploy, className, disabled, variant = 'full' }) {
|
|
37
37
|
const openUrl = useCallback(() => {
|
|
38
38
|
if (deploy.url)
|
|
39
39
|
window.open(deploy.url, '_blank', 'noopener,noreferrer');
|
|
@@ -76,5 +76,9 @@ export function RunDevButton({ deploy, className, variant = 'full' }) {
|
|
|
76
76
|
// ────────────────────────────────────────────────────────────
|
|
77
77
|
// Idle — default "Preview" button (Shep AI purple)
|
|
78
78
|
// ────────────────────────────────────────────────────────────
|
|
79
|
-
return (_jsxs("button", { type: "button", onClick: deploy.deploy, className: cn('inline-flex h-7 shrink-0 items-center gap-1.5 rounded-md border
|
|
79
|
+
return (_jsxs("button", { type: "button", onClick: deploy.deploy, disabled: disabled, className: cn('inline-flex h-7 shrink-0 items-center gap-1.5 rounded-md border px-2.5 text-[11px] font-medium transition-colors', disabled
|
|
80
|
+
? 'border-border bg-muted text-muted-foreground/40 cursor-not-allowed'
|
|
81
|
+
: 'border-violet-500/50 bg-gradient-to-br from-indigo-500/15 to-violet-500/20 text-violet-700 hover:from-indigo-500/25 hover:to-violet-500/30 dark:text-violet-300', className), title: disabled
|
|
82
|
+
? 'Preview disabled while agent is running'
|
|
83
|
+
: 'Install dependencies and preview the app', "aria-label": "Preview app", children: [_jsx(Play, { className: "h-3 w-3 fill-current" }), _jsx("span", { children: "Preview" })] }));
|
|
80
84
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ApplicationWithStatus } from '../../../../../../packages/core/src/application/use-cases/applications/list-applications.use-case.js';
|
|
2
|
+
export interface ApplicationCardProps {
|
|
3
|
+
application: ApplicationWithStatus;
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function ApplicationCard({ application, className }: ApplicationCardProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=application-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-card.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/applications/application-card.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4EAA4E,CAAC;AAExH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,qBAAqB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CA0O/E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useRouter } from 'next/navigation';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { AlertTriangle, ExternalLink, FolderGit2, Globe, LayoutGrid, Loader2, Play, Square, Trash2, TriangleAlert, } from 'lucide-react';
|
|
6
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
7
|
+
import { toast } from 'sonner';
|
|
8
|
+
import { cn } from '../../../lib/utils.js';
|
|
9
|
+
import { Button } from '../../ui/button.js';
|
|
10
|
+
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../ui/dialog.js';
|
|
11
|
+
import { deleteApplication } from '../../../app/actions/delete-application.js';
|
|
12
|
+
import { deriveAppLiveStatus } from '../../../lib/derive-app-status.js';
|
|
13
|
+
import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
|
|
14
|
+
import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
15
|
+
import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
16
|
+
const PREVIEW_HEIGHT_PX = 140;
|
|
17
|
+
export function ApplicationCard({ application, className }) {
|
|
18
|
+
const router = useRouter();
|
|
19
|
+
const queryClient = useQueryClient();
|
|
20
|
+
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
21
|
+
const turnStatus = useTurnStatus(`app-${application.id}`);
|
|
22
|
+
const deploy = useDeployAction({
|
|
23
|
+
targetId: application.id,
|
|
24
|
+
targetType: 'application',
|
|
25
|
+
repositoryPath: application.repositoryPath,
|
|
26
|
+
});
|
|
27
|
+
const effectiveDeploymentUrl = deploy.url;
|
|
28
|
+
const live = deriveAppLiveStatus(application.status, turnStatus, !!effectiveDeploymentUrl, application.effectiveStatus);
|
|
29
|
+
const repoCount = 1 + (application.additionalPaths?.length ?? 0);
|
|
30
|
+
const repoName = application.repositoryPath.split('/').pop() ?? application.repositoryPath;
|
|
31
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "application-card", onClick: () => router.push(`/application/${application.id}`), className: cn('bg-card group relative cursor-pointer overflow-hidden rounded-xl border shadow-sm transition-[border-color,box-shadow] duration-200 hover:shadow-lg dark:bg-neutral-800/80', live.borderClass, className), children: [_jsxs("div", { className: "flex items-center gap-3 px-4 pt-4 pb-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" }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("h3", { "data-testid": "application-card-name", className: "truncate text-sm font-medium", children: application.name }), _jsx("p", { className: "text-muted-foreground mt-0.5 truncate text-[11px]", children: application.description })] }), _jsxs("span", { className: "flex shrink-0 items-center gap-1.5", children: [_jsx("span", { className: cn('relative flex h-2 w-2 items-center justify-center rounded-full', live.dotClass), children: live.pulse ? (_jsx("span", { className: cn('absolute inline-flex h-full w-full animate-ping rounded-full opacity-60', live.dotClass) })) : null }), _jsx("span", { className: "text-muted-foreground text-[10px]", children: live.label })] })] }), _jsx("div", { className: "px-4", children: _jsxs("div", { className: "bg-muted group/preview relative overflow-hidden rounded-lg", style: { height: PREVIEW_HEIGHT_PX }, children: [effectiveDeploymentUrl ? (_jsx("iframe", { src: effectiveDeploymentUrl, title: `${application.name} live preview`, className: "pointer-events-none absolute top-0 left-0 origin-top-left border-0 bg-white", style: { width: '250%', height: '250%', transform: 'scale(0.4)' }, sandbox: "allow-same-origin allow-scripts", loading: "lazy" })) : (_jsx(PreviewPlaceholder, { effectiveStatus: application.effectiveStatus })), deploy.status === DeploymentState.Ready && effectiveDeploymentUrl ? (_jsxs("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-neutral-900/75 opacity-0 transition-opacity duration-150 group-hover/preview:pointer-events-auto group-hover/preview:opacity-100 dark:bg-neutral-950/80", onClick: (e) => e.stopPropagation(), children: [_jsxs("button", { type: "button", onClick: (e) => {
|
|
32
|
+
e.stopPropagation();
|
|
33
|
+
void deploy.stop();
|
|
34
|
+
}, disabled: deploy.stopLoading, className: "inline-flex h-8 cursor-pointer items-center gap-1.5 rounded-md border border-neutral-300 bg-white px-3 text-[11px] font-semibold text-neutral-900 shadow-md transition-colors hover:border-red-500 hover:bg-red-50 hover:text-red-600 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:border-red-500 dark:hover:bg-red-950 dark:hover:text-red-400", children: [deploy.stopLoading ? (_jsx(Loader2, { className: "h-3 w-3 animate-spin" })) : (_jsx(Square, { className: "h-3 w-3 fill-current" })), "Stop"] }), _jsxs("button", { type: "button", onClick: (e) => {
|
|
35
|
+
e.stopPropagation();
|
|
36
|
+
if (effectiveDeploymentUrl) {
|
|
37
|
+
window.open(effectiveDeploymentUrl, '_blank', 'noopener,noreferrer');
|
|
38
|
+
}
|
|
39
|
+
}, className: "inline-flex h-8 cursor-pointer items-center gap-1.5 rounded-md border border-neutral-300 bg-white px-3 text-[11px] font-semibold text-neutral-900 shadow-md transition-colors hover:bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-900 dark:text-neutral-100 dark:hover:bg-neutral-800", children: [_jsx(ExternalLink, { className: "h-3 w-3" }), "Open"] })] })) : null, deploy.status === DeploymentState.Booting || deploy.deployLoading ? (_jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center gap-2 bg-neutral-100 dark:bg-neutral-900", children: [_jsx(Loader2, { className: "h-6 w-6 animate-spin text-amber-500" }), _jsx("span", { className: "text-foreground text-[11px] font-medium", children: "Starting\u2026" })] })) : null, !live.previewDisabled &&
|
|
40
|
+
!effectiveDeploymentUrl &&
|
|
41
|
+
!deploy.deployLoading &&
|
|
42
|
+
deploy.status !== DeploymentState.Booting &&
|
|
43
|
+
!deploy.deployError && (_jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-neutral-900/75 opacity-0 transition-opacity duration-150 group-hover/preview:pointer-events-auto group-hover/preview:opacity-100 dark:bg-neutral-950/80", children: _jsxs("button", { type: "button", onClick: (e) => {
|
|
44
|
+
e.stopPropagation();
|
|
45
|
+
void deploy.deploy();
|
|
46
|
+
}, className: "inline-flex h-8 cursor-pointer items-center gap-2 rounded-md border border-violet-400 bg-gradient-to-br from-indigo-500 to-violet-600 px-4 text-[11px] font-semibold text-white shadow-md transition-[filter] hover:brightness-110", children: [_jsx(Play, { className: "h-3 w-3 fill-current" }), "Start Preview"] }) })), application.effectiveStatus === 'interrupted' && (_jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center bg-amber-950/60 opacity-0 transition-opacity duration-150 group-hover/preview:pointer-events-auto group-hover/preview:opacity-100", children: _jsxs("button", { type: "button", onClick: (e) => {
|
|
47
|
+
e.stopPropagation();
|
|
48
|
+
void fetch(`/api/applications/${application.id}/resume`, { method: 'POST' });
|
|
49
|
+
}, className: "inline-flex h-8 cursor-pointer items-center gap-2 rounded-md border border-amber-400 bg-gradient-to-br from-amber-500 to-orange-500 px-4 text-[11px] font-semibold text-white shadow-md transition-[filter] hover:brightness-110", children: [_jsx(Play, { className: "h-3 w-3 fill-current" }), "Continue Build"] }) })), _jsx("button", { type: "button", onClick: (e) => {
|
|
50
|
+
e.stopPropagation();
|
|
51
|
+
setConfirmOpen(true);
|
|
52
|
+
}, className: "absolute top-1.5 right-1.5 z-20 flex h-6 w-6 cursor-pointer items-center justify-center rounded-md bg-white/80 text-neutral-500 opacity-0 shadow-sm backdrop-blur-sm transition-all group-hover:opacity-100 hover:!bg-red-500 hover:!text-white dark:bg-neutral-800/80 dark:text-neutral-400", "aria-label": `Delete ${application.name}`, title: "Delete application", children: _jsx(Trash2, { className: "h-3 w-3" }) })] }) }), _jsxs("div", { className: "flex items-center justify-between px-4 pt-3 pb-4", children: [_jsxs("span", { className: "text-muted-foreground flex items-center gap-1.5 text-[11px]", children: [_jsx(FolderGit2, { className: "h-3 w-3" }), repoName, repoCount > 1 && _jsxs("span", { className: "text-muted-foreground/60", children: ["+", repoCount - 1] })] }), _jsx("span", { className: "text-muted-foreground/60 text-[10px]", children: new Date(application.createdAt).toLocaleDateString(undefined, {
|
|
53
|
+
month: 'short',
|
|
54
|
+
day: 'numeric',
|
|
55
|
+
}) })] })] }), _jsx(Dialog, { open: confirmOpen, onOpenChange: setConfirmOpen, children: _jsxs(DialogContent, { className: "max-w-xs", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Delete application?" }), _jsxs(DialogDescription, { children: ["This will permanently remove ", _jsx("strong", { children: application.name }), "."] })] }), _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: async () => {
|
|
56
|
+
setConfirmOpen(false);
|
|
57
|
+
const result = await deleteApplication(application.id);
|
|
58
|
+
if (result.error) {
|
|
59
|
+
toast.error('Failed to delete', { description: result.error });
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
toast.success('Application deleted');
|
|
63
|
+
void queryClient.invalidateQueries({ queryKey: ['applications'] });
|
|
64
|
+
}
|
|
65
|
+
}, children: "Delete" })] })] }) })] }));
|
|
66
|
+
}
|
|
67
|
+
/* ------------------------------------------------------------------ */
|
|
68
|
+
/* Preview placeholders per state */
|
|
69
|
+
/* ------------------------------------------------------------------ */
|
|
70
|
+
function PreviewPlaceholder({ effectiveStatus }) {
|
|
71
|
+
if (effectiveStatus === 'failed') {
|
|
72
|
+
return (_jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-2 bg-red-50 dark:bg-red-950/30", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/50", children: _jsx(TriangleAlert, { className: "h-5 w-5 text-red-500" }) }), _jsx("span", { className: "text-[11px] font-medium text-red-600 dark:text-red-400", children: "Build failed" }), _jsx("span", { className: "text-muted-foreground/60 text-[10px]", children: "Open app to retry" })] }));
|
|
73
|
+
}
|
|
74
|
+
if (effectiveStatus === 'interrupted') {
|
|
75
|
+
return (_jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-2 bg-amber-50 dark:bg-amber-950/20", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/40", children: _jsx(AlertTriangle, { className: "h-5 w-5 text-amber-500" }) }), _jsx("span", { className: "text-[11px] font-medium text-amber-600 dark:text-amber-400", children: "Build interrupted" }), _jsx("span", { className: "text-muted-foreground/60 text-[10px]", children: "Open app to continue" })] }));
|
|
76
|
+
}
|
|
77
|
+
if (effectiveStatus === 'building') {
|
|
78
|
+
return (_jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-2", children: [_jsx(Loader2, { className: "h-6 w-6 animate-spin text-violet-500" }), _jsx("span", { className: "text-[11px] font-medium text-violet-600 dark:text-violet-400", children: "Building\u2026" })] }));
|
|
79
|
+
}
|
|
80
|
+
// Ready / offline — clean wireframe with globe icon
|
|
81
|
+
return (_jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center gap-2", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-indigo-500/10 to-violet-500/10", children: _jsx(Globe, { className: "text-muted-foreground/30 h-5 w-5" }) }), _jsxs("div", { className: "absolute inset-0 opacity-30", children: [_jsxs("div", { className: "flex h-5 items-center gap-1.5 px-2", style: { background: 'var(--muted)' }, children: [_jsx("div", { className: "bg-muted-foreground/10 h-1.5 w-1.5 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 h-1.5 w-1.5 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 h-1.5 w-1.5 rounded-full" }), _jsx("div", { className: "bg-muted-foreground/10 ms-1.5 h-1.5 w-12 rounded" })] }), _jsxs("div", { className: "flex h-[calc(100%-1.25rem)]", children: [_jsxs("div", { className: "border-muted-foreground/5 flex w-[40px] flex-col gap-1.5 border-e p-1.5", children: [_jsx("div", { className: "bg-muted-foreground/8 h-1.5 w-full rounded" }), _jsx("div", { className: "bg-muted-foreground/8 h-1.5 w-3/4 rounded" }), _jsx("div", { className: "bg-muted-foreground/8 h-1.5 w-full rounded" })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-1.5 p-2.5", children: [_jsx("div", { className: "bg-muted-foreground/8 h-2 w-2/3 rounded" }), _jsx("div", { className: "bg-muted-foreground/8 h-1.5 w-full rounded" }), _jsx("div", { className: "bg-muted-foreground/8 h-1.5 w-5/6 rounded" }), _jsx("div", { className: "bg-muted-foreground/8 h-1.5 w-3/4 rounded" })] })] })] })] }));
|
|
82
|
+
}
|
package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ApplicationCard } from './application-card.js';
|
|
3
|
+
declare const meta: Meta<typeof ApplicationCard>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Idle: Story;
|
|
7
|
+
export declare const Active: Story;
|
|
8
|
+
export declare const ErrorState: Story;
|
|
9
|
+
export declare const LongDescription: Story;
|
|
10
|
+
export declare const MultipleRepos: Story;
|
|
11
|
+
export declare const Interrupted: Story;
|
|
12
|
+
export declare const Failed: Story;
|
|
13
|
+
//# sourceMappingURL=application-card.stories.d.ts.map
|
package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-card.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/applications/application-card.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAkBrD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAetC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAIpB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAIxB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAS7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAIpB,CAAC"}
|
package/dist/src/presentation/web/components/features/applications/application-card.stories.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ApplicationCard } from './application-card.js';
|
|
3
|
+
import { ApplicationStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
+
const baseApp = {
|
|
5
|
+
id: '550e8400-e29b-41d4-a716-446655440000',
|
|
6
|
+
name: 'My Weather App',
|
|
7
|
+
slug: 'my-weather-app',
|
|
8
|
+
description: 'A weather dashboard that shows real-time forecasts with interactive maps',
|
|
9
|
+
repositoryPath: '/home/user/projects/weather-app',
|
|
10
|
+
additionalPaths: [],
|
|
11
|
+
status: ApplicationStatus.Idle,
|
|
12
|
+
setupComplete: true,
|
|
13
|
+
effectiveStatus: 'ready',
|
|
14
|
+
createdAt: new Date().toISOString(),
|
|
15
|
+
updatedAt: new Date().toISOString(),
|
|
16
|
+
};
|
|
17
|
+
const meta = {
|
|
18
|
+
title: 'Features/ApplicationCard',
|
|
19
|
+
component: ApplicationCard,
|
|
20
|
+
parameters: {
|
|
21
|
+
layout: 'padded',
|
|
22
|
+
backgrounds: { default: 'canvas' },
|
|
23
|
+
},
|
|
24
|
+
decorators: [
|
|
25
|
+
(Story) => (_jsx("div", { style: { maxWidth: 360 }, children: _jsx(Story, {}) })),
|
|
26
|
+
],
|
|
27
|
+
tags: ['autodocs'],
|
|
28
|
+
};
|
|
29
|
+
export default meta;
|
|
30
|
+
export const Idle = {
|
|
31
|
+
args: { application: baseApp },
|
|
32
|
+
};
|
|
33
|
+
export const Active = {
|
|
34
|
+
args: {
|
|
35
|
+
application: { ...baseApp, status: ApplicationStatus.Active, name: 'Running App' },
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export const ErrorState = {
|
|
39
|
+
args: {
|
|
40
|
+
application: { ...baseApp, status: ApplicationStatus.Error, name: 'Broken App' },
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
export const LongDescription = {
|
|
44
|
+
args: {
|
|
45
|
+
application: {
|
|
46
|
+
...baseApp,
|
|
47
|
+
name: 'Enterprise Resource Planning Dashboard',
|
|
48
|
+
description: 'A comprehensive enterprise resource planning system with inventory management, order tracking, customer relationship management, and financial reporting modules.',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
export const MultipleRepos = {
|
|
53
|
+
args: {
|
|
54
|
+
application: {
|
|
55
|
+
...baseApp,
|
|
56
|
+
additionalPaths: ['/home/user/projects/shared-lib', '/home/user/projects/api'],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
export const Interrupted = {
|
|
61
|
+
args: {
|
|
62
|
+
application: { ...baseApp, effectiveStatus: 'interrupted', name: 'Interrupted App' },
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
export const Failed = {
|
|
66
|
+
args: {
|
|
67
|
+
application: { ...baseApp, effectiveStatus: 'failed', name: 'Failed App' },
|
|
68
|
+
},
|
|
69
|
+
};
|
package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applications-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/applications/applications-page-client.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,EAAE,2BAA2B,2CA6FhF"}
|
package/dist/src/presentation/web/components/features/applications/applications-page-client.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useState } from 'react';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { useQuery } from '@tanstack/react-query';
|
|
6
|
+
import { LayoutGrid, Loader2, Plus } from 'lucide-react';
|
|
7
|
+
import { cn } from '../../../lib/utils.js';
|
|
8
|
+
import { DeploymentStatusProvider } from '../../../hooks/deployment-status-provider.js';
|
|
9
|
+
import { ControlCenterEmptyState } from '../../features/control-center/control-center-empty-state.js';
|
|
10
|
+
import { ApplicationCard } from './application-card.js';
|
|
11
|
+
export function ApplicationsPageClient({ className }) {
|
|
12
|
+
const router = useRouter();
|
|
13
|
+
const [showCreatePrompt, setShowCreatePrompt] = useState(false);
|
|
14
|
+
const { data: applications = [], isLoading } = useQuery({
|
|
15
|
+
queryKey: ['applications'],
|
|
16
|
+
queryFn: async () => {
|
|
17
|
+
const res = await fetch('/api/applications');
|
|
18
|
+
if (!res.ok)
|
|
19
|
+
throw new Error('Failed to fetch applications');
|
|
20
|
+
return res.json();
|
|
21
|
+
},
|
|
22
|
+
staleTime: 30_000,
|
|
23
|
+
});
|
|
24
|
+
const sorted = useMemo(() => [...applications].sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()), [applications]);
|
|
25
|
+
return (_jsx(DeploymentStatusProvider, { initialDeployments: [], children: _jsxs("div", { "data-testid": "applications-page-client", className: cn('relative space-y-4', className), children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(LayoutGrid, { className: "text-muted-foreground h-4 w-4" }), _jsx("h1", { className: "text-sm font-bold tracking-tight", children: "Applications" }), !isLoading ? (_jsxs("span", { className: "text-muted-foreground text-[10px]", children: [applications.length, " ", applications.length === 1 ? 'app' : 'apps'] })) : null] }), isLoading ? (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Loader2, { className: "text-muted-foreground h-5 w-5 animate-spin" }) })) : applications.length === 0 ? (_jsxs("div", { "data-testid": "applications-page-empty", className: "text-muted-foreground flex flex-col items-center justify-center py-12 text-center", children: [_jsx(LayoutGrid, { className: "mb-2 h-6 w-6 opacity-20" }), _jsx("p", { className: "text-xs", children: "No applications yet." }), _jsxs("button", { type: "button", onClick: () => setShowCreatePrompt(true), className: "mt-3 inline-flex items-center gap-1.5 rounded-md bg-indigo-500 px-3 py-1.5 text-[11px] font-semibold text-white shadow-sm transition-colors hover:bg-indigo-400", children: [_jsx(Plus, { className: "h-3 w-3" }), "New application"] })] })) : (_jsx("div", { "data-testid": "applications-page-grid", className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4", children: sorted.map((app) => (_jsx(ApplicationCard, { application: app }, app.id))) })), _jsx("button", { type: "button", "data-testid": "applications-fab-new", "aria-label": "New application", onClick: () => setShowCreatePrompt(true), className: "fixed right-6 bottom-6 z-40 flex h-14 w-14 cursor-pointer items-center justify-center rounded-full bg-indigo-500 text-white shadow-lg transition-all duration-200 hover:scale-105 hover:bg-indigo-400 hover:shadow-xl active:scale-95", children: _jsx(Plus, { className: "h-7 w-7 stroke-[2.5]" }) }), showCreatePrompt ? (_jsx("div", { className: "fixed inset-0 z-50", children: _jsx(ControlCenterEmptyState, { onApplicationCreated: (appId) => {
|
|
26
|
+
router.push(`/application/${appId}`);
|
|
27
|
+
}, onClose: () => setShowCreatePrompt(false), className: "bg-background" }) })) : null] }) }));
|
|
28
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ApplicationsPageClient } from './applications-page-client.js';
|
|
3
|
+
declare const meta: Meta<typeof ApplicationsPageClient>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Empty: Story;
|
|
8
|
+
export declare const SingleApp: Story;
|
|
9
|
+
export declare const AllActive: Story;
|
|
10
|
+
//# sourceMappingURL=applications-page-client.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applications-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/applications/applications-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AA0EpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,sBAAsB,CAO7C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC"}
|