@agent-native/core 0.14.8 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +30 -9
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +14 -4
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +71 -4
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +9 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/appearance/actions/change-appearance.d.ts +3 -0
- package/dist/appearance/actions/change-appearance.d.ts.map +1 -0
- package/dist/appearance/actions/change-appearance.js +29 -0
- package/dist/appearance/actions/change-appearance.js.map +1 -0
- package/dist/chat-threads/store.d.ts +53 -2
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +172 -12
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +114 -37
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +30 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts +25 -1
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +275 -49
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +23 -4
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +276 -53
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AppearancePicker.d.ts +11 -0
- package/dist/client/AppearancePicker.d.ts.map +1 -0
- package/dist/client/AppearancePicker.js +16 -0
- package/dist/client/AppearancePicker.js.map +1 -0
- package/dist/client/AssistantChat.d.ts +35 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +315 -32
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ConnectBuilderCard.d.ts.map +1 -1
- package/dist/client/ConnectBuilderCard.js +5 -2
- package/dist/client/ConnectBuilderCard.js.map +1 -1
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +8 -10
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/FeedbackButton.d.ts.map +1 -1
- package/dist/client/FeedbackButton.js +1 -1
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +13 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +217 -38
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
- package/dist/client/NewWorkspaceAppFlow.js +37 -14
- package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +5 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +4 -0
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/agent-sidebar-state.d.ts +12 -0
- package/dist/client/agent-sidebar-state.d.ts.map +1 -1
- package/dist/client/agent-sidebar-state.js +8 -0
- package/dist/client/agent-sidebar-state.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +175 -3
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/appearance.d.ts +40 -0
- package/dist/client/appearance.d.ts.map +1 -0
- package/dist/client/appearance.js +114 -0
- package/dist/client/appearance.js.map +1 -0
- package/dist/client/builder-frame.d.ts +1 -0
- package/dist/client/builder-frame.d.ts.map +1 -1
- package/dist/client/builder-frame.js +19 -9
- package/dist/client/builder-frame.js.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +10 -2
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/components/ui/dropdown-menu.js +2 -2
- package/dist/client/components/ui/dropdown-menu.js.map +1 -1
- package/dist/client/components/ui/hover-card.js +1 -1
- package/dist/client/components/ui/hover-card.js.map +1 -1
- package/dist/client/components/ui/popover.js +1 -1
- package/dist/client/components/ui/popover.js.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts +7 -0
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +63 -32
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +5 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +36 -6
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +13 -1
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/dev-mode.d.ts +14 -0
- package/dist/client/dev-mode.d.ts.map +1 -0
- package/dist/client/dev-mode.js +14 -0
- package/dist/client/dev-mode.js.map +1 -0
- package/dist/client/error-format.d.ts +3 -2
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +9 -2
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/EmbeddedTool.d.ts +20 -0
- package/dist/client/extensions/EmbeddedTool.d.ts.map +1 -0
- package/dist/client/extensions/EmbeddedTool.js +199 -0
- package/dist/client/extensions/EmbeddedTool.js.map +1 -0
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +24 -2
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ToolEditor.d.ts +5 -0
- package/dist/client/extensions/ToolEditor.d.ts.map +1 -0
- package/dist/client/extensions/ToolEditor.js +129 -0
- package/dist/client/extensions/ToolEditor.js.map +1 -0
- package/dist/client/extensions/ToolViewer.d.ts +5 -0
- package/dist/client/extensions/ToolViewer.d.ts.map +1 -0
- package/dist/client/extensions/ToolViewer.js +400 -0
- package/dist/client/extensions/ToolViewer.js.map +1 -0
- package/dist/client/extensions/ToolViewerPage.d.ts +2 -0
- package/dist/client/extensions/ToolViewerPage.d.ts.map +1 -0
- package/dist/client/extensions/ToolViewerPage.js +24 -0
- package/dist/client/extensions/ToolViewerPage.js.map +1 -0
- package/dist/client/extensions/ToolsListPage.d.ts +2 -0
- package/dist/client/extensions/ToolsListPage.d.ts.map +1 -0
- package/dist/client/extensions/ToolsListPage.js +67 -0
- package/dist/client/extensions/ToolsListPage.js.map +1 -0
- package/dist/client/extensions/ToolsSidebarSection.d.ts +2 -0
- package/dist/client/extensions/ToolsSidebarSection.d.ts.map +1 -0
- package/dist/client/extensions/ToolsSidebarSection.js +236 -0
- package/dist/client/extensions/ToolsSidebarSection.js.map +1 -0
- package/dist/client/extensions/tool-order.d.ts +7 -0
- package/dist/client/extensions/tool-order.d.ts.map +1 -0
- package/dist/client/extensions/tool-order.js +47 -0
- package/dist/client/extensions/tool-order.js.map +1 -0
- package/dist/client/index.d.ts +8 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +1 -0
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.js +23 -2
- package/dist/client/org/InvitationBanner.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +5 -4
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +57 -9
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +10 -6
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/workspace-app-links.d.ts +31 -0
- package/dist/client/org/workspace-app-links.d.ts.map +1 -0
- package/dist/client/org/workspace-app-links.js +268 -0
- package/dist/client/org/workspace-app-links.js.map +1 -0
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +18 -5
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/resources/use-resources.d.ts +18 -13
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +24 -6
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -1
- package/dist/client/settings/BackgroundAgentSection.js +9 -1
- package/dist/client/settings/BackgroundAgentSection.js.map +1 -1
- package/dist/client/settings/BrowserSection.d.ts.map +1 -1
- package/dist/client/settings/BrowserSection.js +16 -1
- package/dist/client/settings/BrowserSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +4 -1
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +5 -5
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +8 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +50 -13
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.spec.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.spec.d.ts.map +1 -0
- package/dist/client/settings/useBuilderStatus.spec.js +64 -0
- package/dist/client/settings/useBuilderStatus.spec.js.map +1 -0
- package/dist/client/sharing/ShareButton.d.ts +5 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +60 -6
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/theme.js +1 -1
- package/dist/client/theme.js.map +1 -1
- package/dist/client/tools/EmbeddedTool.d.ts +20 -0
- package/dist/client/tools/EmbeddedTool.d.ts.map +1 -0
- package/dist/client/tools/EmbeddedTool.js +199 -0
- package/dist/client/tools/EmbeddedTool.js.map +1 -0
- package/dist/client/tools/ExtensionSlot.d.ts +27 -0
- package/dist/client/tools/ExtensionSlot.d.ts.map +1 -0
- package/dist/client/tools/ExtensionSlot.js +96 -0
- package/dist/client/tools/ExtensionSlot.js.map +1 -0
- package/dist/client/tools/ToolEditor.d.ts +5 -0
- package/dist/client/tools/ToolEditor.d.ts.map +1 -0
- package/dist/client/tools/ToolEditor.js +129 -0
- package/dist/client/tools/ToolEditor.js.map +1 -0
- package/dist/client/tools/ToolViewer.d.ts +5 -0
- package/dist/client/tools/ToolViewer.d.ts.map +1 -0
- package/dist/client/tools/ToolViewer.js +400 -0
- package/dist/client/tools/ToolViewer.js.map +1 -0
- package/dist/client/tools/ToolViewerPage.d.ts +2 -0
- package/dist/client/tools/ToolViewerPage.d.ts.map +1 -0
- package/dist/client/tools/ToolViewerPage.js +24 -0
- package/dist/client/tools/ToolViewerPage.js.map +1 -0
- package/dist/client/tools/ToolsListPage.d.ts +2 -0
- package/dist/client/tools/ToolsListPage.d.ts.map +1 -0
- package/dist/client/tools/ToolsListPage.js +67 -0
- package/dist/client/tools/ToolsListPage.js.map +1 -0
- package/dist/client/tools/ToolsSidebarSection.d.ts +2 -0
- package/dist/client/tools/ToolsSidebarSection.d.ts.map +1 -0
- package/dist/client/tools/ToolsSidebarSection.js +236 -0
- package/dist/client/tools/ToolsSidebarSection.js.map +1 -0
- package/dist/client/tools/iframe-bridge.d.ts +38 -0
- package/dist/client/tools/iframe-bridge.d.ts.map +1 -0
- package/dist/client/tools/iframe-bridge.js +207 -0
- package/dist/client/tools/iframe-bridge.js.map +1 -0
- package/dist/client/tools/index.d.ts +8 -0
- package/dist/client/tools/index.d.ts.map +1 -0
- package/dist/client/tools/index.js +8 -0
- package/dist/client/tools/index.js.map +1 -0
- package/dist/client/tools/tool-order.d.ts +7 -0
- package/dist/client/tools/tool-order.d.ts.map +1 -0
- package/dist/client/tools/tool-order.js +47 -0
- package/dist/client/tools/tool-order.js.map +1 -0
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.js +2 -3
- package/dist/client/transcription/BuilderTranscriptionCta.js.map +1 -1
- package/dist/client/use-change-version.d.ts +46 -0
- package/dist/client/use-change-version.d.ts.map +1 -0
- package/dist/client/use-change-version.js +135 -0
- package/dist/client/use-change-version.js.map +1 -0
- package/dist/client/use-chat-threads.d.ts +16 -2
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +87 -12
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-chat-threads.spec.d.ts +2 -0
- package/dist/client/use-chat-threads.spec.d.ts.map +1 -0
- package/dist/client/use-chat-threads.spec.js +85 -0
- package/dist/client/use-chat-threads.spec.js.map +1 -0
- package/dist/client/use-db-sync.d.ts +5 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +41 -16
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/use-pinch-zoom.d.ts +35 -0
- package/dist/client/use-pinch-zoom.d.ts.map +1 -0
- package/dist/client/use-pinch-zoom.js +105 -0
- package/dist/client/use-pinch-zoom.js.map +1 -0
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +99 -5
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +3 -0
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/store.d.ts +5 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +16 -1
- package/dist/extensions/store.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +3 -0
- package/dist/file-upload/actions/upload-image.d.ts.map +1 -0
- package/dist/file-upload/actions/upload-image.js +145 -0
- package/dist/file-upload/actions/upload-image.js.map +1 -0
- package/dist/file-upload/builder.d.ts.map +1 -1
- package/dist/file-upload/builder.js +31 -11
- package/dist/file-upload/builder.js.map +1 -1
- package/dist/file-upload/index.d.ts +1 -0
- package/dist/file-upload/index.d.ts.map +1 -1
- package/dist/file-upload/index.js +1 -0
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/pre-upload-attachments.d.ts +39 -0
- package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -0
- package/dist/file-upload/pre-upload-attachments.js +110 -0
- package/dist/file-upload/pre-upload-attachments.js.map +1 -0
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +8 -7
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/onboarding/default-steps.js +1 -1
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/org/context.d.ts +15 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +25 -0
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +2 -2
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +3 -17
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/index.d.ts +1 -1
- package/dist/org/index.d.ts.map +1 -1
- package/dist/org/index.js +1 -1
- package/dist/org/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +6 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +30 -6
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts +11 -2
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +20 -3
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +28 -3
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +170 -20
- package/dist/resources/store.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 +16 -4
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/write.d.ts +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +47 -3
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -3
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +214 -25
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts +35 -0
- package/dist/server/agent-discovery.d.ts.map +1 -1
- package/dist/server/agent-discovery.js +139 -8
- package/dist/server/agent-discovery.js.map +1 -1
- package/dist/server/app-url.d.ts +12 -6
- package/dist/server/app-url.d.ts.map +1 -1
- package/dist/server/app-url.js +58 -11
- package/dist/server/app-url.js.map +1 -1
- package/dist/server/auth.d.ts +22 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +316 -65
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +0 -4
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +0 -3
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +23 -0
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +29 -14
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +14 -0
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +88 -11
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +65 -17
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +47 -17
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/local-migration.d.ts +41 -0
- package/dist/server/local-migration.d.ts.map +1 -0
- package/dist/server/local-migration.js +235 -0
- package/dist/server/local-migration.js.map +1 -0
- package/dist/server/oauth-public-origin.d.ts.map +1 -1
- package/dist/server/oauth-public-origin.js +19 -1
- package/dist/server/oauth-public-origin.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +74 -19
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +20 -5
- package/dist/server/poll.js.map +1 -1
- package/dist/server/request-context.d.ts +8 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/llm-connection.d.ts +10 -0
- package/dist/shared/llm-connection.d.ts.map +1 -0
- package/dist/shared/llm-connection.js +29 -0
- package/dist/shared/llm-connection.js.map +1 -0
- package/dist/shared/workspace-app-audience.d.ts +25 -0
- package/dist/shared/workspace-app-audience.d.ts.map +1 -0
- package/dist/shared/workspace-app-audience.js +126 -0
- package/dist/shared/workspace-app-audience.js.map +1 -0
- package/dist/shared/workspace-app-id.d.ts +1 -1
- package/dist/shared/workspace-app-id.d.ts.map +1 -1
- package/dist/shared/workspace-app-id.js +1 -0
- package/dist/shared/workspace-app-id.js.map +1 -1
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +46 -5
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -1
- package/dist/sharing/actions/list-resource-shares.js +8 -1
- package/dist/sharing/actions/list-resource-shares.js.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.js +12 -3
- 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 +50 -1
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/sharing/registry.d.ts +26 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +91 -0
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +72 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +60 -37
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +28 -17
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/dist/templates/default/AGENTS.md +22 -19
- package/dist/templates/default/actions/navigate.ts +3 -0
- package/dist/templates/default/app/hooks/use-navigation-state.ts +29 -5
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +251 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +264 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +130 -0
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +112 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +88 -0
- package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +191 -0
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +74 -0
- package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +75 -0
- package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +190 -0
- package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +168 -0
- package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +163 -0
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +205 -0
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +720 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +92 -0
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +285 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +192 -0
- package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +43 -0
- package/dist/templates/workspace-core/.agents/skills/portability/SKILL.md +84 -0
- package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +313 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +112 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +165 -0
- package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +41 -0
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +239 -0
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +191 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +73 -0
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +217 -0
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +132 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +150 -0
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +124 -0
- package/dist/templates/workspace-core/AGENTS.md +16 -1
- package/dist/templates/workspace-root/AGENTS.md +35 -0
- package/dist/templates/workspace-root/README.md +7 -0
- package/dist/tools/actions.d.ts +3 -0
- package/dist/tools/actions.d.ts.map +1 -0
- package/dist/tools/actions.js +272 -0
- package/dist/tools/actions.js.map +1 -0
- package/dist/tools/fetch-tool.d.ts +23 -0
- package/dist/tools/fetch-tool.d.ts.map +1 -0
- package/dist/tools/fetch-tool.js +178 -0
- package/dist/tools/fetch-tool.js.map +1 -0
- package/dist/tools/html-shell.d.ts +45 -0
- package/dist/tools/html-shell.d.ts.map +1 -0
- package/dist/tools/html-shell.js +514 -0
- package/dist/tools/html-shell.js.map +1 -0
- package/dist/tools/proxy-security.d.ts +12 -0
- package/dist/tools/proxy-security.d.ts.map +1 -0
- package/dist/tools/proxy-security.js +158 -0
- package/dist/tools/proxy-security.js.map +1 -0
- package/dist/tools/routes.d.ts +2 -0
- package/dist/tools/routes.d.ts.map +1 -0
- package/dist/tools/routes.js +627 -0
- package/dist/tools/routes.js.map +1 -0
- package/dist/tools/schema.d.ts +664 -0
- package/dist/tools/schema.d.ts.map +1 -0
- package/dist/tools/schema.js +146 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/slots/routes.d.ts +15 -0
- package/dist/tools/slots/routes.d.ts.map +1 -0
- package/dist/tools/slots/routes.js +94 -0
- package/dist/tools/slots/routes.js.map +1 -0
- package/dist/tools/slots/schema.d.ts +303 -0
- package/dist/tools/slots/schema.d.ts.map +1 -0
- package/dist/tools/slots/schema.js +76 -0
- package/dist/tools/slots/schema.js.map +1 -0
- package/dist/tools/slots/store.d.ts +66 -0
- package/dist/tools/slots/store.d.ts.map +1 -0
- package/dist/tools/slots/store.js +227 -0
- package/dist/tools/slots/store.js.map +1 -0
- package/dist/tools/store.d.ts +40 -0
- package/dist/tools/store.d.ts.map +1 -0
- package/dist/tools/store.js +193 -0
- package/dist/tools/store.js.map +1 -0
- package/dist/tools/theme.d.ts +2 -0
- package/dist/tools/theme.d.ts.map +1 -0
- package/dist/tools/theme.js +67 -0
- package/dist/tools/theme.js.map +1 -0
- package/dist/tools/url-safety.d.ts +24 -0
- package/dist/tools/url-safety.d.ts.map +1 -0
- package/dist/tools/url-safety.js +224 -0
- package/dist/tools/url-safety.js.map +1 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +4 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/authentication.md +36 -0
- package/docs/content/creating-templates.md +15 -0
- package/docs/content/dispatch.md +3 -3
- package/docs/content/multi-app-workspace.md +5 -0
- package/docs/content/tracking.md +12 -0
- package/docs/content/workspace-management.md +39 -4
- package/package.json +15 -12
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +72 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +60 -37
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +28 -17
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/src/templates/default/AGENTS.md +22 -19
- package/src/templates/default/actions/navigate.ts +3 -0
- package/src/templates/default/app/hooks/use-navigation-state.ts +29 -5
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +251 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +264 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +130 -0
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +112 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +88 -0
- package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +191 -0
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +74 -0
- package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +75 -0
- package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +190 -0
- package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +168 -0
- package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +163 -0
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +205 -0
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +720 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +92 -0
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +285 -0
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +192 -0
- package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +43 -0
- package/src/templates/workspace-core/.agents/skills/portability/SKILL.md +84 -0
- package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +313 -0
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +112 -0
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +165 -0
- package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +41 -0
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +239 -0
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +191 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +79 -0
- package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +73 -0
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +79 -0
- package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +217 -0
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +132 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +150 -0
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +124 -0
- package/src/templates/workspace-core/AGENTS.md +16 -1
- package/src/templates/workspace-root/AGENTS.md +35 -0
- package/src/templates/workspace-root/README.md +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcesPanel.js","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport {\n IconPlus,\n IconUpload,\n IconArrowLeft,\n IconPencil,\n IconBulb,\n IconBolt,\n IconTrash,\n IconEye,\n IconCode,\n IconClock,\n IconMessageChatbot,\n IconBuildingSkyscraper,\n IconBrowser,\n IconExternalLink,\n IconLoader2,\n IconHelp,\n IconPlugConnected,\n IconCheck,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { PromptComposer } from \"../composer/PromptComposer.js\";\nimport { ResourceTree } from \"./ResourceTree.js\";\nimport { ResourceEditor } from \"./ResourceEditor.js\";\nimport { serializeFrontmatter } from \"../../resources/metadata.js\";\nimport {\n useResourceTree,\n useResource,\n useCreateResource,\n useUpdateResource,\n useDeleteResource,\n useUploadResource,\n withMcpServersFolder,\n withAgentScratchFolder,\n type ResourceScope,\n type ResourceMeta,\n} from \"./use-resources.js\";\nimport {\n formatMcpServerError,\n getMcpUrlValidationError,\n useMcpServers,\n useCreateMcpServer,\n useDeleteMcpServer,\n testMcpServerUrl,\n parseMcpVirtualId,\n type McpServerScope,\n} from \"./use-mcp-servers.js\";\nimport { McpServerDetail } from \"./McpServerDetail.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\n\nconst WORKSPACE_DOCS_URL = \"https://agent-native.com/docs/workspace\";\n\n// ─── Create Menu (unified + button) ────────────────────────────────────────\n\ntype CreateMenuView =\n | \"menu\"\n | \"file\"\n | \"skill\"\n | \"job\"\n | \"agent-mode\"\n | \"agent-prompt\"\n | \"agent-form\"\n | \"mcp-server\";\n\nconst AGENT_MODEL_OPTIONS = [\n { value: \"inherit\", label: \"Default model\" },\n { value: \"claude-sonnet-4-6\", label: \"Claude Sonnet 4.6\" },\n { value: \"claude-haiku-4-5-20251001\", label: \"Claude Haiku 4.5\" },\n] as const;\n\nfunction slugifyName(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"agent\"\n );\n}\n\nfunction buildAgentResourceContent({\n name,\n description,\n model,\n tools,\n body,\n}: {\n name: string;\n description: string;\n model: string;\n tools: string;\n body: string;\n}): string {\n const fields = [\n { key: \"name\", value: name },\n { key: \"description\", value: description },\n { key: \"model\", value: model },\n { key: \"tools\", value: tools },\n { key: \"delegate-default\", value: \"false\" },\n ];\n return serializeFrontmatter(fields) + body.trim() + \"\\n\";\n}\n\nfunction CreateMenu({\n scope,\n onCreateFile,\n onCreateResource,\n onCreateMcpServer,\n canCreateOrgMcp,\n hasOrg,\n onCreated,\n}: {\n scope: ResourceScope;\n onCreateFile: (name: string) => void;\n onCreateResource: (path: string, content: string, mimeType?: string) => void;\n onCreateMcpServer: (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => Promise<void>;\n canCreateOrgMcp: boolean;\n hasOrg: boolean;\n onCreated?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<CreateMenuView>(\"menu\");\n const [value, setValue] = useState(\"\");\n const [agentName, setAgentName] = useState(\"\");\n const [agentDescription, setAgentDescription] = useState(\"\");\n const [agentModel, setAgentModel] = useState<string>(\"inherit\");\n const [agentInstructions, setAgentInstructions] = useState(\n `# Role\\n\\nDefine how this agent should work.\\n\\n## Focus\\n\\n- What kinds of tasks it should handle\\n- What tone or approach it should use\\n- Important constraints or preferences\\n`,\n );\n const defaultMcpScope: McpServerScope =\n scope === \"shared\" && canCreateOrgMcp ? \"org\" : \"user\";\n const [mcpScope, setMcpScope] = useState<McpServerScope>(defaultMcpScope);\n const [mcpName, setMcpName] = useState(\"\");\n const [mcpUrl, setMcpUrl] = useState(\"\");\n const [mcpDescription, setMcpDescription] = useState(\"\");\n const [mcpHeadersText, setMcpHeadersText] = useState(\"\");\n const [mcpBusy, setMcpBusy] = useState(false);\n const [mcpError, setMcpError] = useState<string | null>(null);\n const [mcpTestResult, setMcpTestResult] = useState<{\n ok: boolean;\n message: string;\n } | null>(null);\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (open) {\n setView(\"menu\");\n setValue(\"\");\n setAgentName(\"\");\n setAgentDescription(\"\");\n setAgentModel(\"inherit\");\n setAgentInstructions(\n `# Role\\n\\nDefine how this agent should work.\\n\\n## Focus\\n\\n- What kinds of tasks it should handle\\n- What tone or approach it should use\\n- Important constraints or preferences\\n`,\n );\n setMcpScope(defaultMcpScope);\n setMcpName(\"\");\n setMcpUrl(\"\");\n setMcpDescription(\"\");\n setMcpHeadersText(\"\");\n setMcpError(null);\n setMcpTestResult(null);\n setMcpBusy(false);\n }\n }, [open, defaultMcpScope]);\n\n useEffect(() => {\n if (view !== \"menu\" && view !== \"agent-form\") {\n setValue(\"\");\n if (view === \"mcp-server\") {\n setMcpError(null);\n setMcpTestResult(null);\n }\n const t = setTimeout(() => inputRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }\n }, [view]);\n\n const clearMcpFeedback = () => {\n setMcpError(null);\n setMcpTestResult(null);\n };\n\n const submitFile = () => {\n const trimmed = value.trim();\n if (trimmed) {\n onCreateFile(trimmed);\n setOpen(false);\n }\n };\n\n const submitSkill = (text: string = value) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n sendToAgentChat({\n message: `Create a skill: ${trimmed}`,\n newTab: true,\n context: `The user wants to create an agent skill. Their description: \"${trimmed}\"\n\nFollow the create-skill pattern to build this. Before writing:\n\n1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. \"code review\" → \"code-review\")\n2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)\n3. **Write the skill** as a ${scope} resource at path \"skills/<name>/SKILL.md\" using resource-write\n\nThe skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:\n- Clear rule/purpose statement\n- Why this skill exists\n- How to follow it (with code examples where helpful)\n- Common violations to avoid\n- Related skills\n\nTemplate for a Pattern skill:\n\\`\\`\\`markdown\n---\nname: <hyphen-case-name>\ndescription: >-\n <Under 40 words. When should this trigger?>\n---\n\n# <Skill Name>\n\n## Rule\n<One sentence: what must be true>\n\n## Why\n<Why this rule exists>\n\n## How\n<How to follow it, with code examples>\n\n## Don't\n<Common violations>\n\\`\\`\\`\n\nTemplate for a Workflow skill:\n\\`\\`\\`markdown\n---\nname: <hyphen-case-name>\ndescription: >-\n <Under 40 words. When should this trigger?>\n---\n\n# <Workflow Name>\n\n## Prerequisites\n<What must be in place>\n\n## Steps\n<Numbered steps with code examples>\n\n## Verification\n<How to confirm it worked>\n\\`\\`\\`\n\nAfter creating, update the shared AGENTS.md resource to reference the new skill in its skills table.\n\nKeep the skill concise (under 500 lines) and actionable.`,\n submit: true,\n });\n\n setOpen(false);\n onCreated?.();\n };\n\n const submitJob = (text: string = value) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n sendToAgentChat({\n message: `Create a recurring job: ${trimmed}`,\n newTab: true,\n context: `The user wants to create a recurring job. Their description: \"${trimmed}\"\n\nUse the manage-jobs tool with action \"create\" to create this. You need to:\n1. Derive a hyphen-case name from the description\n2. Convert the schedule to a cron expression (e.g., \"every weekday at 9am\" → \"0 9 * * 1-5\")\n3. Write clear, self-contained instructions for what the agent should do each time the job runs\n4. Create it in ${scope} scope\n\nThe job will run automatically on the schedule. Make the instructions specific — include which actions to call and what to do with results.`,\n submit: true,\n });\n\n setOpen(false);\n };\n\n const submitAgentPrompt = (text: string = value) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n sendToAgentChat({\n message: `Create a custom agent: ${trimmed}`,\n newTab: true,\n context: `The user wants a reusable custom sub-agent profile for the workspace. Their description: \"${trimmed}\"\n\nCreate it as a ${scope} resource under \"agents/<name>.md\" using resource-write.\n\nRequirements:\n1. Derive a hyphen-case file name from the intent\n2. Use YAML frontmatter with:\n - name\n - description\n - model (use \"inherit\" unless the request clearly needs a different model)\n - tools (set to \"inherit\")\n - delegate-default (set to false)\n3. Put the main operating instructions in the markdown body\n4. Keep it concise and directive, similar to a Claude Code-style custom agent\n\nTemplate:\n\\`\\`\\`markdown\n---\nname: Design\ndescription: >-\n Helps with product and interface design decisions.\nmodel: inherit\ntools: inherit\ndelegate-default: false\n---\n\n# Role\n\nYou are a focused design agent.\n\n## Responsibilities\n\n- ...\n\n## Approach\n\n- ...\n\\`\\`\\`\n\nThe result should be a reusable agent profile, not a one-off task response.`,\n submit: true,\n });\n\n setOpen(false);\n onCreated?.();\n };\n\n const submitAgentManual = () => {\n const trimmedName = agentName.trim();\n const trimmedDescription = agentDescription.trim();\n const trimmedInstructions = agentInstructions.trim();\n if (!trimmedName || !trimmedDescription || !trimmedInstructions) return;\n\n const slug = slugifyName(trimmedName);\n onCreateResource(\n `agents/${slug}.md`,\n buildAgentResourceContent({\n name: trimmedName,\n description: trimmedDescription,\n model: agentModel,\n tools: \"inherit\",\n body: trimmedInstructions,\n }),\n \"text/markdown\",\n );\n setOpen(false);\n onCreated?.();\n };\n\n const parseHeaderLines = (\n text: string,\n ): Record<string, string> | undefined => {\n const out: Record<string, string> = {};\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const idx = trimmed.indexOf(\":\");\n if (idx <= 0) continue;\n const key = trimmed.slice(0, idx).trim();\n const value = trimmed.slice(idx + 1).trim();\n if (!key || !value) continue;\n out[key] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n };\n\n const submitMcpServer = async () => {\n const name = mcpName.trim();\n const url = mcpUrl.trim();\n if (!name || !url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpError(validationError);\n setMcpTestResult(null);\n return;\n }\n setMcpError(null);\n setMcpBusy(true);\n try {\n await onCreateMcpServer({\n scope: mcpScope,\n name,\n url,\n headers: parseHeaderLines(mcpHeadersText),\n description: mcpDescription.trim() || undefined,\n });\n setOpen(false);\n onCreated?.();\n } catch (err: any) {\n setMcpError(formatMcpServerError(err));\n } finally {\n setMcpBusy(false);\n }\n };\n\n const runMcpTest = async () => {\n const url = mcpUrl.trim();\n if (!url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpTestResult({ ok: false, message: validationError });\n setMcpError(null);\n return;\n }\n setMcpTestResult(null);\n setMcpError(null);\n setMcpBusy(true);\n try {\n const res = await testMcpServerUrl(url, parseHeaderLines(mcpHeadersText));\n if (res.ok) {\n setMcpTestResult({\n ok: true,\n message: `${res.toolCount ?? 0} tool${res.toolCount === 1 ? \"\" : \"s\"} available`,\n });\n } else {\n setMcpTestResult({ ok: false, message: res.error ?? \"Failed\" });\n }\n } catch (err: any) {\n setMcpTestResult({ ok: false, message: formatMcpServerError(err) });\n } finally {\n setMcpBusy(false);\n }\n };\n\n const menuItems: {\n icon: React.ReactNode;\n label: string;\n desc: string;\n action: () => void;\n }[] = [\n {\n icon: <IconPlus className=\"h-3.5 w-3.5\" />,\n label: \"Create File\",\n desc: \"Add a new file at a path\",\n action: () => setView(\"file\"),\n },\n {\n icon: <IconBulb className=\"h-3.5 w-3.5\" />,\n label: \"Create Skill\",\n desc: \"Teach the agent a new ability\",\n action: () => setView(\"skill\"),\n },\n {\n icon: <IconClock className=\"h-3.5 w-3.5\" />,\n label: \"Schedule Task\",\n desc: \"Run something on a schedule\",\n action: () => setView(\"job\"),\n },\n {\n icon: <IconMessageChatbot className=\"h-3.5 w-3.5\" />,\n label: \"Create Custom Agent\",\n desc: \"Add a reusable sub-agent profile\",\n action: () => setView(\"agent-mode\"),\n },\n {\n icon: <IconBolt className=\"h-3.5 w-3.5\" />,\n label: \"Create Automation\",\n desc: \"Set up a when-X-do-Y rule\",\n action: () => {\n setOpen(false);\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n sendToAgentChat({\n message:\n \"Help me create a new automation. Ask me what I want to automate.\",\n context: `The user wants to create a new automation. Scope: personal. Use manage-automations with action=define to create it. Ask clarifying questions if needed about what event to trigger on, conditions, and what actions to take.`,\n submit: true,\n newTab: true,\n });\n onCreated?.();\n },\n },\n {\n icon: <IconPlugConnected className=\"h-3.5 w-3.5\" />,\n label: \"Connect MCP Server\",\n desc: \"Expose external tools to the agent\",\n action: () => setView(\"mcp-server\"),\n },\n ];\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n open && \"bg-accent/50 text-foreground\",\n )}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent>Create new...</TooltipContent>\n </Tooltip>\n <PopoverContent\n align=\"end\"\n sideOffset={6}\n collisionPadding={8}\n className={cn(\n \"z-[260] p-0 text-[13px] leading-normal\",\n view === \"menu\" || view === \"file\"\n ? \"w-[260px]\"\n : \"max-h-[70vh] w-[calc(100vw-24px)] max-w-[380px] overflow-y-auto\",\n )}\n >\n {view === \"menu\" && (\n <div className=\"py-1\">\n {menuItems.map((item) => (\n <button\n key={item.label}\n onClick={item.action}\n className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\"\n >\n <span className=\"text-muted-foreground\">{item.icon}</span>\n <div className=\"min-w-0\">\n <div className=\"text-[12px] font-medium text-foreground\">\n {item.label}\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n {item.desc}\n </div>\n </div>\n </button>\n ))}\n </div>\n )}\n\n {view === \"file\" && (\n <div className=\"p-3\">\n <label className=\"mb-1.5 block text-[11px] font-medium text-muted-foreground\">\n File path\n </label>\n <input\n ref={inputRef as React.RefObject<HTMLInputElement>}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitFile();\n if (e.key === \"Escape\") {\n e.stopPropagation();\n setView(\"menu\");\n }\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"notes/ideas.md\"\n />\n <div className=\"mt-2.5 flex justify-end\">\n <button\n onClick={submitFile}\n disabled={!value.trim()}\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n Create\n </button>\n </div>\n </div>\n )}\n\n {view === \"skill\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Create Skill\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Describe what kind of skill you want and the agent will create it.\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"e.g. A skill that reviews PRs for security issues and OWASP top 10 vulnerabilities\"\n draftScope=\"resources:create-skill\"\n onSubmit={(text) => submitSkill(text)}\n />\n </div>\n )}\n\n {view === \"job\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Schedule Task\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Describe what should happen and when.\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"e.g. Every weekday at 9am, check for overdue scorecards and send a Slack update\"\n draftScope=\"resources:create-job\"\n onSubmit={(text) => submitJob(text)}\n />\n </div>\n )}\n\n {view === \"agent-mode\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Create Agent\n </label>\n <p className=\"mb-2 text-[10px] leading-relaxed text-muted-foreground/60\">\n Build a reusable sub-agent profile for this workspace.\n </p>\n <div className=\"space-y-2\">\n <button\n onClick={() => setView(\"agent-prompt\")}\n className=\"flex w-full items-start gap-2 rounded-md border border-border px-3 py-2 text-left hover:bg-accent/40\"\n >\n <IconPencil className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div>\n <div className=\"text-[12px] font-medium text-foreground\">\n Describe It\n </div>\n <div className=\"text-[10px] text-muted-foreground/60\">\n Let the agent draft the profile from a prompt.\n </div>\n </div>\n </button>\n <button\n onClick={() => setView(\"agent-form\")}\n className=\"flex w-full items-start gap-2 rounded-md border border-border px-3 py-2 text-left hover:bg-accent/40\"\n >\n <IconMessageChatbot className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div>\n <div className=\"text-[12px] font-medium text-foreground\">\n Fill Form\n </div>\n <div className=\"text-[10px] text-muted-foreground/60\">\n Set the fields manually and start with a markdown template.\n </div>\n </div>\n </button>\n </div>\n </div>\n )}\n\n {view === \"agent-prompt\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Create Agent From Prompt\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Describe the agent you want. It will be saved under{\" \"}\n <code>agents/</code>.\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"e.g. A design agent that critiques layouts, suggests UI direction, and prefers concise product reasoning\"\n draftScope=\"resources:create-agent\"\n onSubmit={(text) => submitAgentPrompt(text)}\n />\n </div>\n )}\n\n {view === \"agent-form\" && (\n <div className=\"p-3\">\n <label className=\"mb-2 block text-[11px] font-semibold text-foreground\">\n Create Agent Manually\n </label>\n <div className=\"space-y-2\">\n <input\n value={agentName}\n onChange={(e) => setAgentName(e.target.value)}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Agent name\"\n />\n <input\n value={agentDescription}\n onChange={(e) => setAgentDescription(e.target.value)}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Short description\"\n />\n <label className=\"block text-[11px] font-medium text-muted-foreground\">\n Model\n </label>\n <select\n value={agentModel}\n onChange={(e) => setAgentModel(e.target.value)}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none focus:ring-1 focus:ring-accent\"\n >\n {AGENT_MODEL_OPTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <label className=\"block text-[11px] font-medium text-muted-foreground\">\n Instructions\n </label>\n <textarea\n value={agentInstructions}\n onChange={(e) => setAgentInstructions(e.target.value)}\n rows={8}\n className=\"w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.5,\n }}\n />\n </div>\n <div className=\"mt-2.5 flex justify-end\">\n <button\n onClick={submitAgentManual}\n disabled={\n !agentName.trim() ||\n !agentDescription.trim() ||\n !agentInstructions.trim()\n }\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n Create\n </button>\n </div>\n </div>\n )}\n\n {view === \"mcp-server\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Connect MCP Server\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Point at any Streamable HTTP MCP server (Zapier, Cloudflare,\n internal tools). Its tools become available to the agent. Use\n Personal for private or staging servers; use Organization only for\n vetted servers the whole org should share.{\" \"}\n <a\n href=\"https://agent-native.com/docs/mcp-clients#remote-via-ui\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-0.5 text-muted-foreground/80 underline hover:text-foreground\"\n >\n Learn more\n <IconExternalLink className=\"inline h-2.5 w-2.5\" />\n </a>\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex gap-1 rounded-md border border-border p-0.5\">\n <button\n type=\"button\"\n onClick={() => setMcpScope(\"user\")}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"user\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n Personal\n </button>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() =>\n hasOrg && canCreateOrgMcp && setMcpScope(\"org\")\n }\n disabled={!hasOrg || !canCreateOrgMcp}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"org\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n (!hasOrg || !canCreateOrgMcp) &&\n \"cursor-not-allowed opacity-50 hover:text-muted-foreground\",\n )}\n >\n Organization\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {!hasOrg\n ? \"Join an organization to share MCP servers\"\n : !canCreateOrgMcp\n ? \"Only owners and admins can add org-scope servers\"\n : undefined}\n </TooltipContent>\n </Tooltip>\n </div>\n <input\n value={mcpName}\n onChange={(e) => {\n setMcpName(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Server name (e.g. zapier-staging)\"\n />\n <input\n value={mcpUrl}\n onChange={(e) => {\n setMcpUrl(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"https://mcp.example.com/\"\n />\n <input\n value={mcpDescription}\n onChange={(e) => {\n setMcpDescription(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div>\n <label className=\"block text-[10px] font-medium text-foreground\">\n Headers\n </label>\n <p className=\"mt-0.5 text-[10px] leading-snug text-muted-foreground/70\">\n Optional. One per line, for example Authorization: Bearer\n sk-...\n </p>\n </div>\n <textarea\n value={mcpHeadersText}\n onChange={(e) => {\n setMcpHeadersText(e.target.value);\n clearMcpFeedback();\n }}\n rows={2}\n className=\"w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n }}\n placeholder=\"Authorization: Bearer sk-...\"\n />\n {mcpTestResult && (\n <div\n className={cn(\n \"flex items-start gap-1 text-[11px] leading-snug\",\n mcpTestResult.ok\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\",\n )}\n >\n {mcpTestResult.ok && (\n <IconCheck className=\"mt-0.5 h-3 w-3 shrink-0\" />\n )}\n <span className=\"min-w-0 break-words\">\n {mcpTestResult.message}\n </span>\n </div>\n )}\n {mcpError && (\n <div className=\"break-words text-[11px] leading-snug text-red-600 dark:text-red-400\">\n {mcpError}\n </div>\n )}\n </div>\n <div className=\"mt-2.5 flex items-center justify-between gap-2\">\n <button\n type=\"button\"\n onClick={runMcpTest}\n disabled={!mcpUrl.trim() || mcpBusy}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent disabled:opacity-40 disabled:pointer-events-none\"\n >\n Test\n </button>\n <button\n type=\"button\"\n onClick={submitMcpServer}\n disabled={!mcpName.trim() || !mcpUrl.trim() || mcpBusy}\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n {mcpBusy ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Connect\"\n )}\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── PathBreadcrumb ─────────────────────────────────────────────────────────\n\nfunction PathBreadcrumb({ path }: { path: string }) {\n const parts = path.split(\"/\").filter(Boolean);\n return (\n <div className=\"flex items-center gap-0.5 text-[11px] text-muted-foreground/60 overflow-hidden\">\n {parts.map((part, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"shrink-0\">/</span>}\n <span\n className={cn(\n \"truncate\",\n i === parts.length - 1 && \"text-muted-foreground\",\n )}\n >\n {part}\n </span>\n </React.Fragment>\n ))}\n </div>\n );\n}\n\n// ─── ResourcesPanel ─────────────────────────────────────────────────────────\n\nconst DEFAULT_AGENTS_MD_CLIENT = `# Agent Instructions\n\nThis file customizes how the AI agent behaves in this app. Edit it to add your own instructions, preferences, and context.\n\n## What to put here\n\n- **Preferences** — Tone, style, verbosity, response format\n- **Context** — Domain knowledge, terminology, team conventions\n- **Rules** — Things the agent should always/never do\n- **Skills** — Reference skill files for specialized tasks (create them in the \\`skills/\\` folder)\n\n## Skills\n\nCreate skill files under \\`skills/<name>/SKILL.md\\` to give the agent specialized knowledge. Reference them here:\n\n| Skill | Path | Description |\n|-------|------|-------------|\n| *(use the skill button to create one)* | \\`skills/example/SKILL.md\\` | |\n`;\n\n// BuilderBrowserCard moved to settings/BrowserSection.tsx\n\nexport function ResourcesPanel() {\n const { data: org } = useOrg();\n // Non-admin org members get read-only access to organization resources.\n // Solo deployments (no orgId) behave as owner — users can edit their own.\n const canEditOrg =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n\n const [activeScope, setActiveScope] = useState<ResourceScope>(\n canEditOrg ? \"shared\" : \"personal\",\n );\n const [selectedResourceId, setSelectedResourceId] = useState<string | null>(\n null,\n );\n const [toolbarDeleteConfirmId, setToolbarDeleteConfirmId] = useState<\n string | null\n >(null);\n const [dragOver, setDragOver] = useState(false);\n const [editorView, setEditorView] = useState<\"visual\" | \"code\">(() => {\n try {\n const v = localStorage.getItem(\"resource-editor-view\");\n if (v === \"code\") return \"code\";\n } catch {}\n return \"visual\";\n });\n\n useEffect(() => {\n setToolbarDeleteConfirmId(null);\n }, [selectedResourceId]);\n const [saveStatus, setSaveStatus] = useState<\"idle\" | \"saving\" | \"saved\">(\n \"idle\",\n );\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const sharedTreeQuery = useResourceTree(\"shared\");\n const personalTreeQuery = useResourceTree(\"personal\");\n const mcpServersQuery = useMcpServers();\n const createMcpServer = useCreateMcpServer();\n const deleteMcpServer = useDeleteMcpServer();\n\n // Merge MCP servers into each scope's tree as a virtual `mcp-servers/`\n // folder. The servers live in the settings store, not the resources\n // table — the virtual ids carry the `mcp:<scope>:<id>` prefix that\n // `handleSelect` and `handleDelete` below recognize to route back to\n // the MCP endpoints.\n const personalTree = withAgentScratchFolder(\n withMcpServersFolder(\n personalTreeQuery.data ?? [],\n mcpServersQuery.data?.user ?? [],\n ),\n );\n const sharedTree = withMcpServersFolder(\n sharedTreeQuery.data ?? [],\n mcpServersQuery.data?.org ?? [],\n );\n\n const orgRole = mcpServersQuery.data?.role ?? org?.role ?? null;\n const hasOrgForMcp = !!(mcpServersQuery.data?.orgId ?? org?.orgId);\n const canCreateOrgMcp =\n hasOrgForMcp && (orgRole === \"owner\" || orgRole === \"admin\");\n\n // Virtual MCP server currently selected in the tree (or null for a real\n // resource / nothing). Resolved by scanning both trees' mcp folders for\n // a matching virtual id.\n const selectedMcpServer = React.useMemo(() => {\n const parsed = selectedResourceId\n ? parseMcpVirtualId(selectedResourceId)\n : null;\n if (!parsed) return null;\n const list =\n parsed.scope === \"user\"\n ? (mcpServersQuery.data?.user ?? [])\n : (mcpServersQuery.data?.org ?? []);\n return list.find((s) => s.id === parsed.serverId) ?? null;\n }, [selectedResourceId, mcpServersQuery.data]);\n\n // Sync activeScope once the org role arrives (canEditOrg is resolved async).\n useEffect(() => {\n if (!canEditOrg && activeScope === \"shared\") {\n setActiveScope(\"personal\");\n }\n }, [canEditOrg, activeScope]);\n // Virtual MCP ids aren't in the resources store — skip the fetch so\n // useResource doesn't 404-flash.\n const resourceQuery = useResource(\n selectedResourceId && !parseMcpVirtualId(selectedResourceId)\n ? selectedResourceId\n : null,\n );\n const createResource = useCreateResource();\n const updateResource = useUpdateResource();\n const deleteResource = useDeleteResource();\n const uploadResource = useUploadResource();\n\n // Ensure AGENTS.md exists in the organization scope when the panel opens.\n // The server also seeds it on table init; this is a safety net. Only attempt\n // for users who can write to organization resources — non-admins would just\n // get a 403.\n const seededRef = useRef(false);\n useEffect(() => {\n if (seededRef.current || !canEditOrg) return;\n seededRef.current = true;\n fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path: \"AGENTS.md\",\n content: DEFAULT_AGENTS_MD_CLIENT,\n shared: true,\n ifNotExists: true,\n }),\n }).catch(() => {});\n }, [canEditOrg]);\n\n // Are we viewing a file (editor) or the tree?\n const isEditing = selectedResourceId !== null;\n const isMcpSelected = !!selectedMcpServer;\n\n const handleSelect = useCallback((resource: ResourceMeta) => {\n setSelectedResourceId(resource.id);\n }, []);\n\n const handleBack = useCallback(() => {\n setSelectedResourceId(null);\n }, []);\n\n const handleCreateFile = useCallback(\n (parentPath: string, name: string, scope: ResourceScope) => {\n const path = parentPath ? `${parentPath}/${name}` : name;\n createResource.mutate(\n { path, content: \"\", shared: scope === \"shared\" },\n {\n onSuccess: (data) => {\n setSelectedResourceId(data.id);\n },\n },\n );\n },\n [createResource],\n );\n\n const handleCreateFolder = useCallback(\n (parentPath: string, name: string, scope: ResourceScope) => {\n const path = parentPath ? `${parentPath}/${name}/.keep` : `${name}/.keep`;\n createResource.mutate({ path, content: \"\", shared: scope === \"shared\" });\n },\n [createResource],\n );\n\n const handleCreateFromToolbar = useCallback(\n (name: string) => {\n createResource.mutate(\n { path: name, content: \"\", shared: activeScope === \"shared\" },\n {\n onSuccess: (data) => {\n setSelectedResourceId(data.id);\n },\n },\n );\n },\n [createResource, activeScope],\n );\n\n const handleCreateResourceFromToolbar = useCallback(\n (path: string, content: string, mimeType?: string) => {\n createResource.mutate(\n { path, content, mimeType, shared: activeScope === \"shared\" },\n {\n onSuccess: (data) => {\n setSelectedResourceId(data.id);\n },\n },\n );\n },\n [activeScope, createResource],\n );\n\n const handleDelete = useCallback(\n (id: string) => {\n const mcp = parseMcpVirtualId(id);\n if (mcp) {\n deleteMcpServer.mutate(\n { id: mcp.serverId, scope: mcp.scope },\n {\n onSuccess: () => {\n if (selectedResourceId === id) setSelectedResourceId(null);\n },\n },\n );\n return;\n }\n deleteResource.mutate(id);\n if (selectedResourceId === id) {\n setSelectedResourceId(null);\n }\n },\n [deleteResource, deleteMcpServer, selectedResourceId],\n );\n\n const handleCreateMcpServer = useCallback(\n async (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => {\n const server = await createMcpServer.mutateAsync(args);\n // Select the newly-created virtual entry so the detail view opens.\n setSelectedResourceId(`mcp:${args.scope}:${server.id}`);\n },\n [createMcpServer],\n );\n\n const handleRename = useCallback(\n (id: string, newPath: string) => {\n updateResource.mutate({ id, path: newPath });\n },\n [updateResource],\n );\n\n const handleSave = useCallback(\n (content: string) => {\n if (!selectedResourceId) return;\n updateResource.mutate({ id: selectedResourceId, content });\n },\n [updateResource, selectedResourceId],\n );\n\n const handleUploadFiles = useCallback(\n (files: FileList) => {\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"shared\", activeScope === \"shared\" ? \"true\" : \"false\");\n uploadResource.mutate(formData);\n }\n },\n [uploadResource, activeScope],\n );\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n if (e.dataTransfer.files.length > 0) {\n handleUploadFiles(e.dataTransfer.files);\n }\n },\n [handleUploadFiles],\n );\n\n return (\n <div\n className={cn(\n \"relative flex h-full flex-col min-h-0\",\n dragOver && \"ring-2 ring-inset ring-accent\",\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {/* Toolbar */}\n {isEditing ? (\n <div className=\"flex shrink-0 items-center justify-between border-b border-border px-2 py-1.5\">\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleBack}\n aria-label=\"Back to workspace\"\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconArrowLeft className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Back to workspace</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n {selectedMcpServer ? (\n <PathBreadcrumb\n path={`mcp-servers/${selectedMcpServer.name}.json`}\n />\n ) : resourceQuery.data ? (\n <PathBreadcrumb path={resourceQuery.data.path} />\n ) : null}\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n {!selectedMcpServer && resourceQuery.data && (\n <span\n aria-live=\"polite\"\n className=\"mr-1 w-16 text-right text-[11px] text-muted-foreground/60\"\n >\n {saveStatus === \"saving\"\n ? \"Saving...\"\n : saveStatus === \"saved\"\n ? \"Saved\"\n : \"\"}\n </span>\n )}\n {!selectedMcpServer &&\n resourceQuery.data &&\n (resourceQuery.data.mimeType === \"text/markdown\" ||\n resourceQuery.data.path.endsWith(\".md\")) && (\n <div className=\"flex items-center gap-0.5 mr-1\">\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => setEditorView(\"visual\")}\n aria-label=\"Visual editor\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md\",\n editorView === \"visual\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n )}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Visual editor</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => setEditorView(\"code\")}\n aria-label=\"Code editor\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md\",\n editorView === \"code\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n )}\n >\n <IconCode className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Code editor</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n )}\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => {\n if (!selectedResourceId) return;\n if (toolbarDeleteConfirmId === selectedResourceId) {\n handleDelete(selectedResourceId);\n setToolbarDeleteConfirmId(null);\n } else {\n setToolbarDeleteConfirmId(selectedResourceId);\n }\n }}\n aria-label={\n toolbarDeleteConfirmId === selectedResourceId\n ? \"Confirm delete resource\"\n : \"Delete resource\"\n }\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-destructive hover:bg-accent/50\",\n toolbarDeleteConfirmId === selectedResourceId &&\n \"bg-destructive/10 text-destructive\",\n )}\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {toolbarDeleteConfirmId === selectedResourceId\n ? \"Click again to delete\"\n : \"Delete resource\"}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n ) : (\n /* Floating action buttons — absolute top-right over tree view */\n <div className=\"absolute top-1 right-1 z-10 flex items-center gap-1\">\n <CreateMenu\n scope={activeScope}\n onCreateFile={handleCreateFromToolbar}\n onCreateResource={handleCreateResourceFromToolbar}\n onCreateMcpServer={handleCreateMcpServer}\n canCreateOrgMcp={canCreateOrgMcp}\n hasOrg={hasOrgForMcp}\n />\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Upload file\"\n className=\"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconUpload className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Upload file</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href={WORKSPACE_DOCS_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Open Workspace docs\"\n className=\"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconHelp className=\"h-3.5 w-3.5\" />\n </a>\n </TooltipTrigger>\n <TooltipContent side=\"left\" sideOffset={8}>\n Open Workspace docs\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleUploadFiles(e.target.files);\n e.target.value = \"\";\n }\n }}\n />\n </div>\n )}\n\n {/* Content: either tree OR editor (single view) */}\n <div className=\"flex flex-1 flex-col min-h-0 overflow-hidden\">\n {isEditing ? (\n selectedMcpServer ? (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <McpServerDetail server={selectedMcpServer} />\n </div>\n ) : selectedResourceId && resourceQuery.data ? (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <ResourceEditor\n resource={resourceQuery.data}\n onSave={handleSave}\n view={editorView}\n onViewChange={setEditorView}\n onSaveStatusChange={setSaveStatus}\n hideToolbar\n />\n </div>\n ) : resourceQuery.isError ? (\n <div className=\"flex flex-1 items-center justify-center text-[12px] text-destructive/70\">\n Failed to load resource\n </div>\n ) : (\n <div className=\"flex flex-1 items-center justify-center text-[12px] text-muted-foreground/50\">\n Loading...\n </div>\n )\n ) : (\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {!personalTreeQuery.isLoading &&\n !sharedTreeQuery.isLoading &&\n (personalTreeQuery.data ?? []).length === 0 &&\n (sharedTreeQuery.data ?? []).length === 0 && (\n <div className=\"mx-2 mt-2 rounded-md border border-border bg-muted/30 p-2.5 text-[11px] text-muted-foreground\">\n <p className=\"mb-1 font-medium text-foreground\">\n This is your Workspace\n </p>\n <p className=\"mb-1.5 leading-snug\">\n Files the agent reads and writes — notes, instructions,\n skills, custom agents, scheduled jobs. They live in the\n database, so they persist across sessions and deploys.\n </p>\n <p className=\"mb-2 leading-snug\">\n <span className=\"text-foreground\">Personal</span> is just\n for you.{\" \"}\n <span className=\"text-foreground\">Organization</span> is\n visible to everyone in your organization\n {org?.orgId ? \" — only admins can edit.\" : \".\"}\n </p>\n <a\n href={WORKSPACE_DOCS_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-foreground hover:underline\"\n >\n Learn more\n <IconExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n )}\n <ResourceTree\n tree={personalTree}\n isLoading={personalTreeQuery.isLoading}\n deletingId={\n deleteResource.isPending\n ? (deleteResource.variables as string)\n : deleteMcpServer.isPending\n ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`\n : null\n }\n selectedId={selectedResourceId}\n onSelect={handleSelect}\n onCreateFile={(parentPath, name) =>\n handleCreateFile(parentPath, name, \"personal\")\n }\n onCreateFolder={(parentPath, name) =>\n handleCreateFolder(parentPath, name, \"personal\")\n }\n onDelete={handleDelete}\n onRename={handleRename}\n onDrop={handleUploadFiles}\n title=\"Personal\"\n titleTooltip=\"Files visible only to you\"\n />\n <ResourceTree\n tree={sharedTree}\n isLoading={sharedTreeQuery.isLoading}\n deletingId={\n deleteResource.isPending\n ? (deleteResource.variables as string)\n : deleteMcpServer.isPending\n ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`\n : null\n }\n selectedId={selectedResourceId}\n onSelect={handleSelect}\n onCreateFile={(parentPath, name) =>\n handleCreateFile(parentPath, name, \"shared\")\n }\n onCreateFolder={(parentPath, name) =>\n handleCreateFolder(parentPath, name, \"shared\")\n }\n onDelete={handleDelete}\n onRename={handleRename}\n onDrop={handleUploadFiles}\n title=\"Organization\"\n titleTooltip={\n canEditOrg\n ? \"Files visible to everyone in your organization\"\n : \"Files visible to everyone in your organization. Read-only — only admins can edit.\"\n }\n readOnly={!canEditOrg}\n headingHint={!canEditOrg ? \"Read only\" : undefined}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ResourcesPanel.js","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport {\n IconPlus,\n IconUpload,\n IconArrowLeft,\n IconPencil,\n IconBulb,\n IconBolt,\n IconTrash,\n IconEye,\n IconCode,\n IconClock,\n IconMessageChatbot,\n IconBuildingSkyscraper,\n IconBrowser,\n IconExternalLink,\n IconLoader2,\n IconHelp,\n IconPlugConnected,\n IconCheck,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../utils.js\";\nimport { sendToAgentChat } from \"../agent-chat.js\";\nimport { PromptComposer } from \"../composer/PromptComposer.js\";\nimport { ResourceTree } from \"./ResourceTree.js\";\nimport { ResourceEditor } from \"./ResourceEditor.js\";\nimport { serializeFrontmatter } from \"../../resources/metadata.js\";\nimport {\n useResourceTree,\n useResource,\n useCreateResource,\n useUpdateResource,\n useDeleteResource,\n useUploadResource,\n withMcpServersFolder,\n withAgentScratchFolder,\n type ResourceScope,\n type ResourceMeta,\n} from \"./use-resources.js\";\nimport {\n formatMcpServerError,\n getMcpUrlValidationError,\n useMcpServers,\n useCreateMcpServer,\n useDeleteMcpServer,\n testMcpServerUrl,\n parseMcpVirtualId,\n type McpServerScope,\n} from \"./use-mcp-servers.js\";\nimport { McpServerDetail } from \"./McpServerDetail.js\";\nimport { useOrg } from \"../org/hooks.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\n\nconst WORKSPACE_DOCS_URL = \"https://agent-native.com/docs/workspace\";\n\n// ─── Create Menu (unified + button) ────────────────────────────────────────\n\ntype CreateMenuView =\n | \"menu\"\n | \"file\"\n | \"skill\"\n | \"job\"\n | \"agent-mode\"\n | \"agent-prompt\"\n | \"agent-form\"\n | \"mcp-server\";\n\nconst AGENT_MODEL_OPTIONS = [\n { value: \"inherit\", label: \"Default model\" },\n { value: \"claude-sonnet-4-6\", label: \"Claude Sonnet 4.6\" },\n { value: \"claude-haiku-4-5-20251001\", label: \"Claude Haiku 4.5\" },\n] as const;\n\nfunction slugifyName(value: string): string {\n return (\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"agent\"\n );\n}\n\nfunction buildAgentResourceContent({\n name,\n description,\n model,\n tools,\n body,\n}: {\n name: string;\n description: string;\n model: string;\n tools: string;\n body: string;\n}): string {\n const fields = [\n { key: \"name\", value: name },\n { key: \"description\", value: description },\n { key: \"model\", value: model },\n { key: \"tools\", value: tools },\n { key: \"delegate-default\", value: \"false\" },\n ];\n return serializeFrontmatter(fields) + body.trim() + \"\\n\";\n}\n\nfunction CreateMenu({\n scope,\n onCreateFile,\n onCreateResource,\n onCreateMcpServer,\n canCreateOrgMcp,\n hasOrg,\n onCreated,\n}: {\n scope: ResourceScope;\n onCreateFile: (name: string) => void;\n onCreateResource: (path: string, content: string, mimeType?: string) => void;\n onCreateMcpServer: (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => Promise<void>;\n canCreateOrgMcp: boolean;\n hasOrg: boolean;\n onCreated?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<CreateMenuView>(\"menu\");\n const [value, setValue] = useState(\"\");\n const [agentName, setAgentName] = useState(\"\");\n const [agentDescription, setAgentDescription] = useState(\"\");\n const [agentModel, setAgentModel] = useState<string>(\"inherit\");\n const [agentInstructions, setAgentInstructions] = useState(\n `# Role\\n\\nDefine how this agent should work.\\n\\n## Focus\\n\\n- What kinds of tasks it should handle\\n- What tone or approach it should use\\n- Important constraints or preferences\\n`,\n );\n const defaultMcpScope: McpServerScope =\n scope === \"shared\" && canCreateOrgMcp ? \"org\" : \"user\";\n const [mcpScope, setMcpScope] = useState<McpServerScope>(defaultMcpScope);\n const [mcpName, setMcpName] = useState(\"\");\n const [mcpUrl, setMcpUrl] = useState(\"\");\n const [mcpDescription, setMcpDescription] = useState(\"\");\n const [mcpHeadersText, setMcpHeadersText] = useState(\"\");\n const [mcpBusy, setMcpBusy] = useState(false);\n const [mcpError, setMcpError] = useState<string | null>(null);\n const [mcpTestResult, setMcpTestResult] = useState<{\n ok: boolean;\n message: string;\n } | null>(null);\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (open) {\n setView(\"menu\");\n setValue(\"\");\n setAgentName(\"\");\n setAgentDescription(\"\");\n setAgentModel(\"inherit\");\n setAgentInstructions(\n `# Role\\n\\nDefine how this agent should work.\\n\\n## Focus\\n\\n- What kinds of tasks it should handle\\n- What tone or approach it should use\\n- Important constraints or preferences\\n`,\n );\n setMcpScope(defaultMcpScope);\n setMcpName(\"\");\n setMcpUrl(\"\");\n setMcpDescription(\"\");\n setMcpHeadersText(\"\");\n setMcpError(null);\n setMcpTestResult(null);\n setMcpBusy(false);\n }\n }, [open, defaultMcpScope]);\n\n useEffect(() => {\n if (view !== \"menu\" && view !== \"agent-form\") {\n setValue(\"\");\n if (view === \"mcp-server\") {\n setMcpError(null);\n setMcpTestResult(null);\n }\n const t = setTimeout(() => inputRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }\n }, [view]);\n\n const clearMcpFeedback = () => {\n setMcpError(null);\n setMcpTestResult(null);\n };\n\n const submitFile = () => {\n const trimmed = value.trim();\n if (trimmed) {\n onCreateFile(trimmed);\n setOpen(false);\n }\n };\n\n const submitSkill = (text: string = value) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n sendToAgentChat({\n message: `Create a skill: ${trimmed}`,\n newTab: true,\n context: `The user wants to create an agent skill. Their description: \"${trimmed}\"\n\nFollow the create-skill pattern to build this. Before writing:\n\n1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. \"code review\" → \"code-review\")\n2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)\n3. **Write the skill** as a ${scope} resource at path \"skills/<name>/SKILL.md\" using resource-write\n\nThe skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:\n- Clear rule/purpose statement\n- Why this skill exists\n- How to follow it (with code examples where helpful)\n- Common violations to avoid\n- Related skills\n\nTemplate for a Pattern skill:\n\\`\\`\\`markdown\n---\nname: <hyphen-case-name>\ndescription: >-\n <Under 40 words. When should this trigger?>\n---\n\n# <Skill Name>\n\n## Rule\n<One sentence: what must be true>\n\n## Why\n<Why this rule exists>\n\n## How\n<How to follow it, with code examples>\n\n## Don't\n<Common violations>\n\\`\\`\\`\n\nTemplate for a Workflow skill:\n\\`\\`\\`markdown\n---\nname: <hyphen-case-name>\ndescription: >-\n <Under 40 words. When should this trigger?>\n---\n\n# <Workflow Name>\n\n## Prerequisites\n<What must be in place>\n\n## Steps\n<Numbered steps with code examples>\n\n## Verification\n<How to confirm it worked>\n\\`\\`\\`\n\nAfter creating, update the shared AGENTS.md resource to reference the new skill in its skills table.\n\nKeep the skill concise (under 500 lines) and actionable.`,\n submit: true,\n });\n\n setOpen(false);\n onCreated?.();\n };\n\n const submitJob = (text: string = value) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n sendToAgentChat({\n message: `Create a recurring job: ${trimmed}`,\n newTab: true,\n context: `The user wants to create a recurring job. Their description: \"${trimmed}\"\n\nUse the manage-jobs tool with action \"create\" to create this. You need to:\n1. Derive a hyphen-case name from the description\n2. Convert the schedule to a cron expression (e.g., \"every weekday at 9am\" → \"0 9 * * 1-5\")\n3. Write clear, self-contained instructions for what the agent should do each time the job runs\n4. Create it in ${scope} scope\n\nThe job will run automatically on the schedule. Make the instructions specific — include which actions to call and what to do with results.`,\n submit: true,\n });\n\n setOpen(false);\n };\n\n const submitAgentPrompt = (text: string = value) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n sendToAgentChat({\n message: `Create a custom agent: ${trimmed}`,\n newTab: true,\n context: `The user wants a reusable custom sub-agent profile for the workspace. Their description: \"${trimmed}\"\n\nCreate it as a ${scope} resource under \"agents/<name>.md\" using resource-write.\n\nRequirements:\n1. Derive a hyphen-case file name from the intent\n2. Use YAML frontmatter with:\n - name\n - description\n - model (use \"inherit\" unless the request clearly needs a different model)\n - tools (set to \"inherit\")\n - delegate-default (set to false)\n3. Put the main operating instructions in the markdown body\n4. Keep it concise and directive, similar to a Claude Code-style custom agent\n\nTemplate:\n\\`\\`\\`markdown\n---\nname: Design\ndescription: >-\n Helps with product and interface design decisions.\nmodel: inherit\ntools: inherit\ndelegate-default: false\n---\n\n# Role\n\nYou are a focused design agent.\n\n## Responsibilities\n\n- ...\n\n## Approach\n\n- ...\n\\`\\`\\`\n\nThe result should be a reusable agent profile, not a one-off task response.`,\n submit: true,\n });\n\n setOpen(false);\n onCreated?.();\n };\n\n const submitAgentManual = () => {\n const trimmedName = agentName.trim();\n const trimmedDescription = agentDescription.trim();\n const trimmedInstructions = agentInstructions.trim();\n if (!trimmedName || !trimmedDescription || !trimmedInstructions) return;\n\n const slug = slugifyName(trimmedName);\n onCreateResource(\n `agents/${slug}.md`,\n buildAgentResourceContent({\n name: trimmedName,\n description: trimmedDescription,\n model: agentModel,\n tools: \"inherit\",\n body: trimmedInstructions,\n }),\n \"text/markdown\",\n );\n setOpen(false);\n onCreated?.();\n };\n\n const parseHeaderLines = (\n text: string,\n ): Record<string, string> | undefined => {\n const out: Record<string, string> = {};\n for (const line of text.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n const idx = trimmed.indexOf(\":\");\n if (idx <= 0) continue;\n const key = trimmed.slice(0, idx).trim();\n const value = trimmed.slice(idx + 1).trim();\n if (!key || !value) continue;\n out[key] = value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n };\n\n const submitMcpServer = async () => {\n const name = mcpName.trim();\n const url = mcpUrl.trim();\n if (!name || !url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpError(validationError);\n setMcpTestResult(null);\n return;\n }\n setMcpError(null);\n setMcpBusy(true);\n try {\n await onCreateMcpServer({\n scope: mcpScope,\n name,\n url,\n headers: parseHeaderLines(mcpHeadersText),\n description: mcpDescription.trim() || undefined,\n });\n setOpen(false);\n onCreated?.();\n } catch (err: any) {\n setMcpError(formatMcpServerError(err));\n } finally {\n setMcpBusy(false);\n }\n };\n\n const runMcpTest = async () => {\n const url = mcpUrl.trim();\n if (!url || mcpBusy) return;\n const validationError = getMcpUrlValidationError(url);\n if (validationError) {\n setMcpTestResult({ ok: false, message: validationError });\n setMcpError(null);\n return;\n }\n setMcpTestResult(null);\n setMcpError(null);\n setMcpBusy(true);\n try {\n const res = await testMcpServerUrl(url, parseHeaderLines(mcpHeadersText));\n if (res.ok) {\n setMcpTestResult({\n ok: true,\n message: `${res.toolCount ?? 0} tool${res.toolCount === 1 ? \"\" : \"s\"} available`,\n });\n } else {\n setMcpTestResult({ ok: false, message: res.error ?? \"Failed\" });\n }\n } catch (err: any) {\n setMcpTestResult({ ok: false, message: formatMcpServerError(err) });\n } finally {\n setMcpBusy(false);\n }\n };\n\n const menuItems: {\n icon: React.ReactNode;\n label: string;\n desc: string;\n action: () => void;\n }[] = [\n {\n icon: <IconPlus className=\"h-3.5 w-3.5\" />,\n label: \"Create File\",\n desc: \"Add a new file at a path\",\n action: () => setView(\"file\"),\n },\n {\n icon: <IconBulb className=\"h-3.5 w-3.5\" />,\n label: \"Create Skill\",\n desc: \"Teach the agent a new ability\",\n action: () => setView(\"skill\"),\n },\n {\n icon: <IconClock className=\"h-3.5 w-3.5\" />,\n label: \"Schedule Task\",\n desc: \"Run something on a schedule\",\n action: () => setView(\"job\"),\n },\n {\n icon: <IconMessageChatbot className=\"h-3.5 w-3.5\" />,\n label: \"Create Custom Agent\",\n desc: \"Add a reusable sub-agent profile\",\n action: () => setView(\"agent-mode\"),\n },\n {\n icon: <IconBolt className=\"h-3.5 w-3.5\" />,\n label: \"Create Automation\",\n desc: \"Set up a when-X-do-Y rule\",\n action: () => {\n setOpen(false);\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n sendToAgentChat({\n message:\n \"Help me create a new automation. Ask me what I want to automate.\",\n context: `The user wants to create a new automation. Scope: personal. Use manage-automations with action=define to create it. Ask clarifying questions if needed about what event to trigger on, conditions, and what actions to take.`,\n submit: true,\n newTab: true,\n });\n onCreated?.();\n },\n },\n {\n icon: <IconPlugConnected className=\"h-3.5 w-3.5\" />,\n label: \"Connect MCP Server\",\n desc: \"Expose external tools to the agent\",\n action: () => setView(\"mcp-server\"),\n },\n ];\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <Tooltip>\n <TooltipTrigger asChild>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n open && \"bg-accent/50 text-foreground\",\n )}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n </button>\n </PopoverTrigger>\n </TooltipTrigger>\n <TooltipContent>Create new...</TooltipContent>\n </Tooltip>\n <PopoverContent\n align=\"end\"\n sideOffset={6}\n collisionPadding={8}\n className={cn(\n \"z-[260] p-0 text-[13px] leading-normal\",\n view === \"menu\" || view === \"file\"\n ? \"w-[260px]\"\n : \"max-h-[70vh] w-[calc(100vw-24px)] max-w-[380px] overflow-y-auto\",\n )}\n >\n {view === \"menu\" && (\n <div className=\"py-1\">\n {menuItems.map((item) => (\n <button\n key={item.label}\n onClick={item.action}\n className=\"flex w-full items-center gap-2.5 px-3 py-2 text-left hover:bg-accent/50\"\n >\n <span className=\"text-muted-foreground\">{item.icon}</span>\n <div className=\"min-w-0\">\n <div className=\"text-[12px] font-medium text-foreground\">\n {item.label}\n </div>\n <div className=\"mt-0.5 text-[10px] text-muted-foreground/60\">\n {item.desc}\n </div>\n </div>\n </button>\n ))}\n </div>\n )}\n\n {view === \"file\" && (\n <div className=\"p-3\">\n <label className=\"mb-1.5 block text-[11px] font-medium text-muted-foreground\">\n File path\n </label>\n <input\n ref={inputRef as React.RefObject<HTMLInputElement>}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") submitFile();\n if (e.key === \"Escape\") {\n e.stopPropagation();\n setView(\"menu\");\n }\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"notes/ideas.md\"\n />\n <div className=\"mt-2.5 flex justify-end\">\n <button\n onClick={submitFile}\n disabled={!value.trim()}\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n Create\n </button>\n </div>\n </div>\n )}\n\n {view === \"skill\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Create Skill\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Describe what kind of skill you want and the agent will create it.\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"e.g. A skill that reviews PRs for security issues and OWASP top 10 vulnerabilities\"\n draftScope=\"resources:create-skill\"\n onSubmit={(text) => submitSkill(text)}\n />\n </div>\n )}\n\n {view === \"job\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Schedule Task\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Describe what should happen and when.\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"e.g. Every weekday at 9am, check for overdue scorecards and send a Slack update\"\n draftScope=\"resources:create-job\"\n onSubmit={(text) => submitJob(text)}\n />\n </div>\n )}\n\n {view === \"agent-mode\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Create Agent\n </label>\n <p className=\"mb-2 text-[10px] leading-relaxed text-muted-foreground/60\">\n Build a reusable sub-agent profile for this workspace.\n </p>\n <div className=\"space-y-2\">\n <button\n onClick={() => setView(\"agent-prompt\")}\n className=\"flex w-full items-start gap-2 rounded-md border border-border px-3 py-2 text-left hover:bg-accent/40\"\n >\n <IconPencil className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div>\n <div className=\"text-[12px] font-medium text-foreground\">\n Describe It\n </div>\n <div className=\"text-[10px] text-muted-foreground/60\">\n Let the agent draft the profile from a prompt.\n </div>\n </div>\n </button>\n <button\n onClick={() => setView(\"agent-form\")}\n className=\"flex w-full items-start gap-2 rounded-md border border-border px-3 py-2 text-left hover:bg-accent/40\"\n >\n <IconMessageChatbot className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div>\n <div className=\"text-[12px] font-medium text-foreground\">\n Fill Form\n </div>\n <div className=\"text-[10px] text-muted-foreground/60\">\n Set the fields manually and start with a markdown template.\n </div>\n </div>\n </button>\n </div>\n </div>\n )}\n\n {view === \"agent-prompt\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Create Agent From Prompt\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Describe the agent you want. It will be saved under{\" \"}\n <code>agents/</code>.\n </p>\n <PromptComposer\n autoFocus\n placeholder=\"e.g. A design agent that critiques layouts, suggests UI direction, and prefers concise product reasoning\"\n draftScope=\"resources:create-agent\"\n onSubmit={(text) => submitAgentPrompt(text)}\n />\n </div>\n )}\n\n {view === \"agent-form\" && (\n <div className=\"p-3\">\n <label className=\"mb-2 block text-[11px] font-semibold text-foreground\">\n Create Agent Manually\n </label>\n <div className=\"space-y-2\">\n <input\n value={agentName}\n onChange={(e) => setAgentName(e.target.value)}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Agent name\"\n />\n <input\n value={agentDescription}\n onChange={(e) => setAgentDescription(e.target.value)}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Short description\"\n />\n <label className=\"block text-[11px] font-medium text-muted-foreground\">\n Model\n </label>\n <select\n value={agentModel}\n onChange={(e) => setAgentModel(e.target.value)}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none focus:ring-1 focus:ring-accent\"\n >\n {AGENT_MODEL_OPTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <label className=\"block text-[11px] font-medium text-muted-foreground\">\n Instructions\n </label>\n <textarea\n value={agentInstructions}\n onChange={(e) => setAgentInstructions(e.target.value)}\n rows={8}\n className=\"w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.5,\n }}\n />\n </div>\n <div className=\"mt-2.5 flex justify-end\">\n <button\n onClick={submitAgentManual}\n disabled={\n !agentName.trim() ||\n !agentDescription.trim() ||\n !agentInstructions.trim()\n }\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n Create\n </button>\n </div>\n </div>\n )}\n\n {view === \"mcp-server\" && (\n <div className=\"p-3\">\n <label className=\"mb-1 block text-[11px] font-semibold text-foreground\">\n Connect MCP Server\n </label>\n <p className=\"mb-2 text-[10px] text-muted-foreground/60 leading-relaxed\">\n Point at any Streamable HTTP MCP server (Zapier, Cloudflare,\n internal tools). Its tools become available to the agent. Use\n Personal for private or staging servers; use Organization only for\n vetted servers the whole org should share.{\" \"}\n <a\n href=\"https://agent-native.com/docs/mcp-clients#remote-via-ui\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-0.5 text-muted-foreground/80 underline hover:text-foreground\"\n >\n Learn more\n <IconExternalLink className=\"inline h-2.5 w-2.5\" />\n </a>\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex gap-1 rounded-md border border-border p-0.5\">\n <button\n type=\"button\"\n onClick={() => setMcpScope(\"user\")}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"user\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n Personal\n </button>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() =>\n hasOrg && canCreateOrgMcp && setMcpScope(\"org\")\n }\n disabled={!hasOrg || !canCreateOrgMcp}\n className={cn(\n \"flex-1 rounded px-2 py-1 text-[11px] font-medium\",\n mcpScope === \"org\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n (!hasOrg || !canCreateOrgMcp) &&\n \"cursor-not-allowed opacity-50 hover:text-muted-foreground\",\n )}\n >\n Organization\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {!hasOrg\n ? \"Join an organization to share MCP servers\"\n : !canCreateOrgMcp\n ? \"Only owners and admins can add org-scope servers\"\n : undefined}\n </TooltipContent>\n </Tooltip>\n </div>\n <input\n value={mcpName}\n onChange={(e) => {\n setMcpName(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Server name (e.g. zapier-staging)\"\n />\n <input\n value={mcpUrl}\n onChange={(e) => {\n setMcpUrl(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"https://mcp.example.com/\"\n />\n <input\n value={mcpDescription}\n onChange={(e) => {\n setMcpDescription(e.target.value);\n clearMcpFeedback();\n }}\n className=\"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div>\n <label className=\"block text-[10px] font-medium text-foreground\">\n Headers\n </label>\n <p className=\"mt-0.5 text-[10px] leading-snug text-muted-foreground/70\">\n Optional. One per line, for example Authorization: Bearer\n sk-...\n </p>\n </div>\n <textarea\n value={mcpHeadersText}\n onChange={(e) => {\n setMcpHeadersText(e.target.value);\n clearMcpFeedback();\n }}\n rows={2}\n className=\"w-full resize-y rounded-md border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n }}\n placeholder=\"Authorization: Bearer sk-...\"\n />\n {mcpTestResult && (\n <div\n className={cn(\n \"flex items-start gap-1 text-[11px] leading-snug\",\n mcpTestResult.ok\n ? \"text-green-600 dark:text-green-400\"\n : \"text-red-600 dark:text-red-400\",\n )}\n >\n {mcpTestResult.ok && (\n <IconCheck className=\"mt-0.5 h-3 w-3 shrink-0\" />\n )}\n <span className=\"min-w-0 break-words\">\n {mcpTestResult.message}\n </span>\n </div>\n )}\n {mcpError && (\n <div className=\"break-words text-[11px] leading-snug text-red-600 dark:text-red-400\">\n {mcpError}\n </div>\n )}\n </div>\n <div className=\"mt-2.5 flex items-center justify-between gap-2\">\n <button\n type=\"button\"\n onClick={runMcpTest}\n disabled={!mcpUrl.trim() || mcpBusy}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-[11px] font-medium text-foreground hover:bg-accent disabled:opacity-40 disabled:pointer-events-none\"\n >\n Test\n </button>\n <button\n type=\"button\"\n onClick={submitMcpServer}\n disabled={!mcpName.trim() || !mcpUrl.trim() || mcpBusy}\n className=\"rounded-md bg-accent px-3 py-1.5 text-[12px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40 disabled:pointer-events-none\"\n >\n {mcpBusy ? (\n <IconLoader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n \"Connect\"\n )}\n </button>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\n// ─── PathBreadcrumb ─────────────────────────────────────────────────────────\n\nfunction PathBreadcrumb({ path }: { path: string }) {\n const parts = path.split(\"/\").filter(Boolean);\n return (\n <div className=\"flex items-center gap-0.5 text-[11px] text-muted-foreground/60 overflow-hidden\">\n {parts.map((part, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span className=\"shrink-0\">/</span>}\n <span\n className={cn(\n \"truncate\",\n i === parts.length - 1 && \"text-muted-foreground\",\n )}\n >\n {part}\n </span>\n </React.Fragment>\n ))}\n </div>\n );\n}\n\n// ─── ResourcesPanel ─────────────────────────────────────────────────────────\n\nconst DEFAULT_AGENTS_MD_CLIENT = `# Agent Instructions\n\nThis file customizes how the AI agent behaves in this app. Edit it to add your own instructions, preferences, and context.\n\n## What to put here\n\n- **Preferences** — Tone, style, verbosity, response format\n- **Context** — Domain knowledge, terminology, team conventions\n- **Rules** — Things the agent should always/never do\n- **Skills** — Reference skill files for specialized tasks (create them in the \\`skills/\\` folder)\n\n## Skills\n\nCreate skill files under \\`skills/<name>/SKILL.md\\` to give the agent specialized knowledge. Reference them here:\n\n| Skill | Path | Description |\n|-------|------|-------------|\n| *(use the skill button to create one)* | \\`skills/example/SKILL.md\\` | |\n\n## Workspace files\n\nWorkspace resources are for files users intentionally add, edit, or manage. Agents may create hidden \\`agent_scratch\\` resources for temporary working notes, scripts, or intermediate results; only promote those files into workspace visibility when a user explicitly asks to keep them.\n`;\n\n// BuilderBrowserCard moved to settings/BrowserSection.tsx\n\nexport function ResourcesPanel() {\n const { data: org } = useOrg();\n // Non-admin org members get read-only access to organization resources.\n // Solo deployments (no orgId) behave as owner — users can edit their own.\n const canEditOrg =\n !org?.orgId || org.role === \"owner\" || org.role === \"admin\";\n\n const [activeScope, setActiveScope] = useState<ResourceScope>(\n canEditOrg ? \"shared\" : \"personal\",\n );\n const [selectedResourceId, setSelectedResourceId] = useState<string | null>(\n null,\n );\n const [toolbarDeleteConfirmId, setToolbarDeleteConfirmId] = useState<\n string | null\n >(null);\n const [dragOver, setDragOver] = useState(false);\n const [editorView, setEditorView] = useState<\"visual\" | \"code\">(() => {\n try {\n const v = localStorage.getItem(\"resource-editor-view\");\n if (v === \"code\") return \"code\";\n } catch {}\n return \"visual\";\n });\n const [showAgentScratch, setShowAgentScratch] = useState(false);\n\n useEffect(() => {\n setToolbarDeleteConfirmId(null);\n }, [selectedResourceId]);\n const [saveStatus, setSaveStatus] = useState<\"idle\" | \"saving\" | \"saved\">(\n \"idle\",\n );\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const sharedTreeQuery = useResourceTree(\"shared\", {\n includeAgentScratch: showAgentScratch,\n });\n const personalTreeQuery = useResourceTree(\"personal\", {\n includeAgentScratch: showAgentScratch,\n });\n const mcpServersQuery = useMcpServers();\n const createMcpServer = useCreateMcpServer();\n const deleteMcpServer = useDeleteMcpServer();\n\n // Merge MCP servers into each scope's tree as a virtual `mcp-servers/`\n // folder. The servers live in the settings store, not the resources\n // table — the virtual ids carry the `mcp:<scope>:<id>` prefix that\n // `handleSelect` and `handleDelete` below recognize to route back to\n // the MCP endpoints.\n const personalTree = withAgentScratchFolder(\n withMcpServersFolder(\n personalTreeQuery.data ?? [],\n mcpServersQuery.data?.user ?? [],\n ),\n { show: showAgentScratch },\n );\n const sharedTree = withAgentScratchFolder(\n withMcpServersFolder(\n sharedTreeQuery.data ?? [],\n mcpServersQuery.data?.org ?? [],\n ),\n { show: showAgentScratch },\n );\n\n const orgRole = mcpServersQuery.data?.role ?? org?.role ?? null;\n const hasOrgForMcp = !!(mcpServersQuery.data?.orgId ?? org?.orgId);\n const canCreateOrgMcp =\n hasOrgForMcp && (orgRole === \"owner\" || orgRole === \"admin\");\n\n // Virtual MCP server currently selected in the tree (or null for a real\n // resource / nothing). Resolved by scanning both trees' mcp folders for\n // a matching virtual id.\n const selectedMcpServer = React.useMemo(() => {\n const parsed = selectedResourceId\n ? parseMcpVirtualId(selectedResourceId)\n : null;\n if (!parsed) return null;\n const list =\n parsed.scope === \"user\"\n ? (mcpServersQuery.data?.user ?? [])\n : (mcpServersQuery.data?.org ?? []);\n return list.find((s) => s.id === parsed.serverId) ?? null;\n }, [selectedResourceId, mcpServersQuery.data]);\n\n // Sync activeScope once the org role arrives (canEditOrg is resolved async).\n useEffect(() => {\n if (!canEditOrg && activeScope === \"shared\") {\n setActiveScope(\"personal\");\n }\n }, [canEditOrg, activeScope]);\n // Virtual MCP ids aren't in the resources store — skip the fetch so\n // useResource doesn't 404-flash.\n const resourceQuery = useResource(\n selectedResourceId && !parseMcpVirtualId(selectedResourceId)\n ? selectedResourceId\n : null,\n );\n const createResource = useCreateResource();\n const updateResource = useUpdateResource();\n const deleteResource = useDeleteResource();\n const uploadResource = useUploadResource();\n\n // Ensure AGENTS.md exists in the organization scope when the panel opens.\n // The server also seeds it on table init; this is a safety net. Only attempt\n // for users who can write to organization resources — non-admins would just\n // get a 403.\n const seededRef = useRef(false);\n useEffect(() => {\n if (seededRef.current || !canEditOrg) return;\n seededRef.current = true;\n fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path: \"AGENTS.md\",\n content: DEFAULT_AGENTS_MD_CLIENT,\n shared: true,\n ifNotExists: true,\n }),\n }).catch(() => {});\n }, [canEditOrg]);\n\n // Are we viewing a file (editor) or the tree?\n const isEditing = selectedResourceId !== null;\n const isMcpSelected = !!selectedMcpServer;\n\n const handleSelect = useCallback((resource: ResourceMeta) => {\n setSelectedResourceId(resource.id);\n }, []);\n\n const handleBack = useCallback(() => {\n setSelectedResourceId(null);\n }, []);\n\n const handleCreateFile = useCallback(\n (parentPath: string, name: string, scope: ResourceScope) => {\n const path = parentPath ? `${parentPath}/${name}` : name;\n createResource.mutate(\n { path, content: \"\", shared: scope === \"shared\" },\n {\n onSuccess: (data) => {\n setSelectedResourceId(data.id);\n },\n },\n );\n },\n [createResource],\n );\n\n const handleCreateFolder = useCallback(\n (parentPath: string, name: string, scope: ResourceScope) => {\n const path = parentPath ? `${parentPath}/${name}/.keep` : `${name}/.keep`;\n createResource.mutate({ path, content: \"\", shared: scope === \"shared\" });\n },\n [createResource],\n );\n\n const handleCreateFromToolbar = useCallback(\n (name: string) => {\n createResource.mutate(\n { path: name, content: \"\", shared: activeScope === \"shared\" },\n {\n onSuccess: (data) => {\n setSelectedResourceId(data.id);\n },\n },\n );\n },\n [createResource, activeScope],\n );\n\n const handleCreateResourceFromToolbar = useCallback(\n (path: string, content: string, mimeType?: string) => {\n createResource.mutate(\n { path, content, mimeType, shared: activeScope === \"shared\" },\n {\n onSuccess: (data) => {\n setSelectedResourceId(data.id);\n },\n },\n );\n },\n [activeScope, createResource],\n );\n\n const handleDelete = useCallback(\n (id: string) => {\n const mcp = parseMcpVirtualId(id);\n if (mcp) {\n deleteMcpServer.mutate(\n { id: mcp.serverId, scope: mcp.scope },\n {\n onSuccess: () => {\n if (selectedResourceId === id) setSelectedResourceId(null);\n },\n },\n );\n return;\n }\n deleteResource.mutate(id);\n if (selectedResourceId === id) {\n setSelectedResourceId(null);\n }\n },\n [deleteResource, deleteMcpServer, selectedResourceId],\n );\n\n const handleCreateMcpServer = useCallback(\n async (args: {\n scope: McpServerScope;\n name: string;\n url: string;\n headers?: Record<string, string>;\n description?: string;\n }) => {\n const server = await createMcpServer.mutateAsync(args);\n // Select the newly-created virtual entry so the detail view opens.\n setSelectedResourceId(`mcp:${args.scope}:${server.id}`);\n },\n [createMcpServer],\n );\n\n const handleRename = useCallback(\n (id: string, newPath: string) => {\n updateResource.mutate({ id, path: newPath });\n },\n [updateResource],\n );\n\n const handleSave = useCallback(\n (content: string) => {\n if (!selectedResourceId) return;\n updateResource.mutate({ id: selectedResourceId, content });\n },\n [updateResource, selectedResourceId],\n );\n\n const handleUploadFiles = useCallback(\n (files: FileList) => {\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"shared\", activeScope === \"shared\" ? \"true\" : \"false\");\n uploadResource.mutate(formData);\n }\n },\n [uploadResource, activeScope],\n );\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n if (e.dataTransfer.files.length > 0) {\n handleUploadFiles(e.dataTransfer.files);\n }\n },\n [handleUploadFiles],\n );\n\n return (\n <div\n className={cn(\n \"relative flex h-full flex-col min-h-0\",\n dragOver && \"ring-2 ring-inset ring-accent\",\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {/* Toolbar */}\n {isEditing ? (\n <div className=\"flex shrink-0 items-center justify-between border-b border-border px-2 py-1.5\">\n <div className=\"flex items-center gap-1.5 min-w-0\">\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleBack}\n aria-label=\"Back to workspace\"\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconArrowLeft className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Back to workspace</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n {selectedMcpServer ? (\n <PathBreadcrumb\n path={`mcp-servers/${selectedMcpServer.name}.json`}\n />\n ) : resourceQuery.data ? (\n <PathBreadcrumb path={resourceQuery.data.path} />\n ) : null}\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n {!selectedMcpServer && resourceQuery.data && (\n <span\n aria-live=\"polite\"\n className=\"mr-1 w-16 text-right text-[11px] text-muted-foreground/60\"\n >\n {saveStatus === \"saving\"\n ? \"Saving...\"\n : saveStatus === \"saved\"\n ? \"Saved\"\n : \"\"}\n </span>\n )}\n {!selectedMcpServer &&\n resourceQuery.data &&\n (resourceQuery.data.mimeType === \"text/markdown\" ||\n resourceQuery.data.path.endsWith(\".md\")) && (\n <div className=\"flex items-center gap-0.5 mr-1\">\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => setEditorView(\"visual\")}\n aria-label=\"Visual editor\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md\",\n editorView === \"visual\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n )}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Visual editor</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => setEditorView(\"code\")}\n aria-label=\"Code editor\"\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md\",\n editorView === \"code\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n )}\n >\n <IconCode className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Code editor</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n )}\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => {\n if (!selectedResourceId) return;\n if (toolbarDeleteConfirmId === selectedResourceId) {\n handleDelete(selectedResourceId);\n setToolbarDeleteConfirmId(null);\n } else {\n setToolbarDeleteConfirmId(selectedResourceId);\n }\n }}\n aria-label={\n toolbarDeleteConfirmId === selectedResourceId\n ? \"Confirm delete resource\"\n : \"Delete resource\"\n }\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-destructive hover:bg-accent/50\",\n toolbarDeleteConfirmId === selectedResourceId &&\n \"bg-destructive/10 text-destructive\",\n )}\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {toolbarDeleteConfirmId === selectedResourceId\n ? \"Click again to delete\"\n : \"Delete resource\"}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </div>\n ) : (\n /* Floating action buttons — absolute top-right over tree view */\n <div className=\"absolute top-1 right-1 z-10 flex items-center gap-1\">\n <CreateMenu\n scope={activeScope}\n onCreateFile={handleCreateFromToolbar}\n onCreateResource={handleCreateResourceFromToolbar}\n onCreateMcpServer={handleCreateMcpServer}\n canCreateOrgMcp={canCreateOrgMcp}\n hasOrg={hasOrgForMcp}\n />\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Upload file\"\n className=\"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconUpload className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Upload file</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setShowAgentScratch((value) => !value)}\n aria-label={\n showAgentScratch\n ? \"Hide agent scratch files\"\n : \"Show agent scratch files\"\n }\n className={cn(\n \"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n showAgentScratch && \"bg-accent/50 text-foreground\",\n )}\n >\n <IconEye className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {showAgentScratch\n ? \"Hide agent scratch files\"\n : \"Show agent scratch files\"}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <TooltipProvider delayDuration={200}>\n <Tooltip>\n <TooltipTrigger asChild>\n <a\n href={WORKSPACE_DOCS_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Open Workspace docs\"\n className=\"flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n <IconHelp className=\"h-3.5 w-3.5\" />\n </a>\n </TooltipTrigger>\n <TooltipContent side=\"left\" sideOffset={8}>\n Open Workspace docs\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleUploadFiles(e.target.files);\n e.target.value = \"\";\n }\n }}\n />\n </div>\n )}\n\n {/* Content: either tree OR editor (single view) */}\n <div className=\"flex flex-1 flex-col min-h-0 overflow-hidden\">\n {isEditing ? (\n selectedMcpServer ? (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <McpServerDetail server={selectedMcpServer} />\n </div>\n ) : selectedResourceId && resourceQuery.data ? (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <ResourceEditor\n resource={resourceQuery.data}\n onSave={handleSave}\n view={editorView}\n onViewChange={setEditorView}\n onSaveStatusChange={setSaveStatus}\n hideToolbar\n />\n </div>\n ) : resourceQuery.isError ? (\n <div className=\"flex flex-1 items-center justify-center text-[12px] text-destructive/70\">\n Failed to load resource\n </div>\n ) : (\n <div className=\"flex flex-1 items-center justify-center text-[12px] text-muted-foreground/50\">\n Loading...\n </div>\n )\n ) : (\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {!personalTreeQuery.isLoading &&\n !sharedTreeQuery.isLoading &&\n (personalTreeQuery.data ?? []).length === 0 &&\n (sharedTreeQuery.data ?? []).length === 0 && (\n <div className=\"mx-2 mt-2 rounded-md border border-border bg-muted/30 p-2.5 text-[11px] text-muted-foreground\">\n <p className=\"mb-1 font-medium text-foreground\">\n This is your Workspace\n </p>\n <p className=\"mb-1.5 leading-snug\">\n Files the agent reads and writes — notes, instructions,\n skills, custom agents, scheduled jobs. They live in the\n database, so they persist across sessions and deploys.\n </p>\n <p className=\"mb-2 leading-snug\">\n <span className=\"text-foreground\">Personal</span> is just\n for you.{\" \"}\n <span className=\"text-foreground\">Organization</span> is\n visible to everyone in your organization\n {org?.orgId ? \" — only admins can edit.\" : \".\"}\n </p>\n <a\n href={WORKSPACE_DOCS_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-foreground hover:underline\"\n >\n Learn more\n <IconExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n )}\n <ResourceTree\n tree={personalTree}\n isLoading={personalTreeQuery.isLoading}\n deletingId={\n deleteResource.isPending\n ? (deleteResource.variables as string)\n : deleteMcpServer.isPending\n ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`\n : null\n }\n selectedId={selectedResourceId}\n onSelect={handleSelect}\n onCreateFile={(parentPath, name) =>\n handleCreateFile(parentPath, name, \"personal\")\n }\n onCreateFolder={(parentPath, name) =>\n handleCreateFolder(parentPath, name, \"personal\")\n }\n onDelete={handleDelete}\n onRename={handleRename}\n onDrop={handleUploadFiles}\n title=\"Personal\"\n titleTooltip=\"Files visible only to you\"\n />\n <ResourceTree\n tree={sharedTree}\n isLoading={sharedTreeQuery.isLoading}\n deletingId={\n deleteResource.isPending\n ? (deleteResource.variables as string)\n : deleteMcpServer.isPending\n ? `mcp:${(deleteMcpServer.variables as { scope: string }).scope}:${(deleteMcpServer.variables as { id: string }).id}`\n : null\n }\n selectedId={selectedResourceId}\n onSelect={handleSelect}\n onCreateFile={(parentPath, name) =>\n handleCreateFile(parentPath, name, \"shared\")\n }\n onCreateFolder={(parentPath, name) =>\n handleCreateFolder(parentPath, name, \"shared\")\n }\n onDelete={handleDelete}\n onRename={handleRename}\n onDrop={handleUploadFiles}\n title=\"Organization\"\n titleTooltip={\n canEditOrg\n ? \"Files visible to everyone in your organization\"\n : \"Files visible to everyone in your organization. Read-only — only admins can edit.\"\n }\n readOnly={!canEditOrg}\n headingHint={!canEditOrg ? \"Read only\" : undefined}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -15,6 +15,12 @@ export interface Resource {
|
|
|
15
15
|
size: number;
|
|
16
16
|
createdAt: number;
|
|
17
17
|
updatedAt: number;
|
|
18
|
+
createdBy: "user" | "agent" | "system";
|
|
19
|
+
visibility: "workspace" | "agent_scratch";
|
|
20
|
+
threadId: string | null;
|
|
21
|
+
runId: string | null;
|
|
22
|
+
expiresAt: number | null;
|
|
23
|
+
metadata: string | null;
|
|
18
24
|
}
|
|
19
25
|
export interface ResourceMeta {
|
|
20
26
|
id: string;
|
|
@@ -24,6 +30,12 @@ export interface ResourceMeta {
|
|
|
24
30
|
size: number;
|
|
25
31
|
createdAt: number;
|
|
26
32
|
updatedAt: number;
|
|
33
|
+
createdBy: "user" | "agent" | "system";
|
|
34
|
+
visibility: "workspace" | "agent_scratch";
|
|
35
|
+
threadId: string | null;
|
|
36
|
+
runId: string | null;
|
|
37
|
+
expiresAt: number | null;
|
|
38
|
+
metadata: string | null;
|
|
27
39
|
}
|
|
28
40
|
export interface JobMetadata {
|
|
29
41
|
schedule?: string;
|
|
@@ -66,20 +78,13 @@ export type ResourceScope = "personal" | "shared" | "all";
|
|
|
66
78
|
export declare function withMcpServersFolder(tree: TreeNode[], servers: McpServer[], opts?: {
|
|
67
79
|
alwaysShow?: boolean;
|
|
68
80
|
}): TreeNode[];
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
*
|
|
73
|
-
* The agent occasionally writes scratch scripts and task notes to the
|
|
74
|
-
* resources store while working through a request. These aren't user
|
|
75
|
-
* content — they're agent machinery — and they clutter the top of the
|
|
76
|
-
* personal tree. Grouping them under a single clearly-labeled folder
|
|
77
|
-
* keeps them visible (so the user can inspect or delete) without making
|
|
78
|
-
* them look like first-class personal files.
|
|
79
|
-
*/
|
|
80
|
-
export declare function withAgentScratchFolder(tree: TreeNode[]): TreeNode[];
|
|
81
|
+
export declare function withAgentScratchFolder(tree: TreeNode[], opts?: {
|
|
82
|
+
show?: boolean;
|
|
83
|
+
}): TreeNode[];
|
|
81
84
|
export declare function useResources(scope?: ResourceScope): import("@tanstack/react-query").UseQueryResult<ResourceMeta[], Error>;
|
|
82
|
-
export declare function useResourceTree(scope?: ResourceScope
|
|
85
|
+
export declare function useResourceTree(scope?: ResourceScope, opts?: {
|
|
86
|
+
includeAgentScratch?: boolean;
|
|
87
|
+
}): import("@tanstack/react-query").UseQueryResult<TreeNode[], Error>;
|
|
83
88
|
export declare function useResource(id: string | null): import("@tanstack/react-query").UseQueryResult<Resource, Error>;
|
|
84
89
|
export declare function useCreateResource(): import("@tanstack/react-query").UseMutationResult<Resource, Error, {
|
|
85
90
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-resources.d.ts","sourceRoot":"","sources":["../../../src/client/resources/use-resources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,IAAI,kBAAkB,EAClC,aAAa,EACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"use-resources.d.ts","sourceRoot":"","sources":["../../../src/client/resources/use-resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,12 @@ export function withMcpServersFolder(tree, servers, opts) {
|
|
|
40
40
|
size: 0,
|
|
41
41
|
createdAt: s.createdAt,
|
|
42
42
|
updatedAt: s.createdAt,
|
|
43
|
+
createdBy: "system",
|
|
44
|
+
visibility: "workspace",
|
|
45
|
+
threadId: null,
|
|
46
|
+
runId: null,
|
|
47
|
+
expiresAt: null,
|
|
48
|
+
metadata: null,
|
|
43
49
|
},
|
|
44
50
|
};
|
|
45
51
|
});
|
|
@@ -74,17 +80,25 @@ export function withMcpServersFolder(tree, servers, opts) {
|
|
|
74
80
|
* keeps them visible (so the user can inspect or delete) without making
|
|
75
81
|
* them look like first-class personal files.
|
|
76
82
|
*/
|
|
77
|
-
|
|
83
|
+
function isTopLevelAgentScratchNode(node) {
|
|
84
|
+
return (node.resource?.visibility === "agent_scratch" ||
|
|
85
|
+
(node.type === "folder" &&
|
|
86
|
+
(node.name === "scripts" || node.name === "tasks")));
|
|
87
|
+
}
|
|
88
|
+
export function withAgentScratchFolder(tree, opts) {
|
|
89
|
+
const show = opts?.show ?? true;
|
|
78
90
|
const scratch = [];
|
|
79
91
|
const rest = [];
|
|
80
92
|
for (const n of tree) {
|
|
81
|
-
if (
|
|
93
|
+
if (isTopLevelAgentScratchNode(n)) {
|
|
82
94
|
scratch.push(n);
|
|
83
95
|
}
|
|
84
96
|
else {
|
|
85
97
|
rest.push(n);
|
|
86
98
|
}
|
|
87
99
|
}
|
|
100
|
+
if (!show)
|
|
101
|
+
return rest;
|
|
88
102
|
if (scratch.length === 0)
|
|
89
103
|
return tree;
|
|
90
104
|
const folder = {
|
|
@@ -109,19 +123,23 @@ async function fetchJson(url) {
|
|
|
109
123
|
return res.json();
|
|
110
124
|
}
|
|
111
125
|
export function useResources(scope = "personal") {
|
|
126
|
+
const query = new URLSearchParams({ scope });
|
|
112
127
|
return useQuery({
|
|
113
128
|
queryKey: ["resources", "list", scope],
|
|
114
129
|
queryFn: async () => {
|
|
115
|
-
const data = await fetchJson(agentNativePath(`/_agent-native/resources
|
|
130
|
+
const data = await fetchJson(agentNativePath(`/_agent-native/resources?${query.toString()}`));
|
|
116
131
|
return data.resources ?? [];
|
|
117
132
|
},
|
|
118
133
|
});
|
|
119
134
|
}
|
|
120
|
-
export function useResourceTree(scope = "personal") {
|
|
135
|
+
export function useResourceTree(scope = "personal", opts) {
|
|
121
136
|
return useQuery({
|
|
122
|
-
queryKey: ["resources", "tree", scope],
|
|
137
|
+
queryKey: ["resources", "tree", scope, opts?.includeAgentScratch ?? false],
|
|
123
138
|
queryFn: async () => {
|
|
124
|
-
const
|
|
139
|
+
const query = new URLSearchParams({ scope });
|
|
140
|
+
if (opts?.includeAgentScratch)
|
|
141
|
+
query.set("includeAgentScratch", "true");
|
|
142
|
+
const data = await fetchJson(agentNativePath(`/_agent-native/resources/tree?${query.toString()}`));
|
|
125
143
|
return data.tree ?? [];
|
|
126
144
|
},
|
|
127
145
|
});
|