@promptbook/cli 0.103.0-1 → 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.
Files changed (457) hide show
  1. package/README.md +153 -89
  2. package/apps/agents-server/README.md +3 -0
  3. package/apps/agents-server/TODO.txt +7 -0
  4. package/apps/agents-server/config.ts +128 -0
  5. package/apps/agents-server/next.config.ts +45 -0
  6. package/apps/agents-server/package-lock.json +1163 -0
  7. package/apps/agents-server/package.json +18 -0
  8. package/apps/agents-server/postcss.config.mjs +8 -0
  9. package/apps/agents-server/public/.gitkeep +0 -0
  10. package/apps/agents-server/public/favicon.ico +0 -0
  11. package/apps/agents-server/public/fonts/OpenMoji-black-glyf.woff2 +0 -0
  12. package/apps/agents-server/public/fonts/download-font.js +22 -0
  13. package/apps/agents-server/public/logo-blue-white-256.png +0 -0
  14. package/apps/agents-server/public/sw.js +16 -0
  15. package/apps/agents-server/src/app/AddAgentButton.tsx +41 -0
  16. package/apps/agents-server/src/app/[agentName]/[...rest]/page.tsx +11 -0
  17. package/apps/agents-server/src/app/[agentName]/page.tsx +1 -0
  18. package/apps/agents-server/src/app/actions.ts +51 -0
  19. package/apps/agents-server/src/app/admin/api-tokens/ApiTokensClient.tsx +186 -0
  20. package/apps/agents-server/src/app/admin/api-tokens/page.tsx +13 -0
  21. package/apps/agents-server/src/app/admin/chat-feedback/ChatFeedbackClient.tsx +614 -0
  22. package/apps/agents-server/src/app/admin/chat-feedback/page.tsx +22 -0
  23. package/apps/agents-server/src/app/admin/chat-history/ChatHistoryClient.tsx +634 -0
  24. package/apps/agents-server/src/app/admin/chat-history/page.tsx +21 -0
  25. package/apps/agents-server/src/app/admin/metadata/MetadataClient.tsx +477 -0
  26. package/apps/agents-server/src/app/admin/metadata/page.tsx +13 -0
  27. package/apps/agents-server/src/app/admin/models/page.tsx +22 -0
  28. package/apps/agents-server/src/app/admin/users/[userId]/UserDetailClient.tsx +131 -0
  29. package/apps/agents-server/src/app/admin/users/[userId]/page.tsx +21 -0
  30. package/apps/agents-server/src/app/admin/users/page.tsx +18 -0
  31. package/apps/agents-server/src/app/agents/[agentName]/AgentChatWrapper.tsx +78 -0
  32. package/apps/agents-server/src/app/agents/[agentName]/AgentOptionsMenu.tsx +216 -0
  33. package/apps/agents-server/src/app/agents/[agentName]/AgentProfileChat.tsx +78 -0
  34. package/apps/agents-server/src/app/agents/[agentName]/AgentProfileView.tsx +233 -0
  35. package/apps/agents-server/src/app/agents/[agentName]/AgentQrCode.tsx +55 -0
  36. package/apps/agents-server/src/app/agents/[agentName]/AgentUrlCopy.tsx +40 -0
  37. package/apps/agents-server/src/app/agents/[agentName]/ClearAgentChatFeedbackButton.tsx +63 -0
  38. package/apps/agents-server/src/app/agents/[agentName]/ClearAgentChatHistoryButton.tsx +63 -0
  39. package/apps/agents-server/src/app/agents/[agentName]/CloneAgentButton.tsx +41 -0
  40. package/apps/agents-server/src/app/agents/[agentName]/CopyField.tsx +44 -0
  41. package/apps/agents-server/src/app/agents/[agentName]/InstallPwaButton.tsx +74 -0
  42. package/apps/agents-server/src/app/agents/[agentName]/QrCodeModal.tsx +90 -0
  43. package/apps/agents-server/src/app/agents/[agentName]/ServiceWorkerRegister.tsx +24 -0
  44. package/apps/agents-server/src/app/agents/[agentName]/TODO.txt +1 -0
  45. package/apps/agents-server/src/app/agents/[agentName]/_utils.ts +19 -0
  46. package/apps/agents-server/src/app/agents/[agentName]/agentLinks.tsx +80 -0
  47. package/apps/agents-server/src/app/agents/[agentName]/api/agents/route.ts +67 -0
  48. package/apps/agents-server/src/app/agents/[agentName]/api/book/route.ts +88 -0
  49. package/apps/agents-server/src/app/agents/[agentName]/api/book/test.http +37 -0
  50. package/apps/agents-server/src/app/agents/[agentName]/api/chat/route.ts +174 -0
  51. package/apps/agents-server/src/app/agents/[agentName]/api/feedback/route.ts +54 -0
  52. package/apps/agents-server/src/app/agents/[agentName]/api/mcp/route.ts +203 -0
  53. package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/TODO.txt +1 -0
  54. package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/route.ts +55 -0
  55. package/apps/agents-server/src/app/agents/[agentName]/api/modelRequirements/systemMessage/route.ts +47 -0
  56. package/apps/agents-server/src/app/agents/[agentName]/api/openai/chat/completions/route.ts +10 -0
  57. package/apps/agents-server/src/app/agents/[agentName]/api/openai/models/route.ts +93 -0
  58. package/apps/agents-server/src/app/agents/[agentName]/api/openai/v1/chat/completions/route.ts +10 -0
  59. package/apps/agents-server/src/app/agents/[agentName]/api/openai/v1/models/route.ts +93 -0
  60. package/apps/agents-server/src/app/agents/[agentName]/api/openrouter/chat/completions/route.ts +10 -0
  61. package/apps/agents-server/src/app/agents/[agentName]/api/profile/route.ts +76 -0
  62. package/apps/agents-server/src/app/agents/[agentName]/api/voice/route.ts +181 -0
  63. package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorWrapper.tsx +139 -0
  64. package/apps/agents-server/src/app/agents/[agentName]/book/page.tsx +35 -0
  65. package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChat.tsx +75 -0
  66. package/apps/agents-server/src/app/agents/[agentName]/book+chat/AgentBookAndChatComponent.tsx.todo +160 -0
  67. package/apps/agents-server/src/app/agents/[agentName]/book+chat/page.tsx +32 -0
  68. package/apps/agents-server/src/app/agents/[agentName]/book+chat/page.tsx.todo +21 -0
  69. package/apps/agents-server/src/app/agents/[agentName]/chat/AgentChatWrapper.tsx +68 -0
  70. package/apps/agents-server/src/app/agents/[agentName]/chat/page.tsx +33 -0
  71. package/apps/agents-server/src/app/agents/[agentName]/generateAgentMetadata.ts +42 -0
  72. package/apps/agents-server/src/app/agents/[agentName]/history/RestoreVersionButton.tsx +46 -0
  73. package/apps/agents-server/src/app/agents/[agentName]/history/actions.ts +12 -0
  74. package/apps/agents-server/src/app/agents/[agentName]/history/page.tsx +62 -0
  75. package/apps/agents-server/src/app/agents/[agentName]/images/icon-256.png/route.tsx +80 -0
  76. package/apps/agents-server/src/app/agents/[agentName]/images/screenshot-fullhd.png/route.tsx +92 -0
  77. package/apps/agents-server/src/app/agents/[agentName]/images/screenshot-phone.png/route.tsx +92 -0
  78. package/apps/agents-server/src/app/agents/[agentName]/integration/SdkCodeTabs.tsx +31 -0
  79. package/apps/agents-server/src/app/agents/[agentName]/integration/page.tsx +302 -0
  80. package/apps/agents-server/src/app/agents/[agentName]/links/page.tsx +182 -0
  81. package/apps/agents-server/src/app/agents/[agentName]/opengraph-image.tsx +102 -0
  82. package/apps/agents-server/src/app/agents/[agentName]/page.tsx +159 -0
  83. package/apps/agents-server/src/app/agents/[agentName]/website-integration/page.tsx +61 -0
  84. package/apps/agents-server/src/app/agents/page.tsx +11 -0
  85. package/apps/agents-server/src/app/api/agents/[agentName]/clone/route.ts +47 -0
  86. package/apps/agents-server/src/app/api/agents/[agentName]/route.ts +19 -0
  87. package/apps/agents-server/src/app/api/agents/route.ts +43 -0
  88. package/apps/agents-server/src/app/api/api-tokens/route.ts +76 -0
  89. package/apps/agents-server/src/app/api/auth/change-password/route.ts +75 -0
  90. package/apps/agents-server/src/app/api/auth/login/route.ts +27 -0
  91. package/apps/agents-server/src/app/api/auth/logout/route.ts +7 -0
  92. package/apps/agents-server/src/app/api/chat/route.ts +32 -0
  93. package/apps/agents-server/src/app/api/chat-feedback/[id]/route.ts +38 -0
  94. package/apps/agents-server/src/app/api/chat-feedback/export/route.ts +55 -0
  95. package/apps/agents-server/src/app/api/chat-feedback/route.ts +157 -0
  96. package/apps/agents-server/src/app/api/chat-history/[id]/route.ts +37 -0
  97. package/apps/agents-server/src/app/api/chat-history/export/route.ts +55 -0
  98. package/apps/agents-server/src/app/api/chat-history/route.ts +147 -0
  99. package/apps/agents-server/src/app/api/chat-streaming/route.ts +48 -0
  100. package/apps/agents-server/src/app/api/embed.js/route.ts +93 -0
  101. package/apps/agents-server/src/app/api/federated-agents/route.ts +17 -0
  102. package/apps/agents-server/src/app/api/long-running-task/route.ts +7 -0
  103. package/apps/agents-server/src/app/api/long-streaming/route.ts +20 -0
  104. package/apps/agents-server/src/app/api/metadata/route.ts +116 -0
  105. package/apps/agents-server/src/app/api/openai/v1/chat/completions/route.ts +6 -0
  106. package/apps/agents-server/src/app/api/openai/v1/models/route.ts +65 -0
  107. package/apps/agents-server/src/app/api/upload/route.ts +83 -0
  108. package/apps/agents-server/src/app/api/users/[username]/route.ts +75 -0
  109. package/apps/agents-server/src/app/api/users/route.ts +71 -0
  110. package/apps/agents-server/src/app/docs/[docId]/page.tsx +43 -0
  111. package/apps/agents-server/src/app/docs/page.tsx +59 -0
  112. package/apps/agents-server/src/app/embed/page.tsx +24 -0
  113. package/apps/agents-server/src/app/globals.css +276 -0
  114. package/apps/agents-server/src/app/layout.tsx +124 -0
  115. package/apps/agents-server/src/app/manifest.ts +109 -0
  116. package/apps/agents-server/src/app/not-found.tsx +5 -0
  117. package/apps/agents-server/src/app/page.tsx +96 -0
  118. package/apps/agents-server/src/app/recycle-bin/RestoreAgentButton.tsx +40 -0
  119. package/apps/agents-server/src/app/recycle-bin/actions.ts +27 -0
  120. package/apps/agents-server/src/app/recycle-bin/page.tsx +58 -0
  121. package/apps/agents-server/src/app/restricted/page.tsx +33 -0
  122. package/apps/agents-server/src/app/test/og-image/README.md +1 -0
  123. package/apps/agents-server/src/app/test/og-image/opengraph-image.tsx +37 -0
  124. package/apps/agents-server/src/app/test/og-image/page.tsx +22 -0
  125. package/apps/agents-server/src/components/Auth/AuthControls.tsx +123 -0
  126. package/apps/agents-server/src/components/ChangePasswordDialog/ChangePasswordDialog.tsx +41 -0
  127. package/apps/agents-server/src/components/ChangePasswordForm/ChangePasswordForm.tsx +159 -0
  128. package/apps/agents-server/src/components/DocumentationContent/DocumentationContent.tsx +87 -0
  129. package/apps/agents-server/src/components/ErrorPage/ErrorPage.tsx +33 -0
  130. package/apps/agents-server/src/components/Footer/Footer.tsx +175 -0
  131. package/apps/agents-server/src/components/ForbiddenPage/ForbiddenPage.tsx +15 -0
  132. package/apps/agents-server/src/components/Header/Header.tsx +593 -0
  133. package/apps/agents-server/src/components/Homepage/AgentCard.tsx +60 -0
  134. package/apps/agents-server/src/components/Homepage/AgentsList.tsx +58 -0
  135. package/apps/agents-server/src/components/Homepage/Card.tsx +18 -0
  136. package/apps/agents-server/src/components/Homepage/ExternalAgentsSection.tsx +21 -0
  137. package/apps/agents-server/src/components/Homepage/ExternalAgentsSectionClient.tsx +183 -0
  138. package/apps/agents-server/src/components/Homepage/ModelCard.tsx +29 -0
  139. package/apps/agents-server/src/components/Homepage/ModelsSection.tsx +75 -0
  140. package/apps/agents-server/src/components/Homepage/Section.tsx +17 -0
  141. package/apps/agents-server/src/components/Homepage/TechInfoCard.tsx +20 -0
  142. package/apps/agents-server/src/components/LayoutWrapper/LayoutWrapper.tsx +53 -0
  143. package/apps/agents-server/src/components/LoginDialog/LoginDialog.tsx +41 -0
  144. package/apps/agents-server/src/components/LoginForm/LoginForm.tsx +109 -0
  145. package/apps/agents-server/src/components/NotFoundPage/NotFoundPage.tsx +17 -0
  146. package/apps/agents-server/src/components/OpenMojiIcon/OpenMojiIcon.tsx +20 -0
  147. package/apps/agents-server/src/components/Portal/Portal.tsx +38 -0
  148. package/apps/agents-server/src/components/PrintButton/PrintButton.tsx +18 -0
  149. package/apps/agents-server/src/components/PrintHeader/PrintHeader.tsx +18 -0
  150. package/apps/agents-server/src/components/UsersList/UsersList.tsx +141 -0
  151. package/apps/agents-server/src/components/UsersList/useUsersAdmin.ts +139 -0
  152. package/apps/agents-server/src/components/VercelDeploymentCard/VercelDeploymentCard.tsx +55 -0
  153. package/apps/agents-server/src/database/$getTableName.ts +18 -0
  154. package/apps/agents-server/src/database/$provideSupabase.ts +29 -0
  155. package/apps/agents-server/src/database/$provideSupabaseForBrowser.ts +41 -0
  156. package/apps/agents-server/src/database/$provideSupabaseForServer.ts +48 -0
  157. package/apps/agents-server/src/database/$provideSupabaseForWorker.ts +43 -0
  158. package/apps/agents-server/src/database/getMetadata.ts +31 -0
  159. package/apps/agents-server/src/database/metadataDefaults.ts +69 -0
  160. package/apps/agents-server/src/database/migrate.ts +131 -0
  161. package/apps/agents-server/src/database/migrations/2025-11-0001-initial-schema.sql +163 -0
  162. package/apps/agents-server/src/database/migrations/2025-11-0002-metadata-table.sql +16 -0
  163. package/apps/agents-server/src/database/migrations/2025-12-0010-llm-cache.sql +12 -0
  164. package/apps/agents-server/src/database/migrations/2025-12-0060-api-tokens.sql +13 -0
  165. package/apps/agents-server/src/database/migrations/2025-12-0070-chat-history-source.sql +2 -0
  166. package/apps/agents-server/src/database/schema.ts +308 -0
  167. package/apps/agents-server/src/deamons/longRunningTask.ts +37 -0
  168. package/apps/agents-server/src/middleware.ts +301 -0
  169. package/apps/agents-server/src/tools/$provideAgentCollectionForServer.ts +54 -0
  170. package/apps/agents-server/src/tools/$provideCdnForServer.ts +24 -0
  171. package/apps/agents-server/src/tools/$provideExecutionToolsForServer.ts +117 -0
  172. package/apps/agents-server/src/tools/$provideOpenAiAssistantExecutionToolsForServer.ts +35 -0
  173. package/apps/agents-server/src/tools/$provideServer.ts +39 -0
  174. package/apps/agents-server/src/utils/auth.ts +33 -0
  175. package/apps/agents-server/src/utils/authenticateUser.ts +42 -0
  176. package/apps/agents-server/src/utils/cache/SupabaseCacheStorage.ts +55 -0
  177. package/apps/agents-server/src/utils/cdn/classes/VercelBlobStorage.ts +63 -0
  178. package/apps/agents-server/src/utils/cdn/interfaces/IFilesStorage.ts +32 -0
  179. package/apps/agents-server/src/utils/cdn/interfaces/IStorage.ts +14 -0
  180. package/apps/agents-server/src/utils/cdn/utils/getUserFileCdnKey.ts +28 -0
  181. package/apps/agents-server/src/utils/cdn/utils/nameToSubfolderPath.ts +9 -0
  182. package/apps/agents-server/src/utils/cdn/utils/nextRequestToNodeRequest.ts +27 -0
  183. package/apps/agents-server/src/utils/chatFeedbackAdmin.ts +96 -0
  184. package/apps/agents-server/src/utils/chatHistoryAdmin.ts +96 -0
  185. package/apps/agents-server/src/utils/convertToCsv.ts +31 -0
  186. package/apps/agents-server/src/utils/getCurrentUser.ts +32 -0
  187. package/apps/agents-server/src/utils/getEffectiveFederatedServers.ts +22 -0
  188. package/apps/agents-server/src/utils/getFederatedAgents.ts +89 -0
  189. package/apps/agents-server/src/utils/getFederatedServersFromMetadata.ts +10 -0
  190. package/apps/agents-server/src/utils/getVisibleCommitmentDefinitions.ts +12 -0
  191. package/apps/agents-server/src/utils/handleChatCompletion.ts +355 -0
  192. package/apps/agents-server/src/utils/isIpAllowed.ts +101 -0
  193. package/apps/agents-server/src/utils/isUserAdmin.ts +31 -0
  194. package/apps/agents-server/src/utils/resolveInheritedAgentSource.ts +100 -0
  195. package/apps/agents-server/src/utils/session.ts +50 -0
  196. package/apps/agents-server/src/utils/validateApiKey.ts +128 -0
  197. package/apps/agents-server/src/utils/validators/validateMimeType.ts +24 -0
  198. package/apps/agents-server/tailwind.config.ts +26 -0
  199. package/apps/agents-server/tsconfig.json +29 -0
  200. package/apps/agents-server/vercel.json +7 -0
  201. package/esm/index.es.js +5114 -383
  202. package/esm/index.es.js.map +1 -1
  203. package/esm/typings/books/index.d.ts +0 -81
  204. package/esm/typings/servers.d.ts +9 -7
  205. package/esm/typings/src/_packages/browser.index.d.ts +6 -0
  206. package/esm/typings/src/_packages/cli.index.d.ts +4 -0
  207. package/esm/typings/src/_packages/components.index.d.ts +20 -8
  208. package/esm/typings/src/_packages/core.index.d.ts +58 -18
  209. package/esm/typings/src/_packages/node.index.d.ts +2 -2
  210. package/esm/typings/src/_packages/remote-server.index.d.ts +2 -0
  211. package/esm/typings/src/_packages/types.index.d.ts +58 -8
  212. package/esm/typings/src/_packages/utils.index.d.ts +6 -0
  213. package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
  214. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +19 -5
  215. package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +17 -1
  216. package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +3 -2
  217. package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
  218. package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +3 -3
  219. package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
  220. package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
  221. package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +18 -0
  222. package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
  223. package/esm/typings/src/book-2.0/agent-source/string_book.d.ts +3 -0
  224. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfile.d.ts +10 -0
  225. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfileTooltip.d.ts +15 -0
  226. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +83 -8
  227. package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +14 -0
  228. package/esm/typings/src/book-components/BookEditor/BookEditorMonaco.d.ts +5 -0
  229. package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +14 -0
  230. package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
  231. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +10 -0
  232. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
  233. package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
  234. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
  235. package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
  236. package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
  237. package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
  238. package/esm/typings/src/book-components/Chat/types/ChatParticipant.d.ts +5 -0
  239. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgent.d.ts +29 -0
  240. package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
  241. package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
  242. package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
  243. package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
  244. package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
  245. package/esm/typings/src/book-components/_common/HamburgerMenu/HamburgerMenu.d.ts +12 -0
  246. package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +13 -0
  247. package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
  248. package/esm/typings/src/book-components/_common/react-utils/classNames.d.ts +1 -1
  249. package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
  250. package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
  251. package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
  252. package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
  253. package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
  254. package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
  255. package/esm/typings/src/book-components/icons/MicIcon.d.ts +8 -0
  256. package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
  257. package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
  258. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  259. package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
  260. package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
  261. package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
  262. package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
  263. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  264. package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
  265. package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
  266. package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
  267. package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
  268. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
  269. package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +12 -0
  270. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +75 -0
  271. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
  272. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +154 -0
  273. package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
  274. package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
  275. package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
  276. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
  277. package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
  278. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts +1 -0
  279. package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
  280. package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
  281. package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
  282. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
  283. package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +5 -1
  284. package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +35 -0
  285. package/esm/typings/src/commitments/COMPONENT/COMPONENT.d.ts +28 -0
  286. package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +5 -1
  287. package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +5 -1
  288. package/esm/typings/src/commitments/FROM/FROM.d.ts +34 -0
  289. package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +5 -1
  290. package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +5 -5
  291. package/esm/typings/src/commitments/LANGUAGE/LANGUAGE.d.ts +35 -0
  292. package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +5 -1
  293. package/esm/typings/src/commitments/MESSAGE/AgentMessageCommitmentDefinition.d.ts +32 -0
  294. package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +32 -0
  295. package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +5 -1
  296. package/esm/typings/src/commitments/MESSAGE/UserMessageCommitmentDefinition.d.ts +32 -0
  297. package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +5 -1
  298. package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +48 -0
  299. package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
  300. package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +5 -1
  301. package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +5 -1
  302. package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +5 -1
  303. package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +5 -1
  304. package/esm/typings/src/commitments/OPEN/OPEN.d.ts +35 -0
  305. package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +5 -1
  306. package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +5 -1
  307. package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +5 -1
  308. package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +5 -1
  309. package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +5 -1
  310. package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
  311. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +38 -0
  312. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
  313. package/esm/typings/src/commitments/USE_MCP/USE_MCP.d.ts +37 -0
  314. package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
  315. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +8 -2
  316. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +6 -1
  317. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +5 -1
  318. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
  319. package/esm/typings/src/commitments/index.d.ts +93 -0
  320. package/esm/typings/src/config.d.ts +24 -3
  321. package/esm/typings/src/conversion/validation/validatePipeline.d.ts +2 -0
  322. package/esm/typings/src/errors/0-index.d.ts +6 -0
  323. package/esm/typings/src/errors/DatabaseError.d.ts +12 -0
  324. package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
  325. package/esm/typings/src/errors/WrappedError.d.ts +2 -2
  326. package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
  327. package/esm/typings/src/execution/Executables.d.ts +3 -0
  328. package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
  329. package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
  330. package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
  331. package/esm/typings/src/execution/LlmExecutionTools.d.ts +21 -1
  332. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
  333. package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
  334. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
  335. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
  336. package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
  337. package/esm/typings/src/execution/utils/validatePromptResult.d.ts +2 -0
  338. package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
  339. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
  340. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
  341. package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
  342. package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
  343. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -0
  344. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -0
  345. package/esm/typings/src/llm-providers/agent/Agent.d.ts +70 -0
  346. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +26 -4
  347. package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +19 -0
  348. package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +17 -0
  349. package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +50 -0
  350. package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
  351. package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
  352. package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
  353. package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
  354. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +60 -2
  355. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
  356. package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
  357. package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
  358. package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
  359. package/esm/typings/src/pipeline/validatePipelineString.d.ts +2 -0
  360. package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
  361. package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
  362. package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +1 -0
  363. package/esm/typings/src/remote-server/startAgentServer.d.ts +26 -0
  364. package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
  365. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +3 -8
  366. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
  367. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
  368. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
  369. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
  370. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
  371. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
  372. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
  373. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
  374. package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
  375. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
  376. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
  377. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
  378. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
  379. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
  380. package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
  381. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
  382. package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +33 -0
  383. package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
  384. package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
  385. package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +16 -0
  386. package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
  387. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +16 -0
  388. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
  389. package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
  390. package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
  391. package/esm/typings/src/types/LlmCall.d.ts +20 -0
  392. package/esm/typings/src/types/Updatable.d.ts +19 -0
  393. package/esm/typings/src/types/typeAliases.d.ts +32 -2
  394. package/esm/typings/src/utils/color/$randomColor.d.ts +1 -0
  395. package/esm/typings/src/utils/color/Color.d.ts +15 -0
  396. package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
  397. package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
  398. package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
  399. package/esm/typings/src/utils/color/operators/darken.d.ts +1 -1
  400. package/esm/typings/src/utils/color/operators/grayscale.d.ts +1 -1
  401. package/esm/typings/src/utils/color/operators/lighten.d.ts +1 -1
  402. package/esm/typings/src/utils/color/operators/mixWithColor.d.ts +1 -1
  403. package/esm/typings/src/utils/color/operators/saturate.d.ts +1 -1
  404. package/esm/typings/src/utils/environment/$detectRuntimeEnvironment.d.ts +16 -0
  405. package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
  406. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
  407. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
  408. package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
  409. package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
  410. package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
  411. package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
  412. package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +27 -0
  413. package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
  414. package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
  415. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +1 -0
  416. package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
  417. package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
  418. package/esm/typings/src/utils/normalization/normalizeMessageText.d.ts +9 -0
  419. package/esm/typings/src/utils/normalization/normalizeMessageText.test.d.ts +1 -0
  420. package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
  421. package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
  422. package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
  423. package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
  424. package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
  425. package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
  426. package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
  427. package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
  428. package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
  429. package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +25 -0
  430. package/esm/typings/src/utils/random/$randomAgentPersona.d.ts +9 -0
  431. package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +13 -0
  432. package/esm/typings/src/utils/random/$randomItem.d.ts +9 -0
  433. package/esm/typings/src/utils/random/$randomSeed.d.ts +3 -0
  434. package/esm/typings/src/utils/random/$randomToken.d.ts +2 -0
  435. package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
  436. package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
  437. package/esm/typings/src/utils/serialization/serializeToPromptbookJavascript.d.ts +2 -2
  438. package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +2 -0
  439. package/esm/typings/src/version.d.ts +1 -1
  440. package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
  441. package/package.json +15 -15
  442. package/umd/index.umd.js +5089 -356
  443. package/umd/index.umd.js.map +1 -1
  444. package/esm/typings/src/book-2.0/commitments/index.d.ts +0 -60
  445. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +0 -5
  446. package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -10
  447. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
  448. package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
  449. package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
  450. /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → book-2.0/agent-source/computeAgentHash.test.d.ts} +0 -0
  451. /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → book-2.0/agent-source/normalizeAgentName.test.d.ts} +0 -0
  452. /package/esm/typings/src/{collection/constructors/createCollectionFromJson.test.d.ts → book-components/Chat/AgentChat/AgentChat.test.d.ts} +0 -0
  453. /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
  454. /package/esm/typings/src/{commands/_common/parseCommand.test.d.ts → collection/pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
  455. /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
  456. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
  457. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/ParsedCommitment.d.ts +0 -0
@@ -0,0 +1,182 @@
1
+ 'use server';
2
+
3
+ import { $provideServer } from '@/src/tools/$provideServer';
4
+ import { PROMPTBOOK_COLOR } from '@promptbook-local/core';
5
+ import { ArrowLeftIcon, CodeIcon, HomeIcon, LinkIcon, ShareIcon } from 'lucide-react';
6
+ import { headers } from 'next/headers';
7
+ import Link from 'next/link';
8
+ import { notFound } from 'next/navigation';
9
+ import { Color } from '../../../../../../../src/utils/color/Color';
10
+ import { withAlpha } from '../../../../../../../src/utils/color/operators/withAlpha';
11
+ import { $sideEffect } from '../../../../../../../src/utils/organization/$sideEffect';
12
+ import { getAgentExternalLinks, getAgentLinks } from '../agentLinks';
13
+ import { CopyField } from '../CopyField';
14
+ import { getAgentName, getAgentProfile } from '../_utils';
15
+ import { generateAgentMetadata } from '../generateAgentMetadata';
16
+
17
+ export const generateMetadata = generateAgentMetadata;
18
+
19
+ export default async function AgentLinksPage({ params }: { params: Promise<{ agentName: string }> }) {
20
+ $sideEffect(headers());
21
+ const agentName = await getAgentName(params);
22
+
23
+ let agentProfile;
24
+ try {
25
+ agentProfile = await getAgentProfile(agentName);
26
+ } catch (error) {
27
+ if (
28
+ error instanceof Error &&
29
+ (error.message.includes('Cannot coerce the result to a single JSON object') ||
30
+ error.message.includes('JSON object requested, multiple (or no) results returned'))
31
+ ) {
32
+ notFound();
33
+ }
34
+ throw error;
35
+ }
36
+
37
+ const { publicUrl } = await $provideServer();
38
+ const baseUrl = `${publicUrl.href}agents/${encodeURIComponent(agentName)}`;
39
+
40
+ // Extract brand color from meta
41
+ const brandColor = Color.from(agentProfile.meta.color || PROMPTBOOK_COLOR);
42
+ const backgroundColor = (await brandColor.then(withAlpha(0.05))).toHex();
43
+ const borderColor = (await brandColor.then(withAlpha(0.1))).toHex();
44
+ const primaryColor = (await brandColor).toHex();
45
+
46
+ return (
47
+ <div
48
+ className="min-h-screen p-6 md:p-12 flex flex-col items-center"
49
+ style={{
50
+ backgroundColor,
51
+ }}
52
+ >
53
+ <div className="w-full max-w-3xl bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden">
54
+ {/* Header */}
55
+ <div className="p-6 border-b flex items-center gap-4" style={{ borderColor }}>
56
+ {agentProfile.meta.image && (
57
+ // eslint-disable-next-line @next/next/no-img-element
58
+ <img
59
+ src={agentProfile.meta.image as string}
60
+ alt={agentProfile.meta.fullname || agentName}
61
+ className="w-16 h-16 rounded-full object-cover border-2"
62
+ style={{ borderColor: primaryColor }}
63
+ />
64
+ )}
65
+ <div className="flex-1">
66
+ <h1 className="text-2xl font-bold text-gray-900">{agentProfile.meta.fullname || agentName}</h1>
67
+ <p className="text-gray-500 flex items-center gap-2">
68
+ <LinkIcon className="w-4 h-4" />
69
+ Signpost & Links
70
+ </p>
71
+ </div>
72
+ <Link
73
+ href={`/agents/${encodeURIComponent(agentName)}`}
74
+ className="p-2 text-gray-500 hover:text-gray-700 hover:bg-gray-100 rounded-full transition-colors"
75
+ title="Back to Agent"
76
+ >
77
+ <ArrowLeftIcon className="w-6 h-6" />
78
+ </Link>
79
+ </div>
80
+
81
+ <div className="divide-y divide-gray-100">
82
+ {/* API Endpoints */}
83
+ <div className="p-6">
84
+ <h2 className="text-lg font-semibold text-gray-800 mb-4 flex items-center gap-2">
85
+ <CodeIcon className="w-5 h-5 text-gray-500" />
86
+ API Endpoints
87
+ </h2>
88
+ <div className="grid gap-4">
89
+ <div>
90
+ <h3 className="text-sm font-medium text-gray-700 mb-1">
91
+ OpenAI Compatible Chat Completion
92
+ </h3>
93
+ <p className="text-xs text-gray-500 mb-2">
94
+ Standard OpenAI API endpoint for chat completions.
95
+ </p>
96
+ <CopyField label="Endpoint URL" value={`${baseUrl}/api/openai/v1/chat/completions`} />
97
+ </div>
98
+
99
+ <div>
100
+ <h3 className="text-sm font-medium text-gray-700 mb-1">OpenRouter Compatible</h3>
101
+ <p className="text-xs text-gray-500 mb-2">
102
+ Endpoint compatible with OpenRouter API format.
103
+ </p>
104
+ <CopyField label="Endpoint URL" value={`${baseUrl}/api/openrouter/chat/completions`} />
105
+ </div>
106
+
107
+ <div>
108
+ <h3 className="text-sm font-medium text-gray-700 mb-1">Model Context Protocol (MCP)</h3>
109
+ <p className="text-xs text-gray-500 mb-2">
110
+ Endpoint for Model Context Protocol integration.
111
+ </p>
112
+ <CopyField label="Endpoint URL" value={`${baseUrl}/api/mcp`} />
113
+ </div>
114
+
115
+ <div>
116
+ <h3 className="text-sm font-medium text-gray-700 mb-1">Model Requirements</h3>
117
+ <p className="text-xs text-gray-500 mb-2">
118
+ Get requirements and capabilities of the model.
119
+ </p>
120
+ <CopyField label="Endpoint URL" value={`${baseUrl}/api/modelRequirements`} />
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+ {/* Agent Resources */}
126
+ <div className="p-6">
127
+ <h2 className="text-lg font-semibold text-gray-800 mb-4 flex items-center gap-2">
128
+ <HomeIcon className="w-5 h-5 text-gray-500" />
129
+ Agent Resources
130
+ </h2>
131
+ <div className="grid md:grid-cols-2 gap-4">
132
+ {getAgentLinks(agentName)
133
+ .filter((link) =>
134
+ ['Chat with Agent', 'History & Feedback', 'Integration'].includes(link.title),
135
+ )
136
+ .map((link) => (
137
+ <Link
138
+ key={link.href}
139
+ href={link.href}
140
+ className="block p-4 rounded-lg border border-gray-200 hover:border-gray-300 hover:shadow-md transition-all group bg-white"
141
+ >
142
+ <div className="flex items-center gap-3 mb-2">
143
+ <div className="p-2 rounded-lg bg-gray-50 text-gray-600 group-hover:bg-gray-100 transition-colors">
144
+ <link.icon className="w-5 h-5" />
145
+ </div>
146
+ <span className="font-medium text-gray-900">{link.title}</span>
147
+ </div>
148
+ <p className="text-sm text-gray-500">{link.description}</p>
149
+ </Link>
150
+ ))}
151
+ </div>
152
+ </div>
153
+
154
+ {/* Ecosystem */}
155
+ <div className="p-6 bg-gray-50">
156
+ <h2 className="text-lg font-semibold text-gray-800 mb-4 flex items-center gap-2">
157
+ <ShareIcon className="w-5 h-5 text-gray-500" />
158
+ Promptbook Ecosystem
159
+ </h2>
160
+ <div className="grid md:grid-cols-2 gap-4">
161
+ {getAgentExternalLinks().map((link) => (
162
+ <a
163
+ key={link.href}
164
+ href={link.href}
165
+ target={link.target}
166
+ rel={link.rel}
167
+ className="flex items-center gap-3 p-3 rounded-lg bg-white border border-gray-200 hover:border-gray-300 transition-colors"
168
+ >
169
+ <link.icon className="w-5 h-5 text-gray-400" />
170
+ <div>
171
+ <div className="font-medium text-gray-900">{link.title}</div>
172
+ <div className="text-xs text-gray-500">{link.description}</div>
173
+ </div>
174
+ </a>
175
+ ))}
176
+ </div>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ </div>
181
+ );
182
+ }
@@ -0,0 +1,102 @@
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 { textColor } from '../../../../../../src/utils/color/operators/furthest';
7
+ import { grayscale } from '../../../../../../src/utils/color/operators/grayscale';
8
+ import { getAgentName, getAgentProfile } from './_utils';
9
+
10
+ // export const runtime = 'edge';
11
+ // <- Note: On Vercel Edge runtime some modules are not working *(like `crypto`)*
12
+
13
+ export const alt = 'Agent Profile';
14
+ export const size = {
15
+ width: 1200,
16
+ height: 630,
17
+ };
18
+
19
+ export const contentType = 'image/png';
20
+
21
+ export default async function Image({ params }: { params: Promise<{ agentName: string }> }) {
22
+ try {
23
+ const agentName = await getAgentName(params);
24
+ const agentProfile = await getAgentProfile(agentName);
25
+ const agentColor = Color.from(agentProfile.meta.color || PROMPTBOOK_COLOR);
26
+ const backgroundColor = agentColor.then(grayscale(0.5));
27
+
28
+ return new ImageResponse(
29
+ (
30
+ <div
31
+ style={{
32
+ width: '100%',
33
+ height: '100%',
34
+ backgroundColor: backgroundColor.toHex(),
35
+ color: agentColor.then(textColor).toHex(),
36
+ display: 'flex',
37
+ alignItems: 'center',
38
+ justifyContent: 'center',
39
+ }}
40
+ >
41
+ <div
42
+ style={{
43
+ width: '50%',
44
+ display: 'flex',
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ }}
48
+ >
49
+ {/* Note: `next/image` is not working propperly with `next/og` */}
50
+ {/* eslint-disable-next-line @next/next/no-img-element */}
51
+ <img
52
+ style={{
53
+ width: '80%',
54
+ backgroundColor: agentColor.toHex(),
55
+ borderRadius: '50%',
56
+ }}
57
+ src={agentProfile.meta.image!}
58
+ alt="Agent Icon"
59
+ />
60
+ </div>
61
+ <div
62
+ style={{
63
+ width: '50%',
64
+ display: 'flex',
65
+ alignItems: 'center',
66
+ justifyContent: 'center',
67
+ textAlign: 'center',
68
+ }}
69
+ >
70
+ <h1 style={{ fontSize: '100px' }}>{agentProfile.meta.fullname || agentName}</h1>
71
+ </div>
72
+ </div>
73
+ ),
74
+ {
75
+ ...size,
76
+ emoji: 'openmoji',
77
+ },
78
+ );
79
+ } catch (error) {
80
+ assertsError(error);
81
+
82
+ console.error(error);
83
+
84
+ return new Response(
85
+ JSON.stringify(
86
+ serializeError(error),
87
+ // <- TODO: [🐱‍🚀] Rename `serializeError` to `errorToJson`
88
+ null,
89
+ 4,
90
+ // <- TODO: [🐱‍🚀] Allow to configure pretty print for agent server
91
+ ),
92
+ {
93
+ status: 400, // <- TODO: [🐱‍🚀] Make `errorToHttpStatusCode`
94
+ headers: { 'Content-Type': 'application/json' },
95
+ },
96
+ );
97
+ }
98
+ }
99
+
100
+ /**
101
+ * TODO: [🦚] DRY
102
+ */
@@ -0,0 +1,159 @@
1
+ 'use server';
2
+
3
+ import { $provideServer } from '@/src/tools/$provideServer';
4
+ import { isUserAdmin } from '@/src/utils/isUserAdmin';
5
+ import { PROMPTBOOK_COLOR } from '@promptbook-local/core';
6
+ import { notFound } from 'next/navigation';
7
+ import spaceTrim from 'spacetrim';
8
+ import { Color } from '../../../../../../src/utils/color/Color';
9
+ import { darken } from '../../../../../../src/utils/color/operators/darken';
10
+ import { lighten } from '../../../../../../src/utils/color/operators/lighten';
11
+ import { getAgentName, getAgentProfile } from './_utils';
12
+ import { AgentProfileView } from './AgentProfileView';
13
+ import { generateAgentMetadata } from './generateAgentMetadata';
14
+ import { ServiceWorkerRegister } from './ServiceWorkerRegister';
15
+
16
+ export const generateMetadata = generateAgentMetadata;
17
+
18
+ export default async function AgentPage({ params }: { params: Promise<{ agentName: string }> }) {
19
+ const agentName = await getAgentName(params);
20
+ const isAdmin = await isUserAdmin();
21
+
22
+ let agentProfile;
23
+ try {
24
+ agentProfile = await getAgentProfile(agentName);
25
+ } catch (error) {
26
+ if (
27
+ error instanceof Error &&
28
+ // Note: This is a bit hacky, but valid way to check for specific error message
29
+ (error.message.includes('Cannot coerce the result to a single JSON object') ||
30
+ error.message.includes('JSON object requested, multiple (or no) results returned'))
31
+ ) {
32
+ notFound();
33
+ }
34
+ throw error;
35
+ }
36
+
37
+ const { publicUrl } = await $provideServer();
38
+
39
+ // Build agent page URL for QR and copy
40
+ const agentUrl = `${publicUrl.href}${encodeURIComponent(agentName)}`;
41
+ // <- TODO: [🐱‍🚀] Better
42
+
43
+ const agentEmail = `${agentName}@${publicUrl.hostname}`;
44
+
45
+ // Extract brand color from meta and create color variations
46
+ const brandColorString = agentProfile.meta.color || PROMPTBOOK_COLOR.toHex();
47
+ const brandColors = brandColorString.split(',').map((c) => Color.fromSafe(c.trim()));
48
+
49
+ // Ensure at least one color
50
+ if (brandColors.length === 0) {
51
+ brandColors.push(PROMPTBOOK_COLOR);
52
+ }
53
+
54
+ const brandColor = brandColors[0]!;
55
+ const brandColorHex = brandColor.toHex();
56
+ const brandColorLightHex = brandColor.then(lighten(0.2)).toHex();
57
+ const brandColorDarkHex = brandColor.then(darken(0.15)).toHex();
58
+ const brandColorsHex = brandColors.map((c) => c.toHex());
59
+
60
+ // Generate Noisy SVG Background
61
+ const color1 = brandColors[0]!;
62
+ const color2 = brandColors[1] || brandColors[0]!; // Use secondary color or fallback to primary
63
+
64
+ // [🧠] Make colors much lighter for the background as per feedback
65
+ const color1Light = color1.then(lighten(0.3)).toHex();
66
+ const color1Main = color1.toHex();
67
+ const color1Dark = color1.then(darken(0.3)).toHex();
68
+
69
+ const color2Light = color2.then(lighten(0.3)).toHex();
70
+ const color2Main = color2.toHex();
71
+ const color2Dark = color2.then(darken(0.3)).toHex();
72
+
73
+ const svgContent = spaceTrim(`
74
+ <svg xmlns="http://www.w3.org/2000/svg"
75
+ viewBox="0 0 1920 1080"
76
+ width="1920" height="1080"
77
+ preserveAspectRatio="xMidYMid slice">
78
+ <defs>
79
+ <!-- Bottom-left -->
80
+ <radialGradient id="grad1" cx="0%" cy="100%" r="90%">
81
+ <stop offset="0%" stop-color="${color1Light}" />
82
+ <stop offset="50%" stop-color="${color1Main}" />
83
+ <stop offset="100%" stop-color="${color1Dark}" />
84
+ </radialGradient>
85
+
86
+ <!-- Bottom-right -->
87
+ <radialGradient id="grad2" cx="100%" cy="100%" r="90%">
88
+ <stop offset="0%" stop-color="${color2Light}" />
89
+ <stop offset="50%" stop-color="${color2Main}" />
90
+ <stop offset="100%" stop-color="${color2Dark}" />
91
+ </radialGradient>
92
+
93
+ <!-- White top fade -->
94
+ <linearGradient id="whiteTopGrad" x1="0%" y1="0%" x2="0%" y2="100%">
95
+ <stop offset="0%" stop-color="#ffffff" stop-opacity="1" />
96
+ <stop offset="100%" stop-color="#ffffff" stop-opacity="0.3" />
97
+ </linearGradient>
98
+
99
+ <!-- Strong grain -->
100
+ <filter id="grain" x="-10%" y="-10%" width="120%" height="120%">
101
+ <feTurbulence type="fractalNoise" baseFrequency="3.5" numOctaves="3" seed="8" result="noise" />
102
+ <feComponentTransfer>
103
+ <feFuncR type="linear" slope="3.5" intercept="-1.2" />
104
+ <feFuncG type="linear" slope="3.5" intercept="-1.2" />
105
+ <feFuncB type="linear" slope="3.5" intercept="-1.2" />
106
+ <feFuncA type="table" tableValues="0 0.8" />
107
+ </feComponentTransfer>
108
+ </filter>
109
+ </defs>
110
+
111
+ <!-- White base -->
112
+ <rect width="100%" height="100%" fill="#ffffff" />
113
+
114
+ <!-- Gradients -->
115
+ <rect width="100%" height="100%" fill="url(#grad1)" />
116
+ <rect width="100%" height="100%" fill="url(#grad2)" style="mix-blend-mode:screen; opacity:0.85" />
117
+
118
+ <!-- White fade on top -->
119
+ <rect width="100%" height="100%" fill="url(#whiteTopGrad)" />
120
+
121
+ <!-- Strong visible noise -->
122
+ <rect width="100%" height="100%" filter="url(#grain)"
123
+ style="mix-blend-mode:soft-light; opacity:1.2" />
124
+ </svg>
125
+ `);
126
+
127
+ const backgroundImage = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgContent)}`;
128
+
129
+ const fullname = (agentProfile.meta.fullname || agentProfile.agentName || 'Agent') as string;
130
+ const imageUrl = (agentProfile.meta.image as string) || null;
131
+
132
+ return (
133
+ <>
134
+ <ServiceWorkerRegister scope={`/agents/${encodeURIComponent(agentName)}/`} />
135
+ <AgentProfileView
136
+ agentName={agentName}
137
+ fullname={fullname}
138
+ personaDescription={agentProfile.personaDescription || ''}
139
+ imageUrl={imageUrl}
140
+ agentUrl={agentUrl}
141
+ agentEmail={agentEmail}
142
+ brandColorHex={brandColorHex}
143
+ brandColorLightHex={brandColorLightHex}
144
+ brandColorDarkHex={brandColorDarkHex}
145
+ brandColorsHex={brandColorsHex}
146
+ backgroundImage={backgroundImage}
147
+ meta={agentProfile.meta}
148
+ isAdmin={isAdmin}
149
+ />
150
+ </>
151
+ );
152
+ }
153
+
154
+ /**
155
+ * TODO: [🐱‍🚀] Make this page look nice - 🃏
156
+ * TODO: [🐱‍🚀] Show usage of LLM
157
+ * TODO: [🚗] Components and pages here should be just tiny UI wraper around proper agent logic and conponents
158
+ * TODO: [🎣][🧠] Maybe do API / Page for transpilers, Allow to export each agent
159
+ */
@@ -0,0 +1,61 @@
1
+ 'use server';
2
+
3
+ import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
4
+ import { $provideServer } from '@/src/tools/$provideServer';
5
+ import { PromptbookAgent } from '@promptbook-local/components';
6
+ import { parseAgentSource } from '@promptbook-local/core';
7
+ import { headers } from 'next/headers';
8
+ import spaceTrim from 'spacetrim';
9
+ import { $sideEffect } from '../../../../../../../src/utils/organization/$sideEffect';
10
+ import { CodePreview } from '../../../../../../_common/components/CodePreview/CodePreview';
11
+ import { generateAgentMetadata } from '../generateAgentMetadata';
12
+
13
+ export const generateMetadata = generateAgentMetadata;
14
+
15
+ export default async function WebsiteIntegrationAgentPage({ params }: { params: Promise<{ agentName: string }> }) {
16
+ $sideEffect(headers());
17
+ let { agentName } = await params;
18
+ agentName = decodeURIComponent(agentName);
19
+
20
+ const collection = await $provideAgentCollectionForServer();
21
+ const agentSource = await collection.getAgentSource(agentName);
22
+ const { meta } = parseAgentSource(agentSource);
23
+ const { fullname, color, image, ...restMeta } = meta;
24
+ const { publicUrl } = await $provideServer();
25
+ const agentUrl = `${publicUrl.href}agents/${encodeURIComponent(agentName)}`;
26
+
27
+ const code = spaceTrim(
28
+ (block) => `
29
+
30
+ import { PromptbookAgent } from '@promptbook/components';
31
+
32
+ export function YourComponent() {
33
+ return(
34
+ <PromptbookAgent
35
+ agentUrl="${agentUrl}"
36
+ meta={${block(JSON.stringify({ fullname, color, image, ...restMeta }, null, 4))}}
37
+ />
38
+ );
39
+ }
40
+
41
+ `,
42
+ );
43
+
44
+ return (
45
+ <main className="w-screen h-screen p-4">
46
+ <h1 className="text-2xl font-bold p-4 border-b">{meta.fullname || agentName} Integration Code</h1>
47
+ <p className="mt-4 mb-8 text-gray-600">
48
+ Use the following code to integrate the <strong>{meta.fullname || agentName}</strong> agent into your
49
+ React application using the <code>{'<PromptbookAgent />'}</code> component.
50
+ </p>
51
+
52
+ <CodePreview code={code} />
53
+ <PromptbookAgent agentUrl={agentUrl} meta={meta} />
54
+ </main>
55
+ );
56
+ }
57
+
58
+ /**
59
+ * TODO: Make this page better, bring from Promptbook.Studio
60
+ * TODO: [🚗] Components and pages here should be just tiny UI wraper around proper agent logic and conponents
61
+ */
@@ -0,0 +1,11 @@
1
+ 'use server';
2
+
3
+ import HomePage from '../page';
4
+
5
+ export default async function AgentsPage() {
6
+ return <HomePage />;
7
+ }
8
+
9
+ /**
10
+ * TODO: [🐱‍🚀] Distinguish between `/` and `/agents` pages
11
+ */
@@ -0,0 +1,47 @@
1
+ // POST /api/agents/[agentName]/clone
2
+ import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
3
+ import { AgentBasicInformation } from '../../../../../../../../src/book-2.0/agent-source/AgentBasicInformation';
4
+ import { string_book } from '../../../../../../../../src/book-2.0/agent-source/string_book';
5
+ import { TODO_any } from '@promptbook-local/types';
6
+ import { NextResponse } from 'next/server';
7
+
8
+ export async function POST(request: Request, { params }: { params: Promise<{ agentName: string }> }) {
9
+ const { agentName } = await params;
10
+ const collection = await $provideAgentCollectionForServer();
11
+
12
+ try {
13
+ const source = await collection.getAgentSource(agentName);
14
+
15
+ // Generate new name
16
+ // TODO: [🧠] Better naming strategy, maybe check for collisions
17
+ let newAgentName = `${agentName} (Copy)`;
18
+ let counter = 1;
19
+
20
+ // eslint-disable-next-line no-constant-condition
21
+ while (true) {
22
+ try {
23
+ await collection.getAgentSource(newAgentName);
24
+ // If success, it means it exists, so we try next one
25
+ counter++;
26
+ newAgentName = `${agentName} (Copy ${counter})`;
27
+ } catch (error) {
28
+ // If error, it likely means it does not exist (NotFoundError), so we can use it
29
+ // TODO: [🧠] Check if it is really NotFoundError
30
+ break;
31
+ }
32
+ }
33
+
34
+ const lines = source.split('\n');
35
+ lines[0] = newAgentName;
36
+ const newSource = lines.join('\n') as string_book;
37
+
38
+ const newAgent = await collection.createAgent(newSource);
39
+
40
+ return NextResponse.json(newAgent);
41
+ } catch (error) {
42
+ return NextResponse.json(
43
+ { success: false, error: (error as TODO_any)?.message || 'Failed to clone agent' },
44
+ { status: 500 },
45
+ );
46
+ }
47
+ }
@@ -0,0 +1,19 @@
1
+ // DELETE /api/agents/[agentName]
2
+ import { $provideAgentCollectionForServer } from '@/src/tools/$provideAgentCollectionForServer';
3
+ import { TODO_any } from '@promptbook-local/types';
4
+ import { NextResponse } from 'next/server';
5
+
6
+ export async function DELETE(request: Request, { params }: { params: Promise<{ agentName: string }> }) {
7
+ const { agentName } = await params;
8
+ const collection = await $provideAgentCollectionForServer();
9
+
10
+ try {
11
+ await collection.deleteAgent(agentName);
12
+ return NextResponse.json({ success: true });
13
+ } catch (error) {
14
+ return NextResponse.json(
15
+ { success: false, error: (error as TODO_any)?.message || 'Failed to delete agent' },
16
+ { status: 500 },
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,43 @@
1
+ import { $provideServer } from '@/src/tools/$provideServer';
2
+ import { NextResponse } from 'next/server';
3
+ import { $provideAgentCollectionForServer } from '../../../tools/$provideAgentCollectionForServer';
4
+ import { getFederatedServersFromMetadata } from '../../../utils/getFederatedServersFromMetadata';
5
+
6
+ export const dynamic = 'force-dynamic';
7
+
8
+ export async function GET() {
9
+ try {
10
+ const collection = await $provideAgentCollectionForServer();
11
+ const agents = await collection.listAgents();
12
+ const federatedServers = await getFederatedServersFromMetadata();
13
+ const { publicUrl } = await $provideServer();
14
+
15
+ const agentsWithUrl = agents.map((agent) => ({
16
+ ...agent,
17
+ url: `${publicUrl.href}agents/${encodeURIComponent(agent.agentName)}`,
18
+ }));
19
+
20
+ const response = NextResponse.json({
21
+ agents: agentsWithUrl,
22
+ federatedServers,
23
+ });
24
+
25
+ // Add CORS headers
26
+ response.headers.set('Access-Control-Allow-Origin', '*');
27
+ response.headers.set('Access-Control-Allow-Methods', 'GET, OPTIONS');
28
+ response.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
29
+
30
+ return response;
31
+ } catch (error) {
32
+ console.error('Error fetching agents:', error);
33
+ return NextResponse.json({ error: 'Failed to fetch agents' }, { status: 500 });
34
+ }
35
+ }
36
+
37
+ export async function OPTIONS() {
38
+ const response = new NextResponse(null, { status: 200 });
39
+ response.headers.set('Access-Control-Allow-Origin', '*');
40
+ response.headers.set('Access-Control-Allow-Methods', 'GET, OPTIONS');
41
+ response.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
42
+ return response;
43
+ }