@shepai/cli 1.151.2-pr438.6135e39 → 1.151.2-pr460.095bbae
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/InteractiveAgentConfig.yaml +25 -0
- package/apis/json-schema/InteractiveMessage.yaml +23 -0
- package/apis/json-schema/InteractiveMessageRole.yaml +7 -0
- package/apis/json-schema/InteractiveSession.yaml +30 -0
- package/apis/json-schema/InteractiveSessionStatus.yaml +9 -0
- package/apis/json-schema/Settings.yaml +3 -0
- package/apis/json-schema/WorkflowConfig.yaml +0 -5
- package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts +17 -0
- package/dist/packages/core/src/application/ports/output/agents/agent-executor-factory.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/agents/index.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/agents/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts +53 -0
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/agents/interactive-agent-executor.interface.js +13 -0
- package/dist/packages/core/src/application/ports/output/repositories/index.d.ts +2 -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-message-repository.interface.d.ts +37 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-message-repository.interface.js +10 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts +54 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.js +10 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +0 -28
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +0 -37
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +0 -12
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +4 -5
- 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 -2
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +169 -0
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.js +12 -0
- package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.d.ts +26 -0
- package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/get-interactive-chat-state.use-case.js +41 -0
- package/dist/packages/core/src/application/use-cases/interactive/index.d.ts +14 -0
- package/dist/packages/core/src/application/use-cases/interactive/index.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/index.js +9 -0
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts +31 -0
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/send-interactive-message.use-case.js +43 -0
- package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.d.ts +34 -0
- package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/start-interactive-session.use-case.js +43 -0
- package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.d.ts +27 -0
- package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/interactive/stop-interactive-session.use-case.js +42 -0
- package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.d.ts +13 -0
- package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.d.ts.map +1 -0
- package/dist/packages/core/src/domain/errors/concurrent-session-limit.error.js +19 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +77 -185
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +12 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +47 -4
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts +36 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-message.mapper.js +41 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.d.ts +37 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/interactive-session.mapper.js +45 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +10 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.d.ts +22 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/045-create-interactive-tables.js +52 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.d.ts +16 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/046-add-interactive-agent-settings.js +27 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-message.repository.js +58 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +23 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +85 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +10 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +27 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts +43 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +280 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/mock-executor-factory.service.js +6 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +1 -3
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +1 -37
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -2
- 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 +0 -21
- package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts +26 -0
- package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/interactive/feature-context.builder.js +140 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +87 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +786 -0
- package/dist/src/presentation/cli/index.js +0 -2
- package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.d.ts +3 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/chat/page.js +6 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.d.ts +11 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +18 -0
- package/dist/src/presentation/web/app/(dashboard)/chat/page.d.ts +3 -0
- package/dist/src/presentation/web/app/(dashboard)/chat/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/(dashboard)/chat/page.js +4 -0
- package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.d.ts +3 -0
- package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +4 -0
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts +6 -0
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +54 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts +24 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +76 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts +16 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.js +21 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts +21 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +87 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts +19 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.js +78 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts +18 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.js +43 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts +19 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +92 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts +12 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/interactive/sessions/route.js +37 -0
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +2 -1
- package/dist/src/presentation/web/components/assistant-ui/thread.d.ts +6 -0
- package/dist/src/presentation/web/components/assistant-ui/thread.d.ts.map +1 -0
- package/dist/src/presentation/web/components/assistant-ui/thread.js +192 -0
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts +3 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +5 -6
- package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.d.ts +2 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/global-chat-drawer-client.js +17 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts +3 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +15 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +7 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +11 -4
- package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +7 -2
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts +1 -0
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +6 -14
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -2
- package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.d.ts +21 -0
- package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.js +46 -0
- package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts +20 -0
- package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/AgentStatusBadge.stories.js +52 -0
- package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts +18 -0
- package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatComposer.js +16 -0
- package/dist/src/presentation/web/components/features/chat/ChatInput.d.ts +19 -0
- package/dist/src/presentation/web/components/features/chat/ChatInput.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatInput.js +42 -0
- package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/features/chat/ChatInput.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatInput.stories.js +56 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.d.ts +21 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.js +43 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts +24 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageBubble.stories.js +84 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageList.d.ts +25 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageList.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatMessageList.js +36 -0
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts +2 -0
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +243 -0
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +6 -0
- package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatTab.js +67 -0
- package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts +25 -0
- package/dist/src/presentation/web/components/features/chat/ChatTab.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/ChatTab.stories.js +237 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts +34 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/chat/useChatRuntime.js +266 -0
- 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 +8 -8
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +13 -0
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +30 -0
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +1 -2
- 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 +5 -13
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +45 -2
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +13 -65
- package/dist/src/presentation/web/components/providers/query-provider.d.ts +4 -0
- package/dist/src/presentation/web/components/providers/query-provider.d.ts.map +1 -0
- package/dist/src/presentation/web/components/providers/query-provider.js +16 -0
- package/dist/src/presentation/web/hooks/use-attachments.d.ts +26 -0
- package/dist/src/presentation/web/hooks/use-attachments.d.ts.map +1 -0
- package/dist/src/presentation/web/hooks/use-attachments.js +227 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -1
- 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 +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +69 -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 +82 -82
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
- 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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/build-manifest.json +18 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +395 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +22 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.map +5 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -0
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +2 -0
- 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 +84 -84
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
- 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 +98 -98
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
- 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 +98 -98
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- 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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/build-manifest.json +18 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +395 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +22 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.map +5 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -0
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +2 -0
- 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 +78 -78
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
- 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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(dashboard)/chat/page/build-manifest.json +18 -0
- package/web/.next/server/app/(dashboard)/chat/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +395 -0
- package/web/.next/server/app/(dashboard)/chat/page.js +22 -0
- package/web/.next/server/app/(dashboard)/chat/page.js.map +5 -0
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -0
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +2 -0
- 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 +84 -84
- package/web/.next/server/app/(dashboard)/create/page.js +2 -2
- 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 +98 -98
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
- 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 +98 -98
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
- 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 +78 -78
- package/web/.next/server/app/(dashboard)/page.js +2 -2
- 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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/build-manifest.json +18 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +8 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +395 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +22 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.map +5 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -0
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +2 -0
- 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 +78 -78
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
- 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.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 +36 -6
- package/web/.next/server/app/_not-found/page.js +2 -2
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js +1 -1
- package/web/.next/server/app/api/attachments/preview/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/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/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +7 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js +7 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +6 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js +7 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route.js +7 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +6 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/interactive/sessions/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/interactive/sessions/route/build-manifest.json +11 -0
- package/web/.next/server/app/api/interactive/sessions/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/api/interactive/sessions/route.js +7 -0
- package/web/.next/server/app/api/interactive/sessions/route.js.map +5 -0
- package/web/.next/server/app/api/interactive/sessions/route.js.nft.json +1 -0
- package/web/.next/server/app/api/interactive/sessions/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
- package/web/.next/server/app/api/tools/route.js +2 -2
- package/web/.next/server/app/settings/page/build-manifest.json +3 -3
- package/web/.next/server/app/settings/page/server-reference-manifest.json +42 -42
- package/web/.next/server/app/settings/page.js +3 -3
- 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 +46 -16
- package/web/.next/server/app/skills/page.js +3 -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 +46 -16
- package/web/.next/server/app/tools/page.js +3 -3
- 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 +36 -6
- package/web/.next/server/app/version/page.js +2 -2
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +11 -0
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +8 -2
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_interactive_sessions_route_actions_f2e7447f.js +3 -0
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_interactive_sessions_route_actions_f2e7447f.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_messages_route_actions_f98e5802.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_messages_route_actions_f98e5802.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stop_route_actions_36518d35.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stop_route_actions_36518d35.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stream_route_actions_e6210931.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_chat_[featureId]_stream_route_actions_e6210931.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_messages_route_actions_be179971.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_messages_route_actions_be179971.js.map +1 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_stream_route_actions_58ab2b5b.js +3 -0
- package/web/.next/server/chunks/8ba4b_server_app_api_interactive_sessions_[id]_stream_route_actions_58ab2b5b.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js +12 -0
- package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +18 -0
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__26565141._.js → [root-of-the-server]__acea6565._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__26565141._.js.map → [root-of-the-server]__acea6565._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__beda892a._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__beda892a._.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]__25f23d5d._.js → [root-of-the-server]__e3692208._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__25f23d5d._.js.map → [root-of-the-server]__e3692208._.js.map} +1 -1
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_interactive_sessions_[id]_route_actions_a4ea4d16.js +3 -0
- package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_interactive_sessions_[id]_route_actions_a4ea4d16.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2c44200f.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2c44200f.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_56f4f121.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_56f4f121.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_77436e06.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_77436e06.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_b9bb0443.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_b9bb0443.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_app_(dashboard)_repository_[repositoryId]_[tab]_page_tsx_2e9a3025._.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web_app_(dashboard)_repository_[repositoryId]_[tab]_page_tsx_2e9a3025._.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 +7 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_4b319ae6._.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_4b319ae6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b150ddf._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__31f1c3b0._.js +7 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__31f1c3b0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__684a868c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7528eb6f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b14946f5._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b8d4bd27._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b8d4bd27._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c16bf5de._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ede6df1f._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ede6df1f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_c2ca0f1b._.js → _320a4303._.js} +3 -3
- package/web/.next/server/chunks/ssr/_320a4303._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_3a0b989f._.js +6 -0
- package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_48e5757d._.js +9 -0
- package/web/.next/server/chunks/ssr/_48e5757d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_6c7faa01._.js → _507a8382._.js} +2 -2
- package/web/.next/server/chunks/ssr/_507a8382._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +3 -0
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_5f69c13f._.js +4 -0
- package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_78ff6f1d._.js +3 -0
- package/web/.next/server/chunks/ssr/_78ff6f1d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js +4 -0
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8219712a._.js +3 -0
- package/web/.next/server/chunks/ssr/_8219712a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_82c57f10._.js +4 -0
- package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0020fddd._.js → _8b57edb8._.js} +2 -2
- package/web/.next/server/chunks/ssr/_8b57edb8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8d733ce4._.js +3 -0
- package/web/.next/server/chunks/ssr/_8d733ce4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_6256a985._.js → _9495d50b._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_6256a985._.js.map → _9495d50b._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +4 -0
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ac4a3873._.js +3 -0
- package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_acc33591._.js +3 -0
- package/web/.next/server/chunks/ssr/_acc33591._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +4 -0
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_cb5a021e._.js +4 -0
- package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +1 -1
- package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js +1 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d86175ae._.js +4 -0
- package/web/.next/server/chunks/ssr/_d86175ae._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_d8bedf13._.js +4 -0
- package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_fa7efce3._.js +6 -0
- package/web/.next/server/chunks/ssr/_fa7efce3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_4093a637._.js → _ffa39df5._.js} +2 -2
- package/web/.next/server/chunks/ssr/_ffa39df5._.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_global-chat-drawer-client_tsx_158c4b12._.js +3 -0
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_global-chat-drawer-client_tsx_158c4b12._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_8ec2c790._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_chat_page_tsx_85327270._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_chat_page_tsx_85327270._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/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 +1346 -562
- package/web/.next/static/chunks/011f98455d1a2f64.js +7 -0
- package/web/.next/static/chunks/036f4b19acb4fcf9.js +3 -0
- package/web/.next/static/chunks/0c38793438b8c038.js +1 -0
- package/web/.next/static/chunks/101c183087b9984f.js +1 -0
- package/web/.next/static/chunks/11091b676d1b3bd4.js +1 -0
- package/web/.next/static/chunks/16f6471485cbfed1.css +1 -0
- package/web/.next/static/chunks/22c459f1877b1e4f.js +1 -0
- package/web/.next/static/chunks/2354d39c63978576.js +1 -0
- package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +1 -0
- package/web/.next/static/chunks/460a633a069f7114.js +1 -0
- package/web/.next/static/chunks/4b2c4a5c35ebb70d.js +1 -0
- package/web/.next/static/chunks/5ae60a052ab5f437.js +5 -0
- package/web/.next/static/chunks/686164c73f381a39.js +5 -0
- package/web/.next/static/chunks/77e04d00f3460226.js +1 -0
- package/web/.next/static/chunks/7b93fa5e0054de38.js +1 -0
- package/web/.next/static/chunks/932d27878bf6ad1d.js +1 -0
- package/web/.next/static/chunks/95f3089ebd3a0ad8.js +1 -0
- package/web/.next/static/chunks/a9a2a4964b06aedd.js +1 -0
- package/web/.next/static/chunks/{091de81012e2bc48.js → ade96a2ab608bded.js} +2 -2
- package/web/.next/static/chunks/b868f9defe50a18f.js +1 -0
- package/web/.next/static/chunks/cd54b758f58061d0.js +1 -0
- package/web/.next/static/chunks/{cfe4dc9904fcfddb.js → d0e04c4bd51d2553.js} +1 -1
- package/web/.next/static/chunks/feed0046c419c228.js +5 -0
- package/web/.next/static/chunks/{turbopack-c2d183e05f30c7dc.js → turbopack-432ef324fc27240c.js} +1 -1
- package/web/package.json +7 -2
- package/apis/json-schema/AgentRunDetail.yaml +0 -28
- package/apis/json-schema/DoctorDiagnosticReport.yaml +0 -76
- package/apis/json-schema/FailedRunSummary.yaml +0 -22
- package/apis/json-schema/SystemInfo.yaml +0 -22
- package/apis/json-schema/WorkerLogEntry.yaml +0 -27
- package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.d.ts +0 -57
- package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/github-issue-service.interface.js +0 -39
- package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.d.ts +0 -64
- package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.d.ts.map +0 -1
- package/dist/packages/core/src/application/use-cases/doctor/doctor-diagnose.use-case.js +0 -493
- package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.d.ts +0 -17
- package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/external/github-issue-creator.service.js +0 -69
- package/dist/src/presentation/cli/commands/doctor.command.d.ts +0 -20
- package/dist/src/presentation/cli/commands/doctor.command.d.ts.map +0 -1
- package/dist/src/presentation/cli/commands/doctor.command.js +0 -129
- package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +0 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_8b618f7d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2138fa7e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__29580090._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +0 -7
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c094882b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__dac5dbf1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__df7c1cd3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fae8b355._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_01046927._.js +0 -9
- package/web/.next/server/chunks/ssr/_01046927._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0c473fef._.js +0 -6
- package/web/.next/server/chunks/ssr/_0c473fef._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1b719e7f._.js +0 -4
- package/web/.next/server/chunks/ssr/_1b719e7f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_37e8548b._.js +0 -4
- package/web/.next/server/chunks/ssr/_37e8548b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_55d763e2._.js +0 -4
- package/web/.next/server/chunks/ssr/_55d763e2._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6c7faa01._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_8fcc39d4._.js +0 -3
- package/web/.next/server/chunks/ssr/_8fcc39d4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b71645b4._.js +0 -4
- package/web/.next/server/chunks/ssr/_b71645b4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c2ca0f1b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js +0 -3
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_dc9a9d32._.js +0 -3
- package/web/.next/server/chunks/ssr/_dc9a9d32._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e9e9ed20._.js +0 -6
- package/web/.next/server/chunks/ssr/_e9e9ed20._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_55c7a131._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_aa941041._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_aa941041._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +0 -1
- package/web/.next/static/chunks/08baac5434d9528e.js +0 -13
- package/web/.next/static/chunks/25889ca8401d1bc0.js +0 -1
- package/web/.next/static/chunks/359b2815c5ed39cc.js +0 -1
- package/web/.next/static/chunks/49057cf8cd37e262.js +0 -1
- package/web/.next/static/chunks/4a28fd1bca225386.js +0 -1
- package/web/.next/static/chunks/4cec255f2754e5ec.js +0 -1
- package/web/.next/static/chunks/5e1877d1f1bcfd77.js +0 -1
- package/web/.next/static/chunks/601d93593f5f664f.js +0 -1
- package/web/.next/static/chunks/76a3f345f8cf2608.js +0 -1
- package/web/.next/static/chunks/79eae02d0342fb73.js +0 -1
- package/web/.next/static/chunks/80915095cec414bf.js +0 -1
- package/web/.next/static/chunks/87b72b8a10f8255b.js +0 -5
- package/web/.next/static/chunks/9b8678597fa1db84.css +0 -1
- package/web/.next/static/chunks/b70dd4985a814b27.js +0 -1
- package/web/.next/static/chunks/c2388f8bc58b2a21.js +0 -1
- package/web/.next/static/chunks/e760b952ba1a10d4.js +0 -1
- package/web/.next/static/chunks/ed9408f100149c34.js +0 -1
- package/web/.next/static/chunks/f66c996402a430f5.js +0 -1
- /package/web/.next/static/{-o7QIcv1p5C722dwF4EFd → 2rfPfTfJJx4Mf-4AeVzgA}/_buildManifest.js +0 -0
- /package/web/.next/static/{-o7QIcv1p5C722dwF4EFd → 2rfPfTfJJx4Mf-4AeVzgA}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{-o7QIcv1p5C722dwF4EFd → 2rfPfTfJJx4Mf-4AeVzgA}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useCallback } from 'react';
|
|
4
|
+
import { Send } from 'lucide-react';
|
|
5
|
+
import { Button } from '../../ui/button.js';
|
|
6
|
+
import { cn } from '../../../lib/utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Chat input component for the interactive agent chat.
|
|
9
|
+
*
|
|
10
|
+
* - Enter key submits the message
|
|
11
|
+
* - Shift+Enter inserts a newline
|
|
12
|
+
* - Disabled state prevents all interaction
|
|
13
|
+
* - Accessible via keyboard: tab to reach, Enter to send
|
|
14
|
+
*/
|
|
15
|
+
export function ChatInput({ onSubmit, disabled = false, placeholder = 'Message the agent... (Enter to send, Shift+Enter for newline)', className, }) {
|
|
16
|
+
const textareaRef = useRef(null);
|
|
17
|
+
const handleSubmit = useCallback(() => {
|
|
18
|
+
const textarea = textareaRef.current;
|
|
19
|
+
if (!textarea)
|
|
20
|
+
return;
|
|
21
|
+
const content = textarea.value.trim();
|
|
22
|
+
if (!content)
|
|
23
|
+
return;
|
|
24
|
+
onSubmit(content);
|
|
25
|
+
textarea.value = '';
|
|
26
|
+
// Reset height after clearing
|
|
27
|
+
textarea.style.height = 'auto';
|
|
28
|
+
}, [onSubmit]);
|
|
29
|
+
const handleKeyDown = useCallback((e) => {
|
|
30
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
31
|
+
e.preventDefault();
|
|
32
|
+
handleSubmit();
|
|
33
|
+
}
|
|
34
|
+
}, [handleSubmit]);
|
|
35
|
+
const handleInput = useCallback((e) => {
|
|
36
|
+
const el = e.target;
|
|
37
|
+
// Auto-resize textarea up to a max height
|
|
38
|
+
el.style.height = 'auto';
|
|
39
|
+
el.style.height = `${Math.min(el.scrollHeight, 160)}px`;
|
|
40
|
+
}, []);
|
|
41
|
+
return (_jsxs("div", { className: cn('bg-background flex items-end gap-2 border-t p-3', className), children: [_jsx("textarea", { ref: textareaRef, rows: 1, disabled: disabled, placeholder: placeholder, "aria-label": "Message input", onKeyDown: handleKeyDown, onChange: handleInput, className: cn('bg-background min-h-[36px] flex-1 resize-none rounded-md border px-3 py-2 text-sm', 'focus:ring-ring focus:ring-2 focus:ring-offset-0 focus:outline-none', 'placeholder:text-muted-foreground', 'disabled:cursor-not-allowed disabled:opacity-50', 'max-h-40 overflow-y-auto') }), _jsx(Button, { type: "button", size: "icon-sm", disabled: disabled, onClick: handleSubmit, "aria-label": "Send message", className: "shrink-0", children: _jsx(Send, { className: "size-4" }) })] }));
|
|
42
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ChatInput } from './ChatInput.js';
|
|
3
|
+
declare const meta: Meta<typeof ChatInput>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof ChatInput>;
|
|
6
|
+
/** Default empty state — ready for input. */
|
|
7
|
+
export declare const Empty: Story;
|
|
8
|
+
/** With pre-filled text to show how content looks. */
|
|
9
|
+
export declare const WithText: Story;
|
|
10
|
+
/** Disabled state — shown when the session is not in ready state. */
|
|
11
|
+
export declare const Disabled: Story;
|
|
12
|
+
/** Custom placeholder text for when the agent is booting. */
|
|
13
|
+
export declare const BootingPlaceholder: Story;
|
|
14
|
+
//# sourceMappingURL=ChatInput.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatInput.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CA2BhC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAC;AAExC,6CAA6C;AAC7C,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,QAAQ,EAAE,KAetB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,kBAAkB,EAAE,KAKhC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChatInput } from './ChatInput.js';
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'Features/Chat/ChatInput',
|
|
5
|
+
component: ChatInput,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: 'padded',
|
|
9
|
+
},
|
|
10
|
+
decorators: [
|
|
11
|
+
(Story) => (_jsx("div", { style: {
|
|
12
|
+
maxWidth: '480px',
|
|
13
|
+
border: '1px solid var(--color-border)',
|
|
14
|
+
borderRadius: '8px',
|
|
15
|
+
overflow: 'hidden',
|
|
16
|
+
}, children: _jsx(Story, {}) })),
|
|
17
|
+
],
|
|
18
|
+
args: {
|
|
19
|
+
onSubmit: (content) => {
|
|
20
|
+
// eslint-disable-next-line no-console
|
|
21
|
+
console.log('Message submitted:', content);
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export default meta;
|
|
26
|
+
/** Default empty state — ready for input. */
|
|
27
|
+
export const Empty = {
|
|
28
|
+
args: {
|
|
29
|
+
disabled: false,
|
|
30
|
+
placeholder: 'Message the agent... (Enter to send, Shift+Enter for newline)',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/** With pre-filled text to show how content looks. */
|
|
34
|
+
export const WithText = {
|
|
35
|
+
render: (args) => {
|
|
36
|
+
return (_jsxs("div", { style: { maxWidth: '480px' }, children: [_jsx(ChatInput, { ...args }), _jsx("p", { style: { padding: '8px', fontSize: '12px', color: 'gray' }, children: "Note: The textarea starts empty; text is shown here for demonstration." })] }));
|
|
37
|
+
},
|
|
38
|
+
args: {
|
|
39
|
+
disabled: false,
|
|
40
|
+
placeholder: 'Can you run the tests for the auth module?',
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
/** Disabled state — shown when the session is not in ready state. */
|
|
44
|
+
export const Disabled = {
|
|
45
|
+
args: {
|
|
46
|
+
disabled: true,
|
|
47
|
+
placeholder: 'Start the agent to begin chatting...',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
/** Custom placeholder text for when the agent is booting. */
|
|
51
|
+
export const BootingPlaceholder = {
|
|
52
|
+
args: {
|
|
53
|
+
disabled: true,
|
|
54
|
+
placeholder: 'Waiting for agent to be ready...',
|
|
55
|
+
},
|
|
56
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InteractiveMessageRole } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
export interface ChatMessageBubbleProps {
|
|
3
|
+
/** Role of the message author */
|
|
4
|
+
role: InteractiveMessageRole;
|
|
5
|
+
/** Full message content */
|
|
6
|
+
content: string;
|
|
7
|
+
/** When the message was created */
|
|
8
|
+
timestamp?: Date | string;
|
|
9
|
+
/** Whether this message is currently streaming (assistant only) */
|
|
10
|
+
streaming?: boolean;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Renders a single chat message bubble with full markdown support.
|
|
15
|
+
*
|
|
16
|
+
* - User messages: right-aligned, primary background
|
|
17
|
+
* - Assistant messages: left-aligned, muted background, markdown rendered
|
|
18
|
+
* - When streaming=true and role=assistant: trailing blinking cursor is shown
|
|
19
|
+
*/
|
|
20
|
+
export declare function ChatMessageBubble({ role, content, timestamp, streaming, className, }: ChatMessageBubbleProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=ChatMessageBubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessageBubble.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatMessageBubble.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAqC9E,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,SAAS,EACT,SAAiB,EACjB,SAAS,GACV,EAAE,sBAAsB,2CAkCxB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import Markdown from 'react-markdown';
|
|
4
|
+
import { cn } from '../../../lib/utils.js';
|
|
5
|
+
import { InteractiveMessageRole } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
6
|
+
const markdownComponents = {
|
|
7
|
+
p: ({ children }) => _jsx("p", { className: "mb-2 leading-relaxed last:mb-0", children: children }),
|
|
8
|
+
strong: ({ children }) => _jsx("strong", { className: "font-semibold", children: children }),
|
|
9
|
+
em: ({ children }) => _jsx("em", { className: "italic", children: children }),
|
|
10
|
+
code: ({ children, className }) => className ? (_jsx("code", { className: `${className} text-[11px]`, children: children })) : (_jsx("code", { className: "bg-background/50 rounded-md px-1.5 py-0.5 font-mono text-xs", children: children })),
|
|
11
|
+
pre: ({ children }) => (_jsx("pre", { className: "bg-background/50 my-2 overflow-x-auto rounded-md p-3 font-mono text-xs leading-relaxed", children: children })),
|
|
12
|
+
ul: ({ children }) => _jsx("ul", { className: "mb-2 list-disc pl-4 last:mb-0", children: children }),
|
|
13
|
+
ol: ({ children }) => _jsx("ol", { className: "mb-2 list-decimal pl-4 last:mb-0", children: children }),
|
|
14
|
+
li: ({ children }) => _jsx("li", { className: "mb-0.5", children: children }),
|
|
15
|
+
h1: ({ children }) => _jsx("h1", { className: "mb-1 text-base font-bold", children: children }),
|
|
16
|
+
h2: ({ children }) => _jsx("h2", { className: "mb-1 text-sm font-bold", children: children }),
|
|
17
|
+
h3: ({ children }) => _jsx("h3", { className: "mb-1 text-sm font-semibold", children: children }),
|
|
18
|
+
a: ({ children, href }) => (_jsx("a", { href: href, className: "text-blue-500 underline", target: "_blank", rel: "noopener noreferrer", children: children })),
|
|
19
|
+
blockquote: ({ children }) => (_jsx("blockquote", { className: "border-muted-foreground/30 my-1 border-l-2 pl-3 italic opacity-80", children: children })),
|
|
20
|
+
};
|
|
21
|
+
function formatTime(ts) {
|
|
22
|
+
try {
|
|
23
|
+
const d = typeof ts === 'string' ? new Date(ts) : ts;
|
|
24
|
+
return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Renders a single chat message bubble with full markdown support.
|
|
32
|
+
*
|
|
33
|
+
* - User messages: right-aligned, primary background
|
|
34
|
+
* - Assistant messages: left-aligned, muted background, markdown rendered
|
|
35
|
+
* - When streaming=true and role=assistant: trailing blinking cursor is shown
|
|
36
|
+
*/
|
|
37
|
+
export function ChatMessageBubble({ role, content, timestamp, streaming = false, className, }) {
|
|
38
|
+
const isUser = role === InteractiveMessageRole.user;
|
|
39
|
+
const timeStr = timestamp ? formatTime(timestamp) : null;
|
|
40
|
+
return (_jsxs("div", { className: cn('flex w-full flex-col', isUser ? 'items-end' : 'items-start', className), "aria-label": isUser ? 'Your message' : 'Agent message', children: [_jsxs("div", { className: cn('max-w-[85%] rounded-2xl px-4 py-2.5 text-sm leading-relaxed', isUser
|
|
41
|
+
? 'bg-primary text-primary-foreground rounded-br-sm'
|
|
42
|
+
: 'bg-muted text-foreground rounded-bl-sm'), children: [isUser ? (_jsx("span", { className: "whitespace-pre-wrap", children: content })) : (_jsx(Markdown, { components: markdownComponents, children: content })), streaming && !isUser ? (_jsx("span", { "aria-label": "Agent is typing", className: "ml-0.5 inline-block h-3.5 w-0.5 animate-pulse bg-current align-middle opacity-75" })) : null] }), timeStr && !streaming ? (_jsx("span", { className: "text-muted-foreground mt-0.5 px-1 text-[10px]", children: timeStr })) : null] }));
|
|
43
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ChatMessageBubble } from './ChatMessageBubble.js';
|
|
3
|
+
declare const meta: Meta<typeof ChatMessageBubble>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof ChatMessageBubble>;
|
|
6
|
+
/** User message — right-aligned with primary color. */
|
|
7
|
+
export declare const UserMessage: Story;
|
|
8
|
+
/** Assistant message — left-aligned with muted background. */
|
|
9
|
+
export declare const AssistantMessage: Story;
|
|
10
|
+
/** Assistant message that is still streaming — shows blinking cursor. */
|
|
11
|
+
export declare const StreamingAssistant: Story;
|
|
12
|
+
/** Assistant message with a code block. */
|
|
13
|
+
export declare const AssistantWithCode: Story;
|
|
14
|
+
/** Long user message — should wrap cleanly within the bubble. */
|
|
15
|
+
export declare const LongUserMessage: Story;
|
|
16
|
+
/** Multi-line assistant response. */
|
|
17
|
+
export declare const MultilineAssistant: Story;
|
|
18
|
+
/** Assistant message with rich markdown — headers, lists, bold, links. */
|
|
19
|
+
export declare const AssistantWithMarkdown: Story;
|
|
20
|
+
/** Message with timestamp. */
|
|
21
|
+
export declare const WithTimestamp: Story;
|
|
22
|
+
/** Conversation thread — both roles rendered together. */
|
|
23
|
+
export declare const ConversationThread: Story;
|
|
24
|
+
//# sourceMappingURL=ChatMessageBubble.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessageBubble.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatMessageBubble.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhD,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,eAAe,EAAE,KAO7B,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,EAAE,KAOnC,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,EAAE,KAoBhC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { InteractiveMessageRole } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
3
|
+
import { ChatMessageBubble } from './ChatMessageBubble.js';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Features/Chat/ChatMessageBubble',
|
|
6
|
+
component: ChatMessageBubble,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'padded',
|
|
10
|
+
},
|
|
11
|
+
decorators: [
|
|
12
|
+
(Story) => (_jsx("div", { style: { maxWidth: '480px', padding: '16px' }, children: _jsx(Story, {}) })),
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
export default meta;
|
|
16
|
+
/** User message — right-aligned with primary color. */
|
|
17
|
+
export const UserMessage = {
|
|
18
|
+
args: {
|
|
19
|
+
role: InteractiveMessageRole.user,
|
|
20
|
+
content: 'Can you show me the current test coverage for the auth module?',
|
|
21
|
+
streaming: false,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
/** Assistant message — left-aligned with muted background. */
|
|
25
|
+
export const AssistantMessage = {
|
|
26
|
+
args: {
|
|
27
|
+
role: InteractiveMessageRole.assistant,
|
|
28
|
+
content: 'Sure! Let me check the test coverage for you.\n\nThe auth module currently has 87% line coverage. The main gaps are in the OAuth callback handler and the token refresh logic.',
|
|
29
|
+
streaming: false,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
/** Assistant message that is still streaming — shows blinking cursor. */
|
|
33
|
+
export const StreamingAssistant = {
|
|
34
|
+
args: {
|
|
35
|
+
role: InteractiveMessageRole.assistant,
|
|
36
|
+
content: 'I can see the coverage report. Let me analyze the gaps',
|
|
37
|
+
streaming: true,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
/** Assistant message with a code block. */
|
|
41
|
+
export const AssistantWithCode = {
|
|
42
|
+
args: {
|
|
43
|
+
role: InteractiveMessageRole.assistant,
|
|
44
|
+
content: 'Here is the failing test:\n\n```typescript\ndescribe("auth", () => {\n it("should refresh token", async () => {\n const token = await refreshToken("expired-token");\n expect(token).toBeDefined();\n });\n});\n```\n\nThe test fails because `refreshToken` throws when the token is expired.',
|
|
45
|
+
streaming: false,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
/** Long user message — should wrap cleanly within the bubble. */
|
|
49
|
+
export const LongUserMessage = {
|
|
50
|
+
args: {
|
|
51
|
+
role: InteractiveMessageRole.user,
|
|
52
|
+
content: 'I need you to help me understand why the CI pipeline is failing on the integration tests. The logs show a database connection timeout after about 30 seconds but only on the CI runner, not locally. Can you look at the test setup and suggest what might be different?',
|
|
53
|
+
streaming: false,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/** Multi-line assistant response. */
|
|
57
|
+
export const MultilineAssistant = {
|
|
58
|
+
args: {
|
|
59
|
+
role: InteractiveMessageRole.assistant,
|
|
60
|
+
content: 'I can investigate that for you.\n\nLooking at the CI configuration:\n1. The test database uses a different hostname in CI (`db` vs `localhost`)\n2. The connection pool timeout is set to 10s locally but uses default (30s) in CI\n3. The `DB_POOL_MAX` env var is not set in CI\n\nLet me check the actual test setup file to confirm.',
|
|
61
|
+
streaming: false,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
/** Assistant message with rich markdown — headers, lists, bold, links. */
|
|
65
|
+
export const AssistantWithMarkdown = {
|
|
66
|
+
args: {
|
|
67
|
+
role: InteractiveMessageRole.assistant,
|
|
68
|
+
content: '## Analysis Results\n\nI found **3 issues** in the auth module:\n\n1. Missing `try/catch` in token refresh\n2. Expired session cleanup is *not* running\n3. Rate limiter threshold too low\n\n> Note: The rate limiter was changed in [PR #142](https://example.com)\n\nLet me fix these for you.',
|
|
69
|
+
streaming: false,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
/** Message with timestamp. */
|
|
73
|
+
export const WithTimestamp = {
|
|
74
|
+
args: {
|
|
75
|
+
role: InteractiveMessageRole.assistant,
|
|
76
|
+
content: 'Here is the test result. All 42 tests passed.',
|
|
77
|
+
timestamp: new Date().toISOString(),
|
|
78
|
+
streaming: false,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
/** Conversation thread — both roles rendered together. */
|
|
82
|
+
export const ConversationThread = {
|
|
83
|
+
render: () => (_jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx(ChatMessageBubble, { role: InteractiveMessageRole.assistant, content: "Hey, how can I help you with this feature?", timestamp: new Date(Date.now() - 120000).toISOString() }), _jsx(ChatMessageBubble, { role: InteractiveMessageRole.user, content: "Can you run the tests and show me the results?", timestamp: new Date(Date.now() - 60000).toISOString() }), _jsx(ChatMessageBubble, { role: InteractiveMessageRole.assistant, content: "Running tests now...", streaming: true })] })),
|
|
84
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { InteractiveMessage } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
export interface ChatMessageListProps {
|
|
3
|
+
/** Persisted message history for this feature */
|
|
4
|
+
messages: InteractiveMessage[];
|
|
5
|
+
/**
|
|
6
|
+
* Current streaming text buffer.
|
|
7
|
+
* When non-null, an in-progress assistant bubble is shown at the bottom.
|
|
8
|
+
*/
|
|
9
|
+
streamingContent: string | null;
|
|
10
|
+
/** Whether the agent is thinking (waiting for first token) */
|
|
11
|
+
isAgentThinking?: boolean;
|
|
12
|
+
/** Activity log entries from tool use / thinking events */
|
|
13
|
+
activityLog?: string[];
|
|
14
|
+
/** Show a loading skeleton while the initial message history is fetching */
|
|
15
|
+
isLoading?: boolean;
|
|
16
|
+
/** Empty-state message shown when there are no messages and no session */
|
|
17
|
+
emptyStateMessage?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Scrollable message list rendering all persisted messages plus an optional
|
|
21
|
+
* in-progress streaming bubble at the bottom. Auto-scrolls to the newest
|
|
22
|
+
* message whenever messages or streamingContent changes.
|
|
23
|
+
*/
|
|
24
|
+
export declare function ChatMessageList({ messages, streamingContent, isAgentThinking, activityLog, isLoading, emptyStateMessage, }: ChatMessageListProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=ChatMessageList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatMessageList.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatMessageList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAI/E,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,8DAA8D;IAC9D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,gBAAgB,EAChB,eAAuB,EACvB,WAAgB,EAChB,SAAiB,EACjB,iBAAsC,GACvC,EAAE,oBAAoB,2CAwEtB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useEffect, useState } from 'react';
|
|
4
|
+
import { MessageSquare, ChevronDown, ChevronRight, Activity } from 'lucide-react';
|
|
5
|
+
import { InteractiveMessageRole } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
6
|
+
import { ChatMessageBubble } from './ChatMessageBubble.js';
|
|
7
|
+
/**
|
|
8
|
+
* Scrollable message list rendering all persisted messages plus an optional
|
|
9
|
+
* in-progress streaming bubble at the bottom. Auto-scrolls to the newest
|
|
10
|
+
* message whenever messages or streamingContent changes.
|
|
11
|
+
*/
|
|
12
|
+
export function ChatMessageList({ messages, streamingContent, isAgentThinking = false, activityLog = [], isLoading = false, emptyStateMessage = 'No messages yet.', }) {
|
|
13
|
+
const bottomRef = useRef(null);
|
|
14
|
+
// Auto-scroll to bottom when messages or streaming content changes
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
bottomRef.current?.scrollIntoView({ behavior: 'smooth', block: 'end' });
|
|
17
|
+
}, [messages.length, streamingContent, isAgentThinking, activityLog.length]);
|
|
18
|
+
if (isLoading) {
|
|
19
|
+
return (_jsx("div", { className: "flex flex-1 flex-col gap-3 overflow-y-auto p-4", children: [1, 2, 3].map((i) => (_jsx("div", { className: `flex ${i % 2 === 0 ? 'justify-end' : 'justify-start'}`, children: _jsx("div", { className: "bg-muted h-10 animate-pulse rounded-2xl", style: { width: `${40 + i * 15}%` } }) }, i))) }));
|
|
20
|
+
}
|
|
21
|
+
if (messages.length === 0 && streamingContent === null && !isAgentThinking) {
|
|
22
|
+
return (_jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-2 p-8 text-center", children: [_jsx(MessageSquare, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: emptyStateMessage })] }));
|
|
23
|
+
}
|
|
24
|
+
return (_jsx("div", { className: "flex flex-1 flex-col overflow-y-auto p-4", role: "log", "aria-label": "Chat messages", "aria-live": "polite", children: _jsxs("div", { className: "flex flex-col gap-3", children: [messages.map((message) => (_jsx(ChatMessageBubble, { role: message.role, content: message.content, timestamp: message.createdAt, streaming: false }, message.id))), isAgentThinking && streamingContent === null ? (_jsx(ThinkingIndicator, { activityLog: activityLog })) : null, streamingContent !== null && (_jsxs(_Fragment, { children: [activityLog.length > 0 && _jsx(ActivityLogCollapsible, { entries: activityLog }), _jsx(ChatMessageBubble, { role: InteractiveMessageRole.assistant, content: streamingContent, streaming: true })] })), _jsx("div", { ref: bottomRef })] }) }));
|
|
25
|
+
}
|
|
26
|
+
/** Animated thinking indicator with expandable activity log. */
|
|
27
|
+
function ThinkingIndicator({ activityLog }) {
|
|
28
|
+
const [expanded, setExpanded] = useState(false);
|
|
29
|
+
const latestEntry = activityLog.length > 0 ? activityLog[activityLog.length - 1] : null;
|
|
30
|
+
return (_jsx("div", { className: "flex w-full flex-col items-start", "aria-label": "Agent is thinking", children: _jsxs("div", { className: "bg-muted text-foreground rounded-2xl rounded-bl-sm px-4 py-2.5 text-sm", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "inline-block size-1.5 animate-bounce rounded-full bg-current opacity-60 [animation-delay:0ms]" }), _jsx("span", { className: "inline-block size-1.5 animate-bounce rounded-full bg-current opacity-60 [animation-delay:150ms]" }), _jsx("span", { className: "inline-block size-1.5 animate-bounce rounded-full bg-current opacity-60 [animation-delay:300ms]" })] }), latestEntry ? (_jsx("span", { className: "text-muted-foreground text-xs", children: latestEntry })) : (_jsx("span", { className: "text-muted-foreground text-xs", children: "Thinking..." }))] }), activityLog.length > 1 && (_jsxs("button", { onClick: () => setExpanded(!expanded), className: "text-muted-foreground hover:text-foreground mt-1.5 flex items-center gap-1 text-[11px] transition-colors", children: [expanded ? _jsx(ChevronDown, { className: "size-3" }) : _jsx(ChevronRight, { className: "size-3" }), activityLog.length, " steps"] })), expanded && activityLog.length > 1 ? (_jsx("div", { className: "border-muted-foreground/20 mt-2 border-t pt-2", children: activityLog.map((entry, i) => (_jsxs("div", { className: "text-muted-foreground flex items-center gap-1.5 py-0.5 text-[11px]", children: [_jsx(Activity, { className: "size-2.5 shrink-0 opacity-50" }), _jsx("span", { children: entry })] }, `${entry.slice(0, 20)}-${i}`))) })) : null] }) }));
|
|
31
|
+
}
|
|
32
|
+
/** Collapsible activity log shown above streaming content. */
|
|
33
|
+
function ActivityLogCollapsible({ entries }) {
|
|
34
|
+
const [expanded, setExpanded] = useState(false);
|
|
35
|
+
return (_jsxs("div", { className: "flex w-full justify-start", children: [_jsxs("button", { onClick: () => setExpanded(!expanded), className: "text-muted-foreground hover:text-foreground flex items-center gap-1.5 rounded-md px-2 py-1 text-[11px] transition-colors", children: [_jsx(Activity, { className: "size-3 opacity-50" }), expanded ? _jsx(ChevronDown, { className: "size-3" }) : _jsx(ChevronRight, { className: "size-3" }), entries.length, " agent actions"] }), expanded ? (_jsx("div", { className: "bg-muted/50 ml-2 rounded-md px-3 py-2", children: entries.map((entry, i) => (_jsxs("div", { className: "text-muted-foreground flex items-center gap-1.5 py-0.5 text-[11px]", children: [_jsx(Activity, { className: "size-2.5 shrink-0 opacity-50" }), _jsx("span", { children: entry })] }, `${entry.slice(0, 20)}-${i}`))) })) : null] }));
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"AAiDA,wBAAgB,eAAe,4CAuX9B"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
4
|
+
import { MessageSquare, X, Bot, GripVertical, Maximize2, Minimize2 } from 'lucide-react';
|
|
5
|
+
import { cn } from '../../../lib/utils.js';
|
|
6
|
+
import { Button } from '../../ui/button.js';
|
|
7
|
+
import { ChatTab } from './ChatTab.js';
|
|
8
|
+
// ── Persistent global chat popup (draggable + resizable) ──────────────────
|
|
9
|
+
const DEFAULT_W = 520;
|
|
10
|
+
const DEFAULT_H_VH = 70; // percentage of viewport height
|
|
11
|
+
const MIN_W = 360;
|
|
12
|
+
const MIN_H = 300;
|
|
13
|
+
const STORAGE_KEY = 'shep-global-chat';
|
|
14
|
+
function loadPersistedState() {
|
|
15
|
+
try {
|
|
16
|
+
const raw = localStorage.getItem(STORAGE_KEY);
|
|
17
|
+
if (!raw)
|
|
18
|
+
return { pos: null, size: null };
|
|
19
|
+
const parsed = JSON.parse(raw);
|
|
20
|
+
return {
|
|
21
|
+
pos: parsed.pos ?? null,
|
|
22
|
+
size: parsed.size ?? null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { pos: null, size: null };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function persistState(pos, size) {
|
|
30
|
+
try {
|
|
31
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify({ pos, size }));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Storage full or unavailable — ignore
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function GlobalChatPopup() {
|
|
38
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
39
|
+
const [hasOpened, setHasOpened] = useState(false);
|
|
40
|
+
const [isMaximized, setIsMaximized] = useState(false);
|
|
41
|
+
// Position/size — initialized from localStorage
|
|
42
|
+
// eslint-disable-next-line react/hook-use-state -- wrapped setters below
|
|
43
|
+
const [pos, setPosRaw] = useState(() => loadPersistedState().pos);
|
|
44
|
+
// eslint-disable-next-line react/hook-use-state -- wrapped setters below
|
|
45
|
+
const [size, setSizeRaw] = useState(() => loadPersistedState().size);
|
|
46
|
+
// Wrapped setters that also persist
|
|
47
|
+
const setPos = useCallback((v) => {
|
|
48
|
+
setPosRaw((prev) => {
|
|
49
|
+
const next = typeof v === 'function' ? v(prev) : v;
|
|
50
|
+
// Defer persist to avoid doing it on every mousemove frame
|
|
51
|
+
return next;
|
|
52
|
+
});
|
|
53
|
+
}, []);
|
|
54
|
+
const setSize = useCallback((v) => {
|
|
55
|
+
setSizeRaw((prev) => {
|
|
56
|
+
const next = typeof v === 'function' ? v(prev) : v;
|
|
57
|
+
return next;
|
|
58
|
+
});
|
|
59
|
+
}, []);
|
|
60
|
+
const panelRef = useRef(null);
|
|
61
|
+
const dragRef = useRef(null);
|
|
62
|
+
const resizeRef = useRef(null);
|
|
63
|
+
const toggle = useCallback(() => {
|
|
64
|
+
setIsOpen((prev) => {
|
|
65
|
+
if (!prev)
|
|
66
|
+
setHasOpened(true);
|
|
67
|
+
return !prev;
|
|
68
|
+
});
|
|
69
|
+
}, []);
|
|
70
|
+
// Store pre-maximize pos/size so we can restore
|
|
71
|
+
const preMaxRef = useRef({ pos: null, size: null });
|
|
72
|
+
const toggleMaximize = useCallback(() => {
|
|
73
|
+
if (!isOpen) {
|
|
74
|
+
setIsOpen(true);
|
|
75
|
+
setHasOpened(true);
|
|
76
|
+
}
|
|
77
|
+
setIsMaximized((prev) => {
|
|
78
|
+
if (!prev) {
|
|
79
|
+
// Entering maximize — save current state
|
|
80
|
+
preMaxRef.current = { pos, size };
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Leaving maximize — restore previous state
|
|
84
|
+
setPos(preMaxRef.current.pos);
|
|
85
|
+
setSize(preMaxRef.current.size);
|
|
86
|
+
}
|
|
87
|
+
return !prev;
|
|
88
|
+
});
|
|
89
|
+
}, [isOpen, pos, size, setPos, setSize]);
|
|
90
|
+
// Keyboard shortcuts: Cmd/Ctrl+Shift+K = toggle, Cmd/Ctrl+Shift+M = maximize
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
const handler = (e) => {
|
|
93
|
+
if ((e.metaKey || e.ctrlKey) && e.shiftKey && (e.key === 'k' || e.key === 'K')) {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
if (isMaximized)
|
|
96
|
+
setIsMaximized(false);
|
|
97
|
+
toggle();
|
|
98
|
+
// Focus the composer input after panel opens
|
|
99
|
+
requestAnimationFrame(() => {
|
|
100
|
+
setTimeout(() => {
|
|
101
|
+
const input = panelRef.current?.querySelector('textarea');
|
|
102
|
+
input?.focus();
|
|
103
|
+
}, 100);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if ((e.metaKey || e.ctrlKey) && e.shiftKey && (e.key === 'm' || e.key === 'M')) {
|
|
107
|
+
e.preventDefault();
|
|
108
|
+
toggleMaximize();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
document.addEventListener('keydown', handler);
|
|
112
|
+
return () => document.removeEventListener('keydown', handler);
|
|
113
|
+
}, [toggle, toggleMaximize, isMaximized]);
|
|
114
|
+
// Persist position/size to localStorage (debounced)
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
const timer = setTimeout(() => persistState(pos, size), 300);
|
|
117
|
+
return () => clearTimeout(timer);
|
|
118
|
+
}, [pos, size]);
|
|
119
|
+
// ── Drag handling ──────────────────────────────────────────────────────
|
|
120
|
+
const onDragStart = useCallback((e) => {
|
|
121
|
+
e.preventDefault();
|
|
122
|
+
const panel = panelRef.current;
|
|
123
|
+
if (!panel)
|
|
124
|
+
return;
|
|
125
|
+
// If no custom position yet, compute from current DOM position
|
|
126
|
+
const rect = panel.getBoundingClientRect();
|
|
127
|
+
const currentX = pos?.x ?? rect.left;
|
|
128
|
+
const currentY = pos?.y ?? rect.top;
|
|
129
|
+
dragRef.current = {
|
|
130
|
+
startX: e.clientX,
|
|
131
|
+
startY: e.clientY,
|
|
132
|
+
startPosX: currentX,
|
|
133
|
+
startPosY: currentY,
|
|
134
|
+
};
|
|
135
|
+
const onMove = (ev) => {
|
|
136
|
+
if (!dragRef.current)
|
|
137
|
+
return;
|
|
138
|
+
const dx = ev.clientX - dragRef.current.startX;
|
|
139
|
+
const dy = ev.clientY - dragRef.current.startY;
|
|
140
|
+
setPos({
|
|
141
|
+
x: dragRef.current.startPosX + dx,
|
|
142
|
+
y: dragRef.current.startPosY + dy,
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
const onUp = () => {
|
|
146
|
+
dragRef.current = null;
|
|
147
|
+
document.removeEventListener('mousemove', onMove);
|
|
148
|
+
document.removeEventListener('mouseup', onUp);
|
|
149
|
+
};
|
|
150
|
+
document.addEventListener('mousemove', onMove);
|
|
151
|
+
document.addEventListener('mouseup', onUp);
|
|
152
|
+
}, [pos, setPos]);
|
|
153
|
+
// ── Resize handling (from top-right corner) ────────────────────────────
|
|
154
|
+
const onResizeStart = useCallback((e) => {
|
|
155
|
+
e.preventDefault();
|
|
156
|
+
e.stopPropagation();
|
|
157
|
+
const panel = panelRef.current;
|
|
158
|
+
if (!panel)
|
|
159
|
+
return;
|
|
160
|
+
const rect = panel.getBoundingClientRect();
|
|
161
|
+
resizeRef.current = {
|
|
162
|
+
startX: e.clientX,
|
|
163
|
+
startY: e.clientY,
|
|
164
|
+
startW: size?.w ?? rect.width,
|
|
165
|
+
startH: size?.h ?? rect.height,
|
|
166
|
+
};
|
|
167
|
+
// Also capture position if not set yet
|
|
168
|
+
if (!pos) {
|
|
169
|
+
setPos({ x: rect.left, y: rect.top });
|
|
170
|
+
}
|
|
171
|
+
const onMove = (ev) => {
|
|
172
|
+
if (!resizeRef.current)
|
|
173
|
+
return;
|
|
174
|
+
const dx = ev.clientX - resizeRef.current.startX;
|
|
175
|
+
const dy = ev.clientY - resizeRef.current.startY;
|
|
176
|
+
setSize({
|
|
177
|
+
w: Math.max(MIN_W, resizeRef.current.startW + dx),
|
|
178
|
+
h: Math.max(MIN_H, resizeRef.current.startH - dy),
|
|
179
|
+
});
|
|
180
|
+
// Move top edge up as height increases
|
|
181
|
+
if (pos) {
|
|
182
|
+
setPos((prev) => (prev ? { ...prev, y: (prev.y ?? 0) + dy } : prev));
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const onUp = () => {
|
|
186
|
+
resizeRef.current = null;
|
|
187
|
+
document.removeEventListener('mousemove', onMove);
|
|
188
|
+
document.removeEventListener('mouseup', onUp);
|
|
189
|
+
};
|
|
190
|
+
document.addEventListener('mousemove', onMove);
|
|
191
|
+
document.addEventListener('mouseup', onUp);
|
|
192
|
+
}, [size, pos, setPos, setSize]);
|
|
193
|
+
// Reset position/size on close for clean reopen
|
|
194
|
+
const handleClose = useCallback(() => {
|
|
195
|
+
setIsOpen(false);
|
|
196
|
+
setIsMaximized(false);
|
|
197
|
+
}, []);
|
|
198
|
+
// Compute panel style — maximized overrides everything
|
|
199
|
+
const panelStyle = isMaximized
|
|
200
|
+
? {}
|
|
201
|
+
: pos
|
|
202
|
+
? {
|
|
203
|
+
position: 'fixed',
|
|
204
|
+
left: pos.x,
|
|
205
|
+
top: pos.y,
|
|
206
|
+
width: size?.w ?? DEFAULT_W,
|
|
207
|
+
height: size?.h ?? `${DEFAULT_H_VH}vh`,
|
|
208
|
+
}
|
|
209
|
+
: {
|
|
210
|
+
width: size?.w ?? DEFAULT_W,
|
|
211
|
+
height: size?.h ?? `${DEFAULT_H_VH}vh`,
|
|
212
|
+
};
|
|
213
|
+
return (_jsxs(_Fragment, { children: [hasOpened ? (_jsxs("div", { ref: panelRef, className: cn(isMaximized
|
|
214
|
+
? 'bg-background absolute inset-0 z-30 flex flex-col overflow-hidden dark:bg-neutral-900'
|
|
215
|
+
: cn(!pos && 'absolute bottom-24 left-4', 'z-30 flex flex-col overflow-hidden rounded-lg', 'border-border/60 border dark:border-white/10', 'bg-background dark:bg-neutral-900', 'shadow-[0_8px_40px_-8px_rgba(0,0,0,0.2)] dark:shadow-[0_8px_40px_-8px_rgba(0,0,0,0.6)]'), 'transition-opacity duration-300 ease-out', isOpen ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0'), style: panelStyle, children: [!isMaximized ? (_jsx("div", { className: "h-[2px] shrink-0 bg-gradient-to-r from-transparent via-violet-500/50 to-transparent" })) : null, !isMaximized ? (_jsx("div", { onMouseDown: onResizeStart, className: "absolute top-0 right-0 z-10 h-4 w-4 cursor-ne-resize" })) : null, _jsxs("div", { onMouseDown: isMaximized ? undefined : onDragStart, className: cn('relative flex h-11 shrink-0 items-center gap-2.5 border-b border-black/[0.06] px-3.5 dark:border-white/[0.06]', !isMaximized && 'cursor-grab active:cursor-grabbing'), children: [_jsx("div", { className: "from-foreground/[0.02] to-foreground/[0.02] pointer-events-none absolute inset-0 bg-gradient-to-r via-transparent" }), !isMaximized ? (_jsx(GripVertical, { className: "text-foreground/15 relative h-3.5 w-3.5 shrink-0" })) : null, _jsx("div", { className: "relative flex h-5 w-5 items-center justify-center", children: _jsx(Bot, { className: "text-foreground/50 h-4 w-4" }) }), _jsxs("div", { className: "relative flex items-baseline gap-2", children: [_jsx("span", { className: "text-foreground/90 text-base font-bold tracking-tight", children: "Shep" }), _jsx("span", { className: "text-foreground/30 text-xs font-medium tracking-widest uppercase", children: "global" })] }), _jsxs("div", { className: "relative ml-auto flex items-center gap-0.5", children: [_jsx("button", { type: "button", onClick: toggleMaximize, className: "text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors", title: isMaximized ? 'Restore (⌘⇧M)' : 'Maximize (⌘⇧M)', children: isMaximized ? (_jsx(Minimize2, { className: "h-3.5 w-3.5" })) : (_jsx(Maximize2, { className: "h-3.5 w-3.5" })) }), _jsx("button", { type: "button", onClick: handleClose, className: "text-foreground/30 hover:text-foreground/60 rounded-md p-1 transition-colors", title: "Close (\u2318\u21E7K)", children: _jsx(X, { className: "h-3.5 w-3.5" }) })] })] }), _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: "global" }) }), !isMaximized ? (_jsx("div", { onMouseDown: (e) => {
|
|
216
|
+
e.preventDefault();
|
|
217
|
+
e.stopPropagation();
|
|
218
|
+
const panel = panelRef.current;
|
|
219
|
+
if (!panel)
|
|
220
|
+
return;
|
|
221
|
+
const rect = panel.getBoundingClientRect();
|
|
222
|
+
const startX = e.clientX;
|
|
223
|
+
const startY = e.clientY;
|
|
224
|
+
const startW = size?.w ?? rect.width;
|
|
225
|
+
const startH = size?.h ?? rect.height;
|
|
226
|
+
if (!pos)
|
|
227
|
+
setPos({ x: rect.left, y: rect.top });
|
|
228
|
+
const onMove = (ev) => {
|
|
229
|
+
setSize({
|
|
230
|
+
w: Math.max(MIN_W, startW + (ev.clientX - startX)),
|
|
231
|
+
h: Math.max(MIN_H, startH + (ev.clientY - startY)),
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
const onUp = () => {
|
|
235
|
+
document.removeEventListener('mousemove', onMove);
|
|
236
|
+
document.removeEventListener('mouseup', onUp);
|
|
237
|
+
};
|
|
238
|
+
document.addEventListener('mousemove', onMove);
|
|
239
|
+
document.addEventListener('mouseup', onUp);
|
|
240
|
+
}, className: "absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null, _jsxs("div", { className: cn('group/fab absolute bottom-4 left-4 z-30 flex items-center', isMaximized && 'hidden'), children: [_jsxs(Button, { size: "icon", onClick: toggle, className: cn('relative h-14 w-14 rounded-full shadow-lg', 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95', isOpen
|
|
241
|
+
? 'bg-violet-600 text-white hover:bg-violet-500'
|
|
242
|
+
: 'bg-violet-500 text-white hover:bg-violet-400 dark:bg-violet-500 dark:hover:bg-violet-400'), children: [_jsx(MessageSquare, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100') }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0') })] }), _jsx("div", { className: "pointer-events-none ml-3 flex translate-x-[-4px] items-center gap-2 opacity-0 transition-all duration-200 group-hover/fab:translate-x-0 group-hover/fab:opacity-100", children: _jsxs("div", { className: "bg-foreground rounded-lg px-3 py-1.5 shadow-lg", children: [_jsx("p", { className: "text-background text-xs font-medium", children: "Shep Chat" }), _jsxs("p", { className: "text-background/50 mt-0.5 flex items-center gap-1 text-[10px]", children: [_jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u2318" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u21E7" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "K" })] })] }) })] })] }));
|
|
243
|
+
}
|