@agent-native/core 0.15.13 → 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 +26 -2
- 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,79 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useMemo } from "react";
|
|
3
|
+
import { AgentNativeFrame, } from "./AgentNativeFrame.js";
|
|
4
|
+
import { readAgentNativeScreenContext, } from "./host-bridge.js";
|
|
5
|
+
function mergeObject(base, override) {
|
|
6
|
+
if (!base && !override)
|
|
7
|
+
return undefined;
|
|
8
|
+
return { ...(base ?? {}), ...(override ?? {}) };
|
|
9
|
+
}
|
|
10
|
+
function mergeHostContext(base, override) {
|
|
11
|
+
if (!override)
|
|
12
|
+
return base;
|
|
13
|
+
return {
|
|
14
|
+
...base,
|
|
15
|
+
...override,
|
|
16
|
+
route: mergeObject(base.route, override.route),
|
|
17
|
+
selection: mergeObject(base.selection, override.selection),
|
|
18
|
+
screen: mergeObject(base.screen, override.screen),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function toCommandHandler(callback) {
|
|
22
|
+
if (!callback)
|
|
23
|
+
return undefined;
|
|
24
|
+
return (request) => callback(request.payload, {
|
|
25
|
+
command: request.command,
|
|
26
|
+
requestId: request.requestId,
|
|
27
|
+
origin: request.origin,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export function useAgentNativeScreenContext(options) {
|
|
31
|
+
return useCallback(() => readAgentNativeScreenContext(options), [options]);
|
|
32
|
+
}
|
|
33
|
+
export function AgentNative({ actions, getContext, screen = true, commands, onRefresh, onNavigate, onRemount, onOpenResource, onRequestApproval, ...frameProps }) {
|
|
34
|
+
const getMergedContext = useCallback(async () => {
|
|
35
|
+
const screenContext = screen === false
|
|
36
|
+
? {}
|
|
37
|
+
: readAgentNativeScreenContext(screen === true ? {} : screen);
|
|
38
|
+
const customContext = getContext ? await getContext() : undefined;
|
|
39
|
+
return mergeHostContext(screenContext, customContext);
|
|
40
|
+
}, [getContext, screen]);
|
|
41
|
+
const mergedCommands = useMemo(() => {
|
|
42
|
+
const refreshHandler = toCommandHandler(onRefresh);
|
|
43
|
+
const navigateHandler = toCommandHandler(onNavigate);
|
|
44
|
+
const remountHandler = toCommandHandler(onRemount);
|
|
45
|
+
const openResourceHandler = toCommandHandler(onOpenResource);
|
|
46
|
+
const requestApprovalHandler = toCommandHandler(onRequestApproval);
|
|
47
|
+
return {
|
|
48
|
+
...commands,
|
|
49
|
+
...(refreshHandler
|
|
50
|
+
? { refreshData: refreshHandler, "refresh-data": refreshHandler }
|
|
51
|
+
: {}),
|
|
52
|
+
...(navigateHandler ? { navigate: navigateHandler } : {}),
|
|
53
|
+
...(remountHandler
|
|
54
|
+
? { remountView: remountHandler, "remount-view": remountHandler }
|
|
55
|
+
: {}),
|
|
56
|
+
...(openResourceHandler
|
|
57
|
+
? {
|
|
58
|
+
openResource: openResourceHandler,
|
|
59
|
+
"open-resource": openResourceHandler,
|
|
60
|
+
}
|
|
61
|
+
: {}),
|
|
62
|
+
...(requestApprovalHandler
|
|
63
|
+
? {
|
|
64
|
+
requestApproval: requestApprovalHandler,
|
|
65
|
+
"request-approval": requestApprovalHandler,
|
|
66
|
+
}
|
|
67
|
+
: {}),
|
|
68
|
+
};
|
|
69
|
+
}, [
|
|
70
|
+
commands,
|
|
71
|
+
onNavigate,
|
|
72
|
+
onOpenResource,
|
|
73
|
+
onRefresh,
|
|
74
|
+
onRemount,
|
|
75
|
+
onRequestApproval,
|
|
76
|
+
]);
|
|
77
|
+
return (_jsx(AgentNativeFrame, { ...frameProps, actions: actions, commands: mergedCommands, getContext: getMergedContext }));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=AgentNative.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentNative.js","sourceRoot":"","sources":["../../src/client/AgentNative.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport {\n AgentNativeFrame,\n type AgentNativeFrameProps,\n} from \"./AgentNativeFrame.js\";\nimport {\n readAgentNativeScreenContext,\n type AgentNativeClientActions,\n type AgentNativeHostCommandHandler,\n type AgentNativeHostCommandHandlers,\n type AgentNativeHostCommandRequest,\n type AgentNativeHostContext,\n type AgentNativeHostContextGetter,\n type AgentNativeScreenSnapshotOptions,\n} from \"./host-bridge.js\";\n\nexport interface AgentNativeCommandCallbackInfo {\n command: string;\n requestId?: string;\n origin: string;\n}\n\nexport type AgentNativeCommandCallback = (\n payload: unknown,\n info: AgentNativeCommandCallbackInfo,\n) => unknown | Promise<unknown>;\n\nexport interface AgentNativeProps extends Omit<\n AgentNativeFrameProps,\n \"actions\" | \"commands\" | \"getContext\"\n> {\n /**\n * Live browser-session tools. These can change as page state changes and are\n * only callable while this tab is connected.\n */\n actions?: AgentNativeClientActions;\n /** Semantic app/page context layered over the built-in screen snapshot. */\n getContext?: AgentNativeHostContextGetter;\n /**\n * Built-in screen context. Defaults to visible text + route + selection.\n * Pass false to disable, or { includeDomHtml: true } for a DOM fallback.\n */\n screen?: boolean | AgentNativeScreenSnapshotOptions;\n /** Extra/advanced host commands. */\n commands?: AgentNativeHostCommandHandlers;\n onRefresh?: AgentNativeCommandCallback;\n onNavigate?: AgentNativeCommandCallback;\n onRemount?: AgentNativeCommandCallback;\n onOpenResource?: AgentNativeCommandCallback;\n onRequestApproval?: AgentNativeCommandCallback;\n}\n\nfunction mergeObject<T extends object>(\n base: T | undefined,\n override: T | undefined,\n): T | undefined {\n if (!base && !override) return undefined;\n return { ...(base ?? {}), ...(override ?? {}) } as T;\n}\n\nfunction mergeHostContext(\n base: AgentNativeHostContext,\n override: AgentNativeHostContext | undefined,\n): AgentNativeHostContext {\n if (!override) return base;\n return {\n ...base,\n ...override,\n route: mergeObject(base.route, override.route),\n selection: mergeObject(base.selection, override.selection),\n screen: mergeObject(base.screen, override.screen),\n };\n}\n\nfunction toCommandHandler(\n callback: AgentNativeCommandCallback | undefined,\n): AgentNativeHostCommandHandler | undefined {\n if (!callback) return undefined;\n return (request: AgentNativeHostCommandRequest) =>\n callback(request.payload, {\n command: request.command,\n requestId: request.requestId,\n origin: request.origin,\n });\n}\n\nexport function useAgentNativeScreenContext(\n options?: AgentNativeScreenSnapshotOptions,\n): AgentNativeHostContextGetter {\n return useCallback(() => readAgentNativeScreenContext(options), [options]);\n}\n\nexport function AgentNative({\n actions,\n getContext,\n screen = true,\n commands,\n onRefresh,\n onNavigate,\n onRemount,\n onOpenResource,\n onRequestApproval,\n ...frameProps\n}: AgentNativeProps) {\n const getMergedContext = useCallback(async () => {\n const screenContext =\n screen === false\n ? {}\n : readAgentNativeScreenContext(screen === true ? {} : screen);\n const customContext = getContext ? await getContext() : undefined;\n return mergeHostContext(screenContext, customContext);\n }, [getContext, screen]);\n\n const mergedCommands = useMemo(() => {\n const refreshHandler = toCommandHandler(onRefresh);\n const navigateHandler = toCommandHandler(onNavigate);\n const remountHandler = toCommandHandler(onRemount);\n const openResourceHandler = toCommandHandler(onOpenResource);\n const requestApprovalHandler = toCommandHandler(onRequestApproval);\n\n return {\n ...commands,\n ...(refreshHandler\n ? { refreshData: refreshHandler, \"refresh-data\": refreshHandler }\n : {}),\n ...(navigateHandler ? { navigate: navigateHandler } : {}),\n ...(remountHandler\n ? { remountView: remountHandler, \"remount-view\": remountHandler }\n : {}),\n ...(openResourceHandler\n ? {\n openResource: openResourceHandler,\n \"open-resource\": openResourceHandler,\n }\n : {}),\n ...(requestApprovalHandler\n ? {\n requestApproval: requestApprovalHandler,\n \"request-approval\": requestApprovalHandler,\n }\n : {}),\n };\n }, [\n commands,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n ]);\n\n return (\n <AgentNativeFrame\n {...frameProps}\n actions={actions}\n commands={mergedCommands}\n getContext={getMergedContext}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type AgentChatSurfaceProps, type AgentSidebarProps } from "./AgentPanel.js";
|
|
3
|
+
import { type AgentNativeBrowserSessionBridge } from "./browser-session-bridge.js";
|
|
4
|
+
import { type AgentNativeClientActions, type AgentNativeHostCommandHandlers, type AgentNativeHostContextGetter, type AgentNativeHostSession, type AgentNativeScreenSnapshotOptions } from "./host-bridge.js";
|
|
5
|
+
export interface AgentNativeEmbeddedCommandCallbackInfo {
|
|
6
|
+
command: string;
|
|
7
|
+
requestId?: string;
|
|
8
|
+
origin: string;
|
|
9
|
+
}
|
|
10
|
+
export type AgentNativeEmbeddedCommandCallback = (payload: unknown, info: AgentNativeEmbeddedCommandCallbackInfo) => unknown | Promise<unknown>;
|
|
11
|
+
export interface AgentNativeEmbeddedBrowserSessionOptions {
|
|
12
|
+
endpoint?: string;
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
heartbeatMs?: number;
|
|
16
|
+
pollMs?: number;
|
|
17
|
+
ttlMs?: number;
|
|
18
|
+
fetch?: typeof fetch;
|
|
19
|
+
onReady?: (bridge: AgentNativeBrowserSessionBridge) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface UseAgentNativeEmbeddedBrowserSessionOptions {
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
actions?: AgentNativeClientActions;
|
|
24
|
+
getContext?: AgentNativeHostContextGetter;
|
|
25
|
+
screen?: boolean | AgentNativeScreenSnapshotOptions;
|
|
26
|
+
commands?: AgentNativeHostCommandHandlers;
|
|
27
|
+
session?: string | Partial<AgentNativeHostSession>;
|
|
28
|
+
browserSession?: AgentNativeEmbeddedBrowserSessionOptions;
|
|
29
|
+
onRefresh?: AgentNativeEmbeddedCommandCallback;
|
|
30
|
+
onNavigate?: AgentNativeEmbeddedCommandCallback;
|
|
31
|
+
onRemount?: AgentNativeEmbeddedCommandCallback;
|
|
32
|
+
onOpenResource?: AgentNativeEmbeddedCommandCallback;
|
|
33
|
+
onRequestApproval?: AgentNativeEmbeddedCommandCallback;
|
|
34
|
+
}
|
|
35
|
+
export interface AgentNativeEmbeddedProps extends Omit<AgentSidebarProps, "children">, UseAgentNativeEmbeddedBrowserSessionOptions {
|
|
36
|
+
children?: React.ReactNode;
|
|
37
|
+
/**
|
|
38
|
+
* Render only the agent chat surface when no host children are supplied.
|
|
39
|
+
* Defaults to "sidebar" when `children` exist and "panel" otherwise.
|
|
40
|
+
*/
|
|
41
|
+
surface?: "sidebar" | "panel";
|
|
42
|
+
/** Props forwarded to AgentChatSurface in panel mode. */
|
|
43
|
+
panel?: AgentChatSurfaceProps;
|
|
44
|
+
}
|
|
45
|
+
export declare function useAgentNativeEmbeddedBrowserSession({ enabled, actions, getContext, screen, commands, session, browserSession, onNavigate, onOpenResource, onRefresh, onRemount, onRequestApproval, }: UseAgentNativeEmbeddedBrowserSessionOptions): void;
|
|
46
|
+
export declare function AgentNativeEmbedded({ children, surface, actions, getContext, enabled, screen, commands, session, browserSession, onNavigate, onOpenResource, onRefresh, onRemount, onRequestApproval, panel, ...sidebarProps }: AgentNativeEmbeddedProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
//# sourceMappingURL=AgentNativeEmbedded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentNativeEmbedded.d.ts","sourceRoot":"","sources":["../../src/client/AgentNativeEmbedded.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAC/D,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,wBAAwB,EAE7B,KAAK,8BAA8B,EAGnC,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACtC,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,sCAAsC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,kCAAkC,GAAG,CAC/C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,sCAAsC,KACzC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,+BAA+B,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,2CAA2C;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,UAAU,CAAC,EAAE,4BAA4B,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,GAAG,gCAAgC,CAAC;IACpD,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,wCAAwC,CAAC;IAC1D,SAAS,CAAC,EAAE,kCAAkC,CAAC;IAC/C,UAAU,CAAC,EAAE,kCAAkC,CAAC;IAChD,SAAS,CAAC,EAAE,kCAAkC,CAAC;IAC/C,cAAc,CAAC,EAAE,kCAAkC,CAAC;IACpD,iBAAiB,CAAC,EAAE,kCAAkC,CAAC;CACxD;AAED,MAAM,WAAW,wBACf,SACE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACnC,2CAA2C;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,yDAAyD;IACzD,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B;AAkGD,wBAAgB,oCAAoC,CAAC,EACnD,OAAc,EACd,OAAO,EACP,UAAU,EACV,MAAa,EACb,QAAQ,EACR,OAAO,EACP,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,iBAAiB,GAClB,EAAE,2CAA2C,QAqD7C;AAED,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,OAAO,EACP,UAAU,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAO,EACP,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,KAAK,EACL,GAAG,YAAY,EAChB,EAAE,wBAAwB,2CA+B1B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo } from "react";
|
|
3
|
+
import { AgentChatSurface, AgentSidebar, } from "./AgentPanel.js";
|
|
4
|
+
import { createAgentNativeBrowserSessionBridge, } from "./browser-session-bridge.js";
|
|
5
|
+
import { readAgentNativeScreenContext, } from "./host-bridge.js";
|
|
6
|
+
function mergeObject(base, override) {
|
|
7
|
+
if (!base && !override)
|
|
8
|
+
return undefined;
|
|
9
|
+
return { ...(base ?? {}), ...(override ?? {}) };
|
|
10
|
+
}
|
|
11
|
+
function mergeHostContext(base, override) {
|
|
12
|
+
if (!override)
|
|
13
|
+
return base;
|
|
14
|
+
return {
|
|
15
|
+
...base,
|
|
16
|
+
...override,
|
|
17
|
+
route: mergeObject(base.route, override.route),
|
|
18
|
+
selection: mergeObject(base.selection, override.selection),
|
|
19
|
+
screen: mergeObject(base.screen, override.screen),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function toCommandHandler(callback) {
|
|
23
|
+
if (!callback)
|
|
24
|
+
return undefined;
|
|
25
|
+
return (request) => callback(request.payload, {
|
|
26
|
+
command: request.command,
|
|
27
|
+
requestId: request.requestId,
|
|
28
|
+
origin: request.origin,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function sessionBrowserTabId(session) {
|
|
32
|
+
if (typeof session === "string")
|
|
33
|
+
return session;
|
|
34
|
+
return typeof session?.id === "string" ? session.id : undefined;
|
|
35
|
+
}
|
|
36
|
+
function useMergedEmbeddedCommands({ commands, onNavigate, onOpenResource, onRefresh, onRemount, onRequestApproval, }) {
|
|
37
|
+
return useMemo(() => {
|
|
38
|
+
const refreshHandler = toCommandHandler(onRefresh);
|
|
39
|
+
const navigateHandler = toCommandHandler(onNavigate);
|
|
40
|
+
const remountHandler = toCommandHandler(onRemount);
|
|
41
|
+
const openResourceHandler = toCommandHandler(onOpenResource);
|
|
42
|
+
const requestApprovalHandler = toCommandHandler(onRequestApproval);
|
|
43
|
+
return {
|
|
44
|
+
...commands,
|
|
45
|
+
...(refreshHandler
|
|
46
|
+
? { refreshData: refreshHandler, "refresh-data": refreshHandler }
|
|
47
|
+
: {}),
|
|
48
|
+
...(navigateHandler ? { navigate: navigateHandler } : {}),
|
|
49
|
+
...(remountHandler
|
|
50
|
+
? { remountView: remountHandler, "remount-view": remountHandler }
|
|
51
|
+
: {}),
|
|
52
|
+
...(openResourceHandler
|
|
53
|
+
? {
|
|
54
|
+
openResource: openResourceHandler,
|
|
55
|
+
"open-resource": openResourceHandler,
|
|
56
|
+
}
|
|
57
|
+
: {}),
|
|
58
|
+
...(requestApprovalHandler
|
|
59
|
+
? {
|
|
60
|
+
requestApproval: requestApprovalHandler,
|
|
61
|
+
"request-approval": requestApprovalHandler,
|
|
62
|
+
}
|
|
63
|
+
: {}),
|
|
64
|
+
};
|
|
65
|
+
}, [
|
|
66
|
+
commands,
|
|
67
|
+
onNavigate,
|
|
68
|
+
onOpenResource,
|
|
69
|
+
onRefresh,
|
|
70
|
+
onRemount,
|
|
71
|
+
onRequestApproval,
|
|
72
|
+
]);
|
|
73
|
+
}
|
|
74
|
+
export function useAgentNativeEmbeddedBrowserSession({ enabled = true, actions, getContext, screen = true, commands, session, browserSession, onNavigate, onOpenResource, onRefresh, onRemount, onRequestApproval, }) {
|
|
75
|
+
const mergedCommands = useMergedEmbeddedCommands({
|
|
76
|
+
commands,
|
|
77
|
+
onNavigate,
|
|
78
|
+
onOpenResource,
|
|
79
|
+
onRefresh,
|
|
80
|
+
onRemount,
|
|
81
|
+
onRequestApproval,
|
|
82
|
+
});
|
|
83
|
+
const getMergedContext = useCallback(async () => {
|
|
84
|
+
const screenContext = screen === false
|
|
85
|
+
? {}
|
|
86
|
+
: readAgentNativeScreenContext(screen === true ? {} : screen);
|
|
87
|
+
const customContext = getContext ? await getContext() : undefined;
|
|
88
|
+
return mergeHostContext(screenContext, customContext);
|
|
89
|
+
}, [getContext, screen]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (!enabled)
|
|
92
|
+
return;
|
|
93
|
+
const bridge = createAgentNativeBrowserSessionBridge({
|
|
94
|
+
endpoint: browserSession?.endpoint,
|
|
95
|
+
sessionId: browserSession?.sessionId,
|
|
96
|
+
label: browserSession?.label,
|
|
97
|
+
heartbeatMs: browserSession?.heartbeatMs,
|
|
98
|
+
pollMs: browserSession?.pollMs,
|
|
99
|
+
ttlMs: browserSession?.ttlMs,
|
|
100
|
+
fetch: browserSession?.fetch,
|
|
101
|
+
session,
|
|
102
|
+
getContext: getMergedContext,
|
|
103
|
+
actions,
|
|
104
|
+
commands: mergedCommands,
|
|
105
|
+
}).start();
|
|
106
|
+
browserSession?.onReady?.(bridge);
|
|
107
|
+
return () => bridge.stop();
|
|
108
|
+
}, [
|
|
109
|
+
actions,
|
|
110
|
+
browserSession?.endpoint,
|
|
111
|
+
browserSession?.fetch,
|
|
112
|
+
browserSession?.heartbeatMs,
|
|
113
|
+
browserSession?.label,
|
|
114
|
+
browserSession?.onReady,
|
|
115
|
+
browserSession?.pollMs,
|
|
116
|
+
browserSession?.sessionId,
|
|
117
|
+
browserSession?.ttlMs,
|
|
118
|
+
enabled,
|
|
119
|
+
getMergedContext,
|
|
120
|
+
mergedCommands,
|
|
121
|
+
session,
|
|
122
|
+
]);
|
|
123
|
+
}
|
|
124
|
+
export function AgentNativeEmbedded({ children, surface, actions, getContext, enabled, screen, commands, session, browserSession, onNavigate, onOpenResource, onRefresh, onRemount, onRequestApproval, panel, ...sidebarProps }) {
|
|
125
|
+
useAgentNativeEmbeddedBrowserSession({
|
|
126
|
+
enabled,
|
|
127
|
+
actions,
|
|
128
|
+
getContext,
|
|
129
|
+
screen,
|
|
130
|
+
commands,
|
|
131
|
+
session,
|
|
132
|
+
browserSession,
|
|
133
|
+
onNavigate,
|
|
134
|
+
onOpenResource,
|
|
135
|
+
onRefresh,
|
|
136
|
+
onRemount,
|
|
137
|
+
onRequestApproval,
|
|
138
|
+
});
|
|
139
|
+
const mode = surface ?? (children ? "sidebar" : "panel");
|
|
140
|
+
const browserTabId = sidebarProps.browserTabId ??
|
|
141
|
+
panel?.browserTabId ??
|
|
142
|
+
sessionBrowserTabId(session);
|
|
143
|
+
if (mode === "panel" || !children) {
|
|
144
|
+
return _jsx(AgentChatSurface, { browserTabId: browserTabId, ...panel });
|
|
145
|
+
}
|
|
146
|
+
return (_jsx(AgentSidebar, { ...sidebarProps, browserTabId: browserTabId, children: children }));
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=AgentNativeEmbedded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentNativeEmbedded.js","sourceRoot":"","sources":["../../src/client/AgentNativeEmbedded.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useMemo } from \"react\";\nimport {\n AgentChatSurface,\n AgentSidebar,\n type AgentChatSurfaceProps,\n type AgentSidebarProps,\n} from \"./AgentPanel.js\";\nimport {\n createAgentNativeBrowserSessionBridge,\n type AgentNativeBrowserSessionBridge,\n} from \"./browser-session-bridge.js\";\nimport {\n readAgentNativeScreenContext,\n type AgentNativeClientActions,\n type AgentNativeHostCommandHandler,\n type AgentNativeHostCommandHandlers,\n type AgentNativeHostCommandRequest,\n type AgentNativeHostContext,\n type AgentNativeHostContextGetter,\n type AgentNativeHostSession,\n type AgentNativeScreenSnapshotOptions,\n} from \"./host-bridge.js\";\n\nexport interface AgentNativeEmbeddedCommandCallbackInfo {\n command: string;\n requestId?: string;\n origin: string;\n}\n\nexport type AgentNativeEmbeddedCommandCallback = (\n payload: unknown,\n info: AgentNativeEmbeddedCommandCallbackInfo,\n) => unknown | Promise<unknown>;\n\nexport interface AgentNativeEmbeddedBrowserSessionOptions {\n endpoint?: string;\n sessionId?: string;\n label?: string;\n heartbeatMs?: number;\n pollMs?: number;\n ttlMs?: number;\n fetch?: typeof fetch;\n onReady?: (bridge: AgentNativeBrowserSessionBridge) => void;\n}\n\nexport interface UseAgentNativeEmbeddedBrowserSessionOptions {\n enabled?: boolean;\n actions?: AgentNativeClientActions;\n getContext?: AgentNativeHostContextGetter;\n screen?: boolean | AgentNativeScreenSnapshotOptions;\n commands?: AgentNativeHostCommandHandlers;\n session?: string | Partial<AgentNativeHostSession>;\n browserSession?: AgentNativeEmbeddedBrowserSessionOptions;\n onRefresh?: AgentNativeEmbeddedCommandCallback;\n onNavigate?: AgentNativeEmbeddedCommandCallback;\n onRemount?: AgentNativeEmbeddedCommandCallback;\n onOpenResource?: AgentNativeEmbeddedCommandCallback;\n onRequestApproval?: AgentNativeEmbeddedCommandCallback;\n}\n\nexport interface AgentNativeEmbeddedProps\n extends\n Omit<AgentSidebarProps, \"children\">,\n UseAgentNativeEmbeddedBrowserSessionOptions {\n children?: React.ReactNode;\n /**\n * Render only the agent chat surface when no host children are supplied.\n * Defaults to \"sidebar\" when `children` exist and \"panel\" otherwise.\n */\n surface?: \"sidebar\" | \"panel\";\n /** Props forwarded to AgentChatSurface in panel mode. */\n panel?: AgentChatSurfaceProps;\n}\n\nfunction mergeObject<T extends object>(\n base: T | undefined,\n override: T | undefined,\n): T | undefined {\n if (!base && !override) return undefined;\n return { ...(base ?? {}), ...(override ?? {}) } as T;\n}\n\nfunction mergeHostContext(\n base: AgentNativeHostContext,\n override: AgentNativeHostContext | undefined,\n): AgentNativeHostContext {\n if (!override) return base;\n return {\n ...base,\n ...override,\n route: mergeObject(base.route, override.route),\n selection: mergeObject(base.selection, override.selection),\n screen: mergeObject(base.screen, override.screen),\n };\n}\n\nfunction toCommandHandler(\n callback: AgentNativeEmbeddedCommandCallback | undefined,\n): AgentNativeHostCommandHandler | undefined {\n if (!callback) return undefined;\n return (request: AgentNativeHostCommandRequest) =>\n callback(request.payload, {\n command: request.command,\n requestId: request.requestId,\n origin: request.origin,\n });\n}\n\nfunction sessionBrowserTabId(\n session: UseAgentNativeEmbeddedBrowserSessionOptions[\"session\"],\n): string | undefined {\n if (typeof session === \"string\") return session;\n return typeof session?.id === \"string\" ? session.id : undefined;\n}\n\nfunction useMergedEmbeddedCommands({\n commands,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n}: Pick<\n UseAgentNativeEmbeddedBrowserSessionOptions,\n | \"commands\"\n | \"onNavigate\"\n | \"onOpenResource\"\n | \"onRefresh\"\n | \"onRemount\"\n | \"onRequestApproval\"\n>) {\n return useMemo(() => {\n const refreshHandler = toCommandHandler(onRefresh);\n const navigateHandler = toCommandHandler(onNavigate);\n const remountHandler = toCommandHandler(onRemount);\n const openResourceHandler = toCommandHandler(onOpenResource);\n const requestApprovalHandler = toCommandHandler(onRequestApproval);\n\n return {\n ...commands,\n ...(refreshHandler\n ? { refreshData: refreshHandler, \"refresh-data\": refreshHandler }\n : {}),\n ...(navigateHandler ? { navigate: navigateHandler } : {}),\n ...(remountHandler\n ? { remountView: remountHandler, \"remount-view\": remountHandler }\n : {}),\n ...(openResourceHandler\n ? {\n openResource: openResourceHandler,\n \"open-resource\": openResourceHandler,\n }\n : {}),\n ...(requestApprovalHandler\n ? {\n requestApproval: requestApprovalHandler,\n \"request-approval\": requestApprovalHandler,\n }\n : {}),\n };\n }, [\n commands,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n ]);\n}\n\nexport function useAgentNativeEmbeddedBrowserSession({\n enabled = true,\n actions,\n getContext,\n screen = true,\n commands,\n session,\n browserSession,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n}: UseAgentNativeEmbeddedBrowserSessionOptions) {\n const mergedCommands = useMergedEmbeddedCommands({\n commands,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n });\n\n const getMergedContext = useCallback(async () => {\n const screenContext =\n screen === false\n ? {}\n : readAgentNativeScreenContext(screen === true ? {} : screen);\n const customContext = getContext ? await getContext() : undefined;\n return mergeHostContext(screenContext, customContext);\n }, [getContext, screen]);\n\n useEffect(() => {\n if (!enabled) return;\n\n const bridge = createAgentNativeBrowserSessionBridge({\n endpoint: browserSession?.endpoint,\n sessionId: browserSession?.sessionId,\n label: browserSession?.label,\n heartbeatMs: browserSession?.heartbeatMs,\n pollMs: browserSession?.pollMs,\n ttlMs: browserSession?.ttlMs,\n fetch: browserSession?.fetch,\n session,\n getContext: getMergedContext,\n actions,\n commands: mergedCommands,\n }).start();\n\n browserSession?.onReady?.(bridge);\n return () => bridge.stop();\n }, [\n actions,\n browserSession?.endpoint,\n browserSession?.fetch,\n browserSession?.heartbeatMs,\n browserSession?.label,\n browserSession?.onReady,\n browserSession?.pollMs,\n browserSession?.sessionId,\n browserSession?.ttlMs,\n enabled,\n getMergedContext,\n mergedCommands,\n session,\n ]);\n}\n\nexport function AgentNativeEmbedded({\n children,\n surface,\n actions,\n getContext,\n enabled,\n screen,\n commands,\n session,\n browserSession,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n panel,\n ...sidebarProps\n}: AgentNativeEmbeddedProps) {\n useAgentNativeEmbeddedBrowserSession({\n enabled,\n actions,\n getContext,\n screen,\n commands,\n session,\n browserSession,\n onNavigate,\n onOpenResource,\n onRefresh,\n onRemount,\n onRequestApproval,\n });\n\n const mode = surface ?? (children ? \"sidebar\" : \"panel\");\n const browserTabId =\n sidebarProps.browserTabId ??\n panel?.browserTabId ??\n sessionBrowserTabId(session);\n\n if (mode === \"panel\" || !children) {\n return <AgentChatSurface browserTabId={browserTabId} {...panel} />;\n }\n\n return (\n <AgentSidebar {...sidebarProps} browserTabId={browserTabId}>\n {children}\n </AgentSidebar>\n );\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { type IframeHTMLAttributes } from "react";
|
|
2
|
+
import { type AgentNativeClientActions, type AgentNativeHostAuth, type AgentNativeHostBridge, type AgentNativeHostBridgeEvent, type AgentNativeHostCommandHandlers, type AgentNativeHostContextGetter, type AgentNativeHostSession } from "./host-bridge.js";
|
|
3
|
+
export interface AgentNativeFrameProps extends Omit<IframeHTMLAttributes<HTMLIFrameElement>, "src"> {
|
|
4
|
+
/** URL of the Agent-Native sidecar/frame app. */
|
|
5
|
+
agentUrl: string;
|
|
6
|
+
/**
|
|
7
|
+
* Exact trusted sidecar origin. Defaults to `new URL(agentUrl).origin`.
|
|
8
|
+
* Pass "*" only for local prototypes.
|
|
9
|
+
*/
|
|
10
|
+
agentOrigin?: string;
|
|
11
|
+
/** Stable browser-session identity for multi-tab sidecars. */
|
|
12
|
+
session?: string | Partial<AgentNativeHostSession>;
|
|
13
|
+
/** Return page, selection, resource, user/org, and host-specific context. */
|
|
14
|
+
getContext?: AgentNativeHostContextGetter;
|
|
15
|
+
/** Commands the iframe sidecar can ask the host app to run. */
|
|
16
|
+
commands?: AgentNativeHostCommandHandlers;
|
|
17
|
+
/** Live browser-session actions the iframe sidecar can discover and call. */
|
|
18
|
+
actions?: AgentNativeClientActions;
|
|
19
|
+
/** Optional auth payload sent to the trusted iframe sidecar. */
|
|
20
|
+
auth?: AgentNativeHostAuth;
|
|
21
|
+
onBridgeEvent?: (event: AgentNativeHostBridgeEvent) => void;
|
|
22
|
+
onBridgeReady?: (bridge: AgentNativeHostBridge) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare const AgentNativeFrame: React.ForwardRefExoticComponent<AgentNativeFrameProps & React.RefAttributes<HTMLIFrameElement>>;
|
|
25
|
+
//# sourceMappingURL=AgentNativeFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentNativeFrame.d.ts","sourceRoot":"","sources":["../../src/client/AgentNativeFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAMZ,KAAK,oBAAoB,EAC1B,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC5B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,KAAK,CACN;IACC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnD,6EAA6E;IAC7E,UAAU,CAAC,EAAE,4BAA4B,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,8BAA8B,CAAC;IAC1C,6EAA6E;IAC7E,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,gEAAgE;IAChE,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACzD;AAyBD,eAAO,MAAM,gBAAgB,iGAkF3B,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useEffect, useMemo, useRef, } from "react";
|
|
3
|
+
import { createAgentNativeHostBridge, } from "./host-bridge.js";
|
|
4
|
+
function originFromUrl(value) {
|
|
5
|
+
try {
|
|
6
|
+
const base = typeof window !== "undefined"
|
|
7
|
+
? window.location.href
|
|
8
|
+
: "http://agent-native.local";
|
|
9
|
+
return new URL(value, base).origin;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function setForwardedRef(ref, value) {
|
|
16
|
+
if (typeof ref === "function")
|
|
17
|
+
ref(value);
|
|
18
|
+
else if (ref)
|
|
19
|
+
ref.current = value;
|
|
20
|
+
}
|
|
21
|
+
const defaultStyle = {
|
|
22
|
+
border: 0,
|
|
23
|
+
width: "100%",
|
|
24
|
+
height: "100%",
|
|
25
|
+
};
|
|
26
|
+
export const AgentNativeFrame = forwardRef(function AgentNativeFrame({ agentUrl, agentOrigin, session, getContext, commands, actions, auth, onBridgeEvent, onBridgeReady, title = "Agent Native assistant", sandbox = "allow-scripts allow-same-origin allow-forms allow-popups allow-downloads", allow = "clipboard-read; clipboard-write; microphone; fullscreen", referrerPolicy = "strict-origin-when-cross-origin", style, onLoad, ...iframeProps }, forwardedRef) {
|
|
27
|
+
const iframeRef = useRef(null);
|
|
28
|
+
const bridgeRef = useRef(null);
|
|
29
|
+
const resolvedOrigin = useMemo(() => agentOrigin ?? originFromUrl(agentUrl), [agentOrigin, agentUrl]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
const bridge = createAgentNativeHostBridge({
|
|
32
|
+
agentOrigin: resolvedOrigin,
|
|
33
|
+
session,
|
|
34
|
+
getContext,
|
|
35
|
+
commands,
|
|
36
|
+
actions,
|
|
37
|
+
auth,
|
|
38
|
+
onEvent: onBridgeEvent,
|
|
39
|
+
targetWindow: iframeRef.current?.contentWindow ?? null,
|
|
40
|
+
}).start();
|
|
41
|
+
bridgeRef.current = bridge;
|
|
42
|
+
onBridgeReady?.(bridge);
|
|
43
|
+
return () => {
|
|
44
|
+
bridge.stop();
|
|
45
|
+
if (bridgeRef.current === bridge)
|
|
46
|
+
bridgeRef.current = null;
|
|
47
|
+
};
|
|
48
|
+
}, [
|
|
49
|
+
auth,
|
|
50
|
+
actions,
|
|
51
|
+
commands,
|
|
52
|
+
getContext,
|
|
53
|
+
onBridgeEvent,
|
|
54
|
+
onBridgeReady,
|
|
55
|
+
resolvedOrigin,
|
|
56
|
+
session,
|
|
57
|
+
]);
|
|
58
|
+
return (_jsx("iframe", { ...iframeProps, ref: (node) => {
|
|
59
|
+
iframeRef.current = node;
|
|
60
|
+
setForwardedRef(forwardedRef, node);
|
|
61
|
+
bridgeRef.current?.setTargetWindow(node?.contentWindow ?? null);
|
|
62
|
+
}, src: agentUrl, title: title, sandbox: sandbox, allow: allow, referrerPolicy: referrerPolicy, style: { ...defaultStyle, ...style }, onLoad: (event) => {
|
|
63
|
+
bridgeRef.current?.setTargetWindow(event.currentTarget.contentWindow ?? null);
|
|
64
|
+
void bridgeRef.current?.sendInit();
|
|
65
|
+
onLoad?.(event);
|
|
66
|
+
} }));
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=AgentNativeFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentNativeFrame.js","sourceRoot":"","sources":["../../src/client/AgentNativeFrame.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n type CSSProperties,\n type IframeHTMLAttributes,\n} from \"react\";\nimport {\n createAgentNativeHostBridge,\n type AgentNativeClientActions,\n type AgentNativeHostAuth,\n type AgentNativeHostBridge,\n type AgentNativeHostBridgeEvent,\n type AgentNativeHostCommandHandlers,\n type AgentNativeHostContextGetter,\n type AgentNativeHostSession,\n} from \"./host-bridge.js\";\n\nexport interface AgentNativeFrameProps extends Omit<\n IframeHTMLAttributes<HTMLIFrameElement>,\n \"src\"\n> {\n /** URL of the Agent-Native sidecar/frame app. */\n agentUrl: string;\n /**\n * Exact trusted sidecar origin. Defaults to `new URL(agentUrl).origin`.\n * Pass \"*\" only for local prototypes.\n */\n agentOrigin?: string;\n /** Stable browser-session identity for multi-tab sidecars. */\n session?: string | Partial<AgentNativeHostSession>;\n /** Return page, selection, resource, user/org, and host-specific context. */\n getContext?: AgentNativeHostContextGetter;\n /** Commands the iframe sidecar can ask the host app to run. */\n commands?: AgentNativeHostCommandHandlers;\n /** Live browser-session actions the iframe sidecar can discover and call. */\n actions?: AgentNativeClientActions;\n /** Optional auth payload sent to the trusted iframe sidecar. */\n auth?: AgentNativeHostAuth;\n onBridgeEvent?: (event: AgentNativeHostBridgeEvent) => void;\n onBridgeReady?: (bridge: AgentNativeHostBridge) => void;\n}\n\nfunction originFromUrl(value: string): string | undefined {\n try {\n const base =\n typeof window !== \"undefined\"\n ? window.location.href\n : \"http://agent-native.local\";\n return new URL(value, base).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction setForwardedRef<T>(ref: React.ForwardedRef<T>, value: T | null) {\n if (typeof ref === \"function\") ref(value);\n else if (ref) ref.current = value;\n}\n\nconst defaultStyle: CSSProperties = {\n border: 0,\n width: \"100%\",\n height: \"100%\",\n};\n\nexport const AgentNativeFrame = forwardRef<\n HTMLIFrameElement,\n AgentNativeFrameProps\n>(function AgentNativeFrame(\n {\n agentUrl,\n agentOrigin,\n session,\n getContext,\n commands,\n actions,\n auth,\n onBridgeEvent,\n onBridgeReady,\n title = \"Agent Native assistant\",\n sandbox = \"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads\",\n allow = \"clipboard-read; clipboard-write; microphone; fullscreen\",\n referrerPolicy = \"strict-origin-when-cross-origin\",\n style,\n onLoad,\n ...iframeProps\n },\n forwardedRef,\n) {\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const bridgeRef = useRef<AgentNativeHostBridge | null>(null);\n const resolvedOrigin = useMemo(\n () => agentOrigin ?? originFromUrl(agentUrl),\n [agentOrigin, agentUrl],\n );\n\n useEffect(() => {\n const bridge = createAgentNativeHostBridge({\n agentOrigin: resolvedOrigin,\n session,\n getContext,\n commands,\n actions,\n auth,\n onEvent: onBridgeEvent,\n targetWindow: iframeRef.current?.contentWindow ?? null,\n }).start();\n bridgeRef.current = bridge;\n onBridgeReady?.(bridge);\n return () => {\n bridge.stop();\n if (bridgeRef.current === bridge) bridgeRef.current = null;\n };\n }, [\n auth,\n actions,\n commands,\n getContext,\n onBridgeEvent,\n onBridgeReady,\n resolvedOrigin,\n session,\n ]);\n\n return (\n <iframe\n {...iframeProps}\n ref={(node) => {\n iframeRef.current = node;\n setForwardedRef(forwardedRef, node);\n bridgeRef.current?.setTargetWindow(node?.contentWindow ?? null);\n }}\n src={agentUrl}\n title={title}\n sandbox={sandbox}\n allow={allow}\n referrerPolicy={referrerPolicy}\n style={{ ...defaultStyle, ...style }}\n onLoad={(event) => {\n bridgeRef.current?.setTargetWindow(\n event.currentTarget.contentWindow ?? null,\n );\n void bridgeRef.current?.sendInit();\n onLoad?.(event);\n }}\n />\n );\n});\n"]}
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* // In a popover
|
|
18
18
|
* <Popover><AgentPanel suggestions={[...]} /></Popover>
|
|
19
19
|
*
|
|
20
|
-
* // Full page
|
|
21
|
-
* <
|
|
20
|
+
* // Full page chat surface
|
|
21
|
+
* <AgentChatSurface mode="page" className="h-screen" />
|
|
22
22
|
*/
|
|
23
23
|
import React from "react";
|
|
24
24
|
import { type AssistantChatProps } from "./AssistantChat.js";
|
|
@@ -71,6 +71,23 @@ export interface AgentPanelProps extends Omit<AssistantChatProps, "onSwitchToCli
|
|
|
71
71
|
codeAccess?: AgentPanelCodeAccess;
|
|
72
72
|
}
|
|
73
73
|
export declare function AgentPanel(props: AgentPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
74
|
+
export type AgentChatSurfaceMode = "panel" | "page";
|
|
75
|
+
export interface AgentChatSurfaceProps extends AgentPanelProps {
|
|
76
|
+
/**
|
|
77
|
+
* Layout treatment for the reusable chat surface. Use "page" when rendering
|
|
78
|
+
* chat as the primary route content instead of inside the sidebar shell.
|
|
79
|
+
* Default: "panel".
|
|
80
|
+
*/
|
|
81
|
+
mode?: AgentChatSurfaceMode;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Reusable chat surface backed by AgentPanel internals.
|
|
85
|
+
*
|
|
86
|
+
* This gives page-level routes the same tabbed conversations, composer,
|
|
87
|
+
* model controls, scoped chat behavior, and recovery boundary used by the
|
|
88
|
+
* sidebar without introducing a second chat implementation.
|
|
89
|
+
*/
|
|
90
|
+
export declare function AgentChatSurface({ mode, className, defaultMode, isFullscreen, ...props }: AgentChatSurfaceProps): import("react/jsx-runtime").JSX.Element;
|
|
74
91
|
export interface AgentSidebarProps {
|
|
75
92
|
children: React.ReactNode;
|
|
76
93
|
/** Placeholder text for the empty chat state */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KASN,MAAM,OAAO,CAAC;AAwCf,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAgK5B,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,mEAAmE;IACnE,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,wEAAwE;IACxE,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAgGD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,kBAAkB,EAClB,eAAe,CAChB;IACC,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6GAA6G;IAC7G,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6HAA6H;IAC7H,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,uBAAuB,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/D,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"AgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
18
18
|
* // In a popover
|
|
19
19
|
* <Popover><AgentPanel suggestions={[...]} /></Popover>
|
|
20
20
|
*
|
|
21
|
-
* // Full page
|
|
22
|
-
* <
|
|
21
|
+
* // Full page chat surface
|
|
22
|
+
* <AgentChatSurface mode="page" className="h-screen" />
|
|
23
23
|
*/
|
|
24
24
|
import React, { useState, useEffect, useRef, useCallback, useMemo, lazy, Suspense, startTransition, } from "react";
|
|
25
25
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
@@ -236,7 +236,7 @@ function CodeAccessUnavailablePanel({ title, description, ctaLabel, ctaHref, sec
|
|
|
236
236
|
});
|
|
237
237
|
}, className: "inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent", children: [secondaryCtaLabel, _jsx(IconExternalLink, { className: "h-3 w-3" })] })] })] }));
|
|
238
238
|
}
|
|
239
|
-
function AgentPanelInner({ defaultMode = "chat", className, apiUrl, emptyStateText, suggestions, showHeader = true, onCollapse, isFullscreen, onToggleFullscreen, devAppUrl, storageKey, scope, browserTabId, chatNotice, codeAccess, }) {
|
|
239
|
+
function AgentPanelInner({ defaultMode = "chat", className, apiUrl, emptyStateText, emptyStateAddon, suggestions, showHeader = true, onCollapse, isFullscreen, onToggleFullscreen, devAppUrl, storageKey, scope, browserTabId, chatNotice, codeAccess, }) {
|
|
240
240
|
const mounted = useClientOnly();
|
|
241
241
|
const keyPrefix = storageKey ? `:${storageKey}` : "";
|
|
242
242
|
const execModeKey = `${EXEC_MODE_KEY}${keyPrefix}`;
|
|
@@ -554,7 +554,7 @@ function AgentPanelInner({ defaultMode = "chat", className, apiUrl, emptyStateTe
|
|
|
554
554
|
`[data-agent-fullscreen='true'] .agent-composer-area{` +
|
|
555
555
|
`max-width:${FULLSCREEN_CONTENT_MAX_PX}px;` +
|
|
556
556
|
`margin-left:auto;margin-right:auto;width:100%;}`,
|
|
557
|
-
} }), SHOW_ONBOARDING && mounted && canUseCodeTools && (_jsx(Suspense, { fallback: null, children: _jsx(OnboardingPanel, {}) })), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(MultiTabAssistantChat, { apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, renderOverlay: undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, suggestions: suggestions, onSwitchToCli: () => switchMode("cli"), execMode: execMode, onExecModeChange: switchExecMode, storageKey: storageKey, scope: scope, browserTabId: browserTabId })) }), canUseCodeTools
|
|
557
|
+
} }), SHOW_ONBOARDING && mounted && canUseCodeTools && (_jsx(Suspense, { fallback: null, children: _jsx(OnboardingPanel, {}) })), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(MultiTabAssistantChat, { apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, renderOverlay: undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, emptyStateAddon: emptyStateAddon, suggestions: suggestions, onSwitchToCli: () => switchMode("cli"), execMode: execMode, onExecModeChange: switchExecMode, storageKey: storageKey, scope: scope, browserTabId: browserTabId })) }), canUseCodeTools
|
|
558
558
|
? mode === "cli" &&
|
|
559
559
|
cliTabs.map((id) => (_jsx("div", { className: "min-h-0 relative flex-1", style: {
|
|
560
560
|
display: id === activeCliTab ? undefined : "none",
|
|
@@ -920,6 +920,17 @@ export function AgentPanel(props) {
|
|
|
920
920
|
}, [props.storageKey]);
|
|
921
921
|
return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsx(AgentPanelErrorBoundary, { onReset: resetPanel, children: _jsx(AgentPanelInner, { ...props }, resetKey) }) }));
|
|
922
922
|
}
|
|
923
|
+
/**
|
|
924
|
+
* Reusable chat surface backed by AgentPanel internals.
|
|
925
|
+
*
|
|
926
|
+
* This gives page-level routes the same tabbed conversations, composer,
|
|
927
|
+
* model controls, scoped chat behavior, and recovery boundary used by the
|
|
928
|
+
* sidebar without introducing a second chat implementation.
|
|
929
|
+
*/
|
|
930
|
+
export function AgentChatSurface({ mode = "panel", className, defaultMode = "chat", isFullscreen, ...props }) {
|
|
931
|
+
const pageMode = mode === "page";
|
|
932
|
+
return (_jsx(AgentPanel, { ...props, defaultMode: defaultMode, isFullscreen: isFullscreen ?? pageMode, className: cn(pageMode && "h-full min-h-0 w-full overflow-hidden bg-background", className) }));
|
|
933
|
+
}
|
|
923
934
|
/**
|
|
924
935
|
* Wraps app content with a toggleable agent sidebar.
|
|
925
936
|
* Use AgentToggleButton in your header to open/close it.
|