@promptbook/cli 0.112.0-99 → 0.113.0-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 +76 -44
- package/agents/default/developer.book +24 -0
- package/apps/agents-server/README.md +19 -2
- package/apps/agents-server/env-manual/GITHUB_APP.md +1 -1
- package/apps/agents-server/next.config.ts +41 -1
- package/apps/agents-server/package.json +1 -1
- package/apps/agents-server/playwright.config.ts +3 -0
- package/apps/agents-server/public/promptbook-logo-blue.png +0 -0
- package/apps/agents-server/public/promptbook-logo-white.png +0 -0
- package/apps/agents-server/scripts/prerender-homepage.js +76 -1
- package/apps/agents-server/src/app/AddAgentButton.tsx +0 -5
- package/apps/agents-server/src/app/[agentName]/layout.tsx +1 -0
- package/apps/agents-server/src/app/actions.ts +70 -9
- package/apps/agents-server/src/app/admin/about/page.tsx +1 -1
- package/apps/agents-server/src/app/admin/api-tokens/ApiTokensClient.tsx +4 -1
- package/apps/agents-server/src/app/admin/chat-feedback/ChatFeedbackClient.tsx +3 -0
- package/apps/agents-server/src/app/admin/chat-feedback/ChatFeedbackTable.tsx +13 -8
- package/apps/agents-server/src/app/admin/chat-feedback/page.tsx +2 -4
- package/apps/agents-server/src/app/admin/chat-history/ChatHistoryClient.tsx +3 -0
- package/apps/agents-server/src/app/admin/chat-history/ChatHistoryTable.tsx +13 -8
- package/apps/agents-server/src/app/admin/chat-history/page.tsx +2 -4
- package/apps/agents-server/src/app/admin/cli-access/CliAccessClient.tsx +1 -3
- package/apps/agents-server/src/app/admin/code-runners/CodeRunnersClient.tsx +19 -11
- package/apps/agents-server/src/app/admin/custom-css/CustomCssClient.tsx +4 -0
- package/apps/agents-server/src/app/admin/custom-css/CustomCssEditorPanel.tsx +7 -1
- package/apps/agents-server/src/app/admin/custom-css/CustomCssFilesPanel.tsx +7 -1
- package/apps/agents-server/src/app/admin/custom-js/CustomJsClient.tsx +11 -0
- package/apps/agents-server/src/app/admin/custom-js/CustomJsEditorPanel.tsx +7 -1
- package/apps/agents-server/src/app/admin/custom-js/CustomJsFilesPanel.tsx +7 -1
- package/apps/agents-server/src/app/admin/files/FilesGalleryClient.tsx +4 -0
- package/apps/agents-server/src/app/admin/files/FilesGalleryGrid.tsx +9 -11
- package/apps/agents-server/src/app/admin/files/FilesGalleryTable.tsx +9 -8
- package/apps/agents-server/src/app/admin/image-generator-test/ImageAttachmentsEditor.tsx +30 -9
- package/apps/agents-server/src/app/admin/images/ImagesGalleryClient.tsx +4 -0
- package/apps/agents-server/src/app/admin/images/ImagesGalleryGrid.tsx +16 -11
- package/apps/agents-server/src/app/admin/images/ImagesGalleryTable.tsx +18 -9
- package/apps/agents-server/src/app/admin/limits/LimitsClient.tsx +11 -12
- package/apps/agents-server/src/app/admin/login-methods/shibboleth/page.tsx +355 -0
- package/apps/agents-server/src/app/admin/logs/LogsClient.tsx +9 -3
- package/apps/agents-server/src/app/admin/messages/MessagesClient.tsx +7 -6
- package/apps/agents-server/src/app/admin/metadata/MetadataClient.tsx +671 -45
- package/apps/agents-server/src/app/admin/servers/CreateServerDialog.tsx +22 -1
- package/apps/agents-server/src/app/admin/servers/ServersRegistryTable.tsx +14 -13
- package/apps/agents-server/src/app/admin/servers/useCreateServerWizard.ts +57 -20
- package/apps/agents-server/src/app/admin/task-manager/TaskManagerClient.tsx +4 -2
- package/apps/agents-server/src/app/admin/task-manager/TaskManagerTaskRow.tsx +14 -15
- package/apps/agents-server/src/app/admin/task-manager/TaskManagerTasksCard.tsx +4 -1
- package/apps/agents-server/src/app/admin/task-manager/useTaskManagerState.ts +6 -9
- package/apps/agents-server/src/app/admin/update/CustomCommitPicker.tsx +258 -0
- package/apps/agents-server/src/app/admin/update/UpdateClient.tsx +627 -137
- package/apps/agents-server/src/app/admin/usage/UsageClient.tsx +4 -2
- package/apps/agents-server/src/app/admin/usage/UsageClientAnalyticsPanels.tsx +6 -4
- package/apps/agents-server/src/app/admin/usage/UsageClientFormatting.ts +6 -12
- package/apps/agents-server/src/app/admin/usage/UsageClientTimelineChart.tsx +7 -4
- package/apps/agents-server/src/app/admin/usage/useUsageClientState.ts +12 -4
- package/apps/agents-server/src/app/admin/users/[userId]/UserDetailClient.tsx +27 -15
- package/apps/agents-server/src/app/agents/[agentName]/ActiveAgentBreadcrumbBinder.tsx +30 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentChatWrapper.tsx +13 -2
- package/apps/agents-server/src/app/agents/[agentName]/AgentProfileChat.tsx +20 -25
- package/apps/agents-server/src/app/agents/[agentName]/_utils.ts +7 -5
- package/apps/agents-server/src/app/agents/[agentName]/api/book/route.ts +2 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/user-chats/[chatId]/messages/route.ts +4 -11
- package/apps/agents-server/src/app/agents/[agentName]/api/user-chats/[chatId]/stream/route.ts +85 -56
- package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorWrapper.tsx +7 -1
- package/apps/agents-server/src/app/agents/[agentName]/book/useBookEditorHistory.ts +9 -2
- package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatHistoryPayloadState.ts +38 -4
- package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatHistorySyncOperations.ts +4 -1
- package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatPageLayout.tsx +2 -2
- package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatSidebarDefault.tsx +19 -13
- package/apps/agents-server/src/app/agents/[agentName]/chat/CanonicalAgentChatSurface.tsx +30 -16
- package/apps/agents-server/src/app/agents/[agentName]/chat/useAgentChatHistoryClientState.ts +2 -15
- package/apps/agents-server/src/app/agents/[agentName]/chat/useAgentChatHistorySyncEffects.ts +7 -13
- package/apps/agents-server/src/app/agents/[agentName]/chat/useCanonicalAgentChatPanelState.ts +58 -7
- package/apps/agents-server/src/app/agents/[agentName]/history/page.tsx +6 -1
- package/apps/agents-server/src/app/agents/[agentName]/images/default-avatar.png/route.ts +6 -2
- package/apps/agents-server/src/app/agents/[agentName]/integration/CalendarIntegrationSection.tsx +23 -5
- package/apps/agents-server/src/app/agents/[agentName]/layout.tsx +47 -1
- package/apps/agents-server/src/app/agents/[agentName]/timeouts/AgentTimeoutsClient.tsx +4 -2
- package/apps/agents-server/src/app/agents/[agentName]/timeouts/AgentTimeoutsFiltersCard.tsx +9 -4
- package/apps/agents-server/src/app/agents/[agentName]/timeouts/AgentTimeoutsTableCard.tsx +4 -1
- package/apps/agents-server/src/app/agents/[agentName]/timeouts/AgentTimeoutsTableRow.tsx +10 -3
- package/apps/agents-server/src/app/api/admin/cli-access/route.ts +27 -123
- package/apps/agents-server/src/app/api/admin/code-runners/authentication/route.ts +33 -125
- package/apps/agents-server/src/app/api/admin/code-runners/route.ts +1 -1
- package/apps/agents-server/src/app/api/admin/servers/route.ts +5 -0
- package/apps/agents-server/src/app/api/admin/update/commits/route.ts +35 -0
- package/apps/agents-server/src/app/api/admin/update/log/route.ts +42 -0
- package/apps/agents-server/src/app/api/admin/update/route.ts +10 -2
- package/apps/agents-server/src/app/api/agent-folders/[folderId]/visibility/route.ts +19 -7
- package/apps/agents-server/src/app/api/agents/[agentName]/route.ts +39 -25
- package/apps/agents-server/src/app/api/agents/export/route.ts +67 -0
- package/apps/agents-server/src/app/api/agents/import/route.ts +168 -0
- package/apps/agents-server/src/app/api/auth/change-password/route.ts +53 -6
- package/apps/agents-server/src/app/api/auth/login/route.ts +17 -16
- package/apps/agents-server/src/app/api/auth/logout/route.ts +2 -10
- package/apps/agents-server/src/app/api/auth/shibboleth/acs/route.ts +112 -0
- package/apps/agents-server/src/app/api/auth/shibboleth/login/route.ts +70 -0
- package/apps/agents-server/src/app/api/auth/shibboleth/metadata/route.ts +15 -0
- package/apps/agents-server/src/app/api/auth/shibboleth/status/route.ts +17 -0
- package/apps/agents-server/src/app/api/chat/citation-label/route.ts +133 -0
- package/apps/agents-server/src/app/api/chat/export/pdf/route.ts +167 -2
- package/apps/agents-server/src/app/api/chat/route.ts +29 -7
- package/apps/agents-server/src/app/api/chat-feedback/export/route.ts +2 -2
- package/apps/agents-server/src/app/api/chat-feedback/route.ts +3 -3
- package/apps/agents-server/src/app/api/chat-history/[id]/route.ts +2 -2
- package/apps/agents-server/src/app/api/chat-history/export/route.ts +2 -2
- package/apps/agents-server/src/app/api/chat-history/route.ts +3 -3
- package/apps/agents-server/src/app/api/chat-streaming/route.ts +29 -0
- package/apps/agents-server/src/app/api/elevenlabs/tts/route.ts +60 -2
- package/apps/agents-server/src/app/api/emails/incoming/sendgrid/route.ts +24 -2
- package/apps/agents-server/src/app/api/federated-agents/route.ts +1 -1
- package/apps/agents-server/src/app/api/health/route.ts +18 -0
- package/apps/agents-server/src/app/api/images/[filename]/route.ts +108 -2
- package/apps/agents-server/src/app/api/internal/agent-runner-limits/route.ts +52 -0
- package/apps/agents-server/src/app/api/internal/user-chat-jobs/run/route.ts +17 -4
- package/apps/agents-server/src/app/api/metadata/export/route.ts +34 -0
- package/apps/agents-server/src/app/api/metadata/import/route.ts +47 -0
- package/apps/agents-server/src/app/api/metadata/route.ts +4 -0
- package/apps/agents-server/src/app/api/openai/v1/audio/transcriptions/route.ts +111 -2
- package/apps/agents-server/src/app/api/page-preview/check/route.ts +49 -0
- package/apps/agents-server/src/app/api/page-preview/screenshot/route.ts +64 -0
- package/apps/agents-server/src/app/api/scrape/route.ts +18 -0
- package/apps/agents-server/src/app/api/team-agent-profile/route.ts +20 -0
- package/apps/agents-server/src/app/api/upload/route.ts +204 -220
- package/apps/agents-server/src/app/api/users/[username]/route.ts +3 -2
- package/apps/agents-server/src/app/api/users/route.ts +8 -7
- package/apps/agents-server/src/app/api/v1/agents/[agentId]/route.ts +17 -8
- package/apps/agents-server/src/app/api/v1/agents/route.ts +2 -0
- package/apps/agents-server/src/app/dashboard/page.tsx +12 -17
- package/apps/agents-server/src/app/docs/[docId]/page.tsx +1 -1
- package/apps/agents-server/src/app/docs/page.tsx +1 -1
- package/apps/agents-server/src/app/globals.css +179 -0
- package/apps/agents-server/src/app/layout.tsx +33 -4
- package/apps/agents-server/src/app/recycle-bin/actions.ts +3 -0
- package/apps/agents-server/src/app/recycle-bin/page.tsx +1 -1
- package/apps/agents-server/src/app/s3/[first]/[second]/[hash]/[filename]/route.ts +52 -0
- package/apps/agents-server/src/app/swagger/SwaggerApiKeysPanel.tsx +4 -1
- package/apps/agents-server/src/app/system/settings/KeybindingsSettingsClient.tsx +13 -7
- package/apps/agents-server/src/app/system/user-memory/UserMemoryClient.tsx +4 -2
- package/apps/agents-server/src/app/system/user-wallet/UserWalletClient.tsx +3 -0
- package/apps/agents-server/src/app/system/user-wallet/UserWalletRecordsTable.tsx +5 -1
- package/apps/agents-server/src/app/system/utilities/mocked-chats/MockedChatsEditorClient.tsx +3 -0
- package/apps/agents-server/src/app/system/utilities/mocked-chats/MockedChatsEditorSidebar.tsx +7 -8
- package/apps/agents-server/src/components/AdminTerminal/AdminTerminalCard.tsx +13 -70
- package/apps/agents-server/src/components/AdminTerminal/AdminXtermTerminal.tsx +330 -0
- package/apps/agents-server/src/components/AdminTerminal/useAdminTerminalSession.ts +45 -5
- package/apps/agents-server/src/components/AgentContextMenu/useAgentContextMenuItems.ts +27 -19
- package/apps/agents-server/src/components/AgentProfile/AgentCapabilityChips.tsx +39 -5
- package/apps/agents-server/src/components/AgentProfile/AgentProfile.tsx +4 -7
- package/apps/agents-server/src/components/AgentProfile/AgentProfileImage.tsx +8 -2
- package/apps/agents-server/src/components/ApplicationErrorPage/ApplicationErrorPage.tsx +118 -12
- package/apps/agents-server/src/components/DocsToolbar/DocsToolbar.tsx +4 -4
- package/apps/agents-server/src/components/DocumentationContent/DocumentationContent.tsx +9 -9
- package/apps/agents-server/src/components/FileUploadAvailability/FileUploadAvailabilityContext.tsx +50 -0
- package/apps/agents-server/src/components/FileUploadAvailability/FileUploadUnavailableNotice.tsx +45 -0
- package/apps/agents-server/src/components/Footer/Footer.tsx +10 -9
- package/apps/agents-server/src/components/Footer/getCommitFooterEmoji.ts +112 -0
- package/apps/agents-server/src/components/Header/ActiveAgentBreadcrumbContext.tsx +82 -0
- package/apps/agents-server/src/components/Header/Header.tsx +24 -15
- package/apps/agents-server/src/components/Header/HeaderTypes.ts +6 -0
- package/apps/agents-server/src/components/Header/buildHeaderSystemMenuItems.ts +51 -1
- package/apps/agents-server/src/components/Header/useHeaderActiveAgent.ts +26 -7
- package/apps/agents-server/src/components/Header/useHeaderAgentMenus.tsx +0 -5
- package/apps/agents-server/src/components/Homepage/AgentCard.tsx +7 -1
- package/apps/agents-server/src/components/Homepage/AgentsList.tsx +22 -1
- package/apps/agents-server/src/components/Homepage/AgentsListHeader.tsx +85 -1
- package/apps/agents-server/src/components/Homepage/AgentsListListView.tsx +6 -0
- package/apps/agents-server/src/components/Homepage/AgentsListViewContent.tsx +6 -0
- package/apps/agents-server/src/components/Homepage/Card.tsx +1 -1
- package/apps/agents-server/src/components/Homepage/Section.tsx +3 -1
- package/apps/agents-server/src/components/Homepage/SortableFolderCard.tsx +7 -1
- package/apps/agents-server/src/components/Homepage/hiddenFolders.ts +104 -0
- package/apps/agents-server/src/components/Homepage/useAgentsListImportExportState.ts +525 -0
- package/apps/agents-server/src/components/Homepage/useAgentsListQueryState.ts +35 -0
- package/apps/agents-server/src/components/Homepage/useAgentsListState.ts +38 -4
- package/apps/agents-server/src/components/LayoutWrapper/LayoutWrapper.tsx +93 -70
- package/apps/agents-server/src/components/LoginForm/LoginForm.tsx +52 -12
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/ManGoNewAgentWizard.tsx +151 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/ManGoOnboardingNavigation.tsx +50 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/BookLanguagePanel.tsx +125 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/DropZone.tsx +83 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/EmailTestRun.tsx +216 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/KnowledgeList.tsx +79 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/Logo.tsx +20 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/MarkdownBookEditor.tsx +154 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/MarkdownPreview.tsx +188 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/RailStepper.tsx +115 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/StepFrame.tsx +47 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/TestChat.tsx +159 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/WizardShell.tsx +114 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/brand/RailArtwork.tsx +60 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/BookStep.tsx +135 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/DoneStep.tsx +215 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/KnowledgeStep.tsx +152 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/TestStep.tsx +262 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/steps/ZadaniStep.tsx +64 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/Badge.tsx +41 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/Banner.tsx +69 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/Button.tsx +77 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/Card.tsx +33 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/Field.tsx +103 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/IconButton.tsx +40 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/Spinner.tsx +14 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/components/ui/tokens.ts +37 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/config/bookSections.ts +62 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/config/emailScenarios.ts +22 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/config/steps.ts +46 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/index.ts +11 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/lib/cn.ts +4 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/lib/format.ts +9 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/lib/id.ts +11 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/agentEvalService.ts +30 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/agentTestService.ts +69 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/bookService.ts +21 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/createManGoAgentSource.ts +107 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/draftService.ts +45 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/services/uploadService.ts +27 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/state/OnboardingProvider.tsx +121 -0
- package/apps/agents-server/src/components/NewAgentDialog/ManGoNewAgentWizard/types.ts +52 -0
- package/apps/agents-server/src/components/NewAgentDialog/NewAgentDialog.tsx +7 -3
- package/apps/agents-server/src/components/NewAgentDialog/NewAgentWizardKnowledgeStep.tsx +6 -0
- package/apps/agents-server/src/components/NewAgentDialog/createNewAgentWizardSource.ts +1 -1
- package/apps/agents-server/src/components/NewAgentDialog/trackNewAgentCreationEvent.ts +1 -1
- package/apps/agents-server/src/components/NewAgentDialog/useNewAgentDialog.tsx +113 -14
- package/apps/agents-server/src/components/NewAgentDialog/useNewAgentWizardKnowledgeState.ts +8 -1
- package/apps/agents-server/src/components/PrintHeader/PrintHeader.tsx +4 -2
- package/apps/agents-server/src/components/Skeleton/ConsolePageLoadingSkeleton.tsx +1 -1
- package/apps/agents-server/src/components/Skeleton/DocumentationRouteLoadingSkeleton.tsx +1 -1
- package/apps/agents-server/src/components/Skeleton/HomepageLoadingSkeleton.tsx +1 -1
- package/apps/agents-server/src/components/UsersList/UsersList.tsx +24 -6
- package/apps/agents-server/src/components/UsersList/useUsersAdmin.ts +2 -7
- package/apps/agents-server/src/constants/defaultAgentAvatarVisual.ts +1 -1
- package/apps/agents-server/src/constants/newAgentWizard.ts +17 -8
- package/apps/agents-server/src/constants/serverLimits.ts +41 -2
- package/apps/agents-server/src/constants/shibbolethAuth.ts +139 -0
- package/apps/agents-server/src/database/$provideClientSql.ts +37 -0
- package/apps/agents-server/src/database/$provideSupabaseForServer.ts +41 -0
- package/apps/agents-server/src/database/customJavascript.ts +62 -1
- package/apps/agents-server/src/database/customStylesheet.ts +60 -1
- package/apps/agents-server/src/database/getMetadata.ts +121 -4
- package/apps/agents-server/src/database/loadAgentsServerEnvFile.ts +29 -0
- package/apps/agents-server/src/database/metadataDefaults.ts +85 -31
- package/apps/agents-server/src/database/migrate.ts +8 -2
- package/apps/agents-server/src/database/migrations/2026-06-0100-shibboleth-auth.sql +136 -0
- package/apps/agents-server/src/database/migrations/2026-06-0200-default-agent-avatar-visual-octopus3d3.sql +16 -0
- package/apps/agents-server/src/database/migrations/2026-06-1300-user-chat-active-read-indexes.sql +7 -0
- package/apps/agents-server/src/database/migrations/2026-06-2200-new-agent-wizard-metadata-key.sql +27 -0
- package/apps/agents-server/src/database/migrations/2026-06-2201-new-agent-wizard-mango-default.sql +11 -0
- package/apps/agents-server/src/database/migrations/2026-06-2600-agent-directory-performance-indexes.sql +14 -0
- package/apps/agents-server/src/database/migrations/2026-06-2700-default-agent-avatar-visual-octopus3d4.sql +16 -0
- package/apps/agents-server/src/database/seedCoreAgents.ts +234 -0
- package/apps/agents-server/src/database/seedDefaultAgents.ts +223 -0
- package/apps/agents-server/src/database/sqlite/$provideLocalSqliteSupabase.ts +234 -41
- package/apps/agents-server/src/generated/reservedPaths.ts +3 -0
- package/apps/agents-server/src/instrumentation-client.ts +28 -0
- package/apps/agents-server/src/instrumentation.ts +19 -0
- package/apps/agents-server/src/languages/ServerTranslationKeys.ts +4 -0
- package/apps/agents-server/src/languages/translations/czech.yaml +5 -1
- package/apps/agents-server/src/languages/translations/english.yaml +5 -1
- package/apps/agents-server/src/message-providers/email/sendgrid/verifySendgridInboundParseWebhook.ts +345 -0
- package/apps/agents-server/src/middleware/applyEmbeddingHeader.ts +4 -2
- package/apps/agents-server/src/middleware/contentSecurityPolicy.ts +97 -0
- package/apps/agents-server/src/middleware/resolveAccessControlResponse.ts +3 -2
- package/apps/agents-server/src/middleware/resolveMiddlewareResponse.ts +8 -3
- package/apps/agents-server/src/middleware.ts +15 -32
- package/apps/agents-server/src/search/createDefaultServerSearchProviders/createFederatedAgentsSearchProvider.ts +1 -1
- package/apps/agents-server/src/sentry.edge.config.ts +18 -0
- package/apps/agents-server/src/sentry.server.config.ts +19 -0
- package/apps/agents-server/src/tools/$provideAgentCollectionForServer.ts +2 -9
- package/apps/agents-server/src/tools/$provideCdnForServer.ts +187 -15
- package/apps/agents-server/src/tools/BrowserConnectionProvider.ts +2 -19
- package/apps/agents-server/src/tools/agent_progress.ts +4 -10
- package/apps/agents-server/src/tools/createAgentProgressTools.ts +8 -4
- package/apps/agents-server/src/tools/createChatAttachmentToolFunctions.ts +8 -4
- package/apps/agents-server/src/tools/createServerChromiumLaunchOptions.ts +44 -0
- package/apps/agents-server/src/utils/agentOwnership.ts +54 -5
- package/apps/agents-server/src/utils/agentRouting/resolveAgentRouteTarget.ts +101 -19
- package/apps/agents-server/src/utils/agentVisibility.ts +25 -62
- package/apps/agents-server/src/utils/agentsTransfer/createAgentsExportZipStream.ts +81 -0
- package/apps/agents-server/src/utils/agentsTransfer/importAgentsFromFiles.ts +852 -0
- package/apps/agents-server/src/utils/assertSafeUrl.ts +136 -0
- package/apps/agents-server/src/utils/authenticateUser.ts +112 -4
- package/apps/agents-server/src/utils/authenticationAttemptRateLimit.ts +504 -0
- package/apps/agents-server/src/utils/backup/createBooksBackupZipStream.ts +91 -7
- package/apps/agents-server/src/utils/cdn/classes/DigitalOceanSpaces.ts +48 -4
- package/apps/agents-server/src/utils/cdn/classes/TrackedFilesStorage.ts +6 -5
- package/apps/agents-server/src/utils/cdn/interfaces/IFilesStorage.ts +5 -0
- package/apps/agents-server/src/utils/cdn/utils/getUserFileCdnKey.ts +10 -3
- package/apps/agents-server/src/utils/chat/resolveAgentsServerCitationLabel.ts +130 -0
- package/apps/agents-server/src/utils/chat/resolveCitationSourceLabel.ts +436 -0
- package/apps/agents-server/src/utils/chatExport/renderHtmlToPdfOnServer.ts +66 -17
- package/apps/agents-server/src/utils/chatExport/sanitizeChatPdfExportHtml.ts +193 -0
- package/apps/agents-server/src/utils/codeRunnerConfiguration.ts +1 -1
- package/apps/agents-server/src/utils/createAdminTerminalRouteHandlers.ts +264 -0
- package/apps/agents-server/src/utils/createAgentWithDefaultVisibility.ts +3 -1
- package/apps/agents-server/src/utils/currentUserIdentity.ts +22 -9
- package/apps/agents-server/src/utils/defaultAgents/loadDefaultAgentBooks.ts +145 -0
- package/apps/agents-server/src/utils/errorReporting/agentsServerSentryContext.ts +203 -0
- package/apps/agents-server/src/utils/errorReporting/applicationErrorHandling.ts +45 -0
- package/apps/agents-server/src/utils/errorReporting/refreshApplicationDocument.ts +10 -0
- package/apps/agents-server/src/utils/errorReporting/registerServerErrorSentryLogging.ts +381 -0
- package/apps/agents-server/src/utils/errorReporting/sendApplicationErrorReportToSentry.ts +43 -152
- package/apps/agents-server/src/utils/errorReporting/sentrySdkConfig.ts +237 -0
- package/apps/agents-server/src/utils/errorReporting/sentryStore.ts +187 -0
- package/apps/agents-server/src/utils/externalChatRunner/createExternalAgentRepositoryFiles.ts +2 -2
- package/apps/agents-server/src/utils/externalChatRunner/processExternalUserChatJob.ts +15 -8
- package/apps/agents-server/src/utils/findAgentForCallerWriteAccess.ts +36 -0
- package/apps/agents-server/src/utils/getCurrentUser.ts +2 -1
- package/apps/agents-server/src/utils/getFederatedServers.ts +3 -74
- package/apps/agents-server/src/utils/getUserById.ts +19 -5
- package/apps/agents-server/src/utils/getWellKnownAgentUrl.ts +10 -4
- package/apps/agents-server/src/utils/iframe/checkIfUrlCanBeEmbedded.ts +68 -0
- package/apps/agents-server/src/utils/interactiveTerminalSession.ts +9 -4
- package/apps/agents-server/src/utils/isAdminPasswordEqual.ts +28 -0
- package/apps/agents-server/src/utils/isUserGlobalAdmin.ts +3 -1
- package/apps/agents-server/src/utils/knowledge/createInlineKnowledgeSourceUploader.ts +24 -5
- package/apps/agents-server/src/utils/knowledge/resolveWebsiteKnowledgeSourcesForServer.ts +10 -1
- package/apps/agents-server/src/utils/localChatRunner/LocalUserChatJobMetadata.ts +15 -5
- package/apps/agents-server/src/utils/localChatRunner/processLocalUserChatJob.ts +24 -18
- package/apps/agents-server/src/utils/localization/formatServerLanguageHumanReadableDate.ts +70 -0
- package/apps/agents-server/src/utils/localization/getRequestServerLanguage.ts +32 -0
- package/apps/agents-server/src/utils/metadataConfigurationTransfer.ts +442 -0
- package/apps/agents-server/src/utils/paidApiRequestGuard.ts +241 -0
- package/apps/agents-server/src/utils/publicUser.ts +59 -0
- package/apps/agents-server/src/utils/serverLimits.ts +28 -1
- package/apps/agents-server/src/utils/serverManagement/createManagedServer/bootstrapManagedServer.ts +5 -6
- package/apps/agents-server/src/utils/serverManagement/createManagedServer/normalizeCreateServerInput.ts +6 -0
- package/apps/agents-server/src/utils/serverManagement/createManagedServer/seedServerCoreAgents.ts +162 -0
- package/apps/agents-server/src/utils/serverManagement/createManagedServer/seedServerDefaultAgents.ts +7 -87
- package/apps/agents-server/src/utils/serverManagement/createManagedServer.ts +5 -0
- package/apps/agents-server/src/utils/session.ts +72 -30
- package/apps/agents-server/src/utils/shareTargetPayloads.ts +37 -66
- package/apps/agents-server/src/utils/shibbolethAuthentication.ts +957 -0
- package/apps/agents-server/src/utils/transpilers/resolveTranspiledTeamExport.ts +10 -10
- package/apps/agents-server/src/utils/upload/createBookEditorUploadHandler.ts +19 -28
- package/apps/agents-server/src/utils/upload/fileUploadAvailability.ts +91 -0
- package/apps/agents-server/src/utils/upload/uploadFileToServer.ts +157 -0
- package/apps/agents-server/src/utils/userChat/createImmediateUserChatAnswerModelRequirements.ts +26 -12
- package/apps/agents-server/src/utils/userChat/createRunUserChatJobExecutionContext.ts +45 -0
- package/apps/agents-server/src/utils/userChat/createRunUserChatJobPersistenceController.ts +17 -11
- package/apps/agents-server/src/utils/userChat/createUserChatDetailPayload.ts +33 -18
- package/apps/agents-server/src/utils/userChat/createUserChatHarnessProgressCard.ts +93 -0
- package/apps/agents-server/src/utils/userChat/createUserChatRunnerProgressCard.ts +57 -0
- package/apps/agents-server/src/utils/userChat/hasPotentiallyPendingAssistantMessages.ts +26 -0
- package/apps/agents-server/src/utils/userChat/listUserChats.ts +117 -6
- package/apps/agents-server/src/utils/userChat/persistUserChatJobProgressCard.ts +40 -0
- package/apps/agents-server/src/utils/userChat/resolveUserChatProgressToolHighlights.ts +100 -0
- package/apps/agents-server/src/utils/userChat/resolveUserChatWorkerInternalToken.ts +63 -9
- package/apps/agents-server/src/utils/userChat/runImmediateUserChatAnswer.ts +1 -1
- package/apps/agents-server/src/utils/userChat/runUserChatJob.ts +30 -0
- package/apps/agents-server/src/utils/userChat/triggerUserChatJobWorker.ts +54 -19
- package/apps/agents-server/src/utils/userChat/userChatMessageLifecycle.ts +69 -1
- package/apps/agents-server/src/utils/userChat/userChatProgressCard.ts +360 -0
- package/apps/agents-server/src/utils/validateApiKey.ts +7 -3
- package/apps/agents-server/src/utils/vpsConfiguration.ts +8 -1
- package/apps/agents-server/src/utils/vpsSelfUpdate.ts +935 -64
- package/esm/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
- package/esm/apps/agents-server/src/constants/serverLimits.d.ts +224 -0
- package/esm/apps/agents-server/src/constants/toolUsageLimits.d.ts +55 -0
- package/esm/index.es.js +24308 -18655
- package/esm/index.es.js.map +1 -1
- package/esm/scripts/run-agent-chat/executeAgentChatTurn.d.ts +28 -0
- package/esm/scripts/run-agent-chat/runAgentChat.d.ts +5 -0
- package/esm/scripts/run-agent-chat/runAgentExec.d.ts +11 -0
- package/esm/scripts/run-agent-messages/main/AgentMessageFailureTracker.d.ts +27 -0
- package/esm/scripts/run-agent-messages/main/handleAgentWatchError.d.ts +4 -0
- package/esm/scripts/run-agent-messages/main/runAgentMessages.d.ts +1 -0
- package/esm/scripts/run-agent-messages/main/runMultipleAgentMessages.d.ts +1 -0
- package/esm/scripts/run-agent-messages/main/tickAgentMessages.d.ts +1 -0
- package/esm/scripts/run-agent-messages/messages/createAgentRunnerSystemMessage.d.ts +10 -0
- package/esm/scripts/run-agent-messages/messages/moveAgentMessageToFailed.d.ts +17 -0
- package/esm/scripts/run-codex-prompts/common/buildCoderRunProgressSnapshot.d.ts +5 -1
- package/esm/scripts/run-codex-prompts/common/cliProgressDisplay.d.ts +7 -0
- package/esm/scripts/run-codex-prompts/common/coderRunEstimateCache.d.ts +31 -0
- package/esm/scripts/run-codex-prompts/common/parseDuration.d.ts +19 -0
- package/esm/scripts/run-codex-prompts/common/progressFormatting.d.ts +2 -0
- package/esm/scripts/run-codex-prompts/common/resolveAgentSystemMessage.d.ts +6 -0
- package/esm/scripts/run-codex-prompts/common/resolveInlineOrFileText.d.ts +14 -0
- package/esm/scripts/run-codex-prompts/common/runGoScript/printLiveScriptChunk.d.ts +4 -0
- package/esm/scripts/run-codex-prompts/common/sleepWithCountdown.d.ts +27 -0
- package/esm/scripts/run-codex-prompts/common/waitForPause.d.ts +12 -0
- package/esm/scripts/run-codex-prompts/git/commitChanges.d.ts +3 -1
- package/esm/scripts/run-codex-prompts/main/findUnwrittenPrompts.d.ts +19 -0
- package/esm/scripts/run-codex-prompts/main/runCodexPromptsServer.d.ts +27 -0
- package/esm/scripts/run-codex-prompts/main/runPromptRound.d.ts +5 -3
- package/esm/scripts/run-codex-prompts/runners/claude-code/ClaudeCodeRunner.d.ts +3 -1
- package/esm/scripts/run-codex-prompts/server/buildCoderServerPromptResponse.d.ts +50 -0
- package/esm/scripts/run-codex-prompts/server/buildCoderServerRunState.d.ts +23 -0
- package/esm/scripts/run-codex-prompts/server/coderServerHtml.d.ts +9 -0
- package/esm/scripts/run-codex-prompts/server/runCoderHttpServer.d.ts +35 -0
- package/esm/scripts/run-codex-prompts/server/updatePromptSection.d.ts +9 -0
- package/esm/scripts/run-codex-prompts/ui/CoderRunUiState.d.ts +8 -0
- package/esm/scripts/run-codex-prompts/ui/buildCoderRunUiFrame.d.ts +1 -0
- package/esm/scripts/run-codex-prompts/ui/buildRunUiFrameShared.d.ts +5 -1
- package/esm/scripts/run-codex-prompts/ui/renderCoderRunUi.d.ts +1 -0
- package/esm/src/_packages/components.index.d.ts +4 -0
- package/esm/src/_packages/core.index.d.ts +22 -2
- package/esm/src/_packages/node.index.d.ts +40 -0
- package/esm/src/_packages/types.index.d.ts +20 -0
- package/esm/src/avatars/avatarAnimationScheduler.d.ts +4 -0
- package/esm/src/avatars/types/AvatarVisualDefinition.d.ts +1 -1
- package/esm/src/avatars/visuals/octopus3d3AvatarVisual.d.ts +7 -0
- package/esm/src/avatars/visuals/octopus3d4AvatarVisual.d.ts +7 -0
- package/esm/src/book-2.0/agent-source/AgentBasicInformation.d.ts +2 -0
- package/esm/src/book-2.0/agent-source/agentSourceVisibility.d.ts +97 -0
- package/esm/src/book-2.0/agent-source/agentSourceVisibility.test.d.ts +1 -0
- package/esm/src/book-3.0/BookNodeAgentSource.d.ts +38 -0
- package/esm/src/book-3.0/CliAgent.d.ts +66 -0
- package/esm/src/book-3.0/CliAgent.test.d.ts +1 -0
- package/esm/src/book-3.0/LiteAgent.d.ts +68 -0
- package/esm/src/book-3.0/LiteAgent.test.d.ts +1 -0
- package/esm/src/book-3.0/agentFolderPaths.d.ts +30 -0
- package/esm/src/book-3.0/cliAgentEnv.d.ts +33 -0
- package/esm/src/book-components/BookEditor/BookEditor.d.ts +6 -5
- package/esm/src/book-components/BookEditor/BookEditorAboutPromptbookInformation.d.ts +12 -0
- package/esm/src/book-components/BookEditor/BookEditorBrowserConfig.d.ts +2 -0
- package/esm/src/book-components/BookEditor/BookEditorForClient.d.ts +7 -0
- package/esm/src/book-components/BookEditor/BookEditorMonacoTokenization.d.ts +2 -0
- package/esm/src/book-components/BookEditor/BookEditorTheme.d.ts +24 -0
- package/esm/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.browser.d.ts +9 -0
- package/esm/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +1 -6
- package/esm/src/book-components/BookEditor/useBookEditorMonacoLifecycle.d.ts +1 -4
- package/esm/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
- package/esm/src/book-components/Chat/Chat/ChatCitationModal.d.ts +2 -0
- package/esm/src/book-components/Chat/Chat/ChatMessageItem.d.ts +4 -0
- package/esm/src/book-components/Chat/Chat/ChatMessageList.d.ts +4 -0
- package/esm/src/book-components/Chat/Chat/ChatProps.d.ts +5 -0
- package/esm/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +2 -0
- package/esm/src/book-components/Chat/Chat/ChatToolCallModalContent.d.ts +3 -1
- package/esm/src/book-components/Chat/Chat/CitationIframePreview.d.ts +20 -0
- package/esm/src/book-components/Chat/Chat/TeamToolCallModalContent.d.ts +2 -0
- package/esm/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +1 -0
- package/esm/src/book-components/Chat/SourceChip/SourceChip.d.ts +6 -1
- package/esm/src/book-components/Chat/hooks/useResolvedCitationLabel.d.ts +12 -0
- package/esm/src/book-components/Chat/types/ChatMessage.d.ts +4 -0
- package/esm/src/book-components/Chat/types/ChatParticipant.d.ts +1 -1
- package/esm/src/book-components/Chat/types/CitationLabelResolver.d.ts +8 -0
- package/esm/src/book-components/Chat/utils/citationHelpers.d.ts +9 -0
- package/esm/src/book-components/Chat/utils/decodeJsonUnicodeEscapesInMarkdownText.d.ts +14 -0
- package/esm/src/book-components/Chat/utils/decodeJsonUnicodeEscapesInMarkdownText.test.d.ts +1 -0
- package/esm/src/book-components/Chat/utils/isVisibleChatToolCall.d.ts +10 -0
- package/esm/src/book-components/Chat/utils/parseCitationsFromContent.d.ts +4 -0
- package/esm/src/book-components/_common/Dropdown/Dropdown.d.ts +1 -1
- package/esm/src/book-components/_common/MenuHoisting/MenuHoistingContext.d.ts +1 -1
- package/esm/src/book-components/_common/Modal/Modal.d.ts +1 -1
- package/esm/src/book-components/icons/AboutIcon.d.ts +1 -1
- package/esm/src/book-components/icons/DownloadIcon.d.ts +1 -1
- package/esm/src/book-components/icons/ExitFullscreenIcon.d.ts +1 -1
- package/esm/src/book-components/icons/FullscreenIcon.d.ts +1 -1
- package/esm/src/cli/cli-commands/agent/agentCliOptions.d.ts +38 -0
- package/esm/src/cli/cli-commands/agent/chat.d.ts +10 -0
- package/esm/src/cli/cli-commands/agent/exec.d.ts +10 -0
- package/esm/src/cli/cli-commands/agent/run.test.d.ts +1 -0
- package/esm/src/cli/cli-commands/agent-folder/agentProjectPaths.d.ts +2 -24
- package/esm/src/cli/cli-commands/agent.d.ts +14 -0
- package/esm/src/cli/cli-commands/agents-server/buildAgentsServer.d.ts +23 -1
- package/esm/src/cli/cli-commands/agents-server/run.d.ts +6 -0
- package/esm/src/cli/cli-commands/agents-server/startAgentsServer.d.ts +9 -2
- package/esm/src/cli/cli-commands/coder/ThinkingLevel.d.ts +1 -1
- package/esm/src/cli/cli-commands/coder/ensureCoderDeveloperAgentFile.d.ts +25 -0
- package/esm/src/cli/cli-commands/coder/find-unwritten.d.ts +10 -0
- package/esm/src/cli/cli-commands/coder/initializeCoderProjectConfiguration.d.ts +2 -0
- package/esm/src/cli/cli-commands/coder/server.d.ts +13 -0
- package/esm/src/cli/cli-commands/coder/waitOptions.d.ts +14 -0
- package/esm/src/cli/cli-commands/common/promptRunnerCliOptions.d.ts +9 -25
- package/esm/src/collection/agent-collection/CreateAgentInput.d.ts +2 -1
- package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +22 -0
- package/esm/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.d.ts +21 -1
- package/esm/src/commitments/META_VISIBILITY/META_VISIBILITY.d.ts +27 -0
- package/esm/src/commitments/_common/teamInternalAgentAccess.d.ts +9 -1
- package/esm/src/commitments/index.d.ts +2 -1
- package/esm/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.d.ts +1 -1
- package/esm/src/llm-providers/_common/register/$provideLlmToolsFromEnv.d.ts +1 -1
- package/esm/src/scrapers/website/utils/createShowdownConverter.d.ts +2 -2
- package/esm/src/utils/isTimingSafeEqualString.d.ts +25 -0
- package/esm/src/utils/validators/url/isValidAgentUrl.d.ts +5 -0
- package/esm/src/version.d.ts +1 -1
- package/package.json +6 -1
- package/servers.ts +1 -16
- package/src/_packages/components.index.ts +4 -0
- package/src/_packages/core.index.ts +22 -2
- package/src/_packages/node.index.ts +40 -0
- package/src/_packages/types.index.ts +20 -0
- package/src/avatars/avatarAnimationScheduler.ts +76 -4
- package/src/avatars/types/AvatarVisualDefinition.ts +2 -0
- package/src/avatars/visuals/avatarVisualRegistry.ts +4 -0
- package/src/avatars/visuals/fractalAvatarVisual.ts +5 -4
- package/src/avatars/visuals/minecraft2AvatarVisual.ts +16 -11
- package/src/avatars/visuals/minecraftAvatarVisual.ts +21 -7
- package/src/avatars/visuals/octopus3d2AvatarVisual.ts +175 -38
- package/src/avatars/visuals/octopus3d3AvatarVisual.ts +1068 -0
- package/src/avatars/visuals/octopus3d4AvatarVisual.ts +1295 -0
- package/src/avatars/visuals/octopus3dAvatarVisual.ts +69 -17
- package/src/book-2.0/agent-source/AgentBasicInformation.ts +2 -0
- package/src/book-2.0/agent-source/agentSourceVisibility.ts +214 -0
- package/src/book-2.0/agent-source/createAgentModelRequirementsWithCommitments/augmentAgentModelRequirementsFromSource.ts +18 -2
- package/src/book-2.0/agent-source/parseAgentSource/applyMetaCommitment.ts +17 -0
- package/src/book-2.0/book-language-documentation/createStandaloneBookLanguageMarkdown.ts +1 -0
- package/src/book-2.0/book-language-documentation/renderGroupedCommitmentDocumentationMarkdown.ts +7 -1
- package/src/book-3.0/Book.ts +3 -1
- package/src/book-3.0/BookNodeAgentSource.ts +135 -0
- package/src/book-3.0/CliAgent.ts +252 -0
- package/src/book-3.0/LiteAgent.ts +468 -0
- package/src/book-3.0/agentFolderPaths.ts +38 -0
- package/src/book-3.0/cliAgentEnv.ts +46 -0
- package/src/book-components/BookEditor/BookEditor.module.css +61 -0
- package/src/book-components/BookEditor/BookEditor.tsx +16 -13
- package/src/book-components/BookEditor/BookEditorAboutPromptbookInformation.tsx +72 -0
- package/src/book-components/BookEditor/BookEditorActionbar.tsx +35 -5
- package/src/book-components/BookEditor/BookEditorBrowserConfig.ts +11 -0
- package/src/book-components/BookEditor/BookEditorForClient.tsx +33 -0
- package/src/book-components/BookEditor/BookEditorMonaco.tsx +4 -2
- package/src/book-components/BookEditor/BookEditorMonacoTokenization.ts +89 -27
- package/src/book-components/BookEditor/BookEditorTheme.ts +32 -0
- package/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.browser.ts +11 -0
- package/src/book-components/BookEditor/useBookEditorMonacoLanguage.ts +62 -92
- package/src/book-components/BookEditor/useBookEditorMonacoLifecycle.ts +1 -5
- package/src/book-components/BookEditor/useBookEditorMonacoStyles.ts +3 -2
- package/src/book-components/BookEditor/useBookEditorMonacoUploads.ts +1 -1
- package/src/book-components/Chat/Chat/Chat.module.css +50 -0
- package/src/book-components/Chat/Chat/Chat.tsx +4 -0
- package/src/book-components/Chat/Chat/ChatCitationModal.tsx +19 -5
- package/src/book-components/Chat/Chat/ChatMessageItem.tsx +22 -2
- package/src/book-components/Chat/Chat/ChatMessageList.tsx +6 -0
- package/src/book-components/Chat/Chat/ChatProps.tsx +6 -0
- package/src/book-components/Chat/Chat/ChatToolCallModal.tsx +4 -0
- package/src/book-components/Chat/Chat/ChatToolCallModalContent.tsx +4 -0
- package/src/book-components/Chat/Chat/CitationIframePreview.tsx +78 -0
- package/src/book-components/Chat/Chat/TeamToolCallModalContent.tsx +16 -3
- package/src/book-components/Chat/Chat/createChatMessageToolCallRenderModel.ts +2 -9
- package/src/book-components/Chat/Chat/useChatPostprocessedMessages.ts +13 -2
- package/src/book-components/Chat/MarkdownContent/MarkdownContent.tsx +63 -4
- package/src/book-components/Chat/SourceChip/SourceChip.module.css +8 -0
- package/src/book-components/Chat/SourceChip/SourceChip.tsx +19 -5
- package/src/book-components/Chat/hooks/useResolvedCitationLabel.ts +65 -0
- package/src/book-components/Chat/save/html/htmlSaveFormatDefinition.ts +315 -88
- package/src/book-components/Chat/save/react/reactSaveFormatDefinition.ts +7 -1
- package/src/book-components/Chat/types/ChatMessage.ts +5 -0
- package/src/book-components/Chat/types/ChatParticipant.ts +1 -1
- package/src/book-components/Chat/types/CitationLabelResolver.ts +9 -0
- package/src/book-components/Chat/utils/citationHelpers.ts +90 -2
- package/src/book-components/Chat/utils/createCitationFootnoteRenderModel.ts +3 -0
- package/src/book-components/Chat/utils/decodeJsonUnicodeEscapesInMarkdownText.ts +178 -0
- package/src/book-components/Chat/utils/isVisibleChatToolCall.ts +23 -0
- package/src/book-components/Chat/utils/parseCitationsFromContent.ts +6 -0
- package/src/book-components/Chat/utils/renderMarkdown.ts +3 -2
- package/src/book-components/_common/Dropdown/Dropdown.tsx +1 -1
- package/src/book-components/_common/MenuHoisting/MenuHoistingContext.tsx +1 -1
- package/src/book-components/_common/Modal/Modal.tsx +1 -1
- package/src/book-components/icons/AboutIcon.tsx +1 -1
- package/src/book-components/icons/DownloadIcon.tsx +1 -1
- package/src/book-components/icons/ExitFullscreenIcon.tsx +1 -1
- package/src/book-components/icons/FullscreenIcon.tsx +1 -1
- package/src/cli/cli-commands/agent/agentCliOptions.ts +92 -0
- package/src/cli/cli-commands/agent/chat.ts +54 -0
- package/src/cli/cli-commands/agent/exec.ts +60 -0
- package/src/cli/cli-commands/agent-folder/agentProjectPaths.ts +15 -28
- package/src/cli/cli-commands/agent.ts +44 -0
- package/src/cli/cli-commands/agents-server/buildAgentsServer.ts +325 -33
- package/src/cli/cli-commands/agents-server/ensureAgentsServerEnvFile.ts +15 -2
- package/src/cli/cli-commands/agents-server/run.ts +103 -31
- package/src/cli/cli-commands/agents-server/startAgentsServer.ts +270 -41
- package/src/cli/cli-commands/agents-server.ts +7 -1
- package/src/cli/cli-commands/coder/ThinkingLevel.ts +3 -1
- package/src/cli/cli-commands/coder/agentCodingFile.ts +1 -1
- package/src/cli/cli-commands/coder/ensureCoderDeveloperAgentFile.ts +79 -0
- package/src/cli/cli-commands/coder/find-unwritten.ts +58 -0
- package/src/cli/cli-commands/coder/getDefaultCoderPackageJsonScripts.ts +2 -2
- package/src/cli/cli-commands/coder/init.ts +6 -1
- package/src/cli/cli-commands/coder/initializeCoderProjectConfiguration.ts +10 -0
- package/src/cli/cli-commands/coder/printInitializationSummary.ts +3 -0
- package/src/cli/cli-commands/coder/run.ts +108 -13
- package/src/cli/cli-commands/coder/server.ts +259 -0
- package/src/cli/cli-commands/coder/waitOptions.ts +24 -0
- package/src/cli/cli-commands/coder.ts +6 -0
- package/src/cli/cli-commands/common/promptRunnerCliOptions.ts +33 -49
- package/src/cli/common/$deprecateCliCommand.ts +10 -1
- package/src/cli/promptbookCli.ts +2 -0
- package/src/collection/agent-collection/CreateAgentInput.ts +10 -5
- package/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.ts +98 -17
- package/src/collection/agent-collection/constructors/agent-collection-in-supabase/createAgentPersistenceRecords.ts +7 -4
- package/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.ts +44 -8
- package/src/commands/KNOWLEDGE/utils/knowledgeSourceContentToName.ts +2 -2
- package/src/commitments/GOAL/GOAL.ts +7 -2
- package/src/commitments/LANGUAGE/LANGUAGE.ts +7 -2
- package/src/commitments/META_VISIBILITY/META_VISIBILITY.ts +78 -0
- package/src/commitments/TEAM/TEAM.ts +12 -1
- package/src/commitments/USE_PROJECT/createUseProjectToolFunctions.ts +8 -1
- package/src/commitments/_common/teamInternalAgentAccess.ts +14 -8
- package/src/commitments/index.ts +2 -0
- package/src/execution/createPipelineExecutor/getKnowledgeForTask.ts +1 -1
- package/src/formats/csv/CsvFormatParser.ts +4 -4
- package/src/formats/csv/utils/csvParse.ts +2 -2
- package/src/import-plugins/JsonFileImportPlugin.ts +15 -2
- package/src/import-plugins/TextFileImportPlugin.ts +8 -1
- package/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.ts +1 -1
- package/src/llm-providers/_common/register/$provideLlmToolsFromEnv.ts +1 -1
- package/src/llm-providers/_common/register/$registeredLlmToolsMessage.ts +6 -1
- package/src/llm-providers/agent/AgentLlmExecutionTools.ts +2 -2
- package/src/llm-providers/agent/AgentLlmExecutionToolsAgentKitRunner.ts +2 -2
- package/src/llm-providers/agent/AgentLlmExecutionToolsOpenAiAssistantRunner.ts +2 -2
- package/src/llm-providers/anthropic-claude/register-configuration.ts +6 -3
- package/src/llm-providers/openai/OpenAiAgentKitExecutionToolsToolBuilder.ts +3 -1
- package/src/llm-providers/openai/OpenAiAssistantExecutionToolsToolRunner.ts +1 -1
- package/src/llm-providers/openai/OpenAiVectorStoreKnowledgeSourcePreparer.ts +1 -1
- package/src/other/templates/getTemplatesPipelineCollection.ts +817 -702
- package/src/scrapers/_common/utils/getScraperIntermediateSource.ts +2 -2
- package/src/scrapers/website/WebsiteScraper.ts +1 -1
- package/src/scrapers/website/utils/createShowdownConverter.ts +2 -2
- package/src/scripting/javascript/JavascriptEvalExecutionTools.ts +1 -1
- package/src/utils/agents/resolveAgentAvatarImageUrl.ts +1 -1
- package/src/utils/chat/chatAttachments/resolveChatAttachmentContent.ts +8 -1
- package/src/utils/isTimingSafeEqualString.ts +43 -0
- package/src/utils/misc/computeHash.ts +2 -2
- package/src/utils/random/$randomToken.ts +2 -2
- package/src/utils/validators/url/isValidAgentUrl.ts +5 -7
- package/src/version.ts +2 -2
- package/src/versions.txt +33 -0
- package/umd/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
- package/umd/apps/agents-server/src/constants/serverLimits.d.ts +224 -0
- package/umd/apps/agents-server/src/constants/toolUsageLimits.d.ts +55 -0
- package/umd/index.umd.js +24336 -18681
- package/umd/index.umd.js.map +1 -1
- package/umd/scripts/run-agent-chat/executeAgentChatTurn.d.ts +28 -0
- package/umd/scripts/run-agent-chat/runAgentChat.d.ts +5 -0
- package/umd/scripts/run-agent-chat/runAgentExec.d.ts +11 -0
- package/umd/scripts/run-agent-messages/main/AgentMessageFailureTracker.d.ts +27 -0
- package/umd/scripts/run-agent-messages/main/handleAgentWatchError.d.ts +4 -0
- package/umd/scripts/run-agent-messages/main/runAgentMessages.d.ts +1 -0
- package/umd/scripts/run-agent-messages/main/runMultipleAgentMessages.d.ts +1 -0
- package/umd/scripts/run-agent-messages/main/tickAgentMessages.d.ts +1 -0
- package/umd/scripts/run-agent-messages/messages/createAgentRunnerSystemMessage.d.ts +10 -0
- package/umd/scripts/run-agent-messages/messages/moveAgentMessageToFailed.d.ts +17 -0
- package/umd/scripts/run-codex-prompts/common/buildCoderRunProgressSnapshot.d.ts +5 -1
- package/umd/scripts/run-codex-prompts/common/cliProgressDisplay.d.ts +7 -0
- package/umd/scripts/run-codex-prompts/common/coderRunEstimateCache.d.ts +31 -0
- package/umd/scripts/run-codex-prompts/common/parseDuration.d.ts +19 -0
- package/umd/scripts/run-codex-prompts/common/progressFormatting.d.ts +2 -0
- package/umd/scripts/run-codex-prompts/common/resolveAgentSystemMessage.d.ts +6 -0
- package/umd/scripts/run-codex-prompts/common/resolveInlineOrFileText.d.ts +14 -0
- package/umd/scripts/run-codex-prompts/common/runGoScript/printLiveScriptChunk.d.ts +4 -0
- package/umd/scripts/run-codex-prompts/common/sleepWithCountdown.d.ts +27 -0
- package/umd/scripts/run-codex-prompts/common/waitForPause.d.ts +12 -0
- package/umd/scripts/run-codex-prompts/git/commitChanges.d.ts +3 -1
- package/umd/scripts/run-codex-prompts/main/findUnwrittenPrompts.d.ts +19 -0
- package/umd/scripts/run-codex-prompts/main/runCodexPromptsServer.d.ts +27 -0
- package/umd/scripts/run-codex-prompts/main/runPromptRound.d.ts +5 -3
- package/umd/scripts/run-codex-prompts/runners/claude-code/ClaudeCodeRunner.d.ts +3 -1
- package/umd/scripts/run-codex-prompts/server/buildCoderServerPromptResponse.d.ts +50 -0
- package/umd/scripts/run-codex-prompts/server/buildCoderServerRunState.d.ts +23 -0
- package/umd/scripts/run-codex-prompts/server/coderServerHtml.d.ts +9 -0
- package/umd/scripts/run-codex-prompts/server/runCoderHttpServer.d.ts +35 -0
- package/umd/scripts/run-codex-prompts/server/updatePromptSection.d.ts +9 -0
- package/umd/scripts/run-codex-prompts/ui/CoderRunUiState.d.ts +8 -0
- package/umd/scripts/run-codex-prompts/ui/buildCoderRunUiFrame.d.ts +1 -0
- package/umd/scripts/run-codex-prompts/ui/buildRunUiFrameShared.d.ts +5 -1
- package/umd/scripts/run-codex-prompts/ui/renderCoderRunUi.d.ts +1 -0
- package/umd/src/_packages/components.index.d.ts +4 -0
- package/umd/src/_packages/core.index.d.ts +22 -2
- package/umd/src/_packages/node.index.d.ts +40 -0
- package/umd/src/_packages/types.index.d.ts +20 -0
- package/umd/src/avatars/avatarAnimationScheduler.d.ts +4 -0
- package/umd/src/avatars/types/AvatarVisualDefinition.d.ts +1 -1
- package/umd/src/avatars/visuals/octopus3d3AvatarVisual.d.ts +7 -0
- package/umd/src/avatars/visuals/octopus3d4AvatarVisual.d.ts +7 -0
- package/umd/src/book-2.0/agent-source/AgentBasicInformation.d.ts +2 -0
- package/umd/src/book-2.0/agent-source/agentSourceVisibility.d.ts +97 -0
- package/umd/src/book-2.0/agent-source/agentSourceVisibility.test.d.ts +1 -0
- package/umd/src/book-3.0/BookNodeAgentSource.d.ts +38 -0
- package/umd/src/book-3.0/CliAgent.d.ts +66 -0
- package/umd/src/book-3.0/CliAgent.test.d.ts +1 -0
- package/umd/src/book-3.0/LiteAgent.d.ts +68 -0
- package/umd/src/book-3.0/LiteAgent.test.d.ts +1 -0
- package/umd/src/book-3.0/agentFolderPaths.d.ts +30 -0
- package/umd/src/book-3.0/cliAgentEnv.d.ts +33 -0
- package/umd/src/book-components/BookEditor/BookEditor.d.ts +6 -5
- package/umd/src/book-components/BookEditor/BookEditorAboutPromptbookInformation.d.ts +12 -0
- package/umd/src/book-components/BookEditor/BookEditorBrowserConfig.d.ts +2 -0
- package/umd/src/book-components/BookEditor/BookEditorForClient.d.ts +7 -0
- package/umd/src/book-components/BookEditor/BookEditorMonacoTokenization.d.ts +2 -0
- package/umd/src/book-components/BookEditor/BookEditorTheme.d.ts +24 -0
- package/umd/src/book-components/BookEditor/createDeprecatedCommitmentDiagnostics.browser.d.ts +9 -0
- package/umd/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +1 -6
- package/umd/src/book-components/BookEditor/useBookEditorMonacoLifecycle.d.ts +1 -4
- package/umd/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
- package/umd/src/book-components/Chat/Chat/ChatCitationModal.d.ts +2 -0
- package/umd/src/book-components/Chat/Chat/ChatMessageItem.d.ts +4 -0
- package/umd/src/book-components/Chat/Chat/ChatMessageList.d.ts +4 -0
- package/umd/src/book-components/Chat/Chat/ChatProps.d.ts +5 -0
- package/umd/src/book-components/Chat/Chat/ChatToolCallModal.d.ts +2 -0
- package/umd/src/book-components/Chat/Chat/ChatToolCallModalContent.d.ts +3 -1
- package/umd/src/book-components/Chat/Chat/CitationIframePreview.d.ts +20 -0
- package/umd/src/book-components/Chat/Chat/TeamToolCallModalContent.d.ts +2 -0
- package/umd/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +1 -0
- package/umd/src/book-components/Chat/SourceChip/SourceChip.d.ts +6 -1
- package/umd/src/book-components/Chat/hooks/useResolvedCitationLabel.d.ts +12 -0
- package/umd/src/book-components/Chat/types/ChatMessage.d.ts +4 -0
- package/umd/src/book-components/Chat/types/ChatParticipant.d.ts +1 -1
- package/umd/src/book-components/Chat/types/CitationLabelResolver.d.ts +8 -0
- package/umd/src/book-components/Chat/utils/citationHelpers.d.ts +9 -0
- package/umd/src/book-components/Chat/utils/decodeJsonUnicodeEscapesInMarkdownText.d.ts +14 -0
- package/umd/src/book-components/Chat/utils/decodeJsonUnicodeEscapesInMarkdownText.test.d.ts +1 -0
- package/umd/src/book-components/Chat/utils/isVisibleChatToolCall.d.ts +10 -0
- package/umd/src/book-components/Chat/utils/parseCitationsFromContent.d.ts +4 -0
- package/umd/src/book-components/_common/Dropdown/Dropdown.d.ts +1 -1
- package/umd/src/book-components/_common/MenuHoisting/MenuHoistingContext.d.ts +1 -1
- package/umd/src/book-components/_common/Modal/Modal.d.ts +1 -1
- package/umd/src/book-components/icons/AboutIcon.d.ts +1 -1
- package/umd/src/book-components/icons/DownloadIcon.d.ts +1 -1
- package/umd/src/book-components/icons/ExitFullscreenIcon.d.ts +1 -1
- package/umd/src/book-components/icons/FullscreenIcon.d.ts +1 -1
- package/umd/src/cli/cli-commands/agent/agentCliOptions.d.ts +38 -0
- package/umd/src/cli/cli-commands/agent/chat.d.ts +10 -0
- package/umd/src/cli/cli-commands/agent/exec.d.ts +10 -0
- package/umd/src/cli/cli-commands/agent/run.test.d.ts +1 -0
- package/umd/src/cli/cli-commands/agent-folder/agentProjectPaths.d.ts +2 -24
- package/umd/src/cli/cli-commands/agent.d.ts +14 -0
- package/umd/src/cli/cli-commands/agents-server/buildAgentsServer.d.ts +23 -1
- package/umd/src/cli/cli-commands/agents-server/run.d.ts +6 -0
- package/umd/src/cli/cli-commands/agents-server/startAgentsServer.d.ts +9 -2
- package/umd/src/cli/cli-commands/coder/ThinkingLevel.d.ts +1 -1
- package/umd/src/cli/cli-commands/coder/ensureCoderDeveloperAgentFile.d.ts +25 -0
- package/umd/src/cli/cli-commands/coder/find-unwritten.d.ts +10 -0
- package/umd/src/cli/cli-commands/coder/initializeCoderProjectConfiguration.d.ts +2 -0
- package/umd/src/cli/cli-commands/coder/server.d.ts +13 -0
- package/umd/src/cli/cli-commands/coder/waitOptions.d.ts +14 -0
- package/umd/src/cli/cli-commands/common/promptRunnerCliOptions.d.ts +9 -25
- package/umd/src/collection/agent-collection/CreateAgentInput.d.ts +2 -1
- package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +22 -0
- package/umd/src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence.d.ts +21 -1
- package/umd/src/commitments/META_VISIBILITY/META_VISIBILITY.d.ts +27 -0
- package/umd/src/commitments/_common/teamInternalAgentAccess.d.ts +9 -1
- package/umd/src/commitments/index.d.ts +2 -1
- package/umd/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.d.ts +1 -1
- package/umd/src/llm-providers/_common/register/$provideLlmToolsFromEnv.d.ts +1 -1
- package/umd/src/scrapers/website/utils/createShowdownConverter.d.ts +2 -2
- package/umd/src/utils/isTimingSafeEqualString.d.ts +25 -0
- package/umd/src/utils/validators/url/isValidAgentUrl.d.ts +5 -0
- package/umd/src/version.d.ts +1 -1
- package/apps/agents-server/src/app/api/long-streaming/route.ts +0 -23
- package/apps/agents-server/src/message-providers/email/_common/utils/parseEmailAddress.test.ts.todo +0 -108
- package/apps/agents-server/src/message-providers/email/_common/utils/parseEmailAddresses.test.ts.todo +0 -117
- package/apps/agents-server/src/message-providers/email/_common/utils/stringifyEmailAddress.test.ts.todo +0 -119
- package/apps/agents-server/src/message-providers/email/_common/utils/stringifyEmailAddresses.test.ts.todo +0 -74
- package/apps/agents-server/src/utils/defaultFederatedAgents/DefaultFederatedAgentsSyncOptions.ts +0 -9
- package/apps/agents-server/src/utils/defaultFederatedAgents/ensureDefaultFederatedAgentExists.ts +0 -277
- package/apps/agents-server/src/utils/defaultFederatedAgents/fetchCoreOrganizationPayload.ts +0 -39
- package/apps/agents-server/src/utils/defaultFederatedAgents/fetchFederatedAgentBook.ts +0 -43
- package/apps/agents-server/src/utils/defaultFederatedAgents/fetchWithDefaultFederatedAgentTimeout.ts +0 -28
- package/apps/agents-server/src/utils/defaultFederatedAgents/getDefaultFederatedAgentSyncPool.ts +0 -38
- package/apps/agents-server/src/utils/defaultFederatedAgents/loadActiveLocalAgentIdsByNormalizedName.ts +0 -41
- package/apps/agents-server/src/utils/defaultFederatedAgents/loadDefaultFederatedAgentSyncMetadata.ts +0 -76
- package/apps/agents-server/src/utils/defaultFederatedAgents/quoteIdentifier.ts +0 -11
- package/apps/agents-server/src/utils/defaultFederatedAgents/scheduleDefaultFederatedAgentsSync.ts +0 -88
- package/apps/agents-server/src/utils/defaultFederatedAgents/selectDefaultFederatedAgentsFromOrganizationPayload.ts +0 -181
- package/apps/agents-server/src/utils/defaultFederatedAgents/synchronizeDefaultFederatedAgents.ts +0 -77
- package/apps/agents-server/src/utils/shibboleth/createShibbolethAuthenticationLogPayload.ts +0 -173
- package/apps/agents-server/src/utils/shibboleth/writeShibbolethAuthenticationLog.ts +0 -27
- package/apps/agents-server/tests/e2e/authentication-and-navigation.spec.ts.todo +0 -178
- package/src/_packages/browser.index.ts +0 -31
- package/src/_packages/browser.readme.md +0 -43
- package/src/book-2.0/agent-source/parseAgentSourceWithCommitments.test.ts.todo +0 -265
- package/src/book-components/BookEditor/BookEditorMonaco.test.tsx.todo +0 -115
- package/src/book-components/Chat/utils/renderMarkdown.test.ts.tmp +0 -199
- package/src/collection/agent-collection/constructors/agent-collection-in-directory/AgentCollectionInDirectory.test.ts.todo +0 -131
- package/src/commands/_common/parseCommand.test.ts.todo +0 -48
- package/src/commitments/META_LINK/META_LINK.test.ts.todo +0 -75
- package/src/conversion/validation/pipelineStringToJson-errors.test.ts.todo +0 -33
- package/src/dialogs/simple-prompt/SimplePromptInterfaceTools.ts +0 -51
- package/src/executables/browsers/locateSafari.test.ts.tmp +0 -15
- package/src/execution/PromptbookFetch.test-type.ts +0 -14
- package/src/execution/createPipelineExecutor/00-createPipelineExecutor.test.ts.todo +0 -0
- package/src/execution/execution-report/executionReportJsonToString.test.ts.todo +0 -83
- package/src/execution/utils/usageToHuman.test.ts.todo +0 -80
- package/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.ts +0 -76
- package/src/llm-providers/_common/utils/assertUniqueModels.ts +0 -27
- package/src/llm-providers/_multiple/playground/playground.ts +0 -141
- package/src/llm-providers/_multiple/playground/tsconfig.json +0 -19
- package/src/llm-providers/agent/playground/playground.ts +0 -190
- package/src/llm-providers/agent/playground/tsconfig.json +0 -19
- package/src/llm-providers/anthropic-claude/playground/playground.ts +0 -99
- package/src/llm-providers/anthropic-claude/playground/tsconfig.json +0 -19
- package/src/llm-providers/azure-openai/playground/playground.ts +0 -101
- package/src/llm-providers/azure-openai/playground/tsconfig.json +0 -19
- package/src/llm-providers/ollama/playground/playground.ts +0 -120
- package/src/llm-providers/ollama/playground/tsconfig.json +0 -19
- package/src/llm-providers/openai/playground/playground.ts +0 -406
- package/src/llm-providers/openai/playground/tsconfig.json +0 -19
- package/src/llm-providers/remote/playground/playground.ts +0 -144
- package/src/llm-providers/remote/playground/tsconfig.json +0 -19
- package/src/llm-providers/vercel/playground/playground.ts +0 -133
- package/src/llm-providers/vercel/playground/tsconfig.json +0 -19
- package/src/personas/preparePersona.test.ts.todo +0 -126
- package/src/playground/backup/_playground-boilerplate.ts.txt +0 -37
- package/src/playground/backup/playground-agent-os.txt +0 -62
- package/src/playground/backup/playground-brj-app.ts.txt +0 -302
- package/src/playground/backup/playground-browser-playwright.txt +0 -110
- package/src/playground/backup/playground-claude-mcp.txt +0 -43
- package/src/playground/backup/playground-document-conversion.txt +0 -84
- package/src/playground/backup/playground-glob.ts.txt +0 -42
- package/src/playground/backup/playground-mcp-server.txt +0 -1
- package/src/playground/backup/playground-openai-agent-kit.txt +0 -73
- package/src/playground/backup/playground-openai-function-calling.txt +0 -131
- package/src/playground/backup/playground-openai-streaming.ts.txt +0 -68
- package/src/playground/backup/playground-scrape-knowledge.txt +0 -65
- package/src/playground/backup/playground-scraperFetch.ts.txt +0 -44
- package/src/playground/backup/playground-using-openai-compatible-route-on-agents-server.ts.txt +0 -49
- package/src/playground/backup/playground-write-pavolhejny-bio.txt +0 -120
- package/src/playground/permanent/_boilerplate.ts +0 -54
- package/src/playground/permanent/agent-with-browser-playground.ts +0 -92
- package/src/playground/permanent/error-handling-playground.ts +0 -103
- package/src/playground/playground.ts +0 -36
- package/src/playground/tsconfig.json +0 -19
- package/src/scrapers/_boilerplate/BoilerplateScraper.test.ts.todo +0 -73
- package/src/scrapers/_boilerplate/playground/boilerplate-scraper-playground.ts +0 -79
- package/src/scrapers/_boilerplate/playground/tsconfig.json +0 -19
- package/src/scrapers/_common/utils/files/blobToDataurl.test.ts.todo +0 -17
- package/src/scrapers/_common/utils/files/dataurlToBlob.test.ts.todo +0 -52
- package/src/scrapers/_common/utils/files/isValidDataurl.test.ts.todo +0 -42
- package/src/scrapers/_common/utils/files/shorten.test.ts.todo +0 -13
- package/src/scrapers/document/playground/document-scraper-playground.ts +0 -80
- package/src/scrapers/document/playground/tsconfig.json +0 -19
- package/src/scrapers/document-legacy/playground/legacy-document-scraper-playground.ts +0 -80
- package/src/scrapers/document-legacy/playground/tsconfig.json +0 -19
- package/src/scrapers/markdown/playground/markdown-scraper-playground.ts +0 -74
- package/src/scrapers/markdown/playground/tsconfig.json +0 -19
- package/src/scrapers/markitdown/MarkitdownScraper.test.ts.todo +0 -132
- package/src/scrapers/markitdown/playground/markitdown-scraper-playground.ts +0 -91
- package/src/scrapers/markitdown/playground/tsconfig.json +0 -19
- package/src/scrapers/pdf/PdfScraper.test.ts.todo +0 -52
- package/src/scrapers/pdf/playground/pdf-scraper-playground.ts +0 -75
- package/src/scrapers/pdf/playground/tsconfig.json +0 -19
- package/src/scrapers/website/playground/tsconfig.json +0 -19
- package/src/scrapers/website/playground/website-scraper-playground.ts +0 -82
- package/src/storage/_common/PromptbookStorage.test-type.ts +0 -14
- package/src/storage/local-storage/getIndexedDbStorage.ts +0 -36
- package/src/storage/local-storage/getLocalStorage.ts +0 -33
- package/src/storage/local-storage/getSessionStorage.ts +0 -33
- package/src/storage/local-storage/utils/IndexedDbStorageOptions.ts +0 -16
- package/src/storage/local-storage/utils/makePromptbookStorageFromIndexedDb.ts +0 -58
- package/src/storage/local-storage/utils/makePromptbookStorageFromWebStorage.ts +0 -45
- package/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.test.ts.todo +0 -35
- package/src/transpilers/openai-sdk/playground/playground.ts +0 -85
- package/src/transpilers/openai-sdk/playground/tmp/chatbot-openaisdk-1.js +0 -194
- package/src/transpilers/openai-sdk/playground/tmp/package.json +0 -3
- package/src/transpilers/openai-sdk/playground/tsconfig.json +0 -18
- package/src/utils/editable/utils/findUsableParameters.test.ts.todo +0 -43
- package/src/utils/editable/utils/stringifyPipelineJson.test.ts.todo +0 -38
- package/src/utils/markdown/prettifyMarkdown.test.ts.tmp +0 -42
- package/src/utils/serialization/serializeToPromptbookJavascript.test.ts.todo +0 -116
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
DownloadIcon,
|
|
5
|
+
FileTextIcon,
|
|
6
|
+
HashIcon,
|
|
7
|
+
ImageIcon,
|
|
8
|
+
ListIcon,
|
|
9
|
+
ShieldIcon,
|
|
10
|
+
ToggleLeftIcon,
|
|
11
|
+
TypeIcon,
|
|
12
|
+
UploadIcon,
|
|
13
|
+
} from 'lucide-react';
|
|
5
14
|
import Link from 'next/link';
|
|
6
15
|
import { Fragment, useEffect, useRef, useState } from 'react';
|
|
16
|
+
import { spaceTrim } from 'spacetrim';
|
|
7
17
|
import { showConfirm } from '../../../components/AsyncDialogs/asyncDialogs';
|
|
8
|
-
import {
|
|
18
|
+
import { useFileUploadAvailability } from '../../../components/FileUploadAvailability/FileUploadAvailabilityContext';
|
|
19
|
+
import {
|
|
20
|
+
getDeprecatedLimitMetadataDefinition,
|
|
21
|
+
type DeprecatedLimitMetadataDefinition,
|
|
22
|
+
} from '../../../constants/serverLimits';
|
|
23
|
+
import {
|
|
24
|
+
getMetadataDefinition,
|
|
25
|
+
metadataDefaults,
|
|
26
|
+
validateMetadataValue,
|
|
27
|
+
type MetadataDefinition,
|
|
28
|
+
} from '../../../database/metadataDefaults';
|
|
9
29
|
import { getSafeCdnPath } from '../../../utils/cdn/utils/getSafeCdnPath';
|
|
30
|
+
import { downloadBlob, parseFilenameFromContentDisposition } from '../../../utils/download/browserFileDownload';
|
|
10
31
|
import { normalizeUploadFilename } from '../../../utils/normalization/normalizeUploadFilename';
|
|
11
|
-
import {
|
|
32
|
+
import { buildDefaultUserFileUploadPath, uploadFileToServer } from '../../../utils/upload/uploadFileToServer';
|
|
12
33
|
|
|
13
34
|
/**
|
|
14
35
|
* Type describing metadata entry.
|
|
@@ -25,6 +46,103 @@ type MetadataEntry = {
|
|
|
25
46
|
deprecatedLimitMetadata?: DeprecatedLimitMetadataDefinition | null;
|
|
26
47
|
};
|
|
27
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Endpoint serving standalone metadata JSON exports.
|
|
51
|
+
*
|
|
52
|
+
* @private
|
|
53
|
+
*/
|
|
54
|
+
const METADATA_EXPORT_ENDPOINT = '/api/metadata/export';
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Endpoint accepting standalone metadata JSON imports.
|
|
58
|
+
*
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
const METADATA_IMPORT_ENDPOINT = '/api/metadata/import';
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Fallback filename used when the export route omits a `Content-Disposition` filename.
|
|
65
|
+
*
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
const DEFAULT_METADATA_EXPORT_FILENAME = 'promptbook-agents-server.metadata.json';
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Minimal API error payload returned by metadata transfer routes.
|
|
72
|
+
*
|
|
73
|
+
* @private
|
|
74
|
+
*/
|
|
75
|
+
type MetadataTransferErrorPayload = {
|
|
76
|
+
error?: string;
|
|
77
|
+
message?: string;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Import summary returned by the metadata import route.
|
|
82
|
+
*
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
85
|
+
type MetadataImportSummary = {
|
|
86
|
+
importedCount?: number;
|
|
87
|
+
resetCount?: number;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* One metadata entry from a standalone metadata import JSON file.
|
|
92
|
+
*
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
type MetadataImportEntry = {
|
|
96
|
+
/**
|
|
97
|
+
* Metadata key.
|
|
98
|
+
*/
|
|
99
|
+
readonly key: string;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Metadata value, omitted when the exported value matched the built-in default.
|
|
103
|
+
*/
|
|
104
|
+
readonly value?: string;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Metadata note, omitted when the exported note matched the built-in default.
|
|
108
|
+
*/
|
|
109
|
+
readonly note?: string | null;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Standalone metadata import payload parsed in the browser before upload.
|
|
114
|
+
*
|
|
115
|
+
* @private
|
|
116
|
+
*/
|
|
117
|
+
type MetadataImportPayload = {
|
|
118
|
+
/**
|
|
119
|
+
* Promptbook version that generated the import file.
|
|
120
|
+
*/
|
|
121
|
+
readonly promptbookVersion: string;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Metadata entries included in the import file.
|
|
125
|
+
*/
|
|
126
|
+
readonly metadata: ReadonlyArray<MetadataImportEntry>;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Result of browser-side metadata import parsing.
|
|
131
|
+
*
|
|
132
|
+
* @private
|
|
133
|
+
*/
|
|
134
|
+
type MetadataImportPayloadParseResult = {
|
|
135
|
+
/**
|
|
136
|
+
* Parsed payload when the import file is usable.
|
|
137
|
+
*/
|
|
138
|
+
readonly payload: MetadataImportPayload | null;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* User-facing error message when parsing failed.
|
|
142
|
+
*/
|
|
143
|
+
readonly errorMessage: string | null;
|
|
144
|
+
};
|
|
145
|
+
|
|
28
146
|
/**
|
|
29
147
|
* Shared class names for single-line metadata inputs.
|
|
30
148
|
*
|
|
@@ -40,6 +158,34 @@ const METADATA_INPUT_CLASS_NAME =
|
|
|
40
158
|
*/
|
|
41
159
|
const METADATA_TEXTAREA_CLASS_NAME = `${METADATA_INPUT_CLASS_NAME} min-h-[100px]`;
|
|
42
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Endpoint used by the interactive import flow after the admin selected individual entries.
|
|
163
|
+
*
|
|
164
|
+
* @private
|
|
165
|
+
*/
|
|
166
|
+
const METADATA_IMPORT_WITHOUT_DEFAULT_RESET_ENDPOINT = `${METADATA_IMPORT_ENDPOINT}?isDefaultResetSkipped=true`;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Maximum value preview length inside one metadata import choice dialog.
|
|
170
|
+
*
|
|
171
|
+
* @private
|
|
172
|
+
*/
|
|
173
|
+
const METADATA_IMPORT_VALUE_PREVIEW_MAX_LENGTH = 180;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Label used when a metadata value is intentionally empty.
|
|
177
|
+
*
|
|
178
|
+
* @private
|
|
179
|
+
*/
|
|
180
|
+
const METADATA_IMPORT_EMPTY_VALUE_LABEL = '(empty)';
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Label used when a metadata key is not currently persisted.
|
|
184
|
+
*
|
|
185
|
+
* @private
|
|
186
|
+
*/
|
|
187
|
+
const METADATA_IMPORT_MISSING_VALUE_LABEL = '(not set)';
|
|
188
|
+
|
|
43
189
|
/**
|
|
44
190
|
* Normalizes metadata keys so they are safe to use as HTML id suffixes.
|
|
45
191
|
*
|
|
@@ -69,6 +215,295 @@ const createEmptyFormState = (): MetadataFormState => ({
|
|
|
69
215
|
note: '',
|
|
70
216
|
});
|
|
71
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Reads a user-facing error message from a failed metadata transfer response.
|
|
220
|
+
*
|
|
221
|
+
* @param response - Failed HTTP response.
|
|
222
|
+
* @param fallbackMessage - Message used when the response body is not useful JSON.
|
|
223
|
+
* @returns Error message for the admin UI.
|
|
224
|
+
*
|
|
225
|
+
* @private
|
|
226
|
+
*/
|
|
227
|
+
async function resolveMetadataTransferErrorMessage(response: Response, fallbackMessage: string): Promise<string> {
|
|
228
|
+
try {
|
|
229
|
+
const payload = (await response.json()) as MetadataTransferErrorPayload;
|
|
230
|
+
const message = payload.message || payload.error;
|
|
231
|
+
|
|
232
|
+
if (message && message.trim().length > 0) {
|
|
233
|
+
return message.trim();
|
|
234
|
+
}
|
|
235
|
+
} catch {
|
|
236
|
+
// Keep fallback when the failed response is not JSON.
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return fallbackMessage;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Parses one metadata import JSON file for browser-side per-entry selection.
|
|
244
|
+
*
|
|
245
|
+
* @param fileContent - Raw JSON file content.
|
|
246
|
+
* @returns Parsed payload or user-facing error message.
|
|
247
|
+
*
|
|
248
|
+
* @private
|
|
249
|
+
*/
|
|
250
|
+
function parseMetadataImportPayloadForSelection(fileContent: string): MetadataImportPayloadParseResult {
|
|
251
|
+
try {
|
|
252
|
+
return normalizeMetadataImportPayloadForSelection(JSON.parse(fileContent));
|
|
253
|
+
} catch {
|
|
254
|
+
return {
|
|
255
|
+
payload: null,
|
|
256
|
+
errorMessage: 'Metadata import must be valid JSON.',
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Normalizes parsed metadata import JSON enough to ask the admin about each entry.
|
|
263
|
+
*
|
|
264
|
+
* @param payload - Parsed JSON import payload.
|
|
265
|
+
* @returns Parsed payload or user-facing error message.
|
|
266
|
+
*
|
|
267
|
+
* @private
|
|
268
|
+
*/
|
|
269
|
+
function normalizeMetadataImportPayloadForSelection(payload: unknown): MetadataImportPayloadParseResult {
|
|
270
|
+
if (!payload || typeof payload !== 'object') {
|
|
271
|
+
return {
|
|
272
|
+
payload: null,
|
|
273
|
+
errorMessage: 'Metadata import must be a JSON object.',
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const payloadRecord = payload as Record<string, unknown>;
|
|
278
|
+
|
|
279
|
+
if (typeof payloadRecord.promptbookVersion !== 'string' || payloadRecord.promptbookVersion.trim() === '') {
|
|
280
|
+
return {
|
|
281
|
+
payload: null,
|
|
282
|
+
errorMessage: 'Metadata import is missing `promptbookVersion`.',
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (!Array.isArray(payloadRecord.metadata)) {
|
|
287
|
+
return {
|
|
288
|
+
payload: null,
|
|
289
|
+
errorMessage: 'Metadata import must contain a `metadata` array.',
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const importedMetadataKeys = new Set<string>();
|
|
294
|
+
const metadataEntries: Array<MetadataImportEntry> = [];
|
|
295
|
+
|
|
296
|
+
for (const [index, rawMetadataEntry] of payloadRecord.metadata.entries()) {
|
|
297
|
+
const normalizedMetadataEntry = normalizeMetadataImportEntryForSelection(
|
|
298
|
+
rawMetadataEntry,
|
|
299
|
+
index,
|
|
300
|
+
importedMetadataKeys,
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
if (typeof normalizedMetadataEntry === 'string') {
|
|
304
|
+
return {
|
|
305
|
+
payload: null,
|
|
306
|
+
errorMessage: normalizedMetadataEntry,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
metadataEntries.push(normalizedMetadataEntry);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return {
|
|
314
|
+
payload: {
|
|
315
|
+
promptbookVersion: payloadRecord.promptbookVersion,
|
|
316
|
+
metadata: metadataEntries,
|
|
317
|
+
},
|
|
318
|
+
errorMessage: null,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Normalizes one metadata import entry for browser-side selection.
|
|
324
|
+
*
|
|
325
|
+
* @param rawMetadataEntry - Untrusted entry from the import JSON.
|
|
326
|
+
* @param index - Zero-based entry index for error messages.
|
|
327
|
+
* @param importedMetadataKeys - Mutable set used to reject duplicate keys.
|
|
328
|
+
* @returns Normalized entry or user-facing error message.
|
|
329
|
+
*
|
|
330
|
+
* @private
|
|
331
|
+
*/
|
|
332
|
+
function normalizeMetadataImportEntryForSelection(
|
|
333
|
+
rawMetadataEntry: unknown,
|
|
334
|
+
index: number,
|
|
335
|
+
importedMetadataKeys: Set<string>,
|
|
336
|
+
): MetadataImportEntry | string {
|
|
337
|
+
if (!rawMetadataEntry || typeof rawMetadataEntry !== 'object') {
|
|
338
|
+
return `Metadata entry #${index + 1} must be an object.`;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const rawMetadataEntryRecord = rawMetadataEntry as Record<string, unknown>;
|
|
342
|
+
const rawKey = rawMetadataEntryRecord.key;
|
|
343
|
+
if (typeof rawKey !== 'string' || rawKey.trim() === '') {
|
|
344
|
+
return `Metadata entry #${index + 1} is missing a non-empty \`key\`.`;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
const key = rawKey.trim();
|
|
348
|
+
const isDuplicateKey = importedMetadataKeys.has(key);
|
|
349
|
+
if (isDuplicateKey) {
|
|
350
|
+
return `Metadata import contains duplicate key \`${key}\`.`;
|
|
351
|
+
}
|
|
352
|
+
importedMetadataKeys.add(key);
|
|
353
|
+
|
|
354
|
+
const metadataDefinition = getMetadataDefinition(key);
|
|
355
|
+
const isValueProvided = Object.prototype.hasOwnProperty.call(rawMetadataEntryRecord, 'value');
|
|
356
|
+
const isNoteProvided = Object.prototype.hasOwnProperty.call(rawMetadataEntryRecord, 'note');
|
|
357
|
+
|
|
358
|
+
if (isValueProvided && typeof rawMetadataEntryRecord.value !== 'string') {
|
|
359
|
+
return `Metadata entry \`${key}\` has invalid \`value\`; expected a string.`;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
if (isNoteProvided && typeof rawMetadataEntryRecord.note !== 'string' && rawMetadataEntryRecord.note !== null) {
|
|
363
|
+
return `Metadata entry \`${key}\` has invalid \`note\`; expected a string or null.`;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (!isValueProvided && !metadataDefinition) {
|
|
367
|
+
return spaceTrim(`
|
|
368
|
+
Metadata entry \`${key}\` is missing \`value\`.
|
|
369
|
+
|
|
370
|
+
Only built-in metadata keys can omit default values.
|
|
371
|
+
`);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
const value = isValueProvided ? (rawMetadataEntryRecord.value as string) : metadataDefinition!.value;
|
|
375
|
+
const validationError = validateMetadataValue(key, value);
|
|
376
|
+
|
|
377
|
+
if (validationError) {
|
|
378
|
+
return validationError;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const metadataEntry: MetadataImportEntry = {
|
|
382
|
+
key,
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
if (isValueProvided) {
|
|
386
|
+
(metadataEntry as { value: string }).value = rawMetadataEntryRecord.value as string;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (isNoteProvided) {
|
|
390
|
+
(metadataEntry as { note: string | null }).note = rawMetadataEntryRecord.note as string | null;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return metadataEntry;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Resolves the effective imported metadata value after omitted built-in defaults are applied.
|
|
398
|
+
*
|
|
399
|
+
* @param importEntry - Metadata import entry.
|
|
400
|
+
* @returns Effective imported value.
|
|
401
|
+
*
|
|
402
|
+
* @private
|
|
403
|
+
*/
|
|
404
|
+
function resolveImportedMetadataValue(importEntry: MetadataImportEntry): string {
|
|
405
|
+
const isValueProvided = Object.prototype.hasOwnProperty.call(importEntry, 'value');
|
|
406
|
+
|
|
407
|
+
if (isValueProvided) {
|
|
408
|
+
return importEntry.value!;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
return getMetadataDefinition(importEntry.key)?.value ?? '';
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Resolves the effective imported metadata note after omitted built-in defaults are applied.
|
|
416
|
+
*
|
|
417
|
+
* @param importEntry - Metadata import entry.
|
|
418
|
+
* @returns Effective imported note.
|
|
419
|
+
*
|
|
420
|
+
* @private
|
|
421
|
+
*/
|
|
422
|
+
function resolveImportedMetadataNote(importEntry: MetadataImportEntry): string | null {
|
|
423
|
+
const isNoteProvided = Object.prototype.hasOwnProperty.call(importEntry, 'note');
|
|
424
|
+
|
|
425
|
+
if (isNoteProvided) {
|
|
426
|
+
return importEntry.note!;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
return getMetadataDefinition(importEntry.key)?.note ?? null;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Formats one metadata value for compact import choice dialogs.
|
|
434
|
+
*
|
|
435
|
+
* @param value - Raw value or note.
|
|
436
|
+
* @returns Single-line preview for the dialog body.
|
|
437
|
+
*
|
|
438
|
+
* @private
|
|
439
|
+
*/
|
|
440
|
+
function formatMetadataImportDialogValue(value: string | null | undefined): string {
|
|
441
|
+
if (value === null || value === undefined) {
|
|
442
|
+
return METADATA_IMPORT_EMPTY_VALUE_LABEL;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
const normalizedValue = value.replace(/\s+/g, ' ').trim();
|
|
446
|
+
|
|
447
|
+
if (normalizedValue === '') {
|
|
448
|
+
return METADATA_IMPORT_EMPTY_VALUE_LABEL;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
if (normalizedValue.length <= METADATA_IMPORT_VALUE_PREVIEW_MAX_LENGTH) {
|
|
452
|
+
return normalizedValue;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return `${normalizedValue.slice(0, METADATA_IMPORT_VALUE_PREVIEW_MAX_LENGTH)}...`;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Asks the admin which imported metadata entries should replace current values.
|
|
460
|
+
*
|
|
461
|
+
* @param importPayload - Parsed metadata import payload.
|
|
462
|
+
* @param currentMetadataEntries - Metadata entries currently displayed in the admin table.
|
|
463
|
+
* @returns Filtered import payload containing only selected entries.
|
|
464
|
+
*
|
|
465
|
+
* @private
|
|
466
|
+
*/
|
|
467
|
+
async function createSelectedMetadataImportPayload(
|
|
468
|
+
importPayload: MetadataImportPayload,
|
|
469
|
+
currentMetadataEntries: ReadonlyArray<MetadataEntry>,
|
|
470
|
+
): Promise<MetadataImportPayload> {
|
|
471
|
+
const currentMetadataByKey = new Map<string, MetadataEntry>(
|
|
472
|
+
currentMetadataEntries.map((metadataEntry) => [metadataEntry.key, metadataEntry]),
|
|
473
|
+
);
|
|
474
|
+
const selectedMetadataEntries: Array<MetadataImportEntry> = [];
|
|
475
|
+
|
|
476
|
+
for (const importEntry of importPayload.metadata) {
|
|
477
|
+
const currentMetadataEntry = currentMetadataByKey.get(importEntry.key);
|
|
478
|
+
const currentValue = currentMetadataEntry?.value ?? METADATA_IMPORT_MISSING_VALUE_LABEL;
|
|
479
|
+
const currentNote = currentMetadataEntry?.note ?? null;
|
|
480
|
+
const importedValue = resolveImportedMetadataValue(importEntry);
|
|
481
|
+
const importedNote = resolveImportedMetadataNote(importEntry);
|
|
482
|
+
const isImportedSelected = await showConfirm({
|
|
483
|
+
title: `Import ${importEntry.key}`,
|
|
484
|
+
message: spaceTrim(`
|
|
485
|
+
Choose metadata for \`${importEntry.key}\`.
|
|
486
|
+
|
|
487
|
+
Current value: ${formatMetadataImportDialogValue(currentValue)}
|
|
488
|
+
Imported value: ${formatMetadataImportDialogValue(importedValue)}
|
|
489
|
+
Current note: ${formatMetadataImportDialogValue(currentNote)}
|
|
490
|
+
Imported note: ${formatMetadataImportDialogValue(importedNote)}
|
|
491
|
+
`),
|
|
492
|
+
confirmLabel: 'Use imported',
|
|
493
|
+
cancelLabel: 'Keep current',
|
|
494
|
+
}).catch(() => false);
|
|
495
|
+
|
|
496
|
+
if (isImportedSelected) {
|
|
497
|
+
selectedMetadataEntries.push(importEntry);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
return {
|
|
502
|
+
promptbookVersion: importPayload.promptbookVersion,
|
|
503
|
+
metadata: selectedMetadataEntries,
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
|
|
72
507
|
/**
|
|
73
508
|
* Validates whether the provided string is an IPv4, IPv6, or CIDR range.
|
|
74
509
|
*
|
|
@@ -99,6 +534,8 @@ type MetadataValueFieldProps = {
|
|
|
99
534
|
value: string;
|
|
100
535
|
onValueChange: (value: string) => void;
|
|
101
536
|
isUploading: boolean;
|
|
537
|
+
isUploadAvailable: boolean;
|
|
538
|
+
uploadUnavailableMessage: string | null;
|
|
102
539
|
fileInputRef: React.RefObject<HTMLInputElement | null>;
|
|
103
540
|
onFileUpload: (event: React.ChangeEvent<HTMLInputElement>) => Promise<void> | void;
|
|
104
541
|
fieldId: string;
|
|
@@ -117,6 +554,8 @@ const MetadataValueField = ({
|
|
|
117
554
|
value,
|
|
118
555
|
onValueChange,
|
|
119
556
|
isUploading,
|
|
557
|
+
isUploadAvailable,
|
|
558
|
+
uploadUnavailableMessage,
|
|
120
559
|
fileInputRef,
|
|
121
560
|
onFileUpload,
|
|
122
561
|
fieldId,
|
|
@@ -166,17 +605,27 @@ const MetadataValueField = ({
|
|
|
166
605
|
className={METADATA_INPUT_CLASS_NAME}
|
|
167
606
|
placeholder="Image URL..."
|
|
168
607
|
/>
|
|
169
|
-
<input
|
|
608
|
+
<input
|
|
609
|
+
type="file"
|
|
610
|
+
accept="image/*"
|
|
611
|
+
className="hidden"
|
|
612
|
+
ref={fileInputRef}
|
|
613
|
+
onChange={onFileUpload}
|
|
614
|
+
disabled={!isUploadAvailable}
|
|
615
|
+
/>
|
|
170
616
|
<button
|
|
171
617
|
type="button"
|
|
172
618
|
onClick={() => fileInputRef.current?.click()}
|
|
173
|
-
disabled={isUploading}
|
|
619
|
+
disabled={isUploading || !isUploadAvailable}
|
|
174
620
|
className="bg-gray-100 text-gray-700 px-3 py-2 rounded-md border border-gray-300 hover:bg-gray-200 flex items-center space-x-2 min-w-max"
|
|
175
621
|
>
|
|
176
|
-
<
|
|
622
|
+
<UploadIcon className="w-4 h-4" />
|
|
177
623
|
<span>{isUploading ? 'Uploading...' : 'Upload Image'}</span>
|
|
178
624
|
</button>
|
|
179
625
|
</div>
|
|
626
|
+
{!isUploadAvailable && uploadUnavailableMessage && (
|
|
627
|
+
<p className="text-sm text-amber-700">{uploadUnavailableMessage}</p>
|
|
628
|
+
)}
|
|
180
629
|
{value && (
|
|
181
630
|
<div className="mt-2 p-2 border border-gray-200 rounded-md bg-gray-50 inline-block">
|
|
182
631
|
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
@@ -289,16 +738,16 @@ function mergeMetadataWithDefaults(data: MetadataEntry[]): MetadataEntry[] {
|
|
|
289
738
|
|
|
290
739
|
// First prefer existing (non-default) metadata coming from the database
|
|
291
740
|
for (const entry of data) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
741
|
+
const existing = byKey.get(entry.key);
|
|
742
|
+
if (!existing || existing.isDefault) {
|
|
743
|
+
const definition = getMetadataDefinition(entry.key);
|
|
744
|
+
byKey.set(entry.key, {
|
|
745
|
+
...entry,
|
|
746
|
+
definition,
|
|
747
|
+
deprecatedLimitMetadata: getDeprecatedLimitMetadataDefinition(entry.key),
|
|
748
|
+
});
|
|
301
749
|
}
|
|
750
|
+
}
|
|
302
751
|
|
|
303
752
|
// Then add defaults only for keys that are missing
|
|
304
753
|
for (const def of metadataDefaults) {
|
|
@@ -326,16 +775,22 @@ function mergeMetadataWithDefaults(data: MetadataEntry[]): MetadataEntry[] {
|
|
|
326
775
|
* @private @@@
|
|
327
776
|
*/
|
|
328
777
|
export function MetadataClient() {
|
|
778
|
+
const fileUploadAvailability = useFileUploadAvailability();
|
|
329
779
|
const [metadata, setMetadata] = useState<MetadataEntry[]>([]);
|
|
330
780
|
const [loading, setLoading] = useState(true);
|
|
331
781
|
const [error, setError] = useState<string | null>(null);
|
|
782
|
+
const [successMessage, setSuccessMessage] = useState<string | null>(null);
|
|
332
783
|
const [editingKey, setEditingKey] = useState<string | null>(null);
|
|
333
784
|
const [isAddUploading, setIsAddUploading] = useState(false);
|
|
334
785
|
const [isEditUploading, setIsEditUploading] = useState(false);
|
|
786
|
+
const [isExportingMetadata, setIsExportingMetadata] = useState(false);
|
|
787
|
+
const [isImportingMetadata, setIsImportingMetadata] = useState(false);
|
|
335
788
|
const addFileInputRef = useRef<HTMLInputElement | null>(null);
|
|
336
789
|
const editFileInputRef = useRef<HTMLInputElement | null>(null);
|
|
790
|
+
const importFileInputRef = useRef<HTMLInputElement | null>(null);
|
|
337
791
|
const [addFormState, setAddFormState] = useState<MetadataFormState>(createEmptyFormState);
|
|
338
792
|
const [editingFormState, setEditingFormState] = useState<MetadataFormState>(createEmptyFormState);
|
|
793
|
+
const isMetadataTransferBusy = isExportingMetadata || isImportingMetadata;
|
|
339
794
|
|
|
340
795
|
const fetchMetadata = async () => {
|
|
341
796
|
try {
|
|
@@ -349,8 +804,8 @@ export function MetadataClient() {
|
|
|
349
804
|
const mergedData = mergeMetadataWithDefaults(data);
|
|
350
805
|
|
|
351
806
|
setMetadata(mergedData);
|
|
352
|
-
} catch (
|
|
353
|
-
setError(
|
|
807
|
+
} catch (error) {
|
|
808
|
+
setError(error instanceof Error ? error.message : 'An error occurred');
|
|
354
809
|
} finally {
|
|
355
810
|
setLoading(false);
|
|
356
811
|
}
|
|
@@ -378,16 +833,126 @@ export function MetadataClient() {
|
|
|
378
833
|
}
|
|
379
834
|
};
|
|
380
835
|
|
|
836
|
+
/**
|
|
837
|
+
* Downloads the current metadata configuration as standalone JSON.
|
|
838
|
+
*
|
|
839
|
+
* @private
|
|
840
|
+
*/
|
|
841
|
+
const handleExportMetadata = async () => {
|
|
842
|
+
if (isMetadataTransferBusy) {
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
setError(null);
|
|
847
|
+
setSuccessMessage(null);
|
|
848
|
+
setIsExportingMetadata(true);
|
|
849
|
+
|
|
850
|
+
try {
|
|
851
|
+
const response = await fetch(METADATA_EXPORT_ENDPOINT, { method: 'GET' });
|
|
852
|
+
|
|
853
|
+
if (!response.ok) {
|
|
854
|
+
setError(await resolveMetadataTransferErrorMessage(response, 'Failed to export metadata.'));
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
const filename =
|
|
859
|
+
parseFilenameFromContentDisposition(response.headers.get('Content-Disposition')) ||
|
|
860
|
+
DEFAULT_METADATA_EXPORT_FILENAME;
|
|
861
|
+
|
|
862
|
+
downloadBlob(await response.blob(), filename);
|
|
863
|
+
setSuccessMessage('Metadata export downloaded.');
|
|
864
|
+
} catch (error) {
|
|
865
|
+
setError(error instanceof Error ? error.message : 'Metadata export failed.');
|
|
866
|
+
} finally {
|
|
867
|
+
setIsExportingMetadata(false);
|
|
868
|
+
}
|
|
869
|
+
};
|
|
870
|
+
|
|
871
|
+
/**
|
|
872
|
+
* Opens the native file picker for metadata imports.
|
|
873
|
+
*
|
|
874
|
+
* @private
|
|
875
|
+
*/
|
|
876
|
+
const handleImportMetadataClick = () => {
|
|
877
|
+
if (isMetadataTransferBusy) {
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
importFileInputRef.current?.click();
|
|
882
|
+
};
|
|
883
|
+
|
|
884
|
+
/**
|
|
885
|
+
* Imports selected standalone metadata JSON and refreshes the table.
|
|
886
|
+
*
|
|
887
|
+
* @private
|
|
888
|
+
*/
|
|
889
|
+
const handleImportMetadataFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
890
|
+
const file = event.target.files?.[0];
|
|
891
|
+
if (!file || isMetadataTransferBusy) {
|
|
892
|
+
return;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
setError(null);
|
|
896
|
+
setSuccessMessage(null);
|
|
897
|
+
setIsImportingMetadata(true);
|
|
898
|
+
|
|
899
|
+
try {
|
|
900
|
+
const parsedImportPayload = parseMetadataImportPayloadForSelection(await file.text());
|
|
901
|
+
|
|
902
|
+
if (parsedImportPayload.errorMessage || !parsedImportPayload.payload) {
|
|
903
|
+
setError(parsedImportPayload.errorMessage || 'Metadata import failed.');
|
|
904
|
+
return;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
const selectedImportPayload = await createSelectedMetadataImportPayload(
|
|
908
|
+
parsedImportPayload.payload,
|
|
909
|
+
metadata,
|
|
910
|
+
);
|
|
911
|
+
|
|
912
|
+
if (selectedImportPayload.metadata.length === 0) {
|
|
913
|
+
setSuccessMessage('Metadata import skipped; all imported entries kept current.');
|
|
914
|
+
return;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
const response = await fetch(METADATA_IMPORT_WITHOUT_DEFAULT_RESET_ENDPOINT, {
|
|
918
|
+
method: 'POST',
|
|
919
|
+
headers: { 'Content-Type': 'application/json' },
|
|
920
|
+
body: JSON.stringify(selectedImportPayload),
|
|
921
|
+
});
|
|
922
|
+
|
|
923
|
+
if (!response.ok) {
|
|
924
|
+
setError(await resolveMetadataTransferErrorMessage(response, 'Failed to import metadata.'));
|
|
925
|
+
return;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
const importSummary = (await response.json()) as MetadataImportSummary;
|
|
929
|
+
await fetchMetadata();
|
|
930
|
+
setSuccessMessage(
|
|
931
|
+
`Imported ${importSummary.importedCount ?? 0} metadata entries and reset ${
|
|
932
|
+
importSummary.resetCount ?? 0
|
|
933
|
+
} built-in defaults.`,
|
|
934
|
+
);
|
|
935
|
+
} catch (error) {
|
|
936
|
+
setError(error instanceof Error ? error.message : 'Metadata import failed.');
|
|
937
|
+
} finally {
|
|
938
|
+
setIsImportingMetadata(false);
|
|
939
|
+
if (importFileInputRef.current) {
|
|
940
|
+
importFileInputRef.current.value = '';
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
};
|
|
944
|
+
|
|
381
945
|
const handleAddSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
|
|
382
946
|
e.preventDefault();
|
|
383
947
|
setError(null);
|
|
948
|
+
setSuccessMessage(null);
|
|
384
949
|
|
|
385
950
|
try {
|
|
386
951
|
await saveMetadata('POST', addFormState);
|
|
387
952
|
setAddFormState(createEmptyFormState());
|
|
388
953
|
fetchMetadata();
|
|
389
|
-
} catch (
|
|
390
|
-
setError(
|
|
954
|
+
} catch (error) {
|
|
955
|
+
setError(error instanceof Error ? error.message : 'An error occurred');
|
|
391
956
|
}
|
|
392
957
|
};
|
|
393
958
|
|
|
@@ -395,6 +960,7 @@ export function MetadataClient() {
|
|
|
395
960
|
e.preventDefault();
|
|
396
961
|
if (editingKey === null) return;
|
|
397
962
|
setError(null);
|
|
963
|
+
setSuccessMessage(null);
|
|
398
964
|
|
|
399
965
|
try {
|
|
400
966
|
const isPersistedEntry = metadata.some((entry) => entry.key === editingKey && !entry.isDefault);
|
|
@@ -402,8 +968,8 @@ export function MetadataClient() {
|
|
|
402
968
|
await saveMetadata(method, editingFormState);
|
|
403
969
|
handleCancel();
|
|
404
970
|
fetchMetadata();
|
|
405
|
-
} catch (
|
|
406
|
-
setError(
|
|
971
|
+
} catch (error) {
|
|
972
|
+
setError(error instanceof Error ? error.message : 'An error occurred');
|
|
407
973
|
}
|
|
408
974
|
};
|
|
409
975
|
|
|
@@ -417,15 +983,16 @@ export function MetadataClient() {
|
|
|
417
983
|
};
|
|
418
984
|
|
|
419
985
|
const handleDelete = async (key: string) => {
|
|
420
|
-
const
|
|
986
|
+
const isConfirmed = await showConfirm({
|
|
421
987
|
title: 'Delete metadata',
|
|
422
988
|
message: 'Are you sure you want to delete this metadata?',
|
|
423
989
|
confirmLabel: 'Delete metadata',
|
|
424
990
|
cancelLabel: 'Cancel',
|
|
425
991
|
}).catch(() => false);
|
|
426
|
-
if (!
|
|
992
|
+
if (!isConfirmed) return;
|
|
427
993
|
|
|
428
994
|
try {
|
|
995
|
+
setSuccessMessage(null);
|
|
429
996
|
const response = await fetch(`/api/metadata?key=${encodeURIComponent(key)}`, {
|
|
430
997
|
method: 'DELETE',
|
|
431
998
|
});
|
|
@@ -436,8 +1003,8 @@ export function MetadataClient() {
|
|
|
436
1003
|
}
|
|
437
1004
|
|
|
438
1005
|
fetchMetadata();
|
|
439
|
-
} catch (
|
|
440
|
-
setError(
|
|
1006
|
+
} catch (error) {
|
|
1007
|
+
setError(error instanceof Error ? error.message : 'An error occurred');
|
|
441
1008
|
}
|
|
442
1009
|
};
|
|
443
1010
|
|
|
@@ -470,7 +1037,6 @@ export function MetadataClient() {
|
|
|
470
1037
|
}
|
|
471
1038
|
};
|
|
472
1039
|
|
|
473
|
-
|
|
474
1040
|
/**
|
|
475
1041
|
* Parameters required to upload an image and store the resulting URL in a metadata form.
|
|
476
1042
|
*
|
|
@@ -499,26 +1065,32 @@ export function MetadataClient() {
|
|
|
499
1065
|
const file = event.target.files?.[0];
|
|
500
1066
|
if (!file) return;
|
|
501
1067
|
|
|
1068
|
+
if (!fileUploadAvailability.isUploadAvailable) {
|
|
1069
|
+
setError(fileUploadAvailability.message || 'File uploads are not available for this server.');
|
|
1070
|
+
if (fileInputRef.current) {
|
|
1071
|
+
fileInputRef.current.value = '';
|
|
1072
|
+
}
|
|
1073
|
+
return;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
502
1076
|
try {
|
|
503
1077
|
setUploading(true);
|
|
504
1078
|
|
|
505
|
-
const pathPrefix = process.env.NEXT_PUBLIC_CDN_PATH_PREFIX || '';
|
|
506
1079
|
const normalizedFilename = normalizeUploadFilename(file.name);
|
|
507
|
-
const uploadPath =
|
|
508
|
-
|
|
509
|
-
:
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
const blob = await upload(safeUploadPath, file, {
|
|
513
|
-
access: 'public',
|
|
514
|
-
handleUploadUrl: '/api/upload',
|
|
515
|
-
clientPayload: JSON.stringify({
|
|
516
|
-
purpose: formState.key || 'METADATA_IMAGE',
|
|
517
|
-
contentType: file.type,
|
|
518
|
-
}),
|
|
1080
|
+
const uploadPath = buildDefaultUserFileUploadPath(normalizedFilename);
|
|
1081
|
+
const safeUploadPath = getSafeCdnPath({
|
|
1082
|
+
pathname: uploadPath,
|
|
1083
|
+
pathPrefix: process.env.NEXT_PUBLIC_CDN_PATH_PREFIX,
|
|
519
1084
|
});
|
|
520
1085
|
|
|
521
|
-
const
|
|
1086
|
+
const uploadResult = await uploadFileToServer({
|
|
1087
|
+
file,
|
|
1088
|
+
pathname: safeUploadPath,
|
|
1089
|
+
purpose: formState.key || 'METADATA_IMAGE',
|
|
1090
|
+
contentType: file.type,
|
|
1091
|
+
});
|
|
1092
|
+
|
|
1093
|
+
const fileUrl = uploadResult.url;
|
|
522
1094
|
|
|
523
1095
|
const LONG_URL = `${process.env.NEXT_PUBLIC_CDN_PUBLIC_URL!}/${process.env
|
|
524
1096
|
.NEXT_PUBLIC_CDN_PATH_PREFIX!}/user/files/`;
|
|
@@ -527,8 +1099,8 @@ export function MetadataClient() {
|
|
|
527
1099
|
|
|
528
1100
|
const shortFileUrl = fileUrl.split(LONG_URL).join(SHORT_URL);
|
|
529
1101
|
setFormState((prev) => ({ ...prev, value: shortFileUrl }));
|
|
530
|
-
} catch (
|
|
531
|
-
setError(
|
|
1102
|
+
} catch (error) {
|
|
1103
|
+
setError(error instanceof Error ? error.message : 'Failed to upload image');
|
|
532
1104
|
} finally {
|
|
533
1105
|
setUploading(false);
|
|
534
1106
|
if (fileInputRef.current) {
|
|
@@ -564,6 +1136,47 @@ export function MetadataClient() {
|
|
|
564
1136
|
{error && (
|
|
565
1137
|
<div className="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded mb-6">{error}</div>
|
|
566
1138
|
)}
|
|
1139
|
+
{successMessage && (
|
|
1140
|
+
<div className="bg-green-100 border border-green-300 text-green-800 px-4 py-3 rounded mb-6">
|
|
1141
|
+
{successMessage}
|
|
1142
|
+
</div>
|
|
1143
|
+
)}
|
|
1144
|
+
|
|
1145
|
+
<div className="bg-white shadow rounded-lg p-6">
|
|
1146
|
+
<div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
|
1147
|
+
<div>
|
|
1148
|
+
<h2 className="text-xl font-semibold">Import / Export Metadata</h2>
|
|
1149
|
+
</div>
|
|
1150
|
+
<div className="flex flex-wrap gap-3">
|
|
1151
|
+
<button
|
|
1152
|
+
type="button"
|
|
1153
|
+
onClick={() => void handleExportMetadata()}
|
|
1154
|
+
disabled={isMetadataTransferBusy}
|
|
1155
|
+
className="inline-flex items-center gap-2 rounded-md bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-60"
|
|
1156
|
+
>
|
|
1157
|
+
<DownloadIcon className="h-4 w-4" />
|
|
1158
|
+
<span>{isExportingMetadata ? 'Exporting...' : 'Export Metadata'}</span>
|
|
1159
|
+
</button>
|
|
1160
|
+
<input
|
|
1161
|
+
type="file"
|
|
1162
|
+
accept="application/json,.json"
|
|
1163
|
+
className="hidden"
|
|
1164
|
+
ref={importFileInputRef}
|
|
1165
|
+
onChange={(event) => void handleImportMetadataFileChange(event)}
|
|
1166
|
+
disabled={isMetadataTransferBusy}
|
|
1167
|
+
/>
|
|
1168
|
+
<button
|
|
1169
|
+
type="button"
|
|
1170
|
+
onClick={handleImportMetadataClick}
|
|
1171
|
+
disabled={isMetadataTransferBusy}
|
|
1172
|
+
className="inline-flex items-center gap-2 rounded-md border border-gray-300 bg-gray-100 px-4 py-2 text-sm font-medium text-gray-800 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-60"
|
|
1173
|
+
>
|
|
1174
|
+
<UploadIcon className="h-4 w-4" />
|
|
1175
|
+
<span>{isImportingMetadata ? 'Importing...' : 'Import Metadata'}</span>
|
|
1176
|
+
</button>
|
|
1177
|
+
</div>
|
|
1178
|
+
</div>
|
|
1179
|
+
</div>
|
|
567
1180
|
|
|
568
1181
|
<div className="rounded-2xl border border-amber-200 bg-amber-50 px-4 py-4 text-sm text-amber-800">
|
|
569
1182
|
Deprecated limit-backed metadata stays visible here for backward compatibility. Update operational
|
|
@@ -601,6 +1214,8 @@ export function MetadataClient() {
|
|
|
601
1214
|
value={addFormState.value}
|
|
602
1215
|
onValueChange={(value) => setAddFormState((prev) => ({ ...prev, value }))}
|
|
603
1216
|
isUploading={isAddUploading}
|
|
1217
|
+
isUploadAvailable={fileUploadAvailability.isUploadAvailable}
|
|
1218
|
+
uploadUnavailableMessage={fileUploadAvailability.message}
|
|
604
1219
|
fileInputRef={addFileInputRef}
|
|
605
1220
|
onFileUpload={handleAddFileUpload}
|
|
606
1221
|
/>
|
|
@@ -762,13 +1377,24 @@ export function MetadataClient() {
|
|
|
762
1377
|
Value
|
|
763
1378
|
</label>
|
|
764
1379
|
<MetadataValueField
|
|
765
|
-
definition={getMetadataDefinition(
|
|
1380
|
+
definition={getMetadataDefinition(
|
|
1381
|
+
editingFormState.key,
|
|
1382
|
+
)}
|
|
766
1383
|
fieldId={editValueFieldId}
|
|
767
1384
|
value={editingFormState.value}
|
|
768
1385
|
onValueChange={(value) =>
|
|
769
|
-
setEditingFormState((prev) => ({
|
|
1386
|
+
setEditingFormState((prev) => ({
|
|
1387
|
+
...prev,
|
|
1388
|
+
value,
|
|
1389
|
+
}))
|
|
770
1390
|
}
|
|
771
1391
|
isUploading={isEditUploading}
|
|
1392
|
+
isUploadAvailable={
|
|
1393
|
+
fileUploadAvailability.isUploadAvailable
|
|
1394
|
+
}
|
|
1395
|
+
uploadUnavailableMessage={
|
|
1396
|
+
fileUploadAvailability.message
|
|
1397
|
+
}
|
|
772
1398
|
fileInputRef={editFileInputRef}
|
|
773
1399
|
onFileUpload={handleEditFileUpload}
|
|
774
1400
|
/>
|