@shepai/cli 1.179.1 → 1.180.0-pr548.764147
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/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +11 -6
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts +2 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.js +2 -2
- package/dist/packages/core/src/infrastructure/services/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/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +3 -2
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts +16 -5
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/pr-branding.js +38 -7
- package/dist/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 +4 -3
- package/web/.next/required-server-files.json +4 -3
- 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/_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/_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/{_7d50fed0._.js → _946a7fc6._.js} +3 -3
- package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_948d3cc6._.js +3 -0
- package/web/.next/server/chunks/ssr/_948d3cc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_5889596f._.js → _96718a00._.js} +2 -2
- package/web/.next/server/chunks/ssr/_96718a00._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9df33116._.js +3 -0
- package/web/.next/server/chunks/ssr/_9df33116._.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/_e071ba48._.js +3 -0
- package/web/.next/server/chunks/ssr/_e071ba48._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ee88b448._.js +3 -0
- package/web/.next/server/chunks/ssr/_ee88b448._.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/_ff6f3257._.js +3 -0
- package/web/.next/server/chunks/ssr/_ff6f3257._.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_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/{d26d0a7bc1a9b5a4.js → 010215070d22b4e6.js} +2 -2
- package/web/.next/static/chunks/06b9d6dbf635c370.css +1 -0
- package/web/.next/static/chunks/0a67d6e50e27452e.js +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/2a64d4b1a285fac5.js +1 -0
- package/web/.next/static/chunks/2ddda685a9100fd8.js +19 -0
- package/web/.next/static/chunks/2fe20598e1b4793a.js +5 -0
- package/web/.next/static/chunks/3ee4449e73eb4917.js +1 -0
- package/web/.next/static/chunks/{eb1ca1b0a34166f5.js → 66261997e6f830f1.js} +1 -1
- package/web/.next/static/chunks/6ecbcce796343f44.js +1 -0
- package/web/.next/static/chunks/7c3fe3c694874dea.js +1 -0
- package/web/.next/static/chunks/8f783e12274578c2.js +1 -0
- package/web/.next/static/chunks/927442d2628f6e22.js +1 -0
- package/web/.next/static/chunks/9370d114ce5b69fb.js +7 -0
- package/web/.next/static/chunks/b17c2d874c373d4e.js +1 -0
- package/web/.next/static/chunks/b2a010b2ba8710f4.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/{5a2bdbc57ed1368e.js → c1559152cf2ab9c6.js} +1 -1
- package/web/.next/static/chunks/d2182843a406b5a7.js +5 -0
- package/web/.next/static/chunks/edf812d5efffa096.js +7 -0
- package/web/.next/static/chunks/{f5c61237675acc89.js → ee9a716c6424ff25.js} +1 -1
- package/web/.next/static/chunks/f7a55ba1f789c55f.js +1 -0
- package/web/.next/static/chunks/fcf27468f8026dbd.js +1 -0
- 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/static/chunks/fb7211d94190d010.js +0 -5
- /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 → ex3OTWRXHxfwD9RkifALI}/_buildManifest.js +0 -0
- /package/web/.next/static/{mLJ1Qa4FUFmmZm0crRH2U → ex3OTWRXHxfwD9RkifALI}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{mLJ1Qa4FUFmmZm0crRH2U → ex3OTWRXHxfwD9RkifALI}/_ssgManifest.js +0 -0
package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js
CHANGED
|
@@ -10,15 +10,22 @@
|
|
|
10
10
|
* are spawned in unit tests — the factory is replaced with a test double).
|
|
11
11
|
*/
|
|
12
12
|
import * as crypto from 'node:crypto';
|
|
13
|
-
import { InteractiveSessionStatus, InteractiveMessageRole, AgentType, AgentAuthMethod, } from '../../../domain/generated/output.js';
|
|
13
|
+
import { InteractiveSessionStatus, InteractiveMessageRole, AgentType, AgentAuthMethod, WorkflowStepStatus, } from '../../../domain/generated/output.js';
|
|
14
14
|
import { ConcurrentSessionLimitError } from '../../../domain/errors/concurrent-session-limit.error.js';
|
|
15
15
|
import { getSettings, hasSettings } from '../settings.service.js';
|
|
16
|
-
/** Default idle timeout if no settings are loaded (15 minutes). */
|
|
17
|
-
const DEFAULT_TIMEOUT_MS = 15 * 60 * 1000;
|
|
18
16
|
/** Default concurrent session cap. */
|
|
19
17
|
const DEFAULT_CAP = 3;
|
|
20
|
-
/**
|
|
21
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Boot-phase watchdog: how long the agent is allowed to go WITHOUT
|
|
20
|
+
* emitting any stream event (delta / tool_use / tool_result / status)
|
|
21
|
+
* before we consider the boot stuck and abort it.
|
|
22
|
+
*
|
|
23
|
+
* This is an IDLE timer, not a wall-clock budget: each event received
|
|
24
|
+
* resets it. That's essential for application-creation flows where the
|
|
25
|
+
* first turn legitimately takes many minutes (scaffold + install + build
|
|
26
|
+
* a whole project). A fixed wall-clock budget would kill those mid-way.
|
|
27
|
+
*/
|
|
28
|
+
const BOOT_IDLE_TIMEOUT_MS = 120_000;
|
|
22
29
|
/**
|
|
23
30
|
* Core service managing interactive agent session lifecycles.
|
|
24
31
|
* Must be registered as a singleton in the DI container.
|
|
@@ -40,6 +47,7 @@ export class InteractiveSessionService {
|
|
|
40
47
|
executorFactory;
|
|
41
48
|
featureRepo;
|
|
42
49
|
contextBuilder;
|
|
50
|
+
workflowStepRepo;
|
|
43
51
|
/** Live sessions indexed by sessionId. */
|
|
44
52
|
sessions = new Map();
|
|
45
53
|
/** Cached agentSessionIds from stopped sessions, keyed by featureId. */
|
|
@@ -52,23 +60,73 @@ export class InteractiveSessionService {
|
|
|
52
60
|
* subscribe here so they continue receiving events from new sessions.
|
|
53
61
|
*/
|
|
54
62
|
featureSubscribers = new Map();
|
|
55
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Global subscribers — receive every chunk from every session tagged
|
|
65
|
+
* with its feature scope key. Used by the global turn-status SSE
|
|
66
|
+
* endpoint so the sidebar can track all active sessions without
|
|
67
|
+
* polling.
|
|
68
|
+
*/
|
|
69
|
+
globalSubscribers = new Set();
|
|
70
|
+
/**
|
|
71
|
+
* Currently-active workflow step id per feature scope. Set by the
|
|
72
|
+
* orchestrator (`RunWorkflowUseCase`) before each agent turn and
|
|
73
|
+
* cleared between steps. `persistMessage` reads this so every row
|
|
74
|
+
* it inserts is tagged with the right `step_id`. In-memory only —
|
|
75
|
+
* the DB is the source of truth for per-message `stepId`.
|
|
76
|
+
*/
|
|
77
|
+
activeStepByFeature = new Map();
|
|
78
|
+
constructor(sessionRepo, messageRepo, executorFactory, featureRepo, contextBuilder, workflowStepRepo) {
|
|
56
79
|
this.sessionRepo = sessionRepo;
|
|
57
80
|
this.messageRepo = messageRepo;
|
|
58
81
|
this.executorFactory = executorFactory;
|
|
59
82
|
this.featureRepo = featureRepo;
|
|
60
83
|
this.contextBuilder = contextBuilder;
|
|
84
|
+
this.workflowStepRepo = workflowStepRepo;
|
|
61
85
|
}
|
|
62
86
|
// ---------------------------------------------------------------------------
|
|
63
87
|
// Public API
|
|
64
88
|
// ---------------------------------------------------------------------------
|
|
65
|
-
async startSession(featureId, worktreePath, model, agentType) {
|
|
89
|
+
async startSession(featureId, worktreePath, model, agentType, systemPrompt, initialUserMessage) {
|
|
66
90
|
const cap = this.getCap();
|
|
67
91
|
const activeCount = await this.sessionRepo.countActiveSessions();
|
|
68
92
|
if (activeCount >= cap) {
|
|
69
93
|
throw new ConcurrentSessionLimitError(activeCount, cap);
|
|
70
94
|
}
|
|
71
|
-
//
|
|
95
|
+
// ─────────────────────────────────────────────────────────────
|
|
96
|
+
// Resume-aware boot: look up the previous session's agent
|
|
97
|
+
// sessionId BEFORE inserting the new row.
|
|
98
|
+
//
|
|
99
|
+
// Ordering matters CRITICALLY here. If we created the new DB
|
|
100
|
+
// session row first and then called `findByFeatureId`, the repo
|
|
101
|
+
// would return the row we just inserted (most recent by
|
|
102
|
+
// createdAt) — which has no agentSessionId yet — and the old,
|
|
103
|
+
// semantically-still-meaningful row would be invisible. That
|
|
104
|
+
// silently downgrades every reboot to a `createSession` call,
|
|
105
|
+
// stranding the agent with zero conversation history and making
|
|
106
|
+
// it answer "this appears to be the start of our conversation"
|
|
107
|
+
// to the user's second message. Look it up first.
|
|
108
|
+
// ─────────────────────────────────────────────────────────────
|
|
109
|
+
let previousAgentSessionId;
|
|
110
|
+
for (const [, s] of this.sessions) {
|
|
111
|
+
if (s.featureId === featureId && s.agentSessionId) {
|
|
112
|
+
previousAgentSessionId = s.agentSessionId;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Also check stoppedSessions cache (populated on stop)
|
|
117
|
+
previousAgentSessionId ??= this.stoppedAgentSessionIds.get(featureId);
|
|
118
|
+
// Fall back to DB — the in-memory cache may be empty after
|
|
119
|
+
// service restart, hot reload, or Turbopack module re-init.
|
|
120
|
+
//
|
|
121
|
+
// Use `findLatestAgentSessionIdForFeature` (not `findByFeatureId`
|
|
122
|
+
// → `getAgentSessionId`) so we walk BACK through history to find
|
|
123
|
+
// the most recent session that actually captured an
|
|
124
|
+
// agentSessionId. This covers the case where the latest row is a
|
|
125
|
+
// failed-boot session with a NULL agentSessionId — without this,
|
|
126
|
+
// one bad boot would permanently orphan the agent conversation.
|
|
127
|
+
previousAgentSessionId ??=
|
|
128
|
+
(await this.sessionRepo.findLatestAgentSessionIdForFeature(featureId)) ?? undefined;
|
|
129
|
+
// Create DB record with booting status (AFTER the lookup above).
|
|
72
130
|
const now = new Date();
|
|
73
131
|
const session = {
|
|
74
132
|
id: crypto.randomUUID(),
|
|
@@ -80,36 +138,28 @@ export class InteractiveSessionService {
|
|
|
80
138
|
updatedAt: now,
|
|
81
139
|
};
|
|
82
140
|
await this.sessionRepo.create(session);
|
|
141
|
+
this.notifyByFeatureId(featureId, {
|
|
142
|
+
delta: '',
|
|
143
|
+
done: false,
|
|
144
|
+
sessionStatus: InteractiveSessionStatus.booting,
|
|
145
|
+
});
|
|
83
146
|
// Mark as processing immediately so the FAB shows the spinner during boot
|
|
84
|
-
void this.
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Also check stoppedSessions cache (populated on stop)
|
|
94
|
-
previousAgentSessionId ??= this.stoppedAgentSessionIds.get(featureId);
|
|
95
|
-
// Fall back to DB — the in-memory cache may be empty after service restart
|
|
96
|
-
if (!previousAgentSessionId) {
|
|
97
|
-
const latestDbSession = await this.sessionRepo.findByFeatureId(featureId);
|
|
98
|
-
if (latestDbSession) {
|
|
99
|
-
previousAgentSessionId =
|
|
100
|
-
(await this.sessionRepo.getAgentSessionId(latestDbSession.id)) ?? undefined;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Set up in-memory state
|
|
147
|
+
void this.updateTurnStatusAndNotify(session.id, featureId, 'processing');
|
|
148
|
+
// Set up in-memory state. CRITICAL: pendingUserContent must be set
|
|
149
|
+
// BEFORE completeBootAsync is dispatched below. Setting it from the
|
|
150
|
+
// caller after startSession returns is a race — the async boot may
|
|
151
|
+
// already be reading state.pendingUserContent === undefined on the
|
|
152
|
+
// same microtask, fall into the "no-first-turn" branch, and silently
|
|
153
|
+
// skip the kickoff send.
|
|
104
154
|
const state = {
|
|
105
155
|
sessionId: session.id,
|
|
106
156
|
featureId,
|
|
107
157
|
worktreePath,
|
|
108
158
|
model,
|
|
109
159
|
agentType,
|
|
160
|
+
systemPrompt,
|
|
110
161
|
handle: null,
|
|
111
162
|
agentSessionId: previousAgentSessionId,
|
|
112
|
-
timer: null,
|
|
113
163
|
currentAssistantBuffer: '',
|
|
114
164
|
toolEventsLog: [],
|
|
115
165
|
subscribers: new Set(),
|
|
@@ -117,6 +167,7 @@ export class InteractiveSessionService {
|
|
|
117
167
|
turnQueue: [],
|
|
118
168
|
pendingInteraction: null,
|
|
119
169
|
pendingInteractionResolver: null,
|
|
170
|
+
pendingUserContent: initialUserMessage,
|
|
120
171
|
};
|
|
121
172
|
this.sessions.set(session.id, state);
|
|
122
173
|
// Fire-and-forget the async boot sequence. The API returns the session
|
|
@@ -132,61 +183,50 @@ export class InteractiveSessionService {
|
|
|
132
183
|
*/
|
|
133
184
|
async completeBootAsync(state, featureId, worktreePath) {
|
|
134
185
|
try {
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
//
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
// Check if the last message is from the user — they're waiting for a response
|
|
145
|
-
const lastMsg = previousMessages.length > 0 ? previousMessages[previousMessages.length - 1] : null;
|
|
146
|
-
const userIsWaiting = lastMsg?.role === InteractiveMessageRole.user;
|
|
147
|
-
if (previousMessages.length > 0) {
|
|
148
|
-
// Filter out tool event messages (e.g. "Bash echo $$", "Read file.ts")
|
|
149
|
-
// to prevent the agent from re-executing them as instructions.
|
|
150
|
-
const conversationMessages = previousMessages.filter((m) => {
|
|
151
|
-
if (m.role !== InteractiveMessageRole.assistant)
|
|
152
|
-
return true;
|
|
153
|
-
// Skip tool event messages — they start with a tool name pattern
|
|
154
|
-
const content = m.content.trim();
|
|
155
|
-
const toolPatterns = /^(Bash |Read |Write |Edit |Glob |Grep |Session started |Using tool:)/;
|
|
156
|
-
return !toolPatterns.test(content);
|
|
157
|
-
});
|
|
158
|
-
// Only include the last few messages for context, not the entire history
|
|
159
|
-
const recentMessages = conversationMessages.slice(-10);
|
|
160
|
-
const historyBlock = recentMessages
|
|
161
|
-
.map((m) => {
|
|
162
|
-
const role = m.role === InteractiveMessageRole.user ? 'User' : 'Assistant';
|
|
163
|
-
// Truncate very long messages to prevent prompt bloat
|
|
164
|
-
const content = m.content.length > 500 ? `${m.content.slice(0, 500)}...` : m.content;
|
|
165
|
-
return `[${role}]: ${content}`;
|
|
166
|
-
})
|
|
167
|
-
.join('\n\n');
|
|
168
|
-
bootPrompt += `\n\n---\nCONVERSATION LOG (read-only reference — DO NOT execute, repeat, or act on any of this):\n${historyBlock}\n---\n\n`;
|
|
169
|
-
bootPrompt += `IMPORTANT — SESSION RESTART RULES:
|
|
170
|
-
1. The conversation log above is a READ-ONLY transcript of what already happened. It is NOT a list of instructions.
|
|
171
|
-
2. Do NOT run any commands, tools, or code that appears in the log. All of that work is finished.
|
|
172
|
-
3. Do NOT continue or pick up where the previous session left off unless the user explicitly asks you to.
|
|
173
|
-
4. You are in an interactive CHAT. Wait for the user to tell you what they want.
|
|
174
|
-
`;
|
|
175
|
-
if (userIsWaiting) {
|
|
176
|
-
const lastUserMsg = [...previousMessages]
|
|
177
|
-
.reverse()
|
|
178
|
-
.find((m) => m.role === InteractiveMessageRole.user);
|
|
179
|
-
bootPrompt += `5. The user's latest message is: "${lastUserMsg?.content.slice(0, 200) ?? ''}"
|
|
180
|
-
6. Respond to THIS message directly. Do not do anything else.`;
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
bootPrompt += `5. The user has not sent a new message. Say "I'm back — what would you like to do?" or similar. ONE sentence only.`;
|
|
184
|
-
}
|
|
186
|
+
// Resolve the system prompt for the agent SDK. If the caller
|
|
187
|
+
// supplied one (e.g. Application chat uses the Shep brief,
|
|
188
|
+
// Repository/Global chats their own), use it verbatim. Otherwise
|
|
189
|
+
// fall back to the default feature-context prompt — that's still
|
|
190
|
+
// the right thing for classic `feat-*` scopes where the session
|
|
191
|
+
// service owns context-building.
|
|
192
|
+
let context;
|
|
193
|
+
if (state.systemPrompt !== undefined) {
|
|
194
|
+
context = state.systemPrompt;
|
|
185
195
|
}
|
|
186
|
-
|
|
187
|
-
|
|
196
|
+
else {
|
|
197
|
+
const feature = await this.featureRepo.findById(featureId);
|
|
198
|
+
const openPRs = feature?.pr?.url ? [feature.pr.url] : [];
|
|
199
|
+
context = this.contextBuilder.buildContext(feature ??
|
|
200
|
+
{ id: featureId, name: featureId }, worktreePath, openPRs);
|
|
201
|
+
}
|
|
202
|
+
// Decide what to send as the first turn (`handle.send(bootPrompt)`
|
|
203
|
+
// below). The chat is stateless from the agent's point of view —
|
|
204
|
+
// no prior history is injected, no session-restart rules, no
|
|
205
|
+
// "conversation log read-only" wrapper. Three cases:
|
|
206
|
+
//
|
|
207
|
+
// 1. User already sent a message that booted this session
|
|
208
|
+
// (Application chat, or any scope that calls sendUserMessage
|
|
209
|
+
// cold) → that pending content IS the first turn.
|
|
210
|
+
//
|
|
211
|
+
// 2. No pending message AND no caller-supplied systemPrompt →
|
|
212
|
+
// legacy Feature-chat path: send the feature context as the
|
|
213
|
+
// boot prompt so the agent greets the user based on it.
|
|
214
|
+
//
|
|
215
|
+
// 3. No pending message BUT caller supplied systemPrompt →
|
|
216
|
+
// scope is self-describing; stay silent and wait for the user
|
|
217
|
+
// to speak. Applicable to any generic scope (Application,
|
|
218
|
+
// Repository, Global) where a chatty greeting isn't wanted.
|
|
219
|
+
let bootPrompt;
|
|
220
|
+
if (state.pendingUserContent !== undefined) {
|
|
221
|
+
bootPrompt = state.pendingUserContent;
|
|
188
222
|
state.pendingUserContent = undefined;
|
|
189
223
|
}
|
|
224
|
+
else if (state.systemPrompt === undefined) {
|
|
225
|
+
bootPrompt = context;
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
bootPrompt = '';
|
|
229
|
+
}
|
|
190
230
|
// Resolve agent type and auth config from settings
|
|
191
231
|
const resolvedAgentType = this.resolveAgentType(state.agentType);
|
|
192
232
|
const authConfig = this.resolveAuthConfig();
|
|
@@ -216,21 +256,42 @@ export class InteractiveSessionService {
|
|
|
216
256
|
});
|
|
217
257
|
}
|
|
218
258
|
state.handle = handle;
|
|
259
|
+
// If there's no first user turn to act on, don't push anything —
|
|
260
|
+
// the session is ready the moment the SDK handle exists. The user
|
|
261
|
+
// will send their first message through the normal turn path.
|
|
262
|
+
if (!bootPrompt) {
|
|
263
|
+
await this.updateSessionStatusAndNotify(state.sessionId, state.featureId, InteractiveSessionStatus.ready);
|
|
264
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'idle');
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
219
267
|
// Send the boot prompt and iterate stream for the greeting
|
|
220
268
|
await handle.send(bootPrompt);
|
|
221
269
|
let greetingText = '';
|
|
222
270
|
const bootAbort = new AbortController();
|
|
223
271
|
state.streamAbort = bootAbort;
|
|
224
|
-
//
|
|
225
|
-
|
|
272
|
+
// Idle watchdog: reset on every event. If the agent goes silent
|
|
273
|
+
// for longer than BOOT_IDLE_TIMEOUT_MS, abort the boot. This is
|
|
274
|
+
// NOT a wall-clock budget — long first turns (full project
|
|
275
|
+
// scaffold + install + build) are fine as long as the stream
|
|
276
|
+
// keeps producing events.
|
|
277
|
+
let bootTimeout = setTimeout(() => {
|
|
226
278
|
bootAbort.abort();
|
|
227
|
-
},
|
|
279
|
+
}, BOOT_IDLE_TIMEOUT_MS);
|
|
280
|
+
const bumpBootWatchdog = () => {
|
|
281
|
+
clearTimeout(bootTimeout);
|
|
282
|
+
bootTimeout = setTimeout(() => {
|
|
283
|
+
bootAbort.abort();
|
|
284
|
+
}, BOOT_IDLE_TIMEOUT_MS);
|
|
285
|
+
};
|
|
228
286
|
try {
|
|
229
287
|
for await (const event of handle.stream()) {
|
|
230
288
|
if (bootAbort.signal.aborted) {
|
|
231
|
-
throw new Error(`Agent boot
|
|
289
|
+
throw new Error(`Agent boot stalled for ${BOOT_IDLE_TIMEOUT_MS / 1000}s with no stream activity`);
|
|
232
290
|
}
|
|
233
|
-
|
|
291
|
+
// Any event = proof of life. Reset the boot watchdog so a
|
|
292
|
+
// long-running first turn (full project scaffold) isn't
|
|
293
|
+
// killed as long as the stream keeps producing events.
|
|
294
|
+
bumpBootWatchdog();
|
|
234
295
|
switch (event.type) {
|
|
235
296
|
case 'delta':
|
|
236
297
|
if (event.content) {
|
|
@@ -300,19 +361,17 @@ export class InteractiveSessionService {
|
|
|
300
361
|
createdAt: new Date(),
|
|
301
362
|
updatedAt: new Date(),
|
|
302
363
|
};
|
|
303
|
-
await this.
|
|
304
|
-
await this.
|
|
364
|
+
await this.persistMessage(greetingMsg);
|
|
365
|
+
await this.updateSessionStatusAndNotify(state.sessionId, state.featureId, InteractiveSessionStatus.ready);
|
|
305
366
|
// If there's a pending user message, the next turn will set 'processing'.
|
|
306
367
|
// Otherwise boot greeting is expected — mark idle.
|
|
307
368
|
if (!state.pendingUserContent) {
|
|
308
|
-
void this.
|
|
369
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'idle');
|
|
309
370
|
}
|
|
310
371
|
state.currentAssistantBuffer = '';
|
|
311
372
|
state.toolEventsLog = [];
|
|
312
373
|
// Notify subscribers of end-of-turn
|
|
313
374
|
this.notify(state, { delta: '', done: true });
|
|
314
|
-
// Start idle timer now that the session is live
|
|
315
|
-
this.resetTimer(state);
|
|
316
375
|
return; // Boot complete
|
|
317
376
|
}
|
|
318
377
|
case 'error':
|
|
@@ -335,15 +394,14 @@ export class InteractiveSessionService {
|
|
|
335
394
|
createdAt: new Date(),
|
|
336
395
|
updatedAt: new Date(),
|
|
337
396
|
};
|
|
338
|
-
await this.
|
|
397
|
+
await this.persistMessage(greetingMsg);
|
|
339
398
|
}
|
|
340
|
-
await this.
|
|
399
|
+
await this.updateSessionStatusAndNotify(state.sessionId, state.featureId, InteractiveSessionStatus.ready);
|
|
341
400
|
if (!state.pendingUserContent) {
|
|
342
|
-
void this.
|
|
401
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'idle');
|
|
343
402
|
}
|
|
344
403
|
state.currentAssistantBuffer = '';
|
|
345
404
|
state.toolEventsLog = [];
|
|
346
|
-
this.resetTimer(state);
|
|
347
405
|
}
|
|
348
406
|
catch (err) {
|
|
349
407
|
// If session was already cleaned up by stopSession, nothing more to do
|
|
@@ -353,7 +411,7 @@ export class InteractiveSessionService {
|
|
|
353
411
|
// eslint-disable-next-line no-console
|
|
354
412
|
console.error(`[InteractiveSession] boot failed for session ${state.sessionId}:`, err);
|
|
355
413
|
try {
|
|
356
|
-
await this.
|
|
414
|
+
await this.updateSessionStatusAndNotify(state.sessionId, state.featureId, InteractiveSessionStatus.error);
|
|
357
415
|
}
|
|
358
416
|
catch {
|
|
359
417
|
// Best-effort DB update
|
|
@@ -379,7 +437,6 @@ export class InteractiveSessionService {
|
|
|
379
437
|
}
|
|
380
438
|
state.turnQueue.length = 0;
|
|
381
439
|
state.turnInProgress = false;
|
|
382
|
-
this.clearTimer(state);
|
|
383
440
|
// Cache agentSessionId so resumption works when session restarts
|
|
384
441
|
if (state.agentSessionId) {
|
|
385
442
|
this.stoppedAgentSessionIds.set(state.featureId, state.agentSessionId);
|
|
@@ -395,8 +452,8 @@ export class InteractiveSessionService {
|
|
|
395
452
|
}
|
|
396
453
|
state.handle = null;
|
|
397
454
|
}
|
|
398
|
-
await this.
|
|
399
|
-
void this.
|
|
455
|
+
await this.updateSessionStatusAndNotify(sessionId, state.featureId, InteractiveSessionStatus.stopped, new Date());
|
|
456
|
+
void this.updateTurnStatusAndNotify(sessionId, state.featureId, 'idle');
|
|
400
457
|
}
|
|
401
458
|
async sendMessage(sessionId, content) {
|
|
402
459
|
const dbSession = await this.sessionRepo.findById(sessionId);
|
|
@@ -418,9 +475,7 @@ export class InteractiveSessionService {
|
|
|
418
475
|
createdAt: now,
|
|
419
476
|
updatedAt: now,
|
|
420
477
|
};
|
|
421
|
-
await this.
|
|
422
|
-
// Reset idle timer on user activity
|
|
423
|
-
this.resetTimer(state);
|
|
478
|
+
await this.persistMessage(message);
|
|
424
479
|
await this.sessionRepo.updateLastActivity(sessionId, now);
|
|
425
480
|
// Guard: only one turn at a time per session (SDK stream is not concurrent-safe)
|
|
426
481
|
if (state.turnInProgress) {
|
|
@@ -443,7 +498,7 @@ export class InteractiveSessionService {
|
|
|
443
498
|
state.currentAssistantBuffer = '';
|
|
444
499
|
state.toolEventsLog = [];
|
|
445
500
|
// Mark turn as processing for dot indicator
|
|
446
|
-
void this.
|
|
501
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'processing');
|
|
447
502
|
// Send the message to the SDK session
|
|
448
503
|
await state.handle.send(prompt);
|
|
449
504
|
// Set up abort controller for this stream
|
|
@@ -454,8 +509,6 @@ export class InteractiveSessionService {
|
|
|
454
509
|
for await (const event of state.handle.stream()) {
|
|
455
510
|
if (abort.signal.aborted)
|
|
456
511
|
break;
|
|
457
|
-
// Reset idle timer on each event received
|
|
458
|
-
this.resetTimer(state);
|
|
459
512
|
switch (event.type) {
|
|
460
513
|
case 'delta':
|
|
461
514
|
if (event.content) {
|
|
@@ -510,7 +563,7 @@ export class InteractiveSessionService {
|
|
|
510
563
|
createdAt: now,
|
|
511
564
|
updatedAt: now,
|
|
512
565
|
};
|
|
513
|
-
await this.
|
|
566
|
+
await this.persistMessage(msg);
|
|
514
567
|
state.currentAssistantBuffer = '';
|
|
515
568
|
state.toolEventsLog = [];
|
|
516
569
|
// Accumulate usage from this turn
|
|
@@ -524,7 +577,7 @@ export class InteractiveSessionService {
|
|
|
524
577
|
}
|
|
525
578
|
// Mark as unread — if user has the chat open, the frontend
|
|
526
579
|
// will immediately call markRead to clear it
|
|
527
|
-
void this.
|
|
580
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'unread');
|
|
528
581
|
// Notify subscribers of end-of-turn
|
|
529
582
|
this.notify(state, { delta: '', done: true });
|
|
530
583
|
return; // Turn complete
|
|
@@ -619,7 +672,7 @@ export class InteractiveSessionService {
|
|
|
619
672
|
createdAt: now,
|
|
620
673
|
updatedAt: now,
|
|
621
674
|
};
|
|
622
|
-
await this.
|
|
675
|
+
await this.persistMessage(msg);
|
|
623
676
|
state.currentAssistantBuffer = '';
|
|
624
677
|
state.toolEventsLog = [];
|
|
625
678
|
this.notify(state, { delta: '', done: true });
|
|
@@ -639,7 +692,7 @@ export class InteractiveSessionService {
|
|
|
639
692
|
}
|
|
640
693
|
this.sessions.delete(state.sessionId);
|
|
641
694
|
try {
|
|
642
|
-
await this.
|
|
695
|
+
await this.updateSessionStatusAndNotify(state.sessionId, state.featureId, InteractiveSessionStatus.error);
|
|
643
696
|
}
|
|
644
697
|
catch {
|
|
645
698
|
// Best-effort DB update
|
|
@@ -675,6 +728,8 @@ export class InteractiveSessionService {
|
|
|
675
728
|
}
|
|
676
729
|
// Also clear the cached agentSessionId so next session starts fresh
|
|
677
730
|
this.stoppedAgentSessionIds.delete(featureId);
|
|
731
|
+
await this.workflowStepRepo.deleteByFeatureId(featureId);
|
|
732
|
+
this.activeStepByFeature.delete(featureId);
|
|
678
733
|
return this.messageRepo.deleteByFeatureId(featureId);
|
|
679
734
|
}
|
|
680
735
|
async getSession(sessionId) {
|
|
@@ -692,7 +747,7 @@ export class InteractiveSessionService {
|
|
|
692
747
|
// ---------------------------------------------------------------------------
|
|
693
748
|
// Feature-scoped API (frontend doesn't manage sessions)
|
|
694
749
|
// ---------------------------------------------------------------------------
|
|
695
|
-
async sendUserMessage(featureId, content, worktreePath, model, agentType) {
|
|
750
|
+
async sendUserMessage(featureId, content, worktreePath, model, agentType, systemPrompt, agentKickoffOverride) {
|
|
696
751
|
// 1. Persist user message to DB immediately — this is the source of truth
|
|
697
752
|
const now = new Date();
|
|
698
753
|
const userMsg = {
|
|
@@ -703,7 +758,7 @@ export class InteractiveSessionService {
|
|
|
703
758
|
createdAt: now,
|
|
704
759
|
updatedAt: now,
|
|
705
760
|
};
|
|
706
|
-
await this.
|
|
761
|
+
await this.persistMessage(userMsg);
|
|
707
762
|
// 2. Find active session for this feature
|
|
708
763
|
let state = this.findActiveStateForFeature(featureId);
|
|
709
764
|
// If the caller requested a different model/agent than the running session,
|
|
@@ -724,7 +779,6 @@ export class InteractiveSessionService {
|
|
|
724
779
|
const dbSession = await this.sessionRepo.findById(state.sessionId);
|
|
725
780
|
if (dbSession?.status === InteractiveSessionStatus.ready) {
|
|
726
781
|
// Session ready — send to agent (guarded: one turn at a time)
|
|
727
|
-
this.resetTimer(state);
|
|
728
782
|
await this.sessionRepo.updateLastActivity(state.sessionId, now);
|
|
729
783
|
if (state.turnInProgress) {
|
|
730
784
|
state.turnQueue.push(content);
|
|
@@ -748,14 +802,22 @@ export class InteractiveSessionService {
|
|
|
748
802
|
if (dbSession &&
|
|
749
803
|
(dbSession.status === InteractiveSessionStatus.ready ||
|
|
750
804
|
dbSession.status === InteractiveSessionStatus.booting)) {
|
|
751
|
-
await this.
|
|
752
|
-
}
|
|
753
|
-
// Boot a new session — startSession will find the agentSessionId from DB
|
|
754
|
-
const session = await this.startSession(featureId, worktreePath, model, agentType);
|
|
755
|
-
const newState = this.sessions.get(session.id);
|
|
756
|
-
if (newState) {
|
|
757
|
-
newState.pendingUserContent = content;
|
|
805
|
+
await this.updateSessionStatusAndNotify(dbSession.id, featureId, InteractiveSessionStatus.stopped, new Date());
|
|
758
806
|
}
|
|
807
|
+
// Boot a new session — startSession will find the agentSessionId from DB.
|
|
808
|
+
// Pass the first-turn content as `initialUserMessage` so it's
|
|
809
|
+
// written to the session state atomically BEFORE completeBootAsync
|
|
810
|
+
// is dispatched. Do NOT set pendingUserContent after startSession
|
|
811
|
+
// returns — that races with the async boot and results in the
|
|
812
|
+
// first turn being silently dropped.
|
|
813
|
+
//
|
|
814
|
+
// When the caller supplies `agentKickoffOverride` (e.g. the
|
|
815
|
+
// application-creation flow's "read SHEP_BRIEF.md first"
|
|
816
|
+
// directive), the agent's first turn uses the override while the
|
|
817
|
+
// DB-persisted user message keeps the raw `content` untouched —
|
|
818
|
+
// so the chat UI still shows just the user's verbatim request.
|
|
819
|
+
const firstTurnContent = agentKickoffOverride ?? content;
|
|
820
|
+
await this.startSession(featureId, worktreePath, model, agentType, systemPrompt, firstTurnContent);
|
|
759
821
|
}
|
|
760
822
|
return userMsg;
|
|
761
823
|
}
|
|
@@ -783,7 +845,6 @@ export class InteractiveSessionService {
|
|
|
783
845
|
startedAt: dbSession?.startedAt
|
|
784
846
|
? new Date(dbSession.startedAt).toISOString()
|
|
785
847
|
: new Date().toISOString(),
|
|
786
|
-
idleTimeoutMinutes: Math.round(this.getTimeoutMs() / 60_000),
|
|
787
848
|
lastActivityAt: dbSession?.lastActivityAt
|
|
788
849
|
? new Date(dbSession.lastActivityAt).toISOString()
|
|
789
850
|
: new Date().toISOString(),
|
|
@@ -808,7 +869,6 @@ export class InteractiveSessionService {
|
|
|
808
869
|
startedAt: latest.startedAt
|
|
809
870
|
? new Date(latest.startedAt).toISOString()
|
|
810
871
|
: new Date().toISOString(),
|
|
811
|
-
idleTimeoutMinutes: Math.round(this.getTimeoutMs() / 60_000),
|
|
812
872
|
lastActivityAt: latest.lastActivityAt
|
|
813
873
|
? new Date(latest.lastActivityAt).toISOString()
|
|
814
874
|
: new Date().toISOString(),
|
|
@@ -836,7 +896,37 @@ export class InteractiveSessionService {
|
|
|
836
896
|
}
|
|
837
897
|
// Include pending interaction if one exists
|
|
838
898
|
const pendingInteraction = state?.pendingInteraction ?? null;
|
|
839
|
-
|
|
899
|
+
// ── Workflow view — derived entirely from the DB so a browser
|
|
900
|
+
// refresh or daemon restart sees the exact same progress state.
|
|
901
|
+
// A step row in `running` status means the orchestrator had
|
|
902
|
+
// started that step before the crash; recovery flips it to
|
|
903
|
+
// `interrupted` at boot so we never show stale "running" after
|
|
904
|
+
// the daemon dies.
|
|
905
|
+
const workflowSteps = await this.workflowStepRepo.listByFeature(featureId);
|
|
906
|
+
let workflow = null;
|
|
907
|
+
if (workflowSteps.length > 0) {
|
|
908
|
+
const running = workflowSteps.find((s) => s.status === WorkflowStepStatus.running);
|
|
909
|
+
workflow = {
|
|
910
|
+
workflowId: workflowSteps[0].workflowId,
|
|
911
|
+
steps: workflowSteps,
|
|
912
|
+
currentStepId: running?.id ?? null,
|
|
913
|
+
};
|
|
914
|
+
// Derive turnStatus from the workflow: if any step is running,
|
|
915
|
+
// the agent is working — regardless of whether the in-memory
|
|
916
|
+
// session has been reloaded yet. This is the fix for "lose
|
|
917
|
+
// in-progress after refresh": the answer is always a SELECT.
|
|
918
|
+
if (running)
|
|
919
|
+
turnStatus = 'processing';
|
|
920
|
+
}
|
|
921
|
+
return {
|
|
922
|
+
messages,
|
|
923
|
+
sessionStatus,
|
|
924
|
+
streamingText,
|
|
925
|
+
sessionInfo,
|
|
926
|
+
turnStatus,
|
|
927
|
+
pendingInteraction,
|
|
928
|
+
workflow,
|
|
929
|
+
};
|
|
840
930
|
}
|
|
841
931
|
subscribeByFeature(featureId, onChunk) {
|
|
842
932
|
// Subscribe at the feature level so the callback survives session restarts.
|
|
@@ -855,6 +945,12 @@ export class InteractiveSessionService {
|
|
|
855
945
|
}
|
|
856
946
|
};
|
|
857
947
|
}
|
|
948
|
+
subscribeAll(onChunk) {
|
|
949
|
+
this.globalSubscribers.add(onChunk);
|
|
950
|
+
return () => {
|
|
951
|
+
this.globalSubscribers.delete(onChunk);
|
|
952
|
+
};
|
|
953
|
+
}
|
|
858
954
|
async stopByFeature(featureId) {
|
|
859
955
|
const state = this.findActiveStateForFeature(featureId);
|
|
860
956
|
if (!state)
|
|
@@ -865,13 +961,13 @@ export class InteractiveSessionService {
|
|
|
865
961
|
// Find the active session for this feature and clear unread status
|
|
866
962
|
const state = this.findActiveStateForFeature(featureId);
|
|
867
963
|
if (state) {
|
|
868
|
-
void this.
|
|
964
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'idle');
|
|
869
965
|
return;
|
|
870
966
|
}
|
|
871
967
|
// Fallback: check DB for the latest active session
|
|
872
968
|
const latest = await this.sessionRepo.findByFeatureId(featureId);
|
|
873
969
|
if (latest) {
|
|
874
|
-
void this.
|
|
970
|
+
void this.updateTurnStatusAndNotify(latest.id, featureId, 'idle');
|
|
875
971
|
}
|
|
876
972
|
}
|
|
877
973
|
async getTurnStatuses(featureIds) {
|
|
@@ -905,7 +1001,7 @@ export class InteractiveSessionService {
|
|
|
905
1001
|
createdAt: now,
|
|
906
1002
|
updatedAt: now,
|
|
907
1003
|
};
|
|
908
|
-
await this.
|
|
1004
|
+
await this.persistMessage(userMsg);
|
|
909
1005
|
// Resolve the Promise that the canUseTool callback is awaiting.
|
|
910
1006
|
// This unblocks the SDK stream — the agent resumes with the user's answers.
|
|
911
1007
|
state.pendingInteractionResolver(answers);
|
|
@@ -913,10 +1009,53 @@ export class InteractiveSessionService {
|
|
|
913
1009
|
state.pendingInteraction = null;
|
|
914
1010
|
state.pendingInteractionResolver = null;
|
|
915
1011
|
// Update turn status back to processing
|
|
916
|
-
void this.
|
|
1012
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'processing');
|
|
917
1013
|
// Clear the "Waiting for your response..." log
|
|
918
1014
|
state.subscribers.forEach((sub) => sub({ delta: '', done: false }));
|
|
919
1015
|
}
|
|
1016
|
+
// ---------------------------------------------------------------------------
|
|
1017
|
+
// Workflow orchestrator hooks
|
|
1018
|
+
// ---------------------------------------------------------------------------
|
|
1019
|
+
setActiveStep(featureId, stepId) {
|
|
1020
|
+
this.activeStepByFeature.set(featureId, stepId);
|
|
1021
|
+
}
|
|
1022
|
+
clearActiveStep(featureId) {
|
|
1023
|
+
this.activeStepByFeature.delete(featureId);
|
|
1024
|
+
}
|
|
1025
|
+
notifyWorkflowStep(featureId, step) {
|
|
1026
|
+
this.notifyByFeatureId(featureId, {
|
|
1027
|
+
delta: '',
|
|
1028
|
+
done: false,
|
|
1029
|
+
workflowStep: step,
|
|
1030
|
+
});
|
|
1031
|
+
}
|
|
1032
|
+
/**
|
|
1033
|
+
* Resolves the next time any subscriber receives a `done: true`
|
|
1034
|
+
* chunk for the given feature. The orchestrator subscribes BEFORE
|
|
1035
|
+
* sending the step prompt so the resolution can't race with the
|
|
1036
|
+
* agent finishing before the promise is set up.
|
|
1037
|
+
*/
|
|
1038
|
+
async waitForTurnDone(featureId, signal) {
|
|
1039
|
+
return new Promise((resolve, reject) => {
|
|
1040
|
+
if (signal?.aborted) {
|
|
1041
|
+
reject(new Error('waitForTurnDone aborted'));
|
|
1042
|
+
return;
|
|
1043
|
+
}
|
|
1044
|
+
const unsubscribe = this.subscribeByFeature(featureId, (chunk) => {
|
|
1045
|
+
if (chunk.done) {
|
|
1046
|
+
unsubscribe();
|
|
1047
|
+
signal?.removeEventListener('abort', onAbort);
|
|
1048
|
+
resolve();
|
|
1049
|
+
}
|
|
1050
|
+
});
|
|
1051
|
+
const onAbort = () => {
|
|
1052
|
+
unsubscribe();
|
|
1053
|
+
signal?.removeEventListener('abort', onAbort);
|
|
1054
|
+
reject(new Error('waitForTurnDone aborted'));
|
|
1055
|
+
};
|
|
1056
|
+
signal?.addEventListener('abort', onAbort);
|
|
1057
|
+
});
|
|
1058
|
+
}
|
|
920
1059
|
/**
|
|
921
1060
|
* Build the onUserQuestion callback for a session.
|
|
922
1061
|
* Called by the SDK's canUseTool when the agent invokes AskUserQuestion.
|
|
@@ -938,7 +1077,7 @@ export class InteractiveSessionService {
|
|
|
938
1077
|
createdAt: now,
|
|
939
1078
|
updatedAt: now,
|
|
940
1079
|
};
|
|
941
|
-
await this.
|
|
1080
|
+
await this.persistMessage(msg);
|
|
942
1081
|
state.currentAssistantBuffer = '';
|
|
943
1082
|
state.toolEventsLog = [];
|
|
944
1083
|
// Notify subscribers so the frontend picks up the new message
|
|
@@ -949,7 +1088,7 @@ export class InteractiveSessionService {
|
|
|
949
1088
|
// Store the interaction data for the frontend
|
|
950
1089
|
state.pendingInteraction = interaction;
|
|
951
1090
|
// Update turn status so the dot indicator shows amber
|
|
952
|
-
void this.
|
|
1091
|
+
void this.updateTurnStatusAndNotify(state.sessionId, state.featureId, 'awaiting_input');
|
|
953
1092
|
// Notify subscribers so SSE pushes the interaction to the frontend
|
|
954
1093
|
state.subscribers.forEach((sub) => sub({
|
|
955
1094
|
delta: '',
|
|
@@ -1014,7 +1153,7 @@ export class InteractiveSessionService {
|
|
|
1014
1153
|
createdAt: new Date(),
|
|
1015
1154
|
updatedAt: new Date(),
|
|
1016
1155
|
};
|
|
1017
|
-
await this.
|
|
1156
|
+
await this.persistMessage(msg);
|
|
1018
1157
|
}
|
|
1019
1158
|
catch {
|
|
1020
1159
|
// Non-critical — don't fail the turn for a tool event
|
|
@@ -1036,33 +1175,68 @@ export class InteractiveSessionService {
|
|
|
1036
1175
|
if (featureSubs) {
|
|
1037
1176
|
featureSubs.forEach((sub) => sub(chunk));
|
|
1038
1177
|
}
|
|
1178
|
+
this.globalSubscribers.forEach((sub) => sub(state.featureId, chunk));
|
|
1179
|
+
}
|
|
1180
|
+
/**
|
|
1181
|
+
* Notify feature-level subscribers when no in-memory session state is
|
|
1182
|
+
* available (e.g. while persisting the user message before cold-boot).
|
|
1183
|
+
* Session-scoped subscribers don't exist yet at that point.
|
|
1184
|
+
*/
|
|
1185
|
+
notifyByFeatureId(featureId, chunk) {
|
|
1186
|
+
const featureSubs = this.featureSubscribers.get(featureId);
|
|
1187
|
+
if (featureSubs) {
|
|
1188
|
+
featureSubs.forEach((sub) => sub(chunk));
|
|
1189
|
+
}
|
|
1190
|
+
this.globalSubscribers.forEach((sub) => sub(featureId, chunk));
|
|
1039
1191
|
}
|
|
1040
1192
|
// ---------------------------------------------------------------------------
|
|
1041
|
-
//
|
|
1193
|
+
// Mutation helpers — every DB write that changes observable state must go
|
|
1194
|
+
// through one of these so SSE subscribers receive a matching notification.
|
|
1195
|
+
// This is the contract that lets the client drop periodic polling.
|
|
1042
1196
|
// ---------------------------------------------------------------------------
|
|
1043
|
-
/**
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1197
|
+
/** Persist a message AND notify subscribers. Use everywhere instead of
|
|
1198
|
+
* calling `messageRepo.create` directly. The current active workflow
|
|
1199
|
+
* step for the feature (if any) is stamped onto the row so every
|
|
1200
|
+
* message is grouped under the right step card in the UI. */
|
|
1201
|
+
async persistMessage(message) {
|
|
1202
|
+
const activeStepId = this.activeStepByFeature.get(message.featureId);
|
|
1203
|
+
const tagged = message.stepId || !activeStepId ? message : { ...message, stepId: activeStepId };
|
|
1204
|
+
await this.messageRepo.create(tagged);
|
|
1205
|
+
this.notifyByFeatureId(tagged.featureId, {
|
|
1206
|
+
delta: '',
|
|
1207
|
+
done: false,
|
|
1208
|
+
message: tagged,
|
|
1209
|
+
});
|
|
1050
1210
|
}
|
|
1051
|
-
/**
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1211
|
+
/** Update session status AND notify subscribers. Passes `endedAt` to
|
|
1212
|
+
* the repo only when supplied so call-arity matches the legacy
|
|
1213
|
+
* two-argument shape (keeps existing test expectations happy). */
|
|
1214
|
+
async updateSessionStatusAndNotify(sessionId, featureId, status, endedAt) {
|
|
1215
|
+
if (endedAt === undefined) {
|
|
1216
|
+
await this.sessionRepo.updateStatus(sessionId, status);
|
|
1056
1217
|
}
|
|
1218
|
+
else {
|
|
1219
|
+
await this.sessionRepo.updateStatus(sessionId, status, endedAt);
|
|
1220
|
+
}
|
|
1221
|
+
this.notifyByFeatureId(featureId, {
|
|
1222
|
+
delta: '',
|
|
1223
|
+
done: false,
|
|
1224
|
+
sessionStatus: status,
|
|
1225
|
+
});
|
|
1057
1226
|
}
|
|
1058
|
-
/**
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1227
|
+
/** Update turn status AND notify subscribers. */
|
|
1228
|
+
async updateTurnStatusAndNotify(sessionId, featureId, turnStatus) {
|
|
1229
|
+
await this.sessionRepo.updateTurnStatus(sessionId, turnStatus);
|
|
1230
|
+
this.notifyByFeatureId(featureId, {
|
|
1231
|
+
delta: '',
|
|
1232
|
+
done: false,
|
|
1233
|
+
turnStatus,
|
|
1234
|
+
});
|
|
1065
1235
|
}
|
|
1236
|
+
// Idle-eviction timer removed. Live agent sessions are preserved
|
|
1237
|
+
// indefinitely and only stop on an explicit user action (Stop
|
|
1238
|
+
// button, new session reset, server shutdown). See `stopSession`
|
|
1239
|
+
// for the only teardown path.
|
|
1066
1240
|
/** Read the concurrent session cap from settings or fall back to default. */
|
|
1067
1241
|
getCap() {
|
|
1068
1242
|
if (!hasSettings())
|