@promptbook/cli 0.112.0-98 → 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 +702 -764
- package/src/scrapers/_common/utils/getScraperIntermediateSource.ts +2 -2
- package/src/scrapers/website/WebsiteScraper.ts +1 -1
- package/src/scrapers/website/utils/createShowdownConverter.ts +2 -2
- package/src/scripting/javascript/JavascriptEvalExecutionTools.ts +1 -1
- package/src/utils/agents/resolveAgentAvatarImageUrl.ts +1 -1
- package/src/utils/chat/chatAttachments/resolveChatAttachmentContent.ts +8 -1
- package/src/utils/isTimingSafeEqualString.ts +43 -0
- package/src/utils/misc/computeHash.ts +2 -2
- package/src/utils/random/$randomToken.ts +2 -2
- package/src/utils/validators/url/isValidAgentUrl.ts +5 -7
- package/src/version.ts +2 -2
- package/src/versions.txt +33 -0
- package/umd/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
- package/umd/apps/agents-server/src/constants/serverLimits.d.ts +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
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
CheckCircle2,
|
|
5
|
+
ChevronDown,
|
|
6
|
+
ChevronUp,
|
|
7
|
+
ClipboardCopy,
|
|
8
|
+
Download,
|
|
9
|
+
FileDown,
|
|
10
|
+
GitCommit,
|
|
11
|
+
Loader2,
|
|
12
|
+
RefreshCcw,
|
|
13
|
+
Rocket,
|
|
14
|
+
Server,
|
|
15
|
+
Settings2,
|
|
16
|
+
TriangleAlert,
|
|
17
|
+
} from 'lucide-react';
|
|
18
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
19
|
+
import { AdminXtermTerminal } from '../../../components/AdminTerminal/AdminXtermTerminal';
|
|
5
20
|
import { Card } from '../../../components/Homepage/Card';
|
|
21
|
+
import { useServerLanguage } from '../../../components/ServerLanguage/ServerLanguageProvider';
|
|
22
|
+
import type { ServerLanguageCode } from '../../../languages/ServerLanguageRegistry';
|
|
23
|
+
import { downloadBlob, parseFilenameFromContentDisposition } from '../../../utils/download/browserFileDownload';
|
|
24
|
+
import { createServerLanguageMoment } from '../../../utils/localization/createServerLanguageMoment';
|
|
25
|
+
import { formatServerLanguageHumanReadableDate } from '../../../utils/localization/formatServerLanguageHumanReadableDate';
|
|
26
|
+
import { CustomCommitPicker, type CustomCommitPickerCandidate } from './CustomCommitPicker';
|
|
6
27
|
|
|
7
28
|
/**
|
|
8
29
|
* Browser-safe environment option returned by the update API.
|
|
@@ -12,6 +33,7 @@ type UpdateEnvironmentOption = {
|
|
|
12
33
|
readonly branch: string;
|
|
13
34
|
readonly label: string;
|
|
14
35
|
readonly description: string;
|
|
36
|
+
readonly isCustom: boolean;
|
|
15
37
|
};
|
|
16
38
|
|
|
17
39
|
/**
|
|
@@ -33,6 +55,16 @@ type UpdateJobSnapshot = {
|
|
|
33
55
|
readonly logFilePath: string | null;
|
|
34
56
|
};
|
|
35
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Browser-safe summary of one commit between the deployed checkout and the latest remote commit.
|
|
60
|
+
*/
|
|
61
|
+
type UpdatePendingCommit = {
|
|
62
|
+
readonly commitSha: string;
|
|
63
|
+
readonly shortCommitSha: string;
|
|
64
|
+
readonly subject: string;
|
|
65
|
+
readonly authoredAt: string | null;
|
|
66
|
+
};
|
|
67
|
+
|
|
36
68
|
/**
|
|
37
69
|
* Browser-safe self-update overview returned by the super-admin API.
|
|
38
70
|
*/
|
|
@@ -45,53 +77,85 @@ type UpdateOverview = {
|
|
|
45
77
|
readonly currentCommitSha: string | null;
|
|
46
78
|
readonly currentCommitShortSha: string | null;
|
|
47
79
|
readonly currentCommitMessage: string | null;
|
|
80
|
+
readonly currentCommitDate: string | null;
|
|
48
81
|
readonly latestRemoteCommitSha: string | null;
|
|
49
82
|
readonly latestRemoteCommitShortSha: string | null;
|
|
83
|
+
readonly latestRemoteCommitDate: string | null;
|
|
84
|
+
readonly commitsBehindCount: number | null;
|
|
85
|
+
readonly pendingCommits: ReadonlyArray<UpdatePendingCommit>;
|
|
50
86
|
readonly isUpdateAvailable: boolean;
|
|
87
|
+
readonly originRepositoryUrl: string;
|
|
88
|
+
readonly isOriginRepositoryDefault: boolean;
|
|
89
|
+
readonly defaultOriginRepositoryUrl: string;
|
|
51
90
|
readonly job: UpdateJobSnapshot;
|
|
52
91
|
readonly error?: string;
|
|
53
92
|
};
|
|
54
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Duration (ms) of the transient "Copied!" / "Saved!" feedback shown next to log action buttons.
|
|
96
|
+
*/
|
|
97
|
+
const UPDATE_LOG_ACTION_FEEDBACK_DURATION_MS = 2500;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Default download filename used when the server does not provide one via `Content-Disposition`.
|
|
101
|
+
*/
|
|
102
|
+
const DEFAULT_UPDATE_LOG_DOWNLOAD_FILENAME = 'self-update.log';
|
|
103
|
+
|
|
55
104
|
/**
|
|
56
105
|
* Client UI for standalone VPS branch-aware self-updates.
|
|
57
106
|
*/
|
|
58
107
|
export function UpdateClient() {
|
|
108
|
+
const { language } = useServerLanguage();
|
|
59
109
|
const [overview, setOverview] = useState<UpdateOverview | null>(null);
|
|
60
110
|
const [selectedEnvironmentId, setSelectedEnvironmentId] = useState<string>('');
|
|
111
|
+
const [customRef, setCustomRef] = useState<string>('');
|
|
112
|
+
const [customCandidate, setCustomCandidate] = useState<CustomCommitPickerCandidate | null>(null);
|
|
113
|
+
const [originRepositoryUrlOverride, setOriginRepositoryUrlOverride] = useState<string>('');
|
|
114
|
+
const [isAdvancedExpanded, setIsAdvancedExpanded] = useState<boolean>(false);
|
|
61
115
|
const [isLoading, setIsLoading] = useState(true);
|
|
62
116
|
const [isStartingUpdate, setIsStartingUpdate] = useState(false);
|
|
63
117
|
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
|
64
118
|
const [successMessage, setSuccessMessage] = useState<string | null>(null);
|
|
65
119
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
120
|
+
const loadOverview = useCallback(
|
|
121
|
+
async (options?: { readonly isSilent?: boolean; readonly isRestartExpected?: boolean }): Promise<void> => {
|
|
122
|
+
try {
|
|
123
|
+
if (!options?.isSilent) {
|
|
124
|
+
setIsLoading(true);
|
|
125
|
+
}
|
|
126
|
+
setErrorMessage(null);
|
|
127
|
+
|
|
128
|
+
const response = await fetch('/api/admin/update', { cache: 'no-store' });
|
|
129
|
+
const payload = (await response.json()) as UpdateOverview;
|
|
130
|
+
|
|
131
|
+
if (!response.ok) {
|
|
132
|
+
throw new Error(payload.error || 'Failed to load the update overview.');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
setOverview(payload);
|
|
136
|
+
setSelectedEnvironmentId(
|
|
137
|
+
(currentSelectedEnvironmentId) => currentSelectedEnvironmentId || payload.currentEnvironment.id,
|
|
138
|
+
);
|
|
139
|
+
setOriginRepositoryUrlOverride((currentValue) => currentValue || payload.originRepositoryUrl);
|
|
140
|
+
if (payload.job.status === 'succeeded') {
|
|
141
|
+
setSuccessMessage(getUpdateJobSuccessMessage(payload.job));
|
|
142
|
+
} else if (payload.job.status === 'failed') {
|
|
143
|
+
setSuccessMessage(null);
|
|
144
|
+
}
|
|
145
|
+
} catch (error) {
|
|
146
|
+
if (options?.isRestartExpected) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
setErrorMessage(error instanceof Error ? error.message : 'Failed to load the update overview.');
|
|
151
|
+
} finally {
|
|
152
|
+
if (!options?.isSilent) {
|
|
153
|
+
setIsLoading(false);
|
|
154
|
+
}
|
|
92
155
|
}
|
|
93
|
-
}
|
|
94
|
-
|
|
156
|
+
},
|
|
157
|
+
[],
|
|
158
|
+
);
|
|
95
159
|
|
|
96
160
|
useEffect(() => {
|
|
97
161
|
void loadOverview();
|
|
@@ -103,7 +167,7 @@ export function UpdateClient() {
|
|
|
103
167
|
}
|
|
104
168
|
|
|
105
169
|
const interval = window.setInterval(() => {
|
|
106
|
-
void loadOverview({ isSilent: true });
|
|
170
|
+
void loadOverview({ isSilent: true, isRestartExpected: true });
|
|
107
171
|
}, 4000);
|
|
108
172
|
|
|
109
173
|
return () => {
|
|
@@ -118,13 +182,18 @@ export function UpdateClient() {
|
|
|
118
182
|
null,
|
|
119
183
|
[overview, selectedEnvironmentId],
|
|
120
184
|
);
|
|
185
|
+
const isCustomEnvironmentSelected = selectedEnvironment?.isCustom === true;
|
|
121
186
|
const isEnvironmentSwitchRequired =
|
|
122
187
|
Boolean(selectedEnvironment) && selectedEnvironment?.id !== overview?.currentEnvironment.id;
|
|
123
188
|
const isUpdateRunning = overview?.job.status === 'running';
|
|
189
|
+
const updateTerminalId = `standalone-vps-update:${overview?.job.startedAt || overview?.job.finishedAt || overview?.job.status || 'loading'}`;
|
|
190
|
+
const updateTerminalEmptyState =
|
|
191
|
+
isLoading && !overview ? 'Loading update log...' : 'No persisted update log output yet.';
|
|
192
|
+
const isCustomRefRelease = isCustomEnvironmentSelected ? customCandidate?.isReleaseTag === true : true;
|
|
193
|
+
const isCustomRefMissing = isCustomEnvironmentSelected && !customRef.trim();
|
|
194
|
+
const isOriginOverrideChanged =
|
|
195
|
+
overview !== null && originRepositoryUrlOverride.trim() !== overview.originRepositoryUrl;
|
|
124
196
|
|
|
125
|
-
/**
|
|
126
|
-
* Starts one detached update run for the selected environment.
|
|
127
|
-
*/
|
|
128
197
|
async function startUpdate(): Promise<void> {
|
|
129
198
|
if (!selectedEnvironment) {
|
|
130
199
|
return;
|
|
@@ -142,6 +211,8 @@ export function UpdateClient() {
|
|
|
142
211
|
},
|
|
143
212
|
body: JSON.stringify({
|
|
144
213
|
environment: selectedEnvironment.id,
|
|
214
|
+
customRef: isCustomEnvironmentSelected ? customRef.trim() : null,
|
|
215
|
+
originRepositoryUrl: isOriginOverrideChanged ? originRepositoryUrlOverride.trim() : null,
|
|
145
216
|
}),
|
|
146
217
|
});
|
|
147
218
|
const payload = (await response.json()) as UpdateOverview;
|
|
@@ -152,9 +223,11 @@ export function UpdateClient() {
|
|
|
152
223
|
|
|
153
224
|
setOverview(payload);
|
|
154
225
|
setSuccessMessage(
|
|
155
|
-
|
|
156
|
-
? `
|
|
157
|
-
:
|
|
226
|
+
isCustomEnvironmentSelected
|
|
227
|
+
? `Started the standalone VPS update to custom ref ${customRef.trim()}.`
|
|
228
|
+
: isEnvironmentSwitchRequired
|
|
229
|
+
? `Switched to ${selectedEnvironment.label} and started the standalone VPS update.`
|
|
230
|
+
: 'Standalone VPS update started.',
|
|
158
231
|
);
|
|
159
232
|
} catch (error) {
|
|
160
233
|
setErrorMessage(error instanceof Error ? error.message : 'Failed to start the update.');
|
|
@@ -169,8 +242,8 @@ export function UpdateClient() {
|
|
|
169
242
|
<div>
|
|
170
243
|
<h1 className="text-3xl font-light text-gray-900">Update</h1>
|
|
171
244
|
<p className="mt-1 max-w-3xl text-sm text-gray-500">
|
|
172
|
-
Switch the standalone VPS between
|
|
173
|
-
Promptbook checkout with one click.
|
|
245
|
+
Switch the standalone VPS between Live, Preview, Production, LTS, or a custom ref, and update
|
|
246
|
+
the managed Promptbook checkout with one click.
|
|
174
247
|
</p>
|
|
175
248
|
</div>
|
|
176
249
|
|
|
@@ -204,77 +277,7 @@ export function UpdateClient() {
|
|
|
204
277
|
|
|
205
278
|
<div className="grid gap-4 lg:grid-cols-[1.4fr_1fr]">
|
|
206
279
|
<Card className="hover:border-gray-200 hover:shadow-md">
|
|
207
|
-
<
|
|
208
|
-
<div className="flex items-start gap-3">
|
|
209
|
-
<Server className="mt-0.5 h-5 w-5 text-blue-600" />
|
|
210
|
-
<div>
|
|
211
|
-
<h2 className="text-lg font-semibold text-slate-900">Current deployment</h2>
|
|
212
|
-
<p className="mt-1 text-sm text-slate-500">
|
|
213
|
-
The server currently tracks the <span className="font-medium">{overview?.currentEnvironment.label || 'Production'}</span>{' '}
|
|
214
|
-
environment on branch <span className="font-mono">{overview?.currentEnvironment.branch || 'production'}</span>.
|
|
215
|
-
</p>
|
|
216
|
-
</div>
|
|
217
|
-
</div>
|
|
218
|
-
|
|
219
|
-
<dl className="grid gap-4 text-sm text-slate-600 sm:grid-cols-2">
|
|
220
|
-
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
221
|
-
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Branch</dt>
|
|
222
|
-
<dd className="mt-1 font-mono text-slate-900">
|
|
223
|
-
{overview?.currentEnvironment.branch || 'production'}
|
|
224
|
-
</dd>
|
|
225
|
-
</div>
|
|
226
|
-
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
227
|
-
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
228
|
-
Deployed commit
|
|
229
|
-
</dt>
|
|
230
|
-
<dd className="mt-1 font-mono text-slate-900">
|
|
231
|
-
{overview?.currentCommitShortSha || 'Unknown'}
|
|
232
|
-
</dd>
|
|
233
|
-
</div>
|
|
234
|
-
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
235
|
-
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
236
|
-
Latest remote commit
|
|
237
|
-
</dt>
|
|
238
|
-
<dd className="mt-1 font-mono text-slate-900">
|
|
239
|
-
{overview?.latestRemoteCommitShortSha || 'Unknown'}
|
|
240
|
-
</dd>
|
|
241
|
-
</div>
|
|
242
|
-
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
243
|
-
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
244
|
-
Update availability
|
|
245
|
-
</dt>
|
|
246
|
-
<dd className="mt-1 flex items-center gap-2 text-slate-900">
|
|
247
|
-
{overview?.isUpdateAvailable ? (
|
|
248
|
-
<>
|
|
249
|
-
<TriangleAlert className="h-4 w-4 text-amber-500" />
|
|
250
|
-
New commit available
|
|
251
|
-
</>
|
|
252
|
-
) : (
|
|
253
|
-
<>
|
|
254
|
-
<CheckCircle2 className="h-4 w-4 text-emerald-600" />
|
|
255
|
-
Up to date
|
|
256
|
-
</>
|
|
257
|
-
)}
|
|
258
|
-
</dd>
|
|
259
|
-
</div>
|
|
260
|
-
</dl>
|
|
261
|
-
|
|
262
|
-
{overview?.currentCommitMessage && (
|
|
263
|
-
<div className="rounded-xl border border-slate-200 bg-white px-4 py-3 text-sm text-slate-600">
|
|
264
|
-
<div className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
265
|
-
Current commit message
|
|
266
|
-
</div>
|
|
267
|
-
<div className="mt-1 text-slate-900">{overview.currentCommitMessage}</div>
|
|
268
|
-
</div>
|
|
269
|
-
)}
|
|
270
|
-
|
|
271
|
-
{overview?.repositoryDirectory && (
|
|
272
|
-
<div className="text-xs text-slate-500">
|
|
273
|
-
Managed repository:
|
|
274
|
-
<span className="ml-2 font-mono text-slate-700">{overview.repositoryDirectory}</span>
|
|
275
|
-
</div>
|
|
276
|
-
)}
|
|
277
|
-
</div>
|
|
280
|
+
<CurrentDeploymentCard overview={overview} language={language} />
|
|
278
281
|
</Card>
|
|
279
282
|
|
|
280
283
|
<Card className="hover:border-gray-200 hover:shadow-md">
|
|
@@ -312,13 +315,48 @@ export function UpdateClient() {
|
|
|
312
315
|
</span>
|
|
313
316
|
)}
|
|
314
317
|
</div>
|
|
315
|
-
|
|
318
|
+
{environment.branch && (
|
|
319
|
+
<div className="mt-1 font-mono text-xs">{environment.branch}</div>
|
|
320
|
+
)}
|
|
316
321
|
<div className="mt-2 text-sm opacity-80">{environment.description}</div>
|
|
317
322
|
</button>
|
|
318
323
|
);
|
|
319
324
|
})}
|
|
320
325
|
</div>
|
|
321
326
|
|
|
327
|
+
{isCustomEnvironmentSelected && overview?.isAvailable && (
|
|
328
|
+
<div className="space-y-3 rounded-xl border border-blue-200 bg-blue-50/40 p-4">
|
|
329
|
+
<CustomCommitPicker
|
|
330
|
+
language={language}
|
|
331
|
+
selectedRef={customRef}
|
|
332
|
+
onSelectRef={(nextRef, matchedCandidate) => {
|
|
333
|
+
setCustomRef(nextRef);
|
|
334
|
+
setCustomCandidate(matchedCandidate);
|
|
335
|
+
}}
|
|
336
|
+
isDisabled={isUpdateRunning || isStartingUpdate}
|
|
337
|
+
/>
|
|
338
|
+
|
|
339
|
+
{customRef.trim() && !isCustomRefRelease && (
|
|
340
|
+
<div className="flex items-start gap-2 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800">
|
|
341
|
+
<TriangleAlert className="mt-0.5 h-4 w-4 shrink-0" />
|
|
342
|
+
<div>
|
|
343
|
+
<strong>Heads up:</strong> the selected ref is not a release tag, so it may
|
|
344
|
+
be unstable and was not validated by the regular release pipeline.
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
)}
|
|
348
|
+
</div>
|
|
349
|
+
)}
|
|
350
|
+
|
|
351
|
+
<AdvancedOriginRepositoryPanel
|
|
352
|
+
originRepositoryUrlOverride={originRepositoryUrlOverride}
|
|
353
|
+
onChange={setOriginRepositoryUrlOverride}
|
|
354
|
+
overview={overview}
|
|
355
|
+
isExpanded={isAdvancedExpanded}
|
|
356
|
+
onToggleExpanded={() => setIsAdvancedExpanded((current) => !current)}
|
|
357
|
+
isDisabled={isUpdateRunning || isStartingUpdate}
|
|
358
|
+
/>
|
|
359
|
+
|
|
322
360
|
<button
|
|
323
361
|
type="button"
|
|
324
362
|
onClick={() => void startUpdate()}
|
|
@@ -327,20 +365,28 @@ export function UpdateClient() {
|
|
|
327
365
|
!selectedEnvironment ||
|
|
328
366
|
isUpdateRunning ||
|
|
329
367
|
isStartingUpdate ||
|
|
330
|
-
|
|
368
|
+
isCustomRefMissing ||
|
|
369
|
+
(!isCustomEnvironmentSelected &&
|
|
370
|
+
!isEnvironmentSwitchRequired &&
|
|
371
|
+
!overview?.isUpdateAvailable &&
|
|
372
|
+
!isOriginOverrideChanged)
|
|
331
373
|
}
|
|
332
374
|
className="inline-flex w-full items-center justify-center gap-2 rounded-md bg-blue-600 px-4 py-3 text-sm font-semibold text-white hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-60"
|
|
333
375
|
>
|
|
334
376
|
{isStartingUpdate || isUpdateRunning ? (
|
|
335
377
|
<Loader2 className="h-4 w-4 animate-spin" />
|
|
378
|
+
) : isCustomEnvironmentSelected ? (
|
|
379
|
+
<Rocket className="h-4 w-4" />
|
|
336
380
|
) : isEnvironmentSwitchRequired ? (
|
|
337
381
|
<Rocket className="h-4 w-4" />
|
|
338
382
|
) : (
|
|
339
383
|
<Download className="h-4 w-4" />
|
|
340
384
|
)}
|
|
341
|
-
{
|
|
342
|
-
? `
|
|
343
|
-
:
|
|
385
|
+
{isCustomEnvironmentSelected
|
|
386
|
+
? `Update to ${customRef.trim() || 'custom ref'}`
|
|
387
|
+
: isEnvironmentSwitchRequired
|
|
388
|
+
? `Switch to ${selectedEnvironment?.label || 'selected environment'} and update`
|
|
389
|
+
: 'Update to latest commit'}
|
|
344
390
|
</button>
|
|
345
391
|
</div>
|
|
346
392
|
</Card>
|
|
@@ -374,7 +420,9 @@ export function UpdateClient() {
|
|
|
374
420
|
<dl className="grid gap-4 text-sm text-slate-600 md:grid-cols-2 xl:grid-cols-4">
|
|
375
421
|
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
376
422
|
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Target</dt>
|
|
377
|
-
<dd className="mt-1 text-slate-900">
|
|
423
|
+
<dd className="mt-1 text-slate-900">
|
|
424
|
+
{overview?.job.targetEnvironment.label || 'Production'}
|
|
425
|
+
</dd>
|
|
378
426
|
</div>
|
|
379
427
|
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
380
428
|
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Step</dt>
|
|
@@ -382,22 +430,26 @@ export function UpdateClient() {
|
|
|
382
430
|
</div>
|
|
383
431
|
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
384
432
|
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Started</dt>
|
|
385
|
-
<dd className="mt-1 text-slate-900">
|
|
433
|
+
<dd className="mt-1 text-slate-900">
|
|
434
|
+
{formatHumanReadableTimestamp(overview?.job.startedAt, language)}
|
|
435
|
+
</dd>
|
|
386
436
|
</div>
|
|
387
437
|
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
388
438
|
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Finished</dt>
|
|
389
|
-
<dd className="mt-1 text-slate-900">
|
|
439
|
+
<dd className="mt-1 text-slate-900">
|
|
440
|
+
{formatHumanReadableTimestamp(overview?.job.finishedAt, language)}
|
|
441
|
+
</dd>
|
|
390
442
|
</div>
|
|
391
443
|
</dl>
|
|
392
444
|
|
|
393
|
-
{overview?.job.
|
|
394
|
-
<div className="rounded-xl border border-
|
|
395
|
-
{overview.job
|
|
445
|
+
{overview?.job.status === 'succeeded' && (
|
|
446
|
+
<div className="rounded-xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-700">
|
|
447
|
+
{getUpdateJobSuccessMessage(overview.job)}
|
|
396
448
|
</div>
|
|
397
449
|
)}
|
|
398
|
-
{overview?.job.
|
|
399
|
-
<div className="rounded-xl border border-
|
|
400
|
-
|
|
450
|
+
{overview?.job.status === 'failed' && (
|
|
451
|
+
<div className="rounded-xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700">
|
|
452
|
+
{getUpdateJobFailureMessage(overview.job)}
|
|
401
453
|
</div>
|
|
402
454
|
)}
|
|
403
455
|
{overview?.job.logFilePath && (
|
|
@@ -406,30 +458,449 @@ export function UpdateClient() {
|
|
|
406
458
|
<span className="ml-2 font-mono text-slate-700">{overview.job.logFilePath}</span>
|
|
407
459
|
</div>
|
|
408
460
|
)}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
461
|
+
{overview?.job.status === 'failed' && <UpdateJobLogActions />}
|
|
462
|
+
<AdminXtermTerminal
|
|
463
|
+
terminalId={updateTerminalId}
|
|
464
|
+
output={overview?.job.logTail || ''}
|
|
465
|
+
emptyState={updateTerminalEmptyState}
|
|
466
|
+
isReadOnly
|
|
467
|
+
isPlainTextOutput
|
|
468
|
+
ariaLabel="Standalone VPS update log"
|
|
469
|
+
/>
|
|
412
470
|
</div>
|
|
413
471
|
</Card>
|
|
472
|
+
|
|
473
|
+
<PendingCommitsCard overview={overview} language={language} />
|
|
414
474
|
</div>
|
|
415
475
|
);
|
|
416
476
|
}
|
|
417
477
|
|
|
418
478
|
/**
|
|
419
|
-
*
|
|
479
|
+
* Current-deployment metrics card, including the new commits-behind and time-behind info.
|
|
420
480
|
*
|
|
421
|
-
* @
|
|
422
|
-
|
|
481
|
+
* @private internal component of `<UpdateClient/>`
|
|
482
|
+
*/
|
|
483
|
+
function CurrentDeploymentCard({
|
|
484
|
+
overview,
|
|
485
|
+
language,
|
|
486
|
+
}: {
|
|
487
|
+
readonly overview: UpdateOverview | null;
|
|
488
|
+
readonly language: ServerLanguageCode;
|
|
489
|
+
}) {
|
|
490
|
+
const currentCommitDateLabel = formatHumanReadableTimestamp(overview?.currentCommitDate ?? null, language);
|
|
491
|
+
const latestRemoteCommitDateLabel = formatHumanReadableTimestamp(
|
|
492
|
+
overview?.latestRemoteCommitDate ?? null,
|
|
493
|
+
language,
|
|
494
|
+
);
|
|
495
|
+
const driftLabel = useMemo(
|
|
496
|
+
() => buildDeploymentDriftLabel(overview, language),
|
|
497
|
+
[overview, language],
|
|
498
|
+
);
|
|
499
|
+
|
|
500
|
+
return (
|
|
501
|
+
<div className="space-y-4">
|
|
502
|
+
<div className="flex items-start gap-3">
|
|
503
|
+
<Server className="mt-0.5 h-5 w-5 text-blue-600" />
|
|
504
|
+
<div>
|
|
505
|
+
<h2 className="text-lg font-semibold text-slate-900">Current deployment</h2>
|
|
506
|
+
<p className="mt-1 text-sm text-slate-500">
|
|
507
|
+
The server currently tracks the{' '}
|
|
508
|
+
<span className="font-medium">
|
|
509
|
+
{overview?.currentEnvironment.label || 'Production'}
|
|
510
|
+
</span>{' '}
|
|
511
|
+
environment on branch{' '}
|
|
512
|
+
<span className="font-mono">{overview?.currentEnvironment.branch || 'production'}</span>.
|
|
513
|
+
</p>
|
|
514
|
+
</div>
|
|
515
|
+
</div>
|
|
516
|
+
|
|
517
|
+
<dl className="grid gap-4 text-sm text-slate-600 sm:grid-cols-2">
|
|
518
|
+
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
519
|
+
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Branch</dt>
|
|
520
|
+
<dd className="mt-1 font-mono text-slate-900">
|
|
521
|
+
{overview?.currentEnvironment.branch || 'production'}
|
|
522
|
+
</dd>
|
|
523
|
+
</div>
|
|
524
|
+
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
525
|
+
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">Deployed commit</dt>
|
|
526
|
+
<dd className="mt-1 font-mono text-slate-900">{overview?.currentCommitShortSha || 'Unknown'}</dd>
|
|
527
|
+
<div className="mt-1 text-xs text-slate-500">{currentCommitDateLabel}</div>
|
|
528
|
+
</div>
|
|
529
|
+
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
530
|
+
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
531
|
+
Latest remote commit
|
|
532
|
+
</dt>
|
|
533
|
+
<dd className="mt-1 font-mono text-slate-900">
|
|
534
|
+
{overview?.latestRemoteCommitShortSha || 'Unknown'}
|
|
535
|
+
</dd>
|
|
536
|
+
<div className="mt-1 text-xs text-slate-500">{latestRemoteCommitDateLabel}</div>
|
|
537
|
+
</div>
|
|
538
|
+
<div className="rounded-xl border border-slate-200 bg-slate-50 px-4 py-3">
|
|
539
|
+
<dt className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
540
|
+
Update availability
|
|
541
|
+
</dt>
|
|
542
|
+
<dd className="mt-1 flex items-center gap-2 text-slate-900">
|
|
543
|
+
{overview?.isUpdateAvailable ? (
|
|
544
|
+
<>
|
|
545
|
+
<TriangleAlert className="h-4 w-4 text-amber-500" />
|
|
546
|
+
{driftLabel}
|
|
547
|
+
</>
|
|
548
|
+
) : (
|
|
549
|
+
<>
|
|
550
|
+
<CheckCircle2 className="h-4 w-4 text-emerald-600" />
|
|
551
|
+
Up to date
|
|
552
|
+
</>
|
|
553
|
+
)}
|
|
554
|
+
</dd>
|
|
555
|
+
</div>
|
|
556
|
+
</dl>
|
|
557
|
+
|
|
558
|
+
{overview?.currentCommitMessage && (
|
|
559
|
+
<div className="rounded-xl border border-slate-200 bg-white px-4 py-3 text-sm text-slate-600">
|
|
560
|
+
<div className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
561
|
+
Current commit message
|
|
562
|
+
</div>
|
|
563
|
+
<div className="mt-1 text-slate-900">{overview.currentCommitMessage}</div>
|
|
564
|
+
</div>
|
|
565
|
+
)}
|
|
566
|
+
|
|
567
|
+
{overview?.repositoryDirectory && (
|
|
568
|
+
<div className="text-xs text-slate-500">
|
|
569
|
+
Managed repository:
|
|
570
|
+
<span className="ml-2 font-mono text-slate-700">{overview.repositoryDirectory}</span>
|
|
571
|
+
</div>
|
|
572
|
+
)}
|
|
573
|
+
</div>
|
|
574
|
+
);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Lists the commits between the deployed checkout and the latest remote commit so the super admin can review what
|
|
579
|
+
* exactly is about to be installed before triggering the self-update.
|
|
580
|
+
*
|
|
581
|
+
* @private internal component of `<UpdateClient/>`
|
|
582
|
+
*/
|
|
583
|
+
function PendingCommitsCard({
|
|
584
|
+
overview,
|
|
585
|
+
language,
|
|
586
|
+
}: {
|
|
587
|
+
readonly overview: UpdateOverview | null;
|
|
588
|
+
readonly language: ServerLanguageCode;
|
|
589
|
+
}) {
|
|
590
|
+
if (!overview || overview.pendingCommits.length === 0) {
|
|
591
|
+
return null;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
const commitsBehindLabel =
|
|
595
|
+
overview.commitsBehindCount !== null && overview.commitsBehindCount > 0
|
|
596
|
+
? `${overview.commitsBehindCount} commit${overview.commitsBehindCount === 1 ? '' : 's'} behind`
|
|
597
|
+
: `${overview.pendingCommits.length} commit${overview.pendingCommits.length === 1 ? '' : 's'} pending`;
|
|
598
|
+
const timeBehindLabel = buildDeploymentTimeBehindLabel(overview, language);
|
|
599
|
+
|
|
600
|
+
return (
|
|
601
|
+
<Card className="hover:border-gray-200 hover:shadow-md">
|
|
602
|
+
<div className="space-y-4">
|
|
603
|
+
<div className="flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between">
|
|
604
|
+
<div className="flex items-start gap-3">
|
|
605
|
+
<GitCommit className="mt-0.5 h-5 w-5 text-amber-500" />
|
|
606
|
+
<div>
|
|
607
|
+
<h2 className="text-lg font-semibold text-slate-900">Pending commits</h2>
|
|
608
|
+
<p className="mt-1 text-sm text-slate-500">
|
|
609
|
+
Commits between the currently deployed checkout and the latest commit on{' '}
|
|
610
|
+
<span className="font-mono">{overview.currentEnvironment.branch}</span>.
|
|
611
|
+
</p>
|
|
612
|
+
</div>
|
|
613
|
+
</div>
|
|
614
|
+
<div className="text-xs font-semibold uppercase tracking-wide text-slate-500 sm:text-right">
|
|
615
|
+
<div>{commitsBehindLabel}</div>
|
|
616
|
+
{timeBehindLabel && <div className="mt-1 normal-case text-slate-400">{timeBehindLabel}</div>}
|
|
617
|
+
</div>
|
|
618
|
+
</div>
|
|
619
|
+
|
|
620
|
+
<ul className="divide-y divide-slate-100 rounded-xl border border-slate-200 bg-white">
|
|
621
|
+
{overview.pendingCommits.map((pendingCommit) => (
|
|
622
|
+
<li key={pendingCommit.commitSha} className="px-4 py-3">
|
|
623
|
+
<div className="flex flex-wrap items-baseline gap-x-3 gap-y-1">
|
|
624
|
+
<span className="font-mono text-xs text-slate-500">
|
|
625
|
+
{pendingCommit.shortCommitSha}
|
|
626
|
+
</span>
|
|
627
|
+
<span className="text-sm text-slate-900">{pendingCommit.subject}</span>
|
|
628
|
+
</div>
|
|
629
|
+
<div className="mt-1 text-xs text-slate-500">
|
|
630
|
+
{formatHumanReadableTimestamp(pendingCommit.authoredAt, language)}
|
|
631
|
+
</div>
|
|
632
|
+
</li>
|
|
633
|
+
))}
|
|
634
|
+
</ul>
|
|
635
|
+
</div>
|
|
636
|
+
</Card>
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Renders the copy / download actions for the persisted standalone VPS self-update log file.
|
|
642
|
+
*
|
|
643
|
+
* Shown when the latest update job failed so the super admin can quickly share the full log with the developers.
|
|
644
|
+
*
|
|
645
|
+
* @private internal component of `<UpdateClient/>`
|
|
423
646
|
*/
|
|
424
|
-
function
|
|
425
|
-
|
|
426
|
-
|
|
647
|
+
function UpdateJobLogActions() {
|
|
648
|
+
const [actionFeedback, setActionFeedback] = useState<string | null>(null);
|
|
649
|
+
const [actionErrorMessage, setActionErrorMessage] = useState<string | null>(null);
|
|
650
|
+
const [isCopying, setIsCopying] = useState(false);
|
|
651
|
+
const [isDownloading, setIsDownloading] = useState(false);
|
|
652
|
+
const feedbackTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
653
|
+
|
|
654
|
+
useEffect(() => {
|
|
655
|
+
return () => {
|
|
656
|
+
if (feedbackTimeoutRef.current !== null) {
|
|
657
|
+
clearTimeout(feedbackTimeoutRef.current);
|
|
658
|
+
feedbackTimeoutRef.current = null;
|
|
659
|
+
}
|
|
660
|
+
};
|
|
661
|
+
}, []);
|
|
662
|
+
|
|
663
|
+
function showActionFeedback(feedbackMessage: string): void {
|
|
664
|
+
if (feedbackTimeoutRef.current !== null) {
|
|
665
|
+
clearTimeout(feedbackTimeoutRef.current);
|
|
666
|
+
}
|
|
667
|
+
setActionFeedback(feedbackMessage);
|
|
668
|
+
setActionErrorMessage(null);
|
|
669
|
+
feedbackTimeoutRef.current = setTimeout(() => {
|
|
670
|
+
setActionFeedback(null);
|
|
671
|
+
feedbackTimeoutRef.current = null;
|
|
672
|
+
}, UPDATE_LOG_ACTION_FEEDBACK_DURATION_MS);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
async function fetchUpdateLogResponse(): Promise<Response> {
|
|
676
|
+
const response = await fetch('/api/admin/update/log', { cache: 'no-store' });
|
|
677
|
+
if (!response.ok) {
|
|
678
|
+
const errorPayload = (await response.json().catch(() => null)) as { readonly error?: string } | null;
|
|
679
|
+
throw new Error(errorPayload?.error || 'Failed to load the self-update log file.');
|
|
680
|
+
}
|
|
681
|
+
return response;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
async function handleCopyLog(): Promise<void> {
|
|
685
|
+
if (isCopying || isDownloading) {
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
try {
|
|
690
|
+
setIsCopying(true);
|
|
691
|
+
setActionErrorMessage(null);
|
|
692
|
+
if (!navigator.clipboard?.writeText) {
|
|
693
|
+
throw new Error('The browser clipboard API is unavailable in this context.');
|
|
694
|
+
}
|
|
695
|
+
const response = await fetchUpdateLogResponse();
|
|
696
|
+
const logContent = await response.text();
|
|
697
|
+
await navigator.clipboard.writeText(logContent);
|
|
698
|
+
showActionFeedback('Self-update log copied to clipboard.');
|
|
699
|
+
} catch (error) {
|
|
700
|
+
setActionErrorMessage(error instanceof Error ? error.message : 'Failed to copy the self-update log.');
|
|
701
|
+
} finally {
|
|
702
|
+
setIsCopying(false);
|
|
703
|
+
}
|
|
427
704
|
}
|
|
428
705
|
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
706
|
+
async function handleDownloadLog(): Promise<void> {
|
|
707
|
+
if (isCopying || isDownloading) {
|
|
708
|
+
return;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
try {
|
|
712
|
+
setIsDownloading(true);
|
|
713
|
+
setActionErrorMessage(null);
|
|
714
|
+
const response = await fetchUpdateLogResponse();
|
|
715
|
+
const logFilename =
|
|
716
|
+
parseFilenameFromContentDisposition(response.headers.get('Content-Disposition')) ||
|
|
717
|
+
DEFAULT_UPDATE_LOG_DOWNLOAD_FILENAME;
|
|
718
|
+
const logBlob = await response.blob();
|
|
719
|
+
downloadBlob(logBlob, logFilename);
|
|
720
|
+
showActionFeedback(`Saved self-update log as ${logFilename}.`);
|
|
721
|
+
} catch (error) {
|
|
722
|
+
setActionErrorMessage(error instanceof Error ? error.message : 'Failed to download the self-update log.');
|
|
723
|
+
} finally {
|
|
724
|
+
setIsDownloading(false);
|
|
725
|
+
}
|
|
432
726
|
}
|
|
433
727
|
|
|
434
|
-
return
|
|
728
|
+
return (
|
|
729
|
+
<div className="flex flex-wrap items-center gap-3 rounded-xl border border-rose-200 bg-rose-50/40 px-4 py-3 text-sm text-rose-700">
|
|
730
|
+
<span className="font-medium">Share the log with the developers:</span>
|
|
731
|
+
<button
|
|
732
|
+
type="button"
|
|
733
|
+
onClick={() => void handleCopyLog()}
|
|
734
|
+
disabled={isCopying || isDownloading}
|
|
735
|
+
className="inline-flex items-center gap-2 rounded-md border border-rose-200 bg-white px-3 py-1.5 text-xs font-semibold text-rose-700 hover:bg-rose-100 disabled:cursor-not-allowed disabled:opacity-60"
|
|
736
|
+
>
|
|
737
|
+
{isCopying ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <ClipboardCopy className="h-3.5 w-3.5" />}
|
|
738
|
+
Copy log
|
|
739
|
+
</button>
|
|
740
|
+
<button
|
|
741
|
+
type="button"
|
|
742
|
+
onClick={() => void handleDownloadLog()}
|
|
743
|
+
disabled={isCopying || isDownloading}
|
|
744
|
+
className="inline-flex items-center gap-2 rounded-md border border-rose-200 bg-white px-3 py-1.5 text-xs font-semibold text-rose-700 hover:bg-rose-100 disabled:cursor-not-allowed disabled:opacity-60"
|
|
745
|
+
>
|
|
746
|
+
{isDownloading ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : <FileDown className="h-3.5 w-3.5" />}
|
|
747
|
+
Download log
|
|
748
|
+
</button>
|
|
749
|
+
{actionFeedback && (
|
|
750
|
+
<span className="text-xs text-rose-600" role="status" aria-live="polite">
|
|
751
|
+
{actionFeedback}
|
|
752
|
+
</span>
|
|
753
|
+
)}
|
|
754
|
+
{actionErrorMessage && (
|
|
755
|
+
<span className="text-xs text-rose-700" role="alert">
|
|
756
|
+
{actionErrorMessage}
|
|
757
|
+
</span>
|
|
758
|
+
)}
|
|
759
|
+
</div>
|
|
760
|
+
);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
* Collapsible advanced panel for overriding the upstream repository URL.
|
|
765
|
+
*
|
|
766
|
+
* @private internal component of `<UpdateClient/>`
|
|
767
|
+
*/
|
|
768
|
+
function AdvancedOriginRepositoryPanel({
|
|
769
|
+
originRepositoryUrlOverride,
|
|
770
|
+
onChange,
|
|
771
|
+
overview,
|
|
772
|
+
isExpanded,
|
|
773
|
+
onToggleExpanded,
|
|
774
|
+
isDisabled,
|
|
775
|
+
}: {
|
|
776
|
+
readonly originRepositoryUrlOverride: string;
|
|
777
|
+
readonly onChange: (nextValue: string) => void;
|
|
778
|
+
readonly overview: UpdateOverview | null;
|
|
779
|
+
readonly isExpanded: boolean;
|
|
780
|
+
readonly onToggleExpanded: () => void;
|
|
781
|
+
readonly isDisabled: boolean;
|
|
782
|
+
}) {
|
|
783
|
+
return (
|
|
784
|
+
<div className="rounded-xl border border-slate-200 bg-white">
|
|
785
|
+
<button
|
|
786
|
+
type="button"
|
|
787
|
+
onClick={onToggleExpanded}
|
|
788
|
+
className="flex w-full items-center justify-between gap-3 px-4 py-3 text-sm font-semibold text-slate-700"
|
|
789
|
+
>
|
|
790
|
+
<span className="inline-flex items-center gap-2">
|
|
791
|
+
<Settings2 className="h-4 w-4" />
|
|
792
|
+
Advanced
|
|
793
|
+
</span>
|
|
794
|
+
{isExpanded ? <ChevronUp className="h-4 w-4" /> : <ChevronDown className="h-4 w-4" />}
|
|
795
|
+
</button>
|
|
796
|
+
{isExpanded && (
|
|
797
|
+
<div className="space-y-3 border-t border-slate-100 px-4 py-3 text-sm text-slate-600">
|
|
798
|
+
<label className="block">
|
|
799
|
+
<span className="text-xs font-semibold uppercase tracking-wide text-slate-500">
|
|
800
|
+
Upstream repository URL
|
|
801
|
+
</span>
|
|
802
|
+
<input
|
|
803
|
+
type="url"
|
|
804
|
+
value={originRepositoryUrlOverride}
|
|
805
|
+
onChange={(event) => onChange(event.target.value)}
|
|
806
|
+
disabled={isDisabled}
|
|
807
|
+
placeholder={overview?.defaultOriginRepositoryUrl || ''}
|
|
808
|
+
className="mt-1 w-full rounded-md border border-slate-300 bg-white px-3 py-2 font-mono text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:cursor-not-allowed disabled:opacity-60"
|
|
809
|
+
/>
|
|
810
|
+
</label>
|
|
811
|
+
<p className="text-xs text-slate-500">
|
|
812
|
+
Defaults to <span className="font-mono">{overview?.defaultOriginRepositoryUrl}</span>. Only
|
|
813
|
+
change this if you self-host a fork of the original Promptbook repository — the new value is
|
|
814
|
+
persisted in the standalone VPS <code>.env</code>.
|
|
815
|
+
</p>
|
|
816
|
+
{overview && !overview.isOriginRepositoryDefault && (
|
|
817
|
+
<div className="rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800">
|
|
818
|
+
<strong>Custom origin active:</strong> updates currently pull from{' '}
|
|
819
|
+
<span className="font-mono">{overview.originRepositoryUrl}</span>.
|
|
820
|
+
</div>
|
|
821
|
+
)}
|
|
822
|
+
</div>
|
|
823
|
+
)}
|
|
824
|
+
</div>
|
|
825
|
+
);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Builds the "behind by …" label combining commits-behind and time-behind info.
|
|
830
|
+
*
|
|
831
|
+
* @param overview - Current overview snapshot.
|
|
832
|
+
* @param language - Active UI language for moment localization.
|
|
833
|
+
* @returns Human-readable label or fallback text.
|
|
834
|
+
*/
|
|
835
|
+
function buildDeploymentDriftLabel(overview: UpdateOverview | null, language: ServerLanguageCode): string {
|
|
836
|
+
if (!overview) {
|
|
837
|
+
return 'New commit available';
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
const commitsBehindLabel =
|
|
841
|
+
overview.commitsBehindCount !== null && overview.commitsBehindCount > 0
|
|
842
|
+
? `${overview.commitsBehindCount} commit${overview.commitsBehindCount === 1 ? '' : 's'} behind`
|
|
843
|
+
: 'New commit available';
|
|
844
|
+
|
|
845
|
+
const timeBehindLabel = buildDeploymentTimeBehindLabel(overview, language);
|
|
846
|
+
if (!timeBehindLabel) {
|
|
847
|
+
return commitsBehindLabel;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
return `${commitsBehindLabel} · ${timeBehindLabel}`;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* Builds the localized time-behind portion of the deployment drift label (e.g. `3 days behind`).
|
|
855
|
+
*
|
|
856
|
+
* @param overview - Current overview snapshot.
|
|
857
|
+
* @param language - Active UI language for moment localization.
|
|
858
|
+
* @returns Time-behind label or empty string when either side of the comparison is missing.
|
|
859
|
+
*/
|
|
860
|
+
function buildDeploymentTimeBehindLabel(overview: UpdateOverview | null, language: ServerLanguageCode): string {
|
|
861
|
+
if (!overview?.currentCommitDate || !overview.latestRemoteCommitDate) {
|
|
862
|
+
return '';
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
const currentMoment = createServerLanguageMoment(overview.currentCommitDate, language);
|
|
866
|
+
const latestMoment = createServerLanguageMoment(overview.latestRemoteCommitDate, language);
|
|
867
|
+
if (!currentMoment.isValid() || !latestMoment.isValid()) {
|
|
868
|
+
return '';
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
return `${currentMoment.from(latestMoment, true)} behind`;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
/**
|
|
875
|
+
* Builds the success message for a finished standalone VPS update.
|
|
876
|
+
*
|
|
877
|
+
* @param job - Completed update job snapshot.
|
|
878
|
+
* @returns Human-readable success message.
|
|
879
|
+
*/
|
|
880
|
+
function getUpdateJobSuccessMessage(job: UpdateJobSnapshot): string {
|
|
881
|
+
return job.currentStep || 'Standalone VPS update finished successfully.';
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
/**
|
|
885
|
+
* Builds the failure message for a failed standalone VPS update.
|
|
886
|
+
*
|
|
887
|
+
* @param job - Failed update job snapshot.
|
|
888
|
+
* @returns Human-readable failure message.
|
|
889
|
+
*/
|
|
890
|
+
function getUpdateJobFailureMessage(job: UpdateJobSnapshot): string {
|
|
891
|
+
return job.errorMessage || 'The standalone VPS update failed. Review the installer log for details.';
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
/**
|
|
895
|
+
* Formats optional timestamps for the status cards using `moment.js` with the active UI language.
|
|
896
|
+
*
|
|
897
|
+
* @param value - ISO timestamp or `null`.
|
|
898
|
+
* @param language - Active UI language code.
|
|
899
|
+
* @returns Localized human-friendly timestamp or fallback text.
|
|
900
|
+
*/
|
|
901
|
+
function formatHumanReadableTimestamp(value: string | null | undefined, language: ServerLanguageCode): string {
|
|
902
|
+
return formatServerLanguageHumanReadableDate(value, language, {
|
|
903
|
+
fallbackLabel: 'Not available',
|
|
904
|
+
isExactDateIncluded: true,
|
|
905
|
+
});
|
|
435
906
|
}
|