@agent-native/core 0.14.8 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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/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/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/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/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 +272 -59
- 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 +53 -13
- 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/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 +62 -15
- 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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-app-links.js","sourceRoot":"","sources":["../../../src/client/org/workspace-app-links.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { coreTemplates } from \"../../cli/templates-meta.js\";\n\nexport interface OrgSwitcherAppLink {\n id: string;\n name: string;\n href: string;\n description?: string;\n isDispatch: boolean;\n status?: \"ready\" | \"pending\";\n}\n\nexport interface VisibleOrgAppLinks {\n links: OrgSwitcherAppLink[];\n overflowCount: number;\n}\n\ntype RuntimeEnv = Record<string, string | boolean | undefined>;\n\nconst DISPATCH_ID = \"dispatch\";\nexport const ORG_SWITCHER_MAX_APP_LINKS = 9;\n\nfunction runtimeEnv(): RuntimeEnv {\n return (\n (\n import.meta as unknown as {\n env?: RuntimeEnv;\n }\n ).env ?? {}\n );\n}\n\nfunction envString(env: RuntimeEnv, key: string): string | undefined {\n const value = env[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction appendPath(base: string, path: string): string {\n const segment = path.replace(/^\\/+/, \"\");\n try {\n const url = new URL(base);\n url.pathname = `${stripTrailingSlash(url.pathname)}/${segment}`.replace(\n /\\/+/g,\n \"/\",\n );\n return url.toString();\n } catch {\n return `${stripTrailingSlash(base)}/${segment}`;\n }\n}\n\nfunction dispatchBaseHref(href: string): string {\n try {\n const url = new URL(href);\n url.pathname = url.pathname.replace(/\\/(?:overview|apps)\\/?$/, \"\") || \"/\";\n url.search = \"\";\n url.hash = \"\";\n return stripTrailingSlash(url.toString());\n } catch {\n return stripTrailingSlash(\n href.replace(/\\/(?:overview|apps)\\/?$/, \"\") || \"/dispatch\",\n );\n }\n}\n\nfunction isAbsoluteUrl(value: string): boolean {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction workspaceHref(\n pathValue: string,\n explicitUrl: string | null | undefined,\n env: RuntimeEnv,\n): string {\n const url = explicitUrl?.trim();\n if (url) {\n if (url.startsWith(\"/\")) return workspaceHref(url, null, env);\n if (isAbsoluteUrl(url)) return url;\n return url;\n }\n\n const path = pathValue.startsWith(\"/\") ? pathValue : `/${pathValue}`;\n const gatewayUrl = envString(env, \"VITE_WORKSPACE_GATEWAY_URL\");\n if (!gatewayUrl) return path;\n\n try {\n return new URL(path, `${stripTrailingSlash(gatewayUrl)}/`).toString();\n } catch {\n return path;\n }\n}\n\nfunction appEntryToLink(\n entry: unknown,\n env: RuntimeEnv,\n): OrgSwitcherAppLink | null {\n if (!entry || typeof entry !== \"object\") return null;\n const record = entry as Record<string, unknown>;\n const id = typeof record.id === \"string\" ? record.id.trim() : \"\";\n if (!id) return null;\n\n const pathValue =\n typeof record.path === \"string\" && record.path.trim()\n ? record.path.trim()\n : `/${id}`;\n const explicitUrl =\n typeof record.url === \"string\" && record.url.trim()\n ? record.url.trim()\n : typeof record.builderUrl === \"string\" && record.builderUrl.trim()\n ? record.builderUrl.trim()\n : null;\n const baseHref = workspaceHref(pathValue, explicitUrl, env);\n const isDispatch =\n typeof record.isDispatch === \"boolean\"\n ? record.isDispatch\n : id === DISPATCH_ID;\n\n return {\n id,\n name:\n typeof record.name === \"string\" && record.name.trim()\n ? record.name.trim()\n : titleCase(id),\n href: isDispatch ? appendPath(baseHref, \"overview\") : baseHref,\n description:\n typeof record.description === \"string\" && record.description.trim()\n ? record.description.trim()\n : undefined,\n isDispatch,\n status: record.status === \"pending\" ? \"pending\" : \"ready\",\n };\n}\n\nfunction sortAppLinks(apps: OrgSwitcherAppLink[]): OrgSwitcherAppLink[] {\n return [...apps].sort((a, b) => {\n if (a.isDispatch && !b.isDispatch) return -1;\n if (!a.isDispatch && b.isDispatch) return 1;\n if (a.status === \"pending\" && b.status !== \"pending\") return 1;\n if (a.status !== \"pending\" && b.status === \"pending\") return -1;\n return a.name.localeCompare(b.name);\n });\n}\n\nfunction dedupeAppLinks(apps: OrgSwitcherAppLink[]): OrgSwitcherAppLink[] {\n const seen = new Set<string>();\n const deduped: OrgSwitcherAppLink[] = [];\n for (const app of apps) {\n if (seen.has(app.id)) continue;\n seen.add(app.id);\n deduped.push(app);\n }\n return deduped;\n}\n\nexport function parseWorkspaceAppLinks(\n payload: unknown,\n env: RuntimeEnv = runtimeEnv(),\n): OrgSwitcherAppLink[] | null {\n const rawApps = Array.isArray((payload as { apps?: unknown[] })?.apps)\n ? (payload as { apps: unknown[] }).apps\n : Array.isArray(payload)\n ? payload\n : null;\n if (!rawApps) return null;\n\n const apps = rawApps\n .map((entry) => appEntryToLink(entry, env))\n .filter((app): app is OrgSwitcherAppLink => Boolean(app));\n\n return apps.length ? sortAppLinks(dedupeAppLinks(apps)) : null;\n}\n\nexport function parseWorkspaceAppLinksJson(\n raw: string | undefined,\n env: RuntimeEnv = runtimeEnv(),\n): OrgSwitcherAppLink[] | null {\n if (!raw) return null;\n try {\n return parseWorkspaceAppLinks(JSON.parse(raw), env);\n } catch {\n return null;\n }\n}\n\nexport function defaultOrgAppLinks(): OrgSwitcherAppLink[] {\n return sortAppLinks(\n coreTemplates()\n .filter((template) => !template.hidden && template.prodUrl)\n .map((template) => ({\n id: template.name,\n name: template.label,\n href:\n template.name === DISPATCH_ID\n ? appendPath(template.prodUrl!, \"overview\")\n : template.prodUrl!,\n description: template.hint,\n isDispatch: template.name === DISPATCH_ID,\n status: \"ready\" as const,\n })),\n );\n}\n\nexport function isWorkspaceAppEnvironment(\n env: RuntimeEnv = runtimeEnv(),\n): boolean {\n return (\n envString(env, \"VITE_AGENT_NATIVE_WORKSPACE\") === \"1\" ||\n Boolean(envString(env, \"VITE_WORKSPACE_GATEWAY_URL\")) ||\n Boolean(envString(env, \"VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON\"))\n );\n}\n\nexport function dispatchOverviewHref(\n apps: OrgSwitcherAppLink[],\n env: RuntimeEnv = runtimeEnv(),\n): string {\n const dispatch = apps.find((app) => app.isDispatch);\n if (dispatch) return appendPath(dispatchBaseHref(dispatch.href), \"overview\");\n return appendPath(workspaceHref(\"/dispatch\", null, env), \"overview\");\n}\n\nexport function dispatchAppsHref(\n apps: OrgSwitcherAppLink[],\n env: RuntimeEnv = runtimeEnv(),\n): string {\n const dispatch = apps.find((app) => app.isDispatch);\n if (dispatch) return appendPath(dispatchBaseHref(dispatch.href), \"apps\");\n return appendPath(workspaceHref(\"/dispatch\", null, env), \"apps\");\n}\n\nexport function visibleOrgAppLinks(\n apps: OrgSwitcherAppLink[],\n max = ORG_SWITCHER_MAX_APP_LINKS,\n): VisibleOrgAppLinks {\n const links = sortAppLinks(apps).slice(0, max);\n return {\n links,\n overflowCount: Math.max(0, apps.length - links.length),\n };\n}\n\nfunction initialWorkspaceLinks(env: RuntimeEnv): OrgSwitcherAppLink[] {\n return (\n parseWorkspaceAppLinksJson(\n envString(env, \"VITE_AGENT_NATIVE_WORKSPACE_APPS_JSON\"),\n env,\n ) ?? [\n {\n id: DISPATCH_ID,\n name: \"Dispatch\",\n href: appendPath(workspaceHref(\"/dispatch\", null, env), \"overview\"),\n description: \"Workspace hub\",\n isDispatch: true,\n status: \"ready\",\n },\n ]\n );\n}\n\nfunction workspaceAppFetchUrls(env: RuntimeEnv): string[] {\n const urls: string[] = [];\n const gatewayUrl = envString(env, \"VITE_WORKSPACE_GATEWAY_URL\");\n if (gatewayUrl) {\n try {\n urls.push(\n new URL(\n \"/_workspace/apps\",\n `${stripTrailingSlash(gatewayUrl)}/`,\n ).toString(),\n );\n } catch {\n // Fall through to the same-origin Dispatch action below.\n }\n }\n urls.push(\n \"/_agent-native/actions/list-workspace-apps?includeAgentCards=false\",\n );\n return urls;\n}\n\nexport interface UseOrgSwitcherAppLinksResult {\n apps: OrgSwitcherAppLink[];\n isWorkspace: boolean;\n isLoading: boolean;\n dispatchHref: string;\n dispatchAllAppsHref: string;\n}\n\nexport function useOrgSwitcherAppLinks(\n enabled: boolean,\n): UseOrgSwitcherAppLinksResult {\n const env = useMemo(() => runtimeEnv(), []);\n const isWorkspace = useMemo(() => isWorkspaceAppEnvironment(env), [env]);\n const [apps, setApps] = useState<OrgSwitcherAppLink[]>(() =>\n isWorkspace ? initialWorkspaceLinks(env) : defaultOrgAppLinks(),\n );\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!enabled || !isWorkspace) return;\n let cancelled = false;\n\n async function refresh() {\n setIsLoading(true);\n try {\n for (const url of workspaceAppFetchUrls(env)) {\n try {\n const response = await fetch(url, {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n });\n if (!response.ok) continue;\n const parsed = await response.json().catch(() => null);\n const links = parseWorkspaceAppLinks(parsed, env);\n if (links?.length) {\n if (!cancelled) setApps(links);\n return;\n }\n } catch {\n // Try the next source; the static manifest remains available.\n }\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n }\n\n void refresh();\n return () => {\n cancelled = true;\n };\n }, [enabled, env, isWorkspace]);\n\n return {\n apps,\n isWorkspace,\n isLoading,\n dispatchHref: dispatchOverviewHref(apps, env),\n dispatchAllAppsHref: dispatchAppsHref(apps, env),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AA08BA,wBAAgB,cAAc,4CA6lB7B"}
|
|
@@ -451,6 +451,10 @@ Create skill files under \`skills/<name>/SKILL.md\` to give the agent specialize
|
|
|
451
451
|
| Skill | Path | Description |
|
|
452
452
|
|-------|------|-------------|
|
|
453
453
|
| *(use the skill button to create one)* | \`skills/example/SKILL.md\` | |
|
|
454
|
+
|
|
455
|
+
## Workspace files
|
|
456
|
+
|
|
457
|
+
Workspace 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.
|
|
454
458
|
`;
|
|
455
459
|
// BuilderBrowserCard moved to settings/BrowserSection.tsx
|
|
456
460
|
export function ResourcesPanel() {
|
|
@@ -471,13 +475,18 @@ export function ResourcesPanel() {
|
|
|
471
475
|
catch { }
|
|
472
476
|
return "visual";
|
|
473
477
|
});
|
|
478
|
+
const [showAgentScratch, setShowAgentScratch] = useState(false);
|
|
474
479
|
useEffect(() => {
|
|
475
480
|
setToolbarDeleteConfirmId(null);
|
|
476
481
|
}, [selectedResourceId]);
|
|
477
482
|
const [saveStatus, setSaveStatus] = useState("idle");
|
|
478
483
|
const fileInputRef = useRef(null);
|
|
479
|
-
const sharedTreeQuery = useResourceTree("shared"
|
|
480
|
-
|
|
484
|
+
const sharedTreeQuery = useResourceTree("shared", {
|
|
485
|
+
includeAgentScratch: showAgentScratch,
|
|
486
|
+
});
|
|
487
|
+
const personalTreeQuery = useResourceTree("personal", {
|
|
488
|
+
includeAgentScratch: showAgentScratch,
|
|
489
|
+
});
|
|
481
490
|
const mcpServersQuery = useMcpServers();
|
|
482
491
|
const createMcpServer = useCreateMcpServer();
|
|
483
492
|
const deleteMcpServer = useDeleteMcpServer();
|
|
@@ -486,8 +495,8 @@ export function ResourcesPanel() {
|
|
|
486
495
|
// table — the virtual ids carry the `mcp:<scope>:<id>` prefix that
|
|
487
496
|
// `handleSelect` and `handleDelete` below recognize to route back to
|
|
488
497
|
// the MCP endpoints.
|
|
489
|
-
const personalTree = withAgentScratchFolder(withMcpServersFolder(personalTreeQuery.data ?? [], mcpServersQuery.data?.user ?? []));
|
|
490
|
-
const sharedTree = withMcpServersFolder(sharedTreeQuery.data ?? [], mcpServersQuery.data?.org ?? []);
|
|
498
|
+
const personalTree = withAgentScratchFolder(withMcpServersFolder(personalTreeQuery.data ?? [], mcpServersQuery.data?.user ?? []), { show: showAgentScratch });
|
|
499
|
+
const sharedTree = withAgentScratchFolder(withMcpServersFolder(sharedTreeQuery.data ?? [], mcpServersQuery.data?.org ?? []), { show: showAgentScratch });
|
|
491
500
|
const orgRole = mcpServersQuery.data?.role ?? org?.role ?? null;
|
|
492
501
|
const hasOrgForMcp = !!(mcpServersQuery.data?.orgId ?? org?.orgId);
|
|
493
502
|
const canCreateOrgMcp = hasOrgForMcp && (orgRole === "owner" || orgRole === "admin");
|
|
@@ -657,7 +666,11 @@ export function ResourcesPanel() {
|
|
|
657
666
|
: "Delete resource", className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-destructive hover:bg-accent/50", toolbarDeleteConfirmId === selectedResourceId &&
|
|
658
667
|
"bg-destructive/10 text-destructive"), children: _jsx(IconTrash, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: toolbarDeleteConfirmId === selectedResourceId
|
|
659
668
|
? "Click again to delete"
|
|
660
|
-
: "Delete resource" })] }) })] })] })) : (_jsxs("div", { className: "absolute top-1 right-1 z-10 flex items-center gap-1", children: [_jsx(CreateMenu, { scope: activeScope, onCreateFile: handleCreateFromToolbar, onCreateResource: handleCreateResourceFromToolbar, onCreateMcpServer: handleCreateMcpServer, canCreateOrgMcp: canCreateOrgMcp, hasOrg: hasOrgForMcp }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => fileInputRef.current?.click(), "aria-label": "Upload file", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconUpload, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Upload file" })] }) }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("
|
|
669
|
+
: "Delete resource" })] }) })] })] })) : (_jsxs("div", { className: "absolute top-1 right-1 z-10 flex items-center gap-1", children: [_jsx(CreateMenu, { scope: activeScope, onCreateFile: handleCreateFromToolbar, onCreateResource: handleCreateResourceFromToolbar, onCreateMcpServer: handleCreateMcpServer, canCreateOrgMcp: canCreateOrgMcp, hasOrg: hasOrgForMcp }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => fileInputRef.current?.click(), "aria-label": "Upload file", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconUpload, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Upload file" })] }) }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => setShowAgentScratch((value) => !value), "aria-label": showAgentScratch
|
|
670
|
+
? "Hide agent scratch files"
|
|
671
|
+
: "Show agent scratch files", className: cn("flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", showAgentScratch && "bg-accent/50 text-foreground"), children: _jsx(IconEye, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: showAgentScratch
|
|
672
|
+
? "Hide agent scratch files"
|
|
673
|
+
: "Show agent scratch files" })] }) }), _jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("a", { href: WORKSPACE_DOCS_URL, target: "_blank", rel: "noopener noreferrer", "aria-label": "Open Workspace docs", className: "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-accent/50", children: _jsx(IconHelp, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { side: "left", sideOffset: 8, children: "Open Workspace docs" })] }) }), _jsx("input", { ref: fileInputRef, type: "file", multiple: true, className: "hidden", onChange: (e) => {
|
|
661
674
|
if (e.target.files && e.target.files.length > 0) {
|
|
662
675
|
handleUploadFiles(e.target.files);
|
|
663
676
|
e.target.value = "";
|
|
@@ -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"]}
|