@agent-native/core 0.4.5 → 0.6.1
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/README.md +15 -43
- package/dist/a2a/agent-card.d.ts.map +1 -1
- package/dist/a2a/agent-card.js +12 -1
- package/dist/a2a/agent-card.js.map +1 -1
- package/dist/a2a/client.d.ts +18 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +62 -4
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts +6 -3
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +45 -39
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/index.d.ts +2 -2
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +3 -3
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/server.d.ts +11 -2
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +99 -14
- package/dist/a2a/server.js.map +1 -1
- package/dist/a2a/task-store.d.ts +6 -6
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +102 -42
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/a2a/types.d.ts +3 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/action.d.ts +80 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +232 -0
- package/dist/action.js.map +1 -0
- package/dist/agent/engine/ai-sdk-engine.d.ts +24 -0
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -0
- package/dist/agent/engine/ai-sdk-engine.js +302 -0
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -0
- package/dist/agent/engine/anthropic-engine.d.ts +24 -0
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -0
- package/dist/agent/engine/anthropic-engine.js +169 -0
- package/dist/agent/engine/anthropic-engine.js.map +1 -0
- package/dist/agent/engine/builtin.d.ts +12 -0
- package/dist/agent/engine/builtin.d.ts.map +1 -0
- package/dist/agent/engine/builtin.js +72 -0
- package/dist/agent/engine/builtin.js.map +1 -0
- package/dist/agent/engine/index.d.ts +9 -0
- package/dist/agent/engine/index.d.ts.map +1 -0
- package/dist/agent/engine/index.js +8 -0
- package/dist/agent/engine/index.js.map +1 -0
- package/dist/agent/engine/registry.d.ts +61 -0
- package/dist/agent/engine/registry.d.ts.map +1 -0
- package/dist/agent/engine/registry.js +101 -0
- package/dist/agent/engine/registry.js.map +1 -0
- package/dist/agent/engine/translate-ai-sdk.d.ts +20 -0
- package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -0
- package/dist/agent/engine/translate-ai-sdk.js +174 -0
- package/dist/agent/engine/translate-ai-sdk.js.map +1 -0
- package/dist/agent/engine/translate-anthropic.d.ts +23 -0
- package/dist/agent/engine/translate-anthropic.d.ts.map +1 -0
- package/dist/agent/engine/translate-anthropic.js +140 -0
- package/dist/agent/engine/translate-anthropic.js.map +1 -0
- package/dist/agent/engine/types.d.ts +168 -0
- package/dist/agent/engine/types.d.ts.map +1 -0
- package/dist/agent/engine/types.js +13 -0
- package/dist/agent/engine/types.js.map +1 -0
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/production-agent.d.ts +69 -7
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +480 -127
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +43 -0
- package/dist/agent/run-manager.d.ts.map +1 -0
- package/dist/agent/run-manager.js +364 -0
- package/dist/agent/run-manager.js.map +1 -0
- package/dist/agent/run-store.d.ts +26 -0
- package/dist/agent/run-store.d.ts.map +1 -0
- package/dist/agent/run-store.js +145 -0
- package/dist/agent/run-store.js.map +1 -0
- package/dist/agent/thread-data-builder.d.ts +31 -0
- package/dist/agent/thread-data-builder.d.ts.map +1 -0
- package/dist/agent/thread-data-builder.js +91 -0
- package/dist/agent/thread-data-builder.js.map +1 -0
- package/dist/agent/types.d.ts +73 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/emitter.d.ts +3 -2
- package/dist/application-state/emitter.d.ts.map +1 -1
- package/dist/application-state/emitter.js +14 -4
- package/dist/application-state/emitter.js.map +1 -1
- package/dist/application-state/handlers.d.ts +8 -8
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/handlers.js +15 -17
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/application-state/script-helpers.d.ts +1 -1
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +56 -8
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/application-state/store.d.ts +4 -3
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +31 -59
- package/dist/application-state/store.js.map +1 -1
- package/dist/chat-threads/emitter.d.ts +9 -0
- package/dist/chat-threads/emitter.d.ts.map +1 -0
- package/dist/chat-threads/emitter.js +14 -0
- package/dist/chat-threads/emitter.js.map +1 -0
- package/dist/chat-threads/store.d.ts +42 -0
- package/dist/chat-threads/store.d.ts.map +1 -0
- package/dist/chat-threads/store.js +156 -0
- package/dist/chat-threads/store.js.map +1 -0
- package/dist/cli/create.d.ts +8 -2
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +288 -47
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +49 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-agents.d.ts +11 -0
- package/dist/cli/setup-agents.d.ts.map +1 -0
- package/dist/cli/setup-agents.js +123 -0
- package/dist/cli/setup-agents.js.map +1 -0
- package/dist/client/AgentPanel.d.ts +13 -2
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +771 -38
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AgentTaskCard.d.ts +12 -0
- package/dist/client/AgentTaskCard.d.ts.map +1 -0
- package/dist/client/AgentTaskCard.js +146 -0
- package/dist/client/AgentTaskCard.js.map +1 -0
- package/dist/client/AssistantChat.d.ts +36 -3
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +838 -86
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ClientOnly.d.ts +14 -0
- package/dist/client/ClientOnly.d.ts.map +1 -0
- package/dist/client/ClientOnly.js +17 -0
- package/dist/client/ClientOnly.js.map +1 -0
- package/dist/client/CommandMenu.d.ts +71 -0
- package/dist/client/CommandMenu.d.ts.map +1 -0
- package/dist/client/CommandMenu.js +257 -0
- package/dist/client/CommandMenu.js.map +1 -0
- package/dist/client/DefaultSpinner.d.ts +7 -0
- package/dist/client/DefaultSpinner.d.ts.map +1 -0
- package/dist/client/DefaultSpinner.js +28 -0
- package/dist/client/DefaultSpinner.js.map +1 -0
- package/dist/client/MultiTabAssistantChat.d.ts +40 -2
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +630 -59
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts.map +1 -1
- package/dist/client/PoweredByBadge.js +4 -3
- package/dist/client/PoweredByBadge.js.map +1 -1
- package/dist/client/Turnstile.d.ts.map +1 -1
- package/dist/client/Turnstile.js +2 -3
- package/dist/client/Turnstile.js.map +1 -1
- package/dist/client/active-run-state.d.ts +10 -0
- package/dist/client/active-run-state.d.ts.map +1 -0
- package/dist/client/active-run-state.js +32 -0
- package/dist/client/active-run-state.js.map +1 -0
- package/dist/client/agent-chat-adapter.d.ts +2 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +145 -130
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-chat.d.ts +14 -1
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +6 -4
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/components/ApiKeySettings.d.ts +2 -2
- package/dist/client/components/ApiKeySettings.js +4 -4
- package/dist/client/components/ApiKeySettings.js.map +1 -1
- package/dist/client/components/CodeAgentIndicator.d.ts +14 -0
- package/dist/client/components/CodeAgentIndicator.d.ts.map +1 -0
- package/dist/client/components/CodeAgentIndicator.js +29 -0
- package/dist/client/components/CodeAgentIndicator.js.map +1 -0
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +4 -3
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/composer/MentionPopover.d.ts +29 -0
- package/dist/client/composer/MentionPopover.d.ts.map +1 -0
- package/dist/client/composer/MentionPopover.js +160 -0
- package/dist/client/composer/MentionPopover.js.map +1 -0
- package/dist/client/composer/TiptapComposer.d.ts +26 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -0
- package/dist/client/composer/TiptapComposer.js +545 -0
- package/dist/client/composer/TiptapComposer.js.map +1 -0
- package/dist/client/composer/extensions/FileReference.d.ts +3 -0
- package/dist/client/composer/extensions/FileReference.d.ts.map +1 -0
- package/dist/client/composer/extensions/FileReference.js +36 -0
- package/dist/client/composer/extensions/FileReference.js.map +1 -0
- package/dist/client/composer/extensions/MentionReference.d.ts +3 -0
- package/dist/client/composer/extensions/MentionReference.d.ts.map +1 -0
- package/dist/client/composer/extensions/MentionReference.js +63 -0
- package/dist/client/composer/extensions/MentionReference.js.map +1 -0
- package/dist/client/composer/extensions/SkillReference.d.ts +3 -0
- package/dist/client/composer/extensions/SkillReference.d.ts.map +1 -0
- package/dist/client/composer/extensions/SkillReference.js +40 -0
- package/dist/client/composer/extensions/SkillReference.js.map +1 -0
- package/dist/client/composer/index.d.ts +8 -0
- package/dist/client/composer/index.d.ts.map +1 -0
- package/dist/client/composer/index.js +7 -0
- package/dist/client/composer/index.js.map +1 -0
- package/dist/client/composer/types.d.ts +37 -0
- package/dist/client/composer/types.d.ts.map +1 -0
- package/dist/client/composer/types.js +2 -0
- package/dist/client/composer/types.js.map +1 -0
- package/dist/client/composer/use-file-search.d.ts +6 -0
- package/dist/client/composer/use-file-search.d.ts.map +1 -0
- package/dist/client/composer/use-file-search.js +40 -0
- package/dist/client/composer/use-file-search.js.map +1 -0
- package/dist/client/composer/use-mention-search.d.ts +6 -0
- package/dist/client/composer/use-mention-search.d.ts.map +1 -0
- package/dist/client/composer/use-mention-search.js +72 -0
- package/dist/client/composer/use-mention-search.js.map +1 -0
- package/dist/client/composer/use-skills.d.ts +7 -0
- package/dist/client/composer/use-skills.d.ts.map +1 -0
- package/dist/client/composer/use-skills.js +38 -0
- package/dist/client/composer/use-skills.js.map +1 -0
- package/dist/client/frame-protocol.d.ts +54 -0
- package/dist/client/frame-protocol.d.ts.map +1 -0
- package/dist/client/frame-protocol.js +9 -0
- package/dist/client/frame-protocol.js.map +1 -0
- package/dist/client/frame.d.ts +56 -0
- package/dist/client/frame.d.ts.map +1 -0
- package/dist/client/{harness.js → frame.js} +49 -26
- package/dist/client/frame.js.map +1 -0
- package/dist/client/index.d.ts +15 -6
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +13 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts +6 -0
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -0
- package/dist/client/integrations/IntegrationCard.js +45 -0
- package/dist/client/integrations/IntegrationCard.js.map +1 -0
- package/dist/client/integrations/IntegrationsPanel.d.ts +2 -0
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -0
- package/dist/client/integrations/IntegrationsPanel.js +149 -0
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -0
- package/dist/client/integrations/index.d.ts +4 -0
- package/dist/client/integrations/index.d.ts.map +1 -0
- package/dist/client/integrations/index.js +3 -0
- package/dist/client/integrations/index.js.map +1 -0
- package/dist/client/integrations/useIntegrationStatus.d.ts +15 -0
- package/dist/client/integrations/useIntegrationStatus.d.ts.map +1 -0
- package/dist/client/integrations/useIntegrationStatus.js +37 -0
- package/dist/client/integrations/useIntegrationStatus.js.map +1 -0
- package/dist/client/org/InvitationBanner.d.ts +9 -0
- package/dist/client/org/InvitationBanner.d.ts.map +1 -0
- package/dist/client/org/InvitationBanner.js +17 -0
- package/dist/client/org/InvitationBanner.js.map +1 -0
- package/dist/client/org/OrgSwitcher.d.ts +14 -0
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -0
- package/dist/client/org/OrgSwitcher.js +51 -0
- package/dist/client/org/OrgSwitcher.js.map +1 -0
- package/dist/client/org/TeamPage.d.ts +23 -0
- package/dist/client/org/TeamPage.d.ts.map +1 -0
- package/dist/client/org/TeamPage.js +145 -0
- package/dist/client/org/TeamPage.js.map +1 -0
- package/dist/client/org/hooks.d.ts +14 -0
- package/dist/client/org/hooks.d.ts.map +1 -0
- package/dist/client/org/hooks.js +101 -0
- package/dist/client/org/hooks.js.map +1 -0
- package/dist/client/org/index.d.ts +6 -0
- package/dist/client/org/index.d.ts.map +1 -0
- package/dist/client/org/index.js +6 -0
- package/dist/client/org/index.js.map +1 -0
- package/dist/client/resources/ResourceEditor.d.ts +14 -0
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -0
- package/dist/client/resources/ResourceEditor.js +932 -0
- package/dist/client/resources/ResourceEditor.js.map +1 -0
- package/dist/client/resources/ResourceTree.d.ts +17 -0
- package/dist/client/resources/ResourceTree.d.ts.map +1 -0
- package/dist/client/resources/ResourceTree.js +137 -0
- package/dist/client/resources/ResourceTree.js.map +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts +2 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -0
- package/dist/client/resources/ResourcesPanel.js +366 -0
- package/dist/client/resources/ResourcesPanel.js.map +1 -0
- package/dist/client/resources/index.d.ts +5 -0
- package/dist/client/resources/index.d.ts.map +1 -0
- package/dist/client/resources/index.js +5 -0
- package/dist/client/resources/index.js.map +1 -0
- package/dist/client/resources/use-resources.d.ts +55 -0
- package/dist/client/resources/use-resources.d.ts.map +1 -0
- package/dist/client/resources/use-resources.js +102 -0
- package/dist/client/resources/use-resources.js.map +1 -0
- package/dist/client/sse-event-processor.d.ts +58 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -0
- package/dist/client/sse-event-processor.js +300 -0
- package/dist/client/sse-event-processor.js.map +1 -0
- package/dist/client/terminal/AgentTerminal.d.ts +5 -5
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
- package/dist/client/terminal/AgentTerminal.js +25 -20
- package/dist/client/terminal/AgentTerminal.js.map +1 -1
- package/dist/client/use-action.d.ts +51 -0
- package/dist/client/use-action.d.ts.map +1 -0
- package/dist/client/use-action.js +102 -0
- package/dist/client/use-action.js.map +1 -0
- package/dist/client/use-agent-chat.d.ts +1 -1
- package/dist/client/use-agent-chat.d.ts.map +1 -1
- package/dist/client/use-agent-chat.js +3 -3
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/use-avatar.d.ts +15 -0
- package/dist/client/use-avatar.d.ts.map +1 -0
- package/dist/client/use-avatar.js +116 -0
- package/dist/client/use-avatar.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts +36 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -0
- package/dist/client/use-chat-threads.js +191 -0
- package/dist/client/use-chat-threads.js.map +1 -0
- package/dist/client/use-db-sync.d.ts +35 -0
- package/dist/client/use-db-sync.d.ts.map +1 -0
- package/dist/client/use-db-sync.js +74 -0
- package/dist/client/use-db-sync.js.map +1 -0
- package/dist/client/use-dev-mode.d.ts +4 -2
- package/dist/client/use-dev-mode.d.ts.map +1 -1
- package/dist/client/use-dev-mode.js +41 -12
- package/dist/client/use-dev-mode.js.map +1 -1
- package/dist/client/use-send-to-agent-chat.d.ts +7 -4
- package/dist/client/use-send-to-agent-chat.d.ts.map +1 -1
- package/dist/client/use-send-to-agent-chat.js +31 -10
- package/dist/client/use-send-to-agent-chat.js.map +1 -1
- package/dist/client/use-session.d.ts +1 -1
- package/dist/client/use-session.js +2 -2
- package/dist/client/use-session.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts +1 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js +38 -3
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/collab/awareness.d.ts +41 -0
- package/dist/collab/awareness.d.ts.map +1 -0
- package/dist/collab/awareness.js +82 -0
- package/dist/collab/awareness.js.map +1 -0
- package/dist/collab/client.d.ts +49 -0
- package/dist/collab/client.d.ts.map +1 -0
- package/dist/collab/client.js +250 -0
- package/dist/collab/client.js.map +1 -0
- package/dist/collab/emitter.d.ts +12 -0
- package/dist/collab/emitter.d.ts.map +1 -0
- package/dist/collab/emitter.js +16 -0
- package/dist/collab/emitter.js.map +1 -0
- package/dist/collab/index.d.ts +7 -0
- package/dist/collab/index.d.ts.map +1 -0
- package/dist/collab/index.js +14 -0
- package/dist/collab/index.js.map +1 -0
- package/dist/collab/routes.d.ts +69 -0
- package/dist/collab/routes.d.ts.map +1 -0
- package/dist/collab/routes.js +98 -0
- package/dist/collab/routes.js.map +1 -0
- package/dist/collab/storage.d.ts +18 -0
- package/dist/collab/storage.d.ts.map +1 -0
- package/dist/collab/storage.js +94 -0
- package/dist/collab/storage.js.map +1 -0
- package/dist/collab/text-to-yjs.d.ts +23 -0
- package/dist/collab/text-to-yjs.d.ts.map +1 -0
- package/dist/collab/text-to-yjs.js +63 -0
- package/dist/collab/text-to-yjs.js.map +1 -0
- package/dist/collab/xml-ops.d.ts +20 -0
- package/dist/collab/xml-ops.d.ts.map +1 -0
- package/dist/collab/xml-ops.js +59 -0
- package/dist/collab/xml-ops.js.map +1 -0
- package/dist/collab/ydoc-manager.d.ts +52 -0
- package/dist/collab/ydoc-manager.d.ts.map +1 -0
- package/dist/collab/ydoc-manager.js +154 -0
- package/dist/collab/ydoc-manager.js.map +1 -0
- package/dist/credentials/index.d.ts +18 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +32 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/db/client.d.ts +45 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +289 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +103 -16
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/db/index.d.ts +10 -6
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +10 -4
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +9 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +67 -41
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/schema.d.ts +52 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +72 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/deploy/build.js +636 -42
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/route-discovery.d.ts +25 -3
- package/dist/deploy/route-discovery.d.ts.map +1 -1
- package/dist/deploy/route-discovery.js +135 -24
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/index.browser.d.ts +3 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +5 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts +10 -0
- package/dist/integrations/adapters/slack.d.ts.map +1 -0
- package/dist/integrations/adapters/slack.js +215 -0
- package/dist/integrations/adapters/slack.js.map +1 -0
- package/dist/integrations/adapters/telegram.d.ts +12 -0
- package/dist/integrations/adapters/telegram.d.ts.map +1 -0
- package/dist/integrations/adapters/telegram.js +184 -0
- package/dist/integrations/adapters/telegram.js.map +1 -0
- package/dist/integrations/adapters/whatsapp.d.ts +14 -0
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -0
- package/dist/integrations/adapters/whatsapp.js +205 -0
- package/dist/integrations/adapters/whatsapp.js.map +1 -0
- package/dist/integrations/config-store.d.ts +24 -0
- package/dist/integrations/config-store.d.ts.map +1 -0
- package/dist/integrations/config-store.js +92 -0
- package/dist/integrations/config-store.js.map +1 -0
- package/dist/integrations/index.d.ts +8 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +10 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/plugin.d.ts +20 -0
- package/dist/integrations/plugin.d.ts.map +1 -0
- package/dist/integrations/plugin.js +213 -0
- package/dist/integrations/plugin.js.map +1 -0
- package/dist/integrations/thread-mapping-store.d.ts +25 -0
- package/dist/integrations/thread-mapping-store.d.ts.map +1 -0
- package/dist/integrations/thread-mapping-store.js +95 -0
- package/dist/integrations/thread-mapping-store.js.map +1 -0
- package/dist/integrations/types.d.ts +111 -0
- package/dist/integrations/types.d.ts.map +1 -0
- package/dist/integrations/types.js +2 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +31 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -0
- package/dist/integrations/webhook-handler.js +210 -0
- package/dist/integrations/webhook-handler.js.map +1 -0
- package/dist/jobs/cron.d.ts +14 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +100 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/index.d.ts +4 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +4 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +29 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +205 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/tools.d.ts +3 -0
- package/dist/jobs/tools.d.ts.map +1 -0
- package/dist/jobs/tools.js +192 -0
- package/dist/jobs/tools.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +26 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +182 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/oauth-tokens/index.d.ts +1 -1
- package/dist/oauth-tokens/index.d.ts.map +1 -1
- package/dist/oauth-tokens/index.js +1 -1
- package/dist/oauth-tokens/index.js.map +1 -1
- package/dist/oauth-tokens/store.d.ts +5 -0
- package/dist/oauth-tokens/store.d.ts.map +1 -1
- package/dist/oauth-tokens/store.js +67 -82
- package/dist/oauth-tokens/store.js.map +1 -1
- package/dist/org/context.d.ts +11 -0
- package/dist/org/context.d.ts.map +1 -0
- package/dist/org/context.js +61 -0
- package/dist/org/context.js.map +1 -0
- package/dist/org/handlers.d.ts +66 -0
- package/dist/org/handlers.d.ts.map +1 -0
- package/dist/org/handlers.js +306 -0
- package/dist/org/handlers.js.map +1 -0
- package/dist/org/index.d.ts +7 -0
- package/dist/org/index.d.ts.map +1 -0
- package/dist/org/index.js +11 -0
- package/dist/org/index.js.map +1 -0
- package/dist/org/migrations.d.ts +10 -0
- package/dist/org/migrations.d.ts.map +1 -0
- package/dist/org/migrations.js +39 -0
- package/dist/org/migrations.js.map +1 -0
- package/dist/org/plugin.d.ts +26 -0
- package/dist/org/plugin.d.ts.map +1 -0
- package/dist/org/plugin.js +94 -0
- package/dist/org/plugin.js.map +1 -0
- package/dist/org/schema.d.ts +301 -0
- package/dist/org/schema.d.ts.map +1 -0
- package/dist/org/schema.js +23 -0
- package/dist/org/schema.js.map +1 -0
- package/dist/org/types.d.ts +42 -0
- package/dist/org/types.d.ts.map +1 -0
- package/dist/org/types.js +5 -0
- package/dist/org/types.js.map +1 -0
- package/dist/resources/emitter.d.ts +13 -0
- package/dist/resources/emitter.d.ts.map +1 -0
- package/dist/resources/emitter.js +32 -0
- package/dist/resources/emitter.js.map +1 -0
- package/dist/resources/handlers.d.ts +54 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +292 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +5 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/script-helpers.d.ts +24 -0
- package/dist/resources/script-helpers.d.ts.map +1 -0
- package/dist/resources/script-helpers.js +36 -0
- package/dist/resources/script-helpers.js.map +1 -0
- package/dist/resources/store.d.ts +40 -0
- package/dist/resources/store.d.ts.map +1 -0
- package/dist/resources/store.js +497 -0
- package/dist/resources/store.js.map +1 -0
- package/dist/scripts/agent-engines/list-agent-engines.d.ts +7 -0
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -0
- package/dist/scripts/agent-engines/list-agent-engines.js +42 -0
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -0
- package/dist/scripts/agent-engines/set-agent-engine.d.ts +7 -0
- package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -0
- package/dist/scripts/agent-engines/set-agent-engine.js +57 -0
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -0
- package/dist/scripts/agent-engines/test-agent-engine.d.ts +7 -0
- package/dist/scripts/agent-engines/test-agent-engine.d.ts.map +1 -0
- package/dist/scripts/agent-engines/test-agent-engine.js +102 -0
- package/dist/scripts/agent-engines/test-agent-engine.js.map +1 -0
- package/dist/scripts/call-agent.d.ts +5 -0
- package/dist/scripts/call-agent.d.ts.map +1 -0
- package/dist/scripts/call-agent.js +111 -0
- package/dist/scripts/call-agent.js.map +1 -0
- package/dist/scripts/chat/index.d.ts +2 -0
- package/dist/scripts/chat/index.d.ts.map +1 -0
- package/dist/scripts/chat/index.js +5 -0
- package/dist/scripts/chat/index.js.map +1 -0
- package/dist/scripts/chat/open-chat.d.ts +11 -0
- package/dist/scripts/chat/open-chat.d.ts.map +1 -0
- package/dist/scripts/chat/open-chat.js +48 -0
- package/dist/scripts/chat/open-chat.js.map +1 -0
- package/dist/scripts/chat/search-chats.d.ts +10 -0
- package/dist/scripts/chat/search-chats.d.ts.map +1 -0
- package/dist/scripts/chat/search-chats.js +89 -0
- package/dist/scripts/chat/search-chats.js.map +1 -0
- package/dist/scripts/core-scripts.d.ts.map +1 -1
- package/dist/scripts/core-scripts.js +4 -0
- package/dist/scripts/core-scripts.js.map +1 -1
- package/dist/scripts/db/check-scoping.d.ts +14 -0
- package/dist/scripts/db/check-scoping.d.ts.map +1 -0
- package/dist/scripts/db/check-scoping.js +174 -0
- package/dist/scripts/db/check-scoping.js.map +1 -0
- package/dist/scripts/db/exec.d.ts +7 -2
- package/dist/scripts/db/exec.d.ts.map +1 -1
- package/dist/scripts/db/exec.js +143 -36
- package/dist/scripts/db/exec.js.map +1 -1
- package/dist/scripts/db/index.d.ts.map +1 -1
- package/dist/scripts/db/index.js +2 -0
- package/dist/scripts/db/index.js.map +1 -1
- package/dist/scripts/db/patch.d.ts +50 -0
- package/dist/scripts/db/patch.d.ts.map +1 -0
- package/dist/scripts/db/patch.js +392 -0
- package/dist/scripts/db/patch.js.map +1 -0
- package/dist/scripts/db/query.d.ts +7 -2
- package/dist/scripts/db/query.d.ts.map +1 -1
- package/dist/scripts/db/query.js +89 -45
- package/dist/scripts/db/query.js.map +1 -1
- package/dist/scripts/db/schema.d.ts +2 -2
- package/dist/scripts/db/schema.d.ts.map +1 -1
- package/dist/scripts/db/schema.js +145 -6
- package/dist/scripts/db/schema.js.map +1 -1
- package/dist/scripts/db/scoping.d.ts +42 -0
- package/dist/scripts/db/scoping.d.ts.map +1 -0
- package/dist/scripts/db/scoping.js +216 -0
- package/dist/scripts/db/scoping.js.map +1 -0
- package/dist/scripts/dev/index.d.ts +2 -2
- package/dist/scripts/dev/index.d.ts.map +1 -1
- package/dist/scripts/dev/index.js +65 -2
- package/dist/scripts/dev/index.js.map +1 -1
- package/dist/scripts/dev/list-files.d.ts +2 -2
- package/dist/scripts/dev/read-file.d.ts +2 -2
- package/dist/scripts/dev/read-file.js +1 -1
- package/dist/scripts/dev/read-file.js.map +1 -1
- package/dist/scripts/dev/search-files.d.ts +2 -2
- package/dist/scripts/dev/search-files.js +1 -1
- package/dist/scripts/dev/search-files.js.map +1 -1
- package/dist/scripts/dev/shell.d.ts +2 -2
- package/dist/scripts/dev/shell.js +1 -1
- package/dist/scripts/dev/shell.js.map +1 -1
- package/dist/scripts/dev/write-file.d.ts +2 -2
- package/dist/scripts/dev/write-file.js +1 -1
- package/dist/scripts/dev/write-file.js.map +1 -1
- package/dist/scripts/parse-args.d.ts +14 -0
- package/dist/scripts/parse-args.d.ts.map +1 -0
- package/dist/scripts/parse-args.js +45 -0
- package/dist/scripts/parse-args.js.map +1 -0
- package/dist/scripts/resources/delete.d.ts +10 -0
- package/dist/scripts/resources/delete.d.ts.map +1 -0
- package/dist/scripts/resources/delete.js +38 -0
- package/dist/scripts/resources/delete.js.map +1 -0
- package/dist/scripts/resources/index.d.ts +2 -0
- package/dist/scripts/resources/index.d.ts.map +1 -0
- package/dist/scripts/resources/index.js +8 -0
- package/dist/scripts/resources/index.js.map +1 -0
- package/dist/scripts/resources/list.d.ts +10 -0
- package/dist/scripts/resources/list.d.ts.map +1 -0
- package/dist/scripts/resources/list.js +57 -0
- package/dist/scripts/resources/list.js.map +1 -0
- package/dist/scripts/resources/migrate-learnings.d.ts +10 -0
- package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -0
- package/dist/scripts/resources/migrate-learnings.js +23 -0
- package/dist/scripts/resources/migrate-learnings.js.map +1 -0
- package/dist/scripts/resources/read.d.ts +10 -0
- package/dist/scripts/resources/read.d.ts.map +1 -0
- package/dist/scripts/resources/read.js +59 -0
- package/dist/scripts/resources/read.js.map +1 -0
- package/dist/scripts/resources/write.d.ts +10 -0
- package/dist/scripts/resources/write.d.ts.map +1 -0
- package/dist/scripts/resources/write.js +67 -0
- package/dist/scripts/resources/write.js.map +1 -0
- package/dist/scripts/runner.d.ts +7 -7
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +78 -29
- package/dist/scripts/runner.js.map +1 -1
- package/dist/scripts/utils.d.ts +5 -10
- package/dist/scripts/utils.d.ts.map +1 -1
- package/dist/scripts/utils.js +7 -43
- package/dist/scripts/utils.js.map +1 -1
- package/dist/server/action-discovery.d.ts +40 -0
- package/dist/server/action-discovery.d.ts.map +1 -0
- package/dist/server/action-discovery.js +257 -0
- package/dist/server/action-discovery.js.map +1 -0
- package/dist/server/action-routes.d.ts +15 -0
- package/dist/server/action-routes.d.ts.map +1 -0
- package/dist/server/action-routes.js +105 -0
- package/dist/server/action-routes.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts +32 -23
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +1983 -39
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts +21 -0
- package/dist/server/agent-discovery.d.ts.map +1 -0
- package/dist/server/agent-discovery.js +197 -0
- package/dist/server/agent-discovery.js.map +1 -0
- package/dist/server/agent-teams.d.ts +70 -0
- package/dist/server/agent-teams.d.ts.map +1 -0
- package/dist/server/agent-teams.js +367 -0
- package/dist/server/agent-teams.js.map +1 -0
- package/dist/server/agents-bundle.d.ts +87 -0
- package/dist/server/agents-bundle.d.ts.map +1 -0
- package/dist/server/agents-bundle.js +231 -0
- package/dist/server/agents-bundle.js.map +1 -0
- package/dist/server/auth-plugin.d.ts +5 -0
- package/dist/server/auth-plugin.d.ts.map +1 -1
- package/dist/server/auth-plugin.js +13 -3
- package/dist/server/auth-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +54 -31
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +671 -294
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +72 -0
- package/dist/server/better-auth-instance.d.ts.map +1 -0
- package/dist/server/better-auth-instance.js +144 -0
- package/dist/server/better-auth-instance.js.map +1 -0
- package/dist/server/collab-plugin.d.ts +29 -0
- package/dist/server/collab-plugin.d.ts.map +1 -0
- package/dist/server/collab-plugin.js +85 -0
- package/dist/server/collab-plugin.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +54 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -0
- package/dist/server/core-routes-plugin.js +195 -0
- package/dist/server/core-routes-plugin.js.map +1 -0
- package/dist/server/create-server.d.ts +5 -5
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +44 -21
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts +47 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -0
- package/dist/server/framework-request-handler.js +168 -0
- package/dist/server/framework-request-handler.js.map +1 -0
- package/dist/server/google-auth-plugin.d.ts +4 -0
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +16 -15
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts +72 -0
- package/dist/server/google-oauth.d.ts.map +1 -0
- package/dist/server/google-oauth.js +209 -0
- package/dist/server/google-oauth.js.map +1 -0
- package/dist/server/h3-helpers.d.ts +23 -0
- package/dist/server/h3-helpers.d.ts.map +1 -0
- package/dist/server/h3-helpers.js +37 -0
- package/dist/server/h3-helpers.js.map +1 -0
- package/dist/server/index.d.ts +17 -5
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +19 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/local-migration.d.ts +32 -0
- package/dist/server/local-migration.d.ts.map +1 -0
- package/dist/server/local-migration.js +205 -0
- package/dist/server/local-migration.js.map +1 -0
- package/dist/server/oauth-helpers.d.ts +14 -0
- package/dist/server/oauth-helpers.d.ts.map +1 -0
- package/dist/server/oauth-helpers.js +23 -0
- package/dist/server/oauth-helpers.js.map +1 -0
- package/dist/server/onboarding-html.d.ts +24 -0
- package/dist/server/onboarding-html.d.ts.map +1 -0
- package/dist/server/onboarding-html.js +347 -0
- package/dist/server/onboarding-html.js.map +1 -0
- package/dist/server/poll.d.ts +45 -0
- package/dist/server/poll.d.ts.map +1 -0
- package/dist/server/poll.js +96 -0
- package/dist/server/poll.js.map +1 -0
- package/dist/server/resources-plugin.d.ts +27 -0
- package/dist/server/resources-plugin.d.ts.map +1 -0
- package/dist/server/resources-plugin.js +75 -0
- package/dist/server/resources-plugin.js.map +1 -0
- package/dist/server/schema-prompt.d.ts +16 -0
- package/dist/server/schema-prompt.d.ts.map +1 -0
- package/dist/server/schema-prompt.js +275 -0
- package/dist/server/schema-prompt.js.map +1 -0
- package/dist/server/script-discovery.d.ts +6 -0
- package/dist/server/script-discovery.d.ts.map +1 -0
- package/dist/server/script-discovery.js +6 -0
- package/dist/server/script-discovery.js.map +1 -0
- package/dist/server/sse.d.ts +4 -21
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +2 -30
- package/dist/server/sse.js.map +1 -1
- package/dist/server/ssr-handler.d.ts +6 -0
- package/dist/server/ssr-handler.d.ts.map +1 -0
- package/dist/server/ssr-handler.js +55 -0
- package/dist/server/ssr-handler.js.map +1 -0
- package/dist/settings/handlers.d.ts +6 -6
- package/dist/settings/handlers.d.ts.map +1 -1
- package/dist/settings/handlers.js +9 -6
- package/dist/settings/handlers.js.map +1 -1
- package/dist/settings/index.d.ts +2 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/org-settings.d.ts +22 -0
- package/dist/settings/org-settings.d.ts.map +1 -0
- package/dist/settings/org-settings.js +45 -0
- package/dist/settings/org-settings.js.map +1 -0
- package/dist/settings/store.d.ts +6 -2
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +26 -63
- package/dist/settings/store.js.map +1 -1
- package/dist/settings/user-settings.d.ts +3 -2
- package/dist/settings/user-settings.d.ts.map +1 -1
- package/dist/settings/user-settings.js +5 -5
- package/dist/settings/user-settings.js.map +1 -1
- package/dist/shared/agent-chat.d.ts +5 -5
- package/dist/shared/agent-chat.d.ts.map +1 -1
- package/dist/shared/agent-chat.js +8 -8
- package/dist/shared/agent-chat.js.map +1 -1
- package/dist/shared/agent-env.d.ts +1 -1
- package/dist/shared/agent-env.js +1 -1
- package/dist/shared/runtime.d.ts +14 -0
- package/dist/shared/runtime.d.ts.map +1 -0
- package/dist/shared/runtime.js +25 -0
- package/dist/shared/runtime.js.map +1 -0
- package/dist/tailwind.preset.d.ts +7 -6
- package/dist/tailwind.preset.d.ts.map +1 -1
- package/dist/tailwind.preset.js +18 -1
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/templates/default/.agents/skills/actions/SKILL.md +142 -0
- package/dist/templates/default/.agents/skills/agent-engines/SKILL.md +127 -0
- package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +50 -0
- package/dist/templates/default/.agents/skills/create-skill/SKILL.md +167 -0
- package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +90 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +69 -0
- package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +183 -0
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
- package/dist/templates/default/.agents/skills/security/SKILL.md +108 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/{src/templates/default/.agents/skills/files-as-database → dist/templates/default/.agents/skills/storing-data}/SKILL.md +2 -2
- package/dist/templates/default/.claude/settings.json +100 -0
- package/dist/templates/default/.env.example +5 -0
- package/dist/templates/default/.prettierrc +5 -0
- package/dist/templates/default/AGENTS.md +110 -0
- package/dist/templates/default/DEVELOPING.md +117 -0
- package/dist/templates/default/_gitignore +37 -0
- package/{src/templates/default/scripts → dist/templates/default/actions}/hello.ts +1 -1
- package/dist/templates/default/actions/navigate.ts +53 -0
- package/dist/templates/default/actions/view-screen.ts +39 -0
- package/dist/templates/default/app/entry.client.tsx +4 -0
- package/dist/templates/default/app/entry.server.tsx +56 -0
- package/dist/templates/default/app/global.css +95 -0
- package/dist/templates/default/app/lib/utils.ts +1 -0
- package/dist/templates/default/app/root.tsx +107 -0
- package/dist/templates/default/app/routes/_index.tsx +62 -0
- package/dist/templates/default/app/routes.ts +4 -0
- package/dist/templates/default/app/vite-env.d.ts +6 -0
- package/dist/templates/default/components.json +20 -0
- package/dist/templates/default/data/.gitkeep +0 -0
- package/dist/templates/default/data/sync-config.json +1 -0
- package/dist/templates/default/learnings.defaults.md +5 -0
- package/dist/templates/default/learnings.md +0 -0
- package/dist/templates/default/package.json +46 -0
- package/dist/templates/default/postcss.config.js +6 -0
- package/dist/templates/default/public/icon-180.svg +4 -0
- package/dist/templates/default/public/icon-192.svg +4 -0
- package/dist/templates/default/public/icon-512.svg +4 -0
- package/dist/templates/default/public/manifest.json +13 -0
- package/dist/templates/default/react-router.config.ts +6 -0
- package/dist/templates/default/server/middleware/auth.ts +15 -0
- package/dist/templates/default/server/plugins/.gitkeep +0 -0
- package/dist/templates/default/server/routes/[...page].get.ts +5 -0
- package/dist/templates/default/server/routes/api/hello.get.ts +5 -0
- package/dist/templates/default/shared/api.ts +6 -0
- package/dist/templates/default/ssr-entry.ts +20 -0
- package/dist/templates/default/tailwind.config.ts +7 -0
- package/dist/templates/default/tsconfig.json +11 -0
- package/dist/templates/default/vite.config.ts +6 -0
- package/dist/templates/templates/default/.agents/skills/actions/SKILL.md +142 -0
- package/dist/templates/templates/default/.agents/skills/agent-engines/SKILL.md +127 -0
- package/dist/templates/templates/default/.agents/skills/capture-learnings/SKILL.md +50 -0
- package/dist/templates/templates/default/.agents/skills/create-skill/SKILL.md +167 -0
- package/dist/templates/templates/default/.agents/skills/delegate-to-agent/SKILL.md +90 -0
- package/dist/templates/templates/default/.agents/skills/frontend-design/SKILL.md +69 -0
- package/dist/templates/templates/default/.agents/skills/real-time-collab/SKILL.md +183 -0
- package/dist/templates/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
- package/dist/templates/templates/default/.agents/skills/security/SKILL.md +108 -0
- package/dist/templates/templates/default/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/dist/templates/templates/default/.agents/skills/storing-data/SKILL.md +110 -0
- package/dist/templates/templates/default/.claude/settings.json +100 -0
- package/dist/templates/templates/default/.env.example +5 -0
- package/dist/templates/templates/default/.ignore +0 -0
- package/dist/templates/templates/default/.prettierrc +5 -0
- package/dist/templates/templates/default/AGENTS.md +110 -0
- package/dist/templates/templates/default/DEVELOPING.md +117 -0
- package/dist/templates/templates/default/_gitignore +37 -0
- package/dist/templates/templates/default/actions/hello.ts +20 -0
- package/dist/templates/templates/default/actions/navigate.ts +53 -0
- package/dist/templates/templates/default/actions/run.ts +2 -0
- package/dist/templates/templates/default/actions/view-screen.ts +39 -0
- package/dist/templates/templates/default/app/entry.client.tsx +4 -0
- package/dist/templates/templates/default/app/entry.server.tsx +56 -0
- package/dist/templates/templates/default/app/global.css +95 -0
- package/dist/templates/templates/default/app/lib/utils.ts +1 -0
- package/dist/templates/templates/default/app/root.tsx +107 -0
- package/dist/templates/templates/default/app/routes/_index.tsx +62 -0
- package/dist/templates/templates/default/app/routes.ts +4 -0
- package/dist/templates/templates/default/app/vite-env.d.ts +6 -0
- package/dist/templates/templates/default/components.json +20 -0
- package/dist/templates/templates/default/data/.gitkeep +0 -0
- package/dist/templates/templates/default/data/sync-config.json +1 -0
- package/dist/templates/templates/default/learnings.defaults.md +5 -0
- package/dist/templates/templates/default/learnings.md +0 -0
- package/dist/templates/templates/default/package.json +46 -0
- package/dist/templates/templates/default/postcss.config.js +6 -0
- package/dist/templates/templates/default/public/icon-180.svg +4 -0
- package/dist/templates/templates/default/public/icon-192.svg +4 -0
- package/dist/templates/templates/default/public/icon-512.svg +4 -0
- package/dist/templates/templates/default/public/manifest.json +13 -0
- package/dist/templates/templates/default/react-router.config.ts +6 -0
- package/dist/templates/templates/default/server/middleware/auth.ts +15 -0
- package/dist/templates/templates/default/server/plugins/.gitkeep +0 -0
- package/dist/templates/templates/default/server/routes/[...page].get.ts +5 -0
- package/dist/templates/templates/default/server/routes/api/hello.get.ts +5 -0
- package/dist/templates/templates/default/shared/api.ts +6 -0
- package/dist/templates/templates/default/ssr-entry.ts +20 -0
- package/dist/templates/templates/default/tailwind.config.ts +7 -0
- package/dist/templates/templates/default/tsconfig.json +11 -0
- package/dist/templates/templates/default/vite.config.ts +6 -0
- package/dist/terminal/cli-registry.d.ts +2 -2
- package/dist/terminal/cli-registry.d.ts.map +1 -1
- package/dist/terminal/cli-registry.js +8 -8
- package/dist/terminal/cli-registry.js.map +1 -1
- package/dist/terminal/pty-server.d.ts +1 -1
- package/dist/terminal/pty-server.d.ts.map +1 -1
- package/dist/terminal/pty-server.js +94 -18
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/terminal/terminal-plugin.d.ts +1 -10
- package/dist/terminal/terminal-plugin.d.ts.map +1 -1
- package/dist/terminal/terminal-plugin.js +77 -28
- package/dist/terminal/terminal-plugin.js.map +1 -1
- package/dist/usage/store.d.ts +29 -0
- package/dist/usage/store.d.ts.map +1 -0
- package/dist/usage/store.js +102 -0
- package/dist/usage/store.js.map +1 -0
- package/dist/vite/action-types-plugin.d.ts +13 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -0
- package/dist/vite/action-types-plugin.js +132 -0
- package/dist/vite/action-types-plugin.js.map +1 -0
- package/dist/vite/agents-bundle-plugin.d.ts +3 -0
- package/dist/vite/agents-bundle-plugin.d.ts.map +1 -0
- package/dist/vite/agents-bundle-plugin.js +87 -0
- package/dist/vite/agents-bundle-plugin.js.map +1 -0
- package/dist/vite/client.d.ts +5 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +310 -19
- package/dist/vite/client.js.map +1 -1
- package/dist/vite/index.d.ts +2 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +2 -1
- package/dist/vite/index.js.map +1 -1
- package/package.json +78 -14
- package/src/templates/default/.agents/skills/actions/SKILL.md +142 -0
- package/src/templates/default/.agents/skills/agent-engines/SKILL.md +127 -0
- package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +183 -0
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +112 -0
- package/src/templates/default/.agents/skills/security/SKILL.md +108 -0
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +110 -0
- package/src/templates/default/.claude/settings.json +13 -0
- package/src/templates/default/AGENTS.md +72 -164
- package/src/templates/default/DEVELOPING.md +117 -0
- package/src/templates/default/actions/hello.ts +20 -0
- package/src/templates/default/actions/navigate.ts +53 -0
- package/src/templates/default/actions/run.ts +2 -0
- package/src/templates/default/actions/view-screen.ts +39 -0
- package/src/templates/default/app/global.css +2 -2
- package/src/templates/default/app/root.tsx +19 -16
- package/src/templates/default/app/routes/_index.tsx +1 -1
- package/src/templates/default/package.json +6 -2
- package/src/templates/default/server/middleware/auth.ts +15 -0
- package/src/templates/default/server/plugins/.gitkeep +0 -0
- package/src/templates/default/server/routes/[...page].get.ts +2 -9
- package/src/templates/default/ssr-entry.ts +20 -0
- package/dist/a2a/middleware.d.ts +0 -3
- package/dist/a2a/middleware.d.ts.map +0 -1
- package/dist/a2a/middleware.js +0 -36
- package/dist/a2a/middleware.js.map +0 -1
- package/dist/adapters/convex/adapter.d.ts +0 -24
- package/dist/adapters/convex/adapter.d.ts.map +0 -1
- package/dist/adapters/convex/adapter.js +0 -125
- package/dist/adapters/convex/adapter.js.map +0 -1
- package/dist/adapters/convex/index.d.ts +0 -4
- package/dist/adapters/convex/index.d.ts.map +0 -1
- package/dist/adapters/convex/index.js +0 -3
- package/dist/adapters/convex/index.js.map +0 -1
- package/dist/adapters/drizzle/adapter.d.ts +0 -36
- package/dist/adapters/drizzle/adapter.d.ts.map +0 -1
- package/dist/adapters/drizzle/adapter.js +0 -210
- package/dist/adapters/drizzle/adapter.js.map +0 -1
- package/dist/adapters/drizzle/index.d.ts +0 -3
- package/dist/adapters/drizzle/index.d.ts.map +0 -1
- package/dist/adapters/drizzle/index.js +0 -3
- package/dist/adapters/drizzle/index.js.map +0 -1
- package/dist/adapters/drizzle/schema.d.ts +0 -146
- package/dist/adapters/drizzle/schema.d.ts.map +0 -1
- package/dist/adapters/drizzle/schema.js +0 -20
- package/dist/adapters/drizzle/schema.js.map +0 -1
- package/dist/adapters/firestore/adapter.d.ts +0 -48
- package/dist/adapters/firestore/adapter.d.ts.map +0 -1
- package/dist/adapters/firestore/adapter.js +0 -62
- package/dist/adapters/firestore/adapter.js.map +0 -1
- package/dist/adapters/firestore/index.d.ts +0 -4
- package/dist/adapters/firestore/index.d.ts.map +0 -1
- package/dist/adapters/firestore/index.js +0 -3
- package/dist/adapters/firestore/index.js.map +0 -1
- package/dist/adapters/supabase/adapter.d.ts +0 -43
- package/dist/adapters/supabase/adapter.d.ts.map +0 -1
- package/dist/adapters/supabase/adapter.js +0 -137
- package/dist/adapters/supabase/adapter.js.map +0 -1
- package/dist/adapters/supabase/index.d.ts +0 -3
- package/dist/adapters/supabase/index.d.ts.map +0 -1
- package/dist/adapters/supabase/index.js +0 -3
- package/dist/adapters/supabase/index.js.map +0 -1
- package/dist/adapters/sync/config.d.ts +0 -40
- package/dist/adapters/sync/config.d.ts.map +0 -1
- package/dist/adapters/sync/config.js +0 -209
- package/dist/adapters/sync/config.js.map +0 -1
- package/dist/adapters/sync/create-file-sync.d.ts +0 -32
- package/dist/adapters/sync/create-file-sync.d.ts.map +0 -1
- package/dist/adapters/sync/create-file-sync.js +0 -218
- package/dist/adapters/sync/create-file-sync.js.map +0 -1
- package/dist/adapters/sync/file-sync.d.ts +0 -94
- package/dist/adapters/sync/file-sync.d.ts.map +0 -1
- package/dist/adapters/sync/file-sync.js +0 -671
- package/dist/adapters/sync/file-sync.js.map +0 -1
- package/dist/adapters/sync/index.d.ts +0 -6
- package/dist/adapters/sync/index.d.ts.map +0 -1
- package/dist/adapters/sync/index.js +0 -6
- package/dist/adapters/sync/index.js.map +0 -1
- package/dist/adapters/sync/merge.d.ts +0 -21
- package/dist/adapters/sync/merge.d.ts.map +0 -1
- package/dist/adapters/sync/merge.js +0 -132
- package/dist/adapters/sync/merge.js.map +0 -1
- package/dist/adapters/sync/types.d.ts +0 -62
- package/dist/adapters/sync/types.d.ts.map +0 -1
- package/dist/adapters/sync/types.js +0 -23
- package/dist/adapters/sync/types.js.map +0 -1
- package/dist/client/harness.d.ts +0 -48
- package/dist/client/harness.d.ts.map +0 -1
- package/dist/client/harness.js.map +0 -1
- package/dist/client/use-file-sync-status.d.ts +0 -21
- package/dist/client/use-file-sync-status.d.ts.map +0 -1
- package/dist/client/use-file-sync-status.js +0 -65
- package/dist/client/use-file-sync-status.js.map +0 -1
- package/dist/client/use-file-watcher.d.ts +0 -23
- package/dist/client/use-file-watcher.d.ts.map +0 -1
- package/dist/client/use-file-watcher.js +0 -50
- package/dist/client/use-file-watcher.js.map +0 -1
- package/dist/server/default-watcher.d.ts +0 -17
- package/dist/server/default-watcher.d.ts.map +0 -1
- package/dist/server/default-watcher.js +0 -37
- package/dist/server/default-watcher.js.map +0 -1
- package/dist/server/file-sync-plugin.d.ts +0 -7
- package/dist/server/file-sync-plugin.d.ts.map +0 -1
- package/dist/server/file-sync-plugin.js +0 -38
- package/dist/server/file-sync-plugin.js.map +0 -1
- package/dist/vite/dev-api-server.d.ts +0 -10
- package/dist/vite/dev-api-server.d.ts.map +0 -1
- package/dist/vite/dev-api-server.js +0 -160
- package/dist/vite/dev-api-server.js.map +0 -1
- package/src/templates/default/.agents/skills/scripts/SKILL.md +0 -121
- package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +0 -80
- package/src/templates/default/server/plugins/agent-chat.ts +0 -1
- package/src/templates/default/server/plugins/auth.ts +0 -1
- package/src/templates/default/server/plugins/file-sync.ts +0 -1
- package/src/templates/default/server/plugins/terminal.ts +0 -1
- package/src/templates/default/server/routes/api/events.get.ts +0 -3
- package/src/templates/default/server/routes/api/file-sync/status.get.ts +0 -4
- /package/{src/templates/default/application-state/.gitkeep → dist/templates/default/.ignore} +0 -0
- /package/{src/templates/default/scripts → dist/templates/default/actions}/run.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* AgentPanel — unified agent component with chat and CLI terminal modes.
|
|
4
4
|
*
|
|
@@ -21,84 +21,817 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
21
21
|
* // Full page
|
|
22
22
|
* <AgentPanel className="h-screen" />
|
|
23
23
|
*/
|
|
24
|
-
import
|
|
25
|
-
import {
|
|
24
|
+
import ReactDOM from "react-dom";
|
|
25
|
+
import { useState, useEffect, useRef, useCallback, lazy, Suspense, startTransition, } from "react";
|
|
26
|
+
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
27
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
28
|
+
import { IconMessage, IconTerminal2, IconSettings, IconLayoutSidebarRightCollapse, IconChevronDown, IconCheck, IconPlus, IconFolder, IconX, IconDotsVertical, IconHistory, IconPlugConnected, IconChevronLeft, IconCopy, IconExternalLink, } from "@tabler/icons-react";
|
|
29
|
+
import { MultiTabAssistantChat, } from "./MultiTabAssistantChat.js";
|
|
30
|
+
import { useDevMode } from "./use-dev-mode.js";
|
|
26
31
|
import { cn } from "./utils.js";
|
|
27
32
|
// Lazy-load AgentTerminal to avoid bundling xterm.js when not needed
|
|
28
33
|
const AgentTerminal = lazy(() => import("./terminal/index.js").then((m) => ({ default: m.AgentTerminal })));
|
|
34
|
+
// Lazy-load ResourcesPanel to avoid bundling when not needed
|
|
35
|
+
const ResourcesPanel = lazy(() => import("./resources/ResourcesPanel.js").then((m) => ({
|
|
36
|
+
default: m.ResourcesPanel,
|
|
37
|
+
})));
|
|
38
|
+
// Lazy-load IntegrationsPanel to avoid bundling when not needed
|
|
39
|
+
const IntegrationsPanel = lazy(() => import("./integrations/IntegrationsPanel.js").then((m) => ({
|
|
40
|
+
default: m.IntegrationsPanel,
|
|
41
|
+
})));
|
|
29
42
|
const CLI_STORAGE_KEY = "agent-native-cli-command";
|
|
30
|
-
const CLI_DEFAULT = "
|
|
43
|
+
const CLI_DEFAULT = "claude";
|
|
44
|
+
const EXEC_MODE_KEY = "agent-native-exec-mode";
|
|
45
|
+
const AGENT_PANEL_FONT_FAMILY = 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
|
|
46
|
+
const AGENT_PANEL_ROOT_STYLE = {
|
|
47
|
+
fontFamily: AGENT_PANEL_FONT_FAMILY,
|
|
48
|
+
fontSize: 13,
|
|
49
|
+
lineHeight: 1.2,
|
|
50
|
+
};
|
|
51
|
+
const AGENT_PANEL_HEADER_CLASS = "relative z-[240] flex h-11 shrink-0 items-center justify-between gap-2 border-b border-border";
|
|
52
|
+
const AGENT_PANEL_HEADER_STYLE = {
|
|
53
|
+
paddingLeft: 8,
|
|
54
|
+
paddingRight: 8,
|
|
55
|
+
};
|
|
56
|
+
const AGENT_PANEL_CONTROL_STYLE = {
|
|
57
|
+
fontSize: 12,
|
|
58
|
+
lineHeight: 1,
|
|
59
|
+
};
|
|
31
60
|
function useAvailableClis() {
|
|
32
61
|
const [clis, setClis] = useState([]);
|
|
33
62
|
useEffect(() => {
|
|
34
|
-
fetch
|
|
63
|
+
// Try to fetch available CLIs — endpoint is provided by the terminal plugin.
|
|
64
|
+
// Returns 404 gracefully when the plugin isn't loaded.
|
|
65
|
+
fetch("/_agent-native/available-clis")
|
|
35
66
|
.then((r) => (r.ok ? r.json() : []))
|
|
36
|
-
.then((data) => setClis(data))
|
|
67
|
+
.then((data) => setClis(Array.isArray(data) ? data : []))
|
|
37
68
|
.catch(() => { });
|
|
38
69
|
}, []);
|
|
39
70
|
return clis;
|
|
40
71
|
}
|
|
41
|
-
function useCliSelection() {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
72
|
+
function useCliSelection(keyPrefix) {
|
|
73
|
+
const cliKey = `${CLI_STORAGE_KEY}${keyPrefix}`;
|
|
74
|
+
const [selected, setSelected] = useState(CLI_DEFAULT);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
try {
|
|
77
|
+
const saved = localStorage.getItem(cliKey);
|
|
78
|
+
if (saved)
|
|
79
|
+
setSelected(saved);
|
|
45
80
|
}
|
|
46
|
-
|
|
47
|
-
});
|
|
81
|
+
catch { }
|
|
82
|
+
}, [cliKey]);
|
|
48
83
|
const select = (cmd) => {
|
|
49
84
|
setSelected(cmd);
|
|
50
85
|
try {
|
|
51
|
-
localStorage.setItem(
|
|
86
|
+
localStorage.setItem(cliKey, cmd);
|
|
52
87
|
}
|
|
53
88
|
catch { }
|
|
54
89
|
};
|
|
55
90
|
return [selected, select];
|
|
56
91
|
}
|
|
57
92
|
// Detect dev mode at build time (Vite replaces this)
|
|
58
|
-
const IS_DEV =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
93
|
+
const IS_DEV = import.meta.env?.DEV === true;
|
|
94
|
+
function SettingsSelect({ label, value, options, onValueChange, }) {
|
|
95
|
+
const selected = options.find((option) => option.value === value);
|
|
96
|
+
return (_jsxs("div", { className: "space-y-1.5", children: [_jsx("p", { className: "text-[12px] font-medium text-foreground", children: label }), _jsxs(SelectPrimitive.Root, { value: value, onValueChange: onValueChange, children: [_jsxs(SelectPrimitive.Trigger, { className: "flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 text-left text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 data-[placeholder]:text-muted-foreground", "aria-label": label, style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(SelectPrimitive.Value, { children: selected?.label ?? value }), _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(IconChevronDown, { size: 14, className: "text-muted-foreground" }) })] }), _jsx(SelectPrimitive.Portal, { children: _jsx(SelectPrimitive.Content, { position: "popper", sideOffset: 6, className: "z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg", children: _jsx(SelectPrimitive.Viewport, { className: "p-1", children: options.map((option) => (_jsxs(SelectPrimitive.Item, { value: option.value, className: "relative flex w-full cursor-pointer select-none items-start gap-2 rounded-md px-8 py-2.5 text-[12px] outline-none data-[highlighted]:bg-accent/60 data-[state=checked]:bg-accent/40", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx("span", { className: "absolute left-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(IconCheck, { size: 14 }) }) }), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx(SelectPrimitive.ItemText, { children: _jsx("span", { className: "text-foreground", children: option.label }) }), option.description ? (_jsx("span", { className: "mt-0.5 text-[11px] leading-relaxed text-muted-foreground", children: option.description })) : null] })] }, option.value))) }) }) })] })] }));
|
|
97
|
+
}
|
|
98
|
+
function IconTooltip({ content, children, }) {
|
|
99
|
+
return (_jsx(TooltipPrimitive.Provider, { delayDuration: 250, children: _jsxs(TooltipPrimitive.Root, { children: [_jsx(TooltipPrimitive.Trigger, { asChild: true, children: children }), _jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { side: "bottom", sideOffset: 8, className: "z-[230] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md", children: [content, _jsx(TooltipPrimitive.Arrow, { className: "fill-popover" })] }) })] }) }));
|
|
100
|
+
}
|
|
101
|
+
// ─── Agent Settings Popover ──────────────────────────────────────────────────
|
|
102
|
+
function AgentSettingsPopover({ isDevMode, onToggle, devAppUrl, showEnvToggle = true, }) {
|
|
103
|
+
const [open, setOpen] = useState(false);
|
|
104
|
+
const popoverRef = useRef(null);
|
|
105
|
+
const buttonRef = useRef(null);
|
|
106
|
+
// Close on outside click
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (!open)
|
|
109
|
+
return;
|
|
110
|
+
function handleClick(e) {
|
|
111
|
+
const target = e.target;
|
|
112
|
+
// Ignore clicks inside the popover itself or its trigger button
|
|
113
|
+
if (popoverRef.current?.contains(target))
|
|
114
|
+
return;
|
|
115
|
+
if (buttonRef.current?.contains(target))
|
|
116
|
+
return;
|
|
117
|
+
// Ignore clicks inside portaled Radix Select content (rendered outside the popover DOM)
|
|
118
|
+
if (target.closest?.("[data-radix-popper-content-wrapper], [data-radix-select-viewport], [role='listbox']"))
|
|
119
|
+
return;
|
|
120
|
+
setOpen(false);
|
|
121
|
+
}
|
|
122
|
+
document.addEventListener("mousedown", handleClick);
|
|
123
|
+
return () => document.removeEventListener("mousedown", handleClick);
|
|
124
|
+
}, [open]);
|
|
125
|
+
// Close on Escape
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
if (!open)
|
|
128
|
+
return;
|
|
129
|
+
function handleKey(e) {
|
|
130
|
+
if (e.key === "Escape")
|
|
131
|
+
setOpen(false);
|
|
132
|
+
}
|
|
133
|
+
document.addEventListener("keydown", handleKey);
|
|
134
|
+
return () => document.removeEventListener("keydown", handleKey);
|
|
135
|
+
}, [open]);
|
|
136
|
+
const environmentOptions = [
|
|
137
|
+
{
|
|
138
|
+
value: "production",
|
|
139
|
+
label: "Production",
|
|
140
|
+
description: "Restricted to app tools only.",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
value: "development",
|
|
144
|
+
label: "Development",
|
|
145
|
+
description: "Full access to code editing, shell, and files.",
|
|
146
|
+
},
|
|
147
|
+
];
|
|
148
|
+
// Compute fixed position from the button so the popover escapes all
|
|
149
|
+
// stacking contexts (the CLI terminal otherwise paints over it).
|
|
150
|
+
const [pos, setPos] = useState(null);
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
if (!open || !buttonRef.current)
|
|
153
|
+
return;
|
|
154
|
+
const rect = buttonRef.current.getBoundingClientRect();
|
|
155
|
+
setPos({
|
|
156
|
+
top: rect.bottom + 6,
|
|
157
|
+
right: window.innerWidth - rect.right,
|
|
158
|
+
});
|
|
159
|
+
}, [open]);
|
|
160
|
+
return (_jsxs("div", { className: "relative", children: [_jsx("button", { ref: buttonRef, onClick: () => setOpen(!open), className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", open && "bg-accent/50 text-foreground"), title: "Agent settings", children: _jsx(IconSettings, { size: 14 }) }), open &&
|
|
161
|
+
pos &&
|
|
162
|
+
ReactDOM.createPortal(_jsx("div", { ref: popoverRef, className: "fixed z-[9990] w-72 rounded-lg border border-border bg-popover shadow-md animate-in fade-in-0 zoom-in-95 duration-100", style: { top: pos.top, right: pos.right }, children: _jsxs("div", { className: "space-y-3 p-3", children: [showEnvToggle && (_jsx(SettingsSelect, { label: "Environment", value: isDevMode ? "development" : "production", options: environmentOptions, onValueChange: (next) => {
|
|
163
|
+
const nextIsDev = next === "development";
|
|
164
|
+
if (nextIsDev !== isDevMode)
|
|
165
|
+
onToggle();
|
|
166
|
+
} })), devAppUrl && (_jsxs("a", { href: devAppUrl, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-1.5 text-[11px] text-muted-foreground hover:text-foreground mt-1", children: [_jsx(IconExternalLink, { size: 12 }), "Open app in new tab"] })), _jsx("div", { className: showEnvToggle || devAppUrl
|
|
167
|
+
? "border-t border-border pt-3 mt-3"
|
|
168
|
+
: "", children: _jsx(Suspense, { fallback: null, children: _jsx(IntegrationsPanel, {}) }) }), _jsx("div", { className: "border-t border-border pt-3 mt-3", children: _jsx(AgentsSection, {}) })] }) }), document.body)] }));
|
|
169
|
+
}
|
|
170
|
+
function AgentDetail({ agent, onBack, onDelete, }) {
|
|
171
|
+
const [copied, setCopied] = useState(false);
|
|
172
|
+
const handleCopy = useCallback(async () => {
|
|
173
|
+
await navigator.clipboard.writeText(agent.url);
|
|
174
|
+
setCopied(true);
|
|
175
|
+
setTimeout(() => setCopied(false), 2000);
|
|
176
|
+
}, [agent.url]);
|
|
177
|
+
return (_jsxs("div", { children: [_jsxs("button", { onClick: onBack, className: "flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground mb-2", children: [_jsx(IconChevronLeft, { size: 12 }), "Back"] }), _jsxs("div", { className: "flex items-center gap-2 mb-3", children: [_jsx(IconPlugConnected, { size: 16, className: "text-foreground shrink-0" }), _jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-xs font-medium text-foreground truncate", children: agent.name }), agent.description && (_jsx("div", { className: "text-[10px] text-muted-foreground", children: agent.description }))] })] }), _jsxs("div", { className: "mb-3", children: [_jsx("div", { className: "text-[10px] font-medium text-muted-foreground mb-1", children: "A2A Endpoint" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("code", { className: "flex-1 truncate rounded bg-muted px-1.5 py-0.5 text-[10px] text-foreground", children: agent.url }), _jsx("button", { onClick: handleCopy, className: "shrink-0 rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-accent/50", title: "Copy URL", children: copied ? _jsx(IconCheck, { size: 12 }) : _jsx(IconCopy, { size: 12 }) })] })] }), _jsx("div", { className: "rounded-md border border-border bg-muted/30 px-2.5 py-2 text-[10px] text-muted-foreground mb-3", children: "@-mention this agent in chat to send it tasks via the A2A protocol. It will use its own tools and skills to respond." }), _jsx("button", { onClick: () => onDelete(agent.id), className: "w-full rounded-md border border-red-800/50 px-2 py-1.5 text-[11px] font-medium text-red-400 hover:bg-red-900/20", children: "Remove agent" })] }));
|
|
178
|
+
}
|
|
179
|
+
function AgentsSection() {
|
|
180
|
+
const [expanded, setExpanded] = useState(false);
|
|
181
|
+
const [showAdd, setShowAdd] = useState(false);
|
|
182
|
+
const [selectedAgent, setSelectedAgent] = useState(null);
|
|
183
|
+
const [name, setName] = useState("");
|
|
184
|
+
const [url, setUrl] = useState("");
|
|
185
|
+
const [description, setDescription] = useState("");
|
|
186
|
+
const nameRef = useRef(null);
|
|
187
|
+
// Fetch agents from resources
|
|
188
|
+
const [agents, setAgents] = useState([]);
|
|
189
|
+
const [loading, setLoading] = useState(true);
|
|
190
|
+
const fetchAgents = useCallback(async () => {
|
|
191
|
+
try {
|
|
192
|
+
const res = await fetch("/_agent-native/resources?scope=all");
|
|
193
|
+
if (!res.ok)
|
|
194
|
+
return;
|
|
195
|
+
const data = await res.json();
|
|
196
|
+
const agentResources = (data.resources ?? []).filter((r) => r.path.startsWith("agents/") && r.path.endsWith(".json"));
|
|
197
|
+
const parsed = await Promise.all(agentResources.map(async (r) => {
|
|
198
|
+
try {
|
|
199
|
+
const detail = await fetch(`/_agent-native/resources/${r.id}`);
|
|
200
|
+
if (!detail.ok)
|
|
201
|
+
return null;
|
|
202
|
+
const d = await detail.json();
|
|
203
|
+
const config = JSON.parse(d.content);
|
|
204
|
+
return {
|
|
205
|
+
id: r.id,
|
|
206
|
+
path: r.path,
|
|
207
|
+
name: config.name,
|
|
208
|
+
url: config.url,
|
|
209
|
+
description: config.description,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
}));
|
|
216
|
+
setAgents(parsed.filter(Boolean));
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
setLoading(false);
|
|
220
|
+
}
|
|
221
|
+
}, []);
|
|
222
|
+
useEffect(() => {
|
|
223
|
+
fetchAgents();
|
|
224
|
+
}, [fetchAgents]);
|
|
225
|
+
useEffect(() => {
|
|
226
|
+
if (showAdd) {
|
|
227
|
+
setName("");
|
|
228
|
+
setUrl("");
|
|
229
|
+
setDescription("");
|
|
230
|
+
const t = setTimeout(() => nameRef.current?.focus(), 50);
|
|
231
|
+
return () => clearTimeout(t);
|
|
232
|
+
}
|
|
233
|
+
}, [showAdd]);
|
|
234
|
+
const handleAdd = async () => {
|
|
235
|
+
const trimmedName = name.trim();
|
|
236
|
+
const trimmedUrl = url.trim();
|
|
237
|
+
if (!trimmedName || !trimmedUrl)
|
|
238
|
+
return;
|
|
239
|
+
const id = trimmedName.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
240
|
+
const agentJson = JSON.stringify({
|
|
241
|
+
id,
|
|
242
|
+
name: trimmedName,
|
|
243
|
+
description: description.trim() || undefined,
|
|
244
|
+
url: trimmedUrl,
|
|
245
|
+
color: "#6B7280",
|
|
246
|
+
}, null, 2);
|
|
247
|
+
try {
|
|
248
|
+
const res = await fetch("/_agent-native/resources", {
|
|
249
|
+
method: "POST",
|
|
250
|
+
headers: { "Content-Type": "application/json" },
|
|
251
|
+
body: JSON.stringify({
|
|
252
|
+
path: `agents/${id}.json`,
|
|
253
|
+
content: agentJson,
|
|
254
|
+
shared: true,
|
|
255
|
+
}),
|
|
256
|
+
});
|
|
257
|
+
if (res.ok) {
|
|
258
|
+
setShowAdd(false);
|
|
259
|
+
fetchAgents();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch { }
|
|
263
|
+
};
|
|
264
|
+
const handleDelete = async (agentId) => {
|
|
265
|
+
try {
|
|
266
|
+
const res = await fetch(`/_agent-native/resources/${agentId}`, {
|
|
267
|
+
method: "DELETE",
|
|
268
|
+
});
|
|
269
|
+
if (res.ok) {
|
|
270
|
+
setSelectedAgent(null);
|
|
271
|
+
fetchAgents();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch { }
|
|
275
|
+
};
|
|
276
|
+
if (selectedAgent) {
|
|
277
|
+
return (_jsx(AgentDetail, { agent: selectedAgent, onBack: () => setSelectedAgent(null), onDelete: handleDelete }));
|
|
278
|
+
}
|
|
279
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between mb-1.5", children: [_jsxs("div", { children: [_jsx("div", { className: "text-xs font-medium text-foreground", children: "Agents" }), _jsx("div", { className: "text-[10px] text-muted-foreground", children: loading
|
|
280
|
+
? "Loading..."
|
|
281
|
+
: agents.length > 0
|
|
282
|
+
? `${agents.length} connected via A2A`
|
|
283
|
+
: "Connect agents via A2A protocol" })] }), _jsx("button", { onClick: () => {
|
|
284
|
+
if (expanded || showAdd) {
|
|
285
|
+
setExpanded(false);
|
|
286
|
+
setShowAdd(false);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
setExpanded(true);
|
|
290
|
+
}
|
|
291
|
+
}, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", title: expanded ? "Collapse" : "Manage agents", children: expanded || showAdd ? _jsx(IconX, { size: 12 }) : _jsx(IconPlus, { size: 12 }) })] }), (expanded || showAdd) && (_jsxs(_Fragment, { children: [!showAdd && (_jsxs("div", { className: "flex flex-col gap-0.5 mb-1.5", children: [agents.map((agent) => (_jsxs("button", { onClick: () => setSelectedAgent(agent), className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left hover:bg-accent/30", children: [_jsx(IconPlugConnected, { size: 13, className: "shrink-0 text-muted-foreground" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "text-[11px] font-medium text-foreground truncate", children: agent.name }), _jsx("div", { className: "text-[10px] text-muted-foreground/60 truncate", children: agent.url })] })] }, agent.id))), _jsxs("button", { onClick: () => setShowAdd(true), className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30", children: [_jsx(IconPlus, { size: 12, className: "shrink-0" }), "Add agent"] })] })), showAdd && (_jsxs("div", { className: "mb-1.5 flex flex-col gap-1.5 rounded-md border border-border bg-background p-2", children: [_jsx("input", { ref: nameRef, value: name, onChange: (e) => setName(e.target.value), onKeyDown: (e) => {
|
|
292
|
+
if (e.key === "Enter")
|
|
293
|
+
handleAdd();
|
|
294
|
+
if (e.key === "Escape")
|
|
295
|
+
setShowAdd(false);
|
|
296
|
+
}, className: "w-full rounded border border-border bg-background px-2 py-1 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", placeholder: "Name" }), _jsx("input", { value: url, onChange: (e) => setUrl(e.target.value), onKeyDown: (e) => {
|
|
297
|
+
if (e.key === "Enter")
|
|
298
|
+
handleAdd();
|
|
299
|
+
if (e.key === "Escape")
|
|
300
|
+
setShowAdd(false);
|
|
301
|
+
}, className: "w-full rounded border border-border bg-background px-2 py-1 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", placeholder: "URL (e.g. http://localhost:8085)" }), _jsx("input", { value: description, onChange: (e) => setDescription(e.target.value), onKeyDown: (e) => {
|
|
302
|
+
if (e.key === "Enter")
|
|
303
|
+
handleAdd();
|
|
304
|
+
if (e.key === "Escape")
|
|
305
|
+
setShowAdd(false);
|
|
306
|
+
}, className: "w-full rounded border border-border bg-background px-2 py-1 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent", placeholder: "Description (optional)" }), _jsxs("div", { className: "flex justify-end gap-1.5", children: [_jsx("button", { onClick: () => setShowAdd(false), className: "rounded px-2.5 py-1 text-[11px] font-medium text-muted-foreground hover:text-foreground", children: "Cancel" }), _jsx("button", { onClick: handleAdd, disabled: !name.trim() || !url.trim(), className: "rounded bg-accent px-2.5 py-1 text-[11px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none", children: "Add" })] })] }))] }))] }));
|
|
64
307
|
}
|
|
65
|
-
function
|
|
66
|
-
|
|
308
|
+
function useClientOnly() {
|
|
309
|
+
const [mounted, setMounted] = useState(false);
|
|
310
|
+
useEffect(() => setMounted(true), []);
|
|
311
|
+
return mounted;
|
|
67
312
|
}
|
|
68
|
-
export function AgentPanel({ defaultMode = "chat", className, apiUrl, emptyStateText, suggestions, showHeader = true, }) {
|
|
69
|
-
const
|
|
313
|
+
export function AgentPanel({ defaultMode = "chat", className, apiUrl, emptyStateText, suggestions, showHeader = true, onCollapse, devAppUrl, storageKey, }) {
|
|
314
|
+
const mounted = useClientOnly();
|
|
315
|
+
const keyPrefix = storageKey ? `:${storageKey}` : "";
|
|
316
|
+
const execModeKey = `${EXEC_MODE_KEY}${keyPrefix}`;
|
|
317
|
+
const panelModeKey = `agent-native-panel-mode${keyPrefix}`;
|
|
318
|
+
const [execMode, setExecMode] = useState(() => {
|
|
319
|
+
try {
|
|
320
|
+
const saved = localStorage.getItem(execModeKey);
|
|
321
|
+
if (saved === "build" || saved === "plan")
|
|
322
|
+
return saved;
|
|
323
|
+
}
|
|
324
|
+
catch { }
|
|
325
|
+
return "build";
|
|
326
|
+
});
|
|
327
|
+
const switchExecMode = useCallback((next) => {
|
|
328
|
+
setExecMode(next);
|
|
329
|
+
try {
|
|
330
|
+
localStorage.setItem(execModeKey, next);
|
|
331
|
+
}
|
|
332
|
+
catch { }
|
|
333
|
+
window.dispatchEvent(new CustomEvent("agent-panel:exec-mode-change", {
|
|
334
|
+
detail: { mode: next },
|
|
335
|
+
}));
|
|
336
|
+
}, [execModeKey]);
|
|
337
|
+
const [mode, setMode] = useState(() => {
|
|
338
|
+
try {
|
|
339
|
+
const saved = localStorage.getItem(panelModeKey);
|
|
340
|
+
if (saved === "chat" || saved === "cli" || saved === "resources")
|
|
341
|
+
return saved;
|
|
342
|
+
}
|
|
343
|
+
catch { }
|
|
344
|
+
return defaultMode;
|
|
345
|
+
});
|
|
346
|
+
useEffect(() => {
|
|
347
|
+
try {
|
|
348
|
+
localStorage.setItem(panelModeKey, mode);
|
|
349
|
+
}
|
|
350
|
+
catch { }
|
|
351
|
+
}, [mode, panelModeKey]);
|
|
352
|
+
const switchMode = useCallback((m) => {
|
|
353
|
+
startTransition(() => setMode(m));
|
|
354
|
+
}, []);
|
|
355
|
+
// Listen for mode changes from the frame parent (via AgentSidebar)
|
|
356
|
+
useEffect(() => {
|
|
357
|
+
function handler(e) {
|
|
358
|
+
const detail = e.detail;
|
|
359
|
+
if (detail?.mode)
|
|
360
|
+
switchMode(detail.mode);
|
|
361
|
+
}
|
|
362
|
+
window.addEventListener("agent-panel:set-mode", handler);
|
|
363
|
+
return () => window.removeEventListener("agent-panel:set-mode", handler);
|
|
364
|
+
}, [switchMode]);
|
|
365
|
+
// CLI terminal tabs (ephemeral — not persisted to SQL)
|
|
366
|
+
const [cliTabs, setCliTabs] = useState(["cli-1"]);
|
|
367
|
+
const [activeCliTab, setActiveCliTab] = useState("cli-1");
|
|
368
|
+
const cliCounter = useRef(1);
|
|
369
|
+
const addCliTab = useCallback(() => {
|
|
370
|
+
const id = `cli-${++cliCounter.current}`;
|
|
371
|
+
setCliTabs((prev) => [...prev, id]);
|
|
372
|
+
setActiveCliTab(id);
|
|
373
|
+
}, []);
|
|
374
|
+
const closeCliTab = useCallback((id) => {
|
|
375
|
+
setCliTabs((prev) => {
|
|
376
|
+
if (prev.length <= 1) {
|
|
377
|
+
// Last tab — replace with a new one (acts as "clear")
|
|
378
|
+
const newId = `cli-${++cliCounter.current}`;
|
|
379
|
+
setActiveCliTab(newId);
|
|
380
|
+
return [newId];
|
|
381
|
+
}
|
|
382
|
+
const next = prev.filter((t) => t !== id);
|
|
383
|
+
if (id === activeCliTab) {
|
|
384
|
+
const idx = prev.indexOf(id);
|
|
385
|
+
setActiveCliTab(next[Math.min(idx, next.length - 1)]);
|
|
386
|
+
}
|
|
387
|
+
return next;
|
|
388
|
+
});
|
|
389
|
+
}, [activeCliTab]);
|
|
390
|
+
const closeOtherCliTabs = useCallback((id) => {
|
|
391
|
+
setCliTabs([id]);
|
|
392
|
+
setActiveCliTab(id);
|
|
393
|
+
}, []);
|
|
394
|
+
const closeAllCliTabs = useCallback(() => {
|
|
395
|
+
const id = `cli-${++cliCounter.current}`;
|
|
396
|
+
setCliTabs([id]);
|
|
397
|
+
setActiveCliTab(id);
|
|
398
|
+
}, []);
|
|
70
399
|
const availableClis = useAvailableClis();
|
|
71
|
-
const [selectedCli, selectCli] = useCliSelection();
|
|
400
|
+
const [selectedCli, selectCli] = useCliSelection(keyPrefix);
|
|
72
401
|
const selectedLabel = availableClis.find((c) => c.command === selectedCli)?.label || selectedCli;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
402
|
+
const { isDevMode, canToggle, setDevMode } = useDevMode(apiUrl);
|
|
403
|
+
// Notify frame when dev mode changes — use both a local CustomEvent (for
|
|
404
|
+
// when AgentPanel is rendered directly in the frame) AND postMessage (for
|
|
405
|
+
// when AgentPanel is inside the iframe and needs to cross the boundary).
|
|
406
|
+
const prevIsDevMode = useRef(isDevMode);
|
|
407
|
+
useEffect(() => {
|
|
408
|
+
if (prevIsDevMode.current !== isDevMode) {
|
|
409
|
+
prevIsDevMode.current = isDevMode;
|
|
410
|
+
window.dispatchEvent(new CustomEvent("agent-panel:dev-mode-change", {
|
|
411
|
+
detail: { isDevMode },
|
|
412
|
+
}));
|
|
413
|
+
// Cross iframe boundary to the frame parent
|
|
414
|
+
if (window.parent !== window) {
|
|
415
|
+
window.parent.postMessage({ type: "builder.devModeChange", data: { isDevMode } }, "*");
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}, [isDevMode]);
|
|
419
|
+
const isLocalhost = mounted &&
|
|
420
|
+
typeof window !== "undefined" &&
|
|
421
|
+
(window.location.hostname === "localhost" ||
|
|
422
|
+
window.location.hostname === "127.0.0.1" ||
|
|
423
|
+
window.location.hostname === "::1");
|
|
424
|
+
const showDevToggle = canToggle && isLocalhost;
|
|
425
|
+
const renderModeButtons = useCallback((activeMode) => (_jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsxs("button", { onClick: () => switchMode("chat"), className: cn("flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none", activeMode === "chat"
|
|
426
|
+
? "bg-accent text-foreground"
|
|
427
|
+
: "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "Chat mode", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(IconMessage, { size: 14 }), "Chat"] }), _jsxs("button", { onClick: () => switchMode("cli"), className: cn("flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none", activeMode === "cli"
|
|
428
|
+
? "bg-accent text-foreground"
|
|
429
|
+
: "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "CLI terminal mode", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(IconTerminal2, { size: 14 }), "CLI"] }), _jsxs("button", { onClick: () => switchMode("resources"), className: cn("flex items-center gap-1 rounded-md px-2 py-1 text-[12px] leading-none", activeMode === "resources"
|
|
430
|
+
? "bg-accent text-foreground"
|
|
431
|
+
: "text-muted-foreground hover:bg-accent/50 hover:text-foreground"), title: "Files & resources", style: AGENT_PANEL_CONTROL_STYLE, children: [_jsx(IconFolder, { size: 14 }), "Files"] })] })), [isDevMode]);
|
|
432
|
+
const renderHeaderActions = useCallback(() => (_jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [_jsx(IconTooltip, { content: "Agent settings", children: _jsx("div", { children: _jsx(AgentSettingsPopover, { isDevMode: isDevMode, onToggle: () => setDevMode(!isDevMode), devAppUrl: devAppUrl, showEnvToggle: showDevToggle }) }) }), onCollapse && (_jsx(IconTooltip, { content: "Collapse sidebar", children: _jsx("button", { onClick: onCollapse, className: "flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconLayoutSidebarRightCollapse, { size: 14 }) }) }))] })), [isDevMode, onCollapse, setDevMode, showDevToggle, devAppUrl]);
|
|
433
|
+
const [tabMenuOpen, setTabMenuOpen] = useState(null);
|
|
434
|
+
const [cliPickerOpen, setCliPickerOpen] = useState(false);
|
|
435
|
+
const cliPickerBtnRef = useRef(null);
|
|
436
|
+
// Ref callback: scroll the active tab into view in the overflow container.
|
|
437
|
+
// Uses getBoundingClientRect for reliable positioning regardless of offsetParent.
|
|
438
|
+
const activeTabRefCb = useCallback((el) => {
|
|
439
|
+
if (!el)
|
|
440
|
+
return;
|
|
441
|
+
const container = el.parentElement;
|
|
442
|
+
if (!container)
|
|
443
|
+
return;
|
|
444
|
+
// Use rAF so layout is settled after React commit
|
|
445
|
+
requestAnimationFrame(() => {
|
|
446
|
+
const containerRect = container.getBoundingClientRect();
|
|
447
|
+
const tabRect = el.getBoundingClientRect();
|
|
448
|
+
if (tabRect.left < containerRect.left) {
|
|
449
|
+
container.scrollLeft += tabRect.left - containerRect.left;
|
|
450
|
+
}
|
|
451
|
+
else if (tabRect.right > containerRect.right) {
|
|
452
|
+
container.scrollLeft += tabRect.right - containerRect.right;
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
}, []);
|
|
456
|
+
const renderChatHeader = useCallback(({ tabs, activeTabId, setActiveTabId, addTab, closeTab, closeOtherTabs, closeAllTabs, showHistory, toggleHistory, }) => (_jsxs("div", { className: "flex flex-col shrink-0", children: [_jsxs("div", { className: AGENT_PANEL_HEADER_CLASS, style: AGENT_PANEL_HEADER_STYLE, children: [_jsx("div", { className: "flex min-w-0 flex-1 items-center gap-1 overflow-hidden", children: renderModeButtons(mode) }), _jsx("div", { className: "flex items-center gap-0.5", children: renderHeaderActions() })] }), (mode === "chat" || mode === "cli") &&
|
|
457
|
+
(() => {
|
|
458
|
+
// Compute parent/child tab groups for the sub-tab bar
|
|
459
|
+
const activeTab = tabs.find((t) => t.id === activeTabId);
|
|
460
|
+
// The "focus parent" is the parent thread for the active context
|
|
461
|
+
const focusParentId = activeTab?.parentThreadId || activeTabId;
|
|
462
|
+
const childTabs = tabs.filter((t) => t.parentThreadId === focusParentId);
|
|
463
|
+
const hasSubTabs = childTabs.length > 0;
|
|
464
|
+
// Main row: only show top-level (non-child) tabs
|
|
465
|
+
const mainTabs = tabs.filter((t) => !t.parentThreadId);
|
|
466
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center px-2 py-1 border-b border-border gap-0.5", children: [_jsx("div", { className: "flex items-center gap-0.5 min-w-0 overflow-x-auto scrollbar-none flex-1", children: mode === "chat"
|
|
467
|
+
? mainTabs.map((tab) => {
|
|
468
|
+
// Highlight the parent tab if a child is active
|
|
469
|
+
const isActive = tab.id === activeTabId ||
|
|
470
|
+
(tab.id === focusParentId &&
|
|
471
|
+
activeTab?.parentThreadId === tab.id);
|
|
472
|
+
return (_jsxs("div", { role: "button", tabIndex: 0, ref: isActive ? activeTabRefCb : undefined, onClick: () => setActiveTabId(tab.id), className: cn("agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer max-w-[150px]", isActive
|
|
473
|
+
? "bg-accent text-foreground"
|
|
474
|
+
: "text-muted-foreground hover:bg-accent hover:text-foreground"), children: [_jsx("span", { className: "truncate pr-1", children: tab.label }), tab.status === "running" && (_jsx("span", { className: "h-1.5 w-1.5 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse" })), _jsx("button", { type: "button", onClick: (e) => {
|
|
475
|
+
e.stopPropagation();
|
|
476
|
+
closeTab(tab.id);
|
|
477
|
+
}, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground", style: {
|
|
478
|
+
position: "absolute",
|
|
479
|
+
right: 0,
|
|
480
|
+
top: 0,
|
|
481
|
+
bottom: 0,
|
|
482
|
+
width: 28,
|
|
483
|
+
paddingRight: 6,
|
|
484
|
+
borderRadius: "0 6px 6px 0",
|
|
485
|
+
background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
|
|
486
|
+
}, children: _jsx(IconX, { size: 10 }) })] }, tab.id));
|
|
487
|
+
})
|
|
488
|
+
: cliTabs.map((id, i) => (_jsxs("div", { role: "button", tabIndex: 0, ref: id === activeCliTab ? activeTabRefCb : undefined, onClick: () => setActiveCliTab(id), className: cn("agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2.5 py-1.5 text-[11px] font-medium cursor-pointer", id === activeCliTab
|
|
489
|
+
? "bg-accent text-foreground"
|
|
490
|
+
: "text-muted-foreground hover:bg-accent hover:text-foreground"), children: [_jsxs("span", { children: ["Terminal ", i + 1] }), _jsx("button", { type: "button", onClick: (e) => {
|
|
491
|
+
e.stopPropagation();
|
|
492
|
+
closeCliTab(id);
|
|
493
|
+
}, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground", style: {
|
|
494
|
+
position: "absolute",
|
|
495
|
+
right: 0,
|
|
496
|
+
top: 0,
|
|
497
|
+
bottom: 0,
|
|
498
|
+
width: 28,
|
|
499
|
+
paddingRight: 6,
|
|
500
|
+
borderRadius: "0 6px 6px 0",
|
|
501
|
+
background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
|
|
502
|
+
}, children: _jsx(IconX, { size: 10 }) })] }, id))) }), _jsxs("div", { className: "flex items-center gap-0.5 shrink-0 ml-auto", children: [mode === "chat" && (_jsxs(_Fragment, { children: [_jsx(IconTooltip, { content: "New chat", children: _jsx("button", { onClick: addTab, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconPlus, { size: 14 }) }) }), toggleHistory && (_jsx(IconTooltip, { content: "Chat history", children: _jsx("button", { onClick: toggleHistory, className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", showHistory && "bg-accent text-foreground"), children: _jsx(IconHistory, { size: 14 }) }) })), _jsxs("div", { className: "relative", children: [_jsx(IconTooltip, { content: "Tab options", children: _jsx("button", { onClick: () => setTabMenuOpen(tabMenuOpen === "__chat_global"
|
|
503
|
+
? null
|
|
504
|
+
: "__chat_global"), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", tabMenuOpen === "__chat_global" &&
|
|
505
|
+
"bg-accent text-foreground"), children: _jsx(IconDotsVertical, { size: 14 }) }) }), tabMenuOpen === "__chat_global" && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setTabMenuOpen(null) }), _jsxs("div", { className: "absolute right-0 top-full mt-1 z-50 w-44 rounded-md border border-border bg-popover py-1 shadow-lg", children: [_jsxs("button", { className: "flex w-full items-center justify-between px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
|
|
506
|
+
closeTab(activeTabId);
|
|
507
|
+
setTabMenuOpen(null);
|
|
508
|
+
}, children: ["Close Tab", _jsxs("kbd", { className: "text-[10px] text-muted-foreground", children: ["\u2318", "W"] })] }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
|
|
509
|
+
closeOtherTabs(activeTabId);
|
|
510
|
+
setTabMenuOpen(null);
|
|
511
|
+
}, children: "Close Other Tabs" }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
|
|
512
|
+
closeAllTabs();
|
|
513
|
+
setTabMenuOpen(null);
|
|
514
|
+
}, children: "Close All Tabs" })] })] }))] })] })), mode === "cli" && (_jsxs(_Fragment, { children: [_jsx(IconTooltip, { content: "New terminal", children: _jsx("button", { onClick: addCliTab, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconPlus, { size: 14 }) }) }), availableClis.length > 0 && (_jsxs("div", { className: "relative", children: [_jsx(IconTooltip, { content: `CLI: ${selectedLabel}`, children: _jsx("button", { ref: cliPickerBtnRef, onClick: () => setCliPickerOpen(!cliPickerOpen), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", cliPickerOpen && "bg-accent text-foreground"), children: _jsx(IconSettings, { size: 14 }) }) }), cliPickerOpen &&
|
|
515
|
+
ReactDOM.createPortal(_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-[9980]", onClick: () => setCliPickerOpen(false) }), _jsx("div", { className: "fixed z-[9990] w-48 rounded-md border border-border bg-popover py-1 shadow-lg", style: (() => {
|
|
516
|
+
const r = cliPickerBtnRef.current?.getBoundingClientRect();
|
|
517
|
+
if (!r)
|
|
518
|
+
return { top: 0, right: 0 };
|
|
519
|
+
return {
|
|
520
|
+
top: r.bottom + 4,
|
|
521
|
+
right: window.innerWidth - r.right,
|
|
522
|
+
};
|
|
523
|
+
})(), children: availableClis.map((cli) => (_jsxs("button", { className: cn("flex w-full items-center gap-2 px-3 py-1.5 text-xs hover:bg-accent", cli.command === selectedCli
|
|
524
|
+
? "text-foreground font-medium"
|
|
525
|
+
: "text-muted-foreground"), onClick: () => {
|
|
526
|
+
selectCli(cli.command);
|
|
527
|
+
setCliPickerOpen(false);
|
|
528
|
+
}, children: [cli.command === selectedCli && (_jsx(IconCheck, { size: 12, className: "shrink-0" })), _jsx("span", { className: cli.command !== selectedCli
|
|
529
|
+
? "ml-5"
|
|
530
|
+
: "", children: cli.label })] }, cli.command))) })] }), document.body)] })), _jsxs("div", { className: "relative", children: [_jsx(IconTooltip, { content: "Tab options", children: _jsx("button", { onClick: () => setTabMenuOpen(tabMenuOpen === "__cli_global"
|
|
531
|
+
? null
|
|
532
|
+
: "__cli_global"), className: cn("flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", tabMenuOpen === "__cli_global" &&
|
|
533
|
+
"bg-accent text-foreground"), children: _jsx(IconDotsVertical, { size: 14 }) }) }), tabMenuOpen === "__cli_global" && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setTabMenuOpen(null) }), _jsxs("div", { className: "absolute right-0 top-full mt-1 z-50 w-44 rounded-md border border-border bg-popover py-1 shadow-lg", children: [_jsxs("button", { className: "flex w-full items-center justify-between px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
|
|
534
|
+
closeCliTab(activeCliTab);
|
|
535
|
+
setTabMenuOpen(null);
|
|
536
|
+
}, children: ["Close Tab", _jsxs("kbd", { className: "text-[10px] text-muted-foreground", children: ["\u2318", "W"] })] }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
|
|
537
|
+
closeOtherCliTabs(activeCliTab);
|
|
538
|
+
setTabMenuOpen(null);
|
|
539
|
+
}, children: "Close Other Tabs" }), _jsx("button", { className: "flex w-full items-center px-3 py-1.5 text-xs text-foreground hover:bg-accent", onClick: () => {
|
|
540
|
+
closeAllCliTabs();
|
|
541
|
+
setTabMenuOpen(null);
|
|
542
|
+
}, children: "Close All Tabs" })] })] }))] })] }))] })] }), mode === "chat" && hasSubTabs && (_jsx("div", { className: "flex items-center px-2 py-0.5 border-b border-border gap-0.5 bg-muted/30", children: _jsxs("div", { className: "flex items-center gap-0.5 min-w-0 overflow-x-auto scrollbar-none flex-1", children: [_jsx("div", { role: "button", tabIndex: 0, onClick: () => setActiveTabId(focusParentId), className: cn("flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer", activeTabId === focusParentId
|
|
543
|
+
? "bg-accent text-foreground"
|
|
544
|
+
: "text-muted-foreground hover:bg-accent hover:text-foreground"), children: "Main" }), childTabs.map((tab) => (_jsxs("div", { role: "button", tabIndex: 0, ref: tab.id === activeTabId ? activeTabRefCb : undefined, onClick: () => setActiveTabId(tab.id), className: cn("agent-tab relative flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[10px] font-medium cursor-pointer max-w-[140px]", tab.id === activeTabId
|
|
545
|
+
? "bg-accent text-foreground"
|
|
546
|
+
: "text-muted-foreground hover:bg-accent hover:text-foreground"), children: [_jsx("span", { className: "truncate pr-1", children: tab.subAgentName || tab.label }), tab.status === "running" && (_jsx("span", { className: "h-1 w-1 shrink-0 rounded-full bg-muted-foreground/50 animate-pulse" })), _jsx("button", { type: "button", onClick: (e) => {
|
|
547
|
+
e.stopPropagation();
|
|
548
|
+
closeTab(tab.id);
|
|
549
|
+
}, className: "agent-tab-close flex items-center justify-end text-muted-foreground hover:text-foreground", style: {
|
|
550
|
+
position: "absolute",
|
|
551
|
+
right: 0,
|
|
552
|
+
top: 0,
|
|
553
|
+
bottom: 0,
|
|
554
|
+
width: 24,
|
|
555
|
+
paddingRight: 4,
|
|
556
|
+
borderRadius: "0 6px 6px 0",
|
|
557
|
+
background: "linear-gradient(to right, transparent, hsl(var(--accent)) 40%)",
|
|
558
|
+
}, children: _jsx(IconX, { size: 8 }) })] }, tab.id)))] }) }))] }));
|
|
559
|
+
})()] })), [
|
|
560
|
+
mode,
|
|
561
|
+
renderHeaderActions,
|
|
562
|
+
renderModeButtons,
|
|
563
|
+
cliTabs,
|
|
564
|
+
activeCliTab,
|
|
565
|
+
addCliTab,
|
|
566
|
+
closeCliTab,
|
|
567
|
+
closeOtherCliTabs,
|
|
568
|
+
closeAllCliTabs,
|
|
569
|
+
tabMenuOpen,
|
|
570
|
+
availableClis,
|
|
571
|
+
selectedCli,
|
|
572
|
+
selectedLabel,
|
|
573
|
+
selectCli,
|
|
574
|
+
cliPickerOpen,
|
|
575
|
+
]);
|
|
576
|
+
return (_jsxs("div", { className: cn("agent-panel-root flex flex-1 flex-col min-h-0 h-full text-[13px] leading-[1.2] antialiased", className), style: AGENT_PANEL_ROOT_STYLE, children: [_jsx("style", { dangerouslySetInnerHTML: {
|
|
577
|
+
__html: ".agent-tab-close{opacity:0}.agent-tab:hover .agent-tab-close{opacity:1}",
|
|
578
|
+
} }), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(MultiTabAssistantChat, { apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, renderOverlay: undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, suggestions: suggestions, onSwitchToCli: () => switchMode("cli"), execMode: execMode, onExecModeChange: switchExecMode, storageKey: storageKey })) }), isDevMode
|
|
579
|
+
? cliTabs.map((id) => (_jsx("div", { className: cn("min-h-0 relative", mode === "cli" ? "flex-1" : "hidden"), style: {
|
|
580
|
+
display: mode === "cli" && id === activeCliTab ? undefined : "none",
|
|
581
|
+
}, children: _jsx(Suspense, { fallback: _jsx("div", { className: "flex items-center justify-center h-full text-muted-foreground text-sm", children: "Loading terminal..." }), children: _jsx(AgentTerminal, { command: selectedCli, hideInFrame: false, className: "h-full", style: { background: "transparent" } }) }) }, id)))
|
|
582
|
+
: mode === "cli" && (_jsxs("div", { className: "flex flex-1 flex-col items-center justify-center min-h-0 px-6 gap-3", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: _jsx(IconTerminal2, { className: "h-5 w-5 text-muted-foreground" }) }), _jsxs("div", { className: "text-center max-w-[260px]", children: [_jsx("p", { className: "text-sm font-medium text-foreground mb-1", children: "CLI requires dev mode" }), _jsxs("p", { className: "text-xs text-muted-foreground leading-relaxed", children: ["Run this app locally with", " ", _jsx("code", { className: "bg-muted px-1 py-0.5 rounded text-[10px]", children: "pnpm dev" }), " ", "or use", " ", _jsx("span", { className: "font-medium text-foreground", children: "Builder.io" }), " ", "to access the CLI terminal."] })] })] })), mode === "resources" && (_jsx("div", { className: "flex-1 min-h-0", children: _jsx(Suspense, { fallback: _jsx("div", { className: "flex h-full flex-col min-h-0", children: _jsx("div", { className: "flex shrink-0 items-center justify-between border-b border-border px-2 py-1.5", children: _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("div", { className: "h-5 w-16 rounded bg-muted animate-pulse" }), _jsx("div", { className: "h-5 w-14 rounded bg-muted animate-pulse" })] }) }) }), children: _jsx(ResourcesPanel, {}) }) }))] }));
|
|
583
|
+
}
|
|
584
|
+
// ─── Resize handle ──────────────────────────────────────────────────────────
|
|
585
|
+
const SIDEBAR_STORAGE_KEY = "agent-native-sidebar-width";
|
|
586
|
+
const SIDEBAR_OPEN_KEY = "agent-native-sidebar-open";
|
|
587
|
+
const SIDEBAR_MIN = 280;
|
|
588
|
+
const SIDEBAR_MAX = 700;
|
|
589
|
+
function ResizeHandle({ position, onDrag, }) {
|
|
590
|
+
const ref = useRef(null);
|
|
591
|
+
const dragging = useRef(false);
|
|
592
|
+
const lastX = useRef(0);
|
|
593
|
+
const onDragRef = useRef(onDrag);
|
|
594
|
+
onDragRef.current = onDrag;
|
|
595
|
+
const GRAB_ZONE = 5; // px on each side of the border
|
|
596
|
+
// All drag logic runs via document-level listeners so the 1px-wide
|
|
597
|
+
// element doesn't need to capture pointer events itself.
|
|
598
|
+
useEffect(() => {
|
|
599
|
+
const el = ref.current;
|
|
600
|
+
if (!el)
|
|
601
|
+
return;
|
|
602
|
+
let cursorActive = false;
|
|
603
|
+
function onMouseDown(e) {
|
|
604
|
+
const rect = el.getBoundingClientRect();
|
|
605
|
+
const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));
|
|
606
|
+
if (dist > GRAB_ZONE)
|
|
607
|
+
return;
|
|
608
|
+
e.preventDefault();
|
|
609
|
+
dragging.current = true;
|
|
610
|
+
lastX.current = e.clientX;
|
|
611
|
+
document.body.style.cursor = "col-resize";
|
|
612
|
+
document.body.style.userSelect = "none";
|
|
613
|
+
}
|
|
614
|
+
function onMouseMove(e) {
|
|
615
|
+
if (dragging.current) {
|
|
616
|
+
const delta = e.clientX - lastX.current;
|
|
617
|
+
lastX.current = e.clientX;
|
|
618
|
+
onDragRef.current(position === "left" ? delta : -delta);
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
// Hover cursor
|
|
622
|
+
const rect = el.getBoundingClientRect();
|
|
623
|
+
const dist = Math.abs(e.clientX - (rect.left + rect.width / 2));
|
|
624
|
+
const near = dist <= GRAB_ZONE;
|
|
625
|
+
if (near && !cursorActive) {
|
|
626
|
+
cursorActive = true;
|
|
627
|
+
document.body.style.cursor = "col-resize";
|
|
628
|
+
}
|
|
629
|
+
else if (!near && cursorActive) {
|
|
630
|
+
cursorActive = false;
|
|
631
|
+
document.body.style.cursor = "";
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
function onMouseUp() {
|
|
635
|
+
if (!dragging.current)
|
|
636
|
+
return;
|
|
637
|
+
dragging.current = false;
|
|
638
|
+
document.body.style.cursor = "";
|
|
639
|
+
document.body.style.userSelect = "";
|
|
640
|
+
}
|
|
641
|
+
document.addEventListener("mousedown", onMouseDown);
|
|
642
|
+
document.addEventListener("mousemove", onMouseMove);
|
|
643
|
+
document.addEventListener("mouseup", onMouseUp);
|
|
644
|
+
return () => {
|
|
645
|
+
document.removeEventListener("mousedown", onMouseDown);
|
|
646
|
+
document.removeEventListener("mousemove", onMouseMove);
|
|
647
|
+
document.removeEventListener("mouseup", onMouseUp);
|
|
648
|
+
if (cursorActive)
|
|
649
|
+
document.body.style.cursor = "";
|
|
650
|
+
};
|
|
651
|
+
}, [position]);
|
|
652
|
+
return (_jsx("div", { ref: ref, className: cn("relative z-20 shrink-0 w-px touch-none select-none transition-colors", "bg-border hover:bg-accent active:bg-accent"), style: { cursor: "col-resize" } }));
|
|
78
653
|
}
|
|
79
654
|
/**
|
|
80
655
|
* Wraps app content with a toggleable agent sidebar.
|
|
81
656
|
* Use AgentToggleButton in your header to open/close it.
|
|
82
657
|
*/
|
|
83
658
|
export function AgentSidebar({ children, emptyStateText = "How can I help you?", suggestions, sidebarWidth = 380, position = "right", defaultOpen = false, }) {
|
|
84
|
-
const [open, setOpen] = useState(
|
|
659
|
+
const [open, setOpen] = useState(() => {
|
|
660
|
+
// On mobile viewports the sidebar would cover most of the screen, so
|
|
661
|
+
// always start closed regardless of any persisted desktop preference.
|
|
662
|
+
if (typeof window !== "undefined" &&
|
|
663
|
+
window.matchMedia("(max-width: 767px)").matches) {
|
|
664
|
+
return false;
|
|
665
|
+
}
|
|
666
|
+
try {
|
|
667
|
+
const saved = localStorage.getItem(SIDEBAR_OPEN_KEY);
|
|
668
|
+
if (saved !== null)
|
|
669
|
+
return saved === "true";
|
|
670
|
+
}
|
|
671
|
+
catch { }
|
|
672
|
+
return defaultOpen;
|
|
673
|
+
});
|
|
674
|
+
const [presentationMode, setPresentationMode] = useState(false);
|
|
675
|
+
const [width, setWidth] = useState(sidebarWidth);
|
|
85
676
|
useEffect(() => {
|
|
86
|
-
|
|
87
|
-
|
|
677
|
+
try {
|
|
678
|
+
const saved = localStorage.getItem(SIDEBAR_STORAGE_KEY);
|
|
679
|
+
if (saved) {
|
|
680
|
+
const n = parseInt(saved, 10);
|
|
681
|
+
if (n >= SIDEBAR_MIN && n <= SIDEBAR_MAX)
|
|
682
|
+
setWidth(n);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
catch { }
|
|
686
|
+
}, []);
|
|
687
|
+
const setOpenPersisted = useCallback((next) => {
|
|
688
|
+
setOpen((prev) => {
|
|
689
|
+
const value = typeof next === "function" ? next(prev) : next;
|
|
690
|
+
try {
|
|
691
|
+
localStorage.setItem(SIDEBAR_OPEN_KEY, String(value));
|
|
692
|
+
}
|
|
693
|
+
catch { }
|
|
694
|
+
return value;
|
|
695
|
+
});
|
|
696
|
+
}, []);
|
|
697
|
+
// Track whether the frame is controlling the sidebar (code mode = frame active).
|
|
698
|
+
// Default to true when inside an iframe — assume the frame sidebar is active
|
|
699
|
+
// until told otherwise. This prevents both sidebars flashing after hot reloads.
|
|
700
|
+
const [frameCodeMode, setFrameCodeMode] = useState(() => typeof window !== "undefined" && window.parent !== window);
|
|
701
|
+
useEffect(() => {
|
|
702
|
+
const toggleHandler = () => {
|
|
703
|
+
if (frameCodeMode && window.parent !== window) {
|
|
704
|
+
// Forward toggle to frame parent — the frame sidebar handles it
|
|
705
|
+
window.parent.postMessage({ type: "builder.toggleSidebar" }, "*");
|
|
706
|
+
}
|
|
707
|
+
else {
|
|
708
|
+
setOpenPersisted((prev) => !prev);
|
|
709
|
+
}
|
|
88
710
|
};
|
|
89
|
-
|
|
90
|
-
|
|
711
|
+
const openHandler = () => {
|
|
712
|
+
if (frameCodeMode && window.parent !== window) {
|
|
713
|
+
window.parent.postMessage({ type: "builder.toggleSidebar", data: { open: true } }, "*");
|
|
714
|
+
}
|
|
715
|
+
else {
|
|
716
|
+
setOpenPersisted(true);
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
window.addEventListener("agent-panel:toggle", toggleHandler);
|
|
720
|
+
window.addEventListener("agent-panel:open", openHandler);
|
|
721
|
+
return () => {
|
|
722
|
+
window.removeEventListener("agent-panel:toggle", toggleHandler);
|
|
723
|
+
window.removeEventListener("agent-panel:open", openHandler);
|
|
724
|
+
};
|
|
725
|
+
}, [setOpenPersisted, frameCodeMode]);
|
|
726
|
+
// Listen for sidebar mode commands from the frame parent.
|
|
727
|
+
// When frame is in "code" mode, hide the app sidebar.
|
|
728
|
+
// When frame is in "app" mode, show the app sidebar, sync width and panel mode.
|
|
729
|
+
useEffect(() => {
|
|
730
|
+
if (window.parent === window)
|
|
731
|
+
return; // Not in an iframe
|
|
732
|
+
function handleMessage(event) {
|
|
733
|
+
if (event.data?.type !== "builder.sidebarMode")
|
|
734
|
+
return;
|
|
735
|
+
const { mode, appMode, width: frameWidth, open: frameOpen, } = event.data.data || {};
|
|
736
|
+
if (mode === "code") {
|
|
737
|
+
// Frame is showing its own sidebar — hide the app's
|
|
738
|
+
setFrameCodeMode(true);
|
|
739
|
+
setOpenPersisted(false);
|
|
740
|
+
}
|
|
741
|
+
else if (mode === "app") {
|
|
742
|
+
// Frame deferred to the app — show and sync width + mode
|
|
743
|
+
setFrameCodeMode(false);
|
|
744
|
+
if (frameOpen !== false) {
|
|
745
|
+
setOpenPersisted(true);
|
|
746
|
+
}
|
|
747
|
+
if (frameWidth &&
|
|
748
|
+
frameWidth >= SIDEBAR_MIN &&
|
|
749
|
+
frameWidth <= SIDEBAR_MAX) {
|
|
750
|
+
setWidth(frameWidth);
|
|
751
|
+
}
|
|
752
|
+
// Sync the panel mode from frame tab selection
|
|
753
|
+
if (appMode === "cli" ||
|
|
754
|
+
appMode === "resources" ||
|
|
755
|
+
appMode === "chat") {
|
|
756
|
+
window.dispatchEvent(new CustomEvent("agent-panel:set-mode", {
|
|
757
|
+
detail: { mode: appMode },
|
|
758
|
+
}));
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
window.addEventListener("message", handleMessage);
|
|
763
|
+
return () => window.removeEventListener("message", handleMessage);
|
|
764
|
+
}, [setOpenPersisted]);
|
|
765
|
+
// Cmd+I / Ctrl+I to focus the agent chat
|
|
766
|
+
useEffect(() => {
|
|
767
|
+
const handleKeyDown = (e) => {
|
|
768
|
+
if ((e.metaKey || e.ctrlKey) && e.key === "i") {
|
|
769
|
+
e.preventDefault();
|
|
770
|
+
focusAgentChat();
|
|
771
|
+
}
|
|
772
|
+
};
|
|
773
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
774
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
775
|
+
}, []);
|
|
776
|
+
// Hide sidebar during presentation mode
|
|
777
|
+
useEffect(() => {
|
|
778
|
+
const handler = (event) => {
|
|
779
|
+
if (event.data?.type !== "builder.presentationMode")
|
|
780
|
+
return;
|
|
781
|
+
setPresentationMode(event.data.data?.active === true);
|
|
782
|
+
};
|
|
783
|
+
window.addEventListener("message", handler);
|
|
784
|
+
return () => window.removeEventListener("message", handler);
|
|
785
|
+
}, []);
|
|
786
|
+
const handleDrag = useCallback((delta) => {
|
|
787
|
+
setWidth((prev) => {
|
|
788
|
+
const next = Math.min(SIDEBAR_MAX, Math.max(SIDEBAR_MIN, prev + delta));
|
|
789
|
+
try {
|
|
790
|
+
localStorage.setItem(SIDEBAR_STORAGE_KEY, String(next));
|
|
791
|
+
}
|
|
792
|
+
catch { }
|
|
793
|
+
return next;
|
|
794
|
+
});
|
|
91
795
|
}, []);
|
|
92
796
|
const isLeft = position === "left";
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
797
|
+
// Always render the sidebar panel (even when closed) so MultiTabAssistantChat
|
|
798
|
+
// stays mounted and can receive messages (e.g. from voice dictation) while
|
|
799
|
+
// the sidebar is visually hidden. When the user opens the sidebar they'll see
|
|
800
|
+
// any in-progress or completed conversations.
|
|
801
|
+
const sidebar = (_jsxs(_Fragment, { children: [isLeft ? null : open ? (_jsx(ResizeHandle, { position: position, onDrag: handleDrag })) : null, _jsx("div", { className: "agent-sidebar-panel flex shrink-0 flex-col overflow-hidden text-[13px] leading-[1.2] antialiased", style: {
|
|
802
|
+
...AGENT_PANEL_ROOT_STYLE,
|
|
803
|
+
width,
|
|
804
|
+
maxHeight: "100vh",
|
|
805
|
+
display: open ? "flex" : "none",
|
|
806
|
+
}, children: _jsx(AgentPanel, { emptyStateText: emptyStateText, suggestions: suggestions, onCollapse: () => setOpenPersisted(false) }) }), isLeft ? (open ? (_jsx(ResizeHandle, { position: position, onDrag: handleDrag })) : null) : null] }));
|
|
807
|
+
return (_jsxs("div", { className: "flex min-w-0 flex-1 h-screen overflow-hidden", children: [isLeft && !presentationMode ? sidebar : null, _jsx("div", { className: "flex flex-1 flex-col overflow-auto min-w-0", children: children }), !isLeft && !presentationMode ? sidebar : null] }));
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* Focus the agent chat composer input.
|
|
811
|
+
* Opens the sidebar if closed, then focuses the text input.
|
|
812
|
+
*/
|
|
813
|
+
export function focusAgentChat() {
|
|
814
|
+
window.dispatchEvent(new Event("agent-panel:open"));
|
|
815
|
+
// Wait for sidebar to render, then focus the composer
|
|
816
|
+
requestAnimationFrame(() => {
|
|
817
|
+
const panel = document.querySelector(".agent-sidebar-panel");
|
|
818
|
+
if (!panel)
|
|
819
|
+
return;
|
|
820
|
+
const prosemirror = panel.querySelector(".ProseMirror");
|
|
821
|
+
if (prosemirror) {
|
|
822
|
+
prosemirror.focus();
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
const textarea = panel.querySelector("textarea");
|
|
826
|
+
if (textarea)
|
|
827
|
+
textarea.focus();
|
|
828
|
+
});
|
|
96
829
|
}
|
|
97
830
|
/**
|
|
98
831
|
* Button to toggle the agent sidebar. Place this in your app's header/toolbar.
|
|
99
832
|
* Dispatches a custom event that AgentSidebar listens for.
|
|
100
833
|
*/
|
|
101
834
|
export function AgentToggleButton({ className }) {
|
|
102
|
-
return (_jsx("button", { onClick: () => window.dispatchEvent(new Event("agent-panel:toggle")), className: cn("flex h-
|
|
835
|
+
return (_jsx("button", { onClick: () => window.dispatchEvent(new Event("agent-panel:toggle")), className: cn("ml-1.5 flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", className), title: "Toggle agent", children: _jsx(IconMessage, { size: 16 }) }));
|
|
103
836
|
}
|
|
104
837
|
//# sourceMappingURL=AgentPanel.js.map
|