@promptbook/cli 0.103.0-10 → 0.103.0-100
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 +59 -35
- package/apps/agents-server/README.md +3 -0
- package/apps/agents-server/TODO.txt +7 -0
- package/apps/agents-server/config.ts +128 -0
- package/apps/agents-server/next.config.ts +45 -0
- package/apps/agents-server/package-lock.json +1163 -0
- package/apps/agents-server/package.json +18 -0
- package/apps/agents-server/postcss.config.mjs +8 -0
- package/apps/agents-server/public/.gitkeep +0 -0
- package/apps/agents-server/public/favicon.ico +0 -0
- package/apps/agents-server/public/fonts/OpenMoji-black-glyf.woff2 +0 -0
- package/apps/agents-server/public/fonts/download-font.js +22 -0
- package/apps/agents-server/public/logo-blue-white-256.png +0 -0
- package/apps/agents-server/public/sw.js +16 -0
- package/apps/agents-server/src/app/AddAgentButton.tsx +41 -0
- package/apps/agents-server/src/app/[agentName]/[...rest]/page.tsx +11 -0
- package/apps/agents-server/src/app/[agentName]/page.tsx +1 -0
- package/apps/agents-server/src/app/actions.ts +51 -0
- package/apps/agents-server/src/app/admin/api-tokens/ApiTokensClient.tsx +186 -0
- package/apps/agents-server/src/app/admin/api-tokens/page.tsx +13 -0
- package/apps/agents-server/src/app/admin/chat-feedback/ChatFeedbackClient.tsx +614 -0
- package/apps/agents-server/src/app/admin/chat-feedback/page.tsx +22 -0
- package/apps/agents-server/src/app/admin/chat-history/ChatHistoryClient.tsx +634 -0
- package/apps/agents-server/src/app/admin/chat-history/page.tsx +21 -0
- package/apps/agents-server/src/app/admin/metadata/MetadataClient.tsx +477 -0
- package/apps/agents-server/src/app/admin/metadata/page.tsx +13 -0
- package/apps/agents-server/src/app/admin/models/page.tsx +22 -0
- package/apps/agents-server/src/app/admin/users/[userId]/UserDetailClient.tsx +131 -0
- package/apps/agents-server/src/app/admin/users/[userId]/page.tsx +21 -0
- package/apps/agents-server/src/app/admin/users/page.tsx +18 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentChatWrapper.tsx +78 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentOptionsMenu.tsx +216 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentProfileChat.tsx +78 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentProfileView.tsx +233 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentQrCode.tsx +55 -0
- package/apps/agents-server/src/app/agents/[agentName]/AgentUrlCopy.tsx +40 -0
- package/apps/agents-server/src/app/agents/[agentName]/ClearAgentChatFeedbackButton.tsx +63 -0
- package/apps/agents-server/src/app/agents/[agentName]/ClearAgentChatHistoryButton.tsx +63 -0
- package/apps/agents-server/src/app/agents/[agentName]/CloneAgentButton.tsx +41 -0
- package/apps/agents-server/src/app/agents/[agentName]/CopyField.tsx +44 -0
- package/apps/agents-server/src/app/agents/[agentName]/InstallPwaButton.tsx +74 -0
- package/apps/agents-server/src/app/agents/[agentName]/QrCodeModal.tsx +90 -0
- package/apps/agents-server/src/app/agents/[agentName]/ServiceWorkerRegister.tsx +24 -0
- package/apps/agents-server/src/app/agents/[agentName]/TODO.txt +1 -0
- package/apps/agents-server/src/app/agents/[agentName]/_utils.ts +19 -0
- package/apps/agents-server/src/app/agents/[agentName]/agentLinks.tsx +80 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/agents/route.ts +67 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/book/route.ts +88 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/book/test.http +37 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/chat/route.ts +174 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/feedback/route.ts +54 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/mcp/route.ts +203 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/TODO.txt +1 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/route.ts +55 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/systemMessage/route.ts +47 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/openai/chat/completions/route.ts +10 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/openai/models/route.ts +93 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/openai/v1/chat/completions/route.ts +10 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/openai/v1/models/route.ts +93 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/openrouter/chat/completions/route.ts +10 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/profile/route.ts +76 -0
- package/apps/agents-server/src/app/agents/[agentName]/api/voice/route.ts +181 -0
- package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorWrapper.tsx +139 -0
- package/apps/agents-server/src/app/agents/[agentName]/book/page.tsx +35 -0
- package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChat.tsx +75 -0
- package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChatComponent.tsx.todo +160 -0
- package/apps/agents-server/src/app/agents/[agentName]/book+chat/page.tsx +32 -0
- package/apps/agents-server/src/app/agents/[agentName]/book+chat/page.tsx.todo +21 -0
- package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatWrapper.tsx +68 -0
- package/apps/agents-server/src/app/agents/[agentName]/chat/page.tsx +33 -0
- package/apps/agents-server/src/app/agents/[agentName]/generateAgentMetadata.ts +42 -0
- package/apps/agents-server/src/app/agents/[agentName]/history/RestoreVersionButton.tsx +46 -0
- package/apps/agents-server/src/app/agents/[agentName]/history/actions.ts +12 -0
- package/apps/agents-server/src/app/agents/[agentName]/history/page.tsx +62 -0
- package/apps/agents-server/src/app/agents/[agentName]/images/icon-256.png/route.tsx +80 -0
- package/apps/agents-server/src/app/agents/[agentName]/images/screenshot-fullhd.png/route.tsx +92 -0
- package/apps/agents-server/src/app/agents/[agentName]/images/screenshot-phone.png/route.tsx +92 -0
- package/apps/agents-server/src/app/agents/[agentName]/integration/SdkCodeTabs.tsx +31 -0
- package/apps/agents-server/src/app/agents/[agentName]/integration/page.tsx +302 -0
- package/apps/agents-server/src/app/agents/[agentName]/links/page.tsx +182 -0
- package/apps/agents-server/src/app/agents/[agentName]/opengraph-image.tsx +102 -0
- package/apps/agents-server/src/app/agents/[agentName]/page.tsx +159 -0
- package/apps/agents-server/src/app/agents/[agentName]/website-integration/page.tsx +61 -0
- package/apps/agents-server/src/app/agents/page.tsx +11 -0
- package/apps/agents-server/src/app/api/agents/[agentName]/clone/route.ts +47 -0
- package/apps/agents-server/src/app/api/agents/[agentName]/route.ts +19 -0
- package/apps/agents-server/src/app/api/agents/route.ts +43 -0
- package/apps/agents-server/src/app/api/api-tokens/route.ts +76 -0
- package/apps/agents-server/src/app/api/auth/change-password/route.ts +75 -0
- package/apps/agents-server/src/app/api/auth/login/route.ts +27 -0
- package/apps/agents-server/src/app/api/auth/logout/route.ts +7 -0
- package/apps/agents-server/src/app/api/chat/route.ts +32 -0
- package/apps/agents-server/src/app/api/chat-feedback/[id]/route.ts +38 -0
- package/apps/agents-server/src/app/api/chat-feedback/export/route.ts +55 -0
- package/apps/agents-server/src/app/api/chat-feedback/route.ts +157 -0
- package/apps/agents-server/src/app/api/chat-history/[id]/route.ts +37 -0
- package/apps/agents-server/src/app/api/chat-history/export/route.ts +55 -0
- package/apps/agents-server/src/app/api/chat-history/route.ts +147 -0
- package/apps/agents-server/src/app/api/chat-streaming/route.ts +48 -0
- package/apps/agents-server/src/app/api/embed.js/route.ts +93 -0
- package/apps/agents-server/src/app/api/federated-agents/route.ts +17 -0
- package/apps/agents-server/src/app/api/long-running-task/route.ts +7 -0
- package/apps/agents-server/src/app/api/long-streaming/route.ts +20 -0
- package/apps/agents-server/src/app/api/metadata/route.ts +116 -0
- package/apps/agents-server/src/app/api/openai/v1/chat/completions/route.ts +6 -0
- package/apps/agents-server/src/app/api/openai/v1/models/route.ts +65 -0
- package/apps/agents-server/src/app/api/upload/route.ts +83 -0
- package/apps/agents-server/src/app/api/users/[username]/route.ts +75 -0
- package/apps/agents-server/src/app/api/users/route.ts +71 -0
- package/apps/agents-server/src/app/docs/[docId]/page.tsx +43 -0
- package/apps/agents-server/src/app/docs/page.tsx +59 -0
- package/apps/agents-server/src/app/embed/page.tsx +24 -0
- package/apps/agents-server/src/app/globals.css +276 -0
- package/apps/agents-server/src/app/layout.tsx +124 -0
- package/apps/agents-server/src/app/manifest.ts +109 -0
- package/apps/agents-server/src/app/not-found.tsx +5 -0
- package/apps/agents-server/src/app/page.tsx +96 -0
- package/apps/agents-server/src/app/recycle-bin/RestoreAgentButton.tsx +40 -0
- package/apps/agents-server/src/app/recycle-bin/actions.ts +27 -0
- package/apps/agents-server/src/app/recycle-bin/page.tsx +58 -0
- package/apps/agents-server/src/app/restricted/page.tsx +33 -0
- package/apps/agents-server/src/app/test/og-image/README.md +1 -0
- package/apps/agents-server/src/app/test/og-image/opengraph-image.tsx +37 -0
- package/apps/agents-server/src/app/test/og-image/page.tsx +22 -0
- package/apps/agents-server/src/components/Auth/AuthControls.tsx +123 -0
- package/apps/agents-server/src/components/ChangePasswordDialog/ChangePasswordDialog.tsx +41 -0
- package/apps/agents-server/src/components/ChangePasswordForm/ChangePasswordForm.tsx +159 -0
- package/apps/agents-server/src/components/DocumentationContent/DocumentationContent.tsx +87 -0
- package/apps/agents-server/src/components/ErrorPage/ErrorPage.tsx +33 -0
- package/apps/agents-server/src/components/Footer/Footer.tsx +175 -0
- package/apps/agents-server/src/components/ForbiddenPage/ForbiddenPage.tsx +15 -0
- package/apps/agents-server/src/components/Header/Header.tsx +593 -0
- package/apps/agents-server/src/components/Homepage/AgentCard.tsx +60 -0
- package/apps/agents-server/src/components/Homepage/AgentsList.tsx +58 -0
- package/apps/agents-server/src/components/Homepage/Card.tsx +18 -0
- package/apps/agents-server/src/components/Homepage/ExternalAgentsSection.tsx +21 -0
- package/apps/agents-server/src/components/Homepage/ExternalAgentsSectionClient.tsx +183 -0
- package/apps/agents-server/src/components/Homepage/ModelCard.tsx +29 -0
- package/apps/agents-server/src/components/Homepage/ModelsSection.tsx +75 -0
- package/apps/agents-server/src/components/Homepage/Section.tsx +17 -0
- package/apps/agents-server/src/components/Homepage/TechInfoCard.tsx +20 -0
- package/apps/agents-server/src/components/LayoutWrapper/LayoutWrapper.tsx +53 -0
- package/apps/agents-server/src/components/LoginDialog/LoginDialog.tsx +41 -0
- package/apps/agents-server/src/components/LoginForm/LoginForm.tsx +109 -0
- package/apps/agents-server/src/components/NotFoundPage/NotFoundPage.tsx +17 -0
- package/apps/agents-server/src/components/OpenMojiIcon/OpenMojiIcon.tsx +20 -0
- package/apps/agents-server/src/components/Portal/Portal.tsx +38 -0
- package/apps/agents-server/src/components/PrintButton/PrintButton.tsx +18 -0
- package/apps/agents-server/src/components/PrintHeader/PrintHeader.tsx +18 -0
- package/apps/agents-server/src/components/UsersList/UsersList.tsx +141 -0
- package/apps/agents-server/src/components/UsersList/useUsersAdmin.ts +139 -0
- package/apps/agents-server/src/components/VercelDeploymentCard/VercelDeploymentCard.tsx +55 -0
- package/apps/agents-server/src/database/$getTableName.ts +18 -0
- package/apps/agents-server/src/database/$provideSupabase.ts +29 -0
- package/apps/agents-server/src/database/$provideSupabaseForBrowser.ts +41 -0
- package/apps/agents-server/src/database/$provideSupabaseForServer.ts +48 -0
- package/apps/agents-server/src/database/$provideSupabaseForWorker.ts +43 -0
- package/apps/agents-server/src/database/getMetadata.ts +31 -0
- package/apps/agents-server/src/database/metadataDefaults.ts +69 -0
- package/apps/agents-server/src/database/migrate.ts +131 -0
- package/apps/agents-server/src/database/migrations/2025-11-0001-initial-schema.sql +163 -0
- package/apps/agents-server/src/database/migrations/2025-11-0002-metadata-table.sql +16 -0
- package/apps/agents-server/src/database/migrations/2025-12-0010-llm-cache.sql +12 -0
- package/apps/agents-server/src/database/migrations/2025-12-0060-api-tokens.sql +13 -0
- package/apps/agents-server/src/database/migrations/2025-12-0070-chat-history-source.sql +2 -0
- package/apps/agents-server/src/database/schema.ts +308 -0
- package/apps/agents-server/src/deamons/longRunningTask.ts +37 -0
- package/apps/agents-server/src/middleware.ts +301 -0
- package/apps/agents-server/src/tools/$provideAgentCollectionForServer.ts +54 -0
- package/apps/agents-server/src/tools/$provideCdnForServer.ts +24 -0
- package/apps/agents-server/src/tools/$provideExecutionToolsForServer.ts +117 -0
- package/apps/agents-server/src/tools/$provideOpenAiAssistantExecutionToolsForServer.ts +35 -0
- package/apps/agents-server/src/tools/$provideServer.ts +39 -0
- package/apps/agents-server/src/utils/auth.ts +33 -0
- package/apps/agents-server/src/utils/authenticateUser.ts +42 -0
- package/apps/agents-server/src/utils/cache/SupabaseCacheStorage.ts +55 -0
- package/apps/agents-server/src/utils/cdn/classes/VercelBlobStorage.ts +63 -0
- package/apps/agents-server/src/utils/cdn/interfaces/IFilesStorage.ts +32 -0
- package/apps/agents-server/src/utils/cdn/interfaces/IStorage.ts +14 -0
- package/apps/agents-server/src/utils/cdn/utils/getUserFileCdnKey.ts +28 -0
- package/apps/agents-server/src/utils/cdn/utils/nameToSubfolderPath.ts +9 -0
- package/apps/agents-server/src/utils/cdn/utils/nextRequestToNodeRequest.ts +27 -0
- package/apps/agents-server/src/utils/chatFeedbackAdmin.ts +96 -0
- package/apps/agents-server/src/utils/chatHistoryAdmin.ts +96 -0
- package/apps/agents-server/src/utils/convertToCsv.ts +31 -0
- package/apps/agents-server/src/utils/getCurrentUser.ts +32 -0
- package/apps/agents-server/src/utils/getEffectiveFederatedServers.ts +22 -0
- package/apps/agents-server/src/utils/getFederatedAgents.ts +89 -0
- package/apps/agents-server/src/utils/getFederatedServersFromMetadata.ts +10 -0
- package/apps/agents-server/src/utils/getVisibleCommitmentDefinitions.ts +12 -0
- package/apps/agents-server/src/utils/handleChatCompletion.ts +355 -0
- package/apps/agents-server/src/utils/isIpAllowed.ts +101 -0
- package/apps/agents-server/src/utils/isUserAdmin.ts +31 -0
- package/apps/agents-server/src/utils/resolveInheritedAgentSource.ts +100 -0
- package/apps/agents-server/src/utils/session.ts +50 -0
- package/apps/agents-server/src/utils/validateApiKey.ts +128 -0
- package/apps/agents-server/src/utils/validators/validateMimeType.ts +24 -0
- package/apps/agents-server/tailwind.config.ts +26 -0
- package/apps/agents-server/tsconfig.json +29 -0
- package/apps/agents-server/vercel.json +7 -0
- package/esm/index.es.js +5114 -383
- package/esm/index.es.js.map +1 -1
- package/esm/typings/books/index.d.ts +0 -81
- package/esm/typings/servers.d.ts +9 -7
- package/esm/typings/src/_packages/browser.index.d.ts +6 -0
- package/esm/typings/src/_packages/cli.index.d.ts +4 -0
- package/esm/typings/src/_packages/components.index.d.ts +20 -8
- package/esm/typings/src/_packages/core.index.d.ts +58 -18
- package/esm/typings/src/_packages/node.index.d.ts +2 -2
- package/esm/typings/src/_packages/remote-server.index.d.ts +2 -0
- package/esm/typings/src/_packages/types.index.d.ts +58 -8
- package/esm/typings/src/_packages/utils.index.d.ts +6 -0
- package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
- package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +19 -5
- package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +17 -1
- package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +3 -2
- package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
- package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +3 -3
- package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
- package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
- package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +18 -0
- package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
- package/esm/typings/src/book-2.0/agent-source/string_book.d.ts +3 -0
- package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfile.d.ts +6 -1
- package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +77 -7
- package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +14 -0
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +14 -0
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
- package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +10 -0
- package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
- package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
- package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
- package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
- package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
- package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
- package/esm/typings/src/book-components/Chat/types/ChatParticipant.d.ts +1 -1
- package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgent.d.ts +29 -0
- package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
- package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
- package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
- package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
- package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
- package/esm/typings/src/book-components/_common/HamburgerMenu/HamburgerMenu.d.ts +12 -0
- package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +2 -2
- package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
- package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
- package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
- package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
- package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
- package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
- package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
- package/esm/typings/src/book-components/icons/MicIcon.d.ts +8 -0
- package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
- package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
- package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
- package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
- package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
- package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +12 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +75 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +154 -0
- package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
- package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
- package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
- package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
- package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
- package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts +1 -0
- package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
- package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
- package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
- package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
- package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +5 -1
- package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +35 -0
- package/esm/typings/src/commitments/COMPONENT/COMPONENT.d.ts +28 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +5 -1
- package/esm/typings/src/commitments/FROM/FROM.d.ts +34 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +5 -5
- package/esm/typings/src/commitments/LANGUAGE/LANGUAGE.d.ts +35 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +5 -1
- package/esm/typings/src/commitments/MESSAGE/AgentMessageCommitmentDefinition.d.ts +32 -0
- package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +32 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +5 -1
- package/esm/typings/src/commitments/MESSAGE/UserMessageCommitmentDefinition.d.ts +32 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +5 -1
- package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +48 -0
- package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +5 -1
- package/esm/typings/src/commitments/OPEN/OPEN.d.ts +35 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +5 -1
- package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
- package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +38 -0
- package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
- package/esm/typings/src/commitments/USE_MCP/USE_MCP.d.ts +37 -0
- package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +8 -2
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +6 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
- package/esm/typings/src/commitments/index.d.ts +93 -0
- package/esm/typings/src/config.d.ts +24 -3
- package/esm/typings/src/conversion/validation/validatePipeline.d.ts +2 -0
- package/esm/typings/src/errors/0-index.d.ts +6 -0
- package/esm/typings/src/errors/DatabaseError.d.ts +12 -0
- package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
- package/esm/typings/src/errors/WrappedError.d.ts +2 -2
- package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
- package/esm/typings/src/execution/Executables.d.ts +3 -0
- package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
- package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
- package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
- package/esm/typings/src/execution/LlmExecutionTools.d.ts +21 -1
- package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
- package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
- package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
- package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
- package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
- package/esm/typings/src/execution/utils/validatePromptResult.d.ts +2 -0
- package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
- package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
- package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
- package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
- package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
- package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -0
- package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -0
- package/esm/typings/src/llm-providers/agent/Agent.d.ts +70 -0
- package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +26 -4
- package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +19 -0
- package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +17 -0
- package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +50 -0
- package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
- package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
- package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +60 -2
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
- package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
- package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
- package/esm/typings/src/pipeline/validatePipelineString.d.ts +2 -0
- package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
- package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
- package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +1 -0
- package/esm/typings/src/remote-server/startAgentServer.d.ts +26 -0
- package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
- package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +3 -8
- package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
- package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
- package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
- package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +33 -0
- package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
- package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
- package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +16 -0
- package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
- package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +16 -0
- package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
- package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
- package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
- package/esm/typings/src/types/LlmCall.d.ts +20 -0
- package/esm/typings/src/types/Updatable.d.ts +19 -0
- package/esm/typings/src/types/typeAliases.d.ts +32 -2
- package/esm/typings/src/utils/color/$randomColor.d.ts +1 -0
- package/esm/typings/src/utils/color/Color.d.ts +15 -0
- package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
- package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
- package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
- package/esm/typings/src/utils/color/operators/darken.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/grayscale.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/lighten.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/mixWithColor.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/saturate.d.ts +1 -1
- package/esm/typings/src/utils/environment/$detectRuntimeEnvironment.d.ts +16 -0
- package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
- package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
- package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
- package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
- package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
- package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
- package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
- package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +27 -0
- package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
- package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
- package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
- package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
- package/esm/typings/src/utils/normalization/normalizeMessageText.d.ts +9 -0
- package/esm/typings/src/utils/normalization/normalizeMessageText.test.d.ts +1 -0
- package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
- package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
- package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
- package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
- package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
- package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
- package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
- package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
- package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
- package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +25 -0
- package/esm/typings/src/utils/random/$randomAgentPersona.d.ts +9 -0
- package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +13 -0
- package/esm/typings/src/utils/random/$randomItem.d.ts +9 -0
- package/esm/typings/src/utils/random/$randomSeed.d.ts +3 -0
- package/esm/typings/src/utils/random/$randomToken.d.ts +2 -0
- package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
- package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
- package/esm/typings/src/utils/serialization/serializeToPromptbookJavascript.d.ts +2 -2
- package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +2 -0
- package/esm/typings/src/version.d.ts +1 -1
- package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
- package/package.json +15 -15
- package/umd/index.umd.js +5089 -356
- package/umd/index.umd.js.map +1 -1
- package/esm/typings/src/book-2.0/commitments/index.d.ts +0 -60
- package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -11
- package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
- package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
- package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
- /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → book-2.0/agent-source/computeAgentHash.test.d.ts} +0 -0
- /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → book-2.0/agent-source/normalizeAgentName.test.d.ts} +0 -0
- /package/esm/typings/src/{collection/constructors/createCollectionFromJson.test.d.ts → book-components/Chat/AgentChat/AgentChat.test.d.ts} +0 -0
- /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
- /package/esm/typings/src/{commands/_common/parseCommand.test.d.ts → collection/pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
- /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
- /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
- /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/ParsedCommitment.d.ts +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ResizablePanelsAuto } from '@common/components/ResizablePanelsAuto/ResizablePanelsAuto';
|
|
4
|
+
import { string_agent_url, string_book } from '@promptbook-local/types';
|
|
5
|
+
import { Book, MessageSquare } from 'lucide-react';
|
|
6
|
+
import { useEffect, useState } from 'react';
|
|
7
|
+
import { AgentChatWrapper } from '../AgentChatWrapper';
|
|
8
|
+
import { BookEditorWrapper } from '../book/BookEditorWrapper';
|
|
9
|
+
|
|
10
|
+
type AgentBookAndChatProps = {
|
|
11
|
+
agentName: string;
|
|
12
|
+
initialAgentSource: string_book;
|
|
13
|
+
agentUrl: string_agent_url;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export function AgentBookAndChat(props: AgentBookAndChatProps) {
|
|
17
|
+
const { agentName, initialAgentSource, agentUrl } = props;
|
|
18
|
+
const [isMobile, setIsMobile] = useState(false);
|
|
19
|
+
const [activeTab, setActiveTab] = useState<'book' | 'chat'>('chat');
|
|
20
|
+
const [isMounted, setIsMounted] = useState(false);
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setIsMounted(true);
|
|
24
|
+
const checkMobile = () => setIsMobile(window.innerWidth < 1024);
|
|
25
|
+
checkMobile();
|
|
26
|
+
window.addEventListener('resize', checkMobile);
|
|
27
|
+
return () => window.removeEventListener('resize', checkMobile);
|
|
28
|
+
}, []);
|
|
29
|
+
|
|
30
|
+
if (!isMounted) {
|
|
31
|
+
return <div className="w-full h-full bg-white" />;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (isMobile) {
|
|
35
|
+
return (
|
|
36
|
+
<div className="flex flex-col h-full w-full bg-white">
|
|
37
|
+
<div className="flex-grow overflow-hidden relative">
|
|
38
|
+
<div className={`w-full h-full ${activeTab === 'book' ? 'block' : 'hidden'}`}>
|
|
39
|
+
<BookEditorWrapper agentName={agentName} initialAgentSource={initialAgentSource} />
|
|
40
|
+
</div>
|
|
41
|
+
<div className={`w-full h-full ${activeTab === 'chat' ? 'block' : 'hidden'}`}>
|
|
42
|
+
<AgentChatWrapper agentUrl={agentUrl} />
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div className="flex-shrink-0 h-16 bg-white border-t border-gray-200 flex shadow-[0_-4px_6px_-1px_rgba(0,0,0,0.05)] z-10">
|
|
46
|
+
<button
|
|
47
|
+
onClick={() => setActiveTab('book')}
|
|
48
|
+
className={`flex-1 flex flex-col items-center justify-center gap-1 transition-colors ${
|
|
49
|
+
activeTab === 'book' ? 'text-blue-600 bg-blue-50/50' : 'text-gray-500 hover:bg-gray-50'
|
|
50
|
+
}`}
|
|
51
|
+
>
|
|
52
|
+
<Book className="w-5 h-5" />
|
|
53
|
+
<span className="text-xs font-medium">Info</span>
|
|
54
|
+
</button>
|
|
55
|
+
<button
|
|
56
|
+
onClick={() => setActiveTab('chat')}
|
|
57
|
+
className={`flex-1 flex flex-col items-center justify-center gap-1 transition-colors ${
|
|
58
|
+
activeTab === 'chat' ? 'text-blue-600 bg-blue-50/50' : 'text-gray-500 hover:bg-gray-50'
|
|
59
|
+
}`}
|
|
60
|
+
>
|
|
61
|
+
<MessageSquare className="w-5 h-5" />
|
|
62
|
+
<span className="text-xs font-medium">Chat</span>
|
|
63
|
+
</button>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<ResizablePanelsAuto name={`agent-book-and-chat-${agentName}`} className="w-full h-full">
|
|
71
|
+
<BookEditorWrapper agentName={agentName} initialAgentSource={initialAgentSource} />
|
|
72
|
+
<AgentChatWrapper agentUrl={agentUrl} />
|
|
73
|
+
</ResizablePanelsAuto>
|
|
74
|
+
);
|
|
75
|
+
}
|
package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChatComponent.tsx.todo
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ResizablePanelsAuto } from '@common/components/ResizablePanelsAuto/ResizablePanelsAuto';
|
|
4
|
+
import { useStateInLocalStorage } from '@common/hooks/useStateInLocalStorage';
|
|
5
|
+
import { AgentChat, BookEditor } from '@promptbook-local/components';
|
|
6
|
+
import { Agent, book } from '@promptbook-local/core';
|
|
7
|
+
// import { RemoteLlmExecutionTools } from '@promptbook-local/remote-client';
|
|
8
|
+
import { OpenAiAssistantExecutionTools } from '@promptbook-local/openai';
|
|
9
|
+
import type { string_book } from '@promptbook-local/types';
|
|
10
|
+
import { useMemo, useState } from 'react';
|
|
11
|
+
|
|
12
|
+
export function AgentBookAndChatComponent() {
|
|
13
|
+
const [apiKey, setApiKey] = useStateInLocalStorage<string>('openai-apiKey', () => '');
|
|
14
|
+
const [isApiKeyVisible, setIsApiKeyVisible] = useState(false);
|
|
15
|
+
const [isApiKeySectionCollapsed, setIsApiKeySectionCollapsed] = useState(!!apiKey);
|
|
16
|
+
|
|
17
|
+
const [agentSource, setAgentSource] = useStateInLocalStorage<string_book>(
|
|
18
|
+
'marigold-agentSource-1',
|
|
19
|
+
// TODO: [🐱🚀] Uplad image to ptbk.io CDN
|
|
20
|
+
() => book`
|
|
21
|
+
Marigold
|
|
22
|
+
|
|
23
|
+
META IMAGE https://westlandsuk.co.uk/wp-content/uploads/2021/06/Inspired.MarigoldFlowers_CMYK_40mm.jpg
|
|
24
|
+
META COLOR #EC810B
|
|
25
|
+
|
|
26
|
+
PERSONA You are writing stories about Witcher
|
|
27
|
+
RULE Do not talk about our world, only about the Witcher universe
|
|
28
|
+
|
|
29
|
+
KNOWLEDGE {Geralt of Rivia}
|
|
30
|
+
Geralt of Rivia is a witcher, a monster hunter for hire, known for his white hair and cat-like eyes.
|
|
31
|
+
He possesses superhuman abilities due to mutations he underwent during the Trial of the Grasses.
|
|
32
|
+
Geralt is skilled in swordsmanship, alchemy, and magic signs.
|
|
33
|
+
He is often accompanied by his horse, Roach, and has a complex relationship with {Yennefer of Vengerberg},
|
|
34
|
+
a powerful sorceress, and {Ciri}, his adopted daughter with a destiny intertwined with his own.
|
|
35
|
+
His secret word is "Apple".
|
|
36
|
+
|
|
37
|
+
KNOWLEDGE {Yennefer of Vengerberg}
|
|
38
|
+
Yennefer of Vengerberg is a formidable sorceress known for her beauty, intelligence, and temper.
|
|
39
|
+
She has a complicated past, having been born with a hunchback and later transformed through magic.
|
|
40
|
+
Yennefer is deeply connected to Geralt of Rivia, with whom she shares a tumultuous romantic relationship.
|
|
41
|
+
She is also a mother figure to {Ciri}, whom she trains in the ways of magic.
|
|
42
|
+
Her secret word is "Banana".
|
|
43
|
+
|
|
44
|
+
KNOWLEDGE {Ciri}
|
|
45
|
+
Ciri, also known as {Cirilla Fiona Elen Riannon}, is a young woman with a mysterious past and a powerful destiny.
|
|
46
|
+
She is the daughter of {Poviss}, the ruler of the kingdom of Cintra, and possesses the Elder Blood, which grants her extraordinary abilities.
|
|
47
|
+
Ciri is a skilled fighter and has been trained in the ways of the sword by Geralt of Rivia.
|
|
48
|
+
Her destiny is intertwined with that of Geralt and Yennefer, as they both seek to protect her from those who would exploit her powers.
|
|
49
|
+
Her secret word is "Cherry".
|
|
50
|
+
|
|
51
|
+
`,
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const agent = useMemo(() => {
|
|
55
|
+
/*/
|
|
56
|
+
// TODO: [🐱🚀] Try working with `RemoteLlmExecutionTools`
|
|
57
|
+
const llm = new RemoteLlmExecutionTools({
|
|
58
|
+
remoteServerUrl: 'https://promptbook.s5.ptbk.io/',
|
|
59
|
+
identification: {
|
|
60
|
+
isAnonymous: false,
|
|
61
|
+
appId: '20a65fee-59f6-4d05-acd0-8e5ae8345488',
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
/**/
|
|
65
|
+
|
|
66
|
+
/**/
|
|
67
|
+
const llm = new OpenAiAssistantExecutionTools({
|
|
68
|
+
dangerouslyAllowBrowser: true,
|
|
69
|
+
isCreatingNewAssistantsAllowed: true, // <- TODO: [🐱🚀] Test without whether warning is shown
|
|
70
|
+
apiKey,
|
|
71
|
+
assistantId: 'asst_xI94Elk27nssnwAUkG2Cmok8', // <- TODO: [🧠] Make dynamic
|
|
72
|
+
isVerbose: true,
|
|
73
|
+
});
|
|
74
|
+
/**/
|
|
75
|
+
|
|
76
|
+
const agent = new Agent({
|
|
77
|
+
executionTools: {
|
|
78
|
+
llm,
|
|
79
|
+
},
|
|
80
|
+
agentSource: [agentSource, setAgentSource],
|
|
81
|
+
isVerbose: true,
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
return agent;
|
|
85
|
+
}, [agentSource, setAgentSource, apiKey]);
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<div className="min-h-screen relative">
|
|
89
|
+
{/* Floating API Key Configuration */}
|
|
90
|
+
<div className={`fixed top-24 right-4 z-50 ${isApiKeySectionCollapsed ? '' : 'min-w-[400px]'}`}>
|
|
91
|
+
{isApiKeySectionCollapsed ? (
|
|
92
|
+
// Collapsed state - small corner button
|
|
93
|
+
<button
|
|
94
|
+
onClick={() => setIsApiKeySectionCollapsed(false)}
|
|
95
|
+
className="bg-gray-100 hover:bg-gray-200 border border-gray-300 rounded-full p-2 shadow-lg transition-all flex items-center gap-1"
|
|
96
|
+
title="Configure OpenAI API Key"
|
|
97
|
+
>
|
|
98
|
+
<span className="text-sm">🔑</span>
|
|
99
|
+
</button>
|
|
100
|
+
) : (
|
|
101
|
+
// Expanded state - full configuration panel
|
|
102
|
+
<div className="bg-white border border-gray-300 rounded-lg shadow-lg">
|
|
103
|
+
<div className="flex items-center justify-between p-3 bg-gray-100 rounded-t-lg border-b border-gray-300">
|
|
104
|
+
<span className="font-medium text-sm">OpenAI API Key</span>
|
|
105
|
+
<button
|
|
106
|
+
onClick={() => setIsApiKeySectionCollapsed(true)}
|
|
107
|
+
className="text-gray-600 hover:text-gray-800 text-lg leading-none"
|
|
108
|
+
title="Collapse"
|
|
109
|
+
>
|
|
110
|
+
✕
|
|
111
|
+
</button>
|
|
112
|
+
</div>
|
|
113
|
+
<div className="p-3">
|
|
114
|
+
<label className="flex items-center gap-2">
|
|
115
|
+
<span className="text-sm font-medium whitespace-nowrap">API Key:</span>
|
|
116
|
+
<input
|
|
117
|
+
type={isApiKeyVisible ? 'text' : 'password'}
|
|
118
|
+
value={apiKey}
|
|
119
|
+
onChange={(e) => setApiKey(e.target.value)}
|
|
120
|
+
placeholder="sk-proj-..."
|
|
121
|
+
className="flex-1 px-3 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
122
|
+
/>
|
|
123
|
+
<button
|
|
124
|
+
type="button"
|
|
125
|
+
onClick={() => setIsApiKeyVisible(!isApiKeyVisible)}
|
|
126
|
+
className="px-2 py-2 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors text-sm"
|
|
127
|
+
title={isApiKeyVisible ? 'Hide API key' : 'Show API key'}
|
|
128
|
+
>
|
|
129
|
+
{isApiKeyVisible ? '🙈' : '👁️'}
|
|
130
|
+
</button>
|
|
131
|
+
</label>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
)}
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<ResizablePanelsAuto name="two-editors">
|
|
138
|
+
<BookEditor
|
|
139
|
+
className="w-full h-full"
|
|
140
|
+
isBorderRadiusDisabled
|
|
141
|
+
height={null}
|
|
142
|
+
value={agentSource}
|
|
143
|
+
onChange={setAgentSource}
|
|
144
|
+
// className={styles.BookEditor}
|
|
145
|
+
isVerbose={false}
|
|
146
|
+
onFileUpload={(file) => {
|
|
147
|
+
return file.name;
|
|
148
|
+
}}
|
|
149
|
+
/>
|
|
150
|
+
|
|
151
|
+
<AgentChat className={`h-full flex flex-col`} {...{ agent }} />
|
|
152
|
+
</ResizablePanelsAuto>
|
|
153
|
+
</div>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* TODO: [🐱🚀] Make self-learning book createAgentLlmExecutionTools, use bidirectional agentSource
|
|
159
|
+
* TODO: [🚗] Components and pages here should be just tiny UI wraper around proper agent logic and conponents
|
|
160
|
+
*/
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { ForbiddenPage } from '@/src/components/ForbiddenPage/ForbiddenPage';
|
|
4
|
+
import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
|
|
5
|
+
import { isUserAdmin } from '@/src/utils/isUserAdmin';
|
|
6
|
+
import { headers } from 'next/headers';
|
|
7
|
+
import { $sideEffect } from '../../../../../../../src/utils/organization/$sideEffect';
|
|
8
|
+
import { generateAgentMetadata } from '../generateAgentMetadata';
|
|
9
|
+
import { AgentBookAndChat } from './AgentBookAndChat';
|
|
10
|
+
|
|
11
|
+
export const generateMetadata = generateAgentMetadata;
|
|
12
|
+
|
|
13
|
+
export default async function AgentBookAndChatPage({ params }: { params: Promise<{ agentName: string }> }) {
|
|
14
|
+
$sideEffect(headers());
|
|
15
|
+
|
|
16
|
+
if (!(await isUserAdmin())) {
|
|
17
|
+
/* <- TODO: [👹] Here should be user permissions */
|
|
18
|
+
return <ForbiddenPage />;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let { agentName } = await params;
|
|
22
|
+
agentName = decodeURIComponent(agentName);
|
|
23
|
+
const collection = await $provideAgentCollectionForServer();
|
|
24
|
+
const agentSource = await collection.getAgentSource(agentName);
|
|
25
|
+
const agentUrl = `/agents/${agentName}`;
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div className={`w-screen h-[calc(100vh-60px)]`}>
|
|
29
|
+
<AgentBookAndChat agentName={agentName} initialAgentSource={agentSource} agentUrl={agentUrl} />
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import dynamic from 'next/dynamic';
|
|
4
|
+
|
|
5
|
+
const SelfLearningBook = dynamic(
|
|
6
|
+
() => import('./AgentBookAndChatComponent').then((module) => module.AgentBookAndChatComponent),
|
|
7
|
+
{
|
|
8
|
+
ssr: false,
|
|
9
|
+
},
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
export default function AgentBookAndChatPage() {
|
|
13
|
+
return <SelfLearningBook />;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* TODO: [🐱🚀] Private / public / open agents
|
|
18
|
+
* TODO: [🐱🚀] Allow http://localhost:4440/agents/agent-123.book to download the agent book file
|
|
19
|
+
* TODO: [🐱🚀] BOOK_MIME_TYPE in config
|
|
20
|
+
* TODO: [🚗] Components and pages here should be just tiny UI wraper around proper agent logic and conponents
|
|
21
|
+
*/
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePromise } from '@common/hooks/usePromise';
|
|
4
|
+
import { AgentChat } from '@promptbook-local/components';
|
|
5
|
+
import { RemoteAgent } from '@promptbook-local/core';
|
|
6
|
+
import { useCallback, useMemo } from 'react';
|
|
7
|
+
import { string_agent_url } from '../../../../../../../src/types/typeAliases';
|
|
8
|
+
|
|
9
|
+
type AgentChatWrapperProps = {
|
|
10
|
+
agentUrl: string_agent_url;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// TODO: [🐱🚀] Rename to AgentChatSomethingWrapper
|
|
14
|
+
|
|
15
|
+
export function AgentChatWrapper(props: AgentChatWrapperProps) {
|
|
16
|
+
const { agentUrl } = props;
|
|
17
|
+
|
|
18
|
+
const agentPromise = useMemo(
|
|
19
|
+
() =>
|
|
20
|
+
RemoteAgent.connect({
|
|
21
|
+
agentUrl,
|
|
22
|
+
isVerbose: true,
|
|
23
|
+
}),
|
|
24
|
+
[agentUrl],
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const { value: agent } = usePromise(agentPromise, [agentPromise]);
|
|
28
|
+
|
|
29
|
+
const handleFeedback = useCallback(
|
|
30
|
+
async (feedback: {
|
|
31
|
+
rating: number;
|
|
32
|
+
textRating?: string;
|
|
33
|
+
chatThread?: string;
|
|
34
|
+
userNote?: string;
|
|
35
|
+
expectedAnswer?: string | null;
|
|
36
|
+
}) => {
|
|
37
|
+
if (!agent) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
await fetch(`${agentUrl}/api/feedback`, {
|
|
42
|
+
method: 'POST',
|
|
43
|
+
headers: {
|
|
44
|
+
'Content-Type': 'application/json',
|
|
45
|
+
},
|
|
46
|
+
body: JSON.stringify({
|
|
47
|
+
rating: feedback.rating.toString(),
|
|
48
|
+
textRating: feedback.textRating,
|
|
49
|
+
chatThread: feedback.chatThread,
|
|
50
|
+
userNote: feedback.textRating, // Mapping textRating to userNote as well if needed, or just textRating
|
|
51
|
+
expectedAnswer: feedback.expectedAnswer,
|
|
52
|
+
agentHash: agent.agentHash,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
[agent, agentUrl],
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
if (!agent) {
|
|
60
|
+
return <>{/* <- TODO: [🐱🚀] <PromptbookLoading /> */}</>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return <AgentChat className={`w-full h-full`} agent={agent} onFeedback={handleFeedback} />;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* TODO: [🚗] Transfer the saving logic to `<BookEditor/>` be aware of CRDT / yjs approach to be implementable in future
|
|
68
|
+
*/
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { headers } from 'next/headers';
|
|
4
|
+
import { $sideEffect } from '../../../../../../../src/utils/organization/$sideEffect';
|
|
5
|
+
import { generateAgentMetadata } from '../generateAgentMetadata';
|
|
6
|
+
import { AgentChatWrapper } from '../AgentChatWrapper';
|
|
7
|
+
|
|
8
|
+
export const generateMetadata = generateAgentMetadata;
|
|
9
|
+
|
|
10
|
+
export default async function AgentChatPage({
|
|
11
|
+
params,
|
|
12
|
+
searchParams,
|
|
13
|
+
}: {
|
|
14
|
+
params: Promise<{ agentName: string }>;
|
|
15
|
+
searchParams: Promise<{ message?: string }>;
|
|
16
|
+
}) {
|
|
17
|
+
$sideEffect(headers());
|
|
18
|
+
let { agentName } = await params;
|
|
19
|
+
agentName = decodeURIComponent(agentName);
|
|
20
|
+
const { message } = await searchParams;
|
|
21
|
+
|
|
22
|
+
const agentUrl = `/agents/${agentName}`;
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<main className={`w-screen h-screen`}>
|
|
26
|
+
<AgentChatWrapper agentUrl={agentUrl} autoExecuteMessage={message} />
|
|
27
|
+
</main>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* TODO: [🚗] Components and pages here should be just tiny UI wraper around proper agent logic and conponents
|
|
33
|
+
*/
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { $provideServer } from '@/src/tools/$provideServer';
|
|
2
|
+
import { Metadata } from 'next';
|
|
3
|
+
import { getAgentName, getAgentProfile } from './_utils';
|
|
4
|
+
|
|
5
|
+
export async function generateAgentMetadata({ params }: { params: Promise<{ agentName: string }> }): Promise<Metadata> {
|
|
6
|
+
const { publicUrl } = await $provideServer();
|
|
7
|
+
const agentName = await getAgentName(params);
|
|
8
|
+
|
|
9
|
+
try {
|
|
10
|
+
const agentProfile = await getAgentProfile(agentName);
|
|
11
|
+
|
|
12
|
+
const title = agentProfile.meta.fullname || agentProfile.agentName;
|
|
13
|
+
const description = agentProfile.meta.description || agentProfile.personaDescription || undefined;
|
|
14
|
+
|
|
15
|
+
// Extract image from meta
|
|
16
|
+
const image = agentProfile.meta.image;
|
|
17
|
+
|
|
18
|
+
const metadata = {
|
|
19
|
+
metadataBase: publicUrl,
|
|
20
|
+
title,
|
|
21
|
+
description,
|
|
22
|
+
icons: image ? { icon: image } : undefined,
|
|
23
|
+
openGraph: {
|
|
24
|
+
title,
|
|
25
|
+
description,
|
|
26
|
+
type: 'website',
|
|
27
|
+
},
|
|
28
|
+
twitter: {
|
|
29
|
+
card: 'summary_large_image',
|
|
30
|
+
title,
|
|
31
|
+
description,
|
|
32
|
+
},
|
|
33
|
+
} satisfies Metadata;
|
|
34
|
+
|
|
35
|
+
return metadata;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.warn(`Failed to generate metadata for agent ${agentName}`, error);
|
|
38
|
+
return {
|
|
39
|
+
title: agentName,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { RefreshCcwIcon } from 'lucide-react';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { restoreAgentVersion } from './actions';
|
|
7
|
+
|
|
8
|
+
type RestoreVersionButtonProps = {
|
|
9
|
+
agentName: string;
|
|
10
|
+
historyId: number;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export function RestoreVersionButton({ agentName, historyId }: RestoreVersionButtonProps) {
|
|
14
|
+
const router = useRouter();
|
|
15
|
+
const [isRestoring, setIsRestoring] = useState(false);
|
|
16
|
+
|
|
17
|
+
const handleRestore = async () => {
|
|
18
|
+
if (!confirm('Are you sure you want to restore this version? Current changes will be saved to history.')) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
setIsRestoring(true);
|
|
24
|
+
await restoreAgentVersion(agentName, historyId);
|
|
25
|
+
router.refresh();
|
|
26
|
+
router.push(`/agents/${agentName}`);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.error('Failed to restore version:', error);
|
|
29
|
+
alert('Failed to restore version');
|
|
30
|
+
} finally {
|
|
31
|
+
setIsRestoring(false);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<button
|
|
37
|
+
onClick={handleRestore}
|
|
38
|
+
disabled={isRestoring}
|
|
39
|
+
className="flex items-center gap-2 px-3 py-1 text-sm bg-white border border-gray-300 rounded hover:bg-gray-50 text-gray-700 disabled:opacity-50"
|
|
40
|
+
title="Restore this version"
|
|
41
|
+
>
|
|
42
|
+
<RefreshCcwIcon className={`w-3 h-3 ${isRestoring ? 'animate-spin' : ''}`} />
|
|
43
|
+
{isRestoring ? 'Restoring...' : 'Restore'}
|
|
44
|
+
</button>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
|
|
4
|
+
import { revalidatePath } from 'next/cache';
|
|
5
|
+
|
|
6
|
+
export async function restoreAgentVersion(agentName: string, historyId: number) {
|
|
7
|
+
const collection = await $provideAgentCollectionForServer();
|
|
8
|
+
await collection.restoreAgent(historyId);
|
|
9
|
+
|
|
10
|
+
revalidatePath(`/agents/${agentName}`);
|
|
11
|
+
revalidatePath(`/agents/${agentName}/history`);
|
|
12
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
|
|
2
|
+
import { HistoryIcon } from 'lucide-react';
|
|
3
|
+
import Link from 'next/link';
|
|
4
|
+
import { RestoreVersionButton } from './RestoreVersionButton';
|
|
5
|
+
|
|
6
|
+
export const metadata = {
|
|
7
|
+
title: 'Agent History',
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default async function AgentHistoryPage({ params }: { params: Promise<{ agentName: string }> }) {
|
|
11
|
+
const { agentName } = await params;
|
|
12
|
+
const collection = await $provideAgentCollectionForServer();
|
|
13
|
+
const history = await collection.listAgentHistory(agentName);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className="container mx-auto p-6 max-w-4xl">
|
|
17
|
+
<header className="flex items-center gap-4 mb-8">
|
|
18
|
+
<div className="bg-blue-100 p-3 rounded-full">
|
|
19
|
+
<HistoryIcon className="w-8 h-8 text-blue-600" />
|
|
20
|
+
</div>
|
|
21
|
+
<div>
|
|
22
|
+
<h1 className="text-3xl font-bold text-gray-900">History: {agentName}</h1>
|
|
23
|
+
<p className="text-gray-600">
|
|
24
|
+
Previous versions of this agent. <Link href={`/agents/${agentName}`} className="text-blue-600 hover:underline">Back to agent</Link>
|
|
25
|
+
</p>
|
|
26
|
+
</div>
|
|
27
|
+
</header>
|
|
28
|
+
|
|
29
|
+
{history.length === 0 ? (
|
|
30
|
+
<div className="text-center py-12 bg-gray-50 rounded-lg border border-dashed border-gray-300">
|
|
31
|
+
<p className="text-gray-500 text-lg">No history found</p>
|
|
32
|
+
</div>
|
|
33
|
+
) : (
|
|
34
|
+
<div className="relative border-l border-gray-200 ml-4">
|
|
35
|
+
{history.map((item, index) => (
|
|
36
|
+
<div key={item.id} className="mb-8 ml-6">
|
|
37
|
+
<span className="absolute flex items-center justify-center w-6 h-6 bg-blue-100 rounded-full -left-3 ring-8 ring-white">
|
|
38
|
+
<span className="w-3 h-3 bg-blue-600 rounded-full"></span>
|
|
39
|
+
</span>
|
|
40
|
+
<div className="p-4 bg-white border border-gray-200 rounded-lg shadow-sm">
|
|
41
|
+
<div className="flex justify-between items-start mb-2">
|
|
42
|
+
<div>
|
|
43
|
+
<time className="block mb-1 text-sm font-normal leading-none text-gray-400">
|
|
44
|
+
{new Date(item.createdAt).toLocaleString()}
|
|
45
|
+
</time>
|
|
46
|
+
<h3 className="text-lg font-semibold text-gray-900">
|
|
47
|
+
Version {history.length - index}
|
|
48
|
+
</h3>
|
|
49
|
+
<p className="text-sm text-gray-500">
|
|
50
|
+
Hash: <code className="bg-gray-100 px-1 rounded">{item.agentHash.substring(0, 8)}</code>
|
|
51
|
+
</p>
|
|
52
|
+
</div>
|
|
53
|
+
<RestoreVersionButton agentName={agentName} historyId={item.id} />
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
))}
|
|
58
|
+
</div>
|
|
59
|
+
)}
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { PROMPTBOOK_COLOR } from '@promptbook-local/core';
|
|
2
|
+
import { serializeError } from '@promptbook-local/utils';
|
|
3
|
+
import { ImageResponse } from 'next/og';
|
|
4
|
+
import { assertsError } from '../../../../../../../../src/errors/assertsError';
|
|
5
|
+
import { Color } from '../../../../../../../../src/utils/color/Color';
|
|
6
|
+
import { keepUnused } from '../../../../../../../../src/utils/organization/keepUnused';
|
|
7
|
+
import { getAgentName, getAgentProfile } from '../../_utils';
|
|
8
|
+
|
|
9
|
+
const size = {
|
|
10
|
+
width: 256,
|
|
11
|
+
height: 256,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export async function GET(request: Request, { params }: { params: Promise<{ agentName: string }> }) {
|
|
15
|
+
keepUnused(request /* <- Note: We dont need `request` parameter */);
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
const agentName = await getAgentName(params);
|
|
19
|
+
const agentProfile = await getAgentProfile(agentName);
|
|
20
|
+
const agentColor = Color.from(agentProfile.meta.color || PROMPTBOOK_COLOR);
|
|
21
|
+
|
|
22
|
+
return new ImageResponse(
|
|
23
|
+
(
|
|
24
|
+
<div
|
|
25
|
+
style={{
|
|
26
|
+
width: '100%',
|
|
27
|
+
height: '100%',
|
|
28
|
+
backgroundColor: 'transparent',
|
|
29
|
+
display: 'flex',
|
|
30
|
+
alignItems: 'center',
|
|
31
|
+
justifyContent: 'center',
|
|
32
|
+
borderRadius: '50%',
|
|
33
|
+
overflow: 'hidden',
|
|
34
|
+
}}
|
|
35
|
+
>
|
|
36
|
+
<div
|
|
37
|
+
style={{
|
|
38
|
+
width: '100%',
|
|
39
|
+
height: '100%',
|
|
40
|
+
backgroundColor: agentColor.toHex(),
|
|
41
|
+
display: 'flex',
|
|
42
|
+
alignItems: 'center',
|
|
43
|
+
justifyContent: 'center',
|
|
44
|
+
}}
|
|
45
|
+
>
|
|
46
|
+
{/* Note: `next/image` is not working propperly with `next/og` */}
|
|
47
|
+
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
48
|
+
<img src={agentProfile.meta.image!} alt="Agent Icon" />
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
),
|
|
52
|
+
{
|
|
53
|
+
...size,
|
|
54
|
+
emoji: 'openmoji',
|
|
55
|
+
},
|
|
56
|
+
);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
assertsError(error);
|
|
59
|
+
|
|
60
|
+
console.error(error);
|
|
61
|
+
|
|
62
|
+
return new Response(
|
|
63
|
+
JSON.stringify(
|
|
64
|
+
serializeError(error),
|
|
65
|
+
// <- TODO: [🐱🚀] Rename `serializeError` to `errorToJson`
|
|
66
|
+
null,
|
|
67
|
+
4,
|
|
68
|
+
// <- TODO: [🐱🚀] Allow to configure pretty print for agent server
|
|
69
|
+
),
|
|
70
|
+
{
|
|
71
|
+
status: 400, // <- TODO: [🐱🚀] Make `errorToHttpStatusCode`
|
|
72
|
+
headers: { 'Content-Type': 'application/json' },
|
|
73
|
+
},
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* TODO: [🦚] DRY
|
|
80
|
+
*/
|