@promptbook/cli 0.112.0-99 → 0.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -21
- package/agents/default/developer.book +23 -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 +20 -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 +608 -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/agents/[agentName]/route.ts +33 -9
- 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 +4 -0
- 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/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/AgentsList.tsx +19 -1
- package/apps/agents-server/src/components/Homepage/AgentsListHeader.tsx +44 -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/useAgentsListImportExportState.ts +525 -0
- package/apps/agents-server/src/components/Homepage/useAgentsListState.ts +14 -0
- 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 +22 -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 +236 -0
- package/apps/agents-server/src/database/seedDefaultAgents.ts +225 -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/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/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/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 +22 -7
- 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/processLocalUserChatJob.ts +23 -8
- 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 +26 -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 +8 -88
- 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 +99 -0
- package/apps/agents-server/src/utils/userChat/createUserChatRunnerProgressCard.ts +63 -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 +0 -1
- package/apps/agents-server/src/utils/userChat/userChatProgressCard.ts +366 -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 +816 -59
- package/esm/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
- package/esm/apps/agents-server/src/constants/serverLimits.d.ts +207 -0
- package/esm/apps/agents-server/src/constants/toolUsageLimits.d.ts +55 -0
- package/esm/index.es.js +23985 -18820
- 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/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 +0 -2
- package/esm/src/_packages/node.index.d.ts +40 -0
- package/esm/src/_packages/types.index.d.ts +18 -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-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 +1 -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 +17 -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/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +22 -0
- package/esm/src/commitments/_common/teamInternalAgentAccess.d.ts +9 -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 +0 -2
- package/src/_packages/node.index.ts +40 -0
- package/src/_packages/types.index.ts +18 -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/createAgentModelRequirementsWithCommitments/augmentAgentModelRequirementsFromSource.ts +18 -2
- 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 +78 -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 +55 -89
- 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 +188 -24
- 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 +250 -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 +78 -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/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.ts +91 -14
- 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/TEAM/TEAM.ts +12 -1
- package/src/commitments/USE_PROJECT/createUseProjectToolFunctions.ts +8 -1
- package/src/commitments/_common/teamInternalAgentAccess.ts +14 -8
- 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 +741 -788
- 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 +32 -0
- package/umd/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
- package/umd/apps/agents-server/src/constants/serverLimits.d.ts +207 -0
- package/umd/apps/agents-server/src/constants/toolUsageLimits.d.ts +55 -0
- package/umd/index.umd.js +23723 -18556
- 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/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 +0 -2
- package/umd/src/_packages/node.index.d.ts +40 -0
- package/umd/src/_packages/types.index.d.ts +18 -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-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 +1 -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 +17 -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/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +22 -0
- package/umd/src/commitments/_common/teamInternalAgentAccess.d.ts +9 -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
|
@@ -0,0 +1,852 @@
|
|
|
1
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
+
import { DatabaseError, ParseError, UnexpectedError } from '@promptbook-local/core';
|
|
3
|
+
import type { string_book } from '@promptbook-local/types';
|
|
4
|
+
import JSZip from 'jszip';
|
|
5
|
+
import { spaceTrim } from 'spacetrim';
|
|
6
|
+
import { prepareAgentSourceForPersistence } from '../../../../../src/collection/agent-collection/constructors/agent-collection-in-supabase/prepareAgentSourceForPersistence';
|
|
7
|
+
import { $getTableName } from '../../database/$getTableName';
|
|
8
|
+
import { $provideSupabaseForServer } from '../../database/$provideSupabaseForServer';
|
|
9
|
+
import type { AgentsServerDatabase } from '../../database/schema';
|
|
10
|
+
import { $provideAgentCollectionForServer } from '../../tools/$provideAgentCollectionForServer';
|
|
11
|
+
import { invalidateCachedActiveOrganizationSnapshots } from '../agentOrganization/loadAgentOrganizationState';
|
|
12
|
+
import { resolveCurrentUserIdentity } from '../currentUserIdentity';
|
|
13
|
+
import { createAgentWithDefaultVisibility } from '../createAgentWithDefaultVisibility';
|
|
14
|
+
import { getNextOwnedAgentSortOrder } from '../managementApi/managementApiAgents';
|
|
15
|
+
import { getNextOwnedFolderSortOrder } from '../managementApi/managementApiFolders';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Supported duplicate-conflict import behavior.
|
|
19
|
+
*/
|
|
20
|
+
export type AgentsImportConflictResolution = 'ASK' | 'SKIP' | 'DUPLICATE';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Binary file uploaded by the agents import route.
|
|
24
|
+
*/
|
|
25
|
+
export type AgentsImportFile = {
|
|
26
|
+
/**
|
|
27
|
+
* Original browser-provided filename.
|
|
28
|
+
*/
|
|
29
|
+
readonly name: string;
|
|
30
|
+
/**
|
|
31
|
+
* Full file content.
|
|
32
|
+
*/
|
|
33
|
+
readonly content: ArrayBuffer | Uint8Array;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Warning discovered while parsing dropped import files.
|
|
38
|
+
*/
|
|
39
|
+
export type AgentsImportWarning = {
|
|
40
|
+
/**
|
|
41
|
+
* Path of the ignored or suspicious file.
|
|
42
|
+
*/
|
|
43
|
+
readonly path: string;
|
|
44
|
+
/**
|
|
45
|
+
* Human-readable warning message.
|
|
46
|
+
*/
|
|
47
|
+
readonly message: string;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Duplicate book conflict that needs a user decision.
|
|
52
|
+
*/
|
|
53
|
+
export type AgentsImportConflict = {
|
|
54
|
+
/**
|
|
55
|
+
* Agent name parsed from the imported book.
|
|
56
|
+
*/
|
|
57
|
+
readonly agentName: string;
|
|
58
|
+
/**
|
|
59
|
+
* Source file path that contains the conflicting book.
|
|
60
|
+
*/
|
|
61
|
+
readonly path: string;
|
|
62
|
+
/**
|
|
63
|
+
* Number of existing agents with the same name and different source.
|
|
64
|
+
*/
|
|
65
|
+
readonly existingDifferentBookCount: number;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Result returned after analyzing or applying an agents import.
|
|
70
|
+
*/
|
|
71
|
+
export type AgentsImportResult = {
|
|
72
|
+
/**
|
|
73
|
+
* Number of newly created agents.
|
|
74
|
+
*/
|
|
75
|
+
readonly importedCount: number;
|
|
76
|
+
/**
|
|
77
|
+
* Number of book entries skipped because they were already present or explicitly skipped.
|
|
78
|
+
*/
|
|
79
|
+
readonly skippedCount: number;
|
|
80
|
+
/**
|
|
81
|
+
* Number of non-book files ignored from uploads and ZIP archives.
|
|
82
|
+
*/
|
|
83
|
+
readonly ignoredFileCount: number;
|
|
84
|
+
/**
|
|
85
|
+
* Warnings produced while reading uploaded files.
|
|
86
|
+
*/
|
|
87
|
+
readonly warnings: ReadonlyArray<AgentsImportWarning>;
|
|
88
|
+
/**
|
|
89
|
+
* Duplicate conflicts that still require a user decision.
|
|
90
|
+
*/
|
|
91
|
+
readonly conflicts: ReadonlyArray<AgentsImportConflict>;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Options accepted by the agents import service.
|
|
96
|
+
*/
|
|
97
|
+
export type ImportAgentsFromFilesOptions = {
|
|
98
|
+
/**
|
|
99
|
+
* Dropped or selected files.
|
|
100
|
+
*/
|
|
101
|
+
readonly files: ReadonlyArray<AgentsImportFile>;
|
|
102
|
+
/**
|
|
103
|
+
* Folder where dropped files should be embedded.
|
|
104
|
+
*/
|
|
105
|
+
readonly targetFolderId: number | null;
|
|
106
|
+
/**
|
|
107
|
+
* How different-book duplicates should be handled.
|
|
108
|
+
*/
|
|
109
|
+
readonly conflictResolution: AgentsImportConflictResolution;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Parsed book entry ready for duplicate checks and persistence.
|
|
114
|
+
*/
|
|
115
|
+
type AgentsImportBookEntry = {
|
|
116
|
+
/**
|
|
117
|
+
* Original file path inside the upload batch.
|
|
118
|
+
*/
|
|
119
|
+
readonly path: string;
|
|
120
|
+
/**
|
|
121
|
+
* Folder path segments resolved from the file path.
|
|
122
|
+
*/
|
|
123
|
+
readonly folderSegments: ReadonlyArray<string>;
|
|
124
|
+
/**
|
|
125
|
+
* Raw book source to persist through the standard agent collection.
|
|
126
|
+
*/
|
|
127
|
+
readonly source: string_book;
|
|
128
|
+
/**
|
|
129
|
+
* Agent name parsed from the book source.
|
|
130
|
+
*/
|
|
131
|
+
readonly agentName: string;
|
|
132
|
+
/**
|
|
133
|
+
* Normalized source used for same-book duplicate checks.
|
|
134
|
+
*/
|
|
135
|
+
readonly normalizedAgentSource: string;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Existing active agent row used for duplicate checks.
|
|
140
|
+
*/
|
|
141
|
+
type ExistingAgentRow = Pick<AgentsServerDatabase['public']['Tables']['Agent']['Row'], 'agentName' | 'agentSource'>;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Active folder row used while recreating folder paths from ZIP entries.
|
|
145
|
+
*/
|
|
146
|
+
type ExistingFolderRow = Pick<AgentsServerDatabase['public']['Tables']['AgentFolder']['Row'], 'id' | 'name' | 'parentId' | 'sortOrder'>;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Supabase client type used by the import service.
|
|
150
|
+
*/
|
|
151
|
+
type AgentsImportSupabase = SupabaseClient<AgentsServerDatabase>;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* File extension used by book files.
|
|
155
|
+
*/
|
|
156
|
+
const BOOK_FILE_EXTENSION = '.book';
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* File extension used by ZIP archives.
|
|
160
|
+
*/
|
|
161
|
+
const ZIP_FILE_EXTENSION = '.zip';
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Separator used for composite folder lookup keys.
|
|
165
|
+
*/
|
|
166
|
+
const FOLDER_LOOKUP_KEY_SEPARATOR = '\u0000';
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Imports agent books from dropped `.book` files or ZIP archives.
|
|
170
|
+
*
|
|
171
|
+
* When duplicate agent names with different book sources are found and the conflict resolution is `ASK`, this function
|
|
172
|
+
* returns conflicts without creating anything.
|
|
173
|
+
*
|
|
174
|
+
* @param options - Import files, target folder, and duplicate handling.
|
|
175
|
+
* @returns Import summary.
|
|
176
|
+
*/
|
|
177
|
+
export async function importAgentsFromFiles(options: ImportAgentsFromFilesOptions): Promise<AgentsImportResult> {
|
|
178
|
+
const { entries, warnings, ignoredFileCount } = await extractAgentsImportBookEntries(options.files);
|
|
179
|
+
if (entries.length === 0) {
|
|
180
|
+
throw new ParseError(
|
|
181
|
+
spaceTrim(`
|
|
182
|
+
No book files were found.
|
|
183
|
+
|
|
184
|
+
Drop individual \`.book\` files or a ZIP archive that contains \`.book\` files.
|
|
185
|
+
`),
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const supabase = $provideSupabaseForServer();
|
|
190
|
+
await ensureImportTargetFolderExists(supabase, options.targetFolderId);
|
|
191
|
+
|
|
192
|
+
const existingAgents = await loadExistingAgents(supabase);
|
|
193
|
+
const conflicts = createAgentsImportConflicts(entries, existingAgents);
|
|
194
|
+
if (options.conflictResolution === 'ASK' && conflicts.length > 0) {
|
|
195
|
+
return {
|
|
196
|
+
importedCount: 0,
|
|
197
|
+
skippedCount: 0,
|
|
198
|
+
ignoredFileCount,
|
|
199
|
+
warnings,
|
|
200
|
+
conflicts,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const importedCount = await persistAgentsImportEntries({
|
|
205
|
+
entries,
|
|
206
|
+
existingAgents,
|
|
207
|
+
conflictResolution: options.conflictResolution,
|
|
208
|
+
targetFolderId: options.targetFolderId,
|
|
209
|
+
supabase,
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
invalidateCachedActiveOrganizationSnapshots();
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
importedCount,
|
|
216
|
+
skippedCount: entries.length - importedCount,
|
|
217
|
+
ignoredFileCount,
|
|
218
|
+
warnings,
|
|
219
|
+
conflicts: [],
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Extracts book entries from uploaded files.
|
|
225
|
+
*
|
|
226
|
+
* @param files - Uploaded files.
|
|
227
|
+
* @returns Parsed book entries and warnings.
|
|
228
|
+
*/
|
|
229
|
+
export async function extractAgentsImportBookEntries(files: ReadonlyArray<AgentsImportFile>): Promise<{
|
|
230
|
+
readonly entries: ReadonlyArray<AgentsImportBookEntry>;
|
|
231
|
+
readonly warnings: ReadonlyArray<AgentsImportWarning>;
|
|
232
|
+
readonly ignoredFileCount: number;
|
|
233
|
+
}> {
|
|
234
|
+
const entries: AgentsImportBookEntry[] = [];
|
|
235
|
+
const warnings: AgentsImportWarning[] = [];
|
|
236
|
+
let ignoredFileCount = 0;
|
|
237
|
+
|
|
238
|
+
for (const file of files) {
|
|
239
|
+
if (isBookFilePath(file.name)) {
|
|
240
|
+
entries.push(createAgentsImportBookEntry(file.name, [], decodeImportFileContent(file.content)));
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (isZipFilePath(file.name)) {
|
|
245
|
+
const zipResult = await extractAgentsImportBookEntriesFromZip(file);
|
|
246
|
+
entries.push(...zipResult.entries);
|
|
247
|
+
warnings.push(...zipResult.warnings);
|
|
248
|
+
ignoredFileCount += zipResult.ignoredFileCount;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
ignoredFileCount += 1;
|
|
253
|
+
warnings.push({
|
|
254
|
+
path: file.name,
|
|
255
|
+
message: 'Ignored file because it is not a `.book` file or ZIP archive.',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return { entries, warnings, ignoredFileCount };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Extracts book entries from one ZIP archive.
|
|
264
|
+
*
|
|
265
|
+
* @param file - Uploaded ZIP file.
|
|
266
|
+
* @returns Parsed book entries and ignored-file warnings.
|
|
267
|
+
*/
|
|
268
|
+
async function extractAgentsImportBookEntriesFromZip(file: AgentsImportFile): Promise<{
|
|
269
|
+
readonly entries: ReadonlyArray<AgentsImportBookEntry>;
|
|
270
|
+
readonly warnings: ReadonlyArray<AgentsImportWarning>;
|
|
271
|
+
readonly ignoredFileCount: number;
|
|
272
|
+
}> {
|
|
273
|
+
let zip: JSZip;
|
|
274
|
+
|
|
275
|
+
try {
|
|
276
|
+
zip = await JSZip.loadAsync(file.content);
|
|
277
|
+
} catch (error) {
|
|
278
|
+
throw new ParseError(
|
|
279
|
+
spaceTrim(
|
|
280
|
+
(block) => `
|
|
281
|
+
Failed to read agents ZIP archive \`${file.name}\`.
|
|
282
|
+
|
|
283
|
+
${block(error instanceof Error ? error.message : 'Unknown ZIP parsing error.')}
|
|
284
|
+
`,
|
|
285
|
+
),
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const entries: AgentsImportBookEntry[] = [];
|
|
290
|
+
const warnings: AgentsImportWarning[] = [];
|
|
291
|
+
let ignoredFileCount = 0;
|
|
292
|
+
const zipEntries = Object.values(zip.files).sort((left, right) => left.name.localeCompare(right.name));
|
|
293
|
+
|
|
294
|
+
for (const zipEntry of zipEntries) {
|
|
295
|
+
if (zipEntry.dir) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const normalizedPath = normalizeImportedZipPath(zipEntry.name);
|
|
300
|
+
if (!isBookFilePath(normalizedPath)) {
|
|
301
|
+
ignoredFileCount += 1;
|
|
302
|
+
warnings.push({
|
|
303
|
+
path: `${file.name}/${normalizedPath}`,
|
|
304
|
+
message: 'ZIP entry was ignored because it is not a `.book` file.',
|
|
305
|
+
});
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
const pathSegments = resolveImportedBookPathSegments(normalizedPath);
|
|
310
|
+
const source = await zipEntry.async('string');
|
|
311
|
+
entries.push(
|
|
312
|
+
createAgentsImportBookEntry(
|
|
313
|
+
`${file.name}/${normalizedPath}`,
|
|
314
|
+
pathSegments.slice(0, -1),
|
|
315
|
+
source,
|
|
316
|
+
),
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return { entries, warnings, ignoredFileCount };
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Persists all import entries after duplicate conflicts have already been resolved.
|
|
325
|
+
*
|
|
326
|
+
* @param options - Persistence context.
|
|
327
|
+
* @returns Number of created agents.
|
|
328
|
+
*/
|
|
329
|
+
async function persistAgentsImportEntries(options: {
|
|
330
|
+
readonly entries: ReadonlyArray<AgentsImportBookEntry>;
|
|
331
|
+
readonly existingAgents: ReadonlyArray<ExistingAgentRow>;
|
|
332
|
+
readonly conflictResolution: AgentsImportConflictResolution;
|
|
333
|
+
readonly targetFolderId: number | null;
|
|
334
|
+
readonly supabase: AgentsImportSupabase;
|
|
335
|
+
}): Promise<number> {
|
|
336
|
+
const currentUserIdentity = await resolveCurrentUserIdentity();
|
|
337
|
+
if (!currentUserIdentity?.sessionUser?.isAdmin) {
|
|
338
|
+
throw new UnexpectedError('Agents import reached persistence without an admin session.');
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const collection = await $provideAgentCollectionForServer();
|
|
342
|
+
const folderContext = await createAgentsImportFolderContext({
|
|
343
|
+
supabase: options.supabase,
|
|
344
|
+
userId: currentUserIdentity.userId,
|
|
345
|
+
});
|
|
346
|
+
const nextAgentSortOrderByFolderId = new Map<number | null, number>();
|
|
347
|
+
const knownAgentSourcesByName = createKnownAgentSourcesByName(options.existingAgents);
|
|
348
|
+
let importedCount = 0;
|
|
349
|
+
|
|
350
|
+
for (const entry of options.entries) {
|
|
351
|
+
const duplicateState = resolveAgentsImportDuplicateState(entry, knownAgentSourcesByName);
|
|
352
|
+
if (duplicateState === 'SAME_BOOK') {
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
if (duplicateState === 'DIFFERENT_BOOK' && options.conflictResolution === 'SKIP') {
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const folderId = await resolveImportEntryTargetFolderId(folderContext, options.targetFolderId, entry.folderSegments);
|
|
360
|
+
const sortOrder = await resolveNextImportAgentSortOrder({
|
|
361
|
+
userId: currentUserIdentity.userId,
|
|
362
|
+
folderId,
|
|
363
|
+
nextAgentSortOrderByFolderId,
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
await createAgentWithDefaultVisibility(collection, entry.source, {
|
|
367
|
+
folderId,
|
|
368
|
+
sortOrder,
|
|
369
|
+
userId: currentUserIdentity.userId,
|
|
370
|
+
});
|
|
371
|
+
importedCount += 1;
|
|
372
|
+
appendKnownAgentSource(knownAgentSourcesByName, entry);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return importedCount;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Creates folder lookup state used while recreating ZIP path structure.
|
|
380
|
+
*
|
|
381
|
+
* @param options - Supabase and user context.
|
|
382
|
+
* @returns Mutable folder import context.
|
|
383
|
+
*/
|
|
384
|
+
async function createAgentsImportFolderContext(options: {
|
|
385
|
+
readonly supabase: AgentsImportSupabase;
|
|
386
|
+
readonly userId: number;
|
|
387
|
+
}): Promise<{
|
|
388
|
+
readonly folderByLookupKey: Map<string, ExistingFolderRow>;
|
|
389
|
+
readonly nextFolderSortOrderByParentId: Map<number | null, number>;
|
|
390
|
+
readonly supabase: AgentsImportSupabase;
|
|
391
|
+
readonly userId: number;
|
|
392
|
+
}> {
|
|
393
|
+
const folderRows = await loadExistingFolders(options.supabase);
|
|
394
|
+
const folderByLookupKey = new Map<string, ExistingFolderRow>();
|
|
395
|
+
const nextFolderSortOrderByParentId = new Map<number | null, number>();
|
|
396
|
+
|
|
397
|
+
for (const folder of folderRows) {
|
|
398
|
+
folderByLookupKey.set(createFolderLookupKey(folder.parentId ?? null, folder.name), folder);
|
|
399
|
+
const parentId = folder.parentId ?? null;
|
|
400
|
+
const nextSortOrder = Math.max(nextFolderSortOrderByParentId.get(parentId) ?? 1, (folder.sortOrder ?? 0) + 1);
|
|
401
|
+
nextFolderSortOrderByParentId.set(parentId, nextSortOrder);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
return {
|
|
405
|
+
folderByLookupKey,
|
|
406
|
+
nextFolderSortOrderByParentId,
|
|
407
|
+
supabase: options.supabase,
|
|
408
|
+
userId: options.userId,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Resolves or creates the target folder for one imported book entry.
|
|
414
|
+
*
|
|
415
|
+
* @param folderContext - Mutable folder import context.
|
|
416
|
+
* @param targetFolderId - Folder selected in the UI.
|
|
417
|
+
* @param folderSegments - Folder path from the dropped ZIP entry.
|
|
418
|
+
* @returns Persisted folder id or `null` for root.
|
|
419
|
+
*/
|
|
420
|
+
async function resolveImportEntryTargetFolderId(
|
|
421
|
+
folderContext: Awaited<ReturnType<typeof createAgentsImportFolderContext>>,
|
|
422
|
+
targetFolderId: number | null,
|
|
423
|
+
folderSegments: ReadonlyArray<string>,
|
|
424
|
+
): Promise<number | null> {
|
|
425
|
+
let parentId = targetFolderId;
|
|
426
|
+
|
|
427
|
+
for (const folderSegment of folderSegments) {
|
|
428
|
+
const lookupKey = createFolderLookupKey(parentId, folderSegment);
|
|
429
|
+
const existingFolder = folderContext.folderByLookupKey.get(lookupKey);
|
|
430
|
+
|
|
431
|
+
if (existingFolder) {
|
|
432
|
+
parentId = existingFolder.id;
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
const createdFolder = await createImportFolder(folderContext, parentId, folderSegment);
|
|
437
|
+
folderContext.folderByLookupKey.set(lookupKey, createdFolder);
|
|
438
|
+
parentId = createdFolder.id;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return parentId;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Creates one folder for an imported ZIP path segment.
|
|
446
|
+
*
|
|
447
|
+
* @param folderContext - Mutable folder import context.
|
|
448
|
+
* @param parentId - Parent folder id.
|
|
449
|
+
* @param name - Folder name.
|
|
450
|
+
* @returns Persisted folder row.
|
|
451
|
+
*/
|
|
452
|
+
async function createImportFolder(
|
|
453
|
+
folderContext: Awaited<ReturnType<typeof createAgentsImportFolderContext>>,
|
|
454
|
+
parentId: number | null,
|
|
455
|
+
name: string,
|
|
456
|
+
): Promise<ExistingFolderRow> {
|
|
457
|
+
const folderTable = await $getTableName('AgentFolder');
|
|
458
|
+
const sortOrder = await resolveNextImportFolderSortOrder(folderContext, parentId);
|
|
459
|
+
const insertResult = await folderContext.supabase
|
|
460
|
+
.from(folderTable)
|
|
461
|
+
.insert({
|
|
462
|
+
userId: folderContext.userId,
|
|
463
|
+
name,
|
|
464
|
+
parentId,
|
|
465
|
+
sortOrder,
|
|
466
|
+
icon: null,
|
|
467
|
+
color: null,
|
|
468
|
+
createdAt: new Date().toISOString(),
|
|
469
|
+
updatedAt: null,
|
|
470
|
+
} as never)
|
|
471
|
+
.select('id, name, parentId, sortOrder')
|
|
472
|
+
.maybeSingle();
|
|
473
|
+
|
|
474
|
+
if (insertResult.error || !insertResult.data) {
|
|
475
|
+
throw new DatabaseError(
|
|
476
|
+
spaceTrim(
|
|
477
|
+
(block) => `
|
|
478
|
+
Failed to create folder \`${name}\` while importing agents.
|
|
479
|
+
|
|
480
|
+
${block(insertResult.error?.message || 'The database did not return the created folder.')}
|
|
481
|
+
`,
|
|
482
|
+
),
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
return insertResult.data as ExistingFolderRow;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Resolves and increments the next sort order for a newly imported folder.
|
|
491
|
+
*
|
|
492
|
+
* @param folderContext - Mutable folder import context.
|
|
493
|
+
* @param parentId - Parent folder id.
|
|
494
|
+
* @returns Sort order for a new folder.
|
|
495
|
+
*/
|
|
496
|
+
async function resolveNextImportFolderSortOrder(
|
|
497
|
+
folderContext: Awaited<ReturnType<typeof createAgentsImportFolderContext>>,
|
|
498
|
+
parentId: number | null,
|
|
499
|
+
): Promise<number> {
|
|
500
|
+
let nextSortOrder = folderContext.nextFolderSortOrderByParentId.get(parentId);
|
|
501
|
+
|
|
502
|
+
if (nextSortOrder === undefined) {
|
|
503
|
+
nextSortOrder = await getNextOwnedFolderSortOrder(folderContext.userId, parentId);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
folderContext.nextFolderSortOrderByParentId.set(parentId, nextSortOrder + 1);
|
|
507
|
+
return nextSortOrder;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Resolves and increments the next sort order for a newly imported agent.
|
|
512
|
+
*
|
|
513
|
+
* @param options - Sort order lookup context.
|
|
514
|
+
* @returns Sort order for a new agent.
|
|
515
|
+
*/
|
|
516
|
+
async function resolveNextImportAgentSortOrder(options: {
|
|
517
|
+
readonly userId: number;
|
|
518
|
+
readonly folderId: number | null;
|
|
519
|
+
readonly nextAgentSortOrderByFolderId: Map<number | null, number>;
|
|
520
|
+
}): Promise<number> {
|
|
521
|
+
let nextSortOrder = options.nextAgentSortOrderByFolderId.get(options.folderId);
|
|
522
|
+
|
|
523
|
+
if (nextSortOrder === undefined) {
|
|
524
|
+
nextSortOrder = await getNextOwnedAgentSortOrder(options.userId, options.folderId);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
options.nextAgentSortOrderByFolderId.set(options.folderId, nextSortOrder + 1);
|
|
528
|
+
return nextSortOrder;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Loads active agents for duplicate detection.
|
|
533
|
+
*
|
|
534
|
+
* @param supabase - Supabase client.
|
|
535
|
+
* @returns Existing active agents.
|
|
536
|
+
*/
|
|
537
|
+
async function loadExistingAgents(supabase: AgentsImportSupabase): Promise<Array<ExistingAgentRow>> {
|
|
538
|
+
const agentTable = await $getTableName('Agent');
|
|
539
|
+
const result = await supabase
|
|
540
|
+
.from(agentTable)
|
|
541
|
+
.select('agentName, agentSource')
|
|
542
|
+
.is('deletedAt', null);
|
|
543
|
+
|
|
544
|
+
if (result.error) {
|
|
545
|
+
throw new DatabaseError(
|
|
546
|
+
spaceTrim(
|
|
547
|
+
(block) => `
|
|
548
|
+
Failed to load existing agents before import.
|
|
549
|
+
|
|
550
|
+
${block(result.error.message)}
|
|
551
|
+
`,
|
|
552
|
+
),
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
return (result.data || []) as ExistingAgentRow[];
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* Loads active folders for recreating ZIP folder paths.
|
|
561
|
+
*
|
|
562
|
+
* @param supabase - Supabase client.
|
|
563
|
+
* @returns Existing active folders.
|
|
564
|
+
*/
|
|
565
|
+
async function loadExistingFolders(supabase: AgentsImportSupabase): Promise<Array<ExistingFolderRow>> {
|
|
566
|
+
const folderTable = await $getTableName('AgentFolder');
|
|
567
|
+
const result = await supabase
|
|
568
|
+
.from(folderTable)
|
|
569
|
+
.select('id, name, parentId, sortOrder')
|
|
570
|
+
.is('deletedAt', null);
|
|
571
|
+
|
|
572
|
+
if (result.error) {
|
|
573
|
+
throw new DatabaseError(
|
|
574
|
+
spaceTrim(
|
|
575
|
+
(block) => `
|
|
576
|
+
Failed to load existing folders before import.
|
|
577
|
+
|
|
578
|
+
${block(result.error.message)}
|
|
579
|
+
`,
|
|
580
|
+
),
|
|
581
|
+
);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
return (result.data || []) as ExistingFolderRow[];
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* Ensures the requested drop target folder still exists.
|
|
589
|
+
*
|
|
590
|
+
* @param supabase - Supabase client.
|
|
591
|
+
* @param targetFolderId - Target folder id from the UI.
|
|
592
|
+
*/
|
|
593
|
+
async function ensureImportTargetFolderExists(supabase: AgentsImportSupabase, targetFolderId: number | null): Promise<void> {
|
|
594
|
+
if (targetFolderId === null) {
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
const folderTable = await $getTableName('AgentFolder');
|
|
599
|
+
const result = await supabase
|
|
600
|
+
.from(folderTable)
|
|
601
|
+
.select('id')
|
|
602
|
+
.eq('id', targetFolderId)
|
|
603
|
+
.is('deletedAt', null)
|
|
604
|
+
.maybeSingle();
|
|
605
|
+
|
|
606
|
+
if (result.error) {
|
|
607
|
+
throw new DatabaseError(
|
|
608
|
+
spaceTrim(
|
|
609
|
+
(block) => `
|
|
610
|
+
Failed to validate target folder before import.
|
|
611
|
+
|
|
612
|
+
${block(result.error.message)}
|
|
613
|
+
`,
|
|
614
|
+
),
|
|
615
|
+
);
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
if (!result.data) {
|
|
619
|
+
throw new ParseError(`Target folder \`${targetFolderId}\` was not found.`);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* Creates duplicate conflicts for entries whose agent name already exists with different source.
|
|
625
|
+
*
|
|
626
|
+
* @param entries - Parsed import entries.
|
|
627
|
+
* @param existingAgents - Existing active agents.
|
|
628
|
+
* @returns Conflicts that require a user decision.
|
|
629
|
+
*/
|
|
630
|
+
function createAgentsImportConflicts(
|
|
631
|
+
entries: ReadonlyArray<AgentsImportBookEntry>,
|
|
632
|
+
existingAgents: ReadonlyArray<ExistingAgentRow>,
|
|
633
|
+
): Array<AgentsImportConflict> {
|
|
634
|
+
const knownAgentSourcesByName = createKnownAgentSourcesByName(existingAgents);
|
|
635
|
+
const conflicts: AgentsImportConflict[] = [];
|
|
636
|
+
|
|
637
|
+
for (const entry of entries) {
|
|
638
|
+
const matchingAgentSources = knownAgentSourcesByName.get(entry.agentName) || [];
|
|
639
|
+
const isSameBookAlreadyPresent = matchingAgentSources.includes(entry.normalizedAgentSource);
|
|
640
|
+
|
|
641
|
+
if (matchingAgentSources.length === 0) {
|
|
642
|
+
appendKnownAgentSource(knownAgentSourcesByName, entry);
|
|
643
|
+
continue;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
if (isSameBookAlreadyPresent) {
|
|
647
|
+
continue;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
conflicts.push({
|
|
651
|
+
agentName: entry.agentName,
|
|
652
|
+
path: entry.path,
|
|
653
|
+
existingDifferentBookCount: matchingAgentSources.length,
|
|
654
|
+
});
|
|
655
|
+
appendKnownAgentSource(knownAgentSourcesByName, entry);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
return conflicts;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
/**
|
|
662
|
+
* Resolves duplicate state for one import entry against existing agents.
|
|
663
|
+
*
|
|
664
|
+
* @param entry - Parsed import entry.
|
|
665
|
+
* @param knownAgentSourcesByName - Known normalized sources keyed by agent name.
|
|
666
|
+
* @returns Duplicate state for the import entry.
|
|
667
|
+
*/
|
|
668
|
+
function resolveAgentsImportDuplicateState(
|
|
669
|
+
entry: AgentsImportBookEntry,
|
|
670
|
+
knownAgentSourcesByName: ReadonlyMap<string, ReadonlyArray<string>>,
|
|
671
|
+
): 'NONE' | 'SAME_BOOK' | 'DIFFERENT_BOOK' {
|
|
672
|
+
const matchingAgentSources = knownAgentSourcesByName.get(entry.agentName) || [];
|
|
673
|
+
if (matchingAgentSources.length === 0) {
|
|
674
|
+
return 'NONE';
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
const isSameBookAlreadyPresent = matchingAgentSources.includes(entry.normalizedAgentSource);
|
|
678
|
+
|
|
679
|
+
return isSameBookAlreadyPresent ? 'SAME_BOOK' : 'DIFFERENT_BOOK';
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Builds known normalized source lookup from existing agents.
|
|
684
|
+
*
|
|
685
|
+
* @param existingAgents - Existing active agents.
|
|
686
|
+
* @returns Known sources keyed by agent name.
|
|
687
|
+
*/
|
|
688
|
+
function createKnownAgentSourcesByName(existingAgents: ReadonlyArray<ExistingAgentRow>): Map<string, string[]> {
|
|
689
|
+
const knownAgentSourcesByName = new Map<string, string[]>();
|
|
690
|
+
|
|
691
|
+
for (const agent of existingAgents) {
|
|
692
|
+
const knownSources = knownAgentSourcesByName.get(agent.agentName) || [];
|
|
693
|
+
knownSources.push(normalizeAgentSourceForComparison(agent.agentSource as string_book));
|
|
694
|
+
knownAgentSourcesByName.set(agent.agentName, knownSources);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
return knownAgentSourcesByName;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Adds one imported entry to the known source lookup.
|
|
702
|
+
*
|
|
703
|
+
* @param knownAgentSourcesByName - Mutable known source lookup.
|
|
704
|
+
* @param entry - Imported entry.
|
|
705
|
+
*/
|
|
706
|
+
function appendKnownAgentSource(
|
|
707
|
+
knownAgentSourcesByName: Map<string, string[]>,
|
|
708
|
+
entry: Pick<AgentsImportBookEntry, 'agentName' | 'normalizedAgentSource'>,
|
|
709
|
+
): void {
|
|
710
|
+
const knownSources = knownAgentSourcesByName.get(entry.agentName) || [];
|
|
711
|
+
knownSources.push(entry.normalizedAgentSource);
|
|
712
|
+
knownAgentSourcesByName.set(entry.agentName, knownSources);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/**
|
|
716
|
+
* Creates one parsed import entry from a book source string.
|
|
717
|
+
*
|
|
718
|
+
* @param path - Original file path.
|
|
719
|
+
* @param folderSegments - Folder path segments from ZIP structure.
|
|
720
|
+
* @param source - Raw book source.
|
|
721
|
+
* @returns Parsed import entry.
|
|
722
|
+
*/
|
|
723
|
+
function createAgentsImportBookEntry(
|
|
724
|
+
path: string,
|
|
725
|
+
folderSegments: ReadonlyArray<string>,
|
|
726
|
+
source: string,
|
|
727
|
+
): AgentsImportBookEntry {
|
|
728
|
+
const agentSource = source as string_book;
|
|
729
|
+
const preparedAgentSource = prepareAgentSourceForPersistence(agentSource);
|
|
730
|
+
const agentName = preparedAgentSource.agentProfile.agentName?.trim();
|
|
731
|
+
|
|
732
|
+
if (!agentName) {
|
|
733
|
+
throw new ParseError(
|
|
734
|
+
spaceTrim(`
|
|
735
|
+
Book file \`${path}\` does not contain an agent name.
|
|
736
|
+
|
|
737
|
+
The first line of the book must define the agent name.
|
|
738
|
+
`),
|
|
739
|
+
);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
return {
|
|
743
|
+
path,
|
|
744
|
+
folderSegments: folderSegments.map(normalizeImportedFolderName),
|
|
745
|
+
source: agentSource,
|
|
746
|
+
agentName,
|
|
747
|
+
normalizedAgentSource: normalizeAgentSourceForComparison(agentSource),
|
|
748
|
+
};
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* Normalizes agent source before comparing same-book duplicates.
|
|
753
|
+
*
|
|
754
|
+
* @param agentSource - Raw or persisted agent source.
|
|
755
|
+
* @returns Normalized source for equality checks.
|
|
756
|
+
*/
|
|
757
|
+
function normalizeAgentSourceForComparison(agentSource: string_book): string {
|
|
758
|
+
return prepareAgentSourceForPersistence(agentSource).agentSource.replace(/\r\n/g, '\n');
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* Decodes uploaded file content as UTF-8 text.
|
|
763
|
+
*
|
|
764
|
+
* @param content - Binary file content.
|
|
765
|
+
* @returns Decoded text content.
|
|
766
|
+
*/
|
|
767
|
+
function decodeImportFileContent(content: AgentsImportFile['content']): string {
|
|
768
|
+
return new TextDecoder().decode(toUint8Array(content));
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
/**
|
|
772
|
+
* Converts supported binary inputs into a `Uint8Array`.
|
|
773
|
+
*
|
|
774
|
+
* @param content - Binary file content.
|
|
775
|
+
* @returns Byte array.
|
|
776
|
+
*/
|
|
777
|
+
function toUint8Array(content: AgentsImportFile['content']): Uint8Array {
|
|
778
|
+
return content instanceof Uint8Array ? content : new Uint8Array(content);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Checks whether a path points to a book file.
|
|
783
|
+
*
|
|
784
|
+
* @param path - File path.
|
|
785
|
+
* @returns `true` for `.book` files.
|
|
786
|
+
*/
|
|
787
|
+
function isBookFilePath(path: string): boolean {
|
|
788
|
+
return path.toLowerCase().endsWith(BOOK_FILE_EXTENSION);
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* Checks whether a path points to a ZIP archive.
|
|
793
|
+
*
|
|
794
|
+
* @param path - File path.
|
|
795
|
+
* @returns `true` for `.zip` files.
|
|
796
|
+
*/
|
|
797
|
+
function isZipFilePath(path: string): boolean {
|
|
798
|
+
return path.toLowerCase().endsWith(ZIP_FILE_EXTENSION);
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/**
|
|
802
|
+
* Normalizes a ZIP entry path to POSIX-style relative path.
|
|
803
|
+
*
|
|
804
|
+
* @param path - Raw ZIP entry path.
|
|
805
|
+
* @returns Normalized ZIP entry path.
|
|
806
|
+
*/
|
|
807
|
+
function normalizeImportedZipPath(path: string): string {
|
|
808
|
+
return path.replace(/\\/g, '/').replace(/^\/+/g, '');
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Splits and validates a book path from inside a ZIP archive.
|
|
813
|
+
*
|
|
814
|
+
* @param path - Normalized ZIP entry path.
|
|
815
|
+
* @returns Folder and file path segments.
|
|
816
|
+
*/
|
|
817
|
+
function resolveImportedBookPathSegments(path: string): string[] {
|
|
818
|
+
const segments = path.split('/').filter((segment) => segment.length > 0);
|
|
819
|
+
|
|
820
|
+
if (segments.length === 0 || segments.some((segment) => segment === '.' || segment === '..')) {
|
|
821
|
+
throw new ParseError(`Invalid book path \`${path}\` in agents ZIP archive.`);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
return segments;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
/**
|
|
828
|
+
* Normalizes one imported folder segment before storing it as a folder name.
|
|
829
|
+
*
|
|
830
|
+
* @param folderName - Raw folder path segment.
|
|
831
|
+
* @returns Folder name safe for Agents Server folders.
|
|
832
|
+
*/
|
|
833
|
+
function normalizeImportedFolderName(folderName: string): string {
|
|
834
|
+
const normalizedFolderName = folderName.trim();
|
|
835
|
+
|
|
836
|
+
if (!normalizedFolderName || normalizedFolderName.includes('/')) {
|
|
837
|
+
throw new ParseError(`Invalid folder name \`${folderName}\` in agents import.`);
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
return normalizedFolderName;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* Builds a composite folder lookup key.
|
|
845
|
+
*
|
|
846
|
+
* @param parentId - Parent folder id.
|
|
847
|
+
* @param name - Folder name.
|
|
848
|
+
* @returns Stable lookup key.
|
|
849
|
+
*/
|
|
850
|
+
function createFolderLookupKey(parentId: number | null, name: string): string {
|
|
851
|
+
return `${parentId ?? 'root'}${FOLDER_LOOKUP_KEY_SEPARATOR}${name}`;
|
|
852
|
+
}
|