@agent-native/core 0.15.12 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -0
- package/dist/agent/app-model-defaults.d.ts +37 -0
- package/dist/agent/app-model-defaults.d.ts.map +1 -0
- package/dist/agent/app-model-defaults.js +136 -0
- package/dist/agent/app-model-defaults.js.map +1 -0
- package/dist/agent/engine/registry.d.ts +12 -7
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +28 -8
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts +2 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +3 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/browser-sessions/actions.d.ts +7 -0
- package/dist/browser-sessions/actions.d.ts.map +1 -0
- package/dist/browser-sessions/actions.js +223 -0
- package/dist/browser-sessions/actions.js.map +1 -0
- package/dist/browser-sessions/routes.d.ts +7 -0
- package/dist/browser-sessions/routes.d.ts.map +1 -0
- package/dist/browser-sessions/routes.js +159 -0
- package/dist/browser-sessions/routes.js.map +1 -0
- package/dist/browser-sessions/store.d.ts +33 -0
- package/dist/browser-sessions/store.d.ts.map +1 -0
- package/dist/browser-sessions/store.js +506 -0
- package/dist/browser-sessions/store.js.map +1 -0
- package/dist/browser-sessions/types.d.ts +68 -0
- package/dist/browser-sessions/types.d.ts.map +1 -0
- package/dist/browser-sessions/types.js +2 -0
- package/dist/browser-sessions/types.js.map +1 -0
- package/dist/cli/code-agent-commands.d.ts +36 -0
- package/dist/cli/code-agent-commands.d.ts.map +1 -0
- package/dist/cli/code-agent-commands.js +192 -0
- package/dist/cli/code-agent-commands.js.map +1 -0
- package/dist/cli/code-agent-connector.d.ts +17 -0
- package/dist/cli/code-agent-connector.d.ts.map +1 -0
- package/dist/cli/code-agent-connector.js +724 -0
- package/dist/cli/code-agent-connector.js.map +1 -0
- package/dist/cli/code-agent-executor.d.ts +31 -0
- package/dist/cli/code-agent-executor.d.ts.map +1 -0
- package/dist/cli/code-agent-executor.js +921 -0
- package/dist/cli/code-agent-executor.js.map +1 -0
- package/dist/cli/code-agent-runs.d.ts +102 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -0
- package/dist/cli/code-agent-runs.js +277 -0
- package/dist/cli/code-agent-runs.js.map +1 -0
- package/dist/cli/code.d.ts +66 -0
- package/dist/cli/code.d.ts.map +1 -0
- package/dist/cli/code.js +1306 -0
- package/dist/cli/code.js.map +1 -0
- package/dist/cli/create.d.ts +2 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +11 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +26 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/migrate.d.ts +27 -0
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +1328 -20
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +27 -3
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/workspacify.d.ts +2 -0
- package/dist/cli/workspacify.d.ts.map +1 -1
- package/dist/cli/workspacify.js +2 -1
- package/dist/cli/workspacify.js.map +1 -1
- package/dist/client/AgentNative.d.ts +32 -0
- package/dist/client/AgentNative.d.ts.map +1 -0
- package/dist/client/AgentNative.js +79 -0
- package/dist/client/AgentNative.js.map +1 -0
- package/dist/client/AgentNativeEmbedded.d.ts +47 -0
- package/dist/client/AgentNativeEmbedded.d.ts.map +1 -0
- package/dist/client/AgentNativeEmbedded.js +148 -0
- package/dist/client/AgentNativeEmbedded.js.map +1 -0
- package/dist/client/AgentNativeFrame.d.ts +25 -0
- package/dist/client/AgentNativeFrame.d.ts.map +1 -0
- package/dist/client/AgentNativeFrame.js +68 -0
- package/dist/client/AgentNativeFrame.js.map +1 -0
- package/dist/client/AgentPanel.d.ts +19 -2
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +15 -4
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +79 -48
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +2 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +3 -2
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/browser-session-bridge.d.ts +44 -0
- package/dist/client/browser-session-bridge.d.ts.map +1 -0
- package/dist/client/browser-session-bridge.js +339 -0
- package/dist/client/browser-session-bridge.js.map +1 -0
- package/dist/client/client-action.d.ts +7 -0
- package/dist/client/client-action.d.ts.map +1 -0
- package/dist/client/client-action.js +4 -0
- package/dist/client/client-action.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts.map +1 -1
- package/dist/client/components/ui/tooltip.js +1 -1
- package/dist/client/components/ui/tooltip.js.map +1 -1
- package/dist/client/composer/AgentComposerFrame.d.ts +17 -0
- package/dist/client/composer/AgentComposerFrame.d.ts.map +1 -0
- package/dist/client/composer/AgentComposerFrame.js +14 -0
- package/dist/client/composer/AgentComposerFrame.js.map +1 -0
- package/dist/client/composer/MentionPopover.d.ts.map +1 -1
- package/dist/client/composer/MentionPopover.js +2 -2
- package/dist/client/composer/MentionPopover.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +35 -2
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +31 -17
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +20 -2
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +112 -22
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/index.d.ts +3 -2
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +1 -0
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/types.d.ts +1 -0
- package/dist/client/composer/types.d.ts.map +1 -1
- package/dist/client/composer/types.js.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts +58 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts +2 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js +110 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.js +354 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.js.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts +2 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts.map +1 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.js +68 -0
- package/dist/client/extensions/AgentNativeExtensionFrame.spec.js.map +1 -0
- package/dist/client/extensions/agent-native-extension-runtime.d.ts +69 -0
- package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +1 -0
- package/dist/client/extensions/agent-native-extension-runtime.js +348 -0
- package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -0
- package/dist/client/extensions/index.d.ts +2 -0
- package/dist/client/extensions/index.d.ts.map +1 -1
- package/dist/client/extensions/index.js +2 -0
- package/dist/client/extensions/index.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts +86 -0
- package/dist/client/extensions/portable-extension.d.ts.map +1 -0
- package/dist/client/extensions/portable-extension.js +480 -0
- package/dist/client/extensions/portable-extension.js.map +1 -0
- package/dist/client/host-bridge.d.ts +266 -0
- package/dist/client/host-bridge.d.ts.map +1 -0
- package/dist/client/host-bridge.js +745 -0
- package/dist/client/host-bridge.js.map +1 -0
- package/dist/client/host-tools.d.ts +40 -0
- package/dist/client/host-tools.d.ts.map +1 -0
- package/dist/client/host-tools.js +94 -0
- package/dist/client/host-tools.js.map +1 -0
- package/dist/client/index.d.ts +13 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +11 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/resources/BuiltinCapabilityDetail.d.ts +10 -0
- package/dist/client/resources/BuiltinCapabilityDetail.d.ts.map +1 -0
- package/dist/client/resources/BuiltinCapabilityDetail.js +51 -0
- package/dist/client/resources/BuiltinCapabilityDetail.js.map +1 -0
- package/dist/client/resources/ResourceEditor.d.ts +3 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +40 -17
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourceTree.d.ts.map +1 -1
- package/dist/client/resources/ResourceTree.js +23 -2
- package/dist/client/resources/ResourceTree.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +77 -17
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/index.d.ts +1 -0
- package/dist/client/resources/index.d.ts.map +1 -1
- package/dist/client/resources/index.js +1 -0
- package/dist/client/resources/index.js.map +1 -1
- package/dist/client/resources/use-builtin-capabilities.d.ts +62 -0
- package/dist/client/resources/use-builtin-capabilities.d.ts.map +1 -0
- package/dist/client/resources/use-builtin-capabilities.js +54 -0
- package/dist/client/resources/use-builtin-capabilities.js.map +1 -0
- package/dist/client/resources/use-resources.d.ts +30 -2
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +42 -1
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +151 -2
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/use-chat-models.d.ts.map +1 -1
- package/dist/client/use-chat-models.js +20 -0
- package/dist/client/use-chat-models.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +46 -2
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-chat-threads.spec.js +77 -0
- package/dist/client/use-chat-threads.spec.js.map +1 -1
- package/dist/code-agents/index.d.ts +4 -0
- package/dist/code-agents/index.d.ts.map +1 -0
- package/dist/code-agents/index.js +4 -0
- package/dist/code-agents/index.js.map +1 -0
- package/dist/connections/catalog.d.ts +134 -0
- package/dist/connections/catalog.d.ts.map +1 -0
- package/dist/connections/catalog.js +180 -0
- package/dist/connections/catalog.js.map +1 -0
- package/dist/connections/index.d.ts +2 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +2 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/extensions/change-marker.d.ts +10 -0
- package/dist/extensions/change-marker.d.ts.map +1 -0
- package/dist/extensions/change-marker.js +42 -0
- package/dist/extensions/change-marker.js.map +1 -0
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +1 -7
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +1 -0
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +1 -0
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/slots/routes.js +1 -1
- package/dist/extensions/slots/routes.js.map +1 -1
- package/dist/extensions/store.d.ts +3 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +112 -4
- package/dist/extensions/store.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +1 -0
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/index.d.ts +5 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +4 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/plugin.d.ts +8 -0
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +760 -32
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/remote-commands-store.d.ts +36 -0
- package/dist/integrations/remote-commands-store.d.ts.map +1 -0
- package/dist/integrations/remote-commands-store.js +273 -0
- package/dist/integrations/remote-commands-store.js.map +1 -0
- package/dist/integrations/remote-devices-store.d.ts +43 -0
- package/dist/integrations/remote-devices-store.d.ts.map +1 -0
- package/dist/integrations/remote-devices-store.js +315 -0
- package/dist/integrations/remote-devices-store.js.map +1 -0
- package/dist/integrations/remote-push-store.d.ts +37 -0
- package/dist/integrations/remote-push-store.d.ts.map +1 -0
- package/dist/integrations/remote-push-store.js +299 -0
- package/dist/integrations/remote-push-store.js.map +1 -0
- package/dist/integrations/remote-retry-job.d.ts +7 -0
- package/dist/integrations/remote-retry-job.d.ts.map +1 -0
- package/dist/integrations/remote-retry-job.js +45 -0
- package/dist/integrations/remote-retry-job.js.map +1 -0
- package/dist/integrations/remote-run-events-store.d.ts +18 -0
- package/dist/integrations/remote-run-events-store.d.ts.map +1 -0
- package/dist/integrations/remote-run-events-store.js +82 -0
- package/dist/integrations/remote-run-events-store.js.map +1 -0
- package/dist/integrations/remote-types.d.ts +101 -0
- package/dist/integrations/remote-types.d.ts.map +1 -0
- package/dist/integrations/remote-types.js +2 -0
- package/dist/integrations/remote-types.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +2 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +4 -1
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +4 -2
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +9 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/mcp-client/builtin-capabilities.d.ts +20 -0
- package/dist/mcp-client/builtin-capabilities.d.ts.map +1 -0
- package/dist/mcp-client/builtin-capabilities.js +75 -0
- package/dist/mcp-client/builtin-capabilities.js.map +1 -0
- package/dist/mcp-client/builtin-store.d.ts +10 -0
- package/dist/mcp-client/builtin-store.d.ts.map +1 -0
- package/dist/mcp-client/builtin-store.js +55 -0
- package/dist/mcp-client/builtin-store.js.map +1 -0
- package/dist/mcp-client/index.d.ts +3 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +3 -1
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/routes.d.ts +28 -0
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +195 -1
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +34 -0
- package/dist/org/context.js.map +1 -1
- package/dist/resources/handlers.d.ts +4 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +46 -7
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts +8 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +18 -8
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +19 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +86 -3
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +18 -7
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +100 -7
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/resources/delete.d.ts.map +1 -1
- package/dist/scripts/resources/delete.js +4 -1
- package/dist/scripts/resources/delete.js.map +1 -1
- package/dist/scripts/resources/effective.d.ts +11 -0
- package/dist/scripts/resources/effective.d.ts.map +1 -0
- package/dist/scripts/resources/effective.js +54 -0
- package/dist/scripts/resources/effective.js.map +1 -0
- package/dist/scripts/resources/index.d.ts.map +1 -1
- package/dist/scripts/resources/index.js +1 -0
- package/dist/scripts/resources/index.js.map +1 -1
- package/dist/scripts/resources/list.d.ts +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +17 -5
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/read.d.ts +1 -1
- package/dist/scripts/resources/read.d.ts.map +1 -1
- package/dist/scripts/resources/read.js +20 -5
- package/dist/scripts/resources/read.js.map +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +4 -1
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/scripts/runner.d.ts +11 -1
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +75 -27
- package/dist/scripts/runner.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +24 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +608 -54
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +2 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/embedded.d.ts +72 -0
- package/dist/server/embedded.d.ts.map +1 -0
- package/dist/server/embedded.js +119 -0
- package/dist/server/embedded.js.map +1 -0
- package/dist/server/index.d.ts +8 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +184 -13
- package/dist/server/poll.js.map +1 -1
- package/dist/server/resources-plugin.d.ts.map +1 -1
- package/dist/server/resources-plugin.js +11 -2
- package/dist/server/resources-plugin.js.map +1 -1
- package/dist/sharing/actions/extension-change.d.ts +4 -0
- package/dist/sharing/actions/extension-change.d.ts.map +1 -0
- package/dist/sharing/actions/extension-change.js +13 -0
- package/dist/sharing/actions/extension-change.js.map +1 -0
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.js +3 -0
- package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.js +4 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
- package/dist/sharing/actions/unshare-resource.js +3 -0
- package/dist/sharing/actions/unshare-resource.js.map +1 -1
- package/dist/templates/default/AGENTS.md +3 -3
- package/dist/templates/workspace-core/AGENTS.md +7 -0
- package/dist/templates/workspace-root/AGENTS.md +7 -0
- package/dist/templates/workspace-root/README.md +25 -0
- package/dist/triggers/dispatcher.d.ts +3 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +9 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/workspace-connections/index.d.ts +2 -0
- package/dist/workspace-connections/index.d.ts.map +1 -0
- package/dist/workspace-connections/index.js +2 -0
- package/dist/workspace-connections/index.js.map +1 -0
- package/dist/workspace-connections/store.d.ts +229 -0
- package/dist/workspace-connections/store.d.ts.map +1 -0
- package/dist/workspace-connections/store.js +938 -0
- package/dist/workspace-connections/store.js.map +1 -0
- package/docs/content/agent-teams.md +6 -0
- package/docs/content/cloneable-saas.md +1 -0
- package/docs/content/code-agents-ui.md +261 -0
- package/docs/content/dispatch.md +40 -3
- package/docs/content/embedding-sdk.md +459 -0
- package/docs/content/faq.md +1 -0
- package/docs/content/getting-started.md +1 -0
- package/docs/content/mcp-clients.md +41 -3
- package/docs/content/migration-workbench.md +237 -54
- package/docs/content/multi-app-workspace.md +41 -0
- package/docs/content/multi-tenancy.md +1 -1
- package/docs/content/template-brain.md +418 -0
- package/docs/content/template-dispatch.md +30 -0
- package/docs/content/workspace-connections.md +509 -0
- package/docs/content/workspace-management.md +12 -12
- package/docs/content/workspace.md +180 -40
- package/package.json +7 -2
- package/src/templates/default/AGENTS.md +3 -3
- package/src/templates/workspace-core/AGENTS.md +7 -0
- package/src/templates/workspace-root/AGENTS.md +7 -0
- package/src/templates/workspace-root/README.md +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-session-bridge.js","sourceRoot":"","sources":["../../src/client/browser-session-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"./api-path.js\";\nimport {\n announceAgentNativeFrameReady,\n defaultAgentNativeHostCommands,\n requestAgentNativeHostActions,\n requestAgentNativeHostContext,\n runAgentNativeHostAction,\n sendAgentNativeHostCommand,\n type AgentNativeActionManifestEntry,\n type AgentNativeClientAction,\n type AgentNativeClientActions,\n type AgentNativeHostRequestOptions,\n type AgentNativeHostCommandHandlers,\n type AgentNativeHostContext,\n type AgentNativeHostContextGetter,\n type AgentNativeHostSession,\n} from \"./host-bridge.js\";\nimport type {\n AgentNativeBrowserSession,\n AgentNativeBrowserSessionRecord,\n AgentNativeBrowserSessionRequest,\n} from \"../browser-sessions/types.js\";\n\nexport interface AgentNativeBrowserSessionBridgeOptions extends AgentNativeHostRequestOptions {\n /** Framework browser-session endpoint. Defaults to /_agent-native/browser-sessions. */\n endpoint?: string;\n /** Stable tab/session id. Defaults to the host-provided session id. */\n sessionId?: string;\n /**\n * Direct in-app session identity. Use this when the Agent-Native chat is\n * rendered inside the host app instead of inside a sidecar iframe.\n */\n session?: string | Partial<AgentNativeHostSession>;\n /**\n * Direct in-app context getter. When set, the bridge does not use\n * postMessage; it registers this tab directly with the backend.\n */\n getContext?: AgentNativeHostContextGetter;\n /** Direct in-app client actions exposed to backend browser-session tools. */\n actions?: AgentNativeClientActions;\n /** Direct in-app host commands exposed to backend browser-session tools. */\n commands?: AgentNativeHostCommandHandlers;\n /** Origin label passed to direct action/command callbacks. */\n origin?: string;\n /** Human-readable label shown to the agent when multiple tabs are live. */\n label?: string;\n /** Re-register host context/actions on this interval. Defaults to 5s. */\n heartbeatMs?: number;\n /** Claim pending backend requests on this interval. Defaults to 500ms. */\n pollMs?: number;\n /** Session TTL on the server. Defaults to 45s. */\n ttlMs?: number;\n /** Override fetch for tests or custom runtimes. */\n fetch?: typeof fetch;\n}\n\nexport interface AgentNativeBrowserSessionBridge {\n readonly sessionId: string | null;\n start(): AgentNativeBrowserSessionBridge;\n stop(): void;\n refreshRegistration(): Promise<AgentNativeBrowserSessionRecord>;\n claimOnce(): Promise<AgentNativeBrowserSessionRequest | null>;\n}\n\nconst DEFAULT_ENDPOINT = \"/_agent-native/browser-sessions\";\nconst DEFAULT_HEARTBEAT_MS = 5_000;\nconst DEFAULT_POLL_MS = 500;\n\nfunction browserSessionId(): string {\n return `browser-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction messageError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction endpointBase(options: AgentNativeBrowserSessionBridgeOptions): string {\n return options.endpoint ?? agentNativePath(DEFAULT_ENDPOINT);\n}\n\nfunction endpointPath(\n options: AgentNativeBrowserSessionBridgeOptions,\n path = \"\",\n): string {\n const base = endpointBase(options).replace(/\\/+$/, \"\");\n return `${base}${path}`;\n}\n\nfunction encodePathSegment(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction fetchImpl(\n options: AgentNativeBrowserSessionBridgeOptions,\n): typeof fetch {\n const fn =\n options.fetch ?? (typeof fetch !== \"undefined\" ? fetch : undefined);\n if (!fn) throw new Error(\"fetch is not available\");\n return fn;\n}\n\nasync function readJsonResponse(response: Response): Promise<any> {\n const body = await response.json().catch(() => ({}));\n if (!response.ok || body?.ok === false) {\n throw new Error(\n typeof body?.error === \"string\"\n ? body.error\n : `Browser-session request failed (${response.status})`,\n );\n }\n return body;\n}\n\nasync function postJson(\n options: AgentNativeBrowserSessionBridgeOptions,\n path: string,\n body: unknown,\n): Promise<any> {\n const response = await fetchImpl(options)(endpointPath(options, path), {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Agent-Native-CSRF\": \"1\",\n },\n body: JSON.stringify(body ?? {}),\n });\n return readJsonResponse(response);\n}\n\nasync function deleteJson(\n options: AgentNativeBrowserSessionBridgeOptions,\n path: string,\n): Promise<void> {\n const response = await fetchImpl(options)(endpointPath(options, path), {\n method: \"DELETE\",\n credentials: \"include\",\n headers: {\n \"X-Agent-Native-CSRF\": \"1\",\n },\n });\n await readJsonResponse(response);\n}\n\nfunction hostRequestOptions(\n options: AgentNativeBrowserSessionBridgeOptions,\n): AgentNativeHostRequestOptions {\n const {\n endpoint: _endpoint,\n sessionId: _sessionId,\n session: _session,\n getContext: _getContext,\n actions: _actions,\n commands: _commands,\n origin: _origin,\n label: _label,\n heartbeatMs: _heartbeatMs,\n pollMs: _pollMs,\n ttlMs: _ttlMs,\n fetch: _fetch,\n ...hostOptions\n } = options;\n return hostOptions;\n}\n\nfunction hasDirectHost(\n options: AgentNativeBrowserSessionBridgeOptions,\n): boolean {\n return Boolean(\n options.getContext ||\n options.actions ||\n options.commands ||\n options.session,\n );\n}\n\nfunction directOrigin(options: AgentNativeBrowserSessionBridgeOptions): string {\n return options.origin || \"agent-native-embedded\";\n}\n\nfunction directSessionId(): string {\n return `session-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction createDirectHostSession(\n session: AgentNativeBrowserSessionBridgeOptions[\"session\"],\n fallbackId: string | undefined,\n contextUrl: string | undefined,\n): AgentNativeHostSession {\n const now = new Date().toISOString();\n const base =\n typeof session === \"string\"\n ? { id: session }\n : session && typeof session === \"object\"\n ? session\n : {};\n return {\n id: base.id || fallbackId || directSessionId(),\n connectedAt: base.connectedAt || now,\n url:\n base.url ||\n contextUrl ||\n (typeof window !== \"undefined\" ? window.location.href : undefined),\n ...base,\n };\n}\n\nfunction serializeForBrowserSession<T>(value: T, label: string): T {\n if (value === undefined) return value;\n try {\n return JSON.parse(JSON.stringify(value)) as T;\n } catch {\n throw new Error(`${label} must be JSON-serializable`);\n }\n}\n\nasync function resolveDirectContext(\n options: AgentNativeBrowserSessionBridgeOptions,\n): Promise<AgentNativeHostContext> {\n const raw = options.getContext ? await options.getContext() : {};\n const context = serializeForBrowserSession(\n raw ?? {},\n \"Browser-session context\",\n );\n const session = createDirectHostSession(\n options.session,\n options.sessionId,\n context.url,\n );\n return {\n ...context,\n session: {\n ...session,\n ...(context.session ?? {}),\n },\n };\n}\n\nasync function resolveClientActions(\n actions: AgentNativeClientActions | undefined,\n): Promise<AgentNativeClientAction[]> {\n const value = typeof actions === \"function\" ? await actions() : actions;\n return Array.isArray(value) ? value : [];\n}\n\nfunction toActionManifest(\n action: AgentNativeClientAction,\n): AgentNativeActionManifestEntry | null {\n if (!action?.name || !action.description) return null;\n const { run: _run, ...manifest } = action;\n return serializeForBrowserSession(\n {\n source: \"client\",\n availability: \"browser-session\",\n ...manifest,\n schema: manifest.schema ?? manifest.parameters,\n },\n \"Client action manifest\",\n );\n}\n\nasync function resolveDirectActionManifest(\n options: AgentNativeBrowserSessionBridgeOptions,\n): Promise<AgentNativeActionManifestEntry[]> {\n const actions = await resolveClientActions(options.actions);\n return actions\n .map(toActionManifest)\n .filter(Boolean) as AgentNativeActionManifestEntry[];\n}\n\nasync function findDirectAction(\n options: AgentNativeBrowserSessionBridgeOptions,\n name: string,\n): Promise<AgentNativeClientAction | undefined> {\n const actions = await resolveClientActions(options.actions);\n return actions.find((action) => action.name === name);\n}\n\nasync function runDirectCommand(\n command: string,\n payload: unknown,\n requestId: string | undefined,\n options: AgentNativeBrowserSessionBridgeOptions,\n): Promise<unknown> {\n const handlers = {\n ...defaultAgentNativeHostCommands,\n ...(options.commands ?? {}),\n };\n const handler = handlers[command];\n if (!handler) {\n throw new Error(`Host command \"${command}\" is not available`);\n }\n return handler(\n {\n command,\n payload,\n requestId,\n origin: directOrigin(options),\n },\n undefined as unknown as MessageEvent,\n );\n}\n\nasync function executeDirectBrowserSessionRequest(\n request: AgentNativeBrowserSessionRequest,\n options: AgentNativeBrowserSessionBridgeOptions,\n): Promise<unknown> {\n if (request.type === \"get-context\") {\n return resolveDirectContext(options);\n }\n if (request.type === \"list-actions\") {\n return resolveDirectActionManifest(options);\n }\n if (request.type === \"run-action\") {\n if (!request.name) {\n throw new Error(\"Browser-session action request is missing name\");\n }\n const action = await findDirectAction(options, request.name);\n if (!action) {\n throw new Error(`Client action \"${request.name}\" is not available`);\n }\n const context = await resolveDirectContext(options);\n const session =\n context.session ??\n createDirectHostSession(options.session, options.sessionId, context.url);\n return action.run(request.args, {\n requestId: request.id,\n origin: directOrigin(options),\n context,\n session,\n event: undefined as unknown as MessageEvent,\n refresh: (payload?: unknown) =>\n runDirectCommand(\"refreshData\", payload, request.id, options),\n command: (command: string, payload?: unknown) =>\n runDirectCommand(command, payload, request.id, options),\n });\n }\n if (request.type === \"command\") {\n return runDirectCommand(\n request.command || \"refreshData\",\n request.payload,\n request.id,\n options,\n );\n }\n throw new Error(`Unknown browser-session request type: ${request.type}`);\n}\n\nfunction normalizeSession(\n sessionId: string,\n label: string | undefined,\n hostSession: AgentNativeHostSession | undefined,\n contextUrl: string | undefined,\n): AgentNativeBrowserSession {\n return {\n ...(hostSession ?? {}),\n id: sessionId,\n ...(label\n ? { label }\n : hostSession?.label\n ? { label: hostSession.label }\n : {}),\n connectedAt: hostSession?.connectedAt ?? new Date().toISOString(),\n ...(contextUrl || hostSession?.url\n ? { url: contextUrl ?? hostSession?.url }\n : {}),\n };\n}\n\nasync function executeBrowserSessionRequest(\n request: AgentNativeBrowserSessionRequest,\n options: AgentNativeBrowserSessionBridgeOptions,\n): Promise<unknown> {\n if (hasDirectHost(options)) {\n return executeDirectBrowserSessionRequest(request, options);\n }\n\n const hostOptions = hostRequestOptions(options);\n if (request.type === \"get-context\") {\n return requestAgentNativeHostContext(hostOptions);\n }\n if (request.type === \"list-actions\") {\n return requestAgentNativeHostActions(hostOptions);\n }\n if (request.type === \"run-action\") {\n if (!request.name)\n throw new Error(\"Browser-session action request is missing name\");\n return runAgentNativeHostAction(request.name, request.args, hostOptions);\n }\n if (request.type === \"command\") {\n return sendAgentNativeHostCommand(\n request.command || \"refreshData\",\n request.payload,\n hostOptions,\n );\n }\n throw new Error(`Unknown browser-session request type: ${request.type}`);\n}\n\nexport function createAgentNativeBrowserSessionBridge(\n options: AgentNativeBrowserSessionBridgeOptions = {},\n): AgentNativeBrowserSessionBridge {\n let currentSessionId: string | null = options.sessionId ?? null;\n let fallbackSessionId: string | null = null;\n let started = false;\n let heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n let pollTimer: ReturnType<typeof setInterval> | undefined;\n let refreshing = false;\n let polling = false;\n\n async function refreshRegistration(): Promise<AgentNativeBrowserSessionRecord> {\n const direct = hasDirectHost(options);\n const hostOptions = hostRequestOptions(options);\n const [context, actions] = direct\n ? await Promise.all([\n resolveDirectContext(options),\n resolveDirectActionManifest(options).catch(() => []),\n ])\n : await Promise.all([\n requestAgentNativeHostContext(hostOptions),\n requestAgentNativeHostActions(hostOptions).catch(() => []),\n ]);\n const hostSession = context.session;\n if (!currentSessionId) {\n currentSessionId =\n hostSession?.id || fallbackSessionId || browserSessionId();\n fallbackSessionId = currentSessionId;\n }\n const session = normalizeSession(\n currentSessionId,\n options.label,\n hostSession,\n context.url,\n );\n const body = await postJson(options, \"\", {\n session,\n sessionId: currentSessionId,\n context,\n actions,\n ttlMs: options.ttlMs,\n });\n return body.session as AgentNativeBrowserSessionRecord;\n }\n\n async function heartbeat(): Promise<void> {\n if (refreshing) return;\n refreshing = true;\n try {\n await refreshRegistration();\n } finally {\n refreshing = false;\n }\n }\n\n async function claimOnce(): Promise<AgentNativeBrowserSessionRequest | null> {\n if (!currentSessionId) {\n await refreshRegistration();\n }\n if (!currentSessionId) return null;\n\n const claim = await postJson(\n options,\n `/${encodePathSegment(currentSessionId)}/requests/claim`,\n {},\n );\n const request = claim.request as AgentNativeBrowserSessionRequest | null;\n if (!request) return null;\n\n try {\n const result = await executeBrowserSessionRequest(request, options);\n await postJson(\n options,\n `/${encodePathSegment(currentSessionId)}/requests/${encodePathSegment(\n request.id,\n )}/complete`,\n { ok: true, result },\n );\n } catch (error) {\n await postJson(\n options,\n `/${encodePathSegment(currentSessionId)}/requests/${encodePathSegment(\n request.id,\n )}/complete`,\n { ok: false, error: messageError(error).message },\n ).catch(() => {});\n }\n\n return request;\n }\n\n async function poll(): Promise<void> {\n if (polling) return;\n polling = true;\n try {\n await claimOnce();\n } finally {\n polling = false;\n }\n }\n\n const bridge: AgentNativeBrowserSessionBridge = {\n get sessionId() {\n return currentSessionId;\n },\n start() {\n if (started) return bridge;\n started = true;\n if (!hasDirectHost(options)) {\n announceAgentNativeFrameReady(hostRequestOptions(options));\n }\n void heartbeat();\n void poll();\n heartbeatTimer = setInterval(\n () => void heartbeat(),\n options.heartbeatMs ?? DEFAULT_HEARTBEAT_MS,\n );\n pollTimer = setInterval(\n () => void poll(),\n options.pollMs ?? DEFAULT_POLL_MS,\n );\n return bridge;\n },\n stop() {\n if (!started) return;\n started = false;\n if (heartbeatTimer) clearInterval(heartbeatTimer);\n if (pollTimer) clearInterval(pollTimer);\n heartbeatTimer = undefined;\n pollTimer = undefined;\n if (currentSessionId) {\n void deleteJson(\n options,\n `/${encodePathSegment(currentSessionId)}`,\n ).catch(() => {});\n }\n },\n refreshRegistration,\n claimOnce,\n };\n\n return bridge;\n}\n\nexport function startAgentNativeBrowserSessionBridge(\n options: AgentNativeBrowserSessionBridgeOptions = {},\n): AgentNativeBrowserSessionBridge {\n return createAgentNativeBrowserSessionBridge(options).start();\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentNativeActionManifestEntry, AgentNativeClientAction, AgentNativeClientActionRuntime } from "./host-bridge.js";
|
|
2
|
+
export type AgentNativeClientActionRunner<TArgs, TResult> = (args: TArgs, runtime: AgentNativeClientActionRuntime) => TResult | Promise<TResult>;
|
|
3
|
+
export type AgentNativeClientActionDefinition<TArgs, TResult> = AgentNativeActionManifestEntry & {
|
|
4
|
+
run: AgentNativeClientActionRunner<TArgs, TResult>;
|
|
5
|
+
};
|
|
6
|
+
export declare function defineClientAction<TArgs = unknown, TResult = unknown>(action: AgentNativeClientActionDefinition<TArgs, TResult>): AgentNativeClientAction<TArgs, TResult>;
|
|
7
|
+
//# sourceMappingURL=client-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-action.d.ts","sourceRoot":"","sources":["../../src/client/client-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,6BAA6B,CAAC,KAAK,EAAE,OAAO,IAAI,CAC1D,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,8BAA8B,KACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,MAAM,iCAAiC,CAAC,KAAK,EAAE,OAAO,IAC1D,8BAA8B,GAAG;IAC/B,GAAG,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACpD,CAAC;AAEJ,wBAAgB,kBAAkB,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACnE,MAAM,EAAE,iCAAiC,CAAC,KAAK,EAAE,OAAO,CAAC,GACxD,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAEzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-action.js","sourceRoot":"","sources":["../../src/client/client-action.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,kBAAkB,CAChC,MAAyD;IAEzD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import type {\n AgentNativeActionManifestEntry,\n AgentNativeClientAction,\n AgentNativeClientActionRuntime,\n} from \"./host-bridge.js\";\n\nexport type AgentNativeClientActionRunner<TArgs, TResult> = (\n args: TArgs,\n runtime: AgentNativeClientActionRuntime,\n) => TResult | Promise<TResult>;\n\nexport type AgentNativeClientActionDefinition<TArgs, TResult> =\n AgentNativeActionManifestEntry & {\n run: AgentNativeClientActionRunner<TArgs, TResult>;\n };\n\nexport function defineClientAction<TArgs = unknown, TResult = unknown>(\n action: AgentNativeClientActionDefinition<TArgs, TResult>,\n): AgentNativeClientAction<TArgs, TResult> {\n return action;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,QAAA,MAAM,eAAe,iDAA4B,CAAC;AAElD,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,iBAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED,QAAA,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../src/client/components/ui/tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,QAAA,MAAM,eAAe,iDAA4B,CAAC;AAElD,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,iBAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED,QAAA,MAAM,cAAc,gKAsBlB,CAAC;AAGH,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,CAAC"}
|
|
@@ -11,7 +11,7 @@ function normalizeTooltipText(text) {
|
|
|
11
11
|
}
|
|
12
12
|
const TooltipContent = React.forwardRef(({ className, sideOffset = 6, children, ...props }, ref) => {
|
|
13
13
|
const normalizedChildren = typeof children === "string" ? normalizeTooltipText(children) : children;
|
|
14
|
-
return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { ref: ref, sideOffset: sideOffset, className: cn("z-[300] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md animate-in fade-in-0 zoom-in-95", className), ...props, children: normalizedChildren }) }));
|
|
14
|
+
return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { ref: ref, sideOffset: sideOffset, "data-agent-native-tooltip": "true", className: cn("z-[300] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md animate-in fade-in-0 zoom-in-95", className), ...props, children: normalizedChildren }) }));
|
|
15
15
|
});
|
|
16
16
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
17
17
|
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, normalizeTooltipText, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../src/client/components/ui/tooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AAElD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEhD,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CACnE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAC9C,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,CACpB,8DAA8D,EAC9D,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACzE,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAGrC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3D,MAAM,kBAAkB,GACtB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3E,OAAO,CACL,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,IACvB,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../src/client/components/ui/tooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AAElD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEhD,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CACnE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAC9C,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,CACpB,8DAA8D,EAC9D,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACzE,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAGrC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3D,MAAM,kBAAkB,GACtB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3E,OAAO,CACL,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,IACvB,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,+BACI,MAAM,EAChC,SAAS,EAAE,EAAE,CACX,oJAAoJ,EACpJ,SAAS,CACV,KACG,KAAK,YAER,kBAAkB,GACM,GACH,CAC3B,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;AAElE,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,CAAC","sourcesContent":["import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../utils.js\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nfunction normalizeTooltipText(text: string): string {\n const decoded = text.replace(/\\\\u([0-9a-fA-F]{4})/g, (_match, hex) =>\n String.fromCharCode(Number.parseInt(hex, 16)),\n );\n return decoded.replace(\n /\\b([A-Za-z][A-Za-z ]*?)\\((?=(?:⌘|⌃|⌥|⇧|Ctrl|Alt|Shift|Cmd))/g,\n (_match, label) => `${label.charAt(0).toUpperCase()}${label.slice(1)} (`,\n );\n}\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, children, ...props }, ref) => {\n const normalizedChildren =\n typeof children === \"string\" ? normalizeTooltipText(children) : children;\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n data-agent-native-tooltip=\"true\"\n className={cn(\n \"z-[300] overflow-hidden rounded-md border border-border bg-popover px-2 py-1 text-[11px] text-foreground shadow-md animate-in fade-in-0 zoom-in-95\",\n className,\n )}\n {...props}\n >\n {normalizedChildren}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n});\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n normalizeTooltipText,\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { AgentComposerLayoutVariant } from "./types.js";
|
|
3
|
+
export interface AgentComposerFrameProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
rootClassName?: string;
|
|
7
|
+
layoutVariant?: AgentComposerLayoutVariant;
|
|
8
|
+
onClick?: React.MouseEventHandler<HTMLDivElement>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The single visual shell for agent chat composition.
|
|
12
|
+
*
|
|
13
|
+
* AssistantChat, PromptComposer, and host surfaces such as Agent-Native Code
|
|
14
|
+
* all render this same frame so the composer does not drift across products.
|
|
15
|
+
*/
|
|
16
|
+
export declare function AgentComposerFrame({ children, className, rootClassName, layoutVariant, onClick, }: AgentComposerFrameProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=AgentComposerFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentComposerFrame.d.ts","sourceRoot":"","sources":["../../../src/client/composer/AgentComposerFrame.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC3C,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAyB,EACzB,OAAO,GACR,EAAE,uBAAuB,2CA0BzB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ComposerPrimitive } from "@assistant-ui/react";
|
|
3
|
+
import { cn } from "../utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* The single visual shell for agent chat composition.
|
|
6
|
+
*
|
|
7
|
+
* AssistantChat, PromptComposer, and host surfaces such as Agent-Native Code
|
|
8
|
+
* all render this same frame so the composer does not drift across products.
|
|
9
|
+
*/
|
|
10
|
+
export function AgentComposerFrame({ children, className, rootClassName, layoutVariant = "default", onClick, }) {
|
|
11
|
+
return (_jsx("div", { "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "area", className: cn("agent-composer-area shrink-0 px-3 py-2", layoutVariant !== "default" && `agent-composer-area--${layoutVariant}`, className), onClick: onClick, children: _jsx(ComposerPrimitive.Root, { "data-agent-composer-variant": layoutVariant, "data-agent-composer-slot": "root", className: cn("agent-composer-root flex flex-col rounded-lg border border-input bg-background focus-within:ring-1 focus-within:ring-ring", layoutVariant !== "default" &&
|
|
12
|
+
`agent-composer-root--${layoutVariant}`, rootClassName), children: children }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=AgentComposerFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentComposerFrame.js","sourceRoot":"","sources":["../../../src/client/composer/AgentComposerFrame.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAWjC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,GAAG,SAAS,EACzB,OAAO,GACiB;IACxB,OAAO,CACL,6CAC+B,aAAa,8BACjB,MAAM,EAC/B,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,aAAa,KAAK,SAAS,IAAI,wBAAwB,aAAa,EAAE,EACtE,SAAS,CACV,EACD,OAAO,EAAE,OAAO,YAEhB,KAAC,iBAAiB,CAAC,IAAI,mCACQ,aAAa,8BACjB,MAAM,EAC/B,SAAS,EAAE,EAAE,CACX,2HAA2H,EAC3H,aAAa,KAAK,SAAS;gBACzB,wBAAwB,aAAa,EAAE,EACzC,aAAa,CACd,YAEA,QAAQ,GACc,GACrB,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { ComposerPrimitive } from \"@assistant-ui/react\";\nimport type React from \"react\";\nimport { cn } from \"../utils.js\";\nimport type { AgentComposerLayoutVariant } from \"./types.js\";\n\nexport interface AgentComposerFrameProps {\n children: React.ReactNode;\n className?: string;\n rootClassName?: string;\n layoutVariant?: AgentComposerLayoutVariant;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n}\n\n/**\n * The single visual shell for agent chat composition.\n *\n * AssistantChat, PromptComposer, and host surfaces such as Agent-Native Code\n * all render this same frame so the composer does not drift across products.\n */\nexport function AgentComposerFrame({\n children,\n className,\n rootClassName,\n layoutVariant = \"default\",\n onClick,\n}: AgentComposerFrameProps) {\n return (\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"area\"\n className={cn(\n \"agent-composer-area shrink-0 px-3 py-2\",\n layoutVariant !== \"default\" && `agent-composer-area--${layoutVariant}`,\n className,\n )}\n onClick={onClick}\n >\n <ComposerPrimitive.Root\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"root\"\n className={cn(\n \"agent-composer-root flex flex-col rounded-lg border border-input bg-background focus-within:ring-1 focus-within:ring-ring\",\n layoutVariant !== \"default\" &&\n `agent-composer-root--${layoutVariant}`,\n rootClassName,\n )}\n >\n {children}\n </ComposerPrimitive.Root>\n </div>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentionPopover.d.ts","sourceRoot":"","sources":["../../../src/client/composer/MentionPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAoBf,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAC7C,kBAAkB,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;CAC/C;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA4FD,eAAO,MAAM,cAAc,+
|
|
1
|
+
{"version":3,"file":"MentionPopover.d.ts","sourceRoot":"","sources":["../../../src/client/composer/MentionPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAoBf,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAC7C,kBAAkB,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;CAC/C;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA4FD,eAAO,MAAM,cAAc,+FA6QzB,CAAC"}
|
|
@@ -118,7 +118,7 @@ export const MentionPopover = forwardRef(function MentionPopover(props, ref) {
|
|
|
118
118
|
// Reset selection when items change
|
|
119
119
|
useEffect(() => {
|
|
120
120
|
setSelectedIndex(0);
|
|
121
|
-
}, [mentionItems, skills, query]);
|
|
121
|
+
}, [commands, mentionItems, skills, query]);
|
|
122
122
|
// Scroll selected item into view
|
|
123
123
|
useEffect(() => {
|
|
124
124
|
const container = listRef.current;
|
|
@@ -147,7 +147,7 @@ export const MentionPopover = forwardRef(function MentionPopover(props, ref) {
|
|
|
147
147
|
}));
|
|
148
148
|
if (!position)
|
|
149
149
|
return null;
|
|
150
|
-
const content = (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-[9998]", onClick: onClose }), _jsx("div", { className: "fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg", style: {
|
|
150
|
+
const content = (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-[9998]", onClick: onClose }), _jsx("div", { "data-agent-native-composer-popover": "true", className: "fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg", style: {
|
|
151
151
|
bottom: `calc(100vh - ${position.top}px + 4px)`,
|
|
152
152
|
left: Math.max(8, Math.min(position.left, window.innerWidth - 336)),
|
|
153
153
|
maxHeight: Math.min(320, position.top - 8),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentionPopover.js","sourceRoot":"","sources":["../../../src/client/composer/MentionPopover.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,qBAAqB,CAAC;AA0B7B,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;AAE5E,SAAS,eAAe,CAAC,EAAE,IAAI,EAAqB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC,KAAK,UAAU;YACb,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,gBAAgB,OAAK,SAAS,GAAI,CAAC;QAC7C,KAAK,OAAO;YACV,OAAO,KAAC,kBAAkB,OAAK,SAAS,GAAI,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC;YACE,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAqB;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAC,SAAS,OAAK,SAAS,GAAI,CAAC;QACtC,KAAK,KAAK;YACR,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,KAAC,WAAW,OAAK,SAAS,GAAI,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,KAAC,iBAAiB,OAAK,SAAS,GAAI,CAAC;QAC9C,KAAK,KAAK;YACR,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC;YACE,OAAO,KAAC,aAAa,OAAK,SAAS,GAAI,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAoB;IAC9C,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CACL,8BACG,MAAM,EACP,YACE,IAAI,EAAE,GAAG,EACT,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,iCAAiC,2BAGzC,IACH,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,eAAa,SAAS,EAAC,6CAA6C,aAClE,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cACE,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GACpC,KALM,CAAC,CAML,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,6CAA6C,aAC1D,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cAAK,SAAS,EAAC,yCAAyC,GAAG,IACvD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG;IAClC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,IAAI,EACJ,SAAS,EACT,KAAK,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,OAAO,GACR,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7C,MAAM,SAAS,GACb,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvE,+CAA+C;IAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACzC,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,qEAAqE;QACrE,yBAAyB;QACzB,MAAM,MAAM,GAAgD,EAAE,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;YAC5B,QAAQ;YACR,kBAAkB;YAClB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QACH,eAAe;QACf,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,kBAAkB;gBAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAE;aACvC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QACD,6DAA6D;QAC7D,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzB,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,oCAAoC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAElC,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CACtC,wBAAwB,aAAa,IAAI,CACf,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE;YACX,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAClD,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;QACrC,kBAAkB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,IAAI;QACjE,kBAAkB,EAAE,GAAG,EAAE;YACvB,IAAI,IAAI,KAAK,GAAG,IAAI,aAAa,IAAI,QAAQ,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAClE,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,CACd,8BAEE,cAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,OAAO,GAAI,EAC5D,cACE,SAAS,EAAC,+FAA+F,EACzG,KAAK,EAAE;oBACL,MAAM,EAAE,gBAAgB,QAAQ,CAAC,GAAG,WAAW;oBAC/C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;oBACnE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC3C,YAEA,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9B,KAAC,eAAe,KAAG,CACpB,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,qDAAqD,YACjE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CACd,KAAK,CAAC,CAAC,CAAC,CACN,kBAAkB,CACnB,CAAC,CAAC,CAAC,CACF,mBAAmB,CACpB,CACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAC7B,CAAC,CAAC,CAAC,CACF,qBAAqB,CACtB,GACG,CACP,CAAC,CAAC,CAAC,CACF,eAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,KAAK,aAC/B,SAAS,IAAI,KAAC,kBAAkB,KAAG,EACnC,IAAI,KAAK,GAAG;4BACX,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,SAAS,GAAG,CAAC,CAAC;gCAClB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpC,0BACE,cAAK,SAAS,EAAC,0FAA0F,YACtG,KAAK,CAAC,OAAO,GACV,EACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4CACxB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;4CACxB,OAAO,CACL,wCAEsB,GAAG,EACvB,SAAS,EAAE,wEACT,GAAG,KAAK,aAAa;oDACnB,CAAC,CAAC,kCAAkC;oDACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,aAEpC,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EACpC,eAAM,SAAS,EAAC,kBAAkB,YAC/B,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,uEAAuE,YACpF,IAAI,CAAC,WAAW,GACZ,CACR,KAlBI,IAAI,CAAC,EAAE,CAmBL,CACV,CAAC;wCACJ,CAAC,CAAC,KA7BM,KAAK,CAAC,OAAO,CA8BjB,CACP,CAAC,CAAC;4BACL,CAAC,CAAC,EAAE;4BACN,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,GAAG,GAAG,CAAC,CAAC;gCACZ,OAAO,CACL,8BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,0BACE,cAAK,SAAS,EAAC,0FAA0F,yBAEnG,EACL,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oDACpB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,wEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,aAErC,KAAC,WAAW,IAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAI,EAC/B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,gBAAM,SAAS,EAAC,wBAAwB,kBACpC,GAAG,CAAC,IAAI,IACL,EACN,GAAG,CAAC,WAAW,IAAI,CAClB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,GAAG,CAAC,WAAW,GACX,CACR,IACI,KApBF,GAAG,CAAC,IAAI,CAqBN,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,EACA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,0BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,0FAA0F,uBAEnG,CACP,EACC,MAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oDACvC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,wEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAEnC,KAAC,UAAU,OAAK,SAAS,GAAI,EAC7B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,wBAAwB,YACrC,KAAK,CAAC,IAAI,GACN,EACN,KAAK,CAAC,WAAW,IAAI,CACpB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,KAAK,CAAC,WAAW,GACb,CACR,IACI,KApBF,KAAK,CAAC,IAAI,CAqBR,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,IACA,CACJ,CAAC;4BACJ,CAAC,CAAC,EAAE,IACJ,CACP,GACG,IACL,CACJ,CAAC;IAEF,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC","sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n useImperativeHandle,\n forwardRef,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconFile,\n IconFolder,\n IconStack2,\n IconFileText,\n IconCheckbox,\n IconMail,\n IconUser,\n IconPresentation,\n IconMessageChatbot,\n IconTrash,\n IconPlus,\n IconHelp,\n IconHistory,\n IconTerminal2,\n IconClipboardList,\n IconPencil,\n} from \"@tabler/icons-react\";\nimport type { MentionItem, SkillResult, SlashCommand } from \"./types.js\";\n\nexport interface MentionPopoverRef {\n moveUp: () => void;\n moveDown: () => void;\n getSelectedIndex: () => number;\n getSelectedMention: () => MentionItem | null;\n getSelectedCommand: () => SlashCommand | null;\n}\n\ninterface MentionPopoverProps {\n type: \"@\" | \"/\";\n position: { top: number; left: number } | null;\n mentionItems: MentionItem[];\n skills: SkillResult[];\n commands?: SlashCommand[];\n hint?: string;\n isLoading: boolean;\n query: string;\n onSelectMention: (item: MentionItem) => void;\n onSelectSkill: (skill: SkillResult) => void;\n onSelectCommand?: (command: SlashCommand) => void;\n onClose: () => void;\n}\n\nconst iconProps = { size: 14, className: \"shrink-0 text-muted-foreground\" };\n\nfunction MentionItemIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"folder\":\n return <IconFolder {...iconProps} />;\n case \"document\":\n return <IconFileText {...iconProps} />;\n case \"form\":\n return <IconCheckbox {...iconProps} />;\n case \"email\":\n return <IconMail {...iconProps} />;\n case \"user\":\n return <IconUser {...iconProps} />;\n case \"deck\":\n return <IconPresentation {...iconProps} />;\n case \"agent\":\n return <IconMessageChatbot {...iconProps} />;\n case \"file\":\n return <IconFile {...iconProps} />;\n default:\n return <IconFile {...iconProps} />;\n }\n}\n\nfunction CommandIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"clear\":\n return <IconTrash {...iconProps} />;\n case \"new\":\n return <IconPlus {...iconProps} />;\n case \"help\":\n return <IconHelp {...iconProps} />;\n case \"history\":\n return <IconHistory {...iconProps} />;\n case \"plan\":\n return <IconClipboardList {...iconProps} />;\n case \"act\":\n return <IconPencil {...iconProps} />;\n default:\n return <IconTerminal2 {...iconProps} />;\n }\n}\n\nfunction HintWithLink({ hint }: { hint: string }) {\n // If hint contains a URL, split it and render the URL as a link\n const urlMatch = hint.match(/(https?:\\/\\/\\S+)/);\n if (!urlMatch) return <>{hint}</>;\n const before = hint.slice(0, urlMatch.index);\n const url = urlMatch[1];\n return (\n <>\n {before}\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline hover:text-foreground\"\n >\n Learn more\n </a>\n </>\n );\n}\n\nfunction LoadingSkeleton() {\n return (\n <div className=\"space-y-1 p-1\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nfunction LoadingSkeletonRow() {\n return (\n <div className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted animate-pulse\" />\n </div>\n );\n}\n\nexport const MentionPopover = forwardRef<\n MentionPopoverRef,\n MentionPopoverProps\n>(function MentionPopover(props, ref) {\n const {\n type,\n position,\n mentionItems,\n skills,\n commands = [],\n hint,\n isLoading,\n query,\n onSelectMention,\n onSelectSkill,\n onSelectCommand,\n onClose,\n } = props;\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n const listRef = useRef<HTMLDivElement>(null);\n\n const itemCount =\n type === \"@\" ? mentionItems.length : commands.length + skills.length;\n\n // Group mention items by section for @ popover\n const groupedMentions = React.useMemo(() => {\n if (type !== \"@\") return [];\n const groups = new Map<string, MentionItem[]>();\n for (const item of mentionItems) {\n const section = item.section || \"Other\";\n if (!groups.has(section)) groups.set(section, []);\n groups.get(section)!.push(item);\n }\n // Sort: Agents first, then Connected Agents, then template-specific,\n // then Files, then Other\n const sorted: { section: string; items: MentionItem[] }[] = [];\n const knownSections = new Set([\n \"Agents\",\n \"Connected Agents\",\n \"Files\",\n \"Other\",\n ]);\n // Agents first\n if (groups.has(\"Agents\")) {\n sorted.push({ section: \"Agents\", items: groups.get(\"Agents\")! });\n groups.delete(\"Agents\");\n }\n if (groups.has(\"Connected Agents\")) {\n sorted.push({\n section: \"Connected Agents\",\n items: groups.get(\"Connected Agents\")!,\n });\n groups.delete(\"Connected Agents\");\n }\n // Template-specific sections (anything not in knownSections)\n for (const [section, items] of groups) {\n if (!knownSections.has(section)) {\n sorted.push({ section, items });\n }\n }\n // Files\n if (groups.has(\"Files\")) {\n sorted.push({ section: \"Files\", items: groups.get(\"Files\")! });\n }\n // Other\n if (groups.has(\"Other\")) {\n sorted.push({ section: \"Other\", items: groups.get(\"Other\")! });\n }\n return sorted;\n }, [type, mentionItems]);\n\n // Flat list of mention items in section order for keyboard index tracking\n const flatMentionItems = React.useMemo(() => {\n return groupedMentions.flatMap((g) => g.items);\n }, [groupedMentions]);\n\n // Reset selection when items change\n useEffect(() => {\n setSelectedIndex(0);\n }, [mentionItems, skills, query]);\n\n // Scroll selected item into view\n useEffect(() => {\n const container = listRef.current;\n if (!container) return;\n // Find the actual item element by data attribute\n const selected = container.querySelector(\n `[data-mention-index=\"${selectedIndex}\"]`,\n ) as HTMLElement | undefined;\n if (selected) {\n selected.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useImperativeHandle(ref, () => ({\n moveUp: () => {\n setSelectedIndex((prev) =>\n prev <= 0 ? Math.max(0, itemCount - 1) : prev - 1,\n );\n },\n moveDown: () => {\n setSelectedIndex((prev) => (prev >= itemCount - 1 ? 0 : prev + 1));\n },\n getSelectedIndex: () => selectedIndex,\n getSelectedMention: () => flatMentionItems[selectedIndex] ?? null,\n getSelectedCommand: () => {\n if (type !== \"/\" || selectedIndex >= commands.length) return null;\n return commands[selectedIndex] ?? null;\n },\n }));\n\n if (!position) return null;\n\n const content = (\n <>\n {/* Backdrop to capture outside clicks */}\n <div className=\"fixed inset-0 z-[9998]\" onClick={onClose} />\n <div\n className=\"fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg\"\n style={{\n bottom: `calc(100vh - ${position.top}px + 4px)`,\n left: Math.max(8, Math.min(position.left, window.innerWidth - 336)),\n maxHeight: Math.min(320, position.top - 8),\n }}\n >\n {isLoading && itemCount === 0 ? (\n <LoadingSkeleton />\n ) : itemCount === 0 ? (\n <div className=\"px-3 py-4 text-center text-xs text-muted-foreground\">\n {type === \"@\" ? (\n query ? (\n \"No results found\"\n ) : (\n \"Type to search...\"\n )\n ) : hint ? (\n <HintWithLink hint={hint} />\n ) : (\n \"No skills available\"\n )}\n </div>\n ) : (\n <div ref={listRef} className=\"p-1\">\n {isLoading && <LoadingSkeletonRow />}\n {type === \"@\"\n ? (() => {\n let flatIndex = 0;\n return groupedMentions.map((group) => (\n <div key={group.section}>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n {group.section}\n </div>\n {group.items.map((item) => {\n const idx = flatIndex++;\n return (\n <button\n key={item.id}\n data-mention-index={idx}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n idx === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(idx)}\n onClick={() => onSelectMention(item)}\n >\n <MentionItemIcon icon={item.icon} />\n <span className=\"truncate text-sm\">\n {item.label}\n </span>\n {item.description && (\n <span className=\"ml-auto shrink-0 truncate max-w-[160px] text-xs text-muted-foreground\">\n {item.description}\n </span>\n )}\n </button>\n );\n })}\n </div>\n ));\n })()\n : (() => {\n let idx = 0;\n return (\n <>\n {commands.length > 0 && (\n <div>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Commands\n </div>\n {commands.map((cmd) => {\n const i = idx++;\n return (\n <button\n key={cmd.name}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectCommand?.(cmd)}\n >\n <CommandIcon icon={cmd.icon} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n /{cmd.name}\n </span>\n {cmd.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {cmd.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n {skills.length > 0 && (\n <div>\n {commands.length > 0 && (\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Skills\n </div>\n )}\n {(skills as SkillResult[]).map((skill) => {\n const i = idx++;\n return (\n <button\n key={skill.path}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectSkill(skill)}\n >\n <IconStack2 {...iconProps} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n {skill.name}\n </span>\n {skill.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {skill.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </>\n );\n })()}\n </div>\n )}\n </div>\n </>\n );\n\n return createPortal(content, document.body);\n});\n"]}
|
|
1
|
+
{"version":3,"file":"MentionPopover.js","sourceRoot":"","sources":["../../../src/client/composer/MentionPopover.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,qBAAqB,CAAC;AA0B7B,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC;AAE5E,SAAS,eAAe,CAAC,EAAE,IAAI,EAAqB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC,KAAK,UAAU;YACb,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,MAAM;YACT,OAAO,KAAC,YAAY,OAAK,SAAS,GAAI,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,gBAAgB,OAAK,SAAS,GAAI,CAAC;QAC7C,KAAK,OAAO;YACV,OAAO,KAAC,kBAAkB,OAAK,SAAS,GAAI,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC;YACE,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAqB;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAC,SAAS,OAAK,SAAS,GAAI,CAAC;QACtC,KAAK,KAAK;YACR,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,KAAC,QAAQ,OAAK,SAAS,GAAI,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,KAAC,WAAW,OAAK,SAAS,GAAI,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,KAAC,iBAAiB,OAAK,SAAS,GAAI,CAAC;QAC9C,KAAK,KAAK;YACR,OAAO,KAAC,UAAU,OAAK,SAAS,GAAI,CAAC;QACvC;YACE,OAAO,KAAC,aAAa,OAAK,SAAS,GAAI,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAoB;IAC9C,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CACL,8BACG,MAAM,EACP,YACE,IAAI,EAAE,GAAG,EACT,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,iCAAiC,2BAGzC,IACH,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,eAAa,SAAS,EAAC,6CAA6C,aAClE,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cACE,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GACpC,KALM,CAAC,CAML,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,6CAA6C,aAC1D,cAAK,SAAS,EAAC,4CAA4C,GAAG,EAC9D,cAAK,SAAS,EAAC,yCAAyC,GAAG,IACvD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAGtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG;IAClC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,IAAI,EACJ,SAAS,EACT,KAAK,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,OAAO,GACR,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7C,MAAM,SAAS,GACb,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEvE,+CAA+C;IAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACzC,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,qEAAqE;QACrE,yBAAyB;QACzB,MAAM,MAAM,GAAgD,EAAE,CAAC;QAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;YAC5B,QAAQ;YACR,kBAAkB;YAClB,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QACH,eAAe;QACf,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,kBAAkB;gBAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAE;aACvC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpC,CAAC;QACD,6DAA6D;QAC7D,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,QAAQ;QACR,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzB,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,oCAAoC;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5C,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,iDAAiD;QACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CACtC,wBAAwB,aAAa,IAAI,CACf,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE;YACX,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAClD,CAAC;QACJ,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,aAAa;QACrC,kBAAkB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,IAAI;QACjE,kBAAkB,EAAE,GAAG,EAAE;YACvB,IAAI,IAAI,KAAK,GAAG,IAAI,aAAa,IAAI,QAAQ,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAClE,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;QACzC,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,CACd,8BAEE,cAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,OAAO,GAAI,EAC5D,oDACqC,MAAM,EACzC,SAAS,EAAC,+FAA+F,EACzG,KAAK,EAAE;oBACL,MAAM,EAAE,gBAAgB,QAAQ,CAAC,GAAG,WAAW;oBAC/C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;oBACnE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;iBAC3C,YAEA,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9B,KAAC,eAAe,KAAG,CACpB,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,qDAAqD,YACjE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CACd,KAAK,CAAC,CAAC,CAAC,CACN,kBAAkB,CACnB,CAAC,CAAC,CAAC,CACF,mBAAmB,CACpB,CACF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAC7B,CAAC,CAAC,CAAC,CACF,qBAAqB,CACtB,GACG,CACP,CAAC,CAAC,CAAC,CACF,eAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,KAAK,aAC/B,SAAS,IAAI,KAAC,kBAAkB,KAAG,EACnC,IAAI,KAAK,GAAG;4BACX,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,SAAS,GAAG,CAAC,CAAC;gCAClB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpC,0BACE,cAAK,SAAS,EAAC,0FAA0F,YACtG,KAAK,CAAC,OAAO,GACV,EACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4CACxB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;4CACxB,OAAO,CACL,wCAEsB,GAAG,EACvB,SAAS,EAAE,wEACT,GAAG,KAAK,aAAa;oDACnB,CAAC,CAAC,kCAAkC;oDACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,aAEpC,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,EACpC,eAAM,SAAS,EAAC,kBAAkB,YAC/B,IAAI,CAAC,KAAK,GACN,EACN,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,uEAAuE,YACpF,IAAI,CAAC,WAAW,GACZ,CACR,KAlBI,IAAI,CAAC,EAAE,CAmBL,CACV,CAAC;wCACJ,CAAC,CAAC,KA7BM,KAAK,CAAC,OAAO,CA8BjB,CACP,CAAC,CAAC;4BACL,CAAC,CAAC,EAAE;4BACN,CAAC,CAAC,CAAC,GAAG,EAAE;gCACJ,IAAI,GAAG,GAAG,CAAC,CAAC;gCACZ,OAAO,CACL,8BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,0BACE,cAAK,SAAS,EAAC,0FAA0F,yBAEnG,EACL,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oDACpB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,wEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,aAErC,KAAC,WAAW,IAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAI,EAC/B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,gBAAM,SAAS,EAAC,wBAAwB,kBACpC,GAAG,CAAC,IAAI,IACL,EACN,GAAG,CAAC,WAAW,IAAI,CAClB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,GAAG,CAAC,WAAW,GACX,CACR,IACI,KApBF,GAAG,CAAC,IAAI,CAqBN,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,EACA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,0BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,0FAA0F,uBAEnG,CACP,EACC,MAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oDACvC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;oDAChB,OAAO,CACL,wCAEsB,CAAC,EACrB,SAAS,EAAE,wEACT,CAAC,KAAK,aAAa;4DACjB,CAAC,CAAC,kCAAkC;4DACpC,CAAC,CAAC,oBACN,EAAE,EACF,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAEnC,KAAC,UAAU,OAAK,SAAS,GAAI,EAC7B,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,wBAAwB,YACrC,KAAK,CAAC,IAAI,GACN,EACN,KAAK,CAAC,WAAW,IAAI,CACpB,eAAM,SAAS,EAAC,8CAA8C,YAC3D,KAAK,CAAC,WAAW,GACb,CACR,IACI,KApBF,KAAK,CAAC,IAAI,CAqBR,CACV,CAAC;gDACJ,CAAC,CAAC,IACE,CACP,IACA,CACJ,CAAC;4BACJ,CAAC,CAAC,EAAE,IACJ,CACP,GACG,IACL,CACJ,CAAC;IAEF,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC","sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n useImperativeHandle,\n forwardRef,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconFile,\n IconFolder,\n IconStack2,\n IconFileText,\n IconCheckbox,\n IconMail,\n IconUser,\n IconPresentation,\n IconMessageChatbot,\n IconTrash,\n IconPlus,\n IconHelp,\n IconHistory,\n IconTerminal2,\n IconClipboardList,\n IconPencil,\n} from \"@tabler/icons-react\";\nimport type { MentionItem, SkillResult, SlashCommand } from \"./types.js\";\n\nexport interface MentionPopoverRef {\n moveUp: () => void;\n moveDown: () => void;\n getSelectedIndex: () => number;\n getSelectedMention: () => MentionItem | null;\n getSelectedCommand: () => SlashCommand | null;\n}\n\ninterface MentionPopoverProps {\n type: \"@\" | \"/\";\n position: { top: number; left: number } | null;\n mentionItems: MentionItem[];\n skills: SkillResult[];\n commands?: SlashCommand[];\n hint?: string;\n isLoading: boolean;\n query: string;\n onSelectMention: (item: MentionItem) => void;\n onSelectSkill: (skill: SkillResult) => void;\n onSelectCommand?: (command: SlashCommand) => void;\n onClose: () => void;\n}\n\nconst iconProps = { size: 14, className: \"shrink-0 text-muted-foreground\" };\n\nfunction MentionItemIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"folder\":\n return <IconFolder {...iconProps} />;\n case \"document\":\n return <IconFileText {...iconProps} />;\n case \"form\":\n return <IconCheckbox {...iconProps} />;\n case \"email\":\n return <IconMail {...iconProps} />;\n case \"user\":\n return <IconUser {...iconProps} />;\n case \"deck\":\n return <IconPresentation {...iconProps} />;\n case \"agent\":\n return <IconMessageChatbot {...iconProps} />;\n case \"file\":\n return <IconFile {...iconProps} />;\n default:\n return <IconFile {...iconProps} />;\n }\n}\n\nfunction CommandIcon({ icon }: { icon?: string }) {\n switch (icon) {\n case \"clear\":\n return <IconTrash {...iconProps} />;\n case \"new\":\n return <IconPlus {...iconProps} />;\n case \"help\":\n return <IconHelp {...iconProps} />;\n case \"history\":\n return <IconHistory {...iconProps} />;\n case \"plan\":\n return <IconClipboardList {...iconProps} />;\n case \"act\":\n return <IconPencil {...iconProps} />;\n default:\n return <IconTerminal2 {...iconProps} />;\n }\n}\n\nfunction HintWithLink({ hint }: { hint: string }) {\n // If hint contains a URL, split it and render the URL as a link\n const urlMatch = hint.match(/(https?:\\/\\/\\S+)/);\n if (!urlMatch) return <>{hint}</>;\n const before = hint.slice(0, urlMatch.index);\n const url = urlMatch[1];\n return (\n <>\n {before}\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline hover:text-foreground\"\n >\n Learn more\n </a>\n </>\n );\n}\n\nfunction LoadingSkeleton() {\n return (\n <div className=\"space-y-1 p-1\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div\n className=\"h-3 rounded bg-muted animate-pulse\"\n style={{ width: `${60 + i * 20}px` }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nfunction LoadingSkeletonRow() {\n return (\n <div className=\"flex items-center gap-2 rounded px-2 py-1.5\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted animate-pulse\" />\n </div>\n );\n}\n\nexport const MentionPopover = forwardRef<\n MentionPopoverRef,\n MentionPopoverProps\n>(function MentionPopover(props, ref) {\n const {\n type,\n position,\n mentionItems,\n skills,\n commands = [],\n hint,\n isLoading,\n query,\n onSelectMention,\n onSelectSkill,\n onSelectCommand,\n onClose,\n } = props;\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n const listRef = useRef<HTMLDivElement>(null);\n\n const itemCount =\n type === \"@\" ? mentionItems.length : commands.length + skills.length;\n\n // Group mention items by section for @ popover\n const groupedMentions = React.useMemo(() => {\n if (type !== \"@\") return [];\n const groups = new Map<string, MentionItem[]>();\n for (const item of mentionItems) {\n const section = item.section || \"Other\";\n if (!groups.has(section)) groups.set(section, []);\n groups.get(section)!.push(item);\n }\n // Sort: Agents first, then Connected Agents, then template-specific,\n // then Files, then Other\n const sorted: { section: string; items: MentionItem[] }[] = [];\n const knownSections = new Set([\n \"Agents\",\n \"Connected Agents\",\n \"Files\",\n \"Other\",\n ]);\n // Agents first\n if (groups.has(\"Agents\")) {\n sorted.push({ section: \"Agents\", items: groups.get(\"Agents\")! });\n groups.delete(\"Agents\");\n }\n if (groups.has(\"Connected Agents\")) {\n sorted.push({\n section: \"Connected Agents\",\n items: groups.get(\"Connected Agents\")!,\n });\n groups.delete(\"Connected Agents\");\n }\n // Template-specific sections (anything not in knownSections)\n for (const [section, items] of groups) {\n if (!knownSections.has(section)) {\n sorted.push({ section, items });\n }\n }\n // Files\n if (groups.has(\"Files\")) {\n sorted.push({ section: \"Files\", items: groups.get(\"Files\")! });\n }\n // Other\n if (groups.has(\"Other\")) {\n sorted.push({ section: \"Other\", items: groups.get(\"Other\")! });\n }\n return sorted;\n }, [type, mentionItems]);\n\n // Flat list of mention items in section order for keyboard index tracking\n const flatMentionItems = React.useMemo(() => {\n return groupedMentions.flatMap((g) => g.items);\n }, [groupedMentions]);\n\n // Reset selection when items change\n useEffect(() => {\n setSelectedIndex(0);\n }, [commands, mentionItems, skills, query]);\n\n // Scroll selected item into view\n useEffect(() => {\n const container = listRef.current;\n if (!container) return;\n // Find the actual item element by data attribute\n const selected = container.querySelector(\n `[data-mention-index=\"${selectedIndex}\"]`,\n ) as HTMLElement | undefined;\n if (selected) {\n selected.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useImperativeHandle(ref, () => ({\n moveUp: () => {\n setSelectedIndex((prev) =>\n prev <= 0 ? Math.max(0, itemCount - 1) : prev - 1,\n );\n },\n moveDown: () => {\n setSelectedIndex((prev) => (prev >= itemCount - 1 ? 0 : prev + 1));\n },\n getSelectedIndex: () => selectedIndex,\n getSelectedMention: () => flatMentionItems[selectedIndex] ?? null,\n getSelectedCommand: () => {\n if (type !== \"/\" || selectedIndex >= commands.length) return null;\n return commands[selectedIndex] ?? null;\n },\n }));\n\n if (!position) return null;\n\n const content = (\n <>\n {/* Backdrop to capture outside clicks */}\n <div className=\"fixed inset-0 z-[9998]\" onClick={onClose} />\n <div\n data-agent-native-composer-popover=\"true\"\n className=\"fixed z-[9999] w-[320px] overflow-y-auto rounded-lg border border-border bg-popover shadow-lg\"\n style={{\n bottom: `calc(100vh - ${position.top}px + 4px)`,\n left: Math.max(8, Math.min(position.left, window.innerWidth - 336)),\n maxHeight: Math.min(320, position.top - 8),\n }}\n >\n {isLoading && itemCount === 0 ? (\n <LoadingSkeleton />\n ) : itemCount === 0 ? (\n <div className=\"px-3 py-4 text-center text-xs text-muted-foreground\">\n {type === \"@\" ? (\n query ? (\n \"No results found\"\n ) : (\n \"Type to search...\"\n )\n ) : hint ? (\n <HintWithLink hint={hint} />\n ) : (\n \"No skills available\"\n )}\n </div>\n ) : (\n <div ref={listRef} className=\"p-1\">\n {isLoading && <LoadingSkeletonRow />}\n {type === \"@\"\n ? (() => {\n let flatIndex = 0;\n return groupedMentions.map((group) => (\n <div key={group.section}>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n {group.section}\n </div>\n {group.items.map((item) => {\n const idx = flatIndex++;\n return (\n <button\n key={item.id}\n data-mention-index={idx}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n idx === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(idx)}\n onClick={() => onSelectMention(item)}\n >\n <MentionItemIcon icon={item.icon} />\n <span className=\"truncate text-sm\">\n {item.label}\n </span>\n {item.description && (\n <span className=\"ml-auto shrink-0 truncate max-w-[160px] text-xs text-muted-foreground\">\n {item.description}\n </span>\n )}\n </button>\n );\n })}\n </div>\n ));\n })()\n : (() => {\n let idx = 0;\n return (\n <>\n {commands.length > 0 && (\n <div>\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Commands\n </div>\n {commands.map((cmd) => {\n const i = idx++;\n return (\n <button\n key={cmd.name}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectCommand?.(cmd)}\n >\n <CommandIcon icon={cmd.icon} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n /{cmd.name}\n </span>\n {cmd.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {cmd.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n {skills.length > 0 && (\n <div>\n {commands.length > 0 && (\n <div className=\"px-2 pt-2 pb-1 text-[10px] font-medium text-muted-foreground/70 uppercase tracking-wider\">\n Skills\n </div>\n )}\n {(skills as SkillResult[]).map((skill) => {\n const i = idx++;\n return (\n <button\n key={skill.path}\n data-mention-index={i}\n className={`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm ${\n i === selectedIndex\n ? \"bg-accent text-accent-foreground\"\n : \"hover:bg-accent/50\"\n }`}\n onMouseEnter={() => setSelectedIndex(i)}\n onClick={() => onSelectSkill(skill)}\n >\n <IconStack2 {...iconProps} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">\n {skill.name}\n </span>\n {skill.description && (\n <span className=\"block truncate text-xs text-muted-foreground\">\n {skill.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </>\n );\n })()}\n </div>\n )}\n </div>\n </>\n );\n\n return createPortal(content, document.body);\n});\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type Ref } from "react";
|
|
1
|
+
import { type Ref, type ReactNode } from "react";
|
|
2
2
|
import { type TiptapComposerHandle } from "./TiptapComposer.js";
|
|
3
|
-
import type { Reference } from "./types.js";
|
|
3
|
+
import type { AgentComposerLayoutVariant, Reference, SkillResult, SlashCommand } from "./types.js";
|
|
4
|
+
import { type EngineModelGroup } from "../use-chat-models.js";
|
|
4
5
|
import type { ReasoningEffort } from "../../shared/reasoning-effort.js";
|
|
5
6
|
/**
|
|
6
7
|
* Files the user attached via the "+" button in PromptComposer. The host owns
|
|
@@ -30,6 +31,38 @@ export interface PromptComposerProps {
|
|
|
30
31
|
voiceEnabled?: boolean;
|
|
31
32
|
/** Show file upload controls and pass submitted files to onSubmit (default: true). */
|
|
32
33
|
attachmentsEnabled?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Controls the shared "+" affordance. Defaults to upload-only for standalone
|
|
36
|
+
* prompt forms; chat surfaces can opt into the full sidebar menu.
|
|
37
|
+
*/
|
|
38
|
+
plusMenuMode?: "full" | "upload-only" | "hidden";
|
|
39
|
+
/** Programmatically seed the composer with plain text. */
|
|
40
|
+
initialText?: string;
|
|
41
|
+
/** Stable key used to re-apply `initialText` when the host picks a preset. */
|
|
42
|
+
initialTextKey?: string | number;
|
|
43
|
+
/** Optional host-owned control rendered directly after the "+" button. */
|
|
44
|
+
modeControl?: ReactNode;
|
|
45
|
+
/** Explicit host-owned toolbar slot rendered directly after the "+" button. */
|
|
46
|
+
toolbarSlot?: ReactNode;
|
|
47
|
+
/** Shared sizing/layout variant for host surfaces. Default keeps sidebar behavior. */
|
|
48
|
+
layoutVariant?: AgentComposerLayoutVariant;
|
|
49
|
+
/** Additional slash commands surfaced in the shared / menu. */
|
|
50
|
+
slashCommands?: SlashCommand[];
|
|
51
|
+
/** Additional slash skills surfaced in the shared / menu. */
|
|
52
|
+
slashSkills?: SkillResult[];
|
|
53
|
+
/** Include built-in sidebar slash commands like /clear and /help. Default true. */
|
|
54
|
+
includeDefaultSlashCommands?: boolean;
|
|
55
|
+
/** Include app-discovered skills from the default agent endpoint. Default true. */
|
|
56
|
+
includeDefaultSlashSkills?: boolean;
|
|
57
|
+
/** Called when a slash command from the shared / menu is executed. */
|
|
58
|
+
onSlashCommand?: (command: string) => void;
|
|
59
|
+
/** External model list for hosts that already resolve models outside the app. */
|
|
60
|
+
availableModels?: EngineModelGroup[];
|
|
61
|
+
selectedModel?: string;
|
|
62
|
+
selectedEngine?: string;
|
|
63
|
+
selectedEffort?: ReasoningEffort;
|
|
64
|
+
onModelChange?: (model: string, engine: string) => void;
|
|
65
|
+
onEffortChange?: (effort: ReasoningEffort) => void;
|
|
33
66
|
/** Called whenever the plain editor text changes. */
|
|
34
67
|
onTextChange?: (text: string) => void;
|
|
35
68
|
/** Imperative handle for focusing the composer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"PromptComposer.d.ts","sourceRoot":"","sources":["../../../src/client/composer/PromptComposer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
3
|
-
import { AssistantRuntimeProvider,
|
|
3
|
+
import { AssistantRuntimeProvider, ThreadPrimitive, useAui, useComposer, useLocalRuntime, } from "@assistant-ui/react";
|
|
4
4
|
import { CompositeAttachmentAdapter, SimpleImageAttachmentAdapter, } from "@assistant-ui/react";
|
|
5
5
|
import { IconX } from "@tabler/icons-react";
|
|
6
6
|
import { cn } from "../utils.js";
|
|
7
|
+
import { AgentComposerFrame } from "./AgentComposerFrame.js";
|
|
7
8
|
import { TiptapComposer } from "./TiptapComposer.js";
|
|
8
9
|
import { useChatModels } from "../use-chat-models.js";
|
|
10
|
+
import { TooltipProvider } from "../components/ui/tooltip.js";
|
|
9
11
|
import { isPastedTextAttachmentName } from "./pasted-text.js";
|
|
10
12
|
import { PastedTextChip } from "./PastedTextChip.js";
|
|
11
13
|
import { PROMPT_DOCUMENT_ATTACHMENT_ACCEPT, TextAttachmentAdapter, } from "./attachment-accept.js";
|
|
@@ -161,7 +163,7 @@ function AttachmentChip({ attachment, onRemove, }) {
|
|
|
161
163
|
return _jsx(PastedTextChip, { attachment: attachment, onRemove: onRemove });
|
|
162
164
|
}
|
|
163
165
|
if (src) {
|
|
164
|
-
return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => setPreviewOpen(true), "aria-label": `Preview ${attachment.name}`, className: "group relative flex h-16 min-w-16 max-w-28 cursor-zoom-in items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50", children: [_jsx("img", { src: src, alt: attachment.name, className: "max-h-full max-w-full object-contain p-1" }), _jsx("span", { role: "button", tabIndex: 0, onClick: (e) => {
|
|
166
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => setPreviewOpen(true), "aria-label": `Preview ${attachment.name}`, className: "agent-composer-attachment-image group relative flex h-16 min-w-16 max-w-28 cursor-zoom-in items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50", children: [_jsx("img", { src: src, alt: attachment.name, className: "max-h-full max-w-full object-contain p-1" }), _jsx("span", { role: "button", tabIndex: 0, onClick: (e) => {
|
|
165
167
|
e.stopPropagation();
|
|
166
168
|
onRemove(attachment.id);
|
|
167
169
|
}, onKeyDown: (e) => {
|
|
@@ -172,7 +174,7 @@ function AttachmentChip({ attachment, onRemove, }) {
|
|
|
172
174
|
}
|
|
173
175
|
}, "aria-label": `Remove ${attachment.name}`, className: "absolute right-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3 w-3" }) })] }), previewOpen ? (_jsx(ImagePreviewLightbox, { src: src, alt: attachment.name, onClose: () => setPreviewOpen(false) })) : null] }));
|
|
174
176
|
}
|
|
175
|
-
return (_jsxs("div", { className: "group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs", children: [_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground", children: attachment.name.split(".").pop() || "file" }), _jsx("span", { className: "min-w-0 truncate font-medium", children: attachment.name }), _jsx("button", { type: "button", onClick: () => onRemove(attachment.id), "aria-label": `Remove ${attachment.name}`, className: "flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3 w-3" }) })] }));
|
|
177
|
+
return (_jsxs("div", { className: "agent-composer-attachment-chip group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs", children: [_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background text-[9px] font-semibold uppercase text-muted-foreground", children: attachment.name.split(".").pop() || "file" }), _jsx("span", { className: "min-w-0 truncate font-medium", children: attachment.name }), _jsx("button", { type: "button", onClick: () => onRemove(attachment.id), "aria-label": `Remove ${attachment.name}`, className: "flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground", children: _jsx(IconX, { className: "h-3 w-3" }) })] }));
|
|
176
178
|
}
|
|
177
179
|
function PromptAttachmentStrip() {
|
|
178
180
|
const attachments = useComposer((state) => state.attachments);
|
|
@@ -182,12 +184,30 @@ function PromptAttachmentStrip() {
|
|
|
182
184
|
}, [aui]);
|
|
183
185
|
if (attachments.length === 0)
|
|
184
186
|
return null;
|
|
185
|
-
return (_jsx("div", { className: "flex flex-wrap gap-2 px-2 pt-2", children: attachments.map((attachment) => (_jsx(AttachmentChip, { attachment: attachment, onRemove: handleRemove }, attachment.id))) }));
|
|
187
|
+
return (_jsx("div", { className: "agent-composer-attachment-strip flex flex-wrap gap-2 px-2 pt-2", children: attachments.map((attachment) => (_jsx(AttachmentChip, { attachment: attachment, onRemove: handleRemove }, attachment.id))) }));
|
|
186
188
|
}
|
|
187
|
-
function PromptComposerInner({ onSubmit, placeholder, disabled, autoFocus, className, draftScope, preserveDraftOnSubmit = false, showModelSelector = true, voiceEnabled = true, attachmentsEnabled = true, onTextChange, composerRef, }) {
|
|
189
|
+
function PromptComposerInner({ onSubmit, placeholder, disabled, autoFocus, className, draftScope, preserveDraftOnSubmit = false, showModelSelector = true, voiceEnabled = true, attachmentsEnabled = true, plusMenuMode, initialText, initialTextKey, modeControl, toolbarSlot, layoutVariant, slashCommands, slashSkills, includeDefaultSlashCommands, includeDefaultSlashSkills, onSlashCommand, availableModels, selectedModel, selectedEngine, selectedEffort, onModelChange, onEffortChange, onTextChange, composerRef, }) {
|
|
188
190
|
const localRef = useRef(null);
|
|
189
191
|
const handleRef = composerRef ?? localRef;
|
|
190
192
|
const models = useChatModels();
|
|
193
|
+
const composerModel = showModelSelector
|
|
194
|
+
? (selectedModel ?? models.selectedModel)
|
|
195
|
+
: undefined;
|
|
196
|
+
const composerEngine = showModelSelector
|
|
197
|
+
? (selectedEngine ?? models.selectedEngine)
|
|
198
|
+
: undefined;
|
|
199
|
+
const composerEffort = showModelSelector
|
|
200
|
+
? (selectedEffort ?? models.selectedEffort)
|
|
201
|
+
: undefined;
|
|
202
|
+
const composerModelGroups = showModelSelector
|
|
203
|
+
? (availableModels ?? models.availableModels)
|
|
204
|
+
: undefined;
|
|
205
|
+
const handleModelChange = showModelSelector
|
|
206
|
+
? (onModelChange ?? models.onModelChange)
|
|
207
|
+
: undefined;
|
|
208
|
+
const handleEffortChange = showModelSelector
|
|
209
|
+
? (onEffortChange ?? models.onEffortChange)
|
|
210
|
+
: undefined;
|
|
191
211
|
useEffect(() => {
|
|
192
212
|
if (!autoFocus)
|
|
193
213
|
return;
|
|
@@ -211,18 +231,12 @@ function PromptComposerInner({ onSubmit, placeholder, disabled, autoFocus, class
|
|
|
211
231
|
attachments,
|
|
212
232
|
});
|
|
213
233
|
onSubmit(finalText, files, references, {
|
|
214
|
-
model:
|
|
215
|
-
engine:
|
|
216
|
-
effort:
|
|
234
|
+
model: composerModel,
|
|
235
|
+
engine: composerEngine,
|
|
236
|
+
effort: composerEffort,
|
|
217
237
|
});
|
|
218
|
-
}, [
|
|
219
|
-
|
|
220
|
-
models.selectedEngine,
|
|
221
|
-
models.selectedModel,
|
|
222
|
-
onSubmit,
|
|
223
|
-
showModelSelector,
|
|
224
|
-
]);
|
|
225
|
-
return (_jsx("div", { className: cn("agent-composer-area flex flex-col rounded-lg border border-input bg-background text-left focus-within:ring-1 focus-within:ring-ring", className), children: _jsxs(ComposerPrimitive.Root, { className: "flex flex-col", children: [_jsx(PromptAttachmentStrip, {}), _jsx(TiptapComposer, { focusRef: handleRef, disabled: disabled, placeholder: placeholder, onSubmit: handleSubmit, clearOnSubmit: !preserveDraftOnSubmit, plusMenuMode: attachmentsEnabled ? "upload-only" : "hidden", voiceEnabled: voiceEnabled, onTextChange: onTextChange, draftScope: draftScope, selectedModel: showModelSelector ? models.selectedModel : undefined, selectedEffort: showModelSelector ? models.selectedEffort : undefined, availableModels: showModelSelector ? models.availableModels : undefined, onModelChange: showModelSelector ? models.onModelChange : undefined, onEffortChange: showModelSelector ? models.onEffortChange : undefined })] }) }));
|
|
238
|
+
}, [composerEffort, composerEngine, composerModel, onSubmit]);
|
|
239
|
+
return (_jsxs(AgentComposerFrame, { className: cn("text-left", className), layoutVariant: layoutVariant, children: [_jsx(PromptAttachmentStrip, {}), _jsx(TiptapComposer, { focusRef: handleRef, disabled: disabled, placeholder: placeholder, initialText: initialText, initialTextKey: initialTextKey, onSubmit: handleSubmit, clearOnSubmit: !preserveDraftOnSubmit, plusMenuMode: plusMenuMode ?? (attachmentsEnabled ? "upload-only" : "hidden"), modeControl: modeControl, toolbarSlot: toolbarSlot, layoutVariant: layoutVariant, slashCommands: slashCommands, slashSkills: slashSkills, includeDefaultSlashCommands: includeDefaultSlashCommands, includeDefaultSlashSkills: includeDefaultSlashSkills, onSlashCommand: onSlashCommand, voiceEnabled: voiceEnabled, onTextChange: onTextChange, draftScope: draftScope, selectedModel: composerModel, selectedEffort: composerEffort, availableModels: composerModelGroups, onModelChange: handleModelChange, onEffortChange: handleEffortChange })] }));
|
|
226
240
|
}
|
|
227
241
|
/**
|
|
228
242
|
* Standalone composer that mirrors the agent sidebar's input experience —
|
|
@@ -244,6 +258,6 @@ export function PromptComposer(props) {
|
|
|
244
258
|
const runtime = useLocalRuntime(NOOP_ADAPTER, {
|
|
245
259
|
adapters: { attachments: attachmentAdapter },
|
|
246
260
|
});
|
|
247
|
-
return (_jsx(AssistantRuntimeProvider, { runtime: runtime, children: _jsx(ThreadPrimitive.Root, { className: "contents", children: _jsx(PromptComposerInner, { ...props }) }) }));
|
|
261
|
+
return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsx(AssistantRuntimeProvider, { runtime: runtime, children: _jsx(ThreadPrimitive.Root, { className: "contents", children: _jsx(PromptComposerInner, { ...props }) }) }) }));
|
|
248
262
|
}
|
|
249
263
|
//# sourceMappingURL=PromptComposer.js.map
|