@shepai/cli 1.179.1 → 1.180.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/json-schema/Application.yaml +40 -0
- package/apis/json-schema/ApplicationStatus.yaml +8 -0
- package/apis/json-schema/InteractiveMessage.yaml +3 -0
- package/apis/json-schema/WorkflowStep.yaml +53 -0
- package/apis/json-schema/WorkflowStepStatus.yaml +10 -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/ports/output/repositories/interactive-session-repository.interface.d.ts +13 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/workflow-step-repository.interface.d.ts +52 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-step-repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/workflow-step-repository.interface.js +11 -0
- package/dist/packages/core/src/application/ports/output/services/application-brief-store.interface.d.ts +36 -0
- package/dist/packages/core/src/application/ports/output/services/application-brief-store.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/application-brief-store.interface.js +22 -0
- package/dist/packages/core/src/application/ports/output/services/application-creation-prompt-builder.interface.d.ts +116 -0
- package/dist/packages/core/src/application/ports/output/services/application-creation-prompt-builder.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/application-creation-prompt-builder.interface.js +27 -0
- package/dist/packages/core/src/application/ports/output/services/application-file-system-service.interface.d.ts +100 -0
- package/dist/packages/core/src/application/ports/output/services/application-file-system-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/application-file-system-service.interface.js +20 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +4 -0
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/index.js +1 -0
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +111 -5
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/terminal-session-service.interface.d.ts +46 -0
- package/dist/packages/core/src/application/ports/output/services/terminal-session-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/terminal-session-service.interface.js +9 -0
- package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +92 -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 +305 -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-application-files.use-case.d.ts +18 -0
- package/dist/packages/core/src/application/use-cases/applications/list-application-files.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/list-application-files.use-case.js +41 -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/read-application-file-raw.use-case.d.ts +22 -0
- package/dist/packages/core/src/application/use-cases/applications/read-application-file-raw.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/read-application-file-raw.use-case.js +46 -0
- package/dist/packages/core/src/application/use-cases/applications/read-application-file.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/applications/read-application-file.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/read-application-file.use-case.js +43 -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/applications/watch-application-files.use-case.d.ts +21 -0
- package/dist/packages/core/src/application/use-cases/applications/watch-application-files.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/watch-application-files.use-case.js +43 -0
- package/dist/packages/core/src/application/use-cases/applications/write-application-file.use-case.d.ts +22 -0
- package/dist/packages/core/src/application/use-cases/applications/write-application-file.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/applications/write-application-file.use-case.js +44 -0
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts +18 -0
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.js +1 -1
- package/dist/packages/core/src/application/use-cases/terminal/create-terminal-session.use-case.d.ts +19 -0
- package/dist/packages/core/src/application/use-cases/terminal/create-terminal-session.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/terminal/create-terminal-session.use-case.js +42 -0
- package/dist/packages/core/src/application/use-cases/workflows/run-workflow.use-case.d.ts +77 -0
- package/dist/packages/core/src/application/use-cases/workflows/run-workflow.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/workflows/run-workflow.use-case.js +191 -0
- package/dist/packages/core/src/application/workflows/application-creation.workflow.d.ts +50 -0
- package/dist/packages/core/src/application/workflows/application-creation.workflow.d.ts.map +1 -0
- package/dist/packages/core/src/application/workflows/application-creation.workflow.js +138 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +102 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +14 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +93 -1
- 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/mappers/interactive-message.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.js +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow-step.mapper.d.ts +25 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow-step.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/workflow-step.mapper.js +50 -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/persistence/sqlite/migrations/057-workflow-steps.d.ts +31 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/057-workflow-steps.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/057-workflow-steps.js +72 -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/repositories/sqlite-interactive-message.repository.js +2 -2
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +16 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-step.repository.d.ts +29 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-step.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-workflow-step.repository.js +157 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/application-creation-prompt.builder.d.ts +25 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/application-creation-prompt.builder.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/application-creation-prompt.builder.js +95 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/brand.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/brand.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/brand.js +11 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/dynamic.d.ts +14 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/dynamic.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/dynamic.js +50 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/mission.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/mission.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/mission.js +10 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/output-contract.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/output-contract.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/output-contract.js +20 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/quality.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/quality.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/quality.js +12 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/role.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/role.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/role.js +9 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/tech-stack.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/tech-stack.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/tech-stack.js +23 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/user-interaction.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/user-interaction.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/user-interaction.js +29 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/workflow.d.ts +15 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/workflow.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/application-creation/prompts/workflow.js +40 -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 +14 -8
- package/dist/packages/core/src/infrastructure/services/filesystem/application-brief.store.d.ts +20 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/application-brief.store.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/application-brief.store.js +40 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/node-application-file-system.service.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/node-application-file-system.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/filesystem/node-application-file-system.service.js +292 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +49 -10
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +323 -149
- package/dist/packages/core/src/infrastructure/services/terminal/pty-terminal-session.service.d.ts +22 -0
- package/dist/packages/core/src/infrastructure/services/terminal/pty-terminal-session.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/terminal/pty-terminal-session.service.js +182 -0
- 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 +33 -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 +29 -0
- package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts +20 -0
- package/dist/src/presentation/web/app/actions/create-project-and-feature.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-project-and-feature.js +84 -0
- package/dist/src/presentation/web/app/actions/delete-application.d.ts +4 -0
- package/dist/src/presentation/web/app/actions/delete-application.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/delete-application.js +16 -0
- package/dist/src/presentation/web/app/actions/deploy-application.d.ts +20 -0
- package/dist/src/presentation/web/app/actions/deploy-application.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/deploy-application.js +62 -0
- package/dist/src/presentation/web/app/actions/get-application-debug-prompt.d.ts +25 -0
- package/dist/src/presentation/web/app/actions/get-application-debug-prompt.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-application-debug-prompt.js +37 -0
- package/dist/src/presentation/web/app/actions/get-git-log.js +2 -2
- package/dist/src/presentation/web/app/actions/update-application.d.ts +5 -0
- package/dist/src/presentation/web/app/actions/update-application.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/update-application.js +21 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/content/route.d.ts +17 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/content/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/content/route.js +63 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/raw/route.d.ts +17 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/raw/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/raw/route.js +55 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/route.d.ts +16 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/route.js +23 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/watch/route.d.ts +21 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/watch/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/applications/[id]/files/watch/route.js +86 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts +15 -6
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +36 -20
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/stream/route.d.ts +21 -0
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/stream/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/stream/route.js +82 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/input/route.d.ts +15 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/input/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/input/route.js +27 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/resize/route.d.ts +15 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/resize/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/resize/route.js +27 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/route.d.ts +15 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/route.js +20 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/stream/route.d.ts +17 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/stream/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/terminal/[sessionId]/stream/route.js +76 -0
- package/dist/src/presentation/web/app/api/terminal/route.d.ts +12 -0
- package/dist/src/presentation/web/app/api/terminal/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/terminal/route.js +34 -0
- package/dist/src/presentation/web/app/application/[id]/page.d.ts +8 -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 +65 -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/assistant-ui/thread.d.ts +5 -1
- package/dist/src/presentation/web/components/assistant-ui/thread.d.ts.map +1 -1
- package/dist/src/presentation/web/components/assistant-ui/thread.js +19 -5
- 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 +156 -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 +31 -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 +330 -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/application-page/ide-tab/api.d.ts +11 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/api.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/api.js +35 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/editor-pane.d.ts +27 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/editor-pane.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/editor-pane.js +147 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/file-tree-panel.d.ts +19 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/file-tree-panel.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/file-tree-panel.js +85 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/ide-tab.d.ts +16 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/ide-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/ide-tab.js +53 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/ide-tab.stories.d.ts +9 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/ide-tab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/ide-tab.stories.js +111 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/image-viewer.d.ts +27 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/image-viewer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/image-viewer.js +162 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/index.d.ts +3 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/index.js +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/types.d.ts +56 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/types.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/types.js +35 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/use-ide-state.d.ts +39 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/use-ide-state.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/use-ide-state.js +238 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/use-resolved-theme.d.ts +14 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/use-resolved-theme.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/ide-tab/use-resolved-theme.js +37 -0
- package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts +19 -0
- package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/run-dev-button.js +80 -0
- package/dist/src/presentation/web/components/features/application-page/terminal-tab.d.ts +9 -0
- package/dist/src/presentation/web/components/features/application-page/terminal-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/terminal-tab.js +224 -0
- package/dist/src/presentation/web/components/features/application-page/web-preview-tab.d.ts +6 -0
- package/dist/src/presentation/web/components/features/application-page/web-preview-tab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/application-page/web-preview-tab.js +57 -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 +38 -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 +53 -8
- package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts +36 -0
- package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/StepTracker.js +133 -0
- package/dist/src/presentation/web/components/features/chat/StepTracker.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/chat/StepTracker.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/StepTracker.stories.js +121 -0
- package/dist/src/presentation/web/components/features/chat/chat-state-query.d.ts +12 -0
- package/dist/src/presentation/web/components/features/chat/chat-state-query.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/chat-state-query.js +20 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/detect.d.ts +38 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/detect.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/detect.js +91 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/file-card.d.ts +17 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/file-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/file-card.js +25 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/generic-bubble.d.ts +11 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/generic-bubble.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/generic-bubble.js +15 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/index.d.ts +21 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/index.js +37 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/tool-chip.d.ts +14 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/tool-chip.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/tool-bubble/tool-chip.js +13 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +52 -1
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +360 -28
- package/dist/src/presentation/web/components/features/chat/workflow-placeholder.d.ts +21 -0
- package/dist/src/presentation/web/components/features/chat/workflow-placeholder.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/workflow-placeholder.js +40 -0
- 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 +183 -120
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +4 -16
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +16 -109
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +40 -17
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -0
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +25 -1
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts +2 -1
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-fab-actions.js +9 -2
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +2 -9
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -0
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts +3 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +9 -4
- package/dist/src/presentation/web/hooks/deployment-status-provider.d.ts +1 -1
- package/dist/src/presentation/web/hooks/deployment-status-provider.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/deployment-status-provider.js +4 -1
- 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/hooks/use-turn-statuses.d.ts +13 -3
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-turn-statuses.js +73 -13
- 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 +8 -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 +27 -3
- package/dist/src/presentation/web/next.config.d.ts.map +1 -1
- package/dist/src/presentation/web/next.config.js +1 -0
- package/dist/translations/ar/web.json +2 -1
- package/dist/translations/de/web.json +2 -1
- package/dist/translations/en/web.json +2 -1
- package/dist/translations/es/web.json +2 -1
- package/dist/translations/fr/web.json +2 -1
- package/dist/translations/he/web.json +2 -1
- package/dist/translations/pt/web.json +2 -1
- package/dist/translations/ru/web.json +2 -1
- package/dist/translations/uk/web.json +2 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +11 -0
- package/web/.next/build-manifest.json +5 -5
- 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 -2
- package/web/.next/required-server-files.json +3 -2
- package/web/.next/routes-manifest.json +84 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +111 -81
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +107 -77
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +113 -83
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +129 -99
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +129 -99
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +109 -79
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +109 -79
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +107 -77
- package/web/.next/server/app/(dashboard)/chat/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +113 -83
- package/web/.next/server/app/(dashboard)/create/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +129 -99
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +129 -99
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +107 -77
- package/web/.next/server/app/(dashboard)/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +109 -79
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +6 -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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +109 -79
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +6 -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/build-manifest.json +3 -3
- 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/build-manifest.json +3 -3
- 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/applications/[id]/files/content/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/[id]/files/content/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/[id]/files/content/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/[id]/files/content/route.js +6 -0
- package/web/.next/server/app/api/applications/[id]/files/content/route.js.map +5 -0
- package/web/.next/server/app/api/applications/[id]/files/content/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/[id]/files/content/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route.js +7 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route.js.map +5 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/[id]/files/raw/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/applications/[id]/files/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/[id]/files/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/[id]/files/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/[id]/files/route.js +6 -0
- package/web/.next/server/app/api/applications/[id]/files/route.js.map +5 -0
- package/web/.next/server/app/api/applications/[id]/files/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/[id]/files/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route.js +6 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route.js.map +5 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route.js.nft.json +1 -0
- package/web/.next/server/app/api/applications/[id]/files/watch/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/attachments/preview/route.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/directory/list/route.js +1 -1
- package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/feature-logs/route.js +1 -1
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js +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 +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route.js +6 -0
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/chat/turn-statuses/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/sessions/route.js +1 -1
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
- package/web/.next/server/app/api/terminal/[sessionId]/input/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/terminal/[sessionId]/input/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/terminal/[sessionId]/input/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/terminal/[sessionId]/input/route.js +6 -0
- package/web/.next/server/app/api/terminal/[sessionId]/input/route.js.map +5 -0
- package/web/.next/server/app/api/terminal/[sessionId]/input/route.js.nft.json +1 -0
- package/web/.next/server/app/api/terminal/[sessionId]/input/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route.js +6 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route.js.map +5 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route.js.nft.json +1 -0
- package/web/.next/server/app/api/terminal/[sessionId]/resize/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route.js +6 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route.js.map +5 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route.js.nft.json +1 -0
- package/web/.next/server/app/api/terminal/[sessionId]/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route.js +6 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route.js.map +5 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route.js.nft.json +1 -0
- package/web/.next/server/app/api/terminal/[sessionId]/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/terminal/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/terminal/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/terminal/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/terminal/route.js +6 -0
- package/web/.next/server/app/api/terminal/route.js.map +5 -0
- package/web/.next/server/app/api/terminal/route.js.nft.json +1 -0
- package/web/.next/server/app/api/terminal/route_client-reference-manifest.js +2 -0
- 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 +8 -0
- package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +230 -0
- package/web/.next/server/app/application/[id]/page.js +19 -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/build-manifest.json +3 -3
- 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/build-manifest.json +3 -3
- 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/build-manifest.json +3 -3
- package/web/.next/server/app/skills/page/server-reference-manifest.json +56 -26
- package/web/.next/server/app/skills/page.js +4 -3
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +3 -3
- package/web/.next/server/app/tools/page/server-reference-manifest.json +52 -22
- package/web/.next/server/app/tools/page.js +3 -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/build-manifest.json +3 -3
- package/web/.next/server/app/version/page/server-reference-manifest.json +27 -12
- package/web/.next/server/app/version/page.js +3 -3
- 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 +11 -0
- package/web/.next/server/chunks/0d725_next-internal_server_app_api_applications_[id]_files_raw_route_actions_69e55b18.js +3 -0
- package/web/.next/server/chunks/0d725_next-internal_server_app_api_applications_[id]_files_raw_route_actions_69e55b18.js.map +1 -0
- package/web/.next/server/chunks/0d725_next-internal_server_app_api_terminal_[sessionId]_resize_route_actions_068451e5.js +3 -0
- package/web/.next/server/chunks/0d725_next-internal_server_app_api_terminal_[sessionId]_resize_route_actions_068451e5.js.map +1 -0
- package/web/.next/server/chunks/0d725_next-internal_server_app_api_terminal_[sessionId]_stream_route_actions_475d5f68.js +3 -0
- package/web/.next/server/chunks/0d725_next-internal_server_app_api_terminal_[sessionId]_stream_route_actions_475d5f68.js.map +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/744ca_web__next-internal_server_app_api_terminal_[sessionId]_route_actions_20e0d9a3.js +3 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_terminal_[sessionId]_route_actions_20e0d9a3.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_applications_[id]_files_content_route_actions_b0c05593.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_applications_[id]_files_content_route_actions_b0c05593.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_applications_[id]_files_watch_route_actions_30d3aeeb.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_applications_[id]_files_watch_route_actions_30d3aeeb.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_turn-statuses_stream_route_actions_52514889.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_turn-statuses_stream_route_actions_52514889.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__038012df._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__038012df._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0e3323be._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0e3323be._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__38b9b39e._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__38b9b39e._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__3c22f57d._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__3c22f57d._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__4906ab60._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__4906ab60._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__2f61738a._.js → [root-of-the-server]__4eb2c4e4._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__acea6565._.js → [root-of-the-server]__5e3c6f3a._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__72175657._.js +9 -0
- package/web/.next/server/chunks/[root-of-the-server]__72175657._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__31598852._.js → [root-of-the-server]__86965b92._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +19 -13
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__92409aeb._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__92409aeb._.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]__a52f55af._.js +6 -0
- package/web/.next/server/chunks/[root-of-the-server]__a52f55af._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__2b1074db._.js → [root-of-the-server]__ac92afe7._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__2b1074db._.js.map → [root-of-the-server]__ac92afe7._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js +3 -0
- package/web/.next/server/chunks/{[root-of-the-server]__c78383b1._.js.map → [root-of-the-server]__b2a4bfcc._.js.map} +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__e3692208._.js → [root-of-the-server]__c8f90b29._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__2b71641f._.js → [root-of-the-server]__cbf5b20b._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__2b71641f._.js.map → [root-of-the-server]__cbf5b20b._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ccfcaa08._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__ccfcaa08._.js.map +1 -0
- 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/[root-of-the-server]__deb67d81._.js +9 -0
- package/web/.next/server/chunks/[root-of-the-server]__deb67d81._.js.map +1 -0
- package/web/.next/server/chunks/{[root-of-the-server]__fc6fd958._.js → [root-of-the-server]__ecd08b79._.js} +2 -2
- package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_terminal_route_actions_f93ca3cb.js +3 -0
- package/web/.next/server/chunks/b1a17_presentation_web__next-internal_server_app_api_terminal_route_actions_f93ca3cb.js.map +1 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_files_route_actions_e1af3c3a.js +3 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_files_route_actions_e1af3c3a.js.map +1 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_terminal_[sessionId]_input_route_actions_b7785e18.js +3 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_terminal_[sessionId]_input_route_actions_b7785e18.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_5da25833._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_5da25833._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.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]__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]__1925bef0._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.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]__24756fa9._.js +12 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js → [root-of-the-server]__7aa484f5._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__efeeaed4._.js.map → [root-of-the-server]__7aa484f5._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__86ff0bc5._.js → [root-of-the-server]__87bc4dac._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87bc4dac._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__e0592c69._.js → [root-of-the-server]__894882ab._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__357d99f9._.js → [root-of-the-server]__e265da61._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0277d3b5._.js +21 -0
- package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +1 -0
- 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/_1e08a336._.js +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/_36489f2b._.js +3 -0
- package/web/.next/server/chunks/ssr/_36489f2b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_44531b76._.js +9 -0
- package/web/.next/server/chunks/ssr/_44531b76._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
- 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/_5bf2415e._.js +7 -0
- package/web/.next/server/chunks/ssr/_5bf2415e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_63fc4647._.js +3 -0
- package/web/.next/server/chunks/ssr/_63fc4647._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_82c47cc2._.js +3 -0
- package/web/.next/server/chunks/ssr/{_bb09579b._.js.map → _82c47cc2._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_869a3a15._.js +3 -0
- package/web/.next/server/chunks/ssr/_869a3a15._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8caadb9a._.js +3 -0
- package/web/.next/server/chunks/ssr/_8caadb9a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_7d50fed0._.js → _946a7fc6._.js} +3 -3
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b227ff50._.js +3 -0
- package/web/.next/server/chunks/ssr/_b227ff50._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b8e8b690._.js +3 -0
- package/web/.next/server/chunks/ssr/_b8e8b690._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_5889596f._.js → _d44d091a._.js} +2 -2
- package/web/.next/server/chunks/ssr/_d44d091a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e071ba48._.js +3 -0
- package/web/.next/server/chunks/ssr/_e071ba48._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_eff1b518._.js +3 -0
- package/web/.next/server/chunks/ssr/_eff1b518._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f227429a._.js +3 -0
- package/web/.next/server/chunks/ssr/_f227429a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_496c9117._.js → _f86fc1bf._.js} +2 -2
- package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.js +4 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.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/{_1b7dae9a._.js → f7870_sonner_dist_index_mjs_dbf63824._.js} +2 -2
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +32 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.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 +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -0
- 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_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js.map +1 -0
- 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/middleware-build-manifest.js +3 -3
- 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 +1084 -703
- package/web/.next/static/chunks/06b9d6dbf635c370.css +1 -0
- package/web/.next/static/chunks/11ef340e4cfbdbe6.js +1 -0
- package/web/.next/static/chunks/1ae0cf5be30ef398.js +1 -0
- package/web/.next/static/chunks/1bc12075020723ed.js +1 -0
- package/web/.next/static/chunks/1fa1574b87bd2eb1.js +1 -0
- package/web/.next/static/chunks/{f5c61237675acc89.js → 26e2ca76ab6c38b4.js} +1 -1
- package/web/.next/static/chunks/2fe20598e1b4793a.js +5 -0
- package/web/.next/static/chunks/490667b2a9bb58e2.js +1 -0
- package/web/.next/static/chunks/{eb1ca1b0a34166f5.js → 66261997e6f830f1.js} +1 -1
- package/web/.next/static/chunks/{d26d0a7bc1a9b5a4.js → 7849c6797be7c6ca.js} +2 -2
- package/web/.next/static/chunks/7bc7028587490fff.js +1 -0
- package/web/.next/static/chunks/7c3fe3c694874dea.js +1 -0
- package/web/.next/static/chunks/{5a2bdbc57ed1368e.js → 8746807722de67a8.js} +1 -1
- package/web/.next/static/chunks/893a2a76546c66a7.js +1 -0
- package/web/.next/static/chunks/927442d2628f6e22.js +1 -0
- package/web/.next/static/chunks/a1098522326428d1.js +1 -0
- package/web/.next/static/chunks/b7b85a15f387ab7c.css +1 -0
- package/web/.next/static/chunks/b99506a6f7bc2fa8.js +1 -0
- package/web/.next/static/chunks/be89c20c257247ad.js +7 -0
- package/web/.next/static/chunks/c0bd3ffcf94d1845.js +7 -0
- package/web/.next/static/chunks/dfdcccf73de56960.js +1 -0
- package/web/.next/static/chunks/e2f9e224d1fa1faa.js +1 -0
- package/web/.next/static/chunks/e7da54dde18e7fb2.js +19 -0
- package/web/.next/static/chunks/f28aef9cf5107c4b.js +1 -0
- package/web/.next/static/chunks/{fb7211d94190d010.js → f6d47ff35d612852.js} +3 -3
- package/web/.next/static/chunks/fe8bcc8ff36a61c0.js +1 -0
- package/web/.next/static/chunks/{turbopack-fa58b7ea4a4b26e7.js → turbopack-d16f2f815897af68.js} +1 -1
- package/web/next.config.mjs +1 -1
- package/web/package.json +7 -0
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_bdff55d6.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_bdff55d6.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_6aa77d75.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_6aa77d75.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_24adb073.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_24adb073.js.map +0 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_281e0ef8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_a593f310._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__16c1388b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__16c1388b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__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]__75070d2e._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__75070d2e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7c634c0f._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7c634c0f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8f02b364._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8f02b364._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9dde817e._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9dde817e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a00db173._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a00db173._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cf751517._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cf751517._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e5f31e9a._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e5f31e9a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_15f6bbd4._.js +0 -3
- package/web/.next/server/chunks/ssr/_15f6bbd4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1b7dae9a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_396a6887._.js +0 -3
- package/web/.next/server/chunks/ssr/_396a6887._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
- package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_496c9117._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_49b8d085._.js +0 -3
- package/web/.next/server/chunks/ssr/_49b8d085._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5889596f._.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/_74a1a173._.js +0 -7
- package/web/.next/server/chunks/ssr/_74a1a173._.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/_7d50fed0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9bbdd461._.js +0 -4
- package/web/.next/server/chunks/ssr/_9bbdd461._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b7a43c05._.js +0 -3
- package/web/.next/server/chunks/ssr/_b7a43c05._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_bb09579b._.js +0 -3
- package/web/.next/server/chunks/ssr/_bcd239dd._.js +0 -3
- package/web/.next/server/chunks/ssr/_bcd239dd._.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_63d47a3e._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_63d47a3e._.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_0338c789._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_0338c789._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_071f1e80._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_071f1e80._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_55c1ff7d._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_55c1ff7d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ad14a90f.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ad14a90f.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_d5838156._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_d5838156._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_dc28bc60._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_dc28bc60._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_dcb020e3._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_dcb020e3._.js.map +0 -1
- package/web/.next/static/chunks/09edd35d194bec06.js +0 -5
- package/web/.next/static/chunks/124b79a5d2a760fb.css +0 -1
- package/web/.next/static/chunks/200e07d995bd9a42.js +0 -1
- package/web/.next/static/chunks/22e3a3738308da2e.js +0 -1
- package/web/.next/static/chunks/25d3c4d18b8aecff.js +0 -7
- package/web/.next/static/chunks/2ceebcc839ee0d4b.js +0 -1
- package/web/.next/static/chunks/34444901ca3a1c3b.js +0 -1
- package/web/.next/static/chunks/3cf86457869c47bc.js +0 -1
- package/web/.next/static/chunks/4052a4971fbbac9c.js +0 -1
- package/web/.next/static/chunks/55060446f5490f20.js +0 -3
- package/web/.next/static/chunks/59bff7b33ebe5f68.js +0 -1
- package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
- package/web/.next/static/chunks/971e52f3f386ccfd.js +0 -1
- package/web/.next/static/chunks/981c6f3f1db99b4e.js +0 -1
- package/web/.next/static/chunks/b63e6727c84f30e2.js +0 -1
- package/web/.next/static/chunks/c10c0d6d458453bc.js +0 -1
- package/web/.next/static/chunks/c94a6a3d54dd4997.js +0 -5
- package/web/.next/static/chunks/d04d868f0971941d.js +0 -1
- package/web/.next/static/chunks/e7502fb670f32235.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__2f61738a._.js.map → [root-of-the-server]__4eb2c4e4._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__acea6565._.js.map → [root-of-the-server]__5e3c6f3a._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__31598852._.js.map → [root-of-the-server]__86965b92._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__e3692208._.js.map → [root-of-the-server]__c8f90b29._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__fc6fd958._.js.map → [root-of-the-server]__ecd08b79._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__e0592c69._.js.map → [root-of-the-server]__894882ab._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__357d99f9._.js.map → [root-of-the-server]__e265da61._.js.map} +0 -0
- /package/web/.next/static/{mLJ1Qa4FUFmmZm0crRH2U → GQFJf3UCD4D5C4NCn8eXl}/_buildManifest.js +0 -0
- /package/web/.next/static/{mLJ1Qa4FUFmmZm0crRH2U → GQFJf3UCD4D5C4NCn8eXl}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{mLJ1Qa4FUFmmZm0crRH2U → GQFJf3UCD4D5C4NCn8eXl}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { useQuery } from '@tanstack/react-query';
|
|
6
|
+
import { toast } from 'sonner';
|
|
7
|
+
import { ArrowLeft, LayoutGrid, GitBranch, Copy, FolderOpen, ClipboardList, Cpu, FilePlus, FilePen, } from 'lucide-react';
|
|
8
|
+
import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
9
|
+
import { cn } from '../../../lib/utils.js';
|
|
10
|
+
import { Button } from '../../ui/button.js';
|
|
11
|
+
import { ChatTab } from '../../features/chat/ChatTab.js';
|
|
12
|
+
import { APPLICATION_CREATION_PLACEHOLDER_STEPS } from '../../features/chat/workflow-placeholder.js';
|
|
13
|
+
import { TerminalTab } from '../../features/application-page/terminal-tab.js';
|
|
14
|
+
import { IdeTab } from '../../features/application-page/ide-tab/index.js';
|
|
15
|
+
import { RunDevButton } from '../../features/application-page/run-dev-button.js';
|
|
16
|
+
import { WebPreviewTab } from '../../features/application-page/web-preview-tab.js';
|
|
17
|
+
import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
18
|
+
import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
|
|
19
|
+
import { chatQueryKey, fetchChatState } from '../../features/chat/chat-state-query.js';
|
|
20
|
+
import { openFolder } from '../../../app/actions/open-folder.js';
|
|
21
|
+
import { getApplicationDebugPrompt } from '../../../app/actions/get-application-debug-prompt.js';
|
|
22
|
+
import { getGitRepoInfo } from '../../../app/actions/get-git-log.js';
|
|
23
|
+
/* ------------------------------------------------------------------ */
|
|
24
|
+
/* Constants */
|
|
25
|
+
/* ------------------------------------------------------------------ */
|
|
26
|
+
/** Single source of truth for top-bar height. Both panes hang off this
|
|
27
|
+
* so nothing misaligns horizontally between left and right. */
|
|
28
|
+
const TOP_BAR_HEIGHT_CLASS = 'h-11';
|
|
29
|
+
const MIN_LEFT_PX = 400;
|
|
30
|
+
const MIN_RIGHT_PX = 400;
|
|
31
|
+
const INITIAL_LEFT_FRACTION = 0.4;
|
|
32
|
+
const VIEW_TABS = ['ide', 'terminal', 'web'];
|
|
33
|
+
const VIEW_LABELS = {
|
|
34
|
+
ide: 'IDE',
|
|
35
|
+
terminal: 'Terminal',
|
|
36
|
+
web: 'Web',
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Derive a single effective status label + dot color. "Idle" is
|
|
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
|
+
}
|
|
67
|
+
/* ------------------------------------------------------------------ */
|
|
68
|
+
/* Short path helper */
|
|
69
|
+
/* ------------------------------------------------------------------ */
|
|
70
|
+
/** Collapse a long absolute path to just its last segment. */
|
|
71
|
+
function shortPath(path) {
|
|
72
|
+
const normalized = path.replace(/\\/g, '/').replace(/\/+$/, '');
|
|
73
|
+
const idx = normalized.lastIndexOf('/');
|
|
74
|
+
return idx === -1 ? normalized : normalized.slice(idx + 1);
|
|
75
|
+
}
|
|
76
|
+
function AppTopBar({ application, activeView, onViewChange, onBack, initialChatState, deploy, }) {
|
|
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(Button, { variant: "ghost", size: "icon", "aria-label": "Back to canvas", onClick: onBack, className: "h-7 w-7", children: _jsx(ArrowLeft, { className: "h-3.5 w-3.5" }) }), _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 }), _jsx(CopyPromptButton, { applicationId: application.id }), _jsx(RunDevButton, { deploy: deploy }), _jsx(ViewSwitcher, { active: activeView, onChange: onViewChange })] }));
|
|
78
|
+
}
|
|
79
|
+
/* ------------------------------------------------------------------ */
|
|
80
|
+
/* Path cluster — short path + copy + open-in-file-manager */
|
|
81
|
+
/* ------------------------------------------------------------------ */
|
|
82
|
+
function PathCluster({ repositoryPath }) {
|
|
83
|
+
const handleCopy = useCallback(async () => {
|
|
84
|
+
try {
|
|
85
|
+
await navigator.clipboard.writeText(repositoryPath);
|
|
86
|
+
toast.success('Path copied', { description: repositoryPath });
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
toast.error('Failed to copy path');
|
|
90
|
+
}
|
|
91
|
+
}, [repositoryPath]);
|
|
92
|
+
const handleOpen = useCallback(async () => {
|
|
93
|
+
const result = await openFolder(repositoryPath);
|
|
94
|
+
if (!result.success) {
|
|
95
|
+
toast.error('Could not open folder', { description: result.error });
|
|
96
|
+
}
|
|
97
|
+
}, [repositoryPath]);
|
|
98
|
+
return (_jsxs("div", { className: "text-muted-foreground flex min-w-0 items-center gap-1.5 text-xs", children: [_jsx("span", { className: "truncate font-mono text-[11px]", title: repositoryPath, children: shortPath(repositoryPath) }), _jsx(Button, { variant: "ghost", size: "icon", className: "text-muted-foreground hover:text-foreground h-5 w-5", onClick: handleCopy, "aria-label": "Copy path", title: "Copy path", children: _jsx(Copy, { className: "h-3 w-3" }) }), _jsx(Button, { variant: "ghost", size: "icon", className: "text-muted-foreground hover:text-foreground h-5 w-5", onClick: handleOpen, "aria-label": "Open in file manager", title: "Open in file manager", children: _jsx(FolderOpen, { className: "h-3 w-3" }) }), _jsx("span", { className: "text-muted-foreground/40", children: "\u00B7" }), _jsx(GitStatusCluster, { repositoryPath: repositoryPath })] }));
|
|
99
|
+
}
|
|
100
|
+
/* ------------------------------------------------------------------ */
|
|
101
|
+
/* Git status cluster — branch name + added/edited file counts */
|
|
102
|
+
/* ------------------------------------------------------------------ */
|
|
103
|
+
/** Polls git repo info for current branch + working-tree diff numbers.
|
|
104
|
+
* Rendered inline next to the repo path so users can see at a glance
|
|
105
|
+
* which branch the application repo is on and how many files have
|
|
106
|
+
* been added or edited since the last commit. */
|
|
107
|
+
function GitStatusCluster({ repositoryPath }) {
|
|
108
|
+
const { data } = useQuery({
|
|
109
|
+
queryKey: ['git-repo-info', repositoryPath],
|
|
110
|
+
queryFn: () => getGitRepoInfo(repositoryPath, 1),
|
|
111
|
+
enabled: Boolean(repositoryPath),
|
|
112
|
+
refetchInterval: 5000,
|
|
113
|
+
refetchOnWindowFocus: true,
|
|
114
|
+
staleTime: 2000,
|
|
115
|
+
});
|
|
116
|
+
const trimmedBranch = data?.currentBranch?.trim();
|
|
117
|
+
const branch = trimmedBranch && trimmedBranch.length > 0 ? trimmedBranch : 'main';
|
|
118
|
+
const added = data?.workingTree.untracked ?? 0;
|
|
119
|
+
const edited = data?.workingTree.modified ?? 0;
|
|
120
|
+
const insertions = data?.diffStats?.insertions ?? 0;
|
|
121
|
+
const deletions = data?.diffStats?.deletions ?? 0;
|
|
122
|
+
const hasChanges = added > 0 || edited > 0;
|
|
123
|
+
const handleCommit = useCallback(() => {
|
|
124
|
+
toast.info('Commit (not wired up yet)', {
|
|
125
|
+
description: `Would commit ${edited} edited / ${added} added file(s) on ${branch}`,
|
|
126
|
+
});
|
|
127
|
+
}, [added, edited, branch]);
|
|
128
|
+
const handleCommitPush = useCallback(() => {
|
|
129
|
+
toast.info('Commit & Push (not wired up yet)', {
|
|
130
|
+
description: `Would commit and push ${edited} edited / ${added} added file(s) on ${branch}`,
|
|
131
|
+
});
|
|
132
|
+
}, [added, edited, branch]);
|
|
133
|
+
return (_jsxs("div", { className: "flex items-center gap-2 font-mono text-[11px]", children: [_jsxs("span", { className: "flex items-center gap-1", title: `Branch: ${branch}`, children: [_jsx(GitBranch, { className: "h-3 w-3" }), branch] }), added > 0 ? (_jsxs("span", { className: "flex items-center gap-0.5 text-emerald-500", title: `${added} added ${added === 1 ? 'file' : 'files'}`, children: [_jsx(FilePlus, { className: "h-3 w-3" }), added] })) : null, edited > 0 ? (_jsxs("span", { className: "flex items-center gap-0.5 text-amber-500", title: `${edited} edited ${edited === 1 ? 'file' : 'files'}`, children: [_jsx(FilePen, { className: "h-3 w-3" }), edited] })) : null, insertions > 0 || deletions > 0 ? (_jsxs("span", { className: "flex items-center gap-1", title: `${insertions} insertions, ${deletions} deletions vs HEAD`, children: [insertions > 0 ? _jsxs("span", { className: "text-emerald-500", children: ["+", insertions] }) : null, deletions > 0 ? _jsxs("span", { className: "text-rose-500", children: ["-", deletions] }) : null] })) : null, hasChanges ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: handleCommit, className: "border-border bg-background text-foreground hover:bg-muted inline-flex h-6 shrink-0 items-center gap-1 rounded-md border px-2 text-[11px] font-medium transition-colors", title: "Commit working tree changes", children: "Commit" }), _jsx("button", { type: "button", onClick: handleCommitPush, className: "inline-flex h-6 shrink-0 items-center gap-1 rounded-md border border-indigo-500/40 bg-indigo-500/10 px-2 text-[11px] font-medium text-indigo-600 transition-colors hover:bg-indigo-500/20 dark:text-indigo-400", title: "Commit and push to remote", children: "Commit & Push" })] })) : null] }));
|
|
134
|
+
}
|
|
135
|
+
/* ------------------------------------------------------------------ */
|
|
136
|
+
/* Session chip — model + short session id, live via shared query */
|
|
137
|
+
/* ------------------------------------------------------------------ */
|
|
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.
|
|
144
|
+
const { data: chatState } = useQuery({
|
|
145
|
+
queryKey: chatQueryKey(featureId),
|
|
146
|
+
queryFn: () => fetchChatState(featureId),
|
|
147
|
+
initialData: initialChatState,
|
|
148
|
+
staleTime: Infinity,
|
|
149
|
+
refetchOnWindowFocus: false,
|
|
150
|
+
refetchOnReconnect: false,
|
|
151
|
+
});
|
|
152
|
+
const sessionInfo = chatState?.sessionInfo;
|
|
153
|
+
const sessionId = sessionInfo?.sessionId ?? null;
|
|
154
|
+
const model = sessionInfo?.model ?? null;
|
|
155
|
+
const shortId = sessionId ? sessionId.slice(0, 8) : null;
|
|
156
|
+
const handleCopy = useCallback(async () => {
|
|
157
|
+
if (!sessionId)
|
|
158
|
+
return;
|
|
159
|
+
try {
|
|
160
|
+
await navigator.clipboard.writeText(sessionId);
|
|
161
|
+
toast.success('Session ID copied', { description: sessionId });
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
toast.error('Failed to copy session id');
|
|
165
|
+
}
|
|
166
|
+
}, [sessionId]);
|
|
167
|
+
return (_jsxs("button", { type: "button", onClick: handleCopy, disabled: !sessionId, className: cn('border-border/60 bg-muted/40 text-muted-foreground inline-flex h-6 shrink-0 items-center gap-1.5 rounded-md border px-2 font-mono text-[10px] transition-colors', sessionId
|
|
168
|
+
? 'hover:bg-muted hover:text-foreground cursor-pointer'
|
|
169
|
+
: 'cursor-default opacity-60'), title: sessionId ? `Click to copy full session id: ${sessionId}` : 'No session yet', "aria-label": sessionId ? 'Copy session id' : 'No active session', children: [_jsx(Cpu, { className: "h-3 w-3 opacity-60" }), _jsx("span", { className: "font-medium", children: model ?? 'agent' }), _jsx("span", { className: "text-muted-foreground/50", children: "\u00B7" }), _jsx("span", { children: shortId ?? '—' })] }));
|
|
170
|
+
}
|
|
171
|
+
/* ------------------------------------------------------------------ */
|
|
172
|
+
/* Copy prompt — debug dump of the full generated system+user prompt */
|
|
173
|
+
/* ------------------------------------------------------------------ */
|
|
174
|
+
function CopyPromptButton({ applicationId }) {
|
|
175
|
+
const [busy, setBusy] = useState(false);
|
|
176
|
+
const handleClick = useCallback(async () => {
|
|
177
|
+
if (busy)
|
|
178
|
+
return;
|
|
179
|
+
setBusy(true);
|
|
180
|
+
try {
|
|
181
|
+
const result = await getApplicationDebugPrompt(applicationId);
|
|
182
|
+
if (result.error || !result.combined) {
|
|
183
|
+
toast.error('Failed to build prompt', { description: result.error });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
await navigator.clipboard.writeText(result.combined);
|
|
187
|
+
const systemLen = result.systemPrompt?.length ?? 0;
|
|
188
|
+
const userLen = result.userMessage?.length ?? 0;
|
|
189
|
+
toast.success('Prompt copied to clipboard', {
|
|
190
|
+
description: `${systemLen} chars system + ${userLen} chars user`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
toast.error('Failed to copy prompt', {
|
|
195
|
+
description: err instanceof Error ? err.message : String(err),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
setBusy(false);
|
|
200
|
+
}
|
|
201
|
+
}, [applicationId, busy]);
|
|
202
|
+
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
|
+
}
|
|
204
|
+
function StatusPill({ applicationId, persistedStatus, deployReady, }) {
|
|
205
|
+
// Read live turn status from the global SSE subscription and fold
|
|
206
|
+
// it PLUS the dev-server deploy state onto the persisted status so
|
|
207
|
+
// the pill reflects real-time reality ("Working" / "Waiting" /
|
|
208
|
+
// "Unread" / "Live") instead of being stuck at the coarse DB
|
|
209
|
+
// snapshot which almost always reads "Idle".
|
|
210
|
+
const turnStatus = useTurnStatus(`app-${applicationId}`);
|
|
211
|
+
const live = deriveLiveStatusPill(persistedStatus, turnStatus, deployReady);
|
|
212
|
+
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
|
+
}
|
|
214
|
+
function Divider() {
|
|
215
|
+
return _jsx("span", { className: "bg-border/60 mx-1 h-4 w-px shrink-0" });
|
|
216
|
+
}
|
|
217
|
+
function ViewSwitcher({ active, onChange, }) {
|
|
218
|
+
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
|
+
const selected = v === active;
|
|
220
|
+
return (_jsx("button", { type: "button", role: "tab", "aria-selected": selected, onClick: () => onChange(v), className: cn('h-6 cursor-pointer rounded-sm px-2.5 text-[11px] font-medium transition-colors', selected
|
|
221
|
+
? 'bg-background text-foreground shadow-sm'
|
|
222
|
+
: 'text-muted-foreground hover:text-foreground'), children: VIEW_LABELS[v] }, v));
|
|
223
|
+
}) }));
|
|
224
|
+
}
|
|
225
|
+
/* ------------------------------------------------------------------ */
|
|
226
|
+
/* Resizable split panel */
|
|
227
|
+
/* ------------------------------------------------------------------ */
|
|
228
|
+
function ResizableSplit({ left, right }) {
|
|
229
|
+
const containerRef = useRef(null);
|
|
230
|
+
const [leftFraction, setLeftFraction] = useState(INITIAL_LEFT_FRACTION);
|
|
231
|
+
const dragging = useRef(false);
|
|
232
|
+
const onPointerDown = useCallback((e) => {
|
|
233
|
+
e.preventDefault();
|
|
234
|
+
dragging.current = true;
|
|
235
|
+
const target = e.currentTarget;
|
|
236
|
+
target.setPointerCapture(e.pointerId);
|
|
237
|
+
}, []);
|
|
238
|
+
const onPointerMove = useCallback((e) => {
|
|
239
|
+
if (!dragging.current || !containerRef.current)
|
|
240
|
+
return;
|
|
241
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
242
|
+
const totalWidth = rect.width;
|
|
243
|
+
const x = e.clientX - rect.left;
|
|
244
|
+
const clampedX = Math.max(MIN_LEFT_PX, Math.min(x, totalWidth - MIN_RIGHT_PX));
|
|
245
|
+
setLeftFraction(clampedX / totalWidth);
|
|
246
|
+
}, []);
|
|
247
|
+
const onPointerUp = useCallback(() => {
|
|
248
|
+
dragging.current = false;
|
|
249
|
+
}, []);
|
|
250
|
+
return (_jsxs("div", { ref: containerRef, className: "flex min-h-0 flex-1", children: [_jsx("div", { className: "flex min-h-0 flex-col overflow-hidden", style: { flexBasis: `${leftFraction * 100}%`, flexShrink: 0 }, children: left }), _jsx("div", { role: "separator", "aria-orientation": "vertical", className: "group border-border hover:bg-primary/20 relative w-px shrink-0 cursor-col-resize border-l transition-colors", onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, children: _jsx("span", { className: "absolute inset-y-0 -right-1 -left-1" }) }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: right })] }));
|
|
251
|
+
}
|
|
252
|
+
/* ------------------------------------------------------------------ */
|
|
253
|
+
/* Right-pane views */
|
|
254
|
+
/* ------------------------------------------------------------------ */
|
|
255
|
+
/**
|
|
256
|
+
* Right-pane view body.
|
|
257
|
+
*
|
|
258
|
+
* The Terminal tab is kept mounted (just hidden) when not active so its
|
|
259
|
+
* PTY session, scrollback, and running processes survive tab switches.
|
|
260
|
+
* Other views are placeholders until implemented.
|
|
261
|
+
*/
|
|
262
|
+
function ViewBody({ activeView, applicationId, terminalCwd, deploy, }) {
|
|
263
|
+
// Mount the Web iframe as soon as there's a URL — even if the user
|
|
264
|
+
// is currently on IDE / Terminal — so the preview session doesn't
|
|
265
|
+
// tear down when switching tabs. Once the app has been Previewed
|
|
266
|
+
// at least once, the iframe stays alive in the background.
|
|
267
|
+
const hasWebContent = deploy.status === DeploymentState.Ready ||
|
|
268
|
+
deploy.status === DeploymentState.Booting ||
|
|
269
|
+
deploy.deployLoading ||
|
|
270
|
+
!!deploy.deployError;
|
|
271
|
+
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
|
+
}
|
|
273
|
+
export function ApplicationPage({ application, initialChatState }) {
|
|
274
|
+
const router = useRouter();
|
|
275
|
+
const [activeView, setActiveView] = useState('ide');
|
|
276
|
+
// Hoisted dev-server state — subscribes to the shared
|
|
277
|
+
// DeploymentStatusProvider scoped to this application's id. The server
|
|
278
|
+
// component seeds the provider with `initialDeployment` (if any) so
|
|
279
|
+
// the first paint already has the running URL; the provider's
|
|
280
|
+
// `ensureHydrated` effect fills in fresh state on mount when the seed
|
|
281
|
+
// is absent (e.g. test environments where the server couldn't reach
|
|
282
|
+
// the deployment service).
|
|
283
|
+
const deploy = useDeployAction({
|
|
284
|
+
targetId: application.id,
|
|
285
|
+
targetType: 'application',
|
|
286
|
+
repositoryPath: application.repositoryPath,
|
|
287
|
+
});
|
|
288
|
+
// When the dev server transitions to Ready, auto-switch the right
|
|
289
|
+
// pane to the Web tab the first time it happens so the user
|
|
290
|
+
// immediately sees their app without an extra click. Only triggers
|
|
291
|
+
// on an Idle→Ready transition, not on every poll while Ready.
|
|
292
|
+
const hasAutoSwitchedRef = useRef(false);
|
|
293
|
+
useEffect(() => {
|
|
294
|
+
if (deploy.status === DeploymentState.Ready && deploy.url && !hasAutoSwitchedRef.current) {
|
|
295
|
+
hasAutoSwitchedRef.current = true;
|
|
296
|
+
setActiveView('web');
|
|
297
|
+
}
|
|
298
|
+
if (deploy.status !== DeploymentState.Ready) {
|
|
299
|
+
hasAutoSwitchedRef.current = false;
|
|
300
|
+
}
|
|
301
|
+
}, [deploy.status, deploy.url]);
|
|
302
|
+
// Back → control center. We navigate AND refresh so the dashboard layout
|
|
303
|
+
// re-runs `getGraphData()` server-side. Without `router.refresh()` the
|
|
304
|
+
// App Router serves the cached RSC from when the user was last on `/`,
|
|
305
|
+
// which does NOT include the application they just created.
|
|
306
|
+
const handleBack = useCallback(() => {
|
|
307
|
+
router.push('/');
|
|
308
|
+
router.refresh();
|
|
309
|
+
}, [router]);
|
|
310
|
+
return (_jsxs("div", { className: "bg-background flex h-dvh flex-col", children: [_jsx(AppTopBar, { application: application, activeView: activeView, onViewChange: setActiveView, onBack: handleBack, 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, onAllStepsComplete: () => {
|
|
311
|
+
// Kick off the dev server as soon as the agent has
|
|
312
|
+
// finished the scaffold workflow. The Idle→Ready
|
|
313
|
+
// transition in the deploy hook then auto-switches
|
|
314
|
+
// the right pane to the Web preview, so the user
|
|
315
|
+
// lands on their running app with zero clicks.
|
|
316
|
+
//
|
|
317
|
+
// Important: the provider's default entry is
|
|
318
|
+
// `{ status: null }` when no dev server has ever run
|
|
319
|
+
// for this application, NOT `'Stopped'`. The previous
|
|
320
|
+
// `=== 'Stopped'` check silently did nothing on the
|
|
321
|
+
// very first completion of a freshly created app,
|
|
322
|
+
// which is exactly when auto-preview matters most.
|
|
323
|
+
// Trigger as long as we're not already Booting/Ready.
|
|
324
|
+
if (deploy.status !== DeploymentState.Ready &&
|
|
325
|
+
deploy.status !== DeploymentState.Booting &&
|
|
326
|
+
!deploy.deployLoading) {
|
|
327
|
+
void deploy.deploy();
|
|
328
|
+
}
|
|
329
|
+
} }), right: _jsx(ViewBody, { activeView: activeView, applicationId: application.id, terminalCwd: application.repositoryPath, deploy: deploy }) })] }));
|
|
330
|
+
}
|
package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ApplicationPage } from './application-page.js';
|
|
3
|
+
declare const meta: Meta<typeof ApplicationPage>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Active: Story;
|
|
8
|
+
export declare const ErrorState: Story;
|
|
9
|
+
//# sourceMappingURL=application-page.stories.d.ts.map
|
|
@@ -0,0 +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;AAgBrD,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"}
|
package/dist/src/presentation/web/components/features/application-page/application-page.stories.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ApplicationPage } from './application-page.js';
|
|
2
|
+
import { ApplicationStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
3
|
+
const baseApp = {
|
|
4
|
+
id: 'app-001',
|
|
5
|
+
name: 'My Todo App',
|
|
6
|
+
slug: 'my-todo-app',
|
|
7
|
+
description: 'A full-stack todo application with authentication and real-time sync',
|
|
8
|
+
repositoryPath: '/home/user/projects/my-todo-app',
|
|
9
|
+
additionalPaths: [],
|
|
10
|
+
status: ApplicationStatus.Idle,
|
|
11
|
+
createdAt: new Date().toISOString(),
|
|
12
|
+
updatedAt: new Date().toISOString(),
|
|
13
|
+
};
|
|
14
|
+
const meta = {
|
|
15
|
+
title: 'Features/ApplicationPage',
|
|
16
|
+
component: ApplicationPage,
|
|
17
|
+
parameters: {
|
|
18
|
+
layout: 'fullscreen',
|
|
19
|
+
},
|
|
20
|
+
tags: ['autodocs'],
|
|
21
|
+
};
|
|
22
|
+
export default meta;
|
|
23
|
+
export const Default = {
|
|
24
|
+
args: {
|
|
25
|
+
application: baseApp,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export const Active = {
|
|
29
|
+
args: {
|
|
30
|
+
application: {
|
|
31
|
+
...baseApp,
|
|
32
|
+
id: 'app-002',
|
|
33
|
+
name: 'E-Commerce Dashboard',
|
|
34
|
+
slug: 'e-commerce-dashboard',
|
|
35
|
+
description: 'Admin dashboard for managing products and orders',
|
|
36
|
+
status: ApplicationStatus.Active,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
export const ErrorState = {
|
|
41
|
+
args: {
|
|
42
|
+
application: {
|
|
43
|
+
...baseApp,
|
|
44
|
+
id: 'app-003',
|
|
45
|
+
name: 'Weather API Service',
|
|
46
|
+
slug: 'weather-api-service',
|
|
47
|
+
description: 'Microservice for fetching and caching weather data',
|
|
48
|
+
status: ApplicationStatus.Error,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin fetch helpers for the IDE tab's API routes.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from components so the network boundary is obvious and
|
|
5
|
+
* easy to mock in tests and Storybook.
|
|
6
|
+
*/
|
|
7
|
+
import type { FileTreeEntry, ReadFileResult } from './types.js';
|
|
8
|
+
export declare function fetchFileTree(applicationId: string): Promise<FileTreeEntry>;
|
|
9
|
+
export declare function fetchFileContent(applicationId: string, path: string): Promise<ReadFileResult>;
|
|
10
|
+
export declare function saveFileContent(applicationId: string, path: string, content: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/application-page/ide-tab/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7D,wBAAsB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAQjF;AAED,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAQzB;AAED,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin fetch helpers for the IDE tab's API routes.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from components so the network boundary is obvious and
|
|
5
|
+
* easy to mock in tests and Storybook.
|
|
6
|
+
*/
|
|
7
|
+
export async function fetchFileTree(applicationId) {
|
|
8
|
+
const res = await fetch(`/api/applications/${applicationId}/files`, { cache: 'no-store' });
|
|
9
|
+
if (!res.ok) {
|
|
10
|
+
const body = (await res.json().catch(() => ({})));
|
|
11
|
+
throw new Error(body.error ?? `Failed to load file tree (${res.status})`);
|
|
12
|
+
}
|
|
13
|
+
const data = (await res.json());
|
|
14
|
+
return data.tree;
|
|
15
|
+
}
|
|
16
|
+
export async function fetchFileContent(applicationId, path) {
|
|
17
|
+
const url = `/api/applications/${applicationId}/files/content?path=${encodeURIComponent(path)}`;
|
|
18
|
+
const res = await fetch(url, { cache: 'no-store' });
|
|
19
|
+
if (!res.ok) {
|
|
20
|
+
const body = (await res.json().catch(() => ({})));
|
|
21
|
+
throw new Error(body.error ?? `Failed to read file (${res.status})`);
|
|
22
|
+
}
|
|
23
|
+
return (await res.json());
|
|
24
|
+
}
|
|
25
|
+
export async function saveFileContent(applicationId, path, content) {
|
|
26
|
+
const res = await fetch(`/api/applications/${applicationId}/files/content`, {
|
|
27
|
+
method: 'PUT',
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify({ path, content }),
|
|
30
|
+
});
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
const body = (await res.json().catch(() => ({})));
|
|
33
|
+
throw new Error(body.error ?? `Failed to save file (${res.status})`);
|
|
34
|
+
}
|
|
35
|
+
}
|
package/dist/src/presentation/web/components/features/application-page/ide-tab/editor-pane.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EditorPane
|
|
3
|
+
*
|
|
4
|
+
* VSCode-style editor surface for the IDE tab: a tab strip at the top
|
|
5
|
+
* showing open files (with dirty indicators + close buttons) and a
|
|
6
|
+
* Monaco editor below it. Monaco is dynamically imported so it stays
|
|
7
|
+
* out of the initial bundle and never runs during SSR.
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenFile } from './types.js';
|
|
10
|
+
export interface EditorPaneProps {
|
|
11
|
+
applicationId: string;
|
|
12
|
+
openFiles: OpenFile[];
|
|
13
|
+
activePath: string | null;
|
|
14
|
+
onSelect: (path: string) => void;
|
|
15
|
+
onClose: (path: string) => void;
|
|
16
|
+
onChange: (path: string, content: string) => void;
|
|
17
|
+
onSave: () => void;
|
|
18
|
+
/** Promote a preview tab to a persistent tab (on tab double-click). */
|
|
19
|
+
onPromote: (path: string) => void;
|
|
20
|
+
/** Toggle the active file between rendered preview and Monaco source (markdown). */
|
|
21
|
+
onToggleViewMode: (path: string) => void;
|
|
22
|
+
/** When true, renders a "show sidebar" button at the right of the tab strip. */
|
|
23
|
+
sidebarCollapsed: boolean;
|
|
24
|
+
onShowSidebar: () => void;
|
|
25
|
+
}
|
|
26
|
+
export declare function EditorPane({ applicationId, openFiles, activePath, onSelect, onClose, onChange, onSave, onPromote, onToggleViewMode, sidebarCollapsed, onShowSidebar, }: EditorPaneProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=editor-pane.d.ts.map
|
package/dist/src/presentation/web/components/features/application-page/ide-tab/editor-pane.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-pane.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/components/features/application-page/ide-tab/editor-pane.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAoDxC,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,uEAAuE;IACvE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oFAAoF;IACpF,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,gFAAgF;IAChF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,EACzB,aAAa,EACb,SAAS,EACT,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,EAAE,eAAe,2CAoKjB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EditorPane
|
|
3
|
+
*
|
|
4
|
+
* VSCode-style editor surface for the IDE tab: a tab strip at the top
|
|
5
|
+
* showing open files (with dirty indicators + close buttons) and a
|
|
6
|
+
* Monaco editor below it. Monaco is dynamically imported so it stays
|
|
7
|
+
* out of the initial bundle and never runs during SSR.
|
|
8
|
+
*/
|
|
9
|
+
'use client';
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
12
|
+
import dynamic from 'next/dynamic';
|
|
13
|
+
import ReactMarkdown from 'react-markdown';
|
|
14
|
+
import remarkGfm from 'remark-gfm';
|
|
15
|
+
import { Eye, FileCode, File as FileIcon, PanelRight, X } from 'lucide-react';
|
|
16
|
+
import { cn } from '../../../../lib/utils.js';
|
|
17
|
+
import { ImageViewer } from './image-viewer.js';
|
|
18
|
+
import { useResolvedTheme } from './use-resolved-theme.js';
|
|
19
|
+
/** Monaco is a large client-only dependency — dynamic import with ssr:false. */
|
|
20
|
+
const MonacoEditor = dynamic(() => import('@monaco-editor/react'), {
|
|
21
|
+
ssr: false,
|
|
22
|
+
loading: () => (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-xs", children: "Loading editor\u2026" })),
|
|
23
|
+
});
|
|
24
|
+
const EXTENSION_TO_LANGUAGE = {
|
|
25
|
+
ts: 'typescript',
|
|
26
|
+
tsx: 'typescript',
|
|
27
|
+
js: 'javascript',
|
|
28
|
+
jsx: 'javascript',
|
|
29
|
+
mjs: 'javascript',
|
|
30
|
+
cjs: 'javascript',
|
|
31
|
+
json: 'json',
|
|
32
|
+
md: 'markdown',
|
|
33
|
+
mdx: 'markdown',
|
|
34
|
+
css: 'css',
|
|
35
|
+
scss: 'scss',
|
|
36
|
+
html: 'html',
|
|
37
|
+
yml: 'yaml',
|
|
38
|
+
yaml: 'yaml',
|
|
39
|
+
toml: 'ini',
|
|
40
|
+
ini: 'ini',
|
|
41
|
+
sh: 'shell',
|
|
42
|
+
bash: 'shell',
|
|
43
|
+
py: 'python',
|
|
44
|
+
go: 'go',
|
|
45
|
+
rs: 'rust',
|
|
46
|
+
java: 'java',
|
|
47
|
+
sql: 'sql',
|
|
48
|
+
xml: 'xml',
|
|
49
|
+
dockerfile: 'dockerfile',
|
|
50
|
+
};
|
|
51
|
+
function languageForPath(path) {
|
|
52
|
+
const base = path.split('/').pop() ?? path;
|
|
53
|
+
if (base.toLowerCase() === 'dockerfile')
|
|
54
|
+
return 'dockerfile';
|
|
55
|
+
const ext = base.includes('.') ? base.split('.').pop()?.toLowerCase() : '';
|
|
56
|
+
return (ext ? EXTENSION_TO_LANGUAGE[ext] : undefined) ?? 'plaintext';
|
|
57
|
+
}
|
|
58
|
+
function basename(p) {
|
|
59
|
+
const i = p.lastIndexOf('/');
|
|
60
|
+
return i === -1 ? p : p.slice(i + 1);
|
|
61
|
+
}
|
|
62
|
+
export function EditorPane({ applicationId, openFiles, activePath, onSelect, onClose, onChange, onSave, onPromote, onToggleViewMode, sidebarCollapsed, onShowSidebar, }) {
|
|
63
|
+
const active = useMemo(() => openFiles.find((f) => f.path === activePath) ?? null, [openFiles, activePath]);
|
|
64
|
+
const resolvedTheme = useResolvedTheme();
|
|
65
|
+
const isDark = resolvedTheme === 'dark';
|
|
66
|
+
const monacoTheme = isDark ? 'vs-dark' : 'vs';
|
|
67
|
+
// Background colour that matches each Monaco theme exactly, so the brief
|
|
68
|
+
// remount gap when switching files never flashes an off-tone fill.
|
|
69
|
+
const editorBgClass = isDark ? 'bg-[#1e1e1e]' : 'bg-[#ffffff]';
|
|
70
|
+
// Ctrl/Cmd+S saves the active file.
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
const handler = (e) => {
|
|
73
|
+
if ((e.ctrlKey || e.metaKey) && (e.key === 's' || e.key === 'S')) {
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
onSave();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
window.addEventListener('keydown', handler);
|
|
79
|
+
return () => window.removeEventListener('keydown', handler);
|
|
80
|
+
}, [onSave]);
|
|
81
|
+
const handleChange = useCallback((value) => {
|
|
82
|
+
if (!active)
|
|
83
|
+
return;
|
|
84
|
+
onChange(active.path, value ?? '');
|
|
85
|
+
}, [active, onChange]);
|
|
86
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsxs("div", { role: "tablist", "aria-label": "Open files", className: "border-border bg-muted/30 flex h-8 shrink-0 items-center border-b", children: [_jsx("div", { className: "flex min-w-0 flex-1 items-center overflow-x-auto", children: openFiles.length === 0 ? (_jsx("div", { className: "text-muted-foreground px-3 text-[11px]", children: "No file open" })) : (openFiles.map((f) => {
|
|
87
|
+
const dirty = f.content !== f.originalContent;
|
|
88
|
+
const selected = f.path === activePath;
|
|
89
|
+
return (_jsxs("div", { role: "tab", "aria-selected": selected, onClick: () => onSelect(f.path), onDoubleClick: () => onPromote(f.path), className: cn('group border-border flex h-8 shrink-0 cursor-pointer items-center gap-1.5 border-r px-3 text-[11px]', selected
|
|
90
|
+
? 'bg-background text-foreground'
|
|
91
|
+
: 'text-muted-foreground hover:bg-muted/60'), title: f.isPreview
|
|
92
|
+
? `${f.path} — preview (double-click tab or edit to keep open)`
|
|
93
|
+
: f.path, children: [_jsx(FileIcon, { className: "h-3 w-3 shrink-0 text-sky-500" }), _jsx("span", { className: cn('truncate', f.isPreview && 'italic'), children: basename(f.path) }), dirty ? (_jsx("span", { className: "bg-primary/70 inline-block h-1.5 w-1.5 rounded-full", "aria-label": "Unsaved changes" })) : null, _jsx("button", { type: "button", onClick: (e) => {
|
|
94
|
+
e.stopPropagation();
|
|
95
|
+
onClose(f.path);
|
|
96
|
+
}, className: "text-muted-foreground/70 hover:text-foreground ml-1 rounded-sm p-0.5", "aria-label": `Close ${f.path}`, children: _jsx(X, { className: "h-3 w-3" }) })] }, f.path));
|
|
97
|
+
})) }), active?.isMarkdown ? (_jsx("button", { type: "button", onClick: () => onToggleViewMode(active.path), className: "text-muted-foreground hover:text-foreground border-border flex h-8 w-8 shrink-0 items-center justify-center border-l", "aria-label": active.viewMode === 'rendered' ? 'Show markdown source' : 'Show markdown preview', title: active.viewMode === 'rendered' ? 'Show markdown source' : 'Show markdown preview', children: active.viewMode === 'rendered' ? (_jsx(FileCode, { className: "h-3.5 w-3.5" })) : (_jsx(Eye, { className: "h-3.5 w-3.5" })) })) : null, sidebarCollapsed ? (_jsx("button", { type: "button", onClick: onShowSidebar, className: "text-muted-foreground hover:text-foreground border-border flex h-8 w-8 shrink-0 items-center justify-center border-l", "aria-label": "Show file explorer", title: "Show file explorer", children: _jsx(PanelRight, { className: "h-3.5 w-3.5" }) })) : null] }), _jsx("div", { className: cn('min-h-0 flex-1', editorBgClass), children: active ? (active.isImage ? (_jsx(ImageViewer, { applicationId: applicationId, path: active.path })) : active.binary ? (_jsx(EmptyMessage, { children: "Binary file \u2014 preview not available" })) : active.tooLarge ? (_jsx(EmptyMessage, { children: "File is too large to preview" })) : active.isMarkdown && active.viewMode === 'rendered' ? (_jsx(MarkdownPreview, { source: active.content, isDark: isDark })) : (_jsx(MonacoEditor, { height: "100%", theme: monacoTheme, language: languageForPath(active.path), value: active.content, onChange: handleChange, options: {
|
|
98
|
+
fontSize: 13,
|
|
99
|
+
minimap: { enabled: true },
|
|
100
|
+
scrollBeyondLastLine: false,
|
|
101
|
+
automaticLayout: true,
|
|
102
|
+
tabSize: 2,
|
|
103
|
+
wordWrap: 'off',
|
|
104
|
+
renderWhitespace: 'selection',
|
|
105
|
+
smoothScrolling: true,
|
|
106
|
+
} }, active.path))) : (_jsx(EmptyMessage, { children: "Select a file from the tree to start editing" })) })] }));
|
|
107
|
+
}
|
|
108
|
+
function EmptyMessage({ children }) {
|
|
109
|
+
return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-xs", children: children }));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* MarkdownPreview
|
|
113
|
+
*
|
|
114
|
+
* Lightweight rendered view for `.md` / `.mdx` files using `react-markdown`
|
|
115
|
+
* + `remark-gfm` (tables, strikethrough, task lists). Styled against the
|
|
116
|
+
* vs-dark editor backdrop so it doesn't clash when toggling source/preview.
|
|
117
|
+
*/
|
|
118
|
+
/**
|
|
119
|
+
* Stable (module-scoped) `Components` map for the markdown preview.
|
|
120
|
+
*
|
|
121
|
+
* Styling is expressed with Tailwind's `dark:` variants and semantic
|
|
122
|
+
* tokens (`border-border`, `text-foreground`) so the preview follows the
|
|
123
|
+
* app theme without us reading `isDark` in the render tree.
|
|
124
|
+
*/
|
|
125
|
+
const MARKDOWN_COMPONENTS = {
|
|
126
|
+
h1: ({ children }) => (_jsx("h1", { className: "border-border text-foreground mt-6 mb-4 border-b pb-2 text-2xl font-semibold", children: children })),
|
|
127
|
+
h2: ({ children }) => (_jsx("h2", { className: "border-border text-foreground mt-5 mb-3 border-b pb-1 text-xl font-semibold", children: children })),
|
|
128
|
+
h3: ({ children }) => (_jsx("h3", { className: "text-foreground mt-4 mb-2 text-lg font-semibold", children: children })),
|
|
129
|
+
p: ({ children }) => _jsx("p", { className: "my-3", children: children }),
|
|
130
|
+
a: ({ children, href }) => (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", className: "text-sky-600 underline hover:text-sky-500 dark:text-sky-400 dark:hover:text-sky-300", children: children })),
|
|
131
|
+
ul: ({ children }) => _jsx("ul", { className: "my-3 ml-6 list-disc", children: children }),
|
|
132
|
+
ol: ({ children }) => _jsx("ol", { className: "my-3 ml-6 list-decimal", children: children }),
|
|
133
|
+
li: ({ children }) => _jsx("li", { className: "my-1", children: children }),
|
|
134
|
+
blockquote: ({ children }) => (_jsx("blockquote", { className: "border-border text-muted-foreground my-3 border-l-4 pl-4 italic", children: children })),
|
|
135
|
+
code: ({ className, children }) => {
|
|
136
|
+
const inline = !className;
|
|
137
|
+
return inline ? (_jsx("code", { className: "bg-muted rounded px-1.5 py-0.5 font-mono text-[12px] text-pink-600 dark:text-pink-300", children: children })) : (_jsx("code", { className: cn('font-mono text-[12px]', className), children: children }));
|
|
138
|
+
},
|
|
139
|
+
pre: ({ children }) => (_jsx("pre", { className: "border-border bg-muted/60 my-4 overflow-auto rounded-md border p-3", children: children })),
|
|
140
|
+
hr: () => _jsx("hr", { className: "border-border my-6" }),
|
|
141
|
+
table: ({ children }) => (_jsx("table", { className: "border-border my-4 border-collapse border", children: children })),
|
|
142
|
+
th: ({ children }) => (_jsx("th", { className: "border-border bg-muted/60 border px-3 py-1 text-left font-semibold", children: children })),
|
|
143
|
+
td: ({ children }) => _jsx("td", { className: "border-border border px-3 py-1", children: children }),
|
|
144
|
+
};
|
|
145
|
+
function MarkdownPreview({ source, isDark }) {
|
|
146
|
+
return (_jsx("div", { className: cn('text-foreground h-full overflow-auto px-8 py-6 text-[13px]', isDark ? 'bg-[#1e1e1e]' : 'bg-[#ffffff]'), children: _jsx("div", { className: "markdown-preview mx-auto max-w-3xl leading-6", children: _jsx(ReactMarkdown, { remarkPlugins: [remarkGfm], components: MARKDOWN_COMPONENTS, children: source }) }) }));
|
|
147
|
+
}
|